Skip to content

Add support for AD4052 ADC Family #2642

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 36 commits into
base: mirror/jic23/iio/testing
Choose a base branch
from

Conversation

gastmaier
Copy link
Contributor

@gastmaier gastmaier commented Nov 1, 2024

Changes to backport to main

driver=drivers/iio/adc/ad4052.c
doc=Documentation/iio/ad4052.rst
bin=Documentation/devicetree/bindings/iio/adc/adi,ad4052.yaml
inc=include/dt-bindings/iio/adc/adi,ad4052.h
abi=Documentation/ABI/testing/sysfs-bus-iio
adi=../linux
up=../../linux-upstream

up2adi () {
        cp $up/$driver $adi/$driver
        cp $up/$doc $adi/$doc
        cp $up/$bin $adi/$bin
        cp $up/$abi $adi/$abi
        cp $up/$inc $adi/$inc
        #sed -i -e 's/iio_device_release_direct(/iio_device_release_direct_mode(/g' \
        #       -e 's/\!iio_device_claim_direct(/iio_device_claim_direct_mode(/g' \
        sed -i -e 's/bool state/int state/' \
               -e 's/linux\/unaligned.h/asm-generic\/unaligned.h/' \
               -e 's/("IIO_DMAENGINE_BUFFER")/(IIO_DMAENGINE_BUFFER)/' $adi/$driver
}

PR Type

  • Bug fix (a change that fixes an issue)
  • New feature (a change that adds new functionality)
  • Breaking change (a change that affects other repos or cause CIs to fail)

PR Checklist

  • I have conducted a self-review of my own code changes
  • I have tested the changes on the relevant hardware
  • I have updated the documentation outside this repo accordingly (if there is the case)

@gastmaier
Copy link
Contributor Author

gastmaier commented Nov 4, 2024

Forced pushed to:

  • Add support to TIMER_CONFIG.FS_BURST_AUTO
  • Only write GP during probe.
  • Simplify IRQ Handler, leave to the user to clear the irq, because:
    • Entering config mode causes the irq to unset.
    • Re-entering monitor mode sets the irq back if still outside the threshold range, causing new handler calls.
    • "Ignoring next interrupt" would generate obnoxious logic.

Forced pushed (2) to:

  • Invert fs_burst_auto array entries, default all devices to 2MSPS (Yes, this value is -EINVAL for ad4056/ad4058, but is the datasheet reset value)

Forced pushed (3) to:

  • Clean-up unused enums.
  • Rename ad405x to ad4052 in the dts

@gastmaier gastmaier force-pushed the staging/ad4052 branch 3 times, most recently from 1f5b827 to 9611c42 Compare November 6, 2024 19:03
Copy link
Collaborator

@nunojsa nunojsa left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here it goes first round of review...

I think this one can be upstreamed without the offload bits

gastmaier

This comment was marked as duplicate.

@gastmaier gastmaier force-pushed the staging/ad4052 branch 2 times, most recently from 4b81da9 to 494d89f Compare November 12, 2024 00:15
@gastmaier
Copy link
Contributor Author

gastmaier commented Nov 12, 2024

Change log v0 -> v1

Review changes:

  • Move functional modes from devicetree entry to different OVERSAMPLING_RATIO values, affecting RAW read and buffered.
  • Documentation YAML fixes, removal of functional mode.
  • Header on alphabetical order.
  • Use field_prep
  • Remove forward declaration, reorder methods instead.
  • Fix cache line aligment.
  • Use devm runtime enable, remove manual remove.
  • Use dev_err_probe
  • General Documentation/.yaml fixes
  • Make all regmap_bulk dma safe.
  • Remove/simplify switch cases where not needed.
  • Instead of using of_node, use spi->irq directly
  • Use regmap update bits.
  • Use fsleep
  • Use oversampling iio property (value 0 is invalid, 1 put on Sample Mode, > 1 Burst Averaging mode)

New:

  • Add regmap access tables

Design changes:

  • Under IIO Event thrshold enabled (device Monitor Mode), return device access busy for every other access, simplifying logic by not requiring exiting and re-entering mode and having an obscure "monitoring downtime" during access.
  • Use oversampling iio prop instead of devicetree entry to switch functional modes.

tristate "Analog Devices AD4052 Driver"
depends on SPI
depends on PWM
depends on GPIOLIB
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm also not sure if gpio is something you should depend on or just select it. I think the single shot reading could be something useful to have even more to make this driver more upstreamable without offload support (we can still some questions about it though).

tristate "Analog Devices AD4052 Driver"
depends on SPI
depends on PWM
depends on GPIOLIB
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also one not on the commit message. Style is iio: adc: .... Drop the drivers:

if (val == 0) {
st->mode = AD4052_SAMPLE_MODE;
} else {
st->mode = AD4052_BURST_AVERAGING_MODE;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would double check other examples of oversampling. To me this is a 1 or 0 thing. Either it's enabled it not. Your mode variable also just seems to have two states here so the way you're handling val raises some questions.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The device supports from 2 to 4096 in powers of 2 samples for avg mode.
Decided to reserve 0 and 1 to disable the feature (return to sample mode)

@gastmaier
Copy link
Contributor Author

gastmaier commented Nov 17, 2024

Change log v1 -> v2

Review changes:

  • Include all peripheral properties
  • Drop cnv-gpio description
  • Updated dt-binding commit description
  • Replace d32 array by d16/d32 union (requires ignoring misleading checkpatch warning).
  • Remove MODULE_IMPORT_NS(IIO_AD4052);
  • Add error handling where missing
  • remove {} in single statement ifs, coherent style
  • Use multiple scan masks for changing precision due to oversampling
  • Move all if (st->mode == AD4052_MONITOR_MODE) inside the IIO mutex claim.
  • Drop switches where there is only one channel/event type
  • Remove unused AD4052_AVERAGING_MODE (would require a timed trigger) and AD4052_CONFIG_MODE (implicit mode outside any reading)
  • ad4052_set_avg_filter pass st directly.
  • Use different variables instead of the array for the chip_info

Changes:

  • Use GPIO interrupt instead of PS IRQ
  • All GPIOs are optional, does not require GPIO on KConfig. The user shall bring his own external trigger or short the CS and CNV, for example.
  • Move PWM sampling rate to IIO_ATTR
  • Move ext fs_burst_auto to channel sampling freq
  • Use Data Ready assertions for single shot readings, timeout after 1 second

Extra force push to resolve merge conflict

@gastmaier gastmaier requested a review from nunojsa November 25, 2024 13:20
@gastmaier gastmaier force-pushed the staging/ad4052 branch 2 times, most recently from eb23140 to 0506d4c Compare November 27, 2024 17:18
@github-actions github-actions bot force-pushed the mirror/jic23/iio/testing branch 7 times, most recently from b5616ca to 6247b30 Compare June 15, 2025 00:08
@github-actions github-actions bot force-pushed the mirror/jic23/iio/testing branch 5 times, most recently from 82b78d9 to aa36d77 Compare June 20, 2025 00:08
@github-actions github-actions bot force-pushed the mirror/jic23/iio/testing branch 8 times, most recently from 0cf4b64 to 21d6db3 Compare June 30, 2025 00:08
@github-actions github-actions bot force-pushed the mirror/jic23/iio/testing branch 8 times, most recently from 7cb13b5 to 09c3845 Compare July 8, 2025 00:08
@github-actions github-actions bot force-pushed the mirror/jic23/iio/testing branch 2 times, most recently from 23e6418 to cb72b0b Compare July 10, 2025 00:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.