Как указать имя gpiochip в дереве устройств? - PullRequest
0 голосов
/ 17 марта 2020

Я работаю над встроенной системой linux с несколькими строками ввода-вывода, к которым я хочу получить доступ с помощью libgpiod. Чтобы упростить задачу, было бы здорово, если бы я мог искать различные gpiochips по имени, но, к сожалению, вывод gpiodetect выглядит так:

gpiochip0 [ff708000.gpio] (29 lines)
gpiochip1 [ff709000.gpio] (29 lines)
gpiochip2 [ff70a000.gpio] (27 lines)
gpiochip3 [pca9534] (8 lines)
gpiochip4 [pca9534] (8 lines)
gpiochip5 [pca9534] (8 lines)
gpiochip6 [pca9534] (8 lines)
gpiochip7 [pca9534] (8 lines)
gpiochip8 [pca9534] (8 lines)

Я хочу получить доступ к GP IOs из PCA9534 IO-расширители, которые - как вы можете видеть - все имеют одно и то же имя.

Я знаю, что могу назначить имя для каждой отдельной строки, но как насчет чипа? Есть ли способ указать имя gpiochip в дереве устройств?

EDIT: Это часть дерева устройств, с несколькими IO-экспандерами

i2c_mux: i2cmux@70 {
    compatible = "nxp,pca9543";
    reg = <0x70>;
    #address-cells = <1>;
    #size-cells = <0>;

    ext0: i2c@0 {
        reg = <0x00>;
        #address-cells = <1>;
        #size-cells = <0>;

        ext0_id0: gpio@38 {
            compatible = "nxp,pca9534";
            reg = <0x38>;
            gpio-controller;
            #gpio-cells = <2>;
            ngpios = <8>;
        };

        ext0_id1: gpio@39 {
            compatible = "nxp,pca9534";
            reg = <0x39>;
            gpio-controller;
            #gpio-cells = <2>;
            ngpios = <8>;
        };

        ext0_gpio_out: gpio@3A {
            compatible = "nxp,pca9534";
            reg = <0x3A>;
            gpio-controller;
            #gpio-cells = <2>;
            ngpios = <8>;
        };
    };
};

РЕДАКТИРОВАТЬ: Я тестировал с ядром версии 5.6-rc6, и теперь вывод gpiodetect более разумный:

gpiochip0 [ff708000.gpio] (29 lines)
gpiochip1 [ff709000.gpio] (29 lines)
gpiochip2 [ff70a000.gpio] (27 lines)
gpiochip3 [2-0038] (8 lines)
gpiochip4 [2-0039] (8 lines)
gpiochip5 [2-003a] (8 lines)
gpiochip6 [2-003b] (8 lines)
gpiochip7 [3-0038] (8 lines)
gpiochip8 [3-0039] (8 lines)

Версия libgpiod (в обоих случаях) - 1.4.1, вывод ls -l /sys/class/gpio is

drwxr-xr-x    2 root     root           0 Mar 12 14:00 .
drwxr-xr-x   32 root     root           0 Jan  1  2001 ..
--w-------    1 root     root        4.0K Mar 12 14:00 export
lrwxrwxrwx    1 root     root           0 Mar 12 14:00 gpiochip1915 -> ../../devices/platform/sopc@0/ffc05000.i2c/i2c-1/i2c-3/3-0039/gpio/gpiochip1915
lrwxrwxrwx    1 root     root           0 Mar 12 14:00 gpiochip1923 -> ../../devices/platform/sopc@0/ffc05000.i2c/i2c-1/i2c-3/3-0038/gpio/gpiochip1923
lrwxrwxrwx    1 root     root           0 Mar 12 14:00 gpiochip1931 -> ../../devices/platform/sopc@0/ffc05000.i2c/i2c-1/i2c-2/2-003b/gpio/gpiochip1931
lrwxrwxrwx    1 root     root           0 Mar 12 14:00 gpiochip1939 -> ../../devices/platform/sopc@0/ffc05000.i2c/i2c-1/i2c-2/2-003a/gpio/gpiochip1939
lrwxrwxrwx    1 root     root           0 Mar 12 14:00 gpiochip1947 -> ../../devices/platform/sopc@0/ffc05000.i2c/i2c-1/i2c-2/2-0039/gpio/gpiochip1947
lrwxrwxrwx    1 root     root           0 Mar 12 14:00 gpiochip1955 -> ../../devices/platform/sopc@0/ffc05000.i2c/i2c-1/i2c-2/2-0038/gpio/gpiochip1955
lrwxrwxrwx    1 root     root           0 Mar 12 14:00 gpiochip1963 -> ../../devices/platform/sopc@0/ff70a000.gpio/gpio/gpiochip1963
lrwxrwxrwx    1 root     root           0 Mar 12 14:00 gpiochip1990 -> ../../devices/platform/sopc@0/ff709000.gpio/gpio/gpiochip1990
lrwxrwxrwx    1 root     root           0 Mar 12 14:00 gpiochip2019 -> ../../devices/platform/sopc@0/ff708000.gpio/gpio/gpiochip2019
--w-------    1 root     root        4.0K Mar 12 14:00 unexport

К сожалению, на данный момент обновление для меня на самом деле не вариант, поэтому я думаю, мне просто придется жестко закодировать идентификаторы gpiochip в свое приложение

...