Raulp
Raulp

Reputation: 8136

gpiod_* vs gpio_* methods in the Linux Kernel

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.

Upvotes: 5

Views: 3637

Answers (1)

Sam Protsenko
Sam Protsenko

Reputation: 14743

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:

Upvotes: 12

Related Questions