All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH V2 1/2] pwm: tegra: Improve required rate calculation
@ 2022-10-28 12:33 Jon Hunter
  2022-10-28 12:33 ` [PATCH V2 2/2] pwm: tegra: Ensure the clock rate is not less than needed Jon Hunter
  2022-11-03 15:12 ` [PATCH V2 1/2] pwm: tegra: Improve required rate calculation Thierry Reding
  0 siblings, 2 replies; 6+ messages in thread
From: Jon Hunter @ 2022-10-28 12:33 UTC (permalink / raw)
  To: Thierry Reding, Uwe Kleine-König; +Cc: linux-pwm, linux-tegra, Jon Hunter

For the case where dev_pm_opp_set_rate() is called to set the PWM clock
rate, the requested rate is calculated as ...

 required_clk_rate = (NSEC_PER_SEC / period_ns) << PWM_DUTY_WIDTH;

The above calculation may lead to rounding errors because the
NSEC_PER_SEC is divided by 'period_ns' before applying the
PWM_DUTY_WIDTH multiplication factor. For example, if the period is
45334ns, the above calculation yields a rate of 5646848Hz instead of
5646976Hz. Fix this by applying the multiplication factor before
dividing and using the DIV_ROUND_UP macro which yields the expected
result of 5646976Hz.

Fixes: 1d7796bdb63a ("pwm: tegra: Support dynamic clock frequency configuration")
Signed-off-by: Jon Hunter <jonathanh@nvidia.com>
Reviewed-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
---
Changes since V1:
- Dropped extra parenthesis

 drivers/pwm/pwm-tegra.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/pwm/pwm-tegra.c b/drivers/pwm/pwm-tegra.c
index dad9978c9186..b05ea2e8accc 100644
--- a/drivers/pwm/pwm-tegra.c
+++ b/drivers/pwm/pwm-tegra.c
@@ -145,8 +145,8 @@ static int tegra_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
 		 * source clock rate as required_clk_rate, PWM controller will
 		 * be able to configure the requested period.
 		 */
-		required_clk_rate =
-			(NSEC_PER_SEC / period_ns) << PWM_DUTY_WIDTH;
+		required_clk_rate = DIV_ROUND_UP_ULL(NSEC_PER_SEC << PWM_DUTY_WIDTH,
+						     period_ns);
 
 		err = dev_pm_opp_set_rate(pc->dev, required_clk_rate);
 		if (err < 0)
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-11-08 13:49 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-10-28 12:33 [PATCH V2 1/2] pwm: tegra: Improve required rate calculation Jon Hunter
2022-10-28 12:33 ` [PATCH V2 2/2] pwm: tegra: Ensure the clock rate is not less than needed Jon Hunter
2022-11-03 15:17   ` Thierry Reding
2022-11-03 21:35   ` Uwe Kleine-König
2022-11-08 13:49   ` Thierry Reding
2022-11-03 15:12 ` [PATCH V2 1/2] pwm: tegra: Improve required rate calculation Thierry Reding

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.