Power Management 接口
接口實(shí)現(xiàn)
/include/linux/pm.h
/drivers/base/power/main.c
主要功能: 對下,定義
Device PM 相關(guān)的回調(diào)函數(shù),讓各個 Driver 實(shí)現(xiàn);對上,實(shí)現(xiàn)統(tǒng)一的 PM 操作函數(shù),供 PM 核心邏輯調(diào)用。
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 并不復(fù)雜,因?yàn)?PM Core
要做的就是在特定的電源管理階段,調(diào)用相應(yīng)的 callbacks,例如在 suspend/resume 的過程中,PM Core 會依次調(diào)用
prepare
— > suspend
— > suspend_late
— > suspend_noirq
wakeup
— > resume_noirq
— > resume_early
— > resume
- > complete
但由于這些 callbacks 需要由具體的設(shè)備 Driver 實(shí)現(xiàn),這就要求驅(qū)動工程師在設(shè)計(jì)每個 Driver
時,清晰的知道這些 callbacks 的使用場景、是否需要實(shí)現(xiàn)、怎么實(shí)現(xiàn),這才是 struct dev_pm_ops 的復(fù)雜之處。
Linux kernel 對 struct dev_pm_ops 的注釋已經(jīng)非常詳細(xì)了,但要弄清楚每個
callback 的使用場景、背后的思考,并不是一件容易的事情。
-
嵌入式
+關(guān)注
關(guān)注
5082文章
19126瀏覽量
305198 -
接口
+關(guān)注
關(guān)注
33文章
8598瀏覽量
151157 -
Linux
+關(guān)注
關(guān)注
87文章
11304瀏覽量
209499 -
Power
+關(guān)注
關(guān)注
1文章
499瀏覽量
67764 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4331瀏覽量
62618
發(fā)布評論請先 登錄
相關(guān)推薦
評論