staging: comedi: contec_pci_dio: factor out the "find pci device" code
authorH Hartley Sweeten <hartleys@visionengravers.com>
Thu, 19 Jul 2012 01:49:56 +0000 (18:49 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 19 Jul 2012 23:32:56 +0000 (16:32 -0700)
Factor the "find pci device" code out of the attach function.

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

index ee769e0..e4d37fc 100644 (file)
@@ -97,22 +97,10 @@ static int contec_di_insn_bits(struct comedi_device *dev,
        return insn->n;
 }
 
-static int contec_attach(struct comedi_device *dev, struct comedi_devconfig *it)
+static struct pci_dev *contec_find_pci_dev(struct comedi_device *dev,
+                                          struct comedi_devconfig *it)
 {
        struct pci_dev *pcidev = NULL;
-       struct comedi_subdevice *s;
-       int ret;
-
-       printk("comedi%d: contec: ", dev->minor);
-
-       dev->board_name = thisboard->name;
-
-       if (alloc_private(dev, sizeof(struct contec_private)) < 0)
-               return -ENOMEM;
-
-       ret = comedi_alloc_subdevices(dev, 2);
-       if (ret)
-               return ret;
 
        for_each_pci_dev(pcidev) {
                if (pcidev->vendor == PCI_VENDOR_ID_CONTEC &&
@@ -124,43 +112,63 @@ static int contec_attach(struct comedi_device *dev, struct comedi_devconfig *it)
                                        continue;
                                }
                        }
-                       devpriv->pci_dev = pcidev;
-                       if (comedi_pci_enable(pcidev, "contec_pci_dio")) {
-                               printk
-                                   ("error enabling PCI device and request regions!\n");
-                               return -EIO;
-                       }
-                       dev->iobase = pci_resource_start(pcidev, 0);
-                       printk(" base addr %lx ", dev->iobase);
-
                        dev->board_ptr = contec_boards + 0;
+                       return pcidev;
+               }
+       }
+       printk("card not present!\n");
+       return NULL;
+}
 
-                       s = dev->subdevices + 0;
+static int contec_attach(struct comedi_device *dev, struct comedi_devconfig *it)
+{
+       struct pci_dev *pcidev;
+       struct comedi_subdevice *s;
+       int ret;
 
-                       s->type = COMEDI_SUBD_DI;
-                       s->subdev_flags = SDF_READABLE;
-                       s->n_chan = 16;
-                       s->maxdata = 1;
-                       s->range_table = &range_digital;
-                       s->insn_bits = contec_di_insn_bits;
+       printk("comedi%d: contec: ", dev->minor);
 
-                       s = dev->subdevices + 1;
-                       s->type = COMEDI_SUBD_DO;
-                       s->subdev_flags = SDF_WRITABLE;
-                       s->n_chan = 16;
-                       s->maxdata = 1;
-                       s->range_table = &range_digital;
-                       s->insn_bits = contec_do_insn_bits;
+       dev->board_name = thisboard->name;
 
-                       printk("attached\n");
+       if (alloc_private(dev, sizeof(struct contec_private)) < 0)
+               return -ENOMEM;
 
-                       return 1;
-               }
+       ret = comedi_alloc_subdevices(dev, 2);
+       if (ret)
+               return ret;
+
+       pcidev = contec_find_pci_dev(dev, it);
+       if (!pcidev)
+               return -EIO;
+       devpriv->pci_dev = pcidev;
+
+       if (comedi_pci_enable(pcidev, "contec_pci_dio")) {
+               printk("error enabling PCI device and request regions!\n");
+               return -EIO;
        }
+       dev->iobase = pci_resource_start(pcidev, 0);
+       printk(" base addr %lx ", dev->iobase);
 
-       printk("card not present!\n");
+       s = dev->subdevices + 0;
+
+       s->type = COMEDI_SUBD_DI;
+       s->subdev_flags = SDF_READABLE;
+       s->n_chan = 16;
+       s->maxdata = 1;
+       s->range_table = &range_digital;
+       s->insn_bits = contec_di_insn_bits;
+
+       s = dev->subdevices + 1;
+       s->type = COMEDI_SUBD_DO;
+       s->subdev_flags = SDF_WRITABLE;
+       s->n_chan = 16;
+       s->maxdata = 1;
+       s->range_table = &range_digital;
+       s->insn_bits = contec_do_insn_bits;
+
+       printk("attached\n");
 
-       return -EIO;
+       return 1;
 }
 
 static void contec_detach(struct comedi_device *dev)