给出 devm_reset_control_get_optional_exclusive 实现
时间: 2023-10-06 19:11:53 浏览: 47
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. 最后,返回该控制器的指针。