]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
thermal: Add mode helpers
authorAndrzej Pietrasiewicz <andrzej.p@collabora.com>
Mon, 29 Jun 2020 12:29:20 +0000 (14:29 +0200)
committerDaniel Lezcano <daniel.lezcano@linaro.org>
Mon, 29 Jun 2020 18:26:36 +0000 (20:26 +0200)
Prepare for making the drivers not access tzd's private members.

Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@collabora.com>
Reviewed-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
[staticize thermal_zone_device_set_mode()]
Signed-off-by: kernel test robot <lkp@intel.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Link: https://lore.kernel.org/r/20200629122925.21729-7-andrzej.p@collabora.com
drivers/thermal/thermal_core.c
include/linux/thermal.h

index 14d3b1b94c4faccfc66779b6d32a7385ba4811c2..f02c57c986f0ea2b937e3dd30c300dd5c6de4fb3 100644 (file)
@@ -459,6 +459,59 @@ static void thermal_zone_device_reset(struct thermal_zone_device *tz)
        thermal_zone_device_init(tz);
 }
 
+static int thermal_zone_device_set_mode(struct thermal_zone_device *tz,
+                                       enum thermal_device_mode mode)
+{
+       int ret = 0;
+
+       mutex_lock(&tz->lock);
+
+       /* do nothing if mode isn't changing */
+       if (mode == tz->mode) {
+               mutex_unlock(&tz->lock);
+
+               return ret;
+       }
+
+       if (tz->ops->set_mode)
+               ret = tz->ops->set_mode(tz, mode);
+
+       if (!ret)
+               tz->mode = mode;
+
+       mutex_unlock(&tz->lock);
+
+       thermal_zone_device_update(tz, THERMAL_EVENT_UNSPECIFIED);
+
+       return ret;
+}
+
+int thermal_zone_device_enable(struct thermal_zone_device *tz)
+{
+       return thermal_zone_device_set_mode(tz, THERMAL_DEVICE_ENABLED);
+}
+EXPORT_SYMBOL_GPL(thermal_zone_device_enable);
+
+int thermal_zone_device_disable(struct thermal_zone_device *tz)
+{
+       return thermal_zone_device_set_mode(tz, THERMAL_DEVICE_DISABLED);
+}
+EXPORT_SYMBOL_GPL(thermal_zone_device_disable);
+
+int thermal_zone_device_is_enabled(struct thermal_zone_device *tz)
+{
+       enum thermal_device_mode mode;
+
+       mutex_lock(&tz->lock);
+
+       mode = tz->mode;
+
+       mutex_unlock(&tz->lock);
+
+       return mode == THERMAL_DEVICE_ENABLED;
+}
+EXPORT_SYMBOL_GPL(thermal_zone_device_is_enabled);
+
 void thermal_zone_device_update(struct thermal_zone_device *tz,
                                enum thermal_notify_event event)
 {
index a808f6fa277777722bcaf635b5af09b0d3ee3b65..df013c39ba9b606f4ec848a22944428ae8dc535a 100644 (file)
@@ -416,6 +416,9 @@ int thermal_zone_get_offset(struct thermal_zone_device *tz);
 
 void thermal_cdev_update(struct thermal_cooling_device *);
 void thermal_notify_framework(struct thermal_zone_device *, int);
+int thermal_zone_device_enable(struct thermal_zone_device *tz);
+int thermal_zone_device_disable(struct thermal_zone_device *tz);
+int thermal_zone_device_is_enabled(struct thermal_zone_device *tz);
 #else
 static inline struct thermal_zone_device *thermal_zone_device_register(
        const char *type, int trips, int mask, void *devdata,
@@ -463,6 +466,16 @@ static inline void thermal_cdev_update(struct thermal_cooling_device *cdev)
 static inline void thermal_notify_framework(struct thermal_zone_device *tz,
        int trip)
 { }
+
+static inline int thermal_zone_device_enable(struct thermal_zone_device *tz)
+{ return -ENODEV; }
+
+static inline int thermal_zone_device_disable(struct thermal_zone_device *tz)
+{ return -ENODEV; }
+
+static inline int
+thermal_zone_device_is_enabled(struct thermal_zone_device *tz)
+{ return -ENODEV; }
 #endif /* CONFIG_THERMAL */
 
 #endif /* __THERMAL_H__ */