Commit 561b5d5b authored by Dumitru Ceclan's avatar Dumitru Ceclan Committed by Jonathan Cameron
Browse files

dt-bindings: adc: ad7173: add support for ad411x



Add support for: AD4111, AD4112, AD4114, AD4115, AD4116.

AD411x family ADCs support a VCOM pin. The purpose of this pin is to
offer a dedicated common-mode voltage input for single-ended channels.
This pin is specified as supporting a differential channel with VIN10 on
model AD4116.

AD4111/AD4112 support current channels. Support is implemented using
single-channel and "adi,current-channel".

Reviewed-by: default avatarConor Dooley <conor.dooley@microchip.com>
Signed-off-by: default avatarDumitru Ceclan <dumitru.ceclan@analog.com>
Reviewed-by: default avatarNuno Sa <nuno.sa@analog.com>
Reviewed-by: default avatarDavid Lechner <dlechner@baylibre.com>
Link: https://patch.msgid.link/20240607-ad4111-v7-2-97e3855900a0@analog.com


Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent d86deaec
Loading
Loading
Loading
Loading
+192 −2
Original line number Diff line number Diff line
@@ -19,7 +19,18 @@ description: |
  primarily for measurement of signals close to DC but also delivers
  outstanding performance with input bandwidths out to ~10kHz.

  Analog Devices AD411x ADC's:
  The AD411X family encompasses a series of low power, low noise, 24-bit,
  sigma-delta analog-to-digital converters that offer a versatile range of
  specifications. They integrate an analog front end suitable for processing
  fully differential/single-ended and bipolar voltage inputs.

  Datasheets for supported chips:
    https://www.analog.com/media/en/technical-documentation/data-sheets/AD4111.pdf
    https://www.analog.com/media/en/technical-documentation/data-sheets/AD4112.pdf
    https://www.analog.com/media/en/technical-documentation/data-sheets/AD4114.pdf
    https://www.analog.com/media/en/technical-documentation/data-sheets/AD4115.pdf
    https://www.analog.com/media/en/technical-documentation/data-sheets/AD4116.pdf
    https://www.analog.com/media/en/technical-documentation/data-sheets/AD7172-2.pdf
    https://www.analog.com/media/en/technical-documentation/data-sheets/AD7172-4.pdf
    https://www.analog.com/media/en/technical-documentation/data-sheets/AD7173-8.pdf
@@ -31,6 +42,11 @@ description: |
properties:
  compatible:
    enum:
      - adi,ad4111
      - adi,ad4112
      - adi,ad4114
      - adi,ad4115
      - adi,ad4116
      - adi,ad7172-2
      - adi,ad7172-4
      - adi,ad7173-8
@@ -129,10 +145,56 @@ patternProperties:
        maximum: 15

      diff-channels:
        description: |
          This property is used for defining the inputs of a differential
          voltage channel. The first value is the positive input and the second
          value is the negative input of the channel.

          Family AD411x supports a dedicated VINCOM voltage input.
          To select it set the second channel to 16.
            (VIN2, VINCOM) -> diff-channels = <2 16>

          There are special values that can be selected besides the voltage
          analog inputs:
            21: REF+
            22: REF−

          Supported only by AD7172-2, AD7172-4, AD7175-2, AD7175-8, AD7177-2,
          must be paired together and can be used to monitor the power supply
          of the ADC:
            19: ((AVDD1 − AVSS)/5)+
            20: ((AVDD1 − AVSS)/5)−

        items:
          minimum: 0
          maximum: 31

      single-channel:
        description: |
          This property is used for defining a current channel or the positive
          input of a voltage channel (single-ended or pseudo-differential).

          Models AD4111 and AD4112 support current channels.
            Example: (IIN2+, IIN2−) -> single-channel = <2>
          To correctly configure a current channel set the "adi,current-channel"
          property to true.

          To configure a single-ended/pseudo-differential channel set the
          "common-mode-channel" property to the desired negative voltage input.

          When used as a voltage channel, special inputs are valid as well.
        minimum: 0
        maximum: 31

      common-mode-channel:
        description:
          This property is used for defining the negative input of a
          single-ended or pseudo-differential voltage channel.

          Special inputs are valid as well.
        minimum: 0
        maximum: 31

      adi,reference-select:
        description: |
          Select the reference source to use when converting on
@@ -154,9 +216,31 @@ patternProperties:
          - avdd
        default: refout-avss

      adi,current-channel:
        $ref: /schemas/types.yaml#/definitions/flag
        description: |
          Signal that the selected inputs are current channels.
          Only available on AD4111 and AD4112.

    required:
      - reg
      - diff-channels

    allOf:
      - oneOf:
          - required: [single-channel]
            properties:
              diff-channels: false
          - required: [diff-channels]
            properties:
              single-channel: false
              adi,current-channel: false
              common-mode-channel: false

      - if:
          required: [common-mode-channel]
        then:
          properties:
            adi,current-channel: false

required:
  - compatible
@@ -166,7 +250,6 @@ allOf:
  - $ref: /schemas/spi/spi-peripheral-props.yaml#

  # Only ad7172-4, ad7173-8 and ad7175-8 support vref2
  # Other models have [0-3] channel registers
  - if:
      properties:
        compatible:
@@ -187,6 +270,37 @@ allOf:
                - vref
                - refout-avss
                - avdd

  - if:
      properties:
        compatible:
          contains:
            enum:
              - adi,ad4114
              - adi,ad4115
              - adi,ad4116
              - adi,ad7173-8
              - adi,ad7175-8
    then:
      patternProperties:
        "^channel@[0-9a-f]$":
          properties:
            reg:
              maximum: 15

  - if:
      properties:
        compatible:
          contains:
            enum:
              - adi,ad7172-2
              - adi,ad7175-2
              - adi,ad7176-2
              - adi,ad7177-2
    then:
      patternProperties:
        "^channel@[0-9a-f]$":
          properties:
            reg:
              maximum: 3

@@ -210,6 +324,34 @@ allOf:
          required:
            - adi,reference-select

  - if:
      properties:
        compatible:
          contains:
            enum:
              - adi,ad4111
              - adi,ad4112
              - adi,ad4114
              - adi,ad4115
              - adi,ad4116
    then:
      properties:
        avdd2-supply: false

  - if:
      properties:
        compatible:
          not:
            contains:
              enum:
                - adi,ad4111
                - adi,ad4112
    then:
      patternProperties:
        "^channel@[0-9a-f]$":
          properties:
            adi,current-channel: false

  - if:
      anyOf:
        - required: [clock-names]
@@ -221,6 +363,7 @@ allOf:
unevaluatedProperties: false

examples:
  # Example AD7173-8 with external reference connected to REF+/REF-:
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/irq.h>
@@ -277,3 +420,50 @@ examples:
        };
      };
    };

  # Example AD4111 with current channel and single-ended channel:
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/irq.h>

    spi {
      #address-cells = <1>;
      #size-cells = <0>;

       adc@0 {
        compatible = "adi,ad4111";
        reg = <0>;

        #address-cells = <1>;
        #size-cells = <0>;

        interrupts = <25 IRQ_TYPE_EDGE_FALLING>;
        interrupt-names = "rdy";
        interrupt-parent = <&gpio>;
        spi-max-frequency = <5000000>;
        gpio-controller;
        #gpio-cells = <2>;
        #clock-cells = <0>;

        channel@0 {
          reg = <0>;
          bipolar;
          diff-channels = <4 5>;
        };

        // Single ended channel VIN2/VINCOM
        channel@1 {
          reg = <1>;
          bipolar;
          single-channel = <2>;
          common-mode-channel = <16>;
        };

        // Current channel IN2+/IN2-
        channel@2 {
          reg = <2>;
          single-channel = <2>;
          adi,current-channel;
        };
      };
    };