From d25de16477657f9eddd4be9abd409515edcc3b9e Mon Sep 17 00:00:00 2001 From: Bard Liao Date: Thu, 9 Oct 2025 17:40:16 +0800 Subject: ASoC: soc-acpi: make some variables of acpi adr and link adr non-const Currently, we use predefined snd_soc_acpi_link_adr tables to match the link adr from ACPI table to select the machine driver and the topology. However, with the mechanism, we need to create the snd_soc_acpi_link_adr table for each audio config. The sof_sdw machine driver is used by almost all Intel platforms with SOF and we can load required topology file dynamically today. In other words, we can use sof_sdw machine driver as the default machine driver for Intel SOF SoundWire codecs and no need to create snd_soc_acpi_link_adr table for every new audio configs. To achieve it, we need to drop the const for some members and edit the link adr and acpi adr data to match the data from the ACPI table. Suggested-by: Charles Keepax Signed-off-by: Bard Liao Reviewed-by: Simon Trimmer Reviewed-by: Ranjani Sridharan Link: https://patch.msgid.link/20251009094023.3474895-3-yung-chuan.liao@linux.intel.com Signed-off-by: Mark Brown --- include/sound/soc-acpi.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'include') diff --git a/include/sound/soc-acpi.h b/include/sound/soc-acpi.h index b8af309c2683..90d73b9bddab 100644 --- a/include/sound/soc-acpi.h +++ b/include/sound/soc-acpi.h @@ -114,8 +114,8 @@ struct snd_soc_acpi_endpoint { * @name_prefix: string used for codec controls */ struct snd_soc_acpi_adr_device { - const u64 adr; - const u8 num_endpoints; + u64 adr; + u8 num_endpoints; const struct snd_soc_acpi_endpoint *endpoints; const char *name_prefix; }; @@ -131,8 +131,8 @@ struct snd_soc_acpi_adr_device { */ struct snd_soc_acpi_link_adr { - const u32 mask; - const u32 num_adr; + u32 mask; + u32 num_adr; const struct snd_soc_acpi_adr_device *adr_d; }; -- cgit v1.2.3 From ea97713903784286ef1ce45456f404ed288f19b1 Mon Sep 17 00:00:00 2001 From: Bard Liao Date: Thu, 9 Oct 2025 17:40:17 +0800 Subject: ASoC: soc_sdw_utils: add name_prefix to asoc_sdw_codec_info struct Currently, the codec name_prefix of Intel SoundWire machine driver is from the ACPI match table. We can have it in the asoc_sdw_codec_info struct as a default name_prefix of a codec if there is no corresponding audio config found in the ACPI match table. Signed-off-by: Bard Liao Reviewed-by: Simon Trimmer Reviewed-by: Ranjani Sridharan Link: https://patch.msgid.link/20251009094023.3474895-4-yung-chuan.liao@linux.intel.com Signed-off-by: Mark Brown --- include/sound/soc_sdw_utils.h | 1 + sound/soc/sdw_utils/soc_sdw_utils.c | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+) (limited to 'include') diff --git a/include/sound/soc_sdw_utils.h b/include/sound/soc_sdw_utils.h index 3c5e9b2af7f1..e289b453baba 100644 --- a/include/sound/soc_sdw_utils.h +++ b/include/sound/soc_sdw_utils.h @@ -68,6 +68,7 @@ struct asoc_sdw_codec_info { const int part_id; const int version_id; const char *codec_name; + const char *name_prefix; int amp_num; const u8 acpi_id[ACPI_ID_LEN]; const bool ignore_internal_dmic; diff --git a/sound/soc/sdw_utils/soc_sdw_utils.c b/sound/soc/sdw_utils/soc_sdw_utils.c index 56c72ef27e7b..cd41b0e16777 100644 --- a/sound/soc/sdw_utils/soc_sdw_utils.c +++ b/sound/soc/sdw_utils/soc_sdw_utils.c @@ -78,6 +78,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x700, + .name_prefix = "rt700", .dais = { { .direction = {true, true}, @@ -95,6 +96,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x711, + .name_prefix = "rt711", .version_id = 3, .dais = { { @@ -115,6 +117,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x711, + .name_prefix = "rt711", .version_id = 2, .dais = { { @@ -135,6 +138,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x712, + .name_prefix = "rt712", .version_id = 3, .dais = { { @@ -176,6 +180,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x1712, + .name_prefix = "rt712-dmic", .version_id = 3, .dais = { { @@ -190,6 +195,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x713, + .name_prefix = "rt713", .version_id = 3, .dais = { { @@ -217,6 +223,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x1713, + .name_prefix = "rt713-dmic", .version_id = 3, .dais = { { @@ -231,6 +238,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x1308, + .name_prefix = "rt1308", .acpi_id = "10EC1308", .dais = { { @@ -253,6 +261,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x1316, + .name_prefix = "rt1316", .dais = { { .direction = {true, true}, @@ -273,6 +282,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x1318, + .name_prefix = "rt1318", .dais = { { .direction = {true, true}, @@ -293,6 +303,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x1320, + .name_prefix = "rt1320", .dais = { { .direction = {true, false}, @@ -313,6 +324,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x714, + .name_prefix = "rt714", .version_id = 3, .ignore_internal_dmic = true, .dais = { @@ -328,6 +340,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x715, + .name_prefix = "rt715", .version_id = 3, .ignore_internal_dmic = true, .dais = { @@ -343,6 +356,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x714, + .name_prefix = "rt714", .version_id = 2, .ignore_internal_dmic = true, .dais = { @@ -358,6 +372,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x715, + .name_prefix = "rt715", .version_id = 2, .ignore_internal_dmic = true, .dais = { @@ -373,6 +388,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x721, + .name_prefix = "rt721", .version_id = 3, .dais = { { @@ -415,6 +431,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x722, + .name_prefix = "rt722", .version_id = 3, .dais = { { @@ -459,6 +476,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x8373, + .name_prefix = "Left", .dais = { { .direction = {true, true}, @@ -478,6 +496,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x8363, + .name_prefix = "Left", .dais = { { .direction = {true, false}, @@ -497,6 +516,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x5682, + .name_prefix = "rt5682", .dais = { { .direction = {true, true}, @@ -514,6 +534,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x3556, + .name_prefix = "AMP", .dais = { { .direction = {true, false}, @@ -566,6 +587,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x4242, + .name_prefix = "cs42l42", .dais = { { .direction = {true, true}, @@ -583,6 +605,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x4243, + .name_prefix = "cs42l43", .codec_name = "cs42l43-codec", .count_sidecar = asoc_sdw_bridge_cs35l56_count_sidecar, .add_sidecar = asoc_sdw_bridge_cs35l56_add_sidecar, @@ -634,6 +657,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0xaaaa, /* generic codec mockup */ + .name_prefix = "sdw_mockup_mmulti-function", .version_id = 0, .dais = { { @@ -659,6 +683,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0xaa55, /* headset codec mockup */ + .name_prefix = "sdw_mockup_headset0", .version_id = 0, .dais = { { @@ -672,6 +697,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x55aa, /* amplifier mockup */ + .name_prefix = "sdw_mockup_amp1", .version_id = 0, .dais = { { @@ -685,6 +711,7 @@ struct asoc_sdw_codec_info codec_info_list[] = { }, { .part_id = 0x5555, + .name_prefix = "sdw_mockup_mic0", .version_id = 0, .dais = { { -- cgit v1.2.3 From 5ed60e45c59d66e61586a10433e2b5527d4d72b5 Mon Sep 17 00:00:00 2001 From: Bard Liao Date: Thu, 9 Oct 2025 17:40:19 +0800 Subject: ASoC: soc_sdw_utils: export asoc_sdw_get_dai_type asoc_sdw_get_dai_type() is quite useful to convert SDCA function types to SDW DAI types. It can be used by other drivers. Signed-off-by: Bard Liao Reviewed-by: Simon Trimmer Reviewed-by: Ranjani Sridharan Link: https://patch.msgid.link/20251009094023.3474895-6-yung-chuan.liao@linux.intel.com Signed-off-by: Mark Brown --- include/sound/soc_sdw_utils.h | 1 + sound/soc/sdw_utils/soc_sdw_utils.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/sound/soc_sdw_utils.h b/include/sound/soc_sdw_utils.h index e289b453baba..76c64c5245d4 100644 --- a/include/sound/soc_sdw_utils.h +++ b/include/sound/soc_sdw_utils.h @@ -169,6 +169,7 @@ int asoc_sdw_count_sdw_endpoints(struct snd_soc_card *card, int *num_devs, int * struct asoc_sdw_dailink *asoc_sdw_find_dailink(struct asoc_sdw_dailink *dailinks, const struct snd_soc_acpi_endpoint *new); +int asoc_sdw_get_dai_type(u32 type); int asoc_sdw_parse_sdw_endpoints(struct snd_soc_card *card, struct asoc_sdw_dailink *soc_dais, diff --git a/sound/soc/sdw_utils/soc_sdw_utils.c b/sound/soc/sdw_utils/soc_sdw_utils.c index cd41b0e16777..0460e2a8c50a 100644 --- a/sound/soc/sdw_utils/soc_sdw_utils.c +++ b/sound/soc/sdw_utils/soc_sdw_utils.c @@ -1239,7 +1239,7 @@ struct asoc_sdw_dailink *asoc_sdw_find_dailink(struct asoc_sdw_dailink *dailinks } EXPORT_SYMBOL_NS(asoc_sdw_find_dailink, "SND_SOC_SDW_UTILS"); -static int asoc_sdw_get_dai_type(u32 type) +int asoc_sdw_get_dai_type(u32 type) { switch (type) { case SDCA_FUNCTION_TYPE_SMART_AMP: @@ -1257,6 +1257,7 @@ static int asoc_sdw_get_dai_type(u32 type) return -EINVAL; } } +EXPORT_SYMBOL_NS(asoc_sdw_get_dai_type, "SND_SOC_SDW_UTILS"); /* * Check if the SDCA endpoint is present by the SDW peripheral -- cgit v1.2.3