Message ID | 20190401041418.5999-13-andrew.smirnov@gmail.com (mailing list archive) |
---|---|
State | Superseded, archived |
Delegated to: | Eduardo Valentin |
Headers | show |
Series | QorIQ TMU multi-sensor and HWMON support | expand |
On 01/04/2019 06:14, Andrey Smirnov wrote: > Add devres wrapper for thermal_add_hwmon_sysfs() to simplify driver > code. > > Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> > Cc: Chris Healy <cphealy@gmail.com> > Cc: Lucas Stach <l.stach@pengutronix.de> > Cc: Zhang Rui <rui.zhang@intel.com> > Cc: Eduardo Valentin <edubezval@gmail.com> > Cc: Daniel Lezcano <daniel.lezcano@linaro.org> > Cc: Angus Ainslie (Purism) <angus@akkea.ca> > Cc: linux-imx@nxp.com > Cc: linux-pm@vger.kernel.org > Cc: linux-kernel@vger.kernel.org Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org> > --- > drivers/thermal/thermal_hwmon.c | 28 ++++++++++++++++++++++++++++ > drivers/thermal/thermal_hwmon.h | 7 +++++++ > 2 files changed, 35 insertions(+) > > diff --git a/drivers/thermal/thermal_hwmon.c b/drivers/thermal/thermal_hwmon.c > index 40c69a533b24..4e79524182e1 100644 > --- a/drivers/thermal/thermal_hwmon.c > +++ b/drivers/thermal/thermal_hwmon.c > @@ -244,3 +244,31 @@ void thermal_remove_hwmon_sysfs(struct thermal_zone_device *tz) > kfree(hwmon); > } > EXPORT_SYMBOL_GPL(thermal_remove_hwmon_sysfs); > + > +static void devm_thermal_hwmon_release(struct device *dev, void *res) > +{ > + thermal_remove_hwmon_sysfs(*(struct thermal_zone_device **)res); > +} > + > +int devm_thermal_add_hwmon_sysfs(struct thermal_zone_device *tz) > +{ > + struct thermal_zone_device **ptr; > + int ret; > + > + ptr = devres_alloc(devm_thermal_hwmon_release, sizeof(*ptr), > + GFP_KERNEL); > + if (!ptr) > + return -ENOMEM; > + > + ret = thermal_add_hwmon_sysfs(tz); > + if (ret) { > + devres_free(ptr); > + return ret; > + } > + > + *ptr = tz; > + devres_add(&tz->device, ptr); > + > + return ret; > +} > +EXPORT_SYMBOL_GPL(devm_thermal_add_hwmon_sysfs); > diff --git a/drivers/thermal/thermal_hwmon.h b/drivers/thermal/thermal_hwmon.h > index a160b9d62dd0..1a9d65f6a6a8 100644 > --- a/drivers/thermal/thermal_hwmon.h > +++ b/drivers/thermal/thermal_hwmon.h > @@ -17,6 +17,7 @@ > > #ifdef CONFIG_THERMAL_HWMON > int thermal_add_hwmon_sysfs(struct thermal_zone_device *tz); > +int devm_thermal_add_hwmon_sysfs(struct thermal_zone_device *tz); > void thermal_remove_hwmon_sysfs(struct thermal_zone_device *tz); > #else > static inline int > @@ -25,6 +26,12 @@ thermal_add_hwmon_sysfs(struct thermal_zone_device *tz) > return 0; > } > > +static inline int > +devm_thermal_add_hwmon_sysfs(struct thermal_zone_device *tz) > +{ > + return 0; > +} > + > static inline void > thermal_remove_hwmon_sysfs(struct thermal_zone_device *tz) > { >
diff --git a/drivers/thermal/thermal_hwmon.c b/drivers/thermal/thermal_hwmon.c index 40c69a533b24..4e79524182e1 100644 --- a/drivers/thermal/thermal_hwmon.c +++ b/drivers/thermal/thermal_hwmon.c @@ -244,3 +244,31 @@ void thermal_remove_hwmon_sysfs(struct thermal_zone_device *tz) kfree(hwmon); } EXPORT_SYMBOL_GPL(thermal_remove_hwmon_sysfs); + +static void devm_thermal_hwmon_release(struct device *dev, void *res) +{ + thermal_remove_hwmon_sysfs(*(struct thermal_zone_device **)res); +} + +int devm_thermal_add_hwmon_sysfs(struct thermal_zone_device *tz) +{ + struct thermal_zone_device **ptr; + int ret; + + ptr = devres_alloc(devm_thermal_hwmon_release, sizeof(*ptr), + GFP_KERNEL); + if (!ptr) + return -ENOMEM; + + ret = thermal_add_hwmon_sysfs(tz); + if (ret) { + devres_free(ptr); + return ret; + } + + *ptr = tz; + devres_add(&tz->device, ptr); + + return ret; +} +EXPORT_SYMBOL_GPL(devm_thermal_add_hwmon_sysfs); diff --git a/drivers/thermal/thermal_hwmon.h b/drivers/thermal/thermal_hwmon.h index a160b9d62dd0..1a9d65f6a6a8 100644 --- a/drivers/thermal/thermal_hwmon.h +++ b/drivers/thermal/thermal_hwmon.h @@ -17,6 +17,7 @@ #ifdef CONFIG_THERMAL_HWMON int thermal_add_hwmon_sysfs(struct thermal_zone_device *tz); +int devm_thermal_add_hwmon_sysfs(struct thermal_zone_device *tz); void thermal_remove_hwmon_sysfs(struct thermal_zone_device *tz); #else static inline int @@ -25,6 +26,12 @@ thermal_add_hwmon_sysfs(struct thermal_zone_device *tz) return 0; } +static inline int +devm_thermal_add_hwmon_sysfs(struct thermal_zone_device *tz) +{ + return 0; +} + static inline void thermal_remove_hwmon_sysfs(struct thermal_zone_device *tz) {
Add devres wrapper for thermal_add_hwmon_sysfs() to simplify driver code. Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com> Cc: Chris Healy <cphealy@gmail.com> Cc: Lucas Stach <l.stach@pengutronix.de> Cc: Zhang Rui <rui.zhang@intel.com> Cc: Eduardo Valentin <edubezval@gmail.com> Cc: Daniel Lezcano <daniel.lezcano@linaro.org> Cc: Angus Ainslie (Purism) <angus@akkea.ca> Cc: linux-imx@nxp.com Cc: linux-pm@vger.kernel.org Cc: linux-kernel@vger.kernel.org --- drivers/thermal/thermal_hwmon.c | 28 ++++++++++++++++++++++++++++ drivers/thermal/thermal_hwmon.h | 7 +++++++ 2 files changed, 35 insertions(+)