When calculating device clock divisor values in set_rate and
round_rate, we do a simple integer divide. If parent_rate / rate
has a fraction, this is dropped which results in the device clock
being set too high.
This patch corrects the problem by adding 1 to the calculated
divisor if the division would have had a decimal result.
Signed-off-by: Tony Prisk <linux@prisktech.co.nz>
Signed-off-by: Mike Turquette <mturquette@linaro.org>
        struct clk_device *cdev = to_clk_device(hw);
        u32 divisor = *prate / rate;
 
+       /* If prate / rate would be decimal, incr the divisor */
+       if (rate * divisor < *prate)
+               divisor++;
+
        /*
         * If this is a request for SDMMC we have to adjust the divisor
         * when >31 to use the fixed predivisor
        u32 divisor = parent_rate / rate;
        unsigned long flags = 0;
 
+       /* If prate / rate would be decimal, incr the divisor */
+       if (rate * divisor < *prate)
+               divisor++;
+
        if (divisor == cdev->div_mask + 1)
                divisor = 0;