2
0
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:
Frodo Looijaard
1999-02-09 23:57:27 +00:00
parent ed5aeab91c
commit 9f600e9c2c
4 changed files with 157 additions and 121 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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 },

View File

@@ -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);