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 <jdelvare@suse.de>

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.
