[PATCH AUTOSEL 6.18-6.1] soundwire: dmi-quirks: Disable ghost Realtek on Asus Zenbook Duo
From: Sasha Levin
Date: Mon Oct 19 2026 - 10:43:47 EST
From: Charles Keepax <ckeepax@xxxxxxxxxxxxxxxxxxxxx>
[ Upstream commit ca02ffd4975ca5249abf0cfb750a495d23b453ee ]
The Asus Zenbook Duo also has a Realtek device in the ACPI that
doesn't exist in the physical hardware. This confuses the machine
driver into attempting to create DAI links for the device. Add a
quirk to remove this device.
Signed-off-by: Charles Keepax <ckeepax@xxxxxxxxxxxxxxxxxxxxx>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxx>
Link: https://patch.msgid.link/20260720095741.3592825-1-ckeepax@xxxxxxxxxxxxxxxxxxxxx
Signed-off-by: Vinod Koul <vkoul@xxxxxxxxxx>
Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>
---
LLM Generated explanations, may be completely bogus:
This is a DMI hardware quirk for this 6.12 tree. The `ghost_realtek`
remap table is already here; the commit only adds board `UX8407AA`.
===============================================================
PHASE 1: COMMIT MESSAGE FORENSICS
===============================================================
Step 1.1: PARSE THE SUBJECT LINE
Record: **[soundwire / dmi-quirks] [Disable] Disable ghost Realtek on
Asus Zenbook Duo.** “Disable” is a bug-fix verb: stop enumerating a non-
existent ACPI codec.
Step 1.2: PARSE ALL COMMIT MESSAGE TAGS
Record:
- Signed-off-by: Charles Keepax (author)
- Reviewed-by: Pierre-Louis Bossart (SoundWire/Intel audio)
- Link: https://patch.msgid.link/20260720095741.3592825-1-
ckeepax@xxxxxxxxxxxxxxxxxxxxx
- Signed-off-by: Vinod Koul (SoundWire maintainer; applied as
`ca02ffd4975c`)
- No Fixes:, Reported-by:, Tested-by:, Cc: stable (absence expected)
- Ignore pipeline SOBs/Upstream markers
Step 1.3: ANALYZE THE COMMIT BODY TEXT
Record:
- Bug: Asus Zenbook Duo ACPI lists a Realtek SoundWire device that is
not on the board.
- Symptom: machine driver tries to create DAI links for that ghost codec
→ wrong/broken sound card.
- Root cause: firmware _ADR for a phantom RT722 (same class as UX5406AA
/ Lenovo entries already in this tree).
- No stack trace; hardware/firmware description.
Step 1.4: DETECT HIDDEN BUG FIXES
Record: Not a disguised cleanup. It is an explicit hardware quirk.
===============================================================
PHASE 2: DIFF ANALYSIS - LINE BY LINE
===============================================================
Step 2.1: INVENTORY THE CHANGES
Record:
- File: `drivers/soundwire/dmi-quirks.c` (+7 / −0)
- Function/data: `adr_remap_quirk_table[]` only
- Scope: single-file surgical DMI entry
- New match: `DMI_SYS_VENDOR "ASUS"` + `DMI_BOARD_NAME "UX8407AA"` →
existing `ghost_realtek`
Step 2.2: UNDERSTAND THE CODE FLOW CHANGE
Record: Before, UX8407AA was not in the table, so ACPI _ADR
`0x000330025d072201` (RT722 on link3) was used as-is. After, that _ADR
is remapped to `0`, so `find_slave()` skips the device.
Step 2.3: IDENTIFY THE BUG MECHANISM
Record: **Hardware workaround (DMI quirk).** Same `ghost_realtek` map
already in tree:
```97:104:drivers/soundwire/dmi-quirks.c
static const struct adr_remap ghost_realtek[] = {
/* rt722 on link3 */
{
0x000330025d072201ull,
0x0000000000000000ull
},
{}
};
```
`sdw_dmi_override_adr()` applies that map. `find_slave()` then drops a
zero address:
```109:113:drivers/soundwire/slave.c
if (bus->ops->override_adr)
addr = bus->ops->override_adr(bus, addr);
if (!addr)
return false;
```
Intel ops already wire this (`override_adr = sdw_dmi_override_adr` in
`intel_auxdevice.c`). `intel_init.c` builds `ctx->ids` from registered
slaves, so SOF machine select in `hda_sdw_machine_select()` never sees
the ghost.
Step 2.4: ASSESS THE FIX QUALITY
Record: Copy of existing ASUS/Lenovo rows; DMI-gated; no
API/locking/hot-path change. Regression risk is limited to mis-matched
board strings on UX8407AA only.
===============================================================
PHASE 3: GIT HISTORY INVESTIGATION
===============================================================
Step 3.1: BLAME THE CHANGED LINES
Record: PTL `ghost_realtek` rows come from `30e7fb61a64ba` (“Disable
ghost Realtek devices”), backport of upstream `4dab2b904414` (Charles
Keepax, 2026-05-20). Already in this tree. UX8407AA is not.
Step 3.2: FOLLOW THE FIXES: TAG
Record: No Fixes: tag. Introduced bug is firmware, not a kernel commit.
Step 3.3: CHECK FILE HISTORY FOR RELATED CHANGES
Record: Recent `dmi-quirks.c` history is quirk additions. Sibling IDs
already here: UX5406AA, Lenovo 83QK, 83SF. Upstream context also has
B9406CAA; that ID is **not** in this tree and is **not** required for
UX8407AA.
Step 3.4: CHECK THE AUTHOR'S OTHER COMMITS
Record: Charles Keepax is a regular SoundWire/ASoC contributor (Cirrus).
Same author added the original `ghost_realtek` table. Reviewed by
Pierre-Louis Bossart; applied by Vinod Koul.
Step 3.5: CHECK FOR DEPENDENT/PREREQUISITE COMMITS
Record: Needs `ghost_realtek` + `sdw_dmi_override_adr` + Intel
`override_adr`. All present (`30e7fb61a64ba`). Standalone; not patch
x/y. Original May 2026 series (ptl-match Chrome matches, then
ghost_realtek) is independent of this July follow-up.
===============================================================
PHASE 4: MAILING LIST AND EXTERNAL RESEARCH
===============================================================
Step 4.1: FIND THE ORIGINAL PATCH DISCUSSION
Record:
- `b4 dig -c ca02ffd4975c` → https://patch.msgid.link/20260720095741.359
2825-1-ckeepax@xxxxxxxxxxxxxxxxxxxxx
- `b4 dig -a`: single v1, no later revision
- Pierre-Louis Bossart: Reviewed-by; noted this will keep happening as
more BIOS bugs ship; not a NAK
- Vinod Koul: Applied, thanks
- No NAKs, no Cc: stable in review (not a negative)
Step 4.2: CHECK WHO REVIEWED THE PATCH
Record: To Vinod Koul; Cc Yung-Chuan Liao, Pierre-Louis Bossart, linux-
sound, linux-kernel, Cirrus patches. Appropriate maintainers.
Step 4.3: SEARCH FOR THE BUG REPORT
Record: No syzbot/bugzilla. Author report of shipping ACPI. Same
firmware class as quirks already in 6.12. Related AUTOSEL for 6.12:
`platform/x86: asus-nb-wmi: add DMI quirk for ASUS Zenbook Duo UX8407AA`
— this SKU is already treated as 6.12-relevant.
Step 4.4: CHECK FOR RELATED PATCHES AND SERIES
Record: Standalone 1/1. Follow-up to `4dab2b904414` / `30e7fb61a64ba`,
already here.
Step 4.5: CHECK STABLE MAILING LIST HISTORY
Record: **UNVERIFIED** — lore.kernel.org/stable returned 403. No
evidence this was rejected for stable.
===============================================================
PHASE 5: CODE SEMANTIC ANALYSIS
===============================================================
Step 5.1: IDENTIFY KEY FUNCTIONS IN THE DIFF
Record: No function body change. Data: `adr_remap_quirk_table`.
Consumer: `sdw_dmi_override_adr()`.
Step 5.2: TRACE CALLERS
Record:
- `sdw_dmi_override_adr` ← Intel `sdw_intel_ops.override_adr`
- `find_slave()` during ACPI slave walk
- Boot/probe only, Intel SoundWire platforms with matching DMI
Step 5.3: TRACE CALLEES
Record: `dmi_first_match()`, remap loop, `dev_dbg()`. No alloc/locks.
Step 5.4: FOLLOW THE CALL CHAIN
Record: Reachable at SoundWire probe on UX8407AA. Not a syscall UAF;
broken audio on that laptop. `hda_sdw_machine_select()` uses
`hdev->sdw->ids` from registered slaves, so skipping the ghost changes
machine matching and DAI-link construction.
Step 5.5: SEARCH FOR SIMILAR PATTERNS
Record: Same pattern already used for UX5406AA and two Lenovo SKUs. This
extends that list.
===============================================================
PHASE 6: CROSS-REFERENCING AGAINST THE LOCAL TREE
===============================================================
Step 6.1: DOES THE BUGGY CODE EXIST IN THIS TREE?
Record:
- Tree: **pending-6.12**, `make kernelversion` = **6.12.111**
(`p-6.12-2-gd38d58a4e0359`)
- `drivers/soundwire/dmi-quirks.c` present; `ghost_realtek` present;
UX8407AA **absent**
- PTL SOF support present (`pci-ptl.c`, `soc-acpi-intel-ptl-match.c`
with RT722 link0/link3)
- Mechanism that makes a zero _ADR drop the slave is present
- Candidate `ca02ffd4975c` is **not** an ancestor of HEAD (expected)
Step 6.2: CHECK FOR BACKPORT COMPLICATIONS
Record: Lore hunk (insert before first LENOVO `ghost_realtek` row)
**`git apply --check` clean**. Full upstream context mentioning B9406CAA
is not required. Difficulty: **clean apply**.
Step 6.3: CHECK IF RELATED FIXES ARE ALREADY HERE
Record: Generic ghost-Realtek table yes; this board ID no. No substitute
UX8407AA SoundWire quirk.
===============================================================
PHASE 7: SUBSYSTEM AND MAINTAINER CONTEXT
===============================================================
Step 7.1: IDENTIFY THE SUBSYSTEM AND ITS CRITICALITY
Record: **soundwire DMI quirks** (Intel laptop audio). **IMPORTANT** for
those machines; DMI-gated so not CORE-wide.
Step 7.2: ASSESS SUBSYSTEM ACTIVITY
Record: Mature quirk table (since ~2021) with ongoing DMI additions.
This is the usual enablement pattern, not a new subsystem.
===============================================================
PHASE 8: IMPACT AND RISK ASSESSMENT
===============================================================
Step 8.1: DETERMINE WHO IS AFFECTED
Record: **Driver/platform-specific**: ASUS board UX8407AA (Zenbook Duo).
Everyone else unchanged.
Step 8.2: DETERMINE THE TRIGGER CONDITIONS
Record: Every boot/probe on that DMI. No race. Unprivileged users get
broken audio; they cannot trigger it on other machines.
Step 8.3: DETERMINE THE FAILURE MODE SEVERITY
Record: Wrong DAI links / wrong SOF machine (e.g. matching
`ptl_rt722_l3` on a ghost RT722) or probe of a codec that is not there.
**HIGH** for that SKU (no/wrong audio), not a panic.
Step 8.4: CALCULATE RISK-BENEFIT RATIO
Record:
- Benefit: audio enumeration correct on a shipping PTL laptop; same
class as quirks already in 6.12
- Risk: very low (7 lines, DMI-gated, existing table)
- Ratio: strongly favors backport
===============================================================
PHASE 9: FINAL SYNTHESIS
===============================================================
Step 9.1: COMPILE THE EVIDENCE
FOR:
- Hardware quirk / DMI ID on an existing driver — stable exception
- Real firmware bug: ghost Realtek in ACPI
- User-visible: machine driver builds DAI links for hardware that does
not exist
- +7 lines, copy of existing entries
- `ghost_realtek` + Intel override path already in 6.12.111
- Applies cleanly
- Reviewed by Bossart, applied by Koul
- Same author/table as UX5406AA already in this tree
- PTL SoundWire/SOF present
- Zero blast radius off that DMI match
AGAINST:
- One laptop SKU
- No Reported-by/syzbot (normal for DMI quirks)
- PTL match table in 6.12 is still mostly RT711/RT722 (function-topology
DAI building is stronger on later/ARL paths); the skip still prevents
ghost-slave probe and false `ptl_rt722_l3` match
- lore.kernel.org/stable search 403
UNRESOLVED:
- Exact UX8407AA DMI strings not independently dumped
- Stable-list discussion not fetched (HTTP 403)
Step 9.2: APPLY THE STABLE RULES CHECKLIST
1. Obviously correct and tested? **PASS** — identical to existing rows;
maintainer Reviewed-by/applied
2. Fixes a real bug that affects users? **PASS** — ghost ACPI codec
breaks card/DAI setup
3. Important issue? **PASS** — broken audio on a shipping laptop (HIGH
for that SKU)
4. Small and contained? **PASS** — 7 lines, one table
5. No new features or APIs? **PASS** — DMI quirk only
6. Can apply to the local tree? **PASS** — lore hunk applies;
prerequisites present
Step 9.3: CHECK FOR EXCEPTION CATEGORIES
Record: **Hardware quirk / DMI workaround** on an existing SoundWire
quirk table.
Step 9.4: MAKE YOUR DECISION
This belongs on 6.12.y. The bug exists here, the fix is the established
DMI pattern, and it does not depend on B9406CAA or later function-
topology work.
------------------------------------------------
What problem it solves for this tree
------------------------------------------------
Asus Zenbook Duo UX8407AA ships ACPI for a Realtek RT722 on SoundWire
link3 that is not physically present. Without the quirk, Intel SoundWire
registers that slave, SOF machine select can treat it as real, and
`sof_sdw` can create DAI links for it. Remapping that _ADR to 0 drops
the ghost device. The remap table and call path are already in 6.12.111;
this only names the board.
Risk vs benefit
------------------------------------------------
Benefit is working (or at least not mis-probed) audio on that SKU. Risk
is a DMI-only table row. No new APIs, no locking, no cross-subsystem
change.
Concerns
------------------------------------------------
None that block backport. B9406CAA in some upstream context is a
different board and is not a prerequisite. Apply is clean with the lore
hunk.
Verification:
- [Phase 1] Parsed subject/tags from the provided message; no
Fixes/syzbot; Reviewed-by Bossart; Link msgid 20260720095741.3592825-1
- [Phase 2] Diff is +7 lines in `adr_remap_quirk_table`; `ghost_realtek`
maps RT722 link3 `_ADR` to 0
- [Phase 2] Confirmed `find_slave()` returns false on `!addr`; Intel ops
set `override_adr`
- [Phase 3] `git blame` PTL block → `30e7fb61a64ba` (backport of
`4dab2b904414`); UX8407AA not present
- [Phase 3] `git merge-base --is-ancestor 30e7fb61a64ba HEAD` → yes;
`ca02ffd4975c` → no
- [Phase 3] Author history in `drivers/soundwire/` includes the original
ghost-Realtek quirk
- [Phase 4] `b4 dig -c ca02ffd4975c` → lore msgid; `-a` v1 only; `-w`
Vinod/Bossart/linux-sound
- [Phase 4] Patchew/openwall: Bossart Reviewed-by; Vinod applied
`ca02ffd4975c`
- [Phase 4] WebSearch: related 6.12 AUTOSEL asus-nb-wmi quirk for
UX8407AA
- [Phase 5] Callers: `sdw_dmi_override_adr` ← `find_slave` ← Intel
probe; `ctx->ids` from registered slaves
- [Phase 6] `git describe HEAD` p-6.12-2; `make kernelversion` 6.12.111;
PTL SOF files present
- [Phase 6] `git apply --check` of lore hunk: clean
- [Phase 8] Failure mode: wrong DAI links / ghost codec probe; DMI-gated
- UNVERIFIED: lore.kernel.org/stable search (403); live DMI dump of
UX8407AA
The patch is a small, existing-pattern DMI quirk; prerequisites are in
this tree and it applies cleanly.
**YES**
drivers/soundwire/dmi-quirks.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/soundwire/dmi-quirks.c b/drivers/soundwire/dmi-quirks.c
index 62cee6e2179da..f738e547a1f30 100644
--- a/drivers/soundwire/dmi-quirks.c
+++ b/drivers/soundwire/dmi-quirks.c
@@ -200,6 +200,13 @@ static const struct dmi_system_id adr_remap_quirk_table[] = {
},
.driver_data = (void *)ghost_realtek,
},
+ {
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "ASUS"),
+ DMI_MATCH(DMI_BOARD_NAME, "UX8407AA"),
+ },
+ .driver_data = (void *)ghost_realtek,
+ },
{
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
--
2.53.0