summaryrefslogtreecommitdiffstats
path: root/arch/arm/plat-s3c64xx
diff options
context:
space:
mode:
authorJassi Brar <jassi.brar@samsung.com>2009-11-05 05:44:39 +0100
committerBen Dooks <ben-linux@fluff.org>2009-11-10 00:51:19 +0100
commit336b1a3181d81db85c0af3d0c18fe0a04b4d5126 (patch)
tree2483475f8c9bacec45fc79ff168e4443486c3dc7 /arch/arm/plat-s3c64xx
parentARM: S3C64XX: DMA: Callback with correct buffer pointer (diff)
downloadlinux-336b1a3181d81db85c0af3d0c18fe0a04b4d5126.tar.xz
linux-336b1a3181d81db85c0af3d0c18fe0a04b4d5126.zip
ARM: S3C64XX: DMA: Free node for non-circular queues
We need to free the buff and lli nodes if the buffer queue is not CIRCULAR. Signed-off-by: Jassi Brar <jassi.brar@samsung.com> Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Diffstat (limited to 'arch/arm/plat-s3c64xx')
-rw-r--r--arch/arm/plat-s3c64xx/dma.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/arm/plat-s3c64xx/dma.c b/arch/arm/plat-s3c64xx/dma.c
index 7d12eb8fa58d..d554b936fcfb 100644
--- a/arch/arm/plat-s3c64xx/dma.c
+++ b/arch/arm/plat-s3c64xx/dma.c
@@ -610,6 +610,12 @@ static irqreturn_t s3c64xx_dma_irq(int irq, void *pw)
s3c64xx_dma_bufffdone(chan, buff, res);
+ /* Free the node and update curr, if non-circular queue */
+ if (!(chan->flags & S3C2410_DMAF_CIRCULAR)) {
+ chan->curr = buff->next;
+ s3c64xx_dma_freebuff(buff);
+ }
+
/* Update 'next' */
buff = chan->next;
if (chan->next == chan->end) {