pinctrl和gpio子系统形式的LED驱动
1、前言
前面两篇的LED驱动都是操作寄存器的方法,这种方式就会导致每操作一个gpio都要在驱动程序里先配置它复用为哪个功能的引脚、电阻上下拉、速度等等寄存器。而接下来pinctrl子系统和gpio子系统这种方式就是,我们在使用一个gpio引脚时,只需要在设备树里选择它的哪个复用功能,然后再给这个pin引脚配置电气属性等,剩下的就由内核来初始化配置。这样就大大方便我们的驱动开发,不需要每次使用一个gpio引脚时都要写一长串的寄存器配置。
2、pinctrl子系统
2.1 功能简介
- 配置pin引脚的复用功能;
- 配置pin引脚的电气特性:内部电阻上下拉、速度等。
2.2 pinctrl在设备树中的格式
以IMX6ULL为例,在imx6ull-14x14-evk.dts中的定义格式:
- 在iomuxc节点的子节点imx6ul-evk中定义;
- 节点名称节点要以“pinctrl_”开头;
- pinctrl节点的属性名称必须为“fsl,pins”;
- pinctrl节点的“fsl,pins”属性内容为pin引脚和配置值。
2.3 pinctrl在设备树中的示例
imx6ull-14x14-evk.dts:
pinctrl_hog_1: