int ipci165_init_hw_data(struct candevice_t *candev)
{
struct pci_dev *pcidev = NULL;
- unsigned short SubsystemID;
DEBUGMSG ("ipci165_init_hw_data\n");
/* find iPC-I 165 on PCI bus */
do
{
- pcidev = pci_find_device(IPCI165_VENDOR_ID, IPCI165_DEVICE_ID, pcidev);
- if(pcidev == NULL) return -ENODEV;
+ pcidev = can_pci_get_device(IPCI165_VENDOR_ID, IPCI165_DEVICE_ID, pcidev);
+ if(pcidev == NULL)
+ return -ENODEV;
/* check subvendor ID */
- pci_read_config_word (pcidev, PCI_SUBSYSTEM_ID, &SubsystemID);
- if ((SubsystemID != IPCI165_SUBSYSTEM_ID) &&
- (SubsystemID != CP350_SUBSYSTEM_ID))
- break;
+ if ((pcidev->subsystem_vendor != IPCI165_SUBSYSTEM_ID) &&
+ (pcidev->subsystem_vendor != CP350_SUBSYSTEM_ID))
+ continue;
}
while(can_check_dev_taken(pcidev));
if (pci_enable_device (pcidev))
{
CANMSG ("Cannot enable PCI device\n");
+ can_pci_dev_put(pcidev);
return -EIO;
}
return 0;
}
+void ipci165_done_hw_data(struct candevice_t *candev)
+{
+ struct pci_dev *pcidev = candev->sysdevptr.pcidev;
+ can_pci_dev_put(pcidev);
+}
+
#define CHIP_TYPE "ipci165"
/**
hwspecops->release_io = ipci165_release_io;
hwspecops->reset = ipci165_reset;
hwspecops->init_hw_data = ipci165_init_hw_data;
+ hwspecops->done_hw_data = ipci165_done_hw_data;
hwspecops->init_chip_data = ipci165_init_chip_data;
hwspecops->init_obj_data = ipci165_init_obj_data;
hwspecops->write_register = NULL;