Message ID | 20220210164756.3489848-1-massimiliano.minella@gmail.com |
---|---|
State | New |
Headers | show |
Series | thermal: k3: Add hwmon support | expand |
On 10/02/2022 17:47, Massimiliano Minella wrote: > Expose the thermal sensors on K3 AM654 as hwmon devices, so that > temperatures could be read using lm-sensors. > Use devm_add_action_or_reset() to unregister the hwmon interface > automatically. > > Signed-off-by: Massimiliano Minella <massimiliano.minella@gmail.com> > --- [ ... ] > } > + > + data[id].tzd->tzp->no_hwmon = false; > + ret = thermal_add_hwmon_sysfs(data[id].tzd); > + if (ret) { > + dev_err(dev, "thermal failed to add hwmon sysfs\n"); > + goto err_alloc; > + } > + > + ret = devm_add_action_or_reset(dev, > + k3_hwmon_action, > + data[id].tzd); > + if (ret) > + goto err_alloc; check out devm_thermal_add_hwmon_sysfs > } > > platform_set_drvdata(pdev, bgp); > > base-commit: e5b54867f47f765fcb439e09ed763b5de617af3e
Hi Daniel, thank you for the review. On Fri, Feb 25, 2022 at 12:49 PM Daniel Lezcano <daniel.lezcano@linaro.org> wrote: > On 10/02/2022 17:47, Massimiliano Minella wrote: ... > > } > > + > > + data[id].tzd->tzp->no_hwmon = false; > > + ret = thermal_add_hwmon_sysfs(data[id].tzd); > > + if (ret) { > > + dev_err(dev, "thermal failed to add hwmon sysfs\n"); > > + goto err_alloc; > > + } > > + > > + ret = devm_add_action_or_reset(dev, > > + k3_hwmon_action, > > + data[id].tzd); > > + if (ret) > > + goto err_alloc; > > check out devm_thermal_add_hwmon_sysfs I've tried to use the devm_thermal_add_hwmon_sysfs but it is not working as I would have expected: if the driver is built as a module, when the module is removed the devm_thermal_hwmon_release never gets called. As a consequence each time the insmod/rmmod sequence is repeated, for every thermal zone, new temp<N>_crit and temp<N>_input entries appear in the hwmon sysfs. Is it a known bug/limitation? I'm going to have a look at this behavior, so any hint would be appreciated. In the meantime I can provide V2 of the patch if the described behavior is acceptable. Thanks, Massimiliano
diff --git a/drivers/thermal/k3_bandgap.c b/drivers/thermal/k3_bandgap.c index 35f41e8a0b75..94678085dd5c 100644 --- a/drivers/thermal/k3_bandgap.c +++ b/drivers/thermal/k3_bandgap.c @@ -16,6 +16,8 @@ #include <linux/thermal.h> #include <linux/types.h> +#include "thermal_hwmon.h" + #define K3_VTM_DEVINFO_PWR0_OFFSET 0x4 #define K3_VTM_DEVINFO_PWR0_TEMPSENS_CT_MASK 0xf0 #define K3_VTM_TMPSENS0_CTRL_OFFSET 0x80 @@ -149,6 +151,13 @@ static int k3_thermal_get_temp(void *devdata, int *temp) return ret; } +static void k3_hwmon_action(void *data) +{ + struct thermal_zone_device *zone = data; + + thermal_remove_hwmon_sysfs(zone); +} + static const struct thermal_zone_of_device_ops k3_of_thermal_ops = { .get_temp = k3_thermal_get_temp, }; @@ -219,6 +228,19 @@ static int k3_bandgap_probe(struct platform_device *pdev) ret = PTR_ERR(data[id].tzd); goto err_alloc; } + + data[id].tzd->tzp->no_hwmon = false; + ret = thermal_add_hwmon_sysfs(data[id].tzd); + if (ret) { + dev_err(dev, "thermal failed to add hwmon sysfs\n"); + goto err_alloc; + } + + ret = devm_add_action_or_reset(dev, + k3_hwmon_action, + data[id].tzd); + if (ret) + goto err_alloc; } platform_set_drvdata(pdev, bgp);
Expose the thermal sensors on K3 AM654 as hwmon devices, so that temperatures could be read using lm-sensors. Use devm_add_action_or_reset() to unregister the hwmon interface automatically. Signed-off-by: Massimiliano Minella <massimiliano.minella@gmail.com> --- drivers/thermal/k3_bandgap.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) base-commit: e5b54867f47f765fcb439e09ed763b5de617af3e