pinctrl_get
时间: 2023-09-02 09:12:58 浏览: 136
pinctrl_get是Linux内核中的一个函数,它用于获取pinctrl的句柄。pinctrl是一个用于管理GPIO(通用输入/输出)和其他可编程引脚的子系统,它可以通过pinctrl_get函数来获得一个pinctrl的实例以进行进一步的操作。在调用pinctrl_get函数时,需要指定pinctrl的名称以及对应的设备节点,函数会返回一个指向pinctrl实例的指针,如果获取失败则返回NULL。
相关问题
devm_pinctrl_get原型
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()` 函数,因为它能够自动释放资源,避免出现内存泄漏等问题。
阅读全文