Device Tree 映射与状态选择

Device Tree 映射与状态选择

1. Consumer语法

1
2
3
4
5
device@... {
pinctrl-names = "default", "sleep";
pinctrl-0 = <&spi2m1_cs0 &spi2m1_pins>;
pinctrl-1 = <&spi2_sleep>;
};

索引必须与 names一致;pinctrl-0可包含多个 group phandle。

2. Rockchip group

1
2
3
4
5
uart2m0_xfer: uart2m0-xfer {
rockchip,pins =
<0 RK_PB5 10 &pcfg_pull_up>,
<0 RK_PB6 10 &pcfg_pull_up>;
};

四元组:

  1. bank;
  2. bank内 pin;
  3. mux function编码;
  4. pin config node phandle。

3. 解析

1
2
3
4
5
6
pinctrl_get
-> pinctrl_dt_to_map
-> parse pinctrl-N phandles
-> controller dt_node_to_map
-> MUX_GROUP + CONFIGS_GROUP
-> add states/settings

Rockchip driver动态从 DT group建立 group/function描述。

4. Hog

Controller子节点可声明 pinctrl-hog,在 controller enable时立即选中,用于无 consumer device但需固定 pad状态的 pins。

5. Empty state

可用空 pinctrl-0表达存在但无设置的 state,Core支持 dummy state。不要用不存在属性和空属性表达不同意图而未验证 driver行为。

6. Inheritance

DTS include/overlay会合并或覆盖 properties。最终运行 DTB才是事实;同一节点后面的 pinctrl-0覆盖前值,可能丢失原 group。

7. Binding问题

本树 binding限定 mux最大10,但 RK3588 pinctrl数据包含 11/12。dtbs_check可能报 schema错误,这属于本厂商树 binding滞后,硬件 mux编码仍需按 TRM和 driver验证。

8. 验证

1
2
dtc -I fs -O dts /sys/firmware/devicetree/base > running.dts
grep -n 'pinctrl-' running.dts

Phandle在反编译后通常变成数字,结合 symbols或源 DTS定位。

文章互动

阅读 --

留言

0 条留言

正在加载留言…