pwm: atmel-hlcdc: Prevent division by zero
authorBoris BREZILLON <boris.brezillon@free-electrons.com>
Thu, 18 Dec 2014 20:05:30 +0000 (21:05 +0100)
committerThierry Reding <thierry.reding@gmail.com>
Fri, 30 Jan 2015 11:16:00 +0000 (12:16 +0100)
The slow and system clock should never return a rate of zero, but this
might happen if the clocks property defined in the DT is referencing the
wrong clocks.

Prevent any division by zero from happening by testing the clk_freq
value before calling do_div().

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
drivers/pwm/pwm-atmel-hlcdc.c

index e7a785fadcdf973390dcda8cfdf6f4b872acb2c3..522f7075bb1a42b14d699d5ee6548fe375fcdd53 100644 (file)
@@ -64,6 +64,9 @@ static int atmel_hlcdc_pwm_config(struct pwm_chip *c,
 
        if (!chip->errata || !chip->errata->slow_clk_erratum) {
                clk_freq = clk_get_rate(new_clk);
+               if (!clk_freq)
+                       return -EINVAL;
+
                clk_period_ns = (u64)NSEC_PER_SEC * 256;
                do_div(clk_period_ns, clk_freq);
        }
@@ -73,6 +76,9 @@ static int atmel_hlcdc_pwm_config(struct pwm_chip *c,
            clk_period_ns > period_ns) {
                new_clk = hlcdc->sys_clk;
                clk_freq = clk_get_rate(new_clk);
+               if (!clk_freq)
+                       return -EINVAL;
+
                clk_period_ns = (u64)NSEC_PER_SEC * 256;
                do_div(clk_period_ns, clk_freq);
        }