]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
thermal/core: Add dedicated release callback for thermal zones
authorDaniel Lezcano <daniel.lezcano@oss.qualcomm.com>
Fri, 8 May 2026 18:05:09 +0000 (20:05 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 13 May 2026 19:03:15 +0000 (21:03 +0200)
The thermal class release callback currently handles thermal zone
cleanup by checking the device name prefix.

Move the thermal zone cleanup to a dedicated struct device release
callback.  This avoids relying on device names to select the release
path and keeps the thermal zone lifetime handling local to the thermal
zone object.

Signed-off-by: Daniel Lezcano <daniel.lezcano@oss.qualcomm.com>
Reviewed-by: Lukasz Luba <lukasz.luba@arm.com>
Link: https://patch.msgid.link/20260508180511.1306659-3-daniel.lezcano@oss.qualcomm.com
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/thermal/thermal_core.c

index 207b86f54c4d5f9ddcdc3d8b686899a657eb7069..abbd20c8ac17643ffda28cfead31c557124448e5 100644 (file)
@@ -889,24 +889,8 @@ unbind:
        kfree(pos);
 }
 
-static void thermal_release(struct device *dev)
-{
-       struct thermal_zone_device *tz;
-
-       if (!strncmp(dev_name(dev), "thermal_zone",
-                    sizeof("thermal_zone") - 1)) {
-               tz = to_thermal_zone(dev);
-               thermal_zone_destroy_device_groups(tz);
-               thermal_set_governor(tz, NULL);
-               ida_destroy(&tz->ida);
-               mutex_destroy(&tz->lock);
-               complete(&tz->removal);
-       }
-}
-
 static const struct class thermal_class = {
        .name = "thermal",
-       .dev_release = thermal_release,
 };
 static bool thermal_class_unavailable __ro_after_init = true;
 
@@ -1413,6 +1397,17 @@ static void thermal_zone_init_complete(struct thermal_zone_device *tz)
        __thermal_zone_device_update(tz, THERMAL_EVENT_UNSPECIFIED);
 }
 
+static void thermal_zone_device_release(struct device *dev)
+{
+       struct thermal_zone_device *tz = to_thermal_zone(dev);
+
+       thermal_zone_destroy_device_groups(tz);
+       thermal_set_governor(tz, NULL);
+       ida_destroy(&tz->ida);
+       mutex_destroy(&tz->lock);
+       complete(&tz->removal);
+}
+
 /**
  * thermal_zone_device_register_with_trips() - register a new thermal zone device
  * @type:      the thermal zone device type
@@ -1520,6 +1515,7 @@ thermal_zone_device_register_with_trips(const char *type,
                tz->ops.critical = thermal_zone_device_critical;
 
        tz->device.class = &thermal_class;
+       tz->device.release = thermal_zone_device_release;
        tz->devdata = devdata;
        tz->num_trips = num_trips;
        for_each_trip_desc(tz, td) {