diff options
Diffstat (limited to 'drivers/pci/quirks.c')
-rw-r--r-- | drivers/pci/quirks.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index dda6099903c1..7ec9fc9a9a42 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -1242,6 +1242,33 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXH_1, quirk_pc | |||
1242 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHV, quirk_pcie_pxh); | 1242 | DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHV, quirk_pcie_pxh); |
1243 | 1243 | ||
1244 | 1244 | ||
1245 | /* | ||
1246 | * Fixup the cardbus bridges on the IBM Dock II docking station | ||
1247 | */ | ||
1248 | static void __devinit quirk_ibm_dock2_cardbus(struct pci_dev *dev) | ||
1249 | { | ||
1250 | u32 val; | ||
1251 | |||
1252 | /* | ||
1253 | * tie the 2 interrupt pins to INTA, and configure the | ||
1254 | * multifunction routing register to handle this. | ||
1255 | */ | ||
1256 | if ((dev->subsystem_vendor == PCI_VENDOR_ID_IBM) && | ||
1257 | (dev->subsystem_device == 0x0148)) { | ||
1258 | printk(KERN_INFO "PCI: Found IBM Dock II Cardbus Bridge " | ||
1259 | "applying quirk\n"); | ||
1260 | pci_read_config_dword(dev, 0x8c, &val); | ||
1261 | val = ((val & 0xffffff00) | 0x1002); | ||
1262 | pci_write_config_dword(dev, 0x8c, val); | ||
1263 | pci_read_config_dword(dev, 0x80, &val); | ||
1264 | val = ((val & 0x00ffff00) | 0x2864c077); | ||
1265 | pci_write_config_dword(dev, 0x80, val); | ||
1266 | } | ||
1267 | } | ||
1268 | |||
1269 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1420, | ||
1270 | quirk_ibm_dock2_cardbus); | ||
1271 | |||
1245 | static void __devinit quirk_netmos(struct pci_dev *dev) | 1272 | static void __devinit quirk_netmos(struct pci_dev *dev) |
1246 | { | 1273 | { |
1247 | unsigned int num_parallel = (dev->subsystem_device & 0xf0) >> 4; | 1274 | unsigned int num_parallel = (dev->subsystem_device & 0xf0) >> 4; |