summaryrefslogtreecommitdiff
path: root/drivers/devfreq
diff options
context:
space:
mode:
authorRocky Hao <rocky.hao@rock-chips.com>2018-02-06 17:01:55 +0800
committerTao Huang <huangtao@rock-chips.com>2018-02-08 09:47:01 +0800
commitf417571488bb393278a8ac8378de186b56833fc9 (patch)
tree47a89a6ced28a2a2b495d7aa45bba9d2d1514cd5 /drivers/devfreq
parentae5b1c4df1a48f275f78f1d08de9462c6aec886f (diff)
PM / devfreq: rockchip_dmc: record opp rate instead of real clock rate
opp rate is used to calc power in thermal framework, so we record this rate instead of real clock rate. Change-Id: Ic51a8c36be8d63fcf765e6d49930d1d437a2e502 Signed-off-by: Rocky Hao <rocky.hao@rock-chips.com>
Diffstat (limited to 'drivers/devfreq')
-rw-r--r--drivers/devfreq/rockchip_dmc.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/devfreq/rockchip_dmc.c b/drivers/devfreq/rockchip_dmc.c
index 7710925acc85..69b57982e7e1 100644
--- a/drivers/devfreq/rockchip_dmc.c
+++ b/drivers/devfreq/rockchip_dmc.c
@@ -705,7 +705,7 @@ static int rockchip_dmcfreq_target(struct device *dev, unsigned long *freq,
struct dev_pm_opp *opp;
struct cpufreq_policy *policy;
unsigned long old_clk_rate = dmcfreq->rate;
- unsigned long temp_rate, target_volt, target_rate;
+ unsigned long opp_rate, target_volt, target_rate;
unsigned int cpu_cur, cpufreq_cur;
int err = 0;
@@ -716,14 +716,14 @@ static int rockchip_dmcfreq_target(struct device *dev, unsigned long *freq,
rcu_read_unlock();
return PTR_ERR(opp);
}
- temp_rate = dev_pm_opp_get_freq(opp);
+ opp_rate = dev_pm_opp_get_freq(opp);
target_volt = dev_pm_opp_get_voltage(opp);
rcu_read_unlock();
- target_rate = clk_round_rate(dmcfreq->dmc_clk, temp_rate);
+ target_rate = clk_round_rate(dmcfreq->dmc_clk, opp_rate);
if ((long)target_rate <= 0)
- target_rate = temp_rate;
+ target_rate = opp_rate;
if (dmcfreq->rate == target_rate) {
if (dmcfreq->volt == target_volt)
@@ -804,7 +804,6 @@ static int rockchip_dmcfreq_target(struct device *dev, unsigned long *freq,
* 2. Ddr frequency scaling sucessful, we get the rate we set.
*/
dmcfreq->rate = clk_get_rate(dmcfreq->dmc_clk);
- dmcfreq->devfreq->last_status.current_frequency = dmcfreq->rate;
/* If get the incorrect rate, set voltage to old value. */
if (dmcfreq->rate != target_rate) {
@@ -822,6 +821,8 @@ static int rockchip_dmcfreq_target(struct device *dev, unsigned long *freq,
}
}
+ dmcfreq->devfreq->last_status.current_frequency = opp_rate;
+
dmcfreq->volt = target_volt;
out:
__cpufreq_driver_target(policy, cpufreq_cur, CPUFREQ_RELATION_L);
@@ -844,7 +845,6 @@ static int rockchip_dmcfreq_get_dev_status(struct device *dev,
if (ret < 0)
return ret;
- stat->current_frequency = dmcfreq->rate;
stat->busy_time = edata.load_count;
stat->total_time = edata.total_count;