patch "iio: cros_ec: Fix the maths for gyro scale calculation" added to staging-linus
Subsystems (3)
This is a note to let you know that I've just added the patch titled
iio: cros_ec: Fix the maths for gyro scale calculation
to my staging git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
in the staging-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From 3d02d7082e5823598090530c3988a35f69689943 Mon Sep 17 00:00:00 2001
From: Gwendal Grignou <[email protected]>
Date: Wed, 13 Mar 2019 12:40:02 +0100
Subject: iio: cros_ec: Fix the maths for gyro scale calculation
Calculation did not use IIO_DEGREE_TO_RAD and implemented a variant to avoid precision loss as we aim a nano value. The offset added to avoid rounding error, though, doesn't give us a close result to the expected value. E.g.
For 1000dps, the result should be:
(1000 * pi ) / 180 >> 15 ~= 0.000532632218
But with current calculation we get
$ cat scale
0.000547890Fix the calculation by just doing the maths involved for a nano value
val * pi * 10e12 / (180 * 2^15)
so we get a closer result.
$ cat scale
0.000532632--- drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c +4 -3
@@ -103,9 +103,10 @@ static int cros_ec_sensors_read(struct iio_dev *indio_dev,* Do not use IIO_DEGREE_TO_RAD to avoid precision * loss. Round to the nearest integer. */ - *val =div_s64 (val64 *314159 +9000000ULL ,1000 ); - *val2 =18000 << (CROS_EC_SENSOR_BITS -1 ); - ret =IIO_VAL_FRACTIONAL ; + *val =0 ; + *val2 =div_s64 (val64 *3141592653ULL , +180 << (CROS_EC_SENSOR_BITS -1 )); + ret =IIO_VAL_INT_PLUS_NANO ;break ;case MOTIONSENSE_TYPE_MAG :/*
Signature · 1 line
2.21.0