Kernel driver `lm78.o'
======================

Status: Complete and well-tested

Supported chips:
  * National Semiconductors LM78
    Prefix `lm78'
    Addresses scanned: I2C 0x20 - 0x2f (inclusive), ISA 0x290 (8 I/O ports)
    Datasheet: Publicly available at the National Semiconductors website
  * National Semiconductors LM78-J
    Prefix `lm78-j'
    Addresses scanned: I2C 0x20 - 0x2f (inclusive), ISA 0x290 (8 I/O ports)
    Datasheet: Publicly available at the National Semiconductors website
  * National Semiconductors LM79
    Prefix `lm79'
    Addresses scanned: I2C 0x20 - 0x2f (inclusive), ISA 0x290 (8 I/O ports)
    Datasheet: Publicly available at the National Semiconductors website
    
Author: Frodo Looijaard <frodol@dds.nl>


Module Parameters
-----------------

* force: short array (min = 1, max = 48)
  List of adapter,address pairs to boldly assume to be present
* force_lm78: short array (min = 1, max = 48)
  List of adapter,address pairs which are unquestionably assumed to contain
  a `lm78' chip
* force_lm78j: short array (min = 1, max = 48)
  List of adapter,address pairs which are unquestionably assumed to contain
  a `lm78j' chip
* force_lm79: short array (min = 1, max = 48)
  List of adapter,address pairs which are unquestionably assumed to contain
  a `lm79' chip
* ignore: short array (min = 1, max = 48)
  List of adapter,address pairs not to scan
* ignore_range: short array (min = 1, max = 48)
  List of adapter,start-addr,end-addr triples not to scan
* probe: short array (min = 1, max = 48)
  List of adapter,address pairs to scan additionally
* probe_range: short array (min = 1, max = 48)
  List of adapter,start-addr,end-addr triples to scan additionally


Description
-----------

This driver implements support for the National Semiconductors LM78, LM78-J
and LM79. They are described as `Microprocessor System Hardware Monitors'.

There is almost no difference between the three supported chips. Functionally, 
the LM78 and LM78-J are exactly identical. The LM79 has one more VID line,
which is used to report the lower voltages newer Pentium processors use.
From here on, LM7* means either of these three types.

The LM7* implements one temperature sensor, three FAN rotation speed sensors,
seven voltage sensors, VID lines, alarms, and some miscellaneous stuff.

Temperatures are measured in degrees Celcius. An alarm is triggered once
when the Overtemperature Shutdown limit is crossed; it is triggered again
as soon as it drops below the Hysteresis value.  A more useful behaviour 
can be found by setting the Hysteresis value to +127 degrees Celcius; in 
this case, alarms are issued during all the time when the actual temperature
is above the Overtemperature Shutdown value. Measurements are guaranteed
between -55 and +125 degrees, with a resolution of 1 degree.

FAN rotation speeds are reported in RPM (rotations per minute). An alarm is
triggered if the rotation speed has dropped below a programmable limit. FAN 
readings can be divided by a programmable divider (1, 2, 4 or 8) to give
the readings more range or accuracy. This is important because some FANs
report only one 'tick' each rotation, while others report two - making
all readings twice as high. Not all RPM values can accurately be represented,
so some rounding is done. With a divider of 2, the lowest representable
value is around 2600 RPM.

Voltage sensors (also known as IN sensors) report their values in volts.
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. All voltage
inputs can measure voltages between 0 and 4.08 volts, with a resolution
of 0.016 volt.

The VID lines encode the core voltage value: the voltage level your processor 
should work with. This is hardcoded by the mainboard and/or processor itself.
It is a value in volts. When it is unconnected, you will often find the
value 3.50 V here.

In addition to the alarms described above, there are a couple of additional
ones. There is a BTI alarm, which gets triggered when an external chip has
crossed its limits. Usually, this is connected to all LM75 chips; if at
least one crosses its limits, this bit gets set. The CHAS alarm triggers
if your computer case is open. The FIFO alarms should never trigger; it
indicates an internal error. The SMI_IN alarm indicates some other chip
has triggered an SMI interrupt. As we do not use SMI interrupts at all,
this condition usually indicates there is a problem with some other 
device.

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 1.5 seconds since the last update). This means that you can easily
miss once-only alarms.

The LM7* only updates its values each 1.5 seconds; reading it more often
will do no harm, but will return 'old' values.


Chip features
-------------

Chip `lm78'
          LABEL     LABEL CLASS   COMPUTE CLASS ACCESS MAGNITUDE
            in0            NONE            NONE      R     2
            in1            NONE            NONE      R     2
            in2            NONE            NONE      R     2
            in3            NONE            NONE      R     2
            in4            NONE            NONE      R     2
            in5            NONE            NONE      R     2
            in6            NONE            NONE      R     2
        in0_min             in0             in0      RW    2
        in1_min             in1             in1      RW    2
        in2_min             in2             in2      RW    2
        in3_min             in3             in3      RW    2
        in4_min             in4             in4      RW    2
        in5_min             in5             in5      RW    2
        in6_min             in6             in6      RW    2
        in0_max             in0             in0      RW    2
        in1_max             in1             in1      RW    2
        in2_max             in2             in2      RW    2
        in3_max             in3             in3      RW    2
        in4_max             in4             in4      RW    2
        in5_max             in5             in5      RW    2
        in6_max             in6             in6      RW    2
           fan1            NONE            NONE      R     0
           fan2            NONE            NONE      R     0
           fan3            NONE            NONE      R     0
       fan1_min            fan1            fan1      RW    0
       fan2_min            fan2            fan2      RW    0
       fan3_min            fan3            fan3      RW    0
           temp            NONE            NONE      R     1
      temp_hyst            temp            temp      RW    1
      temp_over            temp            temp      RW    1
            vid            NONE            NONE      R     2
       fan1_div            fan1            NONE      RW    0
       fan2_div            fan2            NONE      RW    0
       fan3_div            fan3            NONE      R     0
         alarms            NONE            NONE      R     0

          LABEL                           FEATURE SYMBOL     SYSCTL FILE:OFFSET
            in0                         SENSORS_LM78_IN0             in0:3
            in1                         SENSORS_LM78_IN1             in1:3
            in2                         SENSORS_LM78_IN2             in2:3
            in3                         SENSORS_LM78_IN3             in3:3
            in4                         SENSORS_LM78_IN4             in4:3
            in5                         SENSORS_LM78_IN5             in5:3
            in6                         SENSORS_LM78_IN6             in6:3
        in0_min                     SENSORS_LM78_IN0_MIN             in0:1
        in1_min                     SENSORS_LM78_IN1_MIN             in1:1
        in2_min                     SENSORS_LM78_IN2_MIN             in2:1
        in3_min                     SENSORS_LM78_IN3_MIN             in3:1
        in4_min                     SENSORS_LM78_IN4_MIN             in4:1
        in5_min                     SENSORS_LM78_IN5_MIN             in5:1
        in6_min                     SENSORS_LM78_IN6_MIN             in6:1
        in0_max                     SENSORS_LM78_IN0_MAX             in0:2
        in1_max                     SENSORS_LM78_IN1_MAX             in1:2
        in2_max                     SENSORS_LM78_IN2_MAX             in2:2
        in3_max                     SENSORS_LM78_IN3_MAX             in3:2
        in4_max                     SENSORS_LM78_IN4_MAX             in4:2
        in5_max                     SENSORS_LM78_IN5_MAX             in5:2
        in6_max                     SENSORS_LM78_IN6_MAX             in6:2
           fan1                        SENSORS_LM78_FAN1            fan1:2
           fan2                        SENSORS_LM78_FAN2            fan2:2
           fan3                        SENSORS_LM78_FAN3            fan3:2
       fan1_min                    SENSORS_LM78_FAN1_MIN            fan1:1
       fan2_min                    SENSORS_LM78_FAN2_MIN            fan2:1
       fan3_min                    SENSORS_LM78_FAN3_MIN            fan3:1
           temp                        SENSORS_LM78_TEMP            temp:3
      temp_hyst                   SENSORS_LM78_TEMP_HYST            temp:2
      temp_over                   SENSORS_LM78_TEMP_OVER            temp:1
            vid                         SENSORS_LM78_VID             vid:1
       fan1_div                    SENSORS_LM78_FAN1_DIV         fan_div:1
       fan2_div                    SENSORS_LM78_FAN2_DIV         fan_div:2
       fan3_div                    SENSORS_LM78_FAN3_DIV         fan_div:3
         alarms                      SENSORS_LM78_ALARMS          alarms:1


Chip `lm78-j'
          LABEL     LABEL CLASS   COMPUTE CLASS ACCESS MAGNITUDE
            in0            NONE            NONE      R     2
            in1            NONE            NONE      R     2
            in2            NONE            NONE      R     2
            in3            NONE            NONE      R     2
            in4            NONE            NONE      R     2
            in5            NONE            NONE      R     2
            in6            NONE            NONE      R     2
        in0_min             in0             in0      RW    2
        in1_min             in1             in1      RW    2
        in2_min             in2             in2      RW    2
        in3_min             in3             in3      RW    2
        in4_min             in4             in4      RW    2
        in5_min             in5             in5      RW    2
        in6_min             in6             in6      RW    2
        in0_max             in0             in0      RW    2
        in1_max             in1             in1      RW    2
        in2_max             in2             in2      RW    2
        in3_max             in3             in3      RW    2
        in4_max             in4             in4      RW    2
        in5_max             in5             in5      RW    2
        in6_max             in6             in6      RW    2
           fan1            NONE            NONE      R     0
           fan2            NONE            NONE      R     0
           fan3            NONE            NONE      R     0
       fan1_min            fan1            fan1      RW    0
       fan2_min            fan2            fan2      RW    0
       fan3_min            fan3            fan3      RW    0
           temp            NONE            NONE      R     1
      temp_hyst            temp            temp      RW    1
      temp_over            temp            temp      RW    1
            vid            NONE            NONE      R     2
       fan1_div            fan1            NONE      RW    0
       fan2_div            fan2            NONE      RW    0
       fan3_div            fan3            NONE      R     0
         alarms            NONE            NONE      R     0

          LABEL                           FEATURE SYMBOL     SYSCTL FILE:OFFSET
            in0                        SENSORS_LM78J_IN0             in0:3
            in1                        SENSORS_LM78J_IN1             in1:3
            in2                        SENSORS_LM78J_IN2             in2:3
            in3                        SENSORS_LM78J_IN3             in3:3
            in4                        SENSORS_LM78J_IN4             in4:3
            in5                        SENSORS_LM78J_IN5             in5:3
            in6                        SENSORS_LM78J_IN6             in6:3
        in0_min                    SENSORS_LM78J_IN0_MIN             in0:1
        in1_min                    SENSORS_LM78J_IN1_MIN             in1:1
        in2_min                    SENSORS_LM78J_IN2_MIN             in2:1
        in3_min                    SENSORS_LM78J_IN3_MIN             in3:1
        in4_min                    SENSORS_LM78J_IN4_MIN             in4:1
        in5_min                    SENSORS_LM78J_IN5_MIN             in5:1
        in6_min                    SENSORS_LM78J_IN6_MIN             in6:1
        in0_max                    SENSORS_LM78J_IN0_MAX             in0:2
        in1_max                    SENSORS_LM78J_IN1_MAX             in1:2
        in2_max                    SENSORS_LM78J_IN2_MAX             in2:2
        in3_max                    SENSORS_LM78J_IN3_MAX             in3:2
        in4_max                    SENSORS_LM78J_IN4_MAX             in4:2
        in5_max                    SENSORS_LM78J_IN5_MAX             in5:2
        in6_max                    SENSORS_LM78J_IN6_MAX             in6:2
           fan1                       SENSORS_LM78J_FAN1            fan1:2
           fan2                       SENSORS_LM78J_FAN2            fan2:2
           fan3                       SENSORS_LM78J_FAN3            fan3:2
       fan1_min                   SENSORS_LM78J_FAN1_MIN            fan1:1
       fan2_min                   SENSORS_LM78J_FAN2_MIN            fan2:1
       fan3_min                   SENSORS_LM78J_FAN3_MIN            fan3:1
           temp                       SENSORS_LM78J_TEMP            temp:3
      temp_hyst                  SENSORS_LM78J_TEMP_HYST            temp:2
      temp_over                  SENSORS_LM78J_TEMP_OVER            temp:1
            vid                        SENSORS_LM78J_VID             vid:1
       fan1_div                   SENSORS_LM78J_FAN1_DIV         fan_div:1
       fan2_div                   SENSORS_LM78J_FAN2_DIV         fan_div:2
       fan3_div                   SENSORS_LM78J_FAN3_DIV         fan_div:3
         alarms                     SENSORS_LM78J_ALARMS          alarms:1


Chip `lm79'
          LABEL     LABEL CLASS   COMPUTE CLASS ACCESS MAGNITUDE
            in0            NONE            NONE      R     2
            in1            NONE            NONE      R     2
            in2            NONE            NONE      R     2
            in3            NONE            NONE      R     2
            in4            NONE            NONE      R     2
            in5            NONE            NONE      R     2
            in6            NONE            NONE      R     2
        in0_min             in0             in0      RW    2
        in1_min             in1             in1      RW    2
        in2_min             in2             in2      RW    2
        in3_min             in3             in3      RW    2
        in4_min             in4             in4      RW    2
        in5_min             in5             in5      RW    2
        in6_min             in6             in6      RW    2
        in0_max             in0             in0      RW    2
        in1_max             in1             in1      RW    2
        in2_max             in2             in2      RW    2
        in3_max             in3             in3      RW    2
        in4_max             in4             in4      RW    2
        in5_max             in5             in5      RW    2
        in6_max             in6             in6      RW    2
           fan1            NONE            NONE      R     0
           fan2            NONE            NONE      R     0
           fan3            NONE            NONE      R     0
       fan1_min            fan1            fan1      RW    0
       fan2_min            fan2            fan2      RW    0
       fan3_min            fan3            fan3      RW    0
           temp            NONE            NONE      R     1
      temp_hyst            temp            temp      RW    1
      temp_over            temp            temp      RW    1
            vid            NONE            NONE      R     2
       fan1_div            fan1            NONE      RW    0
       fan2_div            fan2            NONE      RW    0
       fan3_div            fan3            NONE      R     0
         alarms            NONE            NONE      R     0

          LABEL                           FEATURE SYMBOL     SYSCTL FILE:OFFSET
            in0                         SENSORS_LM79_IN0             in0:3
            in1                         SENSORS_LM79_IN1             in1:3
            in2                         SENSORS_LM79_IN2             in2:3
            in3                         SENSORS_LM79_IN3             in3:3
            in4                         SENSORS_LM79_IN4             in4:3
            in5                         SENSORS_LM79_IN5             in5:3
            in6                         SENSORS_LM79_IN6             in6:3
        in0_min                     SENSORS_LM79_IN0_MIN             in0:1
        in1_min                     SENSORS_LM79_IN1_MIN             in1:1
        in2_min                     SENSORS_LM79_IN2_MIN             in2:1
        in3_min                     SENSORS_LM79_IN3_MIN             in3:1
        in4_min                     SENSORS_LM79_IN4_MIN             in4:1
        in5_min                     SENSORS_LM79_IN5_MIN             in5:1
        in6_min                     SENSORS_LM79_IN6_MIN             in6:1
        in0_max                     SENSORS_LM79_IN0_MAX             in0:2
        in1_max                     SENSORS_LM79_IN1_MAX             in1:2
        in2_max                     SENSORS_LM79_IN2_MAX             in2:2
        in3_max                     SENSORS_LM79_IN3_MAX             in3:2
        in4_max                     SENSORS_LM79_IN4_MAX             in4:2
        in5_max                     SENSORS_LM79_IN5_MAX             in5:2
        in6_max                     SENSORS_LM79_IN6_MAX             in6:2
           fan1                        SENSORS_LM79_FAN1            fan1:2
           fan2                        SENSORS_LM79_FAN2            fan2:2
           fan3                        SENSORS_LM79_FAN3            fan3:2
       fan1_min                    SENSORS_LM79_FAN1_MIN            fan1:1
       fan2_min                    SENSORS_LM79_FAN2_MIN            fan2:1
       fan3_min                    SENSORS_LM79_FAN3_MIN            fan3:1
           temp                        SENSORS_LM79_TEMP            temp:3
      temp_hyst                   SENSORS_LM79_TEMP_HYST            temp:2
      temp_over                   SENSORS_LM79_TEMP_OVER            temp:1
            vid                         SENSORS_LM79_VID             vid:1
       fan1_div                    SENSORS_LM79_FAN1_DIV         fan_div:1
       fan2_div                    SENSORS_LM79_FAN2_DIV         fan_div:2
       fan3_div                    SENSORS_LM79_FAN3_DIV         fan_div:3
         alarms                      SENSORS_LM79_ALARMS          alarms:1
