OSDN Git Service

ASoC: sof: use helper function
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tue, 31 Jan 2023 02:01:08 +0000 (02:01 +0000)
committerMark Brown <broonie@kernel.org>
Tue, 31 Jan 2023 11:05:05 +0000 (11:05 +0000)
Current ASoC has many helper function.
This patch use it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/87o7qfea3f.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/topology.c

index e2f8cd9..3cfdf78 100644 (file)
@@ -1055,6 +1055,7 @@ static int sof_connect_dai_widget(struct snd_soc_component *scomp,
        struct snd_soc_card *card = scomp->card;
        struct snd_soc_pcm_runtime *rtd;
        struct snd_soc_dai *cpu_dai;
+       int stream;
        int i;
 
        if (!w->sname) {
@@ -1062,62 +1063,41 @@ static int sof_connect_dai_widget(struct snd_soc_component *scomp,
                return -EINVAL;
        }
 
+       if (w->id == snd_soc_dapm_dai_out)
+               stream = SNDRV_PCM_STREAM_CAPTURE;
+       if (w->id == snd_soc_dapm_dai_in)
+               stream = SNDRV_PCM_STREAM_PLAYBACK;
+       else
+               goto end;
+
        list_for_each_entry(rtd, &card->rtd_list, list) {
                /* does stream match DAI link ? */
                if (!rtd->dai_link->stream_name ||
                    strcmp(w->sname, rtd->dai_link->stream_name))
                        continue;
 
-               switch (w->id) {
-               case snd_soc_dapm_dai_out:
-                       for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
-                               /*
-                                * Please create DAI widget in the right order
-                                * to ensure BE will connect to the right DAI
-                                * widget.
-                                */
-                               if (!cpu_dai->capture_widget) {
-                                       cpu_dai->capture_widget = w;
-                                       break;
-                               }
-                       }
-                       if (i == rtd->dai_link->num_cpus) {
-                               dev_err(scomp->dev, "error: can't find BE for DAI %s\n",
-                                       w->name);
-
-                               return -EINVAL;
-                       }
-                       dai->name = rtd->dai_link->name;
-                       dev_dbg(scomp->dev, "tplg: connected widget %s -> DAI link %s\n",
-                               w->name, rtd->dai_link->name);
-                       break;
-               case snd_soc_dapm_dai_in:
-                       for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
-                               /*
-                                * Please create DAI widget in the right order
-                                * to ensure BE will connect to the right DAI
-                                * widget.
-                                */
-                               if (!cpu_dai->playback_widget) {
-                                       cpu_dai->playback_widget = w;
-                                       break;
-                               }
+               for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
+                       /*
+                        * Please create DAI widget in the right order
+                        * to ensure BE will connect to the right DAI
+                        * widget.
+                        */
+                       if (!snd_soc_dai_get_widget(cpu_dai, stream)) {
+                               snd_soc_dai_set_widget(cpu_dai, stream, w);
+                               break;
                        }
-                       if (i == rtd->dai_link->num_cpus) {
-                               dev_err(scomp->dev, "error: can't find BE for DAI %s\n",
-                                       w->name);
+               }
+               if (i == rtd->dai_link->num_cpus) {
+                       dev_err(scomp->dev, "error: can't find BE for DAI %s\n", w->name);
 
-                               return -EINVAL;
-                       }
-                       dai->name = rtd->dai_link->name;
-                       dev_dbg(scomp->dev, "tplg: connected widget %s -> DAI link %s\n",
-                               w->name, rtd->dai_link->name);
-                       break;
-               default:
-                       break;
+                       return -EINVAL;
                }
-       }
 
+               dai->name = rtd->dai_link->name;
+               dev_dbg(scomp->dev, "tplg: connected widget %s -> DAI link %s\n",
+                       w->name, rtd->dai_link->name);
+       }
+end:
        /* check we have a connection */
        if (!dai->name) {
                dev_err(scomp->dev, "error: can't connect DAI %s stream %s\n",
@@ -1134,37 +1114,29 @@ static void sof_disconnect_dai_widget(struct snd_soc_component *scomp,
        struct snd_soc_card *card = scomp->card;
        struct snd_soc_pcm_runtime *rtd;
        struct snd_soc_dai *cpu_dai;
-       int i;
+       int i, stream;
 
        if (!w->sname)
                return;
 
+       if (w->id == snd_soc_dapm_dai_out)
+               stream = SNDRV_PCM_STREAM_CAPTURE;
+       else if (w->id == snd_soc_dapm_dai_in)
+               stream = SNDRV_PCM_STREAM_PLAYBACK;
+       else
+               return;
+
        list_for_each_entry(rtd, &card->rtd_list, list) {
                /* does stream match DAI link ? */
                if (!rtd->dai_link->stream_name ||
                    strcmp(w->sname, rtd->dai_link->stream_name))
                        continue;
 
-               switch (w->id) {
-               case snd_soc_dapm_dai_out:
-                       for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
-                               if (cpu_dai->capture_widget == w) {
-                                       cpu_dai->capture_widget = NULL;
-                                       break;
-                               }
+               for_each_rtd_cpu_dais(rtd, i, cpu_dai)
+                       if (snd_soc_dai_get_widget(cpu_dai, stream) == w) {
+                               snd_soc_dai_set_widget(cpu_dai, stream, NULL);
+                               break;
                        }
-                       break;
-               case snd_soc_dapm_dai_in:
-                       for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
-                               if (cpu_dai->playback_widget == w) {
-                                       cpu_dai->playback_widget = NULL;
-                                       break;
-                               }
-                       }
-                       break;
-               default:
-                       break;
-               }
        }
 }