Я работаю над встроенной системой 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 в свое приложение