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. UDA机器学习基础—误差原因

    1.模型误差产生的原因 (1)模型无法表示基本数据的复杂度,而造成偏差. (2)因模型对训练它所用到的数据过度敏感造成的方差. 2.由偏差造成的误差--准确率和欠拟合 有足够数据表示模型,但是由于模型 ...

  2. c语言的第四次作业

    (一)改错题 输出三角形的面积和周长,输入三角形的三条边a.b.c,如果能构成一个三角形,输出面积area和周长perimeter(保留2位小数):否则,输出"These sides do ...

  3. 以太坊区块链Java(EthereumJ)学习笔记:概述

    本系列文章介绍以太坊区块链基于Java语言的解决方案.通过介绍EthereumJ定义的主要模块和Class,希望为大家学习和使用EthereumJ提供一些帮助. 整体架构 以太坊的Java解决方案主要 ...

  4. js 数字前面自动补零

    num传入的数字,n需要的字符长度        function PrefixInteger(num, n) {            return (Array(n).join(0) + num) ...

  5. 索引法则--IS NULL, IS NOT NULL 也无法使用索引

    Mysql 系列文章主页 =============== 1 数据准备 1.1 建表 DROP TABLE IF EXISTS staff; CREATE TABLE IF NOT EXISTS st ...

  6. java.lang.NumberFormatException: For input string: " "

    原因:这个异常是说,在将字符串""转换为number的时候格式化错误.额,很简单的异常,以前我是写个方法,然后遍历对比不正确的数字或者用正则表达式之类的.现在发现一个很漂亮的方法, ...

  7. maven generating project in batch mode hang

    最新版已经自己就设置了 设置maven不要从远程服务器上获取catalog,增加参数-DarchetypeCatalog=internal 如何在idea里设置maven参数:

  8. Eclipse 一直不停 building workspace完美解决总结

    一.产生这个问题的原因多种1.自动升级 2.未正确关闭  3.maven下载lib挂起 等.. 二.解决总结(1).解决方法        方法1.修改eclipse启动文件 eclipse.ini ...

  9. javascript 中如何判断是否是JSON格式的字符串

    var stringToJson = function(value){ try{ eval('('+value+')'); return angular.fromJson(value); } catc ...

  10. Java内存泄漏分析系列之五:常见的Thread Dump日志案例分析

    原文地址:http://www.javatang.com 症状及解决方案 下面列出几种常见的症状即对应的解决方案: CPU占用率很高,响应很慢 按照<Java内存泄漏分析系列之一:使用jstac ...