staging: comedi: rtd520: factor out the "find pci device" code
PATCH 80/83 staging: comedi: rtd520: factor out the "find pci device" code
Factor the "find pci device" code out of the attach function.
Signed-off-by H Hartley Sweeten <[email protected]>
Cc Ian Abbott <[email protected]>
Cc Greg Kroah-Hartman <[email protected]>
--- drivers/staging/comedi/drivers/rtd520.c | 74 ++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 34 deletions(-)
drivers/staging/comedi/drivers/rtd520.c +40 -34
@@ -1605,12 +1605,47 @@ static int rtd_dio_insn_config(struct comedi_device *dev,return 1 ; } +static struct pci_dev *rtd_find_pci (struct comedi_device *dev, +struct comedi_devconfig *it) +{ +struct pci_dev *pcidev; + +for (pcidev =pci_get_device (PCI_VENDOR_ID_RTD ,PCI_ANY_ID ,NULL ); + pcidev !=NULL ; + pcidev =pci_get_device (PCI_VENDOR_ID_RTD ,PCI_ANY_ID , pcidev)) { +int i; + +if (it->options[0 ] || it->options[1 ]) { +if (pcidev->bus->number != it->options[0 ] + ||PCI_SLOT (pcidev->devfn) != it->options[1 ]) { +continue ; + } + } +for (i =0 ; i <ARRAY_SIZE (rtd520Boards); ++i) { +if (pcidev->device == rtd520Boards[i].device_id) { + dev->board_ptr = &rtd520Boards[i]; +break ; + } + } +if (dev->board_ptr) +return pcidev;/* found one */ + } +if (!pcidev) { +if (it->options[0 ] && it->options[1 ]) { +printk (KERN_INFO "No RTD card at bus=%d slot=%d.\n" , + it->options[0 ], it->options[1 ]); + }else { +printk (KERN_INFO "No RTD card found.\n" ); + } + } +return NULL ; +} +static int rtd_attach (struct comedi_device *dev,struct comedi_devconfig *it) {/* board name and options flags */ const struct rtdBoard *thisboard;struct rtdPrivate *devpriv;struct comedi_subdevice *s; -struct pci_dev *pcidev;int ret;resource_size_t physLas0;/* configuration */ resource_size_t physLas1;/* data area */
@@ -1635,43 +1670,14 @@ static int rtd_attach(struct comedi_device *dev, struct comedi_devconfig *it)return -ENOMEM ; devpriv = dev->private; -/* -* Probe the device to determine what device in the series it is. -*/ -for (pcidev =pci_get_device (PCI_VENDOR_ID_RTD ,PCI_ANY_ID ,NULL ); - pcidev !=NULL ; - pcidev =pci_get_device (PCI_VENDOR_ID_RTD ,PCI_ANY_ID , pcidev)) { -int i; - -if (it->options[0 ] || it->options[1 ]) { -if (pcidev->bus->number != it->options[0 ] - ||PCI_SLOT (pcidev->devfn) != it->options[1 ]) { -continue ; - } - } -for (i =0 ; i <ARRAY_SIZE (rtd520Boards); ++i) { -if (pcidev->device == rtd520Boards[i].device_id) { - dev->board_ptr = &rtd520Boards[i]; -break ; - } - } -if (dev->board_ptr) -break ;/* found one */ - } -if (!pcidev) { -if (it->options[0 ] && it->options[1 ]) { -printk (KERN_INFO "No RTD card at bus=%d slot=%d.\n" , - it->options[0 ], it->options[1 ]); - }else { -printk (KERN_INFO "No RTD card found.\n" ); - } + devpriv->pci_dev =rtd_find_pci (dev, it); +if (!devpriv->pci_dev)return -EIO ; - } - devpriv->pci_dev = pcidev; thisboard =comedi_board (dev); + dev->board_name = thisboard->name; - ret =comedi_pci_enable (pcidev,DRV_NAME ); + ret =comedi_pci_enable (devpriv->pci_dev,DRV_NAME );if (ret <0 ) {printk (KERN_INFO "Failed to enable PCI device and request regions.\n" );return ret;
Signature · 1 line
1.7.11