# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/iio/adc/adi,ad7625.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Analog Devices Fast PulSAR Analog to Digital Converters

maintainers:
  - Michael Hennerich <Michael.Hennerich@analog.com>
  - Nuno Sá <nuno.sa@analog.com>

description: |
  A family of single channel differential analog to digital converters.

  * https://www.analog.com/en/products/ad7625.html
  * https://www.analog.com/en/products/ad7626.html
  * https://www.analog.com/en/products/ad7960.html
  * https://www.analog.com/en/products/ad7961.html

properties:
  compatible:
    enum:
      - adi,ad7625
      - adi,ad7626
      - adi,ad7960
      - adi,ad7961

  vdd1-supply: true
  vdd2-supply: true
  vio-supply: true

  ref-supply:
    description:
      Voltage regulator for the external reference voltage (REF).

  refin-supply:
    description:
      Voltage regulator for the reference buffer input (REFIN).

  clocks:
    description:
      The clock connected to the CLK pins, gated by the clk_gate PWM.
    maxItems: 1

  pwms:
    items:
      - description: PWM connected to the CNV input on the ADC.
      - description: PWM that gates the clock connected to the ADC's CLK input.

  pwm-names:
    items:
      - const: cnv
      - const: clk_gate

  io-backends:
    description:
      The AXI ADC IP block connected to the D+/- and DCO+/- lines of the
      ADC. An example backend can be found at
      http://analogdevicesinc.github.io/hdl/projects/pulsar_lvds/index.html.
    maxItems: 1

  adi,no-dco:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      Indicates the wiring of the DCO+/- lines. If true, then they are
      grounded and the device is in self-clocked mode. If this is not
      present, then the device is in echoed clock mode.

  adi,en0-always-on:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      Indicates if EN0 is hard-wired to the high state. If neither this
      nor en0-gpios are present, then EN0 is hard-wired low.

  adi,en1-always-on:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      Indicates if EN1 is hard-wired to the high state. If neither this
      nor en1-gpios are present, then EN1 is hard-wired low.

  adi,en2-always-on:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      Indicates if EN2 is hard-wired to the high state. If neither this
      nor en2-gpios are present, then EN2 is hard-wired low.

  adi,en3-always-on:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      Indicates if EN3 is hard-wired to the high state. If neither this
      nor en3-gpios are present, then EN3 is hard-wired low.

  en0-gpios:
    description:
      Configurable EN0 pin.

  en1-gpios:
    description:
      Configurable EN1 pin.

  en2-gpios:
    description:
      Configurable EN2 pin.

  en3-gpios:
    description:
      Configurable EN3 pin.

required:
  - compatible
  - vdd1-supply
  - vdd2-supply
  - vio-supply
  - clocks
  - pwms
  - pwm-names
  - io-backends

allOf:
  - if:
      required:
        - ref-supply
    then:
      properties:
        refin-supply: false
  - if:
      required:
        - refin-supply
    then:
      properties:
        ref-supply: false
  - if:
      properties:
        compatible:
          contains:
            enum:
              - adi,ad7625
              - adi,ad7626
    then:
      properties:
        en2-gpios: false
        en3-gpios: false
        adi,en2-always-on: false
        adi,en3-always-on: false

  - if:
      properties:
        compatible:
          contains:
            enum:
              - adi,ad7960
              - adi,ad7961
    then:
      # ad796x parts must have one of the two supplies
      oneOf:
        - required: [ref-supply]
        - required: [refin-supply]

additionalProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    adc {
        compatible = "adi,ad7625";
        vdd1-supply = <&supply_5V>;
        vdd2-supply = <&supply_2_5V>;
        vio-supply = <&supply_2_5V>;
        io-backends = <&axi_adc>;
        clocks = <&ref_clk>;
        pwms = <&axi_pwm_gen 0 0>, <&axi_pwm_gen 1 0>;
        pwm-names = "cnv", "clk_gate";
        en0-gpios = <&gpio0 86 GPIO_ACTIVE_HIGH>;
        en1-gpios = <&gpio0 87 GPIO_ACTIVE_HIGH>;
    };
