]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
iio: pressure: dps310: support negative temperature values
authorThomas Haemmerle <thomas.haemmerle@leica-geosystems.com>
Mon, 15 Apr 2024 10:50:27 +0000 (12:50 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 16 Jun 2024 11:39:37 +0000 (13:39 +0200)
[ Upstream commit 9dd6b32e76ff714308964cd9ec91466a343dcb8b ]

The current implementation interprets negative values returned from
`dps310_calculate_temp` as error codes.
This has a side effect that when negative temperature values are
calculated, they are interpreted as error.

Fix this by using the return value only for error handling and passing a
pointer for the value.

Fixes: ba6ec48e76bc ("iio: Add driver for Infineon DPS310")
Signed-off-by: Thomas Haemmerle <thomas.haemmerle@leica-geosystems.com>
Link: https://lore.kernel.org/r/20240415105030.1161770-2-thomas.haemmerle@leica-geosystems.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/iio/pressure/dps310.c

index 1b6b9530f1662e2591ad83f6636cc16f3a054c5a..7fdc7a0147f0e613f8191d7e2586d601d623dae3 100644 (file)
@@ -730,7 +730,7 @@ static int dps310_read_pressure(struct dps310_data *data, int *val, int *val2,
        }
 }
 
-static int dps310_calculate_temp(struct dps310_data *data)
+static int dps310_calculate_temp(struct dps310_data *data, int *val)
 {
        s64 c0;
        s64 t;
@@ -746,7 +746,9 @@ static int dps310_calculate_temp(struct dps310_data *data)
        t = c0 + ((s64)data->temp_raw * (s64)data->c1);
 
        /* Convert to milliCelsius and scale the temperature */
-       return (int)div_s64(t * 1000LL, kt);
+       *val = (int)div_s64(t * 1000LL, kt);
+
+       return 0;
 }
 
 static int dps310_read_temp(struct dps310_data *data, int *val, int *val2,
@@ -768,11 +770,10 @@ static int dps310_read_temp(struct dps310_data *data, int *val, int *val2,
                if (rc)
                        return rc;
 
-               rc = dps310_calculate_temp(data);
-               if (rc < 0)
+               rc = dps310_calculate_temp(data, val);
+               if (rc)
                        return rc;
 
-               *val = rc;
                return IIO_VAL_INT;
 
        case IIO_CHAN_INFO_OVERSAMPLING_RATIO: