diff mbox

[14/16] ASoC: rsnd: ignore DIRQ when DMA transfer

Message ID 87r3uwtqgc.wl%kuninori.morimoto.gx@renesas.com (mailing list archive)
State Accepted
Commit 765ae7c8dda7d06d7ce74b35beb4c7ec06b78643
Headers show

Commit Message

Kuninori Morimoto Jan. 15, 2015, 8:09 a.m. UTC
From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>

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>
---
 sound/soc/sh/rcar/ssi.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
diff mbox

Patch

diff --git a/sound/soc/sh/rcar/ssi.c b/sound/soc/sh/rcar/ssi.c
index d26634b..4b64612 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));