devm_drm_of_get_bridge
时间: 2023-08-01 10:12:36 浏览: 148
`devm_drm_of_get_bridge` 是一个函数,用于从设备树中获取 DRM 框架中的一个桥接器对象,并将其与设备进行关联。它是在 Linux 内核中的 `drivers/gpu/drm/drm_of.c` 文件中定义的。这个函数使用设备树节点描述符作为参数,并返回一个指向 drm_bridge 结构体的指针,或者一个错误码。这个函数还会自动管理这个桥接器的内存,这意味着它会在设备被卸载时自动释放相关的资源。
相关问题
高通的DRM图形显示框架没有devm_drm_of_get_bridge怎么办
如果高通的 DRM 图形显示框架没有 `devm_drm_of_get_bridge`,你可以使用 `drm_of_find_panel_or_bridge` 函数来替代。这个函数可以在设备树中查找与指定设备节点匹配的面板或桥接器节点,然后返回一个指向 drm_bridge 结构的指针。你可以通过该指针来访问桥接器的属性和方法。
下面是一个使用 `drm_of_find_panel_or_bridge` 函数来获取 DRM 桥接器的示例代码:
```c
struct drm_bridge *bridge;
struct device_node *node;
/* 获取设备节点 */
node = of_parse_phandle(dev->of_node, "port", 0);
if (!node) {
dev_err(dev, "failed to find port node\n");
return -ENODEV;
}
/* 查找桥接器 */
bridge = drm_of_find_panel_or_bridge(node);
if (!bridge) {
dev_err(dev, "failed to find bridge\n");
return -ENODEV;
}
/* 访问桥接器属性和方法 */
bridge->funcs->attach(bridge);
```
在这个示例代码中,我们首先使用 `of_parse_phandle` 函数获取设备节点,然后通过 `drm_of_find_panel_or_bridge` 函数查找与该设备节点匹配的 DRM 桥接器。最后,我们可以通过桥接器的 `attach` 方法来连接桥接器。
请注意,如果你需要在驱动程序中频繁使用 `drm_of_find_panel_or_bridge` 函数,你应该将返回的桥接器结构体保存在设备结构体中,以便以后可以快速访问它。
panel_bridge = devm_drm_of_get_bridge(dev, dev->of_node, 2, 0);怎么解析设备树的,设备树应该怎么定义
这行代码中的 `devm_drm_of_get_bridge` 函数的作用是从设备树中获取一个指向 DRM 框架中的一个桥接器对象的指针。该函数的第一个参数是指向设备的指针,在这个例子中是 `dev`。第二个参数是指向设备树节点的指针,也就是 `dev->of_node`。第三个参数是桥接器类型,这里是 2。第四个参数是桥接器 ID,这里是 0。
在设备树中定义一个桥接器需要指定其节点名称和属性。在这个例子中,节点名称是 "bridge@2",即桥接器类型为 2。属性则根据不同类型的桥接器而不同。例如,如果是一个 MIPI DSI 桥接器,则需要定义一些 DSI 相关的属性,如下所示:
```
bridge@2 {
compatible = "panel-bridge";
reg = <2>;
#address-cells = <1>;
#size-cells = <0>;
bridge-type = "mipi-dsi";
dsi-lanes = <4>;
dsi-format = <0x1>;
dsi-video-mode = <0>;
dsi-hsync-active = <0>;
dsi-vsync-active = <0>;
status = "okay";
}
```
这个设备树节点指定了一个 MIPI DSI 桥接器,它有 4 条数据通道,使用 0x1 格式,采用非视频模式,水平同步信号为低电平有效,垂直同步信号为低电平有效。`compatible` 属性指定了该节点对应的驱动程序,这里是 `panel-bridge`。`reg` 属性指定了该节点的地址,这里是 2。`status` 属性指定了该节点的状态,这里是 "okay",表示该节点正常工作。
阅读全文