Commit 989ae7a5 authored by Alexandre Belloni's avatar Alexandre Belloni Committed by Thierry Reding
Browse files

pwm: sun4i: Properly check current state



Correctly extract the prescaler value from CTRL_REG before comparing it
to PWM_PRESCAL_MASK.

Also, check that both PWM_CLK_GATING and PWM_EN to ensure the PWM is
enabled instead of relying on only one of those.

Fixes: 93e0dfb2 ("pwm: sun4i: Improve hardware read out")
Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: default avatarThierry Reding <thierry.reding@gmail.com>
parent 120cc2ff
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -117,7 +117,8 @@ static void sun4i_pwm_get_state(struct pwm_chip *chip,

	val = sun4i_pwm_readl(sun4i_pwm, PWM_CTRL_REG);

	if ((val == PWM_PRESCAL_MASK) && sun4i_pwm->data->has_prescaler_bypass)
	if ((PWM_REG_PRESCAL(val, pwm->hwpwm) == PWM_PRESCAL_MASK) &&
	    sun4i_pwm->data->has_prescaler_bypass)
		prescaler = 1;
	else
		prescaler = prescaler_table[PWM_REG_PRESCAL(val, pwm->hwpwm)];
@@ -130,7 +131,8 @@ static void sun4i_pwm_get_state(struct pwm_chip *chip,
	else
		state->polarity = PWM_POLARITY_INVERSED;

	if (val & BIT_CH(PWM_CLK_GATING | PWM_EN, pwm->hwpwm))
	if ((val & BIT_CH(PWM_CLK_GATING | PWM_EN, pwm->hwpwm)) ==
	    BIT_CH(PWM_CLK_GATING | PWM_EN, pwm->hwpwm))
		state->enabled = true;
	else
		state->enabled = false;