gpiod_get() - How to get GPIO from chip & offset?

Ian Pilcher arequipeno at
Sun Aug 7 10:55:32 EDT 2022

I am trying to figure out how to use gpiod_get(), or one of its
variants, to get the descriptor (struct gpio_desc *) for a specific
GPIO.  Getting a reference to the GPIO chip (struct gpio_chip *) is
straightforward, and it provides a pointer to the device (.parent), but
I absolutely cannot figure out what I am supposed to pass as the
*con_id* argument.

I know the offset of the GPIO on the chip, but I can't figure out how to
use that.

Ultimately, my goal is to set the direction of the GPIO from within a
"board setup" module.


I maintain an out-of-tree "board" module[1] that sets up the GPIOs and
LEDs on my Thecus NAS.  I am in the process of upgrading the OS on the
NAS, which will require me to change the user-space daemon from the old
sysfs GPIO interface to the new (non-ancient?) gpiod interface.

One significant difference between the sysfs and gpiod interfaces, is
that the new interface does not seem to provide an easy way to set a
GPIO's direction (input/output) from a shell script[2].  Thus, I would
like the board module to do that, along with the other setup.


[2] It may be possible to change a GPIO's direction from user space with
     the C API, but doing it in the kernel module, which does all of the
     other hardware configuration, seems like the most appropriate way.

Google                                      Where SkyNet meets Idiocracy

More information about the Kernelnewbies mailing list