From 46a4ff0dbc7a27621983ec1157824af3fdb7f08b Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 18 Jul 2012 18:46:07 -0700 Subject: [PATCH] staging: comedi: cb_pcimdas: factor out the "find pci device" code Factor the "find pci device" code out of the attach function. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/cb_pcimdas.c | 61 +++++++++++---------- 1 file changed, 32 insertions(+), 29 deletions(-) diff --git a/drivers/staging/comedi/drivers/cb_pcimdas.c b/drivers/staging/comedi/drivers/cb_pcimdas.c index 2977f2d309cb..8999a72485b9 100644 --- a/drivers/staging/comedi/drivers/cb_pcimdas.c +++ b/drivers/staging/comedi/drivers/cb_pcimdas.c @@ -175,30 +175,11 @@ static int cb_pcimdas_ao_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data); -/* - * Attach is called by the Comedi core to configure the driver - * for a particular board. If you specified a board_name array - * in the driver structure, dev->board_ptr contains that - * address. - */ -static int cb_pcimdas_attach(struct comedi_device *dev, - struct comedi_devconfig *it) +static struct pci_dev *cb_pcimdas_find_pci_dev(struct comedi_device *dev, + struct comedi_devconfig *it) { - struct comedi_subdevice *s; struct pci_dev *pcidev = NULL; int index; - int ret; - /* int i; */ - -/* - * Allocate the private structure area. - */ - if (alloc_private(dev, sizeof(struct cb_pcimdas_private)) < 0) - return -ENOMEM; - -/* - * Probe the device to determine what device in the series it is. - */ for_each_pci_dev(pcidev) { /* is it not a computer boards card? */ @@ -217,21 +198,43 @@ static int cb_pcimdas_attach(struct comedi_device *dev, continue; } } - devpriv->pci_dev = pcidev; dev->board_ptr = cb_pcimdas_boards + index; - goto found; + dev_dbg(dev->class_dev, + "Found %s on bus %i, slot %i\n", + cb_pcimdas_boards[index].name, + pcidev->bus->number, + PCI_SLOT(pcidev->devfn)); + return pcidev; } } - dev_err(dev->class_dev, "No supported ComputerBoards/MeasurementComputing card found on requested position\n"); - return -EIO; + return NULL; +} -found: +/* + * Attach is called by the Comedi core to configure the driver + * for a particular board. If you specified a board_name array + * in the driver structure, dev->board_ptr contains that + * address. + */ +static int cb_pcimdas_attach(struct comedi_device *dev, + struct comedi_devconfig *it) +{ + struct pci_dev *pcidev; + struct comedi_subdevice *s; + int ret; - dev_dbg(dev->class_dev, "Found %s on bus %i, slot %i\n", - cb_pcimdas_boards[index].name, pcidev->bus->number, - PCI_SLOT(pcidev->devfn)); +/* + * Allocate the private structure area. + */ + if (alloc_private(dev, sizeof(struct cb_pcimdas_private)) < 0) + return -ENOMEM; + + pcidev = cb_pcimdas_find_pci_dev(dev, it); + if (!pcidev) + return -EIO; + devpriv->pci_dev = pcidev; /* Warn about non-tested features */ switch (thisboard->device_id) { -- 2.39.2