Rockchip Pinctrl 驱动架构
1. 单文件多SoC
pinctrl-rockchip.c通过 rockchip_pin_ctrl数据描述不同SoC:
- banks;
- type;
- pull/drive/schmitt计算;
- route/recalced tables;
- iomux width/source。
RK3588 match选择 rk3588_pin_ctrl。
2. Probe
1 | rockchip_pinctrl_probe |
GPIO bank随后由独立的 drivers/gpio/gpio-rockchip.c probe并注册gpiochip/irqchip。
Driver用 postcore_initcall较早注册,为后续 peripheral probe提供 pin states。
3. Banks
每个 rockchip_pin_bank包含:
- bank_num/name/pin_base/nr_pins;
- GPIO MMIO;
- clocks;
- IRQ和 irqdomain;
- gpio_chip/range;
- iomux/drive/pull类型;
- spinlock;
- debounce;
- suspend mask;
- route/recalced masks。
4. Pinctrl Ops
Pinctrl:
-读取 DT groups;
-返回 group pins;
-set mux;
-set/get config。
GPIO direction/data、set_config、to_irq和IRQ chip ops属于 gpio-rockchip.c,不属于本文件的pinctrl ops。
5. GRF/IOC
Mux/pad配置不在 GPIO bank data寄存器,使用 syscon regmap访问 IOC/GRF。Rockchip寄存器广泛使用高16位 write-mask:
1 | upper 16 bits = write enable |
可在不读改写的情况下原子更新字段。
6. Route
部分SoC的 function还需 route寄存器选择内部输入,通用驱动可按 bank/pin/mux匹配 route table写 GRF。
7. Recalced
部分SoC少数 pins的实际 mux register/bit与常规公式不同,recalced table可覆盖计算。
上述是通用 Rockchip能力;本树 rk3588_pin_ctrl没有挂 iomux_routes或 iomux_recalced表。RK3588依靠4-bit IOMUX布局和DTS中的 mux编码,不应宣称每个 M0/M1都额外写 route寄存器。
8. GPIO集成
GPIO bank是pinctrl子节点;gpio-ranges提供pin映射。两个独立platform driver共享bank描述并通过GPIO range衔接;不能把它们视为同一个driver。
9. PM
GPIO interrupt mask保存/恢复由 gpio-rockchip.c完成;pad mux/config是否切换主要由consumer sleep state或pinctrl hog PM完成。
正在加载留言…