# Copyright (c) Nuvoton Technology Corp. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

description: |
  Pin controller is responsible for controlling pin function
  selection and pin properties. For example, for example you can
  use this node to set UART0 RX as pin PB12 to fulfill SYS_GPB_MFP3_PB12MFP_UART0_RXD.

  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:

    &pinctrl {
      /* configuration for the uart0 "default" state */
      uart0_default: uart0_default {
          /* configure PB13 as UART0 TX and PB12 as UART0 RX */
        group0 {
          pinmux = <PB12MFP_UART0_RXD>, <PB13MFP_UART0_TXD>;
        };
      };
    };


  To link pin configurations 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"

    &uart0 {
        pinctrl-0 = <&uart0_default>;
        pinctrl-names = "default";
    };

compatible: "nuvoton,numaker-pinctrl"

include: base.yaml

properties:
  reg:
    required: true

child-binding:
  description: NuMaker pin controller pin group
  child-binding:
    description: |
      Each child node defines the configuration for a particular state.
    include:
      - name: pincfg-node.yaml
        property-allowlist:
          - drive-open-drain
          - input-schmitt-enable
    properties:
      pinmux:
        required: true
        type: array
        description: |
          An array of pins sharing the same group properties. The pins should
          be defined using pre-defined macros or, alternatively, using NVT_PINMUX
          macros depending on the pinmux model used by the SoC series.
      drive-strength:
        type: string
        default: "low"
        enum:
          - "low"
          - "fast"
        description: |
          Set the driving strength of a pin. Hardware default configuration is low and
          it's enough to drive most components, like as LED, CAN transceiver and so on.
      slew-rate:
        type: string
        default: "low"
        enum:
          - "low"
          - "high"
          - "fast"
        description: |
          Set the speed of a pin. This setting effectively limits the
          slew rate of the output signal. Hardware default configuration is low.
          Fast slew rate could support fast speed pins, like as SPI CLK up to 50MHz.
