devm_gpiod_get_optional和devm_gpiod_get_optional区别
时间: 2023-10-02 07:04:00 浏览: 170
请注意,您提供的两个函数名称是相同的,我假设您想问的是以下两个函数的区别:
1. `devm_gpiod_get_optional()`:此函数是Linux内核提供的一个帮助程序,用于获取GPIO设备的可选引脚句柄(handle)。如果GPIO设备存在,则返回引脚句柄,否则返回NULL。此函数使用devres机制进行内存管理,因此如果使用devm_gpiod_get_optional()获取引脚句柄,则无需在使用完成后手动释放该句柄。
2. `devm_gpiod_get_optional()`:这是一个错误的函数名称,我猜测您想说的是`devm_gpio_get_optional()`。与`devm_gpiod_get_optional()`类似,此函数也是用于获取GPIO设备的可选GPIO句柄。但是,这个函数是用于旧版GPIO子系统,而不是新版GPIO子系统(gpiolib)。如果您的平台使用的是旧版GPIO子系统,则可以使用此函数来获取GPIO句柄,否则请使用`devm_gpiod_get_optional()`函数。
因此,这两个函数的区别在于它们所针对的GPIO子系统不同。`devm_gpiod_get_optional()`适用于新版GPIO子系统,而`devm_gpio_get_optional()`适用于旧版GPIO子系统。
相关问题
gpio_request_optional和devm_gpiod_get_optional的函数定义
gpio_request_optional函数的定义如下:
```c
int gpio_request_optional(unsigned gpio, const char *label)
```
gpio_request_optional函数用于请求一个可选的GPIO,即如果指定的GPIO可用,则请求该GPIO,否则不进行任何操作。它的参数包括gpio,表示要请求的GPIO编号,和label,表示GPIO的标签。函数返回值为0表示成功,负数表示失败。
devm_gpiod_get_optional函数的定义如下:
```c
struct gpio_desc *devm_gpiod_get_optional(struct device *dev,
const char *con_id,
enum gpiod_flags flags)
```
devm_gpiod_get_optional函数用于获取一个可选的GPIO描述符,即如果指定的GPIO可用,则返回该GPIO的描述符,否则返回NULL。它的参数包括dev,表示设备结构体指针,con_id,表示GPIO的连接ID,flags,表示GPIO的标志。函数返回值为获取到的GPIO描述符或NULL。
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函数。
阅读全文