# Copyright (c) 2020 arithmetics.io
# SPDX-License-Identifier: Apache-2.0

description: Texas Instruments FDC2X1X capacitive sensor

compatible: "ti,fdc2x1x"

include: i2c-device.yaml

properties:
    sd-gpios:
      type: phandle-array
      required: false
      description: |
        The SD pin defaults to active high when consumed by the sensor.
        The property value should ensure the flags properly describe
        the signal that is presented to the driver.

    intb-gpios:
      type: phandle-array
      required: false
      description: |
        The INTB pin defaults to active low when produced by the sensor.
        The property value should ensure the flags properly describe
        the signal that is presented to the driver.

    fdc2x14:
      type: boolean
      description: |
        Set to identify the sensor as FDC2114 or FDC2214 (4-channel version)

    autoscan:
      type: boolean
      description: |
        Set the Auto-Scan Mode.

        false = Continuous conversion on the single channel selected by
        "active-channel" (single channel mode).

        true = Auto-Scan conversions as selected by "rr-sequence"
        (multichannel mode).

    fref:
      type: int
      required: true
      description: |
        Reference frequency of the used clock source in KHz.
        The internal clock oscillates at around 43360 KHz (43.36 MHz)
        at 20 degrees Celcius.
        Recommended external clock source frequency is 40000 KHz (40 MHz).

    rr-sequence:
      type: int
      required: false
      default: 0
      description: |
        Auto-Scan Sequence Configuration.
        The FDC will perform a single conversion on each channel
        in the sequence selected, and then restart the sequence continuously.

        The sensor performs conversion on Channel 0 to 1 by default after
        power-on-reset. This setting only applies if autoscan=true
        (multichannel mode).

        0 = Ch0, Ch1
        1 = Ch0, Ch1, Ch2 (FDC2114, FDC2214 only)
        2 = Ch0, Ch1, Ch2, Ch3 (FDC2114, FDC2214 only)
      enum:
        - 0
        - 1
        - 2

    active-channel:
      type: int
      required: false
      default: 0
      description: |
        Selects channel for continuous conversions.

        The sensor performs continuous conversion on Channel 0 by default after
        power-on-reset. This setting only applies if autoscan=false
        (single channel mode).

        0 = Perform continuous conversions on Channel 0
        1 = Perform continuous conversions on Channel 1
        2 = Perform continuous conversions on Channel 2 (FDC2114, FDC2214 only)
        3 = Perform continuous conversions on Channel 3 (FDC2114, FDC2214 only)
      enum:
        - 0
        - 1
        - 2
        - 3

    deglitch:
      type: int
      required: true
      description: |
        Input deglitch filter bandwidth. Select the lowest setting that exceeds
        the oscillation tank oscillation frequency.

        1 = 1MHz
        4 = 3.3MHz
        5 = 10MHz
        7 = 33MHz
      enum:
        - 1
        - 4
        - 5
        - 7

    sensor-activate-sel:
      type: string
      required: false
      default: "low-power"
      description: |
        Sensor Activation Mode Selection.

        The sensor uses low-power activation mode by default after
        power-on-reset.

        full-current = the FDC will drive maximum
        sensor current for a shorter sensor activation time.

        low-power = the FDC uses the value programmed by "idrive" during
        sensor activation to minimize power consumption.
      enum:
        - "full-current"
        - "low-power"

    ref-clk-src:
      type: string
      required: false
      default: "internal"
      description: |
        Select Reference Frequency Source.

        The sensor uses the internal clock by default after power-on-reset.

        internal = Use Internal oscillator as reference frequency
        external = Reference frequency is provided from CLKIN pin.
      enum:
        - "internal"
        - "external"

    current-drive:
      type: string
      required: false
      default: "normal"
      description: |
        Select Current Sensor Drive.

        The sensor uses normal current drive by default after power-on-reset.
        High current drive is not supported if autoscan=false and will default
        to normal.

        normal = The FDC will drive all channels with normal sensor current
        (1.5mA max).

        high = The FDC will drive channel 0 with current >1.5mA.
      enum:
        - "normal"
        - "high"

    output-gain:
      type: int
      required: false
      default: 0
      description: |
        Output gain control (FDC2112, FDC2114 only)

        The default output gain is 0 after power-on-reset.

        0 = Gain = 1   | Effective Resolution 12 bits | 100% full scale
        1 = Gain = 4   | Effective Resolution 14 bits | 25% full scale
        2 = Gain = 8   | Effective Resolution 15 bits | 12.5% full scale
        3 = Gain = 16  | Effective Resolution 16 bits | 6.25% full scale
      enum:
        - 0
        - 1
        - 2
        - 3

child-binding:
  description: |
    Settings for each channel 0-1 (FDC2112 and FDC2212) or
    0-3 (FDC2114 and FDC2214)

  properties:
      rcount:
        type: int
        required: true
        description: |
          Channel X Reference Count Conversion Interval Time.
          Valid range: 256 - 65535

      offset:
        type: int
        required: false
        default: 0
        description: |
          Channel X Conversion Offset (FDC2112 and FDC2212 only).
          The default offset value after power-on-reset is 0.
          Valid range: 0 - 65535

      settlecount:
        type: int
        required: true
        description: |
          Channel X Conversion Settling.

          The FDC will use this settling time to allow the LC sensor to
          stabilize before initiation of a conversion on Channel X.
          Valid range: 0 - 65535

      fref-divider:
        type: int
        required: true
        description: |
          Channel X Reference Divider.

          Sets the divider for Channel X reference.
          Use this to scale the maximum conversion frequency.
          Valid range: 1 - 1023

      idrive:
        type: int
        required: true
        description: |
          Channel X Sensor drive current.

          This field defines the Drive Current used during the settling +
          conversion time of Channel X sensor clock.
          Valid range: 0 - 31

      fin-sel:
        type: int
        required: true
        description: |
          Channel X Sensor frequency select.

          For differential sensor configuration:
          1 = divide by 1. Choose for sensor frequencies between
          0.01MHz and 8.75MHz
          2 = divide by 2. Choose for sensor frequencies between 5MHz
          and 10MHz

          For single-ended sensor configuration:
          2 = divide by 2. Choose for sensor frequencies between
          0.01MHz and 10MHz
        enum:
          - 1 # Divide by 1
          - 2 # Divide by 2

      inductance:
        type: int
        required: true
        description: |
          Inductor value used on the PCB for the sensing network of the
          specific channel, which is usually 18uH.
