From: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> In preparation for moving to a struct pwm_state like Linux does, turn the flag into a variable. Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx> --- drivers/pwm/core.c | 12 ++++++++---- include/pwm.h | 2 ++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index c8016999f0d2..cae23c98ee2d 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c @@ -24,7 +24,6 @@ struct pwm_device { struct pwm_chip *chip; unsigned long flags; #define FLAG_REQUESTED 0 -#define FLAG_ENABLED 1 struct list_head node; struct device_d *hwdev; struct device_d dev; @@ -283,8 +282,10 @@ int pwm_enable(struct pwm_device *pwm) { pwm->p_enable = 1; - if (!test_and_set_bit(FLAG_ENABLED, &pwm->flags)) + if (!pwm->chip->p_enable) { + pwm->chip->p_enable = 1; return pwm->chip->ops->enable(pwm->chip); + } return 0; } @@ -297,7 +298,10 @@ void pwm_disable(struct pwm_device *pwm) { pwm->p_enable = 0; - if (test_and_clear_bit(FLAG_ENABLED, &pwm->flags)) - pwm->chip->ops->disable(pwm->chip); + if (!pwm->chip->p_enable) + return; + + pwm->chip->p_enable = 0; + pwm->chip->ops->disable(pwm->chip); } EXPORT_SYMBOL_GPL(pwm_disable); diff --git a/include/pwm.h b/include/pwm.h index ca01f5b53d1c..98af1299748a 100644 --- a/include/pwm.h +++ b/include/pwm.h @@ -63,6 +63,7 @@ struct pwm_ops { * @ops: The callbacks for this PWM * @duty_ns: The duty cycle of the PWM, in nano-seconds * @period_ns: The period of the PWM, in nano-seconds + * @p_enable: whether the PWM is enabled */ struct pwm_chip { int id; @@ -70,6 +71,7 @@ struct pwm_chip { const struct pwm_ops *ops; int duty_ns; int period_ns; + int p_enable; }; int pwmchip_add(struct pwm_chip *chip, struct device_d *dev); -- 2.20.1 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox