[PATCH] iio: temperature: mcp9600: Fix temperature reading for negative values

From: Dimitri Fedrau
Date: Wed Apr 24 2024 - 15:00:00 EST


Temperature is stored as 16bit value in two's complement format. Current
implementation ignores the sign bit. Make it aware of the sign bit by
using sign_extend32.

Fixes: 3f6b9598b6df ("iio: temperature: Add MCP9600 thermocouple EMF converter")
Signed-off-by: Dimitri Fedrau <dima.fedrau@xxxxxxxxx>
---
drivers/iio/temperature/mcp9600.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/iio/temperature/mcp9600.c b/drivers/iio/temperature/mcp9600.c
index 46845804292b..7a3eef5d5e75 100644
--- a/drivers/iio/temperature/mcp9600.c
+++ b/drivers/iio/temperature/mcp9600.c
@@ -52,7 +52,8 @@ static int mcp9600_read(struct mcp9600_data *data,

if (ret < 0)
return ret;
- *val = ret;
+
+ *val = sign_extend32(ret, 15);

return 0;
}
--
2.39.2