# Copyright (c) 2022 Renesas Electronics Corporation
# SPDX-License-Identifier: Apache-2.0

description: |
    The SmartBond pin controller is a singleton node responsible for controlling
    pin function selection and pin properties, such as routing a UART RX to pin
    P1.8 and enabling the pullup resistor on that pin.

    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 shown in this example:

      /* You can put this in places like a board-pinctrl.dtsi file in
       * your board directory, or a devicetree overlay in your application.
       */

     /* include definitions and utility macros for the SoC used by the board */
     #include <dt-bindings/pinctrl/smartbond-pinctrl.h>

      &pinctrl {
        /* configuration for uart device, default state */
        uart_default: uart_default {
          /* group 1 */
          group1 {
            /* route UART TX to P0.9 */
            pinmux = <SMARTBOND_PINMUX(UART_TX, 0, 9)>;
          };
          /* group 2 */
          group2 {
            /* route UART RX to P0.8 and enable pull-up */
            pinmux = <SMARTBOND_PINMUX(UART_RX, 0, 8)>;
            bias-pull-up;
          };
        };
      };

    The 'uart0_default' child node encodes the pin configurations for a
    particular state of a device; in this case, the default (that is, active)
    state.

    As shown, pin configurations are organized in groups within each child node.
    Each group can specify a list of pin function selections in the 'pinmux'
    property. Note that 'pinmux' property is an array so you can configure multiple
    pins at once there. The SMARTBOND_PINMUX macro is used to create pinmux value.

    A group can also specify shared pin properties common to all the specified
    pins, such as the 'bias-pull-up' property in group 2. Here is a list of
    supported standard pin properties:

    - bias-pull-up: Enable pull-up resistor.
    - bias-pull-down: Enable pull-down resistor.

    Note that bias options are mutually exclusive.

    To link this pin configuration with a device, use a pinctrl-N property
    for some number N, like this example you could place in your board's DTS
    file:

       #include "board-pinctrl.dtsi"

       &uart {
             pinctrl-0 = <&uart_default>;
             pinctrl-names = "default";
       };

compatible: "renesas,smartbond-pinctrl"

include: base.yaml

child-binding:
  description: |
    Definitions for a pinctrl state.
  child-binding:

    include:
      - name: pincfg-node.yaml
        property-allowlist:
          - bias-pull-down
          - bias-pull-up
          - output-enable
          - input-enable

    properties:
      pinmux:
        required: true
        type: array
        description: |
          An array of pins sharing the same group properties. The pins should
          be defined using the SMARTBOND_PINMUX utility macro that encodes the port,
          pin and function.
