Pinctrl 子系统架构与源码总览
1. 三项职责
1 | pinctrl: 描述 pin和group |
GPIO负责读写和中断;Pinctrl负责 pad复用/电气状态,二者通过 gpio-ranges连接。
2. 对象
pinctrl_dev:控制器实例;pinctrl_desc:pins、ops、owner;pinctrl:consumer handle;pinctrl_state:default/sleep等状态;pinctrl_setting:mux/config设置;pinctrl_map:consumer、state到 controller/group/function/config的映射;pinctrl_gpio_range:GPIO offset到 pin number。
3. Controller注册
1 | devm_pinctrl_register(desc, driver_data) |
新驱动更推荐 devm_pinctrl_register_and_init()后在硬件准备完成时显式pinctrl_enable();本树Rockchip仍使用上述旧的一体式接口。
4. Consumer
1 | devm_pinctrl_get(dev) |
Driver Core在 probe前由 pinctrl_bind_pins()自动选择 init/default。
5. Device Tree
Consumer:
1 | pinctrl-names = "default", "sleep"; |
Rockchip group:
1 | rockchip,pins = <bank pin mux &config>; |
6. RK3588
RK3588由两个驱动协作:
pinctrl-rockchip.c:pinctrl、IOMUX、pull/drive/schmitt;drivers/gpio/gpio-rockchip.c:五个GPIO bank、方向/数据、IRQ和GPIO PM。
IOMUX和pad config位于IOC syscon区域,GPIO data/IRQ位于各bank MMIO。RK3588没有route/recalced/slew表;GPIO0 B4–D7的高mux功能由PMU2/BUS双IOMUX路径表达。
7. 配置
PINCTRL_ROCKCHIP默认随 ARCH_ROCKCHIP启用,并 select GPIOLIB、PINMUX、GENERIC_PINCONF、OF_GPIO和 IRQ support。RK805/RK806 PMIC还有独立 pinctrl/GPIO driver。
8. 风险
错误 mux可失去 console、存储、PMIC、PCIe reset或显示;错误 pull/drive/IO voltage可能造成信号完整性问题甚至硬件损伤。
正在加载留言…