From: Jonathan Cameron <jic23@kernel.org>
To: Andreas Klinger <ak@it-klinger.de>
Cc: knaack.h@gmx.de, lars@metafoo.de, pmeerw@pmeerw.net,
zbynek.kocur@fel.cvut.cz, linux-iio@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] iio: srf04: fix wrong limitation in distance measuring
Date: Sat, 12 Oct 2019 14:32:26 +0100 [thread overview]
Message-ID: <20191012143226.4d4349ba@archlinux> (raw)
In-Reply-To: <20191006142952.hgfg2agypwpf2v55@arbad>
On Sun, 6 Oct 2019 16:29:56 +0200
Andreas Klinger <ak@it-klinger.de> wrote:
> The measured time value in the driver is limited to the maximum distance
> which can be read by the sensor. This limitation was wrong and is fixed
> by this patch.
>
> It also takes into account that we are supporting a variety of sensors
> today and that the recently added sensors have a higher maximum
> distance range.
>
> Changes in v2:
> - Added a Tested-by
>
> Suggested-by: Zbyněk Kocur <zbynek.kocur@fel.cvut.cz>
> Tested-by: Zbyněk Kocur <zbynek.kocur@fel.cvut.cz>
> Signed-off-by: Andreas Klinger <ak@it-klinger.de>
Applied to the fixes-togreg branch of iio.git and marked for stable.
Thanks,
Jonathan
> ---
> drivers/iio/proximity/srf04.c | 29 +++++++++++++++--------------
> 1 file changed, 15 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/iio/proximity/srf04.c b/drivers/iio/proximity/srf04.c
> index 8b50d56b0a03..01eb8cc63076 100644
> --- a/drivers/iio/proximity/srf04.c
> +++ b/drivers/iio/proximity/srf04.c
> @@ -110,7 +110,7 @@ static int srf04_read(struct srf04_data *data)
> udelay(data->cfg->trigger_pulse_us);
> gpiod_set_value(data->gpiod_trig, 0);
>
> - /* it cannot take more than 20 ms */
> + /* it should not take more than 20 ms until echo is rising */
> ret = wait_for_completion_killable_timeout(&data->rising, HZ/50);
> if (ret < 0) {
> mutex_unlock(&data->lock);
> @@ -120,7 +120,8 @@ static int srf04_read(struct srf04_data *data)
> return -ETIMEDOUT;
> }
>
> - ret = wait_for_completion_killable_timeout(&data->falling, HZ/50);
> + /* it cannot take more than 50 ms until echo is falling */
> + ret = wait_for_completion_killable_timeout(&data->falling, HZ/20);
> if (ret < 0) {
> mutex_unlock(&data->lock);
> return ret;
> @@ -135,19 +136,19 @@ static int srf04_read(struct srf04_data *data)
>
> dt_ns = ktime_to_ns(ktime_dt);
> /*
> - * measuring more than 3 meters is beyond the capabilities of
> - * the sensor
> + * measuring more than 6,45 meters is beyond the capabilities of
> + * the supported sensors
> * ==> filter out invalid results for not measuring echos of
> * another us sensor
> *
> * formula:
> - * distance 3 m
> - * time = ---------- = --------- = 9404389 ns
> - * speed 319 m/s
> + * distance 6,45 * 2 m
> + * time = ---------- = ------------ = 40438871 ns
> + * speed 319 m/s
> *
> * using a minimum speed at -20 °C of 319 m/s
> */
> - if (dt_ns > 9404389)
> + if (dt_ns > 40438871)
> return -EIO;
>
> time_ns = dt_ns;
> @@ -159,20 +160,20 @@ static int srf04_read(struct srf04_data *data)
> * with Temp in °C
> * and speed in m/s
> *
> - * use 343 m/s as ultrasonic speed at 20 °C here in absence of the
> + * use 343,5 m/s as ultrasonic speed at 20 °C here in absence of the
> * temperature
> *
> * therefore:
> - * time 343
> - * distance = ------ * -----
> - * 10^6 2
> + * time 343,5 time * 106
> + * distance = ------ * ------- = ------------
> + * 10^6 2 617176
> * with time in ns
> * and distance in mm (one way)
> *
> - * because we limit to 3 meters the multiplication with 343 just
> + * because we limit to 6,45 meters the multiplication with 106 just
> * fits into 32 bit
> */
> - distance_mm = time_ns * 343 / 2000000;
> + distance_mm = time_ns * 106 / 617176;
>
> return distance_mm;
> }
prev parent reply other threads:[~2019-10-12 13:32 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-06 14:29 [PATCH v2] iio: srf04: fix wrong limitation in distance measuring Andreas Klinger
2019-10-12 13:32 ` 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=20191012143226.4d4349ba@archlinux \
--to=jic23@kernel.org \
--cc=ak@it-klinger.de \
--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 \
--cc=zbynek.kocur@fel.cvut.cz \
/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.