Beispiel #1
0
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;
}
Beispiel #2
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;
	}
}
Beispiel #3
0
static void __init soc_dmac_setup(void)
{
	__dmac_enable_module(0);
	__dmac_enable_module(1);
}