From: Jonathan Cameron <jic23@kernel.org>
To: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org,
Gwendal Grignou <gwendal@chromium.org>,
Peter Meerwald-Stadler <pmeerw@pmeerw.net>,
Guenter Roeck <groeck@chromium.org>,
Benson Leung <bleung@chromium.org>,
Lars-Peter Clausen <lars@metafoo.de>,
kernel@collabora.com, Hartmut Knaack <knaack.h@gmx.de>
Subject: Re: [PATCH v3] iio: cros_ec: Fix the maths for gyro scale calculation
Date: Sat, 16 Mar 2019 16:09:32 +0000 [thread overview]
Message-ID: <20190316160932.102fc659@archlinux> (raw)
In-Reply-To: <20190313114002.11236-1-enric.balletbo@collabora.com>
On Wed, 13 Mar 2019 12:40:02 +0100
Enric Balletbo i Serra <enric.balletbo@collabora.com> wrote:
> From: Gwendal Grignou <gwendal@chromium.org>
>
> 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.000547890
>
> Fix 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
>
> Fixes: c14dca07a31d ("iio: cros_ec_sensors: add ChromeOS EC Contiguous Sensors driver")
> Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
> Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Applied to the fixes-togreg branch of iio.git and marked for stable.
Thanks,
Jonathan
> ---
>
> Changes in v3:
> - Fix 'warning: this decimal constant is unsigned only in ISO C90' spotted by kbuild test robot.
>
> Changes in v2:
> - Do the maths instead of play with dividers as pointed by Jonathan.
>
> drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c
> index 89cb0066a6e0..8d76afb87d87 100644
> --- a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c
> +++ b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c
> @@ -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:
> /*
prev parent reply other threads:[~2019-03-16 16:09 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-13 11:40 [PATCH v3] iio: cros_ec: Fix the maths for gyro scale calculation Enric Balletbo i Serra
2019-03-16 16:09 ` Jonathan Cameron [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190316160932.102fc659@archlinux \
--to=jic23@kernel.org \
--cc=bleung@chromium.org \
--cc=enric.balletbo@collabora.com \
--cc=groeck@chromium.org \
--cc=gwendal@chromium.org \
--cc=kernel@collabora.com \
--cc=knaack.h@gmx.de \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pmeerw@pmeerw.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.