Pinctrl 调试指南
X5 Pinctrl 使用自研 Pinctrl 代码驱动,主要通过配置 DTS 来实现 Pinctrl 功能。
管脚查询
IO 管脚的复用和配置,以及上电默认状态、复用、驱动能力、上下拉、施密特触发配置和对应管脚的 gpio 寄存器信息可以在 datasheets 查阅《X5 PIN SW Reg-V1.1.xlsx》
驱动代码
kernel/drivers/pinctrl/hobot/aon.c # Pinctrl 驱动代码源文件
kernel/drivers/pinctrl/hobot/common.c # Pinctrl 驱动代码源文件
kernel/drivers/pinctrl/hobot/display.c # Pinctrl 驱动代码源文件
kernel/drivers/pinctrl/hobot/dsp.c # Pinctrl 驱动代码源文件
kernel/drivers/pinctrl/hobot/hsio.c # Pinctrl 驱动代码源文件
kernel/drivers/pinctrl/hobot/lsio.c # Pinctrl 驱动代码源文件
kernel/drivers/pinctrl/hobot/common.h # Pinctrl 驱动代码头文件
内核配置
CONFIG_PINCTRL_SINGLE

Pinctrl 的 DTS 配置
X5 Pinctrl 控制器的设备树定义位于 SDK 包的 kernel 文件夹下的arch/arm64/boot/dts/hobot/x5.dtsi文件内。
备注: x5.dtsi 中的节点主要声明 SoC 共有特性,和具体电路板无关,一般情况下不用修改。
Pinctrl 使用
驱动 DTS 配置
驱动在使用 Pinctrl 的接口前,需要在 DTS 里配置相应的 Pinctrl 配置组,当驱动 probe 的时候,会将“default”对应的这组 Pinctrl 配置到寄存器里面,而其它组的配置需要在代码里面解析出来,再选择切换使用,以 uart2 为例:
/* arch/arm64/boot/dts/hobot/x5-evb.dts */
&uart2 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_uart2>;
};
uart2 Pinctrl 中引用的配置组在 arch/arm64/boot/dts/hobot/pinmux-func.dtsi 中,内容如下:
/* arch/arm64/boot/dts/hobot/pinmux-func.dtsi */
pinctrl_uart2: uart2grp {
horizon,pins = <
LSIO_UART2_RX LSIO_PINMUX_3 BIT_OFFSET16 MUX_ALT0 &pconf_drv_pu_mid_3v3
LSIO_UART2_TX LSIO_PINMUX_3 BIT_OFFSET18 MUX_ALT0 &pconf_drv_pu_mid_3v3
>;
};
};
另外也提供了 GPIO 功能的配置,在 arch/arm64/boot/dts/hobot/pinmux-gpio.dtsi 中,内容如下:
/* arch/arm64/boot/dts/hobot/pinmux-gpio.dtsi */
lsio_gpio0_8: lsio_gpio0_8 {
horizon,pins = <
LSIO_UART2_RX LSIO_PINMUX_3 BIT_OFFSET16 MUX_ALT2 &pconf_input_en_3v3
>;
};
lsio_gpio0_9: lsio_gpio0_9 {
horizon,pins = <
LSIO_UART2_TX LSIO_PINMUX_3 BIT_OFFSET18 MUX_ALT2 &pconf_input_en_3v3
>;
};
Pinctrl 配置组将多个 Pin 配置组合到一起,每个 Pin 的配置包含 5 列,第一列表示相关域的 Pin id,在 kernel/include/dt-bindings/pinctrl/horizon-*-pinfunc.h 等头文件中有定义;第二列表示 Pin 的功能复用配置寄存器;第三列表示功能复用配置的 bit 偏移;第四列为对应功能的 Pin-mux 值;第五列可以配置上电默认状态、驱动能力、上下拉、施密特触发配置、电压域等。