From: Dimitri Fedrau <dima.fedrau@xxxxxxxxx> commit 827dca3129708a8465bde90c86c2e3c38e62dd4f upstream. 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> Reviewed-by: Marcelo Schmitt <marcelo.schmitt1@xxxxxxxxx> Tested-by: Andrew Hepp <andrew.hepp@xxxxxxxxx> Link: https://lore.kernel.org/r/20240424185913.1177127-1-dima.fedrau@xxxxxxxxx Cc: <Stable@xxxxxxxxxxxxxxx> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- 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.45.2 Patches currently in stable-queue which might be from dima.fedrau@xxxxxxxxx are queue-6.9/iio-temperature-mcp9600-fix-temperature-reading-for-negative-values.patch