Repository navigation
[AMD SoundWire] Add DMI support for ASUS Vivobook S14 M3407GA (Realtek RT721 codec) #11073
Description
Activity
- addedbugSomething isn't working as expectedSomething isn't working as expected
on Aug 8, 2026 @thesofproject/amd please take a look
Hi, Could you please create a bugzilla ticket for the above mentioned issue.
Confirmed the root cause and have a working fix for the ASUS Vivobook S14 M3407GA (RT721 SDCA over SoundWire, AMD ACP70). Posting in case it saves someone else the debugging, and in case a maintainer wants to fold it in properly.
Root cause: the RT721 codec is correctly enumerated (
sdw:0:1:025d:0721:01, i.e. link 1) and every SOF/ACP70/SDCA module loads and initializes fine, butsnd_soc_acpi_amd_acp70_sdw_machines[]insound/soc/amd/acp/amd-acp70-acpi-match.chas no entry for this board, soacp63_sdw_machine_select()(sound/soc/amd/ps/pci-ps.c) never finds a machine driver and no PCM device gets created ("No SoundWire machine driver found").Fix: add a link_adr entry for this codec. Two things have to be correct, and the second one cost me most of the debugging time:
.mask/.link_mask=BIT(1)(codec is on SoundWire link 1 on this board, confirmable via thesdw-master-<ctrl>-<link>parent of the sysfs device node).- The
.adrfield also independently encodes the link ID in bits [51:48] (SDW_DISCO_LINK_ID_MASK), separate from.mask.snd_soc_acpi_sdw_link_slaves_found()insound/soc/soc-acpi.cchecks this embedded value againstperipheral->bus->link_id, not against.mask— so the ADR has to be0x000131025d072101ull(link-id nibble = 1), not0x000031025d072101ull(link-id nibble = 0). Getting.maskright while leaving this wrong fails silently with the same generic "not found" message.
static const struct snd_soc_acpi_endpoint rt721_own_amp_endpoints[] = { { .num = 0, .aggregated = 0, .group_position = 0, .group_id = 0 }, /* Jack */ { .num = 1, .aggregated = 0, .group_position = 0, .group_id = 0 }, /* SmartAmp (integrated, no external amp) */ { .num = 2, .aggregated = 0, .group_position = 0, .group_id = 0 }, /* SmartMic/DMIC */ }; static const struct snd_soc_acpi_adr_device rt721_0_own_amp_adr[] = { { .adr = 0x000131025d072101ull, .num_endpoints = ARRAY_SIZE(rt721_own_amp_endpoints), .endpoints = rt721_own_amp_endpoints, .name_prefix = "rt721" } }; static const struct snd_soc_acpi_link_adr acp70_rt721_own_amp_only[] = { { .mask = BIT(1), .num_adr = ARRAY_SIZE(rt721_0_own_amp_adr), .adr_d = rt721_0_own_amp_adr, }, {} }; /* prepended to snd_soc_acpi_amd_acp70_sdw_machines[] */ { .link_mask = BIT(1), .links = acp70_rt721_own_amp_only, .drv_name = "amd_sdw", },
Verified on kernel 7.0.0-30-generic (Ubuntu HWE):
aplay -lnow showscard 1: amdsoundwire [amd-soundwire]withSDW1-PIN0-PLAYBACK-SimpleJackandSDW1-PIN1-PLAYBACK-SmartAmp, and audio actually plays through the SmartAmp (internal speaker) PCM.Separate/smaller note: my distro's PipeWire has no UCM profile for this
cfg-amp:1 hs:rt721component combo, so theHiFiALSA card profile only exposes a Headphones jack port and never maps the SmartAmp PCM to a Speakers port. Not a kernel issue, just flagging in case it's relevant to anyone packaging a UCM profile for this board alongside the driver fix.Happy to test a proper patch against this if someone wants to take it upstream.
To double confirm whether ACP PDM exists on this platform or not, Could you please share us ACPI DUMP for the same?
If only RT721 exists on the platform(which support UAJ, SPK & DMIC), then we can use existing jack_amp_g1_dmic_endpoints structure. naming convention of structures seems to be not okay. @saba-kareem : Could you please prepare a patch and share it for validation?No separate ACP PDM device on this platform — I dumped and decompiled the full ACPI table set (DSDT + all 31 SSDTs) and grepped for any
Device(PDM...)or DMIC object; there isn't one anywhere. Only the RT721 shows up (UAJ, SmartMic, SmartAmp SDCA functions, matching what your dmesg/probe output already shows), so this is exactly the "only RT721 exists" case you described.For reference, the relevant ACPI SoundWire controller node (
SDWC) declares:"mipi-sdw-sw-interface-revision", 0x00010000 "mipi-sdw-manager-list", 0x03 // both link 0 and link 1 present in firmware "mipi-sdw-link-0-subproperties", "SWM0" "mipi-sdw-link-1-subproperties", "SWM1"— consistent with what I found at runtime: 2 managers get created, but only manager/link 1 actually has anything attached (link 0 comes up "disabled, ignoring" — matches the kernel's own dmesg here, not a firmware-disabled link).
Sounds like
jack_amp_g1_dmic_endpointsis the right existing structure to reuse then rather than the custom one I added — happy to test whatever @saba-kareem puts together against this board once it's ready. Let me know if you need any other specific ACPI excerpts; I'd rather share targeted snippets than the raw dump since it's fairly large and mostly irrelevant (BIOS/EC/thermal tables etc.).- marked [BUG] No internal audio on ASUS Vivobook S14 D3407GA #11142 as a duplicate of this issue
on Aug 30, 2026 Any updates on this? I'm on Vivobook S14 M3407GA still with the same issue
Hi @bulltarddarcy ,
Please feel free to upstream the patch if it is working as expected. Otherwise, could you please prepare and share a patch? We will review it from our side. Also, this issue is not related to SOF, so could you please file a separate Bugzilla ticket for tracking?
@Sophusticated i think @bulltarddarcy patch has not been upstreamed yet. Once it is accepted upstream, this issue should be resolved.Sounds good — here's a patch, using
jack_amp_g1_dmic_endpointsas suggested rather than a new struct. Re-tested with this exact version (not just the earlier ad-hoc one) and it still works:aplay -lshows the card with both PCM devices and audio plays correctly through the SmartAmp PCM. Passesscripts/checkpatch.plclean.Subject: [PATCH] ASoC: amd: acp: add RT721 SDCA match for ASUS Vivobook S14 M3407GA The ASUS Vivobook S14 M3407GA (AMD ACP70) has a Realtek RT721 SDCA codec on SoundWire link 1, providing jack (UAJ), integrated speaker amp (SmartAmp), and DMIC (SmartMic) over a single device. This board has no entry in snd_soc_acpi_amd_acp70_sdw_machines[], so no ASoC machine driver ever binds and the board has no usable audio ("No SoundWire machine driver found" from acp63_sdw_machine_select()). ACPI confirms there is no separate ACP PDM device on this platform (checked via full ACPI dump, DSDT + all SSDTs, no PDM/DMIC ACPI object present) - RT721 is the only audio device, so this reuses the existing jack_amp_g1_dmic_endpoints layout rather than adding a new one. Add a link_adr entry for this codec on link 1, matching the RT721's ADR reported at runtime (sdw:0:1:025d:0721:01). Verified on kernel 7.0.0-31-generic (Ubuntu HWE): aplay -l now shows the amd-soundwire card with SimpleJack and SmartAmp PCM devices, and audio plays correctly through the SmartAmp (internal speaker) PCM. --- sound/soc/amd/acp/amd-acp70-acpi-match.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/sound/soc/amd/acp/amd-acp70-acpi-match.c b/sound/soc/amd/acp/amd-acp70-acpi-match.c index 0000000..0000000 100644 --- a/sound/soc/amd/acp/amd-acp70-acpi-match.c +++ b/sound/soc/amd/acp/amd-acp70-acpi-match.c @@ -619,8 +619,31 @@ static const struct snd_soc_acpi_link_adr acp70_rt722_only[] = { {} }; +static const struct snd_soc_acpi_adr_device rt721_0_own_amp_adr[] = { + { + .adr = 0x000131025d072101ull, + .num_endpoints = ARRAY_SIZE(jack_amp_g1_dmic_endpoints), + .endpoints = jack_amp_g1_dmic_endpoints, + .name_prefix = "rt721" + } +}; + +static const struct snd_soc_acpi_link_adr acp70_rt721_own_amp_only[] = { + { + .mask = BIT(1), + .num_adr = ARRAY_SIZE(rt721_0_own_amp_adr), + .adr_d = rt721_0_own_amp_adr, + }, + {} +}; + struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sdw_machines[] = { { + .link_mask = BIT(1), + .links = acp70_rt721_own_amp_only, + .drv_name = "amd_sdw", + }, + { .link_mask = BIT(0) | BIT(1), .links = acp70_rt1320_l0_rt722_l1, .drv_name = "amd_sdw", -- 2.43.0Filing a separate Bugzilla ticket per your note — will link it here once it's up.
Bugzilla ticket filed: https://bugzilla.kernel.org/show_bug.cgi?id=222077
I can confirm the same issue on Fedora Workstation 44 with the ASUS Vivobook S14 M3407GA.
My system:
- Distribution: Fedora Workstation 44
- Kernel: 6.19.10-300.fc44.x86_64
- Product name: "Vivobook S14 M3407GA"
Observed results:
- "aplay -l" lists HDMI outputs only; no internal audio device is available.
- SoundWire detects "sdw:0:1:025d:0721:01", matching the Realtek RT721 codec.
- The issue appears consistent with the missing AMD ACP70 SoundWire machine-driver match described here.
Thank you for investigating this and preparing a working patch. Please consider this an additional affected-device report. I hope the patch can be reviewed and merged upstream so that Fedora and other Linux distributions can support this laptop without manual kernel modifications.
Describe the bug
On the ASUS Vivobook S14 M3407GA, the physical Realtek RT721 codec is successfully detected on the SoundWire bus (
sdw:0:1:025d:0721:01), but built-in speakers and the headphone jack are non-functional. The ALSA machine driver (snd-acp-sdw-mach) does not recognize the board because theVivobook S14 M3407GAproduct name string is missing from its DMI match table.What I've tried:
/sys/bus/soundwire/devices/.snd-acp-sdw-legacy-mach,snd-sof-amd-acp70).7.0.0-28), but the card still fails to bind (aplay -lonly lists HDMI outputs).To Reproduce
ls /sys/bus/soundwire/devices/to confirm the RT721 codec is present.aplay -land observe the absence of internal audio/speaker devices.Reproduction Rate
10/10 (Always / 100% consistent across reboots and kernel updates).
Expected behavior
The
snd-acp-sdw-machdriver should automatically match the DMI product name and bind the Realtek RT721 codec so built-in speakers and headphones work out of the box.Impact
Showstopper (Zero internal audio functionality; requires external USB/Bluetooth audio workarounds).
Environment
7.0.0-28-generic(Ubuntu/Linux Mint HWE Edge)Screenshots or console output
jellyfish@jellyfish-vivobook:~$ ls /sys/bus/soundwire/devices/
sdw:0:1:025d:0721:01 sdw-master-0-0 sdw-master-0-1
jellyfish@jellyfish-vivobook:~$ cat /sys/class/dmi/id/product_name
Vivobook S14 M3407GA
jellyfish@jellyfish-vivobook:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Generic [HD-Audio Generic], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: Generic [HD-Audio Generic], device 7: HDMI 1 [HDMI 1]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: Generic [HD-Audio Generic], device 8: HDMI 2 [HDMI 2]
Subdevices: 1/1
Subdevice #0: subdevice #0