Skip to contentSkip to conversation

Thinkpad hda regression in 3.3

PATCH Josh Boyer 2 participants 14 messages Apr 13, 2012 – Apr 18, 2012 Sound

lore
Share & tools
lore

Josh Boyer

author
#0 lore raw

Hi Takashi and Jaroslav,

We've had a number of bugs reported about sound not working correctly on various models of Thinkpad machines in the 3.3 kernel. I've listed them below.

I looked through the commits and found:

commit 29c5fbbcfefba5225a6783683c46c39e10877703:

ALSA: HDA: Use model=auto for Thinkpad T510

The user reports that model=auto works fine for him. Using model=auto bring in new features such as jack detection notification to userspace.

I did a local build here with that comment reverted and so far most of the people reported their sound to be working again. The trivial revert patch is below in case you want it.

It seems there are multiple models that have PCI ID 17aa:215e and using model=auto does not work for them all. It particularly messes with machines using a docking station for some reason.

Aside from just reverting the above commit, do you have other thoughts on how to fix this?

josh

https://bugzilla.redhat.com/show_bug.cgi?id=808559
https://bugzilla.redhat.com/show_bug.cgi?id=806217
https://bugzilla.redhat.com/show_bug.cgi?id=810697

-----

From: Josh Boyer <[email protected]>
Subject: [PATCH] ALSA: hda - Use model=thinkpad for PCI ID 17aa:215e

Commit 29c5fb "ALSA: HDA: Use model=auto for Thinkpad T510" switched to using model=auto for PCI ID 17aa:215e, however that breaks sound on a number of thinkpads. Change this back to using model=thinkpad for now.

---

sound/pci/hda/patch_conexant.c +1 -1
@@ -3027,7 +3027,7 @@ static const struct snd_pci_quirk cxt506
 	SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo T400s", CXT5066_THINKPAD),
 	SND_PCI_QUIRK(0x17aa, 0x21c5, "Thinkpad Edge 13", CXT5066_THINKPAD),
 	SND_PCI_QUIRK(0x17aa, 0x21c6, "Thinkpad Edge 13", CXT5066_ASUS),
-	SND_PCI_QUIRK(0x17aa, 0x215e, "Lenovo T510", CXT5066_AUTO),
+	SND_PCI_QUIRK(0x17aa, 0x215e, "Lenovo T510", CXT5066_THINKPAD),
 	SND_PCI_QUIRK(0x17aa, 0x21cf, "Lenovo T520 & W520", CXT5066_AUTO),
 	SND_PCI_QUIRK(0x17aa, 0x21da, "Lenovo X220", CXT5066_THINKPAD),
 	SND_PCI_QUIRK(0x17aa, 0x21db, "Lenovo X220-tablet", CXT5066_THINKPAD),
#1 lore raw

At Fri, 13 Apr 2012 08:43:06 -0400,

Quoted 13 lines · Josh Boyer

Hi Takashi and Jaroslav,

We've had a number of bugs reported about sound not working correctly on various models of Thinkpad machines in the 3.3 kernel. I've listed them below.

I looked through the commits and found:

commit 29c5fbbcfefba5225a6783683c46c39e10877703:

ALSA: HDA: Use model=auto for Thinkpad T510

Quoted 7 lines

The user reports that model=auto works fine for him. Using model=auto bring in new features such as jack detection notification to userspace.

I did a local build here with that comment reverted and so far most of the people reported their sound to be working again. The trivial revert patch is below in case you want it.

Could you get alsa-info.sh output on the non-working T510? If it's really about the built-in speaker or headphone jack, I doubt it's rahter the muted output in mixer. I see only "me too" in the bug report, which doesn't help much to diagnose the problem.

I've got a few positive feedbacks of T410 and T510, so basically the driver should work. But I know the problem of docking-station (see below).

Quoted 6 lines

It seems there are multiple models that have PCI ID 17aa:215e and using model=auto does not work for them all. It particularly messes with machines using a docking station for some reason.

Aside from just reverting the above commit, do you have other thoughts on how to fix this?

The problem regarding the docking station is basically a BIOS issue. ThinkPad BIOS doesn't expose the pins for docking stations at all. We have already a workaround for X200, and similar others would be needed for T410, T420, etc.

For testing, you don't need even patch the driver. When the driver is built with CONFIG_SND_HDA_PATCH_LOADER=y, create a file containing the below as /lib/firmware/alsa-tp-dock:

================================================================
[codec]
0x14f15069 0x17aa21a4 0

[pincfg]
0x1a 0x21a11000
0x1c 0x23014250
================================================================

then pass the module option patch="alsa-tp-dock" to snd-hda-intel, e.g. create a file containing below in /etc/modprobe.d/*

options snd-hda-intel patch="alsa-tp-dock"

This will override the pin-default values of 0x1a and 0x1c, which corresponds to the docking-station mic and docking-station output. This will set dock-out as the line-out so that the built-in headphone is preferred over it.

Note that after applying this, the new mixer elements will appear, so you'd need to adjust the values manually once.

Similarly, for T420, create a file with the contents below instead:

================================================================
[codec]
0x14f1506e 0x17aa21d2 0

[pincfg]
0x19 0x0421104f
0x1a 0x21a19050
0x1c 0x2121401f
================================================================

The rest procedure is same.

If the above seem work (again, make sure that you adjust the mixer mutes and levels), I'll make kernel patches to add these fixups statically in the driver so that it works without extra patching.

thanks,

Takashi

author
#2 lore raw
Quoted 19 lines · Takashi Iwai

At Fri, 13 Apr 2012 08:43:06 -0400,

Quoted 17 lines · Josh Boyer

Hi Takashi and Jaroslav,

We've had a number of bugs reported about sound not working correctly on various models of Thinkpad machines in the 3.3 kernel. I've listed them below.

I looked through the commits and found:

commit 29c5fbbcfefba5225a6783683c46c39e10877703:

ALSA: HDA: Use model=auto for Thinkpad T510

The user reports that model=auto works fine for him. Using model=auto bring in new features such as jack detection notification to userspace.

Quoted 8 lines
Quoted 3 lines

I did a local build here with that comment reverted and so far most of the people reported their sound to be working again. The trivial revert patch is below in case you want it.

Could you get alsa-info.sh output on the non-working T510? If it's really about the built-in speaker or headphone jack, I doubt it's rahter the muted output in mixer. I see only "me too" in the bug report, which doesn't help much to diagnose the problem.

OK, I've asked for that.

Quoted 21 lines

I've got a few positive feedbacks of T410 and T510, so basically the driver should work. But I know the problem of docking-station (see below).

Quoted 6 lines

It seems there are multiple models that have PCI ID 17aa:215e and using model=auto does not work for them all. It particularly messes with machines using a docking station for some reason.

Aside from just reverting the above commit, do you have other thoughts on how to fix this?

The problem regarding the docking station is basically a BIOS issue. ThinkPad BIOS doesn't expose the pins for docking stations at all. We have already a workaround for X200, and similar others would be needed for T410, T420, etc.

For testing, you don't need even patch the driver. When the driver is built with CONFIG_SND_HDA_PATCH_LOADER=y, create a file containing the below as /lib/firmware/alsa-tp-dock:

Quoted 8 lines

================================================================
[codec]
0x14f15069 0x17aa21a4 0

[pincfg]
0x1a 0x21a11000
0x1c 0x23014250
================================================================

The above is for the X200 docking station, correct? So it should work with an x201 thinkpad in an x200 dock.

Quoted 25 lines

then pass the module option patch="alsa-tp-dock" to snd-hda-intel, e.g. create a file containing below in /etc/modprobe.d/*

options snd-hda-intel patch="alsa-tp-dock"

This will override the pin-default values of 0x1a and 0x1c, which corresponds to the docking-station mic and docking-station output. This will set dock-out as the line-out so that the built-in headphone is preferred over it.

Note that after applying this, the new mixer elements will appear, so you'd need to adjust the values manually once.

Similarly, for T420, create a file with the contents below instead:

================================================================
[codec]
0x14f1506e 0x17aa21d2 0

[pincfg]
0x19 0x0421104f
0x1a 0x21a19050
0x1c 0x2121401f
================================================================

Quoted 5 lines

The rest procedure is same.

If the above seem work (again, make sure that you adjust the mixer mutes and levels), I'll make kernel patches to add these fixups statically in the driver so that it works without extra patching.

OK. I'll have the reporters test this out.

josh

#3 lore raw

At Fri, 13 Apr 2012 09:23:52 -0400,

Quoted 57 lines · Josh Boyer
Quoted 19 lines · Takashi Iwai

At Fri, 13 Apr 2012 08:43:06 -0400,

Quoted 17 lines · Josh Boyer

Hi Takashi and Jaroslav,

We've had a number of bugs reported about sound not working correctly on various models of Thinkpad machines in the 3.3 kernel. I've listed them below.

I looked through the commits and found:

commit 29c5fbbcfefba5225a6783683c46c39e10877703:

ALSA: HDA: Use model=auto for Thinkpad T510

The user reports that model=auto works fine for him. Using model=auto bring in new features such as jack detection notification to userspace.

Quoted 8 lines
Quoted 3 lines

I did a local build here with that comment reverted and so far most of the people reported their sound to be working again. The trivial revert patch is below in case you want it.

Could you get alsa-info.sh output on the non-working T510? If it's really about the built-in speaker or headphone jack, I doubt it's rahter the muted output in mixer. I see only "me too" in the bug report, which doesn't help much to diagnose the problem.

OK, I've asked for that.

Quoted 25 lines

I've got a few positive feedbacks of T410 and T510, so basically the driver should work. But I know the problem of docking-station (see below).

Quoted 6 lines

It seems there are multiple models that have PCI ID 17aa:215e and using model=auto does not work for them all. It particularly messes with machines using a docking station for some reason.

Aside from just reverting the above commit, do you have other thoughts on how to fix this?

The problem regarding the docking station is basically a BIOS issue. ThinkPad BIOS doesn't expose the pins for docking stations at all. We have already a workaround for X200, and similar others would be needed for T410, T420, etc.

For testing, you don't need even patch the driver. When the driver is built with CONFIG_SND_HDA_PATCH_LOADER=y, create a file containing the below as /lib/firmware/alsa-tp-dock:

================================================================
[codec]
0x14f15069 0x17aa21a4 0

Quoted 7 lines
Quoted 4 lines

[pincfg]
0x1a 0x21a11000
0x1c 0x23014250
================================================================

The above is for the X200 docking station, correct? So it should work with an x201 thinkpad in an x200 dock.

It's for T410/T510 dock. But X201 uses the same codec chip, so this could be used, too. Just give it a try.

Takashi

author
#4 lore raw
Quoted 20 lines · Takashi Iwai

At Fri, 13 Apr 2012 09:23:52 -0400,

Quoted 18 lines · Josh Boyer
Quoted 17 lines

The problem regarding the docking station is basically a BIOS issue. ThinkPad BIOS doesn't expose the pins for docking stations at all. We have already a workaround for X200, and similar others would be needed for T410, T420, etc.

For testing, you don't need even patch the driver. When the driver is built with CONFIG_SND_HDA_PATCH_LOADER=y, create a file containing the below as /lib/firmware/alsa-tp-dock:

================================================================
[codec]
0x14f15069 0x17aa21a4 0

[pincfg]
0x1a 0x21a11000
0x1c 0x23014250
================================================================

Quoted 5 lines
Quoted 2 lines

The above is for the X200 docking station, correct? So it should work with an x201 thinkpad in an x200 dock.

It's for T410/T510 dock. But X201 uses the same codec chip, so this could be used, too. Just give it a try.

OK. I've asked a reporter to test this out. We'll get back to you.

josh

#5 lore raw

At Fri, 13 Apr 2012 09:37:21 -0400,

Quoted 22 lines · Josh Boyer
Quoted 20 lines · Takashi Iwai

At Fri, 13 Apr 2012 09:23:52 -0400,

Quoted 18 lines · Josh Boyer
Quoted 17 lines

The problem regarding the docking station is basically a BIOS issue. ThinkPad BIOS doesn't expose the pins for docking stations at all. We have already a workaround for X200, and similar others would be needed for T410, T420, etc.

For testing, you don't need even patch the driver. When the driver is built with CONFIG_SND_HDA_PATCH_LOADER=y, create a file containing the below as /lib/firmware/alsa-tp-dock:

================================================================
[codec]
0x14f15069 0x17aa21a4 0

[pincfg]
0x1a 0x21a11000
0x1c 0x23014250
================================================================

Quoted 7 lines
Quoted 5 lines
Quoted 2 lines

The above is for the X200 docking station, correct? So it should work with an x201 thinkpad in an x200 dock.

It's for T410/T510 dock. But X201 uses the same codec chip, so this could be used, too. Just give it a try.

OK. I've asked a reporter to test this out. We'll get back to you.

Thanks. As mentionted, the difference between two setups (sent in two posts) is seen in the mixer setup. I personally don't mind which setup is taken; it's rather a choice of users. So, let me know which setup is preferred by testers.

The reason behind such multiple setups is that the codec chip has only two DACs while you want to access for three or more outputs (two headphones, one speaker, etc). Thus some outputs must share the same DAC.

Takashi

author
#6 lore raw
Quoted 6 lines · Takashi Iwai

At Fri, 13 Apr 2012 09:37:21 -0400,
Josh Boyer wrote:
Thanks. As mentionted, the difference between two setups (sent in two posts) is seen in the mixer setup. I personally don't mind which setup is taken; it's rather a choice of users. So, let me know which setup is preferred by testers.

You're referring to the inclusion of pin 0x19 or not here, right?

Quoted 4 lines

The reason behind such multiple setups is that the codec chip has only two DACs while you want to access for three or more outputs (two headphones, one speaker, etc). Thus some outputs must share the same DAC.

I'm guessing when someone undocks the pins are reconfigured back to the jacks on the laptop itself somehow?

I must admit, ALSA and it's multi-codec hda driver with lots of pin swizzling is somewhat intimidating at the moment. If I ask stupid questions, please bear with me :).

josh

#7 lore raw

At Fri, 13 Apr 2012 10:05:49 -0400,

Quoted 10 lines · Josh Boyer
Quoted 6 lines · Takashi Iwai

At Fri, 13 Apr 2012 09:37:21 -0400,
Josh Boyer wrote:
Thanks. As mentionted, the difference between two setups (sent in two posts) is seen in the mixer setup. I personally don't mind which setup is taken; it's rather a choice of users. So, let me know which setup is preferred by testers.

You're referring to the inclusion of pin 0x19 or not here, right?

Yes.

Quoted 7 lines
Quoted 4 lines

The reason behind such multiple setups is that the codec chip has only two DACs while you want to access for three or more outputs (two headphones, one speaker, etc). Thus some outputs must share the same DAC.

I'm guessing when someone undocks the pins are reconfigured back to the jacks on the laptop itself somehow?

No, the configuration must be determined at the driver initialization time. So, the mixer elements stay unchanged with or without dock. (For example, if the mixer elements were to change upon the
dock/undock, this would be really confusing both for users and apps. In theory, it's possible to implement like that, but no one wants it.)

The jack-detection on the docking station works, yes, i.e. the auto-muting or the mic changing works. But it's different from changing the configuration on the hotplug of docking station itself.

Takashi

#8 lore raw
In reply to Takashi Iwai

At Fri, 13 Apr 2012 15:07:07 +0200,

Quoted 5 lines · Takashi Iwai

For testing, you don't need even patch the driver. When the driver is built with CONFIG_SND_HDA_PATCH_LOADER=y, create a file containing the below as /lib/firmware/alsa-tp-dock:

Quoted 8 lines

================================================================
[codec]
0x14f15069 0x17aa21a4 0

[pincfg]
0x1a 0x21a11000
0x1c 0x23014250
================================================================

Forgot to mention that the above is only for TP410/510. For TP420 & co, the second one should be used.

Also, for TP410/510, the following values might be better (this time contains 0x19, too):

0x19 0x042110ff
0x1a 0x21a190f0
0x1c 0x212140ff

This will make the built-in and the dock headphones as headphones. The mixer elements will be more intuitive than the former version.

thanks,

Takashi

#9 lore raw
In reply to Takashi Iwai

At Fri, 13 Apr 2012 15:07:07 +0200,
Takashi Iwai wrote:
(snip)

Quoted 3 lines

If the above seem work (again, make sure that you adjust the mixer mutes and levels), I'll make kernel patches to add these fixups statically in the driver so that it works without extra patching.

Looking through alsa-info.sh outputs from various ThinkPad models I've gathered, it seems that we can use the same pin setups for all.

Below is a test patch for 3.3 kernel. (Note that it'd give a merge conflict for 3.4 kernel.)

thanks,

Takashi

---

sound/pci/hda/patch_conexant.c +25 -3
index d29d6d3..681a8a9 100644
@@ -4362,8 +4362,10 @@ static void apply_pin_fixup(struct hda_codec *codec,
 
 enum {
 	CXT_PINCFG_LENOVO_X200,
+	CXT_PINCFG_LENOVO_TP410,
 };
 
+/* ThinkPad X200 & co with cxt5051 */
 static const struct cxt_pincfg cxt_pincfg_lenovo_x200[] = {
 	{ 0x16, 0x042140ff }, /* HP (seq# overridden) */
 	{ 0x17, 0x21a11000 }, /* dock-mic */
@@ -4371,15 +4373,33 @@ static const struct cxt_pincfg cxt_pincfg_lenovo_x200[] = {
 	{}
 };
 
+/* ThinkPad 410/420/510/520, X201 & co with cxt5066 */
+static const struct cxt_pincfg cxt_pincfg_lenovo_tp410[] = {
+	{ 0x19, 0x042110ff }, /* HP (seq# overridden) */
+	{ 0x1a, 0x21a190f0 }, /* dock-mic */
+	{ 0x1c, 0x212140ff }, /* dock-HP */
+	{}
+};
+
 static const struct cxt_pincfg *cxt_pincfg_tbl[] = {
 	[CXT_PINCFG_LENOVO_X200] = cxt_pincfg_lenovo_x200,
+	[CXT_PINCFG_LENOVO_TP410] = cxt_pincfg_lenovo_tp410,
 };
 
-static const struct snd_pci_quirk cxt_fixups[] = {
+static const struct snd_pci_quirk cxt5051_fixups[] = {
 	SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo X200", CXT_PINCFG_LENOVO_X200),
 	{}
 };
 
+static const struct snd_pci_quirk cxt5066_fixups[] = {
+	SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo T400", CXT_PINCFG_LENOVO_TP410),
+	SND_PCI_QUIRK(0x17aa, 0x215e, "Lenovo T410", CXT_PINCFG_LENOVO_TP410),
+	SND_PCI_QUIRK(0x17aa, 0x215f, "Lenovo T510", CXT_PINCFG_LENOVO_TP410),
+	SND_PCI_QUIRK(0x17aa, 0x21ce, "Lenovo T420", CXT_PINCFG_LENOVO_TP410),
+	SND_PCI_QUIRK(0x17aa, 0x21cf, "Lenovo T520", CXT_PINCFG_LENOVO_TP410),
+	{}
+};
+
 /* add "fake" mute amp-caps to DACs on cx5051 so that mixer mute switches
  * can be created (bko#42825)
  */
@@ -4416,11 +4436,13 @@ static int patch_conexant_auto(struct hda_codec *codec)
 		break;
 	case 0x14f15051:
 		add_cx5051_fake_mutes(codec);
+		apply_pin_fixup(codec, cxt5051_fixups, cxt_pincfg_tbl);
+		break;
+	default:
+		apply_pin_fixup(codec, cxt5066_fixups, cxt_pincfg_tbl);
 		break;
 	}
 
-	apply_pin_fixup(codec, cxt_fixups, cxt_pincfg_tbl);
-
 	err = cx_auto_search_adcs(codec);
 	if (err < 0)
 		return err;
author
#10 lore raw
Quoted 9 lines · Takashi Iwai

At Fri, 13 Apr 2012 15:07:07 +0200,
Takashi Iwai wrote:
(snip)

Quoted 3 lines

If the above seem work (again, make sure that you adjust the mixer mutes and levels), I'll make kernel patches to add these fixups statically in the driver so that it works without extra patching.

Looking through alsa-info.sh outputs from various ThinkPad models I've gathered, it seems that we can use the same pin setups for all.

We had a user try the alsa-tp-dock patch on an X201 and it didn't seem to work for them. See bug
https://bugzilla.redhat.com/show_bug.cgi?id=806217

Perhaps the [codec] section isn't set properly for their configuration? The alsa-info for their machine is in comment #9 of the bug.

Quoted 2 lines

Below is a test patch for 3.3 kernel. (Note that it'd give a merge conflict for 3.4 kernel.)

OK, I'll do a scratch build with this and get people to test.

josh

#11 lore raw

At Fri, 13 Apr 2012 14:08:14 -0400,

Quoted 9 lines · Josh Boyer
Quoted 7 lines · Takashi Iwai

At Fri, 13 Apr 2012 15:07:07 +0200,
Takashi Iwai wrote:
(snip)

Quoted 3 lines

If the above seem work (again, make sure that you adjust the mixer mutes and levels), I'll make kernel patches to add these fixups statically in the driver so that it works without extra patching.

Quoted 8 lines
Quoted 2 lines

Looking through alsa-info.sh outputs from various ThinkPad models I've gathered, it seems that we can use the same pin setups for all.

We had a user try the alsa-tp-dock patch on an X201 and it didn't seem to work for them. See bug
https://bugzilla.redhat.com/show_bug.cgi?id=806217

Perhaps the [codec] section isn't set properly for their configuration?

Right. This must match with the actual values. Or the recent driver accepts 0 as the the second value.

Quoted 6 lines

The alsa-info for their machine is in comment #9 of the bug.

Quoted 2 lines

Below is a test patch for 3.3 kernel. (Note that it'd give a merge conflict for 3.4 kernel.)

OK, I'll do a scratch build with this and get people to test.

In that case, check whether the reported machines have the corresponding PCI SSIDs.

thanks,

Takashi

author
#12 lore raw
In reply to Josh Boyer
Quoted 15 lines · Josh Boyer
Quoted 9 lines · Takashi Iwai

At Fri, 13 Apr 2012 15:07:07 +0200,
Takashi Iwai wrote:
(snip)

Quoted 3 lines

If the above seem work (again, make sure that you adjust the mixer mutes and levels), I'll make kernel patches to add these fixups statically in the driver so that it works without extra patching.

Looking through alsa-info.sh outputs from various ThinkPad models I've gathered, it seems that we can use the same pin setups for all.

We had a user try the alsa-tp-dock patch on an X201 and it didn't seem to work for them. See bug
https://bugzilla.redhat.com/show_bug.cgi?id=806217

Quoted 7 lines

Perhaps the [codec] section isn't set properly for their configuration? The alsa-info for their machine is in comment #9 of the bug.

Quoted 2 lines

Below is a test patch for 3.3 kernel. (Note that it'd give a merge conflict for 3.4 kernel.)

OK, I'll do a scratch build with this and get people to test.

I built your patch in a scratch kernel and have at least one user with a t510 laptop report success. Christoph reported the mixers showing up, but it wasn't clear to me if his sound actually worked on the x201. I've CC'd both users (Kevin t510, Christoph x201 in a dock).

josh

#13 lore raw

At Tue, 17 Apr 2012 20:23:36 -0400,

Quoted 23 lines · Josh Boyer
Quoted 21 lines · Josh Boyer
Quoted 9 lines · Takashi Iwai

At Fri, 13 Apr 2012 15:07:07 +0200,
Takashi Iwai wrote:
(snip)

Quoted 3 lines

If the above seem work (again, make sure that you adjust the mixer mutes and levels), I'll make kernel patches to add these fixups statically in the driver so that it works without extra patching.

Looking through alsa-info.sh outputs from various ThinkPad models I've gathered, it seems that we can use the same pin setups for all.

We had a user try the alsa-tp-dock patch on an X201 and it didn't seem to work for them. See bug
https://bugzilla.redhat.com/show_bug.cgi?id=806217

Perhaps the [codec] section isn't set properly for their configuration? The alsa-info for their machine is in comment #9 of the bug.

Quoted 2 lines

Below is a test patch for 3.3 kernel. (Note that it'd give a merge conflict for 3.4 kernel.)

Quoted 6 lines
Quoted 1 line

OK, I'll do a scratch build with this and get people to test.

I built your patch in a scratch kernel and have at least one user with a t510 laptop report success. Christoph reported the mixers showing up, but it wasn't clear to me if his sound actually worked on the x201. I've CC'd both users (Kevin t510, Christoph x201 in a dock).

Good. Should I wait for a copule of days for the test results before merging the patch, or go for now?

thanks,

Takashi