forked from 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.
364 lines
13 KiB
364 lines
13 KiB
Kernel driver dme1737 |
|
===================== |
|
|
|
Supported chips: |
|
|
|
* SMSC DME1737 and compatibles (like Asus A8000) |
|
|
|
Prefix: 'dme1737' |
|
|
|
Addresses scanned: I2C 0x2c, 0x2d, 0x2e |
|
|
|
Datasheet: Provided by SMSC upon request and under NDA |
|
|
|
* SMSC SCH3112, SCH3114, SCH3116 |
|
|
|
Prefix: 'sch311x' |
|
|
|
Addresses scanned: none, address read from Super-I/O config space |
|
|
|
Datasheet: Available on the Internet |
|
|
|
* SMSC SCH5027 |
|
|
|
Prefix: 'sch5027' |
|
|
|
Addresses scanned: I2C 0x2c, 0x2d, 0x2e |
|
|
|
Datasheet: Provided by SMSC upon request and under NDA |
|
|
|
* SMSC SCH5127 |
|
|
|
Prefix: 'sch5127' |
|
|
|
Addresses scanned: none, address read from Super-I/O config space |
|
|
|
Datasheet: Provided by SMSC upon request and under NDA |
|
|
|
Authors: |
|
Juerg Haefliger <[email protected]> |
|
|
|
|
|
Module Parameters |
|
----------------- |
|
|
|
* force_start: bool |
|
Enables the monitoring of voltage, fan and temp inputs |
|
and PWM output control functions. Using this parameter |
|
shouldn't be required since the BIOS usually takes care |
|
of this. |
|
|
|
* probe_all_addr: bool |
|
Include non-standard LPC addresses 0x162e and 0x164e |
|
when probing for ISA devices. This is required for the |
|
following boards: |
|
- VIA EPIA SN18000 |
|
|
|
|
|
Description |
|
----------- |
|
|
|
This driver implements support for the hardware monitoring capabilities of the |
|
SMSC DME1737 and Asus A8000 (which are the same), SMSC SCH5027, SCH311x, |
|
and SCH5127 Super-I/O chips. These chips feature monitoring of 3 temp sensors |
|
temp[1-3] (2 remote diodes and 1 internal), 8 voltages in[0-7] (7 external and |
|
1 internal) and up to 6 fan speeds fan[1-6]. Additionally, the chips implement |
|
up to 5 PWM outputs pwm[1-3,5-6] for controlling fan speeds both manually and |
|
automatically. |
|
|
|
For the DME1737, A8000 and SCH5027, fan[1-2] and pwm[1-2] are always present. |
|
Fan[3-6] and pwm[3,5-6] are optional features and their availability depends on |
|
the configuration of the chip. The driver will detect which features are |
|
present during initialization and create the sysfs attributes accordingly. |
|
|
|
For the SCH311x and SCH5127, fan[1-3] and pwm[1-3] are always present and |
|
fan[4-6] and pwm[5-6] don't exist. |
|
|
|
The hardware monitoring features of the DME1737, A8000, and SCH5027 are only |
|
accessible via SMBus, while the SCH311x and SCH5127 only provide access via |
|
the ISA bus. The driver will therefore register itself as an I2C client driver |
|
if it detects a DME1737, A8000, or SCH5027 and as a platform driver if it |
|
detects a SCH311x or SCH5127 chip. |
|
|
|
|
|
Voltage Monitoring |
|
------------------ |
|
|
|
The voltage inputs are sampled with 12-bit resolution and have internal |
|
scaling resistors. The values returned by the driver therefore reflect true |
|
millivolts and don't need scaling. The voltage inputs are mapped as follows |
|
(the last column indicates the input ranges): |
|
|
|
DME1737, A8000:: |
|
|
|
in0: +5VTR (+5V standby) 0V - 6.64V |
|
in1: Vccp (processor core) 0V - 3V |
|
in2: VCC (internal +3.3V) 0V - 4.38V |
|
in3: +5V 0V - 6.64V |
|
in4: +12V 0V - 16V |
|
in5: VTR (+3.3V standby) 0V - 4.38V |
|
in6: Vbat (+3.0V) 0V - 4.38V |
|
|
|
SCH311x:: |
|
|
|
in0: +2.5V 0V - 3.32V |
|
in1: Vccp (processor core) 0V - 2V |
|
in2: VCC (internal +3.3V) 0V - 4.38V |
|
in3: +5V 0V - 6.64V |
|
in4: +12V 0V - 16V |
|
in5: VTR (+3.3V standby) 0V - 4.38V |
|
in6: Vbat (+3.0V) 0V - 4.38V |
|
|
|
SCH5027:: |
|
|
|
in0: +5VTR (+5V standby) 0V - 6.64V |
|
in1: Vccp (processor core) 0V - 3V |
|
in2: VCC (internal +3.3V) 0V - 4.38V |
|
in3: V2_IN 0V - 1.5V |
|
in4: V1_IN 0V - 1.5V |
|
in5: VTR (+3.3V standby) 0V - 4.38V |
|
in6: Vbat (+3.0V) 0V - 4.38V |
|
|
|
SCH5127:: |
|
|
|
in0: +2.5 0V - 3.32V |
|
in1: Vccp (processor core) 0V - 3V |
|
in2: VCC (internal +3.3V) 0V - 4.38V |
|
in3: V2_IN 0V - 1.5V |
|
in4: V1_IN 0V - 1.5V |
|
in5: VTR (+3.3V standby) 0V - 4.38V |
|
in6: Vbat (+3.0V) 0V - 4.38V |
|
in7: Vtrip (+1.5V) 0V - 1.99V |
|
|
|
Each voltage input has associated min and max limits which trigger an alarm |
|
when crossed. |
|
|
|
|
|
Temperature Monitoring |
|
---------------------- |
|
|
|
Temperatures are measured with 12-bit resolution and reported in millidegree |
|
Celsius. The chip also features offsets for all 3 temperature inputs which - |
|
when programmed - get added to the input readings. The chip does all the |
|
scaling by itself and the driver therefore reports true temperatures that don't |
|
need any user-space adjustments. The temperature inputs are mapped as follows |
|
(the last column indicates the input ranges):: |
|
|
|
temp1: Remote diode 1 (3904 type) temperature -127C - +127C |
|
temp2: DME1737 internal temperature -127C - +127C |
|
temp3: Remote diode 2 (3904 type) temperature -127C - +127C |
|
|
|
Each temperature input has associated min and max limits which trigger an alarm |
|
when crossed. Additionally, each temperature input has a fault attribute that |
|
returns 1 when a faulty diode or an unconnected input is detected and 0 |
|
otherwise. |
|
|
|
|
|
Fan Monitoring |
|
-------------- |
|
|
|
Fan RPMs are measured with 16-bit resolution. The chip provides inputs for 6 |
|
fan tachometers. All 6 inputs have an associated min limit which triggers an |
|
alarm when crossed. Fan inputs 1-4 provide type attributes that need to be set |
|
to the number of pulses per fan revolution that the connected tachometer |
|
generates. Supported values are 1, 2, and 4. Fan inputs 5-6 only support fans |
|
that generate 2 pulses per revolution. Fan inputs 5-6 also provide a max |
|
attribute that needs to be set to the maximum attainable RPM (fan at 100% duty- |
|
cycle) of the input. The chip adjusts the sampling rate based on this value. |
|
|
|
|
|
PWM Output Control |
|
------------------ |
|
|
|
This chip features 5 PWM outputs. PWM outputs 1-3 are associated with fan |
|
inputs 1-3 and PWM outputs 5-6 are associated with fan inputs 5-6. PWM outputs |
|
1-3 can be configured to operate either in manual or automatic mode by setting |
|
the appropriate enable attribute accordingly. PWM outputs 5-6 can only operate |
|
in manual mode, their enable attributes are therefore read-only. When set to |
|
manual mode, the fan speed is set by writing the duty-cycle value to the |
|
appropriate PWM attribute. In automatic mode, the PWM attribute returns the |
|
current duty-cycle as set by the fan controller in the chip. All PWM outputs |
|
support the setting of the output frequency via the freq attribute. |
|
|
|
In automatic mode, the chip supports the setting of the PWM ramp rate which |
|
defines how fast the PWM output is adjusting to changes of the associated |
|
temperature input. Associating PWM outputs to temperature inputs is done via |
|
temperature zones. The chip features 3 zones whose assignments to temperature |
|
inputs is static and determined during initialization. These assignments can |
|
be retrieved via the zone[1-3]_auto_channels_temp attributes. Each PWM output |
|
is assigned to one (or hottest of multiple) temperature zone(s) through the |
|
pwm[1-3]_auto_channels_zone attributes. Each PWM output has 3 distinct output |
|
duty-cycles: full, low, and min. Full is internally hard-wired to 255 (100%) |
|
and low and min can be programmed via pwm[1-3]_auto_point1_pwm and |
|
pwm[1-3]_auto_pwm_min, respectively. The thermal thresholds of the zones are |
|
programmed via zone[1-3]_auto_point[1-3]_temp and |
|
zone[1-3]_auto_point1_temp_hyst: |
|
|
|
=============================== ======================================= |
|
pwm[1-3]_auto_point2_pwm full-speed duty-cycle (255, i.e., 100%) |
|
pwm[1-3]_auto_point1_pwm low-speed duty-cycle |
|
pwm[1-3]_auto_pwm_min min-speed duty-cycle |
|
|
|
zone[1-3]_auto_point3_temp full-speed temp (all outputs) |
|
zone[1-3]_auto_point2_temp full-speed temp |
|
zone[1-3]_auto_point1_temp low-speed temp |
|
zone[1-3]_auto_point1_temp_hyst min-speed temp |
|
=============================== ======================================= |
|
|
|
The chip adjusts the output duty-cycle linearly in the range of auto_point1_pwm |
|
to auto_point2_pwm if the temperature of the associated zone is between |
|
auto_point1_temp and auto_point2_temp. If the temperature drops below the |
|
auto_point1_temp_hyst value, the output duty-cycle is set to the auto_pwm_min |
|
value which only supports two values: 0 or auto_point1_pwm. That means that the |
|
fan either turns completely off or keeps spinning with the low-speed |
|
duty-cycle. If any of the temperatures rise above the auto_point3_temp value, |
|
all PWM outputs are set to 100% duty-cycle. |
|
|
|
Following is another representation of how the chip sets the output duty-cycle |
|
based on the temperature of the associated thermal zone: |
|
|
|
=============== =============== ================= |
|
Temperature Duty-Cycle Duty-Cycle |
|
Rising Temp Falling Temp |
|
=============== =============== ================= |
|
full-speed full-speed full-speed |
|
|
|
- < linearly - |
|
adjusted |
|
duty-cycle > |
|
|
|
low-speed low-speed low-speed |
|
- min-speed low-speed |
|
min-speed min-speed min-speed |
|
- min-speed min-speed |
|
=============== =============== ================= |
|
|
|
|
|
Sysfs Attributes |
|
---------------- |
|
|
|
Following is a list of all sysfs attributes that the driver provides, their |
|
permissions and a short description: |
|
|
|
=============================== ======= ======================================= |
|
Name Perm Description |
|
=============================== ======= ======================================= |
|
cpu0_vid RO CPU core reference voltage in |
|
millivolts. |
|
vrm RW Voltage regulator module version |
|
number. |
|
|
|
in[0-7]_input RO Measured voltage in millivolts. |
|
in[0-7]_min RW Low limit for voltage input. |
|
in[0-7]_max RW High limit for voltage input. |
|
in[0-7]_alarm RO Voltage input alarm. Returns 1 if |
|
voltage input is or went outside the |
|
associated min-max range, 0 otherwise. |
|
|
|
temp[1-3]_input RO Measured temperature in millidegree |
|
Celsius. |
|
temp[1-3]_min RW Low limit for temp input. |
|
temp[1-3]_max RW High limit for temp input. |
|
temp[1-3]_offset RW Offset for temp input. This value will |
|
be added by the chip to the measured |
|
temperature. |
|
temp[1-3]_alarm RO Alarm for temp input. Returns 1 if temp |
|
input is or went outside the associated |
|
min-max range, 0 otherwise. |
|
temp[1-3]_fault RO Temp input fault. Returns 1 if the chip |
|
detects a faulty thermal diode or an |
|
unconnected temp input, 0 otherwise. |
|
|
|
zone[1-3]_auto_channels_temp RO Temperature zone to temperature input |
|
mapping. This attribute is a bitfield |
|
and supports the following values: |
|
|
|
- 1: temp1 |
|
- 2: temp2 |
|
- 4: temp3 |
|
zone[1-3]_auto_point1_temp_hyst RW Auto PWM temp point1 hysteresis. The |
|
output of the corresponding PWM is set |
|
to the pwm_auto_min value if the temp |
|
falls below the auto_point1_temp_hyst |
|
value. |
|
zone[1-3]_auto_point[1-3]_temp RW Auto PWM temp points. Auto_point1 is |
|
the low-speed temp, auto_point2 is the |
|
full-speed temp, and auto_point3 is the |
|
temp at which all PWM outputs are set |
|
to full-speed (100% duty-cycle). |
|
|
|
fan[1-6]_input RO Measured fan speed in RPM. |
|
fan[1-6]_min RW Low limit for fan input. |
|
fan[1-6]_alarm RO Alarm for fan input. Returns 1 if fan |
|
input is or went below the associated |
|
min value, 0 otherwise. |
|
fan[1-4]_type RW Type of attached fan. Expressed in |
|
number of pulses per revolution that |
|
the fan generates. Supported values are |
|
1, 2, and 4. |
|
fan[5-6]_max RW Max attainable RPM at 100% duty-cycle. |
|
Required for chip to adjust the |
|
sampling rate accordingly. |
|
|
|
pmw[1-3,5-6] RO/RW Duty-cycle of PWM output. Supported |
|
values are 0-255 (0%-100%). Only |
|
writeable if the associated PWM is in |
|
manual mode. |
|
pwm[1-3]_enable RW Enable of PWM outputs 1-3. Supported |
|
values are: |
|
|
|
- 0: turned off (output @ 100%) |
|
- 1: manual mode |
|
- 2: automatic mode |
|
pwm[5-6]_enable RO Enable of PWM outputs 5-6. Always |
|
returns 1 since these 2 outputs are |
|
hard-wired to manual mode. |
|
pmw[1-3,5-6]_freq RW Frequency of PWM output. Supported |
|
values are in the range 11Hz-30000Hz |
|
(default is 25000Hz). |
|
pmw[1-3]_ramp_rate RW Ramp rate of PWM output. Determines how |
|
fast the PWM duty-cycle will change |
|
when the PWM is in automatic mode. |
|
Expressed in ms per PWM step. Supported |
|
values are in the range 0ms-206ms |
|
(default is 0, which means the duty- |
|
cycle changes instantly). |
|
pwm[1-3]_auto_channels_zone RW PWM output to temperature zone mapping. |
|
This attribute is a bitfield and |
|
supports the following values: |
|
|
|
- 1: zone1 |
|
- 2: zone2 |
|
- 4: zone3 |
|
- 6: highest of zone[2-3] |
|
- 7: highest of zone[1-3] |
|
pwm[1-3]_auto_pwm_min RW Auto PWM min pwm. Minimum PWM duty- |
|
cycle. Supported values are 0 or |
|
auto_point1_pwm. |
|
pwm[1-3]_auto_point1_pwm RW Auto PWM pwm point. Auto_point1 is the |
|
low-speed duty-cycle. |
|
pwm[1-3]_auto_point2_pwm RO Auto PWM pwm point. Auto_point2 is the |
|
full-speed duty-cycle which is hard- |
|
wired to 255 (100% duty-cycle). |
|
=============================== ======= ======================================= |
|
|
|
Chip Differences |
|
---------------- |
|
|
|
======================= ======= ======= ======= ======= |
|
Feature dme1737 sch311x sch5027 sch5127 |
|
======================= ======= ======= ======= ======= |
|
temp[1-3]_offset yes yes |
|
vid yes |
|
zone3 yes yes yes |
|
zone[1-3]_hyst yes yes |
|
pwm min/off yes yes |
|
fan3 opt yes opt yes |
|
pwm3 opt yes opt yes |
|
fan4 opt opt |
|
fan5 opt opt |
|
pwm5 opt opt |
|
fan6 opt opt |
|
pwm6 opt opt |
|
in7 yes |
|
======================= ======= ======= ======= =======
|
|
|