Commit 0c2ec0f1 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki

Merge branch 'acpi-thermal'

Merge ACPI thermal driver changes for 6.6-rc1:

 - Drop non-functional nocrt parameter from ACPI thermal (Mario
   Limonciello).

 - Clean up the ACPI thermal driver, rework the handling of firmware
   notifications in it and make it provide a table of generic trip point
   structures to the core during initialization (Rafael Wysocki).

* acpi-thermal:
  ACPI: thermal: Eliminate code duplication from acpi_thermal_notify()
  ACPI: thermal: Drop unnecessary thermal zone callbacks
  ACPI: thermal: Rework thermal_get_trend()
  ACPI: thermal: Use trip point table to register thermal zones
  thermal: core: Rework and rename __for_each_thermal_trip()
  ACPI: thermal: Introduce struct acpi_thermal_trip
  ACPI: thermal: Carry out trip point updates under zone lock
  ACPI: thermal: Clean up acpi_thermal_register_thermal_zone()
  thermal: core: Add priv pointer to struct thermal_trip
  thermal: core: Introduce thermal_zone_device_exec()
  thermal: core: Do not handle trip points with invalid temperature
  ACPI: thermal: Drop redundant local variable from acpi_thermal_resume()
  ACPI: thermal: Do not attach private data to ACPI handles
  ACPI: thermal: Drop enabled flag from struct acpi_thermal_active
  ACPI: thermal: Drop nocrt parameter
parents 9bd0c413 4ab4b3b1
...@@ -6275,10 +6275,6 @@ ...@@ -6275,10 +6275,6 @@
-1: disable all critical trip points in all thermal zones -1: disable all critical trip points in all thermal zones
<degrees C>: override all critical trip points <degrees C>: override all critical trip points
thermal.nocrt= [HW,ACPI]
Set to disable actions on ACPI thermal zone
critical and hot trip points.
thermal.off= [HW,ACPI] thermal.off= [HW,ACPI]
1: disable ACPI thermal control 1: disable ACPI thermal control
......
This diff is collapsed.
...@@ -348,7 +348,8 @@ static void handle_thermal_trip(struct thermal_zone_device *tz, int trip_id) ...@@ -348,7 +348,8 @@ static void handle_thermal_trip(struct thermal_zone_device *tz, int trip_id)
struct thermal_trip trip; struct thermal_trip trip;
/* Ignore disabled trip points */ /* Ignore disabled trip points */
if (test_bit(trip_id, &tz->trips_disabled)) if (test_bit(trip_id, &tz->trips_disabled) ||
trip.temperature == THERMAL_TEMP_INVALID)
return; return;
__thermal_zone_get_trip(tz, trip_id, &trip); __thermal_zone_get_trip(tz, trip_id, &trip);
...@@ -496,6 +497,25 @@ void thermal_zone_device_update(struct thermal_zone_device *tz, ...@@ -496,6 +497,25 @@ void thermal_zone_device_update(struct thermal_zone_device *tz,
} }
EXPORT_SYMBOL_GPL(thermal_zone_device_update); EXPORT_SYMBOL_GPL(thermal_zone_device_update);
/**
* thermal_zone_device_exec - Run a callback under the zone lock.
* @tz: Thermal zone.
* @cb: Callback to run.
* @data: Data to pass to the callback.
*/
void thermal_zone_device_exec(struct thermal_zone_device *tz,
void (*cb)(struct thermal_zone_device *,
unsigned long),
unsigned long data)
{
mutex_lock(&tz->lock);
cb(tz, data);
mutex_unlock(&tz->lock);
}
EXPORT_SYMBOL_GPL(thermal_zone_device_exec);
static void thermal_zone_device_check(struct work_struct *work) static void thermal_zone_device_check(struct work_struct *work)
{ {
struct thermal_zone_device *tz = container_of(work, struct struct thermal_zone_device *tz = container_of(work, struct
......
...@@ -54,10 +54,6 @@ int for_each_thermal_cooling_device(int (*cb)(struct thermal_cooling_device *, ...@@ -54,10 +54,6 @@ int for_each_thermal_cooling_device(int (*cb)(struct thermal_cooling_device *,
int for_each_thermal_governor(int (*cb)(struct thermal_governor *, void *), int for_each_thermal_governor(int (*cb)(struct thermal_governor *, void *),
void *thermal_governor); void *thermal_governor);
int __for_each_thermal_trip(struct thermal_zone_device *,
int (*cb)(struct thermal_trip *, void *),
void *);
struct thermal_zone_device *thermal_zone_get_by_id(int id); struct thermal_zone_device *thermal_zone_get_by_id(int id);
struct thermal_attr { struct thermal_attr {
......
...@@ -9,28 +9,26 @@ ...@@ -9,28 +9,26 @@
*/ */
#include "thermal_core.h" #include "thermal_core.h"
int __for_each_thermal_trip(struct thermal_zone_device *tz, int for_each_thermal_trip(struct thermal_zone_device *tz,
int (*cb)(struct thermal_trip *, void *), int (*cb)(struct thermal_trip *, void *),
void *data) void *data)
{ {
int i, ret; int i, ret;
struct thermal_trip trip;
lockdep_assert_held(&tz->lock); lockdep_assert_held(&tz->lock);
for (i = 0; i < tz->num_trips; i++) { if (!tz->trips)
return -ENODATA;
ret = __thermal_zone_get_trip(tz, i, &trip);
if (ret)
return ret;
ret = cb(&trip, data); for (i = 0; i < tz->num_trips; i++) {
ret = cb(&tz->trips[i], data);
if (ret) if (ret)
return ret; return ret;
} }
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(for_each_thermal_trip);
int thermal_zone_get_num_trips(struct thermal_zone_device *tz) int thermal_zone_get_num_trips(struct thermal_zone_device *tz)
{ {
......
...@@ -81,11 +81,13 @@ struct thermal_zone_device_ops { ...@@ -81,11 +81,13 @@ struct thermal_zone_device_ops {
* @temperature: temperature value in miliCelsius * @temperature: temperature value in miliCelsius
* @hysteresis: relative hysteresis in miliCelsius * @hysteresis: relative hysteresis in miliCelsius
* @type: trip point type * @type: trip point type
* @priv: pointer to driver data associated with this trip
*/ */
struct thermal_trip { struct thermal_trip {
int temperature; int temperature;
int hysteresis; int hysteresis;
enum thermal_trip_type type; enum thermal_trip_type type;
void *priv;
}; };
struct thermal_cooling_device_ops { struct thermal_cooling_device_ops {
...@@ -287,6 +289,9 @@ int thermal_zone_get_trip(struct thermal_zone_device *tz, int trip_id, ...@@ -287,6 +289,9 @@ int thermal_zone_get_trip(struct thermal_zone_device *tz, int trip_id,
int thermal_zone_set_trip(struct thermal_zone_device *tz, int trip_id, int thermal_zone_set_trip(struct thermal_zone_device *tz, int trip_id,
const struct thermal_trip *trip); const struct thermal_trip *trip);
int for_each_thermal_trip(struct thermal_zone_device *tz,
int (*cb)(struct thermal_trip *, void *),
void *data);
int thermal_zone_get_num_trips(struct thermal_zone_device *tz); int thermal_zone_get_num_trips(struct thermal_zone_device *tz);
int thermal_zone_get_crit_temp(struct thermal_zone_device *tz, int *temp); int thermal_zone_get_crit_temp(struct thermal_zone_device *tz, int *temp);
...@@ -323,6 +328,10 @@ int thermal_zone_unbind_cooling_device(struct thermal_zone_device *, int, ...@@ -323,6 +328,10 @@ int thermal_zone_unbind_cooling_device(struct thermal_zone_device *, int,
struct thermal_cooling_device *); struct thermal_cooling_device *);
void thermal_zone_device_update(struct thermal_zone_device *, void thermal_zone_device_update(struct thermal_zone_device *,
enum thermal_notify_event); enum thermal_notify_event);
void thermal_zone_device_exec(struct thermal_zone_device *tz,
void (*cb)(struct thermal_zone_device *,
unsigned long),
unsigned long data);
struct thermal_cooling_device *thermal_cooling_device_register(const char *, struct thermal_cooling_device *thermal_cooling_device_register(const char *,
void *, const struct thermal_cooling_device_ops *); void *, const struct thermal_cooling_device_ops *);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment