Comment 27 for bug 1155202

At Wed, 22 Jan 2014 12:32:28 +0100,
David Henningsson wrote:
>
> From: Niraj <email address hidden>
>
> Apparently this board seems to need some extra initialization before a proper
> codec probe value can be read.
>
> BugLink: https://bugs.launchpad.net/bugs/1155202
> Signed-off-by: David Henningsson <email address hidden>
> ---
> sound/pci/hda/hda_intel.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> Hi Takashi,
>
> Here's a patch from Niraj, which has found this code below to make audio work
> on the Intel DZ77SL-50K board. Without it, no codecs will be detected.
>
> I'm not sure if you like it this way or if you want me or Niraj to change
> anything, or debug further. Or maybe add a new quirk for this particular device?

Of course, I don't like this :)

The patch essentially disables the codec reset in *all* cases after a
codec is probed. This smells badly of a future regression.

FWIW, you can set a forced codec probe mask in probe_mask_list[].
The bit 0x100 means to force the detection.

But, before going that direction, could you clarify how this fixes the
probing at all? Which azx_init_chip() calls hinders the probing of an
active codec?

thanks,

Takashi

>
> diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
> index fa2879a..2bf46e9 100644
> --- a/sound/pci/hda/hda_intel.c
> +++ b/sound/pci/hda/hda_intel.c
> @@ -1306,6 +1306,12 @@ static void azx_init_chip(struct azx *chip, int full_reset)
>
> /* reset controller */
> azx_reset(chip, full_reset);
> + if (!chip->codec_mask) {
> + azx_writel(chip, GCTL, 0x100);
> + while(azx_readl(chip, GCTL) != 0x0);
> + azx_writel(chip, GCTL, 0x1);
> + azx_reset(chip, full_reset);
> + }
>
> /* initialize interrupts */
> azx_int_clear(chip);
> --
> 1.7.9.5
>