Loading drivers/thermal/step_wise.c +25 −45 Original line number Diff line number Diff line Loading @@ -99,52 +99,14 @@ static void update_passive_instance(struct thermal_zone_device *tz, tz->passive += value; } static void update_instance_for_throttle(struct thermal_zone_device *tz, int trip, enum thermal_trip_type trip_type, enum thermal_trend trend) { struct thermal_instance *instance; list_for_each_entry(instance, &tz->thermal_instances, tz_node) { if (instance->trip != trip) continue; instance->target = get_target_state(instance, trend, true); /* Activate a passive thermal instance */ if (instance->target == THERMAL_NO_TARGET) update_passive_instance(tz, trip_type, 1); instance->cdev->updated = false; /* cdev needs update */ } } static void update_instance_for_dethrottle(struct thermal_zone_device *tz, int trip, enum thermal_trip_type trip_type, enum thermal_trend trend) { struct thermal_instance *instance; list_for_each_entry(instance, &tz->thermal_instances, tz_node) { if (instance->trip != trip || instance->target == THERMAL_NO_TARGET) continue; instance->target = get_target_state(instance, trend, false); /* Deactivate a passive thermal instance */ if (instance->target == THERMAL_NO_TARGET) update_passive_instance(tz, trip_type, -1); instance->cdev->updated = false; /* cdev needs update */ } } static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip) { long trip_temp; enum thermal_trip_type trip_type; enum thermal_trend trend; struct thermal_instance *instance; bool throttle = false; int old_target; if (trip == THERMAL_TRIPS_NONE) { trip_temp = tz->forced_passive; Loading @@ -156,12 +118,30 @@ static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip) trend = get_tz_trend(tz, trip); if (tz->temperature >= trip_temp) throttle = true; mutex_lock(&tz->lock); if (tz->temperature >= trip_temp) update_instance_for_throttle(tz, trip, trip_type, trend); else update_instance_for_dethrottle(tz, trip, trip_type, trend); list_for_each_entry(instance, &tz->thermal_instances, tz_node) { if (instance->trip != trip) continue; old_target = instance->target; instance->target = get_target_state(instance, trend, throttle); /* Activate a passive thermal instance */ if (old_target == THERMAL_NO_TARGET && instance->target != THERMAL_NO_TARGET) update_passive_instance(tz, trip_type, 1); /* Deactivate a passive thermal instance */ else if (old_target != THERMAL_NO_TARGET && instance->target == THERMAL_NO_TARGET) update_passive_instance(tz, trip_type, -1); instance->cdev->updated = false; /* cdev needs update */ } mutex_unlock(&tz->lock); } Loading Loading
drivers/thermal/step_wise.c +25 −45 Original line number Diff line number Diff line Loading @@ -99,52 +99,14 @@ static void update_passive_instance(struct thermal_zone_device *tz, tz->passive += value; } static void update_instance_for_throttle(struct thermal_zone_device *tz, int trip, enum thermal_trip_type trip_type, enum thermal_trend trend) { struct thermal_instance *instance; list_for_each_entry(instance, &tz->thermal_instances, tz_node) { if (instance->trip != trip) continue; instance->target = get_target_state(instance, trend, true); /* Activate a passive thermal instance */ if (instance->target == THERMAL_NO_TARGET) update_passive_instance(tz, trip_type, 1); instance->cdev->updated = false; /* cdev needs update */ } } static void update_instance_for_dethrottle(struct thermal_zone_device *tz, int trip, enum thermal_trip_type trip_type, enum thermal_trend trend) { struct thermal_instance *instance; list_for_each_entry(instance, &tz->thermal_instances, tz_node) { if (instance->trip != trip || instance->target == THERMAL_NO_TARGET) continue; instance->target = get_target_state(instance, trend, false); /* Deactivate a passive thermal instance */ if (instance->target == THERMAL_NO_TARGET) update_passive_instance(tz, trip_type, -1); instance->cdev->updated = false; /* cdev needs update */ } } static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip) { long trip_temp; enum thermal_trip_type trip_type; enum thermal_trend trend; struct thermal_instance *instance; bool throttle = false; int old_target; if (trip == THERMAL_TRIPS_NONE) { trip_temp = tz->forced_passive; Loading @@ -156,12 +118,30 @@ static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip) trend = get_tz_trend(tz, trip); if (tz->temperature >= trip_temp) throttle = true; mutex_lock(&tz->lock); if (tz->temperature >= trip_temp) update_instance_for_throttle(tz, trip, trip_type, trend); else update_instance_for_dethrottle(tz, trip, trip_type, trend); list_for_each_entry(instance, &tz->thermal_instances, tz_node) { if (instance->trip != trip) continue; old_target = instance->target; instance->target = get_target_state(instance, trend, throttle); /* Activate a passive thermal instance */ if (old_target == THERMAL_NO_TARGET && instance->target != THERMAL_NO_TARGET) update_passive_instance(tz, trip_type, 1); /* Deactivate a passive thermal instance */ else if (old_target != THERMAL_NO_TARGET && instance->target == THERMAL_NO_TARGET) update_passive_instance(tz, trip_type, -1); instance->cdev->updated = false; /* cdev needs update */ } mutex_unlock(&tz->lock); } Loading