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

title: Analog Devices AD4130 ADC device driver

maintainers:
  - Cosmin Tanislav <cosmin.tanislav@analog.com>

description: |
  Bindings for the Analog Devices AD4130 ADC. Datasheet can be found here:
    https://www.analog.com/media/en/technical-documentation/data-sheets/AD4130-8.pdf

properties:
  compatible:
    enum:
      - adi,ad4130

  reg:
    maxItems: 1

  clocks:
    maxItems: 1
    description: phandle to the master clock (mclk)

  clock-names:
    items:
      - const: mclk

  interrupts:
    maxItems: 1

  interrupt-names:
    description: |
      Specify which interrupt pin should be configured as Data Ready / FIFO
      interrupt.
      Default if not supplied is int.
    enum:
      - int
      - clk
      - p2
      - dout

  '#address-cells':
    const: 1

  '#size-cells':
    const: 0

  '#clock-cells':
    const: 0

  clock-output-names:
    maxItems: 1

  refin1-supply:
    description: refin1 supply. Can be used as reference for conversion.

  refin2-supply:
    description: refin2 supply. Can be used as reference for conversion.

  avdd-supply:
    description: AVDD voltage supply. Can be used as reference for conversion.

  iovdd-supply:
    description: IOVDD voltage supply. Used for the chip interface.

  spi-max-frequency:
    maximum: 5000000

  adi,ext-clk-freq-hz:
    description: Specify the frequency of the external clock.
    enum: [76800, 153600]
    default: 76800

  adi,bipolar:
    description: Specify if the device should be used in bipolar mode.
    type: boolean

  adi,vbias-pins:
    description: Analog inputs to apply a voltage bias of (AVDD − AVSS) / 2 to.
    $ref: /schemas/types.yaml#/definitions/uint32-array
    minItems: 1
    maxItems: 16
    items:
      minimum: 0
      maximum: 15

required:
  - compatible
  - reg
  - interrupts

patternProperties:
  "^channel@([0-9a-f])$":
    type: object
    $ref: adc.yaml
    unevaluatedProperties: false

    properties:
      reg:
        description: The channel number.
        minimum: 0
        maximum: 15

      diff-channels:
        description: |
          Besides the analog inputs available, internal inputs can be used.
          16: Internal temperature sensor.
          17: AVSS
          18: Internal reference
          19: DGND
          20: (AVDD − AVSS)/6+
          21: (AVDD − AVSS)/6-
          22: (IOVDD − DGND)/6+
          23: (IOVDD − DGND)/6-
          24: (ALDO − AVSS)/6+
          25: (ALDO − AVSS)/6-
          26: (DLDO − DGND)/6+
          27: (DLDO − DGND)/6-
          28: V_MV_P
          29: V_MV_M
        items:
          minimum: 0
          maximum: 29

      adi,reference-select:
        description: |
          Select the reference source to use when converting on the
          specific channel. Valid values are:
          0: REFIN1(+)/REFIN1(−)
          1: REFIN2(+)/REFIN2(−)
          2: REFOUT/AVSS (Internal reference)
          3: AVDD/AVSS
          If not specified, REFIN1 is used.
        $ref: /schemas/types.yaml#/definitions/uint32
        enum: [0, 1, 2, 3]
        default: 0

      adi,excitation-pin-0:
        description: |
          Analog input to apply excitation current to while the channel
          is active.
        $ref: /schemas/types.yaml#/definitions/uint32
        minimum: 0
        maximum: 15
        default: 0

      adi,excitation-pin-1:
        description: |
          Analog input to apply excitation current to while this channel
          is active.
        $ref: /schemas/types.yaml#/definitions/uint32
        minimum: 0
        maximum: 15
        default: 0

      adi,excitation-current-0-nanoamp:
        description: |
          Excitation current in nanoamps to be applied to pin specified in
          adi,excitation-pin-0 while this channel is active.
        enum: [0, 100, 10000, 20000, 50000, 100000, 150000, 200000]
        default: 0

      adi,excitation-current-1-nanoamp:
        description: |
          Excitation current in nanoamps to be applied to pin specified in
          adi,excitation-pin-1 while this channel is active.
        enum: [0, 100, 10000, 20000, 50000, 100000, 150000, 200000]
        default: 0

      adi,burnout-current-nanoamp:
        description: |
          Burnout current in nanoamps to be applied for this channel.
        enum: [0, 500, 2000, 4000]
        default: 0

      adi,buffered-positive:
        description: Enable buffered mode for positive input.
        type: boolean

      adi,buffered-negative:
        description: Enable buffered mode for negative input.
        type: boolean

    required:
      - reg
      - diff-channels

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

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>

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

      adc@0 {
        compatible = "adi,ad4130";
        reg = <0>;

        #address-cells = <1>;
        #size-cells = <0>;

        spi-max-frequency = <5000000>;
        interrupts = <27 IRQ_TYPE_EDGE_FALLING>;
        interrupt-parent = <&gpio>;

        channel@0 {
          reg = <0>;

          adi,reference-select = <2>;

          /* AIN8, AIN9 */
          diff-channels = <8 9>;
        };

        channel@1 {
          reg = <1>;

          adi,reference-select = <2>;

          /* AIN10, AIN11 */
          diff-channels = <10 11>;
        };

        channel@2 {
          reg = <2>;

          adi,reference-select = <2>;

          /* Temperature Sensor, DGND */
          diff-channels = <16 19>;
        };

        channel@3 {
          reg = <3>;

          adi,reference-select = <2>;

          /* Internal reference, DGND */
          diff-channels = <18 19>;
        };

        channel@4 {
          reg = <4>;

          adi,reference-select = <2>;

          /* DGND, DGND */
          diff-channels = <19 19>;
        };
      };
    };