@@ -7352,6 +7352,7 @@ enum {
7352
7352
ALC287_FIXUP_LEGION_15IMHG05_AUTOMUTE ,
7353
7353
ALC287_FIXUP_YOGA7_14ITL_SPEAKERS ,
7354
7354
ALC298_FIXUP_LENOVO_C940_DUET7 ,
7355
+ ALC287_FIXUP_LENOVO_14IRP8_DUETITL ,
7355
7356
ALC287_FIXUP_13S_GEN2_SPEAKERS ,
7356
7357
ALC256_FIXUP_SET_COEF_DEFAULTS ,
7357
7358
ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE ,
@@ -7401,6 +7402,26 @@ static void alc298_fixup_lenovo_c940_duet7(struct hda_codec *codec,
7401
7402
__snd_hda_apply_fixup (codec , id , action , 0 );
7402
7403
}
7403
7404
7405
+ /* A special fixup for Lenovo Slim/Yoga Pro 9 14IRP8 and Yoga DuetITL 2021;
7406
+ * 14IRP8 PCI SSID will mistakenly be matched with the DuetITL codec SSID,
7407
+ * so we need to apply a different fixup in this case. The only DuetITL codec
7408
+ * SSID reported so far is the 17aa:3802 while the 14IRP8 has the 17aa:38be
7409
+ * and 17aa:38bf. If it weren't for the PCI SSID, the 14IRP8 models would
7410
+ * have matched correctly by their codecs.
7411
+ */
7412
+ static void alc287_fixup_lenovo_14irp8_duetitl (struct hda_codec * codec ,
7413
+ const struct hda_fixup * fix ,
7414
+ int action )
7415
+ {
7416
+ int id ;
7417
+
7418
+ if (codec -> core .subsystem_id == 0x17aa3802 )
7419
+ id = ALC287_FIXUP_YOGA7_14ITL_SPEAKERS ; /* DuetITL */
7420
+ else
7421
+ id = ALC287_FIXUP_TAS2781_I2C ; /* 14IRP8 */
7422
+ __snd_hda_apply_fixup (codec , id , action , 0 );
7423
+ }
7424
+
7404
7425
static const struct hda_fixup alc269_fixups [] = {
7405
7426
[ALC269_FIXUP_GPIO2 ] = {
7406
7427
.type = HDA_FIXUP_FUNC ,
@@ -9285,6 +9306,10 @@ static const struct hda_fixup alc269_fixups[] = {
9285
9306
.type = HDA_FIXUP_FUNC ,
9286
9307
.v .func = alc298_fixup_lenovo_c940_duet7 ,
9287
9308
},
9309
+ [ALC287_FIXUP_LENOVO_14IRP8_DUETITL ] = {
9310
+ .type = HDA_FIXUP_FUNC ,
9311
+ .v .func = alc287_fixup_lenovo_14irp8_duetitl ,
9312
+ },
9288
9313
[ALC287_FIXUP_13S_GEN2_SPEAKERS ] = {
9289
9314
.type = HDA_FIXUP_VERBS ,
9290
9315
.v .verbs = (const struct hda_verb []) {
@@ -10134,7 +10159,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
10134
10159
SND_PCI_QUIRK (0x17aa , 0x31af , "ThinkCentre Station" , ALC623_FIXUP_LENOVO_THINKSTATION_P340 ),
10135
10160
SND_PCI_QUIRK (0x17aa , 0x334b , "Lenovo ThinkCentre M70 Gen5" , ALC283_FIXUP_HEADSET_MIC ),
10136
10161
SND_PCI_QUIRK (0x17aa , 0x3801 , "Lenovo Yoga9 14IAP7" , ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN ),
10137
- SND_PCI_QUIRK (0x17aa , 0x3802 , "Lenovo Yoga DuetITL 2021" , ALC287_FIXUP_YOGA7_14ITL_SPEAKERS ),
10162
+ SND_PCI_QUIRK (0x17aa , 0x3802 , "Lenovo Yoga Pro 9 14IRP8 / DuetITL 2021" , ALC287_FIXUP_LENOVO_14IRP8_DUETITL ),
10138
10163
SND_PCI_QUIRK (0x17aa , 0x3813 , "Legion 7i 15IMHG05" , ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS ),
10139
10164
SND_PCI_QUIRK (0x17aa , 0x3818 , "Lenovo C940 / Yoga Duet 7" , ALC298_FIXUP_LENOVO_C940_DUET7 ),
10140
10165
SND_PCI_QUIRK (0x17aa , 0x3819 , "Lenovo 13s Gen2 ITL" , ALC287_FIXUP_13S_GEN2_SPEAKERS ),
0 commit comments