怎样添加earlysuspend到一个普通驱动中

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值