# 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 Celsius.
      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.
