From 67f9515d30107c9ae585779e2c55d2f61840a152 Mon Sep 17 00:00:00 2001 From: Shreeya Patel Date: Mon, 17 Jul 2023 14:02:21 +0530 Subject: iio: light: ltrf216a: Return floating point values For better precision of input light intesity, return floating point values through sysfs instead of integer. Signed-off-by: Shreeya Patel (cherry picked from commit 13b313070846439805525ddb9f76dbf2b8de4300) Signed-off-by: Cristian Ciocaltea --- drivers/iio/light/ltrf216a.c | 41 ++++++++++++++--------------------------- 1 file 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); -- cgit 1.4.1