aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorR.Marek@sh.cvut.cz <R.Marek@sh.cvut.cz>2005-09-29 04:35:41 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2005-10-28 18:36:58 -0400
commitacc06632e387fd05d2bf3480f6a2f4d1a62734b8 (patch)
treec578620b9d6ae0c817fae385435c8d2bfad97ffe
parentfe89cf4c4b7a3d9a0ff95eb0506aa7c9baaccda1 (diff)
[PATCH] unhide ICH6 SMBus - take 2
This patch unhides hidden SMBus on ICH6 chipset installed in Asus M6V notebook. I would like to thank Michal Mleczko for testing and help. Signed-Off-By: Rudolf Marek <r.marek@sh.cvut.cz> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> drivers/pci/quirks.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+)
-rw-r--r--drivers/pci/quirks.c24
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
978DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_7205_0, asus_hides_smbus_hostbridge ); 984DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_7205_0, asus_hides_smbus_hostbridge );
979DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855PM_HB, asus_hides_smbus_hostbridge ); 985DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855PM_HB, asus_hides_smbus_hostbridge );
980DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855GM_HB, asus_hides_smbus_hostbridge ); 986DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855GM_HB, asus_hides_smbus_hostbridge );
987DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82915GM_HB, asus_hides_smbus_hostbridge );
981 988
982static void __init asus_hides_smbus_lpc(struct pci_dev *dev) 989static 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
1002DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, asus_hides_smbus_lpc ); 1009DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, asus_hides_smbus_lpc );
1003DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, asus_hides_smbus_lpc ); 1010DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, asus_hides_smbus_lpc );
1004 1011
1012static 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}
1027DECLARE_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 */