void dma_stop(int ch) { int i; #define DMA_DISABLE_POLL 0x10000 if (!__dmac_channel_enabled(ch)) return; for (i=0;i<DMA_DISABLE_POLL;i++) if (__dmac_channel_transmit_end_detected(ch)) break; __dmac_disable_channel(ch); if (dma_irq[ch]) __dmac_channel_disable_irq(ch); }
void dma_stop(int ch) { int i; if(0 == dma_used[ch]) return; REG_DMAC_DCCSR(ch) = 0; if (dma_irq[ch]) __dmac_channel_disable_irq(ch); REG_DMAC_DCKE &= ~DMAC_DCKE_CHN_ON(ch); //Close clock to this channel dma_used[ch] = 0; dma_irq[ch] = 0; }
static void mask_and_ack_dma_irq(unsigned int irq) { unsigned int intc_irq; if ( irq < (IRQ_DMA_0 + HALF_DMA_NUM) ) /* DMAC Group 0 irq */ intc_irq = IRQ_DMAC0; else if ( irq < (IRQ_DMA_0 + MAX_DMA_NUM) ) /* DMAC Group 1 irq */ intc_irq = IRQ_DMAC1; else { printk("%s, unexpected dma irq #%d\n", __FILE__, irq); return ; } __intc_ack_irq(intc_irq); __dmac_channel_ack_irq(irq-IRQ_DMA_0); /* needed?? add 20080506, Wolfgang */ __dmac_channel_disable_irq(irq - IRQ_DMA_0); }
static void mask_and_ack_dma_irq(unsigned int irq) { __intc_ack_irq(IRQ_DMAC); __dmac_channel_disable_irq(irq - IRQ_DMA_0); }
static void disable_dma_irq(unsigned int irq) { __dmac_channel_disable_irq(irq - IRQ_DMA_0); }