summaryrefslogtreecommitdiff
path: root/drivers/cpufreq
diff options
context:
space:
mode:
authorFinley Xiao <finley.xiao@rock-chips.com>2018-06-26 22:15:30 +0800
committerTao Huang <huangtao@rock-chips.com>2018-07-06 10:22:04 +0800
commite7040c8dd6e2f411374c3f5c7efcdc60fb67771d (patch)
treeefb79849fcf1d530b1bd2066a94159d254329fb1 /drivers/cpufreq
parent87c0821959fc5892bc5ac1295c964bbdc4888eba (diff)
cpufreq: rockchip: implement rockchip_cpufreq_check_rate_volt()
Change-Id: I707c88d217725e66119aa28e8823ce68ac3abfba Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
Diffstat (limited to 'drivers/cpufreq')
-rw-r--r--drivers/cpufreq/cpufreq-dt.c10
-rw-r--r--drivers/cpufreq/rockchip-cpufreq.c17
2 files changed, 20 insertions, 7 deletions
diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c
index 2632f162e425..c3889bf41545 100644
--- a/drivers/cpufreq/cpufreq-dt.c
+++ b/drivers/cpufreq/cpufreq-dt.c
@@ -32,8 +32,6 @@
#include <soc/rockchip/rockchip_opp_select.h>
#endif
-#define MAX_CLUSTERS 2
-
struct private_data {
struct device *cpu_dev;
struct thermal_cooling_device *cdev;
@@ -161,7 +159,6 @@ static int cpufreq_init(struct cpufreq_policy *policy)
bool opp_v1 = false;
const char *name;
int ret, scale;
- static int check_init;
cpu_dev = get_cpu_device(policy->cpu);
if (!cpu_dev) {
@@ -312,10 +309,9 @@ static int cpufreq_init(struct cpufreq_policy *policy)
policy->up_transition_delay_us = transition_latency / NSEC_PER_USEC;
policy->down_transition_delay_us = 50000; /* 50ms */
- if (check_init < MAX_CLUSTERS) {
- dev_pm_opp_check_rate_volt(cpu_dev, true);
- check_init++;
- }
+#ifdef CONFIG_ARCH_ROCKCHIP
+ rockchip_cpufreq_check_rate_volt(cpu_dev);
+#endif
return 0;
diff --git a/drivers/cpufreq/rockchip-cpufreq.c b/drivers/cpufreq/rockchip-cpufreq.c
index cd8bcdac0e45..73ebcf3f7037 100644
--- a/drivers/cpufreq/rockchip-cpufreq.c
+++ b/drivers/cpufreq/rockchip-cpufreq.c
@@ -48,6 +48,7 @@ struct cluster_info {
bool offline;
bool rebooting;
bool freq_limit;
+ bool is_check_init;
};
static LIST_HEAD(cluster_info_list);
@@ -172,6 +173,22 @@ int rockchip_cpufreq_set_scale_rate(struct device *dev, unsigned long rate)
}
EXPORT_SYMBOL_GPL(rockchip_cpufreq_set_scale_rate);
+int rockchip_cpufreq_check_rate_volt(struct device *dev)
+{
+ struct cluster_info *cluster;
+
+ cluster = rockchip_cluster_lookup_by_dev(dev);
+ if (!cluster)
+ return -EINVAL;
+ if (cluster->is_check_init)
+ return 0;
+ dev_pm_opp_check_rate_volt(dev, true);
+ cluster->is_check_init = true;
+
+ return 0;
+}
+EXPORT_SYMBOL_GPL(rockchip_cpufreq_check_rate_volt);
+
static int rockchip_cpufreq_cluster_init(int cpu, struct cluster_info *cluster)
{
struct device_node *np;