1 |
3 |
xianfeng |
Kernel driver adm9240
|
2 |
|
|
=====================
|
3 |
|
|
|
4 |
|
|
Supported chips:
|
5 |
|
|
* Analog Devices ADM9240
|
6 |
|
|
Prefix: 'adm9240'
|
7 |
|
|
Addresses scanned: I2C 0x2c - 0x2f
|
8 |
|
|
Datasheet: Publicly available at the Analog Devices website
|
9 |
|
|
http://www.analog.com/UploadedFiles/Data_Sheets/79857778ADM9240_0.pdf
|
10 |
|
|
|
11 |
|
|
* Dallas Semiconductor DS1780
|
12 |
|
|
Prefix: 'ds1780'
|
13 |
|
|
Addresses scanned: I2C 0x2c - 0x2f
|
14 |
|
|
Datasheet: Publicly available at the Dallas Semiconductor (Maxim) website
|
15 |
|
|
http://pdfserv.maxim-ic.com/en/ds/DS1780.pdf
|
16 |
|
|
|
17 |
|
|
* National Semiconductor LM81
|
18 |
|
|
Prefix: 'lm81'
|
19 |
|
|
Addresses scanned: I2C 0x2c - 0x2f
|
20 |
|
|
Datasheet: Publicly available at the National Semiconductor website
|
21 |
|
|
http://www.national.com/ds.cgi/LM/LM81.pdf
|
22 |
|
|
|
23 |
|
|
Authors:
|
24 |
|
|
Frodo Looijaard ,
|
25 |
|
|
Philip Edelbrock ,
|
26 |
|
|
Michiel Rook ,
|
27 |
|
|
Grant Coady with guidance
|
28 |
|
|
from Jean Delvare
|
29 |
|
|
|
30 |
|
|
Interface
|
31 |
|
|
---------
|
32 |
|
|
The I2C addresses listed above assume BIOS has not changed the
|
33 |
|
|
chip MSB 5-bit address. Each chip reports a unique manufacturer
|
34 |
|
|
identification code as well as the chip revision/stepping level.
|
35 |
|
|
|
36 |
|
|
Description
|
37 |
|
|
-----------
|
38 |
|
|
[From ADM9240] The ADM9240 is a complete system hardware monitor for
|
39 |
|
|
microprocessor-based systems, providing measurement and limit comparison
|
40 |
|
|
of up to four power supplies and two processor core voltages, plus
|
41 |
|
|
temperature, two fan speeds and chassis intrusion. Measured values can
|
42 |
|
|
be read out via an I2C-compatible serial System Management Bus, and values
|
43 |
|
|
for limit comparisons can be programmed in over the same serial bus. The
|
44 |
|
|
high speed successive approximation ADC allows frequent sampling of all
|
45 |
|
|
analog channels to ensure a fast interrupt response to any out-of-limit
|
46 |
|
|
measurement.
|
47 |
|
|
|
48 |
|
|
The ADM9240, DS1780 and LM81 are register compatible, the following
|
49 |
|
|
details are common to the three chips. Chip differences are described
|
50 |
|
|
after this section.
|
51 |
|
|
|
52 |
|
|
|
53 |
|
|
Measurements
|
54 |
|
|
------------
|
55 |
|
|
The measurement cycle
|
56 |
|
|
|
57 |
|
|
The adm9240 driver will take a measurement reading no faster than once
|
58 |
|
|
each two seconds. User-space may read sysfs interface faster than the
|
59 |
|
|
measurement update rate and will receive cached data from the most
|
60 |
|
|
recent measurement.
|
61 |
|
|
|
62 |
|
|
ADM9240 has a very fast 320us temperature and voltage measurement cycle
|
63 |
|
|
with independent fan speed measurement cycles counting alternating rising
|
64 |
|
|
edges of the fan tacho inputs.
|
65 |
|
|
|
66 |
|
|
DS1780 measurement cycle is about once per second including fan speed.
|
67 |
|
|
|
68 |
|
|
LM81 measurement cycle is about once per 400ms including fan speed.
|
69 |
|
|
The LM81 12-bit extended temperature measurement mode is not supported.
|
70 |
|
|
|
71 |
|
|
Temperature
|
72 |
|
|
-----------
|
73 |
|
|
On chip temperature is reported as degrees Celsius as 9-bit signed data
|
74 |
|
|
with resolution of 0.5 degrees Celsius. High and low temperature limits
|
75 |
|
|
are 8-bit signed data with resolution of one degree Celsius.
|
76 |
|
|
|
77 |
|
|
Temperature alarm is asserted once the temperature exceeds the high limit,
|
78 |
|
|
and is cleared when the temperature falls below the temp1_max_hyst value.
|
79 |
|
|
|
80 |
|
|
Fan Speed
|
81 |
|
|
---------
|
82 |
|
|
Two fan tacho inputs are provided, the ADM9240 gates an internal 22.5kHz
|
83 |
|
|
clock via a divider to an 8-bit counter. Fan speed (rpm) is calculated by:
|
84 |
|
|
|
85 |
|
|
rpm = (22500 * 60) / (count * divider)
|
86 |
|
|
|
87 |
|
|
Automatic fan clock divider
|
88 |
|
|
|
89 |
|
|
* User sets 0 to fan_min limit
|
90 |
|
|
- low speed alarm is disabled
|
91 |
|
|
- fan clock divider not changed
|
92 |
|
|
- auto fan clock adjuster enabled for valid fan speed reading
|
93 |
|
|
|
94 |
|
|
* User sets fan_min limit too low
|
95 |
|
|
- low speed alarm is enabled
|
96 |
|
|
- fan clock divider set to max
|
97 |
|
|
- fan_min set to register value 254 which corresponds
|
98 |
|
|
to 664 rpm on adm9240
|
99 |
|
|
- low speed alarm will be asserted if fan speed is
|
100 |
|
|
less than minimum measurable speed
|
101 |
|
|
- auto fan clock adjuster disabled
|
102 |
|
|
|
103 |
|
|
* User sets reasonable fan speed
|
104 |
|
|
- low speed alarm is enabled
|
105 |
|
|
- fan clock divider set to suit fan_min
|
106 |
|
|
- auto fan clock adjuster enabled: adjusts fan_min
|
107 |
|
|
|
108 |
|
|
* User sets unreasonably high low fan speed limit
|
109 |
|
|
- resolution of the low speed limit may be reduced
|
110 |
|
|
- alarm will be asserted
|
111 |
|
|
- auto fan clock adjuster enabled: adjusts fan_min
|
112 |
|
|
|
113 |
|
|
* fan speed may be displayed as zero until the auto fan clock divider
|
114 |
|
|
adjuster brings fan speed clock divider back into chip measurement
|
115 |
|
|
range, this will occur within a few measurement cycles.
|
116 |
|
|
|
117 |
|
|
Analog Output
|
118 |
|
|
-------------
|
119 |
|
|
An analog output provides a 0 to 1.25 volt signal intended for an external
|
120 |
|
|
fan speed amplifier circuit. The analog output is set to maximum value on
|
121 |
|
|
power up or reset. This doesn't do much on the test Intel SE440BX-2.
|
122 |
|
|
|
123 |
|
|
Voltage Monitor
|
124 |
|
|
|
125 |
|
|
Voltage (IN) measurement is internally scaled:
|
126 |
|
|
|
127 |
|
|
nr label nominal maximum resolution
|
128 |
|
|
mV mV mV
|
129 |
|
|
|
130 |
|
|
1 Vccp1 2700 3600 14.1
|
131 |
|
|
2 +3.3V 3300 4380 17.2
|
132 |
|
|
3 +5V 5000 6640 26.0
|
133 |
|
|
4 +12V 12000 15940 62.5
|
134 |
|
|
5 Vccp2 2700 3600 14.1
|
135 |
|
|
|
136 |
|
|
The reading is an unsigned 8-bit value, nominal voltage measurement is
|
137 |
|
|
represented by a reading of 192, being 3/4 of the measurement range.
|
138 |
|
|
|
139 |
|
|
An alarm is asserted for any voltage going below or above the set limits.
|
140 |
|
|
|
141 |
|
|
The driver reports and accepts voltage limits scaled to the above table.
|
142 |
|
|
|
143 |
|
|
VID Monitor
|
144 |
|
|
-----------
|
145 |
|
|
The chip has five inputs to read the 5-bit VID and reports the mV value
|
146 |
|
|
based on detected CPU type.
|
147 |
|
|
|
148 |
|
|
Chassis Intrusion
|
149 |
|
|
-----------------
|
150 |
|
|
An alarm is asserted when the CI pin goes active high. The ADM9240
|
151 |
|
|
Datasheet has an example of an external temperature sensor driving
|
152 |
|
|
this pin. On an Intel SE440BX-2 the Chassis Intrusion header is
|
153 |
|
|
connected to a normally open switch.
|
154 |
|
|
|
155 |
|
|
The ADM9240 provides an internal open drain on this line, and may output
|
156 |
|
|
a 20 ms active low pulse to reset an external Chassis Intrusion latch.
|
157 |
|
|
|
158 |
|
|
Clear the CI latch by writing value 1 to the sysfs chassis_clear file.
|
159 |
|
|
|
160 |
|
|
Alarm flags reported as 16-bit word
|
161 |
|
|
|
162 |
|
|
bit label comment
|
163 |
|
|
--- ------------- --------------------------
|
164 |
|
|
|
165 |
|
|
1 VCCP_Error high or low limit exceeded
|
166 |
|
|
2 +3.3 V_Error high or low limit exceeded
|
167 |
|
|
3 +5 V_Error high or low limit exceeded
|
168 |
|
|
4 Temp_Error temperature error
|
169 |
|
|
6 FAN1_Error fan low limit exceeded
|
170 |
|
|
7 FAN2_Error fan low limit exceeded
|
171 |
|
|
8 +12 V_Error high or low limit exceeded
|
172 |
|
|
9 VCCP2_Error high or low limit exceeded
|
173 |
|
|
12 Chassis_Error CI pin went high
|
174 |
|
|
|
175 |
|
|
Remaining bits are reserved and thus undefined. It is important to note
|
176 |
|
|
that alarm bits may be cleared on read, user-space may latch alarms and
|
177 |
|
|
provide the end-user with a method to clear alarm memory.
|