|
@@ -63,6 +63,19 @@ static unsigned long get_target_state(struct thermal_instance *instance,
|
|
|
next_target = instance->target;
|
|
|
dev_dbg(&cdev->device, "cur_state=%ld\n", cur_state);
|
|
|
|
|
|
+ if (!instance->initialized) {
|
|
|
+ if (throttle) {
|
|
|
+ next_target = (cur_state + 1) >= instance->upper ?
|
|
|
+ instance->upper :
|
|
|
+ ((cur_state + 1) < instance->lower ?
|
|
|
+ instance->lower : (cur_state + 1));
|
|
|
+ } else {
|
|
|
+ next_target = THERMAL_NO_TARGET;
|
|
|
+ }
|
|
|
+
|
|
|
+ return next_target;
|
|
|
+ }
|
|
|
+
|
|
|
switch (trend) {
|
|
|
case THERMAL_TREND_RAISING:
|
|
|
if (throttle) {
|
|
@@ -149,7 +162,7 @@ static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip)
|
|
|
dev_dbg(&instance->cdev->device, "old_target=%d, target=%d\n",
|
|
|
old_target, (int)instance->target);
|
|
|
|
|
|
- if (old_target == instance->target)
|
|
|
+ if (instance->initialized && old_target == instance->target)
|
|
|
continue;
|
|
|
|
|
|
/* Activate a passive thermal instance */
|
|
@@ -161,7 +174,7 @@ static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip)
|
|
|
instance->target == THERMAL_NO_TARGET)
|
|
|
update_passive_instance(tz, trip_type, -1);
|
|
|
|
|
|
-
|
|
|
+ instance->initialized = true;
|
|
|
instance->cdev->updated = false; /* cdev needs update */
|
|
|
}
|
|
|
|