ASoC: samsung: i2s: Add widgets and routes for DPCM support 44/197844/5
authorSylwester Nawrocki <s.nawrocki@samsung.com>
Tue, 12 Feb 2019 18:03:24 +0000 (19:03 +0100)
committerSylwester Nawrocki <s.nawrocki@samsung.com>
Mon, 4 Mar 2019 17:05:33 +0000 (18:05 +0100)
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.

Change-Id: I3cb7b1b17f0c6891f6edb638db97ca6a482cec4b
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 c39349a..fc65621 100644 (file)
@@ -1115,8 +1115,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 | \
@@ -1128,6 +1151,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;
@@ -1157,6 +1181,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];