Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 09a7e4a3 authored by Boris Brezillon's avatar Boris Brezillon Committed by Thierry Reding
Browse files

pwm: Move the enabled/disabled info into pwm_state



Prepare the transition to PWM atomic update by moving the enabled and
disabled state into the pwm_state struct. This way we can easily update
the whole PWM state by copying the new state in the ->state field.

Signed-off-by: default avatarBoris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: default avatarThierry Reding <thierry.reding@gmail.com>
parent 43a276b0
Loading
Loading
Loading
Loading
+9 −4
Original line number Diff line number Diff line
@@ -499,10 +499,10 @@ int pwm_enable(struct pwm_device *pwm)
	if (!pwm)
		return -EINVAL;

	if (!test_and_set_bit(PWMF_ENABLED, &pwm->flags)) {
	if (!pwm_is_enabled(pwm)) {
		err = pwm->chip->ops->enable(pwm->chip, pwm);
		if (err)
			clear_bit(PWMF_ENABLED, &pwm->flags);
		if (!err)
			pwm->state.enabled = true;
	}

	return err;
@@ -515,8 +515,13 @@ EXPORT_SYMBOL_GPL(pwm_enable);
 */
void pwm_disable(struct pwm_device *pwm)
{
	if (pwm && test_and_clear_bit(PWMF_ENABLED, &pwm->flags))
	if (!pwm)
		return;

	if (pwm_is_enabled(pwm)) {
		pwm->chip->ops->disable(pwm->chip, pwm);
		pwm->state.enabled = false;
	}
}
EXPORT_SYMBOL_GPL(pwm_disable);

+8 −3
Original line number Diff line number Diff line
@@ -94,8 +94,7 @@ struct pwm_args {

enum {
	PWMF_REQUESTED = 1 << 0,
	PWMF_ENABLED = 1 << 1,
	PWMF_EXPORTED = 1 << 2,
	PWMF_EXPORTED = 1 << 1,
};

/*
@@ -103,11 +102,13 @@ enum {
 * @period: PWM period (in nanoseconds)
 * @duty_cycle: PWM duty cycle (in nanoseconds)
 * @polarity: PWM polarity
 * @enabled: PWM enabled status
 */
struct pwm_state {
	unsigned int period;
	unsigned int duty_cycle;
	enum pwm_polarity polarity;
	bool enabled;
};

/**
@@ -146,7 +147,11 @@ static inline void pwm_get_state(const struct pwm_device *pwm,

static inline bool pwm_is_enabled(const struct pwm_device *pwm)
{
	return test_bit(PWMF_ENABLED, &pwm->flags);
	struct pwm_state state;

	pwm_get_state(pwm, &state);

	return state.enabled;
}

static inline void pwm_set_period(struct pwm_device *pwm, unsigned int period)