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

Ian Pilcher arequipeno at gmail.com
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.


BACKGROUND

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.

[1] https://github.com/ipilcher/n5550/blob/master/modules/n5550_board.c

[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