# Copyright (c) 2022, Telink Semiconductor # SPDX-License-Identifier: Apache-2.0 description: | The Telink B91 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 TX to pin PB2 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 pins and functions for the SoC used by the board */ #include &pinctrl { /* configuration for UART0 TX default state */ uart0_tx_pb2_default: uart0_tx_pb2_default { /* configure PB2 as B91_FUNC_C */ pinmux = ; }; /* configuration for UART0 RX default state */ uart0_rx_pb3_default: uart0_rx_pb3_default { /* configure PB2 as B91_FUNC_C */ pinmux = ; }; }; The 'uart0_tx_pb2_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. A pin configuration can also specify pin properties such as the 'bias-pull-up' property. Here is a list of supported standard pin properties: - bias-disable - bias-pull-down - bias-pull-up 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" &uart0 { pinctrl-0 = <&uart0_tx_pb2_default &uart0_rx_pb3_default>; pinctrl-1 = <&uart0_tx_pb2_sleep &uart0_rx_pb3_sleep>; pinctrl-names = "default", "sleep"; }; compatible: "telink,b91-pinctrl" include: base.yaml properties: reg: required: true pad-mul-sel: type: int required: true description: | PinMux pad_mul_sel register value. Pin functions depend on it. For instance: Function C of PB2 configs the pin to UART0_TX if pad_mul_sel is set to <1>. But, the same function configs the same pin to DAC_I_DAT2_I if pad_mul_sel is set to <0>. Refer to the Telink TLSR9 specs to get more information about pins configuration. child-binding: description: | This binding gives a base representation of the Telink B91 pins configuration. include: - name: pincfg-node.yaml property-allowlist: - bias-disable - bias-pull-down - bias-pull-up properties: pinmux: required: true type: int description: | Telink B91 pin's configuration (port, pin and function).