Which of the GPIO APIs in Linux device driver programming is preferable and in what conditions: gpio_set_value()
or gpiod_set_value()
?
One takes the GPIO desc as the object while other takes the GPIO parsed from the device tree.
Which of the GPIO APIs in Linux device driver programming is preferable and in what conditions: gpio_set_value()
or gpiod_set_value()
?
One takes the GPIO desc as the object while other takes the GPIO parsed from the device tree.
For all new drivers it's recommended to use gpiod_*
API. Old gpio_*
API is considered deprecated now.
From this commit:
gpiolib: export descriptor-based GPIO interface
This patch exports the
gpiod_*
family of API functions, a safer alternative to the legacy GPIO interface. Differences between the gpiod and legacy gpio APIs are:
- gpio works with integers, whereas gpiod operates on opaque handlers which cannot be forged or used before proper acquisition
- gpiod get/set functions are aware of the active low state of a GPIO
- gpio consumers should now include
<linux/gpio/consumer.h>
to access the new interface, whereas chips drivers will use<linux/gpio/driver.h>
The legacy gpio API is now built as inline functions on top of gpiod.
See next links for details on new gpiod API:
[Kernel documentation] GPIO Descriptor Consumer Interface
(and rest of gpiod kernel documentation added by this commit)