Skip to content

Commit e43252d

Browse files
KailangYangtiwai
authored andcommitted
ALSA: hda/realtek - ALC287 I2S speaker platform support
0x17 was only speaker pin, DAC assigned will be 0x03. Headphone assigned to 0x02. Playback via headphone will get EQ filter processing. So,it needs to swap DAC. Tested-by: Mark Pearson <mpearson@lenovo.com> Signed-off-by: Kailang Yang <kailang@realtek.com> Link: https://lore.kernel.org/r/4e4cfa1b3b4c46838aecafc6e8b6f876@realtek.com Signed-off-by: Takashi Iwai <tiwai@suse.de>
1 parent 86496fd commit e43252d

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

sound/pci/hda/patch_realtek.c

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7057,6 +7057,27 @@ static void alc295_fixup_dell_inspiron_top_speakers(struct hda_codec *codec,
70577057
}
70587058
}
70597059

7060+
/* Forcibly assign NID 0x03 to HP while NID 0x02 to SPK */
7061+
static void alc287_fixup_bind_dacs(struct hda_codec *codec,
7062+
const struct hda_fixup *fix, int action)
7063+
{
7064+
struct alc_spec *spec = codec->spec;
7065+
static const hda_nid_t conn[] = { 0x02, 0x03 }; /* exclude 0x06 */
7066+
static const hda_nid_t preferred_pairs[] = {
7067+
0x17, 0x02, 0x21, 0x03, 0
7068+
};
7069+
7070+
if (action != HDA_FIXUP_ACT_PRE_PROBE)
7071+
return;
7072+
7073+
snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
7074+
spec->gen.preferred_dacs = preferred_pairs;
7075+
spec->gen.auto_mute_via_amp = 1;
7076+
snd_hda_codec_write_cache(codec, 0x14, 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
7077+
0x0); /* Make sure 0x14 was disable */
7078+
}
7079+
7080+
70607081
enum {
70617082
ALC269_FIXUP_GPIO2,
70627083
ALC269_FIXUP_SONY_VAIO,
@@ -7319,6 +7340,7 @@ enum {
73197340
ALC287_FIXUP_TAS2781_I2C,
73207341
ALC245_FIXUP_HP_MUTE_LED_COEFBIT,
73217342
ALC245_FIXUP_HP_X360_MUTE_LEDS,
7343+
ALC287_FIXUP_THINKPAD_I2S_SPK,
73227344
};
73237345

73247346
/* A special fixup for Lenovo C940 and Yoga Duet 7;
@@ -9413,6 +9435,10 @@ static const struct hda_fixup alc269_fixups[] = {
94139435
.chained = true,
94149436
.chain_id = ALC245_FIXUP_HP_GPIO_LED
94159437
},
9438+
[ALC287_FIXUP_THINKPAD_I2S_SPK] = {
9439+
.type = HDA_FIXUP_FUNC,
9440+
.v.func = alc287_fixup_bind_dacs,
9441+
},
94169442
};
94179443

94189444
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
@@ -10544,6 +10570,10 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
1054410570
{0x17, 0x90170111},
1054510571
{0x19, 0x03a11030},
1054610572
{0x21, 0x03211020}),
10573+
SND_HDA_PIN_QUIRK(0x10ec0287, 0x17aa, "Lenovo", ALC287_FIXUP_THINKPAD_I2S_SPK,
10574+
{0x17, 0x90170110},
10575+
{0x19, 0x03a11030},
10576+
{0x21, 0x03211020}),
1054710577
SND_HDA_PIN_QUIRK(0x10ec0286, 0x1025, "Acer", ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE,
1054810578
{0x12, 0x90a60130},
1054910579
{0x17, 0x90170110},

0 commit comments

Comments
 (0)