| # Copyright (c) 2021 Teslabs Engineering S.L. |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| description: | |
| The GD32 pin controller (AF model) is a singleton node responsible for |
| controlling pin function selection and pin properties. For example, you can |
| use this node to route USART0 RX to pin PA10 and enable the pull-up resistor |
| on the 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 pre-defined combinations for the SoC variant used by the board */ |
| #include <dt-bindings/pinctrl/gd32f450i(g-i-k)xx-pinctrl.h> |
| |
| &pinctrl { |
| /* configuration for the usart0 "default" state */ |
| usart0_default: usart0_default { |
| /* group 1 */ |
| group1 { |
| /* configure PA9 as USART0 TX and PA11 as USART0 CTS */ |
| pinmux = <USART0_TX_PA9>, <USART0_CTS_PA11>; |
| }; |
| /* group 2 */ |
| group2 { |
| /* configure PA10 as USART0 RX and PA12 as USART0 RTS */ |
| pinmux = <USART0_RX_PA10>, <USART0_RTS_PA12>; |
| /* both PA10 and PA12 have pull-up enabled */ |
| bias-pull-up; |
| }; |
| |
| /* configuration for the usart0 "sleep" state */ |
| usart0_sleep: usart0_sleep { |
| /* group 1 */ |
| group1 { |
| /* configure PA9, PA10, PA11 and PA12 in analog mode */ |
| pinmux = <ANALOG_PA9>, <ANALOG_PA10>, <ANALOG_PA12>, <ANALOG_PA11>; |
| }; |
| }; |
| |
| The 'usart0_default' child node encodes the pin configurations for a |
| particular state of a device; in this case, the default (that is, active) |
| state. Similarly, 'usart0_sleep' child node encodes the pin configurations |
| for the sleep state (used in device low power mode). Note that analog mode |
| is used for low power states because it disconnects the pin pull-up/down |
| resistor, schmitt trigger, and output buffer. |
| |
| 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. |
| |
| 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: |
| |
| - drive-push-pull: Push-pull drive mode (default, not required). |
| - drive-open-drain: Open-drain drive mode. |
| - bias-disable: Disable pull-up/down (default, not required). |
| - bias-pull-up: Enable pull-up resistor. |
| - bias-pull-down: Enable pull-down resistor. |
| - slew-rate: Set the maximum speed (and so the slew-rate) of the output |
| signal (default: 2MHz). |
| |
| Note that drive and bias options are mutually exclusive. |
| |
| 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" |
| |
| &usart0 { |
| pinctrl-0 = <&usart0_default>; |
| pinctrl-1 = <&usart0_sleep>; |
| pinctrl-names = "default", "sleep"; |
| }; |
| |
| compatible: "gd,gd32-pinctrl-af" |
| |
| include: gd,gd32-pinctrl-common.yaml |
| |
| child-binding: |
| description: | |
| Each child node defines the configuration for a particular state. |
| child-binding: |
| description: | |
| The grandchild nodes group pins that share the same pin configuration. |
| properties: |
| slew-rate: |
| required: false |
| type: string |
| default: "max-speed-2mhz" |
| enum: |
| - "max-speed-2mhz" |
| - "max-speed-25mhz" |
| - "max-speed-50mhz" |
| - "max-speed-200mhz" |
| description: | |
| Set the maximum speed of a pin. This setting effectively limits the |
| slew rate of the output signal. Defaults to "max-speed-2mhz", the SoC |
| default. |