75 lines
2.0 KiB
Diff
75 lines
2.0 KiB
Diff
From ce2519862a938a5728936203fbda1fc85f847be6 Mon Sep 17 00:00:00 2001
|
|
From: Sean Cross <xobs@kosagi.com>
|
|
Date: Thu, 31 Dec 2015 15:14:37 +0800
|
|
Subject: [PATCH 14/65] cpufreq: imx: register cpufreq cooling device
|
|
|
|
When the cpufreq device comes ready, attempt to register a cpufreq
|
|
cooling device.
|
|
|
|
Signed-off-by: Sean Cross <xobs@kosagi.com>
|
|
---
|
|
drivers/cpufreq/imx6q-cpufreq.c | 26 ++++++++++++++++++++++++++
|
|
1 file changed, 26 insertions(+)
|
|
|
|
diff --git a/drivers/cpufreq/imx6q-cpufreq.c b/drivers/cpufreq/imx6q-cpufreq.c
|
|
index ef1fa81..305fb9b 100644
|
|
--- a/drivers/cpufreq/imx6q-cpufreq.c
|
|
+++ b/drivers/cpufreq/imx6q-cpufreq.c
|
|
@@ -9,6 +9,7 @@
|
|
#include <linux/clk.h>
|
|
#include <linux/cpu.h>
|
|
#include <linux/cpufreq.h>
|
|
+#include <linux/cpu_cooling.h>
|
|
#include <linux/err.h>
|
|
#include <linux/module.h>
|
|
#include <linux/of.h>
|
|
@@ -35,6 +36,7 @@ static struct clk *pll2_bus_clk;
|
|
static struct clk *secondary_sel_clk;
|
|
|
|
static struct device *cpu_dev;
|
|
+static struct thermal_cooling_device *cdev;
|
|
static bool free_opp;
|
|
static struct cpufreq_frequency_table *freq_table;
|
|
static unsigned int transition_latency;
|
|
@@ -160,6 +162,29 @@ static int imx6q_set_target(struct cpufreq_policy *policy, unsigned int index)
|
|
return 0;
|
|
}
|
|
|
|
+static void imx6q_cpufreq_ready(struct cpufreq_policy *policy)
|
|
+{
|
|
+ struct device_node *np = of_node_get(cpu_dev->of_node);
|
|
+
|
|
+ if (WARN_ON(!np))
|
|
+ return;
|
|
+
|
|
+ if (of_find_property(np, "#cooling-cells", NULL)) {
|
|
+ cdev = of_cpufreq_cooling_register(np,
|
|
+ policy->related_cpus);
|
|
+
|
|
+ if (IS_ERR(cdev)) {
|
|
+ dev_err(cpu_dev,
|
|
+ "running cpufreq without cooling device: %ld\n",
|
|
+ PTR_ERR(cdev));
|
|
+
|
|
+ cdev = NULL;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ of_node_put(np);
|
|
+}
|
|
+
|
|
static int imx6q_cpufreq_init(struct cpufreq_policy *policy)
|
|
{
|
|
policy->clk = arm_clk;
|
|
@@ -172,6 +197,7 @@ static struct cpufreq_driver imx6q_cpufreq_driver = {
|
|
.target_index = imx6q_set_target,
|
|
.get = cpufreq_generic_get,
|
|
.init = imx6q_cpufreq_init,
|
|
+ .ready = imx6q_cpufreq_ready,
|
|
.name = "imx6q-cpufreq",
|
|
.attr = cpufreq_generic_attr,
|
|
};
|
|
--
|
|
2.7.3
|
|
|