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

description: Texas Instruments FDC2X1X capacitive sensor

compatible: "ti,fdc2x1x"

include: [sensor-device.yaml, i2c-device.yaml]

properties:
  sd-gpios:
    type: phandle-array
    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
    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
    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
    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
    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
    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
    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
    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
      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.
