精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

在线电影欧美成精品| 中文字幕在线免费不卡| 2019中文在线观看| 久久只有这里有精品| 精品国产黄a∨片高清在线| 亚洲美女在线一区| 欧美二级三级| 国产欧美一级片| 国产毛片久久| 久久综合五月天| 免费在线观看成年人视频| 欧美美女福利视频| 午夜精品久久久久久久| 手机在线观看国产精品| 欧美一级淫片aaaaaa| 日本不卡一二三区黄网| 欧美激情精品久久久久久免费印度| caopeng视频| 66精品视频在线观看| 色噜噜久久综合| 东北少妇不带套对白| 337p日本欧洲亚洲大胆鲁鲁| 国产成人免费高清| 国产免费一区二区三区在线观看 | 一区二区在线观看视频| 欧美亚州在线观看| 好吊色视频一区二区| 开心九九激情九九欧美日韩精美视频电影| 久久琪琪电影院| √天堂中文官网8在线| 国产一区二区三区四区二区| 亚洲国产97在线精品一区| www.com久久久| 精品国产欧美日韩一区二区三区| 精品久久久久久久中文字幕| 91成人综合网| 91亚洲欧美| 国产视频视频一区| 蜜桃91精品入口| 懂色av蜜臀av粉嫩av分享吧| 国产在线精品一区二区| 国产欧美va欧美va香蕉在| 青青青国产在线| 在线欧美福利| 国外成人在线视频| 欧美精品一级片| 91精品国产乱码久久久久久| 最近中文字幕mv在线一区二区三区四区 | 免费精品视频一区| 日本免费一区视频| 成人一区在线看| av观看久久| aaa一区二区| 国产精品一区二区久激情瑜伽 | 一区二区精品视频在线观看| 视频一区免费在线观看| 国产99视频精品免视看7| 国产毛片aaa| 免费看亚洲片| 国产999精品久久久| 销魂美女一区二区| 日韩av一二三| 91天堂在线观看| 国产一区二区三区中文字幕| 国产一区二区看久久| 成人写真福利网| 国产日韩欧美视频在线观看| 国产乱码精品一区二区三| 亚洲综合成人婷婷小说| 朝桐光av在线一区二区三区| www.欧美.com| 欧美日韩最好看的视频| 搞黄视频免费在线观看| 中文字幕日本乱码精品影院| 99re6这里有精品热视频| 性欧美高清come| 亚洲成人自拍网| 久久久久久久久久久久久久国产| 巨胸喷奶水www久久久| 6080国产精品一区二区| 亚洲国产精品第一页| 日日天天久久| 久久久999精品| 久久亚洲av午夜福利精品一区| 激情综合自拍| 国产精品久久电影观看| 国产成人精品一区二三区四区五区 | 久久亚洲在线| 欧美俄罗斯乱妇| 天堂中文在线网| 精品一区二区三区蜜桃| 国产无套精品一区二区| 福利片在线看| 亚洲制服欧美中文字幕中文字幕| 97国产精东麻豆人妻电影 | 欧美性受xxxx| 亚洲AV成人精品| 国产精品嫩模av在线| 久久伊人精品一区二区三区| 91浏览器在线观看| 久久成人18免费观看| 国模精品一区二区三区| 日本三级视频在线播放| 欧美日韩在线视频观看| 亚洲最大天堂网| 亚洲人成亚洲精品| 欧美大成色www永久网站婷| 日韩免费黄色片| 国产在线精品一区二区不卡了| 亚洲**2019国产| 精品国产三级电影在线观看| 亚洲三级理论片| 丰满放荡岳乱妇91ww| 欧美熟乱第一页| 国产黄色一区二区三区| 蜜乳av综合| 欧美激情二区三区| 亚洲天堂一二三| 91在线国产观看| 2022中文字幕| 成人性视频免费看| 香蕉久久夜色精品国产更新时间| 久久久国产精品亚洲一区| 六月丁香婷婷综合| 国产99久久久精品| 在线观看欧美一区| 欧美成人资源| 亚洲国产欧美一区二区丝袜黑人| 久久国产波多野结衣| 日日夜夜免费精品| 久久久com| av最新在线| 91豆麻精品91久久久久久| 秋霞一区二区三区| 欧美日韩午夜精品| 免费在线观看你懂的| 国内精品久久久久久久97牛牛| 国产精品综合不卡av| 黄色网址在线播放| 欧美日韩国产综合新一区| 美女又黄又免费的视频| 天天操综合网| 国产日韩在线看| 在线观看免费网站黄| 欧美色图一区二区三区| 91激情视频在线观看| 先锋影音久久| 欧美一区二区三区四区夜夜大片 | av免费网站观看| 午夜先锋成人动漫在线| 5566日本婷婷色中文字幕97| 无码国精品一区二区免费蜜桃| 亚洲丶国产丶欧美一区二区三区| 99国产精品免费视频| 欧美先锋影音| 国产精品播放| 免费h在线看| 日韩毛片在线看| 无码人妻精品一区二区蜜桃色欲| 久久久高清一区二区三区| 中文字幕第80页| 久久社区一区| 91中文字精品一区二区| 免费在线国产视频| 亚洲国产三级网| 色一情一乱一伦| 国产精品卡一卡二卡三| 五月天激情播播| 黄色亚洲精品| 欧美日韩在线高清| 国产成人a视频高清在线观看| 精品国产欧美一区二区三区成人| 国产免费无遮挡| 午夜久久久久久久久| 国产精品扒开腿做爽爽| 另类专区欧美蜜桃臀第一页| 51xx午夜影福利| 欧美a大片欧美片| 国产精品第1页| 中文字幕伦理免费在线视频 | 欧美三级视频在线| 午夜精品福利在线视频| 99re这里都是精品| 久久久久久久久久一区二区| 欧美另类专区| 欧美极品一区二区| 韩国三级大全久久网站| 午夜精品福利电影| 岛国在线视频| 精品国产一区二区在线观看| 五月天激情四射| 亚洲欧洲中文日韩久久av乱码| 中文字幕免费高清视频| 麻豆国产欧美日韩综合精品二区| 日本一本中文字幕| 不卡在线一区| 国产一区二区三区黄| 开心久久婷婷综合中文字幕| 韩国福利视频一区| 婷婷五月在线视频| 日韩激情av在线免费观看| 亚洲天堂中文在线| 一本一道久久a久久精品综合蜜臀 一本一道综合狠狠老 | 成人精品电影在线| 久久久亚洲精品视频| av在线电影观看| 日韩成人av一区| jlzzjlzzjlzz亚洲人| 欧美在线观看18| 男人天堂中文字幕| 中文字幕一区在线| 欧美多人猛交狂配| 成人免费看视频| av亚洲天堂网| 日本91福利区| 亚洲精品无码久久久久久| 欧美va天堂在线| 亚洲自拍偷拍二区| av资源久久| 欧美国产视频在线观看| 中文字幕亚洲在线观看| 成人h片在线播放免费网站| 小黄鸭精品aⅴ导航网站入口| 欧美激情亚洲另类| 国产激情视频在线| 中文字幕视频在线免费欧美日韩综合在线看| 日批免费在线观看| 日韩一级完整毛片| 国产三级自拍视频| 欧美日本国产视频| 国产亚洲久一区二区| 一本到三区不卡视频| 日本网站在线播放| 午夜精品在线看| 国语对白一区二区| 一区二区免费在线播放| 男人与禽猛交狂配| 亚洲欧美日韩国产成人精品影院| 操她视频在线观看| 国产精品久久国产精麻豆99网站| 99国产精品无码| 国产精品福利一区| 国产精品夜夜夜爽阿娇| 国产精品美女久久久久久久久久久| 黄色片网站免费| 国产欧美精品一区二区色综合朱莉| 青青草视频成人| 2023国产精品| 精品国产成人亚洲午夜福利| 久久久久亚洲蜜桃| 欧美18—19性高清hd4k| 国产婷婷色一区二区三区在线| 国产精品久久久久无码av色戒| 久久久久久久久蜜桃| 在哪里可以看毛片| 中文字幕av不卡| 欧美性x x x| 一区2区3区在线看| 天天操天天干视频| 色婷婷一区二区三区四区| 国产精华7777777| 在线不卡免费av| 亚洲AV无码成人片在线观看| 精品sm捆绑视频| 久久国产精品高清一区二区三区| 亚洲女人天堂色在线7777| 精品乱码一区二区三四区视频| 一区二区av在线| 黄色在线视频网站| 欧美激情视频一区二区三区不卡| 电影在线观看一区| 国产精品69久久| 久久99成人| 久草热久草热线频97精品| 精品国产一区探花在线观看 | 老司机精品影院| 久久久久久亚洲精品不卡| 亚洲优女在线| 成人免费在线视频网站| 成人知道污网站| 日本一区视频在线| 欧美人成在线| 日本一极黄色片| 国产福利一区二区三区视频在线| 黄色短视频在线观看| 中国色在线观看另类| 国产在线欧美在线| 在线观看日韩毛片| 精品久久久无码中文字幕| 亚洲精选一区二区| 福利在线视频网站| 日本高清+成人网在线观看| 亚洲视频资源| 久久综合九色99| 欧美日韩免费观看一区=区三区| 国产日韩一区二区在线| 国产一区二区三区不卡在线观看| www.超碰97| 亚洲老妇xxxxxx| 一级久久久久久| 精品电影一区二区| 黄色网在线看| 国产精品99久久久久久www| 一区二区中文字幕在线观看| 日韩影视精品| 在线成人亚洲| 天美一区二区三区| 国产欧美日韩中文久久| 日本少妇性生活| 在线综合亚洲欧美在线视频| 免费在线稳定资源站| 色综合男人天堂| www.91精品| 午夜欧美性电影| 香蕉成人久久| 国产又粗又猛又色| 一区二区三区中文字幕在线观看| 亚洲男人天堂网址| 亚洲韩国欧洲国产日产av| 日本在线观看高清完整版| 国产精品永久免费观看| 免费精品国产| www黄色日本| 波多野结衣一区二区三区| 欧美色图亚洲视频| 欧美精品久久天天躁| 搞黄视频免费在线观看| 欧美自拍大量在线观看| 久久久免费毛片| 国产精品www在线观看| 国产乱淫av一区二区三区| 韩国一级黄色录像| 欧美午夜影院一区| 国产女主播在线写真| 热99精品里视频精品| 日本欧美三级| 北条麻妃在线视频观看| 99久精品国产| 国产成人无码一区二区三区在线| 欧美精品一区二区三区很污很色的| 18加网站在线| 亚洲字幕一区二区| 欧美午夜在线| 尤物网站在线观看| 性久久久久久久久| 四虎在线观看| 久久久日本电影| 日韩伦理一区二区三区| 日韩欧美一区三区| 久久一区二区三区四区| 国产精品21p| 国产亚洲精品久久久久久| 成人精品高清在线视频| 中文字幕不卡每日更新1区2区| 精品一区二区三区影院在线午夜 | 好吊成人免视频| 女人18毛片水真多18精品| 国内精品视频久久| 香蕉久久夜色精品国产使用方法 | 成人毛片视频网站| 91丝袜美腿高跟国产极品老师| 亚洲黄色三级视频| 国产视频综合在线| 91久久久久久白丝白浆欲热蜜臀| 亚洲精品免费在线看| 国产一区视频在线看| 国产一级一片免费播放| 日韩电影中文 亚洲精品乱码| 日本不卡网站| 亚洲成人一区二区三区| 精品午夜一区二区三区在线观看| 欧美日韩大片在线观看| 亚洲成人亚洲激情| 香蕉伊大人中文在线观看| 午夜一区二区三区| 国产麻豆精品在线观看| 日本一区二区三区精品| 国产亚洲视频在线观看| 北京富婆泄欲对白| 久久365资源| 精品乱人伦小说| 亚洲色图 在线视频| 日本欧美一区| 欧美本精品男人aⅴ天堂| xxxxxx黄色| 欧美永久精品| 欧洲成人在线视频| 国产黄a三级三级三级| 国产精品黄色在线观看| 国产精品一色哟哟| 狠狠久久伊人中文字幕| 亚洲欧美激情精品一区二区| 国产精久久久久| 最新国产精品视频| zzijzzij亚洲日本成熟少妇| 国产精品久久久免费视频| 欧美一区二区精美| 漫画在线观看av| 一区二区三区四区视频在线观看| 国产成人综合在线播放|