Some first tests worked on DigitalLogic's MSMCA104+
card clone. But interrupt handling requires
more testing. PITA documentation is unclear and real
behavior of IRQ status has to be analyzed and code
has to be adjusted accordingly.
int nr_chips;
u16 subsysid;
int nr_chips;
u16 subsysid;
do {
pcidev = pci_find_device(PCAN_PCI_VENDOR_ID, PCAN_PCI_PRODUCT_ID, pcidev);
do {
pcidev = pci_find_device(PCAN_PCI_VENDOR_ID, PCAN_PCI_PRODUCT_ID, pcidev);
- if(pcidev == NULL) return -ENODEV;
+ if(pcidev == NULL) {
+ printk(KERN_ERR "No unused PCAN_PCI #%d card found\n", i);
+ return -ENODEV;
+ }
+ i++;
} while(can_check_dev_taken(pcidev));
if (pci_enable_device (pcidev)){
} while(can_check_dev_taken(pcidev));
if (pci_enable_device (pcidev)){
- printk(KERN_CRIT "Enable PCAN_PCI failed\n");
+ printk(KERN_ERR "Enable PCAN_PCI failed\n");
return -EIO;
}
candev->sysdevptr.pcidev=pcidev;
return -EIO;
}
candev->sysdevptr.pcidev=pcidev;
for(i=0;i<2;i++){
if(!(pci_resource_flags(pcidev,0)&IORESOURCE_MEM)){
for(i=0;i<2;i++){
if(!(pci_resource_flags(pcidev,0)&IORESOURCE_MEM)){
- printk(KERN_CRIT "PCAN_PCI region %d is not memory\n",i);
+ printk(KERN_ERR "PCAN_PCI region %d is not memory\n",i);
if(candev->sysdevptr.pcidev==NULL)
return -ENODEV;
if(candev->sysdevptr.pcidev==NULL)
return -ENODEV;
+ sja1000p_fill_chipspecops(candev->chip[chipnr]);
+
/* special version of the IRQ handler is required for PCAN_PCI board */
candev->chip[chipnr]->chipspecops->irq_handler=pcan_pci_irq_handler;
candev->chip[chipnr]->chip_irq=candev->sysdevptr.pcidev->irq;
/* special version of the IRQ handler is required for PCAN_PCI board */
candev->chip[chipnr]->chipspecops->irq_handler=pcan_pci_irq_handler;
candev->chip[chipnr]->chip_irq=candev->sysdevptr.pcidev->irq;
- sja1000p_fill_chipspecops(candev->chip[chipnr]);
candev->chip[chipnr]->chip_base_addr=
can_ioport2ioptr(candev->io_addr+chipnr*PCAN_PCI_BYTES_PER_CIRCUIT);
candev->chip[chipnr]->flags = 0;
candev->chip[chipnr]->chip_base_addr=
can_ioport2ioptr(candev->io_addr+chipnr*PCAN_PCI_BYTES_PER_CIRCUIT);
candev->chip[chipnr]->flags = 0;