The HX710B is a 24-bit ADC from AVIA Semiconductor, related to the
HX711 already supported in this driver. Unlike the HX711 (which has
selectable gain and two input channels), the HX710B has a fixed gain
of 128 and two operating modes selected by the trailing PD_SCK pulse
count after each conversion:
25 pulses (1 trailing): differential input at 10 SPS
26 pulses (2 trailing): DVDD-AVDD supply monitor at 40 SPS
27 pulses (3 trailing): differential input at 40 SPS
This series first extends the existing HX711 binding and driver with
preparatory refactoring, then adds HX710B support on top.
The differential input is exposed as a single IIO channel with
IIO_CHAN_INFO_SAMP_FREQ, allowing userspace to select 10 or 40 SPS
without needing two separate channels for the same physical input.
The supply monitor is a second channel at fixed 40 SPS.
Patches 01/11, 02/11, 03/11, and 05/11 have already been applied to
the iio.git testing branch. They are re-included here so the series
applies cleanly as a unit.
Changes from v8:
- 04/11: Dropped a misleading sentence from the commit message that
suggested HX711-only binding extensions live in earlier patches
(they do not; the earlier patches extend the shared binding).
- 06/11: No code change. Added a note below the --- line clarifying
that __counted_by_ptr() is available since 6.12 (this tree is
6.17), so the annotation is well-defined.
- 11/11: Redesigned HX710B channel layout per Jonathan's v8 review.
Modes 1 and 3 both read the same physical differential input, so
they are now a single IIO channel with IIO_CHAN_INFO_SAMP_FREQ
instead of two separate channels. Added hx710b_write_raw() and
hx710b_read_avail() to let userspace control the sample rate.
Introduced hx710b_trailing_pulses() helper so .address is no longer
needed in the channel spec. Fixed hx711_trigger() to check the
return value of hx711_reset_read() and bail out on error. Fixed
channel_set update ordering in hx711_set_hx710b_channel() so the
field is written immediately after hx711_read() commits the new
hardware mode, before waiting for the chip to be ready.
Piyush Patle (11):
dt-bindings: iio: adc: hx711: clean up existing binding text
dt-bindings: iio: adc: hx711: add VSUP supply property
dt-bindings: iio: adc: hx711: add RATE GPIO property
dt-bindings: iio: adc: hx711: add HX710B support
iio: adc: hx711: move scale computation to per-device storage
iio: adc: hx711: introduce hx711_chip_info structure
iio: adc: hx711: pass trailing pulse count into hx711_read
iio: adc: hx711: split variable assignments in hx711_read and
hx711_reset
iio: adc: hx711: localize loop iterators in hx711_read
iio: adc: hx711: pass iio_chan_spec to hx711_reset_read
iio: adc: hx711: add support for HX710B
.../bindings/iio/adc/avia-hx711.yaml | 77 +++-
drivers/iio/adc/Kconfig | 8 +-
drivers/iio/adc/hx711.c | 362 ++++++++++++++----
3 files changed, 362 insertions(+), 85 deletions(-)
--
2.43.0