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