From d70c450c7808406bca4d51ca3efcf5f9cf08d9a1 Mon Sep 17 00:00:00 2001 From: "Mark D. Studebaker" Date: Tue, 20 Apr 1999 01:49:51 +0000 Subject: [PATCH] Added sensor[1-3] support for w83782d/783s to 'sensors'. Now prints out what kind of sensor it is. Also separated alarms for temp2 and temp3 for 782d/783s (they are a single bit for 781d). git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@400 7894878c-1315-0410-8ee3-d5d059ff63e0 --- etc/sensors.conf.eg | 9 ++++ kernel/include/sensors.h | 4 +- lib/chips.c | 10 +++++ lib/chips.h | 8 ++++ prog/sensors/chips.c | 89 ++++++++++++++++++++++++++++++---------- 5 files changed, 98 insertions(+), 22 deletions(-) diff --git a/etc/sensors.conf.eg b/etc/sensors.conf.eg index 858234ca..6d839960 100644 --- a/etc/sensors.conf.eg +++ b/etc/sensors.conf.eg @@ -223,6 +223,7 @@ chip "w83782d-*" "w83783s-*" # set limits to 5% for the critical voltages # set limits to 10% for the non-critical voltages # set limits to 20% for the battery voltage + set in0_min vid*0.95 set in0_max vid*1.05 set in1_min vid*0.95 @@ -242,6 +243,14 @@ chip "w83782d-*" "w83783s-*" set in8_min 3.0 * 0.80 set in8_max 3.0 * 1.20 +# set up sensor types (thermistor is default) +# 1 = PII/Celeron Diode; 2 = 3904 transistor; +# 3435 = thermistor with Beta = 3435 +# If temperature changes very little, try 1 or 2. +# set sensor1 1 +# set sensor2 2 +# set sensor3 3435 + chip "gl518sm-r00-*" "gl518sm-r80-*" diff --git a/kernel/include/sensors.h b/kernel/include/sensors.h index 2f611355..56a8a7f8 100644 --- a/kernel/include/sensors.h +++ b/kernel/include/sensors.h @@ -403,7 +403,9 @@ struct sensors_chips_data { #define W83781D_ALARM_FAN2 0x0080 #define W83781D_ALARM_FAN3 0x0800 #define W83781D_ALARM_TEMP1 0x0010 -#define W83781D_ALARM_TEMP23 0x0020 +#define W83781D_ALARM_TEMP23 0x0020 /* 781D only */ +#define W83781D_ALARM_TEMP2 0x0020 /* 782D/783S */ +#define W83781D_ALARM_TEMP3 0x2000 /* 782D only */ #define W83781D_ALARM_CHAS 0x1000 #define LM75_SYSCTL_TEMP 1200 /* Degrees Celcius * 10 */ diff --git a/lib/chips.c b/lib/chips.c index e6711e20..3b4377c3 100644 --- a/lib/chips.c +++ b/lib/chips.c @@ -860,6 +860,12 @@ static sensors_chip_feature w83782d_features[] = { SENSORS_W83782D_BEEPS, "beeps", SENSORS_W83782D_ALARMS, SENSORS_W83782D_ALARMS, SENSORS_MODE_RW, W83781D_SYSCTL_BEEP, VALUE(2), 0 }, + { SENSORS_W83782D_SENS1, "sensor1", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, + SENSORS_MODE_RW, W83781D_SYSCTL_SENS1, VALUE(1), 0 }, + { SENSORS_W83782D_SENS2, "sensor2", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, + SENSORS_MODE_RW, W83781D_SYSCTL_SENS2, VALUE(1), 0 }, + { SENSORS_W83782D_SENS3, "sensor3", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, + SENSORS_MODE_RW, W83781D_SYSCTL_SENS3, VALUE(1), 0 }, { 0 } }; @@ -971,6 +977,10 @@ static sensors_chip_feature w83783s_features[] = { SENSORS_W83783S_BEEPS, "beeps", SENSORS_W83783S_ALARMS, SENSORS_W83783S_ALARMS, SENSORS_MODE_RW, W83781D_SYSCTL_BEEP, VALUE(2), 0 }, + { SENSORS_W83783S_SENS1, "sensor1", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, + SENSORS_MODE_RW, W83781D_SYSCTL_SENS1, VALUE(1), 0 }, + { SENSORS_W83783S_SENS2, "sensor2", SENSORS_NO_MAPPING, SENSORS_NO_MAPPING, + SENSORS_MODE_RW, W83781D_SYSCTL_SENS2, VALUE(1), 0 }, { 0 } }; diff --git a/lib/chips.h b/lib/chips.h index 4d040565..942901cd 100644 --- a/lib/chips.h +++ b/lib/chips.h @@ -353,6 +353,9 @@ #define SENSORS_W83781D_ALARMS 81 /* R */ #define SENSORS_W83781D_BEEP_ENABLE 82 /* RW */ #define SENSORS_W83781D_BEEPS 83 /* RW */ +#define SENSORS_W83781D_SENS1 91 /* RW */ +#define SENSORS_W83781D_SENS2 92 /* RW */ +#define SENSORS_W83781D_SENS3 93 /* RW */ /* Winbond W83782D chips */ @@ -407,6 +410,9 @@ #define SENSORS_W83782D_ALARMS 81 /* R */ #define SENSORS_W83782D_BEEP_ENABLE 82 /* RW */ #define SENSORS_W83782D_BEEPS 83 /* RW */ +#define SENSORS_W83782D_SENS1 91 /* RW */ +#define SENSORS_W83782D_SENS2 92 /* RW */ +#define SENSORS_W83782D_SENS3 93 /* RW */ /* Winbond W83783S chips */ @@ -453,6 +459,8 @@ #define SENSORS_W83783S_ALARMS 81 /* R */ #define SENSORS_W83783S_BEEP_ENABLE 82 /* RW */ #define SENSORS_W83783S_BEEPS 83 /* RW */ +#define SENSORS_W83783S_SENS1 91 /* RW */ +#define SENSORS_W83783S_SENS2 92 /* RW */ /* Analog Devices ADM9240 chips */ diff --git a/prog/sensors/chips.c b/prog/sensors/chips.c index b5fa88e9..3674443b 100644 --- a/prog/sensors/chips.c +++ b/prog/sensors/chips.c @@ -530,7 +530,7 @@ void print_lm80(const sensors_chip_name *name) void print_w83781d(const sensors_chip_name *name) { char *label = NULL; - double cur,min,max,fdiv; + double cur,min,max,fdiv,sens; int alarms,beeps; int is82d, is83s; @@ -694,37 +694,84 @@ void print_w83781d(const sensors_chip_name *name) !sensors_get_feature(*name,SENSORS_W83781D_TEMP1,&cur) && !sensors_get_feature(*name,SENSORS_W83781D_TEMP1_HYST,&min) && !sensors_get_feature(*name,SENSORS_W83781D_TEMP1_OVER,&max)) { - print_label(label,10); - printf("%+3.0f C (limit = %+3.0f C, hysteresis = %+3.0f C) %s %s\n", - cur,max,min, alarms&W83781D_ALARM_TEMP1?"ALARM":" ", - beeps&W83781D_ALARM_TEMP1?"(beep)":""); + if((!is82d) && (!is83s)) { + print_label(label,10); + printf("%+3.0f C (limit = %+3.0f C, hysteresis = %+3.0f C) %s %s\n", + cur,max,min, alarms&W83781D_ALARM_TEMP1 ?"ALARM":" ", + beeps&W83781D_ALARM_TEMP1?"(beep)":""); + } else { + if(!sensors_get_feature(*name,SENSORS_W83781D_SENS1,&sens)) { + print_label(label,10); + printf( +"%+3.0f C (limit = %+3.0f C, hysteresis = %+3.0f C, sensor = %s) %s %s\n", + cur,max,min, + (((int)sens)==1)?"PII/Celeron diode":(((int)sens)==2)? + "3904 transistor":"thermistor", + alarms&W83781D_ALARM_TEMP1?"ALARM":" ", + beeps&W83781D_ALARM_TEMP1?"(beep)":""); + } else { + printf("ERROR: Can't get TEMP1 data!\n"); + } + } } else - printf("ERROR: Can't get TEMP2 data!\n"); + printf("ERROR: Can't get TEMP1 data!\n"); free_the_label(&label); if (!sensors_get_label(*name,SENSORS_W83781D_TEMP2,&label) && !sensors_get_feature(*name,SENSORS_W83781D_TEMP2,&cur) && !sensors_get_feature(*name,SENSORS_W83781D_TEMP2_HYST,&min) && !sensors_get_feature(*name,SENSORS_W83781D_TEMP2_OVER,&max)) { - print_label(label,10); - printf("%+3.1f C (limit = %+3.1f C, hysteresis = %+3.1f C) %s %s\n", - cur,max,min, alarms&W83781D_ALARM_TEMP23?"ALARM":" ", - beeps&W83781D_ALARM_TEMP23?"(beep)":""); + if((!is82d) && (!is83s)) { + print_label(label,10); + printf("%+3.1f C (limit = %+3.1f C, hysteresis = %+3.1f C) %s %s\n", + cur,max,min, alarms&W83781D_ALARM_TEMP23 ?"ALARM":" ", + beeps&W83781D_ALARM_TEMP23?"(beep)":""); + } else { + if(!sensors_get_feature(*name,SENSORS_W83781D_SENS2,&sens)) { + print_label(label,10); + printf( +"%+3.1f C (limit = %+3.1f C, hysteresis = %+3.1f C, sensor = %s) %s %s\n", + cur,max,min, + (((int)sens)==1)?"PII/Celeron diode":(((int)sens)==2)? + "3904 transistor":"thermistor", + alarms&W83781D_ALARM_TEMP2?"ALARM":" ", + beeps&W83781D_ALARM_TEMP2?"(beep)":""); + } else { + printf("ERROR: Can't get TEMP2 data!\n"); + } + } } else printf("ERROR: Can't get TEMP2 data!\n"); free_the_label(&label); - if (!sensors_get_label(*name,SENSORS_W83781D_TEMP3,&label) && - !sensors_get_feature(*name,SENSORS_W83781D_TEMP3,&cur) && - !sensors_get_feature(*name,SENSORS_W83781D_TEMP3_HYST,&min) && - !sensors_get_feature(*name,SENSORS_W83781D_TEMP3_OVER,&max)) { - print_label(label,10); - printf("%+3.1f C (limit = %+3.1f C, hysteresis = %+3.1f C) %s %s\n", - cur,max,min, alarms&W83781D_ALARM_TEMP23?"ALARM":" ", - beeps&W83781D_ALARM_TEMP23?"(beep)":""); - } else - printf("ERROR: Can't get TEMP3 data!\n"); - free_the_label(&label); + if (!is83s) { + if (!sensors_get_label(*name,SENSORS_W83781D_TEMP3,&label) && + !sensors_get_feature(*name,SENSORS_W83781D_TEMP3,&cur) && + !sensors_get_feature(*name,SENSORS_W83781D_TEMP3_HYST,&min) && + !sensors_get_feature(*name,SENSORS_W83781D_TEMP3_OVER,&max)) { + if(!is82d) { + print_label(label,10); + printf("%+3.1f C (limit = %+3.1f C, hysteresis = %+3.1f C) %s %s\n", + cur,max,min, alarms&W83781D_ALARM_TEMP23 ?"ALARM":" ", + beeps&W83781D_ALARM_TEMP23?"(beep)":""); + } else { + if(!sensors_get_feature(*name,SENSORS_W83781D_SENS3,&sens)) { + print_label(label,10); + printf( +"%+3.1f C (limit = %+3.1f C, hysteresis = %+3.1f C, sensor = %s) %s %s\n", + cur,max,min, + (((int)sens)==1)?"PII/Celeron diode":(((int)sens)==2)? + "3904 transistor":"thermistor", + alarms&W83781D_ALARM_TEMP3?"ALARM":" ", + beeps&W83781D_ALARM_TEMP3?"(beep)":""); + } else { + printf("ERROR: Can't get TEMP3 data!\n"); + } + } + } else + printf("ERROR: Can't get TEMP3 data!\n"); + free_the_label(&label); + } if (!sensors_get_label(*name,SENSORS_W83781D_VID,&label) && !sensors_get_feature(*name,SENSORS_W83781D_VID,&cur)) {