zoukankan      html  css  js  c++  java
  • linux设备驱动中device_init_wakeup

    device_init_wakeup()

    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文件:

    struct dev_pm_info {
    pm_message_t power_state;
    unsigned can_wakeup:1;
    #ifdef CONFIG_PM
    unsigned should_wakeup:1;
    pm_message_t prev_state;
    void * saved_state;
    struct device * pm_parent;
    struct list_head entry;
    #endif
    };
    

    这些都是电源管理部分的核心数据结构,can_wakeup为1时 表明一个设备可以被唤醒,设备驱动为了支持linux中的电源管理,有责任调用device_init_wakeup()来初始化can_wakeup。而should_wakeup则是在设备的 电源状态发生变化时 被device_may_wakeup()用来测试,测试它该不该变化。

    can_wakeup,标识本设备是否具有唤醒能力。只有具备唤醒能力的设备,才会在sysfs中有一个power目录,用于提供所有的wakeup信息。

  • 相关阅读:
    THUWC2020 游记
    USACO14MAR The Lazy Cow(Gold)
    luogu P3768 简单的数学题
    2017/9/22模拟赛
    2017/9/20模拟赛
    2017/9/15模拟赛
    刷屏代码·稳 from林凯
    2017/9/13模拟赛
    【9018:1368】八数码
    2017/9/10模拟赛
  • 原文地址:https://www.cnblogs.com/linhaostudy/p/14524309.html
Copyright © 2011-2022 走看看