diff options
Diffstat (limited to 'arch/arm/plat-omap/dma.c')
-rw-r--r-- | arch/arm/plat-omap/dma.c | 17 |
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, |