Skip to content

Commit d2dcd85

Browse files
brains-fatmanbroonie
authored andcommitted
ASoC: amd: acp70: add standalone RT721 SoundWire machine
The ASUS Vivobook 18 M1807GA (AMD ACP7.x, PCI 1022:15e2, subsystem 1043:3531) exposes a single Realtek RT721 SDCA codec on SoundWire link 1. The BIOS reports the ACP audio config flag as 0 (SoundWire mode), so snd_pci_ps claims the device, brings up the SoundWire managers and enumerates the RT721 peripheral (sdw:0:1:025d:0721:01); the rt721-sdca codec driver binds successfully. No sound card is created, however: acp63_sdw_machine_select() walks snd_soc_acpi_amd_acp70_sdw_machines[] and finds no entry whose declared SoundWire peripherals are all present on the bus. The only existing RT721 entry, acp70_rt721_l1u0_tas2783x2_l1u8b, additionally requires two TAS2783 amplifiers and deliberately exposes the RT721 as jack + DMIC only. This M1807GA variant has no external amplifiers - the RT721's internal AIF2 amplifier path drives the speakers - so that entry never matches and no machine device is registered. Add a standalone RT721 machine entry for link 1 exposing all three RT721 endpoints (jack/AIF1, speaker amplifier/AIF2, DMIC/AIF3), mirroring the standalone RT722 configuration. Place it after the TAS2783 combo entry so platforms that do have the external amplifiers continue to match the more specific entry first. ACPI _ADR of the codec: 0x000130025D072101 (link_id=1 version=3 mfg_id=0x025d Realtek part_id=0x0721 class=0x01). Verified on the hardware: with the entry present the amd_sdw machine binds, an "amd-soundwire" card is registered exposing the rt721-sdca AIF1 (SimpleJack) and AIF2 (SmartAmp) PCM devices, and audio plays out of the built-in speakers. Link: https://bugzilla.kernel.org/show_bug.cgi?id=221282 Signed-off-by: Aleksander Pshenitsyn <brains.fatman@gmail.com> Link: https://patch.msgid.link/20260531101159.14241-1-brains.fatman@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent cad530a commit d2dcd85

1 file changed

Lines changed: 44 additions & 0 deletions

File tree

sound/soc/amd/acp/amd-acp70-acpi-match.c

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -619,6 +619,45 @@ static const struct snd_soc_acpi_link_adr acp70_rt721_l1u0_tas2783x2_l1u8b[] = {
619619
{}
620620
};
621621

622+
static const struct snd_soc_acpi_endpoint rt721_endpoints[] = {
623+
{ /* Jack Playback/Capture Endpoint (AIF1) */
624+
.num = 0,
625+
.aggregated = 0,
626+
.group_position = 0,
627+
.group_id = 0,
628+
},
629+
{ /* Speaker Amplifier Endpoint (AIF2, internal amp) */
630+
.num = 1,
631+
.aggregated = 0,
632+
.group_position = 0,
633+
.group_id = 0,
634+
},
635+
{ /* DMIC Capture Endpoint (AIF3) */
636+
.num = 2,
637+
.aggregated = 0,
638+
.group_position = 0,
639+
.group_id = 0,
640+
},
641+
};
642+
643+
static const struct snd_soc_acpi_adr_device rt721_1_single_adr[] = {
644+
{
645+
.adr = 0x000130025D072101ull,
646+
.num_endpoints = ARRAY_SIZE(rt721_endpoints),
647+
.endpoints = rt721_endpoints,
648+
.name_prefix = "rt721"
649+
}
650+
};
651+
652+
static const struct snd_soc_acpi_link_adr acp70_rt721_only[] = {
653+
{
654+
.mask = BIT(1),
655+
.num_adr = ARRAY_SIZE(rt721_1_single_adr),
656+
.adr_d = rt721_1_single_adr,
657+
},
658+
{}
659+
};
660+
622661
struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sdw_machines[] = {
623662
{
624663
.link_mask = BIT(0) | BIT(1),
@@ -711,6 +750,11 @@ struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sdw_machines[] = {
711750
.links = acp70_rt721_l1u0_tas2783x2_l1u8b,
712751
.drv_name = "amd_sdw",
713752
},
753+
{
754+
.link_mask = BIT(1),
755+
.links = acp70_rt721_only,
756+
.drv_name = "amd_sdw",
757+
},
714758
{},
715759
};
716760
EXPORT_SYMBOL(snd_soc_acpi_amd_acp70_sdw_machines);

0 commit comments

Comments
 (0)