mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
286 lines
11 KiB
286 lines
11 KiB
Kernel driver lm85 |
|
================== |
|
|
|
Supported chips: |
|
|
|
* National Semiconductor LM85 (B and C versions) |
|
|
|
Prefix: 'lm85b' or 'lm85c' |
|
|
|
Addresses scanned: I2C 0x2c, 0x2d, 0x2e |
|
|
|
Datasheet: http://www.national.com/pf/LM/LM85.html |
|
|
|
* Texas Instruments LM96000 |
|
|
|
Prefix: 'lm9600' |
|
|
|
Addresses scanned: I2C 0x2c, 0x2d, 0x2e |
|
|
|
Datasheet: https://www.ti.com/lit/ds/symlink/lm96000.pdf |
|
|
|
* Analog Devices ADM1027 |
|
|
|
Prefix: 'adm1027' |
|
|
|
Addresses scanned: I2C 0x2c, 0x2d, 0x2e |
|
|
|
Datasheet: https://www.onsemi.com/PowerSolutions/product.do?id=ADM1027 |
|
|
|
* Analog Devices ADT7463 |
|
|
|
Prefix: 'adt7463' |
|
|
|
Addresses scanned: I2C 0x2c, 0x2d, 0x2e |
|
|
|
Datasheet: https://www.onsemi.com/PowerSolutions/product.do?id=ADT7463 |
|
|
|
* Analog Devices ADT7468 |
|
|
|
Prefix: 'adt7468' |
|
|
|
Addresses scanned: I2C 0x2c, 0x2d, 0x2e |
|
|
|
Datasheet: https://www.onsemi.com/PowerSolutions/product.do?id=ADT7468 |
|
|
|
* SMSC EMC6D100, SMSC EMC6D101 |
|
|
|
Prefix: 'emc6d100' |
|
|
|
Addresses scanned: I2C 0x2c, 0x2d, 0x2e |
|
|
|
Datasheet: http://www.smsc.com/media/Downloads_Public/discontinued/6d100.pdf |
|
|
|
* SMSC EMC6D102 |
|
|
|
Prefix: 'emc6d102' |
|
|
|
Addresses scanned: I2C 0x2c, 0x2d, 0x2e |
|
|
|
Datasheet: http://www.smsc.com/main/catalog/emc6d102.html |
|
|
|
* SMSC EMC6D103 |
|
|
|
Prefix: 'emc6d103' |
|
|
|
Addresses scanned: I2C 0x2c, 0x2d, 0x2e |
|
|
|
Datasheet: http://www.smsc.com/main/catalog/emc6d103.html |
|
|
|
* SMSC EMC6D103S |
|
|
|
Prefix: 'emc6d103s' |
|
|
|
Addresses scanned: I2C 0x2c, 0x2d, 0x2e |
|
|
|
Datasheet: http://www.smsc.com/main/catalog/emc6d103s.html |
|
|
|
Authors: |
|
- Philip Pokorny <[email protected]>, |
|
- Frodo Looijaard <[email protected]>, |
|
- Richard Barrington <[email protected]>, |
|
- Margit Schubert-While <[email protected]>, |
|
- Justin Thiessen <[email protected]> |
|
|
|
Description |
|
----------- |
|
|
|
This driver implements support for the National Semiconductor LM85 and |
|
compatible chips including the Analog Devices ADM1027, ADT7463, ADT7468 and |
|
SMSC EMC6D10x chips family. |
|
|
|
The LM85 uses the 2-wire interface compatible with the SMBUS 2.0 |
|
specification. Using an analog to digital converter it measures three (3) |
|
temperatures and five (5) voltages. It has four (4) 16-bit counters for |
|
measuring fan speed. Five (5) digital inputs are provided for sampling the |
|
VID signals from the processor to the VRM. Lastly, there are three (3) PWM |
|
outputs that can be used to control fan speed. |
|
|
|
The voltage inputs have internal scaling resistors so that the following |
|
voltage can be measured without external resistors: |
|
|
|
2.5V, 3.3V, 5V, 12V, and CPU core voltage (2.25V) |
|
|
|
The temperatures measured are one internal diode, and two remote diodes. |
|
Remote 1 is generally the CPU temperature. These inputs are designed to |
|
measure a thermal diode like the one in a Pentium 4 processor in a socket |
|
423 or socket 478 package. They can also measure temperature using a |
|
transistor like the 2N3904. |
|
|
|
A sophisticated control system for the PWM outputs is designed into the |
|
LM85 that allows fan speed to be adjusted automatically based on any of the |
|
three temperature sensors. Each PWM output is individually adjustable and |
|
programmable. Once configured, the LM85 will adjust the PWM outputs in |
|
response to the measured temperatures without further host intervention. |
|
This feature can also be disabled for manual control of the PWM's. |
|
|
|
Each of the measured inputs (voltage, temperature, fan speed) has |
|
corresponding high/low limit values. The LM85 will signal an ALARM if any |
|
measured value exceeds either limit. |
|
|
|
The LM85 samples all inputs continuously. The lm85 driver will not read |
|
the registers more often than once a second. Further, configuration data is |
|
only read once each 5 minutes. There is twice as much config data as |
|
measurements, so this would seem to be a worthwhile optimization. |
|
|
|
Special Features |
|
---------------- |
|
|
|
The LM85 has four fan speed monitoring modes. The ADM1027 has only two. |
|
Both have special circuitry to compensate for PWM interactions with the |
|
TACH signal from the fans. The ADM1027 can be configured to measure the |
|
speed of a two wire fan, but the input conditioning circuitry is different |
|
for 3-wire and 2-wire mode. For this reason, the 2-wire fan modes are not |
|
exposed to user control. The BIOS should initialize them to the correct |
|
mode. If you've designed your own ADM1027, you'll have to modify the |
|
init_client function and add an insmod parameter to set this up. |
|
|
|
To smooth the response of fans to changes in temperature, the LM85 has an |
|
optional filter for smoothing temperatures. The ADM1027 has the same |
|
config option but uses it to rate limit the changes to fan speed instead. |
|
|
|
The ADM1027, ADT7463 and ADT7468 have a 10-bit ADC and can therefore |
|
measure temperatures with 0.25 degC resolution. They also provide an offset |
|
to the temperature readings that is automatically applied during |
|
measurement. This offset can be used to zero out any errors due to traces |
|
and placement. The documentation says that the offset is in 0.25 degC |
|
steps, but in initial testing of the ADM1027 it was 1.00 degC steps. Analog |
|
Devices has confirmed this "bug". The ADT7463 is reported to work as |
|
described in the documentation. The current lm85 driver does not show the |
|
offset register. |
|
|
|
The ADT7468 has a high-frequency PWM mode, where all PWM outputs are |
|
driven by a 22.5 kHz clock. This is a global mode, not per-PWM output, |
|
which means that setting any PWM frequency above 11.3 kHz will switch |
|
all 3 PWM outputs to a 22.5 kHz frequency. Conversely, setting any PWM |
|
frequency below 11.3 kHz will switch all 3 PWM outputs to a frequency |
|
between 10 and 100 Hz, which can then be tuned separately. |
|
|
|
See the vendor datasheets for more information. There is application note |
|
from National (AN-1260) with some additional information about the LM85. |
|
The Analog Devices datasheet is very detailed and describes a procedure for |
|
determining an optimal configuration for the automatic PWM control. |
|
|
|
The SMSC EMC6D100 & EMC6D101 monitor external voltages, temperatures, and |
|
fan speeds. They use this monitoring capability to alert the system to out |
|
of limit conditions and can automatically control the speeds of multiple |
|
fans in a PC or embedded system. The EMC6D101, available in a 24-pin SSOP |
|
package, and the EMC6D100, available in a 28-pin SSOP package, are designed |
|
to be register compatible. The EMC6D100 offers all the features of the |
|
EMC6D101 plus additional voltage monitoring and system control features. |
|
Unfortunately it is not possible to distinguish between the package |
|
versions on register level so these additional voltage inputs may read |
|
zero. EMC6D102 and EMC6D103 feature additional ADC bits thus extending precision |
|
of voltage and temperature channels. |
|
|
|
SMSC EMC6D103S is similar to EMC6D103, but does not support pwm#_auto_pwm_minctl |
|
and temp#_auto_temp_off. |
|
|
|
The LM96000 supports additional high frequency PWM modes (22.5 kHz, 24 kHz, |
|
25.7 kHz, 27.7 kHz and 30 kHz), which can be configured on a per-PWM basis. |
|
|
|
Hardware Configurations |
|
----------------------- |
|
|
|
The LM85 can be jumpered for 3 different SMBus addresses. There are |
|
no other hardware configuration options for the LM85. |
|
|
|
The lm85 driver detects both LM85B and LM85C revisions of the chip. See the |
|
datasheet for a complete description of the differences. Other than |
|
identifying the chip, the driver behaves no differently with regard to |
|
these two chips. The LM85B is recommended for new designs. |
|
|
|
The ADM1027, ADT7463 and ADT7468 chips have an optional SMBALERT output |
|
that can be used to signal the chipset in case a limit is exceeded or the |
|
temperature sensors fail. Individual sensor interrupts can be masked so |
|
they won't trigger SMBALERT. The SMBALERT output if configured replaces one |
|
of the other functions (PWM2 or IN0). This functionality is not implemented |
|
in current driver. |
|
|
|
The ADT7463 and ADT7468 also have an optional THERM output/input which can |
|
be connected to the processor PROC_HOT output. If available, the autofan |
|
control dynamic Tmin feature can be enabled to keep the system temperature |
|
within spec (just?!) with the least possible fan noise. |
|
|
|
Configuration Notes |
|
------------------- |
|
|
|
Besides standard interfaces driver adds following: |
|
|
|
* Temperatures and Zones |
|
|
|
Each temperature sensor is associated with a Zone. There are three |
|
sensors and therefore three zones (# 1, 2 and 3). Each zone has the following |
|
temperature configuration points: |
|
|
|
* temp#_auto_temp_off |
|
- temperature below which fans should be off or spinning very low. |
|
* temp#_auto_temp_min |
|
- temperature over which fans start to spin. |
|
* temp#_auto_temp_max |
|
- temperature when fans spin at full speed. |
|
* temp#_auto_temp_crit |
|
- temperature when all fans will run full speed. |
|
|
|
PWM Control |
|
^^^^^^^^^^^ |
|
|
|
There are three PWM outputs. The LM85 datasheet suggests that the |
|
pwm3 output control both fan3 and fan4. Each PWM can be individually |
|
configured and assigned to a zone for its control value. Each PWM can be |
|
configured individually according to the following options. |
|
|
|
* pwm#_auto_pwm_min |
|
- this specifies the PWM value for temp#_auto_temp_off |
|
temperature. (PWM value from 0 to 255) |
|
|
|
* pwm#_auto_pwm_minctl |
|
- this flags selects for temp#_auto_temp_off temperature |
|
the behaviour of fans. Write 1 to let fans spinning at |
|
pwm#_auto_pwm_min or write 0 to let them off. |
|
|
|
.. note:: |
|
|
|
It has been reported that there is a bug in the LM85 that causes |
|
the flag to be associated with the zones not the PWMs. This |
|
contradicts all the published documentation. Setting pwm#_min_ctl |
|
in this case actually affects all PWMs controlled by zone '#'. |
|
|
|
PWM Controlling Zone selection |
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
|
|
|
* pwm#_auto_channels |
|
- controls zone that is associated with PWM |
|
|
|
Configuration choices: |
|
|
|
========== ============================================= |
|
Value Meaning |
|
========== ============================================= |
|
1 Controlled by Zone 1 |
|
2 Controlled by Zone 2 |
|
3 Controlled by Zone 3 |
|
23 Controlled by higher temp of Zone 2 or 3 |
|
123 Controlled by highest temp of Zone 1, 2 or 3 |
|
0 PWM always 0% (off) |
|
-1 PWM always 100% (full on) |
|
-2 Manual control (write to 'pwm#' to set) |
|
========== ============================================= |
|
|
|
The National LM85's have two vendor specific configuration |
|
features. Tach. mode and Spinup Control. For more details on these, |
|
see the LM85 datasheet or Application Note AN-1260. These features |
|
are not currently supported by the lm85 driver. |
|
|
|
The Analog Devices ADM1027 has several vendor specific enhancements. |
|
The number of pulses-per-rev of the fans can be set, Tach monitoring |
|
can be optimized for PWM operation, and an offset can be applied to |
|
the temperatures to compensate for systemic errors in the |
|
measurements. These features are not currently supported by the lm85 |
|
driver. |
|
|
|
In addition to the ADM1027 features, the ADT7463 and ADT7468 also have |
|
Tmin control and THERM asserted counts. Automatic Tmin control acts to |
|
adjust the Tmin value to maintain the measured temperature sensor at a |
|
specified temperature. There isn't much documentation on this feature in |
|
the ADT7463 data sheet. This is not supported by current driver.
|
|
|