]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: sdw_utils: Move codec_name to dai info
authorCharles Keepax <ckeepax@opensource.cirrus.com>
Thu, 27 Nov 2025 16:34:23 +0000 (16:34 +0000)
committerMark Brown <broonie@kernel.org>
Thu, 27 Nov 2025 19:18:48 +0000 (19:18 +0000)
As SDCA devices will support each DAI link on a different child device,
move the codec name from codec_info to each dai_info. To allow the
appropriate function device to be bound to each DAI link.

Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Link: https://patch.msgid.link/20251127163426.2500633-5-ckeepax@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/soc_sdw_utils.h
sound/soc/sdw_utils/soc_sdw_utils.c

index 76c64c5245d47c40ec4d6859a97c6ab6600aad56..714e207d4c01336ab2750de916f77471eff73d5c 100644 (file)
@@ -45,6 +45,7 @@ struct asoc_sdw_codec_info;
 
 struct asoc_sdw_dai_info {
        const bool direction[2]; /* playback & capture support */
+       const char *codec_name;
        const char *dai_name;
        const char *component_name;
        const int dai_type;
@@ -67,7 +68,6 @@ struct asoc_sdw_dai_info {
 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];
@@ -131,7 +131,7 @@ int asoc_sdw_hw_free(struct snd_pcm_substream *substream);
 void asoc_sdw_shutdown(struct snd_pcm_substream *substream);
 
 const char *asoc_sdw_get_codec_name(struct device *dev,
-                                   const struct asoc_sdw_codec_info *codec_info,
+                                   const struct asoc_sdw_dai_info *dai_info,
                                    const struct snd_soc_acpi_link_adr *adr_link,
                                    int adr_index);
 
index f2f1954adf2218ca4adaf595e3353567b81ab523..f31213e00a16a40028e903d919cd656fea425abe 100644 (file)
@@ -656,12 +656,12 @@ 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,
                .dais = {
                        {
                                .direction = {true, false},
+                               .codec_name = "cs42l43-codec",
                                .dai_name = "cs42l43-dp5",
                                .dai_type = SOC_SDW_DAI_TYPE_JACK,
                                .dailink = {SOC_SDW_JACK_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID},
@@ -673,6 +673,7 @@ struct asoc_sdw_codec_info codec_info_list[] = {
                        },
                        {
                                .direction = {false, true},
+                               .codec_name = "cs42l43-codec",
                                .dai_name = "cs42l43-dp1",
                                .dai_type = SOC_SDW_DAI_TYPE_MIC,
                                .dailink = {SOC_SDW_UNUSED_DAI_ID, SOC_SDW_DMIC_DAI_ID},
@@ -684,12 +685,14 @@ struct asoc_sdw_codec_info codec_info_list[] = {
                        },
                        {
                                .direction = {false, true},
+                               .codec_name = "cs42l43-codec",
                                .dai_name = "cs42l43-dp2",
                                .dai_type = SOC_SDW_DAI_TYPE_JACK,
                                .dailink = {SOC_SDW_UNUSED_DAI_ID, SOC_SDW_JACK_IN_DAI_ID},
                        },
                        {
                                .direction = {true, false},
+                               .codec_name = "cs42l43-codec",
                                .dai_name = "cs42l43-dp6",
                                .dai_type = SOC_SDW_DAI_TYPE_AMP,
                                .dailink = {SOC_SDW_AMP_OUT_DAI_ID, SOC_SDW_UNUSED_DAI_ID},
@@ -1094,7 +1097,6 @@ static bool asoc_sdw_is_unique_device(const struct snd_soc_acpi_link_adr *adr_li
 }
 
 static const char *_asoc_sdw_get_codec_name(struct device *dev,
-                                           const struct asoc_sdw_codec_info *codec_info,
                                            const struct snd_soc_acpi_link_adr *adr_link,
                                            int adr_index)
 {
@@ -1116,14 +1118,14 @@ static const char *_asoc_sdw_get_codec_name(struct device *dev,
 }
 
 const char *asoc_sdw_get_codec_name(struct device *dev,
-                                   const struct asoc_sdw_codec_info *codec_info,
+                                   const struct asoc_sdw_dai_info *dai_info,
                                    const struct snd_soc_acpi_link_adr *adr_link,
                                    int adr_index)
 {
-       if (codec_info->codec_name)
-               return devm_kstrdup(dev, codec_info->codec_name, GFP_KERNEL);
+       if (dai_info->codec_name)
+               return devm_kstrdup(dev, dai_info->codec_name, GFP_KERNEL);
 
-       return _asoc_sdw_get_codec_name(dev, codec_info, adr_link, adr_index);
+       return _asoc_sdw_get_codec_name(dev, adr_link, adr_index);
 }
 EXPORT_SYMBOL_NS(asoc_sdw_get_codec_name, "SND_SOC_SDW_UTILS");
 
@@ -1354,8 +1356,7 @@ static int is_sdca_endpoint_present(struct device *dev,
        }
        kfree(dlc);
 
-       sdw_codec_name = _asoc_sdw_get_codec_name(dev, codec_info,
-                                                 adr_link, adr_index);
+       sdw_codec_name = _asoc_sdw_get_codec_name(dev, adr_link, adr_index);
        if (!sdw_codec_name)
                return -ENOMEM;
 
@@ -1529,7 +1530,7 @@ int asoc_sdw_parse_sdw_endpoints(struct snd_soc_card *card,
                                num_link_dailinks += !!list_empty(&soc_dai->endpoints);
                                list_add_tail(&soc_end->list, &soc_dai->endpoints);
 
-                               codec_name = asoc_sdw_get_codec_name(dev, codec_info,
+                               codec_name = asoc_sdw_get_codec_name(dev, dai_info,
                                                                     adr_link, i);
                                if (!codec_name)
                                        return -ENOMEM;