]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
staging: comedi: ni_labpc: move DMA init out of the common attach
authorH Hartley Sweeten <hsweeten@visionengravers.com>
Mon, 22 Apr 2013 19:33:30 +0000 (12:33 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 23 Apr 2013 17:36:28 +0000 (10:36 -0700)
Only the ISA versions of the LabPC boards support DMA. Move the DMA
initialization out of the labpc_common_attach() and put it in the
ISA specific labpc_attach() function.

Remove the 'dma_chan' parameter from labpc_common_attach().

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/ni_labpc.c
drivers/staging/comedi/drivers/ni_labpc.h
drivers/staging/comedi/drivers/ni_labpc_cs.c
drivers/staging/comedi/drivers/ni_labpc_pci.c

index e8fc6a1c629aab78588f12aa8616987f1bde40b4..56fb5b2136a473205275e9d8793e8caa731992ca 100644 (file)
@@ -1588,7 +1588,7 @@ static int labpc_eeprom_insn_read(struct comedi_device *dev,
 }
 
 int labpc_common_attach(struct comedi_device *dev,
-                       unsigned int irq, unsigned int dma_chan)
+                       unsigned int irq)
 {
        const struct labpc_boardinfo *board = comedi_board(dev);
        struct labpc_private *devpriv = dev->private;
@@ -1626,27 +1626,6 @@ int labpc_common_attach(struct comedi_device *dev,
                        dev->irq = irq;
        }
 
-#ifdef CONFIG_ISA_DMA_API
-       if (dev->irq && (dma_chan == 1 || dma_chan == 3)) {
-               devpriv->dma_buffer = kmalloc(dma_buffer_size,
-                                             GFP_KERNEL | GFP_DMA);
-               if (devpriv->dma_buffer) {
-                       ret = request_dma(dma_chan, dev->board_name);
-                       if (ret == 0) {
-                               unsigned long dma_flags;
-
-                               devpriv->dma_chan = dma_chan;
-                               dma_flags = claim_dma_lock();
-                               disable_dma(devpriv->dma_chan);
-                               set_dma_mode(devpriv->dma_chan, DMA_MODE_READ);
-                               release_dma_lock(dma_flags);
-                       } else {
-                               kfree(devpriv->dma_buffer);
-                       }
-               }
-       }
-#endif
-
        ret = comedi_alloc_subdevices(dev, 5);
        if (ret)
                return ret;
@@ -1759,7 +1738,32 @@ static int labpc_attach(struct comedi_device *dev, struct comedi_devconfig *it)
        if (ret)
                return ret;
 
-       return labpc_common_attach(dev, irq, dma_chan);
+       ret = labpc_common_attach(dev, irq);
+       if (ret)
+               return ret;
+
+#ifdef CONFIG_ISA_DMA_API
+       if (dev->irq && (dma_chan == 1 || dma_chan == 3)) {
+               devpriv->dma_buffer = kmalloc(dma_buffer_size,
+                                             GFP_KERNEL | GFP_DMA);
+               if (devpriv->dma_buffer) {
+                       ret = request_dma(dma_chan, dev->board_name);
+                       if (ret == 0) {
+                               unsigned long dma_flags;
+
+                               devpriv->dma_chan = dma_chan;
+                               dma_flags = claim_dma_lock();
+                               disable_dma(devpriv->dma_chan);
+                               set_dma_mode(devpriv->dma_chan, DMA_MODE_READ);
+                               release_dma_lock(dma_flags);
+                       } else {
+                               kfree(devpriv->dma_buffer);
+                       }
+               }
+       }
+#endif
+
+       return 0;
 }
 
 void labpc_detach(struct comedi_device *dev)
index e214bb9237b377ed4617f74b46c888f187ed236c..7f8a82851634e4666ae6180ea6d56d77035841f3 100644 (file)
@@ -101,7 +101,7 @@ struct labpc_private {
 };
 
 int labpc_common_attach(struct comedi_device *dev,
-                       unsigned int irq, unsigned int dma);
+                       unsigned int irq);
 void labpc_common_detach(struct comedi_device *dev);
 
 extern const int labpc_1200_ai_gain_bits[];
index f9cb9cf1655ac51d3cafff38d0b9b3e42a928680..4b4a72df18e72b6d1e95d18d5ab5224c02fadf8b 100644 (file)
@@ -111,7 +111,7 @@ static int labpc_auto_attach(struct comedi_device *dev,
                return -ENOMEM;
        dev->private = devpriv;
 
-       return labpc_common_attach(dev, link->irq, 0);
+       return labpc_common_attach(dev, link->irq);
 }
 
 static void labpc_detach(struct comedi_device *dev)
index 82e381fe34eee06bd1d0c4bb9e9546ab8e508433..13ae267f18243913ffe53d22d5f0532b69cdd736 100644 (file)
@@ -92,7 +92,7 @@ static int labpc_pci_auto_attach(struct comedi_device *dev,
                return ret;
        dev->iobase = (unsigned long)devpriv->mite->daq_io_addr;
 
-       return labpc_common_attach(dev, mite_irq(devpriv->mite), 0);
+       return labpc_common_attach(dev, mite_irq(devpriv->mite));
 }
 
 static void labpc_pci_detach(struct comedi_device *dev)