xref: /freebsd/sys/contrib/device-tree/Bindings/pinctrl/mediatek,mt7988-pinctrl.yaml (revision 2846c90520eb4cc74e24d586a0ea0f4a0006bc73)
1*2846c905SEmmanuel Vadot# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2*2846c905SEmmanuel Vadot%YAML 1.2
3*2846c905SEmmanuel Vadot---
4*2846c905SEmmanuel Vadot$id: http://devicetree.org/schemas/pinctrl/mediatek,mt7988-pinctrl.yaml#
5*2846c905SEmmanuel Vadot$schema: http://devicetree.org/meta-schemas/core.yaml#
6*2846c905SEmmanuel Vadot
7*2846c905SEmmanuel Vadottitle: MediaTek MT7988 Pin Controller
8*2846c905SEmmanuel Vadot
9*2846c905SEmmanuel Vadotmaintainers:
10*2846c905SEmmanuel Vadot  - Sean Wang <sean.wang@kernel.org>
11*2846c905SEmmanuel Vadot
12*2846c905SEmmanuel Vadotdescription:
13*2846c905SEmmanuel Vadot  The MediaTek's MT7988 Pin controller is used to control SoC pins.
14*2846c905SEmmanuel Vadot
15*2846c905SEmmanuel Vadotproperties:
16*2846c905SEmmanuel Vadot  compatible:
17*2846c905SEmmanuel Vadot    enum:
18*2846c905SEmmanuel Vadot      - mediatek,mt7988-pinctrl
19*2846c905SEmmanuel Vadot
20*2846c905SEmmanuel Vadot  reg:
21*2846c905SEmmanuel Vadot    minItems: 7
22*2846c905SEmmanuel Vadot    maxItems: 7
23*2846c905SEmmanuel Vadot
24*2846c905SEmmanuel Vadot  reg-names:
25*2846c905SEmmanuel Vadot    items:
26*2846c905SEmmanuel Vadot      - const: gpio
27*2846c905SEmmanuel Vadot      - const: iocfg_tr
28*2846c905SEmmanuel Vadot      - const: iocfg_br
29*2846c905SEmmanuel Vadot      - const: iocfg_rb
30*2846c905SEmmanuel Vadot      - const: iocfg_lb
31*2846c905SEmmanuel Vadot      - const: iocfg_tl
32*2846c905SEmmanuel Vadot      - const: eint
33*2846c905SEmmanuel Vadot
34*2846c905SEmmanuel Vadot  gpio-controller: true
35*2846c905SEmmanuel Vadot
36*2846c905SEmmanuel Vadot  "#gpio-cells":
37*2846c905SEmmanuel Vadot    const: 2
38*2846c905SEmmanuel Vadot
39*2846c905SEmmanuel Vadot  gpio-ranges:
40*2846c905SEmmanuel Vadot    minItems: 1
41*2846c905SEmmanuel Vadot    maxItems: 5
42*2846c905SEmmanuel Vadot    description:
43*2846c905SEmmanuel Vadot      GPIO valid number range.
44*2846c905SEmmanuel Vadot
45*2846c905SEmmanuel Vadot  interrupt-controller: true
46*2846c905SEmmanuel Vadot
47*2846c905SEmmanuel Vadot  interrupts:
48*2846c905SEmmanuel Vadot    maxItems: 1
49*2846c905SEmmanuel Vadot
50*2846c905SEmmanuel Vadot  "#interrupt-cells":
51*2846c905SEmmanuel Vadot    const: 2
52*2846c905SEmmanuel Vadot
53*2846c905SEmmanuel VadotallOf:
54*2846c905SEmmanuel Vadot  - $ref: pinctrl.yaml#
55*2846c905SEmmanuel Vadot
56*2846c905SEmmanuel Vadotrequired:
57*2846c905SEmmanuel Vadot  - compatible
58*2846c905SEmmanuel Vadot  - reg
59*2846c905SEmmanuel Vadot  - reg-names
60*2846c905SEmmanuel Vadot  - gpio-controller
61*2846c905SEmmanuel Vadot  - "#gpio-cells"
62*2846c905SEmmanuel Vadot
63*2846c905SEmmanuel VadotpatternProperties:
64*2846c905SEmmanuel Vadot  '-pins$':
65*2846c905SEmmanuel Vadot    type: object
66*2846c905SEmmanuel Vadot    additionalProperties: false
67*2846c905SEmmanuel Vadot
68*2846c905SEmmanuel Vadot    properties:
69*2846c905SEmmanuel Vadot      mux:
70*2846c905SEmmanuel Vadot        type: object
71*2846c905SEmmanuel Vadot        additionalProperties: false
72*2846c905SEmmanuel Vadot        $ref: /schemas/pinctrl/pinmux-node.yaml
73*2846c905SEmmanuel Vadot        description: |
74*2846c905SEmmanuel Vadot          pinmux configuration nodes.
75*2846c905SEmmanuel Vadot
76*2846c905SEmmanuel Vadot          The following table shows the effective values of "group", "function"
77*2846c905SEmmanuel Vadot          properties and chip pinout pins
78*2846c905SEmmanuel Vadot
79*2846c905SEmmanuel Vadot          groups               function           pins (in pin#)
80*2846c905SEmmanuel Vadot          ---------------------------------------------------------------------
81*2846c905SEmmanuel Vadot          "tops_jtag0_0"       "jtag"             0, 1, 2, 3, 4
82*2846c905SEmmanuel Vadot          "wo0_jtag"           "jtag"             50, 51, 52, 53, 54
83*2846c905SEmmanuel Vadot          "wo1_jtag"           "jtag"             50, 51, 52, 53, 54
84*2846c905SEmmanuel Vadot          "wo2_jtag"           "jtag"             50, 51, 52, 53, 54
85*2846c905SEmmanuel Vadot          "jtag"               "jtag"             58, 59, 60, 61, 62
86*2846c905SEmmanuel Vadot          "tops_jtag0_1"       "jtag"             58, 59, 60, 61, 62
87*2846c905SEmmanuel Vadot          "int_usxgmii"        "int_usxgmii"      2, 3
88*2846c905SEmmanuel Vadot          "pwm0"               "pwm"              57
89*2846c905SEmmanuel Vadot          "pwm1"               "pwm"              21
90*2846c905SEmmanuel Vadot          "pwm2"               "pwm"              80
91*2846c905SEmmanuel Vadot          "pwm2_0"             "pwm"              58
92*2846c905SEmmanuel Vadot          "pwm3"               "pwm"              81
93*2846c905SEmmanuel Vadot          "pwm3_0"             "pwm"              59
94*2846c905SEmmanuel Vadot          "pwm4"               "pwm"              82
95*2846c905SEmmanuel Vadot          "pwm4_0"             "pwm"              60
96*2846c905SEmmanuel Vadot          "pwm5"               "pwm"              83
97*2846c905SEmmanuel Vadot          "pwm5_0"             "pwm"              61
98*2846c905SEmmanuel Vadot          "pwm6"               "pwm"              69
99*2846c905SEmmanuel Vadot          "pwm6_0"             "pwm"              62
100*2846c905SEmmanuel Vadot          "pwm7"               "pwm"              70
101*2846c905SEmmanuel Vadot          "pwm7_0"             "pwm"              4
102*2846c905SEmmanuel Vadot          "dfd"                "dfd"              0, 1, 2, 3, 4
103*2846c905SEmmanuel Vadot          "xfi_phy0_i2c0"      "i2c"              0, 1
104*2846c905SEmmanuel Vadot          "xfi_phy1_i2c0"      "i2c"              0, 1
105*2846c905SEmmanuel Vadot          "xfi_phy_pll_i2c0"   "i2c"              3, 4
106*2846c905SEmmanuel Vadot          "xfi_phy_pll_i2c1"   "i2c"              3, 4
107*2846c905SEmmanuel Vadot          "i2c0_0"             "i2c"              5, 6
108*2846c905SEmmanuel Vadot          "i2c1_sfp"           "i2c"              5, 6
109*2846c905SEmmanuel Vadot          "xfi_pextp_phy0_i2c" "i2c"              5, 6
110*2846c905SEmmanuel Vadot          "xfi_pextp_phy1_i2c" "i2c"              5, 6
111*2846c905SEmmanuel Vadot          "i2c0_1"             "i2c"              15, 16
112*2846c905SEmmanuel Vadot          "u30_phy_i2c0"       "i2c"              15, 16
113*2846c905SEmmanuel Vadot          "u32_phy_i2c0"       "i2c"              15, 16
114*2846c905SEmmanuel Vadot          "xfi_phy0_i2c1"      "i2c"              15, 16
115*2846c905SEmmanuel Vadot          "xfi_phy1_i2c1"      "i2c"              15, 16
116*2846c905SEmmanuel Vadot          "xfi_phy_pll_i2c2"   "i2c"              15, 16
117*2846c905SEmmanuel Vadot          "i2c1_0"             "i2c"              17, 18
118*2846c905SEmmanuel Vadot          "u30_phy_i2c1"       "i2c"              17, 18
119*2846c905SEmmanuel Vadot          "u32_phy_i2c1"       "i2c"              17, 18
120*2846c905SEmmanuel Vadot          "xfi_phy_pll_i2c3"   "i2c"              17, 18
121*2846c905SEmmanuel Vadot          "sgmii0_i2c"         "i2c"              17, 18
122*2846c905SEmmanuel Vadot          "sgmii1_i2c"         "i2c"              17, 18
123*2846c905SEmmanuel Vadot          "i2c1_2"             "i2c"              69, 70
124*2846c905SEmmanuel Vadot          "i2c2_0"             "i2c"              69, 70
125*2846c905SEmmanuel Vadot          "i2c2_1"             "i2c"              71, 72
126*2846c905SEmmanuel Vadot          "mdc_mdio0"          "eth"              5, 6
127*2846c905SEmmanuel Vadot          "2p5g_ext_mdio"      "eth"              28, 29
128*2846c905SEmmanuel Vadot          "gbe_ext_mdio"       "eth"              30, 31
129*2846c905SEmmanuel Vadot          "mdc_mdio1"          "eth"              69, 70
130*2846c905SEmmanuel Vadot          "pcie_wake_n0_0"     "pcie"             7
131*2846c905SEmmanuel Vadot          "pcie_clk_req_n0_0"  "pcie"             8
132*2846c905SEmmanuel Vadot          "pcie_wake_n3_0"     "pcie"             9
133*2846c905SEmmanuel Vadot          "pcie_clk_req_n3"    "pcie"             10
134*2846c905SEmmanuel Vadot          "pcie_clk_req_n0_1"  "pcie"             10
135*2846c905SEmmanuel Vadot          "pcie_p0_phy_i2c"    "pcie"             7, 8
136*2846c905SEmmanuel Vadot          "pcie_p1_phy_i2c"    "pcie"             7, 8
137*2846c905SEmmanuel Vadot          "pcie_p3_phy_i2c"    "pcie"             9, 10
138*2846c905SEmmanuel Vadot          "pcie_p2_phy_i2c"    "pcie"             7, 8
139*2846c905SEmmanuel Vadot          "ckm_phy_i2c"        "pcie"             9, 10
140*2846c905SEmmanuel Vadot          "pcie_wake_n0_1"     "pcie"             13
141*2846c905SEmmanuel Vadot          "pcie_wake_n3_1"     "pcie"             14
142*2846c905SEmmanuel Vadot          "pcie_2l_0_pereset"  "pcie"             19
143*2846c905SEmmanuel Vadot          "pcie_1l_1_pereset"  "pcie"             20
144*2846c905SEmmanuel Vadot          "pcie_clk_req_n2_1"  "pcie"             63
145*2846c905SEmmanuel Vadot          "pcie_2l_1_pereset"  "pcie"             73
146*2846c905SEmmanuel Vadot          "pcie_1l_0_pereset"  "pcie"             74
147*2846c905SEmmanuel Vadot          "pcie_wake_n1_0"     "pcie"             75
148*2846c905SEmmanuel Vadot          "pcie_clk_req_n1"    "pcie"             76
149*2846c905SEmmanuel Vadot          "pcie_wake_n2_0"     "pcie"             77
150*2846c905SEmmanuel Vadot          "pcie_clk_req_n2_0"  "pcie"             78
151*2846c905SEmmanuel Vadot          "pcie_wake_n2_1"     "pcie"             79
152*2846c905SEmmanuel Vadot          "pmic"               "pmic"             11
153*2846c905SEmmanuel Vadot          "watchdog"           "watchdog"         12
154*2846c905SEmmanuel Vadot          "spi0_wp_hold"       "spi"              22, 23
155*2846c905SEmmanuel Vadot          "spi0"               "spi"              24, 25, 26, 27
156*2846c905SEmmanuel Vadot          "spi1"               "spi"              28, 29, 30, 31
157*2846c905SEmmanuel Vadot          "spi2"               "spi"              32, 33, 34, 35
158*2846c905SEmmanuel Vadot          "spi2_wp_hold"       "spi"              36, 37
159*2846c905SEmmanuel Vadot          "snfi"               "flash"            22, 23, 24, 25, 26, 27
160*2846c905SEmmanuel Vadot          "emmc_45"            "flash"            21, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37
161*2846c905SEmmanuel Vadot          "sdcard"             "flash"            32, 33, 34, 35, 36, 37
162*2846c905SEmmanuel Vadot          "emmc_51"            "flash"            38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49
163*2846c905SEmmanuel Vadot          "uart2"              "uart"             0, 1, 2, 3
164*2846c905SEmmanuel Vadot          "tops_uart0_0"       "uart"             22, 23
165*2846c905SEmmanuel Vadot          "uart2_0"            "uart"             28, 29, 30, 31
166*2846c905SEmmanuel Vadot          "uart1_0"            "uart"             32, 33, 34, 35
167*2846c905SEmmanuel Vadot          "uart2_1"            "uart"             32, 33, 34, 35
168*2846c905SEmmanuel Vadot          "net_wo0_uart_txd_0" "uart"             28
169*2846c905SEmmanuel Vadot          "net_wo1_uart_txd_0" "uart"             29
170*2846c905SEmmanuel Vadot          "net_wo2_uart_txd_0" "uart"             30
171*2846c905SEmmanuel Vadot          "tops_uart1_0"       "uart"             28, 29
172*2846c905SEmmanuel Vadot          "tops_uart0_1"       "uart"             30, 31
173*2846c905SEmmanuel Vadot          "tops_uart1_1"       "uart"             36, 37
174*2846c905SEmmanuel Vadot          "uart0"              "uart"             55, 56
175*2846c905SEmmanuel Vadot          "tops_uart0_2"       "uart"             55, 56
176*2846c905SEmmanuel Vadot          "uart2_2"            "uart"             50, 51, 52, 53
177*2846c905SEmmanuel Vadot          "uart1_1"            "uart"             58, 59, 60, 61
178*2846c905SEmmanuel Vadot          "uart2_3"            "uart"             58, 59, 60, 61
179*2846c905SEmmanuel Vadot          "uart1_2"            "uart"             80, 81, 82, 83
180*2846c905SEmmanuel Vadot          "uart1_2_lite"       "uart"             80, 81
181*2846c905SEmmanuel Vadot          "tops_uart1_2"       "uart"             80, 81
182*2846c905SEmmanuel Vadot          "net_wo0_uart_txd_1" "uart"             80
183*2846c905SEmmanuel Vadot          "net_wo1_uart_txd_1" "uart"             81
184*2846c905SEmmanuel Vadot          "net_wo2_uart_txd_1" "uart"             82
185*2846c905SEmmanuel Vadot          "udi"                "udi"              32, 33, 34, 35, 36
186*2846c905SEmmanuel Vadot          "i2s"                "audio"            50, 51, 52, 53, 54
187*2846c905SEmmanuel Vadot          "pcm"                "audio"            50, 51, 52, 53
188*2846c905SEmmanuel Vadot          "gbe0_led1"          "led"              58
189*2846c905SEmmanuel Vadot          "gbe1_led1"          "led"              59
190*2846c905SEmmanuel Vadot          "gbe2_led1"          "led"              60
191*2846c905SEmmanuel Vadot          "gbe3_led1"          "led"              61
192*2846c905SEmmanuel Vadot          "2p5gbe_led1"        "led"              62
193*2846c905SEmmanuel Vadot          "gbe0_led0"          "led"              64
194*2846c905SEmmanuel Vadot          "gbe1_led0"          "led"              65
195*2846c905SEmmanuel Vadot          "gbe2_led0"          "led"              66
196*2846c905SEmmanuel Vadot          "gbe3_led0"          "led"              67
197*2846c905SEmmanuel Vadot          "2p5gbe_led0"        "led"              68
198*2846c905SEmmanuel Vadot          "drv_vbus_p1"        "usb"              63
199*2846c905SEmmanuel Vadot          "drv_vbus"           "usb"              79
200*2846c905SEmmanuel Vadot
201*2846c905SEmmanuel Vadot        properties:
202*2846c905SEmmanuel Vadot          function:
203*2846c905SEmmanuel Vadot            description:
204*2846c905SEmmanuel Vadot              A string containing the name of the function to mux to the group.
205*2846c905SEmmanuel Vadot            enum: [audio, dfd, eth, flash, i2c, int_usxgmii, jtag, led, pcie, pmic, pwm, spi,
206*2846c905SEmmanuel Vadot                   uart, udi, usb, watchdog]
207*2846c905SEmmanuel Vadot          groups:
208*2846c905SEmmanuel Vadot            description:
209*2846c905SEmmanuel Vadot              An array of strings. Each string contains the name of a group.
210*2846c905SEmmanuel Vadot
211*2846c905SEmmanuel Vadot        required:
212*2846c905SEmmanuel Vadot          - function
213*2846c905SEmmanuel Vadot          - groups
214*2846c905SEmmanuel Vadot
215*2846c905SEmmanuel Vadot        allOf:
216*2846c905SEmmanuel Vadot          - if:
217*2846c905SEmmanuel Vadot              properties:
218*2846c905SEmmanuel Vadot                function:
219*2846c905SEmmanuel Vadot                  const: audio
220*2846c905SEmmanuel Vadot            then:
221*2846c905SEmmanuel Vadot              properties:
222*2846c905SEmmanuel Vadot                groups:
223*2846c905SEmmanuel Vadot                  enum: [i2s, pcm]
224*2846c905SEmmanuel Vadot          - if:
225*2846c905SEmmanuel Vadot              properties:
226*2846c905SEmmanuel Vadot                function:
227*2846c905SEmmanuel Vadot                  const: jtag
228*2846c905SEmmanuel Vadot            then:
229*2846c905SEmmanuel Vadot              properties:
230*2846c905SEmmanuel Vadot                groups:
231*2846c905SEmmanuel Vadot                  enum: [jtag, tops_jtag0_0, tops_jtag0_1, wo0_jtag, wo1_jtag, wo2_jtag]
232*2846c905SEmmanuel Vadot          - if:
233*2846c905SEmmanuel Vadot              properties:
234*2846c905SEmmanuel Vadot                function:
235*2846c905SEmmanuel Vadot                  const: int_usxgmii
236*2846c905SEmmanuel Vadot            then:
237*2846c905SEmmanuel Vadot              properties:
238*2846c905SEmmanuel Vadot                groups:
239*2846c905SEmmanuel Vadot                  const: int_usxgmii
240*2846c905SEmmanuel Vadot          - if:
241*2846c905SEmmanuel Vadot              properties:
242*2846c905SEmmanuel Vadot                function:
243*2846c905SEmmanuel Vadot                  const: dfd
244*2846c905SEmmanuel Vadot            then:
245*2846c905SEmmanuel Vadot              properties:
246*2846c905SEmmanuel Vadot                groups:
247*2846c905SEmmanuel Vadot                  const: dfd
248*2846c905SEmmanuel Vadot          - if:
249*2846c905SEmmanuel Vadot              properties:
250*2846c905SEmmanuel Vadot                function:
251*2846c905SEmmanuel Vadot                  const: flash
252*2846c905SEmmanuel Vadot            then:
253*2846c905SEmmanuel Vadot              properties:
254*2846c905SEmmanuel Vadot                groups:
255*2846c905SEmmanuel Vadot                  enum: [emmc_45, emmc_51, sdcard, snfi]
256*2846c905SEmmanuel Vadot          - if:
257*2846c905SEmmanuel Vadot              properties:
258*2846c905SEmmanuel Vadot                function:
259*2846c905SEmmanuel Vadot                  const: eth
260*2846c905SEmmanuel Vadot            then:
261*2846c905SEmmanuel Vadot              properties:
262*2846c905SEmmanuel Vadot                groups:
263*2846c905SEmmanuel Vadot                  enum: [2p5g_ext_mdio, gbe_ext_mdio, mdc_mdio0, mdc_mdio1]
264*2846c905SEmmanuel Vadot          - if:
265*2846c905SEmmanuel Vadot              properties:
266*2846c905SEmmanuel Vadot                function:
267*2846c905SEmmanuel Vadot                  const: i2c
268*2846c905SEmmanuel Vadot            then:
269*2846c905SEmmanuel Vadot              properties:
270*2846c905SEmmanuel Vadot                groups:
271*2846c905SEmmanuel Vadot                  enum: [xfi_phy0_i2c0, xfi_phy1_i2c0, xfi_phy_pll_i2c0,
272*2846c905SEmmanuel Vadot                         xfi_phy_pll_i2c1, i2c0_0, i2c1_sfp, xfi_pextp_phy0_i2c,
273*2846c905SEmmanuel Vadot                         xfi_pextp_phy1_i2c, i2c0_1, u30_phy_i2c0, u32_phy_i2c0,
274*2846c905SEmmanuel Vadot                         xfi_phy0_i2c1, xfi_phy1_i2c1, xfi_phy_pll_i2c2, i2c1_0,
275*2846c905SEmmanuel Vadot                         u30_phy_i2c1, u32_phy_i2c1, xfi_phy_pll_i2c3, sgmii0_i2c,
276*2846c905SEmmanuel Vadot                         sgmii1_i2c, i2c1_2, i2c2_0, i2c2_1]
277*2846c905SEmmanuel Vadot          - if:
278*2846c905SEmmanuel Vadot              properties:
279*2846c905SEmmanuel Vadot                function:
280*2846c905SEmmanuel Vadot                  const: led
281*2846c905SEmmanuel Vadot            then:
282*2846c905SEmmanuel Vadot              properties:
283*2846c905SEmmanuel Vadot                groups:
284*2846c905SEmmanuel Vadot                  enum: [2p5gbe_led0, 2p5gbe_led1, gbe0_led0, gbe0_led1, gbe1_led0, gbe1_led1,
285*2846c905SEmmanuel Vadot                         gbe2_led0, gbe2_led1, gbe3_led0, gbe3_led1, wf5g_led0, wf5g_led1]
286*2846c905SEmmanuel Vadot          - if:
287*2846c905SEmmanuel Vadot              properties:
288*2846c905SEmmanuel Vadot                function:
289*2846c905SEmmanuel Vadot                  const: pcie
290*2846c905SEmmanuel Vadot            then:
291*2846c905SEmmanuel Vadot              properties:
292*2846c905SEmmanuel Vadot                groups:
293*2846c905SEmmanuel Vadot                  items:
294*2846c905SEmmanuel Vadot                    enum: [pcie_wake_n0_0, pcie_clk_req_n0_0, pcie_wake_n3_0,
295*2846c905SEmmanuel Vadot                           pcie_clk_req_n3, pcie_p0_phy_i2c, pcie_p1_phy_i2c,
296*2846c905SEmmanuel Vadot                           pcie_p3_phy_i2c, pcie_p2_phy_i2c, ckm_phy_i2c,
297*2846c905SEmmanuel Vadot                           pcie_wake_n0_1, pcie_wake_n3_1, pcie_2l_0_pereset,
298*2846c905SEmmanuel Vadot                           pcie_1l_1_pereset, pcie_clk_req_n2_1, pcie_2l_1_pereset,
299*2846c905SEmmanuel Vadot                           pcie_1l_0_pereset, pcie_wake_n1_0, pcie_clk_req_n1,
300*2846c905SEmmanuel Vadot                           pcie_wake_n2_0, pcie_clk_req_n2_0, pcie_wake_n2_1,
301*2846c905SEmmanuel Vadot                           pcie_clk_req_n0_1]
302*2846c905SEmmanuel Vadot                  maxItems: 3
303*2846c905SEmmanuel Vadot          - if:
304*2846c905SEmmanuel Vadot              properties:
305*2846c905SEmmanuel Vadot                function:
306*2846c905SEmmanuel Vadot                  const: pmic
307*2846c905SEmmanuel Vadot            then:
308*2846c905SEmmanuel Vadot              properties:
309*2846c905SEmmanuel Vadot                groups:
310*2846c905SEmmanuel Vadot                  const: pmic
311*2846c905SEmmanuel Vadot          - if:
312*2846c905SEmmanuel Vadot              properties:
313*2846c905SEmmanuel Vadot                function:
314*2846c905SEmmanuel Vadot                  const: pwm
315*2846c905SEmmanuel Vadot            then:
316*2846c905SEmmanuel Vadot              properties:
317*2846c905SEmmanuel Vadot                groups:
318*2846c905SEmmanuel Vadot                  items:
319*2846c905SEmmanuel Vadot                    enum: [pwm0, pwm1, pwm2, pwm2_0, pwm3, pwm3_0, pwm4, pwm4_0, pwm5, pwm5_0,
320*2846c905SEmmanuel Vadot                           pwm6, pwm6_0, pwm7, pwm7_0]
321*2846c905SEmmanuel Vadot                  maxItems: 2
322*2846c905SEmmanuel Vadot          - if:
323*2846c905SEmmanuel Vadot              properties:
324*2846c905SEmmanuel Vadot                function:
325*2846c905SEmmanuel Vadot                  const: spi
326*2846c905SEmmanuel Vadot            then:
327*2846c905SEmmanuel Vadot              properties:
328*2846c905SEmmanuel Vadot                groups:
329*2846c905SEmmanuel Vadot                  items:
330*2846c905SEmmanuel Vadot                    enum: [spi0, spi0_wp_hold, spi1, spi2, spi2_wp_hold]
331*2846c905SEmmanuel Vadot                  maxItems: 2
332*2846c905SEmmanuel Vadot          - if:
333*2846c905SEmmanuel Vadot              properties:
334*2846c905SEmmanuel Vadot                function:
335*2846c905SEmmanuel Vadot                  const: uart
336*2846c905SEmmanuel Vadot            then:
337*2846c905SEmmanuel Vadot              properties:
338*2846c905SEmmanuel Vadot                groups:
339*2846c905SEmmanuel Vadot                  items:
340*2846c905SEmmanuel Vadot                    enum: [net_wo0_uart_txd_0, net_wo0_uart_txd_1, net_wo1_uart_txd_0,
341*2846c905SEmmanuel Vadot                           net_wo1_uart_txd_1, net_wo2_uart_txd_0, net_wo2_uart_txd_1,
342*2846c905SEmmanuel Vadot                           tops_uart0_0, tops_uart0_1, tops_uart0_2, tops_uart1_0,
343*2846c905SEmmanuel Vadot                           tops_uart1_1, tops_uart1_2, uart0, uart1_0, uart1_1, uart1_2,
344*2846c905SEmmanuel Vadot                           uart1_2_lite, uart2, uart2_0, uart2_1, uart2_3]
345*2846c905SEmmanuel Vadot                  maxItems: 2
346*2846c905SEmmanuel Vadot          - if:
347*2846c905SEmmanuel Vadot              properties:
348*2846c905SEmmanuel Vadot                function:
349*2846c905SEmmanuel Vadot                  const: watchdog
350*2846c905SEmmanuel Vadot            then:
351*2846c905SEmmanuel Vadot              properties:
352*2846c905SEmmanuel Vadot                groups:
353*2846c905SEmmanuel Vadot                  const: watchdog
354*2846c905SEmmanuel Vadot          - if:
355*2846c905SEmmanuel Vadot              properties:
356*2846c905SEmmanuel Vadot                function:
357*2846c905SEmmanuel Vadot                  const: udi
358*2846c905SEmmanuel Vadot            then:
359*2846c905SEmmanuel Vadot              properties:
360*2846c905SEmmanuel Vadot                groups:
361*2846c905SEmmanuel Vadot                  const: udi
362*2846c905SEmmanuel Vadot          - if:
363*2846c905SEmmanuel Vadot              properties:
364*2846c905SEmmanuel Vadot                function:
365*2846c905SEmmanuel Vadot                  const: usb
366*2846c905SEmmanuel Vadot            then:
367*2846c905SEmmanuel Vadot              properties:
368*2846c905SEmmanuel Vadot                groups:
369*2846c905SEmmanuel Vadot                  items:
370*2846c905SEmmanuel Vadot                    enum: [drv_vbus, drv_vbus_p1]
371*2846c905SEmmanuel Vadot                  maxItems: 1
372*2846c905SEmmanuel Vadot
373*2846c905SEmmanuel Vadot    patternProperties:
374*2846c905SEmmanuel Vadot      '^conf(-[-a-z]*)?$':
375*2846c905SEmmanuel Vadot        type: object
376*2846c905SEmmanuel Vadot        additionalProperties: false
377*2846c905SEmmanuel Vadot        description:
378*2846c905SEmmanuel Vadot          pinconf configuration nodes.
379*2846c905SEmmanuel Vadot        $ref: /schemas/pinctrl/pincfg-node.yaml
380*2846c905SEmmanuel Vadot
381*2846c905SEmmanuel Vadot        properties:
382*2846c905SEmmanuel Vadot          pins:
383*2846c905SEmmanuel Vadot            description:
384*2846c905SEmmanuel Vadot              An array of strings. Each string contains the name of a pin.
385*2846c905SEmmanuel Vadot            items:
386*2846c905SEmmanuel Vadot              enum: [UART2_RXD, UART2_TXD, UART2_CTS, UART2_RTS, GPIO_A, SMI_0_MDC,
387*2846c905SEmmanuel Vadot                     SMI_0_MDIO, PCIE30_2L_0_WAKE_N, PCIE30_2L_0_CLKREQ_N,
388*2846c905SEmmanuel Vadot                     PCIE30_1L_1_WAKE_N, PCIE30_1L_1_CLKREQ_N, GPIO_P, WATCHDOG,
389*2846c905SEmmanuel Vadot                     GPIO_RESET, GPIO_WPS, PMIC_I2C_SCL, PMIC_I2C_SDA, I2C_1_SCL,
390*2846c905SEmmanuel Vadot                     I2C_1_SDA, PCIE30_2L_0_PRESET_N, PCIE30_1L_1_PRESET_N, PWMD1,
391*2846c905SEmmanuel Vadot                     SPI0_WP, SPI0_HOLD, SPI0_CSB, SPI0_MISO, SPI0_MOSI, SPI0_CLK,
392*2846c905SEmmanuel Vadot                     SPI1_CSB, SPI1_MISO, SPI1_MOSI, SPI1_CLK, SPI2_CLK, SPI2_MOSI,
393*2846c905SEmmanuel Vadot                     SPI2_MISO, SPI2_CSB, SPI2_HOLD, SPI2_WP, EMMC_RSTB, EMMC_DSL,
394*2846c905SEmmanuel Vadot                     EMMC_CK, EMMC_CMD, EMMC_DATA_7, EMMC_DATA_6, EMMC_DATA_5,
395*2846c905SEmmanuel Vadot                     EMMC_DATA_4, EMMC_DATA_3, EMMC_DATA_2, EMMC_DATA_1,
396*2846c905SEmmanuel Vadot                     EMMC_DATA_0, PCM_FS_I2S_LRCK, PCM_CLK_I2S_BCLK,
397*2846c905SEmmanuel Vadot                     PCM_DRX_I2S_DIN, PCM_DTX_I2S_DOUT, PCM_MCK_I2S_MCLK,
398*2846c905SEmmanuel Vadot                     UART0_RXD, UART0_TXD, PWMD0, JTAG_JTDI, JTAG_JTDO, JTAG_JTMS,
399*2846c905SEmmanuel Vadot                     JTAG_JTCLK, JTAG_JTRST_N, USB_DRV_VBUS_P1, LED_A, LED_B, LED_C,
400*2846c905SEmmanuel Vadot                     LED_D, LED_E, GPIO_B, GPIO_C, I2C_2_SCL, I2C_2_SDA,
401*2846c905SEmmanuel Vadot                     PCIE30_2L_1_PRESET_N, PCIE30_1L_0_PRESET_N,
402*2846c905SEmmanuel Vadot                     PCIE30_2L_1_WAKE_N, PCIE30_2L_1_CLKREQ_N,
403*2846c905SEmmanuel Vadot                     PCIE30_1L_0_WAKE_N, PCIE30_1L_0_CLKREQ_N, USB_DRV_VBUS_P0,
404*2846c905SEmmanuel Vadot                     UART1_RXD, UART1_TXD, UART1_CTS, UART1_RTS]
405*2846c905SEmmanuel Vadot            maxItems: 84
406*2846c905SEmmanuel Vadot
407*2846c905SEmmanuel Vadot          bias-disable: true
408*2846c905SEmmanuel Vadot
409*2846c905SEmmanuel Vadot          bias-pull-up:
410*2846c905SEmmanuel Vadot            oneOf:
411*2846c905SEmmanuel Vadot              - type: boolean
412*2846c905SEmmanuel Vadot                description: normal pull up.
413*2846c905SEmmanuel Vadot              - enum: [100, 101, 102, 103]
414*2846c905SEmmanuel Vadot                description:
415*2846c905SEmmanuel Vadot                  PUPD/R1/R0 pull down type. See MTK_PUPD_SET_R1R0 defines in
416*2846c905SEmmanuel Vadot                  dt-bindings/pinctrl/mt65xx.h.
417*2846c905SEmmanuel Vadot
418*2846c905SEmmanuel Vadot          bias-pull-down:
419*2846c905SEmmanuel Vadot            oneOf:
420*2846c905SEmmanuel Vadot              - type: boolean
421*2846c905SEmmanuel Vadot                description: normal pull down.
422*2846c905SEmmanuel Vadot              - enum: [100, 101, 102, 103]
423*2846c905SEmmanuel Vadot                description:
424*2846c905SEmmanuel Vadot                  PUPD/R1/R0 pull down type. See MTK_PUPD_SET_R1R0 defines in
425*2846c905SEmmanuel Vadot                  dt-bindings/pinctrl/mt65xx.h.
426*2846c905SEmmanuel Vadot
427*2846c905SEmmanuel Vadot          input-enable: true
428*2846c905SEmmanuel Vadot
429*2846c905SEmmanuel Vadot          input-disable: true
430*2846c905SEmmanuel Vadot
431*2846c905SEmmanuel Vadot          output-enable: true
432*2846c905SEmmanuel Vadot
433*2846c905SEmmanuel Vadot          output-low: true
434*2846c905SEmmanuel Vadot
435*2846c905SEmmanuel Vadot          output-high: true
436*2846c905SEmmanuel Vadot
437*2846c905SEmmanuel Vadot          input-schmitt-enable: true
438*2846c905SEmmanuel Vadot
439*2846c905SEmmanuel Vadot          input-schmitt-disable: true
440*2846c905SEmmanuel Vadot
441*2846c905SEmmanuel Vadot          drive-strength:
442*2846c905SEmmanuel Vadot            enum: [2, 4, 6, 8, 10, 12, 14, 16]
443*2846c905SEmmanuel Vadot
444*2846c905SEmmanuel Vadot          mediatek,pull-up-adv:
445*2846c905SEmmanuel Vadot            description: |
446*2846c905SEmmanuel Vadot              Valid arguments for 'mediatek,pull-up-adv' are '0', '1', '2', '3'
447*2846c905SEmmanuel Vadot              Pull up settings for 2 pull resistors, R0 and R1. Valid arguments
448*2846c905SEmmanuel Vadot              are described as below:
449*2846c905SEmmanuel Vadot              0: (R1, R0) = (0, 0) which means R1 disabled and R0 disabled.
450*2846c905SEmmanuel Vadot              1: (R1, R0) = (0, 1) which means R1 disabled and R0 enabled.
451*2846c905SEmmanuel Vadot              2: (R1, R0) = (1, 0) which means R1 enabled and R0 disabled.
452*2846c905SEmmanuel Vadot              3: (R1, R0) = (1, 1) which means R1 enabled and R0 enabled.
453*2846c905SEmmanuel Vadot            $ref: /schemas/types.yaml#/definitions/uint32
454*2846c905SEmmanuel Vadot            enum: [0, 1, 2, 3]
455*2846c905SEmmanuel Vadot
456*2846c905SEmmanuel Vadot          mediatek,pull-down-adv:
457*2846c905SEmmanuel Vadot            description: |
458*2846c905SEmmanuel Vadot              Valid arguments for 'mediatek,pull-up-adv' are '0', '1', '2', '3'
459*2846c905SEmmanuel Vadot              Pull down settings for 2 pull resistors, R0 and R1. Valid arguments
460*2846c905SEmmanuel Vadot              are described as below:
461*2846c905SEmmanuel Vadot              0: (R1, R0) = (0, 0) which means R1 disabled and R0 disabled.
462*2846c905SEmmanuel Vadot              1: (R1, R0) = (0, 1) which means R1 disabled and R0 enabled.
463*2846c905SEmmanuel Vadot              2: (R1, R0) = (1, 0) which means R1 enabled and R0 disabled.
464*2846c905SEmmanuel Vadot              3: (R1, R0) = (1, 1) which means R1 enabled and R0 enabled.
465*2846c905SEmmanuel Vadot            $ref: /schemas/types.yaml#/definitions/uint32
466*2846c905SEmmanuel Vadot            enum: [0, 1, 2, 3]
467*2846c905SEmmanuel Vadot
468*2846c905SEmmanuel Vadot        required:
469*2846c905SEmmanuel Vadot          - pins
470*2846c905SEmmanuel Vadot
471*2846c905SEmmanuel VadotadditionalProperties: false
472*2846c905SEmmanuel Vadot
473*2846c905SEmmanuel Vadotexamples:
474*2846c905SEmmanuel Vadot  - |
475*2846c905SEmmanuel Vadot    #include <dt-bindings/interrupt-controller/irq.h>
476*2846c905SEmmanuel Vadot    #include <dt-bindings/interrupt-controller/arm-gic.h>
477*2846c905SEmmanuel Vadot    #include <dt-bindings/pinctrl/mt65xx.h>
478*2846c905SEmmanuel Vadot
479*2846c905SEmmanuel Vadot    soc {
480*2846c905SEmmanuel Vadot      #address-cells = <2>;
481*2846c905SEmmanuel Vadot      #size-cells = <2>;
482*2846c905SEmmanuel Vadot
483*2846c905SEmmanuel Vadot      pio: pinctrl@1001f000 {
484*2846c905SEmmanuel Vadot        compatible = "mediatek,mt7988-pinctrl";
485*2846c905SEmmanuel Vadot        reg = <0 0x1001f000 0 0x1000>,
486*2846c905SEmmanuel Vadot        <0 0x11c10000 0 0x1000>,
487*2846c905SEmmanuel Vadot        <0 0x11d00000 0 0x1000>,
488*2846c905SEmmanuel Vadot        <0 0x11d20000 0 0x1000>,
489*2846c905SEmmanuel Vadot        <0 0x11e00000 0 0x1000>,
490*2846c905SEmmanuel Vadot        <0 0x11f00000 0 0x1000>,
491*2846c905SEmmanuel Vadot        <0 0x1000b000 0 0x1000>;
492*2846c905SEmmanuel Vadot        reg-names = "gpio", "iocfg_tr",
493*2846c905SEmmanuel Vadot          "iocfg_br", "iocfg_rb",
494*2846c905SEmmanuel Vadot          "iocfg_lb", "iocfg_tl", "eint";
495*2846c905SEmmanuel Vadot        gpio-controller;
496*2846c905SEmmanuel Vadot        #gpio-cells = <2>;
497*2846c905SEmmanuel Vadot        gpio-ranges = <&pio 0 0 84>;
498*2846c905SEmmanuel Vadot        interrupt-controller;
499*2846c905SEmmanuel Vadot        interrupts = <GIC_SPI 225 IRQ_TYPE_LEVEL_HIGH>;
500*2846c905SEmmanuel Vadot        interrupt-parent = <&gic>;
501*2846c905SEmmanuel Vadot        #interrupt-cells = <2>;
502*2846c905SEmmanuel Vadot
503*2846c905SEmmanuel Vadot        i2c0_pins: i2c0-g0-pins {
504*2846c905SEmmanuel Vadot          mux {
505*2846c905SEmmanuel Vadot            function = "i2c";
506*2846c905SEmmanuel Vadot            groups = "i2c0_1";
507*2846c905SEmmanuel Vadot          };
508*2846c905SEmmanuel Vadot        };
509*2846c905SEmmanuel Vadot
510*2846c905SEmmanuel Vadot        mdio0_pins: mdio0-pins {
511*2846c905SEmmanuel Vadot          mux {
512*2846c905SEmmanuel Vadot            function = "eth";
513*2846c905SEmmanuel Vadot            groups = "mdc_mdio0";
514*2846c905SEmmanuel Vadot          };
515*2846c905SEmmanuel Vadot
516*2846c905SEmmanuel Vadot          conf {
517*2846c905SEmmanuel Vadot            pins = "SMI_0_MDC", "SMI_0_MDIO";
518*2846c905SEmmanuel Vadot            drive-strength = <8>;
519*2846c905SEmmanuel Vadot          };
520*2846c905SEmmanuel Vadot        };
521*2846c905SEmmanuel Vadot
522*2846c905SEmmanuel Vadot        mmc0_pins_emmc_51: mmc0-emmc-51-pins {
523*2846c905SEmmanuel Vadot          mux {
524*2846c905SEmmanuel Vadot            function = "flash";
525*2846c905SEmmanuel Vadot            groups = "emmc_51";
526*2846c905SEmmanuel Vadot          };
527*2846c905SEmmanuel Vadot        };
528*2846c905SEmmanuel Vadot
529*2846c905SEmmanuel Vadot        mmc0_pins_sdcard: mmc0-sdcard-pins {
530*2846c905SEmmanuel Vadot          mux {
531*2846c905SEmmanuel Vadot            function = "flash";
532*2846c905SEmmanuel Vadot            groups = "sdcard";
533*2846c905SEmmanuel Vadot          };
534*2846c905SEmmanuel Vadot        };
535*2846c905SEmmanuel Vadot
536*2846c905SEmmanuel Vadot        pcie0_pins: pcie0-pins {
537*2846c905SEmmanuel Vadot          mux {
538*2846c905SEmmanuel Vadot            function = "pcie";
539*2846c905SEmmanuel Vadot            groups = "pcie_2l_0_pereset", "pcie_clk_req_n0_0",
540*2846c905SEmmanuel Vadot                     "pcie_wake_n0_0";
541*2846c905SEmmanuel Vadot          };
542*2846c905SEmmanuel Vadot        };
543*2846c905SEmmanuel Vadot
544*2846c905SEmmanuel Vadot        pcie1_pins: pcie1-pins {
545*2846c905SEmmanuel Vadot          mux {
546*2846c905SEmmanuel Vadot            function = "pcie";
547*2846c905SEmmanuel Vadot            groups = "pcie_2l_1_pereset", "pcie_clk_req_n1",
548*2846c905SEmmanuel Vadot                     "pcie_wake_n1_0";
549*2846c905SEmmanuel Vadot          };
550*2846c905SEmmanuel Vadot        };
551*2846c905SEmmanuel Vadot
552*2846c905SEmmanuel Vadot        pcie2_pins: pcie2-pins {
553*2846c905SEmmanuel Vadot          mux {
554*2846c905SEmmanuel Vadot            function = "pcie";
555*2846c905SEmmanuel Vadot            groups = "pcie_1l_0_pereset", "pcie_clk_req_n2_0",
556*2846c905SEmmanuel Vadot                     "pcie_wake_n2_0";
557*2846c905SEmmanuel Vadot          };
558*2846c905SEmmanuel Vadot        };
559*2846c905SEmmanuel Vadot
560*2846c905SEmmanuel Vadot        pcie3_pins: pcie3-pins {
561*2846c905SEmmanuel Vadot          mux {
562*2846c905SEmmanuel Vadot            function = "pcie";
563*2846c905SEmmanuel Vadot            groups = "pcie_1l_1_pereset", "pcie_clk_req_n3",
564*2846c905SEmmanuel Vadot                     "pcie_wake_n3_0";
565*2846c905SEmmanuel Vadot          };
566*2846c905SEmmanuel Vadot        };
567*2846c905SEmmanuel Vadot
568*2846c905SEmmanuel Vadot        uart0_pins: uart0-pins {
569*2846c905SEmmanuel Vadot          mux {
570*2846c905SEmmanuel Vadot            function = "uart";
571*2846c905SEmmanuel Vadot            groups =  "uart0";
572*2846c905SEmmanuel Vadot          };
573*2846c905SEmmanuel Vadot        };
574*2846c905SEmmanuel Vadot      };
575*2846c905SEmmanuel Vadot    };
576