ADM9240/DS1780 documentation and library support

* Readings for the ADM9240 are now updated every 0.5 seconds; for the
  DS1780, every 2.0 seconds.
* I still think it likely that voltage readings will be far-off in the
  current implementation


git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@401 7894878c-1315-0410-8ee3-d5d059ff63e0
This commit is contained in:
Frodo Looijaard committed 1999-04-20 15:33:04 +00:00
1 parent d70c450c78
commit 084ee510ab
4 files changed
+364 -5

No files matched your search

+240 -2
View File
@@ -1,5 +1,243 @@
adm9240 driver
--------------
Kernel driver `lm78.o'
======================
Status: Complete and tested
Supported chips:
* Analog Devices ADM9240
Prefix `adm9240'
Addresses scanned: I2C 0x2c - 0x2f (inclusive)
Datasheet: Publicly available at the Analog Devices website
* Dallas Semiconductor DS1780
Prefix `ds1780'
Addresses scanned: I2C 0x2c - 0x2f (inclusive)
Datasheet: Publicly available at the Dallas Semiconductor website
Author: Frodo Looijaard <frodol@dds.nl> and Philip Edelbrock
<phil@netroedge.com>
Module Parameters
-----------------
* force: short array (min = 1, max = 48)
List of adapter,address pairs to boldly assume to be present
* force_adm9240: short array (min = 1, max = 48)
List of adapter,address pairs which are unquestionably assumed to contain
a `adm9240' chip
* force_ds1780: short array (min = 1, max = 48)
List of adapter,address pairs which are unquestionably assumed to contain
a `ds1780' chip
* ignore: short array (min = 1, max = 48)
List of adapter,address pairs not to scan
* ignore_range: short array (min = 1, max = 48)
List of adapter,start-addr,end-addr triples not to scan
* probe: short array (min = 1, max = 48)
List of adapter,address pairs to scan additionally
* probe_range: short array (min = 1, max = 48)
List of adapter,start-addr,end-addr triples to scan additionally
Description
-----------
This driver implements support for the Analog Devices ADM9240 and
Dallas Semiconductor DS1780 chips. These chips appear to be completely
identical, except for the manufacturer IDs encoded in two registers, and
the speed with which they update their sensor readings.
The ADM9240 and DS1780 implement six voltage sensors, a temperature sensor,
two FAN rotation speed sensors, VID lines and some miscellaneous stuff.
Temperatures are measured in degrees Celcius. An alarm is triggered whenever
the temperature is above the hot limit, and will continue to be generated
until the temperature has dropped beneath the hysteris limit. Measurements
are guaranteed between -40 and +125 degrees. The current temperature
has a resolution of 0.5 degrees, the limits of 1 degree.
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 important 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. With a divider of 2, the lowest representable
value is around 2600 RPM.
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.
IMPORTANT: The current voltage measurement system is very probably broken.
Please report back to us if you have a ADM9240 or DS1780!
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. When it is unconnected, you will often find the
value 3.50 V here.
The analog output can be programmed separatedly. It can take values
between 0 and 255. What it actually does is mainboard-dependent; it
might influence the FAN-speed. Please report to us whether this is
the case with your ADM9240.
In addition to the alarms described above, the CHAS alarm triggers
if your computer case is open.
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.
Thes ADM9240 only updates its values every 0.5 seconds; the DS1760 one
every 2 seconds; reading them more often will do no harm, but will return
'old' values. (NB: theoretically, this could be done much faster for the
ADM9240, but there is no real reason to do so, and this way the SMBus use
is kept within reasonable limits)
Chip Features
-------------
Chip `adm9240'
LABEL LABEL CLASS COMPUTE CLASS ACCESS MAGNITUDE
2.5V NONE NONE R 2
Vccp1 NONE NONE R 2
3.3V NONE NONE R 2
5V NONE NONE R 2
12V NONE NONE R 2
Vccp2 NONE NONE R 2
2.5V_min 2.5V 2.5V RW 2
Vccp1_min Vccp1 Vccp1 RW 2
3.3V_min 3.3V 3.3V RW 2
5V_min 5V 5V RW 2
12V_min 12V 12V RW 2
Vccp2_min Vccp2 Vccp2 RW 2
2.5V_max 2.5V 2.5V RW 2
Vccp1_max Vccp1 Vccp1 RW 2
3.3V_max 3.3V 3.3V RW 2
5V_max 5V 5V RW 2
12V_max 12V 12V RW 2
Vccp2_max Vccp2 Vccp2 RW 2
fan1 NONE NONE R 0
fan2 NONE NONE R 0
fan1_min fan1 fan1 RW 0
fan2_min fan2 fan2 RW 0
temp NONE NONE R 1
temp_hyst temp temp RW 1
temp_over temp temp RW 1
vid NONE NONE R 2
fan1_div fan1 NONE RW 0
fan2_div fan2 NONE RW 0
alarms NONE NONE R 0
analog_out NONE NONE RW 0
LABEL FEATURE SYMBOL SYSCTL FILE:NR
2.5V SENSORS_ADM9240_IN0 2.5V:3
Vccp1 SENSORS_ADM9240_IN1 Vccp1:3
3.3V SENSORS_ADM9240_IN2 3.3V:3
5V SENSORS_ADM9240_IN3 5V:3
12V SENSORS_ADM9240_IN4 12V:3
Vccp2 SENSORS_ADM9240_IN5 Vccp2:3
2.5V_min SENSORS_ADM9240_IN0_MIN 2.5V:1
Vccp1_min SENSORS_ADM9240_IN1_MIN Vccp1:1
3.3V_min SENSORS_ADM9240_IN2_MIN 3.3V:1
5V_min SENSORS_ADM9240_IN3_MIN 5V:1
12V_min SENSORS_ADM9240_IN4_MIN 12V:1
Vccp2_min SENSORS_ADM9240_IN5_MIN Vccp2:1
2.5V_max SENSORS_ADM9240_IN0_MAX 2.5V:2
Vccp1_max SENSORS_ADM9240_IN1_MAX Vccp1:2
3.3V_max SENSORS_ADM9240_IN2_MAX 3.3V:2
5V_max SENSORS_ADM9240_IN3_MAX 5V:2
12V_max SENSORS_ADM9240_IN4_MAX 12V:2
Vccp2_max SENSORS_ADM9240_IN5_MAX Vccp2:2
fan1 SENSORS_ADM9240_FAN1 fan1:2
fan2 SENSORS_ADM9240_FAN2 fan2:2
fan1_min SENSORS_ADM9240_FAN1_MIN fan1:1
fan2_min SENSORS_ADM9240_FAN2_MIN fan2:1
temp SENSORS_ADM9240_TEMP temp:3
temp_hyst SENSORS_ADM9240_TEMP_HYST temp:2
temp_over SENSORS_ADM9240_TEMP_OVER temp:1
vid SENSORS_ADM9240_VID vid:1
fan1_div SENSORS_ADM9240_FAN1_DIV fan_div:1
fan2_div SENSORS_ADM9240_FAN2_DIV fan_div:2
alarms SENSORS_ADM9240_ALARMS alarms:1
analog_out SENSORS_ADM9240_ANALOG_OUT analog_out:1
Chip `ds1780'
LABEL LABEL CLASS COMPUTE CLASS ACCESS MAGNITUDE
2.5V NONE NONE R 2
Vccp1 NONE NONE R 2
3.3V NONE NONE R 2
5V NONE NONE R 2
12V NONE NONE R 2
Vccp2 NONE NONE R 2
2.5V_min 2.5V 2.5V RW 2
Vccp1_min Vccp1 Vccp1 RW 2
3.3V_min 3.3V 3.3V RW 2
5V_min 5V 5V RW 2
12V_min 12V 12V RW 2
Vccp2_min Vccp2 Vccp2 RW 2
2.5V_max 2.5V 2.5V RW 2
Vccp1_max Vccp1 Vccp1 RW 2
3.3V_max 3.3V 3.3V RW 2
5V_max 5V 5V RW 2
12V_max 12V 12V RW 2
Vccp2_max Vccp2 Vccp2 RW 2
fan1 NONE NONE R 0
fan2 NONE NONE R 0
fan1_min fan1 fan1 RW 0
fan2_min fan2 fan2 RW 0
temp NONE NONE R 1
temp_hyst temp temp RW 1
temp_over temp temp RW 1
vid NONE NONE R 2
fan1_div fan1 NONE RW 0
fan2_div fan2 NONE RW 0
alarms NONE NONE R 0
analog_out NONE NONE RW 0
LABEL FEATURE SYMBOL SYSCTL FILE:NR
2.5V SENSORS_DS1780_IN0 2.5V:3
Vccp1 SENSORS_DS1780_IN1 Vccp1:3
3.3V SENSORS_DS1780_IN2 3.3V:3
5V SENSORS_DS1780_IN3 5V:3
12V SENSORS_DS1780_IN4 12V:3
Vccp2 SENSORS_DS1780_IN5 Vccp2:3
2.5V_min SENSORS_DS1780_IN0_MIN 2.5V:1
Vccp1_min SENSORS_DS1780_IN1_MIN Vccp1:1
3.3V_min SENSORS_DS1780_IN2_MIN 3.3V:1
5V_min SENSORS_DS1780_IN3_MIN 5V:1
12V_min SENSORS_DS1780_IN4_MIN 12V:1
Vccp2_min SENSORS_DS1780_IN5_MIN Vccp2:1
2.5V_max SENSORS_DS1780_IN0_MAX 2.5V:2
Vccp1_max SENSORS_DS1780_IN1_MAX Vccp1:2
3.3V_max SENSORS_DS1780_IN2_MAX 3.3V:2
5V_max SENSORS_DS1780_IN3_MAX 5V:2
12V_max SENSORS_DS1780_IN4_MAX 12V:2
Vccp2_max SENSORS_DS1780_IN5_MAX Vccp2:2
fan1 SENSORS_DS1780_FAN1 fan1:2
fan2 SENSORS_DS1780_FAN2 fan2:2
fan1_min SENSORS_DS1780_FAN1_MIN fan1:1
fan2_min SENSORS_DS1780_FAN2_MIN fan2:1
temp SENSORS_DS1780_TEMP temp:3
temp_hyst SENSORS_DS1780_TEMP_HYST temp:2
temp_over SENSORS_DS1780_TEMP_OVER temp:1
vid SENSORS_DS1780_VID vid:1
fan1_div SENSORS_DS1780_FAN1_DIV fan_div:1
fan2_div SENSORS_DS1780_FAN2_DIV fan_div:2
alarms SENSORS_DS1780_ALARMS alarms:1
analog_out SENSORS_DS1780_ANALOG_OUT analog_out:1
Old Documentation
-----------------
Supports the Analog Devices ADM9240 and the Dallas Semiconductor DS1780.
These chips are apparently identical except for the manufacturer ID
register.
+1 -1
View File
@@ -549,7 +549,7 @@ void adm9240_update_client(struct i2c_client *client)
down(&data->update_lock);
if ((jiffies - data->last_updated > 2*HZ ) ||
if ((jiffies - data->last_updated > (data->type == adm9240?HZ/2:HZ*2) ) ||
(jiffies < data->last_updated) || ! data->valid) {
#ifdef DEBUG
+88 -2
View File
@@ -1039,10 +1039,10 @@ static sensors_chip_feature adm9240_features[] =
{ SENSORS_ADM9240_FAN2, "fan2", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
SENSORS_MODE_R, ADM9240_SYSCTL_FAN2, VALUE(2), 0 },
{ SENSORS_ADM9240_FAN1_MIN, "fan1_min", SENSORS_ADM9240_FAN1,
SENSORS_NO_MAPPING, SENSORS_MODE_RW,
SENSORS_ADM9240_FAN1, SENSORS_MODE_RW,
ADM9240_SYSCTL_FAN1, VALUE(1), 0 },
{ SENSORS_ADM9240_FAN2_MIN, "fan2_min", SENSORS_ADM9240_FAN2,
SENSORS_NO_MAPPING, SENSORS_MODE_RW,
SENSORS_ADM9240_FAN2, SENSORS_MODE_RW,
ADM9240_SYSCTL_FAN2, VALUE(1), 0 },
{ SENSORS_ADM9240_TEMP, "temp", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
SENSORS_MODE_R, ADM9240_SYSCTL_TEMP, VALUE(3), 1 },
@@ -1069,6 +1069,91 @@ static sensors_chip_feature adm9240_features[] =
{ 0 }
};
static sensors_chip_feature ds1780_features[] =
{
{ SENSORS_DS1780_IN0, "2.5V", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
SENSORS_MODE_R, ADM9240_SYSCTL_IN0, VALUE(3), 2 },
{ SENSORS_DS1780_IN1, "Vccp1", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
SENSORS_MODE_R, ADM9240_SYSCTL_IN1, VALUE(3), 2 },
{ SENSORS_DS1780_IN2, "3.3V", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
SENSORS_MODE_R, ADM9240_SYSCTL_IN2, VALUE(3), 2 },
{ SENSORS_DS1780_IN3, "5V", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
SENSORS_MODE_R, ADM9240_SYSCTL_IN3, VALUE(3), 2 },
{ SENSORS_DS1780_IN4, "12V", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
SENSORS_MODE_R, ADM9240_SYSCTL_IN4, VALUE(3), 2 },
{ SENSORS_DS1780_IN5, "Vccp2", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
SENSORS_MODE_R, ADM9240_SYSCTL_IN5, VALUE(3), 2 },
{ SENSORS_DS1780_IN0_MIN, "2.5V_min", SENSORS_DS1780_IN0,
SENSORS_DS1780_IN0, SENSORS_MODE_RW,
ADM9240_SYSCTL_IN0, VALUE(1), 2 },
{ SENSORS_DS1780_IN1_MIN, "Vccp1_min", SENSORS_DS1780_IN1,
SENSORS_DS1780_IN1, SENSORS_MODE_RW,
ADM9240_SYSCTL_IN1, VALUE(1), 2 },
{ SENSORS_DS1780_IN2_MIN, "3.3V_min", SENSORS_DS1780_IN2,
SENSORS_DS1780_IN2, SENSORS_MODE_RW,
ADM9240_SYSCTL_IN2, VALUE(1), 2 },
{ SENSORS_DS1780_IN3_MIN, "5V_min", SENSORS_DS1780_IN3,
SENSORS_DS1780_IN3, SENSORS_MODE_RW,
ADM9240_SYSCTL_IN3, VALUE(1), 2 },
{ SENSORS_DS1780_IN4_MIN, "12V_min", SENSORS_DS1780_IN4,
SENSORS_DS1780_IN4, SENSORS_MODE_RW,
ADM9240_SYSCTL_IN4, VALUE(1), 2 },
{ SENSORS_DS1780_IN5_MIN, "Vccp2_min", SENSORS_DS1780_IN5,
SENSORS_DS1780_IN5, SENSORS_MODE_RW,
ADM9240_SYSCTL_IN5, VALUE(1), 2 },
{ SENSORS_DS1780_IN0_MAX, "2.5V_max", SENSORS_DS1780_IN0,
SENSORS_DS1780_IN0, SENSORS_MODE_RW,
ADM9240_SYSCTL_IN0, VALUE(2), 2 },
{ SENSORS_DS1780_IN1_MAX, "Vccp1_max", SENSORS_DS1780_IN1,
SENSORS_DS1780_IN1, SENSORS_MODE_RW,
ADM9240_SYSCTL_IN1, VALUE(2), 2 },
{ SENSORS_DS1780_IN2_MAX, "3.3V_max", SENSORS_DS1780_IN2,
SENSORS_DS1780_IN2, SENSORS_MODE_RW,
ADM9240_SYSCTL_IN2, VALUE(2), 2 },
{ SENSORS_DS1780_IN3_MAX, "5V_max", SENSORS_DS1780_IN3,
SENSORS_DS1780_IN3, SENSORS_MODE_RW,
ADM9240_SYSCTL_IN3, VALUE(2), 2 },
{ SENSORS_DS1780_IN4_MAX, "12V_max", SENSORS_DS1780_IN4,
SENSORS_DS1780_IN4, SENSORS_MODE_RW,
ADM9240_SYSCTL_IN4, VALUE(2), 2 },
{ SENSORS_DS1780_IN5_MAX, "Vccp2_max", SENSORS_DS1780_IN5,
SENSORS_DS1780_IN5, SENSORS_MODE_RW,
ADM9240_SYSCTL_IN5, VALUE(2), 2 },
{ SENSORS_DS1780_FAN1, "fan1", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
SENSORS_MODE_R, ADM9240_SYSCTL_FAN1, VALUE(2), 0 },
{ SENSORS_DS1780_FAN2, "fan2", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
SENSORS_MODE_R, ADM9240_SYSCTL_FAN2, VALUE(2), 0 },
{ SENSORS_DS1780_FAN1_MIN, "fan1_min", SENSORS_DS1780_FAN1,
SENSORS_DS1780_FAN1, SENSORS_MODE_RW,
ADM9240_SYSCTL_FAN1, VALUE(1), 0 },
{ SENSORS_DS1780_FAN2_MIN, "fan2_min", SENSORS_DS1780_FAN2,
SENSORS_DS1780_FAN2, SENSORS_MODE_RW,
ADM9240_SYSCTL_FAN2, VALUE(1), 0 },
{ SENSORS_DS1780_TEMP, "temp", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
SENSORS_MODE_R, ADM9240_SYSCTL_TEMP, VALUE(3), 1 },
{ SENSORS_DS1780_TEMP_HYST, "temp_hyst", SENSORS_DS1780_TEMP,
SENSORS_DS1780_TEMP, SENSORS_MODE_RW,
ADM9240_SYSCTL_TEMP, VALUE(2), 1 },
{ SENSORS_DS1780_TEMP_OVER, "temp_over", SENSORS_DS1780_TEMP,
SENSORS_DS1780_TEMP, SENSORS_MODE_RW,
ADM9240_SYSCTL_TEMP, VALUE(1), 1 },
{ SENSORS_DS1780_VID, "vid", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
SENSORS_MODE_R, ADM9240_SYSCTL_VID, VALUE(1), 2 },
{ SENSORS_DS1780_FAN1_DIV, "fan1_div", SENSORS_DS1780_FAN1,
SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM9240_SYSCTL_FAN_DIV, VALUE(1), 0 },
{ SENSORS_DS1780_FAN2_DIV, "fan2_div", SENSORS_DS1780_FAN2,
SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM9240_SYSCTL_FAN_DIV, VALUE(2), 0 },
{ SENSORS_DS1780_ALARMS, "alarms", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
SENSORS_MODE_R, ADM9240_SYSCTL_ALARMS, VALUE(1), 0 },
{ SENSORS_DS1780_ANALOG_OUT, "analog_out", SENSORS_NO_MAPPING,
SENSORS_NO_MAPPING, SENSORS_MODE_RW,
ADM9240_SYSCTL_ANALOG_OUT, VALUE(1), 0 },
{ 0 }
};
static sensors_chip_feature sis5595_features[] =
{
{ SENSORS_SIS5595_IN0, "in0", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING,
@@ -1257,6 +1342,7 @@ sensors_chip_features sensors_chip_features_list[] =
{ SENSORS_W83782D_PREFIX, w83782d_features },
{ SENSORS_W83783S_PREFIX, w83783s_features },
{ SENSORS_ADM9240_PREFIX, adm9240_features },
{ SENSORS_DS1780_PREFIX, ds1780_features },
{ SENSORS_ADM1021_PREFIX, adm1021_features },
{ SENSORS_MAX1617_PREFIX, max1617_features },
{ SENSORS_MAX1617A_PREFIX, max1617a_features },
+35
View File
@@ -498,6 +498,41 @@
#define SENSORS_ADM9240_ALARMS 81 /* R */
#define SENSORS_ADM9240_ANALOG_OUT 82 /* RW */
/* Analog Devices ADM9240 chips */
#define SENSORS_DS1780_PREFIX "ds1780"
#define SENSORS_DS1780_IN0 1 /* R */
#define SENSORS_DS1780_IN1 2 /* R */
#define SENSORS_DS1780_IN2 3 /* R */
#define SENSORS_DS1780_IN3 4 /* R */
#define SENSORS_DS1780_IN4 5 /* R */
#define SENSORS_DS1780_IN5 6 /* R */
#define SENSORS_DS1780_IN0_MIN 11 /* RW */
#define SENSORS_DS1780_IN1_MIN 12 /* RW */
#define SENSORS_DS1780_IN2_MIN 13 /* RW */
#define SENSORS_DS1780_IN3_MIN 14 /* RW */
#define SENSORS_DS1780_IN4_MIN 15 /* RW */
#define SENSORS_DS1780_IN5_MIN 16 /* RW */
#define SENSORS_DS1780_IN0_MAX 21 /* RW */
#define SENSORS_DS1780_IN1_MAX 22 /* RW */
#define SENSORS_DS1780_IN2_MAX 23 /* RW */
#define SENSORS_DS1780_IN3_MAX 24 /* RW */
#define SENSORS_DS1780_IN4_MAX 25 /* RW */
#define SENSORS_DS1780_IN5_MAX 26 /* RW */
#define SENSORS_DS1780_FAN1 31 /* R */
#define SENSORS_DS1780_FAN2 32 /* R */
#define SENSORS_DS1780_FAN1_MIN 41 /* RW */
#define SENSORS_DS1780_FAN2_MIN 42 /* RW */
#define SENSORS_DS1780_TEMP 51 /* R */
#define SENSORS_DS1780_TEMP_HYST 52 /* RW */
#define SENSORS_DS1780_TEMP_OVER 53 /* RW */
#define SENSORS_DS1780_VID 61 /* R */
#define SENSORS_DS1780_FAN1_DIV 71 /* RW */
#define SENSORS_DS1780_FAN2_DIV 72 /* RW */
#define SENSORS_DS1780_ALARMS 81 /* R */
#define SENSORS_DS1780_ANALOG_OUT 82 /* RW */
/* SiS southbridge with integrated lm78 */
#define SENSORS_SIS5595_PREFIX "sis5595"