Skip to content

Commit

Permalink
thermal: helpers: Introduce thermal_trip_is_bound_to_cdev()
Browse files Browse the repository at this point in the history
Introduce a new helper function thermal_trip_is_bound_to_cdev() for
checking whether or not a given trip point has been bound to a given
cooling device.

The primary user of it will be the Tegra thermal driver.

Signed-off-by: Rafael J. Wysocki <[email protected]>
Link: https://patch.msgid.link/[email protected]
  • Loading branch information
rafaeljw committed Jul 9, 2024
1 parent d05374d commit 463b86f
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 12 deletions.
47 changes: 35 additions & 12 deletions drivers/thermal/thermal_helpers.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,30 +39,53 @@ int get_tz_trend(struct thermal_zone_device *tz, const struct thermal_trip *trip
return trend;
}

static struct thermal_instance *get_instance(struct thermal_zone_device *tz,
struct thermal_cooling_device *cdev,
const struct thermal_trip *trip)
{
struct thermal_instance *ti;

list_for_each_entry(ti, &tz->thermal_instances, tz_node) {
if (ti->trip == trip && ti->cdev == cdev)
return ti;
}

return NULL;
}

bool thermal_trip_is_bound_to_cdev(struct thermal_zone_device *tz,
const struct thermal_trip *trip,
struct thermal_cooling_device *cdev)
{
bool ret;

mutex_lock(&tz->lock);
mutex_lock(&cdev->lock);

ret = !!get_instance(tz, cdev, trip);

mutex_unlock(&cdev->lock);
mutex_unlock(&tz->lock);

return ret;
}
EXPORT_SYMBOL_GPL(thermal_trip_is_bound_to_cdev);

struct thermal_instance *
get_thermal_instance(struct thermal_zone_device *tz,
struct thermal_cooling_device *cdev, int trip_index)
{
struct thermal_instance *pos = NULL;
struct thermal_instance *target_instance = NULL;
const struct thermal_trip *trip;
struct thermal_instance *ti;

mutex_lock(&tz->lock);
mutex_lock(&cdev->lock);

trip = &tz->trips[trip_index].trip;

list_for_each_entry(pos, &tz->thermal_instances, tz_node) {
if (pos->tz == tz && pos->trip == trip && pos->cdev == cdev) {
target_instance = pos;
break;
}
}
ti = get_instance(tz, cdev, &tz->trips[trip_index].trip);

mutex_unlock(&cdev->lock);
mutex_unlock(&tz->lock);

return target_instance;
return ti;
}
EXPORT_SYMBOL(get_thermal_instance);

Expand Down
3 changes: 3 additions & 0 deletions include/linux/thermal.h
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,9 @@ struct thermal_zone_device *thermal_zone_get_zone_by_name(const char *name);
int thermal_zone_get_temp(struct thermal_zone_device *tz, int *temp);
int thermal_zone_get_slope(struct thermal_zone_device *tz);
int thermal_zone_get_offset(struct thermal_zone_device *tz);
bool thermal_trip_is_bound_to_cdev(struct thermal_zone_device *tz,
const struct thermal_trip *trip,
struct thermal_cooling_device *cdev);

int thermal_zone_device_enable(struct thermal_zone_device *tz);
int thermal_zone_device_disable(struct thermal_zone_device *tz);
Expand Down

0 comments on commit 463b86f

Please sign in to comment.