]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
iio: light: veml6030: fix microlux value calculation
authorJavier Carrasco <javier.carrasco.cruz@gmail.com>
Wed, 16 Oct 2024 17:04:31 +0000 (19:04 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 8 Nov 2024 15:25:54 +0000 (16:25 +0100)
commit 63dd163cd61dda6f38343776b42331cc6b7e56e0 upstream.

The raw value conversion to obtain a measurement in lux as
INT_PLUS_MICRO does not calculate the decimal part properly to display
it as micro (in this case microlux). It only calculates the module to
obtain the decimal part from a resolution that is 10000 times the
provided in the datasheet (0.5376 lux/cnt for the veml6030). The
resulting value must still be multiplied by 100 to make it micro.

This bug was introduced with the original implementation of the driver.

Only the illuminance channel is fixed becuase the scale is non sensical
for the intensity channels anyway.

Cc: stable@vger.kernel.org
Fixes: 7b779f573c48 ("iio: light: add driver for veml6030 ambient light sensor")
Signed-off-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
Link: https://patch.msgid.link/20241016-veml6030-fix-processed-micro-v1-1-4a5644796437@gmail.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/iio/light/veml6030.c

index 9b9697d67850be272380378034c08eeb11dfe6d6..1b895bad8148a1634d066bc1a9a55e8be1b87da4 100644 (file)
@@ -522,7 +522,7 @@ static int veml6030_read_raw(struct iio_dev *indio_dev,
                        }
                        if (mask == IIO_CHAN_INFO_PROCESSED) {
                                *val = (reg * data->cur_resolution) / 10000;
-                               *val2 = (reg * data->cur_resolution) % 10000;
+                               *val2 = (reg * data->cur_resolution) % 10000 * 100;
                                return IIO_VAL_INT_PLUS_MICRO;
                        }
                        *val = reg;