Skip to content

Commit

Permalink
pwm: bcm-iproc: handle clk_get_rate() return
Browse files Browse the repository at this point in the history
Handle clk_get_rate() returning 0 to avoid possible division by zero.

Fixes: daa5abc ("pwm: Add support for Broadcom iProc PWM controller")
Signed-off-by: Rayagonda Kokatanur <rayagonda.kokatanur@broadcom.com>
Signed-off-by: Scott Branden <scott.branden@broadcom.com>
Reviewed-by: Ray Jui <ray.jui@broadcom.com>
Reviewed-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
  • Loading branch information
Rayagonda Kokatanur authored and Thierry Reding committed Jul 30, 2020
1 parent 216a094 commit 6ced5ff
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions drivers/pwm/pwm-bcm-iproc.c
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,6 @@ static void iproc_pwmc_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
u64 tmp, multi, rate;
u32 value, prescale;

rate = clk_get_rate(ip->clk);

value = readl(ip->base + IPROC_PWM_CTRL_OFFSET);

if (value & BIT(IPROC_PWM_CTRL_EN_SHIFT(pwm->hwpwm)))
Expand All @@ -99,6 +97,13 @@ static void iproc_pwmc_get_state(struct pwm_chip *chip, struct pwm_device *pwm,
else
state->polarity = PWM_POLARITY_INVERSED;

rate = clk_get_rate(ip->clk);
if (rate == 0) {
state->period = 0;
state->duty_cycle = 0;
return;
}

value = readl(ip->base + IPROC_PWM_PRESCALE_OFFSET);
prescale = value >> IPROC_PWM_PRESCALE_SHIFT(pwm->hwpwm);
prescale &= IPROC_PWM_PRESCALE_MAX;
Expand Down

0 comments on commit 6ced5ff

Please sign in to comment.