devm_gpiod_get_optional
时间: 2023-04-28 09:04:59 浏览: 454
devm_gpiod_get_optional是一个函数,用于获取可选的GPIO设备。它是Linux内核中的一个函数,用于在设备树中查找GPIO设备,并返回一个GPIO描述符。如果找不到GPIO设备,则返回NULL。该函数使用devm_前缀,表示它是一个设备管理函数,可以自动释放资源。
相关问题
devm_gpiod_get_optional用法
devm_gpiod_get_optional 是 Linux 内核中的一个函数,用于获取一个可选的 GPIO 设备。它的声明位于 include/linux/gpio/consumer.h 头文件中。
该函数的使用方法如下:
```c
struct gpio_desc *devm_gpiod_get_optional(struct device *dev,
const char *con_id,
enum gpiod_flags flags);
```
参数解释:
- `dev`: 指向设备结构体的指针,表示要获取 GPIO 设备的设备。
- `con_id`: GPIO 控制器的标识符,用于指定要获取的 GPIO 设备。
- `flags`: GPIO 设备的标志位,用于控制设备的行为。
返回值:
- 成功时,返回指向 gpio_desc 结构体的指针,表示获取到的 GPIO 设备。
- 失败时,返回一个 ERR_PTR 类型的指针,表示获取失败。
注意事项:
- `devm_gpiod_get_optional` 是使用 `devm` 机制进行内存管理的函数,会在设备被释放时自动释放获取到的 GPIO 设备。
- 如果未能获取到 GPIO 设备,函数会返回一个空指针,而不是一个负值错误代码。
示例代码如下:
```c
#include <linux/gpio/consumer.h>
struct gpio_desc *gpio;
gpio = devm_gpiod_get_optional(dev, "gpio-controller", GPIOD_OUT_HIGH);
if (IS_ERR(gpio)) {
dev_err(dev, "Failed to get GPIO\n");
return PTR_ERR(gpio);
}
// 使用获取到的 GPIO 设备进行操作
...
```
以上是 `devm_gpiod_get_optional` 函数的用法说明,希望能对你有所帮助。如有更多疑问,请继续提问。
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 引脚描述符,如果该参数不为空,则该函数会尝试使用该描述符而不是从设备节点中获取。
阅读全文