summaryrefslogtreecommitdiff
path: root/drivers/thermal/thermal_thresholds.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/thermal/thermal_thresholds.c')
-rw-r--r--drivers/thermal/thermal_thresholds.c34
1 files changed, 20 insertions, 14 deletions
diff --git a/drivers/thermal/thermal_thresholds.c b/drivers/thermal/thermal_thresholds.c
index f33b6d5474d8..9b063199a789 100644
--- a/drivers/thermal/thermal_thresholds.c
+++ b/drivers/thermal/thermal_thresholds.c
@@ -32,6 +32,8 @@ void thermal_thresholds_flush(struct thermal_zone_device *tz)
kfree(entry);
}
+ thermal_notify_threshold_flush(tz);
+
__thermal_zone_device_update(tz, THERMAL_TZ_FLUSH_THRESHOLDS);
}
@@ -122,7 +124,6 @@ void thermal_thresholds_handle(struct thermal_zone_device *tz, int *low, int *hi
int temperature = tz->temperature;
int last_temperature = tz->last_temperature;
- bool notify;
lockdep_assert_held(&tz->lock);
@@ -144,19 +145,19 @@ void thermal_thresholds_handle(struct thermal_zone_device *tz, int *low, int *hi
* - increased : thresholds are crossed the way up
* - decreased : thresholds are crossed the way down
*/
- if (temperature > last_temperature)
- notify = thermal_thresholds_handle_raising(thresholds, temperature,
- last_temperature, low, high);
- else
- notify = thermal_thresholds_handle_dropping(thresholds, temperature,
- last_temperature, low, high);
-
- if (notify)
- pr_debug("A threshold has been crossed the way %s, with a temperature=%d, last_temperature=%d\n",
- temperature > last_temperature ? "up" : "down", temperature, last_temperature);
+ if (temperature > last_temperature) {
+ if (thermal_thresholds_handle_raising(thresholds, temperature,
+ last_temperature, low, high))
+ thermal_notify_threshold_up(tz);
+ } else {
+ if (thermal_thresholds_handle_dropping(thresholds, temperature,
+ last_temperature, low, high))
+ thermal_notify_threshold_down(tz);
+ }
}
-int thermal_thresholds_add(struct thermal_zone_device *tz, int temperature, int direction)
+int thermal_thresholds_add(struct thermal_zone_device *tz,
+ int temperature, int direction)
{
struct list_head *thresholds = &tz->user_thresholds;
struct user_threshold *t;
@@ -182,12 +183,15 @@ int thermal_thresholds_add(struct thermal_zone_device *tz, int temperature, int
list_sort(NULL, thresholds, __thermal_thresholds_cmp);
}
+ thermal_notify_threshold_add(tz, temperature, direction);
+
__thermal_zone_device_update(tz, THERMAL_TZ_ADD_THRESHOLD);
return 0;
}
-int thermal_thresholds_delete(struct thermal_zone_device *tz, int temperature, int direction)
+int thermal_thresholds_delete(struct thermal_zone_device *tz,
+ int temperature, int direction)
{
struct list_head *thresholds = &tz->user_thresholds;
struct user_threshold *t;
@@ -205,6 +209,8 @@ int thermal_thresholds_delete(struct thermal_zone_device *tz, int temperature, i
t->direction &= ~direction;
}
+ thermal_notify_threshold_delete(tz, temperature, direction);
+
__thermal_zone_device_update(tz, THERMAL_TZ_DEL_THRESHOLD);
return 0;
@@ -217,7 +223,7 @@ int thermal_thresholds_for_each(struct thermal_zone_device *tz,
struct user_threshold *entry;
int ret;
- lockdep_assert_held(&tz->lock);
+ guard(thermal_zone)(tz);
list_for_each_entry(entry, thresholds, list_node) {
ret = cb(entry, arg);