[alsa-devel] [PATCH 20/21] ASoC: rsnd: move rsnd_mod_is_working() to rsnd_io_is_working()

Kuninori Morimoto kuninori.morimoto.gx at renesas.com
Mon Jun 15 08:27:47 CEST 2015


From: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>

Each Renesas sound mod (= SSI/SRC/DVC) might be called from many paths
if it supports MIXer. In such case, mod <-> io is no longer 1:1
relationship.
This patch checks module working status via io instead of mod

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
Tested-by: Keita Kobayashi <keita.kobayashi.ym at renesas.com>
---
 sound/soc/sh/rcar/core.c | 4 +---
 sound/soc/sh/rcar/dma.c  | 2 +-
 sound/soc/sh/rcar/rsnd.h | 3 +--
 sound/soc/sh/rcar/src.c  | 2 +-
 sound/soc/sh/rcar/ssi.c  | 2 +-
 5 files changed, 5 insertions(+), 8 deletions(-)

diff --git a/sound/soc/sh/rcar/core.c b/sound/soc/sh/rcar/core.c
index 266b24a..1eca85f 100644
--- a/sound/soc/sh/rcar/core.c
+++ b/sound/soc/sh/rcar/core.c
@@ -196,10 +196,8 @@ void rsnd_mod_interrupt(struct rsnd_mod *mod,
 	}
 }
 
-int rsnd_mod_is_working(struct rsnd_mod *mod)
+int rsnd_io_is_working(struct rsnd_dai_stream *io)
 {
-	struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
-
 	/* see rsnd_dai_stream_init/quit() */
 	return !!io->substream;
 }
diff --git a/sound/soc/sh/rcar/dma.c b/sound/soc/sh/rcar/dma.c
index 48b87bb..d306e29 100644
--- a/sound/soc/sh/rcar/dma.c
+++ b/sound/soc/sh/rcar/dma.c
@@ -52,7 +52,7 @@ static void __rsnd_dmaen_complete(struct rsnd_mod *mod,
 	 */
 	spin_lock_irqsave(&priv->lock, flags);
 
-	if (rsnd_mod_is_working(mod))
+	if (rsnd_io_is_working(io))
 		elapsed = rsnd_dai_pointer_update(io, io->byte_per_period);
 
 	spin_unlock_irqrestore(&priv->lock, flags);
diff --git a/sound/soc/sh/rcar/rsnd.h b/sound/soc/sh/rcar/rsnd.h
index fdb443b..756930b 100644
--- a/sound/soc/sh/rcar/rsnd.h
+++ b/sound/soc/sh/rcar/rsnd.h
@@ -326,7 +326,6 @@ int rsnd_mod_init(struct rsnd_priv *priv,
 		   int id);
 void rsnd_mod_quit(struct rsnd_mod *mod);
 char *rsnd_mod_name(struct rsnd_mod *mod);
-int rsnd_mod_is_working(struct rsnd_mod *mod);
 struct dma_chan *rsnd_mod_dma_req(struct rsnd_dai_stream *io,
 				  struct rsnd_mod *mod);
 void rsnd_mod_interrupt(struct rsnd_mod *mod,
@@ -356,7 +355,7 @@ struct rsnd_dai_stream {
 #define rsnd_io_is_play(io)	(&rsnd_io_to_rdai(io)->playback == io)
 #define rsnd_io_to_runtime(io) ((io)->substream ? \
 				(io)->substream->runtime : NULL)
-
+int rsnd_io_is_working(struct rsnd_dai_stream *io);
 
 struct rsnd_dai {
 	char name[RSND_DAI_NAME_SIZE];
diff --git a/sound/soc/sh/rcar/src.c b/sound/soc/sh/rcar/src.c
index 67db696..c61c171 100644
--- a/sound/soc/sh/rcar/src.c
+++ b/sound/soc/sh/rcar/src.c
@@ -684,7 +684,7 @@ static void __rsnd_src_interrupt_gen2(struct rsnd_mod *mod,
 	spin_lock(&priv->lock);
 
 	/* ignore all cases if not working */
-	if (!rsnd_mod_is_working(mod))
+	if (!rsnd_io_is_working(io))
 		goto rsnd_src_interrupt_gen2_out;
 
 	if (rsnd_src_error_record_gen2(mod)) {
diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
index fa1f2e5..2fbe59f 100644
--- a/sound/soc/sh/rcar/ssi.c
+++ b/sound/soc/sh/rcar/ssi.c
@@ -432,7 +432,7 @@ static void __rsnd_ssi_interrupt(struct rsnd_mod *mod,
 	spin_lock(&priv->lock);
 
 	/* ignore all cases if not working */
-	if (!rsnd_mod_is_working(mod))
+	if (!rsnd_io_is_working(io))
 		goto rsnd_ssi_interrupt_out;
 
 	status = rsnd_mod_read(mod, SSISR);
-- 
1.9.1



More information about the Alsa-devel mailing list