gpiod - использовать метки в devicetree - PullRequest
1 голос
/ 06 февраля 2020

Я хочу использовать libgpiod для управления несколькими gp ios через пользовательское пространство на пользовательской плате. У меня есть процессор i.MX6UL, который имеет сотни контактов, я буду использовать только 8 из них (как gp ios).

Я читал о libgpiod, который заменяет старый API sysfs, и я рад, что вы можете указать метки для каждого GPIO. Блок gpio процессора выглядит как следующий блок кода и уже имеет установленное свойство gpio-controller. (Взято из ядра 4.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, поэтому я не могу управлять из пространства пользователя. (Устройство или ресурс занят)

Короче говоря: мне нужен способ установить метку в devicetree, которую я могу читать из пространства пользователя и управлять gp ios. Я уже видел gpio-line-names в devicetree RPi, но я не хочу указывать весь банк как N C, когда используется только один. Возможно ли это с помощью gpiod? Как?

1 Ответ

1 голос
/ 13 марта 2020

Я тестировал на ядре Odroid-N2 5.4.

meson-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 'в качестве потребителя.

...