| R.Marek@sh.cvut.cz | 7f15b66 | 2005-05-26 12:42:19 +0000 | [diff] [blame] | 1 | Kernel driver adm1026 | 
|  | 2 | ===================== | 
|  | 3 |  | 
|  | 4 | Supported chips: | 
|  | 5 | * Analog Devices ADM1026 | 
|  | 6 | Prefix: 'adm1026' | 
|  | 7 | Addresses scanned: I2C 0x2c, 0x2d, 0x2e | 
|  | 8 | Datasheet: Publicly available at the Analog Devices website | 
| Justin P. Mattock | 0ea6e61 | 2010-07-23 20:51:24 -0700 | [diff] [blame] | 9 | http://www.onsemi.com/PowerSolutions/product.do?id=ADM1026 | 
| R.Marek@sh.cvut.cz | 7f15b66 | 2005-05-26 12:42:19 +0000 | [diff] [blame] | 10 |  | 
|  | 11 | Authors: | 
|  | 12 | Philip Pokorny <ppokorny@penguincomputing.com> for Penguin Computing | 
|  | 13 | Justin Thiessen <jthiessen@penguincomputing.com> | 
|  | 14 |  | 
|  | 15 | Module Parameters | 
|  | 16 | ----------------- | 
|  | 17 |  | 
|  | 18 | * gpio_input: int array (min = 1, max = 17) | 
|  | 19 | List of GPIO pins (0-16) to program as inputs | 
|  | 20 | * gpio_output: int array (min = 1, max = 17) | 
|  | 21 | List of GPIO pins (0-16) to program as outputs | 
|  | 22 | * gpio_inverted: int array (min = 1, max = 17) | 
|  | 23 | List of GPIO pins (0-16) to program as inverted | 
|  | 24 | * gpio_normal: int array (min = 1, max = 17) | 
|  | 25 | List of GPIO pins (0-16) to program as normal/non-inverted | 
|  | 26 | * gpio_fan: int array (min = 1, max = 8) | 
|  | 27 | List of GPIO pins (0-7) to program as fan tachs | 
|  | 28 |  | 
|  | 29 |  | 
|  | 30 | Description | 
|  | 31 | ----------- | 
|  | 32 |  | 
|  | 33 | This driver implements support for the Analog Devices ADM1026. Analog | 
|  | 34 | Devices calls it a "complete thermal system management controller." | 
|  | 35 |  | 
|  | 36 | The ADM1026 implements three (3) temperature sensors, 17 voltage sensors, | 
|  | 37 | 16 general purpose digital I/O lines, eight (8) fan speed sensors (8-bit), | 
|  | 38 | an analog output and a PWM output along with limit, alarm and mask bits for | 
|  | 39 | all of the above. There is even 8k bytes of EEPROM memory on chip. | 
|  | 40 |  | 
|  | 41 | Temperatures are measured in degrees Celsius. There are two external | 
|  | 42 | sensor inputs and one internal sensor. Each sensor has a high and low | 
|  | 43 | limit. If the limit is exceeded, an interrupt (#SMBALERT) can be | 
|  | 44 | generated. The interrupts can be masked. In addition, there are over-temp | 
|  | 45 | limits for each sensor. If this limit is exceeded, the #THERM output will | 
|  | 46 | be asserted. The current temperature and limits have a resolution of 1 | 
|  | 47 | degree. | 
|  | 48 |  | 
|  | 49 | Fan rotation speeds are reported in RPM (rotations per minute) but measured | 
|  | 50 | in counts of a 22.5kHz internal clock. Each fan has a high limit which | 
|  | 51 | corresponds to a minimum fan speed. If the limit is exceeded, an interrupt | 
|  | 52 | can be generated. Each fan can be programmed to divide the reference clock | 
|  | 53 | by 1, 2, 4 or 8. Not all RPM values can accurately be represented, so some | 
|  | 54 | rounding is done. With a divider of 8, the slowest measurable speed of a | 
|  | 55 | two pulse per revolution fan is 661 RPM. | 
|  | 56 |  | 
|  | 57 | There are 17 voltage sensors. An alarm is triggered if the voltage has | 
|  | 58 | crossed a programmable minimum or maximum limit. Note that minimum in this | 
|  | 59 | case always means 'closest to zero'; this is important for negative voltage | 
|  | 60 | measurements. Several inputs have integrated attenuators so they can measure | 
|  | 61 | higher voltages directly. 3.3V, 5V, 12V, -12V and battery voltage all have | 
|  | 62 | dedicated inputs. There are several inputs scaled to 0-3V full-scale range | 
|  | 63 | for SCSI terminator power. The remaining inputs are not scaled and have | 
|  | 64 | a 0-2.5V full-scale range. A 2.5V or 1.82V reference voltage is provided | 
|  | 65 | for negative voltage measurements. | 
|  | 66 |  | 
|  | 67 | If an alarm triggers, it will remain triggered until the hardware register | 
|  | 68 | is read at least once. This means that the cause for the alarm may already | 
|  | 69 | have disappeared! Note that in the current implementation, all hardware | 
|  | 70 | registers are read whenever any data is read (unless it is less than 2.0 | 
|  | 71 | seconds since the last update). This means that you can easily miss | 
|  | 72 | once-only alarms. | 
|  | 73 |  | 
|  | 74 | The ADM1026 measures continuously. Analog inputs are measured about 4 | 
|  | 75 | times a second. Fan speed measurement time depends on fan speed and | 
|  | 76 | divisor. It can take as long as 1.5 seconds to measure all fan speeds. | 
|  | 77 |  | 
|  | 78 | The ADM1026 has the ability to automatically control fan speed based on the | 
|  | 79 | temperature sensor inputs. Both the PWM output and the DAC output can be | 
|  | 80 | used to control fan speed. Usually only one of these two outputs will be | 
|  | 81 | used. Write the minimum PWM or DAC value to the appropriate control | 
|  | 82 | register. Then set the low temperature limit in the tmin values for each | 
| John Anthony Kazos Jr | be2a608 | 2007-05-09 08:50:42 +0200 | [diff] [blame] | 83 | temperature sensor. The range of control is fixed at 20 °C, and the | 
| R.Marek@sh.cvut.cz | 7f15b66 | 2005-05-26 12:42:19 +0000 | [diff] [blame] | 84 | largest difference between current and tmin of the temperature sensors sets | 
|  | 85 | the control output. See the datasheet for several example circuits for | 
|  | 86 | controlling fan speed with the PWM and DAC outputs. The fan speed sensors | 
|  | 87 | do not have PWM compensation, so it is probably best to control the fan | 
|  | 88 | voltage from the power lead rather than on the ground lead. | 
|  | 89 |  | 
|  | 90 | The datasheet shows an example application with VID signals attached to | 
|  | 91 | GPIO lines. Unfortunately, the chip may not be connected to the VID lines | 
|  | 92 | in this way. The driver assumes that the chips *is* connected this way to | 
|  | 93 | get a VID voltage. |