diff options
-rw-r--r-- | drivers/pci/quirks.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 0663428a0e64..e1bd169cf55c 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -934,6 +934,12 @@ static void __init asus_hides_smbus_hostbridge(struct pci_dev *dev) | |||
934 | case 0x186a: /* M6Ne notebook */ | 934 | case 0x186a: /* M6Ne notebook */ |
935 | asus_hides_smbus = 1; | 935 | asus_hides_smbus = 1; |
936 | } | 936 | } |
937 | if (dev->device == PCI_DEVICE_ID_INTEL_82915GM_HB) { | ||
938 | switch (dev->subsystem_device) { | ||
939 | case 0x1882: /* M6V notebook */ | ||
940 | asus_hides_smbus = 1; | ||
941 | } | ||
942 | } | ||
937 | } else if (unlikely(dev->subsystem_vendor == PCI_VENDOR_ID_HP)) { | 943 | } else if (unlikely(dev->subsystem_vendor == PCI_VENDOR_ID_HP)) { |
938 | if (dev->device == PCI_DEVICE_ID_INTEL_82855PM_HB) | 944 | if (dev->device == PCI_DEVICE_ID_INTEL_82855PM_HB) |
939 | switch(dev->subsystem_device) { | 945 | switch(dev->subsystem_device) { |
@@ -978,6 +984,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82865_HB, asus | |||
978 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_7205_0, asus_hides_smbus_hostbridge ); | 984 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_7205_0, asus_hides_smbus_hostbridge ); |
979 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855PM_HB, asus_hides_smbus_hostbridge ); | 985 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855PM_HB, asus_hides_smbus_hostbridge ); |
980 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855GM_HB, asus_hides_smbus_hostbridge ); | 986 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855GM_HB, asus_hides_smbus_hostbridge ); |
987 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82915GM_HB, asus_hides_smbus_hostbridge ); | ||
981 | 988 | ||
982 | static void __init asus_hides_smbus_lpc(struct pci_dev *dev) | 989 | static void __init asus_hides_smbus_lpc(struct pci_dev *dev) |
983 | { | 990 | { |
@@ -1002,6 +1009,23 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, as | |||
1002 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, asus_hides_smbus_lpc ); | 1009 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, asus_hides_smbus_lpc ); |
1003 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, asus_hides_smbus_lpc ); | 1010 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, asus_hides_smbus_lpc ); |
1004 | 1011 | ||
1012 | static void __init asus_hides_smbus_lpc_ich6(struct pci_dev *dev) | ||
1013 | { | ||
1014 | u32 val, rcba; | ||
1015 | void __iomem *base; | ||
1016 | |||
1017 | if (likely(!asus_hides_smbus)) | ||
1018 | return; | ||
1019 | pci_read_config_dword(dev, 0xF0, &rcba); | ||
1020 | base = ioremap_nocache(rcba & 0xFFFFC000, 0x4000); /* use bits 31:14, 16 kB aligned */ | ||
1021 | if (base == NULL) return; | ||
1022 | val=readl(base + 0x3418); /* read the Function Disable register, dword mode only */ | ||
1023 | writel(val & 0xFFFFFFF7, base + 0x3418); /* enable the SMBus device */ | ||
1024 | iounmap(base); | ||
1025 | printk(KERN_INFO "PCI: Enabled ICH6/i801 SMBus device\n"); | ||
1026 | } | ||
1027 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, asus_hides_smbus_lpc_ich6 ); | ||
1028 | |||
1005 | /* | 1029 | /* |
1006 | * SiS 96x south bridge: BIOS typically hides SMBus device... | 1030 | * SiS 96x south bridge: BIOS typically hides SMBus device... |
1007 | */ | 1031 | */ |