diff options
author | Finley Xiao <finley.xiao@rock-chips.com> | 2018-06-26 22:15:30 +0800 |
---|---|---|
committer | Tao Huang <huangtao@rock-chips.com> | 2018-07-06 10:22:04 +0800 |
commit | e7040c8dd6e2f411374c3f5c7efcdc60fb67771d (patch) | |
tree | efb79849fcf1d530b1bd2066a94159d254329fb1 /drivers/cpufreq | |
parent | 87c0821959fc5892bc5ac1295c964bbdc4888eba (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.c | 10 | ||||
-rw-r--r-- | drivers/cpufreq/rockchip-cpufreq.c | 17 |
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; |