|
@@ -196,6 +196,7 @@ static int cpufreq_init(struct cpufreq_policy *policy)
|
|
|
struct device *cpu_dev;
|
|
|
struct regulator *cpu_reg;
|
|
|
struct clk *cpu_clk;
|
|
|
+ struct dev_pm_opp *suspend_opp;
|
|
|
unsigned long min_uV = ~0, max_uV = 0;
|
|
|
unsigned int transition_latency;
|
|
|
bool need_update = false;
|
|
@@ -333,6 +334,13 @@ static int cpufreq_init(struct cpufreq_policy *policy)
|
|
|
policy->driver_data = priv;
|
|
|
|
|
|
policy->clk = cpu_clk;
|
|
|
+
|
|
|
+ rcu_read_lock();
|
|
|
+ suspend_opp = dev_pm_opp_get_suspend_opp(cpu_dev);
|
|
|
+ if (suspend_opp)
|
|
|
+ policy->suspend_freq = dev_pm_opp_get_freq(suspend_opp) / 1000;
|
|
|
+ rcu_read_unlock();
|
|
|
+
|
|
|
ret = cpufreq_table_validate_and_show(policy, freq_table);
|
|
|
if (ret) {
|
|
|
dev_err(cpu_dev, "%s: invalid frequency table: %d\n", __func__,
|
|
@@ -423,6 +431,7 @@ static struct cpufreq_driver dt_cpufreq_driver = {
|
|
|
.ready = cpufreq_ready,
|
|
|
.name = "cpufreq-dt",
|
|
|
.attr = cpufreq_dt_attr,
|
|
|
+ .suspend = cpufreq_generic_suspend,
|
|
|
};
|
|
|
|
|
|
static int dt_cpufreq_probe(struct platform_device *pdev)
|