[PATCH v1 1/2] thermal: trip: Split thermal_zone_device_set_mode()

From: Rafael J. Wysocki
Date: Thu Jul 18 2024 - 15:02:13 EST


From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>

Pull a wrapper around thermal zone .change_mode() callback out of
thermal_zone_device_set_mode() because it will be used elsewhere
subsequently.

No intentional functional impact.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
---
drivers/thermal/thermal_core.c | 31 ++++++++++++++++++++++++-------
1 file changed, 24 insertions(+), 7 deletions(-)

Index: linux-pm/drivers/thermal/thermal_core.c
===================================================================
--- linux-pm.orig/drivers/thermal/thermal_core.c
+++ linux-pm/drivers/thermal/thermal_core.c
@@ -272,6 +272,22 @@ static int __init thermal_register_gover
return ret;
}

+static int __thermal_zone_device_set_mode(struct thermal_zone_device *tz,
+ enum thermal_device_mode mode)
+{
+ if (tz->ops.change_mode) {
+ int ret;
+
+ ret = tz->ops.change_mode(tz, mode);
+ if (ret)
+ return ret;
+ }
+
+ tz->mode = mode;
+
+ return 0;
+}
+
/*
* Zone update section: main control loop applied to each zone while monitoring
* in polling mode. The monitoring is done using a workqueue.
@@ -540,7 +556,7 @@ monitor:
static int thermal_zone_device_set_mode(struct thermal_zone_device *tz,
enum thermal_device_mode mode)
{
- int ret = 0;
+ int ret;

mutex_lock(&tz->lock);

@@ -548,14 +564,15 @@ static int thermal_zone_device_set_mode(
if (mode == tz->mode) {
mutex_unlock(&tz->lock);

- return ret;
+ return 0;
}

- if (tz->ops.change_mode)
- ret = tz->ops.change_mode(tz, mode);
+ ret = __thermal_zone_device_set_mode(tz, mode);
+ if (ret) {
+ mutex_unlock(&tz->lock);

- if (!ret)
- tz->mode = mode;
+ return ret;
+ }

__thermal_zone_device_update(tz, THERMAL_EVENT_UNSPECIFIED);

@@ -566,7 +583,7 @@ static int thermal_zone_device_set_mode(
else
thermal_notify_tz_disable(tz);

- return ret;
+ return 0;
}

int thermal_zone_device_enable(struct thermal_zone_device *tz)