summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2016-01-21 02:57:37 +0100
committerMark Brown <broonie@kernel.org>2016-01-22 18:12:25 +0100
commit72154e50728e8a08940332db20884b63dfa6590d (patch)
treeb362070a20e56fc18ab0f848f0655f14287e1373
parentASoC: rsnd: don't overwrite io on rsnd_cmd_init() (diff)
downloadlinux-72154e50728e8a08940332db20884b63dfa6590d.tar.xz
linux-72154e50728e8a08940332db20884b63dfa6590d.zip
ASoC: rsnd: select each SRC correctly for CMD data path
To select CMD data patch, it should use correct SRC from each stream in MUX case. But current code is selecting SRC from fixed stream. This patch solves this issue. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--sound/soc/sh/rcar/cmd.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/sound/soc/sh/rcar/cmd.c b/sound/soc/sh/rcar/cmd.c
index e77e4935b4ea..4b2d50d9a686 100644
--- a/sound/soc/sh/rcar/cmd.c
+++ b/sound/soc/sh/rcar/cmd.c
@@ -29,7 +29,6 @@ static int rsnd_cmd_init(struct rsnd_mod *mod,
{
struct rsnd_mod *dvc = rsnd_io_to_mod_dvc(io);
struct rsnd_mod *mix = rsnd_io_to_mod_mix(io);
- struct rsnd_mod *src = rsnd_io_to_mod_src(io);
struct device *dev = rsnd_priv_to_dev(priv);
u32 data;
@@ -38,6 +37,7 @@ static int rsnd_cmd_init(struct rsnd_mod *mod,
if (mix) {
struct rsnd_dai *rdai;
+ struct rsnd_mod *src;
struct rsnd_dai_stream *tio;
int i;
u32 path[] = {
@@ -57,15 +57,19 @@ static int rsnd_cmd_init(struct rsnd_mod *mod,
data = 0;
for_each_rsnd_dai(rdai, priv, i) {
tio = &rdai->playback;
+ src = rsnd_io_to_mod_src(tio);
if (mix == rsnd_io_to_mod_mix(tio))
data |= path[rsnd_mod_id(src)];
tio = &rdai->capture;
+ src = rsnd_io_to_mod_src(tio);
if (mix == rsnd_io_to_mod_mix(tio))
data |= path[rsnd_mod_id(src)];
}
} else {
+ struct rsnd_mod *src = rsnd_io_to_mod_src(io);
+
u32 path[] = {
[0] = 0x30000,
[1] = 0x30001,