[PATCH v3 0/4] ASoC: support the ASUS ROG Xbox Ally X20 audio

From: Matthew Schwartz

Date: Wed Nov 04 2026 - 21:16:34 EST


The ASUS ROG Xbox Ally X20 (RC74XA) moves from the HDA codec and TAS2781
amps of the earlier ROG Ally models to SoundWire on ACP 7.0, with two
TAS2783 amps on link 0 and an RT721 on link 1. Its BIOS marks the ACP as
legacy DMIC only, no machine table entry matches the link layout, and
its TAS2783 firmware in linux-firmware uses the four-field name that
carries the BIOS speaker ID, so the speakers do not work today.

Patches 1 to 3 cover that: the ACP config override so the SoundWire
links are probed, the machine entry, and the speaker ID firmware name.
Patch 4 makes rt721-sdca wait for its power domains to reach PS0, which
removes a burst of full scale samples at the start of headset mic
capture.

Tested on an RC74XA with speaker playback on both amps, headphones, jack
detection, both microphones and suspend.

Changes in v3:
- Dropped the sdw_utils DisCo port list patch, including the hunk Bard
commented on. With patches 1 and 2 the RC74XA probes the AMD legacy
machine driver, which skips the amp reference capture link since
commit 9867312e9fd2 ("ASoC: amd: acp-legacy-mach: skip dai link for
amp reference stream"), so the SmartAmp capture PCM that failed on
every open is not created. That commit was already in the base of v1
and v2, and I had only seen the failure on a kernel without it.
Pierre-Louis's suggestion to set the TAS2783 ports in the driver still
applies where the amp reference stream is used, and will follow
separately along with his point about the data port ranges in the
regmap callbacks.
- Picked up Pierre-Louis's Reviewed-by on patch 4 (was 5).

Changes in v2:
- Patch 3: try the firmware names in a fixed order, the four-field name
when SPEAKER_ID is present, then SSID-LINK-0xUID and SSID-LINK-UID,
so a board with the variable but three-field firmware still loads the
0x name. Read SPEAKER_ID once at probe into a u32 and only use it
when it is four bytes. With no PCI parent, try the generic name once
instead of twice. (Mark, Sashiko)
- Patch 4: only honor empty port lists for codecs whose driver takes its
ports from DisCo, currently TAS2783. (Mark) Take the stream name and
DAI link ID from an endpoint that is part of the stream, only run init
for those endpoints, count the AMD legacy amp capture endpoints by
their effective direction, and skip an endpoint left with no
direction. Check the endpoint number against dai_num before using
its DAI info. (Sashiko) Dropped Vijendar's Reviewed-by because of
these changes.
- Picked up Vijendar's Reviewed-by on patches 1 and 2.

v2: https://lore.kernel.org/r/20261103200540.3863272-1-matthew.schwartz@xxxxxxxxx
v1: https://lore.kernel.org/r/20261016232416.2628603-1-matthew.schwartz@xxxxxxxxx

Matthew Schwartz (4):
ASoC: amd: acp-config: force SoundWire probe on ASUS RC74XA
ASoC: amd: acp: add ACP70 SoundWire machine entry for ASUS RC74XA
ASoC: tas2783-sdw: use the BIOS speaker ID in the firmware name
ASoC: rt721-sdca: wait for PDEs to reach PS0 after powering them up

sound/soc/amd/acp-config.c | 7 ++
sound/soc/amd/acp/amd-acp70-acpi-match.c | 44 ++++++++
sound/soc/codecs/Kconfig | 1 +
sound/soc/codecs/rt721-sdca-sdw.c | 17 ++++
sound/soc/codecs/rt721-sdca.c | 33 ++++++
sound/soc/codecs/rt721-sdca.h | 1 +
sound/soc/codecs/tas2783-sdw.c | 123 ++++++++++++++++-------
7 files changed, 187 insertions(+), 39 deletions(-)


base-commit: 2450a9bcd3423612f614ea15ff44966fed189191
--
2.56.0