devm_gpiod_get_optional 函数
时间: 2024-06-06 22:06:46 浏览: 82
devm_gpiod_get_optional 函数是 Linux 内核中一个用于获取 GPIO 设备节点的函数,其定义在 include/linux/gpio/consumer.h 文件中。
该函数的作用是获取一个可选的 GPIO 设备节点,如果该节点存在则返回对应的 GPIO 描述符,否则返回 NULL。
函数的原型如下:
struct gpio_desc *devm_gpiod_get_optional(struct device *dev, const char *con_id, enum gpiod_flags flags);
参数说明:
- dev:指向要获取 GPIO 设备节点的设备结构体。
- con_id:GPIO 设备节点的名字。
- flags:GPIO 标志,用来指定 GPIO 操作的一些属性,比如输入/输出、下拉/上拉等。
函数返回值:
- 如果获取成功,则返回一个指向 GPIO 描述符的指针。
- 如果获取失败,则返回 NULL。
该函数是一个设备管理器分配的函数,使用该函数分配的 GPIO 描述符会随着设备的销毁而自动释放,避免了手动释放的烦恼。
相关问题
devm_gpiod_get_optional函数的用法是什么
devm_gpiod_get_optional函数的用法是获取可选的GPIO,该函数在给定设备节点的匹配表中查找GPIO并返回对应的GPIO控制句柄。如果该GPIO不存在,该函数会忽略它,并返回NULL。这个函数主要用于获取可选的GPIO,因为在某些情况下,某个GPIO可能不存在,但是如果存在,则需要进行控制。 该函数的原型如下:
```
struct gpio_desc *devm_gpiod_get_optional(struct device *dev,
const char *con_id,
enum gpiod_flags flags);
```
其中:
- dev:指向设备对象的指针;
- con_id:GPIO连接器ID;
- flags:GPIO描述符的标志,用于调整GPIO的行为。
devm_gpiod_get_optional()函数与devm_gpiod_get()区别
`devm_gpiod_get_optional()`和`devm_gpiod_get()`函数都是用来获取GPIO设备的句柄,它们的区别在于:
1. `devm_gpiod_get_optional()`函数会尝试获取GPIO句柄,如果失败会返回NULL,但不会导致probe函数执行失败,而是继续执行。这个函数适用于GPIO设备可选的情况。
2. `devm_gpiod_get()`函数会尝试获取GPIO句柄,如果失败会返回错误码,这个函数适用于GPIO设备必须存在的情况。
因此,如果GPIO设备是可选的,我们可以使用`devm_gpiod_get_optional()`函数来获取GPIO句柄,如果GPIO设备不存在,则可以忽略它。如果GPIO设备是必须存在的,则应该使用`devm_gpiod_get()`函数来获取GPIO句柄,如果GPIO设备不存在,则应该返回错误码并退出probe函数。
阅读全文