@@ -72,7 +72,7 @@ static unsigned long get_target_state(struct thermal_instance *instance,
}
break;
case THERMAL_TREND_RAISE_FULL:
- if (throttle)
+ if (instance->upper != THERMAL_CSTATE_MAX && throttle)
next_target = instance->upper;
break;
case THERMAL_TREND_DROPPING:
@@ -923,7 +923,6 @@ int thermal_zone_bind_cooling_device(struct thermal_zone_device *tz,
struct thermal_instance *pos;
struct thermal_zone_device *pos1;
struct thermal_cooling_device *pos2;
- unsigned long max_state;
int result;
if (trip >= tz->trips || (trip < 0 && trip != THERMAL_TRIPS_NONE))
@@ -941,13 +940,11 @@ int thermal_zone_bind_cooling_device(struct thermal_zone_device *tz,
if (tz != pos1 || cdev != pos2)
return -EINVAL;
- cdev->ops->get_max_state(cdev, &max_state);
-
- /* lower default 0, upper default max_state */
+ /* lower default 0, upper default THERMAL_CSTATE_MAX */
lower = lower == THERMAL_NO_LIMIT ? 0 : lower;
- upper = upper == THERMAL_NO_LIMIT ? max_state : upper;
+ upper = upper == THERMAL_NO_LIMIT ? THERMAL_CSTATE_MAX : upper;
- if (lower > upper || upper > max_state)
+ if (lower > upper)
return -EINVAL;
dev =
@@ -36,6 +36,7 @@
/* invalid cooling state */
#define THERMAL_CSTATE_INVALID -1UL
+#define THERMAL_CSTATE_MAX 1UL
/* No upper/lower limit requirement */
#define THERMAL_NO_LIMIT THERMAL_CSTATE_INVALID
This is required as with the addition of the cooling notifiers mechanism the client can enable some more cooling states at a later point of time and hence max cooling state is dynamic entity now. Say when minimum p state is reached then ACPI specific throttling is enabled which may add some more cooling states. Signed-off-by: Amit Daniel Kachhap <amit.daniel@samsung.com> --- drivers/thermal/step_wise.c | 2 +- drivers/thermal/thermal_core.c | 9 +++------ include/linux/thermal.h | 1 + 3 files changed, 5 insertions(+), 7 deletions(-)