.../devicetree/bindings/iio/adc/ti,ads1018.yaml | 82 ++ MAINTAINERS | 7 + drivers/iio/adc/Kconfig | 12 + drivers/iio/adc/Makefile | 1 + drivers/iio/adc/ti-ads1018.c | 826 +++++++++++++++++++++ 5 files changed, 928 insertions(+)
Hi,
This series adds a new driver for TI ADS1X18 SPI devices.
This is my first time contributing to the IIO subsystem and making
dt-bindings documentation, so (don't) go easy on me :p.
As explained in Patch 2 changelog, the DRDY interrupt line is shared
with the MOSI pin. This awkward quirk is also found on some Analog
Devices sigma-delta SPI ADCs, so the interrupt and trigger design is
inspired by those.
Thank you in advance for your reviews.
Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
v2:
- [Patch 1]:
- Move MAINTAINERS change here
- Use generic node names: ads1118@0 -> adc@0
- Rename file to ti,ads1118.yaml -> ti,ads1018.yaml
- Drop ti,gain and ti,datarate
- Add spi-cpha and spi-max-frecuency properties as they are fixed in
all models
- Add vdd-supply
- Make interrupts and drdy-gpios optional properties
- [Patch 2]:
- Update probe based on dt-bindings changes
- Rename file to ti-ads1x18.c -> ti-ads1018.c
- Rework ads1018_oneshot(), instead of waiting for IRQ wait an
appropriate delay before reading again
- Only alloc and register a trigger if we have an IRQ line
- Drop ads1x18->msg_lock in favor of IIO API locks
- Read conver before enabling and after disabling IRQ to ensure CS
state is correct
- Add ads1018_read_locked() which takes an additional argument
`hold_cs` to explicitly control CS state in trigger and buffer
- Fix ADS1X18_CHANNELS_MAX limit 9 -> 10
- Call iio_trigger_notify_done() in all IRQ handler paths
- Drop unused includes
- Drop BIT_U16 and GENMASK_U16 macros
- Drop unnecessary named defines
- Use u8 types in ads1018_chan_data
- Rename some struct members for clarity
- Move tx_buf and rx_buf to the end of struct ads1018
- Rework channel handling to just make everything visible and add
ADS1018_VOLT_DIFF_CHAN
- Use .scan_index instead of .address in IIO channels
- v1: https://lore.kernel.org/r/20251121-ads1x18-v1-0-86db080fc9a4@gmail.com
---
v3:
- [Patch 1]:
- Use unevaluatedProperties: false
- Drop #address-cells and #size-cells
- [Patch 2]:
- Add kernel-doc to internal API
- Drop bits.h and bitops.h includes
- Add types.h include
- Use unsigned type for data_rate_mode_to_hz
- Rename __ads1018_read_raw() -> ads1018_read_raw_unlocked()
- Rename __ads1018_write_raw() -> ads1018_write_raw_unlocked()
- Rename ads1018_read_locked -> ads1018_read_unlocked() for
consistency
- Let ads1018_read_unlocked() take NULL cnv pointers
- Add ads1018_set_trigger_{enable,disable}()
- Refactor ads1018_write_raw_unlocked() loop matching
- Invert ads1018_trigger_handler() logic to follow traditional error
handling pattern
- Refactor ads1018_trigger_setup() cleaner
- Make ADS1018_FSR_TO_SCALE() calculation be 32-bit compatible
- Some additionall minor cleanups
- Link to v2: https://lore.kernel.org/r/20251127-ads1x18-v2-0-2ebfd780b633@gmail.com
---
v4:
- [Patch 2]:
- Replaced <linux/byteorder/generic.h> -> <asm/byteorder.h>
- Dropped ADS1018_CFG_DEFAULT
- Fixed long lines
- Added Andy's remark on ADS1018_FSR_TO_SCALE() kernel-doc
description.
- Fixed wrong argument on iio_trigger_notify_done():
ads1018->indio_trig -> indio_dev->trig
- Renamed argument in channel macros _addr -> _index
- Changed return type of ads1018_calc_delay() to u32
- Mention @cnv is optional in ads1018_read_unlocked()
- Use 16-bit transmission cycle in ads1018_oneshot()
- Dropped spi_set_drvdata()
- Use full resolution in ADS1018_FSR_TO_SCALE() and subtract 1
inside macro
- Rename ads1018_read_locked() -> ads1018_spi_read_exclusive() for
clarity
- Minor style changes
- Link to v3: https://lore.kernel.org/r/20251128-ads1x18-v3-0-a6ebab815b2d@gmail.com
---
v5:
- [Patch 2]:
- Fix ADS1018_FSR_TO_SCALE() long description
- In ADS1018_FSR_TO_SCALE() subtract 6 from BIT() argument instead
of shifting the value
- Link to v4: https://lore.kernel.org/r/20251202-ads1x18-v4-0-8c3580bc273f@gmail.com
---
Kurt Borja (2):
dt-bindings: iio: adc: Add TI ADS1018/ADS1118
iio: adc: Add ti-ads1018 driver
.../devicetree/bindings/iio/adc/ti,ads1018.yaml | 82 ++
MAINTAINERS | 7 +
drivers/iio/adc/Kconfig | 12 +
drivers/iio/adc/Makefile | 1 +
drivers/iio/adc/ti-ads1018.c | 826 +++++++++++++++++++++
5 files changed, 928 insertions(+)
---
base-commit: f9e05791642810a0cf6237d39fafd6fec5e0b4bb
change-id: 20251012-ads1x18-0d0779d06690
--
~ Kurt
On Thu Dec 4, 2025 at 12:55 PM -05, Kurt Borja wrote: > Hi, > > This series adds a new driver for TI ADS1X18 SPI devices. > > This is my first time contributing to the IIO subsystem and making > dt-bindings documentation, so (don't) go easy on me :p. > > As explained in Patch 2 changelog, the DRDY interrupt line is shared > with the MOSI pin. This awkward quirk is also found on some Analog > Devices sigma-delta SPI ADCs, so the interrupt and trigger design is > inspired by those. > > Thank you in advance for your reviews. > > Signed-off-by: Kurt Borja <kuurtb@gmail.com> Ah - I sent this by mistake without making any changes. Apologies for the noise :(. I will send the correct version as v6. -- ~ Kurt
© 2016 - 2025 Red Hat, Inc.