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

title: Analog Devices AD5592R/AD5593R DAC/ADC

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

properties:
  compatible:
    enum:
      - adi,ad5592r
      - adi,ad5593r

  reg:
    maxItems: 1

  spi-max-frequency:
    maximum: 30000000

  spi-cpol: true

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

  "#io-channel-cells":
    const: 1

  vref-supply:
    description: If not set internal 2.5V reference used.

  reset-gpios:
    maxItems: 1

  gpio-controller:
    description: Marks the device node as a GPIO controller.

  "#gpio-cells":
    const: 2
    description:
      The first cell is the GPIO number and the second cell specifies
      GPIO flags, as defined in <dt-bindings/gpio/gpio.h>.

required:
  - compatible
  - reg
  - "#address-cells"
  - "#size-cells"

allOf:
  - if:
      properties:
        compatible:
          contains:
            const: adi,ad5592r
    then:
      required:
        - spi-cpol
    else:
      properties:
        spi-cpol: false

additionalProperties: false

patternProperties:
  "^(channel@)[0-7]$":
    type: object
    description: Child node to describe a channel
    properties:
      reg:
        minimum: 0
        maximum: 7

      adi,mode:
        $ref: /schemas/types.yaml#/definitions/uint32
        enum: [0, 1, 2, 3, 8]
        description: |
          Mode or function of this channel.
          Macros specifying the valid values can be found in
          <dt-bindings/iio/adi,ad5592r.h>.

          The following values are currently supported:
          * CH_MODE_UNUSED (the pin is unused)
          * CH_MODE_ADC (the pin is ADC input)
          * CH_MODE_DAC (the pin is DAC output)
          * CH_MODE_DAC_AND_ADC (the pin is DAC output but can be monitored
            by an ADC, since there is no disadvantage this should be
            considered as the preferred DAC mode)
          * CH_MODE_GPIO (the pin is registered with GPIOLIB)

      adi,off-state:
        $ref: /schemas/types.yaml#/definitions/uint32
        enum: [0, 1, 2, 3]
        description: |
          State of this channel when unused or the device gets removed.
          Macros specifying the  valid values can be found in
          <dt-bindings/iio/adi,ad5592r.h>.
          * CH_OFFSTATE_PULLDOWN (the pin is pulled down)
          * CH_OFFSTATE_OUT_LOW  (the pin is output low)
          * CH_OFFSTATE_OUT_HIGH (the pin is output high)
          * CH_OFFSTATE_OUT_TRISTATE (the pin is tristated output)

    required:
      - reg
      - adi,mode

    additionalProperties: false

examples:
  - |
    #include <dt-bindings/iio/adi,ad5592r.h>
    spi {
        #address-cells = <1>;
        #size-cells = <0>;

        addac@0 {
            compatible = "adi,ad5592r";
            #size-cells = <0>;
            #address-cells = <1>;
            #gpio-cells = <2>;
            reg = <0>;

            spi-max-frequency = <1000000>;
            spi-cpol;

            vref-supply = <&vref>;
            reset-gpios = <&gpio0 86 0>;
            gpio-controller;

            channel@0 {
                reg = <0>;
                adi,mode = <CH_MODE_DAC>;
            };
            channel@1 {
                reg = <1>;
                adi,mode = <CH_MODE_ADC>;
            };
            channel@2 {
                reg = <2>;
                adi,mode = <CH_MODE_DAC_AND_ADC>;
            };
            channel@3 {
                reg = <3>;
                adi,mode = <CH_MODE_DAC_AND_ADC>;
                adi,off-state = <CH_OFFSTATE_PULLDOWN>;
            };
            channel@4 {
                reg = <4>;
                adi,mode = <CH_MODE_UNUSED>;
                adi,off-state = <CH_OFFSTATE_PULLDOWN>;
            };
            channel@5 {
                reg = <5>;
                adi,mode = <CH_MODE_GPIO>;
                adi,off-state = <CH_OFFSTATE_PULLDOWN>;
            };
            channel@6 {
                reg = <6>;
                adi,mode = <CH_MODE_GPIO>;
                adi,off-state = <CH_OFFSTATE_PULLDOWN>;
            };
            channel@7 {
                reg = <7>;
                adi,mode = <CH_MODE_GPIO>;
                adi,off-state = <CH_OFFSTATE_PULLDOWN>;
            };
        };
        ad5593r@10 {
            compatible = "adi,ad5593r";
            #size-cells = <0>;
            #address-cells = <1>;
            #gpio-cells = <2>;
            reg = <0x10>;
            gpio-controller;

            channel@0 {
                reg = <0>;
                adi,mode = <CH_MODE_DAC>;
                adi,off-state = <CH_OFFSTATE_PULLDOWN>;
            };
            channel@1 {
                reg = <1>;
                adi,mode = <CH_MODE_ADC>;
                adi,off-state = <CH_OFFSTATE_PULLDOWN>;
            };
            channel@2 {
                reg = <2>;
                adi,mode = <CH_MODE_DAC_AND_ADC>;
                adi,off-state = <CH_OFFSTATE_PULLDOWN>;
            };
            channel@6 {
                reg = <6>;
                adi,mode = <CH_MODE_GPIO>;
                adi,off-state = <CH_OFFSTATE_PULLDOWN>;
            };
        };
    };
...
