aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/pci/quirks.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index dda6099903c18a..7ec9fc9a9a4278 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
DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PXHV, quirk_pcie_pxh);
+/*
+ * Fixup the cardbus bridges on the IBM Dock II docking station
+ */
+static void __devinit quirk_ibm_dock2_cardbus(struct pci_dev *dev)
+{
+ u32 val;
+
+ /*
+ * tie the 2 interrupt pins to INTA, and configure the
+ * multifunction routing register to handle this.
+ */
+ if ((dev->subsystem_vendor == PCI_VENDOR_ID_IBM) &&
+ (dev->subsystem_device == 0x0148)) {
+ printk(KERN_INFO "PCI: Found IBM Dock II Cardbus Bridge "
+ "applying quirk\n");
+ pci_read_config_dword(dev, 0x8c, &val);
+ val = ((val & 0xffffff00) | 0x1002);
+ pci_write_config_dword(dev, 0x8c, val);
+ pci_read_config_dword(dev, 0x80, &val);
+ val = ((val & 0x00ffff00) | 0x2864c077);
+ pci_write_config_dword(dev, 0x80, val);
+ }
+}
+
+DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_1420,
+ quirk_ibm_dock2_cardbus);
+
static void __devinit quirk_netmos(struct pci_dev *dev)
{
unsigned int num_parallel = (dev->subsystem_device & 0xf0) >> 4;