ASoC: soc-core: merge snd_soc_add_dai_link() and soc_bind_dai_link()
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Wed, 6 Nov 2019 01:07:31 +0000 (10:07 +0900)
committerMark Brown <broonie@kernel.org>
Tue, 12 Nov 2019 18:27:24 +0000 (18:27 +0000)
We don't need to separete snd_soc_add_dai_link() and
soc_bind_dai_link() anymore. Let's merge these.

One note is that before this patch, it adds list (A)
eventhough if it had dai_link->ignore (1), or already bounded dai_link (2).
But I guess it is wrong. This patch also solve this issue.

/* BEFORE */
int soc_bind_dai_link(...)
{
...
(1) if (dai_link->ignore)
return 0;

(2) if (soc_is_dai_link_bound(...))
return 0;
...
}

int snd_soc_add_dai_link(...)
{
...
=> ret = soc_bind_dai_link(...);
=> if (ret < 0)
=> return ret;

(A) list_add_tail(&dai_link->list, &card->dai_link_list);
...
}

/* AFTER */

int snd_soc_add_dai_link(...)
{
...
(1) if (dai_link->ignore)
return 0;

(2) if (soc_is_dai_link_bound(...))
return 0;
...
(A) list_add_tail(&dai_link->list, &card->dai_link_list);
return 0;
}

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

index 01a8fb2..8add984 100644 (file)
@@ -1059,14 +1059,33 @@ static void soc_unbind_dai_link(struct snd_soc_card *card,
                soc_free_pcm_runtime(rtd);
 }
 
-static int soc_bind_dai_link(struct snd_soc_card *card,
-       struct snd_soc_dai_link *dai_link)
+/**
+ * snd_soc_add_dai_link - Add a DAI link dynamically
+ * @card: The ASoC card to which the DAI link is added
+ * @dai_link: The new DAI link to add
+ *
+ * This function adds a DAI link to the ASoC card's link list.
+ *
+ * Note: Topology can use this API to add DAI links when probing the
+ * topology component. And machine drivers can still define static
+ * DAI links in dai_link array.
+ */
+int snd_soc_add_dai_link(struct snd_soc_card *card,
+                        struct snd_soc_dai_link *dai_link)
 {
        struct snd_soc_pcm_runtime *rtd;
        struct snd_soc_dai_link_component *codec, *platform;
        struct snd_soc_component *component;
        int i, ret;
 
+       lockdep_assert_held(&client_mutex);
+
+       /*
+        * Notify the machine driver for extra initialization
+        */
+       if (card->add_dai_link)
+               card->add_dai_link(card, dai_link);
+
        if (dai_link->ignore)
                return 0;
 
@@ -1115,12 +1134,16 @@ static int soc_bind_dai_link(struct snd_soc_card *card,
                }
        }
 
+       /* see for_each_card_links */
+       list_add_tail(&dai_link->list, &card->dai_link_list);
+
        return 0;
 
 _err_defer:
        soc_free_pcm_runtime(rtd);
        return -EPROBE_DEFER;
 }
+EXPORT_SYMBOL_GPL(snd_soc_add_dai_link);
 
 static void soc_set_of_name_prefix(struct snd_soc_component *component)
 {
@@ -1411,41 +1434,6 @@ void snd_soc_disconnect_sync(struct device *dev)
 }
 EXPORT_SYMBOL_GPL(snd_soc_disconnect_sync);
 
-/**
- * snd_soc_add_dai_link - Add a DAI link dynamically
- * @card: The ASoC card to which the DAI link is added
- * @dai_link: The new DAI link to add
- *
- * This function adds a DAI link to the ASoC card's link list.
- *
- * Note: Topology can use this API to add DAI links when probing the
- * topology component. And machine drivers can still define static
- * DAI links in dai_link array.
- */
-int snd_soc_add_dai_link(struct snd_soc_card *card,
-               struct snd_soc_dai_link *dai_link)
-{
-       int ret;
-
-       lockdep_assert_held(&client_mutex);
-
-       /*
-        * Notify the machine driver for extra initialization
-        */
-       if (card->add_dai_link)
-               card->add_dai_link(card, dai_link);
-
-       ret = soc_bind_dai_link(card, dai_link);
-       if (ret < 0)
-               return ret;
-
-       /* see for_each_card_links */
-       list_add_tail(&dai_link->list, &card->dai_link_list);
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(snd_soc_add_dai_link);
-
 /**
  * snd_soc_remove_dai_link - Remove a DAI link from the list
  * @card: The ASoC card that owns the link