@@ -10235,6 +10235,27 @@ static void alc671_fixup_hp_headset_mic2(struct hda_codec *codec,
10235
10235
}
10236
10236
}
10237
10237
10238
+ static void alc897_hp_automute_hook (struct hda_codec * codec ,
10239
+ struct hda_jack_callback * jack )
10240
+ {
10241
+ struct alc_spec * spec = codec -> spec ;
10242
+ int vref ;
10243
+
10244
+ snd_hda_gen_hp_automute (codec , jack );
10245
+ vref = spec -> gen .hp_jack_present ? (PIN_HP | AC_PINCTL_VREF_100 ) : PIN_HP ;
10246
+ snd_hda_codec_write (codec , 0x1b , 0 , AC_VERB_SET_PIN_WIDGET_CONTROL ,
10247
+ vref );
10248
+ }
10249
+
10250
+ static void alc897_fixup_lenovo_headset_mic (struct hda_codec * codec ,
10251
+ const struct hda_fixup * fix , int action )
10252
+ {
10253
+ struct alc_spec * spec = codec -> spec ;
10254
+ if (action == HDA_FIXUP_ACT_PRE_PROBE ) {
10255
+ spec -> gen .hp_automute_hook = alc897_hp_automute_hook ;
10256
+ }
10257
+ }
10258
+
10238
10259
static const struct coef_fw alc668_coefs [] = {
10239
10260
WRITE_COEF (0x01 , 0xbebe ), WRITE_COEF (0x02 , 0xaaaa ), WRITE_COEF (0x03 , 0x0 ),
10240
10261
WRITE_COEF (0x04 , 0x0180 ), WRITE_COEF (0x06 , 0x0 ), WRITE_COEF (0x07 , 0x0f80 ),
@@ -10315,6 +10336,8 @@ enum {
10315
10336
ALC668_FIXUP_ASUS_NO_HEADSET_MIC ,
10316
10337
ALC668_FIXUP_HEADSET_MIC ,
10317
10338
ALC668_FIXUP_MIC_DET_COEF ,
10339
+ ALC897_FIXUP_LENOVO_HEADSET_MIC ,
10340
+ ALC897_FIXUP_HEADSET_MIC_PIN ,
10318
10341
};
10319
10342
10320
10343
static const struct hda_fixup alc662_fixups [] = {
@@ -10721,6 +10744,19 @@ static const struct hda_fixup alc662_fixups[] = {
10721
10744
{}
10722
10745
},
10723
10746
},
10747
+ [ALC897_FIXUP_LENOVO_HEADSET_MIC ] = {
10748
+ .type = HDA_FIXUP_FUNC ,
10749
+ .v .func = alc897_fixup_lenovo_headset_mic ,
10750
+ },
10751
+ [ALC897_FIXUP_HEADSET_MIC_PIN ] = {
10752
+ .type = HDA_FIXUP_PINS ,
10753
+ .v .pins = (const struct hda_pintbl []) {
10754
+ { 0x1a , 0x03a11050 },
10755
+ { }
10756
+ },
10757
+ .chained = true,
10758
+ .chain_id = ALC897_FIXUP_LENOVO_HEADSET_MIC
10759
+ },
10724
10760
};
10725
10761
10726
10762
static const struct snd_pci_quirk alc662_fixup_tbl [] = {
@@ -10765,6 +10801,10 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
10765
10801
SND_PCI_QUIRK (0x144d , 0xc051 , "Samsung R720" , ALC662_FIXUP_IDEAPAD ),
10766
10802
SND_PCI_QUIRK (0x14cd , 0x5003 , "USI" , ALC662_FIXUP_USI_HEADSET_MODE ),
10767
10803
SND_PCI_QUIRK (0x17aa , 0x1036 , "Lenovo P520" , ALC662_FIXUP_LENOVO_MULTI_CODECS ),
10804
+ SND_PCI_QUIRK (0x17aa , 0x32ca , "Lenovo ThinkCentre M80" , ALC897_FIXUP_HEADSET_MIC_PIN ),
10805
+ SND_PCI_QUIRK (0x17aa , 0x32cb , "Lenovo ThinkCentre M70" , ALC897_FIXUP_HEADSET_MIC_PIN ),
10806
+ SND_PCI_QUIRK (0x17aa , 0x32cf , "Lenovo ThinkCentre M950" , ALC897_FIXUP_HEADSET_MIC_PIN ),
10807
+ SND_PCI_QUIRK (0x17aa , 0x32f7 , "Lenovo ThinkCentre M90" , ALC897_FIXUP_HEADSET_MIC_PIN ),
10768
10808
SND_PCI_QUIRK (0x17aa , 0x38af , "Lenovo Ideapad Y550P" , ALC662_FIXUP_IDEAPAD ),
10769
10809
SND_PCI_QUIRK (0x17aa , 0x3a0d , "Lenovo Ideapad Y550" , ALC662_FIXUP_IDEAPAD ),
10770
10810
SND_PCI_QUIRK (0x1849 , 0x5892 , "ASRock B150M" , ALC892_FIXUP_ASROCK_MOBO ),
0 commit comments