Kernel driver pc87360
=====================

Supported chips:
  * National Semiconductor PC87360, PC87363, PC87364, PC87365 and PC87366
    Prefixes: 'pc87360', 'pc87363', 'pc87364', 'pc87365', 'pc87366'
    Addresses scanned: none, address read from Super I/O config space
    Datasheets: No longer available

Authors: Jean Delvare <khali@linux-fr.org>

Thanks to Sandeep Mehta, Tonko de Rooy and Daniel Ceregatti for testing.
Thanks to Rudolf Marek for helping me investigate conversion issues.


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

* init int
  Chip initialization level:
   0: None
  *1: Forcibly enable internal voltage and temperature channels, except in9
   2: Forcibly enable all voltage and temperature channels, except in9
   3: Forcibly enable all voltage and temperature channels, including in9

Note that this parameter has no effect for the PC87360, PC87363 and PC87364
chips.

Also note that for the PC87366, initialization levels 2 and 3 don't enable
all temperature channels, because some of them share pins with each other,
so they can't be used at the same time.


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

The National Semiconductor PC87360 Super I/O chip contains monitoring and
PWM control circuitry for two fans. The PC87363 chip is similar, and the
PC87364 chip has monitoring and PWM control for a third fan.

The National Semiconductor PC87365 and PC87366 Super I/O chips are complete
hardware monitoring chipsets, not only controlling and monitoring three fans,
but also monitoring eleven voltage inputs and two (PC87365) or up to four
(PC87366) temperatures.

  Chip        #vin    #fan    #pwm    #temp   devid

  PC87360     -       2       2       -       0xE1
  PC87363     -       2       2       -       0xE8
  PC87364     -       3       3       -       0xE4
  PC87365     11      3       3       2       0xE5
  PC87366     11      3       3       3-4     0xE9

The driver assumes that no more than one chip is present, and one of the
standard Super I/O addresses is used (0x2E/0x2F or 0x4E/0x4F)

Fan Monitoring
--------------

Fan rotation speeds are reported in RPM (revolutions per minute). An alarm
is triggered if the rotation speed has dropped below a programmable limit.
A different alarm is triggered if the fan speed is too low to be measured.

Fan readings are affected by a programmable clock divider, giving the
readings more range or accuracy. Usually, users have to learn how it works,
but this driver implements dynamic clock divider selection, so you don't
have to care no more.

For reference, here are a few values about clock dividers:

                slowest         accuracy        highest
                measurable      around 3000     accurate
    divider     speed (RPM)     RPM (RPM)       speed (RPM)
         1        1882              18           6928
         2         941              37           4898
         4         470              74           3464
         8         235             150           2449

For the curious, here is how the values above were computed:
 * slowest measurable speed: clock/(255*divider)
 * accuracy around 3000 RPM: 3000^2/clock
 * highest accurate speed: sqrt(clock*100)
The clock speed for the PC87360 family is 480 kHz. I arbitrarily chose 100
RPM as the lowest acceptable accuracy.

As mentioned above, you don't have to care about this no more.

Note that not all RPM values can be represented, even when the best clock
divider is selected. This is not only true for the measured speeds, but
also for the programmable low limits, so don't be surprised if you try to
set, say, fan1_min to 2900 and it finally reads 2909.


Fan Control
-----------

PWM (pulse width modulation) values range from 0 to 255, with 0 meaning
that the fan is stopped, and 255 meaning that the fan goes at full speed.

Be extremely careful when changing PWM values. Low PWM values, even
non-zero, can stop the fan, which may cause irreversible damage to your
hardware if temperature increases too much. When changing PWM values, go
step by step and keep an eye on temperatures.

One user reported problems with PWM. Changing PWM values would break fan
speed readings. No explanation nor fix could be found.


Temperature Monitoring
----------------------

Temperatures are reported in degrees Celsius. Each temperature measured has
associated low, high and overtemperature limits, each of which triggers an
alarm when crossed.

The first two temperature channels are external. The third one (PC87366
only) is internal.

The PC87366 has three additional temperature channels, based on
thermistors (as opposed to thermal diodes for the first three temperature
channels). For technical reasons, these channels are held by the VLM
(voltage level monitor) logical device, not the TMS (temperature
measurement) one. As a consequence, these temperatures are exported as
voltages, and converted into temperatures in user-space.

Note that these three additional channels share their pins with the
external thermal diode channels, so you (physically) can't use them all at
the same time. Although it should be possible to mix the two sensor types,
the documents from National Semiconductor suggest that motherboard
manufacturers should choose one type and stick to it. So you will more
likely have either channels 1 to 3 (thermal diodes) or 3 to 6 (internal
thermal diode, and thermistors).


Voltage Monitoring
------------------

Voltages are reported relatively to a reference voltage, either internal or
external. Some of them (in7:Vsb, in8:Vdd and in10:AVdd) are divided by two
internally, you will have to compensate in sensors.conf. Others (in0 to in6)
are likely to be divided externally. The meaning of each of these inputs as
well as the values of the resistors used for division is left to the
motherboard manufacturers, so you will have to document yourself and edit
sensors.conf accordingly. National Semiconductor has a document with
recommended resistor values for some voltages, but this still leaves much
room for per motherboard specificities, unfortunately. Even worse,
motherboard manufacturers don't seem to care about National Semiconductor's
recommendations.

Each voltage measured has associated low and high limits, each of which
triggers an alarm when crossed.

When available, VID inputs are used to provide the nominal CPU Core voltage.
The driver will default to VRM 9.0, but this can be changed from user-space.
The chipsets can handle two sets of VID inputs (on dual-CPU systems), but
the driver will only export one for now. This may change later if there is
a need.


General Remarks
---------------

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 all hardware registers are read whenever any
data is read (unless it is less than 2 seconds since the last update, in
which case cached values are returned instead). As a consequence, when
a once-only alarm triggers, it may take 2 seconds for it to show, and 2
more seconds for it to disappear.

Monitoring of in9 isn't enabled at lower init levels (<3) because that
channel measures the battery voltage (Vbat). It is a known fact that
repeatedly sampling the battery voltage reduces its lifetime. National
Semiconductor smartly designed their chipset so that in9 is sampled only
once every 1024 sampling cycles (that is every 34 minutes at the default
sampling rate), so the effect is attenuated, but still present.


Limitations
-----------

The datasheets suggests that some values (fan mins, fan dividers)
shouldn't be changed once the monitoring has started, but we ignore that
recommendation. We'll reconsider if it actually causes trouble.
