高通的linux内核sn65dsi84芯片驱动这么使用drm_of_find_panel_or_bridge(dev->of_node, 2, 0, &panel, &panel_bridge);dts应该怎么配置
时间: 2023-12-10 07:05:08 浏览: 246
linux下的网桥配置
sn65dsi84是一款MIPI DSI到LVDS转换器芯片,其在Linux内核中需要驱动程序进行支持。在使用`drm_of_find_panel_or_bridge`函数时,需要查找与这个转换器芯片连接的面板或桥接器设备节点。因此,需要在DTS中进行相应的配置。
首先,需要在DTS中定义sn65dsi84芯片的节点,例如:
```
sn65dsi84@2c {
compatible = "ti,sn65dsi84";
reg = <0x2c>;
// 其他属性和配置
};
```
其中,`compatible`属性需要与驱动程序中的设备匹配,`reg`属性用于指定芯片的寄存器地址。根据实际情况进行配置。
接下来,需要定义与这个转换器芯片连接的面板或桥接器设备节点。具体节点名和属性需要根据实际情况进行配置。如果要查找面板设备节点,可以定义一个名为"panel"的节点,例如:
```
panel {
compatible = "acme,panel";
reg = <0x0>;
// 其他属性和配置
};
```
如果要查找桥接器设备节点,可以定义一个名为"bridge"的节点,例如:
```
bridge {
compatible = "acme,bridge";
reg = <0x0>;
// 其他属性和配置
};
```
最后,在驱动程序中使用`drm_of_find_panel_or_bridge`函数时,需要将第一个参数的值设置为2,表示查找到设备节点的子节点的子节点;将第二个参数的值设置为0或1,表示查找面板或桥接器设备节点;将第三个参数设置为一个指向面板设备节点指针的变量;将第四个参数设置为一个指向桥接器设备节点指针的变量。例如:
```
struct device_node *panel_node, *bridge_node;
panel_node = drm_of_find_panel_or_bridge(dev->of_node, 2, 0, &panel_node, &bridge_node);
if (panel_node) {
// 找到面板设备节点,进行相关操作
// ...
} else if (bridge_node) {
// 找到桥接器设备节点,进行相关操作
// ...
} else {
// 没有找到面板或桥接器设备节点
// ...
}
```
在这个示例中,`dev->of_node`是一个指向sn65dsi84节点的指针。函数会在这个节点的子节点中查找面板或桥接器设备节点,并将其指针存储在`panel_node`或`bridge_node`中。如果找到面板设备节点,则进行相关操作;如果找到桥接器设备节点,则进行相关操作;否则表示没有找到面板或桥接器设备节点。
阅读全文