From: Zeng Zhaoming Date: Mon, 8 Aug 2011 18:27:05 +0000 (+0800) Subject: ENGR00154525 SDMA: SDMA not works when event number bigger than 32 X-Git-Tag: v3.0.35-fsl_4.1.0~2335 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=50262ba585745abd404727f31c1b6828392d6680;p=karo-tx-linux.git ENGR00154525 SDMA: SDMA not works when event number bigger than 32 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 --- diff --git a/drivers/dma/imx-sdma.c b/drivers/dma/imx-sdma.c index 27c42d1d96de..34dd96a2f371 100644 --- a/drivers/dma/imx-sdma.c +++ b/drivers/dma/imx-sdma.c @@ -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);