一、概述
- pinctrl子系统和gpio子系统可以简化GPIO驱动开发
- pinctrl子系统用来设置pin的复用、上下拉、速度等信息
- gpio子系统用于设置pin的输入和输出
二、pinctrl子系统
我们只要在设备树中设置好pinctrl属性,其初始化自动由pinctrl子系统完成,pinctrl子系统源码目录:linux-kernel/drivers/pinctrl
。
2.1 设备树节点中PIN配置信息
- 示例代码
pinctrl-imx6ul.c中找到iomux节点
imx6ull-alientek-emmc.dts中追加iomuxc节点信息
compatible
对应的是驱动文件,全局可以搜到对应驱动文件pinctrl-names
名字也是state,第一个名字对应pinctrl-0,第二个名字对应pinctrl-1引脚,这里只有一个名字对应pinctrl-0pinctrl-0
表示引用PIN信息fsl,pins
,飞思卡尔系列芯片pinctrl子系统pin配置信息要求
2.2 创建pinctrl节点
- 在iomuxc中添加子节点,同一个外设的pin都放到一个节点中
- pinctrl节点必须以
pinctrl-
开头 “fsl,pins”
属性用来保存pin的配置信息,飞思卡尔芯片- 实例:
pinctrl_led: ledgrp {
fsl,pins = <
MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x10B0 /* LED0 */
>;
};
2.3 pinctrl驱动分析
三、gpio子系统
总结:
- pinctrl有单独节点
- 设备节点中包含gpio配置信息