Merge branch 'pcmcia-next' of git://git.kernel.org/pub/scm/linux/kernel/git/brodo...
[linux-2.6-microblaze.git] / Documentation / devicetree / bindings / usb / amlogic,meson-g12a-usb-ctrl.yaml
1 # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
2 # Copyright 2019 BayLibre, SAS
3 %YAML 1.2
4 ---
5 $id: "http://devicetree.org/schemas/usb/amlogic,meson-g12a-usb-ctrl.yaml#"
6 $schema: "http://devicetree.org/meta-schemas/core.yaml#"
7
8 title: Amlogic Meson G12A DWC3 USB SoC Controller Glue
9
10 maintainers:
11   - Neil Armstrong <narmstrong@baylibre.com>
12
13 description: |
14   The Amlogic G12A embeds a DWC3 USB IP Core configured for USB2 and USB3
15   in host-only mode, and a DWC2 IP Core configured for USB2 peripheral mode
16   only.
17
18   A glue connects the DWC3 core to USB2 PHYs and optionally to an USB3 PHY.
19
20   One of the USB2 PHYs can be re-routed in peripheral mode to a DWC2 USB IP.
21
22   The DWC3 Glue controls the PHY routing and power, an interrupt line is
23   connected to the Glue to serve as OTG ID change detection.
24
25   The Amlogic A1 embeds a DWC3 USB IP Core configured for USB2 in
26   host-only mode.
27
28   The Amlogic GXL, GXM & AXG SoCs doesn't embed an USB3 PHY.
29
30 properties:
31   compatible:
32     enum:
33       - amlogic,meson-gxl-usb-ctrl
34       - amlogic,meson-gxm-usb-ctrl
35       - amlogic,meson-axg-usb-ctrl
36       - amlogic,meson-g12a-usb-ctrl
37       - amlogic,meson-a1-usb-ctrl
38
39   ranges: true
40
41   "#address-cells":
42     enum: [ 1, 2 ]
43
44   "#size-cells":
45     enum: [ 1, 2 ]
46
47   clocks:
48     minItems: 1
49     maxItems: 3
50
51   clock-names:
52     minItems: 1
53     maxItems: 3
54
55   resets:
56     minItems: 1
57
58   reg:
59     maxItems: 1
60
61   interrupts:
62     maxItems: 1
63
64   phy-names:
65     minItems: 1
66     maxItems: 3
67
68   phys:
69     minItems: 1
70     maxItems: 3
71
72   dr_mode: true
73
74   power-domains:
75     maxItems: 1
76
77   vbus-supply:
78     description: VBUS power supply when used in OTG switchable mode
79
80 patternProperties:
81   "^usb@[0-9a-f]+$":
82     type: object
83
84 additionalProperties: false
85
86 required:
87   - compatible
88   - "#address-cells"
89   - "#size-cells"
90   - ranges
91   - clocks
92   - resets
93   - reg
94   - interrupts
95   - phy-names
96   - phys
97   - dr_mode
98
99 allOf:
100   - if:
101       properties:
102         compatible:
103           enum:
104             - amlogic,meson-g12a-usb-ctrl
105
106     then:
107       properties:
108         phy-names:
109           items:
110             - const: usb2-phy0 # USB2 PHY0 if USBHOST_A port is used
111             - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used
112             - const: usb3-phy0 # USB3 PHY if USB3_0 is used
113   - if:
114       properties:
115         compatible:
116           enum:
117             - amlogic,meson-gxl-usb-ctrl
118
119     then:
120       properties:
121         clocks:
122           minItems: 2
123         clock-names:
124           items:
125             - const: usb_ctrl
126             - const: ddr
127         phy-names:
128           items:
129             - const: usb2-phy0 # USB2 PHY0 if USBHOST_A port is used
130             - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used
131       required:
132         - clock-names
133   - if:
134       properties:
135         compatible:
136           enum:
137             - amlogic,meson-gxm-usb-ctrl
138
139     then:
140       properties:
141         clocks:
142           minItems: 2
143         clock-names:
144           items:
145             - const: usb_ctrl
146             - const: ddr
147         phy-names:
148           items:
149             - const: usb2-phy0 # USB2 PHY0 if USBHOST_A port is used
150             - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used
151             - const: usb2-phy2 # USB2 PHY2 if USBOTG_C port is used
152
153       required:
154         - clock-names
155   - if:
156       properties:
157         compatible:
158           enum:
159             - amlogic,meson-axg-usb-ctrl
160
161     then:
162       properties:
163         phy-names:
164           items:
165             - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used
166         clocks:
167           minItems: 2
168         clock-names:
169           items:
170             - const: usb_ctrl
171             - const: ddr
172       required:
173         - clock-names
174   - if:
175       properties:
176         compatible:
177           enum:
178             - amlogic,meson-a1-usb-ctrl
179
180     then:
181       properties:
182         phy-names:
183           items:
184             - const: usb2-phy1 # USB2 PHY1 if USBOTG_B port is used
185         clocks:
186           minItems: 3
187         clock-names:
188           items:
189             - const: usb_ctrl
190             - const: usb_bus
191             - const: xtal_usb_ctrl
192       required:
193         - clock-names
194
195 examples:
196   - |
197     usb: usb@ffe09000 {
198           compatible = "amlogic,meson-g12a-usb-ctrl";
199           reg = <0xffe09000 0xa0>;
200           interrupts = <16>;
201           #address-cells = <1>;
202           #size-cells = <1>;
203           ranges;
204
205           clocks = <&clkc_usb>;
206           resets = <&reset_usb>;
207
208           dr_mode = "otg";
209
210           phys = <&usb2_phy0>, <&usb2_phy1>, <&usb3_phy0>;
211           phy-names = "usb2-phy0", "usb2-phy1", "usb3-phy0";
212
213           dwc2: usb@ff400000 {
214               compatible = "amlogic,meson-g12a-usb", "snps,dwc2";
215               reg = <0xff400000 0x40000>;
216               interrupts = <31>;
217               clocks = <&clkc_usb1>;
218               clock-names = "otg";
219               phys = <&usb2_phy1>;
220               dr_mode = "peripheral";
221               g-rx-fifo-size = <192>;
222               g-np-tx-fifo-size = <128>;
223               g-tx-fifo-size = <128 128 16 16 16>;
224           };
225
226           dwc3: usb@ff500000 {
227               compatible = "snps,dwc3";
228               reg = <0xff500000 0x100000>;
229               interrupts = <30>;
230               dr_mode = "host";
231               snps,dis_u2_susphy_quirk;
232               snps,quirk-frame-length-adjustment;
233           };
234     };