diff options
author | Anand Gadiyar <gadiyar@ti.com> | 2009-01-15 06:09:53 -0500 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2009-01-15 06:09:53 -0500 |
commit | 4b3cf44846b6424d4119676ad68d54a62b81e31c (patch) | |
tree | dcf09df49e55541bf115da40155add60b7ed0590 /arch/arm/plat-omap/dma.c | |
parent | 3a26e3318bc2ceec340f242c6ee7074becdc7219 (diff) |
ARM: OMAP: Fix DMA CCR programming for request line > 63, v3
Bug in existing code causes synchro control to be set +32 if request
line greater than 63 is used.
Also clean up the function a bit by removing extra parens and
clearing the bits at before write.
Reported by Wenbiao Wang.
Signed-off-by: Anand Gadiyar <gadiyar@ti.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch/arm/plat-omap/dma.c')
-rw-r--r-- | arch/arm/plat-omap/dma.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index 692d2b495af3..e77373c39f8c 100644 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c | |||
@@ -278,14 +278,11 @@ void omap_set_dma_transfer_params(int lch, int data_type, int elem_count, | |||
278 | u32 val; | 278 | u32 val; |
279 | 279 | ||
280 | val = dma_read(CCR(lch)); | 280 | val = dma_read(CCR(lch)); |
281 | val &= ~(3 << 19); | 281 | |
282 | if (dma_trigger > 63) | 282 | /* DMA_SYNCHRO_CONTROL_UPPER depends on the channel number */ |
283 | val |= 1 << 20; | 283 | val &= ~((3 << 19) | 0x1f); |
284 | if (dma_trigger > 31) | 284 | val |= (dma_trigger & ~0x1f) << 14; |
285 | val |= 1 << 19; | 285 | val |= dma_trigger & 0x1f; |
286 | |||
287 | val &= ~(0x1f); | ||
288 | val |= (dma_trigger & 0x1f); | ||
289 | 286 | ||
290 | if (sync_mode & OMAP_DMA_SYNC_FRAME) | 287 | if (sync_mode & OMAP_DMA_SYNC_FRAME) |
291 | val |= 1 << 5; | 288 | val |= 1 << 5; |