===================================================================
@@ -93,6 +93,23 @@ static void thermal_zone_trip_update(str
if (instance->initialized && old_target == instance->target)
continue;
+ if (trip->type == THERMAL_TRIP_PASSIVE) {
+ /*
+ * If the target state for this thermal instance
+ * changes from THERMAL_NO_TARGET to something else,
+ * ensure that the zone temperature will be updated
+ * (assuming enabled passive cooling) until it becomes
+ * THERMAL_NO_TARGET again, or the cooling device may
+ * not be reset to its initial state.
+ */
+ if (old_target == THERMAL_NO_TARGET &&
+ instance->target != THERMAL_NO_TARGET)
+ tz->passive++;
+ else if (old_target != THERMAL_NO_TARGET &&
+ instance->target == THERMAL_NO_TARGET)
+ tz->passive--;
+ }
+
instance->initialized = true;
mutex_lock(&instance->cdev->lock);