devm_gpiod_get_optional()函数与devm_gpiod_get()区别
时间: 2024-05-21 16:18:31 浏览: 19
`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_optional 函数
devm_gpiod_get_optional函数是用来获取GPIO设备的句柄的函数,它是在设备驱动中使用的。
函数原型:struct gpio_desc *devm_gpiod_get_optional(struct device *dev,const char *con_id,unsigned int flags);
参数说明:
- dev:设备对象指针。
- con_id:GPIO 控制器标识符。
- flags:GPIO 标志位,如 GPIO_ACTIVE_HIGH、GPIO_ACTIVE_LOW、GPIO_OPEN_DRAIN 等。
函数返回值:
- 成功:返回 GPIO 设备描述符指针。
- 失败:返回 NULL。
该函数的作用与devm_gpiod_get函数类似,不同之处在于,如果没有找到GPIO控制器,则返回NULL,而不是引起错误。
此函数将申请一个GPIO描述符,用于对GPIO资源进行操作。申请的描述符是设备驱动的私有数据,当调用devm_gpiod_put函数时,这个描述符就会被释放。
在使用devm_gpiod_get_optional函数时,需要注意以下几点:
- 该函数只在设备驱动中使用,用户空间无法调用。
- 在使用GPIO之前,需要在设备树中定义GPIO控制器和GPIO引脚。
- con_id参数是一个字符串,用于标识GPIO控制器,需要在设备树中定义。
- flags参数用于指定GPIO的工作模式,如输入、输出、上拉、下拉等。
- 调用此函数后,必须检查返回值是否为NULL,以避免出现空指针引用错误。
devm_gpiod_get_optional原型
`devm_gpiod_get_optional()` 是一个函数宏,它的原型定义如下:
```c
#define devm_gpiod_get_optional(dev, propname, flags) \
__devm_gpiod_get_optional(dev, propname, flags, NULL)
```
其中,`__devm_gpiod_get_optional()` 是实际的函数,它的原型定义如下:
```c
struct gpio_desc * __devm_gpiod_get_optional(struct device *dev,
const char *con_id,
unsigned int flags,
const struct gpio_desc *desc);
```
该函数用于获取设备节点上的 GPIO 引脚描述符。如果设备节点中没有指定该 GPIO 引脚,该函数会返回一个空指针而不会产生错误。函数的参数含义如下:
- `dev`:指向设备节点的指针。
- `con_id`:指定要获取的 GPIO 引脚的连接 ID 字符串。
- `flags`:指定 GPIO 引脚的标志位。
- `desc`:指定一个可选的 GPIO 引脚描述符,如果该参数不为空,则该函数会尝试使用该描述符而不是从设备节点中获取。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)