[PATCH AUTOSEL 6.19-6.18] ALSA: hda/realtek: Fix headset mic on ASUS Zenbook 14 UX3405MA
From: Sasha Levin
Date: Mon Feb 23 2026 - 07:45:54 EST
From: Erik Sanjaya <sirreidlos@xxxxxxxxx>
[ Upstream commit 91062e119b4eafde553c894ca072cd615a6dae2e ]
The ASUS Zenbook 14 UX3405MA uses an ALC294 codec with CS35L41
amplifiers over SPI. The existing quirk for this model only configured
the amplifiers, leaving the headset microphone on the combo jack
non-functional.
Introduce a new fixup that configures pin 0x19 as headset mic input
and chains to ALC245_FIXUP_CS35L41_SPI_2 to preserve speaker
functionality.
Similar to the fix done for the UM3406HA in commit 018f659753fd
("ALSA: hda/realtek: Fix headset mic on ASUS Zenbook 14").
Signed-off-by: Erik Sanjaya <sirreidlos@xxxxxxxxx>
Link: https://patch.msgid.link/20260217102112.20651-1-sirreidlos@xxxxxxxxx
Signed-off-by: Takashi Iwai <tiwai@xxxxxxx>
Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>
---
LLM Generated explanations, may be completely bogus:
## Analysis: ALSA: hda/realtek: Fix headset mic on ASUS Zenbook 14
UX3405MA
### What the commit does
This commit fixes a non-functional headset microphone on the ASUS
Zenbook 14 UX3405MA laptop. The device uses an ALC294 codec with CS35L41
amplifiers over SPI. The existing quirk (`ALC245_FIXUP_CS35L41_SPI_2`)
only configured the amplifiers for speakers, but didn't configure pin
0x19 for headset mic input.
The fix:
1. Adds a new fixup entry `ALC294_FIXUP_ASUS_SPI_HEADSET_MIC` that
configures pin 0x19 as headset mic input and chains to
`ALC245_FIXUP_CS35L41_SPI_2` (preserving speaker functionality)
2. Changes the quirk table entry for `0x1043:0x1a63` (ASUS UX3405MA)
from `ALC245_FIXUP_CS35L41_SPI_2` to the new
`ALC294_FIXUP_ASUS_SPI_HEADSET_MIC`
### Classification: Hardware Quirk Fix
This falls squarely into the **audio codec quirk** category, which is
explicitly listed as stable-worthy material. It's a `SND_PCI_QUIRK`
entry change for a specific laptop model, following the exact same
pattern as many other ASUS headset mic fixes in the same file.
### Stable Kernel Criteria Assessment
1. **Obviously correct and tested**: The pattern is identical to the
existing `ALC294_FIXUP_ASUS_I2C_HEADSET_MIC` (for the UM3406HA) and
`ALC294_FIXUP_ASUS_HEADSET_MIC` fixups. The commit references a
similar prior fix (commit 018f659753fd). The new fixup simply adds
pin configuration and chains to the existing SPI amplifier fixup.
2. **Fixes a real bug**: Yes - the headset microphone on this specific
laptop model is completely non-functional without this fix.
3. **Important issue**: Headset mic non-functionality is a significant
usability issue for laptop users (video calls, voice recording,
etc.).
4. **Small and contained**: The change adds ~10 lines for the new fixup
entry, 1 line for the enum, and changes 1 line in the quirk table.
Total impact is minimal.
5. **No new features**: This is a hardware quirk/workaround, not a new
feature. It makes existing hardware work correctly.
6. **Applies cleanly**: The change is self-contained within a single
file and follows established patterns.
### Risk Assessment
- **Very low risk**: The change only affects the specific ASUS UX3405MA
laptop (PCI SSID `0x1043:0x1a63`). No other hardware is affected.
- **Well-established pattern**: This is the same pattern used for dozens
of other ASUS laptop quirk fixes in this file.
- **Chains to existing fixup**: `ALC245_FIXUP_CS35L41_SPI_2` already
exists in the codebase; the new fixup just adds pin configuration
before chaining to it.
### Verification
- Reviewed the diff: The new `ALC294_FIXUP_ASUS_SPI_HEADSET_MIC` fixup
follows the exact same structure as
`ALC294_FIXUP_ASUS_I2C_HEADSET_MIC` (visible in the diff context at
the lines just above), differing only in the pin config value and
chain target (SPI vs I2C).
- The quirk table change at line 7192 (old) / 7202 (new) replaces
`ALC245_FIXUP_CS35L41_SPI_2` with `ALC294_FIXUP_ASUS_SPI_HEADSET_MIC`
for the specific SSID `0x1043:0x1a63`.
- The commit message explicitly states the problem (headset mic non-
functional) and the solution (pin configuration + chaining to existing
SPI fixup).
- The commit has been accepted by the ALSA maintainer Takashi Iwai,
confirming it is correct.
- The referenced similar fix for UM3406HA
(`ALC294_FIXUP_ASUS_I2C_HEADSET_MIC`) is visible in the diff context,
confirming the pattern is established.
- Could NOT verify whether the prerequisite `ALC245_FIXUP_CS35L41_SPI_2`
and related enum entries exist in all stable trees (unverified), but
this fixup has been in the kernel for several releases and is very
likely present.
### Conclusion
This is a textbook audio codec quirk fix for a specific laptop model. It
fixes a real user-facing bug (non-functional headset mic), is small and
self-contained, follows established patterns, carries essentially zero
regression risk (only affects one specific hardware model), and has been
reviewed and accepted by the subsystem maintainer.
**YES**
sound/hda/codecs/realtek/alc269.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c
index b66965a521076..b560cc013e53e 100644
--- a/sound/hda/codecs/realtek/alc269.c
+++ b/sound/hda/codecs/realtek/alc269.c
@@ -3652,6 +3652,7 @@ enum {
ALC294_FIXUP_ASUS_MIC,
ALC294_FIXUP_ASUS_HEADSET_MIC,
ALC294_FIXUP_ASUS_I2C_HEADSET_MIC,
+ ALC294_FIXUP_ASUS_SPI_HEADSET_MIC,
ALC294_FIXUP_ASUS_SPK,
ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE,
ALC285_FIXUP_LENOVO_PC_BEEP_IN_NOISE,
@@ -4997,6 +4998,15 @@ static const struct hda_fixup alc269_fixups[] = {
.chained = true,
.chain_id = ALC287_FIXUP_CS35L41_I2C_2
},
+ [ALC294_FIXUP_ASUS_SPI_HEADSET_MIC] = {
+ .type = HDA_FIXUP_PINS,
+ .v.pins = (const struct hda_pintbl[]) {
+ { 0x19, 0x04a11020 }, /* use as headset mic */
+ { }
+ },
+ .chained = true,
+ .chain_id = ALC245_FIXUP_CS35L41_SPI_2
+ },
[ALC294_FIXUP_ASUS_SPK] = {
.type = HDA_FIXUP_VERBS,
.v.verbs = (const struct hda_verb[]) {
@@ -6927,7 +6937,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x1043, 0x19ce, "ASUS B9450FA", ALC294_FIXUP_ASUS_HPE),
SND_PCI_QUIRK(0x1043, 0x19e1, "ASUS UX581LV", ALC295_FIXUP_ASUS_MIC_NO_PRESENCE),
SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW),
- SND_PCI_QUIRK(0x1043, 0x1a63, "ASUS UX3405MA", ALC245_FIXUP_CS35L41_SPI_2),
+ SND_PCI_QUIRK(0x1043, 0x1a63, "ASUS UX3405MA", ALC294_FIXUP_ASUS_SPI_HEADSET_MIC),
SND_PCI_QUIRK(0x1043, 0x1a83, "ASUS UM5302LA", ALC294_FIXUP_CS35L41_I2C_2),
SND_PCI_QUIRK(0x1043, 0x1a8e, "ASUS G712LWS", ALC294_FIXUP_LENOVO_MIC_LOCATION),
SND_PCI_QUIRK(0x1043, 0x1a8f, "ASUS UX582ZS", ALC245_FIXUP_CS35L41_SPI_2),
--
2.51.0