iio: light: ltrf216a: Return floating point values
authorShreeya Patel <shreeya.patel@collabora.com>
Tue, 7 Nov 2023 19:20:05 +0000 (00:50 +0530)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 26 Nov 2023 18:01:40 +0000 (18:01 +0000)
For better precision of input light intesity, return floating point
values through sysfs instead of an integer value

Signed-off-by: Shreeya Patel <shreeya.patel@collabora.com>
Link: https://lore.kernel.org/r/20231107192005.285534-1-shreeya.patel@collabora.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/light/ltrf216a.c

index 8de4dd849936d403684159eb4a5e26698963e666..68dc48420a886aab5088f04f7a67b2a470867e8f 100644 (file)
@@ -234,7 +234,7 @@ static int ltrf216a_read_data(struct ltrf216a_data *data, u8 addr)
 static int ltrf216a_get_lux(struct ltrf216a_data *data)
 {
        int ret, greendata;
-       u64 lux, div;
+       u64 lux;
 
        ret = ltrf216a_set_power_state(data, true);
        if (ret)
@@ -246,10 +246,9 @@ static int ltrf216a_get_lux(struct ltrf216a_data *data)
 
        ltrf216a_set_power_state(data, false);
 
-       lux = greendata * 45 * LTRF216A_WIN_FAC * 100;
-       div = data->als_gain_fac * data->int_time_fac * 100;
+       lux = greendata * 45 * LTRF216A_WIN_FAC;
 
-       return div_u64(lux, div);
+       return lux;
 }
 
 static int ltrf216a_read_raw(struct iio_dev *indio_dev,
@@ -279,7 +278,8 @@ static int ltrf216a_read_raw(struct iio_dev *indio_dev,
                if (ret < 0)
                        return ret;
                *val = ret;
-               return IIO_VAL_INT;
+               *val2 = data->als_gain_fac * data->int_time_fac;
+               return IIO_VAL_FRACTIONAL;
        case IIO_CHAN_INFO_INT_TIME:
                mutex_lock(&data->lock);
                ret = ltrf216a_get_int_time(data, val, val2);