summaryrefslogtreecommitdiffstats
path: root/include/linux/thermal.h
diff options
context:
space:
mode:
authorJavi Merino2015-02-26 20:00:27 +0100
committerEduardo Valentin2015-05-05 06:27:52 +0200
commite33df1d2f3a0141cd79e770f31999ba0dd7ebfa8 (patch)
tree8a0602ce3137212c292dec7603c66120665255c8 /include/linux/thermal.h
parentthermal: Add QPNP PMIC temperature alarm driver (diff)
downloadkernel-qcow2-linux-e33df1d2f3a0141cd79e770f31999ba0dd7ebfa8.tar.gz
kernel-qcow2-linux-e33df1d2f3a0141cd79e770f31999ba0dd7ebfa8.tar.xz
kernel-qcow2-linux-e33df1d2f3a0141cd79e770f31999ba0dd7ebfa8.zip
thermal: let governors have private data for each thermal zone
A governor may need to store its current state between calls to throttle(). That state depends on the thermal zone, so store it as private data in struct thermal_zone_device. The governors may have two new ops: bind_to_tz() and unbind_from_tz(). When provided, these functions let governors do some initialization and teardown when they are bound/unbound to a tz and possibly store that information in the governor_data field of the struct thermal_zone_device. Cc: Zhang Rui <rui.zhang@intel.com> Cc: Eduardo Valentin <edubezval@gmail.com> Signed-off-by: Javi Merino <javi.merino@arm.com> Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
Diffstat (limited to 'include/linux/thermal.h')
-rw-r--r--include/linux/thermal.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/include/linux/thermal.h b/include/linux/thermal.h
index bac0f52c7a1e..edf9d53c67e6 100644
--- a/include/linux/thermal.h
+++ b/include/linux/thermal.h
@@ -165,6 +165,7 @@ struct thermal_attr {
* @ops: operations this &thermal_zone_device supports
* @tzp: thermal zone parameters
* @governor: pointer to the governor for this thermal zone
+ * @governor_data: private pointer for governor data
* @thermal_instances: list of &struct thermal_instance of this thermal zone
* @idr: &struct idr to generate unique id for this zone's cooling
* devices
@@ -191,6 +192,7 @@ struct thermal_zone_device {
struct thermal_zone_device_ops *ops;
const struct thermal_zone_params *tzp;
struct thermal_governor *governor;
+ void *governor_data;
struct list_head thermal_instances;
struct idr idr;
struct mutex lock;
@@ -201,12 +203,19 @@ struct thermal_zone_device {
/**
* struct thermal_governor - structure that holds thermal governor information
* @name: name of the governor
+ * @bind_to_tz: callback called when binding to a thermal zone. If it
+ * returns 0, the governor is bound to the thermal zone,
+ * otherwise it fails.
+ * @unbind_from_tz: callback called when a governor is unbound from a
+ * thermal zone.
* @throttle: callback called for every trip point even if temperature is
* below the trip point temperature
* @governor_list: node in thermal_governor_list (in thermal_core.c)
*/
struct thermal_governor {
char name[THERMAL_NAME_LENGTH];
+ int (*bind_to_tz)(struct thermal_zone_device *tz);
+ void (*unbind_from_tz)(struct thermal_zone_device *tz);
int (*throttle)(struct thermal_zone_device *tz, int trip);
struct list_head governor_list;
};