大家好,又见面了,我是你们的朋友全栈君。
三个重要概念
bank :
gpa0, gpa1, gpa31等
group:
以功能划分,比如uart的tx和rx
state:
设备的某种状态,比如”default”, “idle”,”sleep”,也可以是其他自定义的状态, 比如串口的“flow_ctrl”状态
例如:
bank:
&pinctrl_0 {
/*
* pin banks
*/
/*
* flags : 0 active high, 1 active low
*/
gpa :gpa {
gpio-controller; // 必须的属性,表示bank
#gpio-cells = <2>; // [pin_number, flags],用于识别引脚
};
};
group:pin-ctrl的子节点
uart0_data : uart0_data {
samsung,pins = "gph-0","gph-1"; // 表示哪几个引脚
samsung,pin-function = <2>; // 查看手册,服用功能时reg里面的值,对于uart,gphcon对应gph0, gph1 =2时表示串口, =0时表示输入
};
state:
uart0_data : uart0_data {
samsung,pins = "gph-0","gph-1"; // 表示哪几个引脚
/*
* 在GPHCON寄存器里面, GPH0,GPH1可以设置:
* 0 ---输入功能
* 1 ---输出功能
* 2 ---串口功能
*/
samsung,pin-function = <2>;
};
uart0_sleep : uart0_sleep {
samsung,pins = "gph-0","gph-1"; // 表示哪几个引脚
/*
* 在GPHCON寄存器里面, GPH0,GPH1可以设置:
* 0 ---输入功能
* 1 ---输出功能
* 2 ---串口功能
*/
samsung,pin-function = <0>;
};
以上定义了两个group
serial@50000000 {
...
pinctrl-names = "default","sleep"; # 既是名字,也是state
pinctrl-0 = <&uart0_data>;
pinctrl-1 = <&uart0_sleep>;
};
pinctrl-names定义了两种state : default 和 sleep
default : 对应的引脚是pinctrl-0 ,他指定了group是uart0_data
sleep : 对应的引脚是pinctrl-1,他指定的group是uart0_sleep
内核里面pinctrl的使用
-
platform_device,platform_driver匹配时,最终调用了really_probe
-
really_probe pinctrl_bind_pins pinctrl_lookup_state #获取default状态的pinctrl pinctrl_select_state
-
手动获取状态的api:
devm_pinctrl_get_select_default 使用default状态的引脚 pinctrl_get_select 根据name选取某种状态的引脚 pinctrl_put 不再使用退出时调用
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150468.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...