ALSA: hda/conexant: Always enable the headset-mic pin on plugin
authorBob Song <songxiebing@kylinos.cn>
Wed, 26 Aug 2026 11:53:44 +0000 (19:53 +0800)
committerTakashi Iwai <tiwai@suse.de>
Wed, 26 Aug 2026 15:27:33 +0000 (17:27 +0200)
Rename the function to cx_process_headset_detect_plug_type() to reflect
that it only reports the detected plug type, and move the pin control
write into cx_update_headset_mic_vref() so that node 0x19 is always set
to enable the headset mic with the 80% VREF whenever the mic is
present, regardless of the type detection result.

Signed-off-by: Bob Song <songxiebing@kylinos.cn>
Link: https://patch.msgid.link/20260826115344.2128835-1-songxiebing@kylinos.cn
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/hda/codecs/conexant.c

index 8e950c7..7357dc9 100644 (file)
@@ -207,7 +207,7 @@ static void cx_remove(struct hda_codec *codec)
        snd_hda_gen_remove(codec);
 }
 
-static void cx_process_headset_plugin(struct hda_codec *codec)
+static void cx_process_headset_detect_plug_type(struct hda_codec *codec)
 {
        unsigned int val;
        unsigned int count = 0;
@@ -241,10 +241,12 @@ static void cx_update_headset_mic_vref(struct hda_codec *codec, struct hda_jack_
         * Check hp&mic tag to process headset plugin & plugout.
         */
        mic_present = snd_hda_codec_read(codec, 0x19, 0, AC_VERB_GET_PIN_SENSE, 0x0);
-       if (!(mic_present & AC_PINSENSE_PRESENCE)) /* mic plugout */
+       if (!(mic_present & AC_PINSENSE_PRESENCE)) { /* mic plugout */
                snd_hda_codec_write(codec, 0x19, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20);
-       else
-               cx_process_headset_plugin(codec);
+       } else {
+               cx_process_headset_detect_plug_type(codec);
+               snd_hda_codec_write(codec, 0x19, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24);
+       }
 }
 
 static int cx_suspend(struct hda_codec *codec)