[alsa-devel] Regression for Lenovo X240 sound in 3.18

Takashi Iwai tiwai at suse.de
Mon Feb 9 11:29:54 CET 2015


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 at 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 at inai.de>
Fixes: 7c21539c45ea ('ALSA: hda - Add ultra dock support for Thinkpad X240.')
Cc: <stable at vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai at 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),
-- 
2.2.2




More information about the Alsa-devel mailing list