diff options
author | Nikolaus Voss <n.voss@weinmann.de> | 2012-01-17 04:28:33 -0500 |
---|---|---|
committer | Vinod Koul <vinod.koul@linux.intel.com> | 2012-01-30 22:39:04 -0500 |
commit | bda3a47c886664e86ee14eb79e9072b9e341f575 (patch) | |
tree | 57f220d3f7cf54d05273582aac2da4d4e4be6aa9 /drivers/dma/at_hdmac_regs.h | |
parent | dcd6c92267155e70a94b3927bce681ce74b80d1f (diff) |
at_hdmac: bugfix for enabling channel irq
commit 463894705e4089d0ff69e7d877312d496ac70e5b deleted redundant
chan_id and chancnt initialization in dma drivers as this is done
in dma_async_device_register().
However, atc_enable_irq() relied on chan_id set before registering
the device, what left only channel 0 functional for this driver.
This patch introduces atc_enable/disable_chan_irq() as a variant
of atc_enable/disable_irq() with the channel as explicit argument.
Signed-off-by: Nikolaus Voss <n.voss@weinmann.de>
Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Vinod Koul <vinod.koul@linux.intel.com>
Diffstat (limited to 'drivers/dma/at_hdmac_regs.h')
-rw-r--r-- | drivers/dma/at_hdmac_regs.h | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/drivers/dma/at_hdmac_regs.h b/drivers/dma/at_hdmac_regs.h index dcaedfc181cf..a8d3277d60b5 100644 --- a/drivers/dma/at_hdmac_regs.h +++ b/drivers/dma/at_hdmac_regs.h | |||
@@ -327,28 +327,27 @@ static void atc_dump_lli(struct at_dma_chan *atchan, struct at_lli *lli) | |||
327 | } | 327 | } |
328 | 328 | ||
329 | 329 | ||
330 | static void atc_setup_irq(struct at_dma_chan *atchan, int on) | 330 | static void atc_setup_irq(struct at_dma *atdma, int chan_id, int on) |
331 | { | 331 | { |
332 | struct at_dma *atdma = to_at_dma(atchan->chan_common.device); | 332 | u32 ebci; |
333 | u32 ebci; | ||
334 | 333 | ||
335 | /* enable interrupts on buffer transfer completion & error */ | 334 | /* enable interrupts on buffer transfer completion & error */ |
336 | ebci = AT_DMA_BTC(atchan->chan_common.chan_id) | 335 | ebci = AT_DMA_BTC(chan_id) |
337 | | AT_DMA_ERR(atchan->chan_common.chan_id); | 336 | | AT_DMA_ERR(chan_id); |
338 | if (on) | 337 | if (on) |
339 | dma_writel(atdma, EBCIER, ebci); | 338 | dma_writel(atdma, EBCIER, ebci); |
340 | else | 339 | else |
341 | dma_writel(atdma, EBCIDR, ebci); | 340 | dma_writel(atdma, EBCIDR, ebci); |
342 | } | 341 | } |
343 | 342 | ||
344 | static inline void atc_enable_irq(struct at_dma_chan *atchan) | 343 | static void atc_enable_chan_irq(struct at_dma *atdma, int chan_id) |
345 | { | 344 | { |
346 | atc_setup_irq(atchan, 1); | 345 | atc_setup_irq(atdma, chan_id, 1); |
347 | } | 346 | } |
348 | 347 | ||
349 | static inline void atc_disable_irq(struct at_dma_chan *atchan) | 348 | static void atc_disable_chan_irq(struct at_dma *atdma, int chan_id) |
350 | { | 349 | { |
351 | atc_setup_irq(atchan, 0); | 350 | atc_setup_irq(atdma, chan_id, 0); |
352 | } | 351 | } |
353 | 352 | ||
354 | 353 | ||