# 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:
    oneOf:
      - items:
          - 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
              - rohm,bd79105
              - ti,adc081s
              - ti,adc101s
              - ti,adc121s
              - ti,ads7866
              - ti,ads7867
              - ti,ads7868
              - lltc,ltc2314-14
      - items:
          - const: rohm,bu79100g
          - const: ti,ads7866

  reg:
    maxItems: 1

  interrupts:
    description:
      The data-ready interrupt. Provided via DOUT pin.
    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

  rdy-gpios:
    description: A GPIO for detecting the data-ready.
    maxItems: 1

required:
  - compatible
  - reg

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

# Devices with an IRQ
  - if:
      properties:
        compatible:
          contains:
            enum:
              - rohm,bd79105
    then:
      properties:
        interrupts: true
    else:
      properties:
        interrupts: false

  # 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:
      not:
        properties:
          compatible:
            contains:
              enum:
                - adi,ad7091r
                - adi,ad7273
                - adi,ad7274
                - adi,ad7475
                - lltc,ltc2314-14
                - rohm,bd79105
    then:
      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
              - rohm,bd79105
    then:
      required:
        - vref-supply
  - if:
      not:
        properties:
          compatible:
            contains:
              enum:
                - adi,ad7475
                - adi,ad7495
                - rohm,bd79105
    then:
      properties:
        vdrive-supply: false

  # Devices which support polling the data-ready via GPIO
  - if:
      not:
        properties:
          compatible:
            contains:
              enum:
                - rohm,bd79105
    then:
      properties:
        rdy-gpios: false

  - if:
      not:
        properties:
          compatible:
            contains:
              enum:
                - adi,ad7091
                - adi,ad7091r
                - rohm,bd79105
    then:
      properties:
        adi,conversion-start-gpios: false

  # Devices with a convstart GPIO where it is not optional
  - if:
      properties:
        compatible:
          contains:
            enum:
              - rohm,bd79105
    then:
      required:
        - adi,conversion-start-gpios

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>;
      };
    };
...
