| Kernel driver adm9240 | |
| ===================== | |
| Supported chips: | |
| * Analog Devices ADM9240 | |
| Prefix: 'adm9240' | |
| Addresses scanned: I2C 0x2c - 0x2f | |
| Datasheet: Publicly available at the Analog Devices website | |
| http://www.analog.com/UploadedFiles/Data_Sheets/79857778ADM9240_0.pdf | |
| * Dallas Semiconductor DS1780 | |
| Prefix: 'ds1780' | |
| Addresses scanned: I2C 0x2c - 0x2f | |
| Datasheet: Publicly available at the Dallas Semiconductor (Maxim) website | |
| http://pdfserv.maxim-ic.com/en/ds/DS1780.pdf | |
| * National Semiconductor LM81 | |
| Prefix: 'lm81' | |
| Addresses scanned: I2C 0x2c - 0x2f | |
| Datasheet: Publicly available at the National Semiconductor website | |
| http://www.national.com/ds.cgi/LM/LM81.pdf | |
| 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 maximum resolution | |
| mV mV 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. |