参考文章
Linux驱动开发(十一):pinctrl子系统和GPIO子系统
PINCTRL (PIN CONTROL) subsystem
pinctrl子系统的作用
大多数SOC的PIN都是支持复用的,所以在配置时要考虑复用的设置,此外还要配置PIN的电气特性,比如上下拉、速度、驱动等
pinctrl子系统的主要工作内容:
- 获取设备树中pin信息
- 根据获得到的pin信息来设置pin的复用功能
- 根据获得到的pin信息来设置pin的电气特性,比如上下拉、速度、驱动能力
对于我们使用者来说,只需要在设备树里面设置好某个pin的相关属性即可,其他的初始化工作均由pinctrl子系统来完成
源码目录drivers/pinctrl
全志V3s
设备树:linux-5.1.0\Documentation\devicetree\bindings\pinctrl\allwinner,sunxi-pinctrl.txt
控制器驱动源码:linux-5.1.0\drivers\pinctrl\sunxi\pinctrl-sun8i-v3s.c
- 一组复用引脚的功能配置
pio: pinctrl@01c20800 {
compatible = "allwinner,sun8i-v3s-pinctrl";
reg = <0x01c20800 0x400>;
gpio-controller;
#gpio-cells = <3>;
i2c0_pins: i2c0 {
pins = "PB6", "PB7";
function = "i2c0";
};
}
i2c0: i2c@01c2ac00 {
compatible = "allwinner,sun6i-a31-i2c";
reg = <0x01c2ac00 0x400>;
interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&ccu CLK_BUS_I2C0>;
resets = <&ccu RST_BUS_I2C0>;
pinctrl-names = "default";
pinctrl-0 = <&i2c0_pins>;
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
};
- 某个复用引脚配置成GPIO功能
&i2c0 {
status = "okay";
gt9xx@14 {
compatible = "goodix,gt911";
goodix,rst-gpio = <&pio 4 23 GPIO_ACTIVE_LOW>; /* PE23 */
goodix,irq-gpio = <&pio 1 5 GPIO_ACTIVE_HIGH>; /* PB5 */
};
};