精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何正確地使用Regulator

原創 精選
開發 前端
Regulator幾乎是每一位驅動開發者都會使用到的模塊,在處理過幾起與Regulator相關的bug后,我終于弄明白了。接下來我來分享下,到底該如何控制Regulator?

作者 | 趙青窕

審校 | 孫淑娟

Regulator幾乎是每一位驅動開發者都會使用到的模塊,在處理過幾起與Regulator相關的bug后,我終于弄明白了。接下來我來分享下,到底該如何控制Regulator?

本文將從以下五個方面來闡述內核中Regulator該如何控制:

  • 什么是Regulator
  • 設備樹配置
  • 核心API接口
  • 驅動控制方法
  • 調試方法

(Lk和uefi階段的上電控制不屬于本文的范疇。)

1.什么是Regulator

一般來說,soc都會有配套的有限數量的pmu,而Regulator就是這個pmu的抽象,直白來說就是我們通過控制Regulator,進而控制了pmu,從而達到對電的控制。

下圖是內核中Regulator的整體框架圖,由三部分組成,分別提供了供其他驅動使用的API接口和sysfs口,并可以控制硬件PMIC等這類器件的register,在本文中,將會介紹前兩部分。

2.設備樹配置

常用的設備樹配置主要涉及4個部分,共5個屬性,分別是配置對應的Regulator,設備工作需要的電壓范圍,設置always-on屬性,設置boot-on屬性。

下面是一個典型的設備樹配置,供大家參考。

xxx {
test-avdd-supply = <&L5A>;
test-avdd-min-uv = <3000000>;
test-avdd-max-uv = <3000000>;
regulator-always-on;
regulator-boot-on;
}

test-avdd-supply

這個屬性是用來指明設備xxx使用的是哪一個Regulator,該屬性設置時,需要先從原理圖中獲取對應的供電信息,然后轉化到軟件上的標識(通常原理圖中的標識和平臺代碼dts中的相同,很容易識別到),從而配置該屬性;

test-avdd-min-uv和test-avdd-max-uv

這兩個屬性是用來指明該Regulator對應的電壓范圍,這個范圍不能隨便設置,因為pmu有它自身的驅動能力范圍。驅動能力的范圍可以通過以下方式獲取:

在平臺代碼的設備樹中查找,上面設備樹配置中,我采用了L5A,那我就在平臺的設備樹配置中找L5A的配置,如下樣例可以看出L5A的驅動范圍是在1.65V到3.05V之間。

L5A: pmxxx_l5: regulator-l5 {
regulator-min-microvolt = <1650000>;
regulator-max-microvolt = <3050000>;
qcom,init-voltage = <2960000>;
status = “okay”;
}

我們雖然知道了驅動能力范圍,但并不意味著我們就可以通過配置Regulator(后面會說明如何配置),設置這個范圍內的任意電壓值。通過查看Regulator或者pmu的手冊都可以看出,每一個Regulator只能取這個范圍內的離散值。

regulator-always-on

該屬性有兩個含義,第一層含義就是設置系統啟動的時候,進行相應Regulator的上電操作,下圖基于MTK平臺的代碼就是對應的上電操作。

第二層含義就是禁止對該Regulator進行掉電的操作,如下圖的代碼所示,rdev->constraints->always_on在系統啟動的時候會進行設置,該變量代表了設備樹中是否設置了regulator-always-on屬性,當設置該屬性時,對應的rdev->constraints->always_on = 1,則函數regulator_do_disable就不會執行,從而該Regulator無法掉電。

regulator-boot-on

該屬性實際上同regulator-always-on屬性的第一個含義相同,但我個人建議在配置需要開機就上電的Regulator的時候,即使有regulator-always-on屬性,最好同時加上regulator-boot-on屬性,以防有些平臺regulator-always-on屬性沒有第一個含義的情況。

3.核心API接口

首先給大家介紹一下Regulator相關的API函數。

struct regulator *regulator_get(struct device *dev, const char *id)

該函數用來獲取對應的Regulator,對應到本文中的設備xxx,其函數調用方法時regulator_get(對應xxx的struct device *dev,“test-avdd”),注意該函數中第2個參數是test-avdd,但設備樹中是test-avdd-supply,之所以設備樹和函數傳參不相同的原因是下圖中紅色方框標注的代碼導致的。

int regulator_is_enabled(struct regulator *regulator)

該函數用來判斷對應的regulator是否已經enable。

當返回0表示對應Regulator處于disable狀態。

如果配置了always_on,該函數直接返回1,表示相應的Regulator已經enabled,否則會去讀取相應的寄存器來獲取相應Regulator的使能狀態寄存器。

該函數有著很重要的作用,但也是大家容易忽略的函數,后面會給大家展示其重要性。

int regulator_set_volatage(struct regulator *regulator, int  min_uV,  int max_uV)

該函數中的第二個參數和第三個參數可以相同,也可以不同。當不同的時候,就是設置的電壓范圍;當相同的時候,就是設置的電壓值。

只有在設置值和當前值不一樣,且設置的數據合理,才會進行范圍設置。

  • 設置范圍

當設置的范圍要超出該Regulator的驅動能力范圍時,且第三個參數大于第二個參數,這種情況下,regulator_set_voltage會內部把范圍縮小到該Regulator能驅動的最大范圍。

同時用于將電壓設置為min_uV和max_uV范圍內,和min_uV最接近的電壓。

  • 設置值

如下面的代碼所示,其目的是對應的電壓為2.8V,前面有介紹過,每一個Regulator只能取一定范圍內的離散值,當2.8V不屬于這些離散值中的任意值時,就會設置失敗。

regulator_set_voltage(regulator, 2800000, 2800000)

int regulator_enable(struct regulator *regulator)

該函數用來enable對應的Regulator,只有enable后,才能真正的供上電。

如果配置了always_on屬性,該函數直接返回0,其他情況下,需要根據實際情況來判斷,然后執行相應的操作,下圖是enable時,具體的執行函數。

從上圖可以看出,調用regulator_enable時,只有在use_count為0的情況下才會做enable動作,且use_count會自加1。use_count是比較重要的變量,在regulator_disable時也會用到,接下來我們就看以下regulator_disable。

int regulator_disable(struct regulator *regulator)

該函數用來disable對應的Regulator。

如果配置了always_on屬性,該函數直接返回0。

regulator_disable函數內部會調用_regulator_disable函數,下圖是_regulator_disable的實現代碼,從圖中可以看出,當use_count不為1時,不會執行disable動作。

還有很多與Regulator相關的API函數,如regulator_put,regulator_set_load等,但常用的就是上面的5個函數。

4. 驅動控制方法

在驅動中需要按照下面的步驟來執行(針對一個Regulator只給一個設備供電的情況):

  • 通過regulator_get獲取對應的Regulator
  • 通過regulator_set_voltage設置電壓
  • 通過regulator_is_enabled來判斷當前Regulator的狀態
  • 根據上一步的結果,如果未enable,則調用 regulator_enable,否則不需要調用regulator_enable
  • regulator_disable

在實際工作中,我遇到過這樣的情景,沒有使用regulator_is_enabled進行條件判斷,但無意中調用了兩次regulator_enable,這樣就會導致use_count = 2,在regulator_disable時,由于use_count != 1,從而沒有進行disable動作,導致最后發現相應的這路電無法掉電。

下面是一個簡單的例子:

//step1: setting the regulator
rdev = regulator_get(dev, " test-avdd ");
regulator_set_voltage(rdev,28000000, 28000000);

//step2: judge enable or not and enable it
if (!regulator_is_enabled(rdev)) {
ret = regulator_enable(rdev);
if (ret != 0)
printk ("%s:regulator_enable fail, ret:%d\n",__func__, ret);
}

//step3: disable regulator
if (regulator_is_enabled(rdev)) {
ret = regulator_disable(rdev);
if (ret != 0)
printk("%s:regulator_disable fail, ret:%d\n",__func__, ret);
}
}

還有一個驅動是在收到應用層的命令后,才進行regulator的enable或者disable的情況下,建議使用regulator_is_enable來進行判斷,這樣就可以有效避免上層多次發送enable命令導致use_count增加的情況。

當某一個Regulator給多個設備供電時,需要考慮多個設備的情況,就不建議使用regulator_is_enabled,因此多設備通過一路Regulator控制時,會比較復雜,比如設備A已經enable了某一路Regulator,某一時刻設備B也需要enable,但由于通過regulator_is_enabled發現已經enable時,從而不進行enable操作,但之后的某一時刻,設備A需要進行掉電操作,因為之前regulator_enable只調用了一次,那use_count = 1,那此時設備A就可以regulator_disable成功,但這個時候設備B不希望掉電,但設備A把電掉了,導致設備B就異常了,因此同一路電給多個設備供電時,不建議使用regulator_is_enable。針對多種設備,最簡單的處理方式就是使用regulator-always-on屬性。

5.調試方法

此處我主要給大家介紹下sys節點的調試方式。節點的路徑是/sys/kernel/debug/regulator/,在這個路徑下面,大家會看到很多Regulator,如下圖所示:

從上圖我們可以看出,根據名稱就可以找到我們需要的Regulator,比如從原理圖中看出來我們使用的是ldoe9,那么就可以進入路徑/sys/kernel/debug/regulator/18200000.rsc:rpmh-regulator-ldoe9-pm6150a_l9,在該路徑下可以查看對應的open_count(cat open_count)或者進行enable或者disable控制(實際上就是echo 1或者0到對應的節點即可)。

至此,Regulator的使用以及調試就給大家介紹完了,上面的介紹比較簡單,屬于入門級別的內容,但這些內容已經足夠大部分驅動的使用進行調試了,希望大家都能通過這篇文章,真正了解到Regulator該如何使用。

作者介紹

趙青窕,51CTO社區編輯,從事多年驅動開發。

責任編輯:華軒 來源: 51CTO
相關推薦

2015-10-28 10:29:09

數據中心運輸硬驅

2011-05-13 09:01:33

2022-08-02 09:56:47

入口文件代碼

2025-02-18 09:00:00

JOINMySQL查詢

2020-08-19 14:22:09

程序員測試互聯網

2025-05-06 00:12:10

2022-09-16 14:13:50

人工智能樓宇自動化

2016-03-01 17:48:32

WLAN控制器網絡管理

2015-02-12 09:53:50

云存儲中小企業IT建設

2015-03-23 11:42:54

2021-11-05 15:10:28

UbuntuLinuxJAVA_HOME

2024-04-02 11:38:31

模型訓練

2023-04-06 19:06:28

ChatGPT開發摔倒識別

2020-12-22 13:50:56

物聯網5G大數據

2020-06-01 11:01:28

智慧城市物聯網技術

2019-08-23 09:27:25

機器學習NLP誤差分析

2019-07-31 15:14:40

Python數據科學可視化

2023-05-10 11:34:06

springboot日志服務器

2021-03-08 07:46:53

Git開源控制系統

2012-05-10 10:20:04

memcached緩存
點贊
收藏

51CTO技術棧公眾號

亚洲精品成人无码熟妇在线| www.好吊操| 国产一区二区三区四区视频 | www.99久久热国产日韩欧美.com| 人人爽人人av| 美女尤物在线视频| 国产亚洲精品资源在线26u| 91精品中国老女人| 欧美精品一二三四区| 91精品综合久久久久久久久久久| 精品成人一区二区三区| 性生生活大片免费看视频| a√中文在线观看| 成人欧美一区二区三区1314| 久久久久久九九九九| 国产毛片毛片毛片毛片毛片| 性一交一乱一区二区洋洋av| 欧美日本亚洲视频| 欧美成人久久久免费播放| 极品尤物一区| 欧美一区二区人人喊爽| 亚洲国产精品毛片av不卡在线| 成人ww免费完整版在线观看| 国产欧美日韩久久| 精品一区国产| 丰满人妻一区二区三区无码av| 日韩主播视频在线| 欧美洲成人男女午夜视频| 精品欧美一区二区久久久久| 久久美女视频| 国产亚洲欧洲高清| 国产呦小j女精品视频| 中文一区二区三区四区| 777午夜精品免费视频| 欧美私人情侣网站| 在线看的毛片| 精品福利视频导航| 婷婷无套内射影院| 爱情岛亚洲播放路线| 亚洲黄色片在线观看| 亚洲自拍偷拍一区二区三区| 香蕉视频网站在线观看| 久久精品视频在线免费观看| 久久久久久久久久久久久久一区| 亚洲精品无遮挡| 成人在线一区二区三区| 国产精品久久久久久免费观看| av一级黄色片| 国产精品18久久久久久久久久久久 | 欧美一区二区三区精美影视| 婷婷色在线观看| 不卡影院免费观看| 狠狠色综合网站久久久久久久| 亚洲乱码精品久久久久..| 国产精品18久久久久久vr| 91香蕉视频在线下载| www.久久久久久| 国产成人午夜电影网| 成人自拍偷拍| 天天操天天干天天操| a美女胸又www黄视频久久| 国产女主播一区二区| 亚洲av成人精品毛片| av网站一区二区三区| 噜噜噜噜噜久久久久久91| 头脑特工队2在线播放| 久久久另类综合| 亚洲不卡中文字幕| 中文字幕在线免费| 亚洲免费观看高清在线观看| 免费网站永久免费观看| 亚洲国产成人二区| 欧美亚洲动漫精品| 亚洲综合伊人久久| 欧美电影完整版在线观看| 日韩福利电影在线| 日韩一区和二区| 一级黄色电影片| 亚洲最好看的视频| 日韩在线中文字幕| 久久久久亚洲天堂| 美女精品一区| 成人黄色短视频在线观看| 黄色美女一级片| 国产午夜精品一区二区三区视频| 一区二区日本| 黄视频免费在线看| 欧美少妇bbb| 亚洲妇女无套内射精| 亚洲免费福利一区| www日韩中文字幕在线看| 国产一级一片免费播放| 日韩国产欧美一区二区三区| 51精品国产人成在线观看| 日本福利片高清在线观看| 中文字幕在线一区免费| 人妻无码久久一区二区三区免费| 黄色精品视频| 亚洲аv电影天堂网| 一级在线观看视频| 一区二区毛片| 亚洲综合日韩在线| 黄网在线观看| 亚洲成人av福利| 潘金莲激情呻吟欲求不满视频| 久久香蕉精品香蕉| 久久香蕉国产线看观看网| 欧美一级特黄视频| 国产精品99久久久| 午夜免费电影一区在线观看| 美女的胸无遮挡在线观看| 51精品视频一区二区三区| 91精品人妻一区二区| 久久中文亚洲字幕| 欧美在线视频免费播放| 亚洲男人天堂久久| 中文字幕一区二区5566日韩| 热久久精品免费视频| 九色丨蝌蚪丨成人| 欧美黑人性视频| 国产精品一区二区三区在线免费观看| 91视频国产资源| 日本福利视频在线观看| 99精品国产九九国产精品| 国产亚洲视频在线| 中文字幕在线观看视频免费| 成人av免费在线| 欧美极品少妇无套实战| 日韩久久一区| 日韩在线欧美在线| 国产裸体美女永久免费无遮挡| 91视频.com| 日本欧美黄色片| 精品自拍偷拍| 国模视频一区二区| 亚洲免费不卡视频| 亚洲午夜羞羞片| 欧美69精品久久久久久不卡| 中文字幕一区二区av| 国产精品爽爽ⅴa在线观看| 国产高清av在线| 欧美性色黄大片| 欧美波霸videosex极品| 美女一区二区视频| 一区二区三区四区不卡| av成人免费| 中文字幕av一区中文字幕天堂 | 欧美精品久久久久久久久老牛影院| 中文字幕第20页| 日韩专区中文字幕一区二区| 五月天色一区| 色综合.com| 蜜臀久久99精品久久久无需会员| 国产毛片毛片毛片毛片| 一区二区三区日韩精品| 性感美女一区二区三区| 在线精品在线| 欧美视频1区| 久久婷婷五月综合色丁香| www日韩中文字幕在线看| 国产高中女学生第一次| 亚洲成人综合网站| 一区二区精品免费| 久久国产精品区| 四虎免费在线观看视频| 国产精品午夜av| 欧美亚洲另类视频| 91网页在线观看| 欧美一卡二卡在线| 亚洲一区欧美在线| 国产视频一区二区在线观看| 亚洲天堂伊人网| 精品成人久久| 日韩精品一区二区三区色偷偷| 欧美aaaaaaaa| 久久免费视频在线| 国产在线观看精品一区| 这里只有精品免费| 国产奶水涨喷在线播放| 国产欧美精品国产国产专区| 日本女人性视频| 久久先锋资源| 日韩 欧美 自拍| 美腿丝袜亚洲图片| 国产女同一区二区| h片在线观看视频免费| 国产亚洲精品美女久久久| 国产日韩免费视频| 日韩欧美精品网址| 欧美黑人精品一区二区不卡| 91捆绑美女网站| av在线免费观看不卡| 久久精品男女| 欧美久久久久久久久久久久久久| av亚洲免费| 黄色99视频| 欧美电影在线观看一区| 国产精国产精品| 国产精品25p| 久久五月天色综合| 国产一区二区三区不卡在线| 日韩欧美123| 在线免费av网| 欧美视频第一页| 国产在线观看免费视频软件| 久久品道一品道久久精品| 26uuu国产| 国产又粗又猛又爽又黄91精品| 漂亮人妻被中出中文字幕| 欧美一区久久| 日韩中文一区| 你懂的一区二区三区| 国产欧美韩日| 日韩成人18| 国产欧美精品久久久| 亚洲天堂一区二区| 91精品国产成人| 日韩激情av| 久久久国产成人精品| av在线天堂| 亚洲免费人成在线视频观看| 人人妻人人玩人人澡人人爽| 欧美精品在线观看播放| 国产一级片一区二区| 欧美视频一区二区三区…| 日本少妇裸体做爰| 亚洲一区免费观看| 免费麻豆国产一区二区三区四区| 国产精品国产三级国产aⅴ中文| 加勒比综合在线| 久久久精品国产免费观看同学| 色哟哟视频在线| 成人免费三级在线| 无码人妻一区二区三区精品视频| 国产乱码精品一区二区三| 国产精品嫩草影院8vv8| 蜜臀99久久精品久久久久久软件| 无人在线观看的免费高清视频| 米奇777在线欧美播放| 欧美三级午夜理伦三级| 国产精品日本欧美一区二区三区| 国产妇女馒头高清泬20p多| 性欧美超级视频| 图片区日韩欧美亚洲| 青青草手机在线视频| 亚洲精品中文在线| 欧美日韩中文字幕在线观看| 尤物在线观看一区| 久久99久久98精品免观看软件| 亚洲精品国产无套在线观| caoporn91| 亚洲精品视频免费看| 九九热国产在线| 依依成人精品视频| 久久久久久天堂| 黄色精品一区二区| 久久久黄色大片| 欧美视频完全免费看| 中文字幕在线观看你懂的| 欧美日韩一区二区三区免费看 | 国内精品久久久久久久果冻传媒| 国产成人福利av| 久久精品欧美| 视频精品在线观看| 亚洲一区免费看| 欧美极品一区二区三区| 成人性免费视频| 日日噜噜夜夜狠狠视频欧美人| 国产又大又黄又猛| 国产美女精品在线| 色哟哟无码精品一区二区三区| 99精品视频一区二区| 人妻av无码一区二区三区| 亚洲欧美一区二区视频| 天天操天天操天天操天天操天天操| 一区二区欧美视频| 黄瓜视频在线免费观看| 欧美日韩国产首页| 蜜桃av中文字幕| 国产一区二区三区视频| 中国av在线播放| 日本精品久久中文字幕佐佐木| 婷婷丁香久久| 久久久久久久久久久久久久一区| 久久裸体网站| heyzo国产| 国模一区二区三区白浆 | 国产精品的网站| 日本免费在线播放| 欧美日韩一区三区四区| www.五月婷婷| 亚洲人成电影在线| 尤物视频在线看| 日韩av第一页| 日本精品国产| 欧美性天天影院| 99久久精品国产亚洲精品| 日韩精品视频在线观看视频| 日本女优在线视频一区二区| 动漫美女无遮挡免费| 欧美国产精品一区二区三区| 国产精品成人av久久| 欧美日韩亚洲综合在线| 天天综合网在线观看| 久久夜色精品亚洲噜噜国产mv| 成人免费直播| 国内精品久久国产| 欧美精品观看| 亚洲欧美日韩综合网| 91麻豆福利精品推荐| 免费在线观看av网址| 欧美日韩国产区一| 九九在线视频| 午夜精品一区二区三区在线播放| av成人在线网站| 亚洲精品成人自拍| 午夜在线精品偷拍| 69亚洲乱人伦| 一区二区三区在线看| 中文字幕在线观看精品| 亚洲视频第一页| 英国三级经典在线观看| 国产精品久久国产精品| 欧美精品啪啪| 日本中文字幕在线不卡| 国产精品久久久久9999吃药| 免费观看日批视频| 亚洲日本aⅴ片在线观看香蕉| 九九色在线视频| 99久久国产免费免费| 午夜久久免费观看| 手机看片一级片| 中文字幕乱码一区二区免费| 亚洲av无码不卡| 亚洲视频第一页| 日本在线精品| 日韩电影在线播放| 日韩激情视频在线观看| 久久精品国产亚洲av久| 色哟哟一区二区在线观看| 欧美女优在线| 国产成人aa精品一区在线播放| 国产成人三级| 天天干天天草天天| 自拍av一区二区三区| 国产欧美一级片| 欧美成年人网站| 日韩精品中文字幕吗一区二区| 一本色道久久88亚洲精品综合| 国产福利一区二区三区在线视频| 国产性xxxx| 精品久久99ma| 悠悠资源网亚洲青| 日韩欧美亚洲在线| 麻豆精品一区二区三区| 免费在线观看黄色小视频| 91精品麻豆日日躁夜夜躁| 天堂8中文在线| 国产自产在线视频一区| 久久久成人网| 永久免费看mv网站入口| 日韩一级黄色片| sm捆绑调教国产免费网站在线观看| 九色91视频| 日本视频一区二区| 国产尤物在线播放| 精品国产乱码久久久久久久久| 天堂av中文在线观看| 水蜜桃亚洲一二三四在线| 狠狠色综合播放一区二区| 精品无码m3u8在线观看| 日韩精品高清在线| 成人国产综合| 国产肉体ⅹxxx137大胆| 久久精品夜色噜噜亚洲aⅴ| 一级片视频免费| 97久久国产精品| 日本一二区不卡| 国产精品欧美性爱| 一本大道久久a久久综合| 欧美日韩xx| 国产亚洲福利社区| 男女视频一区二区| 国产精品第九页| 怡红院精品视频| 成人动漫视频| 久久精品影视大全| 亚洲一区在线观看免费| av色图一区| 国内不卡一区二区三区| 国内精品伊人久久久久av一坑 | 日韩一区二区免费高清| 91精品论坛| 国产精品88久久久久久妇女| 久久免费精品国产久精品久久久久| 一区二区三区免费在线视频| 性欧美在线看片a免费观看| 91欧美在线| 香蕉视频黄色在线观看| 日韩欧美一二区|