]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
hwmon: (w83627ehf) Fix max_output and step_output readings
authorGuenter Roeck <guenter.roeck@ericsson.com>
Fri, 21 Jan 2011 08:42:17 +0000 (09:42 +0100)
committerPaul Gortmaker <paul.gortmaker@windriver.com>
Sun, 17 Apr 2011 20:16:16 +0000 (16:16 -0400)
[extraction from commit da2e025590cf7038440132d4bbc967a579b11112 upstream]

The value of max_output and step_output registers isn't read from the
respective registers. As a result, zero values are returned to the
user through the respective sysfs attributes, instead of the actual
fan control settings.

The problem is fixed by updating the fan max output and fan step
output information from data in registers.

Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
drivers/hwmon/w83627ehf.c

index 0dcaba9b7189c26cd242a2acfb72804e083a7f70..dc53e6180455aa04c1a5a9ac5af1a7457d9d2d10 100644 (file)
@@ -524,7 +524,7 @@ static struct w83627ehf_data *w83627ehf_update_device(struct device *dev)
                        }
                }
 
-               for (i = 0; i < 4; i++) {
+               for (i = 0; i < data->pwm_num; i++) {
                        /* pwmcfg, tolerance mapped for i=0, i=1 to same reg */
                        if (i != 1) {
                                pwmcfg = w83627ehf_read_value(data,
@@ -546,6 +546,17 @@ static struct w83627ehf_data *w83627ehf_update_device(struct device *dev)
                                                W83627EHF_REG_FAN_STOP_OUTPUT[i]);
                        data->fan_stop_time[i] = w83627ehf_read_value(data,
                                                W83627EHF_REG_FAN_STOP_TIME[i]);
+
+                       if (W83627EHF_REG_FAN_MAX_OUTPUT[i] != 0xff)
+                               data->fan_max_output[i] =
+                                 w83627ehf_read_value(data,
+                                             W83627EHF_REG_FAN_MAX_OUTPUT[i]);
+
+                       if (W83627EHF_REG_FAN_STEP_OUTPUT[i] != 0xff)
+                               data->fan_step_output[i] =
+                                 w83627ehf_read_value(data,
+                                             W83627EHF_REG_FAN_STEP_OUTPUT[i]);
+
                        data->target_temp[i] =
                                w83627ehf_read_value(data,
                                        W83627EHF_REG_TARGET[i]) &