113 lines
4.1 KiB
YAML
113 lines
4.1 KiB
YAML
# 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:
|
|
- name: base.yaml
|
|
- name: pincfg-node.yaml
|
|
child-binding:
|
|
property-allowlist:
|
|
- bias-pull-down
|
|
- bias-pull-up
|
|
- drive-push-pull
|
|
- drive-open-drain
|
|
- output-high
|
|
- output-low
|
|
|
|
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.
|
|
|
|
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.
|
|
required: false
|
|
type: boolean
|
|
|
|
hwctrl:
|
|
description: Pre-assigns hardware control of the pin to a certain peripheral.
|
|
required: true
|
|
type: string
|
|
enum:
|
|
- "disabled"
|
|
- "periph1"
|
|
- "periph2"
|