diff mbox

Grey noise with HDA Intel PCH

Message ID s5hppg3xeag.wl-tiwai@suse.de (mailing list archive)
State Accepted
Delegated to: Takashi Iwai
Headers show

Commit Message

Takashi Iwai Aug. 14, 2014, 3:48 p.m. UTC
At Thu, 14 Aug 2014 17:26:58 +0200,
Julian Wollrath wrote:
> 
> Am Thu, 14 Aug 2014 17:11:32 +0200
> schrieb Takashi Iwai <tiwai@suse.de>:
> 
> > At Thu, 14 Aug 2014 17:04:59 +0200,
> > Julian Wollrath wrote:
> > > 
> > > Am Thu, 14 Aug 2014 16:47:46 +0200
> > > schrieb Takashi Iwai <tiwai@suse.de>:
> > > 
> > > > At Thu, 14 Aug 2014 16:39:14 +0200,
> > > > Julian Wollrath wrote:
> > > > > 
> > > > > Am Thu, 14 Aug 2014 16:09:51 +0200
> > > > > schrieb Takashi Iwai <tiwai@suse.de>:
> > > > > 
> > > > > > At Thu, 14 Aug 2014 16:07:37 +0200,
> > > > > > Julian Wollrath wrote:
> > > > > > > 
> > > > > > > > > > > Simple mixer control 'Mic',0
> > > > > > > > > > >   Front Left: Playback 0 [0%] [-34.50dB] [on]
> > > > > > > > > > >   Front Right: Playback 0 [0%] [-34.50dB] [on]
> > > > > > > > > > 
> > > > > > > > > > This plays any noise from the mic input.
> > > > > > > > > Turning it off makes no difference since capture is
> > > > > > > > > turned off anyway:
> > > > > > > > 
> > > > > > > > This is a loopback mixer element, it has nothing to do
> > > > > > > > with capture stream.
> > > > > > > > 
> > > > > > > > The likely culprit of the static noises is the signal
> > > > > > > > from the analog loopback.  In some cases, you can disable
> > > > > > > > the whole loopback via "Loopback Mixing" mixer element on
> > > > > > > > the fly.  In some cases, you'd need to disable each mixer
> > > > > > > > input (e.g. "Mic Playback Switch"). In some cases (e.g.
> > > > > > > > on some Sony and Dell laptops), you'd need to disable the
> > > > > > > > complete analog loopback at the initialization.
> > > > > > > > 
> > > > > > > > The last one can be done via the early patching or sysfs
> > > > > > > > reconfiguration, pass "mixer_nid = 0" hint.  See
> > > > > > > > HD-Audio.txt for a brief instruction.
> > > > > > > Sadly, that did not help.
> > > > > > 
> > > > > > Give alsa-info.sh output after your change to verify whether
> > > > > > you did correctly.
> > > > > Here it is, cheers:
> > > > 
> > > > Thanks.  The setup looks OK, the path is:
> > > >   DAC (0x02) -> mixer (0x0c) -> mixer (0x14)
> > > > and the mixer mutes the loopback path (index 1).
> > > > 
> > > > Is it the state where you still hear the static noise?
> > > Yes, the alsa-info.sh script was executed, while hearing the static
> > > noise.
> > 
> > OK.  And if you mute "Speaker" or "Headphone", the noise is gone, too,
> > right?
> No, if I mute "Speaker" (the internal laptop speaker) it is not gone. It
> is only gone, if I mute "Master" or have a headphone plugged in and
> mute "Headphone" or "Master".

Interesting.  The "Speaker" mute changes "Speaker Playback Switch",
and as you can see in alsa-info.sh output, this toggles the mute of
the speaker pin NID 0x14, i.e. the endpoint.  If "Master" influences,
it means to mute *both* Headphone and Speaker mutes would work.
Could you check this?

> More fascinating, it is not present, if the speaker is not muted and I
> disable powersaving via "echo '0' >
> '/sys/module/snd_hda_intel/parameters/power_save'" but even then, it is
> still present on the headphone.

Hm.  Is the noise audible when you playback a PCM stream, too?
For example, you can play a silent stream.

> > > > Also, what if you use the module option for snd-hda-intel
> > > > model=nofixup or model=generic?
> > > That did not change anything either. Passing the "mixer_nid = 0"
> > > hint also did not get rid of the static noise, when loading
> > > snd-hda-intel with model=nofixup resp. model=generic.
> > 
> > Did you reboot with setting the option in /etc/modprobe.d/*?
> > Reloading the module might not work for such a problem.
> No, I just unloaded every sound-related module and than loaded the
> module via "modprobe snd-hda-intel model=..." again.

Then always test with reboot.  The problem is about the
vendor-specific setups, and it's often sticky unless the cold boot.
At best, do the cold boot.  The warm boot doesn't cure always.

> > In either way, there should be some difference in alsa-info.sh output,
> > e.g. more (or less) mixer items with the model option.
> The difference is their, all the "Dock ..." entries were missing, when
> loading with the model="..." option.

Yes, and you should also see the difference in the kernel messages.

Another thing to check is to swap the DAC assignment.  There was a
similar problem on some Sony laptops, and we had to swap the DAC
assignment since the hardware seems to have some implicit assumption
of the DAC.  A test patch is below.


Takashi

---

Comments

Julian Wollrath Aug. 14, 2014, 4:29 p.m. UTC | #1
> > > > > Thanks.  The setup looks OK, the path is:
> > > > >   DAC (0x02) -> mixer (0x0c) -> mixer (0x14)
> > > > > and the mixer mutes the loopback path (index 1).
> > > > > 
> > > > > Is it the state where you still hear the static noise?
> > > > Yes, the alsa-info.sh script was executed, while hearing the
> > > > static noise.
> > > 
> > > OK.  And if you mute "Speaker" or "Headphone", the noise is gone,
> > > too, right?
> > No, if I mute "Speaker" (the internal laptop speaker) it is not
> > gone. It is only gone, if I mute "Master" or have a headphone
> > plugged in and mute "Headphone" or "Master".
> 
> Interesting.  The "Speaker" mute changes "Speaker Playback Switch",
> and as you can see in alsa-info.sh output, this toggles the mute of
> the speaker pin NID 0x14, i.e. the endpoint.  If "Master" influences,
> it means to mute *both* Headphone and Speaker mutes would work.
> Could you check this?
Muting both Headphone and Speaker does not work for the static noise on
the speaker.

> > More fascinating, it is not present, if the speaker is not muted
> > and I disable powersaving via "echo '0' >
> > '/sys/module/snd_hda_intel/parameters/power_save'" but even then,
> > it is still present on the headphone.
> 
> Hm.  Is the noise audible when you playback a PCM stream, too?
> For example, you can play a silent stream.
Yes, then it is audible.

> > > > > Also, what if you use the module option for snd-hda-intel
> > > > > model=nofixup or model=generic?
> > > > That did not change anything either. Passing the "mixer_nid = 0"
> > > > hint also did not get rid of the static noise, when loading
> > > > snd-hda-intel with model=nofixup resp. model=generic.
> > > 
> > > Did you reboot with setting the option in /etc/modprobe.d/*?
> > > Reloading the module might not work for such a problem.
> > No, I just unloaded every sound-related module and than loaded the
> > module via "modprobe snd-hda-intel model=..." again.
> 
> Then always test with reboot.  The problem is about the
> vendor-specific setups, and it's often sticky unless the cold boot.
> At best, do the cold boot.  The warm boot doesn't cure always.
Ok, I tested with a reboot but that did not help.

> > > In either way, there should be some difference in alsa-info.sh
> > > output, e.g. more (or less) mixer items with the model option.
> > The difference is their, all the "Dock ..." entries were missing,
> > when loading with the model="..." option.
> 
> Yes, and you should also see the difference in the kernel messages.
> 
> Another thing to check is to swap the DAC assignment.  There was a
> similar problem on some Sony laptops, and we had to swap the DAC
> assignment since the hardware seems to have some implicit assumption
> of the DAC.  A test patch is below.
Thanks, but sadly the patch did not help.

Cheers,
Julian
> 
> 
> Takashi
> 
> ---
> diff --git a/sound/pci/hda/patch_realtek.c
> b/sound/pci/hda/patch_realtek.c index 6b38ec3c6e57..10c47a0e6c70
> 100644 --- a/sound/pci/hda/patch_realtek.c
> +++ b/sound/pci/hda/patch_realtek.c
> @@ -3280,6 +3280,22 @@ static void
> alc269_fixup_pincfg_no_hp_to_lineout(struct hda_codec *codec,
> spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP; }
>  
> +static void alc269_fixup_thinkpad_dac_bind(struct hda_codec *codec,
> +					   const struct hda_fixup
> *fix,
> +					   int action)
> +{
> +	struct alc_spec *spec = codec->spec;
> +	static hda_nid_t preferred_pairs[] = {
> +		0x15, 0x02,
> +		0x1b, 0x02,
> +		0x14, 0x03,
> +		0,
> +	};
> +
> +	if (action == HDA_FIXUP_ACT_PRE_PROBE)
> +		spec->gen.preferred_dacs = preferred_pairs;
> +}
> +
>  static void alc269_fixup_hweq(struct hda_codec *codec,
>  			       const struct hda_fixup *fix, int
> action) {
> @@ -4358,6 +4374,7 @@ enum {
>  	ALC269_FIXUP_HP_LINE1_MIC1_LED,
>  	ALC269_FIXUP_INV_DMIC,
>  	ALC269_FIXUP_LENOVO_DOCK,
> +	ALC269_FIXUP_THINKPAD_DAC_BIND,
>  	ALC269_FIXUP_NO_SHUTUP,
>  	ALC286_FIXUP_SONY_MIC_NO_PRESENCE,
>  	ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT,
> @@ -4576,6 +4593,12 @@ static const struct hda_fixup alc269_fixups[]
> = { .chained = true,
>  		.chain_id = ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT
>  	},
> +	[ALC269_FIXUP_THINKPAD_DAC_BIND] = {
> +		.type = HDA_FIXUP_FUNC,
> +		.v.func = alc269_fixup_thinkpad_dac_bind,
> +		.chained = true,
> +		.chain_id = ALC269_FIXUP_LENOVO_DOCK,
> +	},
>  	[ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT] = {
>  		.type = HDA_FIXUP_FUNC,
>  		.v.func = alc269_fixup_pincfg_no_hp_to_lineout,
> @@ -5044,7 +5067,7 @@ static const struct snd_pci_quirk
> alc269_fixup_tbl[] = { SND_PCI_QUIRK(0x17aa, 0x21ca, "Thinkpad L412",
> ALC269_FIXUP_SKU_IGNORE), SND_PCI_QUIRK(0x17aa, 0x21e9, "Thinkpad
> Edge 15", ALC269_FIXUP_SKU_IGNORE), SND_PCI_QUIRK(0x17aa, 0x21f6,
> "Thinkpad T530", ALC269_FIXUP_LENOVO_DOCK),
> -	SND_PCI_QUIRK(0x17aa, 0x21fa, "Thinkpad X230",
> ALC269_FIXUP_LENOVO_DOCK),
> +	SND_PCI_QUIRK(0x17aa, 0x21fa, "Thinkpad X230",
> ALC269_FIXUP_THINKPAD_DAC_BIND), SND_PCI_QUIRK(0x17aa, 0x21f3,
> "Thinkpad T430", ALC269_FIXUP_LENOVO_DOCK), SND_PCI_QUIRK(0x17aa,
> 0x21fb, "Thinkpad T430s", ALC269_FIXUP_LENOVO_DOCK),
> SND_PCI_QUIRK(0x17aa, 0x2203, "Thinkpad X230 Tablet",
> ALC269_FIXUP_LENOVO_DOCK),
> _______________________________________________ Alsa-devel mailing
> list Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
Takashi Iwai Aug. 15, 2014, 6:02 a.m. UTC | #2
At Thu, 14 Aug 2014 18:29:19 +0200,
Julian Wollrath wrote:
> 
> > > > > > Thanks.  The setup looks OK, the path is:
> > > > > >   DAC (0x02) -> mixer (0x0c) -> mixer (0x14)
> > > > > > and the mixer mutes the loopback path (index 1).
> > > > > > 
> > > > > > Is it the state where you still hear the static noise?
> > > > > Yes, the alsa-info.sh script was executed, while hearing the
> > > > > static noise.
> > > > 
> > > > OK.  And if you mute "Speaker" or "Headphone", the noise is gone,
> > > > too, right?
> > > No, if I mute "Speaker" (the internal laptop speaker) it is not
> > > gone. It is only gone, if I mute "Master" or have a headphone
> > > plugged in and mute "Headphone" or "Master".
> > 
> > Interesting.  The "Speaker" mute changes "Speaker Playback Switch",
> > and as you can see in alsa-info.sh output, this toggles the mute of
> > the speaker pin NID 0x14, i.e. the endpoint.  If "Master" influences,
> > it means to mute *both* Headphone and Speaker mutes would work.
> > Could you check this?
> Muting both Headphone and Speaker does not work for the static noise on
> the speaker.

Then check what's the difference in codec proc content between the two
cases: Master=mute and Headphone+Speaker=mute.

> > > More fascinating, it is not present, if the speaker is not muted
> > > and I disable powersaving via "echo '0' >
> > > '/sys/module/snd_hda_intel/parameters/power_save'" but even then,
> > > it is still present on the headphone.
> > 
> > Hm.  Is the noise audible when you playback a PCM stream, too?
> > For example, you can play a silent stream.
> Yes, then it is audible.
> 
> > > > > > Also, what if you use the module option for snd-hda-intel
> > > > > > model=nofixup or model=generic?
> > > > > That did not change anything either. Passing the "mixer_nid = 0"
> > > > > hint also did not get rid of the static noise, when loading
> > > > > snd-hda-intel with model=nofixup resp. model=generic.
> > > > 
> > > > Did you reboot with setting the option in /etc/modprobe.d/*?
> > > > Reloading the module might not work for such a problem.
> > > No, I just unloaded every sound-related module and than loaded the
> > > module via "modprobe snd-hda-intel model=..." again.
> > 
> > Then always test with reboot.  The problem is about the
> > vendor-specific setups, and it's often sticky unless the cold boot.
> > At best, do the cold boot.  The warm boot doesn't cure always.
> Ok, I tested with a reboot but that did not help.
> 
> > > > In either way, there should be some difference in alsa-info.sh
> > > > output, e.g. more (or less) mixer items with the model option.
> > > The difference is their, all the "Dock ..." entries were missing,
> > > when loading with the model="..." option.
> > 
> > Yes, and you should also see the difference in the kernel messages.
> > 
> > Another thing to check is to swap the DAC assignment.  There was a
> > similar problem on some Sony laptops, and we had to swap the DAC
> > assignment since the hardware seems to have some implicit assumption
> > of the DAC.  A test patch is below.
> Thanks, but sadly the patch did not help.

I have no much other clue, so far.  The rest you can test is to toggle
EAPD, toggle GPIO pin, and change the different pin setups, e.g. put
VREF or HP amp bit on any (even unused) pins.


Takashi
Julian Wollrath Aug. 22, 2014, 4:18 p.m. UTC | #3
Am Fri, 15 Aug 2014 08:02:38 +0200
schrieb Takashi Iwai <tiwai@suse.de>:

> At Thu, 14 Aug 2014 18:29:19 +0200,
> Julian Wollrath wrote:
> > 
> > > > > > > Thanks.  The setup looks OK, the path is:
> > > > > > >   DAC (0x02) -> mixer (0x0c) -> mixer (0x14)
> > > > > > > and the mixer mutes the loopback path (index 1).
> > > > > > > 
> > > > > > > Is it the state where you still hear the static noise?
> > > > > > Yes, the alsa-info.sh script was executed, while hearing the
> > > > > > static noise.
> > > > > 
> > > > > OK.  And if you mute "Speaker" or "Headphone", the noise is
> > > > > gone, too, right?
> > > > No, if I mute "Speaker" (the internal laptop speaker) it is not
> > > > gone. It is only gone, if I mute "Master" or have a headphone
> > > > plugged in and mute "Headphone" or "Master".
> > > 
> > > Interesting.  The "Speaker" mute changes "Speaker Playback
> > > Switch", and as you can see in alsa-info.sh output, this toggles
> > > the mute of the speaker pin NID 0x14, i.e. the endpoint.  If
> > > "Master" influences, it means to mute *both* Headphone and
> > > Speaker mutes would work. Could you check this?
> > Muting both Headphone and Speaker does not work for the static
> > noise on the speaker.
> 
> Then check what's the difference in codec proc content between the two
> cases: Master=mute and Headphone+Speaker=mute.
> 
> > > > More fascinating, it is not present, if the speaker is not muted
> > > > and I disable powersaving via "echo '0' >
> > > > '/sys/module/snd_hda_intel/parameters/power_save'" but even
> > > > then, it is still present on the headphone.
> > > 
> > > Hm.  Is the noise audible when you playback a PCM stream, too?
> > > For example, you can play a silent stream.
> > Yes, then it is audible.
> > 
> > > > > > > Also, what if you use the module option for snd-hda-intel
> > > > > > > model=nofixup or model=generic?
> > > > > > That did not change anything either. Passing the "mixer_nid
> > > > > > = 0" hint also did not get rid of the static noise, when
> > > > > > loading snd-hda-intel with model=nofixup resp.
> > > > > > model=generic.
> > > > > 
> > > > > Did you reboot with setting the option in /etc/modprobe.d/*?
> > > > > Reloading the module might not work for such a problem.
> > > > No, I just unloaded every sound-related module and than loaded
> > > > the module via "modprobe snd-hda-intel model=..." again.
> > > 
> > > Then always test with reboot.  The problem is about the
> > > vendor-specific setups, and it's often sticky unless the cold
> > > boot. At best, do the cold boot.  The warm boot doesn't cure
> > > always.
> > Ok, I tested with a reboot but that did not help.
> > 
> > > > > In either way, there should be some difference in alsa-info.sh
> > > > > output, e.g. more (or less) mixer items with the model option.
> > > > The difference is their, all the "Dock ..." entries were
> > > > missing, when loading with the model="..." option.
> > > 
> > > Yes, and you should also see the difference in the kernel
> > > messages.
> > > 
> > > Another thing to check is to swap the DAC assignment.  There was a
> > > similar problem on some Sony laptops, and we had to swap the DAC
> > > assignment since the hardware seems to have some implicit
> > > assumption of the DAC.  A test patch is below.
> > Thanks, but sadly the patch did not help.
> 
> I have no much other clue, so far.  The rest you can test is to toggle
> EAPD, toggle GPIO pin, and change the different pin setups, e.g. put
> VREF or HP amp bit on any (even unused) pins.
Toggling the EAPD got rid of the noise but I also did not get any sound
output anymore. Playing with the other pins got me nowhere. Seems like
I have to live with the noise.

Nevertheless, thank you for your help.


Cheers,
Julian
> 
> 
> Takashi
Takashi Iwai Aug. 23, 2014, 6:40 p.m. UTC | #4
At Fri, 22 Aug 2014 18:18:28 +0200,
Julian Wollrath wrote:
> 
> Am Fri, 15 Aug 2014 08:02:38 +0200
> schrieb Takashi Iwai <tiwai@suse.de>:
> 
> > At Thu, 14 Aug 2014 18:29:19 +0200,
> > Julian Wollrath wrote:
> > > 
> > > > > > > > Thanks.  The setup looks OK, the path is:
> > > > > > > >   DAC (0x02) -> mixer (0x0c) -> mixer (0x14)
> > > > > > > > and the mixer mutes the loopback path (index 1).
> > > > > > > > 
> > > > > > > > Is it the state where you still hear the static noise?
> > > > > > > Yes, the alsa-info.sh script was executed, while hearing the
> > > > > > > static noise.
> > > > > > 
> > > > > > OK.  And if you mute "Speaker" or "Headphone", the noise is
> > > > > > gone, too, right?
> > > > > No, if I mute "Speaker" (the internal laptop speaker) it is not
> > > > > gone. It is only gone, if I mute "Master" or have a headphone
> > > > > plugged in and mute "Headphone" or "Master".
> > > > 
> > > > Interesting.  The "Speaker" mute changes "Speaker Playback
> > > > Switch", and as you can see in alsa-info.sh output, this toggles
> > > > the mute of the speaker pin NID 0x14, i.e. the endpoint.  If
> > > > "Master" influences, it means to mute *both* Headphone and
> > > > Speaker mutes would work. Could you check this?
> > > Muting both Headphone and Speaker does not work for the static
> > > noise on the speaker.
> > 
> > Then check what's the difference in codec proc content between the two
> > cases: Master=mute and Headphone+Speaker=mute.
> > 
> > > > > More fascinating, it is not present, if the speaker is not muted
> > > > > and I disable powersaving via "echo '0' >
> > > > > '/sys/module/snd_hda_intel/parameters/power_save'" but even
> > > > > then, it is still present on the headphone.
> > > > 
> > > > Hm.  Is the noise audible when you playback a PCM stream, too?
> > > > For example, you can play a silent stream.
> > > Yes, then it is audible.
> > > 
> > > > > > > > Also, what if you use the module option for snd-hda-intel
> > > > > > > > model=nofixup or model=generic?
> > > > > > > That did not change anything either. Passing the "mixer_nid
> > > > > > > = 0" hint also did not get rid of the static noise, when
> > > > > > > loading snd-hda-intel with model=nofixup resp.
> > > > > > > model=generic.
> > > > > > 
> > > > > > Did you reboot with setting the option in /etc/modprobe.d/*?
> > > > > > Reloading the module might not work for such a problem.
> > > > > No, I just unloaded every sound-related module and than loaded
> > > > > the module via "modprobe snd-hda-intel model=..." again.
> > > > 
> > > > Then always test with reboot.  The problem is about the
> > > > vendor-specific setups, and it's often sticky unless the cold
> > > > boot. At best, do the cold boot.  The warm boot doesn't cure
> > > > always.
> > > Ok, I tested with a reboot but that did not help.
> > > 
> > > > > > In either way, there should be some difference in alsa-info.sh
> > > > > > output, e.g. more (or less) mixer items with the model option.
> > > > > The difference is their, all the "Dock ..." entries were
> > > > > missing, when loading with the model="..." option.
> > > > 
> > > > Yes, and you should also see the difference in the kernel
> > > > messages.
> > > > 
> > > > Another thing to check is to swap the DAC assignment.  There was a
> > > > similar problem on some Sony laptops, and we had to swap the DAC
> > > > assignment since the hardware seems to have some implicit
> > > > assumption of the DAC.  A test patch is below.
> > > Thanks, but sadly the patch did not help.
> > 
> > I have no much other clue, so far.  The rest you can test is to toggle
> > EAPD, toggle GPIO pin, and change the different pin setups, e.g. put
> > VREF or HP amp bit on any (even unused) pins.
> Toggling the EAPD got rid of the noise but I also did not get any sound
> output anymore. Playing with the other pins got me nowhere. Seems like
> I have to live with the noise.

Possibly a combination of something might work, but it needs really
many trial-and-error.  In anyway, if you hit a good state
coincidentally, don't forget to take alsa-info.sh snapshot.


Takashi
diff mbox

Patch

diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 6b38ec3c6e57..10c47a0e6c70 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -3280,6 +3280,22 @@  static void alc269_fixup_pincfg_no_hp_to_lineout(struct hda_codec *codec,
 		spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
 }
 
+static void alc269_fixup_thinkpad_dac_bind(struct hda_codec *codec,
+					   const struct hda_fixup *fix,
+					   int action)
+{
+	struct alc_spec *spec = codec->spec;
+	static hda_nid_t preferred_pairs[] = {
+		0x15, 0x02,
+		0x1b, 0x02,
+		0x14, 0x03,
+		0,
+	};
+
+	if (action == HDA_FIXUP_ACT_PRE_PROBE)
+		spec->gen.preferred_dacs = preferred_pairs;
+}
+
 static void alc269_fixup_hweq(struct hda_codec *codec,
 			       const struct hda_fixup *fix, int action)
 {
@@ -4358,6 +4374,7 @@  enum {
 	ALC269_FIXUP_HP_LINE1_MIC1_LED,
 	ALC269_FIXUP_INV_DMIC,
 	ALC269_FIXUP_LENOVO_DOCK,
+	ALC269_FIXUP_THINKPAD_DAC_BIND,
 	ALC269_FIXUP_NO_SHUTUP,
 	ALC286_FIXUP_SONY_MIC_NO_PRESENCE,
 	ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT,
@@ -4576,6 +4593,12 @@  static const struct hda_fixup alc269_fixups[] = {
 		.chained = true,
 		.chain_id = ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT
 	},
+	[ALC269_FIXUP_THINKPAD_DAC_BIND] = {
+		.type = HDA_FIXUP_FUNC,
+		.v.func = alc269_fixup_thinkpad_dac_bind,
+		.chained = true,
+		.chain_id = ALC269_FIXUP_LENOVO_DOCK,
+	},
 	[ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT] = {
 		.type = HDA_FIXUP_FUNC,
 		.v.func = alc269_fixup_pincfg_no_hp_to_lineout,
@@ -5044,7 +5067,7 @@  static const struct snd_pci_quirk alc269_fixup_tbl[] = {
 	SND_PCI_QUIRK(0x17aa, 0x21ca, "Thinkpad L412", ALC269_FIXUP_SKU_IGNORE),
 	SND_PCI_QUIRK(0x17aa, 0x21e9, "Thinkpad Edge 15", ALC269_FIXUP_SKU_IGNORE),
 	SND_PCI_QUIRK(0x17aa, 0x21f6, "Thinkpad T530", ALC269_FIXUP_LENOVO_DOCK),
-	SND_PCI_QUIRK(0x17aa, 0x21fa, "Thinkpad X230", ALC269_FIXUP_LENOVO_DOCK),
+	SND_PCI_QUIRK(0x17aa, 0x21fa, "Thinkpad X230", ALC269_FIXUP_THINKPAD_DAC_BIND),
 	SND_PCI_QUIRK(0x17aa, 0x21f3, "Thinkpad T430", ALC269_FIXUP_LENOVO_DOCK),
 	SND_PCI_QUIRK(0x17aa, 0x21fb, "Thinkpad T430s", ALC269_FIXUP_LENOVO_DOCK),
 	SND_PCI_QUIRK(0x17aa, 0x2203, "Thinkpad X230 Tablet", ALC269_FIXUP_LENOVO_DOCK),