Hi Rafael, On 8/12/24 4:19 PM, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> > > Make the acerhdf driver use the .should_bind() thermal zone > callback to provide the thermal core with the information on whether or > not to bind the given cooling device to the given trip point in the > given thermal zone. If it returns 'true', the thermal core will bind > the cooling device to the trip and the corresponding unbinding will be > taken care of automatically by the core on the removal of the involved > thermal zone or cooling device. > > The previously existing acerhdf_bind() function bound cooling devices > to thermal trip point 0 only, so the new callback needs to return 'true' > for trip point 0. However, it is straightforward to observe that trip > point 0 is an active trip point and the only other trip point in the > driver's thermal zone is a critical one, so it is sufficient to return > 'true' from that callback if the type of the given trip point is > THERMAL_TRIP_ACTIVE. > > Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> I believe it is best to merge this through the thermal(zone0 subsystem together with the rest of the series: Acked-by: Hans de Goede <hdegoede@xxxxxxxxxx> Regards, Hans > --- > > v1 -> v2: No changes > > This patch only depends on patch [08/17] introducing .should_bind(): > > https://lore.kernel.org/linux-pm/2696117.X9hSmTKtgW@xxxxxxxxxxxxx/ > > --- > drivers/platform/x86/acerhdf.c | 33 ++++++--------------------------- > 1 file changed, 6 insertions(+), 27 deletions(-) > > Index: linux-pm/drivers/platform/x86/acerhdf.c > =================================================================== > --- linux-pm.orig/drivers/platform/x86/acerhdf.c > +++ linux-pm/drivers/platform/x86/acerhdf.c > @@ -378,33 +378,13 @@ static int acerhdf_get_ec_temp(struct th > return 0; > } > > -static int acerhdf_bind(struct thermal_zone_device *thermal, > - struct thermal_cooling_device *cdev) > +static bool acerhdf_should_bind(struct thermal_zone_device *thermal, > + const struct thermal_trip *trip, > + struct thermal_cooling_device *cdev, > + struct cooling_spec *c) > { > /* if the cooling device is the one from acerhdf bind it */ > - if (cdev != cl_dev) > - return 0; > - > - if (thermal_zone_bind_cooling_device(thermal, 0, cdev, > - THERMAL_NO_LIMIT, THERMAL_NO_LIMIT, > - THERMAL_WEIGHT_DEFAULT)) { > - pr_err("error binding cooling dev\n"); > - return -EINVAL; > - } > - return 0; > -} > - > -static int acerhdf_unbind(struct thermal_zone_device *thermal, > - struct thermal_cooling_device *cdev) > -{ > - if (cdev != cl_dev) > - return 0; > - > - if (thermal_zone_unbind_cooling_device(thermal, 0, cdev)) { > - pr_err("error unbinding cooling dev\n"); > - return -EINVAL; > - } > - return 0; > + return cdev == cl_dev && trip->type == THERMAL_TRIP_ACTIVE; > } > > static inline void acerhdf_revert_to_bios_mode(void) > @@ -447,8 +427,7 @@ static int acerhdf_get_crit_temp(struct > > /* bind callback functions to thermalzone */ > static struct thermal_zone_device_ops acerhdf_dev_ops = { > - .bind = acerhdf_bind, > - .unbind = acerhdf_unbind, > + .should_bind = acerhdf_should_bind, > .get_temp = acerhdf_get_ec_temp, > .change_mode = acerhdf_change_mode, > .get_crit_temp = acerhdf_get_crit_temp, > > > >