From: Joel Fernandes Date: Thu, 29 Aug 2013 23:05:42 +0000 (-0500) Subject: ARM: edma: Add function to manually trigger an EDMA channel X-Git-Tag: v3.12-rc1~68^2~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=96874b9a241c543e2f32d7bd7100af4416522cfb;p=profile%2Fivi%2Fkernel-x86-ivi.git ARM: edma: Add function to manually trigger an EDMA channel Manual trigger for events missed as a result of splitting a scatter gather list and DMA'ing it in batches. Add a helper function to trigger a channel incase any such events are missed. Signed-off-by: Joel Fernandes Acked-by: Sekhar Nori Signed-off-by: Vinod Koul --- diff --git a/arch/arm/common/edma.c b/arch/arm/common/edma.c index 39ad030..117f955 100644 --- a/arch/arm/common/edma.c +++ b/arch/arm/common/edma.c @@ -1235,6 +1235,23 @@ void edma_resume(unsigned channel) } EXPORT_SYMBOL(edma_resume); +int edma_trigger_channel(unsigned channel) +{ + unsigned ctlr; + unsigned int mask; + + ctlr = EDMA_CTLR(channel); + channel = EDMA_CHAN_SLOT(channel); + mask = BIT(channel & 0x1f); + + edma_shadow0_write_array(ctlr, SH_ESR, (channel >> 5), mask); + + pr_debug("EDMA: ESR%d %08x\n", (channel >> 5), + edma_shadow0_read_array(ctlr, SH_ESR, (channel >> 5))); + return 0; +} +EXPORT_SYMBOL(edma_trigger_channel); + /** * edma_start - start dma on a channel * @channel: channel being activated diff --git a/include/linux/platform_data/edma.h b/include/linux/platform_data/edma.h index 57300fd..179fb91 100644 --- a/include/linux/platform_data/edma.h +++ b/include/linux/platform_data/edma.h @@ -180,4 +180,6 @@ struct edma_soc_info { const s16 (*xbar_chans)[2]; }; +int edma_trigger_channel(unsigned); + #endif