mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-26 10:50:54 +07:00
ede7fbdf52
Part 3: Move the drivers documentation, plus two general documentation files. Note that the patch "adds trailing whitespace", because it does move the files as-is, and some files happen to have trailing whitespace. Signed-off-by: Jean Delvare <khali@linux-fr.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
94 lines
4.5 KiB
Plaintext
94 lines
4.5 KiB
Plaintext
Kernel driver adm1026
|
||
=====================
|
||
|
||
Supported chips:
|
||
* Analog Devices ADM1026
|
||
Prefix: 'adm1026'
|
||
Addresses scanned: I2C 0x2c, 0x2d, 0x2e
|
||
Datasheet: Publicly available at the Analog Devices website
|
||
http://www.analog.com/en/prod/0,,766_825_ADM1026,00.html
|
||
|
||
Authors:
|
||
Philip Pokorny <ppokorny@penguincomputing.com> for Penguin Computing
|
||
Justin Thiessen <jthiessen@penguincomputing.com>
|
||
|
||
Module Parameters
|
||
-----------------
|
||
|
||
* gpio_input: int array (min = 1, max = 17)
|
||
List of GPIO pins (0-16) to program as inputs
|
||
* gpio_output: int array (min = 1, max = 17)
|
||
List of GPIO pins (0-16) to program as outputs
|
||
* gpio_inverted: int array (min = 1, max = 17)
|
||
List of GPIO pins (0-16) to program as inverted
|
||
* gpio_normal: int array (min = 1, max = 17)
|
||
List of GPIO pins (0-16) to program as normal/non-inverted
|
||
* gpio_fan: int array (min = 1, max = 8)
|
||
List of GPIO pins (0-7) to program as fan tachs
|
||
|
||
|
||
Description
|
||
-----------
|
||
|
||
This driver implements support for the Analog Devices ADM1026. Analog
|
||
Devices calls it a "complete thermal system management controller."
|
||
|
||
The ADM1026 implements three (3) temperature sensors, 17 voltage sensors,
|
||
16 general purpose digital I/O lines, eight (8) fan speed sensors (8-bit),
|
||
an analog output and a PWM output along with limit, alarm and mask bits for
|
||
all of the above. There is even 8k bytes of EEPROM memory on chip.
|
||
|
||
Temperatures are measured in degrees Celsius. There are two external
|
||
sensor inputs and one internal sensor. Each sensor has a high and low
|
||
limit. If the limit is exceeded, an interrupt (#SMBALERT) can be
|
||
generated. The interrupts can be masked. In addition, there are over-temp
|
||
limits for each sensor. If this limit is exceeded, the #THERM output will
|
||
be asserted. The current temperature and limits have a resolution of 1
|
||
degree.
|
||
|
||
Fan rotation speeds are reported in RPM (rotations per minute) but measured
|
||
in counts of a 22.5kHz internal clock. Each fan has a high limit which
|
||
corresponds to a minimum fan speed. If the limit is exceeded, an interrupt
|
||
can be generated. Each fan can be programmed to divide the reference clock
|
||
by 1, 2, 4 or 8. Not all RPM values can accurately be represented, so some
|
||
rounding is done. With a divider of 8, the slowest measurable speed of a
|
||
two pulse per revolution fan is 661 RPM.
|
||
|
||
There are 17 voltage sensors. An alarm is triggered if the voltage has
|
||
crossed a programmable minimum or maximum limit. Note that minimum in this
|
||
case always means 'closest to zero'; this is important for negative voltage
|
||
measurements. Several inputs have integrated attenuators so they can measure
|
||
higher voltages directly. 3.3V, 5V, 12V, -12V and battery voltage all have
|
||
dedicated inputs. There are several inputs scaled to 0-3V full-scale range
|
||
for SCSI terminator power. The remaining inputs are not scaled and have
|
||
a 0-2.5V full-scale range. A 2.5V or 1.82V reference voltage is provided
|
||
for negative voltage measurements.
|
||
|
||
If an alarm triggers, it will remain triggered until the hardware register
|
||
is read at least once. This means that the cause for the alarm may already
|
||
have disappeared! Note that in the current implementation, all hardware
|
||
registers are read whenever any data is read (unless it is less than 2.0
|
||
seconds since the last update). This means that you can easily miss
|
||
once-only alarms.
|
||
|
||
The ADM1026 measures continuously. Analog inputs are measured about 4
|
||
times a second. Fan speed measurement time depends on fan speed and
|
||
divisor. It can take as long as 1.5 seconds to measure all fan speeds.
|
||
|
||
The ADM1026 has the ability to automatically control fan speed based on the
|
||
temperature sensor inputs. Both the PWM output and the DAC output can be
|
||
used to control fan speed. Usually only one of these two outputs will be
|
||
used. Write the minimum PWM or DAC value to the appropriate control
|
||
register. Then set the low temperature limit in the tmin values for each
|
||
temperature sensor. The range of control is fixed at 20 <20>C, and the
|
||
largest difference between current and tmin of the temperature sensors sets
|
||
the control output. See the datasheet for several example circuits for
|
||
controlling fan speed with the PWM and DAC outputs. The fan speed sensors
|
||
do not have PWM compensation, so it is probably best to control the fan
|
||
voltage from the power lead rather than on the ground lead.
|
||
|
||
The datasheet shows an example application with VID signals attached to
|
||
GPIO lines. Unfortunately, the chip may not be connected to the VID lines
|
||
in this way. The driver assumes that the chips *is* connected this way to
|
||
get a VID voltage.
|