ASoC: dapm: Fix double prefix addition
authorArun Shamanna Lakshmi <aruns@nvidia.com>
Wed, 15 Jan 2014 21:03:16 +0000 (13:03 -0800)
committerMark Brown <broonie@linaro.org>
Fri, 17 Jan 2014 18:56:39 +0000 (18:56 +0000)
The prefix for the codec driver can be used during dual identical
codec usecases. However, dapm adds prefix twice for codec DAI widget
in snd_soc_dapm_add_route API.

This change is to avoid double prefix addition for codec DAI widget
and is needed while using identical dual codecs.

Signed-off-by: Songhee Baek <sbaek@nvidia.com>
Signed-off-by: Arun Shamanna Lakshmi <aruns@nvidia.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
sound/soc/soc-dapm.c

index 2a44fe9122a2bf5ab0a4a0f6fc91b0c3cc510ff2..dc8ff13187f7ca91ef960312f48eac732c44d938 100644 (file)
@@ -2476,7 +2476,8 @@ err:
 }
 
 static int snd_soc_dapm_add_route(struct snd_soc_dapm_context *dapm,
-                                 const struct snd_soc_dapm_route *route)
+                                 const struct snd_soc_dapm_route *route,
+                                 unsigned int is_prefixed)
 {
        struct snd_soc_dapm_widget *wsource = NULL, *wsink = NULL, *w;
        struct snd_soc_dapm_widget *wtsource = NULL, *wtsink = NULL;
@@ -2486,7 +2487,7 @@ static int snd_soc_dapm_add_route(struct snd_soc_dapm_context *dapm,
        char prefixed_source[80];
        int ret;
 
-       if (dapm->codec && dapm->codec->name_prefix) {
+       if (dapm->codec && dapm->codec->name_prefix && !is_prefixed) {
                snprintf(prefixed_sink, sizeof(prefixed_sink), "%s %s",
                         dapm->codec->name_prefix, route->sink);
                sink = prefixed_sink;
@@ -2614,7 +2615,7 @@ int snd_soc_dapm_add_routes(struct snd_soc_dapm_context *dapm,
 
        mutex_lock_nested(&dapm->card->dapm_mutex, SND_SOC_DAPM_CLASS_INIT);
        for (i = 0; i < num; i++) {
-               r = snd_soc_dapm_add_route(dapm, route);
+               r = snd_soc_dapm_add_route(dapm, route, false);
                if (r < 0) {
                        dev_err(dapm->dev, "ASoC: Failed to add route %s -> %s -> %s\n",
                                route->source,
@@ -3670,7 +3671,7 @@ void snd_soc_dapm_connect_dai_link_widgets(struct snd_soc_card *card)
                                cpu_dai->codec->name, r.source,
                                codec_dai->platform->name, r.sink);
 
-                       snd_soc_dapm_add_route(&card->dapm, &r);
+                       snd_soc_dapm_add_route(&card->dapm, &r, true);
                }
 
                /* connect BE DAI capture if widgets are valid */
@@ -3681,7 +3682,7 @@ void snd_soc_dapm_connect_dai_link_widgets(struct snd_soc_card *card)
                                codec_dai->codec->name, r.source,
                                cpu_dai->platform->name, r.sink);
 
-                       snd_soc_dapm_add_route(&card->dapm, &r);
+                       snd_soc_dapm_add_route(&card->dapm, &r, true);
                }
 
        }