]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Merge branch 'topic/dapm-dt' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie...
authorMark Brown <broonie@kernel.org>
Fri, 10 Apr 2015 15:09:21 +0000 (16:09 +0100)
committerMark Brown <broonie@kernel.org>
Fri, 10 Apr 2015 15:09:21 +0000 (16:09 +0100)
include/sound/soc.h
sound/soc/fsl/fsl-asoc-card.c
sound/soc/soc-core.c

index 0d1ade19562857c7b65157636ac37b2f0222e202..f66a1ef98a40bdf98f6d89b12e95147f846cb57d 100644 (file)
@@ -1071,11 +1071,16 @@ struct snd_soc_card {
 
        /*
         * Card-specific routes and widgets.
+        * Note: of_dapm_xxx for Device Tree; Otherwise for driver build-in.
         */
        const struct snd_soc_dapm_widget *dapm_widgets;
        int num_dapm_widgets;
        const struct snd_soc_dapm_route *dapm_routes;
        int num_dapm_routes;
+       const struct snd_soc_dapm_widget *of_dapm_widgets;
+       int num_of_dapm_widgets;
+       const struct snd_soc_dapm_route *of_dapm_routes;
+       int num_of_dapm_routes;
        bool fully_routed;
 
        struct work_struct deferred_resume_work;
index 3f6959c8e2f71b44cf054445b85553960e8c94d9..de438871040bd43f8b1e6a05e4a479261e5ea4bd 100644 (file)
@@ -512,6 +512,12 @@ static int fsl_asoc_card_probe(struct platform_device *pdev)
        memcpy(priv->dai_link, fsl_asoc_card_dai,
               sizeof(struct snd_soc_dai_link) * ARRAY_SIZE(priv->dai_link));
 
+       ret = snd_soc_of_parse_audio_routing(&priv->card, "audio-routing");
+       if (ret) {
+               dev_err(&pdev->dev, "failed to parse audio-routing: %d\n", ret);
+               goto asrc_fail;
+       }
+
        /* Normal DAI Link */
        priv->dai_link[0].cpu_of_node = cpu_np;
        priv->dai_link[0].codec_of_node = codec_np;
index 492e1976aab77edd2520730c048542223ec67c25..25fcd80cb108e5388adad97cd6aa5499dd3bd4f1 100644 (file)
@@ -1609,6 +1609,10 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
                snd_soc_dapm_new_controls(&card->dapm, card->dapm_widgets,
                                          card->num_dapm_widgets);
 
+       if (card->of_dapm_widgets)
+               snd_soc_dapm_new_controls(&card->dapm, card->of_dapm_widgets,
+                                         card->num_of_dapm_widgets);
+
        /* initialise the sound card only once */
        if (card->probe) {
                ret = card->probe(card);
@@ -1664,6 +1668,10 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
                snd_soc_dapm_add_routes(&card->dapm, card->dapm_routes,
                                        card->num_dapm_routes);
 
+       if (card->of_dapm_routes)
+               snd_soc_dapm_add_routes(&card->dapm, card->of_dapm_routes,
+                                       card->num_of_dapm_routes);
+
        for (i = 0; i < card->num_links; i++) {
                if (card->dai_link[i].dai_fmt)
                        snd_soc_runtime_set_dai_fmt(&card->rtd[i],
@@ -3272,8 +3280,8 @@ int snd_soc_of_parse_audio_simple_widgets(struct snd_soc_card *card,
                widgets[i].name = wname;
        }
 
-       card->dapm_widgets = widgets;
-       card->num_dapm_widgets = num_widgets;
+       card->of_dapm_widgets = widgets;
+       card->num_of_dapm_widgets = num_widgets;
 
        return 0;
 }
@@ -3357,8 +3365,8 @@ int snd_soc_of_parse_audio_routing(struct snd_soc_card *card,
                }
        }
 
-       card->num_dapm_routes = num_routes;
-       card->dapm_routes = routes;
+       card->num_of_dapm_routes = num_routes;
+       card->of_dapm_routes = routes;
 
        return 0;
 }