diff options
author | Anand Moon <linux.amoon@gmail.com> | 2015-04-12 14:44:11 -0400 |
---|---|---|
committer | Guenter Roeck <linux@roeck-us.net> | 2015-04-12 18:59:11 -0400 |
commit | f354169e0f7dcd1b2c82cf1f98f6d976e85f74c3 (patch) | |
tree | d92d428a3eb79be2fd1049ff5b5c2966faa73434 | |
parent | f83a9cb6228472a464c2ab4abb9bd1e83939aec2 (diff) |
hwmon: (pwm-fan) Update the duty cycle inorder to control the pwm-fan
pwm_config() must be called with a duty cycle of 0 prior to calling
pwm_disable() to ensure that the pwm signal is set to low.
Reported-by: Markus Reichl <m.reichl@fivetechno.de>
Tested-by: Markus Reichl <m.reichl@fivetechno.de>
Reviewed-by: Lukasz Majewski <l.majewski@samsung.com>
Reviewed-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
Signed-off-by: Anand Moon <linux.amoon@gmail.com>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
-rw-r--r-- | drivers/hwmon/pwm-fan.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/drivers/hwmon/pwm-fan.c b/drivers/hwmon/pwm-fan.c index 31d793bd7b12..2d9a712699ff 100644 --- a/drivers/hwmon/pwm-fan.c +++ b/drivers/hwmon/pwm-fan.c | |||
@@ -47,23 +47,20 @@ static int __set_pwm(struct pwm_fan_ctx *ctx, unsigned long pwm) | |||
47 | if (ctx->pwm_value == pwm) | 47 | if (ctx->pwm_value == pwm) |
48 | goto exit_set_pwm_err; | 48 | goto exit_set_pwm_err; |
49 | 49 | ||
50 | if (pwm == 0) { | ||
51 | pwm_disable(ctx->pwm); | ||
52 | goto exit_set_pwm; | ||
53 | } | ||
54 | |||
55 | duty = DIV_ROUND_UP(pwm * (ctx->pwm->period - 1), MAX_PWM); | 50 | duty = DIV_ROUND_UP(pwm * (ctx->pwm->period - 1), MAX_PWM); |
56 | ret = pwm_config(ctx->pwm, duty, ctx->pwm->period); | 51 | ret = pwm_config(ctx->pwm, duty, ctx->pwm->period); |
57 | if (ret) | 52 | if (ret) |
58 | goto exit_set_pwm_err; | 53 | goto exit_set_pwm_err; |
59 | 54 | ||
55 | if (pwm == 0) | ||
56 | pwm_disable(ctx->pwm); | ||
57 | |||
60 | if (ctx->pwm_value == 0) { | 58 | if (ctx->pwm_value == 0) { |
61 | ret = pwm_enable(ctx->pwm); | 59 | ret = pwm_enable(ctx->pwm); |
62 | if (ret) | 60 | if (ret) |
63 | goto exit_set_pwm_err; | 61 | goto exit_set_pwm_err; |
64 | } | 62 | } |
65 | 63 | ||
66 | exit_set_pwm: | ||
67 | ctx->pwm_value = pwm; | 64 | ctx->pwm_value = pwm; |
68 | exit_set_pwm_err: | 65 | exit_set_pwm_err: |
69 | mutex_unlock(&ctx->lock); | 66 | mutex_unlock(&ctx->lock); |