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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With