高通DRMi显示框架中的这段代码怎么解释struct device_node *of_graph_get_endpoint_by_regs( const struct device_node *parent, int port_reg, int reg) { struct of_endpoint endpoint; struct device_node *node = NULL; for_each_endpoint_of_node(parent, node) { of_graph_parse_endpoint(node, &endpoint); if (((port_reg == -1) || (endpoint.port == port_reg)) && ((reg == -1) || (endpoint.id == reg))) return node; } return NULL; }
时间: 2024-04-26 14:24:04 浏览: 114
这段代码是一个函数实现,用于在设备树中查找指定的输出端点。
函数名是of_graph_get_endpoint_by_regs,接受三个参数: parent、port_reg 和 reg。其中,parent是设备树中一个节点的父节点,port_reg和reg是用来查找输出端点的寄存器值。
函数实现的主要逻辑如下:
1. 定义一个of_endpoint类型的结构体变量endpoint和一个device_node类型的指针变量node,用于解析和遍历设备树的输出端点。
2. 调用for_each_endpoint_of_node宏,遍历parent节点的所有输出端点。
3. 对于每个输出端点,调用of_graph_parse_endpoint函数,解析该节点的endpoint属性,获取输出端点的信息。
4. 判断输出端点的port属性和id属性是否与指定的port_reg和reg相等。
5. 如果相等,则返回该输出端点的device_node指针;否则继续遍历其他输出端点。
6. 如果遍历完所有的输出端点都没有找到匹配的节点,则返回NULL。
该函数应用于DRM驱动程序中,用于查找指定的输出端点,例如查找指定分辨率的输出端点,然后将显示器的分辨率设置为符合要求的输出端点。
阅读全文