PinCtrl
概述
PinCtrl(Pin Controller)子系统用于管理和配置芯片引脚的功能复用和电气特性。该子系统涉及两个主要对象:
- Pin controller devices:提供引脚控制服务,负责引脚复用和配置
- PinCtrl client devices:使用引脚控制服务的设备,通过设备树声明所需的引脚功能和配置
注意
Pin controller 与 GPIO controller 是不同的概念。Pin controller 负责将引脚配置为特定功能(如 GPIO、I2C 等),而 GPIO controller 则负责将已配置为 GPIO 功能的引脚设置为输入或输出模式。
功能描述
现代芯片包含大量引脚,每个引脚可能支持多种功能。手动配置每个引脚的寄存器既耗时又容易出错。Linux 内核引入 PinCtrl 子系统来抽象引脚的复用和配置,使开发者能够方便地管理引脚功能。
PinCtrl 子系统提供以下核心功能:
- 引脚枚举与命名(Enumerating and naming)
- 引脚复用(Multiplexing):配置引脚用于 GPIO、I2C 或其他外设功能
- 引脚配置(Configuration):设置上拉、下拉、开漏、驱动强度等电气特性
典型的芯片引脚架构如下图所示:

如图所示,pinA 和 pinB 可以通过 IOMUX(引脚复用控制器)连接到不同的功能模块:
- 配置为
GPIO功能时,连接到GPIO模块 - 配置为
I2C功能时,连接到I2C模块
此外,还可以同时配置引脚的电气特性,如驱动能力、上拉/下拉电阻等。