Skip to content

Commit

Permalink
hwmon: (pwm-fan) Extract __set_pwm() function to only modify PWM duty…
Browse files Browse the repository at this point in the history
… cycle

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>
  • Loading branch information
Lukasz Majewski authored and Guenter Roeck committed Mar 9, 2015
1 parent 73ef85f commit cb85ca3
Showing 1 changed file with 21 additions and 12 deletions.
33 changes: 21 additions & 12 deletions drivers/hwmon/pwm-fan.c
Original file line number Diff line number Diff line change
@@ -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)
{

0 comments on commit cb85ca3

Please sign in to comment.