At Tue, 16 Oct 2007 10:58:19 +0300, Vasily Khoruzhick wrote:
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).
Original patch: present = snd_hda_codec_read(codec, 0x1a, 0, AC_VERB_GET_PIN_SENSE, 0) & 0x80000000;
Code in alsa (patch-analog.c line 614):
present = snd_hda_codec_read(codec, 0x1a, 0, AC_VERB_GET_PIN_SENSE, 0); spec->jack_present = (present & 0x80000000) != 0;
Seems to have quite different logic, don't it?
I don't see your point. It's the same logic:
If present has bit 0x80000000, spec->jack_present = 1, Otherwise, spec->jack_present = 0.
The problem is that the jack detection of this codec (or specific to the laptop) seems inverse from the standard.
Should be:
present = snd_hda_codec_read(codec, 0x1a, 0, AC_VERB_GET_PIN_SENSE, 0); spec->jack_present = (present & 0x80000000) == 0;
P.S. It's very sad that you've released 1.0.15 with that bug :(
Yes, it's sad. Too late recognized. We'll likely have 1.0.15a release soon later, though.
Takashi