Kernel driver `gl520sm.o'
=========================

Status: Complete but experimental

Supported chips:
  * Genesys Logic GL520SM release 0x00
    Prefix `gl520sm'
    Addresses scanned: I2C 0x2c and 0x2d
    Datasheet: Not openly available

Author: Frodo Looijaard <frodol@dds.nl>,
        Kyösti Mälkki <kmalkki@cc.hut.fi>


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

* force: short array (min = 1, max = 48)
  List of adapter,address pairs to boldly assume to be present
* 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 supports the Genesys Logic GL520SM chip.

The GL520SM implements one temperature sensor, two FAN rotation speed
sensors, four voltage sensors and the cpu VID lines. In addition, one input
can be configured as either a temperature or voltage sensor.
The sensor can report alarms through the computer speakers.

Temperatures are measured in degrees Celcius. An alarm goes off while the
temperature is above the over temperature limit, and has not yet dropped
below the hysteresis limit. The alarm always reflects the current situation.
Measurements are guaranteed between 0 degrees and +110 degrees, with
a resolution of +-3 degrees.

FAN rotation speeds are reported in RPM (rotations per minute). An alarm is
triggered if the rotation speed has dropped below a programmable limit.
In case when you have selected to turn Fan1 off, no Fan1 alarm is triggered
if measured temperature is below 'over temperature' 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.
Not all RPM values can accurately be represented, so some rounding is done.
With a divider of 2, the lowest representable value is around 1900 RPM.

Voltage sensors (also known as VIN 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 VDD input
measures voltages between 0.000 and 5.865 volt, with a resolution of 0.023
volt. The other inputs measure voltages between 0.000 and 4.845 volt, with a
resolution of 0.019 volt.

When an alarm goes off, you can be warned by a beeping signal through
your computer speaker. It is possible to enable all beeping globally,
or only the beeping for some alarms.

If an alarm triggers, it will remain triggered until the hardware register
is read at least once (except for temperature alarms). 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 GL520SM only updates its values each 1.5 seconds; reading it more often
will do no harm, but will return 'old' values.

Chip Features
-------------

Chip `gl520sm'
             LABEL        LABEL CLASS      COMPUTE CLASS ACCESS MAGNITUDE
               vdd               NONE               NONE     R     2
              vin1               NONE               NONE     R     2
              vin2               NONE               NONE     R     2
              vin3               NONE               NONE     R     2
              vin4               NONE               NONE     R     2
           vdd_min                vdd                vdd     RW    2
          vin1_min               vin1               vin1     RW    2
          vin2_min               vin2               vin2     RW    2
          vin3_min               vin3               vin3     RW    2
          vin4_min               vin4               vin4     RW    2
           vdd_max                vdd                vdd     RW    2
          vin1_max               vin1               vin1     RW    2
          vin2_max               vin2               vin2     RW    2
          vin3_max               vin3               vin3     RW    2
          vin4_max               vin4               vin4     RW    2
              fan1               NONE               NONE     R     0
              fan2               NONE               NONE     R     0
          fan1_min               fan1               fan1     RW    0
          fan2_min               fan2               fan2     RW    0
             temp1               NONE               NONE     R     1
             temp2               NONE               NONE     R     1
        temp1_hyst              temp1              temp1     RW    1
        temp2_hyst              temp2              temp2     RW    1
        temp1_over              temp1              temp1     RW    1
        temp2_over              temp2              temp2     RW    1
          fan1_div               fan1               NONE     RW    0
          fan2_div               fan2               NONE     RW    0
            alarms               NONE               NONE     R     0
       beep_enable             alarms               NONE     RW    0
             beeps             alarms             alarms     RW    0
         two_temps               NONE               NONE     RW    0

             LABEL                        FEATURE SYMBOL        SYSCTL FILE:NR
               vdd                    SENSORS_GL520_VDD                vdd:3
              vin1                   SENSORS_GL520_VIN1               vin1:3
              vin2                   SENSORS_GL520_VIN2               vin2:3
              vin3                   SENSORS_GL520_VIN3               vin3:3
              vin4                   SENSORS_GL520_VIN4               vin3:3
           vdd_min                SENSORS_GL520_VDD_MIN                vdd:1
          vin1_min               SENSORS_GL520_VIN1_MIN               vin1:1
          vin2_min               SENSORS_GL520_VIN2_MIN               vin2:1
          vin3_min               SENSORS_GL520_VIN3_MIN               vin3:1
          vin4_min               SENSORS_GL520_VIN4_MIN               vin3:1
           vdd_max                SENSORS_GL520_VDD_MAX                vdd:2
          vin1_max               SENSORS_GL520_VIN1_MAX               vin1:2
          vin2_max               SENSORS_GL520_VIN2_MAX               vin2:2
          vin3_max               SENSORS_GL520_VIN3_MAX               vin3:2
          vin4_max               SENSORS_GL520_VIN4_MAX               vin3:2
              fan1                   SENSORS_GL520_FAN1               fan1:2
              fan2                   SENSORS_GL520_FAN2               fan2:2
          fan1_min               SENSORS_GL520_FAN1_MIN               fan1:1
          fan2_min               SENSORS_GL520_FAN2_MIN               fan2:1
             temp1                  SENSORS_GL520_TEMP1              temp1:3
             temp2                  SENSORS_GL520_TEMP2              temp2:3
        temp1_hyst             SENSORS_GL520_TEMP1_HYST              temp1:2
        temp2_hyst             SENSORS_GL520_TEMP2_HYST              temp2:2
        temp1_over             SENSORS_GL520_TEMP1_OVER              temp1:1
        temp2_over             SENSORS_GL520_TEMP2_OVER              temp2:1
          fan1_div               SENSORS_GL520_FAN1_DIV            fan_div:1
          fan2_div               SENSORS_GL520_FAN2_DIV            fan_div:2
            alarms                 SENSORS_GL520_ALARMS             alarms:1
       beep_enable            SENSORS_GL520_BEEP_ENABLE               beep:1
             beeps                  SENSORS_GL520_BEEPS               beep:2
         two_temps               SENSORS_GL520_TWOTEMPS             config:1
