[PATCH v2 2/2] ALSA: hda/realtek: call alc_update_headset_mode() in hp_automute_hook

Takashi Iwai tiwai at suse.de
Fri Mar 19 11:17:55 CET 2021


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 at canonical.com>
> ---
>  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


More information about the Alsa-devel mailing list