Commit 3995904d authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

Merge back thermal control material for v6.11.

parents 096597cf b6846826
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -168,11 +168,17 @@ static int acpi_thermal_get_polling_frequency(struct acpi_thermal *tz)

static int acpi_thermal_temp(struct acpi_thermal *tz, int temp_deci_k)
{
	int temp;

	if (temp_deci_k == THERMAL_TEMP_INVALID)
		return THERMAL_TEMP_INVALID;

	return deci_kelvin_to_millicelsius_with_offset(temp_deci_k,
	temp = deci_kelvin_to_millicelsius_with_offset(temp_deci_k,
						       tz->kelvin_offset);
	if (temp <= 0)
		return THERMAL_TEMP_INVALID;

	return temp;
}

static bool acpi_thermal_trip_valid(struct acpi_thermal_trip *acpi_trip)
+17 −0
Original line number Diff line number Diff line
@@ -93,6 +93,23 @@ static void thermal_zone_trip_update(struct thermal_zone_device *tz,
		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);
+11 −2
Original line number Diff line number Diff line
@@ -999,9 +999,17 @@ __thermal_cooling_device_register(struct device_node *np,
	if (ret)
		goto out_cdev_type;

	/*
	 * The cooling device's current state is only needed for debug
	 * initialization below, so a failure to get it does not cause
	 * the entire cooling device initialization to fail.  However,
	 * the debug will not work for the device if its initial state
	 * cannot be determined and drivers are responsible for ensuring
	 * that this will not happen.
	 */
	ret = cdev->ops->get_cur_state(cdev, &current_state);
	if (ret)
		goto out_cdev_type;
		current_state = ULONG_MAX;

	thermal_cooling_device_setup_sysfs(cdev);

@@ -1016,6 +1024,7 @@ __thermal_cooling_device_register(struct device_node *np,
		return ERR_PTR(ret);
	}

	if (current_state <= cdev->max_state)
		thermal_debug_cdev_add(cdev, current_state);

	/* Add 'this' new cdev to the global cdev list */