* [PATCH v3 2/2] iio: hx711: fix bug in reset functionality
@ 2017-12-06 8:52 Andreas Klinger
2017-12-10 18:28 ` Jonathan Cameron
0 siblings, 1 reply; 2+ messages in thread
From: Andreas Klinger @ 2017-12-06 8:52 UTC (permalink / raw)
To: jic23, knaack.h, lars, pmeerw, singhalsimran0, linux-iio; +Cc: linux-kernel
Return value in hx711_reset() should indicate status of dout otherwise the
calling function is reporting an error as false positive
If there are two reads too close to each other, then the second one will
never succeed. This happens especially when using buffered mode with both
channels enabled.
When changing the channel on every trigger event the former 100 ms are not
enough for waiting until the device indicates normal mode.
Wait up to 1 second until the device turns into normal mode.
Signed-off-by: Andreas Klinger <ak@it-klinger.de>
---
drivers/iio/adc/hx711.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/drivers/iio/adc/hx711.c b/drivers/iio/adc/hx711.c
index 37982b93a227..0a2d0b6cd38a 100644
--- a/drivers/iio/adc/hx711.c
+++ b/drivers/iio/adc/hx711.c
@@ -153,15 +153,16 @@ static int hx711_wait_for_ready(struct hx711_data *hx711_data)
int i, val;
/*
- * a maximum reset cycle time of 56 ms was measured.
- * we round it up to 100 ms
+ * in some rare cases the reset takes quite a long time
+ * especially when the channel is changed.
+ * Allow up to one second for it
*/
for (i = 0; i < 100; i++) {
val = gpiod_get_value(hx711_data->gpiod_dout);
if (!val)
break;
- /* sleep at least 1 ms */
- msleep(1);
+ /* sleep at least 10 ms */
+ msleep(10);
}
if (val)
return -EIO;
@@ -203,9 +204,7 @@ static int hx711_reset(struct hx711_data *hx711_data)
* after a dummy read we need to wait vor readiness
* for not mixing gain pulses with the clock
*/
- ret = hx711_wait_for_ready(hx711_data);
- if (ret)
- return ret;
+ val = hx711_wait_for_ready(hx711_data);
}
return val;
--
2.1.4
--
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH v3 2/2] iio: hx711: fix bug in reset functionality
2017-12-06 8:52 [PATCH v3 2/2] iio: hx711: fix bug in reset functionality Andreas Klinger
@ 2017-12-10 18:28 ` Jonathan Cameron
0 siblings, 0 replies; 2+ messages in thread
From: Jonathan Cameron @ 2017-12-10 18:28 UTC (permalink / raw)
To: Andreas Klinger
Cc: knaack.h, lars, pmeerw, singhalsimran0, linux-iio, linux-kernel
On Wed, 6 Dec 2017 09:52:20 +0100
Andreas Klinger <ak@it-klinger.de> wrote:
> Return value in hx711_reset() should indicate status of dout otherwise the
> calling function is reporting an error as false positive
>
> If there are two reads too close to each other, then the second one will
> never succeed. This happens especially when using buffered mode with both
> channels enabled.
>
> When changing the channel on every trigger event the former 100 ms are not
> enough for waiting until the device indicates normal mode.
>
> Wait up to 1 second until the device turns into normal mode.
>
> Signed-off-by: Andreas Klinger <ak@it-klinger.de>
This looks fine to me. I'll pick it up once patch 1 is ready.
Thanks,
Jonathan
> ---
> drivers/iio/adc/hx711.c | 13 ++++++-------
> 1 file changed, 6 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/iio/adc/hx711.c b/drivers/iio/adc/hx711.c
> index 37982b93a227..0a2d0b6cd38a 100644
> --- a/drivers/iio/adc/hx711.c
> +++ b/drivers/iio/adc/hx711.c
> @@ -153,15 +153,16 @@ static int hx711_wait_for_ready(struct hx711_data *hx711_data)
> int i, val;
>
> /*
> - * a maximum reset cycle time of 56 ms was measured.
> - * we round it up to 100 ms
> + * in some rare cases the reset takes quite a long time
> + * especially when the channel is changed.
> + * Allow up to one second for it
> */
> for (i = 0; i < 100; i++) {
> val = gpiod_get_value(hx711_data->gpiod_dout);
> if (!val)
> break;
> - /* sleep at least 1 ms */
> - msleep(1);
> + /* sleep at least 10 ms */
> + msleep(10);
> }
> if (val)
> return -EIO;
> @@ -203,9 +204,7 @@ static int hx711_reset(struct hx711_data *hx711_data)
> * after a dummy read we need to wait vor readiness
> * for not mixing gain pulses with the clock
> */
> - ret = hx711_wait_for_ready(hx711_data);
> - if (ret)
> - return ret;
> + val = hx711_wait_for_ready(hx711_data);
> }
>
> return val;
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-12-10 18:28 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-12-06 8:52 [PATCH v3 2/2] iio: hx711: fix bug in reset functionality Andreas Klinger
2017-12-10 18:28 ` Jonathan Cameron
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).