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); } _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel