Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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 integrate 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 - st,stm32mp257-pinctrl
31 - st,stm32mp257-z-pinctrl
32
33 '#address-cells':
34 const: 1
35
36 '#size-cells':
37 const: 1
38
39 ranges: true
40
41 pins-are-numbered:
42 $ref: /schemas/types.yaml#/definitions/flag
43 deprecated: true
44
45 hwlocks: true
46
47 interrupts:
48 maxItems: 1
49
50 st,syscfg:
51 description: Phandle+args to the syscon node which includes IRQ mux selection.
52 $ref: /schemas/types.yaml#/definitions/phandle-array
53 items:
54 - minItems: 2
55 items:
56 - description: syscon node which includes IRQ mux selection
57 - description: The offset of the IRQ mux selection register
58 - description: The field mask of IRQ mux, needed if different of 0xf
59
60 st,package:
61 description:
62 Indicates the SOC package used.
63 More details in include/dt-bindings/pinctrl/stm32-pinfunc.h
64 $ref: /schemas/types.yaml#/definitions/uint32
65 enum: [0x1, 0x2, 0x4, 0x8, 0x100, 0x400, 0x800]
66
67patternProperties:
68 '^gpio@[0-9a-f]*$':
69 type: object
70 additionalProperties: false
71 properties:
72 gpio-controller: true
73
74 '#gpio-cells':
75 const: 2
76
77 interrupt-controller: true
78 '#interrupt-cells':
79 const: 2
80
81 reg:
82 maxItems: 1
83
84 clocks:
85 maxItems: 1
86
87 resets:
88 maxItems: 1
89
90 gpio-line-names: true
91
92 gpio-ranges:
93 minItems: 1
94 maxItems: 16
95
96 ngpios:
97 description:
98 Number of available gpios in a bank.
99 minimum: 1
100 maximum: 16
101
102 st,bank-name:
103 description:
104 Should be a name string for this bank as specified in the datasheet.
105 $ref: /schemas/types.yaml#/definitions/string
106 enum:
107 - GPIOA
108 - GPIOB
109 - GPIOC
110 - GPIOD
111 - GPIOE
112 - GPIOF
113 - GPIOG
114 - GPIOH
115 - GPIOI
116 - GPIOJ
117 - GPIOK
118 - GPIOZ
119
120 st,bank-ioport:
121 description:
122 Should correspond to the EXTI IOport selection (EXTI line used
123 to select GPIOs as interrupts).
124 $ref: /schemas/types.yaml#/definitions/uint32
125 minimum: 0
126 maximum: 11
127
128 patternProperties:
129 "^(.+-hog(-[0-9]+)?)$":
130 type: object
131 required:
132 - gpio-hog
133
134 required:
135 - gpio-controller
136 - '#gpio-cells'
137 - reg
138 - clocks
139 - st,bank-name
140
141 '-[0-9]*$':
142 type: object
143 additionalProperties: false
144
145 patternProperties:
146 '^pins':
147 type: object
148 additionalProperties: false
149 description: |
150 A pinctrl node should contain at least one subnode representing the
151 pinctrl group available on the machine. Each subnode will list the
152 pins it needs, and how they should be configured, with regard to muxer
153 configuration, pullups, drive, output high/low and output speed.
154 $ref: /schemas/pinctrl/pincfg-node.yaml
155
156 properties:
157 pinmux:
158 $ref: /schemas/types.yaml#/definitions/uint32-array
159 description: |
160 Integer array, represents gpio pin number and mux setting.
161 Supported pin number and mux varies for different SoCs, and are
162 defined in dt-bindings/pinctrl/<soc>-pinfunc.h directly.
163 These defines are calculated as: ((port * 16 + line) << 8) | function
164 With:
165 - port: The gpio port index (PA = 0, PB = 1, ..., PK = 11)
166 - line: The line offset within the port (PA0 = 0, PA1 = 1, ..., PA15 = 15)
167 - function: The function number, can be:
168 * 0 : GPIO
169 * 1 : Alternate Function 0
170 * 2 : Alternate Function 1
171 * 3 : Alternate Function 2
172 * ...
173 * 16 : Alternate Function 15
174 * 17 : Analog
175 * 18 : Reserved
176 To simplify the usage, macro is available to generate "pinmux" field.
177 This macro is available here:
178 - include/dt-bindings/pinctrl/stm32-pinfunc.h
179 Setting the pinmux's function to the Reserved (RSVD) value is used to inform
180 the driver that it shall not apply the mux setting. This can be used to
181 reserve some pins, for example to a co-processor not running Linux.
182 Some examples of using macro:
183 /* GPIO A9 set as alternate function 2 */
184 ... {
185 pinmux = <STM32_PINMUX('A', 9, AF2)>;
186 };
187 /* GPIO A9 set as GPIO */
188 ... {
189 pinmux = <STM32_PINMUX('A', 9, GPIO)>;
190 };
191 /* GPIO A9 set as analog */
192 ... {
193 pinmux = <STM32_PINMUX('A', 9, ANALOG)>;
194 };
195 /* GPIO A9 reserved for co-processor */
196 ... {
197 pinmux = <STM32_PINMUX('A', 9, RSVD)>;
198 };
199
200 bias-disable: true
201
202 bias-pull-down: true
203
204 bias-pull-up: true
205
206 drive-push-pull: true
207
208 drive-open-drain: true
209
210 output-low: true
211
212 output-high: true
213
214 slew-rate:
215 description: |
216 0: Low speed
217 1: Medium speed
218 2: Fast speed
219 3: High speed
220 minimum: 0
221 maximum: 3
222
223 skew-delay-input-ps:
224 description: |
225 IO synchronization skew rate applied to the input path
226 enum: [0, 300, 500, 750, 1000, 1250, 1500, 1750, 2000, 2250, 2500, 2750, 3000, 3250]
227
228 skew-delay-output-ps:
229 description: |
230 IO synchronization latch delay applied to the output path
231 enum: [0, 300, 500, 750, 1000, 1250, 1500, 1750, 2000, 2250, 2500, 2750, 3000, 3250]
232
233 st,io-sync:
234 $ref: /schemas/types.yaml#/definitions/string
235 enum:
236 - pass-through
237 - clock inverted
238 - data on rising edge
239 - data on falling edge
240 - data on both edges
241 description: |
242 IO synchronization through re-sampling or inversion
243 "pass-through" - data or clock GPIO pass-through
244 "clock inverted" - clock GPIO inverted
245 "data on rising edge" - data GPIO re-sampled on clock rising edge
246 "data on falling edge" - data GPIO re-sampled on clock falling edge
247 "data on both edges" - data GPIO re-sampled on both clock edges
248 default: pass-through
249
250 required:
251 - pinmux
252
253 # Not allowed both skew-delay-input-ps and skew-delay-output-ps
254 if:
255 required:
256 - skew-delay-input-ps
257 then:
258 properties:
259 skew-delay-output-ps: false
260
261allOf:
262 - $ref: pinctrl.yaml#
263
264 - if:
265 not:
266 properties:
267 compatible:
268 contains:
269 enum:
270 - st,stm32mp257-pinctrl
271 - st,stm32mp257-z-pinctrl
272 then:
273 patternProperties:
274 '-[0-9]*$':
275 patternProperties:
276 '^pins':
277 properties:
278 skew-delay-input-ps: false
279 skew-delay-output-ps: false
280 st,io-sync: false
281
282required:
283 - compatible
284 - '#address-cells'
285 - '#size-cells'
286 - ranges
287
288additionalProperties: false
289
290examples:
291 - |
292 #include <dt-bindings/pinctrl/stm32-pinfunc.h>
293 #include <dt-bindings/mfd/stm32f4-rcc.h>
294 //Example 1
295 pinctrl@40020000 {
296 #address-cells = <1>;
297 #size-cells = <1>;
298 compatible = "st,stm32f429-pinctrl";
299 ranges = <0 0x40020000 0x3000>;
300
301 gpioa: gpio@0 {
302 gpio-controller;
303 #gpio-cells = <2>;
304 reg = <0x0 0x400>;
305 resets = <&reset_ahb1 0>;
306 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOA)>;
307 st,bank-name = "GPIOA";
308 };
309 };
310
311 //Example 2 (using gpio-ranges)
312 pinctrl@50020000 {
313 #address-cells = <1>;
314 #size-cells = <1>;
315 compatible = "st,stm32f429-pinctrl";
316 ranges = <0 0x50020000 0x3000>;
317
318 gpiob: gpio@1000 {
319 gpio-controller;
320 #gpio-cells = <2>;
321 reg = <0x1000 0x400>;
322 resets = <&reset_ahb1 0>;
323 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOB)>;
324 st,bank-name = "GPIOB";
325 gpio-ranges = <&pinctrl 0 0 16>;
326 };
327
328 gpioc: gpio@2000 {
329 gpio-controller;
330 #gpio-cells = <2>;
331 reg = <0x2000 0x400>;
332 resets = <&reset_ahb1 0>;
333 clocks = <&rcc 0 STM32F4_AHB1_CLOCK(GPIOC)>;
334 st,bank-name = "GPIOC";
335 ngpios = <5>;
336 gpio-ranges = <&pinctrl 0 16 3>,
337 <&pinctrl 14 30 2>;
338 };
339 };
340
341 //Example 3 pin groups
342 pinctrl {
343 usart1_pins_a: usart1-0 {
344 pins1 {
345 pinmux = <STM32_PINMUX('A', 9, AF7)>;
346 bias-disable;
347 drive-push-pull;
348 slew-rate = <0>;
349 };
350 pins2 {
351 pinmux = <STM32_PINMUX('A', 10, AF7)>;
352 bias-disable;
353 };
354 };
355 };
356
357 usart1 {
358 pinctrl-0 = <&usart1_pins_a>;
359 pinctrl-names = "default";
360 };
361
362 - |
363 #include <dt-bindings/pinctrl/stm32-pinfunc.h>
364 //Example 4 skew-delay and st,io-sync
365 pinctrl: pinctrl@44240000 {
366 compatible = "st,stm32mp257-pinctrl";
367 #address-cells = <1>;
368 #size-cells = <1>;
369 ranges = <0 0x44240000 0xa0400>;
370
371 eth3_rgmii_pins_a: eth3-rgmii-0 {
372 pins1 {
373 pinmux = <STM32_PINMUX('A', 6, AF14)>;
374 st,io-sync = "data on both edges";
375 };
376 pins2 {
377 pinmux = <STM32_PINMUX('H', 2, AF14)>;
378 skew-delay-output-ps = <500>;
379 };
380 };
381 };
382
383...