From a3e40509e048868255665f6c5e931362b4fc8c97 Mon Sep 17 00:00:00 2001 From: Jean Delvare Date: Tue, 6 Mar 2012 07:34:13 +0000 Subject: [PATCH] Add support for fan[1-*]_max, fan[1-*]_min_alarm and fan[1-*]_max_alarm attributes. These are defined in the standard sysfs interface for quite some time, and at least three drivers (max6650, lm63 and applesmc) implement them so we should support them. git-svn-id: http://lm-sensors.org/svn/lm-sensors/trunk@6029 7894878c-1315-0410-8ee3-d5d059ff63e0 --- doc/libsensors-API.txt | 3 +++ lib/sensors.h | 3 +++ lib/sysfs.c | 3 +++ prog/sensors/chips.c | 38 +++++++++++++++++++++++++------------- 4 files changed, 34 insertions(+), 13 deletions(-) diff --git a/doc/libsensors-API.txt b/doc/libsensors-API.txt index 41794c4a..1d00924b 100644 --- a/doc/libsensors-API.txt +++ b/doc/libsensors-API.txt @@ -16,6 +16,9 @@ SVN HEAD enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_AVERAGE enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_LOWEST enum sensors_subfeature_type SENSORS_SUBFEATURE_CURR_HIGHEST + enum sensors_subfeature_type SENSORS_SUBFEATURE_FAN_MAX + enum sensors_subfeature_type SENSORS_SUBFEATURE_FAN_MIN_ALARM + enum sensors_subfeature_type SENSORS_SUBFEATURE_FAN_MAX_ALARM 0x431 lm-sensors 3.3.0 to 3.3.1 * Added support for intrusion detection enum sensors_feature_type SENSORS_FEATURE_INTRUSION diff --git a/lib/sensors.h b/lib/sensors.h index 6d947842..df91d243 100644 --- a/lib/sensors.h +++ b/lib/sensors.h @@ -169,11 +169,14 @@ typedef enum sensors_subfeature_type { SENSORS_SUBFEATURE_FAN_INPUT = SENSORS_FEATURE_FAN << 8, SENSORS_SUBFEATURE_FAN_MIN, + SENSORS_SUBFEATURE_FAN_MAX, SENSORS_SUBFEATURE_FAN_ALARM = (SENSORS_FEATURE_FAN << 8) | 0x80, SENSORS_SUBFEATURE_FAN_FAULT, SENSORS_SUBFEATURE_FAN_DIV, SENSORS_SUBFEATURE_FAN_BEEP, SENSORS_SUBFEATURE_FAN_PULSES, + SENSORS_SUBFEATURE_FAN_MIN_ALARM, + SENSORS_SUBFEATURE_FAN_MAX_ALARM, SENSORS_SUBFEATURE_TEMP_INPUT = SENSORS_FEATURE_TEMP << 8, SENSORS_SUBFEATURE_TEMP_MAX, diff --git a/lib/sysfs.c b/lib/sysfs.c index 9068a71a..1a8091f8 100644 --- a/lib/sysfs.c +++ b/lib/sysfs.c @@ -271,9 +271,12 @@ static const struct subfeature_type_match in_matches[] = { static const struct subfeature_type_match fan_matches[] = { { "input", SENSORS_SUBFEATURE_FAN_INPUT }, { "min", SENSORS_SUBFEATURE_FAN_MIN }, + { "max", SENSORS_SUBFEATURE_FAN_MAX }, { "div", SENSORS_SUBFEATURE_FAN_DIV }, { "pulses", SENSORS_SUBFEATURE_FAN_PULSES }, { "alarm", SENSORS_SUBFEATURE_FAN_ALARM }, + { "min_alarm", SENSORS_SUBFEATURE_FAN_MIN_ALARM }, + { "max_alarm", SENSORS_SUBFEATURE_FAN_MAX_ALARM }, { "fault", SENSORS_SUBFEATURE_FAN_FAULT }, { "beep", SENSORS_SUBFEATURE_FAN_BEEP }, { NULL, 0 } diff --git a/prog/sensors/chips.c b/prog/sensors/chips.c index 677a6178..c6ced71d 100644 --- a/prog/sensors/chips.c +++ b/prog/sensors/chips.c @@ -408,7 +408,7 @@ static void print_chip_fan(const sensors_chip_name *name, const sensors_feature *feature, int label_size) { - const sensors_subfeature *sf, *sfmin, *sfdiv; + const sensors_subfeature *sf, *sfmin, *sfmax, *sfdiv; double val; char *label; @@ -435,24 +435,36 @@ static void print_chip_fan(const sensors_chip_name *name, sfmin = sensors_get_subfeature(name, feature, SENSORS_SUBFEATURE_FAN_MIN); + sfmax = sensors_get_subfeature(name, feature, + SENSORS_SUBFEATURE_FAN_MAX); sfdiv = sensors_get_subfeature(name, feature, SENSORS_SUBFEATURE_FAN_DIV); - if (sfmin && sfdiv) - printf(" (min = %4.0f RPM, div = %1.0f)", - get_value(name, sfmin), - get_value(name, sfdiv)); - else if (sfmin) - printf(" (min = %4.0f RPM)", - get_value(name, sfmin)); - else if (sfdiv) - printf(" (div = %1.0f)", - get_value(name, sfdiv)); + if (sfmin || sfmax || sfdiv) { + printf(" ("); + if (sfmin) + printf("min = %4.0f RPM", + get_value(name, sfmin)); + if (sfmax) + printf("%smax = %4.0f RPM", + sfmin ? ", " : "", + get_value(name, sfmax)); + if (sfdiv) + printf("%sdiv = %1.0f", + (sfmin || sfmax) ? ", " : "", + get_value(name, sfdiv)); + printf(")"); + } sf = sensors_get_subfeature(name, feature, SENSORS_SUBFEATURE_FAN_ALARM); - if (sf && get_value(name, sf)) { + sfmin = sensors_get_subfeature(name, feature, + SENSORS_SUBFEATURE_FAN_MIN_ALARM); + sfmax = sensors_get_subfeature(name, feature, + SENSORS_SUBFEATURE_FAN_MAX_ALARM); + if ((sf && get_value(name, sf)) || + (sfmin && get_value(name, sfmin)) || + (sfmax && get_value(name, sfmax))) printf(" ALARM"); - } printf("\n"); }