mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 06:10:54 +07:00
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: 93e0dfb2c5
("pwm: sun4i: Improve hardware read out")
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
This commit is contained in:
parent
120cc2fff4
commit
989ae7a5b2
@ -117,7 +117,8 @@ static void sun4i_pwm_get_state(struct pwm_chip *chip,
|
|||||||
|
|
||||||
val = sun4i_pwm_readl(sun4i_pwm, PWM_CTRL_REG);
|
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;
|
prescaler = 1;
|
||||||
else
|
else
|
||||||
prescaler = prescaler_table[PWM_REG_PRESCAL(val, pwm->hwpwm)];
|
prescaler = prescaler_table[PWM_REG_PRESCAL(val, pwm->hwpwm)];
|
||||||
@ -130,7 +131,8 @@ static void sun4i_pwm_get_state(struct pwm_chip *chip,
|
|||||||
else
|
else
|
||||||
state->polarity = PWM_POLARITY_INVERSED;
|
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;
|
state->enabled = true;
|
||||||
else
|
else
|
||||||
state->enabled = false;
|
state->enabled = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user