diff options
| author | Linus Torvalds <torvalds@g5.osdl.org> | 2005-10-28 18:57:32 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-10-28 18:57:32 -0400 |
| commit | 7efe5d7c3e3a82e43b0f8fb29c6797317bce7a9a (patch) | |
| tree | 2e246004dfc130947574e340a4968239b3f2d20b /drivers/pci/quirks.c | |
| parent | dbe0580d0d2fccf63b0349840a7ae3dbb16f3074 (diff) | |
| parent | f8977d0a9b7ac84cfe700278a2ca64cb33c93a13 (diff) | |
Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6
Diffstat (limited to 'drivers/pci/quirks.c')
| -rw-r--r-- | drivers/pci/quirks.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 7992bc8cc6a4..ee1605906a3e 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
| @@ -414,6 +414,18 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, | |||
| 414 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, quirk_ich4_lpc_acpi ); | 414 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, quirk_ich4_lpc_acpi ); |
| 415 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_1, quirk_ich4_lpc_acpi ); | 415 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_1, quirk_ich4_lpc_acpi ); |
| 416 | 416 | ||
| 417 | static void __devinit quirk_ich6_lpc_acpi(struct pci_dev *dev) | ||
| 418 | { | ||
| 419 | u32 region; | ||
| 420 | |||
| 421 | pci_read_config_dword(dev, 0x40, ®ion); | ||
| 422 | quirk_io_region(dev, region, 128, PCI_BRIDGE_RESOURCES, "ICH6 ACPI/GPIO/TCO"); | ||
| 423 | |||
| 424 | pci_read_config_dword(dev, 0x48, ®ion); | ||
| 425 | quirk_io_region(dev, region, 64, PCI_BRIDGE_RESOURCES+1, "ICH6 GPIO"); | ||
| 426 | } | ||
| 427 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, quirk_ich6_lpc_acpi ); | ||
| 428 | |||
| 417 | /* | 429 | /* |
| 418 | * VIA ACPI: One IO region pointed to by longword at | 430 | * VIA ACPI: One IO region pointed to by longword at |
| 419 | * 0x48 or 0x20 (256 bytes of ACPI registers) | 431 | * 0x48 or 0x20 (256 bytes of ACPI registers) |
| @@ -922,6 +934,12 @@ static void __init asus_hides_smbus_hostbridge(struct pci_dev *dev) | |||
| 922 | case 0x186a: /* M6Ne notebook */ | 934 | case 0x186a: /* M6Ne notebook */ |
| 923 | asus_hides_smbus = 1; | 935 | asus_hides_smbus = 1; |
| 924 | } | 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 | } | ||
| 925 | } else if (unlikely(dev->subsystem_vendor == PCI_VENDOR_ID_HP)) { | 943 | } else if (unlikely(dev->subsystem_vendor == PCI_VENDOR_ID_HP)) { |
| 926 | if (dev->device == PCI_DEVICE_ID_INTEL_82855PM_HB) | 944 | if (dev->device == PCI_DEVICE_ID_INTEL_82855PM_HB) |
| 927 | switch(dev->subsystem_device) { | 945 | switch(dev->subsystem_device) { |
| @@ -932,6 +950,7 @@ static void __init asus_hides_smbus_hostbridge(struct pci_dev *dev) | |||
| 932 | if (dev->device == PCI_DEVICE_ID_INTEL_82865_HB) | 950 | if (dev->device == PCI_DEVICE_ID_INTEL_82865_HB) |
| 933 | switch (dev->subsystem_device) { | 951 | switch (dev->subsystem_device) { |
| 934 | case 0x12bc: /* HP D330L */ | 952 | case 0x12bc: /* HP D330L */ |
| 953 | case 0x12bd: /* HP D530 */ | ||
| 935 | asus_hides_smbus = 1; | 954 | asus_hides_smbus = 1; |
| 936 | } | 955 | } |
| 937 | } else if (unlikely(dev->subsystem_vendor == PCI_VENDOR_ID_TOSHIBA)) { | 956 | } else if (unlikely(dev->subsystem_vendor == PCI_VENDOR_ID_TOSHIBA)) { |
| @@ -966,6 +985,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82865_HB, asus | |||
| 966 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_7205_0, asus_hides_smbus_hostbridge ); | 985 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_7205_0, asus_hides_smbus_hostbridge ); |
| 967 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855PM_HB, asus_hides_smbus_hostbridge ); | 986 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855PM_HB, asus_hides_smbus_hostbridge ); |
| 968 | 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_82855GM_HB, asus_hides_smbus_hostbridge ); |
| 988 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82915GM_HB, asus_hides_smbus_hostbridge ); | ||
| 969 | 989 | ||
| 970 | static void __init asus_hides_smbus_lpc(struct pci_dev *dev) | 990 | static void __init asus_hides_smbus_lpc(struct pci_dev *dev) |
| 971 | { | 991 | { |
| @@ -990,6 +1010,23 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, as | |||
| 990 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, asus_hides_smbus_lpc ); | 1010 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, asus_hides_smbus_lpc ); |
| 991 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, asus_hides_smbus_lpc ); | 1011 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, asus_hides_smbus_lpc ); |
| 992 | 1012 | ||
| 1013 | static void __init asus_hides_smbus_lpc_ich6(struct pci_dev *dev) | ||
| 1014 | { | ||
| 1015 | u32 val, rcba; | ||
| 1016 | void __iomem *base; | ||
| 1017 | |||
| 1018 | if (likely(!asus_hides_smbus)) | ||
| 1019 | return; | ||
| 1020 | pci_read_config_dword(dev, 0xF0, &rcba); | ||
| 1021 | base = ioremap_nocache(rcba & 0xFFFFC000, 0x4000); /* use bits 31:14, 16 kB aligned */ | ||
| 1022 | if (base == NULL) return; | ||
| 1023 | val=readl(base + 0x3418); /* read the Function Disable register, dword mode only */ | ||
| 1024 | writel(val & 0xFFFFFFF7, base + 0x3418); /* enable the SMBus device */ | ||
| 1025 | iounmap(base); | ||
| 1026 | printk(KERN_INFO "PCI: Enabled ICH6/i801 SMBus device\n"); | ||
| 1027 | } | ||
| 1028 | DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_1, asus_hides_smbus_lpc_ich6 ); | ||
| 1029 | |||
| 993 | /* | 1030 | /* |
| 994 | * SiS 96x south bridge: BIOS typically hides SMBus device... | 1031 | * SiS 96x south bridge: BIOS typically hides SMBus device... |
| 995 | */ | 1032 | */ |
