diff --git a/CHANGES b/CHANGES index 95e5e99b..71bbfb8f 100644 --- a/CHANGES +++ b/CHANGES @@ -8,6 +8,7 @@ SVN HEAD Library: Clean up pwm symbol names translation Add dme1737 support Add applesmc support + Add w83627ehf support (for Linux 2.4) Man page sensors.conf.5: Update the chip statement section Module i2c-nforce2: Add nForce MCP61, MCP65 support (2.6 backport) Module w83627ehf: New (2.6 backport) @@ -32,6 +33,7 @@ SVN HEAD Add applesmc support Add max6680 support Fix alignment of alarm for one-limit temperatures + Add w83627ehf support (for Linux 2.4) Program sensors-detect: Stop Super-I/O probe after first family success Fix SMSC DME1737 detection Add /usr/sbin to the PATH (#2199) diff --git a/lib/chips.c b/lib/chips.c index d35abcf2..cf8abd48 100644 --- a/lib/chips.c +++ b/lib/chips.c @@ -1955,25 +1955,25 @@ static sensors_chip_feature w83l785ts_features[] = static sensors_chip_feature w83627ehf_features[] = { { { SENSORS_W83627EHF_IN0, "in0", NOMAP, NOMAP, R }, - NOSYSCTL, VALUE(3), 3 }, + W83627EHF_SYSCTL_IN0, VALUE(3), 3 }, { { SENSORS_W83627EHF_IN1, "in1", NOMAP, NOMAP, R }, - NOSYSCTL, VALUE(3), 3 }, + W83627EHF_SYSCTL_IN1, VALUE(3), 3 }, { { SENSORS_W83627EHF_IN2, "in2", NOMAP, NOMAP, R }, - NOSYSCTL, VALUE(3), 3 }, + W83627EHF_SYSCTL_IN2, VALUE(3), 3 }, { { SENSORS_W83627EHF_IN3, "in3", NOMAP, NOMAP, R }, - NOSYSCTL, VALUE(3), 3 }, + W83627EHF_SYSCTL_IN3, VALUE(3), 3 }, { { SENSORS_W83627EHF_IN4, "in4", NOMAP, NOMAP, R }, - NOSYSCTL, VALUE(3), 3 }, + W83627EHF_SYSCTL_IN4, VALUE(3), 3 }, { { SENSORS_W83627EHF_IN5, "in5", NOMAP, NOMAP, R }, - NOSYSCTL, VALUE(3), 3 }, + W83627EHF_SYSCTL_IN5, VALUE(3), 3 }, { { SENSORS_W83627EHF_IN6, "in6", NOMAP, NOMAP, R }, - NOSYSCTL, VALUE(3), 3 }, + W83627EHF_SYSCTL_IN6, VALUE(3), 3 }, { { SENSORS_W83627EHF_IN7, "in7", NOMAP, NOMAP, R }, - NOSYSCTL, VALUE(3), 3 }, + W83627EHF_SYSCTL_IN7, VALUE(3), 3 }, { { SENSORS_W83627EHF_IN8, "in8", NOMAP, NOMAP, R }, - NOSYSCTL, VALUE(3), 3 }, + W83627EHF_SYSCTL_IN8, VALUE(3), 3 }, { { SENSORS_W83627EHF_IN9, "in9", NOMAP, NOMAP, R }, - NOSYSCTL, VALUE(3), 3 }, + W83627EHF_SYSCTL_IN9, VALUE(3), 3 }, { { SENSORS_W83627EHF_IN0_ALARM, "in0_alarm", SENSORS_W83627EHF_IN0, NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, @@ -2006,74 +2006,74 @@ static sensors_chip_feature w83627ehf_features[] = NOSYSCTL, VALUE(1), 0 }, { { SENSORS_W83627EHF_IN0_MIN, "in0_min", SENSORS_W83627EHF_IN0, SENSORS_W83627EHF_IN0, RW }, - NOSYSCTL, VALUE(1), 3 }, + W83627EHF_SYSCTL_IN0, VALUE(1), 3 }, { { SENSORS_W83627EHF_IN1_MIN, "in1_min", SENSORS_W83627EHF_IN1, SENSORS_W83627EHF_IN1, RW }, - NOSYSCTL, VALUE(1), 3 }, + W83627EHF_SYSCTL_IN1, VALUE(1), 3 }, { { SENSORS_W83627EHF_IN2_MIN, "in2_min", SENSORS_W83627EHF_IN2, SENSORS_W83627EHF_IN2, RW }, - NOSYSCTL, VALUE(1), 3 }, + W83627EHF_SYSCTL_IN2, VALUE(1), 3 }, { { SENSORS_W83627EHF_IN3_MIN, "in3_min", SENSORS_W83627EHF_IN3, SENSORS_W83627EHF_IN3, RW }, - NOSYSCTL, VALUE(1), 3 }, + W83627EHF_SYSCTL_IN3, VALUE(1), 3 }, { { SENSORS_W83627EHF_IN4_MIN, "in4_min", SENSORS_W83627EHF_IN4, SENSORS_W83627EHF_IN4, RW }, - NOSYSCTL, VALUE(1), 3 }, + W83627EHF_SYSCTL_IN4, VALUE(1), 3 }, { { SENSORS_W83627EHF_IN5_MIN, "in5_min", SENSORS_W83627EHF_IN5, SENSORS_W83627EHF_IN5, RW }, - NOSYSCTL, VALUE(1), 3 }, + W83627EHF_SYSCTL_IN5, VALUE(1), 3 }, { { SENSORS_W83627EHF_IN6_MIN, "in6_min", SENSORS_W83627EHF_IN6, SENSORS_W83627EHF_IN6, RW }, - NOSYSCTL, VALUE(1), 3 }, + W83627EHF_SYSCTL_IN6, VALUE(1), 3 }, { { SENSORS_W83627EHF_IN7_MIN, "in7_min", SENSORS_W83627EHF_IN7, SENSORS_W83627EHF_IN7, RW }, - NOSYSCTL, VALUE(1), 3 }, + W83627EHF_SYSCTL_IN7, VALUE(1), 3 }, { { SENSORS_W83627EHF_IN8_MIN, "in8_min", SENSORS_W83627EHF_IN8, SENSORS_W83627EHF_IN8, RW }, - NOSYSCTL, VALUE(1), 3 }, + W83627EHF_SYSCTL_IN8, VALUE(1), 3 }, { { SENSORS_W83627EHF_IN9_MIN, "in9_min", SENSORS_W83627EHF_IN9, SENSORS_W83627EHF_IN9, RW }, - NOSYSCTL, VALUE(1), 3 }, + W83627EHF_SYSCTL_IN9, VALUE(1), 3 }, { { SENSORS_W83627EHF_IN0_MAX, "in0_max", SENSORS_W83627EHF_IN0, SENSORS_W83627EHF_IN0, RW }, - NOSYSCTL, VALUE(2), 3 }, + W83627EHF_SYSCTL_IN0, VALUE(2), 3 }, { { SENSORS_W83627EHF_IN1_MAX, "in1_max", SENSORS_W83627EHF_IN1, SENSORS_W83627EHF_IN1, RW }, - NOSYSCTL, VALUE(2), 3 }, + W83627EHF_SYSCTL_IN1, VALUE(2), 3 }, { { SENSORS_W83627EHF_IN2_MAX, "in2_max", SENSORS_W83627EHF_IN2, SENSORS_W83627EHF_IN2, RW }, - NOSYSCTL, VALUE(2), 3 }, + W83627EHF_SYSCTL_IN2, VALUE(2), 3 }, { { SENSORS_W83627EHF_IN3_MAX, "in3_max", SENSORS_W83627EHF_IN3, SENSORS_W83627EHF_IN3, RW }, - NOSYSCTL, VALUE(2), 3 }, + W83627EHF_SYSCTL_IN3, VALUE(2), 3 }, { { SENSORS_W83627EHF_IN4_MAX, "in4_max", SENSORS_W83627EHF_IN4, SENSORS_W83627EHF_IN4, RW }, - NOSYSCTL, VALUE(2), 3 }, + W83627EHF_SYSCTL_IN4, VALUE(2), 3 }, { { SENSORS_W83627EHF_IN5_MAX, "in5_max", SENSORS_W83627EHF_IN5, SENSORS_W83627EHF_IN5, RW }, - NOSYSCTL, VALUE(2), 3 }, + W83627EHF_SYSCTL_IN5, VALUE(2), 3 }, { { SENSORS_W83627EHF_IN6_MAX, "in6_max", SENSORS_W83627EHF_IN6, SENSORS_W83627EHF_IN6, RW }, - NOSYSCTL, VALUE(2), 3 }, + W83627EHF_SYSCTL_IN6, VALUE(2), 3 }, { { SENSORS_W83627EHF_IN7_MAX, "in7_max", SENSORS_W83627EHF_IN7, SENSORS_W83627EHF_IN7, RW }, - NOSYSCTL, VALUE(2), 3 }, + W83627EHF_SYSCTL_IN7, VALUE(2), 3 }, { { SENSORS_W83627EHF_IN8_MAX, "in8_max", SENSORS_W83627EHF_IN8, SENSORS_W83627EHF_IN8, RW }, - NOSYSCTL, VALUE(2), 3 }, + W83627EHF_SYSCTL_IN8, VALUE(2), 3 }, { { SENSORS_W83627EHF_IN9_MAX, "in9_max", SENSORS_W83627EHF_IN9, SENSORS_W83627EHF_IN9, RW }, - NOSYSCTL, VALUE(2), 3 }, + W83627EHF_SYSCTL_IN9, VALUE(2), 3 }, { { SENSORS_W83627EHF_FAN1, "fan1", NOMAP, NOMAP, R }, - NOSYSCTL, VALUE(2), 0 }, + W83627EHF_SYSCTL_FAN1, VALUE(2), 0 }, { { SENSORS_W83627EHF_FAN2, "fan2", NOMAP, NOMAP, R }, - NOSYSCTL, VALUE(2), 0 }, + W83627EHF_SYSCTL_FAN2, VALUE(2), 0 }, { { SENSORS_W83627EHF_FAN3, "fan3", NOMAP, NOMAP, R }, - NOSYSCTL, VALUE(2), 0 }, + W83627EHF_SYSCTL_FAN3, VALUE(2), 0 }, { { SENSORS_W83627EHF_FAN4, "fan4", NOMAP, NOMAP, R }, - NOSYSCTL, VALUE(2), 0 }, + W83627EHF_SYSCTL_FAN4, VALUE(2), 0 }, { { SENSORS_W83627EHF_FAN5, "fan5", NOMAP, NOMAP, R }, - NOSYSCTL, VALUE(2), 0 }, + W83627EHF_SYSCTL_FAN5, VALUE(2), 0 }, { { SENSORS_W83627EHF_FAN1_ALARM, "fan1_alarm", SENSORS_W83627EHF_FAN1, NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, @@ -2091,35 +2091,35 @@ static sensors_chip_feature w83627ehf_features[] = NOSYSCTL, VALUE(1), 0 }, { { SENSORS_W83627EHF_FAN1_MIN, "fan1_min", SENSORS_W83627EHF_FAN1, SENSORS_W83627EHF_FAN1, RW }, - NOSYSCTL, VALUE(1), 0 }, + W83627EHF_SYSCTL_FAN1, VALUE(1), 0 }, { { SENSORS_W83627EHF_FAN2_MIN, "fan2_min", SENSORS_W83627EHF_FAN2, SENSORS_W83627EHF_FAN2, RW }, - NOSYSCTL, VALUE(1), 0 }, + W83627EHF_SYSCTL_FAN2, VALUE(1), 0 }, { { SENSORS_W83627EHF_FAN3_MIN, "fan3_min", SENSORS_W83627EHF_FAN3, SENSORS_W83627EHF_FAN3, RW }, - NOSYSCTL, VALUE(1), 0 }, + W83627EHF_SYSCTL_FAN3, VALUE(1), 0 }, { { SENSORS_W83627EHF_FAN4_MIN, "fan4_min", SENSORS_W83627EHF_FAN4, SENSORS_W83627EHF_FAN4, RW }, - NOSYSCTL, VALUE(1), 0 }, + W83627EHF_SYSCTL_FAN4, VALUE(1), 0 }, { { SENSORS_W83627EHF_FAN5_MIN, "fan5_min", SENSORS_W83627EHF_FAN5, SENSORS_W83627EHF_FAN5, RW }, - NOSYSCTL, VALUE(1), 0 }, + W83627EHF_SYSCTL_FAN5, VALUE(1), 0 }, { { SENSORS_W83627EHF_FAN1_DIV, "fan1_div", SENSORS_W83627EHF_FAN1, NOMAP, R }, - NOSYSCTL, VALUE(1), 0 }, + W83627EHF_SYSCTL_FAN_DIV, VALUE(1), 0 }, { { SENSORS_W83627EHF_FAN2_DIV, "fan2_div", SENSORS_W83627EHF_FAN2, NOMAP, R }, - NOSYSCTL, VALUE(2), 0 }, + W83627EHF_SYSCTL_FAN_DIV, VALUE(2), 0 }, { { SENSORS_W83627EHF_FAN3_DIV, "fan3_div", SENSORS_W83627EHF_FAN3, NOMAP, R }, - NOSYSCTL, VALUE(3), 0 }, + W83627EHF_SYSCTL_FAN_DIV, VALUE(3), 0 }, { { SENSORS_W83627EHF_FAN4_DIV, "fan4_div", SENSORS_W83627EHF_FAN4, NOMAP, R }, - NOSYSCTL, VALUE(4), 0 }, + W83627EHF_SYSCTL_FAN_DIV, VALUE(4), 0 }, { { SENSORS_W83627EHF_FAN5_DIV, "fan5_div", SENSORS_W83627EHF_FAN5, NOMAP, R }, - NOSYSCTL, VALUE(5), 0 }, + W83627EHF_SYSCTL_FAN_DIV, VALUE(5), 0 }, { { SENSORS_W83627EHF_TEMP1, "temp1", NOMAP, NOMAP, R }, - NOSYSCTL, VALUE(3), 0 }, + W83627EHF_SYSCTL_TEMP1, VALUE(3), 1 }, { { SENSORS_W83627EHF_TEMP2, "temp2", NOMAP, NOMAP, R }, - NOSYSCTL, VALUE(3), 1 }, + W83627EHF_SYSCTL_TEMP2, VALUE(3), 1 }, { { SENSORS_W83627EHF_TEMP3, "temp3", NOMAP, NOMAP, R }, - NOSYSCTL, VALUE(3), 1 }, + W83627EHF_SYSCTL_TEMP3, VALUE(3), 1 }, { { SENSORS_W83627EHF_TEMP1_ALARM, "temp1_alarm", SENSORS_W83627EHF_TEMP1, NOMAP, R }, NOSYSCTL, VALUE(1), 0 }, @@ -2131,22 +2131,24 @@ static sensors_chip_feature w83627ehf_features[] = NOSYSCTL, VALUE(1), 0 }, { { SENSORS_W83627EHF_TEMP1_OVER, "temp1_over", SENSORS_W83627EHF_TEMP1, SENSORS_W83627EHF_TEMP1, RW }, - NOSYSCTL, VALUE(1), 0 }, + W83627EHF_SYSCTL_TEMP1, VALUE(1), 1 }, { { SENSORS_W83627EHF_TEMP2_OVER, "temp2_over", SENSORS_W83627EHF_TEMP2, SENSORS_W83627EHF_TEMP2, RW }, - NOSYSCTL, VALUE(1), 1 }, + W83627EHF_SYSCTL_TEMP2, VALUE(1), 1 }, { { SENSORS_W83627EHF_TEMP3_OVER, "temp3_over", SENSORS_W83627EHF_TEMP3, SENSORS_W83627EHF_TEMP3, RW }, - NOSYSCTL, VALUE(1), 1 }, + W83627EHF_SYSCTL_TEMP3, VALUE(1), 1 }, { { SENSORS_W83627EHF_TEMP1_HYST, "temp1_hyst", SENSORS_W83627EHF_TEMP1, SENSORS_W83627EHF_TEMP1, RW }, - NOSYSCTL, VALUE(2), 0 }, + W83627EHF_SYSCTL_TEMP1, VALUE(2), 1 }, { { SENSORS_W83627EHF_TEMP2_HYST, "temp2_hyst", SENSORS_W83627EHF_TEMP2, SENSORS_W83627EHF_TEMP2, RW }, - NOSYSCTL, VALUE(2), 1 }, + W83627EHF_SYSCTL_TEMP2, VALUE(2), 1 }, { { SENSORS_W83627EHF_TEMP3_HYST, "temp3_hyst", SENSORS_W83627EHF_TEMP3, SENSORS_W83627EHF_TEMP3, RW }, - NOSYSCTL, VALUE(2), 1 }, + W83627EHF_SYSCTL_TEMP3, VALUE(2), 1 }, + { { SENSORS_W83627EHF_ALARMS, "alarms", NOMAP, NOMAP, R }, + W83627EHF_SYSCTL_ALARMS, VALUE(1), 0 }, { { 0 }, 0 } }; diff --git a/lib/chips.h b/lib/chips.h index 5d63f36c..64d585e0 100644 --- a/lib/chips.h +++ b/lib/chips.h @@ -971,6 +971,7 @@ #define SENSORS_W83627EHF_TEMP1_HYST 81 /* RW */ #define SENSORS_W83627EHF_TEMP2_HYST 82 /* RW */ #define SENSORS_W83627EHF_TEMP3_HYST 83 /* RW */ +#define SENSORS_W83627EHF_ALARMS 250 /* R */ /* Analog Devices ADM9240 chips */ diff --git a/prog/sensors/chips.c b/prog/sensors/chips.c index e1f1e36e..45e2166f 100644 --- a/prog/sensors/chips.c +++ b/prog/sensors/chips.c @@ -2897,20 +2897,66 @@ void print_w83627ehf(const sensors_chip_name *name) char *label; int i, valid, num_in; double cur, min, fdiv, max, alarm, over, hyst; + unsigned int in_alarms = 0, fan_alarms = 0, temp_alarms = 0; if (!strcmp(name->prefix, "w83627dhg")) num_in = 9; else num_in = 10; + /* For the 2.4 kernel driver, alarms are a bit harder to handle */ + if (!sensors_get_feature(*name, SENSORS_W83627EHF_ALARMS, &cur)) { + unsigned long alarms = cur + 0.5; + + if (alarms & W83627EHF_ALARM_IN0) + in_alarms |= (1 << 0); + if (alarms & W83627EHF_ALARM_IN1) + in_alarms |= (1 << 1); + if (alarms & W83627EHF_ALARM_IN2) + in_alarms |= (1 << 2); + if (alarms & W83627EHF_ALARM_IN3) + in_alarms |= (1 << 3); + if (alarms & W83627EHF_ALARM_IN4) + in_alarms |= (1 << 4); + if (alarms & W83627EHF_ALARM_IN5) + in_alarms |= (1 << 5); + if (alarms & W83627EHF_ALARM_IN6) + in_alarms |= (1 << 6); + if (alarms & W83627EHF_ALARM_IN7) + in_alarms |= (1 << 7); + if (alarms & W83627EHF_ALARM_IN8) + in_alarms |= (1 << 8); + if (num_in >= 10 && (alarms & W83627EHF_ALARM_IN9)) + in_alarms |= (1 << 9); + + if (alarms & W83627EHF_ALARM_FAN1) + fan_alarms |= (1 << 0); + if (alarms & W83627EHF_ALARM_FAN2) + fan_alarms |= (1 << 1); + if (alarms & W83627EHF_ALARM_FAN3) + fan_alarms |= (1 << 2); + if (alarms & W83627EHF_ALARM_FAN4) + fan_alarms |= (1 << 3); + if (alarms & W83627EHF_ALARM_FAN5) + fan_alarms |= (1 << 4); + + if (alarms & W83627EHF_ALARM_TEMP1) + temp_alarms |= (1 << 0); + if (alarms & W83627EHF_ALARM_TEMP2) + temp_alarms |= (1 << 1); + if (alarms & W83627EHF_ALARM_TEMP3) + temp_alarms |= (1 << 2); + } + for (i = 0; i < num_in; i++) { if (!sensors_get_label_and_valid(*name,SENSORS_W83627EHF_IN0+i, &label,&valid) && !sensors_get_feature(*name,SENSORS_W83627EHF_IN0+i,&cur) && !sensors_get_feature(*name,SENSORS_W83627EHF_IN0_MIN+i,&min) - && !sensors_get_feature(*name,SENSORS_W83627EHF_IN0_MAX+i,&max) - && !sensors_get_feature(*name,SENSORS_W83627EHF_IN0_ALARM+i,&alarm)) { + && !sensors_get_feature(*name,SENSORS_W83627EHF_IN0_MAX+i,&max)) { if (valid) { + if (sensors_get_feature(*name, SENSORS_W83627EHF_IN0_ALARM+i, &alarm)) + alarm = in_alarms & (1 << i); print_label(label,10); printf("%+6.2f V (min = %+6.2f V, max = %+6.2f V) %s\n", cur,min,max,alarm ? "ALARM" : ""); @@ -2932,8 +2978,9 @@ void print_w83627ehf(const sensors_chip_name *name) if (!sensors_get_feature(*name, SENSORS_W83627EHF_FAN1_DIV+i, &fdiv)) printf(", div = %1.0f", fdiv); printf(")"); - if (!sensors_get_feature(*name, SENSORS_W83627EHF_FAN1_ALARM+i, - &alarm) && alarm) + if (sensors_get_feature(*name, SENSORS_W83627EHF_FAN1_ALARM+i, &alarm)) + alarm = fan_alarms & (1 << i); + if (alarm) printf(" ALARM"); printf("\n"); } @@ -2951,8 +2998,9 @@ void print_w83627ehf(const sensors_chip_name *name) if (valid) { print_label(label,10); print_temp_info(cur, over, hyst, HYST, i ? 1 : 0, i ? 1 : 0); - if (!sensors_get_feature(*name, SENSORS_W83627EHF_TEMP1_ALARM+i, - &alarm) && alarm) + if (sensors_get_feature(*name, SENSORS_W83627EHF_TEMP1_ALARM+i, &alarm)) + alarm = temp_alarms & (1 << i); + if (alarm) printf(" ALARM"); printf("\n"); }