在 ACPI 的 ASL 里,_PS0() 和 _PS3() 是设备电源状态控制方法:
- _PS0():表示把设备切到 D0,也就是全开 / 工作状态。
- _PS3():表示把设备切到 D3,也就是低功耗 / 关闭状态(通常是 D3hot;如果平台还配合 _PR3 / _OFF,可能进一步到 D3cold)。
更直白一点:
- 设备要“开机能工作”时,OS/ACPI 可能调用 _PS0()
- 设备要“省电停用”时,OS/ACPI 可能调用 _PS3()
此外,类似的还有
- _PR0:声明设备处于 D0 时依赖哪些 power resources
- _PR3:声明设备进入 D3 路径 时依赖哪些 power resources
- _ON() / _OFF():真正控制 power resource 的上电/断电动作
例如,下图中设备需要从 D0 进入 D3,首先是操作系统提出要求,然后通过驱动,调用 ACPI 设备中的 _PS3()。到了这一步,设备就停止了工作。如果你的设备支持D3Cold(彻底断电),那么还会调用_PR3()获得依赖的 Power Resource。最后再调用_OFF() 进行断电。这样设备的供电就被完全切断了。
将设备从 D3唤醒的方法和上面的类似,首先调用_PS0()。如果设备支持 D3 Cold那么需要调用_PR0()获得相关 Power Resource,最后通过_On(),恢复供电或者 Clock 之类的。设备才能够正常的开始工作。
