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)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 20 Apr 2024 13:53:01 +0000 (14:53 +0100)
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>
drivers/iio/pressure/dps310.c

index 1ff091b2f764d4b926d70ab1c35722e2deafe301..d0a516d56da47617b639bfc142d5df6624a8ea04 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: