The channel-scale handling in iio_convert_raw_to_processed() in essence does the following: processed = raw * caller-provided-scale * channel-scale Which can also be written as: multiplier = raw * caller-provided-scale iio-value = channel-scale processed = multiplier * iio-value Where iio-value is a set of IIO_VAL_* type + val + val2 integers, being able to handle multiplication of iio-values like this is something which is useful to have in general and, as previous bugfixes to iio_convert_raw_to_processed() have shown, also tricky to implement. Split the iio-value multiplication code from iio_convert_raw_to_processed() out into a new iio_multiply_value() helper. This serves multiple purposes: 1. Having this split out allows writing a KUnit test for this. 2. Having this split out allows re-use to get better precision when scaling values in iio_read_channel_processed_scale(). Reviewed-by: Andy Shevchenko <andy@kernel.org> Signed-off-by: Hans de Goede <hansg@kernel.org> Link: https://patch.msgid.link/20250831104825.15097-4-hansg@kernel.org Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
||
|---|---|---|
| .. | ||
| accel | ||
| adc | ||
| afe | ||
| common | ||
| dac | ||
| frequency | ||
| gyro | ||
| imu | ||
| timer | ||
| adc-helpers.h | ||
| backend.h | ||
| buffer-dma.h | ||
| buffer-dmaengine.h | ||
| buffer.h | ||
| buffer_impl.h | ||
| configfs.h | ||
| consumer.h | ||
| driver.h | ||
| events.h | ||
| hw-consumer.h | ||
| iio-gts-helper.h | ||
| iio-opaque.h | ||
| iio.h | ||
| kfifo_buf.h | ||
| machine.h | ||
| sw_device.h | ||
| sw_trigger.h | ||
| sysfs.h | ||
| trigger.h | ||
| trigger_consumer.h | ||
| triggered_buffer.h | ||
| triggered_event.h | ||
| types.h | ||