|
@@ -481,9 +481,11 @@ store_pwm(struct device *dev, struct device_attribute *attr,
|
|
|
if (err)
|
|
|
return err;
|
|
|
val = clamp_val(val, 0, 255);
|
|
|
+ val = DIV_ROUND_CLOSEST(val, 0x11);
|
|
|
|
|
|
mutex_lock(&data->update_lock);
|
|
|
- data->pwm[nr] = val;
|
|
|
+ data->pwm[nr] = val * 0x11;
|
|
|
+ val |= w83l786ng_read_value(client, W83L786NG_REG_PWM[nr]) & 0xf0;
|
|
|
w83l786ng_write_value(client, W83L786NG_REG_PWM[nr], val);
|
|
|
mutex_unlock(&data->update_lock);
|
|
|
return count;
|
|
@@ -510,7 +512,7 @@ store_pwm_enable(struct device *dev, struct device_attribute *attr,
|
|
|
mutex_lock(&data->update_lock);
|
|
|
reg = w83l786ng_read_value(client, W83L786NG_REG_FAN_CFG);
|
|
|
data->pwm_enable[nr] = val;
|
|
|
- reg &= ~(0x02 << W83L786NG_PWM_ENABLE_SHIFT[nr]);
|
|
|
+ reg &= ~(0x03 << W83L786NG_PWM_ENABLE_SHIFT[nr]);
|
|
|
reg |= (val - 1) << W83L786NG_PWM_ENABLE_SHIFT[nr];
|
|
|
w83l786ng_write_value(client, W83L786NG_REG_FAN_CFG, reg);
|
|
|
mutex_unlock(&data->update_lock);
|
|
@@ -776,9 +778,10 @@ static struct w83l786ng_data *w83l786ng_update_device(struct device *dev)
|
|
|
((pwmcfg >> W83L786NG_PWM_MODE_SHIFT[i]) & 1)
|
|
|
? 0 : 1;
|
|
|
data->pwm_enable[i] =
|
|
|
- ((pwmcfg >> W83L786NG_PWM_ENABLE_SHIFT[i]) & 2) + 1;
|
|
|
- data->pwm[i] = w83l786ng_read_value(client,
|
|
|
- W83L786NG_REG_PWM[i]);
|
|
|
+ ((pwmcfg >> W83L786NG_PWM_ENABLE_SHIFT[i]) & 3) + 1;
|
|
|
+ data->pwm[i] =
|
|
|
+ (w83l786ng_read_value(client, W83L786NG_REG_PWM[i])
|
|
|
+ & 0x0f) * 0x11;
|
|
|
}
|
|
|
|
|
|
|