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