SYSTEM_SLEEP_PM_OPS和dev_pm_ops的定义:

[cpp] view plain copy

  1. #define SET_SYSTEM_SLEEP_PM_OPS(suspend_fn, resume_fn) \
  2. .suspend = suspend_fn, \
  3. .resume = resume_fn, \
  4. .freeze = suspend_fn, \
  5. .thaw = resume_fn, \
  6. .poweroff = suspend_fn, \
  7. .restore = resume_fn,
  8. struct dev_pm_ops {
  9. int (*prepare)(struct device *dev);
  10. void (*complete)(struct device *dev);
  11. int (*suspend)(struct device *dev);
  12. int (*resume)(struct device *dev);
  13. int (*freeze)(struct device *dev);
  14. int (*thaw)(struct device *dev);
  15. int (*poweroff)(struct device *dev);
  16. int (*restore)(struct device *dev);
  17. int (*suspend_noirq)(struct device *dev);
  18. int (*resume_noirq)(struct device *dev);
  19. int (*freeze_noirq)(struct device *dev);
  20. int (*thaw_noirq)(struct device *dev);
  21. int (*poweroff_noirq)(struct device *dev);
  22. int (*restore_noirq)(struct device *dev);
  23. int (*runtime_suspend)(struct device *dev);
  24. int (*runtime_resume)(struct device *dev);
  25. int (*runtime_idle)(struct device *dev);
  26. };

struct platform_driver中的driver成员也有一个dev_pm_ops

[cpp] view plain copy

  1. struct platform_driver {
  2. int (*probe)(struct platform_device *);
  3. int (*remove)(struct platform_device *);
  4. void (*shutdown)(struct platform_device *);
  5. int (*suspend)(struct platform_device *, pm_message_t state);
  6. int (*resume)(struct platform_device *);
  7. struct device_driver driver;
  8. const struct platform_device_id *id_table;
  9. };
  10. struct device_driver {
  11. const char      *name;
  12. struct bus_type     *bus;
  13. struct module       *owner;
  14. const char      *mod_name;  /* used for built-in modules */
  15. bool suppress_bind_attrs;   /* disables bind/unbind via sysfs */
  16. const struct of_device_id   *of_match_table;
  17. int (*probe) (struct device *dev);
  18. int (*remove) (struct device *dev);
  19. void (*shutdown) (struct device *dev);
  20. int (*suspend) (struct device *dev, pm_message_t state);
  21. int (*resume) (struct device *dev);
  22. const struct attribute_group **groups;
  23. const struct dev_pm_ops *pm;
  24. struct driver_private *p;
  25. };

那么可以将宏SIMPLE_DEV_PM_OPS使用到struct platform_driver定义中,例如gpio-keys.c中:

[cpp] view plain copy

  1. static SIMPLE_DEV_PM_OPS(gpio_keys_pm_ops, gpio_keys_suspend, gpio_keys_resume);
  2. static struct platform_driver gpio_keys_device_driver = {
  3. .probe      = gpio_keys_probe,
  4. .remove     = __devexit_p(gpio_keys_remove),
  5. .driver     = {
  6. .name   = "gpio-keys",
  7. .owner  = THIS_MODULE,
  8. .pm = &gpio_keys_pm_ops,
  9. .of_match_table = gpio_keys_of_match,
  10. }
  11. };

SIMPLE_DEV_PM_OPS宏的更多相关文章

  1. 1.Linux电源管理-休眠与唤醒

    1.休眠方式 在内核中,休眠方式有很多种,可以通过下面命令查看 # cat /sys/power/state //来得到内核支持哪几种休眠方式. 常用的休眠方式有freeze,standby, mem ...

  2. 1.Linux电源管理-休眠与唤醒【转】

    转自:https://www.cnblogs.com/lifexy/p/9629699.html 1.休眠方式 在内核中,休眠方式有很多种,可以通过下面命令查看 # cat /sys/power/st ...

  3. Visual Studio 宏的高级用法

    因为自 Visual Studio 2012 开始,微软已经取消了对宏的支持,所以本篇文章所述内容只适用于 Visual Studio 2010 或更早期版本的 VS. 在上一篇中,我已经介绍了如何编 ...

  4. VC 中与字符串相关的宏 _T、TEXT,_TEXT、L 的作用

    CSDN原博文:http://blog.csdn.net/houkai363/article/details/8134787 遇到了:不能将参数 1 从“const char [5]”转换为“LPCT ...

  5. 【转】linux内核中writesb(), writesw(), writesl() 宏函数

    writesb(), writesw(), writesl() 宏函数 功能 : writesb()    I/O 上写入 8 位数据流数据 (1字节) writesw()   I/O  上写入 16 ...

  6. c++宏定义命令

    在程序开始以#开头的命令,他们是预编译命令.有三类预编译命令:宏定义命令.文件包含命令.条件编译命令:今天聊聊宏定义: 宏定义命令将一个标识符定义为一个字符串,源程序中的该标识符均以指定的字符串来代替 ...

  7. dll导入导出宏定义,出现“不允许 dllimport 函数 的定义”的问题分析

    建立dll项目后,在头文件中,定义API宏 #ifndef API_S_H #define API_S_H ...... #ifndef DLL_S_20160424 #define API _dec ...

  8. VC++/MFC 最常用宏和指令

    1.#include指令  包含指定的文件,最基本的最熟悉的指令,编程中不得不用,包含库文件用双尖括号,包含自定义头文件用双引号. 2.#define指令   预定义,通常用它来定义常量(包括无参量与 ...

  9. [Sass]混合宏的参数

    [Sass]混合宏的参数--传一个不带值的参数 Sass 的混合宏有一个强大的功能,可以传参,那么在 Sass 中传参主要有以下几种情形: A) 传一个不带值的参数 在混合宏中,可以传一个不带任何值的 ...

随机推荐

  1. 文本分类学习 (五) 机器学习SVM的前奏-特征提取(卡方检验续集)

    前言: 上一篇比较详细的介绍了卡方检验和卡方分布.这篇我们就实际操刀,找到一些训练集,正所谓纸上得来终觉浅,绝知此事要躬行.然而我在躬行的时候,发现了卡方检验对于文本分类来说应该把公式再变形一般,那样 ...

  2. vue-cli2.9.1如何自动打开浏览器及实现手机调试

    在vue-cli2.9.1以前我们运行 "npm run dev" 程序会自动打开浏览器进行调试,而且在手机浏览器输入 "IP地址:8080" 能实现在手机端的 ...

  3. Delphi7通过SendMessage来实现默认打印机的切换

    具体代码 procedure SetDefaultPrinter(NewDefPrinter: string); var ResStr: array[0..255] of Char; begin St ...

  4. Java 反射 Method threw 'java.lang.InstantiationException' exception.

    查看这个InstantiationException:异常的api所说的是: 当应用程序试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该 ...

  5. 数据结构之Trie树

    1. 概述 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树. Trie一词来自retrieve,发音为/tr ...

  6. javascrpt_数组学习

    1.构造函数 var arr = new Array(); Array 构造函数有一个很大的缺陷,就是不同的参数,会导致行为不一致. 因此,不建议使用它生成新数组,直接使用字面量是最好的做法. 2.静 ...

  7. mongo数据更新(修改器)

    数据更新简单的做法是删除重新插入update()函数语法 db.集合.update(更新条件,新的对象数据(更新操作符),upsert,multi)upsert如果要更新的数据不存在,则增加一条新的内 ...

  8. public、protected、default、private区别

    public.protected.default.private: 修饰符 本类 同包 子类 其他 public √ √ √ √ protected √ √ √ × default √ √ × × p ...

  9. spring web项目下,判断项目是否启动完成

    本文同时发布于见鬼网:https://faceghost.com/article/483341 概述:spring 加载完成后,我们有时候会做一些初始化工作,如加载一些缓存,DB,等,这里采用实现Se ...

  10. Android项目实战(四十五):Usb转串口通讯(CH34xUARTDriver)

    需求为:手机usb接口插入一个硬件,从硬件上获取数据 例如:手机usb插入硬件A,A通过蓝牙通讯获取设备a.b的数据,作为中转站(可以做些数据处理)将数据(设备a.b产生的)传给手机程序. 设备A也可 ...