void free_dma(unsigned int channel) { pr_debug("freedma() : BEGIN\n"); BUG_ON(channel >= MAX_DMA_CHANNELS || !atomic_read(&dma_ch[channel].chan_status)); disable_dma(channel); clear_dma_buffer(channel); if (dma_ch[channel].irq) free_irq(dma_ch[channel].irq, dma_ch[channel].data); atomic_set(&dma_ch[channel].chan_status, 0); pr_debug("freedma() : END\n"); }
void free_dma(unsigned int channel) { pr_debug("freedma() : BEGIN \n"); BUG_ON(channel >= MAX_DMA_CHANNELS || dma_ch[channel].chan_status == DMA_CHANNEL_FREE); /* Halt the DMA */ disable_dma(channel); clear_dma_buffer(channel); if (dma_ch[channel].irq) free_irq(dma_ch[channel].irq, dma_ch[channel].data); /* Clear the DMA Variable in the Channel */ mutex_lock(&(dma_ch[channel].dmalock)); dma_ch[channel].chan_status = DMA_CHANNEL_FREE; mutex_unlock(&(dma_ch[channel].dmalock)); pr_debug("freedma() : END \n"); }
void free_dma(unsigned int channel) { int ret_irq; pr_debug("freedma() : BEGIN \n"); BUG_ON(!(dma_ch[channel].chan_status != DMA_CHANNEL_FREE && channel < MAX_BLACKFIN_DMA_CHANNEL)); /* Halt the DMA */ disable_dma(channel); clear_dma_buffer(channel); if (dma_ch[channel].irq_callback != NULL) { ret_irq = channel2irq(channel); free_irq(ret_irq, dma_ch[channel].data); } /* Clear the DMA Variable in the Channel */ mutex_lock(&(dma_ch[channel].dmalock)); dma_ch[channel].chan_status = DMA_CHANNEL_FREE; mutex_unlock(&(dma_ch[channel].dmalock)); pr_debug("freedma() : END \n"); }