大家好,又见面了,我是你们的朋友全栈君。
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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/192086.html原文链接:https://javaforall.cn