高通DRM显示框架中panel_list在哪里定义
时间: 2024-03-08 16:50:55 浏览: 37
在高通DRM显示框架中,`panel_list`通常是作为`drm_panel`结构体的成员来定义的。这个结构体定义在`include/drm/drm_panel.h`头文件中。 `panel_list`是一个指向`drm_panel`结构体的指针,用于维护一个已注册面板的列表。在`drm_panel`结构体中,`panel_list`的定义如下:
```
struct drm_panel {
struct device dev;
const struct drm_display_mode *fixed_mode;
const struct drm_display_mode *cur_mode;
struct drm_panel_funcs *funcs;
struct drm_connector *connector;
struct list_head list_entry;
void *private;
struct backlight_device *backlight;
/* ... other members ... */
};
```
可以看到,`panel_list`是通过`list_head`结构体来实现的,这是一个双向链表结构,用于将多个`drm_panel`结构体链接在一起,形成一个已注册面板的列表。在面板注册和注销时,可以通过`list_add`和`list_del`等函数来添加和删除`panel_list`中的元素。
相关问题
高通的DRM显示框架中drm_of_find_panel_or_bridge怎么和设备树一起使用
在高通的DRM显示框架中,`drm_of_find_panel_or_bridge`函数的使用与标准的DRM框架类似,需要结合设备树进行操作。
在使用该函数之前,需要先加载设备树和相关的驱动模块,以及对应的显示控制器驱动。接着,可以使用`of_find_node_by_name`函数来获取设备树中与该显示控制器相关的节点,然后使用`of_find_device_by_node`函数获取该节点对应的设备对象。接下来,可以使用`drm_of_find_panel_or_bridge`函数来查找面板或桥接器节点,并将返回的指针转换成对应的结构体类型,以便后续操作。最后需要注意,在使用完相关的设备对象和结构体后,需要进行相应的释放操作,以免内存泄漏。
以下是一个简单的示例代码:
```c
// 加载设备树和相关的驱动模块
...
// 获取设备树节点对应的设备对象
struct device_node *node = of_find_node_by_name(NULL, "panel-node");
struct device *dev = of_find_device_by_node(node);
if (dev) {
// 查找面板或桥接器节点
struct drm_panel *panel = drm_of_find_panel_or_bridge(node);
if (panel) {
// 对面板进行相关操作
...
// 释放面板对象
drm_panel_detach(panel);
drm_panel_destroy(panel);
}
}
// 释放相关的设备对象和节点
if (dev)
put_device(dev);
of_node_put(node);
```
需要注意的是,具体的操作步骤和函数调用方式可能会因具体的驱动实现而有所不同。因此,在使用`drm_of_find_panel_or_bridge`函数前,建议先查看对应的驱动文档和示例代码,以便更好地理解和使用该函数。
高通的DRM图形框架drm_of_find_panel_or_bridge的使用
函数`drm_of_find_panel_or_bridge`是在DRM驱动中查找并返回驱动程序所需的面板或桥接器设备节点的函数。它的原型如下:
```
struct device_node *drm_of_find_panel_or_bridge(struct device_node *np);
```
该函数接受一个设备节点参数`np`,用于指定要查找的设备节点。函数的返回值是一个指向面板或桥接器设备节点的指针。如果未找到匹配的设备节点,则返回空指针。
使用该函数需要先包含`<linux/of.h>`头文件。
该函数的实现是通过遍历设备节点的子节点来查找面板或桥接器设备节点。它首先查找`"panel"`节点,如果找到则返回该节点的指针;否则查找`"bridge"`节点,如果找到则返回该节点的指针;否则返回空指针。
以下是一个使用`drm_of_find_panel_or_bridge`函数的示例代码:
```
struct device_node *panel_node;
panel_node = drm_of_find_panel_or_bridge(dev->of_node);
if (panel_node) {
// 找到面板设备节点,进行相关操作
// ...
} else {
// 没有找到面板设备节点
// ...
}
```
在这个示例中,`dev->of_node`是一个指向设备节点的指针,用于指定要查找的设备节点。如果函数返回的`panel_node`不为空,则表示找到了面板设备节点,可以对其进行相关操作。否则表示没有找到面板设备节点。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)