Hello community,

here is the log from the commit of package sensors for openSUSE:Factory checked 
in at 2012-03-29 11:42:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/sensors (Old)
 and      /work/SRC/openSUSE:Factory/.sensors.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "sensors", Maintainer is "jdelv...@suse.com"

Changes:
--------
--- /work/SRC/openSUSE:Factory/sensors/sensors.changes  2012-03-19 
10:04:19.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.sensors.new/sensors.changes     2012-03-29 
11:42:42.000000000 +0200
@@ -1,0 +2,18 @@
+Tue Mar 20 18:08:30 CET 2012 - jdelv...@suse.de
+
+- Update to lm_sensors 3.3.2
+  * Support for many subfeatures implemented by new hwmon drivers.
+  * Fix to support a sysfs implementation change in upcoming kernels.
+  * Better printing of power sensors in sensors.
+  * Memory leaks fixed in sensord.
+  * New chips known by sensors-detect, as usual.
+- lm_sensors-r5991-improve-filtering-of-fake-DMI-data.patch,
+  lm_sensors-r5992-print-DMI-product-version.patch,
+  lm_sensors-r5993-fix-loading-of-cpuid-module.patch,
+  lm_sensors-r6016-handle-superio-wo-logdev.patch,
+  lm_sensors-r6017-fix-sysfs-detection.patch,
+  lm_sensors-r6025-sensord-fix-memory-leaks.patch,
+  lm_sensors-r6030-fix-power-interval-output.patch: Removes,
+  obsolete.
+
+-------------------------------------------------------------------

Old:
----
  lm_sensors-3.3.1.tar.bz2
  lm_sensors-r5991-improve-filtering-of-fake-DMI-data.patch
  lm_sensors-r5992-print-DMI-product-version.patch
  lm_sensors-r5993-fix-loading-of-cpuid-module.patch
  lm_sensors-r6016-handle-superio-wo-logdev.patch
  lm_sensors-r6017-fix-sysfs-detection.patch
  lm_sensors-r6025-sensord-fix-memory-leaks.patch
  lm_sensors-r6030-fix-power-interval-output.patch

New:
----
  lm_sensors-3.3.2.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ sensors.spec ++++++
--- /var/tmp/diff_new_pack.IK0K1Q/_old  2012-03-29 11:42:43.000000000 +0200
+++ /var/tmp/diff_new_pack.IK0K1Q/_new  2012-03-29 11:42:43.000000000 +0200
@@ -21,7 +21,7 @@
 Name:           sensors
 BuildRequires:  bison flex rrdtool-devel
 Url:            http://www.lm-sensors.org/
-Version:        3.3.1
+Version:        3.3.2
 Release:        1
 Summary:        Hardware health monitoring for Linux
 License:        GPL-2.0+
@@ -35,13 +35,6 @@
 Patch2:         lm_sensors-3.0.0-sensord-separate.patch
 Patch3:         lm_sensors-3.0.0-sysconfig_metadata.patch
 Patch4:         lm_sensors-3.0.3-hint-at-kernel-extra-package.patch
-Patch5:         lm_sensors-r5991-improve-filtering-of-fake-DMI-data.patch
-Patch6:         lm_sensors-r5992-print-DMI-product-version.patch
-Patch7:         lm_sensors-r5993-fix-loading-of-cpuid-module.patch
-Patch8:         lm_sensors-r6016-handle-superio-wo-logdev.patch
-Patch9:         lm_sensors-r6017-fix-sysfs-detection.patch
-Patch10:        lm_sensors-r6025-sensord-fix-memory-leaks.patch
-Patch11:        lm_sensors-r6030-fix-power-interval-output.patch
 
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 ExcludeArch:    s390 s390x
@@ -144,13 +137,6 @@
 %patch2 -p1
 %patch3 -p1
 %patch4 -p1
-%patch5 -p1
-%patch6 -p1
-%patch7 -p1
-%patch8 -p1
-%patch9 -p1
-%patch10 -p1
-%patch11 -p1
 
 %build
 RPM_OPT_FLAGS="$RPM_OPT_FLAGS"

++++++ lm_sensors-3.0.0-sysconfig_metadata.patch ++++++
--- /var/tmp/diff_new_pack.IK0K1Q/_old  2012-03-29 11:42:43.000000000 +0200
+++ /var/tmp/diff_new_pack.IK0K1Q/_new  2012-03-29 11:42:43.000000000 +0200
@@ -2,9 +2,9 @@
  prog/detect/sensors-detect |    6 ++++++
  1 file changed, 6 insertions(+)
 
---- lm_sensors-3.3.0.orig/prog/detect/sensors-detect
-+++ lm_sensors-3.3.0/prog/detect/sensors-detect
-@@ -6416,6 +6416,12 @@ sub write_config
+--- lm_sensors-3.3.2.orig/prog/detect/sensors-detect
++++ lm_sensors-3.3.2/prog/detect/sensors-detect
+@@ -6642,6 +6642,12 @@ sub write_config
                        or die "Sorry, can't create /etc/sysconfig/lm_sensors 
($!)";
                print SYSCONFIG "# Generated by sensors-detect on " . scalar 
localtime() . "\n";
                print SYSCONFIG <<'EOT';

++++++ lm_sensors-3.0.3-hint-at-kernel-extra-package.patch ++++++
--- /var/tmp/diff_new_pack.IK0K1Q/_old  2012-03-29 11:42:43.000000000 +0200
+++ /var/tmp/diff_new_pack.IK0K1Q/_new  2012-03-29 11:42:43.000000000 +0200
@@ -6,9 +6,9 @@
  prog/detect/sensors-detect |   11 +++++++++--
  1 file changed, 9 insertions(+), 2 deletions(-)
 
---- lm_sensors-3.3.0.orig/prog/detect/sensors-detect
-+++ lm_sensors-3.3.0/prog/detect/sensors-detect
-@@ -2421,12 +2421,15 @@ sub initialize_conf
+--- lm_sensors-3.3.2.orig/prog/detect/sensors-detect
++++ lm_sensors-3.3.2/prog/detect/sensors-detect
+@@ -2567,12 +2567,15 @@ sub initialize_conf
  # [2] -> SUBLEVEL
  # [3] -> EXTRAVERSION
  #
@@ -25,7 +25,7 @@
        chomp($kernel_arch = `uname -m`);
  
        # We only support kernels >= 2.6.5
-@@ -6358,7 +6361,11 @@ sub generate_modprobes
+@@ -6584,7 +6587,11 @@ sub generate_modprobes
                        # isn't supported
                        if ((($? >> 8) == 0) && ! $modulefound) {
                                print "Warning: the required module $driver is 
not currently installed\n".

++++++ lm_sensors-3.3.1.tar.bz2 -> lm_sensors-3.3.2.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lm_sensors-3.3.1/CHANGES new/lm_sensors-3.3.2/CHANGES
--- old/lm_sensors-3.3.1/CHANGES        2011-07-21 22:36:42.000000000 +0200
+++ new/lm_sensors-3.3.2/CHANGES        2012-03-14 08:43:39.000000000 +0100
@@ -1,6 +1,35 @@
 lm-sensors CHANGES file
 -----------------------
 
+3.3.2 (2012-03-14)
+  libsensors: Added support for new sysfs attributes
+              Change sysfs detection to survive upcoming kernel changes
+  sensord: Fix memory leaks revealed by valgrind
+           Minor performance improvements
+  sensors: Added support for new sysfs attributes
+           Display both instantaneous and average power if available.
+           Report thermal sensor type 1 as CPU diode
+           Align power values better
+           Fix power interval output
+  fancontrol: Support setup where one PWM output controls several fans
+              Output error messages to stderr
+  sensors-detect: Stop calling for PIIX5 SMBus testers
+                  Improve filtering of fake DMI data
+                  Print DMI system/product version if available
+                  Fix loading of the cpuid module
+                  Make LM73 detection less problematic
+                  Add detection of National Semiconductor LM96163
+                  Add detection of GMT G781
+                  Properly handle Super-I/O chips without logical device
+                  Add detection of National Semiconductor LM96080
+                  Add detection of ITE IT8771E
+                  Add detection of ITE IT8781F, IT8782F and IT8783F
+                  Add detection of ITE IT8510E/TE/G, IT8511E/TE/G,
+                         IT8513E/F/G, and IT8518E
+                  Add detection of ST Microelectronics STTS2002 and STTS3000
+                  Add detection of IDT TSE2002GB2, TS3000GB2, Microchip 
MCP9804,
+                         and Atmel AT30TS00
+
 3.3.1 (2011-07-21)
   isadump: Add support for word (16-bit) and long (32-bit) reads
   isaset: Add support for word (16-bit) and long (32-bit) writes
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lm_sensors-3.3.1/doc/developers/lm_sensors.lsm 
new/lm_sensors-3.3.2/doc/developers/lm_sensors.lsm
--- old/lm_sensors-3.3.1/doc/developers/lm_sensors.lsm  2011-07-21 
22:36:42.000000000 +0200
+++ new/lm_sensors-3.3.2/doc/developers/lm_sensors.lsm  2012-03-14 
08:43:39.000000000 +0100
@@ -1,7 +1,7 @@
 Begin4
 Title: lm_sensors
-Version: 3.3.1
-Entered-date: 2011-07-21
+Version: 3.3.2
+Entered-date: 2012-03-14
 Description: Hardware health monitoring package for Linux. It consists of 
              a library to allow applications to read sensors data more
              easily, and of an example program to pretty print this data.
@@ -11,8 +11,8 @@
 Author: kh...@linux-fr.org (Jean Delvare)
 Maintained-by: kh...@linux-fr.org (Jean Delvare)
 Primary-site: http://dl.lm-sensors.org /lm-sensors/releases/
-              lm_sensors-3.3.1.tar.bz2
-              lm_sensors-3.3.1.tar.bz2.sig
+              lm_sensors-3.3.2.tar.bz2
+              lm_sensors-3.3.2.tar.bz2.sig
 Alternate-site: ftp.netroedge.com /pub/lm-sensors/
 Copying-policy: GPL/LGPL
 End
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lm_sensors-3.3.1/doc/donations 
new/lm_sensors-3.3.2/doc/donations
--- old/lm_sensors-3.3.1/doc/donations  2011-02-05 18:59:28.000000000 +0100
+++ new/lm_sensors-3.3.2/doc/donations  2012-03-13 20:30:30.000000000 +0100
@@ -96,6 +96,10 @@
 ASUSTeK                ASUS P5MT-S                                     2006-03
                Platform for W83792D related development        Rudolf Marek
 
+Winbond                Asus P4P800-VM                                  2006-08
+               This board has a Winbond W83627THF hardware     Jean Delvare
+               monitoring chip.
+
 Winbond                Asus P4P800-X, Pentium 4 2.8 GHz, 512 MB RAM    2006-08
                This board has an (hidden) Intel 82801EB        Jean Delvare
                (ICH5) SMBus with SPD EEPROMs connected, and
@@ -124,3 +128,6 @@
                and power supply.                               Guenter Roeck
                Used to add support for NCT6775F (W83677HG-I)
                to w83627ehf driver.
+
+AMD            Asus EAH6450 Silent video card                  2011-12
+                                                               Jean Delvare
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lm_sensors-3.3.1/doc/libsensors-API.txt 
new/lm_sensors-3.3.2/doc/libsensors-API.txt
--- old/lm_sensors-3.3.1/doc/libsensors-API.txt 2011-07-21 22:36:42.000000000 
+0200
+++ new/lm_sensors-3.3.2/doc/libsensors-API.txt 2012-03-14 08:43:39.000000000 
+0100
@@ -6,6 +6,19 @@
 authors can quickly figure out how to test for the availability of a
 given new feature.
 
+0x432
+* Added support for new sysfs attributes
+  enum sensors_subfeature_type SENSORS_SUBFEATURE_IN_AVERAGE
+  enum sensors_subfeature_type SENSORS_SUBFEATURE_IN_LOWEST
+  enum sensors_subfeature_type SENSORS_SUBFEATURE_IN_HIGHEST
+  enum sensors_subfeature_type SENSORS_SUBFEATURE_TEMP_LOWEST
+  enum sensors_subfeature_type SENSORS_SUBFEATURE_TEMP_HIGHEST
+  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 -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lm_sensors-3.3.1/etc/sensors.conf.default 
new/lm_sensors-3.3.2/etc/sensors.conf.default
--- old/lm_sensors-3.3.1/etc/sensors.conf.default       2011-05-28 
11:56:27.000000000 +0200
+++ new/lm_sensors-3.3.2/etc/sensors.conf.default       2012-01-31 
15:25:29.000000000 +0100
@@ -12,7 +12,7 @@
 # Such custom configuration files for specific mainboards can be found at
 # http://www.lm-sensors.org/wiki/Configurations
 
-chip "lm78-*" "lm79-*" "lm80-*"
+chip "lm78-*" "lm79-*" "lm80-*" "lm96080-*"
 
     label temp1 "M/B Temp"
 
@@ -323,7 +323,7 @@
     set in7_min  3.3 * 0.90
     set in7_max  3.3 * 1.10
     set in8_min  3.0 * 0.90
-    set in8_max  3.0 * 1.10
+    set in8_max  3.3 * 1.10
 
 
 chip "w83627uhg-*"
@@ -340,7 +340,7 @@
     set in7_min  5.0 * 0.90
     set in7_max  5.0 * 1.10
     set in8_min  3.0 * 0.90
-    set in8_max  3.0 * 1.10
+    set in8_max  3.3 * 1.10
 
 
 chip "f71805f-*"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lm_sensors-3.3.1/lib/Module.mk 
new/lm_sensors-3.3.2/lib/Module.mk
--- old/lm_sensors-3.3.1/lib/Module.mk  2011-03-06 21:20:55.000000000 +0100
+++ new/lm_sensors-3.3.2/lib/Module.mk  2012-03-14 08:43:39.000000000 +0100
@@ -33,7 +33,7 @@
 # changed in a backward incompatible way.  The interface is defined by
 # the public header files - in this case they are error.h and sensors.h.
 LIBMAINVER := 4
-LIBMINORVER := 3.1
+LIBMINORVER := 3.2
 LIBVER := $(LIBMAINVER).$(LIBMINORVER)
 
 # The static lib name, the shared lib name, and the internal ('so') name of
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lm_sensors-3.3.1/lib/sensors.h 
new/lm_sensors-3.3.2/lib/sensors.h
--- old/lm_sensors-3.3.1/lib/sensors.h  2011-03-28 09:02:37.000000000 +0200
+++ new/lm_sensors-3.3.2/lib/sensors.h  2012-03-14 08:43:39.000000000 +0100
@@ -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            0x431
+#define SENSORS_API_VERSION            0x432
 
 #define SENSORS_CHIP_NAME_PREFIX_ANY   NULL
 #define SENSORS_CHIP_NAME_ADDR_ANY     (-1)
@@ -157,6 +157,9 @@
        SENSORS_SUBFEATURE_IN_MAX,
        SENSORS_SUBFEATURE_IN_LCRIT,
        SENSORS_SUBFEATURE_IN_CRIT,
+       SENSORS_SUBFEATURE_IN_AVERAGE,
+       SENSORS_SUBFEATURE_IN_LOWEST,
+       SENSORS_SUBFEATURE_IN_HIGHEST,
        SENSORS_SUBFEATURE_IN_ALARM = (SENSORS_FEATURE_IN << 8) | 0x80,
        SENSORS_SUBFEATURE_IN_MIN_ALARM,
        SENSORS_SUBFEATURE_IN_MAX_ALARM,
@@ -166,11 +169,14 @@
 
        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,
@@ -181,6 +187,8 @@
        SENSORS_SUBFEATURE_TEMP_LCRIT,
        SENSORS_SUBFEATURE_TEMP_EMERGENCY,
        SENSORS_SUBFEATURE_TEMP_EMERGENCY_HYST,
+       SENSORS_SUBFEATURE_TEMP_LOWEST,
+       SENSORS_SUBFEATURE_TEMP_HIGHEST,
        SENSORS_SUBFEATURE_TEMP_ALARM = (SENSORS_FEATURE_TEMP << 8) | 0x80,
        SENSORS_SUBFEATURE_TEMP_MAX_ALARM,
        SENSORS_SUBFEATURE_TEMP_MIN_ALARM,
@@ -215,6 +223,9 @@
        SENSORS_SUBFEATURE_CURR_MAX,
        SENSORS_SUBFEATURE_CURR_LCRIT,
        SENSORS_SUBFEATURE_CURR_CRIT,
+       SENSORS_SUBFEATURE_CURR_AVERAGE,
+       SENSORS_SUBFEATURE_CURR_LOWEST,
+       SENSORS_SUBFEATURE_CURR_HIGHEST,
        SENSORS_SUBFEATURE_CURR_ALARM = (SENSORS_FEATURE_CURR << 8) | 0x80,
        SENSORS_SUBFEATURE_CURR_MIN_ALARM,
        SENSORS_SUBFEATURE_CURR_MAX_ALARM,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lm_sensors-3.3.1/lib/sysfs.c 
new/lm_sensors-3.3.2/lib/sysfs.c
--- old/lm_sensors-3.3.1/lib/sysfs.c    2011-03-04 21:37:43.000000000 +0100
+++ new/lm_sensors-3.3.2/lib/sysfs.c    2012-03-06 08:34:13.000000000 +0100
@@ -24,6 +24,7 @@
 
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <sys/vfs.h>
 #include <unistd.h>
 #include <string.h>
 #include <stdlib.h>
@@ -40,6 +41,7 @@
 /****************************************************************************/
 
 #define ATTR_MAX       128
+#define SYSFS_MAGIC    0x62656572
 
 /*
  * Read an attribute from sysfs
@@ -233,6 +235,8 @@
        { "lcrit", SENSORS_SUBFEATURE_TEMP_LCRIT },
        { "emergency", SENSORS_SUBFEATURE_TEMP_EMERGENCY },
        { "emergency_hyst", SENSORS_SUBFEATURE_TEMP_EMERGENCY_HYST },
+       { "lowest", SENSORS_SUBFEATURE_TEMP_LOWEST },
+       { "highest", SENSORS_SUBFEATURE_TEMP_HIGHEST },
        { "alarm", SENSORS_SUBFEATURE_TEMP_ALARM },
        { "min_alarm", SENSORS_SUBFEATURE_TEMP_MIN_ALARM },
        { "max_alarm", SENSORS_SUBFEATURE_TEMP_MAX_ALARM },
@@ -252,6 +256,9 @@
        { "max", SENSORS_SUBFEATURE_IN_MAX },
        { "lcrit", SENSORS_SUBFEATURE_IN_LCRIT },
        { "crit", SENSORS_SUBFEATURE_IN_CRIT },
+       { "average", SENSORS_SUBFEATURE_IN_AVERAGE },
+       { "lowest", SENSORS_SUBFEATURE_IN_LOWEST },
+       { "highest", SENSORS_SUBFEATURE_IN_HIGHEST },
        { "alarm", SENSORS_SUBFEATURE_IN_ALARM },
        { "min_alarm", SENSORS_SUBFEATURE_IN_MIN_ALARM },
        { "max_alarm", SENSORS_SUBFEATURE_IN_MAX_ALARM },
@@ -264,9 +271,12 @@
 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 }
@@ -302,6 +312,9 @@
        { "max", SENSORS_SUBFEATURE_CURR_MAX },
        { "lcrit", SENSORS_SUBFEATURE_CURR_LCRIT },
        { "crit", SENSORS_SUBFEATURE_CURR_CRIT },
+       { "average", SENSORS_SUBFEATURE_CURR_AVERAGE },
+       { "lowest", SENSORS_SUBFEATURE_CURR_LOWEST },
+       { "highest", SENSORS_SUBFEATURE_CURR_HIGHEST },
        { "alarm", SENSORS_SUBFEATURE_CURR_ALARM },
        { "min_alarm", SENSORS_SUBFEATURE_CURR_MIN_ALARM },
        { "max_alarm", SENSORS_SUBFEATURE_CURR_MAX_ALARM },
@@ -585,11 +598,11 @@
 /* returns !0 if sysfs filesystem was found, 0 otherwise */
 int sensors_init_sysfs(void)
 {
-       struct stat statbuf;
+       struct statfs statfsbuf;
 
        snprintf(sensors_sysfs_mount, NAME_MAX, "%s", "/sys");
-       if (stat(sensors_sysfs_mount, &statbuf) < 0
-        || statbuf.st_nlink <= 2)      /* Empty directory */
+       if (statfs(sensors_sysfs_mount, &statfsbuf) < 0
+        || statfsbuf.f_type != SYSFS_MAGIC)
                return 0;
 
        return 1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lm_sensors-3.3.1/prog/detect/sensors-detect 
new/lm_sensors-3.3.2/prog/detect/sensors-detect
--- old/lm_sensors-3.3.1/prog/detect/sensors-detect     2011-07-10 
21:22:53.000000000 +0200
+++ new/lm_sensors-3.3.2/prog/detect/sensors-detect     2012-03-07 
17:14:01.000000000 +0100
@@ -41,7 +41,7 @@
 use vars qw(@pci_adapters @chip_ids @ipmi_ifs @non_hwmon_chip_ids
            $i2c_addresses_to_scan $revision @i2c_byte_cache);
 
-$revision = '$Revision: 5984 $ ($Date: 2011-07-10 21:22:53 +0200 (dim. 10 
juil. 2011) $)';
+$revision = '$Revision: 6031 $ ($Date: 2012-03-07 17:14:01 +0100 (mer. 07 mars 
2012) $)';
 $revision =~ s/\$\w+: (.*?) \$/$1/g;
 $revision =~ s/ \([^()]*\)//;
 
@@ -60,7 +60,7 @@
                vendid  => 0x8086,
                devid   => 0x7603,
                procid  => "Intel 82372FB PIIX5 ACPI",
-               driver  => "to-be-tested",
+               driver  => "to-be-written",
        }, {
                vendid  => 0x8086,
                devid   => 0x719b,
@@ -153,6 +153,26 @@
                driver  => "i2c-i801",
        }, {
                vendid  => 0x8086,
+               devid   => 0x1D22,
+               procid  => "Intel Patsburg (PCH)",
+               driver  => "i2c-i801",
+       }, {
+               vendid  => 0x8086,
+               devid   => 0x2330,
+               procid  => "Intel DH89xxCC (PCH)",
+               driver  => "i2c-i801",
+       }, {
+               vendid  => 0x8086,
+               devid   => 0x1E22,
+               procid  => "Intel Panther Point (PCH)",
+               driver  => "i2c-i801",
+       }, {
+               vendid  => 0x8086,
+               devid   => 0x8C22,
+               procid  => "Intel Lynx Point (PCH)",
+               driver  => "i2c-i801",
+       }, {
+               vendid  => 0x8086,
                devid   => 0x8119,
                procid  => "Intel SCH",
                driver  => "i2c-isch",
@@ -520,7 +540,12 @@
                name => "National Semiconductor LM80",
                driver => "lm80",
                i2c_addrs => [0x28..0x2f],
-               i2c_detect => sub { lm80_detect(@_); },
+               i2c_detect => sub { lm80_detect(@_, 0); },
+       }, {
+               name => "National Semiconductor LM96080",
+               driver => "lm80",
+               i2c_addrs => [0x28..0x2f],
+               i2c_detect => sub { lm80_detect(@_, 1); },
        }, {
                name => "National Semiconductor LM85",
                driver => "lm85",
@@ -657,7 +682,7 @@
                i2c_addrs => [0x2c..0x2e],
                i2c_detect => sub { lm93_detect(@_, 0); },
        }, {
-               name => "National Semiconductor LM94",
+               name => "National Semiconductor LM94 or LM96194",
                driver => "lm93",
                i2c_addrs => [0x2c..0x2e],
                i2c_detect => sub { lm93_detect(@_, 1); },
@@ -818,6 +843,11 @@
                i2c_addrs => [0x18..0x1a, 0x29..0x2b, 0x4c..0x4e],
                i2c_detect => sub { adm1021_detect(@_, 1); },
        }, {
+               name => "Global Mixed-mode Technology G781",
+               driver => "lm90",
+               i2c_addrs => [0x4c, 0x4d],
+               i2c_detect => sub { lm90_detect(@_, 15); },
+       }, {
                name => "Maxim MAX1617",
                driver => "adm1021",
                i2c_addrs => [0x18..0x1a, 0x29..0x2b, 0x4c..0x4e],
@@ -1023,6 +1053,11 @@
                i2c_addrs => [0x18, 0x4e],
                i2c_detect => sub { lm63_detect(@_, 3); },
        }, {
+               name => "National Semiconductor LM96163",
+               driver => "lm63",
+               i2c_addrs => [0x4c],
+               i2c_detect => sub { lm63_detect(@_, 4); },
+       }, {
                name => "Fintek F75363SG",
                driver => "lm63", # Not yet
                i2c_addrs => [0x4c],
@@ -1315,6 +1350,16 @@
                i2c_addrs => [0x18..0x1f],
                i2c_detect => sub { jedec_JC42_4_detect(@_, 10); },
        }, {
+               name => "ST STTS2002",
+               driver => "jc42",
+               i2c_addrs => [0x18..0x1f],
+               i2c_detect => sub { jedec_JC42_4_detect(@_, 11); },
+       }, {
+               name => "ST STTS3000",
+               driver => "jc42",
+               i2c_addrs => [0x18..0x1f],
+               i2c_detect => sub { jedec_JC42_4_detect(@_, 12); },
+       }, {
                name => "NXP SE97/SE97B",
                driver => "jc42",
                i2c_addrs => [0x18..0x1f],
@@ -1340,6 +1385,11 @@
                i2c_addrs => [0x18..0x1f],
                i2c_detect => sub { jedec_JC42_4_detect(@_, 5); },
        }, {
+               name => "Microchip MCP9804",
+               driver => "jc42",
+               i2c_addrs => [0x18..0x1f],
+               i2c_detect => sub { jedec_JC42_4_detect(@_, 13); },
+       }, {
                name => "Microchip MCP98242",
                driver => "jc42",
                i2c_addrs => [0x18..0x1f],
@@ -1359,6 +1409,11 @@
                driver => "jc42",
                i2c_addrs => [0x18..0x1f],
                i2c_detect => sub { jedec_JC42_4_detect(@_, 9); },
+       }, {
+               name => "Atmel AT30TS00",
+               driver => "jc42",
+               i2c_addrs => [0x18..0x1f],
+               i2c_detect => sub { jedec_JC42_4_detect(@_, 14); },
        }
 );
 
@@ -1560,15 +1615,35 @@
                logdev => 0x14,
                features => FEAT_IN | FEAT_TEMP,
        }, {
+               name => "ITE IT8510E/TE/G Super IO",
+               driver => "to-be-written",
+               devid => 0x8510,
+               features => FEAT_IN | FEAT_FAN,
+       }, {
+               name => "ITE IT8511E/TE/G Super IO",
+               driver => "to-be-written",
+               devid => 0x8511,
+               features => FEAT_IN | FEAT_FAN,
+       }, {
                name => "ITE IT8512E/F/G Super IO",
                driver => "to-be-written",
                devid => 0x8512,
                features => FEAT_IN | FEAT_FAN,
        }, {
+               name => "ITE IT8513E/F/G Super IO",
+               driver => "to-be-written",
+               devid => 0x8513,
+               features => FEAT_IN | FEAT_FAN,
+       }, {
                name => "ITE IT8516E/F/G Super IO",
                driver => "to-be-written",
                devid => 0x8516,
                features => FEAT_IN | FEAT_FAN,
+       }, {
+               name => "ITE IT8518E Super IO",
+               driver => "to-be-written",
+               devid => 0x8518,
+               features => FEAT_IN | FEAT_FAN,
        }
 );
 
@@ -1908,7 +1983,7 @@
                logdev => 0x0b,
                features => FEAT_IN | FEAT_FAN | FEAT_TEMP,
        }, {
-               name => "Winbond W83627DHG-P Super IO Sensors",
+               name => "Winbond W83627DHG-P/W83527HG Super IO Sensors",
                driver => "w83627ehf",
                devid => 0xB070,
                devid_mask => 0xFFF0,
@@ -2120,16 +2195,40 @@
                features => FEAT_IN | FEAT_FAN | FEAT_TEMP,
        }, {
                name => "ITE IT8728F Super IO Sensors",
-               driver => "to-be-written",      # it87
+               driver => "it87",
                devid => 0x8728,
                logdev => 0x04,
                features => FEAT_IN | FEAT_FAN | FEAT_TEMP,
        }, {
+               name => "ITE IT8771E Super IO Sensors",
+               driver => "to-be-written",      # it87
+               devid => 0x8771,
+               logdev => 0x04,
+               features => FEAT_IN | FEAT_FAN | FEAT_TEMP,
+       }, {
                name => "ITE IT8772E Super IO Sensors",
                driver => "to-be-written",      # it87
                devid => 0x8772,
                logdev => 0x04,
                features => FEAT_IN | FEAT_FAN | FEAT_TEMP,
+       }, {
+               name => "ITE IT8781F Super IO Sensors",
+               driver => "to-be-written",      # it87
+               devid => 0x8781,
+               logdev => 0x04,
+               features => FEAT_IN | FEAT_FAN | FEAT_TEMP,
+       }, {
+               name => "ITE IT8782F Super IO Sensors",
+               driver => "to-be-written",      # it87
+               devid => 0x8782,
+               logdev => 0x04,
+               features => FEAT_IN | FEAT_FAN | FEAT_TEMP,
+       }, {
+               name => "ITE IT8783F Super IO Sensors",
+               driver => "to-be-written",      # it87
+               devid => 0x8783,
+               logdev => 0x04,
+               features => FEAT_IN | FEAT_FAN | FEAT_TEMP,
        }
 );
 
@@ -2764,8 +2863,11 @@
        );
        # Many BIOS have broken DMI data, filter it out
        my %fake = (
-               'System Manufacturer' => 1,
-               'System Name' => 1,
+               'system manufacturer' => 1,
+               'system product name' => 1,
+               'system name' => 1,
+               'system version' => 1,
+               'to be filled by o.e.m.' => 1,
        );
        my $dmi_id_dir;
 
@@ -2794,7 +2896,7 @@
                        next;
                }
                $dmi{$k} =~ s/\s*$//;
-               delete $dmi{$k} if $dmi{$k} eq '' || exists $fake{$dmi{$k}};
+               delete $dmi{$k} if $dmi{$k} eq '' || exists $fake{lc($dmi{$k})};
        }
 }
 
@@ -2810,6 +2912,7 @@
        
        if (defined $system) {
                print "# System: $system";
+               print " [$dmi{product_version}]" if defined 
$dmi{product_version};
                print " (laptop)" if (is_laptop());
                print "\n";
        }
@@ -2970,16 +3073,8 @@
                next unless exists $pci_list{$key};
 
                $device = $pci_list{$key};
-               if ($try->{driver} eq "to-be-tested") {
-                       print "\nWe are currently looking for testers for this 
adapter!\n".
-                             "Please check 
http://www.lm-sensors.org/wiki/Devices\n";.
-                             "and/or contact us if you want to help.\n\n".
-                             "Continue... ";
-                       <STDIN>;
-                       print "\n";
-               }
 
-               if ($try->{driver} =~ m/^to-be-/) {
+               if ($try->{driver} eq "to-be-written") {
                        printf "No known driver for device \%s: \%s\n",
                               pci_busid($device), $try->{procid};
                } else {
@@ -3741,6 +3836,10 @@
                print "\n    (hardware monitoring capabilities accessible via 
SMBus only)\n";
                return FEAT_SMBUS;
        }
+       if (!exists $chip->{logdev}) {
+               print "\n    (no support yet)\n";
+               return 0;
+       }
 
        # Switch to the sensor logical device
        outb($addrreg, $superio{logdevreg});
@@ -4049,7 +4148,9 @@
        # Bits that always return 0
        return if ($conf & 0x0c) or ($status & 0x10);
 
-       return if i2c_smbus_read_word_data($file, 0x07) != 0x9001;
+       # Test with byte read first to avoid confusing other chips
+       return if i2c_smbus_read_byte_data($file, 0x07) != 0x01
+              or i2c_smbus_read_word_data($file, 0x07) != 0x9001;
 
        # Make sure the chip supports SMBus read word transactions
        my $cur = i2c_smbus_read_word_data($file, 0x00);
@@ -4228,11 +4329,15 @@
        return ($slope == 0x10 && $counter <= $slope) ? 3 : 2;
 }
 
+# Chip to detect: 0 = LM80, 1 = LM96080
 # Registers used:
 #   0x00: Configuration register
 #   0x02: Interrupt state register
-#   0x2a-0x3d: Limits registers
-# This one is easily misdetected since it doesn't provide identification
+#   0x07: Converstion rate register (LM96080 only)
+#   0x2a-0x3d: Limits registers (LM80 only)
+#   0x3e: Manufacturer's ID register (LM96080 only)
+#   0x3f: Stepping/die revision ID register (LM96080 only)
+# The LM80 is easily misdetected since it doesn't provide identification
 # registers. So we have to use some tricks:
 #   - 6-bit addressing, so limits readings modulo 0x40 should be unchanged
 #   - positive temperature limits
@@ -4245,44 +4350,51 @@
 # to loose comparisons did not change the score.
 sub lm80_detect
 {
-       my ($file, $addr) = @_;
+       my ($file, $addr, $chip) = @_;
        my ($i, $reg);
 
        return if (i2c_smbus_read_byte_data($file, 0x00) & 0x80) != 0;
        return if (i2c_smbus_read_byte_data($file, 0x02) & 0xc0) != 0;
 
-       for ($i = 0x2a; $i <= 0x3d; $i++) {
-               $reg = i2c_smbus_read_byte_data($file, $i);
-               return if i2c_smbus_read_byte_data($file, $i+0x40) != $reg;
-               return if i2c_smbus_read_byte_data($file, $i+0x80) != $reg;
-               return if i2c_smbus_read_byte_data($file, $i+0xc0) != $reg;
-       }
-
-       # Refine a bit by checking whether limits are in the correct order
-       # (min<max for voltages, hyst<max for temperature). Since it is still
-       # possible that the chip is an LM80 with limits not properly set,
-       # a few "errors" are tolerated.
-       my $confidence = 0;
-       for ($i = 0x2a; $i <= 0x3a; $i++) {
+       if ($chip == 0) {
+               for ($i = 0x2a; $i <= 0x3d; $i++) {
+                       $reg = i2c_smbus_read_byte_data($file, $i);
+                       return if i2c_smbus_read_byte_data($file, $i+0x40) != 
$reg;
+                       return if i2c_smbus_read_byte_data($file, $i+0x80) != 
$reg;
+                       return if i2c_smbus_read_byte_data($file, $i+0xc0) != 
$reg;
+               }
+
+               # Refine a bit by checking whether limits are in the correct 
order
+               # (min<max for voltages, hyst<max for temperature). Since it is 
still
+               # possible that the chip is an LM80 with limits not properly 
set,
+               # a few "errors" are tolerated.
+               my $confidence = 0;
+               for ($i = 0x2a; $i <= 0x3a; $i++) {
+                       $confidence++
+                               if i2c_smbus_read_byte_data($file, $i) < 
i2c_smbus_read_byte_data($file, $i+1);
+               }
+               # hot temp<OS temp
                $confidence++
-                       if i2c_smbus_read_byte_data($file, $i) < 
i2c_smbus_read_byte_data($file, $i+1);
-       }
-       # hot temp<OS temp
-       $confidence++
-               if i2c_smbus_read_byte_data($file, 0x38) < 
i2c_smbus_read_byte_data($file, 0x3a);
+                       if i2c_smbus_read_byte_data($file, 0x38) < 
i2c_smbus_read_byte_data($file, 0x3a);
 
-       # Negative temperature limits are unlikely.
-       for ($i = 0x3a; $i <= 0x3d; $i++) {
-               $confidence++ if (i2c_smbus_read_byte_data($file, $i) & 0x80) 
== 0;
-       }
+               # Negative temperature limits are unlikely.
+               for ($i = 0x3a; $i <= 0x3d; $i++) {
+                       $confidence++ if (i2c_smbus_read_byte_data($file, $i) & 
0x80) == 0;
+               }
 
-       # $confidence is between 0 and 14
-       $confidence = ($confidence >> 1) - 4;
-       # $confidence is now between -4 and 3
+               # $confidence is between 0 and 14
+               $confidence = ($confidence >> 1) - 4;
+               # $confidence is now between -4 and 3
 
-       return unless $confidence > 0;
+               return unless $confidence > 0;
+               return $confidence;
+       } elsif ($chip == 1) {
+               return if (i2c_smbus_read_byte_data($file, 0x07) & 0xfe) != 0;
+               return if i2c_smbus_read_byte_data($file, 0x3e) != 0x01;
+               return if i2c_smbus_read_byte_data($file, 0x3f) != 0x08;
 
-       return $confidence;
+               return 6;
+       }
 }
 
 # Registers used:
@@ -4362,7 +4474,8 @@
 #                6 = MAX6646/MAX6647/MAX6648/MAX6649/MAX6692,
 #                8 = W83L771W/G, 9 = TMP401, 10 = TMP411,
 #                11 = W83L771AWG/ASG, 12 = MAX6690,
-#                13 = ADT7461A/NCT1008, 14 = SA56004
+#                13 = ADT7461A/NCT1008, 14 = SA56004,
+#                15 = G781
 # Registers used:
 #   0x03: Configuration
 #   0x04: Conversion rate
@@ -4474,6 +4587,12 @@
                return if $mid != 0xa1;         # NXP Semiconductor/Philips
                return 6 if $cid == 0x00;       # SA56004
        }
+       if ($chip == 15) {
+               return if ($conf & 0x3f) != 0;
+               return if $rate > 0x08;
+               return if $mid != 0x47;         # GMT
+               return 8 if $cid == 0x01;       # G781
+       }
        return;
 }
 
@@ -4602,7 +4721,7 @@
        return 6;
 }
 
-# Chip to detect: 1 = LM63, 2 = F75363SG, 3 = LM64
+# Chip to detect: 1 = LM63, 2 = F75363SG, 3 = LM64, 4 = LM96163
 # Registers used:
 #   0xfe: Manufacturer ID
 #   0xff: Chip ID / die revision
@@ -4632,6 +4751,11 @@
                       || $cid != 0x51;         # LM64
                return if ($conf & 0x18) != 0x00
                       || ($mask & 0xa4) != 0xa4;
+       } elsif ($chip == 4) {
+               return if $mid != 0x01          # National Semiconductor
+                      || $cid != 0x49;         # LM96163
+               return if ($conf & 0x18) != 0x00
+                      || ($mask & 0xa4) != 0xa4;
        }
 
        return 6;
@@ -5881,7 +6005,8 @@
 # Chip to detect: 0 = STTS424, 1 = SE97/SE97B, 2 = SE98, 3 = ADT7408,
 #                 4 = TS3000/TSE2002, 5 = MAX6604, 6 = MCP98242,
 #                 7 = MCP98243, 8 = MCP9843, 9 = CAT6095 / CAT34TS02,
-#                 10 = STTS424E
+#                 10 = STTS424E, 11 = STTS2002, 12 = STTS3000
+#                 13 = MCP9804, 14 = AT30TS00
 # Registers used:
 #   0x00: Capabilities
 #   0x01: Configuration
@@ -5938,6 +6063,18 @@
        } elsif ($chip == 10) {
                return unless $manid == 0x10;           # STMicrolectronics
                return unless $devid == 0x00;           # STTS424E02
+       } elsif ($chip == 11) {
+               return unless $manid == 0x10;           # STMicrolectronics
+               return unless $devid == 0x03;           # STTS2002
+       } elsif ($chip == 12) {
+               return unless $manid == 0x10;           # STMicrolectronics
+               return unless $devid == 0x02;           # STTS3000
+       } elsif ($chip == 13) {
+               return unless $manid == 0x00;           # MCP
+               return unless $devid == 02;             # MCP9804
+       } elsif ($chip == 14) {
+               return unless $manid == 0x00;           # Atmel
+               return unless $devid == 0x82;           # AT30TS00
        }
 
        # Now, do it all again with words. Note that we get
@@ -5964,7 +6101,7 @@
                return unless $devid == 0x0108;         # ADT7408
        } elsif ($chip == 4) {
                return unless $manid == 0xb300;         # IDT
-               return unless $devid == 0x0329;         # TS3000/TSE2002
+               return unless $devid == 0x0329 || $devid == 0x1229; # 
TS3000/TSE2002
        } elsif ($chip == 5) {
                return unless $manid == 0x4d00;         # MAXIM
                return unless $devid == 0x003e;         # MAX6604
@@ -5983,6 +6120,18 @@
        } elsif ($chip == 10) {
                return unless $manid == 0x4a10;         # STMicrolectronics
                return unless ($devid & 0xfeff) == 0x0000; # STTS424E02
+       } elsif ($chip == 11) {
+               return unless $manid == 0x4a10;         # STMicrolectronics
+               return unless ($devid & 0xfeff) == 0x0003; # STTS2002
+       } elsif ($chip == 12) {
+               return unless $manid == 0x4a10;         # STMicrolectronics
+               return unless ($devid & 0xfeff) == 0x0002; # STTS3000
+       } elsif ($chip == 13) {
+               return unless $manid == 0x5400;         # MCP
+               return unless ($devid & 0xfcff) == 0x0002; # MCP9804
+       } elsif ($chip == 14) {
+               return unless $manid == 0x1f00;         # Atmel
+               return unless ($devid & 0xfeff) == 0x0082; # AT30TS00
        }
 
        return 5;
@@ -6620,7 +6769,7 @@
              "Do you want to scan for them? This is totally safe. (YES/no): ";
        unless (<STDIN> =~ /^\s*n/i) {
                # Load the cpuid driver if needed
-               unless (-e "/dev/cpu/$cpu[0]->{nr}/cpuid") {
+               unless (-e "$sysfs_root/class/cpuid") {
                        load_module("cpuid");
                        udev_settle();
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lm_sensors-3.3.1/prog/pwm/fancontrol 
new/lm_sensors-3.3.2/prog/pwm/fancontrol
--- old/lm_sensors-3.3.1/prog/pwm/fancontrol    2009-09-16 17:57:53.000000000 
+0200
+++ new/lm_sensors-3.3.2/prog/pwm/fancontrol    2011-12-04 17:54:05.000000000 
+0100
@@ -49,7 +49,7 @@
        echo "Loading configuration from $1 ..."
        if [ ! -r "$1" ]
        then
-               echo "Error: Can't read configuration file"
+               echo "Error: Can't read configuration file" >&2
                exit 1
        fi
 
@@ -70,13 +70,13 @@
        # Check whether all mandatory settings are set
        if [[ -z ${INTERVAL} || -z ${FCTEMPS} || -z ${MINTEMP} || -z ${MAXTEMP} 
|| -z ${MINSTART} || -z ${MINSTOP} ]]
        then
-               echo "Some mandatory settings missing, please check your config 
file!"
+               echo "Some mandatory settings missing, please check your config 
file!" >&2
                exit 1
        fi
        if [ "$INTERVAL" -le 0 ]
        then
-               echo "Error in configuration file:"
-               echo "INTERVAL must be at least 1"
+               echo "Error in configuration file:" >&2
+               echo "INTERVAL must be at least 1" >&2
                exit 1
        fi
 
@@ -90,8 +90,8 @@
        do
                if ! echo $fcv | egrep -q '='
                then
-                       echo "Error in configuration file:"
-                       echo "FCTEMPS value is improperly formatted"
+                       echo "Error in configuration file:" >&2
+                       echo "FCTEMPS value is improperly formatted" >&2
                        exit 1
                fi
 
@@ -110,32 +110,32 @@
                # verify the validity of the settings
                if [ "${AFCMINTEMP[$fcvcount]}" -ge "${AFCMAXTEMP[$fcvcount]}" ]
                then
-                       echo "Error in configuration file 
(${AFCPWM[$fcvcount]}):"
-                       echo "MINTEMP must be less than MAXTEMP"
+                       echo "Error in configuration file 
(${AFCPWM[$fcvcount]}):" >&2
+                       echo "MINTEMP must be less than MAXTEMP" >&2
                        exit 1
                fi
                if [ "${AFCMAXPWM[$fcvcount]}" -gt 255 ]
                then
-                       echo "Error in configuration file 
(${AFCPWM[$fcvcount]}):"
-                       echo "MAXPWM must be at most 255"
+                       echo "Error in configuration file 
(${AFCPWM[$fcvcount]}):" >&2
+                       echo "MAXPWM must be at most 255" >&2
                        exit 1
                fi
                if [ "${AFCMINSTOP[$fcvcount]}" -ge "${AFCMAXPWM[$fcvcount]}" ]
                then
-                       echo "Error in configuration file 
(${AFCPWM[$fcvcount]}):"
-                       echo "MINSTOP must be less than MAXPWM"
+                       echo "Error in configuration file 
(${AFCPWM[$fcvcount]}):" >&2
+                       echo "MINSTOP must be less than MAXPWM" >&2
                        exit 1
                fi
                if [ "${AFCMINSTOP[$fcvcount]}" -lt "${AFCMINPWM[$fcvcount]}" ]
                then
-                       echo "Error in configuration file 
(${AFCPWM[$fcvcount]}):"
-                       echo "MINSTOP must be greater than or equal to MINPWM"
+                       echo "Error in configuration file 
(${AFCPWM[$fcvcount]}):" >&2
+                       echo "MINSTOP must be greater than or equal to MINPWM" 
>&2
                        exit 1
                fi
                if [ "${AFCMINPWM[$fcvcount]}" -lt 0 ]
                then
-                       echo "Error in configuration file 
(${AFCPWM[$fcvcount]}):"
-                       echo "MINPWM must be at least 0"
+                       echo "Error in configuration file 
(${AFCPWM[$fcvcount]}):" >&2
+                       echo "MINPWM must be at least 0" >&2
                        exit 1
                fi
 
@@ -185,7 +185,7 @@
 
                if [ "`DevicePath "$device"`" != "$path" ]
                then
-                       echo "Device path of $device has changed"
+                       echo "Device path of $device has changed" >&2
                        outdated=1
                fi
        done
@@ -197,7 +197,7 @@
 
                if [ "`DeviceName "$device"`" != "$name" ]
                then
-                       echo "Device name of $device has changed"
+                       echo "Device name of $device has changed" >&2
                        outdated=1
                fi
        done
@@ -215,7 +215,7 @@
                pwmo=${AFCPWM[$fcvcount]}
                if [ ! -w $pwmo ]
                then
-                       echo "Error: file $pwmo doesn't exist"
+                       echo "Error: file $pwmo doesn't exist" >&2
                        outdated=1
                fi
                let fcvcount=$fcvcount+1
@@ -227,7 +227,7 @@
                tsen=${AFCTEMP[$fcvcount]}
                if [ ! -r $tsen ]
                then
-                       echo "Error: file $tsen doesn't exist"
+                       echo "Error: file $tsen doesn't exist" >&2
                        outdated=1
                fi
                let fcvcount=$fcvcount+1
@@ -236,21 +236,24 @@
        let fcvcount=0
        while (( $fcvcount < ${#AFCFAN[@]} )) # go through all fan inputs
        do
-               fan=${AFCFAN[$fcvcount]}
-               if [ ! -r $fan ]
-               then
-                       echo "Error: file $fan doesn't exist"
-                       outdated=1
-               fi
+               # A given PWM output can control several fans
+               for fan in $(echo ${AFCFAN[$fcvcount]} | sed -e 's/+/ /')
+               do
+                       if [ ! -r $fan ]
+                       then
+                               echo "Error: file $fan doesn't exist" >&2
+                               outdated=1
+                       fi
+               done
                let fcvcount=$fcvcount+1
        done
 
        if [ $outdated -eq 1 ]
        then
-               echo
-               echo "At least one referenced file is missing. Either some 
required kernel"
-               echo "modules haven't been loaded, or your configuration file 
is outdated."
-               echo "In the latter case, you should run pwmconfig again."
+               echo >&2
+               echo "At least one referenced file is missing. Either some 
required kernel" >&2
+               echo "modules haven't been loaded, or your configuration file 
is outdated." >&2
+               echo "In the latter case, you should run pwmconfig again." >&2
        fi
 
        return $outdated
@@ -274,13 +277,13 @@
 then
        DIR=/sys/bus/i2c/devices
 else
-       echo "$0: Invalid path to sensors"
+       echo "$0: Invalid path to sensors" >&2
        exit 1
 fi
 
 if [ ! -d $DIR ]
 then
-       echo $0: 'No sensors found! (did you load the necessary modules?)'
+       echo $0: 'No sensors found! (did you load the necessary modules?)' >&2
        exit 1
 fi
 cd $DIR
@@ -288,19 +291,19 @@
 # Check for configuration change
 if [ -z "$DEVPATH" -o -z "$DEVNAME" ]
 then
-       echo "Configuration is too old, please run pwmconfig again"
+       echo "Configuration is too old, please run pwmconfig again" >&2
        exit 1
 fi
 if ! ValidateDevices "$DEVPATH" "$DEVNAME"
 then
-       echo "Configuration appears to be outdated, please run pwmconfig again"
+       echo "Configuration appears to be outdated, please run pwmconfig again" 
>&2
        exit 1
 fi
 CheckFiles || exit 1
 
 if [ -f "$PIDFILE" ]
 then
-       echo "File $PIDFILE exists, is fancontrol already running?"
+       echo "File $PIDFILE exists, is fancontrol already running?" >&2
        exit 1
 fi
 echo $$ > "$PIDFILE"
@@ -405,12 +408,31 @@
                # If fanspeed-sensor output shall be used, do it
                if [[ -n ${fan} ]]
                then
-                       read fanval < ${fan}
-                       if [ $? -ne 0 ]
-                       then
-                               echo "Error reading Fan value from $DIR/$fan"
-                               restorefans 1
-                       fi
+                       min_fanval=100000
+                       fanval=
+                       # A given PWM output can control several fans
+                       for one_fan in $(echo $fan | sed -e 's/+/ /')
+                       do
+                               read one_fanval < ${one_fan}
+                               if [ $? -ne 0 ]
+                               then
+                                       echo "Error reading Fan value from 
$DIR/$one_fan" >&2
+                                       restorefans 1
+                               fi
+
+                               # Remember the minimum, it only matters if it 
is 0
+                               if [ $one_fanval -lt $min_fanval ]
+                               then
+                                       min_fanval=$one_fanval
+                               fi
+
+                               if [ -z "$fanval" ]
+                               then
+                                       fanval=$one_fanval
+                               else
+                                       fanval="$fanval/$one_fanval"
+                               fi
+                       done
                else
                        fanval=1  # set it to a non zero value, so the rest of 
the script still works
                fi
@@ -430,6 +452,7 @@
                        echo "tval=$tval"
                        echo "pwmpval=$pwmpval"
                        echo "fanval=$fanval"
+                       echo "min_fanval=$min_fanval"
                fi
 
                if (( $tval <= $mint ))
@@ -439,7 +462,7 @@
                else
                  # calculate the new value from temperature and settings
                  
pwmval="(${tval}-${mint})*(${maxpwm}-${minso})/(${maxt}-${mint})+${minso}"
-                 if [ $pwmpval -eq 0 -o $fanval -eq 0 ]
+                 if [ $pwmpval -eq 0 -o $min_fanval -eq 0 ]
                  then # if fan was stopped start it using a safe value
                        echo $minsa > $pwmo
                        # Sleep while still handling signals
@@ -450,7 +473,7 @@
                echo $pwmval > $pwmo # write new value to pwm output
                if [ $? -ne 0 ]
                then
-                       echo "Error writing PWM value to $DIR/$pwmo"
+                       echo "Error writing PWM value to $DIR/$pwmo" >&2
                        restorefans 1
                fi
                if [ "$DEBUG" != "" ]
@@ -469,7 +492,7 @@
        pwmenable $pwmo
        if [ $? -ne 0 ]
        then
-               echo "Error enabling PWM on $DIR/$pwmo"
+               echo "Error enabling PWM on $DIR/$pwmo" >&2
                restorefans 1
        fi
        let fcvcount=$fcvcount+1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lm_sensors-3.3.1/prog/sensord/sense.c 
new/lm_sensors-3.3.2/prog/sensord/sense.c
--- old/lm_sensors-3.3.1/prog/sensord/sense.c   2009-11-05 10:23:46.000000000 
+0100
+++ new/lm_sensors-3.3.2/prog/sensord/sense.c   2012-03-06 08:24:42.000000000 
+0100
@@ -82,13 +82,21 @@
        return (int) (val + 0.5);
 }
 
-static int get_features(const sensors_chip_name *chip,
-                       const FeatureDescriptor *feature, int action,
-                       char *label, int alrm, int beep)
+static int do_features(const sensors_chip_name *chip,
+                      const FeatureDescriptor *feature, int action)
 {
-       int i, ret;
+       char *label;
+       const char *formatted;
+       int i, alrm, beep, ret;
        double val[MAX_DATA];
 
+       /* If only scanning, take a quick exit if alarm is off */
+       alrm = get_flag(chip, feature->alarmNumber);
+       if (alrm == -1)
+               return -1;
+       if (action == DO_SCAN && !alrm)
+               return 0;
+
        for (i = 0; feature->dataNumbers[i] >= 0; i++) {
                ret = sensors_get_value(chip, feature->dataNumbers[i],
                                        val + i);
@@ -101,39 +109,32 @@
                }
        }
 
+       /* For RRD, we don't need anything else */
        if (action == DO_RRD) {
                if (feature->rrd) {
                        const char *rrded = feature->rrd(val);
 
-                       /* FIXME: Jean's review comment:
-                        * sprintf would me more efficient.
-                        */
-                       strcat(strcat (rrdBuff, ":"), rrded ? rrded : "U");
+                       sprintf(rrdBuff + strlen(rrdBuff), ":%s",
+                               rrded ? rrded : "U");
                }
-       } else {
-               const char *formatted = feature->format(val, alrm, beep);
 
-               if (!formatted) {
-                       sensorLog(LOG_ERR, "Error formatting sensor data");
-                       return -1;
-               }
-
-               if (action == DO_READ) {
-                       sensorLog(LOG_INFO, "  %s: %s", label, formatted);
-               } else {
-                       sensorLog(LOG_ALERT, "Sensor alarm: Chip %s: %s: %s",
-                                 chipName(chip), label, formatted);
-               }
+               return 0;
        }
-       return 0;
-}
 
-static int do_features(const sensors_chip_name *chip,
-                      const FeatureDescriptor *feature, int action)
-{
-       char *label;
-       int alrm, beep;
+       /* For scanning and logging, we need extra information */
+       beep = get_flag(chip, feature->beepNumber);
+       if (beep == -1)
+               return -1;
+
+       formatted = feature->format(val, alrm, beep);
+       if (!formatted) {
+               sensorLog(LOG_ERR, "Error formatting sensor data");
+               return -1;
+       }
 
+       /* FIXME: It would be more efficient to store the label at
+        * initialization time.
+        */
        label = sensors_get_label(chip, feature->feature);
        if (!label) {
                sensorLog(LOG_ERR, "Error getting sensor label: %s/%s",
@@ -141,17 +142,15 @@
                return -1;
        }
 
-       alrm = get_flag(chip, feature->alarmNumber);
-       if (alrm == -1)
-               return -1;
-       else if (action == DO_SCAN && !alrm)
-               return 0;
+       if (action == DO_READ)
+               sensorLog(LOG_INFO, "  %s: %s", label, formatted);
+       else
+               sensorLog(LOG_ALERT, "Sensor alarm: Chip %s: %s: %s",
+                         chipName(chip), label, formatted);
 
-       beep = get_flag(chip, feature->beepNumber);
-       if (beep == -1)
-               return -1;
+       free(label);
 
-       return get_features(chip, feature, action, label, alrm, beep);
+       return 0;
 }
 
 static int doKnownChip(const sensors_chip_name *chip,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lm_sensors-3.3.1/prog/sensord/sensord.8 
new/lm_sensors-3.3.2/prog/sensord/sensord.8
--- old/lm_sensors-3.3.1/prog/sensord/sensord.8 2009-06-11 19:39:48.000000000 
+0200
+++ new/lm_sensors-3.3.2/prog/sensord/sensord.8 2012-03-08 21:36:42.000000000 
+0100
@@ -347,7 +347,6 @@
 echo OK.
 echo -n "Starting sensord: "
 daemon sensord
-...
 .fi
 .PP
 Ignore the platform-specific shell functions; the general idea
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lm_sensors-3.3.1/prog/sensord/sensord.c 
new/lm_sensors-3.3.2/prog/sensord/sensord.c
--- old/lm_sensors-3.3.1/prog/sensord/sensord.c 2009-06-20 12:04:52.000000000 
+0200
+++ new/lm_sensors-3.3.2/prog/sensord/sensord.c 2012-03-06 08:22:06.000000000 
+0100
@@ -204,7 +204,11 @@
        } else if (pid != 0) {
                fprintf(file, "%d\n", pid);
                fclose(file);
-               unloadLib();
+
+               freeChips();
+               if (unloadLib())
+                       exit(EXIT_FAILURE);
+
                exit(EXIT_SUCCESS);
        }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lm_sensors-3.3.1/prog/sensors/chips.c 
new/lm_sensors-3.3.2/prog/sensors/chips.c
--- old/lm_sensors-3.3.1/prog/sensors/chips.c   2011-03-16 22:31:25.000000000 
+0100
+++ new/lm_sensors-3.3.2/prog/sensors/chips.c   2012-03-07 17:12:56.000000000 
+0100
@@ -201,10 +201,8 @@
                                  const sensors_feature *feature,
                                  const struct sensor_subfeature_list *sfl,
                                  struct sensor_subfeature_data *limits,
-                                 int max_limits,
                                  int *num_limits,
                                  struct sensor_subfeature_data *alarms,
-                                 int max_alarms,
                                  int *num_alarms)
 {
        const sensors_subfeature *sf;
@@ -219,33 +217,21 @@
                                 * (it is implied to be active if queued).
                                 */
                                if (get_value(name, sf)) {
-                                       if (*num_alarms >= max_alarms) {
-                                               fprintf(stderr,
-                                                       "Not enough %s buffers 
(%d)\n",
-                                                       "alarm", max_alarms);
-                                       } else {
-                                               alarms[*num_alarms].name = 
sfl->name;
-                                               (*num_alarms)++;
-                                       }
+                                       alarms[*num_alarms].name = sfl->name;
+                                       (*num_alarms)++;
                                }
                        } else {
                                /*
                                 * Always queue limit subfeatures with their 
value.
                                 */
-                               if (*num_limits >= max_limits) {
-                                       fprintf(stderr,
-                                               "Not enough %s buffers (%d)\n",
-                                               "limit", max_limits);
-                               } else {
-                                       limits[*num_limits].value = 
get_value(name, sf);
-                                       limits[*num_limits].name = sfl->name;
-                                       (*num_limits)++;
-                               }
+                               limits[*num_limits].value = get_value(name, sf);
+                               limits[*num_limits].name = sfl->name;
+                               (*num_limits)++;
                        }
                        if (sfl->exists) {
                                get_sensor_limit_data(name, feature, 
sfl->exists,
-                                                     limits, max_limits, 
num_limits,
-                                                     alarms, max_alarms, 
num_alarms);
+                                                     limits, num_limits,
+                                                     alarms, num_alarms);
                        }
                }
        }
@@ -280,15 +266,24 @@
        { SENSORS_SUBFEATURE_TEMP_CRIT, temp_crit_sensors, 0, "crit" },
        { SENSORS_SUBFEATURE_TEMP_EMERGENCY, temp_emergency_sensors, 0,
            "emerg" },
+       { SENSORS_SUBFEATURE_TEMP_LOWEST, NULL, 0, "lowest" },
+       { SENSORS_SUBFEATURE_TEMP_HIGHEST, NULL, 0, "highest" },
        { -1, NULL, 0, NULL }
 };
 
+#define NUM_TEMP_ALARMS                6
+#define NUM_TEMP_SENSORS       (ARRAY_SIZE(temp_sensors) \
+                                + ARRAY_SIZE(temp_max_sensors) \
+                                + ARRAY_SIZE(temp_crit_sensors) \
+                                + ARRAY_SIZE(temp_emergency_sensors) \
+                                - NUM_TEMP_ALARMS - 4)
+
 static void print_chip_temp(const sensors_chip_name *name,
                            const sensors_feature *feature,
                            int label_size)
 {
-       struct sensor_subfeature_data sensors[8];
-       struct sensor_subfeature_data alarms[5];
+       struct sensor_subfeature_data sensors[NUM_TEMP_SENSORS];
+       struct sensor_subfeature_data alarms[NUM_TEMP_ALARMS];
        int sensor_count, alarm_count;
        const sensors_subfeature *sf;
        double val;
@@ -321,8 +316,7 @@
 
        sensor_count = alarm_count = 0;
        get_sensor_limit_data(name, feature, temp_sensors,
-                             sensors, ARRAY_SIZE(sensors), &sensor_count,
-                             alarms, ARRAY_SIZE(alarms), &alarm_count);
+                             sensors, &sensor_count, alarms, &alarm_count);
 
        for (i = 0; i < sensor_count; i++) {
                if (fahrenheit)
@@ -345,7 +339,7 @@
                        sens = 4;
 
                printf("  sensor = %s", sens == 0 ? "disabled" :
-                      sens == 1 ? "diode" :
+                      sens == 1 ? "CPU diode" :
                       sens == 2 ? "transistor" :
                       sens == 3 ? "thermal diode" :
                       sens == 4 ? "thermistor" :
@@ -365,17 +359,23 @@
        { SENSORS_SUBFEATURE_IN_MIN, NULL, 0, "min" },
        { SENSORS_SUBFEATURE_IN_MAX, NULL, 0, "max" },
        { SENSORS_SUBFEATURE_IN_CRIT, NULL, 0, "crit max" },
+       { SENSORS_SUBFEATURE_IN_AVERAGE, NULL, 0, "avg" },
+       { SENSORS_SUBFEATURE_IN_LOWEST, NULL, 0, "lowest" },
+       { SENSORS_SUBFEATURE_IN_HIGHEST, NULL, 0, "highest" },
        { -1, NULL, 0, NULL }
 };
 
+#define NUM_IN_ALARMS  5
+#define NUM_IN_SENSORS (ARRAY_SIZE(voltage_sensors) - NUM_IN_ALARMS - 1)
+
 static void print_chip_in(const sensors_chip_name *name,
                          const sensors_feature *feature,
                          int label_size)
 {
        const sensors_subfeature *sf;
        char *label;
-       struct sensor_subfeature_data sensors[4];
-       struct sensor_subfeature_data alarms[4];
+       struct sensor_subfeature_data sensors[NUM_IN_SENSORS];
+       struct sensor_subfeature_data alarms[NUM_IN_ALARMS];
        int sensor_count, alarm_count;
        double val;
 
@@ -396,8 +396,7 @@
 
        sensor_count = alarm_count = 0;
        get_sensor_limit_data(name, feature, voltage_sensors,
-                             sensors, ARRAY_SIZE(sensors), &sensor_count,
-                             alarms, ARRAY_SIZE(alarms), &alarm_count);
+                             sensors, &sensor_count, alarms, &alarm_count);
 
        print_limits(sensors, sensor_count, alarms, alarm_count, label_size,
                     "%s = %+6.2f V");
@@ -409,7 +408,7 @@
                           const sensors_feature *feature,
                           int label_size)
 {
-       const sensors_subfeature *sf, *sfmin, *sfdiv;
+       const sensors_subfeature *sf, *sfmin, *sfmax, *sfdiv;
        double val;
        char *label;
 
@@ -436,24 +435,36 @@
 
        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");
 }
@@ -506,6 +517,11 @@
 static const struct sensor_subfeature_list power_inst_sensors[] = {
        { SENSORS_SUBFEATURE_POWER_INPUT_LOWEST, NULL, 0, "lowest" },
        { SENSORS_SUBFEATURE_POWER_INPUT_HIGHEST, NULL, 0, "highest" },
+       { SENSORS_SUBFEATURE_POWER_AVERAGE, NULL, 0, "avg" },
+       { SENSORS_SUBFEATURE_POWER_AVERAGE_LOWEST, NULL, 0, "avg lowest" },
+       { SENSORS_SUBFEATURE_POWER_AVERAGE_HIGHEST, NULL, 0, "avg highest" },
+       { SENSORS_SUBFEATURE_POWER_AVERAGE_INTERVAL, NULL, 0,
+               "interval" },
        { -1, NULL, 0, NULL }
 };
 
@@ -517,14 +533,19 @@
        { -1, NULL, 0, NULL }
 };
 
+#define NUM_POWER_ALARMS       4
+#define NUM_POWER_SENSORS      (ARRAY_SIZE(power_common_sensors) \
+                                + ARRAY_SIZE(power_inst_sensors) \
+                                - NUM_POWER_ALARMS - 2)
+
 static void print_chip_power(const sensors_chip_name *name,
                             const sensors_feature *feature,
                             int label_size)
 {
        double val;
        const sensors_subfeature *sf;
-       struct sensor_subfeature_data sensors[6];
-       struct sensor_subfeature_data alarms[3];
+       struct sensor_subfeature_data sensors[NUM_POWER_SENSORS];
+       struct sensor_subfeature_data alarms[NUM_POWER_ALARMS];
        int sensor_count, alarm_count;
        char *label;
        const char *unit;
@@ -540,35 +561,50 @@
 
        sensor_count = alarm_count = 0;
 
-       /* Power sensors come in 2 flavors: instantaneous and averaged.
-          To keep things simple, we assume that each sensor only implements
-          one flavor. */
+       /*
+        * Power sensors come in 2 flavors: instantaneous and averaged.
+        * Most devices only support one flavor, so we try to display the
+        * average power if the instantaneous power attribute does not exist.
+        * If both instantaneous power and average power are supported,
+        * average power is displayed as limit.
+        */
        sf = sensors_get_subfeature(name, feature,
                                    SENSORS_SUBFEATURE_POWER_INPUT);
        get_sensor_limit_data(name, feature,
                              sf ? power_inst_sensors : power_avg_sensors,
-                             sensors, ARRAY_SIZE(sensors), &sensor_count,
-                             alarms, ARRAY_SIZE(alarms), &alarm_count);
+                             sensors, &sensor_count, alarms, &alarm_count);
        /* Add sensors common to both flavors. */
-       get_sensor_limit_data(name, feature,
-                             power_common_sensors,
-                             sensors, ARRAY_SIZE(sensors), &sensor_count,
-                             alarms, ARRAY_SIZE(alarms), &alarm_count);
+       get_sensor_limit_data(name, feature, power_common_sensors,
+                             sensors, &sensor_count, alarms, &alarm_count);
        if (!sf)
                sf = sensors_get_subfeature(name, feature,
                                            SENSORS_SUBFEATURE_POWER_AVERAGE);
 
        if (sf && get_input_value(name, sf, &val) == 0) {
                scale_value(&val, &unit);
-               printf("%6.2f %sW  ", val, unit);
+               printf("%6.2f %sW%*s", val, unit, 2 - (int)strlen(unit), "");
        } else
                printf("     N/A  ");
 
-       for (i = 0; i < sensor_count; i++)
-               scale_value(&sensors[i].value, &sensors[i].unit);
-
+       for (i = 0; i < sensor_count; i++) {
+               /*
+                * Unit is W and needs to be scaled for all attributes except
+                * interval, which does not need to be scaled and is reported in
+                * seconds.
+                */
+               if (strcmp(sensors[i].name, "interval")) {
+                       char *tmpstr;
+
+                       tmpstr = alloca(4);
+                       scale_value(&sensors[i].value, &unit);
+                       snprintf(tmpstr, 4, "%sW", unit);
+                       sensors[i].unit = tmpstr;
+               } else {
+                       sensors[i].unit = "s";
+               }
+       }
        print_limits(sensors, sensor_count, alarms, alarm_count,
-                    label_size, "%s = %6.2f %sW");
+                    label_size, "%s = %6.2f %s");
 
        printf("\n");
 }
@@ -653,9 +689,15 @@
        { SENSORS_SUBFEATURE_CURR_MIN, NULL, 0, "min" },
        { SENSORS_SUBFEATURE_CURR_MAX, NULL, 0, "max" },
        { SENSORS_SUBFEATURE_CURR_CRIT, NULL, 0, "crit max" },
+       { SENSORS_SUBFEATURE_CURR_AVERAGE, NULL, 0, "avg" },
+       { SENSORS_SUBFEATURE_CURR_LOWEST, NULL, 0, "lowest" },
+       { SENSORS_SUBFEATURE_CURR_HIGHEST, NULL, 0, "highest" },
        { -1, NULL, 0, NULL }
 };
 
+#define NUM_CURR_ALARMS                5
+#define NUM_CURR_SENSORS       (ARRAY_SIZE(current_sensors) - NUM_CURR_ALARMS 
- 1)
+
 static void print_chip_curr(const sensors_chip_name *name,
                            const sensors_feature *feature,
                            int label_size)
@@ -663,8 +705,8 @@
        const sensors_subfeature *sf;
        double val;
        char *label;
-       struct sensor_subfeature_data sensors[4];
-       struct sensor_subfeature_data alarms[4];
+       struct sensor_subfeature_data sensors[NUM_CURR_SENSORS];
+       struct sensor_subfeature_data alarms[NUM_CURR_ALARMS];
        int sensor_count, alarm_count;
 
        if (!(label = sensors_get_label(name, feature))) {
@@ -684,8 +726,7 @@
 
        sensor_count = alarm_count = 0;
        get_sensor_limit_data(name, feature, current_sensors,
-                             sensors, ARRAY_SIZE(sensors), &sensor_count,
-                             alarms, ARRAY_SIZE(alarms), &alarm_count);
+                             sensors, &sensor_count, alarms, &alarm_count);
 
        print_limits(sensors, sensor_count, alarms, alarm_count, label_size,
                     "%s = %+6.2f A");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/lm_sensors-3.3.1/version.h 
new/lm_sensors-3.3.2/version.h
--- old/lm_sensors-3.3.1/version.h      2011-07-21 22:36:42.000000000 +0200
+++ new/lm_sensors-3.3.2/version.h      2012-03-14 08:43:39.000000000 +0100
@@ -1 +1 @@
-#define LM_VERSION "3.3.1"
+#define LM_VERSION "3.3.2"

-- 
To unsubscribe, e-mail: opensuse-commit+unsubscr...@opensuse.org
For additional commands, e-mail: opensuse-commit+h...@opensuse.org

Reply via email to