# Copyright (c) 2022, Andriy Gelman <andriy.gelman@gmail.com>
# SPDX-License-Identifier: Apache-2.0

description: |
  The Infineon XMC4XXX pin controller is responsible for connecting peripheral outputs
  to specific port/pins (also known as alternate functions) and configures pin properties.

  The pinctrl settings are referenced in a device tree peripheral node. For example in a UART
  node:

  &usic1ch1 {
      compatible = "infineon,xmc4xxx-uart";
      pinctrl-0 = <&uart_tx_p0_1_u1c1 &uart_rx_p0_0_u1c1>;
      pinctrl-names = "default";
      input-src = "DX0D";
      ...
  };

  pinctrl-0 is the phandle that stores the pin settings for two pins: &uart_tx_p0_1_u1c1
  and &uart_rx_p0_0_u1c1. These nodes are pre-defined and their naming convention is designed
  to help the user select the correct pin settings. Note the use of peripheral type,
  pin direction, port/pin number and USIC in the name.

  The pre-defined nodes only set the alternate function of the output pin. The
  configuration for the pin (i.e. drive strength) should be set in the board setup.
  The set of possible configurations are defined in the properties section below (in addition
  to the inherited property-allowlist list from pincfg-node.yaml).

  To create a new pin configuration, the user may append to the &pinctrl node, for example

  #include <zephyr/dt-bindings/pinctrl/xmc4xxx-pinctrl.h>
  &pinctrl {
      my_node_config: my_node_config {
      pinmux = <XMC4XXX_PINMUX_SET(0, 1, 2)>;
      drive-push-pull;
        ... other supported pin configurations ..
  };
  where XMC4XXX_PINMUX_SET(PORT, PIN, ALTERNATE_FUNCTION) is a helper macro for setting the
  alternate function for a given port/pin. Setting ALTERNATE_FUNCTION = 0 means that no
  alternate function is selected.

  The pinctrl driver only sets the alternate function for output pins. The input mux is
  handled by the peripheral drivers. For example the &usic1ch1 node has input-src property for
  this purpose. There are no pre-defined nodes for the input mux and this must be properly set
  by the user. Refer to the peripheral .yaml file (i.e. infineon,xmc4xxx-uart.yaml) and
  XMC4XXX documentation.

compatible: "infineon,xmc4xxx-pinctrl"

include: base.yaml

properties:
    "#address-cells":
      required: true
      const: 1
    "#size-cells":
      required: true
      const: 1

child-binding:
    description: Each child node defines the configuration for a particular state.

    include:
      - name: pincfg-node.yaml
        property-allowlist:
          - bias-pull-down
          - bias-pull-up
          - drive-push-pull
          - drive-open-drain
          - output-high
          - output-low

    properties:
        pinmux:
          description: |
            Encodes port/pin and alternate function. See helper macro XMC4XX_PINMUX_SET().
            Alternate function is only set for output pins; It selects  ALT1-ALT4
            output line in the GPIO element. The alternate function for input pins is
            handled separately by the peripheral. It is upto the peripheral to configure which
            input pin to use (For example see parameter input-src in infineon,xmc4xxx-uart.yaml).
          required: true
          type: int

        drive-strength:
          description: |
            Drive strength of the output pin. Following options as in XMC_GPIO_OUTPUT_STRENGTH
            See xmc4_gpio.h. This only has an effect if the pin is in drive-push-pull mode.
          required: true
          type: string
          enum:
            - "strong-sharp-edge"
            - "strong-medium-edge"
            - "strong-soft-edge"
            - "strong-slow-edge"
            - "medium"
            - "medium-unknown1-edge"
            - "medium-unknown2-edge"
            - "weak"

        invert-input:
          description: Inverts the input.
          type: boolean

        hwctrl:
          description: Pre-assigns hardware control of the pin to a certain peripheral.
          required: true
          type: string
          enum:
            - "disabled"
            - "periph1"
            - "periph2"
