hwmon: (pwm-fan) Extract __set_pwm() function to only modify PWM duty cycle
authorLukasz Majewski <l.majewski@samsung.com>
Thu, 26 Feb 2015 13:59:35 +0000 (14:59 +0100)
committerGuenter Roeck <linux@roeck-us.net>
Mon, 9 Mar 2015 16:59:36 +0000 (09:59 -0700)
It was necessary to decouple code handling writing to sysfs from the one
responsible for setting PWM of the fan.
Due to that, new __set_pwm() method was extracted, which is responsible for
only setting new PWM duty cycle.

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
drivers/hwmon/pwm-fan.c

index 1991d9032c3843de2ffcd20b82f5790d22ce2684..bd42d3996a863a2c302feb7d40c33ceff69dc5b2 100644 (file)
@@ -33,20 +33,14 @@ struct pwm_fan_ctx {
        unsigned char pwm_value;
 };
 
-static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
-                      const char *buf, size_t count)
+static int  __set_pwm(struct pwm_fan_ctx *ctx, unsigned long pwm)
 {
-       struct pwm_fan_ctx *ctx = dev_get_drvdata(dev);
-       unsigned long pwm, duty;
-       ssize_t ret;
-
-       if (kstrtoul(buf, 10, &pwm) || pwm > MAX_PWM)
-               return -EINVAL;
+       unsigned long duty;
+       int ret = 0;
 
        mutex_lock(&ctx->lock);
-
        if (ctx->pwm_value == pwm)
-               goto exit_set_pwm_no_change;
+               goto exit_set_pwm_err;
 
        if (pwm == 0) {
                pwm_disable(ctx->pwm);
@@ -66,13 +60,28 @@ static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
 
 exit_set_pwm:
        ctx->pwm_value = pwm;
-exit_set_pwm_no_change:
-       ret = count;
 exit_set_pwm_err:
        mutex_unlock(&ctx->lock);
        return ret;
 }
 
+static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
+                      const char *buf, size_t count)
+{
+       struct pwm_fan_ctx *ctx = dev_get_drvdata(dev);
+       unsigned long pwm;
+       int ret;
+
+       if (kstrtoul(buf, 10, &pwm) || pwm > MAX_PWM)
+               return -EINVAL;
+
+       ret = __set_pwm(ctx, pwm);
+       if (ret)
+               return ret;
+
+       return count;
+}
+
 static ssize_t show_pwm(struct device *dev,
                        struct device_attribute *attr, char *buf)
 {