|
@@ -417,18 +417,21 @@ static struct notifier_block thermal_cpufreq_notifier_block = {
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
- * cpufreq_cooling_register - function to create cpufreq cooling device.
|
|
|
+ * __cpufreq_cooling_register - helper function to create cpufreq cooling device
|
|
|
+ * @np: a valid struct device_node to the cooling device device tree node
|
|
|
* @clip_cpus: cpumask of cpus where the frequency constraints will happen.
|
|
|
*
|
|
|
* This interface function registers the cpufreq cooling device with the name
|
|
|
* "thermal-cpufreq-%x". This api can support multiple instances of cpufreq
|
|
|
- * cooling devices.
|
|
|
+ * cooling devices. It also gives the opportunity to link the cooling device
|
|
|
+ * with a device tree node, in order to bind it via the thermal DT code.
|
|
|
*
|
|
|
* Return: a valid struct thermal_cooling_device pointer on success,
|
|
|
* on failure, it returns a corresponding ERR_PTR().
|
|
|
*/
|
|
|
-struct thermal_cooling_device *
|
|
|
-cpufreq_cooling_register(const struct cpumask *clip_cpus)
|
|
|
+static struct thermal_cooling_device *
|
|
|
+__cpufreq_cooling_register(struct device_node *np,
|
|
|
+ const struct cpumask *clip_cpus)
|
|
|
{
|
|
|
struct thermal_cooling_device *cool_dev;
|
|
|
struct cpufreq_cooling_device *cpufreq_dev = NULL;
|
|
@@ -467,8 +470,8 @@ cpufreq_cooling_register(const struct cpumask *clip_cpus)
|
|
|
snprintf(dev_name, sizeof(dev_name), "thermal-cpufreq-%d",
|
|
|
cpufreq_dev->id);
|
|
|
|
|
|
- cool_dev = thermal_cooling_device_register(dev_name, cpufreq_dev,
|
|
|
- &cpufreq_cooling_ops);
|
|
|
+ cool_dev = thermal_of_cooling_device_register(np, dev_name, cpufreq_dev,
|
|
|
+ &cpufreq_cooling_ops);
|
|
|
if (IS_ERR(cool_dev)) {
|
|
|
release_idr(&cpufreq_idr, cpufreq_dev->id);
|
|
|
kfree(cpufreq_dev);
|
|
@@ -488,8 +491,49 @@ cpufreq_cooling_register(const struct cpumask *clip_cpus)
|
|
|
|
|
|
return cool_dev;
|
|
|
}
|
|
|
+
|
|
|
+/**
|
|
|
+ * cpufreq_cooling_register - function to create cpufreq cooling device.
|
|
|
+ * @clip_cpus: cpumask of cpus where the frequency constraints will happen.
|
|
|
+ *
|
|
|
+ * This interface function registers the cpufreq cooling device with the name
|
|
|
+ * "thermal-cpufreq-%x". This api can support multiple instances of cpufreq
|
|
|
+ * cooling devices.
|
|
|
+ *
|
|
|
+ * Return: a valid struct thermal_cooling_device pointer on success,
|
|
|
+ * on failure, it returns a corresponding ERR_PTR().
|
|
|
+ */
|
|
|
+struct thermal_cooling_device *
|
|
|
+cpufreq_cooling_register(const struct cpumask *clip_cpus)
|
|
|
+{
|
|
|
+ return __cpufreq_cooling_register(NULL, clip_cpus);
|
|
|
+}
|
|
|
EXPORT_SYMBOL_GPL(cpufreq_cooling_register);
|
|
|
|
|
|
+/**
|
|
|
+ * of_cpufreq_cooling_register - function to create cpufreq cooling device.
|
|
|
+ * @np: a valid struct device_node to the cooling device device tree node
|
|
|
+ * @clip_cpus: cpumask of cpus where the frequency constraints will happen.
|
|
|
+ *
|
|
|
+ * This interface function registers the cpufreq cooling device with the name
|
|
|
+ * "thermal-cpufreq-%x". This api can support multiple instances of cpufreq
|
|
|
+ * cooling devices. Using this API, the cpufreq cooling device will be
|
|
|
+ * linked to the device tree node provided.
|
|
|
+ *
|
|
|
+ * Return: a valid struct thermal_cooling_device pointer on success,
|
|
|
+ * on failure, it returns a corresponding ERR_PTR().
|
|
|
+ */
|
|
|
+struct thermal_cooling_device *
|
|
|
+of_cpufreq_cooling_register(struct device_node *np,
|
|
|
+ const struct cpumask *clip_cpus)
|
|
|
+{
|
|
|
+ if (!np)
|
|
|
+ return ERR_PTR(-EINVAL);
|
|
|
+
|
|
|
+ return __cpufreq_cooling_register(np, clip_cpus);
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(of_cpufreq_cooling_register);
|
|
|
+
|
|
|
/**
|
|
|
* cpufreq_cooling_unregister - function to remove cpufreq cooling device.
|
|
|
* @cdev: thermal cooling device pointer.
|