1b1464decSMaxime Ripard# SPDX-License-Identifier: GPL-2.0
2b1464decSMaxime Ripard%YAML 1.2
3b1464decSMaxime Ripard---
4b1464decSMaxime Ripard$id: http://devicetree.org/schemas/usb/smsc,usb3503.yaml#
5b1464decSMaxime Ripard$schema: http://devicetree.org/meta-schemas/core.yaml#
6b1464decSMaxime Ripard
7dd3cb467SAndrew Lunntitle: SMSC USB3503 High-Speed Hub Controller
8b1464decSMaxime Ripard
9b1464decSMaxime Ripardmaintainers:
10b1464decSMaxime Ripard  - Dongjin Kim <tobetter@gmail.com>
11b1464decSMaxime Ripard
12b1464decSMaxime Ripardproperties:
13b1464decSMaxime Ripard  compatible:
14b1464decSMaxime Ripard    enum:
15b1464decSMaxime Ripard      - smsc,usb3503
16b1464decSMaxime Ripard      - smsc,usb3503a
17*1239e812SEmanuele Ghidoli      - smsc,usb3803
18b1464decSMaxime Ripard
19b1464decSMaxime Ripard  reg:
20b1464decSMaxime Ripard    maxItems: 1
21b1464decSMaxime Ripard
22b1464decSMaxime Ripard  connect-gpios:
23b1464decSMaxime Ripard    maxItems: 1
24b1464decSMaxime Ripard    description: >
25b1464decSMaxime Ripard      GPIO for connect
26b1464decSMaxime Ripard
27b1464decSMaxime Ripard  intn-gpios:
28b1464decSMaxime Ripard    maxItems: 1
29b1464decSMaxime Ripard    description: >
30b1464decSMaxime Ripard      GPIO for interrupt
31b1464decSMaxime Ripard
32b1464decSMaxime Ripard  reset-gpios:
33b1464decSMaxime Ripard    maxItems: 1
34b1464decSMaxime Ripard    description: >
35b1464decSMaxime Ripard      GPIO for reset
36b1464decSMaxime Ripard
37*1239e812SEmanuele Ghidoli  bypass-gpios:
38*1239e812SEmanuele Ghidoli    maxItems: 1
39*1239e812SEmanuele Ghidoli    description: >
40*1239e812SEmanuele Ghidoli      GPIO for bypass.
41*1239e812SEmanuele Ghidoli      Control signal to select between HUB MODE and BYPASS MODE.
42*1239e812SEmanuele Ghidoli
43b1464decSMaxime Ripard  disabled-ports:
44b1464decSMaxime Ripard    $ref: /schemas/types.yaml#/definitions/uint32-array
45b1464decSMaxime Ripard    minItems: 1
46b1464decSMaxime Ripard    maxItems: 3
47b1464decSMaxime Ripard    items:
48b1464decSMaxime Ripard      minimum: 1
49b1464decSMaxime Ripard      maximum: 3
50b1464decSMaxime Ripard    description: >
51b1464decSMaxime Ripard      Specifies the ports unused using their port number. Do not describe this
52b1464decSMaxime Ripard      property if all ports have to be enabled.
53b1464decSMaxime Ripard
54b1464decSMaxime Ripard  initial-mode:
554e71ed98SRob Herring    $ref: /schemas/types.yaml#/definitions/uint32
56b1464decSMaxime Ripard    description: >
57*1239e812SEmanuele Ghidoli      Specifies initial mode. 1 for Hub mode, 2 for standby mode and 3 for bypass mode.
58*1239e812SEmanuele Ghidoli      In bypass mode the downstream port 3 is connected to the upstream port with low
59*1239e812SEmanuele Ghidoli      switch resistance R_on.
60b1464decSMaxime Ripard
61b1464decSMaxime Ripard  clocks:
62b1464decSMaxime Ripard    maxItems: 1
63b1464decSMaxime Ripard    description: >
64b1464decSMaxime Ripard      Clock used for driving REFCLK signal. If not provided the driver assumes
65b1464decSMaxime Ripard      that clock signal is always available, its rate is specified by REF_SEL
66b1464decSMaxime Ripard      pins and a value from the primary reference clock frequencies table is
67b1464decSMaxime Ripard      used.
68b1464decSMaxime Ripard
69b1464decSMaxime Ripard  clock-names:
70b1464decSMaxime Ripard    const: refclk
71b1464decSMaxime Ripard
72b1464decSMaxime Ripard  refclk-frequency:
73b1464decSMaxime Ripard    $ref: /schemas/types.yaml#/definitions/uint32
74b1464decSMaxime Ripard    description: >
75b1464decSMaxime Ripard      Frequency of the REFCLK signal as defined by REF_SEL pins. If not
76b1464decSMaxime Ripard      provided, driver will not set rate of the REFCLK signal and assume that a
77b1464decSMaxime Ripard      value from the primary reference clock frequencies table is used.
78b1464decSMaxime Ripard
79b1464decSMaxime Ripardrequired:
80b1464decSMaxime Ripard  - compatible
81b1464decSMaxime Ripard
82*1239e812SEmanuele GhidoliallOf:
83*1239e812SEmanuele Ghidoli  - if:
84*1239e812SEmanuele Ghidoli      not:
85*1239e812SEmanuele Ghidoli        properties:
86*1239e812SEmanuele Ghidoli          compatible:
87*1239e812SEmanuele Ghidoli            enum:
88*1239e812SEmanuele Ghidoli              - smsc,usb3803
89*1239e812SEmanuele Ghidoli    then:
90*1239e812SEmanuele Ghidoli      properties:
91*1239e812SEmanuele Ghidoli        bypass-gpios: false
92*1239e812SEmanuele Ghidoli
93*1239e812SEmanuele Ghidoli  - if:
94*1239e812SEmanuele Ghidoli      required:
95*1239e812SEmanuele Ghidoli        - bypass-gpios
96*1239e812SEmanuele Ghidoli    then:
97*1239e812SEmanuele Ghidoli      properties:
98*1239e812SEmanuele Ghidoli        initial-mode:
99*1239e812SEmanuele Ghidoli          enum: [1, 2, 3]
100*1239e812SEmanuele Ghidoli    else:
101*1239e812SEmanuele Ghidoli      properties:
102*1239e812SEmanuele Ghidoli        initial-mode:
103*1239e812SEmanuele Ghidoli          enum: [1, 2]
104*1239e812SEmanuele Ghidoli
105b1464decSMaxime RipardadditionalProperties: false
106b1464decSMaxime Ripard
107b1464decSMaxime Ripardexamples:
108b1464decSMaxime Ripard  - |
109b1464decSMaxime Ripard      i2c {
110b1464decSMaxime Ripard          #address-cells = <1>;
111b1464decSMaxime Ripard          #size-cells = <0>;
112b1464decSMaxime Ripard
113b1464decSMaxime Ripard          usb-hub@8 {
114b1464decSMaxime Ripard              compatible = "smsc,usb3503";
115b1464decSMaxime Ripard              reg = <0x08>;
116b1464decSMaxime Ripard              connect-gpios = <&gpx3 0 1>;
117b1464decSMaxime Ripard              disabled-ports = <2 3>;
118b1464decSMaxime Ripard              intn-gpios = <&gpx3 4 1>;
119b1464decSMaxime Ripard              reset-gpios = <&gpx3 5 1>;
120b1464decSMaxime Ripard              initial-mode = <1>;
121b1464decSMaxime Ripard              clocks = <&clks 80>;
122b1464decSMaxime Ripard              clock-names = "refclk";
123b1464decSMaxime Ripard          };
124b1464decSMaxime Ripard      };
125b1464decSMaxime Ripard
126b1464decSMaxime Ripard  - |
127*1239e812SEmanuele Ghidoli      i2c {
128*1239e812SEmanuele Ghidoli          #address-cells = <1>;
129*1239e812SEmanuele Ghidoli          #size-cells = <0>;
130*1239e812SEmanuele Ghidoli
131*1239e812SEmanuele Ghidoli          usb-hub@8 {
132*1239e812SEmanuele Ghidoli              compatible = "smsc,usb3803";
133*1239e812SEmanuele Ghidoli              reg = <0x08>;
134*1239e812SEmanuele Ghidoli              connect-gpios = <&gpx3 0 1>;
135*1239e812SEmanuele Ghidoli              disabled-ports = <2 3>;
136*1239e812SEmanuele Ghidoli              intn-gpios = <&gpx3 4 1>;
137*1239e812SEmanuele Ghidoli              reset-gpios = <&gpx3 5 1>;
138*1239e812SEmanuele Ghidoli              bypass-gpios = <&gpx3 6 1>;
139*1239e812SEmanuele Ghidoli              initial-mode = <3>;
140*1239e812SEmanuele Ghidoli              clocks = <&clks 80>;
141*1239e812SEmanuele Ghidoli              clock-names = "refclk";
142*1239e812SEmanuele Ghidoli          };
143*1239e812SEmanuele Ghidoli      };
144*1239e812SEmanuele Ghidoli
145*1239e812SEmanuele Ghidoli  - |
146b1464decSMaxime Ripard      #include <dt-bindings/gpio/gpio.h>
147b1464decSMaxime Ripard
148b1464decSMaxime Ripard      usb-hub {
149b1464decSMaxime Ripard          /* I2C is not connected */
150b1464decSMaxime Ripard          compatible = "smsc,usb3503";
151b1464decSMaxime Ripard          initial-mode = <1>; /* initialize in HUB mode */
152b1464decSMaxime Ripard          disabled-ports = <1>;
153b1464decSMaxime Ripard          intn-gpios = <&pio 7 5 GPIO_ACTIVE_HIGH>; /* PH5 */
154b1464decSMaxime Ripard          reset-gpios = <&pio 4 16 GPIO_ACTIVE_LOW>; /* PE16 */
155b1464decSMaxime Ripard          connect-gpios = <&pio 4 17 GPIO_ACTIVE_HIGH>; /* PE17 */
156b1464decSMaxime Ripard          refclk-frequency = <19200000>;
157b1464decSMaxime Ripard      };
158b1464decSMaxime Ripard
159b1464decSMaxime Ripard...
160