]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: sdw_utils: generate combined spk components string
authorBard Liao <yung-chuan.liao@linux.intel.com>
Wed, 25 Jun 2025 14:04:29 +0000 (22:04 +0800)
committerMark Brown <broonie@kernel.org>
Wed, 25 Jun 2025 14:13:46 +0000 (15:13 +0100)
The suggestion from UCM for 2 speaker components is using 1 "spk" tag
with 2 component names. Like "spk:rt722+rt1320". The commit removes the
creation of the "spk" components in each rtd_init callback and creat the
string in asoc_sdw_rtd_init().

Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Shuming Fan <shumingf@realtek.com>
Link: https://patch.msgid.link/20250625140430.311865-3-yung-chuan.liao@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sdw_utils/soc_sdw_cs_amp.c
sound/soc/sdw_utils/soc_sdw_maxim.c
sound/soc/sdw_utils/soc_sdw_rt_amp.c
sound/soc/sdw_utils/soc_sdw_rt_mf_sdca.c
sound/soc/sdw_utils/soc_sdw_utils.c

index 35b550bcd4ded5e986a355b55ad9203e224c247a..520ea36c63eee9fc53457ac971bde8d43e9c2ef1 100644 (file)
@@ -14,7 +14,6 @@
 #include <sound/soc-dai.h>
 #include <sound/soc_sdw_utils.h>
 
-#define CODEC_NAME_SIZE        8
 #define CS_AMP_CHANNELS_PER_AMP        4
 #define CS35L56_SPK_VOLUME_0DB 400 /* 0dB Max */
 
@@ -38,21 +37,12 @@ EXPORT_SYMBOL_NS(asoc_sdw_cs35l56_volume_limit, "SND_SOC_SDW_UTILS");
 
 int asoc_sdw_cs_spk_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc_dai *dai)
 {
-       const char *dai_name = rtd->dai_link->codecs->dai_name;
        struct snd_soc_card *card = rtd->card;
-       char codec_name[CODEC_NAME_SIZE];
        char widget_name[16];
        struct snd_soc_dapm_route route = { "Speaker", NULL, widget_name };
        struct snd_soc_dai *codec_dai;
        int i, ret;
 
-       snprintf(codec_name, CODEC_NAME_SIZE, "%s", dai_name);
-       card->components = devm_kasprintf(card->dev, GFP_KERNEL,
-                                         "%s spk:%s",
-                                         card->components, codec_name);
-       if (!card->components)
-               return -ENOMEM;
-
        for_each_rtd_codec_dais(rtd, i, codec_dai) {
                if (!strstr(codec_dai->name, "cs35l56"))
                        continue;
index 5df8d9cae60c3e6674ab7443e1729b45374026d9..8f9d1ed0725bdba19d6d0db9611b9397f9b6c495 100644 (file)
@@ -28,15 +28,6 @@ int asoc_sdw_maxim_spk_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc_
        struct snd_soc_card *card = rtd->card;
        int ret;
 
-       card->components = devm_kasprintf(card->dev, GFP_KERNEL,
-                                         "%s spk:mx%04x",
-                                         card->components, maxim_part_id);
-       if (!card->components)
-               return -ENOMEM;
-
-       dev_dbg(card->dev, "soundwire maxim card components assigned : %s\n",
-               card->components);
-
        ret = snd_soc_dapm_add_routes(&card->dapm, max_98373_dapm_routes, 2);
        if (ret)
                dev_err(rtd->dev, "failed to add first SPK map: %d\n", ret);
index 83c2368170cb5eaebd50c23e533dea2ae771dd74..76ee24b8eee4a2fa2f0b6b4804125f1d9483d330 100644 (file)
@@ -195,12 +195,6 @@ int asoc_sdw_rt_amp_spk_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc
 
        rt_amp_map = get_codec_name_and_route(dai, codec_name);
 
-       card->components = devm_kasprintf(card->dev, GFP_KERNEL,
-                                         "%s spk:%s",
-                                         card->components, codec_name);
-       if (!card->components)
-               return -ENOMEM;
-
        for_each_rtd_codec_dais(rtd, i, codec_dai) {
                if (strstr(codec_dai->component->name_prefix, "-1"))
                        ret = snd_soc_dapm_add_routes(&card->dapm, rt_amp_map, 2);
index 0161b14297d5a1e030730aa47406c0912694fc84..224b58de908491919c05e5a4c322f5659cecb0a2 100644 (file)
@@ -73,13 +73,6 @@ int asoc_sdw_rt_mf_sdca_spk_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd
                return -EINVAL;
        }
 
-       /* Update card components */
-       card->components = devm_kasprintf(card->dev, GFP_KERNEL,
-                                         "%s spk:%s",
-                                         card->components, codec_name);
-       if (!card->components)
-               return -ENOMEM;
-
        /* Add routes */
        ret = snd_soc_dapm_add_routes(&card->dapm, route_map->route_map, route_map->route_size);
        if (ret)
index 2e8820137c69a7e415c1d656a3dcb4d7322d413e..a744ca019378a4b7d3c015d73ebe6fdc5bb3439f 100644 (file)
@@ -740,6 +740,7 @@ int asoc_sdw_rtd_init(struct snd_soc_pcm_runtime *rtd)
        struct snd_soc_card *card = rtd->card;
        struct asoc_sdw_codec_info *codec_info;
        struct snd_soc_dai *dai;
+       const char *spk_components="";
        int dai_index;
        int ret;
        int i;
@@ -792,7 +793,32 @@ skip_add_controls_widgets:
                        if (ret)
                                return ret;
                }
+
+               /* Generate the spk component string for card->components string */
+               if (codec_info->dais[dai_index].dai_type == SOC_SDW_DAI_TYPE_AMP &&
+                   codec_info->dais[dai_index].component_name) {
+                       if (strlen (spk_components) == 0)
+                               spk_components =
+                                       devm_kasprintf(card->dev, GFP_KERNEL, "%s",
+                                                      codec_info->dais[dai_index].component_name);
+                       else
+                               /* Append component name to spk_components */
+                               spk_components =
+                                       devm_kasprintf(card->dev, GFP_KERNEL,
+                                                      "%s+%s", spk_components,
+                                                      codec_info->dais[dai_index].component_name);
+               }
+
                codec_info->dais[dai_index].rtd_init_done = true;
+
+       }
+
+       if (strlen (spk_components) > 0) {
+               /* Update card components for speaker components */
+               card->components = devm_kasprintf(card->dev, GFP_KERNEL, "%s spk:%s",
+                                                 card->components, spk_components);
+               if (!card->components)
+                       return -ENOMEM;
        }
 
        return 0;