18c2ecf20Sopenharmony_ci# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 28c2ecf20Sopenharmony_ci# Copyright (C) STMicroelectronics 2019. 38c2ecf20Sopenharmony_ci%YAML 1.2 48c2ecf20Sopenharmony_ci--- 58c2ecf20Sopenharmony_ci$id: http://devicetree.org/schemas/pinctrl/st,stm32-pinctrl.yaml# 68c2ecf20Sopenharmony_ci$schema: http://devicetree.org/meta-schemas/core.yaml# 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_cititle: STM32 GPIO and Pin Mux/Config controller 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_cimaintainers: 118c2ecf20Sopenharmony_ci - Alexandre TORGUE <alexandre.torgue@st.com> 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_cidescription: | 148c2ecf20Sopenharmony_ci STMicroelectronics's STM32 MCUs intregrate a GPIO and Pin mux/config hardware 158c2ecf20Sopenharmony_ci controller. It controls the input/output settings on the available pins and 168c2ecf20Sopenharmony_ci also provides ability to multiplex and configure the output of various 178c2ecf20Sopenharmony_ci on-chip controllers onto these pads. 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ciproperties: 208c2ecf20Sopenharmony_ci compatible: 218c2ecf20Sopenharmony_ci enum: 228c2ecf20Sopenharmony_ci - st,stm32f429-pinctrl 238c2ecf20Sopenharmony_ci - st,stm32f469-pinctrl 248c2ecf20Sopenharmony_ci - st,stm32f746-pinctrl 258c2ecf20Sopenharmony_ci - st,stm32f769-pinctrl 268c2ecf20Sopenharmony_ci - st,stm32h743-pinctrl 278c2ecf20Sopenharmony_ci - st,stm32mp157-pinctrl 288c2ecf20Sopenharmony_ci - st,stm32mp157-z-pinctrl 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_ci '#address-cells': 318c2ecf20Sopenharmony_ci const: 1 328c2ecf20Sopenharmony_ci '#size-cells': 338c2ecf20Sopenharmony_ci const: 1 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci ranges: true 368c2ecf20Sopenharmony_ci pins-are-numbered: true 378c2ecf20Sopenharmony_ci hwlocks: true 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci interrupts: 408c2ecf20Sopenharmony_ci maxItems: 1 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci st,syscfg: 438c2ecf20Sopenharmony_ci description: Should be phandle/offset/mask 448c2ecf20Sopenharmony_ci - Phandle to the syscon node which includes IRQ mux selection. 458c2ecf20Sopenharmony_ci - The offset of the IRQ mux selection register. 468c2ecf20Sopenharmony_ci - The field mask of IRQ mux, needed if different of 0xf. 478c2ecf20Sopenharmony_ci $ref: "/schemas/types.yaml#/definitions/phandle-array" 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ci st,package: 508c2ecf20Sopenharmony_ci description: 518c2ecf20Sopenharmony_ci Indicates the SOC package used. 528c2ecf20Sopenharmony_ci More details in include/dt-bindings/pinctrl/stm32-pinfunc.h 538c2ecf20Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 548c2ecf20Sopenharmony_ci enum: [1, 2, 4, 8] 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_cipatternProperties: 578c2ecf20Sopenharmony_ci '^gpio@[0-9a-f]*$': 588c2ecf20Sopenharmony_ci type: object 598c2ecf20Sopenharmony_ci properties: 608c2ecf20Sopenharmony_ci gpio-controller: true 618c2ecf20Sopenharmony_ci '#gpio-cells': 628c2ecf20Sopenharmony_ci const: 2 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ci reg: 658c2ecf20Sopenharmony_ci maxItems: 1 668c2ecf20Sopenharmony_ci clocks: 678c2ecf20Sopenharmony_ci maxItems: 1 688c2ecf20Sopenharmony_ci reset: 698c2ecf20Sopenharmony_ci minItems: 1 708c2ecf20Sopenharmony_ci maxItems: 1 718c2ecf20Sopenharmony_ci gpio-ranges: 728c2ecf20Sopenharmony_ci minItems: 1 738c2ecf20Sopenharmony_ci maxItems: 16 748c2ecf20Sopenharmony_ci ngpios: 758c2ecf20Sopenharmony_ci description: 768c2ecf20Sopenharmony_ci Number of available gpios in a bank. 778c2ecf20Sopenharmony_ci minimum: 1 788c2ecf20Sopenharmony_ci maximum: 16 798c2ecf20Sopenharmony_ci 808c2ecf20Sopenharmony_ci st,bank-name: 818c2ecf20Sopenharmony_ci description: 828c2ecf20Sopenharmony_ci Should be a name string for this bank as specified in the datasheet. 838c2ecf20Sopenharmony_ci $ref: "/schemas/types.yaml#/definitions/string" 848c2ecf20Sopenharmony_ci enum: 858c2ecf20Sopenharmony_ci - GPIOA 868c2ecf20Sopenharmony_ci - GPIOB 878c2ecf20Sopenharmony_ci - GPIOC 888c2ecf20Sopenharmony_ci - GPIOD 898c2ecf20Sopenharmony_ci - GPIOE 908c2ecf20Sopenharmony_ci - GPIOF 918c2ecf20Sopenharmony_ci - GPIOG 928c2ecf20Sopenharmony_ci - GPIOH 938c2ecf20Sopenharmony_ci - GPIOI 948c2ecf20Sopenharmony_ci - GPIOJ 958c2ecf20Sopenharmony_ci - GPIOK 968c2ecf20Sopenharmony_ci - GPIOZ 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_ci st,bank-ioport: 998c2ecf20Sopenharmony_ci description: 1008c2ecf20Sopenharmony_ci Should correspond to the EXTI IOport selection (EXTI line used 1018c2ecf20Sopenharmony_ci to select GPIOs as interrupts). 1028c2ecf20Sopenharmony_ci $ref: "/schemas/types.yaml#/definitions/uint32" 1038c2ecf20Sopenharmony_ci minimum: 0 1048c2ecf20Sopenharmony_ci maximum: 11 1058c2ecf20Sopenharmony_ci 1068c2ecf20Sopenharmony_ci required: 1078c2ecf20Sopenharmony_ci - gpio-controller 1088c2ecf20Sopenharmony_ci - '#gpio-cells' 1098c2ecf20Sopenharmony_ci - reg 1108c2ecf20Sopenharmony_ci - clocks 1118c2ecf20Sopenharmony_ci - st,bank-name 1128c2ecf20Sopenharmony_ci 1138c2ecf20Sopenharmony_ci '-[0-9]*$': 1148c2ecf20Sopenharmony_ci type: object 1158c2ecf20Sopenharmony_ci patternProperties: 1168c2ecf20Sopenharmony_ci '^pins': 1178c2ecf20Sopenharmony_ci type: object 1188c2ecf20Sopenharmony_ci description: | 1198c2ecf20Sopenharmony_ci A pinctrl node should contain at least one subnode representing the 1208c2ecf20Sopenharmony_ci pinctrl group available on the machine. Each subnode will list the 1218c2ecf20Sopenharmony_ci pins it needs, and how they should be configured, with regard to muxer 1228c2ecf20Sopenharmony_ci configuration, pullups, drive, output high/low and output speed. 1238c2ecf20Sopenharmony_ci properties: 1248c2ecf20Sopenharmony_ci pinmux: 1258c2ecf20Sopenharmony_ci $ref: "/schemas/types.yaml#/definitions/uint32-array" 1268c2ecf20Sopenharmony_ci description: | 1278c2ecf20Sopenharmony_ci Integer array, represents gpio pin number and mux setting. 1288c2ecf20Sopenharmony_ci Supported pin number and mux varies for different SoCs, and are 1298c2ecf20Sopenharmony_ci defined in dt-bindings/pinctrl/<soc>-pinfunc.h directly. 1308c2ecf20Sopenharmony_ci These defines are calculated as: ((port * 16 + line) << 8) | function 1318c2ecf20Sopenharmony_ci With: 1328c2ecf20Sopenharmony_ci - port: The gpio port index (PA = 0, PB = 1, ..., PK = 11) 1338c2ecf20Sopenharmony_ci - line: The line offset within the port (PA0 = 0, PA1 = 1, ..., PA15 = 15) 1348c2ecf20Sopenharmony_ci - function: The function number, can be: 1358c2ecf20Sopenharmony_ci * 0 : GPIO 1368c2ecf20Sopenharmony_ci * 1 : Alternate Function 0 1378c2ecf20Sopenharmony_ci * 2 : Alternate Function 1 1388c2ecf20Sopenharmony_ci * 3 : Alternate Function 2 1398c2ecf20Sopenharmony_ci * ... 1408c2ecf20Sopenharmony_ci * 16 : Alternate Function 15 1418c2ecf20Sopenharmony_ci * 17 : Analog 1428c2ecf20Sopenharmony_ci To simplify the usage, macro is available to generate "pinmux" field. 1438c2ecf20Sopenharmony_ci This macro is available here: 1448c2ecf20Sopenharmony_ci - include/dt-bindings/pinctrl/stm32-pinfunc.h 1458c2ecf20Sopenharmony_ci Some examples of using macro: 1468c2ecf20Sopenharmony_ci /* GPIO A9 set as alernate function 2 */ 1478c2ecf20Sopenharmony_ci ... { 1488c2ecf20Sopenharmony_ci pinmux = <STM32_PINMUX('A', 9, AF2)>; 1498c2ecf20Sopenharmony_ci }; 1508c2ecf20Sopenharmony_ci /* GPIO A9 set as GPIO */ 1518c2ecf20Sopenharmony_ci ... { 1528c2ecf20Sopenharmony_ci pinmux = <STM32_PINMUX('A', 9, GPIO)>; 1538c2ecf20Sopenharmony_ci }; 1548c2ecf20Sopenharmony_ci /* GPIO A9 set as analog */ 1558c2ecf20Sopenharmony_ci ... { 1568c2ecf20Sopenharmony_ci pinmux = <STM32_PINMUX('A', 9, ANALOG)>; 1578c2ecf20Sopenharmony_ci }; 1588c2ecf20Sopenharmony_ci 1598c2ecf20Sopenharmony_ci bias-disable: 1608c2ecf20Sopenharmony_ci type: boolean 1618c2ecf20Sopenharmony_ci bias-pull-down: 1628c2ecf20Sopenharmony_ci type: boolean 1638c2ecf20Sopenharmony_ci bias-pull-up: 1648c2ecf20Sopenharmony_ci type: boolean 1658c2ecf20Sopenharmony_ci drive-push-pull: 1668c2ecf20Sopenharmony_ci type: boolean 1678c2ecf20Sopenharmony_ci drive-open-drain: 1688c2ecf20Sopenharmony_ci type: boolean 1698c2ecf20Sopenharmony_ci output-low: 1708c2ecf20Sopenharmony_ci type: boolean 1718c2ecf20Sopenharmony_ci output-high: 1728c2ecf20Sopenharmony_ci type: boolean 1738c2ecf20Sopenharmony_ci slew-rate: 1748c2ecf20Sopenharmony_ci description: | 1758c2ecf20Sopenharmony_ci 0: Low speed 1768c2ecf20Sopenharmony_ci 1: Medium speed 1778c2ecf20Sopenharmony_ci 2: Fast speed 1788c2ecf20Sopenharmony_ci 3: High speed 1798c2ecf20Sopenharmony_ci $ref: /schemas/types.yaml#/definitions/uint32 1808c2ecf20Sopenharmony_ci enum: [0, 1, 2, 3] 1818c2ecf20Sopenharmony_ci 1828c2ecf20Sopenharmony_ci required: 1838c2ecf20Sopenharmony_ci - pinmux 1848c2ecf20Sopenharmony_ci 1858c2ecf20Sopenharmony_cirequired: 1868c2ecf20Sopenharmony_ci - compatible 1878c2ecf20Sopenharmony_ci - '#address-cells' 1888c2ecf20Sopenharmony_ci - '#size-cells' 1898c2ecf20Sopenharmony_ci - ranges 1908c2ecf20Sopenharmony_ci - pins-are-numbered 1918c2ecf20Sopenharmony_ci 1928c2ecf20Sopenharmony_ciadditionalProperties: false 1938c2ecf20Sopenharmony_ci 1948c2ecf20Sopenharmony_ciexamples: 1958c2ecf20Sopenharmony_ci - | 1968c2ecf20Sopenharmony_ci #include <dt-bindings/pinctrl/stm32-pinfunc.h> 1978c2ecf20Sopenharmony_ci #include <dt-bindings/mfd/stm32f4-rcc.h> 1988c2ecf20Sopenharmony_ci //Example 1 1998c2ecf20Sopenharmony_ci pinctrl@40020000 { 2008c2ecf20Sopenharmony_ci #address-cells = <1>; 2018c2ecf20Sopenharmony_ci #size-cells = <1>; 2028c2ecf20Sopenharmony_ci compatible = "st,stm32f429-pinctrl"; 2038c2ecf20Sopenharmony_ci ranges = <0 0x40020000 0x3000>; 2048c2ecf20Sopenharmony_ci pins-are-numbered; 2058c2ecf20Sopenharmony_ci 2068c2ecf20Sopenharmony_ci gpioa: gpio@0 { 2078c2ecf20Sopenharmony_ci gpio-controller; 2088c2ecf20Sopenharmony_ci #gpio-cells = <2>; 2098c2ecf20Sopenharmony_ci reg = <0x0 0x400>; 2108c2ecf20Sopenharmony_ci resets = <&reset_ahb1 0>; 2118c2ecf20Sopenharmony_ci clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOA)>; 2128c2ecf20Sopenharmony_ci st,bank-name = "GPIOA"; 2138c2ecf20Sopenharmony_ci }; 2148c2ecf20Sopenharmony_ci }; 2158c2ecf20Sopenharmony_ci 2168c2ecf20Sopenharmony_ci //Example 2 (using gpio-ranges) 2178c2ecf20Sopenharmony_ci pinctrl@50020000 { 2188c2ecf20Sopenharmony_ci #address-cells = <1>; 2198c2ecf20Sopenharmony_ci #size-cells = <1>; 2208c2ecf20Sopenharmony_ci compatible = "st,stm32f429-pinctrl"; 2218c2ecf20Sopenharmony_ci ranges = <0 0x50020000 0x3000>; 2228c2ecf20Sopenharmony_ci pins-are-numbered; 2238c2ecf20Sopenharmony_ci 2248c2ecf20Sopenharmony_ci gpiob: gpio@1000 { 2258c2ecf20Sopenharmony_ci gpio-controller; 2268c2ecf20Sopenharmony_ci #gpio-cells = <2>; 2278c2ecf20Sopenharmony_ci reg = <0x1000 0x400>; 2288c2ecf20Sopenharmony_ci resets = <&reset_ahb1 0>; 2298c2ecf20Sopenharmony_ci clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOB)>; 2308c2ecf20Sopenharmony_ci st,bank-name = "GPIOB"; 2318c2ecf20Sopenharmony_ci gpio-ranges = <&pinctrl 0 0 16>; 2328c2ecf20Sopenharmony_ci }; 2338c2ecf20Sopenharmony_ci 2348c2ecf20Sopenharmony_ci gpioc: gpio@2000 { 2358c2ecf20Sopenharmony_ci gpio-controller; 2368c2ecf20Sopenharmony_ci #gpio-cells = <2>; 2378c2ecf20Sopenharmony_ci reg = <0x2000 0x400>; 2388c2ecf20Sopenharmony_ci resets = <&reset_ahb1 0>; 2398c2ecf20Sopenharmony_ci clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOC)>; 2408c2ecf20Sopenharmony_ci st,bank-name = "GPIOC"; 2418c2ecf20Sopenharmony_ci ngpios = <5>; 2428c2ecf20Sopenharmony_ci gpio-ranges = <&pinctrl 0 16 3>, 2438c2ecf20Sopenharmony_ci <&pinctrl 14 30 2>; 2448c2ecf20Sopenharmony_ci }; 2458c2ecf20Sopenharmony_ci }; 2468c2ecf20Sopenharmony_ci 2478c2ecf20Sopenharmony_ci //Example 3 pin groups 2488c2ecf20Sopenharmony_ci pinctrl { 2498c2ecf20Sopenharmony_ci usart1_pins_a: usart1-0 { 2508c2ecf20Sopenharmony_ci pins1 { 2518c2ecf20Sopenharmony_ci pinmux = <STM32_PINMUX('A', 9, AF7)>; 2528c2ecf20Sopenharmony_ci bias-disable; 2538c2ecf20Sopenharmony_ci drive-push-pull; 2548c2ecf20Sopenharmony_ci slew-rate = <0>; 2558c2ecf20Sopenharmony_ci }; 2568c2ecf20Sopenharmony_ci pins2 { 2578c2ecf20Sopenharmony_ci pinmux = <STM32_PINMUX('A', 10, AF7)>; 2588c2ecf20Sopenharmony_ci bias-disable; 2598c2ecf20Sopenharmony_ci }; 2608c2ecf20Sopenharmony_ci }; 2618c2ecf20Sopenharmony_ci }; 2628c2ecf20Sopenharmony_ci 2638c2ecf20Sopenharmony_ci usart1 { 2648c2ecf20Sopenharmony_ci pinctrl-0 = <&usart1_pins_a>; 2658c2ecf20Sopenharmony_ci pinctrl-names = "default"; 2668c2ecf20Sopenharmony_ci }; 2678c2ecf20Sopenharmony_ci 2688c2ecf20Sopenharmony_ci... 269