DTS:覆盖引脚配置

DTS: Overwriting pin configuration

我正在设置一个自定义设备,我需要禁用 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 */
    };
};

我阅读了以下内容documentation

你可以覆盖一个节点,只要你已经标记了它。标签的形式为 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 中一样,您在文件顶部包含 header。

希望对您有所帮助 ;-)