//以下是进入sleep的关键入口
lpm_cpuidle_enter(,fromidle)或 lpm_suspend_enter(,fromidle)
->lpm_enter_low_power()
->lpm_cpu_prepare(system_state, cpu_index, from_idle);
->lpm_system_prepare(system_state, idx, from_idle);
->msm_rpm_enter_sleep()
->smd_mask_receive_interrupt() //屏蔽RPM发给AP的中断
->msm_mpm_enter_sleep() //进入sleep前配置MPM
->msm_cpu_pm_enter_sleep(cpu_level->mode, from_idle);
->execute[mode](from_idle); //调用msm_pm_power_collapse()等
->lpm_system_unprepare(system_state, cpu_index, from_idle);
->msm_rpm_exit_sleep(); //不屏蔽RPM发给AP的中断
->msm_mpm_exit_sleep(from_idle); //退出SLEEP时
->lpm_cpu_unprepare(system_state, cpu_index, from_idle);
1)lpm_suspend_enter()被调用的过程
被定义在 lpm_suspend_ops 里:
static const struct platform_suspend_ops lpm_suspend_ops =
{
enter = lpm_suspend_enter,
valid = suspend_valid_only_mem,
prepare_late = lpm_suspend_prepare,
wake = lpm_suspend_wake
}
suspend_set_o
[Linux kernel]系统sleep
最新推荐文章于 2024-07-10 12:13:21 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)