[alsa-devel] Possible fix for snd-hda-intel model=no-jd failing since ~linux-3.9-rc1

Takashi Iwai tiwai at suse.de
Thu Sep 11 10:42:03 CEST 2014


At Thu, 11 Sep 2014 00:47:19 -0700,
Adam Richter wrote:
> 
> Hi.
> 
> This is a bug and suggested temporary fix that I originally posted to the linux-sound mailing list about a month and a half ago.  I am grateful to Takashi Awai for informing me after my follow-up inquiry about it today that I should submit it to the alsa-devel mailing list instead.  Please feel free to redirect me further if appropriate.  I did not notice any contact information for sound/pci/hda in
> linux-3.16-rc4/MAINATINERS.
> 
> Anyhow, here is the bug report and a one line proposed temporary fix.
> 
> 
> The "model=no-jd" argument has not initialized the analog audio output jack correctly for me since linux-3.9-rc1 (if I recall correctly) through linux-3.17-rc4, although I have not tried every release candidate in between.
> 
> The symptom is that, on a computer with an analog audio output jack
> that has incorrect jack sense (a hardware bug), audio output is completely muted until I physically replug the cable, even though I specified "model=no-jd" as an argument to the snd-hda-intel kernel module, which is supposed to cause the kernel to ignore the jack sense reported by hardware and just drive the audio output even if the hardware jack sense indicates nothing is plugged in.  This problem did not occur until approximate Linux 3.9-rc1.
> 
> I have found a few single line workarounds that work, of which my
> favorite is the following (also attached to this email, in case any
> mailer subjects this message to reformatting), because it does not add
> code to anything that gets called frequently.
> 
> --- linux-3.17.0-rc4-64bit/sound/pci/hda/hda_jack.c.orig    2014-09-07 16:09:43.000000000 -0700
> +++ linux-3.17.0-rc4-64bit/sound/pci/hda/hda_jack.c    2014-09-10 18:41:53.422900040 -0700
> @@ -106,6 +106,7 @@ snd_hda_jack_tbl_new(struct hda_codec *c
>      jack->nid = nid;
>      jack->jack_dirty = 1;
>      jack->tag = codec->jacktbl.used;
> +    jack->phantom_jack = codec->no_jack_detect;
>      return jack;
>  }
>  EXPORT_SYMBOL_GPL(snd_hda_jack_tbl_new);
> 
> 
> Signed-off-by: Adam J. Richter <adam_richter2004 at yahoo.com>
> 
> 
> I consider this a workaround rather than than a perfect fix, because I
> think the underlying problem seems to be some kind of initialization
> order issue that I don't fully understand.  Basically, by the time
> jack->phantom_jack was being set, some caller had already called
> jack_detect_update(), which loaded the incorrect jack sense result
> from hardware and cleared jack->jack_dirty, so the jack sense would
> not be set again.  At least that is what I think the underlying
> problem probably is.
> 
> Also, if a change like this is to be integrated, I'd like to know if
> it might be better for the line that I added to be:
> 
>           jack->phantom_jack = !is_jack_detectable(codec, nid);
> 
> ...which is what add_jack_kctl does (not sure why add_jack_kctls does
> not, by the way, at the risk of making a spectacle of my ignorance).
> My doubt about this approach is that perhaps is_jack_detectable()
> relies on some initialization that has not occurred at that point.
> 
> Anyhow, I'd like to get the process started of either pushing this
> change upstream or quickly developing a more correct fix.  If a more
> correct fix does not become apparent in the next few days, I would
> recommend pushing the workaround upstream now until some future code
> cleanup, so people will no longer be effected by the bug.
> 
> Any technical input or advice on how to proceed is welcome.  Thanks
> for taking the time to consider this.

Could you give alsa-info.sh output on your machine?  Otherwise it's
difficult to analyze.

Speaking of your patch: add_jack_kctl() itself has a check of
is_jack_detectable() for phantom jacks, so basically this shouldn't
make any difference.  So we need to check more deeply why this change
is really needed.


thanks,

Takashi


> 
> 
> Adam Richter
> --- linux-3.17.0-rc4-64bit/sound/pci/hda/hda_jack.c.orig	2014-09-07 16:09:43.000000000 -0700
> +++ linux-3.17.0-rc4-64bit/sound/pci/hda/hda_jack.c	2014-09-10 18:41:53.422900040 -0700
> @@ -106,6 +106,7 @@ snd_hda_jack_tbl_new(struct hda_codec *c
>  	jack->nid = nid;
>  	jack->jack_dirty = 1;
>  	jack->tag = codec->jacktbl.used;
> +	jack->phantom_jack = codec->no_jack_detect;
>  	return jack;
>  }
>  EXPORT_SYMBOL_GPL(snd_hda_jack_tbl_new);
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel


More information about the Alsa-devel mailing list