复用¶
如何定义 GPIO 有哪些功能可以复用,在运行时又如何切换功能呢?以 I2C4 为例作简单的介绍。
查规格表可知,I2C4_SDA 与 I2C4_SCL 的功能定义如下:
Pad# func0 func1
I2C4_SDA/GPIO1_B3 gpio1b3 i2c4_sda
I2C4_SCL/GPIO1_B4 gpio1b4 i2c4_scl
在 kernel/arch/arm64/boot/dts/rockchip/rk3399.dtsi 里有:
i2c4: i2c@ff3d0000{
compatible = "rockchip,rk3399-i2c";
reg = <0x0 0xff3d0000 0x0 0x1000>;
clocks = , ;
clock-names = "i2c", "pclk";
interrupts = ;
pinctrl-names = "default", "gpio";
pinctrl-0 = ;
pinctrl-1 = ; //此处源码未添加
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
此处,跟复用控制相关的是 pinctrl- 开头的属性:
pinctrl-names 定义了状态名称列表: default (i2c 功能) 和 gpio 两种状