1.添加头文件
#ifdef CONFIG_HAS_EARLYSUSPEND
#include <linux/earlysuspend.h>
#endif
2. 在驱动结构体中添加early_suspend结构体
#ifdef CONFIG_HAS_EARLYSUSPEND
struct early_suspend early_suspend;
#endif /* CONFIG_HAS_EARLYSUSPEND */
3. 在驱动probe结构函数中,注册相应early_suspend结构体
#ifdef CONFIG_HAS_EARLYSUSPEND1
/*
* The higher the level, the earlier it resume,
* and the later it suspend.
*/
dev_info(&client->dev, "%s register_early_suspend\n", __func__);
par->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN + 1;
par->early_suspend.suspend = ssd1307fb_earlysuspend;
par->early_suspend.resume = ssd1307fb_earlyresume;
register_early_suspend(&par->early_suspend);
#endif /* CONFIG_HAS_EARLYSUSPEND */
4. 在驱动remove函数中取消earlay_suspend结构体的注册
#ifdef CONFIG_HAS_EARLYSUSPEND
unregister_early_suspend(&par->early_suspend);
#endif /* CONFIG_HAS_EARLYSUSPEND */
5. 定义相关suspend 和 resume 函数
#ifdef CONFIG_HAS_EARLYSUSPEND
void ssd1307fb_earlysuspend(struct early_suspend *h)
{
printk(KERN_ACCT "%s: suspend bklight\n", __func__);
ssd1305fb_full_screen(global_par, 0);
gpio_set_value(global_par->bklight, 0);
return;
}
void ssd1307fb_earlyresume(struct early_suspend *h)
{
printk(KERN_ACCT, "%s: resume bklight\n", __func__);
ssd1305fb_update_display(global_par);
gpio_set_value(global_par->bklight, 1);
return;
}
#endif /* CONFIG_HAS_EARLYSUSPEND */
6. 在系统驱动结构体中设置没有使用的suspend和resume的函数接口
#ifndef CONFIG_HAS_EARLYSUSPEND
.suspend = xxxx_suspend,
.resume = xxxx_resume,
#endif