Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a2883dfa authored by Len Brown's avatar Len Brown
Browse files

Pull thermal into release branch

parents 73a855f7 6e215785
Loading
Loading
Loading
Loading
+18 −10
Original line number Diff line number Diff line
@@ -195,6 +195,7 @@ struct acpi_thermal {
	struct acpi_thermal_trips trips;
	struct acpi_handle_list devices;
	struct timer_list timer;
	struct mutex lock;
};

static const struct file_operations acpi_thermal_state_fops = {
@@ -711,6 +712,7 @@ static void acpi_thermal_check(void *data)
	int result = 0;
	struct acpi_thermal *tz = data;
	unsigned long sleep_time = 0;
	unsigned long timeout_jiffies = 0;
	int i = 0;
	struct acpi_thermal_state state;

@@ -720,11 +722,15 @@ static void acpi_thermal_check(void *data)
		return;
	}

	/* Check if someone else is already running */
	if (!mutex_trylock(&tz->lock))
		return;

	state = tz->state;

	result = acpi_thermal_get_temperature(tz);
	if (result)
		return;
		goto unlock;

	memset(&tz->state, 0, sizeof(tz->state));

@@ -787,10 +793,13 @@ static void acpi_thermal_check(void *data)
	 * a thermal event occurs).  Note that _TSP and _TZD values are
	 * given in 1/10th seconds (we must covert to milliseconds).
	 */
	if (tz->state.passive)
	if (tz->state.passive) {
		sleep_time = tz->trips.passive.tsp * 100;
	else if (tz->polling_frequency > 0)
		timeout_jiffies =  jiffies + (HZ * sleep_time) / 1000;
	} else if (tz->polling_frequency > 0) {
		sleep_time = tz->polling_frequency * 100;
		timeout_jiffies =  round_jiffies(jiffies + (HZ * sleep_time) / 1000);
	}

	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "%s: temperature[%lu] sleep[%lu]\n",
			  tz->name, tz->temperature, sleep_time));
@@ -804,17 +813,16 @@ static void acpi_thermal_check(void *data)
			del_timer(&(tz->timer));
	} else {
		if (timer_pending(&(tz->timer)))
			mod_timer(&(tz->timer),
					jiffies + (HZ * sleep_time) / 1000);
			mod_timer(&(tz->timer), timeout_jiffies);
		else {
			tz->timer.data = (unsigned long)tz;
			tz->timer.function = acpi_thermal_run;
			tz->timer.expires = jiffies + (HZ * sleep_time) / 1000;
			tz->timer.expires = timeout_jiffies;
			add_timer(&(tz->timer));
		}
	}

	return;
      unlock:
	mutex_unlock(&tz->lock);
}

/* --------------------------------------------------------------------------
@@ -1251,7 +1259,7 @@ static int acpi_thermal_add(struct acpi_device *device)
	strcpy(acpi_device_name(device), ACPI_THERMAL_DEVICE_NAME);
	strcpy(acpi_device_class(device), ACPI_THERMAL_CLASS);
	acpi_driver_data(device) = tz;

	mutex_init(&tz->lock);
	result = acpi_thermal_get_info(tz);
	if (result)
		goto end;
@@ -1321,7 +1329,7 @@ static int acpi_thermal_remove(struct acpi_device *device, int type)
	}

	acpi_thermal_remove_fs(device);

	mutex_destroy(&tz->lock);
	kfree(tz);
	return 0;
}