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