int dma_request(int ch, void (*irq_handler)(unsigned int), unsigned int arg, unsigned int mode, unsigned int type) { if (!inited) { inited = 1; unsigned int i; for(i= 0; i < NUM_DMA; i++) { dma_used[i] = 0; //Initial to not used dma_irq[i] = 0; } __cpm_start_dmac(); __dmac_enable_module(); } if(dma_used[ch]) return -1; dma_used[ch] = 1; dma_unit_size[ch] = UNIT_SIZE[((mode & DMAC_DCMD_DS_MASK) >> DMAC_DCMD_DS_BIT)]; REG_DMAC_DCKE |= DMAC_DCKE_CHN_ON(ch); REG_DMAC_DCCSR(ch) = 0; REG_DMAC_DRSR(ch) = type; REG_DMAC_DCMD(ch) = mode; if (irq_handler) { request_irq(IRQ_DMA_0 + ch, irq_handler, arg); dma_irq[ch] = 1; } else dma_irq[ch] = 0; return 0; }
void dma_request(int ch, void (*irq_handler)(unsigned int), unsigned int arg, unsigned int mode, unsigned int type) { if (!inited) { inited = 1; __dmac_enable_module(); } dma_mode[ch] = mode; REG_DMAC_DRSR(ch) = type; if (irq_handler) { request_irq(IRQ_DMA_0 + ch, irq_handler, arg); dma_irq[ch] = 1; } }
static void __init soc_dmac_setup(void) { __dmac_enable_module(0); __dmac_enable_module(1); }