Merge branch 'fixes' of .git into next

This commit is contained in:
Zhang Rui 2013-08-15 15:49:30 +08:00
commit f61d5b4d52
1 changed files with 21 additions and 11 deletions

View File

@ -51,44 +51,51 @@ static unsigned long get_target_state(struct thermal_instance *instance,
{ {
struct thermal_cooling_device *cdev = instance->cdev; struct thermal_cooling_device *cdev = instance->cdev;
unsigned long cur_state; unsigned long cur_state;
unsigned long next_target;
/*
* We keep this instance the way it is by default.
* Otherwise, we use the current state of the
* cdev in use to determine the next_target.
*/
cdev->ops->get_cur_state(cdev, &cur_state); cdev->ops->get_cur_state(cdev, &cur_state);
next_target = instance->target;
switch (trend) { switch (trend) {
case THERMAL_TREND_RAISING: case THERMAL_TREND_RAISING:
if (throttle) { if (throttle) {
cur_state = cur_state < instance->upper ? next_target = cur_state < instance->upper ?
(cur_state + 1) : instance->upper; (cur_state + 1) : instance->upper;
if (cur_state < instance->lower) if (next_target < instance->lower)
cur_state = instance->lower; next_target = instance->lower;
} }
break; break;
case THERMAL_TREND_RAISE_FULL: case THERMAL_TREND_RAISE_FULL:
if (throttle) if (throttle)
cur_state = instance->upper; next_target = instance->upper;
break; break;
case THERMAL_TREND_DROPPING: case THERMAL_TREND_DROPPING:
if (cur_state == instance->lower) { if (cur_state == instance->lower) {
if (!throttle) if (!throttle)
cur_state = -1; next_target = THERMAL_NO_TARGET;
} else { } else {
cur_state -= 1; next_target = cur_state - 1;
if (cur_state > instance->upper) if (next_target > instance->upper)
cur_state = instance->upper; next_target = instance->upper;
} }
break; break;
case THERMAL_TREND_DROP_FULL: case THERMAL_TREND_DROP_FULL:
if (cur_state == instance->lower) { if (cur_state == instance->lower) {
if (!throttle) if (!throttle)
cur_state = -1; next_target = THERMAL_NO_TARGET;
} else } else
cur_state = instance->lower; next_target = instance->lower;
break; break;
default: default:
break; break;
} }
return cur_state; return next_target;
} }
static void update_passive_instance(struct thermal_zone_device *tz, static void update_passive_instance(struct thermal_zone_device *tz,
@ -133,6 +140,9 @@ static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip)
old_target = instance->target; old_target = instance->target;
instance->target = get_target_state(instance, trend, throttle); instance->target = get_target_state(instance, trend, throttle);
if (old_target == instance->target)
continue;
/* Activate a passive thermal instance */ /* Activate a passive thermal instance */
if (old_target == THERMAL_NO_TARGET && if (old_target == THERMAL_NO_TARGET &&
instance->target != THERMAL_NO_TARGET) instance->target != THERMAL_NO_TARGET)