1# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) 2# Copyright (C) STMicroelectronics 2019. 3%YAML 1.2 4--- 5$id: http://devicetree.org/schemas/pinctrl/st,stm32-pinctrl.yaml# 6$schema: http://devicetree.org/meta-schemas/core.yaml# 7 8title: STM32 GPIO and Pin Mux/Config controller 9 10maintainers: 11 - Alexandre TORGUE <alexandre.torgue@foss.st.com> 12 13description: | 14 STMicroelectronics's STM32 MCUs intregrate a GPIO and Pin mux/config hardware 15 controller. It controls the input/output settings on the available pins and 16 also provides ability to multiplex and configure the output of various 17 on-chip controllers onto these pads. 18 19properties: 20 compatible: 21 enum: 22 - st,stm32f429-pinctrl 23 - st,stm32f469-pinctrl 24 - st,stm32f746-pinctrl 25 - st,stm32f769-pinctrl 26 - st,stm32h743-pinctrl 27 - st,stm32mp135-pinctrl 28 - st,stm32mp157-pinctrl 29 - st,stm32mp157-z-pinctrl 30 31 '#address-cells': 32 const: 1 33 '#size-cells': 34 const: 1 35 36 ranges: true 37 pins-are-numbered: 38 $ref: /schemas/types.yaml#/definitions/flag 39 deprecated: true 40 hwlocks: true 41 42 interrupts: 43 maxItems: 1 44 45 st,syscfg: 46 description: Phandle+args to the syscon node which includes IRQ mux selection. 47 $ref: "/schemas/types.yaml#/definitions/phandle-array" 48 items: 49 - items: 50 - description: syscon node which includes IRQ mux selection 51 - description: The offset of the IRQ mux selection register 52 - description: The field mask of IRQ mux, needed if different of 0xf 53 54 st,package: 55 description: 56 Indicates the SOC package used. 57 More details in include/dt-bindings/pinctrl/stm32-pinfunc.h 58 $ref: /schemas/types.yaml#/definitions/uint32 59 enum: [1, 2, 4, 8] 60 61patternProperties: 62 '^gpio@[0-9a-f]*$': 63 type: object 64 additionalProperties: false 65 properties: 66 gpio-controller: true 67 '#gpio-cells': 68 const: 2 69 interrupt-controller: true 70 '#interrupt-cells': 71 const: 2 72 73 reg: 74 maxItems: 1 75 clocks: 76 maxItems: 1 77 resets: 78 maxItems: 1 79 gpio-line-names: true 80 gpio-ranges: 81 minItems: 1 82 maxItems: 16 83 ngpios: 84 description: 85 Number of available gpios in a bank. 86 minimum: 1 87 maximum: 16 88 89 st,bank-name: 90 description: 91 Should be a name string for this bank as specified in the datasheet. 92 $ref: "/schemas/types.yaml#/definitions/string" 93 enum: 94 - GPIOA 95 - GPIOB 96 - GPIOC 97 - GPIOD 98 - GPIOE 99 - GPIOF 100 - GPIOG 101 - GPIOH 102 - GPIOI 103 - GPIOJ 104 - GPIOK 105 - GPIOZ 106 107 st,bank-ioport: 108 description: 109 Should correspond to the EXTI IOport selection (EXTI line used 110 to select GPIOs as interrupts). 111 $ref: "/schemas/types.yaml#/definitions/uint32" 112 minimum: 0 113 maximum: 11 114 115 patternProperties: 116 "^(.+-hog(-[0-9]+)?)$": 117 type: object 118 required: 119 - gpio-hog 120 121 required: 122 - gpio-controller 123 - '#gpio-cells' 124 - reg 125 - clocks 126 - st,bank-name 127 128 '-[0-9]*$': 129 type: object 130 additionalProperties: false 131 132 patternProperties: 133 '^pins': 134 type: object 135 additionalProperties: false 136 description: | 137 A pinctrl node should contain at least one subnode representing the 138 pinctrl group available on the machine. Each subnode will list the 139 pins it needs, and how they should be configured, with regard to muxer 140 configuration, pullups, drive, output high/low and output speed. 141 properties: 142 pinmux: 143 $ref: "/schemas/types.yaml#/definitions/uint32-array" 144 description: | 145 Integer array, represents gpio pin number and mux setting. 146 Supported pin number and mux varies for different SoCs, and are 147 defined in dt-bindings/pinctrl/<soc>-pinfunc.h directly. 148 These defines are calculated as: ((port * 16 + line) << 8) | function 149 With: 150 - port: The gpio port index (PA = 0, PB = 1, ..., PK = 11) 151 - line: The line offset within the port (PA0 = 0, PA1 = 1, ..., PA15 = 15) 152 - function: The function number, can be: 153 * 0 : GPIO 154 * 1 : Alternate Function 0 155 * 2 : Alternate Function 1 156 * 3 : Alternate Function 2 157 * ... 158 * 16 : Alternate Function 15 159 * 17 : Analog 160 To simplify the usage, macro is available to generate "pinmux" field. 161 This macro is available here: 162 - include/dt-bindings/pinctrl/stm32-pinfunc.h 163 Some examples of using macro: 164 /* GPIO A9 set as alernate function 2 */ 165 ... { 166 pinmux = <STM32_PINMUX('A', 9, AF2)>; 167 }; 168 /* GPIO A9 set as GPIO */ 169 ... { 170 pinmux = <STM32_PINMUX('A', 9, GPIO)>; 171 }; 172 /* GPIO A9 set as analog */ 173 ... { 174 pinmux = <STM32_PINMUX('A', 9, ANALOG)>; 175 }; 176 177 bias-disable: 178 type: boolean 179 bias-pull-down: 180 type: boolean 181 bias-pull-up: 182 type: boolean 183 drive-push-pull: 184 type: boolean 185 drive-open-drain: 186 type: boolean 187 output-low: 188 type: boolean 189 output-high: 190 type: boolean 191 slew-rate: 192 description: | 193 0: Low speed 194 1: Medium speed 195 2: Fast speed 196 3: High speed 197 $ref: /schemas/types.yaml#/definitions/uint32 198 enum: [0, 1, 2, 3] 199 200 required: 201 - pinmux 202 203allOf: 204 - $ref: "pinctrl.yaml#" 205 206required: 207 - compatible 208 - '#address-cells' 209 - '#size-cells' 210 - ranges 211 212additionalProperties: false 213 214examples: 215 - | 216 #include <dt-bindings/pinctrl/stm32-pinfunc.h> 217 #include <dt-bindings/mfd/stm32f4-rcc.h> 218 //Example 1 219 pinctrl@40020000 { 220 #address-cells = <1>; 221 #size-cells = <1>; 222 compatible = "st,stm32f429-pinctrl"; 223 ranges = <0 0x40020000 0x3000>; 224 225 gpioa: gpio@0 { 226 gpio-controller; 227 #gpio-cells = <2>; 228 reg = <0x0 0x400>; 229 resets = <&reset_ahb1 0>; 230 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOA)>; 231 st,bank-name = "GPIOA"; 232 }; 233 }; 234 235 //Example 2 (using gpio-ranges) 236 pinctrl@50020000 { 237 #address-cells = <1>; 238 #size-cells = <1>; 239 compatible = "st,stm32f429-pinctrl"; 240 ranges = <0 0x50020000 0x3000>; 241 242 gpiob: gpio@1000 { 243 gpio-controller; 244 #gpio-cells = <2>; 245 reg = <0x1000 0x400>; 246 resets = <&reset_ahb1 0>; 247 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOB)>; 248 st,bank-name = "GPIOB"; 249 gpio-ranges = <&pinctrl 0 0 16>; 250 }; 251 252 gpioc: gpio@2000 { 253 gpio-controller; 254 #gpio-cells = <2>; 255 reg = <0x2000 0x400>; 256 resets = <&reset_ahb1 0>; 257 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOC)>; 258 st,bank-name = "GPIOC"; 259 ngpios = <5>; 260 gpio-ranges = <&pinctrl 0 16 3>, 261 <&pinctrl 14 30 2>; 262 }; 263 }; 264 265 //Example 3 pin groups 266 pinctrl { 267 usart1_pins_a: usart1-0 { 268 pins1 { 269 pinmux = <STM32_PINMUX('A', 9, AF7)>; 270 bias-disable; 271 drive-push-pull; 272 slew-rate = <0>; 273 }; 274 pins2 { 275 pinmux = <STM32_PINMUX('A', 10, AF7)>; 276 bias-disable; 277 }; 278 }; 279 }; 280 281 usart1 { 282 pinctrl-0 = <&usart1_pins_a>; 283 pinctrl-names = "default"; 284 }; 285 286... 287