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
83
84
85
|
@page page_device_power Power subsystem overview
@subpage page_device_power_supply
@subpage page_device_power_charger
@subpage page_device_power_board_reset
# Power (overview)
RT-Thread splits **power** into several layers. They are related but **not interchangeable**:
| Layer | Page | Scope |
| --- | --- | --- |
| **Regulator** | @ref page_device_regulator | Shared rails (LDO/DCDC): enable, voltage, refcount |
| **Power domain** | @ref page_device_power_domain | SoC power islands while system is running |
| **Power supply** | @ref page_device_power_supply | Battery/charger reporting (`rt_power_supply`) |
| **Board off/restart** | @ref page_device_power_board_reset | GPIO/syscon **shutdown** and **reset** |
| **System DM power** | @ref page_device_dm_power | Ordered **`rt_dm_power_off_handler`** + machine hooks |
**Reset controller** (IP block reset lines) is a different subsystem: @ref page_device_reset — not under `components/drivers/power/reset/`.
Sources under **`components/drivers/power/`**:
| Path | Role |
| --- | --- |
| **`supply/`** | `rt_power_supply` core, daemon, **`gpio-charger`**, emulator |
| **
eset/** | **gpio-poweroff**, **gpio-restart**, **syscon-*** reboot/poweroff |
Power domain providers: **components/drivers/pmdomain/** (see @ref page_device_power_domain).
---
## Typical consumer `probe` order
When a platform device comes up (@ref page_device_platform):
```
pinctrl (bus)
→ clock defaults (bus)
→ power domain attach (bus) [optional, -RT_EEMPTY OK]
→ IOMMU attach (bus) [optional]
→ driver probe:
regulator get/enable [your driver]
reset deassert / clk enable
rt_dm_dev_iomap
register functional device
```
For **battery/charger UI** or **PM policy**, drivers register **`rt_power_supply`** (see @ref page_device_power_supply).
For **whole-system power off / reboot**, drivers register **`rt_dm_power_off_handler`** (see @ref page_device_power_board_reset, @ref page_device_dm_power).
---
## Kconfig (`components/drivers/power/`)
| Option | Role |
| --- | --- |
| **`RT_USING_POWER_SUPPLY`** | Power supply class + workqueue |
| **`RT_POWER_SUPPLY_DAEMON`** | Poll/notify policy thread |
| **`RT_POWER_SUPPLY_CHARGER_GPIO`** | **`gpio-charger`** |
| **`RT_POWER_SUPPLY_EMU`** | Test battery/charger |
| **`RT_USING_POWER_RESET`** | Board poweroff/restart drivers |
| **`RT_POWER_RESET_GPIO_*`**, **`RT_POWER_RESET_SYSCON_*`** | In-tree reset drivers |
Regulator and power domain have separate Kconfig trees under **`components/drivers/regulator/`** and **`core/power_domain.c`**.
---
## Quick map: what to implement
| Goal | Register / API |
| --- | --- |
| Report SOC, charging, USB online | **`rt_power_supply_register`** + **`RT_PLATFORM_DRIVER_EXPORT`** |
| Shutdown PMIC / assert poweroff GPIO | **`rt_dm_power_off_handler(..., SHUTDOWN, ...)`** |
| Warm reset / recovery mode | **`rt_dm_power_off_handler(..., RESET, ...)`** + **`rt_dm_reboot_mode_register`** |
| Keep an IP block powered | **`rt_dm_power_domain_attach`** / **`rt_regulator_get`** |
| Share 3.3 V rail | **`rt_regulator_enable`** / **`put`** |
---
## See also
- @ref page_device_platform — device/driver binding
- @ref page_device_pin — GPIO for chargers and gpio-poweroff
- `components/drivers/power/Kconfig`
|