summaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq/scpi-cpufreq.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/cpufreq/scpi-cpufreq.c')
-rw-r--r--drivers/cpufreq/scpi-cpufreq.c17
1 files changed, 5 insertions, 12 deletions
diff --git a/drivers/cpufreq/scpi-cpufreq.c b/drivers/cpufreq/scpi-cpufreq.c
index 99449738faa4..3f49427766b8 100644
--- a/drivers/cpufreq/scpi-cpufreq.c
+++ b/drivers/cpufreq/scpi-cpufreq.c
@@ -22,7 +22,6 @@
22#include <linux/cpu.h> 22#include <linux/cpu.h>
23#include <linux/cpufreq.h> 23#include <linux/cpufreq.h>
24#include <linux/cpumask.h> 24#include <linux/cpumask.h>
25#include <linux/cpu_cooling.h>
26#include <linux/export.h> 25#include <linux/export.h>
27#include <linux/module.h> 26#include <linux/module.h>
28#include <linux/of_platform.h> 27#include <linux/of_platform.h>
@@ -34,7 +33,6 @@
34struct scpi_data { 33struct scpi_data {
35 struct clk *clk; 34 struct clk *clk;
36 struct device *cpu_dev; 35 struct device *cpu_dev;
37 struct thermal_cooling_device *cdev;
38}; 36};
39 37
40static struct scpi_ops *scpi_ops; 38static struct scpi_ops *scpi_ops;
@@ -170,6 +168,9 @@ static int scpi_cpufreq_init(struct cpufreq_policy *policy)
170 policy->cpuinfo.transition_latency = latency; 168 policy->cpuinfo.transition_latency = latency;
171 169
172 policy->fast_switch_possible = false; 170 policy->fast_switch_possible = false;
171
172 dev_pm_opp_of_register_em(policy->cpus);
173
173 return 0; 174 return 0;
174 175
175out_free_cpufreq_table: 176out_free_cpufreq_table:
@@ -186,7 +187,6 @@ static int scpi_cpufreq_exit(struct cpufreq_policy *policy)
186{ 187{
187 struct scpi_data *priv = policy->driver_data; 188 struct scpi_data *priv = policy->driver_data;
188 189
189 cpufreq_cooling_unregister(priv->cdev);
190 clk_put(priv->clk); 190 clk_put(priv->clk);
191 dev_pm_opp_free_cpufreq_table(priv->cpu_dev, &policy->freq_table); 191 dev_pm_opp_free_cpufreq_table(priv->cpu_dev, &policy->freq_table);
192 kfree(priv); 192 kfree(priv);
@@ -195,23 +195,16 @@ static int scpi_cpufreq_exit(struct cpufreq_policy *policy)
195 return 0; 195 return 0;
196} 196}
197 197
198static void scpi_cpufreq_ready(struct cpufreq_policy *policy)
199{
200 struct scpi_data *priv = policy->driver_data;
201
202 priv->cdev = of_cpufreq_cooling_register(policy);
203}
204
205static struct cpufreq_driver scpi_cpufreq_driver = { 198static struct cpufreq_driver scpi_cpufreq_driver = {
206 .name = "scpi-cpufreq", 199 .name = "scpi-cpufreq",
207 .flags = CPUFREQ_STICKY | CPUFREQ_HAVE_GOVERNOR_PER_POLICY | 200 .flags = CPUFREQ_STICKY | CPUFREQ_HAVE_GOVERNOR_PER_POLICY |
208 CPUFREQ_NEED_INITIAL_FREQ_CHECK, 201 CPUFREQ_NEED_INITIAL_FREQ_CHECK |
202 CPUFREQ_IS_COOLING_DEV,
209 .verify = cpufreq_generic_frequency_table_verify, 203 .verify = cpufreq_generic_frequency_table_verify,
210 .attr = cpufreq_generic_attr, 204 .attr = cpufreq_generic_attr,
211 .get = scpi_cpufreq_get_rate, 205 .get = scpi_cpufreq_get_rate,
212 .init = scpi_cpufreq_init, 206 .init = scpi_cpufreq_init,
213 .exit = scpi_cpufreq_exit, 207 .exit = scpi_cpufreq_exit,
214 .ready = scpi_cpufreq_ready,
215 .target_index = scpi_cpufreq_set_target, 208 .target_index = scpi_cpufreq_set_target,
216}; 209};
217 210