Commit 37702015 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki

Merge branch 'thermal-core'

Merge thermal core changes for v6.7 depended on by subsequent ACPI
thermal driver changes:

 - Drop trips_disabled bitmask that is not really useful any more from
   the thermal zone structure.

 - Drop a reduntant NULL pointer check from for_each_thermal_trip().

 - Redefine struct thermal_instance to hold a thernal trip pointer
   instead of a trip index.

 - Add helpers for binding and unbinding cooling devices to and from
   trip points, reslectively, that take trip pointers as arguments.

* thermal-core:
  thermal: core: Allow trip pointers to be used for cooling device binding
  thermal: core: Store trip pointer in struct thermal_instance
  thermal: trip: Drop redundant trips check from for_each_thermal_trip()
  thermal: core: Drop trips_disabled bitmask
parents 2713b83c d069ed6b
...@@ -13,28 +13,21 @@ ...@@ -13,28 +13,21 @@
#include "thermal_core.h" #include "thermal_core.h"
static int thermal_zone_trip_update(struct thermal_zone_device *tz, int trip_id) static int thermal_zone_trip_update(struct thermal_zone_device *tz, int trip_index)
{ {
struct thermal_trip trip; const struct thermal_trip *trip = &tz->trips[trip_index];
struct thermal_instance *instance; struct thermal_instance *instance;
int ret;
ret = __thermal_zone_get_trip(tz, trip_id, &trip);
if (ret) {
pr_warn_once("Failed to retrieve trip point %d\n", trip_id);
return ret;
}
if (!trip.hysteresis) if (!trip->hysteresis)
dev_info_once(&tz->device, dev_info_once(&tz->device,
"Zero hysteresis value for thermal zone %s\n", tz->type); "Zero hysteresis value for thermal zone %s\n", tz->type);
dev_dbg(&tz->device, "Trip%d[temp=%d]:temp=%d:hyst=%d\n", dev_dbg(&tz->device, "Trip%d[temp=%d]:temp=%d:hyst=%d\n",
trip_id, trip.temperature, tz->temperature, trip_index, trip->temperature, tz->temperature,
trip.hysteresis); trip->hysteresis);
list_for_each_entry(instance, &tz->thermal_instances, tz_node) { list_for_each_entry(instance, &tz->thermal_instances, tz_node) {
if (instance->trip != trip_id) if (instance->trip != trip)
continue; continue;
/* in case fan is in initial state, switch the fan off */ /* in case fan is in initial state, switch the fan off */
...@@ -52,10 +45,10 @@ static int thermal_zone_trip_update(struct thermal_zone_device *tz, int trip_id) ...@@ -52,10 +45,10 @@ static int thermal_zone_trip_update(struct thermal_zone_device *tz, int trip_id)
* enable fan when temperature exceeds trip_temp and disable * enable fan when temperature exceeds trip_temp and disable
* the fan in case it falls below trip_temp minus hysteresis * the fan in case it falls below trip_temp minus hysteresis
*/ */
if (instance->target == 0 && tz->temperature >= trip.temperature) if (instance->target == 0 && tz->temperature >= trip->temperature)
instance->target = 1; instance->target = 1;
else if (instance->target == 1 && else if (instance->target == 1 &&
tz->temperature <= trip.temperature - trip.hysteresis) tz->temperature <= trip->temperature - trip->hysteresis)
instance->target = 0; instance->target = 0;
dev_dbg(&instance->cdev->device, "target=%d\n", dev_dbg(&instance->cdev->device, "target=%d\n",
......
...@@ -49,7 +49,7 @@ static long get_target_state(struct thermal_zone_device *tz, ...@@ -49,7 +49,7 @@ static long get_target_state(struct thermal_zone_device *tz,
/** /**
* fair_share_throttle - throttles devices associated with the given zone * fair_share_throttle - throttles devices associated with the given zone
* @tz: thermal_zone_device * @tz: thermal_zone_device
* @trip: trip point index * @trip_index: trip point index
* *
* Throttling Logic: This uses three parameters to calculate the new * Throttling Logic: This uses three parameters to calculate the new
* throttle state of the cooling devices associated with the given zone. * throttle state of the cooling devices associated with the given zone.
...@@ -65,8 +65,9 @@ static long get_target_state(struct thermal_zone_device *tz, ...@@ -65,8 +65,9 @@ static long get_target_state(struct thermal_zone_device *tz,
* (Heavily assumes the trip points are in ascending order) * (Heavily assumes the trip points are in ascending order)
* new_state of cooling device = P3 * P2 * P1 * new_state of cooling device = P3 * P2 * P1
*/ */
static int fair_share_throttle(struct thermal_zone_device *tz, int trip) static int fair_share_throttle(struct thermal_zone_device *tz, int trip_index)
{ {
const struct thermal_trip *trip = &tz->trips[trip_index];
struct thermal_instance *instance; struct thermal_instance *instance;
int total_weight = 0; int total_weight = 0;
int total_instance = 0; int total_instance = 0;
......
...@@ -90,12 +90,14 @@ static u32 estimate_sustainable_power(struct thermal_zone_device *tz) ...@@ -90,12 +90,14 @@ static u32 estimate_sustainable_power(struct thermal_zone_device *tz)
u32 sustainable_power = 0; u32 sustainable_power = 0;
struct thermal_instance *instance; struct thermal_instance *instance;
struct power_allocator_params *params = tz->governor_data; struct power_allocator_params *params = tz->governor_data;
const struct thermal_trip *trip_max_desired_temperature =
&tz->trips[params->trip_max_desired_temperature];
list_for_each_entry(instance, &tz->thermal_instances, tz_node) { list_for_each_entry(instance, &tz->thermal_instances, tz_node) {
struct thermal_cooling_device *cdev = instance->cdev; struct thermal_cooling_device *cdev = instance->cdev;
u32 min_power; u32 min_power;
if (instance->trip != params->trip_max_desired_temperature) if (instance->trip != trip_max_desired_temperature)
continue; continue;
if (!cdev_is_power_actor(cdev)) if (!cdev_is_power_actor(cdev))
...@@ -383,12 +385,13 @@ static int allocate_power(struct thermal_zone_device *tz, ...@@ -383,12 +385,13 @@ static int allocate_power(struct thermal_zone_device *tz,
{ {
struct thermal_instance *instance; struct thermal_instance *instance;
struct power_allocator_params *params = tz->governor_data; struct power_allocator_params *params = tz->governor_data;
const struct thermal_trip *trip_max_desired_temperature =
&tz->trips[params->trip_max_desired_temperature];
u32 *req_power, *max_power, *granted_power, *extra_actor_power; u32 *req_power, *max_power, *granted_power, *extra_actor_power;
u32 *weighted_req_power; u32 *weighted_req_power;
u32 total_req_power, max_allocatable_power, total_weighted_req_power; u32 total_req_power, max_allocatable_power, total_weighted_req_power;
u32 total_granted_power, power_range; u32 total_granted_power, power_range;
int i, num_actors, total_weight, ret = 0; int i, num_actors, total_weight, ret = 0;
int trip_max_desired_temperature = params->trip_max_desired_temperature;
num_actors = 0; num_actors = 0;
total_weight = 0; total_weight = 0;
...@@ -564,12 +567,14 @@ static void allow_maximum_power(struct thermal_zone_device *tz, bool update) ...@@ -564,12 +567,14 @@ static void allow_maximum_power(struct thermal_zone_device *tz, bool update)
{ {
struct thermal_instance *instance; struct thermal_instance *instance;
struct power_allocator_params *params = tz->governor_data; struct power_allocator_params *params = tz->governor_data;
const struct thermal_trip *trip_max_desired_temperature =
&tz->trips[params->trip_max_desired_temperature];
u32 req_power; u32 req_power;
list_for_each_entry(instance, &tz->thermal_instances, tz_node) { list_for_each_entry(instance, &tz->thermal_instances, tz_node) {
struct thermal_cooling_device *cdev = instance->cdev; struct thermal_cooling_device *cdev = instance->cdev;
if ((instance->trip != params->trip_max_desired_temperature) || if ((instance->trip != trip_max_desired_temperature) ||
(!cdev_is_power_actor(instance->cdev))) (!cdev_is_power_actor(instance->cdev)))
continue; continue;
......
...@@ -81,26 +81,24 @@ static void update_passive_instance(struct thermal_zone_device *tz, ...@@ -81,26 +81,24 @@ static void update_passive_instance(struct thermal_zone_device *tz,
static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip_id) static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip_id)
{ {
const struct thermal_trip *trip = &tz->trips[trip_id];
enum thermal_trend trend; enum thermal_trend trend;
struct thermal_instance *instance; struct thermal_instance *instance;
struct thermal_trip trip;
bool throttle = false; bool throttle = false;
int old_target; int old_target;
__thermal_zone_get_trip(tz, trip_id, &trip);
trend = get_tz_trend(tz, trip_id); trend = get_tz_trend(tz, trip_id);
if (tz->temperature >= trip.temperature) { if (tz->temperature >= trip->temperature) {
throttle = true; throttle = true;
trace_thermal_zone_trip(tz, trip_id, trip.type); trace_thermal_zone_trip(tz, trip_id, trip->type);
} }
dev_dbg(&tz->device, "Trip%d[type=%d,temp=%d]:trend=%d,throttle=%d\n", dev_dbg(&tz->device, "Trip%d[type=%d,temp=%d]:trend=%d,throttle=%d\n",
trip_id, trip.type, trip.temperature, trend, throttle); trip_id, trip->type, trip->temperature, trend, throttle);
list_for_each_entry(instance, &tz->thermal_instances, tz_node) { list_for_each_entry(instance, &tz->thermal_instances, tz_node) {
if (instance->trip != trip_id) if (instance->trip != trip)
continue; continue;
old_target = instance->target; old_target = instance->target;
...@@ -114,11 +112,11 @@ static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip_id ...@@ -114,11 +112,11 @@ static void thermal_zone_trip_update(struct thermal_zone_device *tz, int trip_id
/* 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)
update_passive_instance(tz, trip.type, 1); update_passive_instance(tz, trip->type, 1);
/* Deactivate a passive thermal instance */ /* Deactivate a passive thermal instance */
else if (old_target != THERMAL_NO_TARGET && else if (old_target != THERMAL_NO_TARGET &&
instance->target == THERMAL_NO_TARGET) instance->target == THERMAL_NO_TARGET)
update_passive_instance(tz, trip.type, -1); update_passive_instance(tz, trip->type, -1);
instance->initialized = true; instance->initialized = true;
mutex_lock(&instance->cdev->lock); mutex_lock(&instance->cdev->lock);
......
...@@ -347,10 +347,6 @@ static void handle_thermal_trip(struct thermal_zone_device *tz, int trip_id) ...@@ -347,10 +347,6 @@ 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 */
if (test_bit(trip_id, &tz->trips_disabled))
return;
__thermal_zone_get_trip(tz, trip_id, &trip); __thermal_zone_get_trip(tz, trip_id, &trip);
if (trip.temperature == THERMAL_TEMP_INVALID) if (trip.temperature == THERMAL_TEMP_INVALID)
...@@ -604,10 +600,9 @@ struct thermal_zone_device *thermal_zone_get_by_id(int id) ...@@ -604,10 +600,9 @@ struct thermal_zone_device *thermal_zone_get_by_id(int id)
*/ */
/** /**
* thermal_zone_bind_cooling_device() - bind a cooling device to a thermal zone * thermal_bind_cdev_to_trip - bind a cooling device to a thermal zone
* @tz: pointer to struct thermal_zone_device * @tz: pointer to struct thermal_zone_device
* @trip: indicates which trip point the cooling devices is * @trip: trip point the cooling devices is associated with in this zone.
* associated with in this thermal zone.
* @cdev: pointer to struct thermal_cooling_device * @cdev: pointer to struct thermal_cooling_device
* @upper: the Maximum cooling state for this trip point. * @upper: the Maximum cooling state for this trip point.
* THERMAL_NO_LIMIT means no upper limit, * THERMAL_NO_LIMIT means no upper limit,
...@@ -625,8 +620,8 @@ struct thermal_zone_device *thermal_zone_get_by_id(int id) ...@@ -625,8 +620,8 @@ struct thermal_zone_device *thermal_zone_get_by_id(int id)
* *
* Return: 0 on success, the proper error value otherwise. * Return: 0 on success, the proper error value otherwise.
*/ */
int thermal_zone_bind_cooling_device(struct thermal_zone_device *tz, int thermal_bind_cdev_to_trip(struct thermal_zone_device *tz,
int trip, const struct thermal_trip *trip,
struct thermal_cooling_device *cdev, struct thermal_cooling_device *cdev,
unsigned long upper, unsigned long lower, unsigned long upper, unsigned long lower,
unsigned int weight) unsigned int weight)
...@@ -638,9 +633,6 @@ int thermal_zone_bind_cooling_device(struct thermal_zone_device *tz, ...@@ -638,9 +633,6 @@ int thermal_zone_bind_cooling_device(struct thermal_zone_device *tz,
bool upper_no_limit; bool upper_no_limit;
int result; int result;
if (trip >= tz->num_trips || trip < 0)
return -EINVAL;
list_for_each_entry(pos1, &thermal_tz_list, node) { list_for_each_entry(pos1, &thermal_tz_list, node) {
if (pos1 == tz) if (pos1 == tz)
break; break;
...@@ -737,14 +729,26 @@ int thermal_zone_bind_cooling_device(struct thermal_zone_device *tz, ...@@ -737,14 +729,26 @@ int thermal_zone_bind_cooling_device(struct thermal_zone_device *tz,
kfree(dev); kfree(dev);
return result; return result;
} }
EXPORT_SYMBOL_GPL(thermal_bind_cdev_to_trip);
int thermal_zone_bind_cooling_device(struct thermal_zone_device *tz,
int trip_index,
struct thermal_cooling_device *cdev,
unsigned long upper, unsigned long lower,
unsigned int weight)
{
if (trip_index < 0 || trip_index >= tz->num_trips)
return -EINVAL;
return thermal_bind_cdev_to_trip(tz, &tz->trips[trip_index], cdev,
upper, lower, weight);
}
EXPORT_SYMBOL_GPL(thermal_zone_bind_cooling_device); EXPORT_SYMBOL_GPL(thermal_zone_bind_cooling_device);
/** /**
* thermal_zone_unbind_cooling_device() - unbind a cooling device from a * thermal_unbind_cdev_from_trip - unbind a cooling device from a thermal zone.
* thermal zone.
* @tz: pointer to a struct thermal_zone_device. * @tz: pointer to a struct thermal_zone_device.
* @trip: indicates which trip point the cooling devices is * @trip: trip point the cooling devices is associated with in this zone.
* associated with in this thermal zone.
* @cdev: pointer to a struct thermal_cooling_device. * @cdev: pointer to a struct thermal_cooling_device.
* *
* This interface function unbind a thermal cooling device from the certain * This interface function unbind a thermal cooling device from the certain
...@@ -753,9 +757,9 @@ EXPORT_SYMBOL_GPL(thermal_zone_bind_cooling_device); ...@@ -753,9 +757,9 @@ EXPORT_SYMBOL_GPL(thermal_zone_bind_cooling_device);
* *
* Return: 0 on success, the proper error value otherwise. * Return: 0 on success, the proper error value otherwise.
*/ */
int thermal_zone_unbind_cooling_device(struct thermal_zone_device *tz, int thermal_unbind_cdev_from_trip(struct thermal_zone_device *tz,
int trip, const struct thermal_trip *trip,
struct thermal_cooling_device *cdev) struct thermal_cooling_device *cdev)
{ {
struct thermal_instance *pos, *next; struct thermal_instance *pos, *next;
...@@ -783,6 +787,17 @@ int thermal_zone_unbind_cooling_device(struct thermal_zone_device *tz, ...@@ -783,6 +787,17 @@ int thermal_zone_unbind_cooling_device(struct thermal_zone_device *tz,
kfree(pos); kfree(pos);
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(thermal_unbind_cdev_from_trip);
int thermal_zone_unbind_cooling_device(struct thermal_zone_device *tz,
int trip_index,
struct thermal_cooling_device *cdev)
{
if (trip_index < 0 || trip_index >= tz->num_trips)
return -EINVAL;
return thermal_unbind_cdev_from_trip(tz, &tz->trips[trip_index], cdev);
}
EXPORT_SYMBOL_GPL(thermal_zone_unbind_cooling_device); EXPORT_SYMBOL_GPL(thermal_zone_unbind_cooling_device);
static void thermal_release(struct device *dev) static void thermal_release(struct device *dev)
...@@ -1231,7 +1246,6 @@ thermal_zone_device_register_with_trips(const char *type, struct thermal_trip *t ...@@ -1231,7 +1246,6 @@ thermal_zone_device_register_with_trips(const char *type, struct thermal_trip *t
struct thermal_zone_device *tz; struct thermal_zone_device *tz;
int id; int id;
int result; int result;
int count;
struct thermal_governor *governor; struct thermal_governor *governor;
if (!type || strlen(type) == 0) { if (!type || strlen(type) == 0) {
...@@ -1328,14 +1342,6 @@ thermal_zone_device_register_with_trips(const char *type, struct thermal_trip *t ...@@ -1328,14 +1342,6 @@ thermal_zone_device_register_with_trips(const char *type, struct thermal_trip *t
if (result) if (result)
goto release_device; goto release_device;
for (count = 0; count < num_trips; count++) {
struct thermal_trip trip;
result = thermal_zone_get_trip(tz, count, &trip);
if (result || !trip.temperature)
set_bit(count, &tz->trips_disabled);
}
/* Update 'this' zone's governor information */ /* Update 'this' zone's governor information */
mutex_lock(&thermal_governor_lock); mutex_lock(&thermal_governor_lock);
......
...@@ -87,7 +87,7 @@ struct thermal_instance { ...@@ -87,7 +87,7 @@ struct thermal_instance {
char name[THERMAL_NAME_LENGTH]; char name[THERMAL_NAME_LENGTH];
struct thermal_zone_device *tz; struct thermal_zone_device *tz;
struct thermal_cooling_device *cdev; struct thermal_cooling_device *cdev;
int trip; const struct thermal_trip *trip;
bool initialized; bool initialized;
unsigned long upper; /* Highest cooling state for this trip point */ unsigned long upper; /* Highest cooling state for this trip point */
unsigned long lower; /* Lowest cooling state for this trip point */ unsigned long lower; /* Lowest cooling state for this trip point */
...@@ -119,6 +119,8 @@ void __thermal_zone_device_update(struct thermal_zone_device *tz, ...@@ -119,6 +119,8 @@ void __thermal_zone_device_update(struct thermal_zone_device *tz,
void __thermal_zone_set_trips(struct thermal_zone_device *tz); void __thermal_zone_set_trips(struct thermal_zone_device *tz);
int __thermal_zone_get_trip(struct thermal_zone_device *tz, int trip_id, int __thermal_zone_get_trip(struct thermal_zone_device *tz, int trip_id,
struct thermal_trip *trip); struct thermal_trip *trip);
int thermal_zone_trip_id(struct thermal_zone_device *tz,
const struct thermal_trip *trip);
int __thermal_zone_get_temp(struct thermal_zone_device *tz, int *temp); int __thermal_zone_get_temp(struct thermal_zone_device *tz, int *temp);
/* sysfs I/F */ /* sysfs I/F */
......
...@@ -42,14 +42,17 @@ int get_tz_trend(struct thermal_zone_device *tz, int trip_index) ...@@ -42,14 +42,17 @@ int get_tz_trend(struct thermal_zone_device *tz, int trip_index)
struct thermal_instance * struct thermal_instance *
get_thermal_instance(struct thermal_zone_device *tz, get_thermal_instance(struct thermal_zone_device *tz,
struct thermal_cooling_device *cdev, int trip) struct thermal_cooling_device *cdev, int trip_index)
{ {
struct thermal_instance *pos = NULL; struct thermal_instance *pos = NULL;
struct thermal_instance *target_instance = NULL; struct thermal_instance *target_instance = NULL;
const struct thermal_trip *trip;
mutex_lock(&tz->lock); mutex_lock(&tz->lock);
mutex_lock(&cdev->lock); mutex_lock(&cdev->lock);
trip = &tz->trips[trip_index];
list_for_each_entry(pos, &tz->thermal_instances, tz_node) { list_for_each_entry(pos, &tz->thermal_instances, tz_node) {
if (pos->tz == tz && pos->trip == trip && pos->cdev == cdev) { if (pos->tz == tz && pos->trip == trip && pos->cdev == cdev) {
target_instance = pos; target_instance = pos;
......
...@@ -943,7 +943,8 @@ trip_point_show(struct device *dev, struct device_attribute *attr, char *buf) ...@@ -943,7 +943,8 @@ trip_point_show(struct device *dev, struct device_attribute *attr, char *buf)
instance = instance =
container_of(attr, struct thermal_instance, attr); container_of(attr, struct thermal_instance, attr);
return sprintf(buf, "%d\n", instance->trip); return sprintf(buf, "%d\n",
thermal_zone_trip_id(instance->tz, instance->trip));
} }
ssize_t ssize_t
......
...@@ -17,9 +17,6 @@ int for_each_thermal_trip(struct thermal_zone_device *tz, ...@@ -17,9 +17,6 @@ int for_each_thermal_trip(struct thermal_zone_device *tz,
lockdep_assert_held(&tz->lock); lockdep_assert_held(&tz->lock);
if (!tz->trips)
return -ENODATA;
for (i = 0; i < tz->num_trips; i++) { for (i = 0; i < tz->num_trips; i++) {
ret = cb(&tz->trips[i], data); ret = cb(&tz->trips[i], data);
if (ret) if (ret)
...@@ -160,3 +157,18 @@ int thermal_zone_set_trip(struct thermal_zone_device *tz, int trip_id, ...@@ -160,3 +157,18 @@ int thermal_zone_set_trip(struct thermal_zone_device *tz, int trip_id,
return 0; return 0;
} }
int thermal_zone_trip_id(struct thermal_zone_device *tz,
const struct thermal_trip *trip)
{
int i;
lockdep_assert_held(&tz->lock);
for (i = 0; i < tz->num_trips; i++) {
if (&tz->trips[i] == trip)
return i;
}
return -ENODATA;
}
...@@ -122,7 +122,6 @@ struct thermal_cooling_device { ...@@ -122,7 +122,6 @@ struct thermal_cooling_device {
* @devdata: private pointer for device private data * @devdata: private pointer for device private data
* @trips: an array of struct thermal_trip * @trips: an array of struct thermal_trip
* @num_trips: number of trip points the thermal zone supports * @num_trips: number of trip points the thermal zone supports
* @trips_disabled; bitmap for disabled trips
* @passive_delay_jiffies: number of jiffies to wait between polls when * @passive_delay_jiffies: number of jiffies to wait between polls when
* performing passive cooling. * performing passive cooling.
* @polling_delay_jiffies: number of jiffies to wait between polls when * @polling_delay_jiffies: number of jiffies to wait between polls when
...@@ -163,7 +162,6 @@ struct thermal_zone_device { ...@@ -163,7 +162,6 @@ struct thermal_zone_device {
void *devdata; void *devdata;
struct thermal_trip *trips; struct thermal_trip *trips;
int num_trips; int num_trips;
unsigned long trips_disabled; /* bitmap for disabled trips */
unsigned long passive_delay_jiffies; unsigned long passive_delay_jiffies;
unsigned long polling_delay_jiffies; unsigned long polling_delay_jiffies;
int temperature; int temperature;
...@@ -322,10 +320,18 @@ const char *thermal_zone_device_type(struct thermal_zone_device *tzd); ...@@ -322,10 +320,18 @@ const char *thermal_zone_device_type(struct thermal_zone_device *tzd);
int thermal_zone_device_id(struct thermal_zone_device *tzd); int thermal_zone_device_id(struct thermal_zone_device *tzd);
struct device *thermal_zone_device(struct thermal_zone_device *tzd); struct device *thermal_zone_device(struct thermal_zone_device *tzd);
int thermal_bind_cdev_to_trip(struct thermal_zone_device *tz,
const struct thermal_trip *trip,
struct thermal_cooling_device *cdev,
unsigned long upper, unsigned long lower,
unsigned int weight);
int thermal_zone_bind_cooling_device(struct thermal_zone_device *, int, int thermal_zone_bind_cooling_device(struct thermal_zone_device *, int,
struct thermal_cooling_device *, struct thermal_cooling_device *,
unsigned long, unsigned long, unsigned long, unsigned long,
unsigned int); unsigned int);
int thermal_unbind_cdev_from_trip(struct thermal_zone_device *tz,
const struct thermal_trip *trip,
struct thermal_cooling_device *cdev);
int thermal_zone_unbind_cooling_device(struct thermal_zone_device *, int, 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 *,
......
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