struct wakeup_source *ws); 3: extern void __pm_relax(struct wakeup_source *ws); 4: extern void __pm_wakeup_event...且正在处理,因此不允许系统suspend(stay awake); __pm_relax,通知PM core,ws没有正在处理的wakeup event,允许系统suspend(relax); __pm_wakeup_event...pm_stay_awake(struct device *dev); 8: extern void pm_relax(struct device *dev); 9: extern void pm_wakeup_event...device_init_wakeup,设置dev的can_wakeup标志,若是enable,同时调用device_wakeup_enable使能wakeup功能; pm_stay_awake、pm_relax、pm_wakeup_event...5.3.5 pm_wakeup_event pm_wakeup_event是pm_stay_awake和pm_relax的组合版,在上报event时,指定一个timeout时间,timeout后,自动relax
timeout_ns) { u64 timeout_ms = timeout_ns + NSEC_PER_MSEC - 1; do_div(timeout_ms, NSEC_PER_MSEC); __pm_wakeup_event...如果该wakelock有超时时间,则调用__pm_wakeup_event函数上报一个timeout_ns的wakeup events。
gpio_keys_gpio_work_func(struct work_struct *work); 处理gpio事件函数,用来上报input事件,并判断按键中断源,如果是的话,则调用pm_relax(),通知pm子系统唤醒工作结束 void pm_wakeup_event...//在中断出口调用,告知结束唤醒 在中断前调用pm_stay_awake(),中断结束时再调用一次pm_relax()函数. 4.6 如果想延时唤醒,也可以使用另一种唤醒休眠,则只需要一个函数实现: pm_wakeup_event...退出时也调用一次pm_relax(bdata->input->dev.parent); 模式2-只需一个函数实现: 进入中断时调用pm_wakeup_event(struct device *dev,...struct mykey_button, work); //通过work成员变量找到父结构体 if(data->wakeup) { pm_wakeup_event
sysfs文件的的功能就是: 写wake_lock(以wakelock name和timeout时间为参数),相当于以wakeup source为参数调用__pm_stay_awake(或者__pm_wakeup_event...NSEC_PER_MSEC - 1; 35: 36: do_div(timeout_ms, NSEC_PER_MSEC); 37: __pm_wakeup_event
pm_wakeup_event(唤醒wakeup source, 在一段时间之后取消唤醒源) void __pm_wakeup_event(struct wakeup_source *ws, unsigned
. */ if (pm_runtime_barrier(dev) && device_may_wakeup(dev)) pm_wakeup_event(dev, 0); if (pm_wakeup_pending
领取专属 10元无门槛券
手把手带您无忧上云