Message ID | 20220710212423.681301-18-daniel.lezcano@linexp.org |
---|---|
State | Superseded |
Headers | show |
Series | New thermal OF code | expand |
Hi Niklas, On 19/07/2022 11:10, Niklas Söderlund wrote: > Hi Daniel, > > Thanks for your work. > > On 2022-07-10 23:24:07 +0200, Daniel Lezcano wrote: >> The thermal OF code has a new API allowing to migrate the OF >> initialization to a simpler approach. >> >> Use this new API. > > I tested this together with the series it depends on and while > temperature monitoring seems to work fine it breaks the emul_temp > interface (/sys/class/thermal/thermal_zone2/emul_temp). > > Before this change I can write a temperature to this file and have it > trigger actions, in my test-case changing the cooling state, which I > observe in /sys/class/thermal/cooling_device0/cur_state. > > Likewise before this change I could trip the critical trip-point that > would power off the board using the emul_temp interface, this too no > longer works, > > echo 120000 > /sys/class/thermal/thermal_zone2/emul_temp > > Is this an intention change of the new API? Absolutely not :) Thanks for taking the time to test and report back the issue. I'll investigate that. -- D.
On 25/07/2022 12:38, Niklas Söderlund wrote: > Hi Daniel, > > On 2022-07-25 12:00:30 +0200, Daniel Lezcano wrote: >> >> Hi Niklas, >> >> On 25/07/2022 01:28, Niklas Söderlund wrote: >>> Hi (again) Daniel, >>> >>> I figured it out, the thermal zone is disabled after this change. For >>> both rcar sensors with the new API thermal_zone_device_enable() is never >>> called. >>> >>> In the old API the zone is enabled in the call chain of >>> devm_thermal_zone_of_sensor_register(). While after this change the zone >>> is not enabled by the core when calling thermal_zone_device_enable(). >>> >>> If I add a call to thermal_zone_device_enable() together with the new >>> API everything works as before. But I'm not sure if the correct solution >>> is to add a call to thermal_zone_device_enable() in the sensor drivers >>> or in the call chain of the new API? >>> >>> On 2022-07-25 00:39:10 +0200, Niklas Söderlund wrote: >>>> Hi Daniel, >>>> >>>> I tested your branch, unfortunately with the same result for >>>> rcar_gen3_thermal. Manipulation of emul_temp file do not trigger >>>> actions. >> >> Thanks for investigating, I updated the branch. Does it fix the issue ? > > I tested the branch with the head [1] and it restores the expected > operation for both rcar_gen3_thermal and rcar_thermal sensors. > > Thanks for the fix, with this change I'm happy with this new API. > > 1. commit e9b792a531c10756 ("thermal/of: Remove old OF code") Thanks !!
diff --git a/drivers/thermal/rcar_gen3_thermal.c b/drivers/thermal/rcar_gen3_thermal.c index 43eb25b167bc..29946114a8f9 100644 --- a/drivers/thermal/rcar_gen3_thermal.c +++ b/drivers/thermal/rcar_gen3_thermal.c @@ -164,9 +164,9 @@ static int rcar_gen3_thermal_round(int temp) return result * RCAR3_THERMAL_GRAN; } -static int rcar_gen3_thermal_get_temp(void *devdata, int *temp) +static int rcar_gen3_thermal_get_temp(struct thermal_zone_device *tz, int *temp) { - struct rcar_gen3_thermal_tsc *tsc = devdata; + struct rcar_gen3_thermal_tsc *tsc = tz->devdata; int mcelsius, val; int reg; @@ -203,9 +203,9 @@ static int rcar_gen3_thermal_mcelsius_to_temp(struct rcar_gen3_thermal_tsc *tsc, return INT_FIXPT(val); } -static int rcar_gen3_thermal_set_trips(void *devdata, int low, int high) +static int rcar_gen3_thermal_set_trips(struct thermal_zone_device *tz, int low, int high) { - struct rcar_gen3_thermal_tsc *tsc = devdata; + struct rcar_gen3_thermal_tsc *tsc = tz->devdata; u32 irqmsk = 0; if (low != -INT_MAX) { @@ -225,7 +225,7 @@ static int rcar_gen3_thermal_set_trips(void *devdata, int low, int high) return 0; } -static struct thermal_zone_of_device_ops rcar_gen3_tz_of_ops = { +static struct thermal_zone_device_ops rcar_gen3_tz_of_ops = { .get_temp = rcar_gen3_thermal_get_temp, .set_trips = rcar_gen3_thermal_set_trips, }; @@ -504,8 +504,8 @@ static int rcar_gen3_thermal_probe(struct platform_device *pdev) for (i = 0; i < priv->num_tscs; i++) { struct rcar_gen3_thermal_tsc *tsc = priv->tscs[i]; - zone = devm_thermal_zone_of_sensor_register(dev, i, tsc, - &rcar_gen3_tz_of_ops); + zone = devm_thermal_of_zone_register(dev, i, tsc, + &rcar_gen3_tz_of_ops); if (IS_ERR(zone)) { dev_err(dev, "Can't register thermal zone\n"); ret = PTR_ERR(zone); @@ -556,7 +556,7 @@ static int __maybe_unused rcar_gen3_thermal_resume(struct device *dev) priv->thermal_init(tsc); if (zone->ops->set_trips) - rcar_gen3_thermal_set_trips(tsc, zone->prev_low_trip, + rcar_gen3_thermal_set_trips(zone, zone->prev_low_trip, zone->prev_high_trip); } diff --git a/drivers/thermal/rcar_thermal.c b/drivers/thermal/rcar_thermal.c index 1d729ed4d685..4df42d70d867 100644 --- a/drivers/thermal/rcar_thermal.c +++ b/drivers/thermal/rcar_thermal.c @@ -271,13 +271,6 @@ static int rcar_thermal_get_current_temp(struct rcar_thermal_priv *priv, return 0; } -static int rcar_thermal_of_get_temp(void *data, int *temp) -{ - struct rcar_thermal_priv *priv = data; - - return rcar_thermal_get_current_temp(priv, temp); -} - static int rcar_thermal_get_temp(struct thermal_zone_device *zone, int *temp) { struct rcar_thermal_priv *priv = rcar_zone_to_priv(zone); @@ -323,8 +316,8 @@ static int rcar_thermal_get_trip_temp(struct thermal_zone_device *zone, return 0; } -static const struct thermal_zone_of_device_ops rcar_thermal_zone_of_ops = { - .get_temp = rcar_thermal_of_get_temp, +static struct thermal_zone_device_ops rcar_thermal_zone_of_ops = { + .get_temp = rcar_thermal_get_temp, }; static struct thermal_zone_device_ops rcar_thermal_zone_ops = { @@ -534,7 +527,7 @@ static int rcar_thermal_probe(struct platform_device *pdev) goto error_unregister; if (chip->use_of_thermal) { - priv->zone = devm_thermal_zone_of_sensor_register( + priv->zone = devm_thermal_of_zone_register( dev, i, priv, &rcar_thermal_zone_of_ops); } else {
The thermal OF code has a new API allowing to migrate the OF initialization to a simpler approach. Use this new API. Signed-off-by: Daniel Lezcano <daniel.lezcano@linexp.org> --- drivers/thermal/rcar_gen3_thermal.c | 16 ++++++++-------- drivers/thermal/rcar_thermal.c | 13 +++---------- 2 files changed, 11 insertions(+), 18 deletions(-)