Rockchip Pinctrl 驱动架构

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
2
3
4
5
6
7
rockchip_pinctrl_probe
-> match SoC data
-> obtain GRF/IOC syscon regmap
-> parse GPIO bank children
-> initialize bank data
-> register pinctrl
-> of_platform_populate GPIO bank child devices

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_configto_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
2
upper 16 bits = write enable
lower 16 bits = new value

可在不读改写的情况下原子更新字段。

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_routesiomux_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完成。

文章互动

阅读 --

留言

0 条留言

正在加载留言…