Commit 7266c88c authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

ACPI: thermal: Eliminate struct acpi_thermal_state_flags



Notice that the enabled flag is only needed for active trip points,
so drop struct acpi_thermal_state_flags, add a simple "bool valid" field
to the definitions of all trip point structures instead of flags and
add a "bool enabled" field to struct acpi_thermal_active.

Adjust the code using the modified structures accordingly.

No intentional functional impact.

Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: default avatarMichal Wilczynski <michal.wilczynski@intel.com>
Reviewed-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
parent 607d265f
Loading
Loading
Loading
Loading
+64 −68
Original line number Diff line number Diff line
@@ -105,35 +105,30 @@ struct acpi_thermal_state {
	int active_index;
};

struct acpi_thermal_state_flags {
	u8 valid:1;
	u8 enabled:1;
	u8 reserved:6;
};

struct acpi_thermal_critical {
	struct acpi_thermal_state_flags flags;
	unsigned long temperature;
	bool valid;
};

struct acpi_thermal_hot {
	struct acpi_thermal_state_flags flags;
	unsigned long temperature;
	bool valid;
};

struct acpi_thermal_passive {
	struct acpi_thermal_state_flags flags;
	struct acpi_handle_list devices;
	unsigned long temperature;
	unsigned long tc1;
	unsigned long tc2;
	unsigned long tsp;
	struct acpi_handle_list devices;
	bool valid;
};

struct acpi_thermal_active {
	struct acpi_thermal_state_flags flags;
	unsigned long temperature;
	struct acpi_handle_list devices;
	unsigned long temperature;
	bool valid;
	bool enabled;
};

struct acpi_thermal_trips {
@@ -229,7 +224,7 @@ static int acpi_thermal_trips_update(struct acpi_thermal *tz, int flag)
	acpi_status status;
	unsigned long long tmp;
	struct acpi_handle_list devices;
	int valid = 0;
	bool valid = false;
	int i;

	/* Critical Shutdown */
@@ -243,21 +238,21 @@ static int acpi_thermal_trips_update(struct acpi_thermal *tz, int flag)
		 * ... so lets discard those as invalid.
		 */
		if (ACPI_FAILURE(status)) {
			tz->trips.critical.flags.valid = 0;
			tz->trips.critical.valid = false;
			acpi_handle_debug(tz->device->handle,
					  "No critical threshold\n");
		} else if (tmp <= 2732) {
			pr_info(FW_BUG "Invalid critical threshold (%llu)\n", tmp);
			tz->trips.critical.flags.valid = 0;
			tz->trips.critical.valid = false;
		} else {
			tz->trips.critical.flags.valid = 1;
			tz->trips.critical.valid = true;
			acpi_handle_debug(tz->device->handle,
					  "Found critical threshold [%lu]\n",
					  tz->trips.critical.temperature);
		}
		if (tz->trips.critical.flags.valid) {
		if (tz->trips.critical.valid) {
			if (crt == -1) {
				tz->trips.critical.flags.valid = 0;
				tz->trips.critical.valid = false;
			} else if (crt > 0) {
				unsigned long crt_k = celsius_to_deci_kelvin(crt);

@@ -276,12 +271,12 @@ static int acpi_thermal_trips_update(struct acpi_thermal *tz, int flag)
	if (flag & ACPI_TRIPS_HOT) {
		status = acpi_evaluate_integer(tz->device->handle, "_HOT", NULL, &tmp);
		if (ACPI_FAILURE(status)) {
			tz->trips.hot.flags.valid = 0;
			tz->trips.hot.valid = false;
			acpi_handle_debug(tz->device->handle,
					  "No hot threshold\n");
		} else {
			tz->trips.hot.temperature = tmp;
			tz->trips.hot.flags.valid = 1;
			tz->trips.hot.valid = true;
			acpi_handle_debug(tz->device->handle,
					  "Found hot threshold [%lu]\n",
					  tz->trips.hot.temperature);
@@ -289,9 +284,9 @@ static int acpi_thermal_trips_update(struct acpi_thermal *tz, int flag)
	}

	/* Passive (optional) */
	if (((flag & ACPI_TRIPS_PASSIVE) && tz->trips.passive.flags.valid) ||
	if (((flag & ACPI_TRIPS_PASSIVE) && tz->trips.passive.valid) ||
	    flag == ACPI_TRIPS_INIT) {
		valid = tz->trips.passive.flags.valid;
		valid = tz->trips.passive.valid;
		if (psv == -1) {
			status = AE_SUPPORT;
		} else if (psv > 0) {
@@ -303,44 +298,44 @@ static int acpi_thermal_trips_update(struct acpi_thermal *tz, int flag)
		}

		if (ACPI_FAILURE(status)) {
			tz->trips.passive.flags.valid = 0;
			tz->trips.passive.valid = false;
		} else {
			tz->trips.passive.temperature = tmp;
			tz->trips.passive.flags.valid = 1;
			tz->trips.passive.valid = true;
			if (flag == ACPI_TRIPS_INIT) {
				status = acpi_evaluate_integer(tz->device->handle,
							       "_TC1", NULL, &tmp);
				if (ACPI_FAILURE(status))
					tz->trips.passive.flags.valid = 0;
					tz->trips.passive.valid = false;
				else
					tz->trips.passive.tc1 = tmp;

				status = acpi_evaluate_integer(tz->device->handle,
							       "_TC2", NULL, &tmp);
				if (ACPI_FAILURE(status))
					tz->trips.passive.flags.valid = 0;
					tz->trips.passive.valid = false;
				else
					tz->trips.passive.tc2 = tmp;

				status = acpi_evaluate_integer(tz->device->handle,
							       "_TSP", NULL, &tmp);
				if (ACPI_FAILURE(status))
					tz->trips.passive.flags.valid = 0;
					tz->trips.passive.valid = false;
				else
					tz->trips.passive.tsp = tmp;
			}
		}
	}
	if ((flag & ACPI_TRIPS_DEVICES) && tz->trips.passive.flags.valid) {
	if ((flag & ACPI_TRIPS_DEVICES) && tz->trips.passive.valid) {
		memset(&devices, 0, sizeof(struct acpi_handle_list));
		status = acpi_evaluate_reference(tz->device->handle, "_PSL",
						 NULL, &devices);
		if (ACPI_FAILURE(status)) {
			acpi_handle_info(tz->device->handle,
					 "Invalid passive threshold\n");
			tz->trips.passive.flags.valid = 0;
			tz->trips.passive.valid = false;
		} else {
			tz->trips.passive.flags.valid = 1;
			tz->trips.passive.valid = true;
		}

		if (memcmp(&tz->trips.passive.devices, &devices,
@@ -351,24 +346,24 @@ static int acpi_thermal_trips_update(struct acpi_thermal *tz, int flag)
		}
	}
	if ((flag & ACPI_TRIPS_PASSIVE) || (flag & ACPI_TRIPS_DEVICES)) {
		if (valid != tz->trips.passive.flags.valid)
		if (valid != tz->trips.passive.valid)
			ACPI_THERMAL_TRIPS_EXCEPTION(flag, tz, "state");
	}

	/* Active (optional) */
	for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE; i++) {
		char name[5] = { '_', 'A', 'C', ('0' + i), '\0' };
		valid = tz->trips.active[i].flags.valid;
		valid = tz->trips.active[i].valid;

		if (act == -1)
			break; /* disable all active trip points */

		if (flag == ACPI_TRIPS_INIT || ((flag & ACPI_TRIPS_ACTIVE) &&
		    tz->trips.active[i].flags.valid)) {
		    tz->trips.active[i].valid)) {
			status = acpi_evaluate_integer(tz->device->handle,
						       name, NULL, &tmp);
			if (ACPI_FAILURE(status)) {
				tz->trips.active[i].flags.valid = 0;
				tz->trips.active[i].valid = false;
				if (i == 0)
					break;

@@ -390,21 +385,21 @@ static int acpi_thermal_trips_update(struct acpi_thermal *tz, int flag)
				break;
			} else {
				tz->trips.active[i].temperature = tmp;
				tz->trips.active[i].flags.valid = 1;
				tz->trips.active[i].valid = true;
			}
		}

		name[2] = 'L';
		if ((flag & ACPI_TRIPS_DEVICES) && tz->trips.active[i].flags.valid) {
		if ((flag & ACPI_TRIPS_DEVICES) && tz->trips.active[i].valid) {
			memset(&devices, 0, sizeof(struct acpi_handle_list));
			status = acpi_evaluate_reference(tz->device->handle,
							 name, NULL, &devices);
			if (ACPI_FAILURE(status)) {
				acpi_handle_info(tz->device->handle,
						 "Invalid active%d threshold\n", i);
				tz->trips.active[i].flags.valid = 0;
				tz->trips.active[i].valid = false;
			} else {
				tz->trips.active[i].flags.valid = 1;
				tz->trips.active[i].valid = true;
			}

			if (memcmp(&tz->trips.active[i].devices, &devices,
@@ -415,10 +410,10 @@ static int acpi_thermal_trips_update(struct acpi_thermal *tz, int flag)
			}
		}
		if ((flag & ACPI_TRIPS_ACTIVE) || (flag & ACPI_TRIPS_DEVICES))
			if (valid != tz->trips.active[i].flags.valid)
			if (valid != tz->trips.active[i].valid)
				ACPI_THERMAL_TRIPS_EXCEPTION(flag, tz, "state");

		if (!tz->trips.active[i].flags.valid)
		if (!tz->trips.active[i].valid)
			break;
	}

@@ -438,17 +433,18 @@ static int acpi_thermal_trips_update(struct acpi_thermal *tz, int flag)

static int acpi_thermal_get_trip_points(struct acpi_thermal *tz)
{
	int i, valid, ret = acpi_thermal_trips_update(tz, ACPI_TRIPS_INIT);
	int i, ret = acpi_thermal_trips_update(tz, ACPI_TRIPS_INIT);
	bool valid;

	if (ret)
		return ret;

	valid = tz->trips.critical.flags.valid |
		tz->trips.hot.flags.valid |
		tz->trips.passive.flags.valid;
	valid = tz->trips.critical.valid |
		tz->trips.hot.valid |
		tz->trips.passive.valid;

	for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE; i++)
		valid |= tz->trips.active[i].flags.valid;
		valid = valid || tz->trips.active[i].valid;

	if (!valid) {
		pr_warn(FW_BUG "No valid trip found\n");
@@ -485,7 +481,7 @@ static int thermal_get_trip_type(struct thermal_zone_device *thermal,
	if (!tz || trip < 0)
		return -EINVAL;

	if (tz->trips.critical.flags.valid) {
	if (tz->trips.critical.valid) {
		if (!trip) {
			*type = THERMAL_TRIP_CRITICAL;
			return 0;
@@ -493,7 +489,7 @@ static int thermal_get_trip_type(struct thermal_zone_device *thermal,
		trip--;
	}

	if (tz->trips.hot.flags.valid) {
	if (tz->trips.hot.valid) {
		if (!trip) {
			*type = THERMAL_TRIP_HOT;
			return 0;
@@ -501,7 +497,7 @@ static int thermal_get_trip_type(struct thermal_zone_device *thermal,
		trip--;
	}

	if (tz->trips.passive.flags.valid) {
	if (tz->trips.passive.valid) {
		if (!trip) {
			*type = THERMAL_TRIP_PASSIVE;
			return 0;
@@ -509,7 +505,7 @@ static int thermal_get_trip_type(struct thermal_zone_device *thermal,
		trip--;
	}

	for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE && tz->trips.active[i].flags.valid; i++) {
	for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE && tz->trips.active[i].valid; i++) {
		if (!trip) {
			*type = THERMAL_TRIP_ACTIVE;
			return 0;
@@ -529,7 +525,7 @@ static int thermal_get_trip_temp(struct thermal_zone_device *thermal,
	if (!tz || trip < 0)
		return -EINVAL;

	if (tz->trips.critical.flags.valid) {
	if (tz->trips.critical.valid) {
		if (!trip) {
			*temp = deci_kelvin_to_millicelsius_with_offset(
					tz->trips.critical.temperature,
@@ -539,7 +535,7 @@ static int thermal_get_trip_temp(struct thermal_zone_device *thermal,
		trip--;
	}

	if (tz->trips.hot.flags.valid) {
	if (tz->trips.hot.valid) {
		if (!trip) {
			*temp = deci_kelvin_to_millicelsius_with_offset(
					tz->trips.hot.temperature,
@@ -549,7 +545,7 @@ static int thermal_get_trip_temp(struct thermal_zone_device *thermal,
		trip--;
	}

	if (tz->trips.passive.flags.valid) {
	if (tz->trips.passive.valid) {
		if (!trip) {
			*temp = deci_kelvin_to_millicelsius_with_offset(
					tz->trips.passive.temperature,
@@ -560,7 +556,7 @@ static int thermal_get_trip_temp(struct thermal_zone_device *thermal,
	}

	for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE &&
		tz->trips.active[i].flags.valid; i++) {
		tz->trips.active[i].valid; i++) {
		if (!trip) {
			*temp = deci_kelvin_to_millicelsius_with_offset(
					tz->trips.active[i].temperature,
@@ -578,7 +574,7 @@ static int thermal_get_crit_temp(struct thermal_zone_device *thermal,
{
	struct acpi_thermal *tz = thermal_zone_device_priv(thermal);

	if (tz->trips.critical.flags.valid) {
	if (tz->trips.critical.valid) {
		*temperature = deci_kelvin_to_millicelsius_with_offset(
					tz->trips.critical.temperature,
					tz->kelvin_offset);
@@ -664,13 +660,13 @@ static int acpi_thermal_cooling_device_cb(struct thermal_zone_device *thermal,
	int trip = -1;
	int result = 0;

	if (tz->trips.critical.flags.valid)
	if (tz->trips.critical.valid)
		trip++;

	if (tz->trips.hot.flags.valid)
	if (tz->trips.hot.valid)
		trip++;

	if (tz->trips.passive.flags.valid) {
	if (tz->trips.passive.valid) {
		trip++;
		for (i = 0; i < tz->trips.passive.devices.count; i++) {
			handle = tz->trips.passive.devices.handles[i];
@@ -695,7 +691,7 @@ static int acpi_thermal_cooling_device_cb(struct thermal_zone_device *thermal,
	}

	for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE; i++) {
		if (!tz->trips.active[i].flags.valid)
		if (!tz->trips.active[i].valid)
			break;

		trip++;
@@ -783,19 +779,19 @@ static int acpi_thermal_register_thermal_zone(struct acpi_thermal *tz)
	acpi_status status;
	int i;

	if (tz->trips.critical.flags.valid)
	if (tz->trips.critical.valid)
		trips++;

	if (tz->trips.hot.flags.valid)
	if (tz->trips.hot.valid)
		trips++;

	if (tz->trips.passive.flags.valid)
	if (tz->trips.passive.valid)
		trips++;

	for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE && tz->trips.active[i].flags.valid;
	for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE && tz->trips.active[i].valid;
	     i++, trips++);

	if (tz->trips.passive.flags.valid)
	if (tz->trips.passive.valid)
		tz->thermal_zone = thermal_zone_device_register("acpitz", trips, 0, tz,
								&acpi_thermal_zone_ops, NULL,
								tz->trips.passive.tsp * 100,
@@ -965,7 +961,7 @@ static int acpi_thermal_get_info(struct acpi_thermal *tz)
 */
static void acpi_thermal_guess_offset(struct acpi_thermal *tz)
{
	if (tz->trips.critical.flags.valid &&
	if (tz->trips.critical.valid &&
	    (tz->trips.critical.temperature % 5) == 1)
		tz->kelvin_offset = 273100;
	else
@@ -1074,20 +1070,20 @@ static int acpi_thermal_resume(struct device *dev)
		return -EINVAL;

	for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE; i++) {
		if (!tz->trips.active[i].flags.valid)
		if (!tz->trips.active[i].valid)
			break;

		tz->trips.active[i].flags.enabled = 1;
		tz->trips.active[i].enabled = true;
		for (j = 0; j < tz->trips.active[i].devices.count; j++) {
			result = acpi_bus_update_power(
					tz->trips.active[i].devices.handles[j],
					&power_state);
			if (result || (power_state != ACPI_STATE_D0)) {
				tz->trips.active[i].flags.enabled = 0;
				tz->trips.active[i].enabled = false;
				break;
			}
		}
		tz->state.active |= tz->trips.active[i].flags.enabled;
		tz->state.active |= tz->trips.active[i].enabled;
	}

	acpi_queue_thermal_check(tz);