ASoC: samsung: i2s: Add widgets and routes for DPCM support
authorSylwester Nawrocki <s.nawrocki@samsung.com>
Tue, 12 Feb 2019 18:03:24 +0000 (19:03 +0100)
committerMark Brown <broonie@kernel.org>
Wed, 13 Feb 2019 11:45:53 +0000 (11:45 +0000)
This patch adds DAPM widgets required to model the internal mixer
of the I2S controller merging audio streams from the primary and
from the secondary PCM interface.

Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Acked-by: Krzysztof Kozlowski <krzk@kernel.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/samsung/i2s.c

index fffc76ab60da95dc172bdd94e9274b556dd1cf3b..29bcfca20572d9f9698c2cb186c91520100d6b77 100644 (file)
@@ -1116,8 +1116,31 @@ static const struct snd_soc_dai_ops samsung_i2s_dai_ops = {
        .delay = i2s_delay,
 };
 
+static const struct snd_soc_dapm_widget samsung_i2s_widgets[] = {
+       /* Backend DAI  */
+       SND_SOC_DAPM_AIF_OUT("Mixer DAI TX", NULL, 0, SND_SOC_NOPM, 0, 0),
+       SND_SOC_DAPM_AIF_IN("Mixer DAI RX", NULL, 0, SND_SOC_NOPM, 0, 0),
+
+       /* Playback Mixer */
+       SND_SOC_DAPM_MIXER("Playback Mixer", SND_SOC_NOPM, 0, 0, NULL, 0),
+};
+
+static const struct snd_soc_dapm_route samsung_i2s_dapm_routes[] = {
+       { "Playback Mixer", NULL, "Primary" },
+       { "Playback Mixer", NULL, "Secondary" },
+
+       { "Mixer DAI TX", NULL, "Playback Mixer" },
+       { "Playback Mixer", NULL, "Mixer DAI RX" },
+};
+
 static const struct snd_soc_component_driver samsung_i2s_component = {
-       .name           = "samsung-i2s",
+       .name = "samsung-i2s",
+
+       .dapm_widgets = samsung_i2s_widgets,
+       .num_dapm_widgets = ARRAY_SIZE(samsung_i2s_widgets),
+
+       .dapm_routes = samsung_i2s_dapm_routes,
+       .num_dapm_routes = ARRAY_SIZE(samsung_i2s_dapm_routes),
 };
 
 #define SAMSUNG_I2S_FMTS       (SNDRV_PCM_FMTBIT_S8 | \
@@ -1129,6 +1152,7 @@ static int i2s_alloc_dais(struct samsung_i2s_priv *priv,
                          int num_dais)
 {
        static const char *dai_names[] = { "samsung-i2s", "samsung-i2s-sec" };
+       static const char *stream_names[] = { "Primary", "Secondary" };
        struct snd_soc_dai_driver *dai_drv;
        struct i2s_dai *dai;
        int i;
@@ -1158,6 +1182,7 @@ static int i2s_alloc_dais(struct samsung_i2s_priv *priv,
                dai_drv->playback.channels_max = 2;
                dai_drv->playback.rates = i2s_dai_data->pcm_rates;
                dai_drv->playback.formats = SAMSUNG_I2S_FMTS;
+               dai_drv->playback.stream_name = stream_names[i];
 
                dai_drv->id = i + 1;
                dai_drv->name = dai_names[i];