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: Andreas Klinger <ak@it-klinger.de> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
1cd92d42db
commit
68d8ab3cf1
@ -23,6 +23,7 @@
|
||||
|
||||
/* gain to pulse and scale conversion */
|
||||
#define HX711_GAIN_MAX 3
|
||||
#define HX711_RESET_GAIN 128
|
||||
|
||||
struct hx711_gain_to_scale {
|
||||
int gain;
|
||||
@ -185,8 +186,7 @@ static int hx711_wait_for_ready(struct hx711_data *hx711_data)
|
||||
|
||||
static int hx711_reset(struct hx711_data *hx711_data)
|
||||
{
|
||||
int ret;
|
||||
int val = gpiod_get_value(hx711_data->gpiod_dout);
|
||||
int val = hx711_wait_for_ready(hx711_data);
|
||||
|
||||
if (val) {
|
||||
/*
|
||||
@ -202,22 +202,10 @@ static int hx711_reset(struct hx711_data *hx711_data)
|
||||
msleep(10);
|
||||
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);
|
||||
|
||||
/* after a reset the gain is 128 */
|
||||
hx711_data->gain_set = HX711_RESET_GAIN;
|
||||
}
|
||||
|
||||
return val;
|
||||
|
Loading…
Reference in New Issue
Block a user