[PATCH 3/3] Thermal:core: Handle trips focused on current trip pointonly.

From: Jonghwa Lee
Date: Sat May 18 2013 - 05:51:21 EST


When thermal zone device is updated, it doesn't need to check
every trip points and its handling mathod even current temperature
doesn't exceed the trip's temperature. To modify those dissipatve
mechanism, this patch introduces the way to get current thermal
trip point to call only correspond trip point handling.

Signed-off-by: Jonghwa Lee <jonghwa3.lee@xxxxxxxxxxx>
Signed-off-by: MyungJoo Ham <myungjoo.ham@xxxxxxxxxxx>
---
drivers/thermal/thermal_core.c | 28 +++++++++++++++++-----------
1 file changed, 17 insertions(+), 11 deletions(-)

diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
index ce4384a..1cc4825 100644
--- a/drivers/thermal/thermal_core.c
+++ b/drivers/thermal/thermal_core.c
@@ -333,14 +333,6 @@ static void handle_non_critical_trips(struct thermal_zone_device *tz,
static void handle_critical_trips(struct thermal_zone_device *tz,
int trip, enum thermal_trip_type trip_type)
{
- long trip_temp;
-
- tz->ops->get_trip_temp(tz, trip, &trip_temp);
-
- /* If we have not crossed the trip_temp, we do not care. */
- if (tz->temperature < trip_temp)
- return;
-
if (tz->ops->notify)
tz->ops->notify(tz, trip, trip_type);

@@ -437,14 +429,28 @@ static void update_temperature(struct thermal_zone_device *tz)
mutex_unlock(&tz->lock);
}

+static int thermal_zone_get_current_trip(struct thermal_zone_device *tz)
+{
+ int trip;
+ long trip_temp;
+
+ for (trip = tz->trips - 1; trip > 0; trip--) {
+ tz->ops->get_trip_temp(tz, trip, &trip_temp);
+ if (tz->temperature > trip_temp)
+ continue;
+ }
+ return trip;
+}
+
void thermal_zone_device_update(struct thermal_zone_device *tz)
{
- int count;
+ int trip;

update_temperature(tz);

- for (count = 0; count < tz->trips; count++)
- handle_thermal_trip(tz, count);
+ trip = thermal_zone_get_current_trip(tz);
+
+ handle_thermal_trip(tz, trip);
}
EXPORT_SYMBOL_GPL(thermal_zone_device_update);

--
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/