完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1. RK3399图显系统介绍 RK3399支持两个视频显示控制器,称之为VOP。可以支持的显示外设包括HDMI、MIPI-DSI、eDP、DisplayPort等。 2. 图显系统软件框架 RK3399图显系统的软件框架定义了各组件之间的拓扑关系、绑定流程及DRM系统注册等内容。相较于树莓派4B在驱动代码中定义各个组件之间的拓扑关系,RK3399则是在设备树中定义各组件之间的关系,然后在驱动代码解析设备树实现各组件的绑定。由于vopb和vopl支持的分辨率不同,所以,每个图显外设的设备树同两个vop均进行了关联。 2.1 设备树定义 RK3399的设备树框架如下图所示,在display-subsystem下挂接了两个端口vopl_out、vopb_out,这两个端口分别属于node vopl与node vopb。在node vop中各挂接4各端口,分别指向node MIPI、node edp、node hdmi、node dp等。 设备树中通过ports和port定义端口。通过#address-cells和#size-cells限定phandle reg编号。利用endpoint与remote-endpoint进行端口间的联结。 设备树中多媒体IP端口的定义如下: device { ... ports { #address-cells = <1>; #size-cells = <0>; port@0 { ... endpoint@0 { ... }; endpoint@1 { ... }; }; }; };
设备树中描述多媒体IP之间联结关系的定义如下: device-1 { port { device_1_output: endpoint { remote-endpoint = <&device_2_input>; }; }; }; device-2 { port { device_2_input: endpoint { remote-endpoint = <&device_1_output>; }; }; };
2.2 设备树解析 RK3399 DRM图显系统基于display-subsystem的匹配字符串rockchip,display-subsystem为入口进行驱动程序的注册。 static const struct of_device_id rockchip_drm_dt_ids[] = { { .compatible = "rockchip,display-subsystem", }, { /* sentinel */ }, }; MODULE_DEVICE_TABLE(of, rockchip_drm_dt_ids); static struct platform_driver rockchip_drm_platform_driver = { .probe = rockchip_drm_platform_probe, .remove = rockchip_drm_platform_remove, .shutdown = rockchip_drm_platform_shutdown, .driver = { .name = "rockchip-drm", .of_match_table = rockchip_drm_dt_ids, .pm = &rockchip_drm_pm_ops, }, }; 在rockchip_drm_platform_of_probe()函数中解析rockchip,display-subsystem中的phandle ports属性。获得ports vopl对应的device_node信息,如下: vopl_out: port { #address-cells = <1>; #size-cells = <0>; 该port对应vopl: vop@ff8f0000 {,此时获取到了第一个图显控制器。在rockchip_drm_platform_of_probe中循环获取ports的连接关系。 static int rockchip_drm_platform_of_probe(struct device *dev) { struct device_node *np = dev->of_node; struct device_node *port; bool found = false; int i; if (!np) return -ENODEV; for (i = 0;; i++) { struct device_node *iommu; port = of_parse_phandle(np, "ports", i); if (!port) break; if (!of_device_is_available(port->parent)) { of_node_put(port); continue; } ... found = true; of_node_put(iommu); of_node_put(port); } 之后,基于component架构完成各图显IP组件的注册。component_match_add()和drm_of_component_match_add都可以实现图显IP和图显控制器之间的联结关系的绑定。 前者可以通过驱动platform_find_device_by_driver去查找到对应设备信息,后者通过解析设备树获取对应的设备信息。rk3399使用了前者。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于米尔瑞芯微RK3576核心板/开发板的人脸疲劳检测应用方案
533 浏览 0 评论
803 浏览 1 评论
700 浏览 1 评论
1926 浏览 1 评论
3171 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 12:16 , Processed in 0.673828 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号