ARM64: rockchip: cpufreq-dt: enable CPUFREQ_HAVE_GOVERNOR_PER_POLICY
[firefly-linux-kernel-4.4.55.git] / drivers / cpufreq / cpufreq-dt.c
index f951f911786e086b2b6dc9d615018eb235347dbe..2c566060913ef76085cfdc076ae8eccfdd89927f 100644 (file)
@@ -297,11 +297,16 @@ out_put_clk:
 
 static int cpufreq_exit(struct cpufreq_policy *policy)
 {
+       struct cpumask cpus;
        struct private_data *priv = policy->driver_data;
 
+       priv->cpu_dev = get_cpu_device(policy->cpu);
        cpufreq_cooling_unregister(priv->cdev);
        dev_pm_opp_free_cpufreq_table(priv->cpu_dev, &policy->freq_table);
-       dev_pm_opp_of_cpumask_remove_table(policy->related_cpus);
+       cpumask_copy(&cpus, policy->related_cpus);
+       cpumask_clear_cpu(policy->cpu, &cpus);
+       dev_pm_opp_of_cpumask_remove_table(&cpus);
+       dev_pm_opp_of_remove_table(priv->cpu_dev);
        if (priv->reg_name)
                dev_pm_opp_put_regulator(priv->cpu_dev);
 
@@ -344,7 +349,8 @@ static void cpufreq_ready(struct cpufreq_policy *policy)
 }
 
 static struct cpufreq_driver dt_cpufreq_driver = {
-       .flags = CPUFREQ_STICKY | CPUFREQ_NEED_INITIAL_FREQ_CHECK,
+       .flags = CPUFREQ_STICKY | CPUFREQ_NEED_INITIAL_FREQ_CHECK |
+                CPUFREQ_HAVE_GOVERNOR_PER_POLICY,
        .verify = cpufreq_generic_frequency_table_verify,
        .target_index = set_target,
        .get = cpufreq_generic_get,