early suspend/late resume是Android在标准Linux上增加的一个suspend/resume机制,也就是说标准Linux kernel中是没有这个机制的。early suspend也就是常说的浅睡眠,当用户空间请求内核进入suspend时,early suspend首先被调用,例如常见的会让屏和tp停止工作。
首先来看early suspend相关接口函数应该如何来使用。
early suspend使用结构体struct early_suspend来描述(注:需要包含头文件<linux/earlysuspend.h>),定义如下:
定义好struct early_suspend之后,最后需要调用register_early_suspend、unregister_early_suspend去注册和注销early suspend,接口定义如下:
首先来看early suspend相关接口函数应该如何来使用。
early suspend使用结构体struct early_suspend来描述(注:需要包含头文件<linux/earlysuspend.h>),定义如下:
struct early_suspend {
#ifdef CONFIG_HAS_EARLYSUSPEND
struct list_head link;
int level;
void (*suspend)(struct early_suspend *h);
void (*resume)(struct early_suspend *h);
#endif
};
其中suspend和resume是需要用户自己定义的睡眠、唤醒接口函数。而level则是定义执行suspend、resume过程时的优先级,level值越小,suspend时则优先被调用,而resume则反过来,level值越大,则优先被调用。对于level值android默认定义了三个值:
enum {
EARLY_SUSPEND_LEVEL_BLANK_SCREEN = 50,
EARLY_SUSPEND_LEVEL_STOP_DRAWING = 100,
EARLY_SUSPEND_LEVEL_DISABLE_FB = 150,
};
定义好struct early_suspend之后,最后需要调用register_early_suspend、unregister_early_suspend去注册和注销early suspend,接口定义如下:
void register_early_suspend(struct early_suspend *handler);
void unregister_early_suspend(struct early_suspend *handler);