[PATCH] ALSA: hda/realtek: Enable headset buttons on ASUS TUF Gaming A15

From: Seas0

Date: Tue Sep 08 2026 - 01:14:49 EST


Inline headset buttons are not reported on the ASUS TUF Gaming A15
FA507XV/FA507XI with an ALC256 codec and subsystem ID 1043:14b3. The
existing pin quirk selects ALC256_FIXUP_ASUS_MIC_NO_PRESENCE, which
configures the headset microphone and CTIA/OMTP detection but does not
enable the headset button decoder.

Add an exact PCI subsystem quirk using alc_fixup_headset_jack to enable
the existing button decoder and key map. Chain it to
ALC256_FIXUP_ASUS_MIC_NO_PRESENCE to retain the microphone pin override
and headset-mode handling when the PCI quirk takes precedence over
pin-based matching.

The same quirk was tested on an FA507XV on a archlinux installation with
kernel version 7.2.4 with a three-button headset. All buttons produced
clean EV_KEY press and release events during the test.

Assisted-by: Codex GPT-6 Astra
Signed-off-by: Seas0 <season1277@xxxxxxxxxxx>
---
sound/hda/codecs/realtek/alc269.c | 9 +++++++++
1 file changed, 9 insertions(+)

diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c
index ecc9c6e6ab98..9e33d29a3c15 100644
--- a/sound/hda/codecs/realtek/alc269.c
+++ b/sound/hda/codecs/realtek/alc269.c
@@ -4175,6 +4175,7 @@ enum {
ALC286_FIXUP_ACER_AIO_HEADSET_MIC,
ALC256_FIXUP_ASUS_HEADSET_MIC,
ALC256_FIXUP_ASUS_MIC_NO_PRESENCE,
+ ALC256_FIXUP_ASUS_HEADSET_JACK,
ALC255_FIXUP_PREDATOR_SUBWOOFER,
ALC299_FIXUP_PREDATOR_SPK,
ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE,
@@ -5718,6 +5719,12 @@ static const struct hda_fixup alc269_fixups[] = {
.chained = true,
.chain_id = ALC256_FIXUP_ASUS_HEADSET_MODE
},
+ [ALC256_FIXUP_ASUS_HEADSET_JACK] = {
+ .type = HDA_FIXUP_FUNC,
+ .v.func = alc_fixup_headset_jack,
+ .chained = true,
+ .chain_id = ALC256_FIXUP_ASUS_MIC_NO_PRESENCE,
+ },
[ALC255_FIXUP_PREDATOR_SUBWOOFER] = {
.type = HDA_FIXUP_PINS,
.v.pins = (const struct hda_pintbl[]) {
@@ -7756,6 +7763,8 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x1043, 0x1473, "ASUS GU604VI/VC/VE/VG/VJ/VQ/VU/VV/VY/VZ", ALC285_FIXUP_ASUS_HEADSET_MIC),
SND_PCI_QUIRK(0x1043, 0x1483, "ASUS GU603VQ/VU/VV/VJ/VI", ALC285_FIXUP_ASUS_HEADSET_MIC),
SND_PCI_QUIRK(0x1043, 0x1493, "ASUS GV601VV/VU/VJ/VQ/VI", ALC285_FIXUP_ASUS_HEADSET_MIC),
+ SND_PCI_QUIRK(0x1043, 0x14b3, "ASUS TUF Gaming A15 FA507XV/FA507XI",
+ ALC256_FIXUP_ASUS_HEADSET_JACK),
SND_PCI_QUIRK(0x1043, 0x14d3, "ASUS G614JY/JZ/JG", ALC245_FIXUP_CS35L41_SPI_2),
SND_PCI_QUIRK(0x1043, 0x14e3, "ASUS G513PI/PU/PV", ALC287_FIXUP_CS35L41_I2C_2),
SND_PCI_QUIRK(0x1043, 0x14f2, "ASUS VivoBook X515JA", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),

base-commit: 4c4e4be4edd5dbf5f7f6a3ef4fc0c243f2d01b3c
--
2.55.0