ASoC: Bind new DAI links after probing components
authorMengdong Lin <mengdong.lin@linux.intel.com>
Wed, 2 Dec 2015 06:11:48 +0000 (14:11 +0800)
committerMark Brown <broonie@kernel.org>
Tue, 8 Dec 2015 18:05:09 +0000 (18:05 +0000)
Probing components can bring new DAI or DAI links based on the topology
info. This patch finds the unbound DAI links and bind them.

Signed-off-by: Mengdong Lin <mengdong.lin@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/soc-core.c

index 11d073b6ce3384cd88e99305b2f915060247ae24..6b1982dcedf1a8c0a367ac5b71ab58c3ff082db5 100644 (file)
@@ -1806,6 +1806,7 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
 {
        struct snd_soc_codec *codec;
        struct snd_soc_pcm_runtime *rtd;
+       struct snd_soc_dai_link *dai_link;
        int ret, i, order;
 
        mutex_lock(&client_mutex);
@@ -1893,6 +1894,21 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
                }
        }
 
+       /* Find new DAI links added during probing components and bind them.
+        * Components with topology may bring new DAIs and DAI links.
+        */
+       list_for_each_entry(dai_link, &card->dai_link_list, list) {
+               if (soc_is_dai_link_bound(card, dai_link))
+                       continue;
+
+               ret = soc_init_dai_link(card, dai_link);
+               if (ret)
+                       goto probe_dai_err;
+               ret = soc_bind_dai_link(card, dai_link);
+               if (ret)
+                       goto probe_dai_err;
+       }
+
        /* probe all DAI links on this card */
        for (order = SND_SOC_COMP_ORDER_FIRST; order <= SND_SOC_COMP_ORDER_LAST;
                        order++) {