From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755538Ab3ENF7O (ORCPT ); Tue, 14 May 2013 01:59:14 -0400 Received: from cantor2.suse.de ([195.135.220.15]:53195 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751177Ab3ENF7N (ORCPT ); Tue, 14 May 2013 01:59:13 -0400 Date: Tue, 14 May 2013 07:59:07 +0200 Message-ID: From: Takashi Iwai To: Alex Riesen Cc: alsa-devel@alsa-project.org, Linux Kernel Mailing List Subject: Re: regression: from 3.8 to 3.9: headphones output no sound on Intel HDA, codec VIA VT1802 In-Reply-To: References: User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.8 Emacs/24.2 (x86_64-suse-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org At Mon, 13 May 2013 20:24:42 +0200, Alex Riesen wrote: > > On Mon, May 13, 2013 at 5:53 PM, Takashi Iwai 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