diff options
Diffstat (limited to 'arch/arm/plat-omap/dma.c')
-rw-r--r-- | arch/arm/plat-omap/dma.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c index fd3154ae69b1..b53125f41293 100644 --- a/arch/arm/plat-omap/dma.c +++ b/arch/arm/plat-omap/dma.c | |||
@@ -829,10 +829,10 @@ EXPORT_SYMBOL(omap_free_dma); | |||
829 | * | 829 | * |
830 | * @param arb_rate | 830 | * @param arb_rate |
831 | * @param max_fifo_depth | 831 | * @param max_fifo_depth |
832 | * @param tparams - Number of thereads to reserve : DMA_THREAD_RESERVE_NORM | 832 | * @param tparams - Number of threads to reserve : DMA_THREAD_RESERVE_NORM |
833 | * DMA_THREAD_RESERVE_ONET | 833 | * DMA_THREAD_RESERVE_ONET |
834 | * DMA_THREAD_RESERVE_TWOT | 834 | * DMA_THREAD_RESERVE_TWOT |
835 | * DMA_THREAD_RESERVE_THREET | 835 | * DMA_THREAD_RESERVE_THREET |
836 | */ | 836 | */ |
837 | void | 837 | void |
838 | omap_dma_set_global_params(int arb_rate, int max_fifo_depth, int tparams) | 838 | omap_dma_set_global_params(int arb_rate, int max_fifo_depth, int tparams) |
@@ -844,11 +844,14 @@ omap_dma_set_global_params(int arb_rate, int max_fifo_depth, int tparams) | |||
844 | return; | 844 | return; |
845 | } | 845 | } |
846 | 846 | ||
847 | if (max_fifo_depth == 0) | ||
848 | max_fifo_depth = 1; | ||
847 | if (arb_rate == 0) | 849 | if (arb_rate == 0) |
848 | arb_rate = 1; | 850 | arb_rate = 1; |
849 | 851 | ||
850 | reg = (arb_rate & 0xff) << 16; | 852 | reg = 0xff & max_fifo_depth; |
851 | reg |= (0xff & max_fifo_depth); | 853 | reg |= (0x3 & tparams) << 12; |
854 | reg |= (arb_rate & 0xff) << 16; | ||
852 | 855 | ||
853 | dma_write(reg, GCR); | 856 | dma_write(reg, GCR); |
854 | } | 857 | } |
@@ -975,6 +978,14 @@ void omap_stop_dma(int lch) | |||
975 | { | 978 | { |
976 | u32 l; | 979 | u32 l; |
977 | 980 | ||
981 | /* Disable all interrupts on the channel */ | ||
982 | if (cpu_class_is_omap1()) | ||
983 | dma_write(0, CICR(lch)); | ||
984 | |||
985 | l = dma_read(CCR(lch)); | ||
986 | l &= ~OMAP_DMA_CCR_EN; | ||
987 | dma_write(l, CCR(lch)); | ||
988 | |||
978 | if (!omap_dma_in_1510_mode() && dma_chan[lch].next_lch != -1) { | 989 | if (!omap_dma_in_1510_mode() && dma_chan[lch].next_lch != -1) { |
979 | int next_lch, cur_lch = lch; | 990 | int next_lch, cur_lch = lch; |
980 | char dma_chan_link_map[OMAP_DMA4_LOGICAL_DMA_CH_COUNT]; | 991 | char dma_chan_link_map[OMAP_DMA4_LOGICAL_DMA_CH_COUNT]; |
@@ -992,18 +1003,8 @@ void omap_stop_dma(int lch) | |||
992 | next_lch = dma_chan[cur_lch].next_lch; | 1003 | next_lch = dma_chan[cur_lch].next_lch; |
993 | cur_lch = next_lch; | 1004 | cur_lch = next_lch; |
994 | } while (next_lch != -1); | 1005 | } while (next_lch != -1); |
995 | |||
996 | return; | ||
997 | } | 1006 | } |
998 | 1007 | ||
999 | /* Disable all interrupts on the channel */ | ||
1000 | if (cpu_class_is_omap1()) | ||
1001 | dma_write(0, CICR(lch)); | ||
1002 | |||
1003 | l = dma_read(CCR(lch)); | ||
1004 | l &= ~OMAP_DMA_CCR_EN; | ||
1005 | dma_write(l, CCR(lch)); | ||
1006 | |||
1007 | dma_chan[lch].flags &= ~OMAP_DMA_ACTIVE; | 1008 | dma_chan[lch].flags &= ~OMAP_DMA_ACTIVE; |
1008 | } | 1009 | } |
1009 | EXPORT_SYMBOL(omap_stop_dma); | 1010 | EXPORT_SYMBOL(omap_stop_dma); |