| From: Guenter Roeck <linux@roeck-us.net> |
| Date: Mon, 26 Mar 2018 19:50:31 -0700 |
| Subject: hwmon: (nct6775) Fix writing pwmX_mode |
| |
| commit 415eb2a1aaa4881cf85bd86c683356fdd8094a23 upstream. |
| |
| pwmX_mode is defined in the ABI as 0=DC mode, 1=pwm mode. The chip |
| register bit is set to 1 for DC mode. This got mixed up, and writing |
| 1 into pwmX_mode resulted in DC mode enabled. Fix it up by using |
| the ABI definition throughout the driver for consistency. |
| |
| Fixes: 77eb5b3703d99 ("hwmon: (nct6775) Add support for pwm, pwm_mode, ... ") |
| Signed-off-by: Guenter Roeck <linux@roeck-us.net> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/hwmon/nct6775.c | 10 +++++----- |
| 1 file changed, 5 insertions(+), 5 deletions(-) |
| |
| --- a/drivers/hwmon/nct6775.c |
| +++ b/drivers/hwmon/nct6775.c |
| @@ -1287,7 +1287,7 @@ static void nct6775_update_pwm(struct de |
| duty_is_dc = data->REG_PWM_MODE[i] && |
| (nct6775_read_value(data, data->REG_PWM_MODE[i]) |
| & data->PWM_MODE_MASK[i]); |
| - data->pwm_mode[i] = duty_is_dc; |
| + data->pwm_mode[i] = !duty_is_dc; |
| |
| fanmodecfg = nct6775_read_value(data, data->REG_FAN_MODE[i]); |
| for (j = 0; j < ARRAY_SIZE(data->REG_PWM); j++) { |
| @@ -2146,7 +2146,7 @@ show_pwm_mode(struct device *dev, struct |
| struct nct6775_data *data = nct6775_update_device(dev); |
| struct sensor_device_attribute *sattr = to_sensor_dev_attr(attr); |
| |
| - return sprintf(buf, "%d\n", !data->pwm_mode[sattr->index]); |
| + return sprintf(buf, "%d\n", data->pwm_mode[sattr->index]); |
| } |
| |
| static ssize_t |
| @@ -2167,9 +2167,9 @@ store_pwm_mode(struct device *dev, struc |
| if (val > 1) |
| return -EINVAL; |
| |
| - /* Setting DC mode is not supported for all chips/channels */ |
| + /* Setting DC mode (0) is not supported for all chips/channels */ |
| if (data->REG_PWM_MODE[nr] == 0) { |
| - if (val) |
| + if (!val) |
| return -EINVAL; |
| return count; |
| } |
| @@ -2178,7 +2178,7 @@ store_pwm_mode(struct device *dev, struc |
| data->pwm_mode[nr] = val; |
| reg = nct6775_read_value(data, data->REG_PWM_MODE[nr]); |
| reg &= ~data->PWM_MODE_MASK[nr]; |
| - if (val) |
| + if (!val) |
| reg |= data->PWM_MODE_MASK[nr]; |
| nct6775_write_value(data, data->REG_PWM_MODE[nr], reg); |
| mutex_unlock(&data->update_lock); |