# Copyright (c) 2021 Nordic Semiconductor ASA # SPDX-License-Identifier: Apache-2.0 description: | The nRF pin controller is a singleton node responsible for controlling pin function selection and pin properties. For example, you can use this node to route UART0 RX to pin P0.1 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. */ &pinctrl { /* configuration for uart0 device, default state */ uart0_default: uart0_default { /* group 1 ('group1' name is arbitrary) */ group1 { /* configure P0.1 as UART_TX and P0.2 as UART_RTS */ psels = , ; }; /* group 2 */ group2 { /* configure P0.3 as UART_RX and P0.4 as UART_CTS */ psels = , ; /* both P0.3 and P0.4 are configured with pull-up */ bias-pull-up; }; }; }; The 'uart0_default' child node encodes the pin configurations for a particular state of a device; in this case, the default (that is, active) state. You would specify the low-power configuration for the same device in a separate child node. As shown, pin configurations are organized in groups within each child node. Each group can specify a list of pin function selections in the 'psels' property. The NRF_PSEL macro is used to specify a pin function selection. Available pin functions can be found in the include/zephyr/dt-bindings/pinctrl/nrf-pinctrl.h header file. 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: - bias-disable: Disable pull-up/down (default behavior, not required). - bias-pull-up: Enable pull-up resistor. - bias-pull-down: Enable pull-down resistor. - low-power-enable: Configure pin as an input with input buffer disconnected. Note that bias options are mutually exclusive. To link this pin configuration 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: "nordic,nrf-pinctrl" include: - name: base.yaml - name: pincfg-node-group.yaml child-binding: child-binding: property-allowlist: - bias-disable - bias-pull-down - bias-pull-up - low-power-enable child-binding: description: | nRF pin controller pin configuration state nodes. child-binding: description: | nRF pin controller pin configuration group. properties: psels: required: true type: array description: | An array of pins sharing the same group properties. The pins should be defined using the NRF_PSEL utility macro that encodes the port, pin and function. nordic,drive-mode: type: int default: 0 description: | Pin output drive mode. Available drive modes are pre-defined in nrf-pinctrl.h. Note that extra modes may not be available on certain devices. Defaults to standard mode for 0 and 1 (NRF_DRIVE_S0S1), the SoC default. nordic,invert: type: boolean description: | Invert pin polarity (set the active state to low). Only valid for PWM channel output pins.