Commit d5bbe7de authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown

ASoC: rsnd: move rsnd_mod_is_working() to rsnd_io_is_working()

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: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Tested-by: default avatarKeita Kobayashi <keita.kobayashi.ym@renesas.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent b65a7ccc
...@@ -196,10 +196,8 @@ void rsnd_mod_interrupt(struct rsnd_mod *mod, ...@@ -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() */ /* see rsnd_dai_stream_init/quit() */
return !!io->substream; return !!io->substream;
} }
......
...@@ -52,7 +52,7 @@ static void __rsnd_dmaen_complete(struct rsnd_mod *mod, ...@@ -52,7 +52,7 @@ static void __rsnd_dmaen_complete(struct rsnd_mod *mod,
*/ */
spin_lock_irqsave(&priv->lock, flags); 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); elapsed = rsnd_dai_pointer_update(io, io->byte_per_period);
spin_unlock_irqrestore(&priv->lock, flags); spin_unlock_irqrestore(&priv->lock, flags);
......
...@@ -326,7 +326,6 @@ int rsnd_mod_init(struct rsnd_priv *priv, ...@@ -326,7 +326,6 @@ int rsnd_mod_init(struct rsnd_priv *priv,
int id); int id);
void rsnd_mod_quit(struct rsnd_mod *mod); void rsnd_mod_quit(struct rsnd_mod *mod);
char *rsnd_mod_name(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 dma_chan *rsnd_mod_dma_req(struct rsnd_dai_stream *io,
struct rsnd_mod *mod); struct rsnd_mod *mod);
void rsnd_mod_interrupt(struct rsnd_mod *mod, void rsnd_mod_interrupt(struct rsnd_mod *mod,
...@@ -356,7 +355,7 @@ struct rsnd_dai_stream { ...@@ -356,7 +355,7 @@ struct rsnd_dai_stream {
#define rsnd_io_is_play(io) (&rsnd_io_to_rdai(io)->playback == io) #define rsnd_io_is_play(io) (&rsnd_io_to_rdai(io)->playback == io)
#define rsnd_io_to_runtime(io) ((io)->substream ? \ #define rsnd_io_to_runtime(io) ((io)->substream ? \
(io)->substream->runtime : NULL) (io)->substream->runtime : NULL)
int rsnd_io_is_working(struct rsnd_dai_stream *io);
struct rsnd_dai { struct rsnd_dai {
char name[RSND_DAI_NAME_SIZE]; char name[RSND_DAI_NAME_SIZE];
......
...@@ -684,7 +684,7 @@ static void __rsnd_src_interrupt_gen2(struct rsnd_mod *mod, ...@@ -684,7 +684,7 @@ static void __rsnd_src_interrupt_gen2(struct rsnd_mod *mod,
spin_lock(&priv->lock); spin_lock(&priv->lock);
/* ignore all cases if not working */ /* ignore all cases if not working */
if (!rsnd_mod_is_working(mod)) if (!rsnd_io_is_working(io))
goto rsnd_src_interrupt_gen2_out; goto rsnd_src_interrupt_gen2_out;
if (rsnd_src_error_record_gen2(mod)) { if (rsnd_src_error_record_gen2(mod)) {
......
...@@ -432,7 +432,7 @@ static void __rsnd_ssi_interrupt(struct rsnd_mod *mod, ...@@ -432,7 +432,7 @@ static void __rsnd_ssi_interrupt(struct rsnd_mod *mod,
spin_lock(&priv->lock); spin_lock(&priv->lock);
/* ignore all cases if not working */ /* ignore all cases if not working */
if (!rsnd_mod_is_working(mod)) if (!rsnd_io_is_working(io))
goto rsnd_ssi_interrupt_out; goto rsnd_ssi_interrupt_out;
status = rsnd_mod_read(mod, SSISR); status = rsnd_mod_read(mod, SSISR);
......
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