devm_pinctrl_get原型
时间: 2023-07-02 13:17:57 浏览: 109
devm_pinctrl_get函数是Linux设备驱动中的一个函数,其原型定义如下:
```
struct pinctrl *devm_pinctrl_get(struct device *dev);
```
该函数的作用是获取指定设备的pin control对象(pinctrl)。函数会自动进行内存管理,并在设备释放时自动释放获取的资源。
参数解释:
- dev:设备指针,表示要获取pin control的设备对象。
返回值:
- 成功:返回pinctrl对象指针。
- 失败:返回一个错误码(负数)。
相关问题
与devm_pinctrl_get() 功能相同的函数
与 `devm_pinctrl_get()` 功能相同的函数是 `pinctrl_get()`。这两个函数的作用都是获取设备的 pin control 句柄,但是它们的使用方式略有不同。
`pinctrl_get()` 函数的使用方式如下:
```
struct pinctrl *pinctrl;
int ret;
pinctrl = pinctrl_get(dev);
if (IS_ERR(pinctrl)) {
dev_err(dev, "Failed to get pinctrl\n");
return PTR_ERR(pinctrl);
}
ret = pinctrl_select_state(pinctrl, "default");
if (ret < 0) {
dev_err(dev, "Failed to select default pinctrl state\n");
pinctrl_put(pinctrl);
return ret;
}
/* ... */
pinctrl_put(pinctrl);
```
与 `devm_pinctrl_get()` 不同,`pinctrl_get()` 获取的是一个非 devm 的 pinctrl 句柄,因此需要在使用完后显式调用 `pinctrl_put()` 函数释放资源。另外,如果 `pinctrl_get()` 函数出错,需要手动调用 `pinctrl_put()` 函数释放已经获取的 pinctrl 句柄。
需要注意的是,如果在获取 pinctrl 句柄后不需要再手动释放资源,最好使用 `devm_pinctrl_get()` 函数,因为它能够自动释放资源,避免出现内存泄漏等问题。
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 引脚描述符,如果该参数不为空,则该函数会尝试使用该描述符而不是从设备节点中获取。