Commit aa37e27f authored by Baruch Siach's avatar Baruch Siach Committed by Bartosz Golaszewski
Browse files

gpio: mvebu: improve pwm period calculation accuracy



Change 'off' register value calculation from

  $off = (period - duty_cycle) * clkrate / NSEC_PER_SEC

to

  $off = (period * clkrate / NSEC_PER_SEC) - $on

That is, divide the full period value to reduce rounding error.

Reported-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Reviewed-by: default avatarUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarBaruch Siach <baruch@tkos.co.il>
Signed-off-by: default avatarBartosz Golaszewski <bgolaszewski@baylibre.com>
parent 4bf24261
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -715,9 +715,9 @@ static int mvebu_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
	else
		on = 1;

	val = (unsigned long long) mvpwm->clk_rate *
		(state->period - state->duty_cycle);
	val = (unsigned long long) mvpwm->clk_rate * state->period;
	do_div(val, NSEC_PER_SEC);
	val -= on;
	if (val > UINT_MAX)
		return -EINVAL;
	if (val)