No sound on Thinkpad T440s in Docking Station
diff mbox

Message ID s5hzjiuud7m.wl%tiwai@suse.de
State Accepted
Commit 1c37c22332a2d2c1b4ab32177a4f847c7fe06e38
Headers show

Commit Message

Takashi Iwai May 6, 2014, 3:41 p.m. UTC
At Tue, 06 May 2014 17:20:29 +0200,
Joschi Brauchle wrote:
> 
> Alright, I think I found the correct settings:
> 
> [codec]
> 0x10ec0292 0x17aa220c 0
> 
> [pincfg]
> 0x16 0x21211010
> 0x19 0x21a11010
> 
> If
> a) no headphones plugged in anywhere, laptop speakers work
> b) headphones only plugged in dock and not at laptop, dock headphones 
> work, laptop speakers silent
> c) headphones plugged in laptop (and/or dock), only laptop headphones 
> work, laptop speakers and dock headphone silent
> 
> If this is the intended behavior, these values work.

Looks good.  Below is the revised patch I'm going to apply to the
sound git tree.  Could you check whether it works as expected?

Once confirmed, I can take it to openSUSE 13.1, too.


thanks,

Takashi

---
From: Takashi Iwai <tiwai@suse.de>
Subject: [PATCH] ALSA: hda - Add dock pin setups for Thinkpad T440

The headphone and mic jacks on Thinkpad T440 are assigned to pins NID
0x16 and 0x19, respectively.  These need to be set up manually by a
fixup.

Reported-by: Joschi Brauchle <joschi.brauchle@tum.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 sound/pci/hda/patch_realtek.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

Comments

Joschi Brauchle May 7, 2014, 9:28 a.m. UTC | #1
On 05/06/2014 05:41 PM, Takashi Iwai wrote:
> At Tue, 06 May 2014 17:20:29 +0200,
> Joschi Brauchle wrote:
>>
>> Alright, I think I found the correct settings:
>>
>> [codec]
>> 0x10ec0292 0x17aa220c 0
>>
>> [pincfg]
>> 0x16 0x21211010
>> 0x19 0x21a11010
>>
>> If
>> a) no headphones plugged in anywhere, laptop speakers work
>> b) headphones only plugged in dock and not at laptop, dock headphones
>> work, laptop speakers silent
>> c) headphones plugged in laptop (and/or dock), only laptop headphones
>> work, laptop speakers and dock headphone silent
>>
>> If this is the intended behavior, these values work.
>
> Looks good.  Below is the revised patch I'm going to apply to the
> sound git tree.  Could you check whether it works as expected?
>
> Once confirmed, I can take it to openSUSE 13.1, too.
>
>
> thanks,
>
> Takashi
>
> ---
> From: Takashi Iwai <tiwai@suse.de>
> Subject: [PATCH] ALSA: hda - Add dock pin setups for Thinkpad T440
>
> The headphone and mic jacks on Thinkpad T440 are assigned to pins NID
> 0x16 and 0x19, respectively.  These need to be set up manually by a
> fixup.
>
> Reported-by: Joschi Brauchle <joschi.brauchle@tum.de>
> Signed-off-by: Takashi Iwai <tiwai@suse.de>
> ---
>   sound/pci/hda/patch_realtek.c | 15 ++++++++++++++-
>   1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> index b60de0dc40d3..40f9b5d712eb 100644
> --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
> @@ -4236,6 +4236,7 @@ enum {
>   	ALC255_FIXUP_HEADSET_MODE,
>   	ALC255_FIXUP_HEADSET_MODE_NO_HP_MIC,
>   	ALC293_FIXUP_DELL1_MIC_NO_PRESENCE,
> +	ALC292_FIXUP_TPT440_DOCK,
>   };
>
>   static const struct hda_fixup alc269_fixups[] = {
> @@ -4639,6 +4640,16 @@ static const struct hda_fixup alc269_fixups[] = {
>   		.chained = true,
>   		.chain_id = ALC269_FIXUP_HEADSET_MODE
>   	},
> +	[ALC292_FIXUP_TPT440_DOCK] = {
> +		.type = HDA_FIXUP_PINS,
> +		.v.pins = (const struct hda_pintbl[]) {
> +			{ 0x16, 0x21211010 }, /* dock headphone */
> +			{ 0x19, 0x21a11010 }, /* dock mic */
> +			{ }
> +		},
> +		.chained = true,
> +		.chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
> +	},
>   };
>
>   static const struct snd_pci_quirk alc269_fixup_tbl[] = {
> @@ -4803,7 +4814,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
>   	SND_PCI_QUIRK(0x17aa, 0x21fb, "Thinkpad T430s", ALC269_FIXUP_LENOVO_DOCK),
>   	SND_PCI_QUIRK(0x17aa, 0x2203, "Thinkpad X230 Tablet", ALC269_FIXUP_LENOVO_DOCK),
>   	SND_PCI_QUIRK(0x17aa, 0x2208, "Thinkpad T431s", ALC269_FIXUP_LENOVO_DOCK),
> -	SND_PCI_QUIRK(0x17aa, 0x220c, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
> +	SND_PCI_QUIRK(0x17aa, 0x220c, "Thinkpad T440s", ALC292_FIXUP_TPT440_DOCK),
> +	SND_PCI_QUIRK(0x17aa, 0x220e, "Thinkpad T440p", ALC292_FIXUP_TPT440_DOCK),
>   	SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
>   	SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
>   	SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
> @@ -4881,6 +4893,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
>   	{.id = ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, .name = "dell-headset-dock"},
>   	{.id = ALC283_FIXUP_CHROME_BOOK, .name = "alc283-dac-wcaps"},
>   	{.id = ALC283_FIXUP_SENSE_COMBO_JACK, .name = "alc283-sense-combo"},
> +	{.id = ALC292_FIXUP_TPT440_DOCK, .name = "tpt440-dock"},
>   	{}
>   };
>
>

I have rebuilt the snd-hda-* modules with the patch above (adapted to 
3.11 kernel) and tested successfully! Sound is working fine while 
docking now.

Thanks!
Takashi Iwai May 7, 2014, 9:41 a.m. UTC | #2
At Wed, 07 May 2014 11:28:25 +0200,
Joschi Brauchle wrote:
> 
> On 05/06/2014 05:41 PM, Takashi Iwai wrote:
> > At Tue, 06 May 2014 17:20:29 +0200,
> > Joschi Brauchle wrote:
> >>
> >> Alright, I think I found the correct settings:
> >>
> >> [codec]
> >> 0x10ec0292 0x17aa220c 0
> >>
> >> [pincfg]
> >> 0x16 0x21211010
> >> 0x19 0x21a11010
> >>
> >> If
> >> a) no headphones plugged in anywhere, laptop speakers work
> >> b) headphones only plugged in dock and not at laptop, dock headphones
> >> work, laptop speakers silent
> >> c) headphones plugged in laptop (and/or dock), only laptop headphones
> >> work, laptop speakers and dock headphone silent
> >>
> >> If this is the intended behavior, these values work.
> >
> > Looks good.  Below is the revised patch I'm going to apply to the
> > sound git tree.  Could you check whether it works as expected?
> >
> > Once confirmed, I can take it to openSUSE 13.1, too.
> >
> >
> > thanks,
> >
> > Takashi
> >
> > ---
> > From: Takashi Iwai <tiwai@suse.de>
> > Subject: [PATCH] ALSA: hda - Add dock pin setups for Thinkpad T440
> >
> > The headphone and mic jacks on Thinkpad T440 are assigned to pins NID
> > 0x16 and 0x19, respectively.  These need to be set up manually by a
> > fixup.
> >
> > Reported-by: Joschi Brauchle <joschi.brauchle@tum.de>
> > Signed-off-by: Takashi Iwai <tiwai@suse.de>
> > ---
> >   sound/pci/hda/patch_realtek.c | 15 ++++++++++++++-
> >   1 file changed, 14 insertions(+), 1 deletion(-)
> >
> > diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
> > index b60de0dc40d3..40f9b5d712eb 100644
> > --- a/sound/pci/hda/patch_realtek.c
> > +++ b/sound/pci/hda/patch_realtek.c
> > @@ -4236,6 +4236,7 @@ enum {
> >   	ALC255_FIXUP_HEADSET_MODE,
> >   	ALC255_FIXUP_HEADSET_MODE_NO_HP_MIC,
> >   	ALC293_FIXUP_DELL1_MIC_NO_PRESENCE,
> > +	ALC292_FIXUP_TPT440_DOCK,
> >   };
> >
> >   static const struct hda_fixup alc269_fixups[] = {
> > @@ -4639,6 +4640,16 @@ static const struct hda_fixup alc269_fixups[] = {
> >   		.chained = true,
> >   		.chain_id = ALC269_FIXUP_HEADSET_MODE
> >   	},
> > +	[ALC292_FIXUP_TPT440_DOCK] = {
> > +		.type = HDA_FIXUP_PINS,
> > +		.v.pins = (const struct hda_pintbl[]) {
> > +			{ 0x16, 0x21211010 }, /* dock headphone */
> > +			{ 0x19, 0x21a11010 }, /* dock mic */
> > +			{ }
> > +		},
> > +		.chained = true,
> > +		.chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
> > +	},
> >   };
> >
> >   static const struct snd_pci_quirk alc269_fixup_tbl[] = {
> > @@ -4803,7 +4814,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
> >   	SND_PCI_QUIRK(0x17aa, 0x21fb, "Thinkpad T430s", ALC269_FIXUP_LENOVO_DOCK),
> >   	SND_PCI_QUIRK(0x17aa, 0x2203, "Thinkpad X230 Tablet", ALC269_FIXUP_LENOVO_DOCK),
> >   	SND_PCI_QUIRK(0x17aa, 0x2208, "Thinkpad T431s", ALC269_FIXUP_LENOVO_DOCK),
> > -	SND_PCI_QUIRK(0x17aa, 0x220c, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
> > +	SND_PCI_QUIRK(0x17aa, 0x220c, "Thinkpad T440s", ALC292_FIXUP_TPT440_DOCK),
> > +	SND_PCI_QUIRK(0x17aa, 0x220e, "Thinkpad T440p", ALC292_FIXUP_TPT440_DOCK),
> >   	SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
> >   	SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
> >   	SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
> > @@ -4881,6 +4893,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
> >   	{.id = ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, .name = "dell-headset-dock"},
> >   	{.id = ALC283_FIXUP_CHROME_BOOK, .name = "alc283-dac-wcaps"},
> >   	{.id = ALC283_FIXUP_SENSE_COMBO_JACK, .name = "alc283-sense-combo"},
> > +	{.id = ALC292_FIXUP_TPT440_DOCK, .name = "tpt440-dock"},
> >   	{}
> >   };
> >
> >
> 
> I have rebuilt the snd-hda-* modules with the patch above (adapted to 
> 3.11 kernel) and tested successfully! Sound is working fine while 
> docking now.

Good to hear.  Now I applied the patch to sound git tree.

For including it to openSUSE kernels, could you open a bugzilla entry?


thanks,

Takashi

Patch
diff mbox

diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index b60de0dc40d3..40f9b5d712eb 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -4236,6 +4236,7 @@  enum {
 	ALC255_FIXUP_HEADSET_MODE,
 	ALC255_FIXUP_HEADSET_MODE_NO_HP_MIC,
 	ALC293_FIXUP_DELL1_MIC_NO_PRESENCE,
+	ALC292_FIXUP_TPT440_DOCK,
 };
 
 static const struct hda_fixup alc269_fixups[] = {
@@ -4639,6 +4640,16 @@  static const struct hda_fixup alc269_fixups[] = {
 		.chained = true,
 		.chain_id = ALC269_FIXUP_HEADSET_MODE
 	},
+	[ALC292_FIXUP_TPT440_DOCK] = {
+		.type = HDA_FIXUP_PINS,
+		.v.pins = (const struct hda_pintbl[]) {
+			{ 0x16, 0x21211010 }, /* dock headphone */
+			{ 0x19, 0x21a11010 }, /* dock mic */
+			{ }
+		},
+		.chained = true,
+		.chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
+	},
 };
 
 static const struct snd_pci_quirk alc269_fixup_tbl[] = {
@@ -4803,7 +4814,8 @@  static const struct snd_pci_quirk alc269_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x17aa, 0x21fb, "Thinkpad T430s", ALC269_FIXUP_LENOVO_DOCK),
 	SND_PCI_QUIRK(0x17aa, 0x2203, "Thinkpad X230 Tablet", ALC269_FIXUP_LENOVO_DOCK),
 	SND_PCI_QUIRK(0x17aa, 0x2208, "Thinkpad T431s", ALC269_FIXUP_LENOVO_DOCK),
-	SND_PCI_QUIRK(0x17aa, 0x220c, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
+	SND_PCI_QUIRK(0x17aa, 0x220c, "Thinkpad T440s", ALC292_FIXUP_TPT440_DOCK),
+	SND_PCI_QUIRK(0x17aa, 0x220e, "Thinkpad T440p", ALC292_FIXUP_TPT440_DOCK),
 	SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
 	SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
 	SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
@@ -4881,6 +4893,7 @@  static const struct hda_model_fixup alc269_fixup_models[] = {
 	{.id = ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, .name = "dell-headset-dock"},
 	{.id = ALC283_FIXUP_CHROME_BOOK, .name = "alc283-dac-wcaps"},
 	{.id = ALC283_FIXUP_SENSE_COMBO_JACK, .name = "alc283-sense-combo"},
+	{.id = ALC292_FIXUP_TPT440_DOCK, .name = "tpt440-dock"},
 	{}
 };