On Fri, 19 Mar 2021 08:59:03 +0100, Hui Wang wrote: > > We found the alc_update_headset_mode() is not called on some machines > when unplugging the headset, as a result, the mode of the > ALC_HEADSET_MODE_UNPLUGGED can't be set, then the current_headset_type > is not cleared, if users plug a differnt type of headset next time, > the determine_headset_type() will not be called and the audio jack is > set to the headset type of previous time. > > On the Dell machines which connect the dmic to the PCH, if we open > the gnome-sound-setting and unplug the headset, this issue will > happen. Those machines disable the auto-mute by ucm and has no > internal mic in the input source, so the update_headset_mode() will > not be called by cap_sync_hook or automute_hook when unplugging, and > because the gnome-sound-setting is opened, the codec will not enter > the runtime_suspend state, so the update_headset_mode() will not be > called by alc_resume when unplugging. In this case the > hp_automute_hook is called when unplugging, so add > update_headset_mode() calling to this function. > > Signed-off-by: Hui Wang <hui.wang@xxxxxxxxxxxxx> > --- > sound/pci/hda/patch_realtek.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c > index 442e555de44c..c928704da20b 100644 > --- a/sound/pci/hda/patch_realtek.c > +++ b/sound/pci/hda/patch_realtek.c > @@ -5447,6 +5447,7 @@ static void alc_update_headset_jack_cb(struct hda_codec *codec, > struct hda_jack_callback *jack) > { > snd_hda_gen_hp_automute(codec, jack); > + alc_update_headset_mode(codec); > } This change was described in the above, but ... > > static void alc_probe_headset_mode(struct hda_codec *codec) > @@ -5559,7 +5560,7 @@ static void alc288_update_headset_jack_cb(struct hda_codec *codec, > { > struct alc_spec *spec = codec->spec; > > - alc_update_headset_jack_cb(codec, jack); > + snd_hda_gen_hp_automute(codec, jack); > /* Headset Mic enable or disable, only for Dell Dino */ > alc_update_gpio_data(codec, 0x40, spec->gen.hp_jack_present); This change isn't clear why it's needed from the description. Does it man that only ALC288 shouldn't call alc_update_headset_mode() by some reason? thanks, Takashi