]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
iio: temperature: mcp9600: Fix temperature reading for negative values
authorDimitri Fedrau <dima.fedrau@gmail.com>
Wed, 24 Apr 2024 18:59:10 +0000 (20:59 +0200)
committerRoxana Nicolescu <roxana.nicolescu@canonical.com>
Fri, 2 Aug 2024 14:27:08 +0000 (16:27 +0200)
BugLink: https://bugs.launchpad.net/bugs/2074091
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@gmail.com>
Reviewed-by: Marcelo Schmitt <marcelo.schmitt1@gmail.com>
Tested-by: Andrew Hepp <andrew.hepp@ahepp.dev>
Link: https://lore.kernel.org/r/20240424185913.1177127-1-dima.fedrau@gmail.com
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Portia Stephens <portia.stephens@canonical.com>
Signed-off-by: Roxana Nicolescu <roxana.nicolescu@canonical.com>
drivers/iio/temperature/mcp9600.c

index 46845804292bf06048a5ef5d976ffb28a83680c0..7a3eef5d5e752a2c4fec1f989311e15977f683e0 100644 (file)
@@ -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;
 }