On Wed, Sep 15, 2021 at 08:55:41AM +0200, Wolfram Sang wrote: > From: Duc Nguyen <duc.nguyen.ub@xxxxxxxxxxx> > > We have special code if duty_ns is 0. But if non-zero is given, then the > calculation should not result in zero duty. Why not? Assuming a PWM that supports multiples of say 100 ns for duty_cycle, rounding a request for 550 ns down to 500 ns isn't worse than rounding down a request for 50 ns to 0 ns is it? > Signed-off-by: Duc Nguyen <duc.nguyen.ub@xxxxxxxxxxx> > [wsa: split and reworded commit message] > Signed-off-by: Wolfram Sang <wsa+renesas@xxxxxxxxxxxxxxxxxxxx> > --- > drivers/pwm/pwm-renesas-tpu.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/pwm/pwm-renesas-tpu.c b/drivers/pwm/pwm-renesas-tpu.c > index 754440194650..bb51156e4bda 100644 > --- a/drivers/pwm/pwm-renesas-tpu.c > +++ b/drivers/pwm/pwm-renesas-tpu.c > @@ -275,7 +275,7 @@ static int tpu_pwm_config(struct pwm_chip *chip, struct pwm_device *_pwm, > if (duty_ns) { > duty = clk_rate / prescalers[prescaler] > / (NSEC_PER_SEC / duty_ns); Unrelated to the change under discussion here: Dividing by the result of a division is bad. Consider: clk_rate = 1333333333 prescalers[prescaler] = 43 duty_ns = 500000001 The exact result is 15503875.996124031, with the above formula you get 31007751 which is off by nearly a factor of two. These numbers are probably not relevant, but they show the problem. Best regards Uwe -- Pengutronix e.K. | Uwe Kleine-König | Industrial Linux Solutions | https://www.pengutronix.de/ |
Attachment:
signature.asc
Description: PGP signature