staging: comedi: ni_labpc: only ISA boards need to request_region()
authorH Hartley Sweeten <hsweeten@visionengravers.com>
Tue, 9 Apr 2013 23:34:17 +0000 (16:34 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 Apr 2013 19:47:55 +0000 (12:47 -0700)
Currently this driver calls request_region() in labpc_common_attach()
which is the common attach function for the ISA, PCMCIA, and PCI
versions of the labpc board.

The PCMCIA support is handled in a separate driver, ni_labpc_cs.
That driver sets the dev->iobase after aquiring the resource and
then just passes it to labpc_common_attach() which then sets
dev->iobase again.

The PCI support, currently in this driver, calls mite_setup() to
aquire the resource and then passes it to labpc_common_attach()
to set the dev->iobase.

The ISA support, also in this driver, passes a user supplied
configuration option to labpc_common_attach() which then does
the request_region() before setting the dev->iobase.

Move the request_region() to the ISA support code in labpc_attach()
and set the dev->iobase there before calling the common attach
code.

For the PCI support, also set the dev->iobase before calling the
common code.

This allows removing the extra parameter from labpc_common_attach().

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
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

index e46854f8e932757603b1342628e6321c8ff75ee3..8083f4815693d709afc2cee9e744fae544bf3f71 100644 (file)
@@ -1606,7 +1606,7 @@ static int labpc_eeprom_insn_read(struct comedi_device *dev,
        return insn->n;
 }
 
-int labpc_common_attach(struct comedi_device *dev, unsigned long iobase,
+int labpc_common_attach(struct comedi_device *dev,
                        unsigned int irq, unsigned int dma_chan)
 {
        const struct labpc_boardinfo *board = comedi_board(dev);
@@ -1616,14 +1616,6 @@ int labpc_common_attach(struct comedi_device *dev, unsigned long iobase,
        int ret;
        int i;
 
-       if (iobase == 0)
-               return -EINVAL;
-       if (board->bustype == isa_bustype) {
-               if (!request_region(iobase, LABPC_SIZE, dev->board_name))
-                       return -EIO;
-       }
-       dev->iobase = iobase;
-
        if (board->has_mmio) {
                devpriv->read_byte = labpc_readb;
                devpriv->write_byte = labpc_writeb;
@@ -1782,6 +1774,9 @@ static int labpc_attach(struct comedi_device *dev, struct comedi_devconfig *it)
                iobase = it->options[0];
                irq = it->options[1];
                dma_chan = it->options[2];
+               if (!request_region(iobase, LABPC_SIZE, dev->board_name))
+                       return -EIO;
+               dev->iobase = iobase;
 #else
                dev_err(dev->class_dev,
                        "ni_labpc driver has not been built with ISA DMA support.\n");
@@ -1807,7 +1802,7 @@ static int labpc_attach(struct comedi_device *dev, struct comedi_devconfig *it)
                break;
        }
 
-       return labpc_common_attach(dev, iobase, irq, dma_chan);
+       return labpc_common_attach(dev, irq, dma_chan);
 }
 
 static const struct labpc_boardinfo *
@@ -1831,7 +1826,6 @@ static int labpc_auto_attach(struct comedi_device *dev,
        struct pci_dev *pcidev = comedi_to_pci_dev(dev);
        const struct labpc_boardinfo *board;
        struct labpc_private *devpriv;
-       unsigned long iobase;
        unsigned int irq;
        int ret;
 
@@ -1858,9 +1852,9 @@ static int labpc_auto_attach(struct comedi_device *dev,
        ret = mite_setup(devpriv->mite);
        if (ret < 0)
                return ret;
-       iobase = (unsigned long)devpriv->mite->daq_io_addr;
+       dev->iobase = (unsigned long)devpriv->mite->daq_io_addr;
        irq = mite_irq(devpriv->mite);
-       return labpc_common_attach(dev, iobase, irq, 0);
+       return labpc_common_attach(dev, irq, 0);
 }
 
 void labpc_common_detach(struct comedi_device *dev)
index 0bf2ca13c827a993eca792308a6aa18e37ef9123..e214bb9237b377ed4617f74b46c888f187ed236c 100644 (file)
@@ -100,7 +100,7 @@ struct labpc_private {
        void (*write_byte) (unsigned int byte, unsigned long address);
 };
 
-int labpc_common_attach(struct comedi_device *dev, unsigned long iobase,
+int labpc_common_attach(struct comedi_device *dev,
                        unsigned int irq, unsigned int dma);
 void labpc_common_detach(struct comedi_device *dev);
 
index 4e1deed99a210cd6f0ba6febb8585c0a01e1d11e..f9cb9cf1655ac51d3cafff38d0b9b3e42a928680 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, dev->iobase, link->irq, 0);
+       return labpc_common_attach(dev, link->irq, 0);
 }
 
 static void labpc_detach(struct comedi_device *dev)