| 54 | | /* Note: We assume all devices are identical |
| 55 | | to the Intel PIIX4; we only mention it during detection. */ |
| 56 | | |
| 57 | | static struct sd supported[] = { |
| 58 | | {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, 3, "PIIX4"}, |
| 59 | | {PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4, 0, "OSB4"}, |
| 60 | | {PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5, 0, "CSB5"}, |
| 61 | | {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443MX_3, 3, "440MX"}, |
| 62 | | {PCI_VENDOR_ID_EFAR, PCI_DEVICE_ID_EFAR_SLC90E66_3, 0, "Victory66"}, |
| 63 | | {0, 0, 0, NULL} |
| 64 | | }; |
| 65 | | |
| 155 | | struct sd *num = supported; |
| 156 | | struct pci_dev *PIIX4_dev = NULL; |
| 157 | | |
| 158 | | if (pci_present() == 0) { |
| 159 | | error_return = -ENODEV; |
| 160 | | goto END; |
| 161 | | } |
| 162 | | |
| 163 | | /* Look for a supported device/function */ |
| 164 | | do { |
| 165 | | if((PIIX4_dev = pci_find_device(num->mfr, num->dev, |
| 166 | | PIIX4_dev))) { |
| 167 | | if(PCI_FUNC(PIIX4_dev->devfn) != num->fn) |
| 168 | | continue; |
| 169 | | break; |
| 170 | | } |
| 171 | | PIIX4_dev = NULL; |
| 172 | | num++; |
| 173 | | } while (num->mfr); |
| 174 | | |
| 175 | | if (PIIX4_dev == NULL) { |
| 176 | | printk |
| 177 | | (KERN_ERR "i2c-piix4.o: Error: Can't detect PIIX4 or compatible device!\n"); |
| 178 | | error_return = -ENODEV; |
| 179 | | goto END; |
| 180 | | } |
| 181 | | printk(KERN_INFO "i2c-piix4.o: Found %s device\n", num->name); |
| | 143 | |
| | 144 | /* match up the function */ |
| | 145 | if (PCI_FUNC(PIIX4_dev->devfn) != id->driver_data) |
| | 146 | return -ENODEV; |
| | 147 | |
| | 148 | printk(KERN_INFO "Found %s device\n", PIIX4_dev->name); |
| | 450 | { |
| | 451 | .vendor = PCI_VENDOR_ID_INTEL, |
| | 452 | .device = PCI_DEVICE_ID_INTEL_82371AB_3, |
| | 453 | .subvendor = PCI_ANY_ID, |
| | 454 | .subdevice = PCI_ANY_ID, |
| | 455 | .driver_data = 3 |
| | 456 | }, |
| | 457 | { |
| | 458 | .vendor = PCI_VENDOR_ID_SERVERWORKS, |
| | 459 | .device = PCI_DEVICE_ID_SERVERWORKS_OSB4, |
| | 460 | .subvendor = PCI_ANY_ID, |
| | 461 | .subdevice = PCI_ANY_ID, |
| | 462 | .driver_data = 0, |
| | 463 | }, |
| | 464 | { |
| | 465 | .vendor = PCI_VENDOR_ID_SERVERWORKS, |
| | 466 | .device = PCI_DEVICE_ID_SERVERWORKS_CSB5, |
| | 467 | .subvendor = PCI_ANY_ID, |
| | 468 | .subdevice = PCI_ANY_ID, |
| | 469 | .driver_data = 0, |
| | 470 | }, |
| | 471 | { |
| | 472 | .vendor = PCI_VENDOR_ID_INTEL, |
| | 473 | .device = PCI_DEVICE_ID_INTEL_82443MX_3, |
| | 474 | .subvendor = PCI_ANY_ID, |
| | 475 | .subdevice = PCI_ANY_ID, |
| | 476 | .driver_data = 3, |
| | 477 | }, |
| | 478 | { |
| | 479 | .vendor = PCI_VENDOR_ID_EFAR, |
| | 480 | .device = PCI_DEVICE_ID_EFAR_SLC90E66_3, |
| | 481 | .subvendor = PCI_ANY_ID, |
| | 482 | .subdevice = PCI_ANY_ID, |
| | 483 | .driver_data = 0, |
| | 484 | }, |