器件树GPIO复位

时间:2017-08-09 20:51:37

标签: embedded-linux device-tree

我在基于iMX6的电路板上工作,我正在尝试配置许多用作芯片使能和复位线的GPIO。根据我所做的研究,处理此问题的方法是通过设备树中的gpio-reset驱动程序。根据文档,我提出了下面编译的代码,但我不确定如何从用户空间控制这些重置行。

我使用的第一个设备树驱动程序是gpio-leds,它在sys / class中创建了一个带有控制LED的节点的leds文件夹。但是,我没有看到任何类似的重置。所以我有两个问题:

1)GPIO-RESET是否用于控制复位线,启用线等的正确绑定。

2)是否有关于如何从用户空间处理此绑定和其他绑定的文档,类似于我如何控制GPIO-LED?

内核:Linux buildroot 4.1.15

/dts-v1/;

#include <dt-bindings/input/input.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/pinctrl/omap.h>
#include "imx6ul.dtsi"

/ {
    model = "Freescale i.MX6 UltraLite 14x14 EVK Board";
    compatible = "fsl,imx6ul-14x14-evk", "fsl,imx6ul";

    memory {
        reg = <0x80000000 0x20000000>;
    };

    /* Reset Line Configuration */
    gpio_resets {
        compatible = "linux,gpio-reset";
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_gpioreset>;

        gnss {
            gpios = <&gpio1 4 0>;
            asserted-state = <0>;
            duration-ms = <100>;
            auto;
        };
    };

    ...

};

&iomuxc {
  pinctrl-names = "default";
  imx6ul-evk {

    pinctrl_gpioreset:
    gpiorstgrp {
      fsl,pins = <
      MX6UL_PAD_GPIO1_IO04__GPIO1_IO04         0x000010B0  /* GNSS RESET_N */
      >;
    };

    ...

};

1 个答案:

答案 0 :(得分:0)

<块引用>
  1. GPIO-RESET 是否是用于控制复位线、启用线等的正确绑定。

我也一直在寻找这样的司机。

我可以看到有一个专门针对此的提案:

https://lwn.net/Articles/585145/

但我在我的内核版本中找不到它(跟踪 5.4.y 版本)。

仅在一些陈旧的 imx6 内核中:https://github.com/samnazarko/linux-imx6/blob/master/Documentation/devicetree/bindings/reset/gpio-reset.txt

所以我要么

  • 根据上述提议(在启动时断言重置的时间)创建一个小型驱动程序来支持“延迟”功能。
  • 使用带有默认状态的 gpio-led。也许使用“一次性”触发器,为我的应用程序提供单次写入 API。 (向 sysfs shot 文件写入一次会导致引脚在可配置时间内进行一次切换。)
  • 完全通过 libgpio 或 sysfs 从用户空间处理它。 (也许与 gpio-led 结合使用,以便在启动期间至少有一个明确定义的线路状态。)