linux 通知链(notifier chain)

        最近在公司瑞芯微平台的触控终端上加了一颗雷达芯片作为距离传感器实现接近唤醒功能(即当有人靠近时实现自动亮屏),但是在 platform 驱动中注册了 resume 和 suspend 函数后发现当系统挂起或者是唤醒的时候并不能调用这两个函数,后查阅相关资料发现,瑞芯微的系统并不会让系统进入到深度休眠所以系统无法调用到 suspend 和 resume 函数;后发现可以通过 linux 的通知链机制进行处理;

static int radar_power_event(struct notifier_block *this, unsigned long event,
			   void *ptr)
{
    int blank_mode;
    struct fb_event *fbEvent = ptr;
    // printk(KERN_INFO "radar_power_event is %ld....\n",event);
	switch (event) {
        case FB_EVENT_BLANK:
            blank_mode = *((int *)fbEvent->data);
            if (blank_mode == FB_BLANK_UNBLANK)
            {
                radar_platform_resume();            //resume 函数
            }
            break;
        case FB_EARLY_EVENT_BLANK:
            blank_mode = *((int *)fbEvent->data);
            if (blank_mode != FB_BLANK_UNBLANK)
            {
                radar_platform_suspend();            // su
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值