blob: 6b40e533eccdd17e91ecf93135e4dd511a3c5d17 [file] [log] [blame]
# Copyright (c) 2020, Linaro Limited
# Copyright (c) 2021, Teslabs Engineering S.L.
# Copyright (c) 2021-2022, Gerson Fernando Budke <nandojve@gmail.com>
# SPDX-License-Identifier: Apache-2.0
description: |
Atmel SAM Pinctrl container node
The Atmel SAM pin controller 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/sam4sXc-pinctrl.h>
&pinctrl {
/* configuration for the usart0 "default" state */
usart0_default: usart0_default {
/* group 1 */
group1 {
/* configure PA6 as USART0 TX and PA8 as USART0 CTS */
pinmux = <PA6A_USART0_TXD0>, <PA8A_USART0_CTS0>;
};
/* group 2 */
group2 {
/* configure PA5 as USART0 RX and PA7 as USART0 RTS */
pinmux = <PA5A_USART0_RXD0>, <PA7A_USART0_RTS0>;
/* both PA5 and PA7 have pull-up enabled */
bias-pull-up;
};
};
};
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.
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:
- bias-pull-up: Enable pull-up resistor.
- bias-pull-down: Enable pull-down resistor.
- drive-open-drain: Open-drain drive mode.
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-names = "default";
};
compatible: "atmel,sam-pinctrl"
include:
- name: base.yaml
- name: pincfg-node-group.yaml
child-binding:
child-binding:
property-allowlist:
- bias-pull-up
- bias-pull-down
- drive-open-drain
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.
child-binding:
description: |
The grandchild nodes group pins that share the same pin configuration.
properties:
pinmux:
required: true
type: array
description: |
An array of pins sharing the same group properties. The pins should
be defined using pre-defined macros or, alternatively, using the
SAM_PINMUX utility macros depending on the pinmux model used by the
SoC series.