summary refs log tree commit diff
diff options
context:
space:
mode:
authorCristian Ciocaltea <cristian.ciocaltea@collabora.com>2023-09-15 19:15:48 +0300
committerCristian Ciocaltea <cristian.ciocaltea@collabora.com>2023-09-15 19:15:48 +0300
commit768bc393d4e78159a2765b0b4bb49ee3375921d1 (patch)
tree8fc56aa9d58d2b308d4cdc7e97735994d80d1697
parent0eb67c19c36cf2f517acea59dbb1bc38ccddf5eb (diff)
parent67f9515d30107c9ae585779e2c55d2f61840a152 (diff)
downloadlinux-768bc393d4e78159a2765b0b4bb49ee3375921d1.tar.gz
Merge branch 6.1/features/iio
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
-rw-r--r--drivers/iio/light/ltrf216a.c41
1 files changed, 14 insertions, 27 deletions
diff --git a/drivers/iio/light/ltrf216a.c b/drivers/iio/light/ltrf216a.c
index 4b8ef36b6912..6f460abd685c 100644
--- a/drivers/iio/light/ltrf216a.c
+++ b/drivers/iio/light/ltrf216a.c
@@ -231,33 +231,13 @@ static int ltrf216a_read_data(struct ltrf216a_data *data, u8 addr)
 	return get_unaligned_le24(&buf[0]);
 }
 
-static int ltrf216a_get_lux(struct ltrf216a_data *data)
-{
-	int ret, greendata;
-	u64 lux, div;
-
-	ret = ltrf216a_set_power_state(data, true);
-	if (ret)
-		return ret;
-
-	greendata = ltrf216a_read_data(data, LTRF216A_ALS_DATA_0);
-	if (greendata < 0)
-		return greendata;
-
-	ltrf216a_set_power_state(data, false);
-
-	lux = greendata * 45 * LTRF216A_WIN_FAC * 100;
-	div = data->als_gain_fac * data->int_time_fac * 100;
-
-	return div_u64(lux, div);
-}
-
 static int ltrf216a_read_raw(struct iio_dev *indio_dev,
 			     struct iio_chan_spec const *chan, int *val,
 			     int *val2, long mask)
 {
 	struct ltrf216a_data *data = iio_priv(indio_dev);
-	int ret;
+	int ret, greendata;
+	u64 lux, div;
 
 	switch (mask) {
 	case IIO_CHAN_INFO_RAW:
@@ -274,12 +254,19 @@ static int ltrf216a_read_raw(struct iio_dev *indio_dev,
 		return IIO_VAL_INT;
 	case IIO_CHAN_INFO_PROCESSED:
 		mutex_lock(&data->lock);
-		ret = ltrf216a_get_lux(data);
-		mutex_unlock(&data->lock);
-		if (ret < 0)
+		ret = ltrf216a_set_power_state(data, true);
+		if (ret)
 			return ret;
-		*val = ret;
-		return IIO_VAL_INT;
+		greendata = ltrf216a_read_data(data, LTRF216A_ALS_DATA_0);
+		if (greendata < 0)
+			return greendata;
+		ltrf216a_set_power_state(data, false);
+		lux = greendata * 45 * LTRF216A_WIN_FAC;
+		div = data->als_gain_fac * data->int_time_fac;
+		mutex_unlock(&data->lock);
+		*val = lux;
+		*val2 = div;
+		return IIO_VAL_FRACTIONAL;
 	case IIO_CHAN_INFO_INT_TIME:
 		mutex_lock(&data->lock);
 		ret = ltrf216a_get_int_time(data, val, val2);