Commit fa4d8178 authored by Clément Péron's avatar Clément Péron Committed by Thierry Reding
Browse files

pwm: sun4i: Always calculate params when applying new parameters



Bypass mode will require to be re-calculated when the pwm state
is changed.

Remove the condition so pwm_sun4i_calculate is always called.

Reviewed-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: default avatarClément Péron <peron.clem@gmail.com>
Signed-off-by: default avatarThierry Reding <thierry.reding@gmail.com>
parent 5b090b43
Loading
Loading
Loading
Loading
+23 −29
Original line number Diff line number Diff line
@@ -202,9 +202,9 @@ static int sun4i_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
{
	struct sun4i_pwm_chip *sun4i_pwm = to_sun4i_pwm_chip(chip);
	struct pwm_state cstate;
	u32 ctrl;
	u32 ctrl, duty, period, val;
	int ret;
	unsigned int delay_us;
	unsigned int delay_us, prescaler;
	unsigned long now;

	pwm_get_state(pwm, &cstate);
@@ -220,13 +220,7 @@ static int sun4i_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
	spin_lock(&sun4i_pwm->ctrl_lock);
	ctrl = sun4i_pwm_readl(sun4i_pwm, PWM_CTRL_REG);

	if ((cstate.period != state->period) ||
	    (cstate.duty_cycle != state->duty_cycle)) {
		u32 period, duty, val;
		unsigned int prescaler;

		ret = sun4i_pwm_calculate(sun4i_pwm, state,
					  &duty, &period, &prescaler);
	ret = sun4i_pwm_calculate(sun4i_pwm, state, &duty, &period, &prescaler);
	if (ret) {
		dev_err(chip->dev, "period exceeds the maximum value\n");
		spin_unlock(&sun4i_pwm->ctrl_lock);
@@ -249,7 +243,6 @@ static int sun4i_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
	sun4i_pwm->next_period[pwm->hwpwm] = jiffies +
		usecs_to_jiffies(cstate.period / 1000 + 1);
	sun4i_pwm->needs_delay[pwm->hwpwm] = true;
	}

	if (state->polarity != PWM_POLARITY_NORMAL)
		ctrl &= ~BIT_CH(PWM_ACT_STATE, pwm->hwpwm);
@@ -257,6 +250,7 @@ static int sun4i_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
		ctrl |= BIT_CH(PWM_ACT_STATE, pwm->hwpwm);

	ctrl |= BIT_CH(PWM_CLK_GATING, pwm->hwpwm);

	if (state->enabled) {
		ctrl |= BIT_CH(PWM_EN, pwm->hwpwm);
	} else if (!sun4i_pwm->needs_delay[pwm->hwpwm]) {