diff mbox

Regression for Lenovo X240 sound in 3.18

Message ID s5h4mqvv0m5.wl-tiwai@suse.de (mailing list archive)
State New, archived
Headers show

Commit Message

Takashi Iwai Feb. 9, 2015, 10:29 a.m. UTC
At Sat, 10 Jan 2015 13:10:30 +0100 (CET),
Jan Engelhardt wrote:
> 
> 
> On Wednesday 2014-12-31 09:51, Takashi Iwai wrote:
> >> >
> >> >Ah, I see you disable the automute.  So the headphone plug shouldn't
> >> >matter.
> >> 
> >> Changing the "Auto-Mute" control does not do anything; the system always
> >> exhibits Automute behavior (if that's a bug, it's one which I did not
> >> care about so far).
> >
> >Oh, that's really interesting.  I didn't expect such a
> >hardware-controlled automute nowadays.  We need to investigate this
> >more.
> >[...]
> >[Volumes] On 3.19, this was renamed differently, so that "PCM" can
> >appear again by a softvol item like before.
> 
> On 3.19-rc3+ [eb74926920cfa756087a82e0b081df837177cb95] I confirm
> all the volume bars/switches that went missing for me are back again.
> 
> In particular, 3.19 shows a new "Speaker+LO" no-switch volume bar
> control, and a "Speaker" no-volume switch control. Works for me,
> though I wonder if the change was necessary. (In 3.17, the switch and
> volume were combined in one control.)
> 
> As said, all is fine here.

Sorry, I've forgotten this pending issue.
Could you confirm that the patch below works for you?  Then I'll queue
up for 3.20-rc1 and backport appropriately.


thanks,

Takashi

-- 8< --
From: Takashi Iwai <tiwai@suse.de>
Subject: [PATCH] ALSA: hda - Fix lost sound on Thinkpad X240

The commit [7c21539c45ea: ALSA: hda - Add ultra dock support for
Thinkpad X240] caused a regression, the sound got lost.  The machine
seems requiring the fixed binding between DACs and pins, and the
commit above resulted in the change of binding.  As a fix, this patch
adds the binding list to ensure to connect to the correct DAC.

Reported-by: Jan Engelhardt <jengelh@inai.de>
Fixes: 7c21539c45ea ('ALSA: hda - Add ultra dock support for Thinkpad X240.')
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 sound/pci/hda/patch_realtek.c | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

Comments

David Henningsson Feb. 9, 2015, 12:15 p.m. UTC | #1
X240? Sounds interesting. Taihshiang is currently investigating why the 
external/headset mic does not work on the X240. Is this something you 
experience as well?

// David

On 2015-02-09 11:29, Takashi Iwai wrote:
> At Sat, 10 Jan 2015 13:10:30 +0100 (CET),
> Jan Engelhardt wrote:
>>
>>
>> On Wednesday 2014-12-31 09:51, Takashi Iwai wrote:
>>>>>
>>>>> Ah, I see you disable the automute.  So the headphone plug shouldn't
>>>>> matter.
>>>>
>>>> Changing the "Auto-Mute" control does not do anything; the system always
>>>> exhibits Automute behavior (if that's a bug, it's one which I did not
>>>> care about so far).
>>>
>>> Oh, that's really interesting.  I didn't expect such a
>>> hardware-controlled automute nowadays.  We need to investigate this
>>> more.
>>> [...]
>>> [Volumes] On 3.19, this was renamed differently, so that "PCM" can
>>> appear again by a softvol item like before.
>>
>> On 3.19-rc3+ [eb74926920cfa756087a82e0b081df837177cb95] I confirm
>> all the volume bars/switches that went missing for me are back again.
>>
>> In particular, 3.19 shows a new "Speaker+LO" no-switch volume bar
>> control, and a "Speaker" no-volume switch control. Works for me,
>> though I wonder if the change was necessary. (In 3.17, the switch and
>> volume were combined in one control.)
>>
>> As said, all is fine here.
>
> Sorry, I've forgotten this pending issue.
> Could you confirm that the patch below works for you?  Then I'll queue
> up for 3.20-rc1 and backport appropriately.
>
>
> thanks,
>
> Takashi
>
> -- 8< --
> From: Takashi Iwai <tiwai@suse.de>
> Subject: [PATCH] ALSA: hda - Fix lost sound on Thinkpad X240
>
> The commit [7c21539c45ea: ALSA: hda - Add ultra dock support for
> Thinkpad X240] caused a regression, the sound got lost.  The machine
> seems requiring the fixed binding between DACs and pins, and the
> commit above resulted in the change of binding.  As a fix, this patch
> adds the binding list to ensure to connect to the correct DAC.
>
> Reported-by: Jan Engelhardt <jengelh@inai.de>
> Fixes: 7c21539c45ea ('ALSA: hda - Add ultra dock support for Thinkpad X240.')
> Cc: <stable@vger.kernel.org>
> Signed-off-by: Takashi Iwai <tiwai@suse.de>
> ---
>   sound/pci/hda/patch_realtek.c | 25 ++++++++++++++++++++++++-
>   1 file changed, 24 insertions(+), 1 deletion(-)
>
> diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> index 040306194e6d..dba31bafcd1c 100644
> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
> @@ -4226,6 +4226,22 @@ static void alc269_fixup_limit_int_mic_boost(struct hda_codec *codec,
>   	}
>   }
>
> +/* TP X240 seems to need fixed DAC binding; otherwise sound gets lost */
> +static void alc_fixup_tpx240_dacs(struct hda_codec *codec,
> +				  const struct hda_fixup *fix, int action)
> +{
> +	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
> +		static hda_nid_t preferred_pairs[] = {
> +			0x14, 0x03,
> +			0x15, 0x02,
> +			0x16, 0x02,
> +			0
> +		};
> +		struct alc_spec *spec = codec->spec;
> +		spec->gen.preferred_dacs = preferred_pairs;
> +	}
> +}
> +
>   static void alc283_hp_automute_hook(struct hda_codec *codec,
>   				    struct hda_jack_callback *jack)
>   {
> @@ -4411,6 +4427,7 @@ enum {
>   	ALC255_FIXUP_HEADSET_MODE_NO_HP_MIC,
>   	ALC293_FIXUP_DELL1_MIC_NO_PRESENCE,
>   	ALC292_FIXUP_TPT440_DOCK,
> +	ALC292_FIXUP_TPX240_DOCK,
>   	ALC283_FIXUP_BXBT2807_MIC,
>   	ALC255_FIXUP_DELL_WMI_MIC_MUTE_LED,
>   	ALC282_FIXUP_ASPIRE_V5_PINS,
> @@ -4856,6 +4873,12 @@ static const struct hda_fixup alc269_fixups[] = {
>   		.chained = true,
>   		.chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
>   	},
> +	[ALC292_FIXUP_TPX240_DOCK] = {
> +		.type = HDA_FIXUP_FUNC,
> +		.v.func = alc_fixup_tpx240_dacs,
> +		.chained = true,
> +		.chain_id = ALC292_FIXUP_TPT440_DOCK,
> +	},
>   	[ALC283_FIXUP_BXBT2807_MIC] = {
>   		.type = HDA_FIXUP_PINS,
>   		.v.pins = (const struct hda_pintbl[]) {
> @@ -5026,7 +5049,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
>   	SND_PCI_QUIRK(0x17aa, 0x220e, "Thinkpad T440p", ALC292_FIXUP_TPT440_DOCK),
>   	SND_PCI_QUIRK(0x17aa, 0x2210, "Thinkpad T540p", ALC292_FIXUP_TPT440_DOCK),
>   	SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad T440", ALC292_FIXUP_TPT440_DOCK),
> -	SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad X240", ALC292_FIXUP_TPT440_DOCK),
> +	SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad X240", ALC292_FIXUP_TPX240_DOCK),
>   	SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
>   	SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
>   	SND_PCI_QUIRK(0x17aa, 0x3978, "IdeaPad Y410P", ALC269_FIXUP_NO_SHUTUP),
>
Takashi Iwai Feb. 9, 2015, 12:55 p.m. UTC | #2
At Mon, 9 Feb 2015 12:38:00 +0100 (CET),
Jan Engelhardt wrote:
> 
> 
> On Monday 2015-02-09 11:29, Takashi Iwai wrote:
> >> 
> >> On 3.19-rc3+ [eb74926920cfa756087a82e0b081df837177cb95] I confirm
> >> all the volume bars/switches that went missing for me are back again.
> >> 
> >> As said, all is fine here.
> >
> >Sorry, I've forgotten this pending issue.
> >Could you confirm that the patch below works for you?  Then I'll queue
> >up for 3.20-rc1 and backport appropriately.
> 
> I have no problems with 3.19-rc6.
> Your patch does not appear to break anything, but it does not appear
> to fix something, either. It does change the controls again though.
> I suggest not to apply it.
> 
> http://picpaste.de/3_19_rc6-NgtzogKW.png
> http://picpaste.de/3_19_rc6_YOURPATCH-y6IcoXpE.png

OK, if 3.19 works as is, then there is no reason to change there.


Takashi
Raymond Yau Feb. 10, 2015, 1:49 a.m. UTC | #3
> > >>
> > >> On 3.19-rc3+ [eb74926920cfa756087a82e0b081df837177cb95] I confirm
> > >> all the volume bars/switches that went missing for me are back again.
> > >>
> > >> As said, all is fine here.
> > >
> > >Sorry, I've forgotten this pending issue.
> > >Could you confirm that the patch below works for you?  Then I'll queue
> > >up for 3.20-rc1 and backport appropriately.
> >
> > I have no problems with 3.19-rc6.
> > Your patch does not appear to break anything, but it does not appear
> > to fix something, either. It does change the controls again though.
> > I suggest not to apply it.
> >
> > http://picpaste.de/3_19_rc6-NgtzogKW.png
> > http://picpaste.de/3_19_rc6_YOURPATCH-y6IcoXpE.png
>
> OK, if 3.19 works as is, then there is no reason to change there.
>
> I don't understand why T440P fixup node 0x16 as Dock Headphone Jack but
the driver create Line Out Playback Switch at node 0x16

Do the driver change the type to line out when there are three different
location (int, ext sep and ext left) ?

using hda-emu , when Dock headphone jack is plugged , the pin ctl is OUT
instead of OUT HP
diff mbox

Patch

diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 040306194e6d..dba31bafcd1c 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -4226,6 +4226,22 @@  static void alc269_fixup_limit_int_mic_boost(struct hda_codec *codec,
 	}
 }
 
+/* TP X240 seems to need fixed DAC binding; otherwise sound gets lost */
+static void alc_fixup_tpx240_dacs(struct hda_codec *codec,
+				  const struct hda_fixup *fix, int action)
+{
+	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
+		static hda_nid_t preferred_pairs[] = {
+			0x14, 0x03,
+			0x15, 0x02,
+			0x16, 0x02,
+			0
+		};
+		struct alc_spec *spec = codec->spec;
+		spec->gen.preferred_dacs = preferred_pairs;
+	}
+}
+
 static void alc283_hp_automute_hook(struct hda_codec *codec,
 				    struct hda_jack_callback *jack)
 {
@@ -4411,6 +4427,7 @@  enum {
 	ALC255_FIXUP_HEADSET_MODE_NO_HP_MIC,
 	ALC293_FIXUP_DELL1_MIC_NO_PRESENCE,
 	ALC292_FIXUP_TPT440_DOCK,
+	ALC292_FIXUP_TPX240_DOCK,
 	ALC283_FIXUP_BXBT2807_MIC,
 	ALC255_FIXUP_DELL_WMI_MIC_MUTE_LED,
 	ALC282_FIXUP_ASPIRE_V5_PINS,
@@ -4856,6 +4873,12 @@  static const struct hda_fixup alc269_fixups[] = {
 		.chained = true,
 		.chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
 	},
+	[ALC292_FIXUP_TPX240_DOCK] = {
+		.type = HDA_FIXUP_FUNC,
+		.v.func = alc_fixup_tpx240_dacs,
+		.chained = true,
+		.chain_id = ALC292_FIXUP_TPT440_DOCK,
+	},
 	[ALC283_FIXUP_BXBT2807_MIC] = {
 		.type = HDA_FIXUP_PINS,
 		.v.pins = (const struct hda_pintbl[]) {
@@ -5026,7 +5049,7 @@  static const struct snd_pci_quirk alc269_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x17aa, 0x220e, "Thinkpad T440p", ALC292_FIXUP_TPT440_DOCK),
 	SND_PCI_QUIRK(0x17aa, 0x2210, "Thinkpad T540p", ALC292_FIXUP_TPT440_DOCK),
 	SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad T440", ALC292_FIXUP_TPT440_DOCK),
-	SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad X240", ALC292_FIXUP_TPT440_DOCK),
+	SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad X240", ALC292_FIXUP_TPX240_DOCK),
 	SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
 	SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
 	SND_PCI_QUIRK(0x17aa, 0x3978, "IdeaPad Y410P", ALC269_FIXUP_NO_SHUTUP),