if (trueid == 0x5518) {
printk(KERN_INFO "SIS5513: SiS 962/963 MuTIOL IDE UDMA133 controller\n");
chipset_family = ATA_133;
+
+ /* Check for 5513 compability mapping
+ * We must use this, else the port enabled code will fail,
+ * as it expects the enablebits at 0x4a.
+ */
+ if ((idemisc & 0x40000000) == 0) {
+ pci_write_config_dword(dev, 0x54, idemisc | 0x40000000);
+ printk(KERN_INFO "SIS5513: Switching to 5513 register mapping\n");
+ }
}
}
return;
}
-static ide_pci_device_t sis5513_chipset __devinitdata = {
- .name = "SIS5513",
- .init_chipset = init_chipset_sis5513,
- .init_hwif = init_hwif_sis5513,
- .channels = 2,
- .autodma = NOAUTODMA,
- .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},
- .bootable = ON_BOARD,
+#define DECLARE_SIS_DEV(name_str) \
+ { \
+ .name = name_str, \
+ .init_chipset = init_chipset_sis5513, \
+ .init_hwif = init_hwif_sis5513, \
+ .channels = 2, \
+ .autodma = NOAUTODMA, \
+ .enablebits = {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, \
+ .bootable = ON_BOARD, \
+ }
+
+static ide_pci_device_t sis5513_chipsets[] __devinitdata = {
+ /* 0 */ DECLARE_SIS_DEV("SIS5513"),
+ /* 1 */ DECLARE_SIS_DEV("SIS5518")
};
static int __devinit sis5513_init_one(struct pci_dev *dev, const struct pci_device_id *id)
{
- ide_setup_pci_device(dev, &sis5513_chipset);
+ ide_setup_pci_device(dev, &sis5513_chipsets[id->driver_data]);
return 0;
}
static struct pci_device_id sis5513_pci_tbl[] = {
{ PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5513, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
+ { PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5518, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1},
{ 0, },
};
MODULE_DEVICE_TABLE(pci, sis5513_pci_tbl);