Message ID | 20241217150021.2030213-1-fabrice.gasnier@foss.st.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | pwm: stm32: fix complementary output in round_waveform_tohw | expand |
On Tue, Dec 17, 2024 at 04:00:21PM +0100, Fabrice Gasnier wrote: > When the timer supports complementary output, the enable bit is > overridden. It should be OR'ed. This makes all PWM channels for > such timer not to work. > > Fixes: deaba9cff809 ("pwm: stm32: Implementation of the waveform callbacks") > Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com> > --- > drivers/pwm/pwm-stm32.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/pwm/pwm-stm32.c b/drivers/pwm/pwm-stm32.c > index b889e64522c3..17e591f61efb 100644 > --- a/drivers/pwm/pwm-stm32.c > +++ b/drivers/pwm/pwm-stm32.c > @@ -84,7 +84,7 @@ static int stm32_pwm_round_waveform_tohw(struct pwm_chip *chip, > > wfhw->ccer = TIM_CCER_CCxE(ch + 1); > if (priv->have_complementary_output) > - wfhw->ccer = TIM_CCER_CCxNE(ch + 1); > + wfhw->ccer |= TIM_CCER_CCxNE(ch + 1); Oh, indeed. Thanks for the fix. Applied to https://git.kernel.org/pub/scm/linux/kernel/git/ukleinek/linux.git pwm/fixes and I will send it to Linus later this week. Best regards Uwe
diff --git a/drivers/pwm/pwm-stm32.c b/drivers/pwm/pwm-stm32.c index b889e64522c3..17e591f61efb 100644 --- a/drivers/pwm/pwm-stm32.c +++ b/drivers/pwm/pwm-stm32.c @@ -84,7 +84,7 @@ static int stm32_pwm_round_waveform_tohw(struct pwm_chip *chip, wfhw->ccer = TIM_CCER_CCxE(ch + 1); if (priv->have_complementary_output) - wfhw->ccer = TIM_CCER_CCxNE(ch + 1); + wfhw->ccer |= TIM_CCER_CCxNE(ch + 1); rate = clk_get_rate(priv->clk);
When the timer supports complementary output, the enable bit is overridden. It should be OR'ed. This makes all PWM channels for such timer not to work. Fixes: deaba9cff809 ("pwm: stm32: Implementation of the waveform callbacks") Signed-off-by: Fabrice Gasnier <fabrice.gasnier@foss.st.com> --- drivers/pwm/pwm-stm32.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)