summaryrefslogtreecommitdiff
path: root/documentation/6.components/device-driver/phye/phye_generic_usb.md
blob: 54bc5ae7d89cf044c8921e71449cc90a55805a47 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
@page page_device_phye_generic_usb Generic USB PHY

# Generic USB PHY (`phye-generic-usb.c`)

Minimal PHY provider for **`usb-nop-xceiv`** — reset, clock, and regulators without complex **`set_mode`**.

Kconfig: **`RT_PHYE_GENERIC_USB`** (requires **`RT_USING_PHYE`**).

---

## Device tree

```dts
usb_phy: usb-phy {
    compatible = "usb-nop-xceiv";
    clocks = <&usb_clk>;
    clock-frequency = <24000000>;
    vcc-supply = <&usb_vcc>;
    vbus-supply = <&usb_vbus>;   /* optional */
    reset-gpios = <&gpio PHY_RST GPIO_ACTIVE_LOW>;
};
```

Consumer (e.g. DWC3):

```dts
usb3: usb@... {
    phys = <&usb_phy>;
    phy-names = "usb";
};
```

---

## Operations

| `rt_phye_ops` | Behavior |
| --- | --- |
| **`power_on`** | **`vcc`** enable → **`clk_prepare_enable`** → **`reset`** pulse (15 ms assert, 20 ms deassert) |
| **`power_off`** | **`vcc`** disable, clock off |
| **`reset`** | GPIO reset only |

No **`init`**, **`exit`**, or **`set_mode`** — USB mode assumed fixed after power-on.

---

## Probe flow

1. **`reset`** GPIO from **`reset-gpios`**  
2. **`main_clk`** via **`rt_clk_get_by_name`**; optional **`clock-frequency`**  
3. **`vcc`**, **`vbus`** regulators — **`vbus`** enabled at probe if present  
4. **`rt_phye_register`**

**`INIT_PLATFORM_EXPORT(generic_usb_phy_drv_register)`** — registers platform driver at init.

---

## Consumer usage

```c
phy = rt_phye_get_by_name(dev, "usb");
rt_phye_power_on(phy);   /* often sufficient for nop-xceiv */
/* start USB controller */
```

Use **`rt_phye_init`** only if provider adds **`init`** later.

---

## Pitfalls

| Issue | Mitigation |
| --- | --- |
| Wrong clock rate | Set **`clock-frequency`** in DTS |
| **`vbus` always on** | Probe enables **`vbus`** — OK for host; device role may differ |
| Expect **`set_mode` for SS** | Add SoC PHY driver or extend ops |

## See also

- @ref page_device_phye_provider
- @ref page_device_phye_consumer
- @ref page_device_phye