【问题标题】:gpiod - use labels in devicetreegpiod - 在设备树中使用标签
【发布时间】:2020-05-22 20:23:54
【问题描述】:

我想使用libgpiod 通过自定义板上的用户空间控制一些 GPIO。我有一个 i.MX6UL 处理器,它有数百个引脚,我将只使用其中的 8 个(作为 GPIO)。

我了解到libgpiod 正在替换旧的 sysfs API,我很高兴您可以为每个 GPIO 指定标签。处理器的 GPIO 块类似于以下代码块,并且已经设置了 gpio-controller 属性。 (取自 Linux 内核 v4.14)

gpio2: gpio@20a0000 {
    compatible = "fsl,imx6ul-gpio", "fsl,imx35-gpio";
    reg = <0x020a0000 0x4000>;
    interrupts = <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>,
             <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;
    gpio-controller;
    #gpio-cells = <2>;
    interrupt-controller;
    #interrupt-cells = <2>;
    gpio-ranges = <&iomuxc 0 49 16>, <&iomuxc 16 111 6>;
};

我想使用这个控制器的单个引脚,所以我添加了以下块:

&gpio2 {
    resetl0 {
        //gpio-hog;
        output-high;
        line-name = "COBO0_ResetL";
        gpios = <15 1>;
    };
};

没有gpio-hog 属性,gpioinfo 工具无法显示标签,如果我省略输出高/低也是一样。使用该属性,可以正确显示标签,但是 gpio 标记为used,因此我无法从用户空间进行控制。 (设备或资源繁忙

简而言之: 我需要一种在设备树中设置标签的方法,我可以从用户空间读取它并控制 gpios。我已经在 RPi 设备树中看到了gpio-line-names,但我不想在只使用一个时将整个银行指定为 NC。 libgpiod 可以吗?怎么样?

【问题讨论】:

  • 行的标签是provider的属性,而不是consumer的属性。因此,您必须在 GPIO controller 设备节点中定义标签。
  • 是的,这就是我在gpio-line-names 中提到的,但这是否意味着我必须为整个 gpio2 IO-Bank 定义标签?
  • 可悲的是,答案似乎是“是”——这太可悲了。我们在框架内从一个错综复杂的烂摊子变成了另一个烂摊子。

标签: linux-kernel embedded-linux gpio device-tree


【解决方案1】:

我在 Odroid-N2 内核 v5.4 上进行了测试。

介子-g12b-odroid-n2.dts

&gpio {
gpio-line-names = 
    /* GPIOZ */
    "", "", "", "", "", "", "", "",
    "", "", "", "", "", "", "", "",
    /* GPIOH */
    "", "", "", "", "", "", "", "",
    "",
    /* BOOT */
    "", "", "", "", "", "", "", "",
    "", "", "", "", "", "", "", "",
    /* GPIOC */
    "", "", "", "", "", "", "", "",
    /* GPIOA */
    "44", "46", "45", "47",
    "26", "",   "",   "",
    "",   "",   "",   "42",
    "32", "7",  "27", "28",
    /* GPIOX */
    "16", "18", "22", "11",
    "13", "33", "35", "15",
    "19", "21", "24", "23",
    "8",  "0",  "29", "31",
    "12", "3",  "5",  "36";

usb-hub {
        gpio-hog;
        gpios = <GPIOH_4 GPIO_ACTIVE_HIGH>;
        output-high;
        line-name = "usb-hub-reset";
    };
};

gpioinfo的输出

gpiochip0 - 85 lines:
...
    line  20:      unnamed "usb-hub-reset" input active-high [used]
...
    line  49:         "44"       unused   input  active-high 
    line  50:         "46"       unused   input  active-high 
    line  51:         "45"       unused   input  active-high 
    line  52:         "47"       unused   input  active-high 
    line  53:         "26"       unused   input  active-high 
...
    line  60:         "42"       unused   input  active-high 
    line  61:         "32"       unused   input  active-high 
    line  62:          "7"       unused   input  active-high 
    line  63:         "27"       unused   input  active-high 
    line  64:         "28"       unused   input  active-high 
    line  65:         "16"       unused   input  active-high 
    line  66:         "18"       unused   input  active-high 
    line  67:         "22"       unused   input  active-high 
    line  68:         "11"       unused   input  active-high 
    line  69:         "13"       unused   input  active-high 
    line  70:         "33"       unused   input  active-high 
    line  71:         "35"       unused   input  active-high 
    line  72:         "15"       unused   input  active-high 
    line  73:         "19"       unused   input  active-high 
    line  74:         "21"       unused   input  active-high 
    line  75:         "24"       unused   input  active-high 
    line  76:         "23"       unused   input  active-high 
    line  77:          "8"       unused   input  active-high 
    line  78:          "0"       unused   input  active-high 
    line  79:         "29"       unused   input  active-high 
    line  80:         "31"       unused   input  active-high 
    line  81:         "12"       unused   input  active-high 
    line  82:          "3"       unused   input  active-high 
    line  83:          "5"       unused   input  active-high 
    line  84:         "36"       unused   input  active-high 
...

gpioinfo 将“gpio-line-names”显示为名称,将“line-name”显示为消费者。

【讨论】:

  • 谢谢,虽然我觉得这不是一个好的解决方案,但我最终得到了相同的解决方案。我更喜欢一种也适用于单个引脚的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 2013-04-12
  • 1970-01-01
  • 2017-08-23
  • 2022-10-23
相关资源
最近更新 更多