Commit 68d8ab3c authored by Andreas Klinger's avatar Andreas Klinger Committed by Jonathan Cameron

iio: adc: hx711: optimize performance in read cycle

Set gain in hx711_reset() to its default value after a reset cycle. This
omits one precautionary read cycle, because the read is performed in
hx711_set_gain_for_channel() anyway if gain has changed.

Check for DOUT low and if its high wait some time if it goes down
instead of doing a blind reset cycle when DOUT is not down.

This is a performance optimization which allows to query the sensor with
a higher frequency.
Signed-off-by: default avatarAndreas Klinger <ak@it-klinger.de>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 1cd92d42
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
/* gain to pulse and scale conversion */ /* gain to pulse and scale conversion */
#define HX711_GAIN_MAX 3 #define HX711_GAIN_MAX 3
#define HX711_RESET_GAIN 128
struct hx711_gain_to_scale { struct hx711_gain_to_scale {
int gain; int gain;
...@@ -185,8 +186,7 @@ static int hx711_wait_for_ready(struct hx711_data *hx711_data) ...@@ -185,8 +186,7 @@ static int hx711_wait_for_ready(struct hx711_data *hx711_data)
static int hx711_reset(struct hx711_data *hx711_data) static int hx711_reset(struct hx711_data *hx711_data)
{ {
int ret; int val = hx711_wait_for_ready(hx711_data);
int val = gpiod_get_value(hx711_data->gpiod_dout);
if (val) { if (val) {
/* /*
...@@ -202,22 +202,10 @@ static int hx711_reset(struct hx711_data *hx711_data) ...@@ -202,22 +202,10 @@ static int hx711_reset(struct hx711_data *hx711_data)
msleep(10); msleep(10);
gpiod_set_value(hx711_data->gpiod_pd_sck, 0); gpiod_set_value(hx711_data->gpiod_pd_sck, 0);
ret = hx711_wait_for_ready(hx711_data);
if (ret)
return ret;
/*
* after a reset the gain is 128 so we do a dummy read
* to set the gain for the next read
*/
ret = hx711_read(hx711_data);
if (ret < 0)
return ret;
/*
* after a dummy read we need to wait vor readiness
* for not mixing gain pulses with the clock
*/
val = hx711_wait_for_ready(hx711_data); val = hx711_wait_for_ready(hx711_data);
/* after a reset the gain is 128 */
hx711_data->gain_set = HX711_RESET_GAIN;
} }
return val; return val;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment