高通的drm显示架构中of_graph_get_endpoint_by_regs(dev->of_node, 0, 0);
时间: 2023-12-08 14:06:37 浏览: 238
该函数是在Linux内核中使用的,用于获取设备树中指定寄存器值的端点(endpoint)节点。在高通的DRM显示架构中,该函数可能被用于获取设备树中与显示控制器相关的端点信息,以便在内核中配置和管理显示控制器。具体而言,函数的第一个参数dev->of_node是用于访问设备树节点的指针;第二个参数0是指要获取的端点的起始寄存器地址;第三个参数0是指要获取的端点的起始偏移量。
相关问题
高通sa8155平台的DRM图形显示架构of_graph_get_endpoint_by_regs函数的作用
在高通SA8155平台上,DRM图形显示架构使用设备树来描述显卡硬件的各个组件,包括像素时钟、显示控制器、HDMI控制器等。`of_graph_get_endpoint_by_regs` 函数就是用于在设备树中查找指定设备节点的指定端点,并返回该端点的设备节点指针。
在 DRM 图形显示架构中,`of_graph_get_endpoint_by_regs` 函数通常用于获取连接到像素时钟、显示控制器、HDMI控制器等组件的数据源或数据目的的设备节点。例如,如果要获取连接到设备节点 `/soc/display@11c0000` 的第 0 个端点(表示该节点的数据源),可以使用以下代码:
```
#include <linux/of.h>
struct device_node *np;
const u32 regs[] = {0};
struct device_node *ep;
np = of_find_node_by_path("/soc/display@11c0000");
ep = of_graph_get_endpoint_by_regs(np, 0, regs, 1);
if (ep) {
// 如果找到了指定的端点,则在这里进行处理
// ...
}
of_node_put(np); // 记得释放设备节点
```
这里的 `of_find_node_by_path` 函数用于获取设备节点 `/soc/display@11c0000` 的指针,然后 `of_graph_get_endpoint_by_regs` 函数用于获取该节点的第 0 个端点的设备节点指针。如果找到了指定的端点,则可以在代码中对该端点进行处理。
需要注意的是,`of_graph_get_endpoint_by_regs` 函数只能在设备树中定义了 `reg` 属性的节点中使用,而且 `regs` 参数必须与设备树中定义的 `reg` 属性的值匹配。在使用该函数时,需要仔细查看设备树中的节点定义,确保参数的正确性。
基于高通DRM图形显示框架of_graph_get_remote_node(np, 1, 0);
在高通的 DRM 图形显示框架中,`of_graph_get_remote_node(np, 1, 0)` 函数用于查找与当前设备连接的第一个远程节点。其中,`np` 参数是指向当前设备节点的指针,`1` 表示端口号为 1,`0` 表示远程节点的 phandle 为 0。在高通的 DRM 中,通常使用 `of_graph_parse_endpoint` 函数来解析设备树中的连接信息,然后调用 `of_graph_get_remote_node` 函数查找远程节点。
例如,以下代码片段是高通 DRM 中的一个示例,用于查找与当前设备连接的 fbdev 节点:
```
struct device_node *ep;
struct device_node *remote;
ep = of_graph_parse_endpoint(dev->of_node, "output");
if (!ep) {
return ERR_PTR(-EINVAL);
}
remote = of_graph_get_remote_node(ep, 1, 0);
if (!remote) {
return ERR_PTR(-ENODEV);
}
if (!of_device_is_available(remote)) {
return ERR_PTR(-ENODEV);
}
of_node_put(ep);
```
在这个示例中,`of_graph_parse_endpoint` 函数解析当前设备节点的连接信息,`of_graph_get_remote_node` 函数查找与当前设备连接的远程节点,然后通过 `of_device_is_available` 函数检查远程节点是否可用。如果远程节点不可用,函数返回 `-ENODEV` 错误码,否则返回远程节点的指针。
阅读全文