Commit fc656fa1 authored by Daniel Lezcano's avatar Daniel Lezcano

thermal/drivers/netlink: Add the temperature when crossing a trip point

The slope of the temperature increase or decrease can be high and when
the temperature crosses the trip point, there could be a significant
difference between the trip temperature and the measured temperatures.

That forces the userspace to read the temperature back right after
receiving a trip violation notification.

In order to be efficient, give the temperature which resulted in the
trip violation.
Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
Acked-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Acked-by: default avatarRafael J. Wysocki <rafael@kernel.org>
Link: https://lore.kernel.org/r/20211001223323.1836640-1-daniel.lezcano@linaro.org
parent 69c560d2
...@@ -375,10 +375,12 @@ static void handle_thermal_trip(struct thermal_zone_device *tz, int trip) ...@@ -375,10 +375,12 @@ static void handle_thermal_trip(struct thermal_zone_device *tz, int trip)
if (tz->last_temperature != THERMAL_TEMP_INVALID) { if (tz->last_temperature != THERMAL_TEMP_INVALID) {
if (tz->last_temperature < trip_temp && if (tz->last_temperature < trip_temp &&
tz->temperature >= trip_temp) tz->temperature >= trip_temp)
thermal_notify_tz_trip_up(tz->id, trip); thermal_notify_tz_trip_up(tz->id, trip,
tz->temperature);
if (tz->last_temperature >= trip_temp && if (tz->last_temperature >= trip_temp &&
tz->temperature < (trip_temp - hyst)) tz->temperature < (trip_temp - hyst))
thermal_notify_tz_trip_down(tz->id, trip); thermal_notify_tz_trip_down(tz->id, trip,
tz->temperature);
} }
if (type == THERMAL_TRIP_CRITICAL || type == THERMAL_TRIP_HOT) if (type == THERMAL_TRIP_CRITICAL || type == THERMAL_TRIP_HOT)
......
...@@ -121,7 +121,8 @@ static int thermal_genl_event_tz(struct param *p) ...@@ -121,7 +121,8 @@ static int thermal_genl_event_tz(struct param *p)
static int thermal_genl_event_tz_trip_up(struct param *p) static int thermal_genl_event_tz_trip_up(struct param *p)
{ {
if (nla_put_u32(p->msg, THERMAL_GENL_ATTR_TZ_ID, p->tz_id) || if (nla_put_u32(p->msg, THERMAL_GENL_ATTR_TZ_ID, p->tz_id) ||
nla_put_u32(p->msg, THERMAL_GENL_ATTR_TZ_TRIP_ID, p->trip_id)) nla_put_u32(p->msg, THERMAL_GENL_ATTR_TZ_TRIP_ID, p->trip_id) ||
nla_put_u32(p->msg, THERMAL_GENL_ATTR_TZ_TEMP, p->temp))
return -EMSGSIZE; return -EMSGSIZE;
return 0; return 0;
...@@ -285,16 +286,16 @@ int thermal_notify_tz_disable(int tz_id) ...@@ -285,16 +286,16 @@ int thermal_notify_tz_disable(int tz_id)
return thermal_genl_send_event(THERMAL_GENL_EVENT_TZ_DISABLE, &p); return thermal_genl_send_event(THERMAL_GENL_EVENT_TZ_DISABLE, &p);
} }
int thermal_notify_tz_trip_down(int tz_id, int trip_id) int thermal_notify_tz_trip_down(int tz_id, int trip_id, int temp)
{ {
struct param p = { .tz_id = tz_id, .trip_id = trip_id }; struct param p = { .tz_id = tz_id, .trip_id = trip_id, .temp = temp };
return thermal_genl_send_event(THERMAL_GENL_EVENT_TZ_TRIP_DOWN, &p); return thermal_genl_send_event(THERMAL_GENL_EVENT_TZ_TRIP_DOWN, &p);
} }
int thermal_notify_tz_trip_up(int tz_id, int trip_id) int thermal_notify_tz_trip_up(int tz_id, int trip_id, int temp)
{ {
struct param p = { .tz_id = tz_id, .trip_id = trip_id }; struct param p = { .tz_id = tz_id, .trip_id = trip_id, .temp = temp };
return thermal_genl_send_event(THERMAL_GENL_EVENT_TZ_TRIP_UP, &p); return thermal_genl_send_event(THERMAL_GENL_EVENT_TZ_TRIP_UP, &p);
} }
......
...@@ -11,8 +11,8 @@ int thermal_notify_tz_create(int tz_id, const char *name); ...@@ -11,8 +11,8 @@ int thermal_notify_tz_create(int tz_id, const char *name);
int thermal_notify_tz_delete(int tz_id); int thermal_notify_tz_delete(int tz_id);
int thermal_notify_tz_enable(int tz_id); int thermal_notify_tz_enable(int tz_id);
int thermal_notify_tz_disable(int tz_id); int thermal_notify_tz_disable(int tz_id);
int thermal_notify_tz_trip_down(int tz_id, int id); int thermal_notify_tz_trip_down(int tz_id, int id, int temp);
int thermal_notify_tz_trip_up(int tz_id, int id); int thermal_notify_tz_trip_up(int tz_id, int id, int temp);
int thermal_notify_tz_trip_delete(int tz_id, int id); int thermal_notify_tz_trip_delete(int tz_id, int id);
int thermal_notify_tz_trip_add(int tz_id, int id, int type, int thermal_notify_tz_trip_add(int tz_id, int id, int type,
int temp, int hyst); int temp, int hyst);
...@@ -49,12 +49,12 @@ static inline int thermal_notify_tz_disable(int tz_id) ...@@ -49,12 +49,12 @@ static inline int thermal_notify_tz_disable(int tz_id)
return 0; return 0;
} }
static inline int thermal_notify_tz_trip_down(int tz_id, int id) static inline int thermal_notify_tz_trip_down(int tz_id, int id, int temp)
{ {
return 0; return 0;
} }
static inline int thermal_notify_tz_trip_up(int tz_id, int id) static inline int thermal_notify_tz_trip_up(int tz_id, int id, int temp)
{ {
return 0; return 0;
} }
......
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