Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland...
[pandora-kernel.git] / arch / arm / kernel / dma.c
index 0ffea3f..7d5b9fb 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/init.h>
 #include <linux/spinlock.h>
 #include <linux/errno.h>
+#include <linux/scatterlist.h>
 
 #include <asm/dma.h>
 
 DEFINE_SPINLOCK(dma_spin_lock);
 EXPORT_SYMBOL(dma_spin_lock);
 
-static dma_t dma_chan[MAX_DMA_CHANNELS];
+static dma_t *dma_chan[MAX_DMA_CHANNELS];
 
 static inline dma_t *dma_channel(unsigned int chan)
 {
-       dma_t *dma = dma_chan + chan;
-
-       if (chan >= MAX_DMA_CHANNELS || !dma->d_ops)
+       if (chan >= MAX_DMA_CHANNELS)
                return NULL;
 
-       return dma;
+       return dma_chan[chan];
+}
+
+int __init isa_dma_add(unsigned int chan, dma_t *dma)
+{
+       if (!dma->d_ops)
+               return -EINVAL;
+
+       sg_init_table(&dma->buf, 1);
+
+       if (dma_chan[chan])
+               return -EBUSY;
+       dma_chan[chan] = dma;
+       return 0;
 }
 
 /*
@@ -159,7 +171,7 @@ EXPORT_SYMBOL(set_dma_count);
 
 /* Set DMA direction mode
  */
-void set_dma_mode (unsigned int chan, dmamode_t mode)
+void set_dma_mode (unsigned int chan, unsigned int mode)
 {
        dma_t *dma = dma_channel(chan);
 
@@ -252,10 +264,3 @@ int get_dma_residue(unsigned int chan)
        return ret;
 }
 EXPORT_SYMBOL(get_dma_residue);
-
-static int __init init_dma(void)
-{
-       arch_dma_init(dma_chan);
-       return 0;
-}
-core_initcall(init_dma);