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 | */ |
