Re: [PATCH v2 01/17] thermal: add thermal_zone_set_mode() helper

From: Zhang Rui
Date: Tue Nov 06 2018 - 03:12:01 EST


On ä, 2018-10-17 at 17:52 +0200, Bartlomiej Zolnierkiewicz wrote:
> In order to remove the code duplication and prepare for further
> changes:
>
> * Add thermal_zone_set_mode() helper. Then update core code and
> Â drivers to use it.
>
> There should be no functional changes caused by this patch.
>
> Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@xxxxxxxxxxx>
> ---
> Âdrivers/thermal/hisi_thermal.cÂÂÂÂÂ| 14 ++------------
> Âdrivers/thermal/of-thermal.cÂÂÂÂÂÂÂ|ÂÂ3 ++-
> Âdrivers/thermal/rockchip_thermal.c | 26 +++++++++-----------------
> Âdrivers/thermal/thermal_helpers.cÂÂ| 14 ++++++++++++++
> Âdrivers/thermal/thermal_sysfs.cÂÂÂÂ|ÂÂ8 +++++---
> Âinclude/linux/thermal.hÂÂÂÂÂÂÂÂÂÂÂÂ|ÂÂ5 +++++
> Â6 files changed, 37 insertions(+), 33 deletions(-)
>
>Â
> Â
> diff --git a/drivers/thermal/thermal_helpers.c
> b/drivers/thermal/thermal_helpers.c
> index 2ba756a..b18cee2 100644
> --- a/drivers/thermal/thermal_helpers.c
> +++ b/drivers/thermal/thermal_helpers.c
> @@ -224,3 +224,17 @@ int thermal_zone_get_offset(struct
> thermal_zone_device *tz)
> Â return 0;
> Â}
> ÂEXPORT_SYMBOL_GPL(thermal_zone_get_offset);
> +
> +/**
> + * thermal_zone_set_mode() - sets mode of thermal zone device
> + * @tz: a valid pointer to a struct thermal_zone_device
> + * @mode: mode to be set
> + *
> + * Return: On success returns 0, an error code otherwise.
> + */
> +int thermal_zone_set_mode(struct thermal_zone_device *tz,
> + ÂÂenum thermal_device_mode mode)
> +{
> + return tz->ops->set_mode(tz, mode);

better to check tz->ops->set_mode first.

thanks,
rui
> +}
> +EXPORT_SYMBOL_GPL(thermal_zone_set_mode);
> diff --git a/drivers/thermal/thermal_sysfs.c
> b/drivers/thermal/thermal_sysfs.c
> index 2241cea..2e9e762 100644
> --- a/drivers/thermal/thermal_sysfs.c
> +++ b/drivers/thermal/thermal_sysfs.c
> @@ -69,17 +69,19 @@
> Â{
> Â struct thermal_zone_device *tz = to_thermal_zone(dev);
> Â int result;
> + enum thermal_device_mode mode;
> Â
> Â if (!tz->ops->set_mode)
> Â return -EPERM;
> Â
> Â if (!strncmp(buf, "enabled", sizeof("enabled") - 1))
> - result = tz->ops->set_mode(tz,
> THERMAL_DEVICE_ENABLED);
> + mode = THERMAL_DEVICE_ENABLED;
> Â else if (!strncmp(buf, "disabled", sizeof("disabled") - 1))
> - result = tz->ops->set_mode(tz,
> THERMAL_DEVICE_DISABLED);
> + mode = THERMAL_DEVICE_DISABLED;
> Â else
> - result = -EINVAL;
> + return -EINVAL;
> Â
> + result = thermal_zone_set_mode(tz, mode);
> Â if (result)
> Â return result;
> Â
> diff --git a/include/linux/thermal.h b/include/linux/thermal.h
> index 5f4705f..9d21fd1 100644
> --- a/include/linux/thermal.h
> +++ b/include/linux/thermal.h
> @@ -452,6 +452,8 @@ struct thermal_cooling_device *
> Âint thermal_zone_get_temp(struct thermal_zone_device *tz, int
> *temp);
> Âint thermal_zone_get_slope(struct thermal_zone_device *tz);
> Âint thermal_zone_get_offset(struct thermal_zone_device *tz);
> +int thermal_zone_set_mode(struct thermal_zone_device *tz,
> + ÂÂenum thermal_device_mode mode);
> Â
> Âint get_tz_trend(struct thermal_zone_device *, int);
> Âstruct thermal_instance *get_thermal_instance(struct
> thermal_zone_device *,
> @@ -518,6 +520,9 @@ static inline int thermal_zone_get_slope(
> Âstatic inline int thermal_zone_get_offset(
> Â struct thermal_zone_device *tz)
> Â{ return -ENODEV; }
> +static inline int thermal_zone_set_mode(
> + struct thermal_zone_device *tz, enum
> thermal_device_mode mode)
> +{ return -ENODEV; }
> Âstatic inline int get_tz_trend(struct thermal_zone_device *tz, int
> trip)
> Â{ return -ENODEV; }
> Âstatic inline struct thermal_instance *