# Copyright (c) 2017, NXP
# Copyright (c) 2022, Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

# Common fields for ADC controllers

include: base.yaml

properties:
  "#io-channel-cells":
    type: int
    required: true

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

child-binding:
  description: |
    Channel configuration.

    All nodes using this binding must be named "channel", otherwise their
    data will not be accessible for the ADC API macros.

    This is based on Linux, documentation:
      https://www.kernel.org/doc/Documentation/devicetree/bindings/iio/adc/adc.yaml

  properties:
    reg:
      type: array
      required: true
      description: Channel identifier.

    zephyr,gain:
      type: string
      required: true
      description: |
        Gain selection:
        - ADC_GAIN_1_6: x 1/6
        - ADC_GAIN_1_5: x 1/5
        - ADC_GAIN_1_4: x 1/4
        - ADC_GAIN_1_3: x 1/3
        - ADC_GAIN_2_5: x 2/5
        - ADC_GAIN_1_2: x 1/2
        - ADC_GAIN_2_3: x 2/3
        - ADC_GAIN_4_5: x 4/5
        - ADC_GAIN_1:   x 1
        - ADC_GAIN_2:   x 2
        - ADC_GAIN_3:   x 3
        - ADC_GAIN_4:   x 4
        - ADC_GAIN_6:   x 6
        - ADC_GAIN_8:   x 8
        - ADC_GAIN_12:  x 12
        - ADC_GAIN_16:  x 16
        - ADC_GAIN_24:  x 24
        - ADC_GAIN_32:  x 32
        - ADC_GAIN_64:  x 64
        - ADC_GAIN_128: x 128
      enum:
        - "ADC_GAIN_1_6"
        - "ADC_GAIN_1_5"
        - "ADC_GAIN_1_4"
        - "ADC_GAIN_1_3"
        - "ADC_GAIN_2_5"
        - "ADC_GAIN_1_2"
        - "ADC_GAIN_2_3"
        - "ADC_GAIN_4_5"
        - "ADC_GAIN_1"
        - "ADC_GAIN_2"
        - "ADC_GAIN_3"
        - "ADC_GAIN_4"
        - "ADC_GAIN_6"
        - "ADC_GAIN_8"
        - "ADC_GAIN_12"
        - "ADC_GAIN_16"
        - "ADC_GAIN_24"
        - "ADC_GAIN_32"
        - "ADC_GAIN_64"
        - "ADC_GAIN_128"

    zephyr,reference:
      type: string
      required: true
      description: |
        Reference selection:
        - ADC_REF_VDD_1:     VDD
        - ADC_REF_VDD_1_2:   VDD/2
        - ADC_REF_VDD_1_3:   VDD/3
        - ADC_REF_VDD_1_4:   VDD/4
        - ADC_REF_INTERNAL:  Internal
        - ADC_REF_EXTERNAL0: External, input 0
        - ADC_REF_EXTERNAL1: External, input 1
      enum:
        - "ADC_REF_VDD_1"
        - "ADC_REF_VDD_1_2"
        - "ADC_REF_VDD_1_3"
        - "ADC_REF_VDD_1_4"
        - "ADC_REF_INTERNAL"
        - "ADC_REF_EXTERNAL0"
        - "ADC_REF_EXTERNAL1"

    zephyr,vref-mv:
      type: int
      description: |
        This property can be used to specify the voltage (in millivolts)
        of the reference selected for this channel, so that applications
        can get that value if needed for some calculations.
        For the internal reference, the voltage can be usually obtained with
        a dedicated ADC API call, so there is no need to use this property
        in that case, but for other references this property can be useful.

    zephyr,acquisition-time:
      type: int
      required: true
      description: |
        Acquisition time.
        Use the ADC_ACQ_TIME macro to compose the value for this property
        or pass ADC_ACQ_TIME_DEFAULT to use the default setting for a given
        hardware (e.g. when the hardware does not allow to configure the
        acquisition time).

    zephyr,differential:
      type: boolean
      description: |
        When set, selects differential input mode for the channel. Otherwise,
        single-ended mode is used unless the zephyr,input-negative property is
        specified, in which case the differential mode is selected implicitly.

    zephyr,input-positive:
      type: int
      description: |
        Positive ADC input. Used only for drivers that select
        the ADC_CONFIGURABLE_INPUTS Kconfig option.

    zephyr,input-negative:
      type: int
      description: |
        Negative ADC input. Used only for drivers that select
        the ADC_CONFIGURABLE_INPUTS Kconfig option.
        When specified, implies the differential input mode for the channel.

    zephyr,resolution:
      type: int
      description: |
        ADC resolution to be used for the channel.

    zephyr,oversampling:
      type: int
      description: |
        Oversampling setting to be used for the channel.
        When specified, each sample is averaged from 2^N conversion results
        (where N is the provided value).

    zephyr,current-source-pin:
      type: uint8-array
      description: |
        Output pin selection for the current sources. The actual
        interpretation depends on the driver. This is used only for drivers
        which select the ADC_CONFIGURABLE_EXCITATION_CURRENT_SOURCE_PIN
        Kconfig option.

    zephyr,vbias-pins:
      type: int
      description: |
        Output pin selection for the bias voltage. The actual interpretation
        depends on the driver. This is used only for drivers which select
        the ADC_CONFIGURABLE_VBIAS_PIN Kconfig option.
