[PATCH] iio: temperature: tmp006: Fix endianness byte swap in trigger handler

From: Salah Triki

Date: Mon Sep 07 2026 - 04:35:03 EST


In tmp006_trigger_handler(), i2c_smbus_read_word_data() is used to read
the VOBJECT and TAMBIENT registers. However, the TMP006 stores register
values in Big Endian byte order, while i2c_smbus_read_word_data() assumes
Little Endian.

This causes byte-swapped values to be pushed to the IIO buffer on Little
Endian architectures, leading to corrupted sensor readings when using
triggered buffers.

Fix this by switching to i2c_smbus_read_word_swapped() inside the trigger
handler.

Fixes: 91f75ccf9f03 ("iio: temperature: tmp006: add triggered buffer support")
Assisted-by: LLM
Signed-off-by: Salah Triki <salah.triki@xxxxxxxxx>
---
drivers/iio/temperature/tmp006.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/temperature/tmp006.c b/drivers/iio/temperature/tmp006.c
index d9f6449ec0d8..f3b3de0bf221 100644
--- a/drivers/iio/temperature/tmp006.c
+++ b/drivers/iio/temperature/tmp006.c
@@ -256,12 +256,12 @@ static irqreturn_t tmp006_trigger_handler(int irq, void *p)
} scan = { };
s32 ret;

- ret = i2c_smbus_read_word_data(data->client, TMP006_VOBJECT);
+ ret = i2c_smbus_read_word_swapped(data->client, TMP006_VOBJECT);
if (ret < 0)
goto err;
scan.channels[0] = ret;

- ret = i2c_smbus_read_word_data(data->client, TMP006_TAMBIENT);
+ ret = i2c_smbus_read_word_swapped(data->client, TMP006_TAMBIENT);
if (ret < 0)
goto err;
scan.channels[1] = ret;
--
2.43.0