aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorPeter Ujfalusi <peter.ujfalusi@ti.com>2012-09-14 08:05:48 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2012-09-22 11:12:46 -0400
commit2dde5b909e117cc95a5e31604f9bfd043e78ad9d (patch)
tree7a1dbb645051098a02f33e6fe1a9959f6c4d71f6 /drivers
parentec8b5e48c03790a68cb875fe5064007a9cbdfdd0 (diff)
dmaengine: omap-dma: Add support to suppress interrupts in cyclic mode
When requested (DMA_PREP_INTERRUPT is cleared in flags) disable all DMA interrupts for the channel. In this mode user space does not expect periodic reports from kernel about the progress of the audio stream. PulseAudio for example support this type of mode. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Acked-by: Vinod Koul <vinod.koul@linux.intel.com> Tested-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/dma/omap-dma.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/dma/omap-dma.c b/drivers/dma/omap-dma.c
index 4d2650f4202c..f59f244f60fc 100644
--- a/drivers/dma/omap-dma.c
+++ b/drivers/dma/omap-dma.c
@@ -429,7 +429,10 @@ static struct dma_async_tx_descriptor *omap_dma_prep_dma_cyclic(
429 if (!c->cyclic) { 429 if (!c->cyclic) {
430 c->cyclic = true; 430 c->cyclic = true;
431 omap_dma_link_lch(c->dma_ch, c->dma_ch); 431 omap_dma_link_lch(c->dma_ch, c->dma_ch);
432 omap_enable_dma_irq(c->dma_ch, OMAP_DMA_FRAME_IRQ); 432
433 if (flags & DMA_PREP_INTERRUPT)
434 omap_enable_dma_irq(c->dma_ch, OMAP_DMA_FRAME_IRQ);
435
433 omap_disable_dma_irq(c->dma_ch, OMAP_DMA_BLOCK_IRQ); 436 omap_disable_dma_irq(c->dma_ch, OMAP_DMA_BLOCK_IRQ);
434 } 437 }
435 438
@@ -438,7 +441,7 @@ static struct dma_async_tx_descriptor *omap_dma_prep_dma_cyclic(
438 omap_set_dma_dest_burst_mode(c->dma_ch, OMAP_DMA_DATA_BURST_16); 441 omap_set_dma_dest_burst_mode(c->dma_ch, OMAP_DMA_DATA_BURST_16);
439 } 442 }
440 443
441 return vchan_tx_prep(&c->vc, &d->vd, DMA_CTRL_ACK | DMA_PREP_INTERRUPT); 444 return vchan_tx_prep(&c->vc, &d->vd, flags);
442} 445}
443 446
444static int omap_dma_slave_config(struct omap_chan *c, struct dma_slave_config *cfg) 447static int omap_dma_slave_config(struct omap_chan *c, struct dma_slave_config *cfg)