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

title: Analog Devices AD5064 and similar DACs

maintainers:
  - Lars-Peter Clausen <lars@metafoo.de>
  - Jonathan Cameron <jic23@kernel.org>

description: |
   A range of similar DAC devices with between 1 and 12 channels. Some parts
   have internal references, others require a single shared external reference
   and the remainder have a separate reference pin for each DAC.

properties:
  compatible:
    oneOf:
      - description: I2C devics
        enum:
          - adi,ad5024
          - adi,ad5025
          - adi,ad5044
          - adi,ad5045
          - adi,ad5064
          - adi,ad5064-1
          - adi,ad5065
          - adi,ad5628-1
          - adi,ad5628-2
          - adi,ad5648-1
          - adi,ad5648-2
          - adi,ad5666-1
          - adi,ad5666-2
          - adi,ad5668-1
          - adi,ad5668-2
          - adi,ad5668-3
      - description: SPI devices
        enum:
          - adi,ad5625
          - adi,ad5625r-1v25
          - adi,ad5625r-2v5
          - adi,ad5627
          - adi,ad5627r-1v25
          - adi,ad5627r-2v5
          - adi,ad5629-1
          - adi,ad5629-2
          - adi,ad5629-3
          - adi,ad5645r-1v25
          - adi,ad5645r-2v5
          - adi,ad5665
          - adi,ad5665r-1v25
          - adi,ad5665r-2v5
          - adi,ad5667
          - adi,ad5667r-1v25
          - adi,ad5667r-2v5
          - adi,ad5669-1
          - adi,ad5669-2
          - adi,ad5669-3
          - lltc,ltc2606
          - lltc,ltc2607
          - lltc,ltc2609
          - lltc,ltc2616
          - lltc,ltc2617
          - lltc,ltc2619
          - lltc,ltc2626
          - lltc,ltc2627
          - lltc,ltc2629
          - lltc,ltc2631-l12
          - lltc,ltc2631-h12
          - lltc,ltc2631-l10
          - lltc,ltc2631-h10
          - lltc,ltc2631-l8
          - lltc,ltc2631-h8
          - lltc,ltc2633-l12
          - lltc,ltc2633-h12
          - lltc,ltc2633-l10
          - lltc,ltc2633-h10
          - lltc,ltc2633-l8
          - lltc,ltc2633-h8
          - lltc,ltc2635-l12
          - lltc,ltc2635-h12
          - lltc,ltc2635-l10
          - lltc,ltc2635-h10
          - lltc,ltc2635-l8
          - lltc,ltc2635-h8

  reg:
    maxItems: 1

  vrefA-supply: true
  vrefB-supply: true
  vrefC-supply: true
  vrefD-supply: true
  vref-supply: true

required:
  - compatible
  - reg

allOf:
  - $ref: /schemas/spi/spi-peripheral-props.yaml#
  - # Shared external vref, no internal reference
    if:
      properties:
        compatible:
          contains:
            enum:
              - adi,ad5064-1
              - adi,ad5625
              - adi,ad5627
              - adi,ad5665
              - adi,ad5667
              - lltc,ltc2606
              - lltc,ltc2607
              - lltc,ltc2616
              - lltc,ltc2617
              - lltc,ltc2626
              - lltc,ltc2627
    then:
      properties:
        vref-supply: true
        vrefA-supply: false
        vrefB-supply: false
        vrefC-supply: false
        vrefD-supply: false
      required:
        - vref-supply
  - # Shared external vref, internal reference available
    if:
      properties:
        compatible:
          contains:
            enum:
              - adi,ad5625r-1v25
              - adi,ad5625r-2v5
              - adi,ad5627r-1v25
              - adi,ad5627r-2v5
              - adi,ad5628-1
              - adi,ad5628-2
              - adi,ad5629-1
              - adi,ad5629-2
              - adi,ad5629-3
              - adi,ad5645r-1v25
              - adi,ad5645r-2v5
              - adi,ad5647r-1v25
              - adi,ad5647r-2v5
              - adi,ad5648-1
              - adi,ad5648-2
              - adi,ad5665r-1v25
              - adi,ad5665r-2v5
              - adi,ad5666-1
              - adi,ad5666-2
              - adi,ad5667r-1v25
              - adi,ad5667r-2v5
              - adi,ad5668-1
              - adi,ad5668-2
              - adi,ad5668-3
              - adi,ad5669-1
              - adi,ad5669-2
              - adi,ad5669-3
              - lltc,ltc2631-l12
              - lltc,ltc2631-h12
              - lltc,ltc2631-l10
              - lltc,ltc2631-h10
              - lltc,ltc2631-l8
              - lltc,ltc2631-h8
              - lltc,ltc2633-l12
              - lltc,ltc2633-h12
              - lltc,ltc2633-l10
              - lltc,ltc2633-h10
              - lltc,ltc2633-l8
              - lltc,ltc2633-h8
              - lltc,ltc2635-l12
              - lltc,ltc2635-h12
              - lltc,ltc2635-l10
              - lltc,ltc2635-h10
              - lltc,ltc2635-l8
              - lltc,ltc2635-h8
    then:
      properties:
        vref-supply: true
        vrefA-supply: false
        vrefB-supply: false
        vrefC-supply: false
        vrefD-supply: false
  - # 4 input devices, separate vrefs, no internal reference
    if:
      properties:
        compatible:
          contains:
            enum:
              - adi,ad5024
              - adi,ad5044
              - adi,ad5064
              - lltc,ltc2609
              - lltc,ltc2619
              - lltc,ltc2629
    then:
      properties:
        vrefA-supply: true
        vrefB-supply: true
        vrefC-supply: true
        vrefD-supply: true
        vref-supply: false
      required:
        - vrefA-supply
        - vrefB-supply
        - vrefC-supply
        - vrefD-supply
  - # 2 input devices, separate vrefs, no internal reference
    if:
      properties:
        compatible:
          contains:
            enum:
              - adi,ad5025
              - adi,ad5045
              - adi,ad5065
    then:
      properties:
        vrefA-supply: true
        vrefB-supply: true
        vrefC-supply: false
        vrefD-supply: false
        vref-supply: false
      required:
        - vrefA-supply
        - vrefB-supply

unevaluatedProperties: false

examples:
  - |
    spi {
        #address-cells = <1>;
        #size-cells = <0>;
        dac@0 {
            reg = <0>;
            compatible = "adi,ad5625";
            vref-supply = <&dac_vref>;
        };
    };
  - |
    spi {
        #address-cells = <1>;
        #size-cells = <0>;
        dac@0 {
            reg = <0>;
            compatible = "adi,ad5625r-1v25";
        };
    };
  - |
    i2c {
        #address-cells = <1>;
        #size-cells = <0>;
        dac@42 {
            reg = <0x42>;
            compatible = "adi,ad5024";
            vrefA-supply = <&dac_vref>;
            vrefB-supply = <&dac_vref>;
            vrefC-supply = <&dac_vref2>;
            vrefD-supply = <&dac_vref2>;
        };
    };
...