Re: [PATCH 1/5] gpio: mvebu: fix pwm get_state period calculation
From: Baruch Siach <baruch@tkos.co.il>
Date: 2021-01-13 06:36:57
Also in:
linux-arm-kernel, linux-pwm
Hi Uwe, On Mon, Jan 11 2021, Uwe Kleine-König wrote:
$Subject ~= s/get_state/.get_state/ ?
Ack.
On Mon, Jan 11, 2021 at 01:17:02PM +0200, Baruch Siach wrote:quoted
The period is the sum of on and off values. Reported-by: Russell King <linux@armlinux.org.uk> Fixes: 757642f9a584e ("gpio: mvebu: Add limited PWM support") Signed-off-by: Baruch Siach <baruch@tkos.co.il> --- drivers/gpio/gpio-mvebu.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-)diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c index 672681a976f5..a912a8fed197 100644 --- a/drivers/gpio/gpio-mvebu.c +++ b/drivers/gpio/gpio-mvebu.c@@ -676,20 +676,17 @@ static void mvebu_pwm_get_state(struct pwm_chip *chip, else state->duty_cycle = 1; + val = (unsigned long long) u; /* on duration */ regmap_read(mvpwm->regs, mvebu_pwmreg_blink_off_duration(mvpwm), &u); - val = (unsigned long long) u * NSEC_PER_SEC; + val += (unsigned long long) u; /* period = on + off duration */ + val *= NSEC_PER_SEC; do_div(val, mvpwm->clk_rate); - if (val < state->duty_cycle) { + if (val > UINT_MAX) + state->period = UINT_MAX; + else if (val) + state->period = val; + else state->period = 1; - } else { - val -= state->duty_cycle; - if (val > UINT_MAX) - state->period = UINT_MAX; - else if (val) - state->period = val; - else - state->period = 1; - }The patch looks good, the patch description could be a bit more verbose. Something like: Calculate the period as ($on + $off) / clkrate instead of $off / clkrate - $on / clkrate .
I take this to refer to the next patch (2/5). This patch changes from
buggy
$on / clkrate
to
($on + $off) / clkrate
baruch
--
~. .~ Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
- baruch@tkos.co.il - tel: +972.52.368.4656, http://www.tkos.co.il -