diff options
author | Jean Delvare <khali@linux-fr.org> | 2007-02-13 16:09:00 -0500 |
---|---|---|
committer | Jean Delvare <khali@arrakis.delvare> | 2007-02-13 16:09:00 -0500 |
commit | 099ab118b6b194ad43865f62776a0d36d4b1c7d2 (patch) | |
tree | fbf07ef85555a784c84d4e80ea617a9244c744dd /Documentation/i2c | |
parent | fcdd96ecaf04fb4f229ac1a64fe77fda890dffd5 (diff) |
i2c-i801: Document the SMBus unhiding quirk
This is a frequently asked question so it deserves a paragraph in
the driver documentation.
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Diffstat (limited to 'Documentation/i2c')
-rw-r--r-- | Documentation/i2c/busses/i2c-i801 | 60 |
1 files changed, 55 insertions, 5 deletions
diff --git a/Documentation/i2c/busses/i2c-i801 b/Documentation/i2c/busses/i2c-i801 index 3db69a086c41..c34f0db78a30 100644 --- a/Documentation/i2c/busses/i2c-i801 +++ b/Documentation/i2c/busses/i2c-i801 | |||
@@ -48,14 +48,9 @@ following: | |||
48 | The SMBus controller is function 3 in device 1f. Class 0c05 is SMBus Serial | 48 | The SMBus controller is function 3 in device 1f. Class 0c05 is SMBus Serial |
49 | Controller. | 49 | Controller. |
50 | 50 | ||
51 | If you do NOT see the 24x3 device at function 3, and you can't figure out | ||
52 | any way in the BIOS to enable it, | ||
53 | |||
54 | The ICH chips are quite similar to Intel's PIIX4 chip, at least in the | 51 | The ICH chips are quite similar to Intel's PIIX4 chip, at least in the |
55 | SMBus controller. | 52 | SMBus controller. |
56 | 53 | ||
57 | See the file i2c-piix4 for some additional information. | ||
58 | |||
59 | 54 | ||
60 | Process Call Support | 55 | Process Call Support |
61 | -------------------- | 56 | -------------------- |
@@ -74,6 +69,61 @@ SMBus 2.0 Support | |||
74 | 69 | ||
75 | The 82801DB (ICH4) and later chips support several SMBus 2.0 features. | 70 | The 82801DB (ICH4) and later chips support several SMBus 2.0 features. |
76 | 71 | ||
72 | |||
73 | Hidden ICH SMBus | ||
74 | ---------------- | ||
75 | |||
76 | If your system has an Intel ICH south bridge, but you do NOT see the | ||
77 | SMBus device at 00:1f.3 in lspci, and you can't figure out any way in the | ||
78 | BIOS to enable it, it means it has been hidden by the BIOS code. Asus is | ||
79 | well known for first doing this on their P4B motherboard, and many other | ||
80 | boards after that. Some vendor machines are affected as well. | ||
81 | |||
82 | The first thing to try is the "i2c_ec" ACPI driver. It could be that the | ||
83 | SMBus was hidden on purpose because it'll be driven by ACPI. If the | ||
84 | i2c_ec driver works for you, just forget about the i2c-i801 driver and | ||
85 | don't try to unhide the ICH SMBus. Even if i2c_ec doesn't work, you | ||
86 | better make sure that the SMBus isn't used by the ACPI code. Try loading | ||
87 | the "fan" and "thermal" drivers, and check in /proc/acpi/fan and | ||
88 | /proc/acpi/thermal_zone. If you find anything there, it's likely that | ||
89 | the ACPI is accessing the SMBus and it's safer not to unhide it. Only | ||
90 | once you are certain that ACPI isn't using the SMBus, you can attempt | ||
91 | to unhide it. | ||
92 | |||
93 | In order to unhide the SMBus, we need to change the value of a PCI | ||
94 | register before the kernel enumerates the PCI devices. This is done in | ||
95 | drivers/pci/quirks.c, where all affected boards must be listed (see | ||
96 | function asus_hides_smbus_hostbridge.) If the SMBus device is missing, | ||
97 | and you think there's something interesting on the SMBus (e.g. a | ||
98 | hardware monitoring chip), you need to add your board to the list. | ||
99 | |||
100 | The motherboard is identified using the subvendor and subdevice IDs of the | ||
101 | host bridge PCI device. Get yours with "lspci -n -v -s 00:00.0": | ||
102 | |||
103 | 00:00.0 Class 0600: 8086:2570 (rev 02) | ||
104 | Subsystem: 1043:80f2 | ||
105 | Flags: bus master, fast devsel, latency 0 | ||
106 | Memory at fc000000 (32-bit, prefetchable) [size=32M] | ||
107 | Capabilities: [e4] #09 [2106] | ||
108 | Capabilities: [a0] AGP version 3.0 | ||
109 | |||
110 | Here the host bridge ID is 2570 (82865G/PE/P), the subvendor ID is 1043 | ||
111 | (Asus) and the subdevice ID is 80f2 (P4P800-X). You can find the symbolic | ||
112 | names for the bridge ID and the subvendor ID in include/linux/pci_ids.h, | ||
113 | and then add a case for your subdevice ID at the right place in | ||
114 | drivers/pci/quirks.c. Then please give it very good testing, to make sure | ||
115 | that the unhidden SMBus doesn't conflict with e.g. ACPI. | ||
116 | |||
117 | If it works, proves useful (i.e. there are usable chips on the SMBus) | ||
118 | and seems safe, please submit a patch for inclusion into the kernel. | ||
119 | |||
120 | Note: There's a useful script in lm_sensors 2.10.2 and later, named | ||
121 | unhide_ICH_SMBus (in prog/hotplug), which uses the fakephp driver to | ||
122 | temporarily unhide the SMBus without having to patch and recompile your | ||
123 | kernel. It's very convenient if you just want to check if there's | ||
124 | anything interesting on your hidden ICH SMBus. | ||
125 | |||
126 | |||
77 | ********************** | 127 | ********************** |
78 | The lm_sensors project gratefully acknowledges the support of Texas | 128 | The lm_sensors project gratefully acknowledges the support of Texas |
79 | Instruments in the initial development of this driver. | 129 | Instruments in the initial development of this driver. |