diff options
author | Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | 2015-01-15 08:09:13 +0000 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2015-01-15 11:37:48 +0000 |
commit | 765ae7c8dda7d06d7ce74b35beb4c7ec06b78643 (patch) | |
tree | 5d3091fbd45a9f28480457c15e0d363ff26057a1 /sound/soc/sh | |
parent | 337b0b4c5f415705f1b97df57cecfac45903449a (diff) | |
download | blackbird-obmc-linux-765ae7c8dda7d06d7ce74b35beb4c7ec06b78643.tar.gz blackbird-obmc-linux-765ae7c8dda7d06d7ce74b35beb4c7ec06b78643.zip |
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>
Diffstat (limited to 'sound/soc/sh')
-rw-r--r-- | sound/soc/sh/rcar/ssi.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c index d26634bde908..4b646124ab8a 100644 --- a/sound/soc/sh/rcar/ssi.c +++ b/sound/soc/sh/rcar/ssi.c @@ -384,13 +384,14 @@ static irqreturn_t rsnd_ssi_interrupt(int irq, void *data) struct rsnd_mod *mod = &ssi->mod; struct rsnd_priv *priv = rsnd_mod_to_priv(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); if (!io) return IRQ_NONE; /* PIO only */ - if (status & DIRQ) { + if (!is_dma && (status & DIRQ)) { struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io); u32 *buf = (u32 *)(runtime->dma_area + rsnd_dai_pointer_offset(io, 0)); |