我正在设置一个自定义设备,我需要禁用 dts 中的一些引脚。我可以只覆盖 dts 文件中的引脚吗,还是需要在 dtsi 文件中更改它们。请注意,我确实想保留其他引脚分配。
dtsi 文件包含以下内容。
&iomuxc {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_hog>;
imx6qdl-var-som-mx6 {
pinctrl_hog: hoggrp {
fsl,pins = <
/* CTW6120 IRQ */
MX6QDL_PAD_EIM_DA7__GPIO3_IO07 0x80000000
/* for Bluetooth/wifi enable */
MX6QDL_PAD_SD3_DAT6__GPIO6_IO18 0x1b0b1
/* SDMMC2 CD/WP */
MX6QDL_PAD_KEY_COL4__GPIO4_IO14 0x80000000
MX6QDL_PAD_KEY_ROW4__GPIO4_IO15 0x80000000
/* USBOTG ID pin */
/*MX6QDL_PAD_GPIO_4__GPIO1_IO04 0x80000000*/
/* PMIC INT */
MX6QDL_PAD_GPIO_17__GPIO7_IO12 0x80000000
/* Wifi Slow Clock */
MX6QDL_PAD_ENET_RXD0__OSC32K_32K_OUT 0x000b0
/* Audio Clock */
MX6QDL_PAD_GPIO_0__CCM_CLKO1 0x130b0
/* Audio reset */
MX6QDL_PAD_GPIO_19__GPIO4_IO05 0x178b0
/* Camera Clock */
MX6QDL_PAD_GPIO_3__CCM_CLKO2 0x130b0
/* Resistive touch irq */
MX6QDL_PAD_DISP0_DAT4__GPIO4_IO25 0x178b0
>;
};
... /* Other definitions */
};
};
我阅读了以下文档
只要标记了节点,您就可以覆盖它。标签的形式为
label: node@0x1 { /* data */ };
让我们举一个名为
main.dts
的设备树示例:
$ cat main.dts
/dts-v1/;
/ {
model = "Test device tree";
#address-cells = <0>;
#size-cells = <1>;
iomuxc: iomuxc@0x1 {
reg = <0x1>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_hog>;
imx6qdl-var-som-mx6 {
pinctrl_hog: hoggrp {
fsl,pins = <
0x1b8 0x588 0x000 0x5 0x0 0x80000000
/* more pins */
>;
};
};
};
};
&pinctrl_hog {
fsl,pins = <
0x1b8 0x588 0x000 0x5 0x0 0x89999999
/* more pins */
>;
};
在这里,我覆盖了标签
pinctrl_hog
的引脚控件。 您可以通过编译和反编译设备树来验证输出:
$ dtc -I dts -O dtb -o out.dtb main.dts # compile
$ dtc -I dtb -O dts out.dtb
/dts-v1/;
/ {
model = "Test device tree";
#address-cells = <0x0>;
#size-cells = <0x1>;
iomuxc@0x1 {
reg = <0x1>;
pinctrl-names = "default";
pinctrl-0 = <0x1>;
imx6qdl-var-som-mx6 {
hoggrp {
fsl,pins = <0x1b8 0x588 0x0 0x5 0x0 0x89999999>;
linux,phandle = <0x1>;
phandle = <0x1>;
};
};
};
};
如您所见,引脚设置为
0x89999999
而不是原来的 0x80000000
。只需在使用前确保该标签存在即可。通常,就像在 C 中一样,您将标头包含在文件顶部。
我希望这有帮助;-)
即使在.dtsi文件中写入了pin,我们是否可以覆盖它
因为在上面的例子中文件是.dts文件。