int au1000_dma_read_proc(char *buf, char **start, off_t fpos, int length, int *eof, void *data) { int i, len = 0; struct dma_chan *chan; for (i = 0; i < NUM_AU1000_DMA_CHANNELS; i++) { chan = get_dma_chan(i); if (chan != NULL) len += sprintf(buf + len, "%2d: %s\n", i, chan->dev_str); } if (fpos >= len) { *start = buf; *eof = 1; return 0; } *start = buf + fpos; len -= fpos; if (len > length) return length; *eof = 1; return len; }
void free_au1000_dma(unsigned int dmanr) { struct dma_chan *chan = get_dma_chan(dmanr); if (!chan) { printk("Trying to free DMA%d\n", dmanr); return; } disable_dma(dmanr); if (chan->irq) free_irq(chan->irq, chan->irq_dev); chan->irq = 0; chan->irq_dev = NULL; chan->dev_id = -1; }