最近在公司瑞芯微平台的触控终端上加了一颗雷达芯片作为距离传感器实现接近唤醒功能(即当有人靠近时实现自动亮屏),但是在 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