linux/drivers/iio
Marc Ferland 279428df88 iio: dac: ad5592r: fix temperature channel scaling value
The scale value for the temperature channel is (assuming Vref=2.5 and
the datasheet):

    376.7897513

When calculating both val and val2 for the temperature scale we
use (3767897513/25) and multiply it by Vref (here I assume 2500mV) to
obtain:

  2500 * (3767897513/25) ==> 376789751300

Finally we divide with remainder by 10^9 to get:

    val = 376
    val2 = 789751300

However, we return IIO_VAL_INT_PLUS_MICRO (should have been NANO) as
the scale type. So when converting the raw temperature value to the
'processed' temperature value we will get (assuming raw=810,
offset=-753):

    processed = (raw + offset) * scale_val
              = (810 + -753) * 376
	      = 21432

    processed += div((raw + offset) * scale_val2, 10^6)
              += div((810 + -753) * 789751300, 10^6)
	      += 45015
    ==> 66447
    ==> 66.4 Celcius

instead of the expected 21.5 Celsius.

Fix this issue by changing IIO_VAL_INT_PLUS_MICRO to
IIO_VAL_INT_PLUS_NANO.

Fixes: 56ca9db862 ("iio: dac: Add support for the AD5592R/AD5593R ADCs/DACs")
Signed-off-by: Marc Ferland <marc.ferland@sonatest.com>
Link: https://lore.kernel.org/r/20240501150554.1871390-1-marc.ferland@sonatest.com
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
2024-05-27 09:49:20 +01:00
..
accel Linux 6.9-rc7 2024-05-08 19:21:51 +01:00
adc iio: adc: ad9467: fix scan type sign 2024-05-27 09:49:19 +01:00
addac Char/Misc and other driver subsystem changes for 6.10-rc1 2024-05-22 12:26:46 -07:00
afe iio: afe: rescale: Accept only offset channels 2023-10-17 20:25:32 +01:00
amplifiers iio: amplifiers: hmc425a: add support for LTC6373 Instrumentation Amplifier 2024-02-28 19:26:36 +00:00
buffer iio: buffer-dmaengine: Enable write support 2024-04-20 15:41:32 +01:00
cdc iio: cdc: ad7150: relax return value check for IRQ get 2023-08-01 18:55:55 +01:00
chemical treewide, serdev: change receive_buf() return type to size_t 2024-01-27 18:13:53 -08:00
common iio: invensense: fix timestamp glitches when switching frequency 2024-05-03 11:48:56 +01:00
dac iio: dac: ad5592r: fix temperature channel scaling value 2024-05-27 09:49:20 +01:00
dummy iio: dummy: Use automatic lock and direct mode cleanup. 2024-02-17 16:16:10 +00:00
filter drivers: iio: filter: admv8818: add bypass mode 2023-08-08 09:51:06 +01:00
frequency Char/Misc and other driver subsystem changes for 6.10-rc1 2024-05-22 12:26:46 -07:00
gyro i2c: mux: Remove class argument from i2c_mux_add_adapter() 2024-05-13 16:13:19 +02:00
health iio: health: max30102: add support for max30101 2024-03-28 13:22:15 +00:00
humidity iio: humidity: hdc3020: add reset management 2024-03-25 20:10:13 +00:00
imu Char/Misc and other driver subsystem changes for 6.10-rc1 2024-05-22 12:26:46 -07:00
light iio: light: stk3310: Drop most likely fake ACPI ID 2024-04-29 20:53:25 +01:00
magnetometer iio: magnetometer: add a driver for Voltafield AF8133J magnetometer 2024-02-28 19:26:37 +00:00
multiplexer iio: multiplexer: Switch to use dev_err_probe() helper 2022-11-23 19:43:57 +00:00
orientation iio: orientation: hid-sensor-rotation: Convert to platform remove callback returning void 2023-09-23 15:06:56 +01:00
position iio: position: hid-sensor-custom-intel-hinge: Convert to platform remove callback returning void 2023-09-23 15:06:56 +01:00
potentiometer iio: potentiometer: max5487: Drop ACPI_PTR() usage 2024-01-23 22:06:55 +00:00
potentiostat iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
pressure iio: pressure: bmp280: Fix BMP580 temperature reading 2024-05-27 09:49:20 +01:00
proximity iio: proximity: isl29501: make use of of_device_id table 2024-02-28 19:26:38 +00:00
resolver iio: resolver: ad2s1210: add reset gpio support 2023-11-16 19:10:25 +00:00
temperature iio: temperature: mcp9600: Fix temperature reading for negative values 2024-05-03 11:48:56 +01:00
test iio: test: test gain-time-scale helpers 2024-02-17 16:16:09 +00:00
trigger iio: trigger: stm32-timer: Convert to platform remove callback returning void 2023-09-23 15:06:56 +01:00
iio_core_trigger.h
iio_core.h iio: Remove unused declarations 2023-09-12 10:42:03 +01:00
industrialio-acpi.c iio: core: Add iio_read_acpi_mount_matrix() helper function 2024-04-29 20:53:25 +01:00
industrialio-backend.c iio: backend: add API for interface tuning 2024-04-29 20:53:26 +01:00
industrialio-buffer.c iio: buffer: initialize masklength accumulator to 0 2024-04-29 20:53:24 +01:00
industrialio-configfs.c
industrialio-core.c iio: core: move to cleanup.h magic 2024-03-25 20:10:14 +00:00
industrialio-event.c iio: event: add optional event label support 2023-10-11 15:54:41 +01:00
industrialio-gts-helper.c iio: gts-helper: Fix division loop 2024-02-19 19:32:12 +00:00
industrialio-sw-device.c iio: Don't use bare "unsigned" 2022-07-01 11:19:08 +01:00
industrialio-sw-trigger.c iio: core: Fix entry not deleted when iio_register_sw_trigger_type() fails 2022-11-12 17:53:35 +00:00
industrialio-trigger.c iio: trigger: move to the cleanup.h magic 2024-03-25 20:10:14 +00:00
industrialio-triggered-event.c
inkern.c iio: inkern: move to the cleanup.h magic 2024-03-25 20:10:14 +00:00
Kconfig iio: add the IIO backend framework 2024-02-19 19:32:22 +00:00
Makefile iio: core: Add iio_read_acpi_mount_matrix() helper function 2024-04-29 20:53:25 +01:00
TODO iio: core: move 'mlock' to 'struct iio_dev_opaque' 2022-11-23 19:44:00 +00:00