summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorFinley Xiao <finley.xiao@rock-chips.com>2018-06-26 22:09:05 +0800
committerTao Huang <huangtao@rock-chips.com>2018-07-06 10:21:14 +0800
commit87c0821959fc5892bc5ac1295c964bbdc4888eba (patch)
tree3c6a6faa54e5a3277b71ccaff5093eafd2da3d96 /drivers
parent9d01f918930bd14e2092d05a8850754d9f91df11 (diff)
PM / OPP: Rename dev_pm_opp_check_initial_rate to dev_pm_opp_check_rate_volt
Make the function more general. Change-Id: Ic10b84ddb6b7eff33e1a1fe491f05f10a9c6015a Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/base/power/opp/core.c24
-rw-r--r--drivers/cpufreq/cpufreq-dt.c5
2 files changed, 13 insertions, 16 deletions
diff --git a/drivers/base/power/opp/core.c b/drivers/base/power/opp/core.c
index 7028daa3adcb..e185950a3eec 100644
--- a/drivers/base/power/opp/core.c
+++ b/drivers/base/power/opp/core.c
@@ -704,15 +704,15 @@ restore_voltage:
EXPORT_SYMBOL_GPL(dev_pm_opp_set_rate);
/**
- * dev_pm_opp_check_initial_rate() - Configure new OPP based on initial rate
+ * dev_pm_opp_check_rate_volt() - Configure new OPP based on current rate
* @dev: device for which we do this operation
*
* This configures the power-supplies and clock source to the levels specified
- * by the OPP corresponding to the system initial rate.
+ * by the OPP corresponding to current rate.
*
* Locking: This function takes rcu_read_lock().
*/
-int dev_pm_opp_check_initial_rate(struct device *dev, unsigned long *cur_freq)
+int dev_pm_opp_check_rate_volt(struct device *dev, bool force)
{
struct opp_table *opp_table;
struct dev_pm_opp *opp;
@@ -741,7 +741,6 @@ int dev_pm_opp_check_initial_rate(struct device *dev, unsigned long *cur_freq)
}
old_freq = clk_get_rate(clk);
- *cur_freq = old_freq;
target_freq = old_freq;
opp = dev_pm_opp_find_freq_ceil(dev, &target_freq);
@@ -772,11 +771,14 @@ int dev_pm_opp_check_initial_rate(struct device *dev, unsigned long *cur_freq)
target_freq, u_volt);
if (old_freq == target_freq) {
- ret = _set_opp_voltage(dev, reg, u_volt, u_volt_min,
- u_volt_max);
- if (ret) {
- dev_err(dev, "failed to set volt %lu\n", u_volt);
- return ret;
+ if (old_volt != u_volt || force) {
+ ret = _set_opp_voltage(dev, reg, u_volt, u_volt_min,
+ u_volt_max);
+ if (ret) {
+ dev_err(dev, "failed to set volt %lu\n",
+ u_volt);
+ return ret;
+ }
}
return 0;
}
@@ -798,8 +800,6 @@ int dev_pm_opp_check_initial_rate(struct device *dev, unsigned long *cur_freq)
return ret;
}
- *cur_freq = clk_get_rate(clk);
-
/* Scaling down? Scale voltage after frequency */
if (target_freq < old_freq) {
ret = _set_opp_voltage(dev, reg, u_volt, u_volt_min,
@@ -812,7 +812,7 @@ int dev_pm_opp_check_initial_rate(struct device *dev, unsigned long *cur_freq)
return 0;
}
-EXPORT_SYMBOL_GPL(dev_pm_opp_check_initial_rate);
+EXPORT_SYMBOL_GPL(dev_pm_opp_check_rate_volt);
/* OPP-dev Helpers */
static void _kfree_opp_dev_rcu(struct rcu_head *head)
diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c
index f07774f96a14..2632f162e425 100644
--- a/drivers/cpufreq/cpufreq-dt.c
+++ b/drivers/cpufreq/cpufreq-dt.c
@@ -158,7 +158,6 @@ static int cpufreq_init(struct cpufreq_policy *policy)
struct cpumask cpus;
#endif
unsigned int transition_latency;
- unsigned long cur_freq;
bool opp_v1 = false;
const char *name;
int ret, scale;
@@ -314,9 +313,7 @@ static int cpufreq_init(struct cpufreq_policy *policy)
policy->down_transition_delay_us = 50000; /* 50ms */
if (check_init < MAX_CLUSTERS) {
- ret = dev_pm_opp_check_initial_rate(cpu_dev, &cur_freq);
- if (!ret)
- policy->cur = cur_freq / 1000;
+ dev_pm_opp_check_rate_volt(cpu_dev, true);
check_init++;
}