Kernel driver `lm78.o'

Prefixes: lm78   (LM78,   I2C and ISA)
          lm78-j (LM78-J, I2C and ISA)
          lm79   (LM79,   I2C and ISA)

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

There is almost no difference between these three 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 now on, LM7* means either of these three types.

The LM7* implements one temperatur 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 Hysteris value.  A more useful behaviour 
can be found by setting the Hysteris 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.

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 imporatant 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.

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.

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.

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.


/proc and sysctl interface files:
  * alarms (LM78_SYSCTL_ALARMS)
    A single number (R,0) which indicates which alarms are currently 
    triggered.  It is a logical OR of the following bit values:
      LM78_ALARM_BTI, LM78_ALARM_CHAS, LM78_ALARM_FIFO, LM78_ALARM_SMI_IN,
      LM78_ALARMS_IN[0-6], LM78_ALARM_FAN[1-3], LM78_ALARM_TEMP
  * fan[1-3] (LM78_SYSCTL_FAN[1-3])
    The Fan Low Limit (RW,0) and Current Fan Reading (R,0).
  * fan_div (LM78_SYSCTL_FAN_DIV)
    The FAN1 Scaling Factor (RW,0), FAN2 Scaling Factor (RW,0) and FAN3 Scaling
    Factor (RW,0).
  * in[0-6] (LM78_SYSCTL_IN[0-6])
    The Voltage Low Limit (RW,2), Voltage High Limit (RW,2) and Current
    Voltage Reading (R,2).
  * temp
    The Overtemperature Shutdown Value (RW,1), Hysteris Value (RW,1) and
    Current Temperature (R,1).
  * vid
    The Core Voltage Value (R,2).


configuration file features:

               NAME        LABEL CLASS     COMPUTE CLASS   RW
             alarms:                                       R 
               fan1:                                       R 
           fan1_div:              fan1                     RW
           fan1_min:              fan1                     RW
               fan2:                                       R 
           fan2_div:              fan2                     RW
           fan2_min:              fan2                     RW
               fan3:                                       R 
           fan3_div:              fan3                     R 
           fan3_min:              fan3                     RW
                in0:                                       R 
            in0_max:               in0               in0   RW
            in0_min:               in0               in0   RW
                in1:                                       R 
            in1_max:               in1               in1   RW
            in1_min:               in1               in1   RW
                in2:                                       R 
            in2_max:               in2               in2   RW
            in2_min:               in2               in2   RW
                in3:                                       R 
            in3_max:               in3               in3   RW
            in3_min:               in3               in3   RW
                in4:                                       R 
            in4_max:               in4               in4   RW
            in4_min:               in4               in4   RW
                in5:                                       R 
            in5_max:               in5               in5   RW
            in5_min:               in5               in5   RW
                in6:                                       R 
            in6_max:               in6               in6   RW
            in6_min:               in6               in6   RW
               temp:                                       R 
          temp_hyst:              temp              temp   RW
          temp_over:              temp              temp   RW
                vid:                                       R 
