[alsa-devel] 1.0.15rc3 patch_analog.s bug + fix

Takashi Iwai tiwai at suse.de
Tue Oct 16 13:38:34 CEST 2007


At Mon, 15 Oct 2007 16:34:21 -0400,
Peter Skensved wrote:
> 
> On Mon, Oct 15, 2007 at 01:29:50PM +0200, Takashi Iwai wrote:
> > At Sun, 14 Oct 2007 22:53:03 -0400,
> > Peter Skensved wrote:
> > > 
> > >      Hi,
> > >   I've come across a problem with the 1.0.15rc3 alsa driver on my Lenovo 3000 N100 laptop using
> > > the auto mute feature - it appears to work backwards !  Plugging in the headphones unmutes the
> > > external speakers and unplugging the heaphones mutes them ...
> > > 
> > >   Changing the if statement in line ~600 in patch_analog.c in ad1986a_update_hp to
> > > 
> > >     if (!spec->jack_preset)
> > > 
> > > makes it work the intended way.  ( spec->jack_present changes state  _before_ the call to
> > > ad1986a_hp_automute )
> > 
> > Hmm, the code logic looks correct to me.  If HP jack is present, the
> > internal speaker should be muted.  Otherwise it follows the state of
> > HP jack (muted/unmuted, that acts as a master switch).
> > 
> 
>    Well - in the default mode the jack is present and the internal speakers are permanently
> muted until I plug in a set of headphones no matter how I toggle the speaker mute in the mixer.
> 
>   With headphones plugged in I can mute and unmute the internal speakers in alsa mixer
> 
> 
>   Surely the default cannot be that I have to carry a set of headphones with my
> laptop all the time ???!!???
> 
> 
> > Is jack_present set/reset correctly when HP jack is plugged/unplugged
> > at all?  Or, the pin NID is swapped, or any other reason?
> > 
> 
>   I sprinkled some printk's in the driver :
>  On entry to ad1986a_update_hp :     plugging headphones into jack : spec->jack_present = 0
>                                      removing headphones from jack : spec->jack_present = 1

This implies rather that the jack detection itself is reversed from
the standard.  Could you try the patch below?


thanks,

Takashi

diff -r 29661bff769f pci/hda/patch_analog.c
--- a/pci/hda/patch_analog.c	Mon Oct 15 10:36:45 2007 +0200
+++ b/pci/hda/patch_analog.c	Tue Oct 16 10:38:09 2007 +0200
@@ -612,7 +612,8 @@ static void ad1986a_hp_automute(struct h
 	unsigned int present;
 
 	present = snd_hda_codec_read(codec, 0x1a, 0, AC_VERB_GET_PIN_SENSE, 0);
-	spec->jack_present = (present & 0x80000000) != 0;
+	/* Lenovo N100 seems to report the reversed bit for HP jack-sensing */
+	spec->jack_present = !(present & 0x80000000);
 	ad1986a_update_hp(codec);
 }
 


More information about the Alsa-devel mailing list