Kernel driver adm9240¶
Supported chips:
Analog Devices ADM9240
Prefix: ‘adm9240’
Addresses scanned: I2C 0x2c - 0x2f
Datasheet: Publicly available at the Analog Devices website
Dallas Semiconductor DS1780
Prefix: ‘ds1780’
Addresses scanned: I2C 0x2c - 0x2f
Datasheet: Publicly available at the Dallas Semiconductor (Maxim) website
National Semiconductor LM81
Prefix: ‘lm81’
Addresses scanned: I2C 0x2c - 0x2f
Datasheet: Publicly available at the National Semiconductor website
- Authors:
Frodo Looijaard <frodol@dds.nl>,
Philip Edelbrock <phil@netroedge.com>,
Michiel Rook <michiel@grendelproject.nl>,
Grant Coady <gcoady.lk@gmail.com> with guidance from Jean Delvare <jdelvare@suse.de>
Interface¶
The I2C addresses listed above assume BIOS has not changed the chip MSB 5-bit address. Each chip reports a unique manufacturer identification code as well as the chip revision/stepping level.
Description¶
[From ADM9240] The ADM9240 is a complete system hardware monitor for microprocessor-based systems, providing measurement and limit comparison of up to four power supplies and two processor core voltages, plus temperature, two fan speeds and chassis intrusion. Measured values can be read out via an I2C-compatible serial System Management Bus, and values for limit comparisons can be programmed in over the same serial bus. The high speed successive approximation ADC allows frequent sampling of all analog channels to ensure a fast interrupt response to any out-of-limit measurement.
The ADM9240, DS1780 and LM81 are register compatible, the following details are common to the three chips. Chip differences are described after this section.
Measurements¶
The measurement cycle
The adm9240 driver will take a measurement reading no faster than once each two seconds. User-space may read sysfs interface faster than the measurement update rate and will receive cached data from the most recent measurement.
ADM9240 has a very fast 320us temperature and voltage measurement cycle with independent fan speed measurement cycles counting alternating rising edges of the fan tacho inputs.
DS1780 measurement cycle is about once per second including fan speed.
LM81 measurement cycle is about once per 400ms including fan speed. The LM81 12-bit extended temperature measurement mode is not supported.
Temperature¶
On chip temperature is reported as degrees Celsius as 9-bit signed data with resolution of 0.5 degrees Celsius. High and low temperature limits are 8-bit signed data with resolution of one degree Celsius.
Temperature alarm is asserted once the temperature exceeds the high limit, and is cleared when the temperature falls below the temp1_max_hyst value.
Fan Speed¶
Two fan tacho inputs are provided, the ADM9240 gates an internal 22.5kHz clock via a divider to an 8-bit counter. Fan speed (rpm) is calculated by:
rpm = (22500 * 60) / (count * divider)
Automatic fan clock divider
User sets 0 to fan_min limit
low speed alarm is disabled
fan clock divider not changed
auto fan clock adjuster enabled for valid fan speed reading
User sets fan_min limit too low
low speed alarm is enabled
fan clock divider set to max
fan_min set to register value 254 which corresponds to 664 rpm on adm9240
low speed alarm will be asserted if fan speed is less than minimum measurable speed
auto fan clock adjuster disabled
User sets reasonable fan speed
low speed alarm is enabled
fan clock divider set to suit fan_min
auto fan clock adjuster enabled: adjusts fan_min
User sets unreasonably high low fan speed limit
resolution of the low speed limit may be reduced
alarm will be asserted
auto fan clock adjuster enabled: adjusts fan_min
fan speed may be displayed as zero until the auto fan clock divider adjuster brings fan speed clock divider back into chip measurement range, this will occur within a few measurement cycles.
Analog Output¶
An analog output provides a 0 to 1.25 volt signal intended for an external fan speed amplifier circuit. The analog output is set to maximum value on power up or reset. This doesn’t do much on the test Intel SE440BX-2.
Voltage Monitor
Voltage (IN) measurement is internally scaled:
nr
label
- nominal
mV
- maximum
mV
- resolution
mV
0
+2.5V
2500
3320
13.0
1
Vccp1
2700
3600
14.1
2
+3.3V
3300
4380
17.2
3
+5V
5000
6640
26.0
4
+12V
12000
15940
62.5
5
Vccp2
2700
3600
14.1
The reading is an unsigned 8-bit value, nominal voltage measurement is represented by a reading of 192, being 3/4 of the measurement range.
An alarm is asserted for any voltage going below or above the set limits.
The driver reports and accepts voltage limits scaled to the above table.
VID Monitor¶
The chip has five inputs to read the 5-bit VID and reports the mV value based on detected CPU type.
Chassis Intrusion¶
An alarm is asserted when the CI pin goes active high. The ADM9240 Datasheet has an example of an external temperature sensor driving this pin. On an Intel SE440BX-2 the Chassis Intrusion header is connected to a normally open switch.
The ADM9240 provides an internal open drain on this line, and may output a 20 ms active low pulse to reset an external Chassis Intrusion latch.
Clear the CI latch by writing value 0 to the sysfs intrusion0_alarm file.
Alarm flags reported as 16-bit word
bit
label
comment
0
+2.5 V_Error
high or low limit exceeded
1
VCCP_Error
high or low limit exceeded
2
+3.3 V_Error
high or low limit exceeded
3
+5 V_Error
high or low limit exceeded
4
Temp_Error
temperature error
6
FAN1_Error
fan low limit exceeded
7
FAN2_Error
fan low limit exceeded
8
+12 V_Error
high or low limit exceeded
9
VCCP2_Error
high or low limit exceeded
12
Chassis_Error
CI pin went high
Remaining bits are reserved and thus undefined. It is important to note that alarm bits may be cleared on read, user-space may latch alarms and provide the end-user with a method to clear alarm memory.