Commit f61d5b4d authored by Zhang Rui's avatar Zhang Rui
Browse files

Merge branch 'fixes' of .git into next

parents 036e8a13 ca56caa0
Loading
Loading
Loading
Loading
+21 −11
Original line number Original line Diff line number Diff line
@@ -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)