devm_gpiod_get_optional()函数与devm_gpiod_get()区别
时间: 2024-05-21 20:18:31 浏览: 446
`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函数。
相关问题
devm_gpiod_get
`devm_gpiod_get`是一个函数,它用于获取一个GPIO设备的一个GPIO描述符。该函数是在设备驱动程序中使用的,它可以使用“devm_”前缀,以便在设备被释放时自动删除GPIO描述符。
该函数的原型为:
```c
struct gpio_desc *devm_gpiod_get(struct device *dev, const char *con_id,
enum gpiod_flags flags);
```
其中,参数`dev`是设备指针,参数`con_id`是GPIO控制器的ID(字符串类型),参数`flags`是GPIO标志。函数返回一个GPIO描述符,或者在出错时返回一个错误指针。
使用该函数获取GPIO描述符后,可以使用GPIO描述符来控制GPIO的状态,例如读取或设置GPIO的值、配置GPIO的方向等。
devm_gpiod_get意思
`devm_gpiod_get()` 是 Linux 内核提供的一个函数,用于获取一个 GPIO 的控制权。
在 Linux 内核中,GPIO 资源通常是被多个设备所共享的,因此需要对 GPIO 资源进行管理,以避免资源冲突等问题。`devm_gpiod_get()` 函数可以帮助设备驱动程序获取一个 GPIO 资源的控制权,并对该 GPIO 资源进行管理。它的函数原型如下:
```c
struct gpio_desc *devm_gpiod_get(struct device *dev,
const char *con_id,
enum gpiod_flags flags);
```
其中,`dev` 是指向设备结构体的指针;`con_id` 是 GPIO 控制器标识符,通常是设备树中的 phandle 或者字符串;`flags` 是获取 GPIO 资源时的标志,用于指定 GPIO 的方向、电平等信息。
`devm_gpiod_get()` 函数返回一个 `struct gpio_desc` 结构体指针,该结构体表示一个 GPIO 资源的描述符。设备驱动程序可以使用该描述符对 GPIO 资源进行操作,例如设置 GPIO 方向、读写 GPIO 电平等。同时,`devm_gpiod_get()` 函数还会在设备释放时自动释放所获取的 GPIO 资源,从而避免资源泄露等问题。
阅读全文