Skip to content

[AMD SoundWire] Add DMI support for ASUS Vivobook S14 M3407GA (Realtek RT721 codec) #11073

Description

@misterdarcy10000

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 the Vivobook S14 M3407GA product name string is missing from its DMI match table.

What I've tried:

  • Verified SoundWire device detection via /sys/bus/soundwire/devices/.
  • Tested loading alternative machine/SOF modules (snd-acp-sdw-legacy-mach, snd-sof-amd-acp70).
  • Updated to the latest HWE Edge kernel (7.0.0-28), but the card still fails to bind (aplay -l only lists HDMI outputs).

To Reproduce

  1. Boot Linux on an ASUS Vivobook S14 M3407GA laptop.
  2. Run ls /sys/bus/soundwire/devices/ to confirm the RT721 codec is present.
  3. Run aplay -l and 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-mach driver 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

  1. Branch name and commit hash of the 2 repositories: sof (firmware/topology) and linux (kernel driver).
  • Kernel: 7.0.0-28-generic (Ubuntu/Linux Mint HWE Edge)
  • SOF: Upstream default provided by kernel package
  1. Name of the topology file
  • Topology: Default standard AMD SoundWire topology
  1. Name of the platform(s) on which the bug is observed.
  • Platform: AMD Ryzen / ASUS Vivobook S14 M3407GA

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

Activity

  1. abonislawski commented on Aug 18, 2026

    @abonislawski
    Member

    @thesofproject/amd please take a look

  2. saba-kareem commented on Aug 18, 2026

    @saba-kareem

    Hi, Could you please create a bugzilla ticket for the above mentioned issue.

  3. misterdarcy10000 commented on Aug 22, 2026

    @misterdarcy10000
    Author

    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, but snd_soc_acpi_amd_acp70_sdw_machines[] in sound/soc/amd/acp/amd-acp70-acpi-match.c has no entry for this board, so acp63_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:

    1. .mask / .link_mask = BIT(1) (codec is on SoundWire link 1 on this board, confirmable via the sdw-master-<ctrl>-<link> parent of the sysfs device node).
    2. The .adr field 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() in sound/soc/soc-acpi.c checks this embedded value against peripheral->bus->link_id, not against .mask — so the ADR has to be 0x000131025d072101ull (link-id nibble = 1), not 0x000031025d072101ull (link-id nibble = 0). Getting .mask right 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 -l now shows card 1: amdsoundwire [amd-soundwire] with SDW1-PIN0-PLAYBACK-SimpleJack and SDW1-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:rt721 component combo, so the HiFi ALSA 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.

  4. vijendarmukunda commented on Aug 24, 2026

    @vijendarmukunda

    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?

  5. misterdarcy10000 commented on Aug 24, 2026

    @misterdarcy10000
    Author

    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_endpoints is 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.).

  6. Sophusticated commented on Sep 29, 2026

    @Sophusticated

    Any updates on this? I'm on Vivobook S14 M3407GA still with the same issue

  7. saba-kareem commented on Sep 30, 2026

    @saba-kareem

    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.

  8. misterdarcy10000 commented on Sep 30, 2026

    @misterdarcy10000
    Author

    Sounds good — here's a patch, using jack_amp_g1_dmic_endpoints as suggested rather than a new struct. Re-tested with this exact version (not just the earlier ad-hoc one) and it still works: aplay -l shows the card with both PCM devices and audio plays correctly through the SmartAmp PCM. Passes scripts/checkpatch.pl clean.

    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.0
    

    Filing a separate Bugzilla ticket per your note — will link it here once it's up.

  9. misterdarcy10000 commented on Sep 30, 2026

    @misterdarcy10000
    Author
  10. OmarDev-git commented on Oct 11, 2026

    @OmarDev-git

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working as expected

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions