blob: 5ad65135fe1c7f85c5bd43a058e505145a8d3c29 [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/pinctrl/mediatek,mt7986-pinctrl.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: MediaTek MT7986 Pin Controller
8
9maintainers:
10 - Sean Wang <sean.wang@kernel.org>
11
12description:
13 The MediaTek's MT7986 Pin controller is used to control SoC pins.
14
15properties:
16 compatible:
17 enum:
18 - mediatek,mt7986a-pinctrl
19 - mediatek,mt7986b-pinctrl
20
21 reg:
22 minItems: 8
23 maxItems: 8
24
25 reg-names:
26 items:
27 - const: gpio
28 - const: iocfg_rt
29 - const: iocfg_rb
30 - const: iocfg_lt
31 - const: iocfg_lb
32 - const: iocfg_tr
33 - const: iocfg_tl
34 - const: eint
35
36 gpio-controller: true
37
38 "#gpio-cells":
39 const: 2
40 description:
41 Number of cells in GPIO specifier. Since the generic GPIO binding is used,
42 the amount of cells must be specified as 2. See the below mentioned gpio
43 binding representation for description of particular cells.
44
45 gpio-ranges:
46 minItems: 1
47 maxItems: 5
48 description:
49 GPIO valid number range.
50
51 interrupt-controller: true
52
53 interrupts:
54 maxItems: 1
55
56 "#interrupt-cells":
57 const: 2
58
59allOf:
60 - $ref: pinctrl.yaml#
61
62required:
63 - compatible
64 - reg
65 - reg-names
66 - gpio-controller
67 - "#gpio-cells"
68
69patternProperties:
70 '-pins$':
71 type: object
72 additionalProperties: false
73
74 patternProperties:
75 '^.*mux.*$':
76 type: object
77 additionalProperties: false
78 description: |
79 pinmux configuration nodes.
80
81 The following table shows the effective values of "group", "function"
82 properties and chip pinout pins
83
84 groups function pins (in pin#)
85 ---------------------------------------------------------------------
86 "watchdog" "watchdog" 0
87 "wifi_led" "led" 1, 2
88 "i2c" "i2c" 3, 4
89 "uart1_0" "uart" 7, 8, 9, 10
90 "uart1_rx_tx" "uart" 42, 43
91 "uart1_cts_rts" "uart" 44, 45
92 "pcie_clk" "pcie" 9
93 "pcie_wake" "pcie" 10
94 "spi1_0" "spi" 11, 12, 13, 14
95 "pwm1_1" "pwm" 20,
96 "pwm0" "pwm" 21,
97 "pwm1_0" "pwm" 22,
98 "snfi" "flash" 23, 24, 25, 26, 27, 28
99 "spi1_2" "spi" 29, 30, 31, 32
100 "emmc_45" "emmc" 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
101 32
102
103 "spi1_1" "spi" 23, 24, 25, 26
104 "uart1_2_rx_tx" "uart" 29, 30
105 "uart1_2_cts_rts" "uart" 31, 32
106 "uart1_1" "uart" 23, 24, 25, 26
107 "uart2_0_rx_tx" "uart" 29, 30
108 "uart2_0_cts_rts" "uart" 31, 32
109 "spi0" "spi" 33, 34, 35, 36
110 "spi0_wp_hold" "spi" 37, 38
111 "uart1_3_rx_tx" "uart" 35, 36
112 "uart1_3_cts_rts" "uart" 37, 38
113 "uart2_1" "uart" 33, 34, 35, 36
114 "spi1_3" "spi" 33, 34, 35, 36
115 "uart0" "uart" 39, 40
116 "pcie_pereset" "pcie" 41
117 "uart1" "uart" 42, 43, 44, 45
118 "uart2" "uart" 46, 47, 48, 49
119 "emmc_51" "emmc" 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
120 60, 61
121
122 "pcm" "audio" 62, 63, 64, 65
123 "i2s" "audio" 62, 63, 64, 65
124 "switch_int" "eth" 66
125 "mdc_mdio" "eth" 67
126 "wf_2g" "wifi" 74, 75, 76, 77, 78, 79, 80, 81, 82, 83
127 "wf_5g" "wifi" 91, 92, 93, 94, 95, 96, 97, 98, 99, 100
128 "wf_dbdc" "wifi" 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
129 84, 85
130
131 $ref: /schemas/pinctrl/pinmux-node.yaml
132 properties:
133 function:
134 description:
135 A string containing the name of the function to mux to the group.
136 There is no "audio", "pcie" functions on mt7986b, you can only use
137 those functions on mt7986a.
138 enum: [audio, emmc, eth, i2c, led, flash, pcie, pwm, spi, uart,
139 watchdog, wifi]
140 groups:
141 description:
142 An array of strings. Each string contains the name of a group.
143 There is no "pcie_pereset", "uart1", "uart2" "emmc_51", "pcm", and
144 "i2s" groups on mt7986b, you can only use those groups on mt7986a.
145 required:
146 - function
147 - groups
148
149 allOf:
150 - if:
151 properties:
152 function:
153 const: audio
154 then:
155 properties:
156 groups:
157 enum: [pcm, i2s]
158 - if:
159 properties:
160 function:
161 const: emmc
162 then:
163 properties:
164 groups:
165 enum: [emmc_45, emmc_51]
166 - if:
167 properties:
168 function:
169 const: eth
170 then:
171 properties:
172 groups:
173 enum: [switch_int, mdc_mdio]
174 - if:
175 properties:
176 function:
177 const: i2c
178 then:
179 properties:
180 groups:
181 enum: [i2c]
182 - if:
183 properties:
184 function:
185 const: led
186 then:
187 properties:
188 groups:
189 enum: [wifi_led]
190 - if:
191 properties:
192 function:
193 const: flash
194 then:
195 properties:
196 groups:
197 enum: [snfi]
198 - if:
199 properties:
200 function:
201 const: pcie
202 then:
203 properties:
204 groups:
205 items:
206 enum: [pcie_clk, pcie_wake, pcie_pereset]
207 maxItems: 3
208 - if:
209 properties:
210 function:
211 const: pwm
212 then:
213 properties:
214 groups:
215 items:
216 enum: [pwm0, pwm1_0, pwm1_1]
217 maxItems: 2
218 - if:
219 properties:
220 function:
221 const: spi
222 then:
223 properties:
224 groups:
225 items:
226 enum: [spi0, spi0_wp_hold, spi1_0, spi1_1, spi1_2, spi1_3]
227 maxItems: 2
228 - if:
229 properties:
230 function:
231 const: uart
232 then:
233 properties:
234 groups:
235 items:
236 enum: [uart1_0, uart1_rx_tx, uart1_cts_rts, uart1_1,
237 uart1_2_rx_tx, uart1_2_cts_rts, uart1_3_rx_tx,
238 uart1_3_cts_rts, uart2_0_rx_tx, uart2_0_cts_rts,
239 uart2_1, uart0, uart1, uart2]
240 maxItems: 2
241 - if:
242 properties:
243 function:
244 const: watchdog
245 then:
246 properties:
247 groups:
248 enum: [watchdog]
249 - if:
250 properties:
251 function:
252 const: wifi
253 then:
254 properties:
255 groups:
256 items:
257 enum: [wf_2g, wf_5g, wf_dbdc]
258 maxItems: 3
259 '^.*conf.*$':
260 type: object
261 additionalProperties: false
262 description:
263 pinconf configuration nodes.
264 $ref: /schemas/pinctrl/pincfg-node.yaml
265
266 properties:
267 pins:
268 description:
269 An array of strings. Each string contains the name of a pin. There
270 is no PIN 41 to PIN 65 above on mt7686b, you can only use those
271 pins on mt7986a.
272 items:
273 enum: [SYS_WATCHDOG, WF2G_LED, WF5G_LED, I2C_SCL, I2C_SDA, GPIO_0,
274 GPIO_1, GPIO_2, GPIO_3, GPIO_4, GPIO_5, GPIO_6, GPIO_7,
275 GPIO_8, GPIO_9, GPIO_10, GPIO_11, GPIO_12, GPIO_13,
276 GPIO_14, GPIO_15, PWM0, PWM1, SPI0_CLK, SPI0_MOSI,
277 SPI0_MISO, SPI0_CS, SPI0_HOLD, SPI0_WP, SPI1_CLK,
278 SPI1_MOSI, SPI1_MISO, SPI1_CS, SPI2_CLK, SPI2_MOSI,
279 SPI2_MISO, SPI2_CS, SPI2_HOLD, SPI2_WP, UART0_RXD,
280 UART0_TXD, PCIE_PERESET_N, UART1_RXD, UART1_TXD, UART1_CTS,
281 UART1_RTS, UART2_RXD, UART2_TXD, UART2_CTS, UART2_RTS,
282 EMMC_DATA_0, EMMC_DATA_1, EMMC_DATA_2, EMMC_DATA_3,
283 EMMC_DATA_4, EMMC_DATA_5, EMMC_DATA_6, EMMC_DATA_7,
284 EMMC_CMD, EMMC_CK, EMMC_DSL, EMMC_RSTB, PCM_DTX, PCM_DRX,
285 PCM_CLK, PCM_FS, MT7531_INT, SMI_MDC, SMI_MDIO,
286 WF0_DIG_RESETB, WF0_CBA_RESETB, WF0_XO_REQ, WF0_TOP_CLK,
287 WF0_TOP_DATA, WF0_HB1, WF0_HB2, WF0_HB3, WF0_HB4, WF0_HB0,
288 WF0_HB0_B, WF0_HB5, WF0_HB6, WF0_HB7, WF0_HB8, WF0_HB9,
289 WF0_HB10, WF1_DIG_RESETB, WF1_CBA_RESETB, WF1_XO_REQ,
290 WF1_TOP_CLK, WF1_TOP_DATA, WF1_HB1, WF1_HB2, WF1_HB3,
291 WF1_HB4, WF1_HB0, WF1_HB0_B, WF1_HB5, WF1_HB6, WF1_HB7,
292 WF1_HB8]
293 maxItems: 101
294
295 bias-disable: true
296
297 bias-pull-up:
298 oneOf:
299 - type: boolean
300 description: normal pull up.
301 - enum: [100, 101, 102, 103]
302 description:
303 PUPD/R1/R0 pull down type. See MTK_PUPD_SET_R1R0 defines in
304 dt-bindings/pinctrl/mt65xx.h.
305
306 bias-pull-down:
307 oneOf:
308 - type: boolean
309 description: normal pull down.
310 - enum: [100, 101, 102, 103]
311 description:
312 PUPD/R1/R0 pull down type. See MTK_PUPD_SET_R1R0 defines in
313 dt-bindings/pinctrl/mt65xx.h.
314
315 input-enable: true
316
317 input-disable: true
318
319 output-enable: true
320
321 output-low: true
322
323 output-high: true
324
325 input-schmitt-enable: true
326
327 input-schmitt-disable: true
328
329 drive-strength:
330 enum: [2, 4, 6, 8, 10, 12, 14, 16]
331
332 mediatek,pull-up-adv:
333 description: |
334 Valid arguments for 'mediatek,pull-up-adv' are '0', '1', '2', '3'
335 Pull up settings for 2 pull resistors, R0 and R1. Valid arguments
336 are described as below:
337 0: (R1, R0) = (0, 0) which means R1 disabled and R0 disabled.
338 1: (R1, R0) = (0, 1) which means R1 disabled and R0 enabled.
339 2: (R1, R0) = (1, 0) which means R1 enabled and R0 disabled.
340 3: (R1, R0) = (1, 1) which means R1 enabled and R0 enabled.
341 $ref: /schemas/types.yaml#/definitions/uint32
342 enum: [0, 1, 2, 3]
343
344 mediatek,pull-down-adv:
345 description: |
346 Valid arguments for 'mediatek,pull-up-adv' are '0', '1', '2', '3'
347 Pull down settings for 2 pull resistors, R0 and R1. Valid arguments
348 are described as below:
349 0: (R1, R0) = (0, 0) which means R1 disabled and R0 disabled.
350 1: (R1, R0) = (0, 1) which means R1 disabled and R0 enabled.
351 2: (R1, R0) = (1, 0) which means R1 enabled and R0 disabled.
352 3: (R1, R0) = (1, 1) which means R1 enabled and R0 enabled.
353 $ref: /schemas/types.yaml#/definitions/uint32
354 enum: [0, 1, 2, 3]
355
356 required:
357 - pins
358
359additionalProperties: false
360
361examples:
362 - |
363 #include <dt-bindings/interrupt-controller/irq.h>
364 #include <dt-bindings/interrupt-controller/arm-gic.h>
365 #include <dt-bindings/pinctrl/mt65xx.h>
366
367 soc {
368 #address-cells = <2>;
369 #size-cells = <2>;
370 pio: pinctrl@1001f000 {
371 compatible = "mediatek,mt7986a-pinctrl";
372 reg = <0 0x1001f000 0 0x1000>,
373 <0 0x11c30000 0 0x1000>,
374 <0 0x11c40000 0 0x1000>,
375 <0 0x11e20000 0 0x1000>,
376 <0 0x11e30000 0 0x1000>,
377 <0 0x11f00000 0 0x1000>,
378 <0 0x11f10000 0 0x1000>,
379 <0 0x1000b000 0 0x1000>;
380 reg-names = "gpio", "iocfg_rt", "iocfg_rb", "iocfg_lt",
381 "iocfg_lb", "iocfg_tr", "iocfg_tl", "eint";
382 gpio-controller;
383 #gpio-cells = <2>;
384 gpio-ranges = <&pio 0 0 100>;
385 interrupt-controller;
386 interrupts = <GIC_SPI 225 IRQ_TYPE_LEVEL_HIGH>;
387 interrupt-parent = <&gic>;
388 #interrupt-cells = <2>;
389
390 pcie_pins: pcie-pins {
391 mux {
392 function = "pcie";
393 groups = "pcie_clk", "pcie_wake", "pcie_pereset";
394 };
395 };
396
397 pwm_pins: pwm-pins {
398 mux {
399 function = "pwm";
400 groups = "pwm0", "pwm1_0";
401 };
402 };
403
404 spi0_pins: spi0-pins {
405 mux {
406 function = "spi";
407 groups = "spi0", "spi0_wp_hold";
408 };
409 };
410
411 uart1_pins: uart1-pins {
412 mux {
413 function = "uart";
414 groups = "uart1";
415 };
416 };
417
418 uart1_3_pins: uart1-3-pins {
419 mux {
420 function = "uart";
421 groups = "uart1_3_rx_tx", "uart1_3_cts_rts";
422 };
423 };
424
425 uart2_pins: uart2-pins {
426 mux {
427 function = "uart";
428 groups = "uart2";
429 };
430 };
431
432 mmc0_pins_default: mmc0-pins {
433 mux {
434 function = "emmc";
435 groups = "emmc_51";
436 };
437 conf-cmd-dat {
438 pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2",
439 "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5",
440 "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD";
441 input-enable;
442 drive-strength = <4>;
443 bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
444 };
445 conf-clk {
446 pins = "EMMC_CK";
447 drive-strength = <6>;
448 bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
449 };
450 conf-ds {
451 pins = "EMMC_DSL";
452 bias-pull-down = <MTK_PUPD_SET_R1R0_10>; /* pull-down 50K */
453 };
454 conf-rst {
455 pins = "EMMC_RSTB";
456 drive-strength = <4>;
457 bias-pull-up = <MTK_PUPD_SET_R1R0_01>; /* pull-up 10K */
458 };
459 };
460
461 };
462 };