mirror of
https://github.com/lm-sensors/lm-sensors
synced 2025-08-30 22:05:11 +00:00
Documentation updates, small bug fixes
I am trying to create a more-or-less standard documentation format for doc/chips/* files. I am not quite satisfied with the lm75 and lm78 docs yet, but it is starting to come. Basically, I want as much information in it as possible, and to generate most of it automatically. But that is harder than I though it would be. Also, a small library bugfix (class problem) and a doc-features fix. git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@210 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
@@ -1,24 +1,29 @@
|
||||
This file documents the lm75 directories.
|
||||
Kernel driver `lm75.o'
|
||||
|
||||
There will be one directory created for each detected LM75 chip. As LM75
|
||||
chips can only be on a SMBus, they will be called lm75-i2c-?-??, with
|
||||
the first question mark being the number of the i2c bus (see /proc/bus/i2c
|
||||
for a list of them, if i2c-proc is loaded), and the SMBus (I2C) address
|
||||
of the chip at the end. An LM75 is uniquely characterised with these
|
||||
two numbers. /proc/sys/dev/sensors/chips contains the SYSCTL values for
|
||||
all chip directories.
|
||||
Prefixes: lm75 (LM75, I2C)
|
||||
|
||||
Within each LM75 directory, you can find the following files:
|
||||
* temp (LM75_SYSCTL_TEMP)
|
||||
A list of three numbers. The first number is the Overtemperature Shutdown
|
||||
value, the second number is Hysteris value, and the third number is the
|
||||
current temperature. The first two values can be modified. Each value can
|
||||
be set and read to half-degree accuracy. All values are in degrees Celcius.
|
||||
An alarm is issued (usually to a connected LM78) when the temperature
|
||||
gets higher then the Overtemperature Shutdown value; it stays on until
|
||||
the temperature falls below the Hysteris value.
|
||||
If accessed through sysctl, this is a list of longs, each being the
|
||||
temperature times 10.
|
||||
This driver implements support for the National Semiconductor LM75, a
|
||||
`Digital Temperature Sensor and Thermal Watchdog with Two-Wire Interface'.
|
||||
|
||||
The data for each LM75 is updated each 1.5 seconds, but only if it is actually
|
||||
read.
|
||||
The LM75 implements one temperature sensor. Limits can be set through the
|
||||
Overtemperature Shutdown register and Hysteris register. Each value can be
|
||||
set and read to half-degree accuracy.
|
||||
An alarm is issued (usually to a connected LM78) when the temperature
|
||||
gets higher then the Overtemperature Shutdown value; it stays on until
|
||||
the temperature falls below the Hysteris value.
|
||||
All temperatures are in degrees Celcius.
|
||||
|
||||
The LM75 only updates its values each 1.5 seconds; reading it more often
|
||||
will do no harm, but will return 'old' values.
|
||||
|
||||
|
||||
/proc and sysctl interface files:
|
||||
* temp (LM75_SYSCTL_TEMP)
|
||||
Overtemperature Shutdown Value (RW,1), Hysteris Value (RW,1) and Current
|
||||
Temperature (R,1).
|
||||
|
||||
configuration file features:
|
||||
NAME LABEL CLASS COMPUTE CLASS RW
|
||||
temp: R
|
||||
temp_hyst: temp temp RW
|
||||
temp_over: temp temp RW
|
||||
|
204
doc/chips/lm78
204
doc/chips/lm78
@@ -1,89 +1,121 @@
|
||||
This file documents the lm78 directories.
|
||||
Kernel driver `lm78.o'
|
||||
|
||||
There will be one directory created for each detected LM78, LM78-J or LM79
|
||||
chip. Each chip can both be on the ISA bus and the SMBus. Directories
|
||||
are called things like lm78-isa-0290, lm78-j-i2c-3-4e or lm79-isa-0280.
|
||||
/proc/sys/dev/sensors/chips contains the SYSCTL values for all chip
|
||||
directories.
|
||||
Prefixes: lm78 (LM78, I2C and ISA)
|
||||
lm78-j (LM78-J, I2C and ISA)
|
||||
lm79 (LM79, I2C and ISA)
|
||||
|
||||
Within each LM78 directory, you can find the following files:
|
||||
* alarms (LM78_SYSCTL_ALARMS)
|
||||
A number which indicates which alarms are on. An alarm gets triggered when
|
||||
some limit has been crossed. Even if the cause of the alarm is over, it
|
||||
stays triggered until it has been read at least once. Because the LM78
|
||||
values are updated at most once every 1.5 seconds, this means the alarm
|
||||
can be read several times before it is erased.
|
||||
This file can not be written to.
|
||||
The number is the logical OR of the following components:
|
||||
- LM78_ALARM_IN[0-6]
|
||||
Gets triggered when the corresponding in value is higher or lower than
|
||||
its limits
|
||||
- LM78_ALARM_FAN[1-3]
|
||||
Gets triggered when the corresponding fan value is lower than its limit
|
||||
- LM78_ALARM_TEMP
|
||||
Gets triggered when the temp value has crossed its limits. See the
|
||||
description under temp.
|
||||
- LM78_ALARM_BTI
|
||||
Gets triggered if some other chip which is connected to it has crossed
|
||||
its limits. Usually, it is connected to all LM75 chips; if at least one
|
||||
crosses its limits, this bit gets set.
|
||||
- LM78_ALARM_CHAS
|
||||
Gets triggered if someone opens your computer case (if connected at all).
|
||||
- LM78_ALARM_FIFO
|
||||
Gets triggered if something is very wrong with our LM78 driver. Ignore.
|
||||
- LM78_ALARM_SMI_IN
|
||||
Gets triggered if some other chip has triggered a SMI interrupt. Can be
|
||||
ignored.
|
||||
If accessed through sysctl, this value is a long.
|
||||
* fan[1-3] (LM78_SYSCTL_FAN[1-3])
|
||||
A list of two numbers. The first is the minimum fan rotation limit; the
|
||||
second is the current fan rotation speed. Both are in RPM (rotation per
|
||||
minute). An alarm is triggered if the rotation speed drops below the
|
||||
limit. The first value can be changed. Not all RPM values can accurately
|
||||
be represented, so some rounding is done.
|
||||
If accessed through sysctl, this is a list of longs.
|
||||
* fan_div (LM78_SYSCTL_FAN_DIV)
|
||||
A list of three numbers, one for each fan. Each number can be either 1, 2,
|
||||
4 or 8. It is the internal scaling factor used for the FAN rotations. If
|
||||
you change this number, the FAN readings get more or less detailed, but
|
||||
the range in which they can be read too. Higher numbers give better
|
||||
resolution, but less range. The first two numbers can be changed, the
|
||||
third not.
|
||||
If accessed through sysctl, this is a list of longs.
|
||||
* in[0-6] (LM78_SYSCTL_IN[0-6])
|
||||
A list of three numbers. The first is the minimum limit, the second is the
|
||||
maximum limit, and the third is the current value. If you have a weird
|
||||
mainboard, all values may be off because some other scaling factor has
|
||||
to be used; user-space programs should compensate for this. Note that
|
||||
minimum means 'closest to zero'; so if the normal value equals -10, a
|
||||
minimum could equal -9, and a maximum -11. IN0 and IN1 reflect core
|
||||
voltages; they are by default set from the vid values, or set to 2.80V
|
||||
if the vid lines seem to be unconnected. IN2 should equal +3.30V,
|
||||
IN3 +5.00V, IN4 +12.00V, IN5 -12.00V and IN6 -5V. Not all voltage values
|
||||
can be accurately represented, so some rounding is done.
|
||||
The first two numbers can be changed, the third not.
|
||||
If accessed through sysctl, this is a list of longs, each being the voltage
|
||||
times 100.
|
||||
* temp
|
||||
A list of three numbers. The first number is the Overtemperature Shutdown
|
||||
value; the second is the Hysteris value and the third number is the
|
||||
current value. The first two values can be modified. All values are in
|
||||
degrees Celcius. An alarm is issued when the temperature first gets above
|
||||
the Overtemperature Shutdown value; no more alarms are issued until the
|
||||
temperature gets below the Hysteris value, at which moment another alarm
|
||||
is issued, and the state is reset. A more useful behaviour can be found
|
||||
by setting the Hysteris value to +127 degrees Celcius; in this case,
|
||||
alarms are issued during all the time when the actual temperature is
|
||||
above the Overtemperature Shutdown value.
|
||||
The first two numbers can be changed, the third not.
|
||||
If accessed through sysctl, this is a list of longs, each being the
|
||||
temperature in degrees Celcius times 10.
|
||||
* vid
|
||||
The core voltage value (the voltage level your processor should work with),
|
||||
in volts. This is the value IN0 and IN1 are initialized to. If unconnected,
|
||||
it usually reads 3.50V.
|
||||
This number can not be changed.
|
||||
If accessed through sysctl, this is a long, being the voltage times 100.
|
||||
This driver implements support for the National Semiconductor LM78, LM78-J
|
||||
and LM79. They are described as `Microprocessor System Hardware Monitors'.
|
||||
|
||||
The data for each LM78 is updated each 1.5 seconds, but only if it is actually
|
||||
read.
|
||||
There is almost no difference between these three chips. Functionally, the
|
||||
LM78 and LM78-J are exactly identical. The LM79 has one more VID line,
|
||||
which is used to report the lower voltages newer Pentium processors use.
|
||||
From now on, LM7* means either of these three types.
|
||||
|
||||
The LM7* implements one temperatur sensor, three FAN rotation speed sensors,
|
||||
seven voltage sensors, VID lines, alarms, and some miscellaneous stuff.
|
||||
|
||||
Temperatures are measured in degrees Celcius. An alarm is triggered once
|
||||
when the Overtemperature Shutdown limit is crossed; it is triggered again
|
||||
as soon as it drops below the Hysteris value. A more useful behaviour
|
||||
can be found by setting the Hysteris value to +127 degrees Celcius; in
|
||||
this case, alarms are issued during all the time when the actual temperature \
|
||||
is above the Overtemperature Shutdown value.
|
||||
|
||||
FAN rotation speeds are reported in RPM (rotations per minute). An alarm is
|
||||
triggered if the rotation speed has dropped below a programmable 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 imporatant because some FANs
|
||||
report only one 'tick' each rotation, while others report two - making
|
||||
all readings twice as high. Not all RPM values can accurately be represented,
|
||||
so some rounding is done.
|
||||
|
||||
Voltage sensors (also known as IN 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 VID lines encode the core voltage value: the voltage level your processor
|
||||
should work with. This is hardcoded by the mainboard and/or processor itself.
|
||||
It is a value in volts.
|
||||
|
||||
In addition to the alarms described above, there are a couple of additional
|
||||
ones. There is a BTI alarm, which gets triggered when an external chip has
|
||||
crossed its limits. Usually, this is connected to all LM75 chips; if at
|
||||
least one crosses its limits, this bit gets set. The CHAS alarm triggers
|
||||
if your computer case is open. The FIFO alarms should never trigger; it
|
||||
indicates an internal error. The SMI_IN alarm indicates some other chip
|
||||
has triggered an SMI interrupt. As we do not use SMI interrupts at all,
|
||||
this condition usually indicates there is a problem with some other
|
||||
device.
|
||||
|
||||
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 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 LM7* only updates its values each 1.5 seconds; reading it more often
|
||||
will do no harm, but will return 'old' values.
|
||||
|
||||
|
||||
/proc and sysctl interface files:
|
||||
* alarms (LM78_SYSCTL_ALARMS)
|
||||
A single number (R,0) which indicates which alarms are currently
|
||||
triggered. It is a logical OR of the following bit values:
|
||||
LM78_ALARM_BTI, LM78_ALARM_CHAS, LM78_ALARM_FIFO, LM78_ALARM_SMI_IN,
|
||||
LM78_ALARMS_IN[0-6], LM78_ALARM_FAN[1-3], LM78_ALARM_TEMP
|
||||
* fan[1-3] (LM78_SYSCTL_FAN[1-3])
|
||||
The Fan Low Limit (RW,0) and Current Fan Reading (R,0).
|
||||
* fan_div (LM78_SYSCTL_FAN_DIV)
|
||||
The FAN1 Scaling Factor (RW,0), FAN2 Scaling Factor (RW,0) and FAN3 Scaling
|
||||
Factor (RW,0).
|
||||
* in[0-6] (LM78_SYSCTL_IN[0-6])
|
||||
The Voltage Low Limit (RW,2), Voltage High Limit (RW,2) and Current
|
||||
Voltage Reading (R,2).
|
||||
* temp
|
||||
The Overtemperature Shutdown Value (RW,1), Hysteris Value (RW,1) and
|
||||
Current Temperature (R,1).
|
||||
* vid
|
||||
The Core Voltage Value (R,2).
|
||||
|
||||
|
||||
configuration file features:
|
||||
|
||||
NAME LABEL CLASS COMPUTE CLASS RW
|
||||
alarms: R
|
||||
fan1: R
|
||||
fan1_div: fan1 RW
|
||||
fan1_min: fan1 RW
|
||||
fan2: R
|
||||
fan2_div: fan2 RW
|
||||
fan2_min: fan2 RW
|
||||
fan3: R
|
||||
fan3_div: fan3 R
|
||||
fan3_min: fan3 RW
|
||||
in0: R
|
||||
in0_max: in0 in0 RW
|
||||
in0_min: in0 in0 RW
|
||||
in1: R
|
||||
in1_max: in1 in1 RW
|
||||
in1_min: in1 in1 RW
|
||||
in2: R
|
||||
in2_max: in2 in2 RW
|
||||
in2_min: in2 in2 RW
|
||||
in3: R
|
||||
in3_max: in3 in3 RW
|
||||
in3_min: in3 in3 RW
|
||||
in4: R
|
||||
in4_max: in4 in4 RW
|
||||
in4_min: in4 in4 RW
|
||||
in5: R
|
||||
in5_max: in5 in5 RW
|
||||
in5_min: in5 in5 RW
|
||||
in6: R
|
||||
in6_max: in6 in6 RW
|
||||
in6_min: in6 in6 RW
|
||||
temp: R
|
||||
temp_hyst: temp temp RW
|
||||
temp_over: temp temp RW
|
||||
vid: R
|
||||
|
18
lib/chips.c
18
lib/chips.c
@@ -88,11 +88,11 @@ static sensors_chip_feature lm78_features[] =
|
||||
SENSORS_MODE_R, LM78_SYSCTL_FAN2, VALUE(2), 0 },
|
||||
{ SENSORS_LM78_FAN3, "fan3", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
|
||||
SENSORS_MODE_R, LM78_SYSCTL_FAN3, VALUE(2), 0 },
|
||||
{ SENSORS_LM78_FAN1_MIN, "fan1_min", SENSORS_LM78_FAN1, SENSORS_NO_MAPPING,
|
||||
{ SENSORS_LM78_FAN1_MIN, "fan1_min", SENSORS_LM78_FAN1, SENSORS_LM78_FAN1,
|
||||
SENSORS_MODE_RW, LM78_SYSCTL_FAN1, VALUE(1), 0 },
|
||||
{ SENSORS_LM78_FAN2_MIN, "fan2_min", SENSORS_LM78_FAN2, SENSORS_NO_MAPPING,
|
||||
{ SENSORS_LM78_FAN2_MIN, "fan2_min", SENSORS_LM78_FAN2, SENSORS_LM78_FAN2,
|
||||
SENSORS_MODE_RW, LM78_SYSCTL_FAN2, VALUE(1), 0 },
|
||||
{ SENSORS_LM78_FAN3_MIN, "fan3_min", SENSORS_LM78_FAN3, SENSORS_NO_MAPPING,
|
||||
{ SENSORS_LM78_FAN3_MIN, "fan3_min", SENSORS_LM78_FAN3, SENSORS_LM78_FAN3,
|
||||
SENSORS_MODE_RW, LM78_SYSCTL_FAN3, VALUE(1), 0 },
|
||||
{ SENSORS_LM78_TEMP, "temp", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
|
||||
SENSORS_MODE_R, LM78_SYSCTL_TEMP, VALUE(3), 1 },
|
||||
@@ -169,13 +169,13 @@ static sensors_chip_feature lm78j_features[] =
|
||||
{ SENSORS_LM78J_FAN3, "fan3", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
|
||||
SENSORS_MODE_R, LM78_SYSCTL_FAN3, VALUE(2), 0 },
|
||||
{ SENSORS_LM78J_FAN1_MIN, "fan1_min", SENSORS_LM78J_FAN1,
|
||||
SENSORS_NO_MAPPING, SENSORS_MODE_RW,
|
||||
SENSORS_LM78J_FAN1, SENSORS_MODE_RW,
|
||||
LM78_SYSCTL_FAN1, VALUE(1), 0 },
|
||||
{ SENSORS_LM78J_FAN2_MIN, "fan2_min", SENSORS_LM78J_FAN2,
|
||||
SENSORS_NO_MAPPING, SENSORS_MODE_RW,
|
||||
SENSORS_LM78J_FAN2, SENSORS_MODE_RW,
|
||||
LM78_SYSCTL_FAN2, VALUE(1), 0 },
|
||||
{ SENSORS_LM78J_FAN3_MIN, "fan3_min", SENSORS_LM78J_FAN3,
|
||||
SENSORS_NO_MAPPING, SENSORS_MODE_RW,
|
||||
SENSORS_LM78J_FAN3, SENSORS_MODE_RW,
|
||||
LM78_SYSCTL_FAN3, VALUE(1), 0 },
|
||||
{ SENSORS_LM78J_TEMP, "temp", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
|
||||
SENSORS_MODE_R, LM78_SYSCTL_TEMP, VALUE(3), 1 },
|
||||
@@ -251,11 +251,11 @@ static sensors_chip_feature lm79_features[] =
|
||||
SENSORS_MODE_R, LM78_SYSCTL_FAN2, VALUE(2), 0 },
|
||||
{ SENSORS_LM79_FAN3, "fan3", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
|
||||
SENSORS_MODE_R, LM78_SYSCTL_FAN3, VALUE(2), 0 },
|
||||
{ SENSORS_LM79_FAN1_MIN, "fan1_min", SENSORS_LM79_FAN1, SENSORS_NO_MAPPING,
|
||||
{ SENSORS_LM79_FAN1_MIN, "fan1_min", SENSORS_LM79_FAN1, SENSORS_LM79_FAN1,
|
||||
SENSORS_MODE_RW, LM78_SYSCTL_FAN1, VALUE(1), 0 },
|
||||
{ SENSORS_LM79_FAN2_MIN, "fan2_min", SENSORS_LM79_FAN2, SENSORS_NO_MAPPING,
|
||||
{ SENSORS_LM79_FAN2_MIN, "fan2_min", SENSORS_LM79_FAN2, SENSORS_LM79_FAN2,
|
||||
SENSORS_MODE_RW, LM78_SYSCTL_FAN2, VALUE(1), 0 },
|
||||
{ SENSORS_LM79_FAN3_MIN, "fan3_min", SENSORS_LM79_FAN3, SENSORS_NO_MAPPING,
|
||||
{ SENSORS_LM79_FAN3_MIN, "fan3_min", SENSORS_LM79_FAN3, SENSORS_LM79_FAN3,
|
||||
SENSORS_MODE_RW, LM78_SYSCTL_FAN3, VALUE(1), 0 },
|
||||
{ SENSORS_LM79_TEMP, "temp", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
|
||||
SENSORS_MODE_R, LM78_SYSCTL_TEMP, VALUE(3), 1 },
|
||||
|
@@ -51,11 +51,10 @@ const char *mode_string(int mode)
|
||||
void dump_feature(const sensors_chip_feature *featuredata,
|
||||
const sensors_chip_features *chipdata)
|
||||
{
|
||||
printf(" %17s: %17s %17s %2s %2d\n",featuredata->name,
|
||||
printf(" %17s: %17s %17s %2s\n",featuredata->name,
|
||||
lookup_feature_name(featuredata->logical_mapping,chipdata),
|
||||
lookup_feature_name(featuredata->compute_mapping,chipdata),
|
||||
mode_string(featuredata->mode),
|
||||
featuredata->scaling);
|
||||
mode_string(featuredata->mode));
|
||||
}
|
||||
|
||||
int qsort_compare (const void *f1, const void *f2)
|
||||
@@ -77,8 +76,8 @@ void dump_chip (const sensors_chip_features *chipdata)
|
||||
qsort(features,i,sizeof(*features),qsort_compare);
|
||||
|
||||
printf("Chip `%s'\n",chipdata->prefix);
|
||||
printf(" %17s %17s %17s %2s %s\n","NAME","LABEL CLASS","COMPUTE CLASS",
|
||||
"RW","SCALE");
|
||||
printf(" %17s %17s %17s %2s\n","NAME","LABEL CLASS","COMPUTE CLASS",
|
||||
"RW");
|
||||
for (i = 0; features[i]->name; i++)
|
||||
dump_feature(features[i],chipdata);
|
||||
|
||||
|
Reference in New Issue
Block a user