diff --git a/CHANGES b/CHANGES index a11a9ee1..a035d000 100644 --- a/CHANGES +++ b/CHANGES @@ -2,7 +2,9 @@ lm-sensors CHANGES file ----------------------- SVN-HEAD + libsensors: Add support for instantaneous power sensors maxilife scripts: Delete (driver never ported to Linux 2.6) + sensors: Add support for instantaneous power sensors sensors-detect: Fix detection of ADT7463 and LM96000 Add VIA VX800/VX820 support Fix detection of Intel 5000 series FB-DIMM AMB diff --git a/doc/libsensors-API.txt b/doc/libsensors-API.txt index c7288c7b..df9bbb35 100644 --- a/doc/libsensors-API.txt +++ b/doc/libsensors-API.txt @@ -6,6 +6,12 @@ over time. This document summarizes these evolutions so that application authors can quickly figure out how to test for the availability of a given new feature. +0x402 lm-sensors SVN +* Added support for instantaneous power sensors + enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_INPUT + enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_INPUT_HIGHEST + enum sensors_subfeature_type SENSORS_SUBFEATURE_POWER_INPUT_LOWEST + 0x401 lm-sensors 3.0.2 to 3.0.3 * Added bus type "virtual": #define SENSORS_BUS_TYPE_VIRTUAL diff --git a/lib/sensors.h b/lib/sensors.h index 2375753a..edc58004 100644 --- a/lib/sensors.h +++ b/lib/sensors.h @@ -31,7 +31,7 @@ when the API + ABI breaks), the third digit is incremented to track small API additions like new flags / enum values. The second digit is for tracking larger additions like new methods. */ -#define SENSORS_API_VERSION 0x401 +#define SENSORS_API_VERSION 0x402 #define SENSORS_CHIP_NAME_PREFIX_ANY NULL #define SENSORS_CHIP_NAME_ADDR_ANY (-1) @@ -175,7 +175,9 @@ typedef enum sensors_subfeature_type { SENSORS_SUBFEATURE_POWER_AVERAGE = SENSORS_FEATURE_POWER << 8, SENSORS_SUBFEATURE_POWER_AVERAGE_HIGHEST, SENSORS_SUBFEATURE_POWER_AVERAGE_LOWEST, - + SENSORS_SUBFEATURE_POWER_INPUT, + SENSORS_SUBFEATURE_POWER_INPUT_HIGHEST, + SENSORS_SUBFEATURE_POWER_INPUT_LOWEST, SENSORS_SUBFEATURE_POWER_AVERAGE_INTERVAL = (SENSORS_FEATURE_POWER << 8) | 0x80, SENSORS_SUBFEATURE_ENERGY_INPUT = SENSORS_FEATURE_ENERGY << 8, diff --git a/lib/sysfs.c b/lib/sysfs.c index 39f51220..7924d8d7 100644 --- a/lib/sysfs.c +++ b/lib/sysfs.c @@ -247,6 +247,9 @@ static const struct subfeature_type_match power_matches[] = { { "average", SENSORS_SUBFEATURE_POWER_AVERAGE }, { "average_highest", SENSORS_SUBFEATURE_POWER_AVERAGE_HIGHEST }, { "average_lowest", SENSORS_SUBFEATURE_POWER_AVERAGE_LOWEST }, + { "input", SENSORS_SUBFEATURE_POWER_INPUT }, + { "input_highest", SENSORS_SUBFEATURE_POWER_INPUT_HIGHEST }, + { "input_lowest", SENSORS_SUBFEATURE_POWER_INPUT_LOWEST }, { "average_interval", SENSORS_SUBFEATURE_POWER_AVERAGE_INTERVAL }, { NULL, 0 } }; diff --git a/prog/sensors/chips.c b/prog/sensors/chips.c index 47a2d056..3215de55 100644 --- a/prog/sensors/chips.c +++ b/prog/sensors/chips.c @@ -449,8 +449,28 @@ static void print_chip_power(const sensors_chip_name *name, print_label(label, label_size); free(label); + /* Power sensors come in 2 flavors: instantaneous and averaged. + To keep things simple, we assume that each sensor only implements + one flavor. */ sf = sensors_get_subfeature(name, feature, - SENSORS_SUBFEATURE_POWER_AVERAGE); + SENSORS_SUBFEATURE_POWER_INPUT); + if (sf) { + sfmin = sensors_get_subfeature(name, feature, + SENSORS_SUBFEATURE_POWER_INPUT_HIGHEST); + sfmax = sensors_get_subfeature(name, feature, + SENSORS_SUBFEATURE_POWER_INPUT_LOWEST); + sfint = NULL; + } else { + sf = sensors_get_subfeature(name, feature, + SENSORS_SUBFEATURE_POWER_AVERAGE); + sfmin = sensors_get_subfeature(name, feature, + SENSORS_SUBFEATURE_POWER_AVERAGE_HIGHEST); + sfmax = sensors_get_subfeature(name, feature, + SENSORS_SUBFEATURE_POWER_AVERAGE_LOWEST); + sfint = sensors_get_subfeature(name, feature, + SENSORS_SUBFEATURE_POWER_AVERAGE_INTERVAL); + } + if (sf) { val = get_value(name, sf); scale_value(&val, &unit); @@ -458,12 +478,6 @@ static void print_chip_power(const sensors_chip_name *name, } else printf(" N/A"); - sfmin = sensors_get_subfeature(name, feature, - SENSORS_SUBFEATURE_POWER_AVERAGE_HIGHEST); - sfmax = sensors_get_subfeature(name, feature, - SENSORS_SUBFEATURE_POWER_AVERAGE_LOWEST); - sfint = sensors_get_subfeature(name, feature, - SENSORS_SUBFEATURE_POWER_AVERAGE_INTERVAL); if (sfmin || sfmax || sfint) { printf(" (");