]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
pwm: atmel: Fix duty cycle calculation in .get_state()
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Tue, 20 Apr 2021 09:51:17 +0000 (11:51 +0200)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 18 Jun 2021 09:07:15 +0000 (11:07 +0200)
BugLink: https://bugs.launchpad.net/bugs/1931292
[ Upstream commit 453e8b3d8e36ddcb283b3d1698864a03ea45599a ]

The CDTY register contains the number of inactive cycles. .apply() does
this correctly, however .get_state() got this wrong.

Fixes: 651b510a74d4 ("pwm: atmel: Implement .get_state()")
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
drivers/pwm/pwm-atmel.c

index 5813339b597b92ab9fd0f74a05e6846c79a8fe50..3292158157b68aa53052cffa77c1018b613eb34c 100644 (file)
@@ -319,7 +319,7 @@ static void atmel_pwm_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
 
                cdty = atmel_pwm_ch_readl(atmel_pwm, pwm->hwpwm,
                                          atmel_pwm->data->regs.duty);
-               tmp = (u64)cdty * NSEC_PER_SEC;
+               tmp = (u64)(cprd - cdty) * NSEC_PER_SEC;
                tmp <<= pres;
                state->duty_cycle = DIV64_U64_ROUND_UP(tmp, rate);