diff --git a/doc/chips/SUMMARY b/doc/chips/SUMMARY index 7f98bde0..f990238f 100644 --- a/doc/chips/SUMMARY +++ b/doc/chips/SUMMARY @@ -57,6 +57,7 @@ w83781d w83781d 3 7 3 - yes yes w83782d 3 9 3 2-4 pwm yes yes w83783s 1-2 5-6 3 2 pwm yes no + w83627hf 3 9 3 2-4 pwm yes yes (LPC) diff --git a/doc/chips/w83781d b/doc/chips/w83781d index 40c37eab..9ce60e1d 100644 --- a/doc/chips/w83781d +++ b/doc/chips/w83781d @@ -12,10 +12,14 @@ Supported chips: * Winbond W83782D Prefix 'w83782d' Addresses scanned: I2C 0x20 - 0x2f (inclusive), ISA 0x290 (8 I/O ports) - Datasheet: Available on request from Winbond + Datasheet: Publicly available at the Winbond website * Winbond W83783S Prefix 'w83783s' Addresses scanned: I2C 0x20 - 0x2f (inclusive) + Datasheet: Publicly available at the Winbond website + * Winbond W83627HF + Prefix 'w83627hf' + Addresses scanned: I2C 0x20 - 0x2f (inclusive), ISA 0x290 (8 I/O ports) Datasheet: Available on request from Winbond @@ -50,11 +54,13 @@ Module Parameters Description ----------- -This driver implements support for the Winbond W83781D, W83782D and W83783S. +This driver implements support for the Winbond W83781D, W83782D, +W8783S, and W83627HF chips. We will refer to them collectively as W8378* chips. There is quite some difference between these chips, but they are similar enough that it was sensible to put them together in one driver. +The W83627HF chip is assumed to be identical to the W83782D. Detection of these chips can sometimes be foiled because they can be in an internal state that allows no clean access. If you know the address @@ -70,12 +76,12 @@ Temperatures are measured in degrees Celcius. There is always one main temperature sensor, and one (W83783S) or two (W83781D and W83782D) other sensors. An alarm is triggered for the main sensor 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 +it drops below the Hysteresis value. A more useful behaviour +can be found by setting the Hysteresis 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. For the other sensor(s), an alarm is triggered when the temperature gets higher then the Overtemperature -Shutdown value; it stays on until the temperature falls below the Hysteris +Shutdown value; it stays on until the temperature falls below the Hysteresis value. But on the W83781D, there is only one alarm that functions for both other sensors! Temperatures are guaranteed within a range of -55 to +125 degrees. The main temperature sensors has a resolution of 1 degree; the other diff --git a/etc/sensors.conf.eg b/etc/sensors.conf.eg index 9f4298de..1fae24ae 100644 --- a/etc/sensors.conf.eg +++ b/etc/sensors.conf.eg @@ -196,7 +196,7 @@ chip "lm78-*" "lm78-j-*" "lm79-*" "w83781d-*" "sis5595-*" set in6_max -5 * 1.05 -chip "w83782d-*" "w83783s-*" +chip "w83782d-*" "w83783s-*" "w83627hf-*" # Same as above for w83781d except that in5 and in6 are computed differently. # Rather than an internal inverting op amp, the 82d/83s use standard positive diff --git a/lib/chips.c b/lib/chips.c index 5f545fc3..78e80cc9 100644 --- a/lib/chips.c +++ b/lib/chips.c @@ -1534,6 +1534,8 @@ sensors_chip_features sensors_chip_features_list[] = { SENSORS_W83781D_PREFIX, w83781d_features }, { SENSORS_W83782D_PREFIX, w83782d_features }, { SENSORS_W83783S_PREFIX, w83783s_features }, + /* Cheat on 627HF for now - no separate #defines */ + { SENSORS_W83627HF_PREFIX, w83782d_features }, { SENSORS_ADM9240_PREFIX, adm9240_features }, { SENSORS_DS1780_PREFIX, ds1780_features }, { SENSORS_ADM1021_PREFIX, adm1021_features }, diff --git a/lib/chips.h b/lib/chips.h index 743bc62c..7cd8f20a 100644 --- a/lib/chips.h +++ b/lib/chips.h @@ -365,8 +365,10 @@ /* Winbond W83782D chips */ +/* Cheat on 627HF for now - no separate #defines */ #define SENSORS_W83782D_PREFIX "w83782d" +#define SENSORS_W83627HF_PREFIX "w83627hf" #define SENSORS_W83782D_IN0 1 /* R */ #define SENSORS_W83782D_IN1 2 /* R */ diff --git a/prog/sensors/chips.c b/prog/sensors/chips.c index 79708a1f..6f86c060 100644 --- a/prog/sensors/chips.c +++ b/prog/sensors/chips.c @@ -810,7 +810,8 @@ void print_w83781d(const sensors_chip_name *name) int alarms,beeps; int is82d, is83s; - is82d = !strcmp(name->prefix,"w83782d"); + is82d = (!strcmp(name->prefix,"w83782d")) || + (!strcmp(name->prefix,"w83627hf")); is83s = !strcmp(name->prefix,"w83782s"); if (!sensors_get_feature(*name,SENSORS_W83781D_ALARMS,&cur)) alarms = cur + 0.5; @@ -979,7 +980,7 @@ void print_w83781d(const sensors_chip_name *name) 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", +"%+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", @@ -1006,7 +1007,7 @@ void print_w83781d(const sensors_chip_name *name) 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", +"%+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", @@ -1034,7 +1035,7 @@ void print_w83781d(const sensors_chip_name *name) 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", +"%+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", diff --git a/prog/sensors/main.c b/prog/sensors/main.c index 9a01b76a..6a6a9553 100644 --- a/prog/sensors/main.c +++ b/prog/sensors/main.c @@ -265,7 +265,8 @@ void do_a_print(sensors_chip_name name) print_gl518(&name); else if ((!strcmp(name.prefix,"w83781d")) || (!strcmp(name.prefix,"w83782d")) || - (!strcmp(name.prefix,"w83783s"))) + (!strcmp(name.prefix,"w83783s")) || + (!strcmp(name.prefix,"w83627hf"))) print_w83781d(&name); else if (!strcmp(name.prefix,"maxilife-cg") || !strcmp(name.prefix,"maxilife-co") ||