diff options
Diffstat (limited to 'drivers/cpufreq/raspberrypi-cpufreq.c')
-rw-r--r-- | drivers/cpufreq/raspberrypi-cpufreq.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/cpufreq/raspberrypi-cpufreq.c b/drivers/cpufreq/raspberrypi-cpufreq.c index 2bc7d9734272..8bcfab2749a8 100644 --- a/drivers/cpufreq/raspberrypi-cpufreq.c +++ b/drivers/cpufreq/raspberrypi-cpufreq.c @@ -8,6 +8,7 @@ #include <linux/clk.h> #include <linux/cpu.h> #include <linux/cpufreq.h> +#include <linux/math64.h> #include <linux/module.h> #include <linux/platform_device.h> #include <linux/pm_opp.h> @@ -22,6 +23,7 @@ static int raspberrypi_cpufreq_probe(struct platform_device *pdev) unsigned long min, max; unsigned long rate; struct clk *clk; + int div; int ret; cpu_dev = get_cpu_device(0); @@ -44,7 +46,10 @@ static int raspberrypi_cpufreq_probe(struct platform_device *pdev) max = roundup(clk_round_rate(clk, ULONG_MAX), RASPBERRYPI_FREQ_INTERVAL); clk_put(clk); - for (rate = min; rate <= max; rate += RASPBERRYPI_FREQ_INTERVAL) { + for (div = 2; ; div++) { + rate = div_u64((u64)max * 2, div); + if (rate < min) + break; ret = dev_pm_opp_add(cpu_dev, rate, 0); if (ret) goto remove_opp; |