5

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.

Sam Protsenko
  • 14,045
  • 4
  • 59
  • 75
Raulp
  • 7,758
  • 20
  • 93
  • 155

1 Answers1

11

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:

Luca Ceresoli
  • 1,591
  • 8
  • 19
Sam Protsenko
  • 14,045
  • 4
  • 59
  • 75