Mention branches and keyring.
[releases.git] / bindings / pinctrl / mediatek,mt8186-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,mt8186-pinctrl.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: MediaTek MT8186 Pin Controller
8
9 maintainers:
10   - Sean Wang <sean.wang@mediatek.com>
11
12 description:
13   The MediaTek's MT8186 Pin controller is used to control SoC pins.
14
15 properties:
16   compatible:
17     const: mediatek,mt8186-pinctrl
18
19   gpio-controller: true
20
21   '#gpio-cells':
22     description:
23       Number of cells in GPIO specifier. Since the generic GPIO binding is used,
24       the amount of cells must be specified as 2. See the below mentioned gpio
25       binding representation for description of particular cells.
26     const: 2
27
28   gpio-ranges:
29     maxItems: 1
30
31   gpio-line-names: true
32
33   reg:
34     description:
35       Physical address base for GPIO base registers. There are 8 different GPIO
36       physical address base in mt8186.
37     maxItems: 8
38
39   reg-names:
40     description:
41       GPIO base register names.
42     items:
43       - const: iocfg0
44       - const: iocfg_lt
45       - const: iocfg_lm
46       - const: iocfg_lb
47       - const: iocfg_bl
48       - const: iocfg_rb
49       - const: iocfg_rt
50       - const: eint
51
52   interrupt-controller: true
53
54   '#interrupt-cells':
55     const: 2
56
57   interrupts:
58     description: The interrupt outputs to sysirq
59     maxItems: 1
60
61   mediatek,rsel-resistance-in-si-unit:
62     type: boolean
63     description:
64       Identifying i2c pins pull up/down type which is RSEL. It can support RSEL
65       define or si unit value(ohm) to set different resistance.
66
67 # PIN CONFIGURATION NODES
68 patternProperties:
69   '-pins$':
70     type: object
71     additionalProperties: false
72     patternProperties:
73       '^pins':
74         type: object
75         additionalProperties: false
76         description: |
77           A pinctrl node should contain at least one subnodes representing the
78           pinctrl groups available on the machine. Each subnode will list the
79           pins it needs, and how they should be configured, with regard to muxer
80           configuration, pullups, drive strength, input enable/disable and input
81           schmitt.
82           An example of using macro:
83           pincontroller {
84             /* GPIO0 set as multifunction GPIO0 */
85             gpio-pins {
86               pins {
87                 pinmux = <PINMUX_GPIO0__FUNC_GPIO0>;
88               }
89             };
90             /* GPIO128 set as multifunction SDA0 */
91             i2c0-pins {
92               pins {
93                 pinmux = <PINMUX_GPIO128__FUNC_SDA0>;
94               }
95             };
96           };
97         $ref: pinmux-node.yaml
98
99         properties:
100           pinmux:
101             description:
102               Integer array, represents gpio pin number and mux setting.
103               Supported pin number and mux varies for different SoCs, and are
104               defined as macros in dt-bindings/pinctrl/<soc>-pinfunc.h directly.
105
106           drive-strength:
107             enum: [2, 4, 6, 8, 10, 12, 14, 16]
108
109           drive-strength-microamp:
110             enum: [125, 250, 500, 1000]
111
112           bias-pull-down:
113             oneOf:
114               - type: boolean
115               - enum: [100, 101, 102, 103]
116                 description: mt8186 pull down PUPD/R0/R1 type define value.
117               - enum: [200, 201, 202, 203]
118                 description: mt8186 pull down RSEL type define value.
119               - enum: [75000, 5000]
120                 description: mt8186 pull down RSEL type si unit value(ohm).
121             description: |
122               For pull down type is normal, it don't need add RSEL & R1R0 define
123               and resistance value.
124               For pull down type is PUPD/R0/R1 type, it can add R1R0 define to
125               set different resistance. It can support "MTK_PUPD_SET_R1R0_00" &
126               "MTK_PUPD_SET_R1R0_01" & "MTK_PUPD_SET_R1R0_10" &
127               "MTK_PUPD_SET_R1R0_11" define in mt8186.
128               For pull down type is RSEL, it can add RSEL define & resistance
129               value(ohm) to set different resistance by identifying property
130               "mediatek,rsel-resistance-in-si-unit".
131               It can support "MTK_PULL_SET_RSEL_000" & "MTK_PULL_SET_RSEL_001" &
132               "MTK_PULL_SET_RSEL_010" & "MTK_PULL_SET_RSEL_011" define in
133               mt8186. It can also support resistance value(ohm) "75000" & "5000"
134               in mt8186.
135               An example of using RSEL define:
136               pincontroller {
137                 i2c0_pin {
138                   pins {
139                     pinmux = <PINMUX_GPIO128__FUNC_SDA0>;
140                     bias-pull-down = <MTK_PULL_SET_RSEL_001>;
141                   }
142                 };
143               };
144               An example of using si unit resistance value(ohm):
145               &pio {
146                 mediatek,rsel-resistance-in-si-unit;
147               }
148               pincontroller {
149                 i2c0_pin {
150                   pins {
151                     pinmux = <PINMUX_GPIO128__FUNC_SDA0>;
152                     bias-pull-down = <75000>;
153                   }
154                 };
155               };
156
157           bias-pull-up:
158             oneOf:
159               - type: boolean
160               - enum: [100, 101, 102, 103]
161                 description: mt8186 pull up PUPD/R0/R1 type define value.
162               - enum: [200, 201, 202, 203]
163                 description: mt8186 pull up RSEL type define value.
164               - enum: [1000, 5000, 10000, 75000]
165                 description: mt8186 pull up RSEL type si unit value(ohm).
166             description: |
167               For pull up type is normal, it don't need add RSEL & R1R0 define
168               and resistance value.
169               For pull up type is PUPD/R0/R1 type, it can add R1R0 define to
170               set different resistance. It can support "MTK_PUPD_SET_R1R0_00" &
171               "MTK_PUPD_SET_R1R0_01" & "MTK_PUPD_SET_R1R0_10" &
172               "MTK_PUPD_SET_R1R0_11" define in mt8186.
173               For pull up type is RSEL, it can add RSEL define & resistance
174               value(ohm) to set different resistance by identifying property
175               "mediatek,rsel-resistance-in-si-unit".
176               It can support "MTK_PULL_SET_RSEL_000" & "MTK_PULL_SET_RSEL_001" &
177               "MTK_PULL_SET_RSEL_010" & "MTK_PULL_SET_RSEL_011" define in
178               mt8186. It can also support resistance value(ohm) "1000" & "5000"
179               & "10000" & "75000" in mt8186.
180               An example of using si unit resistance value(ohm):
181               &pio {
182                 mediatek,rsel-resistance-in-si-unit;
183               }
184               pincontroller {
185                 i2c0-pins {
186                   pins {
187                     pinmux = <PINMUX_GPIO128__FUNC_SDA0>;
188                     bias-pull-up = <1000>;
189                   }
190                 };
191               };
192
193           bias-disable: true
194
195           output-high: true
196
197           output-low: true
198
199           input-enable: true
200
201           input-disable: true
202
203           input-schmitt-enable: true
204
205           input-schmitt-disable: true
206
207         required:
208           - pinmux
209
210 required:
211   - compatible
212   - reg
213   - interrupts
214   - interrupt-controller
215   - '#interrupt-cells'
216   - gpio-controller
217   - '#gpio-cells'
218   - gpio-ranges
219
220 additionalProperties: false
221
222 examples:
223   - |
224     #include <dt-bindings/pinctrl/mt8186-pinfunc.h>
225     #include <dt-bindings/interrupt-controller/arm-gic.h>
226
227     pio: pinctrl@10005000 {
228       compatible = "mediatek,mt8186-pinctrl";
229       reg = <0x10005000 0x1000>,
230             <0x10002000 0x0200>,
231             <0x10002200 0x0200>,
232             <0x10002400 0x0200>,
233             <0x10002600 0x0200>,
234             <0x10002A00 0x0200>,
235             <0x10002c00 0x0200>,
236             <0x1000b000 0x1000>;
237       reg-names = "iocfg0", "iocfg_lt", "iocfg_lm",
238                   "iocfg_lb", "iocfg_bl", "iocfg_rb",
239                   "iocfg_rt", "eint";
240       gpio-controller;
241       #gpio-cells = <2>;
242       gpio-ranges = <&pio 0 0 185>;
243       interrupt-controller;
244       interrupts = <GIC_SPI 186 IRQ_TYPE_LEVEL_HIGH 0>;
245       #interrupt-cells = <2>;
246
247       pio-pins {
248         pins {
249           pinmux = <PINMUX_GPIO0__FUNC_GPIO0>;
250           output-low;
251         };
252       };
253
254       spi0-pins {
255         pins-spi {
256           pinmux = <PINMUX_GPIO0__FUNC_SPI0_CLK_B>,
257                    <PINMUX_GPIO1__FUNC_SPI0_CSB_B>,
258                    <PINMUX_GPIO2__FUNC_SPI0_MO_B>;
259           bias-disable;
260         };
261         pins-spi-mi {
262           pinmux = <PINMUX_GPIO3__FUNC_SPI0_MI_B>;
263           bias-pull-down;
264         };
265       };
266
267       i2c0-pins {
268         pins {
269           pinmux = <PINMUX_GPIO127__FUNC_SCL0>,
270                    <PINMUX_GPIO128__FUNC_SDA0>;
271           bias-pull-up = <MTK_PULL_SET_RSEL_001>;
272           drive-strength-microamp = <1000>;
273         };
274       };
275     };