Commit 9dd6b32e authored by Thomas Haemmerle's avatar Thomas Haemmerle Committed by Jonathan Cameron
Browse files

iio: pressure: dps310: support negative temperature values



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: ba6ec48e ("iio: Add driver for Infineon DPS310")
Signed-off-by: default avatarThomas Haemmerle <thomas.haemmerle@leica-geosystems.com>
Link: https://lore.kernel.org/r/20240415105030.1161770-2-thomas.haemmerle@leica-geosystems.com


Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 499eb311
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -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: