mirror of
https://github.com/torvalds/linux.git
synced 2026-01-25 15:03:52 +08:00
pwm: fsl-ftm: Handle clk_get_rate() returning 0
Considering that the driver doesn't enable the used clocks (and also
that clk_get_rate() returns 0 if CONFIG_HAVE_CLK is unset) better check
the return value of clk_get_rate() for being non-zero before dividing by
it.
Fixes: 3479bbd1e1 ("pwm: fsl-ftm: More relaxed permissions for updating period")
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Link: https://lore.kernel.org/r/b68351a51017035651bc62ad3146afcb706874f0.1743501688.git.u.kleine-koenig@baylibre.com
Signed-off-by: Uwe Kleine-König <ukleinek@kernel.org>
This commit is contained in:
committed by
Uwe Kleine-König
parent
e7327c1930
commit
928446a530
@@ -118,6 +118,9 @@ static unsigned int fsl_pwm_ticks_to_ns(struct fsl_pwm_chip *fpc,
|
||||
unsigned long long exval;
|
||||
|
||||
rate = clk_get_rate(fpc->clk[fpc->period.clk_select]);
|
||||
if (rate >> fpc->period.clk_ps == 0)
|
||||
return 0;
|
||||
|
||||
exval = ticks;
|
||||
exval *= 1000000000UL;
|
||||
do_div(exval, rate >> fpc->period.clk_ps);
|
||||
@@ -190,6 +193,9 @@ static unsigned int fsl_pwm_calculate_duty(struct fsl_pwm_chip *fpc,
|
||||
unsigned int period = fpc->period.mod_period + 1;
|
||||
unsigned int period_ns = fsl_pwm_ticks_to_ns(fpc, period);
|
||||
|
||||
if (!period_ns)
|
||||
return 0;
|
||||
|
||||
duty = (unsigned long long)duty_ns * period;
|
||||
do_div(duty, period_ns);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user