Beispiel #1
0
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);
}
Beispiel #2
0
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;
}
Beispiel #3
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);
}
Beispiel #4
0
static void mask_and_ack_dma_irq(unsigned int irq)
{
	__intc_ack_irq(IRQ_DMAC);
	__dmac_channel_disable_irq(irq - IRQ_DMA_0);
}
Beispiel #5
0
static void disable_dma_irq(unsigned int irq)
{
	__dmac_channel_disable_irq(irq - IRQ_DMA_0);
}