睡眠过程:
入口:用户空间的代码通过向/sys/power/state文件节点写入特定的字符串(on/mem)来请求系统进入特定的状态,
过程:
1) 向/sys/power/state文件写入时会调用到state_store函数:
state() {
#ifdef CONFIG_EARLYSUSPEND
request_suspend_state(state)
#else
pm_suspend(state);
#endif
}
如果配置了early_suspend选项,则调用request_suspend_state去执行android的suspend过程
2) request_suspend_state会调用queue_up_early_suspend_work函数向early_suspend_wq工作队列中提交一个名叫early_suspend_work的工作,其对应的工作函数为
static void early_suspend(struct work_struct *work)
{
list_for_each_entry(pos, &early_suspend_handlers, link) {
if (pos->suspend != NULL)
pos->suspend(pos);
}
queue_work(suspend_wq, &suspend_work);
}
首先会调用驱动注册的early_suspend的回调函数,一般背光和LCD等