[PATCH 2/3] staging: comedi_pci: set dev->iobase in comedi_pci_enable()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The variable dev->iobase holds the primary iobase address used
by the comedi drivers. For PCI drivers, this value is found in
one of the PCI bars of the device.

Currently all comedi PCI drivers set dev->iobase after calling
comedi_pci_enable(). For PCI devices that use memory mapped i/o
the PCI bar is ioremap'ed and the void __iomem * is stored in
the drivers private data. For these drivers the dev->iobase is
set to a non-zero value so that comedi_pci_disable() knows to
release the resources and disable the PCI device during the
(*detach).

Move the setting of dev->iobase to comedi_pci_enable() to remove
the need for the drivers to handle it and to ensure that dev->iobase
is always a non-zero value.

Remove any kernel noise about the iobase addresses in the drivers.

Signed-off-by: H Hartley Sweeten <hsweeten@xxxxxxxxxxxxxxxxxxx>
Cc: Ian Abbott <abbotti@xxxxxxxxx>
Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
---
 drivers/staging/comedi/comedi_pci.c                    | 14 +++++++++++---
 drivers/staging/comedi/comedidev.h                     |  4 ++--
 drivers/staging/comedi/drivers/8255_pci.c              |  7 +++----
 drivers/staging/comedi/drivers/addi-data/addi_common.c |  2 +-
 drivers/staging/comedi/drivers/addi_apci_1032.c        |  6 +++---
 drivers/staging/comedi/drivers/addi_apci_1516.c        |  4 +---
 drivers/staging/comedi/drivers/addi_apci_16xx.c        |  5 +----
 drivers/staging/comedi/drivers/addi_apci_1710.c        |  2 +-
 drivers/staging/comedi/drivers/addi_apci_2032.c        |  4 ++--
 drivers/staging/comedi/drivers/addi_apci_2200.c        |  5 +----
 drivers/staging/comedi/drivers/addi_apci_3120.c        |  4 +---
 drivers/staging/comedi/drivers/addi_apci_3501.c        |  4 +---
 drivers/staging/comedi/drivers/adl_pci6208.c           |  4 +---
 drivers/staging/comedi/drivers/adl_pci7x3x.c           |  4 +---
 drivers/staging/comedi/drivers/adl_pci8164.c           |  4 +---
 drivers/staging/comedi/drivers/adl_pci9111.c           |  3 +--
 drivers/staging/comedi/drivers/adl_pci9118.c           |  5 ++---
 drivers/staging/comedi/drivers/adv_pci1710.c           |  3 +--
 drivers/staging/comedi/drivers/adv_pci1723.c           |  4 +---
 drivers/staging/comedi/drivers/adv_pci1724.c           |  3 +--
 drivers/staging/comedi/drivers/adv_pci_dio.c           |  4 +---
 drivers/staging/comedi/drivers/amplc_dio200.c          |  2 +-
 drivers/staging/comedi/drivers/amplc_pc236.c           |  8 +++-----
 drivers/staging/comedi/drivers/amplc_pc263.c           |  6 ++----
 drivers/staging/comedi/drivers/amplc_pci224.c          |  8 +++-----
 drivers/staging/comedi/drivers/amplc_pci230.c          | 14 ++------------
 drivers/staging/comedi/drivers/cb_pcidas.c             |  4 +---
 drivers/staging/comedi/drivers/cb_pcidas64.c           |  9 +++------
 drivers/staging/comedi/drivers/cb_pcidda.c             |  3 +--
 drivers/staging/comedi/drivers/cb_pcimdas.c            |  4 +---
 drivers/staging/comedi/drivers/cb_pcimdda.c            |  4 +---
 drivers/staging/comedi/drivers/contec_pci_dio.c        |  4 +---
 drivers/staging/comedi/drivers/daqboard2000.c          |  3 +--
 drivers/staging/comedi/drivers/das08_pci.c             |  4 +---
 drivers/staging/comedi/drivers/dt3000.c                |  3 +--
 drivers/staging/comedi/drivers/dyna_pci10xx.c          |  3 +--
 drivers/staging/comedi/drivers/gsc_hpdi.c              |  3 +--
 drivers/staging/comedi/drivers/icp_multi.c             |  5 ++---
 drivers/staging/comedi/drivers/jr3_pci.c               |  3 +--
 drivers/staging/comedi/drivers/ke_counter.c            |  4 +---
 drivers/staging/comedi/drivers/me4000.c                |  4 +---
 drivers/staging/comedi/drivers/me_daq.c                |  3 +--
 drivers/staging/comedi/drivers/ni_6527.c               |  3 +--
 drivers/staging/comedi/drivers/ni_65xx.c               |  3 +--
 drivers/staging/comedi/drivers/ni_660x.c               |  3 +--
 drivers/staging/comedi/drivers/ni_670x.c               |  3 +--
 drivers/staging/comedi/drivers/ni_labpc.c              |  3 +--
 drivers/staging/comedi/drivers/ni_pcidio.c             |  3 +--
 drivers/staging/comedi/drivers/ni_pcimio.c             |  3 +--
 drivers/staging/comedi/drivers/rtd520.c                |  3 +--
 drivers/staging/comedi/drivers/s626.c                  |  3 +--
 drivers/staging/comedi/drivers/skel.c                  | 18 +++++++-----------
 52 files changed, 84 insertions(+), 157 deletions(-)

diff --git a/drivers/staging/comedi/comedi_pci.c b/drivers/staging/comedi/comedi_pci.c
index b164b03..8169487 100644
--- a/drivers/staging/comedi/comedi_pci.c
+++ b/drivers/staging/comedi/comedi_pci.c
@@ -37,8 +37,9 @@ EXPORT_SYMBOL_GPL(comedi_to_pci_dev);
 /**
  * comedi_pci_enable() - Enable the PCI device and request the regions.
  * @dev: comedi_device struct
+ * @main_pcibar: the pci bar with the main iobase used by the driver
  */
-int comedi_pci_enable(struct comedi_device *dev)
+int comedi_pci_enable(struct comedi_device *dev, int main_pcibar)
 {
 	struct pci_dev *pcidev = comedi_to_pci_dev(dev);
 	int rc;
@@ -53,10 +54,17 @@ int comedi_pci_enable(struct comedi_device *dev)
 	rc = pci_request_regions(pcidev, dev->board_name
 						? dev->board_name
 						: dev->driver->driver_name);
-	if (rc < 0)
+	if (rc < 0) {
 		pci_disable_device(pcidev);
+		return rc;
+	}
 
-	return rc;
+	if (main_pcibar >= 0)
+		dev->iobase = pci_resource_start(pcidev, main_pcibar);
+	else
+		dev->iobase = 1;	/* for comedi_pci_disable() */
+
+	return 0;
 }
 EXPORT_SYMBOL_GPL(comedi_pci_enable);
 
diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h
index f638381..f8e6711 100644
--- a/drivers/staging/comedi/comedidev.h
+++ b/drivers/staging/comedi/comedidev.h
@@ -384,7 +384,7 @@ struct pci_driver;
 
 struct pci_dev *comedi_to_pci_dev(struct comedi_device *);
 
-int comedi_pci_enable(struct comedi_device *);
+int comedi_pci_enable(struct comedi_device *, int main_pcibar);
 void comedi_pci_disable(struct comedi_device *);
 
 int comedi_pci_auto_config(struct pci_dev *, struct comedi_driver *,
@@ -421,7 +421,7 @@ static inline struct pci_dev *comedi_to_pci_dev(struct comedi_device *dev)
 	return NULL;
 }
 
-static inline int comedi_pci_enable(struct comedi_device *dev)
+static inline int comedi_pci_enable(struct comedi_device *dev, int main_pcibar)
 {
 	return -ENOSYS;
 }
diff --git a/drivers/staging/comedi/drivers/8255_pci.c b/drivers/staging/comedi/drivers/8255_pci.c
index 808460b..464d067 100644
--- a/drivers/staging/comedi/drivers/8255_pci.c
+++ b/drivers/staging/comedi/drivers/8255_pci.c
@@ -204,18 +204,17 @@ static int pci_8255_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, board->dio_badr);
 	if (ret)
 		return ret;
-	iobase = pci_resource_start(pcidev, board->dio_badr);
-	len = pci_resource_len(pcidev, board->dio_badr);
 
 	if (board->is_mmio) {
+		iobase = pci_resource_start(pcidev, board->dio_badr);
+		len = pci_resource_len(pcidev, board->dio_badr);
 		devpriv->mmio_base = ioremap(iobase, len);
 		if (!devpriv->mmio_base)
 			return -ENOMEM;
 	}
-	dev->iobase = iobase;
 
 	/*
 	 * One, two, or four subdevices are setup by this driver depending
diff --git a/drivers/staging/comedi/drivers/addi-data/addi_common.c b/drivers/staging/comedi/drivers/addi-data/addi_common.c
index cb9b590..827617c 100644
--- a/drivers/staging/comedi/drivers/addi-data/addi_common.c
+++ b/drivers/staging/comedi/drivers/addi-data/addi_common.c
@@ -101,7 +101,7 @@ static int addi_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, -1);	/* dev->iobase is set below */
 	if (ret)
 		return ret;
 
diff --git a/drivers/staging/comedi/drivers/addi_apci_1032.c b/drivers/staging/comedi/drivers/addi_apci_1032.c
index 3d32448..c1d8b59 100644
--- a/drivers/staging/comedi/drivers/addi_apci_1032.c
+++ b/drivers/staging/comedi/drivers/addi_apci_1032.c
@@ -303,13 +303,13 @@ static int apci1032_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 1);
 	if (ret)
 		return ret;
-
 	devpriv->amcc_iobase = pci_resource_start(pcidev, 0);
-	dev->iobase = pci_resource_start(pcidev, 1);
+
 	apci1032_reset(dev);
+
 	if (pcidev->irq > 0) {
 		ret = request_irq(pcidev->irq, apci1032_interrupt, IRQF_SHARED,
 				  dev->board_name, dev);
diff --git a/drivers/staging/comedi/drivers/addi_apci_1516.c b/drivers/staging/comedi/drivers/addi_apci_1516.c
index e66ff4e..887ef82 100644
--- a/drivers/staging/comedi/drivers/addi_apci_1516.c
+++ b/drivers/staging/comedi/drivers/addi_apci_1516.c
@@ -148,11 +148,9 @@ static int apci1516_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 1);
 	if (ret)
 		return ret;
-
-	dev->iobase = pci_resource_start(pcidev, 1);
 	devpriv->wdog_iobase = pci_resource_start(pcidev, 2);
 
 	ret = comedi_alloc_subdevices(dev, 3);
diff --git a/drivers/staging/comedi/drivers/addi_apci_16xx.c b/drivers/staging/comedi/drivers/addi_apci_16xx.c
index 4c6a9b5..63593d7 100644
--- a/drivers/staging/comedi/drivers/addi_apci_16xx.c
+++ b/drivers/staging/comedi/drivers/addi_apci_16xx.c
@@ -127,7 +127,6 @@ static int apci16xx_dio_insn_bits(struct comedi_device *dev,
 static int apci16xx_auto_attach(struct comedi_device *dev,
 				unsigned long context)
 {
-	struct pci_dev *pcidev = comedi_to_pci_dev(dev);
 	const struct apci16xx_boardinfo *board = NULL;
 	struct comedi_subdevice *s;
 	unsigned int n_subdevs;
@@ -142,12 +141,10 @@ static int apci16xx_auto_attach(struct comedi_device *dev,
 	dev->board_ptr = board;
 	dev->board_name = board->name;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 0);
 	if (ret)
 		return ret;
 
-	dev->iobase = pci_resource_start(pcidev, 0);
-
 	/*
 	 * Work out the nubmer of subdevices needed to support all the
 	 * digital i/o channels on the board. Each subdevice supports
diff --git a/drivers/staging/comedi/drivers/addi_apci_1710.c b/drivers/staging/comedi/drivers/addi_apci_1710.c
index 3640c50..0526ec4 100644
--- a/drivers/staging/comedi/drivers/addi_apci_1710.c
+++ b/drivers/staging/comedi/drivers/addi_apci_1710.c
@@ -42,7 +42,7 @@ static int apci1710_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 2);
 	if (ret)
 		return ret;
 	devpriv->s_BoardInfos.ui_Address = pci_resource_start(pcidev, 2);
diff --git a/drivers/staging/comedi/drivers/addi_apci_2032.c b/drivers/staging/comedi/drivers/addi_apci_2032.c
index 59e092e..1a6e85f 100644
--- a/drivers/staging/comedi/drivers/addi_apci_2032.c
+++ b/drivers/staging/comedi/drivers/addi_apci_2032.c
@@ -289,10 +289,10 @@ static int apci2032_auto_attach(struct comedi_device *dev,
 
 	dev->board_name = dev->driver->driver_name;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 1);
 	if (ret)
 		return ret;
-	dev->iobase = pci_resource_start(pcidev, 1);
+
 	apci2032_reset(dev);
 
 	if (pcidev->irq > 0) {
diff --git a/drivers/staging/comedi/drivers/addi_apci_2200.c b/drivers/staging/comedi/drivers/addi_apci_2200.c
index 0953f65a..f817b49 100644
--- a/drivers/staging/comedi/drivers/addi_apci_2200.c
+++ b/drivers/staging/comedi/drivers/addi_apci_2200.c
@@ -84,18 +84,15 @@ static int apci2200_reset(struct comedi_device *dev)
 static int apci2200_auto_attach(struct comedi_device *dev,
 				unsigned long context_unused)
 {
-	struct pci_dev *pcidev = comedi_to_pci_dev(dev);
 	struct comedi_subdevice *s;
 	int ret;
 
 	dev->board_name = dev->driver->driver_name;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 1);
 	if (ret)
 		return ret;
 
-	dev->iobase = pci_resource_start(pcidev, 1);
-
 	ret = comedi_alloc_subdevices(dev, 3);
 	if (ret)
 		return ret;
diff --git a/drivers/staging/comedi/drivers/addi_apci_3120.c b/drivers/staging/comedi/drivers/addi_apci_3120.c
index 1c5ac16..f839d28 100644
--- a/drivers/staging/comedi/drivers/addi_apci_3120.c
+++ b/drivers/staging/comedi/drivers/addi_apci_3120.c
@@ -70,12 +70,10 @@ static int apci3120_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 1);
 	if (ret)
 		return ret;
 	pci_set_master(pcidev);
-
-	dev->iobase = pci_resource_start(pcidev, 1);
 	devpriv->iobase = dev->iobase;
 	devpriv->i_IobaseAmcc = pci_resource_start(pcidev, 0);
 	devpriv->i_IobaseAddon = pci_resource_start(pcidev, 2);
diff --git a/drivers/staging/comedi/drivers/addi_apci_3501.c b/drivers/staging/comedi/drivers/addi_apci_3501.c
index 75a36e36..352d862 100644
--- a/drivers/staging/comedi/drivers/addi_apci_3501.c
+++ b/drivers/staging/comedi/drivers/addi_apci_3501.c
@@ -346,11 +346,9 @@ static int apci3501_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 1);
 	if (ret)
 		return ret;
-
-	dev->iobase = pci_resource_start(pcidev, 1);
 	devpriv->i_IobaseAmcc = pci_resource_start(pcidev, 0);
 
 	ao_n_chan = apci3501_eeprom_get_ao_n_chan(dev);
diff --git a/drivers/staging/comedi/drivers/adl_pci6208.c b/drivers/staging/comedi/drivers/adl_pci6208.c
index 8a438ff..467e773 100644
--- a/drivers/staging/comedi/drivers/adl_pci6208.c
+++ b/drivers/staging/comedi/drivers/adl_pci6208.c
@@ -162,7 +162,6 @@ static int pci6208_do_insn_bits(struct comedi_device *dev,
 static int pci6208_auto_attach(struct comedi_device *dev,
 			       unsigned long context)
 {
-	struct pci_dev *pcidev = comedi_to_pci_dev(dev);
 	const struct pci6208_board *boardinfo = NULL;
 	struct pci6208_private *devpriv;
 	struct comedi_subdevice *s;
@@ -181,10 +180,9 @@ static int pci6208_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 2);
 	if (ret)
 		return ret;
-	dev->iobase = pci_resource_start(pcidev, 2);
 
 	ret = comedi_alloc_subdevices(dev, 3);
 	if (ret)
diff --git a/drivers/staging/comedi/drivers/adl_pci7x3x.c b/drivers/staging/comedi/drivers/adl_pci7x3x.c
index e396074..d2def66 100644
--- a/drivers/staging/comedi/drivers/adl_pci7x3x.c
+++ b/drivers/staging/comedi/drivers/adl_pci7x3x.c
@@ -150,7 +150,6 @@ static int adl_pci7x3x_di_insn_bits(struct comedi_device *dev,
 static int adl_pci7x3x_auto_attach(struct comedi_device *dev,
 				   unsigned long context)
 {
-	struct pci_dev *pcidev = comedi_to_pci_dev(dev);
 	const struct adl_pci7x3x_boardinfo *board = NULL;
 	struct comedi_subdevice *s;
 	int subdev;
@@ -164,10 +163,9 @@ static int adl_pci7x3x_auto_attach(struct comedi_device *dev,
 	dev->board_ptr = board;
 	dev->board_name = board->name;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 2);
 	if (ret)
 		return ret;
-	dev->iobase = pci_resource_start(pcidev, 2);
 
 	/*
 	 * One or two subdevices are setup by this driver depending on
diff --git a/drivers/staging/comedi/drivers/adl_pci8164.c b/drivers/staging/comedi/drivers/adl_pci8164.c
index 469a51d..41b3181 100644
--- a/drivers/staging/comedi/drivers/adl_pci8164.c
+++ b/drivers/staging/comedi/drivers/adl_pci8164.c
@@ -74,16 +74,14 @@ static int adl_pci8164_insn_write(struct comedi_device *dev,
 static int adl_pci8164_auto_attach(struct comedi_device *dev,
 					     unsigned long context_unused)
 {
-	struct pci_dev *pcidev = comedi_to_pci_dev(dev);
 	struct comedi_subdevice *s;
 	int ret;
 
 	dev->board_name = dev->driver->driver_name;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 2);
 	if (ret)
 		return ret;
-	dev->iobase = pci_resource_start(pcidev, 2);
 
 	ret = comedi_alloc_subdevices(dev, 4);
 	if (ret)
diff --git a/drivers/staging/comedi/drivers/adl_pci9111.c b/drivers/staging/comedi/drivers/adl_pci9111.c
index 9c27e98..88af984 100644
--- a/drivers/staging/comedi/drivers/adl_pci9111.c
+++ b/drivers/staging/comedi/drivers/adl_pci9111.c
@@ -872,11 +872,10 @@ static int pci9111_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = dev_private;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 2);
 	if (ret)
 		return ret;
 	dev_private->lcr_io_base = pci_resource_start(pcidev, 1);
-	dev->iobase = pci_resource_start(pcidev, 2);
 
 	pci9111_reset(dev);
 
diff --git a/drivers/staging/comedi/drivers/adl_pci9118.c b/drivers/staging/comedi/drivers/adl_pci9118.c
index cb4ef2d..3169dae 100644
--- a/drivers/staging/comedi/drivers/adl_pci9118.c
+++ b/drivers/staging/comedi/drivers/adl_pci9118.c
@@ -1970,14 +1970,13 @@ static int pci9118_common_attach(struct comedi_device *dev, int disable_irq,
 	u16 u16w;
 
 	dev->board_name = this_board->name;
-	ret = comedi_pci_enable(dev);
+
+	ret = comedi_pci_enable(dev, 2);
 	if (ret)
 		return ret;
 	if (master)
 		pci_set_master(pcidev);
-
 	devpriv->iobase_a = pci_resource_start(pcidev, 0);
-	dev->iobase = pci_resource_start(pcidev, 2);
 
 	pci9118_reset(dev);
 
diff --git a/drivers/staging/comedi/drivers/adv_pci1710.c b/drivers/staging/comedi/drivers/adv_pci1710.c
index 52672c5..4cfe10b 100644
--- a/drivers/staging/comedi/drivers/adv_pci1710.c
+++ b/drivers/staging/comedi/drivers/adv_pci1710.c
@@ -1248,10 +1248,9 @@ static int pci1710_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 2);
 	if (ret)
 		return ret;
-	dev->iobase = pci_resource_start(pcidev, 2);
 
 	n_subdevices = 0;
 	if (this_board->n_aichan)
diff --git a/drivers/staging/comedi/drivers/adv_pci1723.c b/drivers/staging/comedi/drivers/adv_pci1723.c
index 9e81e58..af61fe2 100644
--- a/drivers/staging/comedi/drivers/adv_pci1723.c
+++ b/drivers/staging/comedi/drivers/adv_pci1723.c
@@ -237,7 +237,6 @@ static int pci1723_dio_insn_bits(struct comedi_device *dev,
 static int pci1723_auto_attach(struct comedi_device *dev,
 					 unsigned long context_unused)
 {
-	struct pci_dev *pcidev = comedi_to_pci_dev(dev);
 	struct pci1723_private *devpriv;
 	struct comedi_subdevice *s;
 	int ret;
@@ -249,10 +248,9 @@ static int pci1723_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 2);
 	if (ret)
 		return ret;
-	dev->iobase = pci_resource_start(pcidev, 2);
 
 	ret = comedi_alloc_subdevices(dev, 2);
 	if (ret)
diff --git a/drivers/staging/comedi/drivers/adv_pci1724.c b/drivers/staging/comedi/drivers/adv_pci1724.c
index a33929e..d3f8b4e 100644
--- a/drivers/staging/comedi/drivers/adv_pci1724.c
+++ b/drivers/staging/comedi/drivers/adv_pci1724.c
@@ -360,11 +360,10 @@ static int adv_pci1724_auto_attach(struct comedi_device *dev,
 
 	dev->board_name = dev->driver->driver_name;
 
-	retval = comedi_pci_enable(dev);
+	retval = comedi_pci_enable(dev, 2);
 	if (retval)
 		return retval;
 
-	dev->iobase = pci_resource_start(pcidev, 2);
 	board_id = inl(dev->iobase + BOARD_ID_REG) & BOARD_ID_MASK;
 	dev_info(dev->class_dev, "board id: %d\n", board_id);
 
diff --git a/drivers/staging/comedi/drivers/adv_pci_dio.c b/drivers/staging/comedi/drivers/adv_pci_dio.c
index 3a05fbc..79b803c 100644
--- a/drivers/staging/comedi/drivers/adv_pci_dio.c
+++ b/drivers/staging/comedi/drivers/adv_pci_dio.c
@@ -1086,7 +1086,6 @@ static int pci_dio_add_8254(struct comedi_device *dev,
 static int pci_dio_auto_attach(struct comedi_device *dev,
 			       unsigned long context)
 {
-	struct pci_dev *pcidev = comedi_to_pci_dev(dev);
 	const struct dio_boardtype *this_board = NULL;
 	struct pci_dio_private *devpriv;
 	struct comedi_subdevice *s;
@@ -1104,10 +1103,9 @@ static int pci_dio_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, this_board->main_pci_region);
 	if (ret)
 		return ret;
-	dev->iobase = pci_resource_start(pcidev, this_board->main_pci_region);
 
 	ret = comedi_alloc_subdevices(dev, this_board->nsubdevs);
 	if (ret)
diff --git a/drivers/staging/comedi/drivers/amplc_dio200.c b/drivers/staging/comedi/drivers/amplc_dio200.c
index 6524942..a115521 100644
--- a/drivers/staging/comedi/drivers/amplc_dio200.c
+++ b/drivers/staging/comedi/drivers/amplc_dio200.c
@@ -1951,7 +1951,7 @@ static int dio200_auto_attach(struct comedi_device *dev,
 	}
 	thisboard = comedi_board(dev);
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, thisboard->mainbar);
 	if (ret)
 		return ret;
 
diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c
index 4507f92..58934b4 100644
--- a/drivers/staging/comedi/drivers/amplc_pc236.c
+++ b/drivers/staging/comedi/drivers/amplc_pc236.c
@@ -465,18 +465,16 @@ static int pc236_pci_common_attach(struct comedi_device *dev,
 				   struct pci_dev *pci_dev)
 {
 	struct pc236_private *devpriv = dev->private;
-	unsigned long iobase;
 	int ret;
 
 	comedi_set_hw_dev(dev, &pci_dev->dev);
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 2);
 	if (ret)
 		return ret;
-
 	devpriv->lcr_iobase = pci_resource_start(pci_dev, 1);
-	iobase = pci_resource_start(pci_dev, 2);
-	return pc236_common_attach(dev, iobase, pci_dev->irq, IRQF_SHARED);
+
+	return pc236_common_attach(dev, dev->iobase, pci_dev->irq, IRQF_SHARED);
 }
 
 /*
diff --git a/drivers/staging/comedi/drivers/amplc_pc263.c b/drivers/staging/comedi/drivers/amplc_pc263.c
index b844943..5005844 100644
--- a/drivers/staging/comedi/drivers/amplc_pc263.c
+++ b/drivers/staging/comedi/drivers/amplc_pc263.c
@@ -244,17 +244,15 @@ static int pc263_common_attach(struct comedi_device *dev, unsigned long iobase)
 static int pc263_pci_common_attach(struct comedi_device *dev,
 				   struct pci_dev *pci_dev)
 {
-	unsigned long iobase;
 	int ret;
 
 	comedi_set_hw_dev(dev, &pci_dev->dev);
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 2);
 	if (ret)
 		return ret;
-	iobase = pci_resource_start(pci_dev, 2);
 
-	return pc263_common_attach(dev, iobase);
+	return pc263_common_attach(dev, dev->iobase);
 }
 
 /*
diff --git a/drivers/staging/comedi/drivers/amplc_pci224.c b/drivers/staging/comedi/drivers/amplc_pci224.c
index 4d7eab9..7980f64 100644
--- a/drivers/staging/comedi/drivers/amplc_pci224.c
+++ b/drivers/staging/comedi/drivers/amplc_pci224.c
@@ -1280,16 +1280,14 @@ static int pci224_attach_common(struct comedi_device *dev,
 
 	comedi_set_hw_dev(dev, &pci_dev->dev);
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 3);
 	if (ret)
 		return ret;
-
-	spin_lock_init(&devpriv->ao_spinlock);
-
 	devpriv->iobase1 = pci_resource_start(pci_dev, 2);
-	dev->iobase = pci_resource_start(pci_dev, 3);
 	irq = pci_dev->irq;
 
+	spin_lock_init(&devpriv->ao_spinlock);
+
 	/* Allocate readback buffer for AO channels. */
 	devpriv->ao_readback = kmalloc(sizeof(devpriv->ao_readback[0]) *
 				       thisboard->ao_chans, GFP_KERNEL);
diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c
index b6e4af4..e7f8a55 100644
--- a/drivers/staging/comedi/drivers/amplc_pci230.c
+++ b/drivers/staging/comedi/drivers/amplc_pci230.c
@@ -2638,27 +2638,17 @@ static int pci230_attach_common(struct comedi_device *dev,
 	const struct pci230_board *thisboard = comedi_board(dev);
 	struct pci230_private *devpriv = dev->private;
 	struct comedi_subdevice *s;
-	unsigned long iobase1, iobase2;
-	/* PCI230's I/O spaces 1 and 2 respectively. */
 	int irq_hdl, rc;
 
 	comedi_set_hw_dev(dev, &pci_dev->dev);
 
 	dev->board_name = thisboard->name;
 
-	rc = comedi_pci_enable(dev);
+	rc = comedi_pci_enable(dev, 3);
 	if (rc)
 		return rc;
+	devpriv->iobase1 = pci_resource_start(pci_dev, 2);
 
-	/* Read base addresses of the PCI230's two I/O regions from PCI
-	 * configuration register. */
-	iobase1 = pci_resource_start(pci_dev, 2);
-	iobase2 = pci_resource_start(pci_dev, 3);
-	dev_dbg(dev->class_dev,
-		"%s I/O region 1 0x%04lx I/O region 2 0x%04lx\n",
-		dev->board_name, iobase1, iobase2);
-	devpriv->iobase1 = iobase1;
-	dev->iobase = iobase2;
 	/* Read bits of DACCON register - only the output range. */
 	devpriv->daccon = inw(dev->iobase + PCI230_DACCON) & PCI230_DAC_OR_MASK;
 	/* Read hardware version register and set extended function register
diff --git a/drivers/staging/comedi/drivers/cb_pcidas.c b/drivers/staging/comedi/drivers/cb_pcidas.c
index 7a23d56..5281609 100644
--- a/drivers/staging/comedi/drivers/cb_pcidas.c
+++ b/drivers/staging/comedi/drivers/cb_pcidas.c
@@ -1455,11 +1455,9 @@ static int cb_pcidas_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, -1);
 	if (ret)
 		return ret;
-	dev->iobase = 1;
-
 	devpriv->s5933_config = pci_resource_start(pcidev, 0);
 	devpriv->control_status = pci_resource_start(pcidev, 1);
 	devpriv->adc_fifo = pci_resource_start(pcidev, 2);
diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c
index 46b6af4..aa85aca 100644
--- a/drivers/staging/comedi/drivers/cb_pcidas64.c
+++ b/drivers/staging/comedi/drivers/cb_pcidas64.c
@@ -4059,16 +4059,13 @@ static int auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	retval = comedi_pci_enable(dev);
+	dev->board_name = thisboard->name;
+
+	retval = comedi_pci_enable(dev, MAIN_BADDRINDEX);
 	if (retval)
 		return retval;
 	pci_set_master(pcidev);
 
-	/* Initialize dev->board_name */
-	dev->board_name = thisboard->name;
-
-	dev->iobase = pci_resource_start(pcidev, MAIN_BADDRINDEX);
-
 	devpriv->plx9080_phys_iobase =
 		pci_resource_start(pcidev, PLX9080_BADDRINDEX);
 	devpriv->main_phys_iobase = dev->iobase;
diff --git a/drivers/staging/comedi/drivers/cb_pcidda.c b/drivers/staging/comedi/drivers/cb_pcidda.c
index 2da6bd6..5cccff2 100644
--- a/drivers/staging/comedi/drivers/cb_pcidda.c
+++ b/drivers/staging/comedi/drivers/cb_pcidda.c
@@ -357,10 +357,9 @@ static int cb_pcidda_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 3);
 	if (ret)
 		return ret;
-	dev->iobase = pci_resource_start(pcidev, 3);
 	iobase_8255 = pci_resource_start(pcidev, 2);
 
 	ret = comedi_alloc_subdevices(dev, 3);
diff --git a/drivers/staging/comedi/drivers/cb_pcimdas.c b/drivers/staging/comedi/drivers/cb_pcimdas.c
index f6d99a3..348c17e 100644
--- a/drivers/staging/comedi/drivers/cb_pcimdas.c
+++ b/drivers/staging/comedi/drivers/cb_pcimdas.c
@@ -222,11 +222,9 @@ static int cb_pcimdas_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 2);
 	if (ret)
 		return ret;
-
-	dev->iobase = pci_resource_start(pcidev, 2);
 	devpriv->BADR3 = pci_resource_start(pcidev, 3);
 	iobase_8255 = pci_resource_start(pcidev, 4);
 
diff --git a/drivers/staging/comedi/drivers/cb_pcimdda.c b/drivers/staging/comedi/drivers/cb_pcimdda.c
index d00f7f6..4ab2903 100644
--- a/drivers/staging/comedi/drivers/cb_pcimdda.c
+++ b/drivers/staging/comedi/drivers/cb_pcimdda.c
@@ -156,7 +156,6 @@ static int cb_pcimdda_ao_rinsn(struct comedi_device *dev,
 static int cb_pcimdda_auto_attach(struct comedi_device *dev,
 					    unsigned long context_unused)
 {
-	struct pci_dev *pcidev = comedi_to_pci_dev(dev);
 	struct cb_pcimdda_private *devpriv;
 	struct comedi_subdevice *s;
 	int ret;
@@ -168,10 +167,9 @@ static int cb_pcimdda_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 3);
 	if (ret)
 		return ret;
-	dev->iobase = pci_resource_start(pcidev, 3);
 
 	ret = comedi_alloc_subdevices(dev, 2);
 	if (ret)
diff --git a/drivers/staging/comedi/drivers/contec_pci_dio.c b/drivers/staging/comedi/drivers/contec_pci_dio.c
index da0be62..f79c46c 100644
--- a/drivers/staging/comedi/drivers/contec_pci_dio.c
+++ b/drivers/staging/comedi/drivers/contec_pci_dio.c
@@ -73,16 +73,14 @@ static int contec_di_insn_bits(struct comedi_device *dev,
 static int contec_auto_attach(struct comedi_device *dev,
 					unsigned long context_unused)
 {
-	struct pci_dev *pcidev = comedi_to_pci_dev(dev);
 	struct comedi_subdevice *s;
 	int ret;
 
 	dev->board_name = dev->driver->driver_name;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 0);
 	if (ret)
 		return ret;
-	dev->iobase = pci_resource_start(pcidev, 0);
 
 	ret = comedi_alloc_subdevices(dev, 2);
 	if (ret)
diff --git a/drivers/staging/comedi/drivers/daqboard2000.c b/drivers/staging/comedi/drivers/daqboard2000.c
index 7c549eb..868fec4 100644
--- a/drivers/staging/comedi/drivers/daqboard2000.c
+++ b/drivers/staging/comedi/drivers/daqboard2000.c
@@ -709,10 +709,9 @@ static int daqboard2000_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	result = comedi_pci_enable(dev);
+	result = comedi_pci_enable(dev, -1);
 	if (result)
 		return result;
-	dev->iobase = 1;	/* the "detach" needs this */
 
 	devpriv->plx = ioremap(pci_resource_start(pcidev, 0),
 			       pci_resource_len(pcidev, 0));
diff --git a/drivers/staging/comedi/drivers/das08_pci.c b/drivers/staging/comedi/drivers/das08_pci.c
index 53fa943..427169f 100644
--- a/drivers/staging/comedi/drivers/das08_pci.c
+++ b/drivers/staging/comedi/drivers/das08_pci.c
@@ -59,7 +59,6 @@ static const struct das08_board_struct das08_pci_boards[] = {
 static int das08_pci_auto_attach(struct comedi_device *dev,
 				 unsigned long context_unused)
 {
-	struct pci_dev *pdev = comedi_to_pci_dev(dev);
 	struct das08_private_struct *devpriv;
 	int ret;
 
@@ -71,10 +70,9 @@ static int das08_pci_auto_attach(struct comedi_device *dev,
 	/* The das08 driver needs the board_ptr */
 	dev->board_ptr = &das08_pci_boards[0];
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 2);
 	if (ret)
 		return ret;
-	dev->iobase = pci_resource_start(pdev, 2);
 
 	return das08_common_attach(dev, dev->iobase);
 }
diff --git a/drivers/staging/comedi/drivers/dt3000.c b/drivers/staging/comedi/drivers/dt3000.c
index edbcd89..14a2f40 100644
--- a/drivers/staging/comedi/drivers/dt3000.c
+++ b/drivers/staging/comedi/drivers/dt3000.c
@@ -735,10 +735,9 @@ static int dt3000_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, -1);
 	if (ret < 0)
 		return ret;
-	dev->iobase = 1;	/* the "detach" needs this */
 
 	pci_base  = pci_resource_start(pcidev, 0);
 	devpriv->io_addr = ioremap(pci_base, DT3000_SIZE);
diff --git a/drivers/staging/comedi/drivers/dyna_pci10xx.c b/drivers/staging/comedi/drivers/dyna_pci10xx.c
index 17f9ec2a..d771a04 100644
--- a/drivers/staging/comedi/drivers/dyna_pci10xx.c
+++ b/drivers/staging/comedi/drivers/dyna_pci10xx.c
@@ -194,10 +194,9 @@ static int dyna_pci10xx_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 2);
 	if (ret)
 		return ret;
-	dev->iobase = pci_resource_start(pcidev, 2);
 	devpriv->BADR3 = pci_resource_start(pcidev, 3);
 
 	mutex_init(&devpriv->mutex);
diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c
index 16b4cc0..55efda5 100644
--- a/drivers/staging/comedi/drivers/gsc_hpdi.c
+++ b/drivers/staging/comedi/drivers/gsc_hpdi.c
@@ -499,10 +499,9 @@ static int hpdi_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	retval = comedi_pci_enable(dev);
+	retval = comedi_pci_enable(dev, -1);
 	if (retval)
 		return retval;
-	dev->iobase = 1;	/* the "detach" needs this */
 	pci_set_master(pcidev);
 
 	devpriv->plx9080_iobase =
diff --git a/drivers/staging/comedi/drivers/icp_multi.c b/drivers/staging/comedi/drivers/icp_multi.c
index f29a797..98becd3 100644
--- a/drivers/staging/comedi/drivers/icp_multi.c
+++ b/drivers/staging/comedi/drivers/icp_multi.c
@@ -510,12 +510,11 @@ static int icp_multi_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 2);
 	if (ret)
 		return ret;
-	iobase = pci_resource_start(pcidev, 2);
-	dev->iobase = iobase;
 
+	iobase = pci_resource_start(pcidev, 2);
 	devpriv->io_addr = ioremap(iobase, ICP_MULTI_SIZE);
 	if (!devpriv->io_addr)
 		return -ENOMEM;
diff --git a/drivers/staging/comedi/drivers/jr3_pci.c b/drivers/staging/comedi/drivers/jr3_pci.c
index 36659e5..98eb5b9 100644
--- a/drivers/staging/comedi/drivers/jr3_pci.c
+++ b/drivers/staging/comedi/drivers/jr3_pci.c
@@ -702,10 +702,9 @@ static int jr3_pci_auto_attach(struct comedi_device *dev,
 	}
 	dev->board_name = "jr3_pci";
 
-	result = comedi_pci_enable(dev);
+	result = comedi_pci_enable(dev, -1);
 	if (result)
 		return result;
-	dev->iobase = 1;	/* the "detach" needs this */
 
 	devpriv->iobase = ioremap(pci_resource_start(pcidev, 0),
 				  offsetof(struct jr3_t,
diff --git a/drivers/staging/comedi/drivers/ke_counter.c b/drivers/staging/comedi/drivers/ke_counter.c
index bca29e5..b634517 100644
--- a/drivers/staging/comedi/drivers/ke_counter.c
+++ b/drivers/staging/comedi/drivers/ke_counter.c
@@ -92,16 +92,14 @@ static int cnt_rinsn(struct comedi_device *dev,
 static int cnt_auto_attach(struct comedi_device *dev,
 				     unsigned long context_unused)
 {
-	struct pci_dev *pcidev = comedi_to_pci_dev(dev);
 	struct comedi_subdevice *s;
 	int ret;
 
 	dev->board_name = dev->driver->driver_name;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, 0);
 	if (ret)
 		return ret;
-	dev->iobase = pci_resource_start(pcidev, 0);
 
 	ret = comedi_alloc_subdevices(dev, 1);
 	if (ret)
diff --git a/drivers/staging/comedi/drivers/me4000.c b/drivers/staging/comedi/drivers/me4000.c
index e415db2..b8ffd04 100644
--- a/drivers/staging/comedi/drivers/me4000.c
+++ b/drivers/staging/comedi/drivers/me4000.c
@@ -1571,12 +1571,10 @@ static int me4000_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = info;
 
-	result = comedi_pci_enable(dev);
+	result = comedi_pci_enable(dev, 2);
 	if (result)
 		return result;
-
 	info->plx_regbase = pci_resource_start(pcidev, 1);
-	dev->iobase = pci_resource_start(pcidev, 2);
 	info->timer_regbase = pci_resource_start(pcidev, 3);
 	if (!info->plx_regbase || !dev->iobase || !info->timer_regbase)
 		return -ENODEV;
diff --git a/drivers/staging/comedi/drivers/me_daq.c b/drivers/staging/comedi/drivers/me_daq.c
index fbbac12..d651ead 100644
--- a/drivers/staging/comedi/drivers/me_daq.c
+++ b/drivers/staging/comedi/drivers/me_daq.c
@@ -511,10 +511,9 @@ static int me_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = dev_private;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, -1);
 	if (ret)
 		return ret;
-	dev->iobase = 1;	/* detach needs this */
 
 	dev_private->plx_regbase = ioremap(pci_resource_start(pcidev, 0),
 					   pci_resource_len(pcidev, 0));
diff --git a/drivers/staging/comedi/drivers/ni_6527.c b/drivers/staging/comedi/drivers/ni_6527.c
index 65dd1c6..cf35708 100644
--- a/drivers/staging/comedi/drivers/ni_6527.c
+++ b/drivers/staging/comedi/drivers/ni_6527.c
@@ -336,10 +336,9 @@ static int ni6527_auto_attach(struct comedi_device *dev,
 	dev->board_ptr = board;
 	dev->board_name = board->name;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, -1);
 	if (ret)
 		return ret;
-	dev->iobase = 1;
 
 	devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
 	if (!devpriv)
diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c
index eec712e..cd6c9c9 100644
--- a/drivers/staging/comedi/drivers/ni_65xx.c
+++ b/drivers/staging/comedi/drivers/ni_65xx.c
@@ -600,10 +600,9 @@ static int ni_65xx_auto_attach(struct comedi_device *dev,
 	dev->board_ptr = board;
 	dev->board_name = board->name;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, -1);
 	if (ret)
 		return ret;
-	dev->iobase = 1;
 
 	devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
 	if (!devpriv)
diff --git a/drivers/staging/comedi/drivers/ni_660x.c b/drivers/staging/comedi/drivers/ni_660x.c
index f97a668..daada24 100644
--- a/drivers/staging/comedi/drivers/ni_660x.c
+++ b/drivers/staging/comedi/drivers/ni_660x.c
@@ -1174,10 +1174,9 @@ static int ni_660x_auto_attach(struct comedi_device *dev,
 	dev->board_ptr = board;
 	dev->board_name = board->name;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, -1);
 	if (ret)
 		return ret;
-	dev->iobase = 1;
 
 	ret = ni_660x_allocate_private(dev);
 	if (ret < 0)
diff --git a/drivers/staging/comedi/drivers/ni_670x.c b/drivers/staging/comedi/drivers/ni_670x.c
index 524f6cd..00c0e89 100644
--- a/drivers/staging/comedi/drivers/ni_670x.c
+++ b/drivers/staging/comedi/drivers/ni_670x.c
@@ -208,10 +208,9 @@ static int ni_670x_auto_attach(struct comedi_device *dev,
 	dev->board_ptr = thisboard;
 	dev->board_name = thisboard->name;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, -1);
 	if (ret)
 		return ret;
-	dev->iobase = 1;
 
 	devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
 	if (!devpriv)
diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c
index 78f01709..6d3699a 100644
--- a/drivers/staging/comedi/drivers/ni_labpc.c
+++ b/drivers/staging/comedi/drivers/ni_labpc.c
@@ -708,10 +708,9 @@ static int labpc_auto_attach(struct comedi_device *dev,
 	if (!IS_ENABLED(CONFIG_COMEDI_PCI_DRIVERS))
 		return -ENODEV;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, -1);
 	if (ret)
 		return ret;
-	dev->iobase = 1;
 
 	devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
 	if (!devpriv)
diff --git a/drivers/staging/comedi/drivers/ni_pcidio.c b/drivers/staging/comedi/drivers/ni_pcidio.c
index 2298d6e..2a286fd 100644
--- a/drivers/staging/comedi/drivers/ni_pcidio.c
+++ b/drivers/staging/comedi/drivers/ni_pcidio.c
@@ -1112,10 +1112,9 @@ static int nidio_auto_attach(struct comedi_device *dev,
 	dev->board_ptr = board;
 	dev->board_name = board->name;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, -1);
 	if (ret)
 		return ret;
-	dev->iobase = 1;
 
 	devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
 	if (!devpriv)
diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c
index 098c398..d774d17 100644
--- a/drivers/staging/comedi/drivers/ni_pcimio.c
+++ b/drivers/staging/comedi/drivers/ni_pcimio.c
@@ -1488,10 +1488,9 @@ static int pcimio_auto_attach(struct comedi_device *dev,
 	dev->board_ptr = board;
 	dev->board_name = board->name;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, -1);
 	if (ret)
 		return ret;
-	dev->iobase = 1;
 
 	ret = ni_alloc_private(dev);
 	if (ret)
diff --git a/drivers/staging/comedi/drivers/rtd520.c b/drivers/staging/comedi/drivers/rtd520.c
index c0935d4..14f618e 100644
--- a/drivers/staging/comedi/drivers/rtd520.c
+++ b/drivers/staging/comedi/drivers/rtd520.c
@@ -1283,10 +1283,9 @@ static int rtd_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, -1);
 	if (ret)
 		return ret;
-	dev->iobase = 1;	/* the "detach" needs this */
 
 	devpriv->las0 = ioremap_nocache(pci_resource_start(pcidev, 2),
 					pci_resource_len(pcidev, 2));
diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c
index cd164ee..7dc28aa 100644
--- a/drivers/staging/comedi/drivers/s626.c
+++ b/drivers/staging/comedi/drivers/s626.c
@@ -2673,10 +2673,9 @@ static int s626_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	ret = comedi_pci_enable(dev);
+	ret = comedi_pci_enable(dev, -1);
 	if (ret)
 		return ret;
-	dev->iobase = 1;	/* detach needs this */
 
 	devpriv->base_addr = ioremap(pci_resource_start(pcidev, 0),
 				     pci_resource_len(pcidev, 0));
diff --git a/drivers/staging/comedi/drivers/skel.c b/drivers/staging/comedi/drivers/skel.c
index 6fb7d5d..6ab4c9c 100644
--- a/drivers/staging/comedi/drivers/skel.c
+++ b/drivers/staging/comedi/drivers/skel.c
@@ -531,7 +531,6 @@ static int skel_attach(struct comedi_device *dev, struct comedi_devconfig *it)
 static int skel_auto_attach(struct comedi_device *dev,
 			    unsigned long context)
 {
-	struct pci_dev *pcidev = comedi_to_pci_dev(dev);
 	const struct skel_board *thisboard = NULL;
 	struct skel_private *devpriv;
 	int ret;
@@ -566,14 +565,8 @@ static int skel_auto_attach(struct comedi_device *dev,
 		return -ENOMEM;
 	dev->private = devpriv;
 
-	/* Enable the PCI device. */
-	ret = comedi_pci_enable(dev);
-	if (ret)
-		return ret;
-
 	/*
-	 * Record the fact that the PCI device is enabled so that it can
-	 * be disabled during _detach().
+	 * Enable the PCI device, request the resources, and set dev->iobase.
 	 *
 	 * For this example driver, we assume PCI BAR 0 is the main I/O
 	 * region for the board registers and use dev->iobase to hold the
@@ -581,10 +574,13 @@ static int skel_auto_attach(struct comedi_device *dev,
 	 * enabled.
 	 *
 	 * (For boards with memory-mapped registers, dev->iobase is not
-	 * usually needed for register access, so can just be set to 1
-	 * to indicate that the PCI device has been enabled.)
+	 * usually needed for register access, so a main_pcibar of -1 would
+	 * be passed to comedi_pci_enable so that dev->iobase can just be
+	 * set to 1 to indicate that the PCI device has been enabled.)
 	 */
-	dev->iobase = pci_resource_start(pcidev, 0);
+	ret = comedi_pci_enable(dev, 0);
+	if (ret)
+		return ret;
 
 	/*
 	 * Call a common function to handle the remaining things to do for
-- 
1.8.1.4

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel


[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux