【问题标题】:Default config of GPIO's using device tree - Freescale i.MX6GPIO 使用设备树的默认配置 - Freescale i.MX6
【发布时间】:2022-05-06 18:01:00
【问题描述】:

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

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

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

上面的代码在启动期间将 gpio 4 15 设置为 1,这正是我想要的。但是,我认为有更好的方法可以使这个引脚在 sysfs 中显示为通用 gpio 而不是 gpio-led

【问题讨论】:

    标签: config device gpio device-tree


    【解决方案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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        我刚刚在 i.MX6 和 Buildroot/Busybox、内核 v4.19.169 上测试了以下 DT。这是使它工作的 DT sn-p,但是您不能再在用户空间中使用该 pin。顺便提一下,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(保持器使能)。即使sysstat@11 丢失,这足以将引脚驱动为低电平。但管脚仍被配置为输入。

        检查 pin 配置(注意 [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 选项快。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-07-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-10-23
          • 1970-01-01
          • 1970-01-01
          • 2018-05-12
          相关资源
          最近更新 更多