
 
文章目录
- 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



















