At Mon, 13 May 2013 20:24:42 +0200, Alex Riesen wrote:
On Mon, May 13, 2013 at 5:53 PM, Takashi Iwai tiwai@suse.de wrote:
At Mon, 13 May 2013 17:26:04 +0200, Takashi Iwai wrote:
At Sun, 12 May 2013 11:53:41 +0200, Alex Riesen wrote:
I just noticed (use the headphones rarely) that the headphones on this System76 Lemur Ultra (lemu4) stopped working. There is absolutely no output.
It's strange that the pin 0x25 shows EAPD 0x00 and pin-control 0x00. They should be 0x02 and 0xc0 constantly. Is it taken at the moment the headphone is plugged, right? Please give alsa-info.sh outputs at both the headphone plugged and unplugged.
Attached. Sorry for gzipping, the alsa-devel rejects two at a time: too large.
Could you check whether changing them makes the headphone output working? For example, get hda-verb program (see Documentation/sound/alsa/HD-Audio.txt) and run it like
hda-verb /dev/snd/hwC0D0 0x25 SET_PIN_WID 0xc0 hda-verb /dev/snd/hwC0D0 0x25 SET_EAPD 0x02
It helps, headphones start working.
Also, what happens if you apply the patch below?
spec->set_widgets_power_state = set_widgets_power_state_vt2002P;
//spec->set_widgets_power_state = set_widgets_power_state_vt2002P;
This helps as well. Yay! Thanks :) Whatever the outcome, I have them back more or less (more, for me) properly.
OK, then we know the place to fix now. Try the patch below instead. Does it fix the problem as well?
Probably unrelated, but I better mention it anyway: the "Auto-Mute Mode" works strangely, it never mutes anything but headphones. It might work as designed, but it is useless in this case: one still has to mute the speaker manually when plugging headphones (or do something with input events, which I failed to get to work).
Does the problem still happen with the patch?
And "Independent HP" has absolutely no effect, which is probably as it should be on this laptop.
With the independent HP turned on, there should be no output to the headphone through the normal PCM. There is a secondary PCM device, and this is routed to the headphone when the independent HP is on.
thanks,
Takashi
--- diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c index e0dadcf..09fd395 100644 --- a/sound/pci/hda/patch_via.c +++ b/sound/pci/hda/patch_via.c @@ -1410,6 +1410,7 @@ static void set_widgets_power_state_vt2002P(struct hda_codec *codec) /* outputs */ /* AOW0 (8h)*/ update_power_state(codec, 0x8, parm); + update_power_state(codec, 0x9, parm);
if (spec->codec_type == VT1802) { /* PW4 (28h), MW4 (18h), MUX4(38h) */ @@ -1439,16 +1440,14 @@ static void set_widgets_power_state_vt2002P(struct hda_codec *codec) update_power_state(codec, 0x35, parm); }
- if (spec->gen.indep_hp_enabled) - update_power_state(codec, 0x9, AC_PWRST_D0); - /* Class-D */ /* PW0 (24h), MW0(18h/14h), MUX0(34h) */ present = snd_hda_jack_detect(codec, 0x25);
parm = AC_PWRST_D3; set_pin_power_state(codec, 0x24, &parm); - parm = present ? AC_PWRST_D3 : AC_PWRST_D0; + if (parm == AC_PWRST_D0) + parm = present ? AC_PWRST_D3 : AC_PWRST_D0; if (spec->codec_type == VT1802) update_power_state(codec, 0x14, parm); else