devm_reset_control_get_optional_exclusive函数的作用
时间: 2023-10-10 10:11:24 浏览: 110
devm_reset_control_get_optional_exclusive函数的作用是获取一个名为"reset"的设备复位控制器句柄。如果该句柄存在,则它将被独占地分配给调用者。若不存在,则返回NULL。此函数通常用于在设备驱动程序中获取复位控制器的句柄,以允许设备实现对设备进行复位控制的功能。
相关问题
devm_reset_control_get_optional_exclusive 函数
是一个设备树控制函数,用于获取一个可选的、独占的重置控制器。
该函数的参数包括:
- dev:指向设备的指针。
- id:用于指定要获取的重置控制器的标识符。
- exclusive:一个布尔值,指示是否要独占该重置控制器。
该函数首先会检查设备是否包含重置控制器节点。如果设备没有重置控制器,或者重置控制器被禁用,函数将返回空指针。
如果重置控制器节点存在,函数会尝试获取重置控制器的 reset 控制器句柄。如果获取失败,函数将返回空指针。
如果获取成功,函数将根据 exclusive 参数决定是否要独占该重置控制器。如果 exclusive 参数为 true,函数将尝试获取重置控制器的独占使用权。如果获取失败,函数将返回空指针。
最后,函数将返回重置控制器的句柄。如果 exclusive 参数为 false,多个设备可以共享同一个重置控制器。如果 exclusive 参数为 true,函数将确保只有一个设备可以使用该重置控制器,直到该设备释放该重置控制器。
给出 devm_reset_control_get_optional_exclusive 实现
devm_reset_control_get_optional_exclusive 函数的实现如下:
```
struct reset_control *devm_reset_control_get_optional_exclusive(struct device *dev, const char *id)
{
struct reset_controller_dev *rcdev;
struct reset_control *reset;
int ret;
rcdev = devm_reset_controller_dev_get(dev);
if (IS_ERR(rcdev))
return ERR_CAST(rcdev);
reset = reset_control_get_exclusive_rcdev(rcdev, id);
if (!reset)
return NULL;
ret = devm_reset_control_array_add_exclusive(dev, &reset, 1);
if (ret < 0)
reset_control_put(reset);
return reset;
}
```
该函数主要是用于获取设备的重置控制器,并获取指定重置控制器的控制权。如果获取成功,则将该控制器添加到设备的重置控制数组中,并返回该控制器的指针。如果获取失败,则返回 NULL。
函数的参数说明如下:
- `dev`:指向设备结构体的指针。
- `id`:代表要获取的重置控制器的标识符字符串。
函数的实现细节如下:
1. 首先,调用 `devm_reset_controller_dev_get()` 函数获取设备的重置控制器。如果获取失败,则直接返回错误码。
2. 接下来,调用 `reset_control_get_exclusive_rcdev()` 函数获取指定重置控制器的控制权。如果获取失败,则返回 NULL。
3. 如果获取成功,则调用 `devm_reset_control_array_add_exclusive()` 函数将该控制器添加到设备的重置控制数组中。如果添加失败,则调用 `reset_control_put()` 函数释放该控制器,并返回 NULL。
4. 最后,返回该控制器的指针。
阅读全文