summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/thermal/thermal_core.c11
-rw-r--r--drivers/thermal/thermal_core.h11
2 files changed, 12 insertions, 10 deletions
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index f54c2d2544a4..225fa8ec6bee 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -547,7 +547,7 @@ void __thermal_zone_device_update(struct thermal_zone_device *tz,
int low = -INT_MAX, high = INT_MAX;
int temp, ret;
- if (tz->suspended || tz->mode != THERMAL_DEVICE_ENABLED)
+ if (tz->state != TZ_STATE_READY || tz->mode != THERMAL_DEVICE_ENABLED)
return;
ret = __thermal_zone_get_temp(tz, &temp);
@@ -1671,7 +1671,7 @@ static void thermal_zone_device_resume(struct work_struct *work)
mutex_lock(&tz->lock);
- tz->suspended = false;
+ tz->state &= ~(TZ_STATE_FLAG_SUSPENDED | TZ_STATE_FLAG_RESUMING);
thermal_debug_tz_resume(tz);
thermal_zone_device_init(tz);
@@ -1679,7 +1679,6 @@ static void thermal_zone_device_resume(struct work_struct *work)
__thermal_zone_device_update(tz, THERMAL_TZ_RESUME);
complete(&tz->resume);
- tz->resuming = false;
mutex_unlock(&tz->lock);
}
@@ -1688,7 +1687,7 @@ static void thermal_zone_pm_prepare(struct thermal_zone_device *tz)
{
mutex_lock(&tz->lock);
- if (tz->resuming) {
+ if (tz->state & TZ_STATE_FLAG_RESUMING) {
/*
* thermal_zone_device_resume() queued up for this zone has not
* acquired the lock yet, so release it to let the function run
@@ -1701,7 +1700,7 @@ static void thermal_zone_pm_prepare(struct thermal_zone_device *tz)
mutex_lock(&tz->lock);
}
- tz->suspended = true;
+ tz->state |= TZ_STATE_FLAG_SUSPENDED;
mutex_unlock(&tz->lock);
}
@@ -1713,7 +1712,7 @@ static void thermal_zone_pm_complete(struct thermal_zone_device *tz)
cancel_delayed_work(&tz->poll_queue);
reinit_completion(&tz->resume);
- tz->resuming = true;
+ tz->state |= TZ_STATE_FLAG_RESUMING;
/*
* Replace the work function with the resume one, which will restore the
diff --git a/drivers/thermal/thermal_core.h b/drivers/thermal/thermal_core.h
index 1ea91d59498b..fd4478e15d02 100644
--- a/drivers/thermal/thermal_core.h
+++ b/drivers/thermal/thermal_core.h
@@ -62,6 +62,11 @@ struct thermal_governor {
struct list_head governor_list;
};
+#define TZ_STATE_FLAG_SUSPENDED BIT(0)
+#define TZ_STATE_FLAG_RESUMING BIT(1)
+
+#define TZ_STATE_READY 0
+
/**
* struct thermal_zone_device - structure for a thermal zone
* @id: unique id number for each thermal zone
@@ -101,8 +106,7 @@ struct thermal_governor {
* @node: node in thermal_tz_list (in thermal_core.c)
* @poll_queue: delayed work for polling
* @notify_event: Last notification event
- * @suspended: thermal zone suspend indicator
- * @resuming: indicates whether or not thermal zone resume is in progress
+ * @state: current state of the thermal zone
* @trips: array of struct thermal_trip objects
*/
struct thermal_zone_device {
@@ -135,8 +139,7 @@ struct thermal_zone_device {
struct list_head node;
struct delayed_work poll_queue;
enum thermal_notify_event notify_event;
- bool suspended;
- bool resuming;
+ u8 state;
#ifdef CONFIG_THERMAL_DEBUGFS
struct thermal_debugfs *debugfs;
#endif