GPIO的默认配置使用设备树 - 飞思卡尔i.MX6

时间:2013-12-18 10:46:09

标签: config device gpio device-tree

gpio引脚的默认设置应如何配置设备树 - 特别是在飞思卡尔imx系列上。

到目前为止,我只能使用led界面配置gpios:

gpioinit {
   compatible = "gpio-leds";
    pinctrl-names = "default";
    mykpp {
        gpios = <&gpio4 15 1>;
    };
};

以上代码在启动过程中将gpio 4 15设置为1,这就是我想要的。但是,我认为有一种更好的方法可以使这个引脚在sysfs中显示为一般的gpio,而不是gpio-led

3 个答案:

答案 0 :(得分:1)

如果是GPIO,您的dts文件应显示如下内容:

    gpio0: gpio@c00 {
        #address-cells = <1>;
        #size-cells = <0>;
        cell-index = <0>;
        compatible = "fsl,mpc8377-gpio";
        reg = <0xc00 0x100>;
        interrupts = <74 0x8>;
        interrupt-parent = <&ipic>;
        gpio-controller;

        gpio-pin@11 {
            compatible = "fsl,mpc8377-gpio-input";
            active_status = "low";
            gpios = <&gpio0>;
            pin = <11>;
        };
    }

此示例取自MPC8377的dts文件。您可能需要查看/drivers/gpio/gpio-fsl.c

答案 1 :(得分:0)

我最近需要这样做,但是我发现“针猪”是正确且更通用的解决方案。

这是一个很好的例子: Device Tree dependency between two nodes

文档: https://www.kernel.org/doc/Documentation/devicetree/bindings/gpio/gpio.txt

答案 2 :(得分:0)

我刚刚在 i.MX6 和 Buildroot/Busybox 内核 v4.19.169 上测试了以下 DT。这是使其工作的 DT 片段,但是您不能再在用户空间中使用该引脚。顺便说一下,请注意 gpios = 属性的复杂语法。那个把我逼疯了!

&gpio7 {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_gpio_en>;

    sysstat@11 {
        gpio-hog;
        gpios = <11 GPIO_ACTIVE_HIGH>;
        output-low;
        line-name = "SYS_STAT";
    };
};

&iomuxc {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_gpios>;

        pinctrl_gpio_en: gpiostatgrp {
            fsl,pins = <
                MX6QDL_PAD_GPIO_16__GPIO7_IO11      0x130b0
            >;
        };
};

0x130b0 表示:滞后,100K 下拉,PUE=1(上拉使能),PKE=1(keeper 使能)。即使 sysstat@11 缺失,这也足以将引脚驱动为低电平。但引脚仍配置为输入。

检查引脚配置(注意 [used] 字符串):

# gpioinfo 6 | grep "line  11"                                                  
        line  11:      unnamed   "SYS_STAT"  output  active-high [used]         

另一种方法是删除 sysstat@11 节点以仅执行引脚复用和引脚配置。不过,我不确定它是否非常聪明。

另一个选项,因为引脚默认配置为 GPIO,根本不更改 DT,而是使用 /etc/init.d 脚本和命令 gpioset 6 11=0。它也可以工作,但不如 DT 选项快。

我想我会选择最后一个选项。