From 08f942a87011b473adcac4cee798a797e69657b7 Mon Sep 17 00:00:00 2001 From: Peter Ujfalusi Date: Fri, 9 Dec 2011 13:38:00 -0800 Subject: [PATCH] --- yaml --- r: 281488 b: refs/heads/master c: 06e8077b556a372871c04dd68f47e8c25e9ca348 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/arm/plat-omap/dma.c | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 7874ee3f561a..935d8d04cc27 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7ba966804f58ccd81375827a71222efaa131aa70 +refs/heads/master: 06e8077b556a372871c04dd68f47e8c25e9ca348 diff --git a/trunk/arch/arm/plat-omap/dma.c b/trunk/arch/arm/plat-omap/dma.c index a9983b695a18..002fb4d96bbc 100644 --- a/trunk/arch/arm/plat-omap/dma.c +++ b/trunk/arch/arm/plat-omap/dma.c @@ -1074,8 +1074,16 @@ dma_addr_t omap_get_dma_dst_pos(int lch) * omap 3.2/3.3 erratum: sometimes 0 is returned if CSAC/CDAC is * read before the DMA controller finished disabling the channel. */ - if (!cpu_is_omap15xx() && offset == 0) + if (!cpu_is_omap15xx() && offset == 0) { offset = p->dma_read(CDAC, lch); + /* + * CDAC == 0 indicates that the DMA transfer on the channel has + * not been started (no data has been transferred so far). + * Return the programmed destination start address in this case. + */ + if (unlikely(!offset)) + offset = p->dma_read(CDSA, lch); + } if (cpu_class_is_omap1()) offset |= (p->dma_read(CDSA, lch) & 0xFFFF0000);