rockchip_pin_group 是 Rockchip SoC 引脚控制(pinctrl)子系统中用于描述一组引脚配置的核心数据结构,用于管理芯片引脚的功能复用、电气特性等参数。以下是其关键概述:
1. 核心作用
- 引脚分组配置:将一组逻辑相关的引脚(如 I2C 的 SDA/SCL、SPI 的 SCK/MOSI/MISO/CS)封装为一个配置单元,简化外设初始化。
- 硬件抽象:通过统一的接口描述引脚功能(如复用模式、驱动强度、上下拉电阻),隐藏底层寄存器细节。
- 设备树集成:与设备树(Device Tree)配合,定义外设所需的引脚配置,实现硬件描述与驱动解耦。
2. 结构体定义(简化版)
在 Linux 内核的 Rockchip pinctrl 驱动中,rockchip_pin_group 通常定义为:
struct rockchip_pin_group {
const char *name; // 引脚组名称(如 "i2c0_pins")
const char **pins; // 引脚名称数组(如 "gpio0_a0", "gpio0_a1")
unsigned int num_pins; // 引脚数量
const char **functions; // 功能模式数组(如 "i2c0", "gpio")
const struct rockchip_pin_conf *configs; // 引脚配置参数
};
3. 关键字段解析
-
name
引脚组的唯一标识符,在设备树中通过pinctrl-names和pinctrl-0等属性引用。 -
pins
字符串数组,列出该组包含的所有引脚名称(格式通常为"gpioX_Y",如"gpio0_a0"对应 GPIO0 组的 A0 引脚)。 -
functions
功能模式数组,指定每个引脚在此组中的复用功能(如"i2c0"表示配置为 I2C0 控制器,"gpio"表示通用 GPIO 模式)。 -
configs
引脚级配置参数(如驱动强度、上下拉电阻),通过rockchip_pin_conf结构定义:struct rockchip_pin_conf { u32 type; // 配置类型(如驱动强度、上下拉) u32 conf; // 配置值(如 0=2mA, 1=4mA) };
4. 工作流程
-
设备树定义
在设备树节点中,通过pinctrl-X属性引用引脚组:i2c0: i2c@ff150000 { pinctrl-names = "default"; pinctrl-0 = <&i2c0_pins>; // ... }; i2c0_pins: i2c0-pins { rockchip,pins = <0 1 RK_FUNC_I2C 0>; // 对应 gpio0_a0, gpio0_a1 }; -
驱动解析
Rockchip pinctrl 驱动解析设备树,将i2c0-pins映射到rockchip_pin_group结构,配置引脚功能为 I2C0。 -
硬件配置
驱动根据rockchip_pin_group中的pins、functions和configs,编程 SoC 的引脚控制寄存器(如复用选择寄存器、驱动强度寄存器)。
5. 典型应用场景
- 外设初始化:配置 SPI、I2C、UART 等外设的引脚复用和电气参数。
- 动态切换:在运行时切换引脚功能(如从 GPIO 切换为 PWM 输出)。
- 电源管理:在低功耗模式下关闭未使用的引脚,降低功耗。
6. 示例代码片段
// 定义一个 I2C 引脚组
static const char *i2c0_pins[] = { "gpio0_a0", "gpio0_a1" };
static const char *i2c0_funcs[] = { "i2c0", "gpio" };
static const struct rockchip_pin_conf i2c0_configs[] = {
{ PIN_CONFIG_BIAS_DISABLE, 0 }, // 禁用上下拉
{ PIN_CONFIG_DRIVE_STRENGTH, 3 }, // 驱动强度 4mA
};
struct rockchip_pin_group i2c0_group = {
.name = "i2c0_pins",
.pins = i2c0_pins,
.num_pins = ARRAY_SIZE(i2c0_pins),
.functions = i2c0_funcs,
.configs = i2c0_configs,
};
7. 总结
rockchip_pin_group 是 Rockchip SoC 引脚控制的核心抽象,通过定义引脚组、功能模式和配置参数,实现了引脚资源的灵活管理和硬件描述与驱动的解耦。开发者通过设备树配置引脚组,驱动自动完成硬件初始化,简化了外设适配过程。
923

被折叠的 条评论
为什么被折叠?



