[PATCH 29/40] staging: comedi: me4000: cleanup me4000_probe()

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

 



Move the non pci probe related code out of the me4000_probe function
and back into the me4000_attach function in preparation of converting
this driver to the 'attach_pci' callback.

Signed-off-by: H Hartley Sweeten <hsweeten@xxxxxxxxxxxxxxxxxxx>
Cc: Ian Abbott <abbotti@xxxxxxxxx>
Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
---
 drivers/staging/comedi/drivers/me4000.c | 67 +++++++++++++++------------------
 1 file changed, 31 insertions(+), 36 deletions(-)

diff --git a/drivers/staging/comedi/drivers/me4000.c b/drivers/staging/comedi/drivers/me4000.c
index 39eb775..948f04a 100644
--- a/drivers/staging/comedi/drivers/me4000.c
+++ b/drivers/staging/comedi/drivers/me4000.c
@@ -1737,18 +1737,11 @@ static int me4000_cnt_insn_write(struct comedi_device *dev,
 	return 1;
 }
 
-static int me4000_probe(struct comedi_device *dev, struct comedi_devconfig *it)
+static struct pci_dev *me4000_probe(struct comedi_device *dev,
+				    struct comedi_devconfig *it)
 {
-	struct me4000_info *info;
 	struct pci_dev *pci_device = NULL;
-	int result, i;
-	const struct me4000_board *board;
-
-	/* Allocate private memory */
-	result = alloc_private(dev, sizeof(*info));
-	if (result)
-		return result;
-	info = dev->private;
+	int i;
 
 	/*
 	 * Probe the device to determine what device in the series it is.
@@ -1777,39 +1770,55 @@ static int me4000_probe(struct comedi_device *dev, struct comedi_devconfig *it)
 						}
 					}
 					dev->board_ptr = me4000_boards + i;
-					board = comedi_board(dev);
-					goto found;
+					return pci_device;
 				}
 			}
 		}
 	}
-	return -ENODEV;
+	return NULL;
+}
+
+static int me4000_attach(struct comedi_device *dev, struct comedi_devconfig *it)
+{
+	const struct me4000_board *thisboard;
+	struct me4000_info *info;
+	struct pci_dev *pcidev;
+	struct comedi_subdevice *s;
+	int result;
 
-found:
-	comedi_set_hw_dev(dev, &pci_device->dev);
-	dev->board_name = board->name;
+	pcidev = me4000_probe(dev, it);
+	if (!pcidev)
+		return -ENODEV;
+	comedi_set_hw_dev(dev, &pcidev->dev);
+	thisboard = comedi_board(dev);
+	dev->board_name = thisboard->name;
 
-	result = comedi_pci_enable(pci_device, dev->board_name);
+	result = alloc_private(dev, sizeof(*info));
 	if (result)
 		return result;
+	info = dev->private;
 
-	info->plx_regbase = pci_resource_start(pci_device, 1);
+	result = comedi_pci_enable(pcidev, dev->board_name);
+	if (result)
+		return result;
+
+	info->plx_regbase = pci_resource_start(pcidev, 1);
 	if (!info->plx_regbase)
 		return -ENODEV;
 
-	dev->iobase = pci_resource_start(pci_device, 2);
+	dev->iobase = pci_resource_start(pcidev, 2);
 	if (!dev->iobase)
 		return -ENODEV;
 
-	info->timer_regbase = pci_resource_start(pci_device, 3);
+	info->timer_regbase = pci_resource_start(pcidev, 3);
 	if (!info->timer_regbase)
 		return -ENODEV;
 
-	info->program_regbase = pci_resource_start(pci_device, 5);
+	info->program_regbase = pci_resource_start(pcidev, 5);
 	if (!info->program_regbase)
 		return -ENODEV;
 
-	dev->irq = pci_device->irq;
+	dev->irq = pcidev->irq;
 
 	result = xilinx_download(dev);
 	if (result)
@@ -1819,20 +1828,6 @@ found:
 	if (result)
 		return result;
 
-	return 0;
-}
-
-static int me4000_attach(struct comedi_device *dev, struct comedi_devconfig *it)
-{
-	const struct me4000_board *thisboard;
-	struct comedi_subdevice *s;
-	int result;
-
-	result = me4000_probe(dev, it);
-	if (result)
-		return result;
-	thisboard = comedi_board(dev);
-
 	result = comedi_alloc_subdevices(dev, 4);
 	if (result)
 		return result;
-- 
1.7.11

_______________________________________________
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