127 lines
3.9 KiB
YAML
127 lines
3.9 KiB
YAML
# Copyright (c) 2020, Linaro Limited
|
|
# Copyright (c) 2021-2022, Gerson Fernando Budke
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
description: |
|
|
Atmel SAM0 Pinctrl container node
|
|
|
|
The Atmel SAM0 pin controller is a singleton node responsible for controlling
|
|
pin function selection and pin properties. For example, you can use this node
|
|
to route SERCOM0 as UART were RX to pin PAD1 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/samr21g-pinctrl.h>
|
|
|
|
&pinctrl {
|
|
/* configuration for the usart0 "default" state */
|
|
sercom0_uart_default: sercom0_uart_default {
|
|
/* group 1 */
|
|
group1 {
|
|
/* configure PA6 as USART0 TX and PA8 as USART0 CTS */
|
|
pinmux = <PA5D_SERCOM0_PAD1>, <PA6D_SERCOM0_PAD2>;
|
|
};
|
|
/* group 2 */
|
|
group2 {
|
|
/* configure PA5 as USART0 RX and PA7 as USART0 RTS */
|
|
pinmux = <PA4D_SERCOM0_PAD0>, <PA7D_SERCOM0_PAD3>;
|
|
/* 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-strength: Increase sink current.
|
|
- input-enable: Enable input on pin.
|
|
- output-enable: Enable output on a pin without actively driving it.
|
|
|
|
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,sam0-pinctrl"
|
|
|
|
include:
|
|
- name: base.yaml
|
|
- name: pincfg-node-group.yaml
|
|
child-binding:
|
|
child-binding:
|
|
property-allowlist:
|
|
- bias-pull-up
|
|
- bias-pull-down
|
|
- drive-strength
|
|
- input-enable
|
|
- output-enable
|
|
|
|
properties:
|
|
reg:
|
|
required: true
|
|
|
|
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.
|
|
drive-strength:
|
|
enum:
|
|
- 0
|
|
- 1
|
|
default: 0
|
|
description: |
|
|
The drive strength controls the output driver strength of an I/O pin
|
|
configured as an output.
|
|
0: Pin drive strength is set to normal drive strength.
|
|
1: Pin drive strength is set to stronger drive strength.
|