From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> Introduce a helper routine called thermal_zone_update_trip_temp() that can be used to update a trip point's temperature with the help of a pointer to local data associated with that trip point provided by the thermal driver that created it. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> --- New patch in v4. --- drivers/thermal/thermal_trip.c | 37 +++++++++++++++++++++++++++++++++++++ include/linux/thermal.h | 4 ++++ 2 files changed, 41 insertions(+) Index: linux-pm/drivers/thermal/thermal_trip.c =================================================================== --- linux-pm.orig/drivers/thermal/thermal_trip.c +++ linux-pm/drivers/thermal/thermal_trip.c @@ -180,3 +180,40 @@ int thermal_zone_set_trip(struct thermal return 0; } + +/** + * thermal_zone_update_trip_temp - Update the trip point temperature. + * @tz: Thermal zone. + * @trip_priv: Trip tag. + * @temp: New trip temperature. + * + * This only works for thermal zones using trip tables and its caller must + * ensure that the zone lock is held before using it. + * + * @trip_priv is expected to be the value that has been stored by the driver + * in the struct thermal_trip representing the trip point in question, so it + * can be matched against the value of the priv field in that structure. + * + * If @trip_priv does not match any trip point in the trip table of @tz, + * nothing happens. + */ +void thermal_zone_update_trip_temp(struct thermal_zone_device *tz, + void *trip_priv, int temperature) +{ + int i; + + lockdep_assert_held(&tz->lock); + + if (!tz->trips || !trip_priv) + return; + + for (i = 0; i < tz->num_trips; i++) { + struct thermal_trip *trip = &tz->trips[i]; + + if (trip->priv == trip_priv) { + trip->temperature = temperature; + return; + } + } +} +EXPORT_SYMBOL_GPL(thermal_zone_update_trip_temp); Index: linux-pm/include/linux/thermal.h =================================================================== --- linux-pm.orig/include/linux/thermal.h +++ linux-pm/include/linux/thermal.h @@ -286,9 +286,13 @@ int __thermal_zone_get_trip(struct therm struct thermal_trip *trip); int thermal_zone_get_trip(struct thermal_zone_device *tz, int trip_id, struct thermal_trip *trip); +void thermal_zone_update_trip_temp(struct thermal_zone_device *tz, + void *trip_priv, int temperature); int thermal_zone_set_trip(struct thermal_zone_device *tz, int trip_id, const struct thermal_trip *trip); +void thermal_zone_update_trip_temp(struct thermal_zone_device *tz, + void *trip_priv, int temperature); int thermal_zone_get_num_trips(struct thermal_zone_device *tz);