pinctrl 子系统可以分为 provider 和 consumer 两部分驱动。即 pin controller 本身(provider)的驱动和为使用者(consumer)提供的一些列的接口。
从功能的角度看,pinctrl 子系统包括了 pin multiplexing,pin configuration,GPIO control,GPIO interrupt control 等功能。
单看 pin 相关的功能有:
- pin 脚的描述与获取(pin desc)
- pin 脚的功能复用(pin multiplexing)
- pin 脚的属性配置(pin configuration)
HW layer
:硬件层,不同厂家的 pin controller 各不相同,有的只有 pinmux 的功能,有的跟 GPIO 在一起。名字也不一样:pinmux,iomux,ioctl 等等,而 pin controller 只是一个软件的概念。Pin Controller Driver layer
:即 pinmux 的裸机硬件接口,这部分与 pinctrl 还没有关系。HW Abstract layer
:真正的 pinctrl 驱动层,这里抽象了一系列的数据结构和函数指针来操作我们的 pin controller
pin control core driver
:提供了一些核心功能,对下提供了硬件驱动的编写框架,对上提供了其他驱动使用 pinctrl 的框架,其中,pin 脚的获取和描述也是在这一层实现的。pin mux drvier
:pin 脚的功能复用的配置,在这个模块中实现pin configuration
:pin 脚的属性配置(上下拉、驱动强度等),在这个模块中实现
Customer drivers
:使用 pinctrl 的驱动
文件结构如下: