Mention branches and keyring.
[releases.git] / bindings / pinctrl / mediatek,mt7981-pinctrl.yaml
1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/pinctrl/mediatek,mt7981-pinctrl.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: MediaTek MT7981 Pin Controller
8
9 maintainers:
10   - Daniel Golle <daniel@makrotopia.org>
11
12 description:
13   The MediaTek's MT7981 Pin controller is used to control SoC pins.
14
15 properties:
16   compatible:
17     enum:
18       - mediatek,mt7981-pinctrl
19
20   reg:
21     minItems: 9
22     maxItems: 9
23
24   reg-names:
25     items:
26       - const: gpio
27       - const: iocfg_rt
28       - const: iocfg_rm
29       - const: iocfg_rb
30       - const: iocfg_lb
31       - const: iocfg_bl
32       - const: iocfg_tm
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: GPIO valid number range.
49
50   interrupt-controller: true
51
52   interrupts:
53     maxItems: 1
54
55   "#interrupt-cells":
56     const: 2
57
58 allOf:
59   - $ref: pinctrl.yaml#
60
61 required:
62   - compatible
63   - reg
64   - reg-names
65   - gpio-controller
66   - "#gpio-cells"
67
68 patternProperties:
69   '-pins$':
70     type: object
71     additionalProperties: false
72
73     patternProperties:
74       '^.*mux.*$':
75         type: object
76         additionalProperties: false
77         description: |
78           pinmux configuration nodes.
79
80           The following table shows the effective values of "group", "function"
81           properties and chip pinout pins
82
83           groups                 function    pins (in pin#)
84           ---------------------------------------------------------------------
85           "wa_aice1"             "wa_aice"   0, 1
86           "wa_aice2"             "wa_aice"   0, 1
87           "wm_uart_0"            "uart"      0, 1
88           "dfd"                  "dfd"       0, 1, 4, 5
89           "watchdog"             "watchdog"  2
90           "pcie_pereset"         "pcie"      3
91           "jtag"                 "jtag"      4, 5, 6, 7, 8
92           "wm_jtag_0"            "jtag"      4, 5, 6, 7, 8
93           "wo0_jtag_0"           "jtag"      9, 10, 11, 12, 13
94           "uart2_0"              "uart"      4, 5, 6, 7
95           "gbe_led0"             "led"       8
96           "pta_ext_0"            "pta"       4, 5, 6
97           "pwm2"                 "pwm"       7
98           "net_wo0_uart_txd_0"   "uart"      8
99           "spi1_0"               "spi"       4, 5, 6, 7
100           "i2c0_0"               "i2c"       6, 7
101           "dfd_ntrst"            "dfd"       8
102           "wm_aice1"             "wa_aice"   9, 10
103           "pwm0_0"               "pwm"       13
104           "pwm0_1"               "pwm"       15
105           "pwm1_0"               "pwm"       14
106           "pwm1_1"               "pwm"       15
107           "net_wo0_uart_txd_1"   "uart"      14
108           "net_wo0_uart_txd_2"   "uart"      15
109           "gbe_led1"             "led"       13
110           "pcm"                  "pcm"       9, 10, 11, 12, 13, 25
111           "watchdog1"            "watchdog"  13
112           "udi"                  "udi"       9, 10, 11, 12, 13
113           "drv_vbus"             "usb"       14
114           "emmc_45"              "flash"     15, 16, 17, 18, 19, 20, 21, 22, 23,
115                                              24, 25
116
117           "snfi"                 "flash"     16, 17, 18, 19, 20, 21
118           "spi0"                 "spi"       16, 17, 18, 19
119           "spi0_wp_hold"         "spi"       20, 21
120           "spi1_1"               "spi"       22, 23, 24, 25
121           "spi2"                 "spi"       26, 27, 28, 29
122           "spi2_wp_hold"         "spi"       30, 31
123           "uart1_0"              "uart"      16, 17, 18, 19
124           "uart1_1"              "uart"      26, 27, 28, 29
125           "uart2_1"              "uart"      22, 23, 24, 25
126           "pta_ext_1"            "pta"       22, 23, 24
127           "wm_aurt_1"            "uart"      20, 21
128           "wm_aurt_2"            "uart"      30, 31
129           "wm_jtag_1"            "jtag"      20, 21, 22, 23, 24
130           "wo0_jtag_1"           "jtag"      25, 26, 27, 28, 29
131           "wa_aice3"             "wa_aice"   28, 20
132           "wm_aice2"             "wa_aice"   30, 31
133           "i2c0_1"               "i2c"       30, 31
134           "u2_phy_i2c"           "i2c"       30, 31
135           "uart0"                "uart"      32, 33
136           "sgmii1_phy_i2c"       "i2c"       32, 33
137           "u3_phy_i2c"           "i2c"       32, 33
138           "sgmii0_phy_i2c"       "i2c"       32, 33
139           "pcie_clk"             "pcie"      34
140           "pcie_wake"            "pcie"      35
141           "i2c0_2"               "i2c"       36, 37
142           "smi_mdc_mdio"         "eth"       36, 37
143           "gbe_ext_mdc_mdio"     "eth"       36, 37
144           "wf0_mode1"            "eth"       40, 41, 42, 43, 44, 45, 46, 47, 48,
145                                              49, 50, 51, 52, 53, 54, 55, 56
146
147           "wf0_mode3"            "eth"       45, 46, 47, 48, 49, 51
148           "wf2g_led0"            "led"       30
149           "wf2g_led1"            "led"       34
150           "wf5g_led0"            "led"       31
151           "wf5g_led1"            "led"       35
152           "mt7531_int"           "eth"       38
153           "ant_sel"              "ant"       14, 15, 16, 17, 18, 19, 20, 21, 22,
154                                              23, 24, 25, 34, 35
155
156         $ref: /schemas/pinctrl/pinmux-node.yaml
157         properties:
158           function:
159             description:
160               A string containing the name of the function to mux to the group.
161             enum: [wa_aice, dfd, jtag, pta, pcm, udi, usb, ant, eth, i2c, led,
162                    pwm, spi, uart, watchdog, flash, pcie]
163           groups:
164             description:
165               An array of strings. Each string contains the name of a group.
166
167         required:
168           - function
169           - groups
170
171         allOf:
172           - if:
173               properties:
174                 function:
175                   const: wa_aice
176             then:
177               properties:
178                 groups:
179                   enum: [wa_aice1, wa_aice2, wm_aice1_1, wa_aice3, wm_aice1_2]
180           - if:
181               properties:
182                 function:
183                   const: dfd
184             then:
185               properties:
186                 groups:
187                   enum: [dfd, dfd_ntrst]
188           - if:
189               properties:
190                 function:
191                   const: jtag
192             then:
193               properties:
194                 groups:
195                   enum: [jtag, wm_jtag_0, wo0_jtag_0, wo0_jtag_1, wm_jtag_1]
196           - if:
197               properties:
198                 function:
199                   const: pta
200             then:
201               properties:
202                 groups:
203                   enum: [pta_ext_0, pta_ext_1]
204           - if:
205               properties:
206                 function:
207                   const: pcm
208             then:
209               properties:
210                 groups:
211                   enum: [pcm]
212           - if:
213               properties:
214                 function:
215                   const: udi
216             then:
217               properties:
218                 groups:
219                   enum: [udi]
220           - if:
221               properties:
222                 function:
223                   const: usb
224             then:
225               properties:
226                 groups:
227                   enum: [drv_vbus]
228           - if:
229               properties:
230                 function:
231                   const: ant
232             then:
233               properties:
234                 groups:
235                   enum: [ant_sel]
236           - if:
237               properties:
238                 function:
239                   const: eth
240             then:
241               properties:
242                 groups:
243                   enum: [smi_mdc_mdio, gbe_ext_mdc_mdio, wf0_mode1, wf0_mode3,
244                          mt7531_int]
245           - if:
246               properties:
247                 function:
248                   const: i2c
249             then:
250               properties:
251                 groups:
252                   enum: [i2c0_0, i2c0_1, u2_phy_i2c, sgmii1_phy_i2c, u3_phy_i2c,
253                          sgmii0_phy_i2c, i2c0_2]
254           - if:
255               properties:
256                 function:
257                   const: led
258             then:
259               properties:
260                 groups:
261                   enum: [gbe_led0, gbe_led1, wf2g_led0, wf2g_led1, wf5g_led0,
262                          wf5g_led1]
263           - if:
264               properties:
265                 function:
266                   const: pwm
267             then:
268               properties:
269                 groups:
270                   items:
271                     enum: [pwm2, pwm0_0, pwm0_1, pwm1_0, pwm1_1]
272                   maxItems: 3
273           - if:
274               properties:
275                 function:
276                   const: spi
277             then:
278               properties:
279                 groups:
280                   items:
281                     enum: [spi1_0, spi0, spi0_wp_hold, spi1_1, spi2,
282                            spi2_wp_hold]
283                   maxItems: 4
284           - if:
285               properties:
286                 function:
287                   const: uart
288             then:
289               properties:
290                 groups:
291                   items:
292                     enum: [wm_uart_0, uart2_0, net_wo0_uart_txd_0,
293                            net_wo0_uart_txd_1, net_wo0_uart_txd_2, uart1_0,
294                            uart1_1, uart2_1, wm_aurt_1, wm_aurt_2, uart0]
295           - if:
296               properties:
297                 function:
298                   const: watchdog
299             then:
300               properties:
301                 groups:
302                   enum: [watchdog]
303           - if:
304               properties:
305                 function:
306                   const: flash
307             then:
308               properties:
309                 groups:
310                   items:
311                     enum: [emmc_45, snfi]
312                   maxItems: 1
313           - if:
314               properties:
315                 function:
316                   const: pcie
317             then:
318               properties:
319                 groups:
320                   items:
321                     enum: [pcie_clk, pcie_wake, pcie_pereset]
322                   maxItems: 3
323
324       '^.*conf.*$':
325         type: object
326         additionalProperties: false
327         description: pinconf configuration nodes.
328         $ref: /schemas/pinctrl/pincfg-node.yaml
329
330         properties:
331           pins:
332             description:
333               An array of strings. Each string contains the name of a pin.
334             items:
335               enum: [GPIO_WPS, GPIO_RESET, SYS_WATCHDOG, PCIE_PERESET_N,
336                      JTAG_JTDO, JTAG_JTDI, JTAG_JTMS, JTAG_JTCLK, JTAG_JTRST_N,
337                      WO_JTAG_JTDO, WO_JTAG_JTDI, WO_JTAG_JTMS, WO_JTAG_JTCLK,
338                      WO_JTAG_JTRST_N, USB_VBUS, PWM0, SPI0_CLK, SPI0_MOSI,
339                      SPI0_MISO, SPI0_CS, SPI0_HOLD, SPI0_WP, SPI1_CLK,
340                      SPI1_MOSI, SPI1_MISO, SPI1_CS, SPI2_CLK, SPI2_MOSI,
341                      SPI2_MISO, SPI2_CS, SPI2_HOLD, SPI2_WP, UART0_RXD,
342                      UART0_TXD, PCIE_CLK_REQ, PCIE_WAKE_N, SMI_MDC, SMI_MDIO,
343                      GBE_INT, GBE_RESET, WF_DIG_RESETB, WF_CBA_RESETB,
344                      WF_XO_REQ, WF_TOP_CLK, WF_TOP_DATA, WF_HB1, WF_HB2, WF_HB3,
345                      WF_HB4, WF_HB0, WF_HB0_B, WF_HB5, WF_HB6, WF_HB7, WF_HB8,
346                      WF_HB9, WF_HB10]
347             maxItems: 57
348
349           bias-disable: true
350
351           bias-pull-up:
352             oneOf:
353               - type: boolean
354                 description: normal pull up.
355               - enum: [100, 101, 102, 103]
356                 description:
357                   PUPD/R1/R0 pull down type. See MTK_PUPD_SET_R1R0 defines in
358                   dt-bindings/pinctrl/mt65xx.h.
359
360           bias-pull-down:
361             oneOf:
362               - type: boolean
363                 description: normal pull down.
364               - enum: [100, 101, 102, 103]
365                 description:
366                   PUPD/R1/R0 pull down type. See MTK_PUPD_SET_R1R0 defines in
367                   dt-bindings/pinctrl/mt65xx.h.
368
369           input-enable: true
370
371           input-disable: true
372
373           output-enable: true
374
375           output-low: true
376
377           output-high: true
378
379           input-schmitt-enable: true
380
381           input-schmitt-disable: true
382
383           drive-strength:
384             enum: [2, 4, 6, 8, 10, 12, 14, 16]
385
386           mediatek,pull-up-adv:
387             description: |
388               Valid arguments for 'mediatek,pull-up-adv' are '0', '1', '2', '3'
389               Pull up settings for 2 pull resistors, R0 and R1. Valid arguments
390               are described as below:
391               0: (R1, R0) = (0, 0) which means R1 disabled and R0 disabled.
392               1: (R1, R0) = (0, 1) which means R1 disabled and R0 enabled.
393               2: (R1, R0) = (1, 0) which means R1 enabled and R0 disabled.
394               3: (R1, R0) = (1, 1) which means R1 enabled and R0 enabled.
395             $ref: /schemas/types.yaml#/definitions/uint32
396             enum: [0, 1, 2, 3]
397
398           mediatek,pull-down-adv:
399             description: |
400               Valid arguments for 'mediatek,pull-up-adv' are '0', '1', '2', '3'
401               Pull down settings for 2 pull resistors, R0 and R1. Valid arguments
402               are described as below:
403               0: (R1, R0) = (0, 0) which means R1 disabled and R0 disabled.
404               1: (R1, R0) = (0, 1) which means R1 disabled and R0 enabled.
405               2: (R1, R0) = (1, 0) which means R1 enabled and R0 disabled.
406               3: (R1, R0) = (1, 1) which means R1 enabled and R0 enabled.
407             $ref: /schemas/types.yaml#/definitions/uint32
408             enum: [0, 1, 2, 3]
409
410         required:
411           - pins
412
413 additionalProperties: false
414
415 examples:
416   - |
417     #include <dt-bindings/interrupt-controller/irq.h>
418     #include <dt-bindings/interrupt-controller/arm-gic.h>
419     #include <dt-bindings/pinctrl/mt65xx.h>
420
421     soc {
422       #address-cells = <2>;
423       #size-cells = <2>;
424       pio: pinctrl@11d00000 {
425         compatible = "mediatek,mt7981-pinctrl";
426         reg = <0 0x11d00000 0 0x1000>,
427               <0 0x11c00000 0 0x1000>,
428               <0 0x11c10000 0 0x1000>,
429               <0 0x11d20000 0 0x1000>,
430               <0 0x11e00000 0 0x1000>,
431               <0 0x11e20000 0 0x1000>,
432               <0 0x11f00000 0 0x1000>,
433               <0 0x11f10000 0 0x1000>,
434               <0 0x1000b000 0 0x1000>;
435         reg-names = "gpio", "iocfg_rt", "iocfg_rm",
436                     "iocfg_rb", "iocfg_lb", "iocfg_bl",
437                     "iocfg_tm", "iocfg_tl", "eint";
438         gpio-controller;
439         #gpio-cells = <2>;
440         gpio-ranges = <&pio 0 0 56>;
441         interrupt-controller;
442         interrupts = <GIC_SPI 225 IRQ_TYPE_LEVEL_HIGH>;
443         interrupt-parent = <&gic>;
444         #interrupt-cells = <2>;
445
446         mdio_pins: mdio-pins {
447           mux {
448             function = "eth";
449             groups = "smi_mdc_mdio";
450           };
451         };
452
453         spi0_flash_pins: spi0-pins {
454           mux {
455             function = "spi";
456             groups = "spi0", "spi0_wp_hold";
457           };
458
459           conf-pu {
460             pins = "SPI0_CS", "SPI0_HOLD", "SPI0_WP";
461             drive-strength = <MTK_DRIVE_8mA>;
462             bias-pull-up = <MTK_PUPD_SET_R1R0_11>;
463           };
464
465           conf-pd {
466             pins = "SPI0_CLK", "SPI0_MOSI", "SPI0_MISO";
467             drive-strength = <MTK_DRIVE_8mA>;
468             bias-pull-down = <MTK_PUPD_SET_R1R0_11>;
469           };
470         };
471
472         pcie_pins: pcie-pins {
473           mux {
474             function = "pcie";
475             groups = "pcie_clk", "pcie_wake", "pcie_pereset";
476           };
477         };
478
479       };
480     };