文章目录
- 1、Pinctrl 子系统
- 1.1、Pinctrl 子系统的作用
- 1.2、设备树中PIN的配置信息
- 1.2、设备树中PIN的配置信息中的复用信息解析
- 1.3、PINCTRL子系统驱动
主控芯片 | 硬件开发板 | 内核版本 |
---|---|---|
imx6 | 100ask_imx6ull | Linux-4.9.88 |
1、Pinctrl 子系统
1.1、Pinctrl 子系统的作用
- 获取设备树中的
pin
信息; - 根据获取到的
pin
信息来设置pin
的复用功能; - 根据获取到的
pin
信息来设置pin
的电气特性。
1.2、设备树中PIN的配置信息
设备树里面创建一个节点来描述 GPIO
PIN
的配置信息:
设备树文件目录:Linux-4.9.88/arch/arm/boot/dts/imx6ull.dtsi
对iomuxc
节点进行数据的追加:
&iomuxc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_hog_1>;
imx6ul-evk {
pinctrl_hog_1: hoggrp-1 {
fsl,pins = <
MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059 /* SD1 CD */
MX6UL_PAD_GPIO1_IO00__ANATOP_OTG1_ID 0x17059 /* USB OTG1 ID */
MX6UL_PAD_CSI_DATA07__GPIO4_IO28 0x000010B0
MX6ULL_PAD_SNVS_TAMPER5__GPIO5_IO05 0x000110A0
>;
};
......
pinctrl_i2c1: i2c1grp {
fsl,pins = <
MX6UL_PAD_UART4_TX_DATA__I2C1_SCL 0x4001b8b0
MX6UL_PAD_UART4_RX_DATA__I2C1_SDA 0x4001b8b0
>;
};
......
}
}
1.2、设备树中PIN的配置信息中的复用信息解析
MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059
这个宏定义在:Linux-4.9.88/arch/arm/boot/dts/imx6ul-pinfunc.h
/* <mux_reg conf_reg input_reg mux_mode input_val> */
#define MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x0090 0x031c 0x0000 5 0
从芯片手册:IMX6ULLRM.pdf
可知
-
mux_reg
为SW_MUX_CTL_PAD_UART1_RTS_B
偏移地址:0x0090
-
mux_mode
为5
代表为普通GPIO
模式
-
conf_reg
为IOMUXC_SW_PAD_CTL_PAD_UART1_RTS_B
偏移地址:0x031c
-
0x17059
就是conf_reg
寄存器值,对应二级制为:10111000001011001
1.3、PINCTRL子系统驱动
文件目录:Linux-4.9.88/drivers/pinctrl/freescale/pinctrl-imx6ul.c
文件目录:Linux-4.9.88/rivers/pinctrl/freescale/pinctrl-imx.c