Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pwm: bcm-iproc: handle clk_get_rate() return

Handle clk_get_rate() returning 0 to avoid possible division by zero.

Fixes: daa5abc41c80 ("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>

authored by

Rayagonda Kokatanur and committed by
Thierry Reding
6ced5ff0 216a094d

+7 -2
+7 -2
drivers/pwm/pwm-bcm-iproc.c
··· 85 85 u64 tmp, multi, rate; 86 86 u32 value, prescale; 87 87 88 - rate = clk_get_rate(ip->clk); 89 - 90 88 value = readl(ip->base + IPROC_PWM_CTRL_OFFSET); 91 89 92 90 if (value & BIT(IPROC_PWM_CTRL_EN_SHIFT(pwm->hwpwm))) ··· 96 98 state->polarity = PWM_POLARITY_NORMAL; 97 99 else 98 100 state->polarity = PWM_POLARITY_INVERSED; 101 + 102 + rate = clk_get_rate(ip->clk); 103 + if (rate == 0) { 104 + state->period = 0; 105 + state->duty_cycle = 0; 106 + return; 107 + } 99 108 100 109 value = readl(ip->base + IPROC_PWM_PRESCALE_OFFSET); 101 110 prescale = value >> IPROC_PWM_PRESCALE_SHIFT(pwm->hwpwm);