X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/f419961de4a8e818c602b0642492ce76dd5bf979..04ac67cc3cac14cd601daacd0592121ec0b84012:/lincan/src/esdpci266.c diff --git a/lincan/src/esdpci266.c b/lincan/src/esdpci266.c index 770ffd8..fc043bc 100644 --- a/lincan/src/esdpci266.c +++ b/lincan/src/esdpci266.c @@ -203,28 +203,18 @@ int esdpci266_reset(struct candevice_t *candev) int esdpci266_init_hw_data(struct candevice_t *candev) { - struct pci_dev *pcidev = NULL; + struct pci_dev *pcidev; printk("lincan: search for ESD PCI/PMC 266 board ...\n"); - do { - pcidev = - pci_find_device(PLX_9056_VENDOR_ID, PLX_9056_DEVICE_ID, - pcidev); - if (pcidev == NULL) - return -ENODEV; - if (pcidev->subsystem_vendor != ESDPCI266_PCI_VENDOR_ID - || pcidev->subsystem_device != ESDPCI266_PCI_PRODUCT_ID) { - printk - ("PLX9056 found, subvendor/subdevice mismatch (%04d:%04d)\n", - pcidev->subsystem_vendor, - pcidev->subsystem_device); - continue; - } - } while (can_check_dev_taken(pcidev)); + pcidev = can_pci_get_next_untaken_subsyst(PLX_9056_VENDOR_ID, PLX_9056_DEVICE_ID, + ESDPCI266_PCI_VENDOR_ID, ESDPCI266_PCI_PRODUCT_ID); + if(pcidev == NULL) + return -ENODEV; if (pci_enable_device(pcidev)) { printk("lincan: pci_enable_device() failed\n"); + can_pci_dev_put(pcidev); return -EIO; } @@ -242,6 +232,12 @@ int esdpci266_init_hw_data(struct candevice_t *candev) return 0; } +void esdpci266_done_hw_data(struct candevice_t *candev) +{ + struct pci_dev *pcidev = candev->sysdevptr.pcidev; + can_pci_dev_put(pcidev); +} + int esdpci266_init_chip_data(struct candevice_t *candev, int chipnr) { if (candev->sysdevptr.pcidev == NULL) @@ -277,6 +273,7 @@ int esdpci266_register(struct hwspecops_t *hwspecops) hwspecops->release_io = esdpci266_release_io; hwspecops->reset = esdpci266_reset; hwspecops->init_hw_data = esdpci266_init_hw_data; + hwspecops->done_hw_data = esdpci266_done_hw_data; hwspecops->init_chip_data = esdpci266_init_chip_data; hwspecops->init_obj_data = esdpci266_init_obj_data; hwspecops->write_register = esdpci266_write_register;