04406c8026794b1e17e86312c634c6976d9088f8
[openwrt/staging/adrian.git] /
1 From 1c038a58f4183602fc1699d68b21f5e22a12176d Mon Sep 17 00:00:00 2001
2 From: popcornmix <popcornmix@gmail.com>
3 Date: Fri, 13 Sep 2019 13:45:11 +0100
4 Subject: [PATCH] raspberrypi-cpufreq: Only report integer pll divisor
5 frequencies
6
7 ---
8 drivers/cpufreq/raspberrypi-cpufreq.c | 7 ++++++-
9 1 file changed, 6 insertions(+), 1 deletion(-)
10
11 --- a/drivers/cpufreq/raspberrypi-cpufreq.c
12 +++ b/drivers/cpufreq/raspberrypi-cpufreq.c
13 @@ -8,6 +8,7 @@
14 #include <linux/clk.h>
15 #include <linux/cpu.h>
16 #include <linux/cpufreq.h>
17 +#include <linux/math64.h>
18 #include <linux/module.h>
19 #include <linux/platform_device.h>
20 #include <linux/pm_opp.h>
21 @@ -22,6 +23,7 @@ static int raspberrypi_cpufreq_probe(str
22 unsigned long min, max;
23 unsigned long rate;
24 struct clk *clk;
25 + int div;
26 int ret;
27
28 cpu_dev = get_cpu_device(0);
29 @@ -44,7 +46,10 @@ static int raspberrypi_cpufreq_probe(str
30 max = roundup(clk_round_rate(clk, ULONG_MAX), RASPBERRYPI_FREQ_INTERVAL);
31 clk_put(clk);
32
33 - for (rate = min; rate <= max; rate += RASPBERRYPI_FREQ_INTERVAL) {
34 + for (div = 2; ; div++) {
35 + rate = div_u64((u64)max * 2, div);
36 + if (rate < min)
37 + break;
38 ret = dev_pm_opp_add(cpu_dev, rate, 0);
39 if (ret)
40 goto remove_opp;