From: Adam Holliday dochollidayxx@gmail.com
[ Upstream commit 328b80b29a6a165c47fcc04d2bef3e09ed1d28f9 ]
The ASUS ROG Zephyrus Duo 15 SE (GX551QS) with ALC 289 codec requires specific pin configuration for proper volume control. Without this quirk, volume adjustments produce a muffled sound effect as only certain channels attenuate, leaving bass frequency at full volume.
Testing with hdajackretask confirms these pin tweaks fix the issue: - Pin 0x17: Internal Speaker (LFE) - Pin 0x1e: Internal Speaker
Signed-off-by: Adam Holliday dochollidayxx@gmail.com Signed-off-by: Takashi Iwai tiwai@suse.de Signed-off-by: Sasha Levin sashal@kernel.org ---
LLM Generated explanations, may be completely bogus:
YES – The change cleanly fixes a user-visible volume-control bug on the ASUS ROG Zephyrus Duo 15 SE without touching other systems and should be backported.
- `sound/hda/codecs/realtek/alc269.c:3740` appends a new enum ID `ALC289_FIXUP_ASUS_ZEPHYRUS_DUAL_SPK` at the end of the fixup list, so no previously assigned indices shift, keeping existing quirks stable. - `sound/hda/codecs/realtek/alc269.c:6170-6177` defines the quirk body with `HDA_FIXUP_PINS`, remapping pins 0x17/0x1e to the internal speaker and LFE path; these values match Realtek conventions (`0x9017015x`) and correct the bass channel attenuation defect reported in the commit message. - `sound/hda/codecs/realtek/alc269.c:6733` wires the PCI SSID `0x1043:0x1652` for the GX551QS to the new fixup, tightly scoping the change to the affected laptop; other ASUS entries keep their existing fixups. - No functional dependencies or architectural changes accompany the quirk—other ALC289 platforms retain their existing chains, and the new entry is not chained to anything else, keeping regression risk minimal. - The bug is significant (volume slider leaves bass at full power) and has been validated with hdajackretask, so stable users of this hardware gain a real fix with negligible downside.
Given the targeted scope, tiny code delta, and user-facing impact, the patch satisfies stable backport criteria. Suggested next step: queue for the relevant supported stable series.
sound/hda/codecs/realtek/alc269.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c index 8fb1a5c6ff6df..28297e936a96f 100644 --- a/sound/hda/codecs/realtek/alc269.c +++ b/sound/hda/codecs/realtek/alc269.c @@ -3737,6 +3737,7 @@ enum { ALC285_FIXUP_ASUS_GA605K_HEADSET_MIC, ALC285_FIXUP_ASUS_GA605K_I2C_SPEAKER2_TO_DAC1, ALC269_FIXUP_POSITIVO_P15X_HEADSET_MIC, + ALC289_FIXUP_ASUS_ZEPHYRUS_DUAL_SPK, };
/* A special fixup for Lenovo C940 and Yoga Duet 7; @@ -6166,6 +6167,14 @@ static const struct hda_fixup alc269_fixups[] = { .chained = true, .chain_id = ALC269VC_FIXUP_ACER_MIC_NO_PRESENCE, }, + [ALC289_FIXUP_ASUS_ZEPHYRUS_DUAL_SPK] = { + .type = HDA_FIXUP_PINS, + .v.pins = (const struct hda_pintbl[]) { + { 0x17, 0x90170151 }, /* Internal Speaker LFE */ + { 0x1e, 0x90170150 }, /* Internal Speaker */ + { } + }, + } };
static const struct hda_quirk alc269_fixup_tbl[] = { @@ -6721,6 +6730,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = { SND_PCI_QUIRK(0x1043, 0x1517, "Asus Zenbook UX31A", ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A), SND_PCI_QUIRK(0x1043, 0x1533, "ASUS GV302XA/XJ/XQ/XU/XV/XI", ALC287_FIXUP_CS35L41_I2C_2), SND_PCI_QUIRK(0x1043, 0x1573, "ASUS GZ301VV/VQ/VU/VJ/VA/VC/VE/VVC/VQC/VUC/VJC/VEC/VCC", ALC285_FIXUP_ASUS_HEADSET_MIC), + SND_PCI_QUIRK(0x1043, 0x1652, "ASUS ROG Zephyrus Do 15 SE", ALC289_FIXUP_ASUS_ZEPHYRUS_DUAL_SPK), SND_PCI_QUIRK(0x1043, 0x1662, "ASUS GV301QH", ALC294_FIXUP_ASUS_DUAL_SPK), SND_PCI_QUIRK(0x1043, 0x1663, "ASUS GU603ZI/ZJ/ZQ/ZU/ZV", ALC285_FIXUP_ASUS_HEADSET_MIC), SND_PCI_QUIRK(0x1043, 0x1683, "ASUS UM3402YAR", ALC287_FIXUP_CS35L41_I2C_2),