]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
thermal/of: Add cooling device ID support
authorDaniel Lezcano <daniel.lezcano@oss.qualcomm.com>
Tue, 26 May 2026 14:08:08 +0000 (16:08 +0200)
committerDaniel Lezcano <daniel.lezcano@kernel.org>
Wed, 3 Jun 2026 07:12:55 +0000 (09:12 +0200)
Introduce an identifier (cdev_id) for cooling devices registered from
device tree.

This prepares support for a new DT binding where cooling devices are
identified by a tuple (device node, ID), instead of relying on child
nodes.

Existing users are updated to pass a default ID of 0, preserving the
current behavior.

Future changes will extend the cooling map parsing to match cooling
devices based on both the device node and the ID.

No functional change intended.

Signed-off-by: Daniel Lezcano <daniel.lezcano@oss.qualcomm.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@kernel.org>
Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
Acked-by: Rafael J. Wysocki (Intel) <rafael@kernel.org>
Link: https://patch.msgid.link/20260526140802.1059293-19-daniel.lezcano@oss.qualcomm.com
drivers/gpu/drm/etnaviv/etnaviv_gpu.c
drivers/thermal/cpufreq_cooling.c
drivers/thermal/cpuidle_cooling.c
drivers/thermal/devfreq_cooling.c
drivers/thermal/thermal_of.c
include/linux/thermal.h

index a891d4f1f8430c83a0fe4a26529b5b39ced88902..552631c3554a85795cb6446b0cbcdd714c468169 100644 (file)
@@ -1791,8 +1791,9 @@ static int etnaviv_gpu_bind(struct device *dev, struct device *master,
        int ret;
 
        if (IS_ENABLED(CONFIG_DRM_ETNAVIV_THERMAL)) {
-               gpu->cooling = thermal_of_cooling_device_register(dev->of_node,
-                               (char *)dev_name(dev), gpu, &cooling_ops);
+               gpu->cooling = thermal_of_cooling_device_register(dev->of_node, 0,
+                                                                 dev_name(dev),
+                                                                 gpu, &cooling_ops);
                if (IS_ERR(gpu->cooling))
                        return PTR_ERR(gpu->cooling);
        }
index 32bf5ab44f4a21960df0fe5db22bd51de05a909c..768859a7aed05973d3c73a491afc26ac91946f70 100644 (file)
@@ -592,7 +592,7 @@ __cpufreq_cooling_register(struct device_node *np,
        if (!name)
                goto remove_qos_req;
 
-       cdev = thermal_of_cooling_device_register(np, name, cpufreq_cdev,
+       cdev = thermal_of_cooling_device_register(np, 0, name, cpufreq_cdev,
                                                  cooling_ops);
        kfree(name);
 
index 425f596614e8e4fda2b284922334d5e2f4f4c950..bbd2e91cf5abcff25652b1c2fd675dcf1c4b0370 100644 (file)
@@ -207,7 +207,7 @@ static int __cpuidle_cooling_register(struct device_node *np,
                goto out_unregister;
        }
 
-       cdev = thermal_of_cooling_device_register(np, name, idle_cdev,
+       cdev = thermal_of_cooling_device_register(np, 0, name, idle_cdev,
                                                  &cpuidle_cooling_ops);
        if (IS_ERR(cdev)) {
                ret = PTR_ERR(cdev);
index 1c7dffc8d45f747baf0e402bd3d392567e725e63..0330a811283233fc3d0cba9611a17c17230e47b7 100644 (file)
@@ -454,7 +454,7 @@ of_devfreq_cooling_register_power(struct device_node *np, struct devfreq *df,
        if (!name)
                goto remove_qos_req;
 
-       cdev = thermal_of_cooling_device_register(np, name, dfc, ops);
+       cdev = thermal_of_cooling_device_register(np, 0, name, dfc, ops);
        kfree(name);
 
        if (IS_ERR(cdev)) {
index b59d2588ff7ac54d9b3f9705490eb0a39f957290..0110b195f7a36d44088644a67c421dcdbd4f81a5 100644 (file)
@@ -514,6 +514,7 @@ EXPORT_SYMBOL_GPL(devm_thermal_of_zone_unregister);
 /**
  * thermal_of_cooling_device_register() - register an OF thermal cooling device
  * @np:                a pointer to a device tree node.
+ * @cdev_id:   a cooling device id in the cooling controller
  * @type:      the thermal cooling device type.
  * @devdata:   device private data.
  * @ops:       standard thermal cooling devices callbacks.
@@ -528,9 +529,9 @@ EXPORT_SYMBOL_GPL(devm_thermal_of_zone_unregister);
  * ERR_PTR. Caller must check return value with IS_ERR*() helpers.
  */
 struct thermal_cooling_device *
-thermal_of_cooling_device_register(struct device_node *np,
-                                    const char *type, void *devdata,
-                                    const struct thermal_cooling_device_ops *ops)
+thermal_of_cooling_device_register(struct device_node *np, u32 cdev_id,
+                                  const char *type, void *devdata,
+                                  const struct thermal_cooling_device_ops *ops)
 {
        struct thermal_cooling_device *cdev;
        int ret;
@@ -540,6 +541,7 @@ thermal_of_cooling_device_register(struct device_node *np,
                return cdev;
 
        cdev->np = np;
+       cdev->cdev_id = cdev_id;
 
        ret = thermal_cooling_device_add(cdev, devdata);
        if (ret)
@@ -585,9 +587,9 @@ devm_thermal_of_child_cooling_device_register(struct device *dev,
         struct thermal_cooling_device *cdev;
         int ret;
 
-        cdev = thermal_of_cooling_device_register(np, type, devdata, ops);
-        if (IS_ERR(cdev))
-                return cdev;
+       cdev = thermal_of_cooling_device_register(np, 0, type, devdata, ops);
+       if (IS_ERR(cdev))
+               return cdev;
 
         ret = devm_add_action_or_reset(dev, thermal_of_cooling_device_release, cdev);
         if (ret)
index e6328234a42b691e9ff4db21fa661664df0c8e44..fb7649439dfa243b28c30cc9d8e0845c1417059b 100644 (file)
@@ -134,6 +134,7 @@ struct thermal_cooling_device {
        struct list_head node;
 #ifdef CONFIG_THERMAL_OF
        struct device_node *np;
+       u32 cdev_id;
 #endif
 #ifdef CONFIG_THERMAL_DEBUGFS
        struct thermal_debugfs *debugfs;
@@ -201,7 +202,8 @@ struct thermal_zone_device *devm_thermal_of_zone_register(struct device *dev, in
 void devm_thermal_of_zone_unregister(struct device *dev, struct thermal_zone_device *tz);
 
 struct thermal_cooling_device *
-thermal_of_cooling_device_register(struct device_node *np, const char *type, void *devdata,
+thermal_of_cooling_device_register(struct device_node *np, u32 cdev_id,
+                                  const char *type, void *data,
                                   const struct thermal_cooling_device_ops *ops);
 
 struct thermal_cooling_device *
@@ -224,7 +226,7 @@ static inline void devm_thermal_of_zone_unregister(struct device *dev,
 }
 
 static inline struct thermal_cooling_device *
-thermal_of_cooling_device_register(struct device_node *np,
+thermal_of_cooling_device_register(struct device_node *np, u32 cdev_id,
                                   const char *type, void *devdata,
                                   const struct thermal_cooling_device_ops *ops)
 {