summaryrefslogtreecommitdiffstats
path: root/sound/soc/sh/rcar
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2015-10-26 08:40:02 +0000
committerMark Brown <broonie@kernel.org>2015-11-16 10:09:29 +0000
commit48d582819fdc38cda1aeb17f26cfe586d3900f2f (patch)
treeb02f129433b34268a82dec4bb3e9b49d3129bce4 /sound/soc/sh/rcar
parent27924f3208c9f37a1d58b80d999bb9cfc96536d4 (diff)
downloadop-kernel-dev-48d582819fdc38cda1aeb17f26cfe586d3900f2f.zip
op-kernel-dev-48d582819fdc38cda1aeb17f26cfe586d3900f2f.tar.gz
ASoC: rsnd: remove all modules when PIO fallback
Current Renesas sound is supporting PIO fallback if it can't use DMA. In such case, it should remove all attached modules, but current driver is missing about CTU/MIX. Because current implement requests specific mod for remove. To avoid same things in future, this patch removes all mods, and re-connects SSI when PIO fallback case. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/sh/rcar')
-rw-r--r--sound/soc/sh/rcar/core.c25
1 files changed, 8 insertions, 17 deletions
diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c
index d7d2a59..b6fc0d8 100644
--- a/sound/soc/sh/rcar/core.c
+++ b/sound/soc/sh/rcar/core.c
@@ -590,20 +590,6 @@ static const struct snd_soc_dai_ops rsnd_soc_dai_ops = {
ret; \
})
-#define rsnd_path_remove(priv, io, _type) \
-{ \
- struct rsnd_mod *mod; \
- int id = -1; \
- \
- if (rsnd_is_enable_path(io, _type)) { \
- id = rsnd_info_id(priv, io, _type); \
- if (id >= 0) { \
- mod = rsnd_##_type##_mod_get(priv, id); \
- rsnd_dai_disconnect(mod, io, mod->type);\
- } \
- } \
-}
-
void rsnd_path_parse(struct rsnd_priv *priv,
struct rsnd_dai_stream *io)
{
@@ -1163,6 +1149,9 @@ static int rsnd_rdai_continuance_probe(struct rsnd_priv *priv,
ret = rsnd_dai_call(probe, io, priv);
if (ret == -EAGAIN) {
+ struct rsnd_mod *ssi_mod = rsnd_io_to_mod_ssi(io);
+ int i;
+
/*
* Fallback to PIO mode
*/
@@ -1177,10 +1166,12 @@ static int rsnd_rdai_continuance_probe(struct rsnd_priv *priv,
rsnd_dai_call(remove, io, priv);
/*
- * remove SRC/DVC from DAI,
+ * remove all mod from io
+ * and, re connect ssi
*/
- rsnd_path_remove(priv, io, src);
- rsnd_path_remove(priv, io, dvc);
+ for (i = 0; i < RSND_MOD_MAX; i++)
+ rsnd_dai_disconnect((io)->mod[i], io, i);
+ rsnd_dai_connect(ssi_mod, io, RSND_MOD_SSI);
/*
* fallback
OpenPOWER on IntegriCloud