Commit 64aba9bc authored by Sylwester Nawrocki's avatar Sylwester Nawrocki Committed by Mark Brown

ASoC: samsung: i2s: Add widgets and routes for DPCM support

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: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
Acked-by: default avatarKrzysztof Kozlowski <krzk@kernel.org>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 89d2e831
...@@ -1116,8 +1116,31 @@ static const struct snd_soc_dai_ops samsung_i2s_dai_ops = { ...@@ -1116,8 +1116,31 @@ static const struct snd_soc_dai_ops samsung_i2s_dai_ops = {
.delay = i2s_delay, .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 = { 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 | \ #define SAMSUNG_I2S_FMTS (SNDRV_PCM_FMTBIT_S8 | \
...@@ -1129,6 +1152,7 @@ static int i2s_alloc_dais(struct samsung_i2s_priv *priv, ...@@ -1129,6 +1152,7 @@ static int i2s_alloc_dais(struct samsung_i2s_priv *priv,
int num_dais) int num_dais)
{ {
static const char *dai_names[] = { "samsung-i2s", "samsung-i2s-sec" }; 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 snd_soc_dai_driver *dai_drv;
struct i2s_dai *dai; struct i2s_dai *dai;
int i; int i;
...@@ -1158,6 +1182,7 @@ static int i2s_alloc_dais(struct samsung_i2s_priv *priv, ...@@ -1158,6 +1182,7 @@ static int i2s_alloc_dais(struct samsung_i2s_priv *priv,
dai_drv->playback.channels_max = 2; dai_drv->playback.channels_max = 2;
dai_drv->playback.rates = i2s_dai_data->pcm_rates; dai_drv->playback.rates = i2s_dai_data->pcm_rates;
dai_drv->playback.formats = SAMSUNG_I2S_FMTS; dai_drv->playback.formats = SAMSUNG_I2S_FMTS;
dai_drv->playback.stream_name = stream_names[i];
dai_drv->id = i + 1; dai_drv->id = i + 1;
dai_drv->name = dai_names[i]; dai_drv->name = dai_names[i];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment