aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq/imx6q-cpufreq.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/cpufreq/imx6q-cpufreq.c')
-rw-r--r--drivers/cpufreq/imx6q-cpufreq.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/cpufreq/imx6q-cpufreq.c b/drivers/cpufreq/imx6q-cpufreq.c
index 8b3c2a79ad6c..b2ff423ad7f8 100644
--- a/drivers/cpufreq/imx6q-cpufreq.c
+++ b/drivers/cpufreq/imx6q-cpufreq.c
@@ -9,6 +9,7 @@
9#include <linux/clk.h> 9#include <linux/clk.h>
10#include <linux/cpu.h> 10#include <linux/cpu.h>
11#include <linux/cpufreq.h> 11#include <linux/cpufreq.h>
12#include <linux/cpu_cooling.h>
12#include <linux/err.h> 13#include <linux/err.h>
13#include <linux/module.h> 14#include <linux/module.h>
14#include <linux/of.h> 15#include <linux/of.h>
@@ -50,6 +51,7 @@ static struct clk_bulk_data clks[] = {
50}; 51};
51 52
52static struct device *cpu_dev; 53static struct device *cpu_dev;
54static struct thermal_cooling_device *cdev;
53static bool free_opp; 55static bool free_opp;
54static struct cpufreq_frequency_table *freq_table; 56static struct cpufreq_frequency_table *freq_table;
55static unsigned int max_freq; 57static unsigned int max_freq;
@@ -191,6 +193,16 @@ static int imx6q_set_target(struct cpufreq_policy *policy, unsigned int index)
191 return 0; 193 return 0;
192} 194}
193 195
196static void imx6q_cpufreq_ready(struct cpufreq_policy *policy)
197{
198 cdev = of_cpufreq_cooling_register(policy);
199
200 if (!cdev)
201 dev_err(cpu_dev,
202 "running cpufreq without cooling device: %ld\n",
203 PTR_ERR(cdev));
204}
205
194static int imx6q_cpufreq_init(struct cpufreq_policy *policy) 206static int imx6q_cpufreq_init(struct cpufreq_policy *policy)
195{ 207{
196 int ret; 208 int ret;
@@ -202,13 +214,22 @@ static int imx6q_cpufreq_init(struct cpufreq_policy *policy)
202 return ret; 214 return ret;
203} 215}
204 216
217static int imx6q_cpufreq_exit(struct cpufreq_policy *policy)
218{
219 cpufreq_cooling_unregister(cdev);
220
221 return 0;
222}
223
205static struct cpufreq_driver imx6q_cpufreq_driver = { 224static struct cpufreq_driver imx6q_cpufreq_driver = {
206 .flags = CPUFREQ_NEED_INITIAL_FREQ_CHECK, 225 .flags = CPUFREQ_NEED_INITIAL_FREQ_CHECK,
207 .verify = cpufreq_generic_frequency_table_verify, 226 .verify = cpufreq_generic_frequency_table_verify,
208 .target_index = imx6q_set_target, 227 .target_index = imx6q_set_target,
209 .get = cpufreq_generic_get, 228 .get = cpufreq_generic_get,
210 .init = imx6q_cpufreq_init, 229 .init = imx6q_cpufreq_init,
230 .exit = imx6q_cpufreq_exit,
211 .name = "imx6q-cpufreq", 231 .name = "imx6q-cpufreq",
232 .ready = imx6q_cpufreq_ready,
212 .attr = cpufreq_generic_attr, 233 .attr = cpufreq_generic_attr,
213 .suspend = cpufreq_generic_suspend, 234 .suspend = cpufreq_generic_suspend,
214}; 235};