活动地址:CSDN21天学习挑战赛
背景
直译:控制引脚。Linux kernel 3.0之前的内核,对于pin的功能配置都是通过目标板的配置文件(arch/arm/mach-*)来初始化的,这种配置方式比较繁琐,十分容易出现问题(例如,pin的功能配置冲突)。Linux kernel 3.0之后,为了解决上述问题引入了pinctrl子系统。
功能
(1)引脚枚举与命名
(2)引脚复用(GPIO、I2C等)
(3)引脚配置(上拉、下拉、开漏、驱动强度等)
pinctrl相关概念
普通的driver调用pin control subsystem 的接口就是只有三个步骤
(1)驱动加载或是运行时,获取pin control state holder的句柄(struct pinctrl)
(2)设定pin control的状态(struct pinctrl_state)
(3)驱动卸载或是退出时,释放pin control state holder的句柄
pinctrl子系统的软件架构见下图:图来源Linux内核之pinctrl子系统 - 知乎
pinctrl-core抽象层主要的功能就是提供三种服务:
(1)为SoC pin controler drvier提供底层通信接口的能力
(2)为Driver提供访问pin的能力,即driver配置pin复用能、配置引脚的电气特性
(3)为GPIO子系统提供GPIO访问的能力