diff options
author | Ram Chandrasekar <rkumbako@codeaurora.org> | 2014-01-29 14:02:40 -0700 |
---|---|---|
committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-22 11:08:22 -0700 |
commit | b48731b306e6d13f1555199f9f4c792ef7dd3062 (patch) | |
tree | 8989ea8c6d81584724b3c3885f9b702531f389e1 /drivers | |
parent | 939a7bbf7f47fbfe6819a2f9ad6b74947938b1d4 (diff) |
thermal-core: Fix to send correct trip type to get trip temperature
Fix the thermal sys code to pass the proper trip type
expected by tsens driver to get the tsens trip
temperature.
CRs-Fixed: 608753
Change-Id: I527af21bf13d8c5a93b92b34fa5f05c527a08bcd
Signed-off-by: Ram Chandrasekar <rkumbako@codeaurora.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/thermal/thermal_core.c | 53 |
1 files changed, 36 insertions, 17 deletions
diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c index 78e6f0bd1c8e..72e6a9a67d3e 100644 --- a/drivers/thermal/thermal_core.c +++ b/drivers/thermal/thermal_core.c @@ -4,7 +4,7 @@ * Copyright (C) 2008 Intel Corp * Copyright (C) 2008 Zhang Rui <rui.zhang@intel.com> * Copyright (C) 2008 Sujith Thomas <sujith.thomas@intel.com> - * Copyright (c) 2013, The Linux Foundation. All rights reserved. + * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * @@ -235,13 +235,43 @@ int sensor_get_id(char *name) } EXPORT_SYMBOL(sensor_get_id); +static void init_sensor_trip(struct sensor_info *sensor) +{ + int ret = 0, i = 0; + enum thermal_trip_type type; + + for (i = 0; ((sensor->max_idx == -1) || + (sensor->min_idx == -1)) && + (sensor->tz->ops->get_trip_type) && + (i < sensor->tz->trips); i++) { + + sensor->tz->ops->get_trip_type(sensor->tz, i, &type); + if (type == THERMAL_TRIP_CONFIGURABLE_HI) + sensor->max_idx = i; + if (type == THERMAL_TRIP_CONFIGURABLE_LOW) + sensor->min_idx = i; + type = 0; + } + + ret = sensor->tz->ops->get_trip_temp(sensor->tz, + sensor->min_idx, &sensor->threshold_min); + if (ret) + pr_err("Unable to get MIN trip temp. sensor:%d err:%d\n", + sensor->sensor_id, ret); + + ret = sensor->tz->ops->get_trip_temp(sensor->tz, + sensor->max_idx, &sensor->threshold_max); + if (ret) + pr_err("Unable to get MAX trip temp. sensor:%d err:%d\n", + sensor->sensor_id, ret); +} + static int __update_sensor_thresholds(struct sensor_info *sensor) { long max_of_low_thresh = LONG_MIN; long min_of_high_thresh = LONG_MAX; struct sensor_threshold *pos, *var; - enum thermal_trip_type type; - int i, ret = 0; + int ret = 0; if (!sensor->tz->ops->set_trip_temp || !sensor->tz->ops->activate_trip_type || @@ -251,19 +281,8 @@ static int __update_sensor_thresholds(struct sensor_info *sensor) goto update_done; } - for (i = 0; ((sensor->max_idx == -1) || (sensor->min_idx == -1)) && - (sensor->tz->ops->get_trip_type) && (i < sensor->tz->trips); - i++) { - sensor->tz->ops->get_trip_type(sensor->tz, i, &type); - if (type == THERMAL_TRIP_CONFIGURABLE_HI) - sensor->max_idx = i; - if (type == THERMAL_TRIP_CONFIGURABLE_LOW) - sensor->min_idx = i; - sensor->tz->ops->get_trip_temp(sensor->tz, - THERMAL_TRIP_CONFIGURABLE_LOW, &sensor->threshold_min); - sensor->tz->ops->get_trip_temp(sensor->tz, - THERMAL_TRIP_CONFIGURABLE_HI, &sensor->threshold_max); - } + if ((sensor->max_idx == -1) || (sensor->min_idx == -1)) + init_sensor_trip(sensor); list_for_each_entry_safe(pos, var, &sensor->threshold_list, list) { if (!pos->active) @@ -512,7 +531,7 @@ int sensor_init(struct thermal_zone_device *tz) sensor->sensor_id = tz->id; sensor->tz = tz; - sensor->threshold_min = 0; + sensor->threshold_min = LONG_MIN; sensor->threshold_max = LONG_MAX; sensor->max_idx = -1; sensor->min_idx = -1; |