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. 基于pytorch实现HighWay Networks之Highway Networks详解

    (一)简述---承接上文---基于pytorch实现HighWay Networks之Train Deep Networks 上文已经介绍过Highway Netwotrks提出的目的就是解决深层神经 ...

  2. new File()

    首先 File 类是对文件系统的映射 并不是硬盘上真实的文件所以 new File("xxx.xxx") 只是在内存中创建File文件映射对象,而并不会在硬盘中创建文件 如果需要创 ...

  3. JSTL标签四种判断语句的用法

    一.条件运算符 ${user.gender==1?'男':'女'} 二.if() <c:if test="${2>1}">code..</c:if> ...

  4. 让ckplayer支持m3u8格式的播放

    一 ckplayer官网下载. 直接解压到本地,注意配置里面的默认文件路径,最好是放在服务器的根目录下,这样就可以去访问外链接的资源,官网也是这么推荐的,我这里就直接用node开启一个小服务器. 二 ...

  5. node上传文件并在网页中展示

    一.需求 1.当用户请求http://domain/start时,可以看到一个欢迎页面,页面上有一个文件上传的表单. 2.用户可以选择一个图片并提交表单,随后文件将被上传到http://domain/ ...

  6. Oracle中case用法总结

    --case语句的种类: .简单case语句 语法: case exp when comexp then returnvalue ... when comexp then returnvalue el ...

  7. python学习之路网络编程篇(第四篇)- 续

    Memcache简介 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速 ...

  8. block的那些事(从懵懂到使用)

    从大学开始自学iOS,在iOS岗位已经两年了,遇到传值等操作,代理和block二选一的话,以前我会毫不犹豫选择代理.久而久之,入职到大公司之后,发现处处是block的天地,才慢慢的了解block并爱上 ...

  9. Android简易实战教程--第五十一话《使用Handler实现增加、减少、暂停计数》

    转载博客请注明出处:道龙的博客 之前,写过一篇使用异步任务AysncTask实现倒计时的小案例,喜欢的话可以参考博客:Android简易实战教程--第三十三话< AsyncTask异步倒计时&g ...

  10. mysql 常见语句

    事务 默认是开启了autocommit,可以通过show variables like 'autocommit';查看. 如果临时需要取消autocommit,可以通过START TRANSACTIO ...