aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/plat-omap/dma.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/plat-omap/dma.c')
-rw-r--r--arch/arm/plat-omap/dma.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c
index def14ec265b3..e3ac94f09006 100644
--- a/arch/arm/plat-omap/dma.c
+++ b/arch/arm/plat-omap/dma.c
@@ -946,7 +946,9 @@ void omap_start_dma(int lch)
946 946
947 cur_lch = next_lch; 947 cur_lch = next_lch;
948 } while (next_lch != -1); 948 } while (next_lch != -1);
949 } else if (cpu_class_is_omap2()) { 949 } else if (cpu_is_omap242x() ||
950 (cpu_is_omap243x() && omap_type() <= OMAP2430_REV_ES1_0)) {
951
950 /* Errata: Need to write lch even if not using chaining */ 952 /* Errata: Need to write lch even if not using chaining */
951 dma_write(lch, CLNK_CTRL(lch)); 953 dma_write(lch, CLNK_CTRL(lch));
952 } 954 }
@@ -2457,6 +2459,19 @@ static int __init omap_init_dma(void)
2457 setup_irq(irq, &omap24xx_dma_irq); 2459 setup_irq(irq, &omap24xx_dma_irq);
2458 } 2460 }
2459 2461
2462 /* Enable smartidle idlemodes and autoidle */
2463 if (cpu_is_omap34xx()) {
2464 u32 v = dma_read(OCP_SYSCONFIG);
2465 v &= ~(DMA_SYSCONFIG_MIDLEMODE_MASK |
2466 DMA_SYSCONFIG_SIDLEMODE_MASK |
2467 DMA_SYSCONFIG_AUTOIDLE);
2468 v |= (DMA_SYSCONFIG_MIDLEMODE(DMA_IDLEMODE_SMARTIDLE) |
2469 DMA_SYSCONFIG_SIDLEMODE(DMA_IDLEMODE_SMARTIDLE) |
2470 DMA_SYSCONFIG_AUTOIDLE);
2471 dma_write(v , OCP_SYSCONFIG);
2472 }
2473
2474
2460 /* FIXME: Update LCD DMA to work on 24xx */ 2475 /* FIXME: Update LCD DMA to work on 24xx */
2461 if (cpu_class_is_omap1()) { 2476 if (cpu_class_is_omap1()) {
2462 r = request_irq(INT_DMA_LCD, lcd_dma_irq_handler, 0, 2477 r = request_irq(INT_DMA_LCD, lcd_dma_irq_handler, 0,