Messages in this thread Patch in this message | | | From | Rayagonda Kokatanur <> | Subject | [PATCH v2 1/2] pwm: bcm-iproc: handle clk_get_rate() return | Date | Mon, 23 Mar 2020 14:54:23 +0530 |
| |
Handle clk_get_rate() returning <= 0 condition 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> --- drivers/pwm/pwm-bcm-iproc.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-)
diff --git a/drivers/pwm/pwm-bcm-iproc.c b/drivers/pwm/pwm-bcm-iproc.c index 1f829edd8ee7..8bbd2a04fead 100644 --- a/drivers/pwm/pwm-bcm-iproc.c +++ b/drivers/pwm/pwm-bcm-iproc.c @@ -99,19 +99,25 @@ static void iproc_pwmc_get_state(struct pwm_chip *chip, struct pwm_device *pwm, else state->polarity = PWM_POLARITY_INVERSED; - value = readl(ip->base + IPROC_PWM_PRESCALE_OFFSET); - prescale = value >> IPROC_PWM_PRESCALE_SHIFT(pwm->hwpwm); - prescale &= IPROC_PWM_PRESCALE_MAX; - - multi = NSEC_PER_SEC * (prescale + 1); - - value = readl(ip->base + IPROC_PWM_PERIOD_OFFSET(pwm->hwpwm)); - tmp = (value & IPROC_PWM_PERIOD_MAX) * multi; - state->period = div64_u64(tmp, rate); - - value = readl(ip->base + IPROC_PWM_DUTY_CYCLE_OFFSET(pwm->hwpwm)); - tmp = (value & IPROC_PWM_PERIOD_MAX) * multi; - state->duty_cycle = div64_u64(tmp, rate); + if (rate == 0) { + state->period = 0; + state->duty_cycle = 0; + } else { + value = readl(ip->base + IPROC_PWM_PRESCALE_OFFSET); + prescale = value >> IPROC_PWM_PRESCALE_SHIFT(pwm->hwpwm); + prescale &= IPROC_PWM_PRESCALE_MAX; + + multi = NSEC_PER_SEC * (prescale + 1); + + value = readl(ip->base + IPROC_PWM_PERIOD_OFFSET(pwm->hwpwm)); + tmp = (value & IPROC_PWM_PERIOD_MAX) * multi; + state->period = div64_u64(tmp, rate); + + value = readl(ip->base + + IPROC_PWM_DUTY_CYCLE_OFFSET(pwm->hwpwm)); + tmp = (value & IPROC_PWM_PERIOD_MAX) * multi; + state->duty_cycle = div64_u64(tmp, rate); + } } static int iproc_pwmc_apply(struct pwm_chip *chip, struct pwm_device *pwm, -- 2.17.1
| |