[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <f47b7e17-7ec6-4c19-9db1-c1a2e1ad66b6@linaro.org>
Date: Mon, 7 Aug 2023 13:29:46 +0200
From: Daniel Lezcano <daniel.lezcano@...aro.org>
To: "Rafael J. Wysocki" <rjw@...ysocki.net>,
Linux ACPI <linux-acpi@...r.kernel.org>
Cc: LKML <linux-kernel@...r.kernel.org>,
Linux PM <linux-pm@...r.kernel.org>,
Michal Wilczynski <michal.wilczynski@...el.com>,
Zhang Rui <rui.zhang@...el.com>,
Srinivas Pandruvada <srinivas.pandruvada@...ux.intel.com>
Subject: Re: [PATCH v4 04/10] thermal: core: Add
thermal_zone_update_trip_temp() helper routine
On 04/08/2023 23:05, Rafael J. Wysocki wrote:
> From: Rafael J. Wysocki <rafael.j.wysocki@...el.com>
>
> 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@...el.com>
> ---
>
> 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);
This function would imply the comparator is always trip->priv but if we
want another comparison eg. trip->priv->id, that won't be possible.
Actually, I think you can reuse an existing function with a simple
change, for_each_thermal_trip() located in thermal_core.h.
The changes would be renaming it without the '__' prefix and moving it
in include/linux/thermal.h.
Then the comparison function and the temperature change can be an ACPI
driver specific callback passed as parameter to for_each_thermal_zone
> 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);
>
>
>
>
--
<http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs
Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook |
<http://twitter.com/#!/linaroorg> Twitter |
<http://www.linaro.org/linaro-blog/> Blog
Powered by blists - more mailing lists