1# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/phy/brcm,brcmstb-usb-phy.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Broadcom STB USB PHY
8
9description: Broadcom's PHY that handles EHCI/OHCI and/or XHCI
10
11maintainers:
12  - Al Cooper <alcooperx@gmail.com>
13  - Rafał Miłecki <rafal@milecki.pl>
14
15properties:
16  compatible:
17    enum:
18      - brcm,bcm4908-usb-phy
19      - brcm,bcm7211-usb-phy
20      - brcm,bcm7216-usb-phy
21      - brcm,brcmstb-usb-phy
22
23  reg:
24    minItems: 1
25    items:
26      - description: the base CTRL register
27      - description: XHCI EC register
28      - description: XHCI GBL register
29      - description: USB PHY register
30      - description: USB MDIO register
31      - description: BDC register
32
33  reg-names:
34    minItems: 1
35    items:
36      - const: ctrl
37      - const: xhci_ec
38      - const: xhci_gbl
39      - const: usb_phy
40      - const: usb_mdio
41      - const: bdc_ec
42
43  power-domains:
44    maxItems: 1
45
46  clocks:
47    minItems: 1
48    maxItems: 2
49
50  clock-names:
51    minItems: 1
52    items:
53      - const: sw_usb
54      - const: sw_usb3
55
56  interrupts:
57    description: wakeup interrupt
58
59  interrupt-names:
60    const: wake
61
62  brcm,ipp:
63    $ref: /schemas/types.yaml#/definitions/uint32
64    description: Invert Port Power
65    minimum: 0
66    maximum: 1
67
68  brcm,ioc:
69    $ref: /schemas/types.yaml#/definitions/uint32
70    description: Invert Over Current detection
71    minimum: 0
72    maximum: 1
73
74  dr_mode:
75    description: PHY Device mode. If this property is not defined, the PHY will
76      default to "host" mode.
77    enum:
78      - host
79      - peripheral
80      - drd
81      - typec-pd
82
83  brcm,syscon-piarbctl:
84    description: phandle to syscon for handling config registers
85    $ref: /schemas/types.yaml#/definitions/phandle
86
87  brcm,has-xhci:
88    description: Indicates the PHY has an XHCI PHY.
89    type: boolean
90
91  brcm,has-eohci:
92    description: Indicates the PHY has an EHCI/OHCI PHY.
93    type: boolean
94
95  "#phy-cells":
96    description: |
97      Cell allows setting the type of the PHY. Possible values are:
98      - PHY_TYPE_USB2 for USB1.1/2.0 PHY
99      - PHY_TYPE_USB3 for USB3.x PHY
100    const: 1
101
102required:
103  - reg
104  - "#phy-cells"
105
106anyOf:
107  - required:
108      - brcm,has-xhci
109  - required:
110      - brcm,has-eohci
111
112allOf:
113  - if:
114      properties:
115        compatible:
116          contains:
117            enum:
118              - brcm,bcm4908-usb-phy
119              - brcm,brcmstb-usb-phy
120    then:
121      properties:
122        reg:
123          minItems: 1
124          maxItems: 2
125  - if:
126      properties:
127        compatible:
128          contains:
129            const: brcm,bcm7211-usb-phy
130    then:
131      properties:
132        reg:
133          minItems: 5
134          maxItems: 6
135        reg-names:
136          minItems: 5
137          maxItems: 6
138  - if:
139      properties:
140        compatible:
141          contains:
142            const: brcm,bcm7216-usb-phy
143    then:
144      properties:
145        reg:
146          minItems: 3
147          maxItems: 3
148        reg-names:
149          minItems: 3
150          maxItems: 3
151
152additionalProperties: false
153
154examples:
155  - |
156    #include <dt-bindings/phy/phy.h>
157
158    usb-phy@f0470200 {
159        compatible = "brcm,brcmstb-usb-phy";
160        reg = <0xf0470200 0xb8>,
161              <0xf0471940 0x6c0>;
162        #phy-cells = <1>;
163        dr_mode = "host";
164        brcm,ioc = <1>;
165        brcm,ipp = <1>;
166        brcm,has-xhci;
167        brcm,has-eohci;
168        clocks = <&usb20>, <&usb30>;
169        clock-names = "sw_usb", "sw_usb3";
170    };
171  - |
172    #include <dt-bindings/phy/phy.h>
173
174    usb-phy@29f0200 {
175        compatible = "brcm,bcm7211-usb-phy";
176        reg = <0x29f0200 0x200>,
177              <0x29c0880 0x30>,
178              <0x29cc100 0x534>,
179              <0x2808000 0x24>,
180              <0x2980080 0x8>;
181        reg-names = "ctrl",
182            "xhci_ec",
183            "xhci_gbl",
184            "usb_phy",
185            "usb_mdio";
186        brcm,ioc = <0x0>;
187        brcm,ipp = <0x0>;
188        interrupts = <0x30>;
189        interrupt-parent = <&vpu_intr1_nosec_intc>;
190        interrupt-names = "wake";
191        #phy-cells = <0x1>;
192        brcm,has-xhci;
193        brcm,syscon-piarbctl = <&syscon_piarbctl>;
194        clocks = <&scmi_clk 256>;
195        clock-names = "sw_usb";
196    };
197