Skip to content

Commit 54947cd

Browse files
committed
ALSA: hda/realtek - Fix speaker output regression on Thinkpad T570
We've got a regression report for some Thinkpad models (at least T570s) which shows the too low speaker output volume. The bisection leaded to the commit 61fcf8e ("ALSA: hda/realtek - Enable Thinkpad Dock device for ALC298 platform"), and it's basically adding the two pin configurations for the dock, and looks harmless. The real culprit seems, though, that the DAC assignment for the speaker pin is implicitly assumed on these devices, i.e. pin NID 0x14 to be coupled with DAC NID 0x03. When more pins are configured by the commit above, the auto-parser changes the DAC assignment, and this resulted in the regression. As a workaround, just provide the fixed pin / DAC mapping table for this Thinkpad fixup function. It's no generic solution, but the problem itself is pretty much device-specific, so must be good enough. Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1554304 Fixes: 61fcf8e ("ALSA: hda/realtek - Enable Thinkpad Dock device for ALC298 platform") Cc: <stable@vger.kernel.org> Reported-and-tested-by: Jeremy Cline <jcline@redhat.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
1 parent 5363857 commit 54947cd

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

sound/pci/hda/patch_realtek.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4988,9 +4988,18 @@ static void alc_fixup_tpt470_dock(struct hda_codec *codec,
49884988
{ 0x19, 0x21a11010 }, /* dock mic */
49894989
{ }
49904990
};
4991+
/* Assure the speaker pin to be coupled with DAC NID 0x03; otherwise
4992+
* the speaker output becomes too low by some reason on Thinkpads with
4993+
* ALC298 codec
4994+
*/
4995+
static hda_nid_t preferred_pairs[] = {
4996+
0x14, 0x03, 0x17, 0x02, 0x21, 0x02,
4997+
0
4998+
};
49914999
struct alc_spec *spec = codec->spec;
49925000

49935001
if (action == HDA_FIXUP_ACT_PRE_PROBE) {
5002+
spec->gen.preferred_dacs = preferred_pairs;
49945003
spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
49955004
snd_hda_apply_pincfgs(codec, pincfgs);
49965005
} else if (action == HDA_FIXUP_ACT_INIT) {

0 commit comments

Comments
 (0)