OpenCloudOS-Kernel/drivers/iio/dac
Marc Ferland 8e472061a3 iio: dac: ad5592r: fix temperature channel scaling value
commit 279428df888319bf68f2686934897301a250bb84 upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-06-21 14:38:37 +02:00
..
Kconfig iio: add MCP4728 I2C DAC driver 2023-08-05 19:29:39 +01:00
Makefile iio: add MCP4728 I2C DAC driver 2023-08-05 19:29:39 +01:00
ad3552r.c iio: dac: ad3552r: Correct device IDs 2023-09-11 20:12:59 +01:00
ad5064.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
ad5360.c iio: dac: ad5360: Fix alignment for DMA safety 2022-06-14 11:53:15 +01:00
ad5380.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
ad5421.c iio: dac: ad5421: Fix alignment for DMA safety 2022-06-14 11:53:15 +01:00
ad5446.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
ad5449.c iio: dac: ad5449: Fix alignment for DMA safety 2022-06-14 11:53:15 +01:00
ad5504.c iio: dac: ad5504: Fix alignment for DMA safety 2022-06-14 11:53:16 +01:00
ad5592r-base.c iio: dac: ad5592r: fix temperature channel scaling value 2024-06-21 14:38:37 +02:00
ad5592r-base.h iio: dac: ad5592r: Fix alignment for DMA safety 2022-06-14 11:53:16 +01:00
ad5592r.c Char/Misc and other driver updates for 5.18-rc1 2022-03-28 12:27:35 -07:00
ad5593r.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
ad5624r.h
ad5624r_spi.c iio: Replace strtobool() with kstrtobool() 2022-04-28 19:22:54 +01:00
ad5686-spi.c Char/Misc and other driver updates for 5.18-rc1 2022-03-28 12:27:35 -07:00
ad5686.c iio: dac: ad5686: Add support for AD5337 2022-12-28 17:19:45 +00:00
ad5686.h iio: dac: ad5686: Add support for AD5337 2022-12-28 17:19:45 +00:00
ad5696-i2c.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
ad5755.c iio: dac: ad5755: Add missing fwnode_handle_put() 2023-04-01 16:41:52 +01:00
ad5758.c iio:dac:ad5758: Drop unused of specific headers. 2021-12-12 17:12:34 +00:00
ad5761.c iio: dac: ad5761: Fix alignment for DMA safety 2022-06-14 11:53:16 +01:00
ad5764.c iio: dac: ad5764: Fix alignment for DMA safety 2022-06-14 11:53:16 +01:00
ad5766.c iio: dac: ad5766: Fix alignment for DMA safety 2022-06-14 11:53:16 +01:00
ad5770r.c iio: dac: ad5770r: Fix alignment for DMA safety 2022-06-14 11:53:16 +01:00
ad5791.c iio: dac: ad5791: Fix alignment for DMA saftey 2022-06-14 11:53:16 +01:00
ad7293.c iio: dac: ad7293: Fix alignment for DMA safety 2022-06-14 11:53:16 +01:00
ad7303.c iio: dac: ad7303: Fix alignment for DMA safety 2022-06-14 11:53:16 +01:00
ad8801.c iio: dac: ad8801: Fix alignment for DMA safety 2022-06-14 11:53:17 +01:00
cio-dac.c 1st set of IIO new device support, features and cleanups for the 6.4 cycle. 2023-04-12 09:45:34 +02:00
dpot-dac.c iio:dac:dpot-dac: Swap of.h for mod_devicetable.h 2021-12-12 17:12:39 +00:00
ds4424.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
lpc18xx_dac.c iio:dac:lpc18xx_dac: Swap from of* to mod_devicetable.h 2021-12-12 17:12:43 +00:00
ltc1660.c iio: dac: ltc1660: Switch to DEFINE_SIMPLE_DEV_PM_OPS() and pm_sleep_ptr() 2022-07-18 18:48:18 +01:00
ltc2632.c iio: dac: ltc2632: Make use of device properties 2022-04-28 19:34:10 +01:00
ltc2688.c iio: dac: ltc2688: Simplify using devm_regulator_*get_enable() 2022-11-23 19:44:00 +00:00
m62332.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
max517.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
max5522.c iio: dac: set variable max5522_channels storage-class-specifier to static 2023-04-10 12:26:34 +01:00
max5821.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
mcp4725.c 1st set of IIO new device support, features and cleanup for the 6.5 cycle. 2023-06-15 13:01:55 +02:00
mcp4728.c iio: add MCP4728 I2C DAC driver 2023-08-05 19:29:39 +01:00
mcp4922.c iio: dac: mcp4922: add support to mcp4921 2022-07-01 11:19:08 +01:00
stm32-dac-core.c iio:adc:stm32*: Use pm[_sleep]_ptr() etc to avoid need to make pm __maybe_unused 2022-02-21 19:33:04 +00:00
stm32-dac-core.h
stm32-dac.c iio: dac: stm32-dac: Replace open coded str_enable_disable() 2022-06-18 16:38:05 +01:00
ti-dac082s085.c iio: dac: ti-dac082s085: Fix alignment for DMA safety 2022-06-14 11:53:17 +01:00
ti-dac5571.c iio: Switch i2c drivers back to use .probe() 2023-05-21 18:54:53 +01:00
ti-dac7311.c iio: dac: ti-dac7311: Fix alignment for DMA safety 2022-06-14 11:53:17 +01:00
ti-dac7612.c iio: dac: ti-dac7612: Fix alignment for DMA safety 2022-06-14 11:53:17 +01:00
vf610_dac.c iio: dac: vf610_dac: explicitly add proper header files 2022-06-14 11:53:20 +01:00