From gw.kernel@tnode.com Thu Aug 2 14:22:45 2007 From: Greg White Date: Mon, 30 Jul 2007 17:21:08 +0200 Subject: PCI: unhide SMBus on Compaq Deskpro EP 401963-001 motherboard with i810 chipset To: greg@kroah.com, akpm@linux-foundation.org, linux-usb-devel@lists.sourceforge.net Message-ID: <46AE01E4.4090800@tnode.com> PCI quirk to unhide SMBus on Compaq Deskpro EP 401963-001 (PCA# 010174) motherboard with i810 chipset. Motherboard identification based on host bridge device is a little strange, because there isn't any subsystem information (subvendor id or subdevice id are set to 0x0000). lspci -v -nn -s 00:00.0 00:00.0 Host bridge [0600]: Intel Corporation 82810 DC-100 GMCH [Graphics Memory Controller Hub] [8086:7122] (rev 02) Flags: bus master, fast devsel, latency 0 After implied patch SMBus is present: lspci -v -nn -s 00:1f.3 00:1f.3 SMBus [0c05]: Intel Corporation 82801AA SMBus [8086:2413] (rev 01) Flags: medium devsel, IRQ 11 I/O ports at fc00 [size=16] Signed-off-by: Greg White Signed-off-by: Greg Kroah-Hartman --- drivers/pci/quirks.c | 9 +++++++++ 1 file changed, 9 insertions(+) --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c @@ -1070,6 +1070,12 @@ static void __init asus_hides_smbus_host case 0x0058: /* Compaq Evo N620c */ asus_hides_smbus = 1; } + } else if (unlikely(dev->subsystem_vendor == PCI_CLASS_NOT_DEFINED)) { + if (dev->device == PCI_DEVICE_ID_INTEL_82810_MC3) + switch(dev->subsystem_device) { + case 0x0000: /* Compaq Deskpro EP 401963-001 (PCA# 010174) motherboard with i810 chipset doesn't have subsystem identification */ + asus_hides_smbus = 1; + } } } DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82845_HB, asus_hides_smbus_hostbridge ); @@ -1081,6 +1087,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855PM_HB, asus_hides_smbus_hostbridge ); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82855GM_HB, asus_hides_smbus_hostbridge ); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82915GM_HB, asus_hides_smbus_hostbridge ); +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_MC3, asus_hides_smbus_hostbridge ); static void asus_hides_smbus_lpc(struct pci_dev *dev) { @@ -1099,12 +1106,14 @@ static void asus_hides_smbus_lpc(struct printk(KERN_INFO "PCI: Enabled i801 SMBus device\n"); } } +DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_0, asus_hides_smbus_lpc ); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_0, asus_hides_smbus_lpc ); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_0, asus_hides_smbus_lpc ); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_0, asus_hides_smbus_lpc ); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_12, asus_hides_smbus_lpc ); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_12, asus_hides_smbus_lpc ); DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_0, asus_hides_smbus_lpc ); +DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_0, asus_hides_smbus_lpc ); DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_0, asus_hides_smbus_lpc ); DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_0, asus_hides_smbus_lpc ); DECLARE_PCI_FIXUP_RESUME(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_0, asus_hides_smbus_lpc );