[PATCH v6 00/10] Support ROHM BD79124 ADC

Matti Vaittinen
2025-03-10T12:54:02Z

[-- Attachment #1: Type: text/plain, Size: 4888 bytes --]

Support ROHM BD79124 ADC.

This series adds also couple of IIO ADC helper functions for parsing the
channel information from the device tree. There are also new helpers
included for iterating and counting firmware child nodes with a specific
name.

Series does also convert couple of drivers to use these helpers. The
rzg2l_adc and the sun20i-gpadc are converted to use the new ADC helper.

The gianfar driver under net and the thp7312 under media/i2c are added as
first users of the newly added "named child node" -helpers.

There has been some discussion about how useful these ADC helpers are,
and whether they should support also differential and single ended channel
configurations. This version does not include support for those - with the
benefit of reduced complexity and easier to use API.

NOTE: Patches 4,5,9 and 10 are untested as I lack of relevant HW.
They have been compile tested only.

The ROHM BD79124 ADC itself is quite usual stuff. 12-bit, 8-channel ADC
with threshold monitoring.

Except that:
- each ADC input pin can be configured as a general purpose output.
- manually starting an ADC conversion and reading the result would
require the I2C _master_ to do clock stretching(!) for the duration
of the conversion... Let's just say this is not well supported.
- IC supports 'autonomous measurement mode' and storing latest results
to the result registers. This mode is used by the driver due to the
"peculiar" I2C when doing manual reads.

Furthermore, the ADC uses this continuous autonomous measuring,
and the IC keeps producing new 'out of window' IRQs if measurements are
out of window - the driver disables the event for 1 seconds when sending
it to user. This prevents generating storm of events

Revision history:
v5 => v6:
- Drop applied patch
- Add *_for_each_named_child_* iterators
- Add a patch converting the thp7312 driver to use the new helper
- Styling and minor things pointed by reviewers

v4 => v5: Fixes as per various review comments. Most notably:
- Drop the patch making the TI's ADC driver to respect device tree.
- Add (RFC) patch converting gianfar driver to use new name child-node
counting API as suggested by Andy.
- Add fwnode_get_child_node_count_named() as suggested by Rob.
- rebase to v6.14-rc5
More accurate changelog in individual patches.

v3 => v4:
- Drop the ADC helper support for differential channels
- Drop the ADC helper for getting only channel IDs by fwnode.
- "Promote" the function counting the number of child nodes with a
specific name to the property.h (As suggested by Jonathan).
- Add ADC helpers to a namespace.
- Rebase on v6.14-rc3
- More minor changes described in individual patches.

v2 => v3:
- Restrict BD79124 channel numbers as suggested by Conor and add
Conor's Reviewed-by tag.
- Support differential and single-ended inputs
- Convert couple of existing drivers to use the added ADC helpers
- Minor fixes based on reviews
Link to v2:
https://lore.kernel.org/all/cover.1738761899.git.mazziesaccount@gmail.com/

RFC v1 => v2:
- Drop MFD and pinmux.
- Automatically re-enable events after 1 second.
- Export fwnode parsing helpers for finding the ADC channels.

---

Matti Vaittinen (10):
dt-bindings: ROHM BD79124 ADC/GPO
property: Add functions to iterate named child
iio: adc: add helpers for parsing ADC nodes
iio: adc: rzg2l_adc: Use adc-helpers
iio: adc: sun20i-gpadc: Use adc-helpers
iio: adc: Support ROHM BD79124 ADC
MAINTAINERS: Add IIO ADC helpers
MAINTAINERS: Add ROHM BD79124 ADC/GPO
net: gianfar: Use device_get_child_node_count_named()
media: thp7312: Use helper for iterating named child nodes

.../bindings/iio/adc/rohm,bd79124.yaml | 114 ++
MAINTAINERS | 12 +
drivers/base/property.c | 54 +
drivers/iio/adc/Kconfig | 17 +
drivers/iio/adc/Makefile | 3 +
drivers/iio/adc/industrialio-adc.c | 79 ++
drivers/iio/adc/rohm-bd79124.c | 1106 +++++++++++++++++
drivers/iio/adc/rzg2l_adc.c | 38 +-
drivers/iio/adc/sun20i-gpadc-iio.c | 38 +-
drivers/media/i2c/thp7312.c | 8 +-
drivers/net/ethernet/freescale/gianfar.c | 17 +-
include/linux/iio/adc-helpers.h | 27 +
include/linux/property.h | 20 +
13 files changed, 1471 insertions(+), 62 deletions(-)
create mode 100644 Documentation/devicetree/bindings/iio/adc/rohm,bd79124.yaml
create mode 100644 drivers/iio/adc/industrialio-adc.c
create mode 100644 drivers/iio/adc/rohm-bd79124.c
create mode 100644 include/linux/iio/adc-helpers.h

base-commit: 7eb172143d5508b4da468ed59ee857c6e5e01da6
--
2.48.1

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]