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

title: AD7476 and similar simple SPI ADCs from multiple manufacturers.

maintainers:
  - Michael Hennerich <michael.hennerich@analog.com>

description: |
  A lot of simple SPI ADCs have very straight forward interfaces.
  They typically don't provide a MOSI pin, simply reading out data
  on MISO when the clock toggles.

properties:
  compatible:
    enum:
      - adi,ad7091
      - adi,ad7091r
      - adi,ad7273
      - adi,ad7274
      - adi,ad7276
      - adi,ad7277
      - adi,ad7278
      - adi,ad7466
      - adi,ad7467
      - adi,ad7468
      - adi,ad7475
      - adi,ad7476
      - adi,ad7476a
      - adi,ad7477
      - adi,ad7477a
      - adi,ad7478
      - adi,ad7478a
      - adi,ad7495
      - adi,ad7910
      - adi,ad7920
      - adi,ad7940
      - ti,adc081s
      - ti,adc101s
      - ti,adc121s
      - ti,ads7866
      - ti,ads7867
      - ti,ads7868
      - lltc,ltc2314-14

  reg:
    maxItems: 1

  vcc-supply:
    description:
      Main powersupply voltage for the chips, sometimes referred to as VDD on
      datasheets.  If there is no separate vref-supply, then this is needed
      to establish channel scaling.

  vdrive-supply:
    description:
      Some devices have separate supply for their digital control side.

  vref-supply:
    description:
      Some devices have a specific reference voltage supplied on a different pin
      to the other supplies. Needed to be able to establish channel scaling
      unless there is also an internal reference available (e.g. ad7091r)

  adi,conversion-start-gpios:
    description: A GPIO used to trigger the start of a conversion
    maxItems: 1

required:
  - compatible
  - reg

allOf:
  - $ref: /schemas/spi/spi-peripheral-props.yaml#

  # Devices where reference is vcc
  - if:
      properties:
        compatible:
          contains:
            enum:
              - adi,ad7091
              - adi,ad7276
              - adi,ad7277
              - adi,ad7278
              - adi,ad7466
              - adi,ad7467
              - adi,ad7468
              - adi,ad7940
              - ti,adc081s
              - ti,adc101s
              - ti,adc121s
              - ti,ads7866
              - ti,ads7868
    then:
      required:
        - vcc-supply
  # Devices with a vref
  - if:
      properties:
        compatible:
          contains:
            enum:
              - adi,ad7091r
              - adi,ad7273
              - adi,ad7274
              - adi,ad7475
              - lltc,ltc2314-14
    then:
      properties:
        vref-supply: true
    else:
      properties:
        vref-supply: false
  # Devices with a vref where it is not optional
  - if:
      properties:
        compatible:
          contains:
            enum:
              - adi,ad7273
              - adi,ad7274
              - adi,ad7475
              - lltc,ltc2314-14
    then:
      required:
        - vref-supply
  - if:
      properties:
        compatible:
          contains:
            enum:
              - adi,ad7475
              - adi,ad7495
    then:
      properties:
        vdrive-supply: true
    else:
      properties:
        vdrive-supply: false
  - if:
      properties:
        compatible:
          contains:
            enum:
              - adi,ad7091
              - adi,ad7091r
    then:
      properties:
        adi,conversion-start-gpios: true
    else:
      properties:
        adi,conversion-start-gpios: false

unevaluatedProperties: false

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

      adc@0 {
        compatible = "adi,ad7091r";
        reg = <0>;
        spi-max-frequency = <5000000>;
        vcc-supply = <&adc_vcc>;
        vref-supply = <&adc_vref>;
      };
    };
...