]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ENGR00154525 SDMA: SDMA not works when event number bigger than 32
authorZeng Zhaoming <b32542@freescale.com>
Mon, 8 Aug 2011 18:27:05 +0000 (02:27 +0800)
committerOliver Wendt <ow@karo-electronics.de>
Mon, 30 Sep 2013 12:09:27 +0000 (14:09 +0200)
New sdma driver in 2.6.38 kernel not map event to channel correctly by
ignore events bigger than 32.

Fix it by remove this restriction

Signed-off-by: Zeng Zhaoming <b32542@freescale.com>
drivers/dma/imx-sdma.c

index 27c42d1d96de3d2278a5abba95a674e98b40b753..34dd96a2f371c44358773c198af6ba15d695803d 100644 (file)
@@ -673,11 +673,11 @@ static int sdma_config_channel(struct sdma_channel *sdmac)
        sdmac->shp_addr = 0;
        sdmac->per_addr = 0;
 
-       if (sdmac->event_id0) {
-               if (sdmac->event_id0 > 32)
-                       return -EINVAL;
+       if (sdmac->event_id0)
                sdma_event_enable(sdmac, sdmac->event_id0);
-       }
+
+       if (sdmac->event_id1)
+               sdma_event_enable(sdmac, sdmac->event_id1);
 
        switch (sdmac->peripheral_type) {
        case IMX_DMATYPE_DSP:
@@ -699,10 +699,10 @@ static int sdma_config_channel(struct sdma_channel *sdmac)
                if (sdmac->event_id1) {
                        sdmac->event_mask1 = 1 << (sdmac->event_id1 % 32);
                        if (sdmac->event_id1 > 31)
-                               sdmac->watermark_level |= 1 << 31;
+                               sdmac->watermark_level |= 1 << 29;
                        sdmac->event_mask0 = 1 << (sdmac->event_id0 % 32);
                        if (sdmac->event_id0 > 31)
-                               sdmac->watermark_level |= 1 << 30;
+                               sdmac->watermark_level |= 1 << 28;
                } else {
                        sdmac->event_mask0 = 1 << sdmac->event_id0;
                        sdmac->event_mask1 = 1 << (sdmac->event_id0 - 32);