forked from Minki/linux
ASoC: rsnd: ignore DIRQ when DMA transfer
SSI interrupt handler of R-Car sound driver will be called when DIRQ (= Data read/write timing for PIO) or UIRQ / OIRQ (= under/over run error). DIRQ "interrupt" doesn't occur when DMA transfer, but then, DIRQ "status bit" might occur. we need to ignore this DIRQ operation when DMA. Otherwise, driver will push/pop as PIO. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
337b0b4c5f
commit
765ae7c8dd
|
@ -384,13 +384,14 @@ static irqreturn_t rsnd_ssi_interrupt(int irq, void *data)
|
||||||
struct rsnd_mod *mod = &ssi->mod;
|
struct rsnd_mod *mod = &ssi->mod;
|
||||||
struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
|
struct rsnd_priv *priv = rsnd_mod_to_priv(mod);
|
||||||
struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
|
struct rsnd_dai_stream *io = rsnd_mod_to_io(mod);
|
||||||
|
int is_dma = rsnd_ssi_is_dma_mode(mod);
|
||||||
u32 status = rsnd_mod_read(mod, SSISR);
|
u32 status = rsnd_mod_read(mod, SSISR);
|
||||||
|
|
||||||
if (!io)
|
if (!io)
|
||||||
return IRQ_NONE;
|
return IRQ_NONE;
|
||||||
|
|
||||||
/* PIO only */
|
/* PIO only */
|
||||||
if (status & DIRQ) {
|
if (!is_dma && (status & DIRQ)) {
|
||||||
struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
|
struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
|
||||||
u32 *buf = (u32 *)(runtime->dma_area +
|
u32 *buf = (u32 *)(runtime->dma_area +
|
||||||
rsnd_dai_pointer_offset(io, 0));
|
rsnd_dai_pointer_offset(io, 0));
|
||||||
|
|
Loading…
Reference in New Issue
Block a user