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: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Tested-by: Keita Kobayashi <keita.kobayashi.ym@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Родитель
b65a7cccb5
Коммит
d5bbe7de56
|
@ -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,
|
||||||
*/
|
*/
|
||||||
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,
|
||||||
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 {
|
||||||
#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,
|
||||||
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,
|
||||||
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);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче