]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
ALSA: hda/ca0132: Set HP/Speaker auto-detect default from headphone pin verb
authorMatt DeVillier <matt.devillier@gmail.com>
Thu, 26 Feb 2026 16:30:55 +0000 (10:30 -0600)
committerTakashi Iwai <tiwai@suse.de>
Sat, 28 Feb 2026 08:24:21 +0000 (09:24 +0100)
HP/Speaker auto-detect (VNID_HP_ASEL) has been off by default for every
CA0132 device since the driver was added in 2012. vnode_lswitch is
always initialized to 0 in ca0132_init_chip(), and no quirk or other
code path enables it. As a result, headphone jack detection works only
after the user manually turns on "HP/Speaker Auto Detect" in alsamixer,
which is not obvious on laptops with combo jacks (e.g. Google Link,
Alienware).

Change the default to follow the headphone pin config: if the pin verb
has presence detect enabled (no AC_DEFCFG_MISC_NO_PRESENCE) and the
codec supports it (AC_PINCAP_PRES_DETECT), enable HP_ASEL by default.
This lets firmware (coreboot, UEFI, etc.) express whether the headphone
jack supports insertion detection. Devices with combo jacks can default
to auto-detect; devices with fixed/no jack leave it off.

Signed-off-by: Matt DeVillier <matt.devillier@gmail.com>
Link: https://patch.msgid.link/20260226163055.825167-1-matt.devillier@gmail.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/hda/codecs/ca0132.c

index bf342a76807cabe1fe4e21d0e9e028a4b2dea153..a0677d7da8e2d801a1add1fee52656bcdf654512 100644 (file)
@@ -9816,6 +9816,15 @@ static void ca0132_config(struct hda_codec *codec)
                spec->dig_in = 0x09;
                break;
        }
+
+       /* Default HP/Speaker auto-detect from headphone pin verb: enable if the
+        * pin config indicates presence detect (not AC_DEFCFG_MISC_NO_PRESENCE).
+        */
+       if (spec->unsol_tag_hp &&
+           (snd_hda_query_pin_caps(codec, spec->unsol_tag_hp) & AC_PINCAP_PRES_DETECT) &&
+           !(get_defcfg_misc(snd_hda_codec_get_pincfg(codec, spec->unsol_tag_hp)) &
+             AC_DEFCFG_MISC_NO_PRESENCE))
+               spec->vnode_lswitch[VNID_HP_ASEL - VNODE_START_NID] = 1;
 }
 
 static int ca0132_prepare_verbs(struct hda_codec *codec)