* [PATCH v1] ASoC: amd: acp: Add support for more projects on ACP7.0
@ 2026-11-03 3:44 Baojun Xu
2026-11-03 4:03 ` sashiko-bot
2026-11-03 10:34 ` Andy Shevchenko
0 siblings, 2 replies; 3+ messages in thread
From: Baojun Xu @ 2026-11-03 3:44 UTC (permalink / raw)
To: broonie
Cc: tiwai, andriy.shevchenko, 13916275206, alsa-devel, shenghao-ding,
baojun.xu, linux-sound, linux-kernel, k-yi, henry.lo, robinchen,
niranjan.hy, pin-hao.huang, Syed.SabaKareem
Add driver data and ACPI match table entries to support additional projects
using the TAS2783 codec on the ACP7.0 platform.
Signed-off-by: Baojun Xu <baojun.xu@ti.com>
---
sound/soc/amd/acp-config.c | 105 +++++++++++++
sound/soc/amd/acp/amd-acp70-acpi-match.c | 192 ++++++++++++++++++++++-
2 files changed, 296 insertions(+), 1 deletion(-)
diff --git a/sound/soc/amd/acp-config.c b/sound/soc/amd/acp-config.c
index 2fb9789cac0a..473d68ebde14 100644
--- a/sound/soc/amd/acp-config.c
+++ b/sound/soc/amd/acp-config.c
@@ -98,6 +98,111 @@ static const struct dmi_system_id acp70_acpi_flag_override_table[] = {
DMI_MATCH(DMI_BOARD_NAME, "8EA2"),
},
},
+ {
+ /* HP Cashmere-A */
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
+ DMI_MATCH(DMI_BOARD_NAME, "8EF5"),
+ },
+ },
+ {
+ /* HP Sundae */
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
+ DMI_MATCH(DMI_BOARD_NAME, "8F6D"),
+ },
+ },
+ {
+ /* HP SundaeWhip UMA */
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
+ DMI_MATCH(DMI_BOARD_NAME, "8FA4"),
+ },
+ },
+ {
+ /* HP SundaeWhip DSC */
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
+ DMI_MATCH(DMI_BOARD_NAME, "8FA5"),
+ },
+ },
+ {
+ /* HP Kamo (Koki) */
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
+ DMI_MATCH(DMI_BOARD_NAME, "9012"),
+ },
+ },
+ {
+ /* HP Dominion 16 A */
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
+ DMI_MATCH(DMI_BOARD_NAME, "9028"),
+ },
+ },
+ {
+ /* HP Dominion A LW */
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
+ DMI_MATCH(DMI_BOARD_NAME, "9029"),
+ },
+ },
+ {
+ /* HP Kata-A */
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
+ DMI_MATCH(DMI_BOARD_NAME, "9056"),
+ },
+ },
+ {
+ /* ASUS HN7306 */
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "ASUS"),
+ DMI_MATCH(DMI_BOARD_NAME, "1714"),
+ },
+ },
+ {
+ /* ASUS RC74XA */
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "ASUS"),
+ DMI_MATCH(DMI_BOARD_NAME, "1954"),
+ },
+ },
+ {
+ /* ASUS RC74RA */
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "ASUS"),
+ DMI_MATCH(DMI_BOARD_NAME, "1964"),
+ },
+ },
+ {
+ /* ASUS UX3408GA */
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "ASUS"),
+ DMI_MATCH(DMI_BOARD_NAME, "1AC4"),
+ },
+ },
+ {
+ /* ASUS B7406CKA */
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "ASUS"),
+ DMI_MATCH(DMI_BOARD_NAME, "1B94"),
+ },
+ },
+ {
+ /* ASUS CHG01LA */
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "ASUS"),
+ DMI_MATCH(DMI_BOARD_NAME, "1C64"),
+ },
+ },
+ {
+ /* ASUS UX3480ZA */
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "ASUS"),
+ DMI_MATCH(DMI_BOARD_NAME, "1E54"),
+ },
+ },
{
/* Dell 14S DS14265 */
.matches = {
diff --git a/sound/soc/amd/acp/amd-acp70-acpi-match.c b/sound/soc/amd/acp/amd-acp70-acpi-match.c
index c2f0479301eb..a6df59c212bc 100644
--- a/sound/soc/amd/acp/amd-acp70-acpi-match.c
+++ b/sound/soc/amd/acp/amd-acp70-acpi-match.c
@@ -582,7 +582,7 @@ static const struct snd_soc_acpi_link_adr acp70_rt722_l0_rt1320_l1[] = {
},
{}
};
-
+/* HP: Sundae, Cashmere-A. */
static const struct snd_soc_acpi_adr_device tas2783_2_adr[] = {
{
/* left */
@@ -614,6 +614,116 @@ static const struct snd_soc_acpi_adr_device tas2783_2_adr[] = {
},
};
+/* HP: Dominion 16 A */
+static const struct snd_soc_acpi_adr_device tas2783_3_1_adr[] = {
+ {
+ /* left */
+ .adr = 0x00023C0102000001ull,
+ .num_endpoints = 1,
+ .endpoints = &spk_l_endpoint,
+ .name_prefix = "tas2783-1",
+ },
+ {
+ /* right */
+ .adr = 0x00023D0102000001ull,
+ .num_endpoints = 1,
+ .endpoints = &spk_l_endpoint,
+ .name_prefix = "tas2783-2",
+ },
+};
+
+static const struct snd_soc_acpi_adr_device tas2783_3_2_adr[] = {
+ {
+ /* left */
+ .adr = 0x0003390102000001ull,
+ .num_endpoints = 1,
+ .endpoints = &spk_r_endpoint,
+ .name_prefix = "tas2783-3",
+ },
+ {
+ /* right */
+ .adr = 0x00033A0102000001ull,
+ .num_endpoints = 1,
+ .endpoints = &spk_r_endpoint,
+ .name_prefix = "tas2783-4",
+ },
+};
+
+/* HP: Dominion A LW. */
+static const struct snd_soc_acpi_adr_device tas2783_4_1_adr[] = {
+ {
+ /* left */
+ .adr = 0x00023C0102000001ull,
+ .num_endpoints = 1,
+ .endpoints = &spk_l_endpoint,
+ .name_prefix = "tas2783-1",
+ },
+};
+
+static const struct snd_soc_acpi_adr_device tas2783_4_2_adr[] = {
+ {
+ /* right */
+ .adr = 0x0003390102000001ull,
+ .num_endpoints = 1,
+ .endpoints = &spk_r_endpoint,
+ .name_prefix = "tas2783-2",
+ },
+};
+
+/* HP: Kamo (Koki). */
+static const struct snd_soc_acpi_adr_device tas2783_5_adr[] = {
+ {
+ /* left */
+ .adr = 0x00023C0102000001ull,
+ .num_endpoints = 1,
+ .endpoints = &spk_l_endpoint,
+ .name_prefix = "tas2783-1",
+ },
+ {
+ /* right */
+ .adr = 0x0002390102000001ull,
+ .num_endpoints = 1,
+ .endpoints = &spk_r_endpoint,
+ .name_prefix = "tas2783-2",
+ },
+};
+
+/* ASUS: CHG01LA, UX3408GA, UX3480ZA. */
+static const struct snd_soc_acpi_adr_device tas2783_6_adr[] = {
+ {
+ /* left */
+ .adr = 0x0000380102000001ull,
+ .num_endpoints = 1,
+ .endpoints = &spk_l_endpoint,
+ .name_prefix = "tas2783-1",
+ },
+ {
+ /* right */
+ .adr = 0x00003B0102000001ull,
+ .num_endpoints = 1,
+ .endpoints = &spk_r_endpoint,
+ .name_prefix = "tas2783-2",
+ },
+};
+
+/* ASUS: B7406CKA. */
+static const struct snd_soc_acpi_adr_device tas2783_7_adr[] = {
+ {
+ /* left */
+ .adr = 0x00003B0102000001ull,
+ .num_endpoints = 1,
+ .endpoints = &spk_l_endpoint,
+ .name_prefix = "tas2783-1",
+ },
+ {
+ /* right */
+ .adr = 0x00003C0102000001ull,
+ .num_endpoints = 1,
+ .endpoints = &spk_r_endpoint,
+ .name_prefix = "tas2783-2",
+ },
+};
+
static const struct snd_soc_acpi_link_adr acp70_tas2783_2[] = {
{
.mask = BIT(0),
@@ -623,6 +733,61 @@ static const struct snd_soc_acpi_link_adr acp70_tas2783_2[] = {
{}
};
+static const struct snd_soc_acpi_link_adr acp70_tas2783_3[] = {
+ {
+ .mask = BIT(2),
+ .num_adr = ARRAY_SIZE(tas2783_3_1_adr),
+ .adr_d = tas2783_3_1_adr,
+ },
+ {
+ .mask = BIT(3),
+ .num_adr = ARRAY_SIZE(tas2783_3_2_adr),
+ .adr_d = tas2783_3_2_adr,
+ },
+ {}
+};
+
+static const struct snd_soc_acpi_link_adr acp70_tas2783_4[] = {
+ {
+ .mask = BIT(2),
+ .num_adr = ARRAY_SIZE(tas2783_4_1_adr),
+ .adr_d = tas2783_4_1_adr,
+ },
+ {
+ .mask = BIT(3),
+ .num_adr = ARRAY_SIZE(tas2783_4_2_adr),
+ .adr_d = tas2783_4_2_adr,
+ },
+ {}
+};
+
+static const struct snd_soc_acpi_link_adr acp70_tas2783_5[] = {
+ {
+ .mask = BIT(2),
+ .num_adr = ARRAY_SIZE(tas2783_5_adr),
+ .adr_d = tas2783_5_adr,
+ },
+ {}
+};
+
+static const struct snd_soc_acpi_link_adr acp70_tas2783_6[] = {
+ {
+ .mask = BIT(0),
+ .num_adr = ARRAY_SIZE(tas2783_6_adr),
+ .adr_d = tas2783_6_adr,
+ },
+ {}
+};
+
+static const struct snd_soc_acpi_link_adr acp70_tas2783_7[] = {
+ {
+ .mask = BIT(0),
+ .num_adr = ARRAY_SIZE(tas2783_7_adr),
+ .adr_d = tas2783_7_adr,
+ },
+ {}
+};
+
static const struct snd_soc_acpi_adr_device rt1320_0_single_adr[] = {
{
.adr = 0x000030025D132001ull,
@@ -804,6 +969,31 @@ struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sdw_machines[] = {
.links = acp70_tas2783_2,
.drv_name = "amd_sdw",
},
+ {
+ .link_mask = BIT(2) | BIT(3),
+ .links = acp70_tas2783_3,
+ .drv_name = "amd_sdw",
+ },
+ {
+ .link_mask = BIT(2) | BIT(3),
+ .links = acp70_tas2783_4,
+ .drv_name = "amd_sdw",
+ },
+ {
+ .link_mask = BIT(2),
+ .links = acp70_tas2783_5,
+ .drv_name = "amd_sdw",
+ },
+ {
+ .link_mask = BIT(0),
+ .links = acp70_tas2783_6,
+ .drv_name = "amd_sdw",
+ },
+ {
+ .link_mask = BIT(0),
+ .links = acp70_tas2783_7,
+ .drv_name = "amd_sdw",
+ },
{
.link_mask = BIT(0) | BIT(1),
.links = acp70_tas2783x2_l0u9c_rt712_vb_l1u0,
--
2.25.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v1] ASoC: amd: acp: Add support for more projects on ACP7.0
2026-11-03 3:44 [PATCH v1] ASoC: amd: acp: Add support for more projects on ACP7.0 Baojun Xu
@ 2026-11-03 4:03 ` sashiko-bot
2026-11-03 10:34 ` Andy Shevchenko
1 sibling, 0 replies; 3+ messages in thread
From: sashiko-bot @ 2026-11-03 4:03 UTC (permalink / raw)
To: Baojun Xu; +Cc: linux-sound
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [High] ASoC: amd: acp: invalid SoundWire link IDs 2 and 3 in ACP7.0 match table
- [High] ASoC: amd: acp: ASUS DMI overrides match PCI SSIDs instead of board names
- [Medium] ASoC: amd: acp: single-link TAS2783 entries placed before dual-link entries
--
commit f9ad24008c2750b4190c6a78319b12a9228b0c5a
Author: Baojun Xu <baojun.xu@ti.com>
ASoC: amd: acp: Add support for more projects on ACP7.0
This commit adds DMI flag override entries and SoundWire ACPI match table
entries to support additional HP and ASUS platforms using the TAS2783
amplifier on ACP7.0.
> diff --git a/sound/soc/amd/acp-config.c b/sound/soc/amd/acp-config.c
> index 2fb9789cac0ac..473d68ebde143 100644
> --- a/sound/soc/amd/acp-config.c
> +++ b/sound/soc/amd/acp-config.c
> @@ -98,6 +98,111 @@ static const struct dmi_system_id acp70_acpi_flag_override_table[] = {
[ ... ]
> + {
> + /* ASUS HN7306 */
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "ASUS"),
> + DMI_MATCH(DMI_BOARD_NAME, "1714"),
> + },
> + },
> + {
> + /* ASUS RC74XA */
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "ASUS"),
> + DMI_MATCH(DMI_BOARD_NAME, "1954"),
> + },
> + },
> + {
> + /* ASUS RC74RA */
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "ASUS"),
> + DMI_MATCH(DMI_BOARD_NAME, "1964"),
> + },
> + },
> + {
> + /* ASUS UX3408GA */
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "ASUS"),
> + DMI_MATCH(DMI_BOARD_NAME, "1AC4"),
> + },
> + },
> + {
> + /* ASUS B7406CKA */
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "ASUS"),
> + DMI_MATCH(DMI_BOARD_NAME, "1B94"),
> + },
> + },
> + {
> + /* ASUS CHG01LA */
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "ASUS"),
> + DMI_MATCH(DMI_BOARD_NAME, "1C64"),
> + },
> + },
> + {
> + /* ASUS UX3480ZA */
> + .matches = {
> + DMI_MATCH(DMI_BOARD_VENDOR, "ASUS"),
> + DMI_MATCH(DMI_BOARD_NAME, "1E54"),
> + },
> + },
[Severity: High]
Will dmi_check_system(acp70_acpi_flag_override_table) in
snd_amd_acp_find_config() ever match these seven ASUS entries?
Unlike HP systems, which populate DMI_BOARD_NAME with a 4-hex-digit board ID,
ASUS systems populate DMI_BOARD_NAME and DMI_PRODUCT_NAME with the model name
string (such as "HN7306EA", "RC74XA", "RC74RA", "UX3408GA", "B7406CKA",
"CHG01LA", and "UX3480ZA"), whereas "1714", "1954", "1964", "1AC4", "1B94",
"1C64", and "1E54" appear to be the PCI subsystem_device IDs.
For example, earlier in acp70_acpi_flag_override_table[], HN7306EA is matched
with:
{
.matches = {
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
DMI_MATCH(DMI_PRODUCT_NAME, "HN7306EA"),
},
},
and drivers/platform/x86/asus-armoury.h matches RC74XA via
DMI_MATCH(DMI_BOARD_NAME, "RC74XA").
If these entries do not match, snd_amd_acp_find_config() falls back to
snd_amd_acp_acpi_find_config() and snd_acp63_probe() will abort with -ENODEV
when the BIOS sets a non-zero acp-audio-config-flag. Should these entries
match against the ASUS DMI product or board model names instead of the PCI
SSIDs?
> diff --git a/sound/soc/amd/acp/amd-acp70-acpi-match.c b/sound/soc/amd/acp/amd-acp70-acpi-match.c
> index c2f0479301ebd..a6df59c212bc0 100644
> --- a/sound/soc/amd/acp/amd-acp70-acpi-match.c
> +++ b/sound/soc/amd/acp/amd-acp70-acpi-match.c
[ ... ]
> @@ -614,6 +614,116 @@ static const struct snd_soc_acpi_adr_device tas2783_2_adr[] = {
> },
> };
>
> +/* HP: Dominion 16 A */
> +static const struct snd_soc_acpi_adr_device tas2783_3_1_adr[] = {
> + {
> + /* left */
> + .adr = 0x00023C0102000001ull,
> + .num_endpoints = 1,
> + .endpoints = &spk_l_endpoint,
> + .name_prefix = "tas2783-1",
> + },
> + {
> + /* right */
> + .adr = 0x00023D0102000001ull,
> + .num_endpoints = 1,
> + .endpoints = &spk_l_endpoint,
> + .name_prefix = "tas2783-2",
> + },
> +};
> +
> +static const struct snd_soc_acpi_adr_device tas2783_3_2_adr[] = {
> + {
> + /* left */
> + .adr = 0x0003390102000001ull,
> + .num_endpoints = 1,
> + .endpoints = &spk_r_endpoint,
> + .name_prefix = "tas2783-3",
> + },
> + {
> + /* right */
> + .adr = 0x00033A0102000001ull,
> + .num_endpoints = 1,
> + .endpoints = &spk_r_endpoint,
> + .name_prefix = "tas2783-4",
> + },
> +};
> +
> +/* HP: Dominion A LW. */
> +static const struct snd_soc_acpi_adr_device tas2783_4_1_adr[] = {
> + {
> + /* left */
> + .adr = 0x00023C0102000001ull,
> + .num_endpoints = 1,
> + .endpoints = &spk_l_endpoint,
> + .name_prefix = "tas2783-1",
> + },
> +};
> +
> +static const struct snd_soc_acpi_adr_device tas2783_4_2_adr[] = {
> + {
> + /* right */
> + .adr = 0x0003390102000001ull,
> + .num_endpoints = 1,
> + .endpoints = &spk_r_endpoint,
> + .name_prefix = "tas2783-2",
> + },
> +};
> +
> +/* HP: Kamo (Koki). */
> +static const struct snd_soc_acpi_adr_device tas2783_5_adr[] = {
> + {
> + /* left */
> + .adr = 0x00023C0102000001ull,
> + .num_endpoints = 1,
> + .endpoints = &spk_l_endpoint,
> + .name_prefix = "tas2783-1",
> + },
> + {
> + /* right */
> + .adr = 0x0002390102000001ull,
> + .num_endpoints = 1,
> + .endpoints = &spk_r_endpoint,
> + .name_prefix = "tas2783-2",
> + },
> +};
[ ... ]
> @@ -623,6 +733,61 @@ static const struct snd_soc_acpi_link_adr acp70_tas2783_2[] = {
> {}
> };
>
> +static const struct snd_soc_acpi_link_adr acp70_tas2783_3[] = {
> + {
> + .mask = BIT(2),
> + .num_adr = ARRAY_SIZE(tas2783_3_1_adr),
> + .adr_d = tas2783_3_1_adr,
> + },
> + {
> + .mask = BIT(3),
> + .num_adr = ARRAY_SIZE(tas2783_3_2_adr),
> + .adr_d = tas2783_3_2_adr,
> + },
> + {}
> +};
> +
> +static const struct snd_soc_acpi_link_adr acp70_tas2783_4[] = {
> + {
> + .mask = BIT(2),
> + .num_adr = ARRAY_SIZE(tas2783_4_1_adr),
> + .adr_d = tas2783_4_1_adr,
> + },
> + {
> + .mask = BIT(3),
> + .num_adr = ARRAY_SIZE(tas2783_4_2_adr),
> + .adr_d = tas2783_4_2_adr,
> + },
> + {}
> +};
> +
> +static const struct snd_soc_acpi_link_adr acp70_tas2783_5[] = {
> + {
> + .mask = BIT(2),
> + .num_adr = ARRAY_SIZE(tas2783_5_adr),
> + .adr_d = tas2783_5_adr,
> + },
> + {}
> +};
[Severity: High]
Can acp70_tas2783_3, acp70_tas2783_4, and acp70_tas2783_5 work with SoundWire
link IDs 2 and 3 on ACP7.0?
In tas2783_3_1_adr, tas2783_4_1_adr, and tas2783_5_adr, bits 48..51 of .adr
encode link ID 2 (0x0002...) with .mask = BIT(2), and tas2783_3_2_adr and
tas2783_4_2_adr encode link ID 3 (0x0003...) with .mask = BIT(3).
However, AMD ACP7.0 only supports two SoundWire manager instances (AMD_SDW0 on
link 0 and AMD_SDW1 on link 1, with AMD_SDW_MAX_MANAGERS and
ACP63_SDW_MAX_LINKS both defined as 2):
1. In drivers/soundwire/amd_init.c, sdw_amd_probe_controller() only registers
manager instances 0 and 1, so acp63_sdw_machine_select() ->
snd_soc_acpi_sdw_link_slaves_found() will never match _ADR entries with
SDW_DISCO_LINK_ID(adr) == 2 or 3.
2. In sound/soc/amd/acp/acp-sdw-legacy-mach.c, mc_probe() sets
amd_ctx->max_sdw_links = ACP63_SDW_MAX_LINKS (2), and create_sdw_dailink()
rejects any link >= max_sdw_links:
if ((ffs(soc_end->link_mask) - 1) >= amd_ctx->max_sdw_links) {
dev_err(dev, "link_id %d exceeds max_sdw_links %d\n",
ffs(soc_end->link_mask) - 1, amd_ctx->max_sdw_links);
return -EINVAL;
}
3. get_acp70_cpu_pin_id() in sound/soc/amd/acp/acp-sdw-mach-common.c only
handles AMD_SDW0 (0) and AMD_SDW1 (1), returning -EINVAL for any other link
ID.
4. In addition, acp70_tas2783_3 and acp70_tas2783_4 split spk_l_endpoint and
spk_r_endpoint (both having .aggregated = 1 and .group_id = 1) across two
separate SoundWire links. asoc_sdw_parse_sdw_endpoints() merges endpoints with
the same group_id into a single DAI link with num_cpus == 2, but
create_sdw_dailink() in sound/soc/amd/acp/acp-sdw-legacy-mach.c only populates
cpus[0].dai_name and leaves cpus[1].dai_name NULL, which fails
soc_dai_link_sanity_check() with -EINVAL.
Should these devices be on link 0 or link 1 instead?
[ ... ]
> @@ -804,6 +969,31 @@ struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sdw_machines[] = {
> .links = acp70_tas2783_2,
> .drv_name = "amd_sdw",
> },
> + {
> + .link_mask = BIT(2) | BIT(3),
> + .links = acp70_tas2783_3,
> + .drv_name = "amd_sdw",
> + },
> + {
> + .link_mask = BIT(2) | BIT(3),
> + .links = acp70_tas2783_4,
> + .drv_name = "amd_sdw",
> + },
> + {
> + .link_mask = BIT(2),
> + .links = acp70_tas2783_5,
> + .drv_name = "amd_sdw",
> + },
> + {
> + .link_mask = BIT(0),
> + .links = acp70_tas2783_6,
> + .drv_name = "amd_sdw",
> + },
> + {
> + .link_mask = BIT(0),
> + .links = acp70_tas2783_7,
> + .drv_name = "amd_sdw",
> + },
> {
> .link_mask = BIT(0) | BIT(1),
> .links = acp70_tas2783x2_l0u9c_rt712_vb_l1u0,
[Severity: Medium]
Should the single-link amplifier-only entries (acp70_tas2783_5,
acp70_tas2783_6, and acp70_tas2783_7) be placed after the dual-link
BIT(0) | BIT(1) entries in snd_soc_acpi_amd_acp70_sdw_machines[]?
In sound/soc/amd/ps/pci-ps.c, acp63_sdw_machine_select() iterates through
snd_soc_acpi_amd_acp70_sdw_machines[] and selects the first entry whose
mach->links are all found (!link->num_adr), without checking whether other
SoundWire links also have active peripherals:
for (mach = acp_data->machines; mach; mach++) {
if (!mach->links)
break;
link = mach->links;
for (i = 0; i < acp_data->info.count && link->num_adr; link++, i++) {
if (!snd_soc_acpi_sdw_link_slaves_found(dev, link,
acp_data->sdw->peripherals))
break;
}
if (i == acp_data->info.count || !link->num_adr)
if (!mach->machine_check || mach->machine_check(acp_data->sdw))
break;
}
Placing single-link entries before dual-link entries causes any dual-link
platform with matching link 0 TAS2783 amplifiers to match the single-link
entry first and ignore the codec on link 1. In particular, tas2783_5_adr uses
the same two TAS2783 unique IDs (0xC and 0x9) as tas2783x2_l0u9c_adr in
acp70_tas2783x2_l0u9c_rt712_vb_l1u0 immediately below, so if acp70_tas2783_5
is moved to link 0 at this position in the table, it will shadow
acp70_tas2783x2_l0u9c_rt712_vb_l1u0 and drop the RT712-VB codec on link 1.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261103034415.1495-1-baojun.xu@ti.com?part=1
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v1] ASoC: amd: acp: Add support for more projects on ACP7.0
2026-11-03 3:44 [PATCH v1] ASoC: amd: acp: Add support for more projects on ACP7.0 Baojun Xu
2026-11-03 4:03 ` sashiko-bot
@ 2026-11-03 10:34 ` Andy Shevchenko
1 sibling, 0 replies; 3+ messages in thread
From: Andy Shevchenko @ 2026-11-03 10:34 UTC (permalink / raw)
To: Baojun Xu
Cc: broonie, tiwai, 13916275206, alsa-devel, shenghao-ding,
linux-sound, linux-kernel, k-yi, henry.lo, robinchen, niranjan.hy,
pin-hao.huang, Syed.SabaKareem
On Tue, Nov 03, 2026 at 11:44:15AM +0800, Baojun Xu wrote:
> Add driver data and ACPI match table entries to support additional projects
> using the TAS2783 codec on the ACP7.0 platform.
...
> +++ b/sound/soc/amd/acp/amd-acp70-acpi-match.c
> },
> {}
> };
> -
Stray blank line removal.
> +/* HP: Sundae, Cashmere-A. */
> static const struct snd_soc_acpi_adr_device tas2783_2_adr[] = {
> {
> },
> };
--
With Best Regards,
Andy Shevchenko
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-11-03 10:34 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-03 3:44 [PATCH v1] ASoC: amd: acp: Add support for more projects on ACP7.0 Baojun Xu
2026-11-03 4:03 ` sashiko-bot
2026-11-03 10:34 ` Andy Shevchenko
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.