[PATCH v6 0/5] Add support for ADAQ776x-1 ADC Family

Jonathan Santos posted 5 patches 3 weeks, 2 days ago
.../bindings/iio/adc/adi,ad7768-1.yaml        |  64 ++-
drivers/iio/adc/Kconfig                       |   1 +
drivers/iio/adc/ad7768-1.c                    | 423 +++++++++++++++---
include/linux/units.h                         |  19 +
4 files changed, 453 insertions(+), 54 deletions(-)
[PATCH v6 0/5] Add support for ADAQ776x-1 ADC Family
Posted by Jonathan Santos 3 weeks, 2 days ago
This adds support for the ADAQ7767-1, ADAQ7768-1 and ADAQ7769-1 devices. 

The ADAQ7768-1 and ADAQ7769-1 integrate a programmable gain amplifier (PGA)
with 7 and 8 gain options, respectively. The ADAQ7767-1 and ADAQ7769-1 
also feature a 3-pin selectable Anti-aliasing filter (AAF) gain.

---
Changes in v6:
* Use Pattern PER* for all percentage-related macros and include macros 
  for Per mille and per cent mille units.
* Refactored ad7768_parse_aaf_gain() to improve cleanliness and readability.
* Link to v5: https://lore.kernel.org/linux-iio/cover.1765900411.git.Jonathan.Santos@analog.com/T/#t/

Changes in v5:
* Added PERCENT macro along with BASIS_POINTS in units.h.
* Added new patch to allow writing attributes without direct mode claim.
* Write scale attribute without direct mode claim to avoid deadlock
  when using GPIOs from the device's own controller.
* Link to v4: https://lore.kernel.org/linux-iio/cover.1764101647.git.Jonathan.Santos@analog.com/T/#t


Changes in v4:
* Removed u64_fract type patch, as it is not used. u32_fract is sufficient
  for the PGA gain calculations.
* Added new patch adding BASIS_POINTS macro to units.h.
* Included pga-gpios property for parts that support PGA gain.
  Before we were using the internal gpio controller to manage the PGA pins,
  but still exposing the controller for external use (causing possible conflicts).
* Addressed other review comments, see individual patches.
* Link to v3: https://lore.kernel.org/linux-iio/cover.1757001160.git.Jonathan.Santos@analog.com/T/#t

Changes in v3:
* Renamed adi,gain-milli to adi,aaf-gain-bp. Now it represents basis points
  (one hundredth of a percent).
* ad7768_channel_masks removed along with available_masks element in
  ad7768_chip_info struct. It does not add anything for single channels,
  so not needed, at least for now.
* New patch adding 64-bit fractional number types to math.h.
* Moved aaf gain parsing to its own function, and now returning after
  warning to avoid setting a variable when it shouldn't (avoid confusion).
* ad7768_set_pga_gain(): removed the pgia enable check, relying on the
  regmap cache.
* Addressed other review comments, see individual patches.

Changes in v2:
* adi,aaf-gain property renamed to adi,gain-milli. Default value added.
* fixed some commit messages. 
* Added 'select RATIONAL' to Kconfig.
* Added lock to protect PGA value access.
* rewrote AAF gain check and replaced error returns with warnings.
* Addressed other review comments, see individual patches.
* Link to v1: https://lore.kernel.org/linux-iio/cover.1754617360.git.Jonathan.Santos@analog.com/T/#t

Jonathan Santos (5):
  dt-bindings: iio: adc: ad7768-1: add new supported parts
  iio: adc: ad7768-1: introduce chip info for future multidevice support
  units: add conversion macros for percentage related units
  iio: adc: ad7768-1: refactor ad7768_write_raw()
  iio: adc: ad7768-1: add support for ADAQ776x-1 ADC Family

 .../bindings/iio/adc/adi,ad7768-1.yaml        |  64 ++-
 drivers/iio/adc/Kconfig                       |   1 +
 drivers/iio/adc/ad7768-1.c                    | 423 +++++++++++++++---
 include/linux/units.h                         |  19 +
 4 files changed, 453 insertions(+), 54 deletions(-)


base-commit: e0bc6d7e258486c10bb11e31fd4421c134063b1d
-- 
2.34.1
Re: [PATCH v6 0/5] Add support for ADAQ776x-1 ADC Family
Posted by Jonathan Cameron 2 weeks, 1 day ago
On Wed, 14 Jan 2026 06:26:22 -0300
Jonathan Santos <Jonathan.Santos@analog.com> wrote:

> This adds support for the ADAQ7767-1, ADAQ7768-1 and ADAQ7769-1 devices. 
> 
> The ADAQ7768-1 and ADAQ7769-1 integrate a programmable gain amplifier (PGA)
> with 7 and 8 gain options, respectively. The ADAQ7767-1 and ADAQ7769-1 
> also feature a 3-pin selectable Anti-aliasing filter (AAF) gain.
> 
> ---
> Changes in v6:
> * Use Pattern PER* for all percentage-related macros and include macros 
>   for Per mille and per cent mille units.
> * Refactored ad7768_parse_aaf_gain() to improve cleanliness and readability.
> * Link to v5: https://lore.kernel.org/linux-iio/cover.1765900411.git.Jonathan.Santos@analog.com/T/#t/
> 
> Changes in v5:
> * Added PERCENT macro along with BASIS_POINTS in units.h.
> * Added new patch to allow writing attributes without direct mode claim.
> * Write scale attribute without direct mode claim to avoid deadlock
>   when using GPIOs from the device's own controller.
> * Link to v4: https://lore.kernel.org/linux-iio/cover.1764101647.git.Jonathan.Santos@analog.com/T/#t
> 
> 
> Changes in v4:
> * Removed u64_fract type patch, as it is not used. u32_fract is sufficient
>   for the PGA gain calculations.
> * Added new patch adding BASIS_POINTS macro to units.h.
> * Included pga-gpios property for parts that support PGA gain.
>   Before we were using the internal gpio controller to manage the PGA pins,
>   but still exposing the controller for external use (causing possible conflicts).
> * Addressed other review comments, see individual patches.
> * Link to v3: https://lore.kernel.org/linux-iio/cover.1757001160.git.Jonathan.Santos@analog.com/T/#t
> 
> Changes in v3:
> * Renamed adi,gain-milli to adi,aaf-gain-bp. Now it represents basis points
>   (one hundredth of a percent).
> * ad7768_channel_masks removed along with available_masks element in
>   ad7768_chip_info struct. It does not add anything for single channels,
>   so not needed, at least for now.
> * New patch adding 64-bit fractional number types to math.h.
> * Moved aaf gain parsing to its own function, and now returning after
>   warning to avoid setting a variable when it shouldn't (avoid confusion).
> * ad7768_set_pga_gain(): removed the pgia enable check, relying on the
>   regmap cache.
> * Addressed other review comments, see individual patches.
> 
> Changes in v2:
> * adi,aaf-gain property renamed to adi,gain-milli. Default value added.
> * fixed some commit messages. 
> * Added 'select RATIONAL' to Kconfig.
> * Added lock to protect PGA value access.
> * rewrote AAF gain check and replaced error returns with warnings.
> * Addressed other review comments, see individual patches.
> * Link to v1: https://lore.kernel.org/linux-iio/cover.1754617360.git.Jonathan.Santos@analog.com/T/#t
> 
> Jonathan Santos (5):
>   dt-bindings: iio: adc: ad7768-1: add new supported parts
>   iio: adc: ad7768-1: introduce chip info for future multidevice support
>   units: add conversion macros for percentage related units
>   iio: adc: ad7768-1: refactor ad7768_write_raw()
>   iio: adc: ad7768-1: add support for ADAQ776x-1 ADC Family
Applied with this diff to last patch.  Will first push out as testing to
let 0-day take a look.

Shout if the change is a problem.

diff --git a/drivers/iio/adc/ad7768-1.c b/drivers/iio/adc/ad7768-1.c
index 980c079ab41a..dc5be3d14664 100644
--- a/drivers/iio/adc/ad7768-1.c
+++ b/drivers/iio/adc/ad7768-1.c
@@ -535,9 +535,10 @@ static void ad7768_fill_scale_tbl(struct iio_dev *dev)
 {
        struct ad7768_state *st = iio_priv(dev);
        const struct iio_scan_type *scan_type;
-       int val, val2, tmp0, tmp1, i;
+       int val, val2, tmp0, i;
        struct u32_fract fract;
        unsigned long n, d;
+       u32 tmp1;
        u64 tmp2;
 
        scan_type = iio_get_current_scan_type(dev, &dev->channels[0]);
@@ -563,7 +564,7 @@ static void ad7768_fill_scale_tbl(struct iio_dev *dev)
                tmp2 = ((u64)val * MICRO) >> val2;
                tmp0 = div_u64_rem(tmp2, NANO, &tmp1);
                st->scale_tbl[i][0] = tmp0; /* Integer part */
-               st->scale_tbl[i][1] = abs(tmp1); /* Fractional part */
+               st->scale_tbl[i][1] = tmp1; /* Fractional part */
        }
 }
 

> 
>  .../bindings/iio/adc/adi,ad7768-1.yaml        |  64 ++-
>  drivers/iio/adc/Kconfig                       |   1 +
>  drivers/iio/adc/ad7768-1.c                    | 423 +++++++++++++++---
>  include/linux/units.h                         |  19 +
>  4 files changed, 453 insertions(+), 54 deletions(-)
> 
> 
> base-commit: e0bc6d7e258486c10bb11e31fd4421c134063b1d