| Grant Coady | a0ef148 | 2005-06-03 10:05:19 +1000 | [diff] [blame] | 1 | 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 <frodol@dds.nl>, | 
|  | 25 | Philip Edelbrock <phil@netroedge.com>, | 
|  | 26 | Michiel Rook <michiel@grendelproject.nl>, | 
| Grant Coady | 2ca7b96 | 2006-10-08 21:57:41 +0200 | [diff] [blame] | 27 | Grant Coady <gcoady.lk@gmail.com> with guidance | 
| Grant Coady | a0ef148 | 2005-06-03 10:05:19 +1000 | [diff] [blame] | 28 | from Jean Delvare <khali@linux-fr.org> | 
|  | 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 | 0   +2.5V        2500        3320       13.0 | 
|  | 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 |  | 
| Jean Delvare | 0de2b24 | 2011-01-12 21:55:09 +0100 | [diff] [blame] | 158 | Clear the CI latch by writing value 0 to the sysfs intrusion0_alarm file. | 
| Grant Coady | a0ef148 | 2005-06-03 10:05:19 +1000 | [diff] [blame] | 159 |  | 
|  | 160 | Alarm flags reported as 16-bit word | 
|  | 161 |  | 
|  | 162 | bit     label               comment | 
|  | 163 | ---     -------------       -------------------------- | 
|  | 164 | 0      +2.5 V_Error        high or low limit exceeded | 
|  | 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. |