]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - android-sdk/kernel-video.git/commitdiff
ASoC: core: Refactor DAI widgets linking
authorMisael Lopez Cruz <misael.lopez@ti.com>
Wed, 5 Jun 2013 08:07:03 +0000 (03:07 -0500)
committerMisael Lopez Cruz <misael.lopez@ti.com>
Tue, 10 Mar 2015 17:33:31 +0000 (12:33 -0500)
Refactor DAI widgets linking in preparation for DAI-multicodec
support.

This patch is ported from p-ti-linux-3.8.y released kernel branch
tree.(Kernel Version:3.8).

Change-Id: I4d0196bffd3fc0e9f76abcf603eed8ec7ee3988c
Signed-off-by: Misael Lopez Cruz <misael.lopez@ti.com>
Signed-off-by: Charulatha Varadarajan <charu@ti.com>
Signed-off-by: Nikhil Devshatwar <nikhil.nd@ti.com>
sound/soc/soc-core.c

index 79beb1048636765cab8a3ea8978172fb3398203f..e446213c6e9fb7bffee2cfcc30fd3bc464ce292b 100644 (file)
@@ -1396,6 +1396,42 @@ static int soc_probe_codec_dai(struct snd_soc_card *card,
        return 0;
 }
 
+static int soc_link_dai_widgets(struct snd_soc_card *card,
+                               struct snd_soc_dai_link *dai_link,
+                               struct snd_soc_dai *cpu_dai,
+                               struct snd_soc_dai *codec_dai)
+{
+       struct snd_soc_dapm_widget *play_w, *capture_w;
+       int ret;
+
+       /* link the DAI widgets */
+       play_w = codec_dai->playback_widget;
+       capture_w = cpu_dai->capture_widget;
+       if (play_w && capture_w) {
+               ret = snd_soc_dapm_new_pcm(card, dai_link->params,
+                                          capture_w, play_w);
+               if (ret != 0) {
+                       dev_err(card->dev, "ASoC: Can't link %s to %s: %d\n",
+                               play_w->name, capture_w->name, ret);
+                       return ret;
+               }
+       }
+
+       play_w = cpu_dai->playback_widget;
+       capture_w = codec_dai->capture_widget;
+       if (play_w && capture_w) {
+               ret = snd_soc_dapm_new_pcm(card, dai_link->params,
+                                          capture_w, play_w);
+               if (ret != 0) {
+                       dev_err(card->dev, "ASoC: Can't link %s to %s: %d\n",
+                               play_w->name, capture_w->name, ret);
+                       return ret;
+               }
+       }
+
+       return 0;
+}
+
 static int soc_probe_link_dais(struct snd_soc_card *card, int num, int order)
 {
        struct snd_soc_dai_link *dai_link = &card->dai_link[num];
@@ -1404,7 +1440,6 @@ static int soc_probe_link_dais(struct snd_soc_card *card, int num, int order)
        struct snd_soc_platform *platform = rtd->platform;
        struct snd_soc_dai *codec_dai = rtd->codec_dai;
        struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
-       struct snd_soc_dapm_widget *play_w, *capture_w;
        int ret;
 
        dev_dbg(card->dev, "ASoC: probe %s dai link %d late %d\n",
@@ -1485,29 +1520,10 @@ static int soc_probe_link_dais(struct snd_soc_card *card, int num, int order)
                                                codec2codec_close_delayed_work);
 
                        /* link the DAI widgets */
-                       play_w = codec_dai->playback_widget;
-                       capture_w = cpu_dai->capture_widget;
-                       if (play_w && capture_w) {
-                               ret = snd_soc_dapm_new_pcm(card, dai_link->params,
-                                                  capture_w, play_w);
-                               if (ret != 0) {
-                                       dev_err(card->dev, "ASoC: Can't link %s to %s: %d\n",
-                                               play_w->name, capture_w->name, ret);
-                                       return ret;
-                               }
-                       }
-
-                       play_w = cpu_dai->playback_widget;
-                       capture_w = codec_dai->capture_widget;
-                       if (play_w && capture_w) {
-                               ret = snd_soc_dapm_new_pcm(card, dai_link->params,
-                                                  capture_w, play_w);
-                               if (ret != 0) {
-                                       dev_err(card->dev, "ASoC: Can't link %s to %s: %d\n",
-                                               play_w->name, capture_w->name, ret);
-                                       return ret;
-                               }
-                       }
+                       ret = soc_link_dai_widgets(card, dai_link,
+                                       cpu_dai, codec_dai);
+                       if (ret)
+                               return ret;
                }
        }