mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
312 lines
13 KiB
312 lines
13 KiB
Kernel driver lm93 |
|
================== |
|
|
|
Supported chips: |
|
|
|
* National Semiconductor LM93 |
|
|
|
Prefix 'lm93' |
|
|
|
Addresses scanned: I2C 0x2c-0x2e |
|
|
|
Datasheet: http://www.national.com/ds.cgi/LM/LM93.pdf |
|
|
|
* National Semiconductor LM94 |
|
|
|
Prefix 'lm94' |
|
|
|
Addresses scanned: I2C 0x2c-0x2e |
|
|
|
Datasheet: http://www.national.com/ds.cgi/LM/LM94.pdf |
|
|
|
|
|
Authors: |
|
- Mark M. Hoffman <[email protected]> |
|
- Ported to 2.6 by Eric J. Bowersox <[email protected]> |
|
- Adapted to 2.6.20 by Carsten Emde <[email protected]> |
|
- Modified for mainline integration by Hans J. Koch <[email protected]> |
|
|
|
Module Parameters |
|
----------------- |
|
|
|
* init: integer |
|
Set to non-zero to force some initializations (default is 0). |
|
* disable_block: integer |
|
A "0" allows SMBus block data transactions if the host supports them. A "1" |
|
disables SMBus block data transactions. The default is 0. |
|
* vccp_limit_type: integer array (2) |
|
Configures in7 and in8 limit type, where 0 means absolute and non-zero |
|
means relative. "Relative" here refers to "Dynamic Vccp Monitoring using |
|
VID" from the datasheet. It greatly simplifies the interface to allow |
|
only one set of limits (absolute or relative) to be in operation at a |
|
time (even though the hardware is capable of enabling both). There's |
|
not a compelling use case for enabling both at once, anyway. The default |
|
is "0,0". |
|
* vid_agtl: integer |
|
A "0" configures the VID pins for V(ih) = 2.1V min, V(il) = 0.8V max. |
|
A "1" configures the VID pins for V(ih) = 0.8V min, V(il) = 0.4V max. |
|
(The latter setting is referred to as AGTL+ Compatible in the datasheet.) |
|
I.e. this parameter controls the VID pin input thresholds; if your VID |
|
inputs are not working, try changing this. The default value is "0". |
|
|
|
|
|
Hardware Description |
|
-------------------- |
|
|
|
(from the datasheet) |
|
|
|
The LM93 hardware monitor has a two wire digital interface compatible with |
|
SMBus 2.0. Using an 8-bit ADC, the LM93 measures the temperature of two remote |
|
diode connected transistors as well as its own die and 16 power supply |
|
voltages. To set fan speed, the LM93 has two PWM outputs that are each |
|
controlled by up to four temperature zones. The fancontrol algorithm is lookup |
|
table based. The LM93 includes a digital filter that can be invoked to smooth |
|
temperature readings for better control of fan speed. The LM93 has four |
|
tachometer inputs to measure fan speed. Limit and status registers for all |
|
measured values are included. The LM93 builds upon the functionality of |
|
previous motherboard management ASICs and uses some of the LM85's features |
|
(i.e. smart tachometer mode). It also adds measurement and control support |
|
for dynamic Vccp monitoring and PROCHOT. It is designed to monitor a dual |
|
processor Xeon class motherboard with a minimum of external components. |
|
|
|
LM94 is also supported in LM93 compatible mode. Extra sensors and features of |
|
LM94 are not supported. |
|
|
|
|
|
User Interface |
|
-------------- |
|
|
|
#PROCHOT |
|
^^^^^^^^ |
|
|
|
The LM93 can monitor two #PROCHOT signals. The results are found in the |
|
sysfs files prochot1, prochot2, prochot1_avg, prochot2_avg, prochot1_max, |
|
and prochot2_max. prochot1_max and prochot2_max contain the user limits |
|
for #PROCHOT1 and #PROCHOT2, respectively. prochot1 and prochot2 contain |
|
the current readings for the most recent complete time interval. The |
|
value of prochot1_avg and prochot2_avg is something like a 2 period |
|
exponential moving average (but not quite - check the datasheet). Note |
|
that this third value is calculated by the chip itself. All values range |
|
from 0-255 where 0 indicates no throttling, and 255 indicates > 99.6%. |
|
|
|
The monitoring intervals for the two #PROCHOT signals is also configurable. |
|
These intervals can be found in the sysfs files prochot1_interval and |
|
prochot2_interval. The values in these files specify the intervals for |
|
#P1_PROCHOT and #P2_PROCHOT, respectively. Selecting a value not in this |
|
list will cause the driver to use the next largest interval. The available |
|
intervals are (in seconds): |
|
|
|
#PROCHOT intervals: |
|
0.73, 1.46, 2.9, 5.8, 11.7, 23.3, 46.6, 93.2, 186, 372 |
|
|
|
It is possible to configure the LM93 to logically short the two #PROCHOT |
|
signals. I.e. when #P1_PROCHOT is asserted, the LM93 will automatically |
|
assert #P2_PROCHOT, and vice-versa. This mode is enabled by writing a |
|
non-zero integer to the sysfs file prochot_short. |
|
|
|
The LM93 can also override the #PROCHOT pins by driving a PWM signal onto |
|
one or both of them. When overridden, the signal has a period of 3.56 ms, |
|
a minimum pulse width of 5 clocks (at 22.5kHz => 6.25% duty cycle), and |
|
a maximum pulse width of 80 clocks (at 22.5kHz => 99.88% duty cycle). |
|
|
|
The sysfs files prochot1_override and prochot2_override contain boolean |
|
integers which enable or disable the override function for #P1_PROCHOT and |
|
#P2_PROCHOT, respectively. The sysfs file prochot_override_duty_cycle |
|
contains a value controlling the duty cycle for the PWM signal used when |
|
the override function is enabled. This value ranges from 0 to 15, with 0 |
|
indicating minimum duty cycle and 15 indicating maximum. |
|
|
|
#VRD_HOT |
|
^^^^^^^^ |
|
|
|
The LM93 can monitor two #VRD_HOT signals. The results are found in the |
|
sysfs files vrdhot1 and vrdhot2. There is one value per file: a boolean for |
|
which 1 indicates #VRD_HOT is asserted and 0 indicates it is negated. These |
|
files are read-only. |
|
|
|
Smart Tach Mode (from the datasheet):: |
|
|
|
If a fan is driven using a low-side drive PWM, the tachometer |
|
output of the fan is corrupted. The LM93 includes smart tachometer |
|
circuitry that allows an accurate tachometer reading to be |
|
achieved despite the signal corruption. In smart tach mode all |
|
four signals are measured within 4 seconds. |
|
|
|
Smart tach mode is enabled by the driver by writing 1 or 2 (associating the |
|
fan tachometer with a pwm) to the sysfs file fan<n>_smart_tach. A zero |
|
will disable the function for that fan. Note that Smart tach mode cannot be |
|
enabled if the PWM output frequency is 22500 Hz (see below). |
|
|
|
Manual PWM |
|
^^^^^^^^^^ |
|
|
|
The LM93 has a fixed or override mode for the two PWM outputs (although, there |
|
are still some conditions that will override even this mode - see section |
|
15.10.6 of the datasheet for details.) The sysfs files pwm1_override |
|
and pwm2_override are used to enable this mode; each is a boolean integer |
|
where 0 disables and 1 enables the manual control mode. The sysfs files pwm1 |
|
and pwm2 are used to set the manual duty cycle; each is an integer (0-255) |
|
where 0 is 0% duty cycle, and 255 is 100%. Note that the duty cycle values |
|
are constrained by the hardware. Selecting a value which is not available |
|
will cause the driver to use the next largest value. Also note: when manual |
|
PWM mode is disabled, the value of pwm1 and pwm2 indicates the current duty |
|
cycle chosen by the h/w. |
|
|
|
PWM Output Frequency |
|
^^^^^^^^^^^^^^^^^^^^ |
|
|
|
The LM93 supports several different frequencies for the PWM output channels. |
|
The sysfs files pwm1_freq and pwm2_freq are used to select the frequency. The |
|
frequency values are constrained by the hardware. Selecting a value which is |
|
not available will cause the driver to use the next largest value. Also note |
|
that this parameter has implications for the Smart Tach Mode (see above). |
|
|
|
PWM Output Frequencies (in Hz): |
|
12, 36, 48, 60, 72, 84, 96, 22500 (default) |
|
|
|
Automatic PWM |
|
^^^^^^^^^^^^^ |
|
|
|
The LM93 is capable of complex automatic fan control, with many different |
|
points of configuration. To start, each PWM output can be bound to any |
|
combination of eight control sources. The final PWM is the largest of all |
|
individual control sources to which the PWM output is bound. |
|
|
|
The eight control sources are: temp1-temp4 (aka "zones" in the datasheet), |
|
#PROCHOT 1 & 2, and #VRDHOT 1 & 2. The bindings are expressed as a bitmask |
|
in the sysfs files pwm<n>_auto_channels, where a "1" enables the binding, and |
|
a "0" disables it. The h/w default is 0x0f (all temperatures bound). |
|
|
|
====== =========== |
|
0x01 Temp 1 |
|
0x02 Temp 2 |
|
0x04 Temp 3 |
|
0x08 Temp 4 |
|
0x10 #PROCHOT 1 |
|
0x20 #PROCHOT 2 |
|
0x40 #VRDHOT 1 |
|
0x80 #VRDHOT 2 |
|
====== =========== |
|
|
|
The function y = f(x) takes a source temperature x to a PWM output y. This |
|
function of the LM93 is derived from a base temperature and a table of 12 |
|
temperature offsets. The base temperature is expressed in degrees C in the |
|
sysfs files temp<n>_auto_base. The offsets are expressed in cumulative |
|
degrees C, with the value of offset <i> for temperature value <n> being |
|
contained in the file temp<n>_auto_offset<i>. E.g. if the base temperature |
|
is 40C: |
|
|
|
========== ======================= =============== ======= |
|
offset # temp<n>_auto_offset<i> range pwm |
|
========== ======================= =============== ======= |
|
1 0 - 25.00% |
|
2 0 - 28.57% |
|
3 1 40C - 41C 32.14% |
|
4 1 41C - 42C 35.71% |
|
5 2 42C - 44C 39.29% |
|
6 2 44C - 46C 42.86% |
|
7 2 48C - 50C 46.43% |
|
8 2 50C - 52C 50.00% |
|
9 2 52C - 54C 53.57% |
|
10 2 54C - 56C 57.14% |
|
11 2 56C - 58C 71.43% |
|
12 2 58C - 60C 85.71% |
|
- - > 60C 100.00% |
|
========== ======================= =============== ======= |
|
|
|
Valid offsets are in the range 0C <= x <= 7.5C in 0.5C increments. |
|
|
|
There is an independent base temperature for each temperature channel. Note, |
|
however, there are only two tables of offsets: one each for temp[12] and |
|
temp[34]. Therefore, any change to e.g. temp1_auto_offset<i> will also |
|
affect temp2_auto_offset<i>. |
|
|
|
The LM93 can also apply hysteresis to the offset table, to prevent unwanted |
|
oscillation between two steps in the offsets table. These values are found in |
|
the sysfs files temp<n>_auto_offset_hyst. The value in this file has the |
|
same representation as in temp<n>_auto_offset<i>. |
|
|
|
If a temperature reading falls below the base value for that channel, the LM93 |
|
will use the minimum PWM value. These values are found in the sysfs files |
|
temp<n>_auto_pwm_min. Note, there are only two minimums: one each for temp[12] |
|
and temp[34]. Therefore, any change to e.g. temp1_auto_pwm_min will also |
|
affect temp2_auto_pwm_min. |
|
|
|
PWM Spin-Up Cycle |
|
^^^^^^^^^^^^^^^^^ |
|
|
|
A spin-up cycle occurs when a PWM output is commanded from 0% duty cycle to |
|
some value > 0%. The LM93 supports a minimum duty cycle during spin-up. These |
|
values are found in the sysfs files pwm<n>_auto_spinup_min. The value in this |
|
file has the same representation as other PWM duty cycle values. The |
|
duration of the spin-up cycle is also configurable. These values are found in |
|
the sysfs files pwm<n>_auto_spinup_time. The value in this file is |
|
the spin-up time in seconds. The available spin-up times are constrained by |
|
the hardware. Selecting a value which is not available will cause the driver |
|
to use the next largest value. |
|
|
|
Spin-up Durations: |
|
0 (disabled, h/w default), 0.1, 0.25, 0.4, 0.7, 1.0, 2.0, 4.0 |
|
|
|
#PROCHOT and #VRDHOT PWM Ramping |
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
|
|
|
If the #PROCHOT or #VRDHOT signals are asserted while bound to a PWM output |
|
channel, the LM93 will ramp the PWM output up to 100% duty cycle in discrete |
|
steps. The duration of each step is configurable. There are two files, with |
|
one value each in seconds: pwm_auto_prochot_ramp and pwm_auto_vrdhot_ramp. |
|
The available ramp times are constrained by the hardware. Selecting a value |
|
which is not available will cause the driver to use the next largest value. |
|
|
|
Ramp Times: |
|
0 (disabled, h/w default) to 0.75 in 0.05 second intervals |
|
|
|
Fan Boost |
|
^^^^^^^^^ |
|
|
|
For each temperature channel, there is a boost temperature: if the channel |
|
exceeds this limit, the LM93 will immediately drive both PWM outputs to 100%. |
|
This limit is expressed in degrees C in the sysfs files temp<n>_auto_boost. |
|
There is also a hysteresis temperature for this function: after the boost |
|
limit is reached, the temperature channel must drop below this value before |
|
the boost function is disabled. This temperature is also expressed in degrees |
|
C in the sysfs files temp<n>_auto_boost_hyst. |
|
|
|
GPIO Pins |
|
^^^^^^^^^ |
|
|
|
The LM93 can monitor the logic level of four dedicated GPIO pins as well as the |
|
four tach input pins. GPIO0-GPIO3 correspond to (fan) tach 1-4, respectively. |
|
All eight GPIOs are read by reading the bitmask in the sysfs file gpio. The |
|
LSB is GPIO0, and the MSB is GPIO7. |
|
|
|
|
|
LM93 Unique sysfs Files |
|
----------------------- |
|
|
|
=========================== =============================================== |
|
file description |
|
=========================== =============================================== |
|
prochot<n> current #PROCHOT % |
|
prochot<n>_avg moving average #PROCHOT % |
|
prochot<n>_max limit #PROCHOT % |
|
prochot_short enable or disable logical #PROCHOT pin short |
|
prochot<n>_override force #PROCHOT assertion as PWM |
|
prochot_override_duty_cycle duty cycle for the PWM signal used when |
|
#PROCHOT is overridden |
|
prochot<n>_interval #PROCHOT PWM sampling interval |
|
vrdhot<n> 0 means negated, 1 means asserted |
|
fan<n>_smart_tach enable or disable smart tach mode |
|
pwm<n>_auto_channels select control sources for PWM outputs |
|
pwm<n>_auto_spinup_min minimum duty cycle during spin-up |
|
pwm<n>_auto_spinup_time duration of spin-up |
|
pwm_auto_prochot_ramp ramp time per step when #PROCHOT asserted |
|
pwm_auto_vrdhot_ramp ramp time per step when #VRDHOT asserted |
|
temp<n>_auto_base temperature channel base |
|
temp<n>_auto_offset[1-12] temperature channel offsets |
|
temp<n>_auto_offset_hyst temperature channel offset hysteresis |
|
temp<n>_auto_boost temperature channel boost (PWMs to 100%) |
|
limit |
|
temp<n>_auto_boost_hyst temperature channel boost hysteresis |
|
gpio input state of 8 GPIO pins; read-only |
|
=========================== ===============================================
|
|
|