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

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
Loading
Loading
Loading
Loading
+5 −17
Original line number Diff line number Diff line
@@ -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;