举例:
uart0功能实现,pinctrl-0选择的是pinctrl_lpuart0。
通过查询datesheet或者i.MX_8QuadMax_Pinmux_v0.71.xlsx得知:
UART0_RX和UART0_TX两个引脚分别复用ATL0功能。
拆分如下:
引脚名称 复用功能名称
SC_P_ UART0_RX _ DMA_UART0_RX
查询SC_P_UART0_RX_DMA_UART0_RX定义在kernel_imx\include\dt-bindings\pinctrl\pads-imx8qm.h下:
#define SC_P_UART0_RX_DMA_UART0_RX SC_P_UART0_RX 0(复用功能0)
pads-imx8qm.h详解:
前294行都是定义pin脚编号
比如:
SC_P_LVDS0_I2C0_SCL 52
表示LVDS0_I2C0_SCL 引脚编号是52,这个在反编译dtb得到的dts的时候会用到,比如:
gpio3_06 {
fsl,pins = <0x34 0x3 0x21>;
linux,phandle = <0x9b>;
phandle = <0x9b>;
};
0x34就是52引脚,0x3指复用功能3(ATL3),0x21指寄存器值,0x9b是pinctrl-0指向的指针,完整dts如下:
tsc@24 {
compatible = "cy,cyttsp6_i2c_adapter";
reg = <0x24>;
pinctrl-names = "default";
pinctrl-0 = <0x9b>;
而后面都是定义所有引脚的所有复用功能字符串,如上所述。