# 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.
    - input-enable: enable input.
    - input-schmitt-enable: enable input schmitt circuit.

    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;
        };
      };

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
        - input-enable
        - input-schmitt-enable

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