|
|
@@ -58,6 +58,12 @@ static int stm32_pwm_lp_apply(struct pwm_chip *chip, struct pwm_device *pwm,
|
|
|
/* Calculate the period and prescaler value */
|
|
|
div = (unsigned long long)clk_get_rate(priv->clk) * state->period;
|
|
|
do_div(div, NSEC_PER_SEC);
|
|
|
+ if (!div) {
|
|
|
+ /* Clock is too slow to achieve requested period. */
|
|
|
+ dev_dbg(priv->chip.dev, "Can't reach %u ns\n", state->period);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
prd = div;
|
|
|
while (div > STM32_LPTIM_MAX_ARR) {
|
|
|
presc++;
|