gpio-it87: gpiod_get*() always return -ENOENT

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello,

Appologies if submitting to wrong list.

I am developing a driver for PCIe-based device that needs to receive external signals through on-board GPIOs. The target platform is Intel-based board and running Fedora 34 kernel 5.11.12-300.fc34.x86_64 and has GPIO devices driver by gpio-it87.

# gpiodetect
gpiochip0 [INT34BB:00] (312 lines)
gpiochip1 [gpio_it87] (64 lines)

8 of available 64 lines are connected to a header on the board:

# gpioinfo 1
        ...
        line  49:  "it87_gp71"       unused   input  active-high
        line  50:  "it87_gp72"       unused   input  active-high
        line  51:  "it87_gp73"       unused   input  active-high
        line  52:  "it87_gp74"       unused   input  active-high
        line  53:  "it87_gp75"       unused   input  active-high
        line  54:  "it87_gp76"       unused   input  active-high
        line  55:  "it87_gp77"       unused   input  active-high
        ...

These lines are verified with logic analyzer and `gpioset 1 nn=0|1`

The PCIe device driver defines these lines as:

static struct gpiod_lookup_table gpio_it87_gpios = {
        .dev_id = "gpio_it87",
        .table = {
                GPIO_LOOKUP("gpio-it87", 48, "it87_gp70", GPIO_ACTIVE_HIGH),
                GPIO_LOOKUP("gpio-it87", 49, "it87_gp71", GPIO_ACTIVE_HIGH),
                GPIO_LOOKUP("gpio-it87", 50, "it87_gp72", GPIO_ACTIVE_HIGH),
                GPIO_LOOKUP("gpio-it87", 51, "it87_gp73", GPIO_ACTIVE_HIGH),
                GPIO_LOOKUP("gpio-it87", 52, "it87_gp74", GPIO_ACTIVE_HIGH),
                GPIO_LOOKUP("gpio-it87", 53, "it87_gp75", GPIO_ACTIVE_HIGH),
                GPIO_LOOKUP("gpio-it87", 54, "it87_gp76", GPIO_ACTIVE_HIGH),
                GPIO_LOOKUP("gpio-it87", 55, "it87_gp77", GPIO_ACTIVE_HIGH),
                {},
        },
};

and then adds them to lookup table, eg.:

gpiod_add_lookup_table(&gpio_it87_gpios);

However, none of those lines are available at

struct desc *gpio = gpiod_get(dev, "it87_gp70", GPIOD_IN);

Above returns -ENOENT for any of those lines.
I believe it is due to incorrct lookup definions in gpio_it87_gpios above, however, I cannot figure out what is wrong there. 

Thanks,
--Alex



[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux