]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/arm/plat-omap/dma.c
ARM OMAP: Fix race in OMAP2/3 DMA IRQ handling
[linux-2.6-omap-h63xx.git] / arch / arm / plat-omap / dma.c
old mode 100644 (file)
new mode 100755 (executable)
index 9d8d28c..9b697a4
@@ -279,10 +279,7 @@ void omap_set_dma_transfer_params(int lch, int data_type, int elem_count,
 
                val = dma_read(CCR(lch));
                val &= ~(3 << 19);
-               if (dma_trigger > 63)
-                       val |= 1 << 20;
-               if (dma_trigger > 31)
-                       val |= 1 << 19;
+               val |= ((dma_trigger & ~(0x1f)) << 14);
 
                val &= ~(0x1f);
                val |= (dma_trigger & 0x1f);
@@ -1892,11 +1889,11 @@ static int omap2_dma_handle_ch(int ch)
                status = dma_read(CSR(ch));
        }
 
+       dma_write(status, CSR(ch));
+
        if (likely(dma_chan[ch].callback != NULL))
                dma_chan[ch].callback(ch, status, dma_chan[ch].data);
 
-       dma_write(status, CSR(ch));
-
        return 0;
 }