Power Management接口实现主要功能

描述

Power Management 接口

接口实现

/include/linux/pm.h
/drivers/base/power/main.c

主要功能: 对下,定义
Device PM 相关的回调函数,让各个 Driver 实现;对上,实现统一的 PM 操作函数,供 PM 核心逻辑调用。

struct dev_pm_ops {
 int (*prepare)(struct device *dev);
 void (*complete)(struct device *dev);
 int (*suspend)(struct device *dev);
 int (*resume)(struct device *dev);
 int (*freeze)(struct device *dev);
 int (*thaw)(struct device *dev);
 int (*poweroff)(struct device *dev);
 int (*restore)(struct device *dev);
 int (*suspend_late)(struct device *dev);
 int (*resume_early)(struct device *dev);
 int (*freeze_late)(struct device *dev);
 int (*thaw_early)(struct device *dev);
 int (*poweroff_late)(struct device *dev);
 int (*restore_early)(struct device *dev);
 int (*suspend_noirq)(struct device *dev);
 int (*resume_noirq)(struct device *dev);
 int (*freeze_noirq)(struct device *dev);
 int (*thaw_noirq)(struct device *dev);
 int (*poweroff_noirq)(struct device *dev);
 int (*restore_noirq)(struct device *dev);
 int (*runtime_suspend)(struct device *dev);
 int (*runtime_resume)(struct device *dev);
 int (*runtime_idle)(struct device *dev);
};

从 Linux PM Core 的角度来说,这些 callbacks 并不复杂,因为 PM Core
要做的就是在特定的电源管理阶段,调用相应的 callbacks,例如在 suspend/resume 的过程中,PM Core 会依次调用

prepare 
 — > suspend
   — > suspend_late
     — > suspend_noirq
     
       wakeup
       
         — > resume_noirq
           — > resume_early
             — > resume
               - > complete

但由于这些 callbacks 需要由具体的设备 Driver 实现,这就要求驱动工程师在设计每个 Driver
时,清晰的知道这些 callbacks 的使用场景、是否需要实现、怎么实现,这才是 struct dev_pm_ops 的复杂之处。

Linux kernel 对 struct dev_pm_ops 的注释已经非常详细了,但要弄清楚每个
callback 的使用场景、背后的思考,并不是一件容易的事情。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分