On Tue, 06 Oct 2020 09:53:35 +0200, Jian-Hong Pan wrote: > > The ASUS D700SA desktop's audio (1043:2390) with ALC887 cannot detect > the headset microphone and another headphone jack until > ALC887_FIXUP_ASUS_HMIC and ALC887_FIXUP_ASUS_AUDIO quirks are applied. > The NID 0x15 maps as the headset microphone and NID 0x19 maps as another > headphone jack. Also need the function like alc887_fixup_asus_jack to > enable the audio jacks. > > Signed-off-by: Jian-Hong Pan <jhp@xxxxxxxxxxxxx> > Signed-off-by: Kailang Yang <kailang@xxxxxxxxxxx> > --- > sound/pci/hda/patch_realtek.c | 41 +++++++++++++++++++++++++++++++++++ > 1 file changed, 41 insertions(+) > > diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c > index d4f17b465892..8d0928bdc9ff 100644 > --- a/sound/pci/hda/patch_realtek.c > +++ b/sound/pci/hda/patch_realtek.c > @@ -1929,6 +1929,8 @@ enum { > ALC1220_FIXUP_CLEVO_P950, > ALC1220_FIXUP_CLEVO_PB51ED, > ALC1220_FIXUP_CLEVO_PB51ED_PINS, > + ALC887_FIXUP_ASUS_AUDIO, > + ALC887_FIXUP_ASUS_HMIC, > }; > > static void alc889_fixup_coef(struct hda_codec *codec, > @@ -2141,6 +2143,30 @@ static void alc1220_fixup_clevo_pb51ed(struct hda_codec *codec, > alc_fixup_headset_mode_no_hp_mic(codec, fix, action); > } > > +static void alc887_asus_hp_automute_hook(struct hda_codec *codec, > + struct hda_jack_callback *jack) > +{ > + struct alc_spec *spec = codec->spec; > + int vref; > + > + snd_hda_gen_hp_automute(codec, jack); > + > + vref = spec->gen.hp_jack_present ? 0xc4 : 0xc0; Use the AC_PINCTL_* instead of the raw numbers. Some values are shortened form in hda_local.h, too (e.g. 0xc0 = PIN_HP). > + snd_hda_codec_write(codec, 0x19, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, > + vref); Better to use snd_hda_set_pin_ctl(). > +} > + > +static void alc887_fixup_asus_jack(struct hda_codec *codec, > + const struct hda_fixup *fix, int action) > +{ > + struct alc_spec *spec = codec->spec; > + if (action != HDA_FIXUP_ACT_PROBE) > + return; > + snd_hda_codec_write(codec, 0x1b, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, > + 0xc0); This one would be snd_hda_set_pin_ctl_cached(), so that it'll be restored at resume. thanks, Takashi