Re: In-kernel hwmon read:

Guenter Roeck
2026-02-01T16:29:39Z

On 1/22/26 06:23, Andreas Kemnade wrote:
> On Wed, 24 Sep 2025 12:16:14 -0700
> Guenter Roeck <linux@roeck-us.net> wrote:
>
>>> But what is the hwmon equivalent for
>>> devm_fwnode_iio_channel_get_by_name() + iio_read_channel_processed()?
>>>
>>
>> Assuming you refer to the exported functions for in-kernel use, so far no one has
>> expressed a need for it. The best solution would probably be a hwmon->iio bridge,
>> or equivalent functions could be implemented and exported.
>
> So first analyzing the need of such an interface. I think
> there is a need for such interface. The need just gets masked by some hacks
> to be able to divert to other interfaces.
>
> There is out-of-tree waiting to be upstreamed:
> - rockchip_ebc driver: Display on PineNote, uses iio_read_chanel_processed()
> in combination with an out-of-tree iio temperature
> driver
> - mxc_epdc_drm driver: Display on Kobo/Tolino ebook readers, uses
> thermal_zone_get_temp() now.
>
> In tree, there is:
> - drivers/gpu/drm/tiny/repaper.c
> in combination with
> Documentation/devicetree/bindings/display/repaper.txt
>
> Code excerpt:
> if (!device_property_read_string(dev, "pervasive,thermal-zone",
> &thermal_zone)) {
> epd->thermal = thermal_zone_get_zone_by_name(thermal_zone);
>
> and thermal_zone_get_temp() to tune refreshes according to panel temperature.
>
>
>
> The example in the binding is:
> display_temp: lm75@48 {
> compatible = "lm75b";
> reg = <0x48>;
> #thermal-sensor-cells = <0>;
> };
>
> thermal-zones {
> display {
> polling-delay-passive = <0>;
> polling-delay = <0>;
> thermal-sensors = <&display_temp>;
> };
> };
>
> [...]
> pervasive,thermal-zone = "display";
>
>
> I would prefer to be able to use e.g. pervasive,temperature-sensor = <&display_temp>;
> or maybe <&display_temp 0> if there are multiple sensors in the same chip.
> so that dtc will tell me when there is a typo and avoid the thermal
> zone layer
>
> So what are the options:
> a) provide similar logic like iio/inkern.c for hwmon usage.
> b) automatically add iio channels during hwmon registration.
>

b) _is_ the hwmon->iio bridge. Add HWMON_C_REGISTER_IIO,
and register as appropriate with iio if it is set. Then add
HWMON_C_REGISTER_IIO to all drivers needing it.

Not sure though how that would look like in devicetree for
in-kernel use.

Guenter

> looking at the iio_hwmon bridge we already have, it depends on
> iio/inkern.c so for a hwmon_iio bridge we need a) or b) anyways,
> so I think a separate bridge device/driver has no advantages.
> And having a devicetree node for the bridge would be bad because
> we are then describing linux implementation details instead of
> the actual hardware in the devicetree.
>
> Regards,
> Andreas
>