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 <ppokorny@penguincomputing.com>,
       - Frodo Looijaard <frodol@dds.nl>,
       - Richard Barrington <rich_b_nz@clear.net.nz>,
       - Margit Schubert-While <margitsw@t-online.de>,
       - Justin Thiessen <jthiessen@penguincomputing.com>

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.
