diff options
author | Cristian Ciocaltea <cristian.ciocaltea@collabora.com> | 2023-09-15 19:15:48 +0300 |
---|---|---|
committer | Cristian Ciocaltea <cristian.ciocaltea@collabora.com> | 2023-09-15 19:15:48 +0300 |
commit | 768bc393d4e78159a2765b0b4bb49ee3375921d1 (patch) | |
tree | 8fc56aa9d58d2b308d4cdc7e97735994d80d1697 | |
parent | 0eb67c19c36cf2f517acea59dbb1bc38ccddf5eb (diff) | |
parent | 67f9515d30107c9ae585779e2c55d2f61840a152 (diff) | |
download | linux-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.c | 41 |
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); |