device_init_wakeup()

本文深入探讨了Linux设备模型中用于控制唤醒事件的can_wakeup和should_wakeup两个核心概念,解释了如何通过device_init_wakeup()函数进行初始化,并详细介绍了设备驱动在实现Linux电源管理时的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


static inline int device_init_wakeup(struct device *dev, bool val)
{
    device_set_wakeup_capable(dev, val);   //设置设备能不能被唤醒
    device_set_wakeup_enable(dev, val);     //设置设备使不使用唤醒;
    return 0;

}

// 设备模型中的 所有设备 都有两个标志来控制 唤醒事件(可使得设备或系统退出低功耗状态)。

static inline void device_set_wakeup_capable(struct device *dev, bool capable)
{
    dev->power. can_wakeup = capable;
}


static inline int device_set_wakeup_enable(struct device *dev, bool enable)
{
    dev->power.should_wakeup = enable;
    return 0;
}



要认识device_init_wakeup(),首先需要知道两个概念:can_wakeup和should_wakeup。这两个家伙从哪里来的?看struct device结构体,里面有一个成员struct dev_pm_info power,来看一看struct dev_pm_info,来自include/linux/pm.h文件:

  1. 265 struct dev_pm_info {    
  2. 266     pm_message_t            power_state;    
  3. 267     unsigned                can_wakeup:1;    
  4. 268 #ifdef  CONFIG_PM    
  5. 269         unsigned                should_wakeup:1;    
  6. 270     pm_message_t            prev_state;    
  7. 271     void                    * saved_state;    
  8. 272     struct device           * pm_parent;    
  9. 273     struct list_head        entry;    
  10. 274 #endif    
  11. 275 };    


 

这些都是电源管理部分的核心数据结构,显然,我们没有必要深入研究,只是需要知道,can_wakeup为1时 表明一个设备可以被唤醒,设备驱动为了支持Linux中的电源管理,有责任调用device_init_wakeup()来初始化can_wakeup。而should_wakeup则是在设备的 电源状态发生变化时 被device_may_wakeup()用来测试,测试它该不该变化

因此,can_wakeup表明的是一种能力,should_wakeup表明的是有了这种能力以后去不去做某件事。













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值