# Copyright (c) 2022 Vaishnav Achath
# SPDX-License-Identifier: Apache-2.0

description: |
    TI SimpleLink CC13xx / CC26xx pinctrl node.

    Device pin configuration should be placed in the child nodes of this node.
    Populate the 'pinmux' field with a pair consisting of a pin number and its IO
    functions.

    The node has the 'pinctrl' node label set in your SoC's devicetree,
    so you can modify it like this:

      &pinctrl {
              /* your modifications go here */
      };

    All device pin configurations should be placed in child nodes of the
    'pinctrl' node, as in the i2c0 example shown at the end.

    Here is a list of
    supported standard pin properties:

    - bias-disable: Disable pull-up/down.
    - bias-pull-down: Enable pull-down resistor.
    - bias-pull-up: Enable pull-up resistor.
    - drive-open-drain: Output driver is open-drain.
    - drive-open-drain: Output driver is open-source.
    - drive-strength: Minimum current that can be sourced from the pin.
    - input-enable: enable input.
    - input-schmitt-enable: enable input schmitt circuit.
    - ti,input-edge-detect: enable and configure edge detection interrupts

    An example for CC13XX family, include the chip level pinctrl
    DTSI file in the board level DTS:

      #include <dt-bindings/pinctrl/cc13xx_cc26xx-pinctrl.h>

    We want to configure the I2C pins to open drain, with pullup enabled
    and input enabled.

    To change a pin's pinctrl default properties add a reference to the
    pin in the board's DTS file and set the properties.

      &i2c0 {
        pinctrl-0 = <&i2c0_scl_default &i2c0_sda_default>;
        pinctrl-1 = <&i2c0_scl_sleep &i2c0_sda_sleep>;
        pinctrl-names = "default", "sleep";
      }

    The i2c0_scl_default corresponds to the following in the board dts file:

      &pinctrl {
        i2c0_scl_default: i2c0_scl_default {
          pinmux = <4 IOC_PORT_MCU_I2C_MSSCL>;
          bias-pull-up;
          drive-open-drain;
          input-enable;
        };
      };

    To configure an input pin with edge detection (e.g. to count pulses):

      &pinctrl {
        gpt0_edge_counter: gpt0_edge_counter {
          pinmux = <15 IOC_PORT_MCU_PORT_EVENT0>;
          input-enable;
          bias-pull-up;
          ti,input-edge-detect = <IOC_RISING_EDGE>;
        };
      };

    To configure an output pin (e.g. for PWM output):

      &pinctrl {
        gpt0_pwm: gpt0_pwm {
          pinmux = <16 IOC_PORT_MCU_PORT_EVENT1>;
          bias-disable;
          drive-strength = <8>; /* in mA */
        };
      };

compatible: "ti,cc13xx-cc26xx-pinctrl"

include: base.yaml

properties:
  reg:
    required: true

child-binding:
  description: |
    This binding gives a base representation of the CC13XX/CC26XX
    pins configuration.

  include:
    - name: pincfg-node.yaml
      property-allowlist:
        - bias-disable
        - bias-pull-down
        - bias-pull-up
        - drive-open-drain
        - drive-open-source
        - drive-strength
        - input-enable
        - input-schmitt-enable

  properties:
    pinmux:
      required: true
      type: array
      description: |
        CC13XX/CC26XX pin's configuration (IO pin, IO function).

    drive-strength:
      enum:
        - 2
        - 4
        - 8
      default: 2
      description: |
        The drive strength controls the minimum output driver strength of an I/O pin
        configured as an output.
          2: min 2 mA (SoC default)
          4: min 4 mA
          8: min 8 mA for double drive strength IOs, min 4 mA for normal IOs

    ti,input-edge-detect:
      type: int
      default: 0 # no edge detection
      description: |
        Enables or disables the edge detection interrupt and configures it:
          IOC_NO_EDGE: No edge detection (SoC default)
          IOC_FALLING_EDGE: Edge detection on falling edge
          IOC_RISING_EDGE: Edge detection on rising edge
          IOC_BOTH_EDGES: Edge detection on both edges
