Looking for clarification on sysfs IIO devices, do _raw devices require both _offset and _scale?
Lars-Peter Clausen
lars at metafoo.de
Thu Sep 9 17:12:50 AEST 2021
On 9/9/21 12:10 AM, Bruce Mitchell wrote:
> In reference to:
> https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-iio
>
> I have Temperature, Pressure, and Humidity IIO sensors.
> IIO _raw devices look like this on sysfs:
> this happens to be a SI7020 type device with 2 sensors
> /sys/bus/iio/devices/iio:device0/in_humidityrelative_offset
> /sys/bus/iio/devices/iio:device0/in_humidityrelative_raw
> /sys/bus/iio/devices/iio:device0/in_humidityrelative_scale
> /sys/bus/iio/devices/iio:device0/in_temp_offset
> /sys/bus/iio/devices/iio:device0/in_temp_raw
> /sys/bus/iio/devices/iio:device0/in_temp_scale
>
> Other IIO _input devices look like this on sysfs:
> this happens to be a DPS310 device with 2 sensors
> /sys/bus/iio/devices/iio:device1/in_temp_input
> /sys/bus/iio/devices/iio:device1/in_pressure_input
>
> As I read it if the IIO device was an _input type on sysfs,
> just read it (and possibly scale it for units).
>
> But if the IIO device was a _raw type on sysfs my understanding
> is that it must be accompanied by a _offset and a _scale for
> at least temperature, pressure, humidity, voltage, and current
> sensors.
> Is that correct?
>
> Further for any IIO device that is a _raw type on sysfs is it
> required to be accompanied by a _offset and a _scale as well?
Hi,
That sounds about right.
The _input name is historically and comes from hwmon framework. It means
that the data has been processed by the kernel driver and converted to
the right SI units for the channel type. This is usually used for sensor
that have a non-linear transfer function. `raw` on the other hand means
the data is just as it is reported by the hardware. The reason for this
is that conversion to SI units is often not lossless, since we have
finite precision. So it is up to the application to decide whether it
wants to work on the raw data or how it wants to round the converted data.
`input` attributes never have scale and offset since they are already in
the right unit. For raw scale and offset are optional. If scale does not
exist assume it is 1, if offset does not exist assume it is 0. You'll
rarely see a device with raw attributes without scale, but there are
quite a few without offset.
- Lars
More information about the openbmc
mailing list