本文主要是介绍rockchip中的vop,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.vop基本概念
rockchip平台的lcd controller成为vop(video output processor),芯片中一般集成了1-2个vop,只有支持两个vop的芯片,才能支持双屏异显RK3399有2个VOP:
Video Output Processor(VOP_BIG)Video Output Processor(VOP_LIT)支持的显示接口:
One or Two MIPI-DSI portOne eDP portOne DP portOne HDMI port
2.vop基本配置逻辑
//数据传递流程如下:
vop(相当于显示控制器) --> dis/vlds/edp/rgb(相当于encoder) --> panel(相当于显示器)
//分析2代的配置,数据流向
vopb_out_rgb -> rgb_in_vopb -> rgb_out_panel ->panel_in_rgb//配置vopb
&vopb {//1.这块使能了,相当于使能了lcd控制器status = "okay";};&display_subsystem {route_rgb: route-rgb {status = "disabled";logo,uboot = "logo.bmp";logo,kernel = "logo_kernel.bmp";logo,mode = "center";charge_logo,mode = "center";//2.vopb有多少输出点,这块相当于要连接vopb_out_rgb这个输出点connect = <&vopb_out_rgb>;};
}&route_rgb {/delete-property/ logo,uboot;//3.这块使能了,相当于使能了vopb_out_rgb输出status = "okay";
}总结:以上3项配置相当于配置了vop -> vopb -> vopb_out_rgb//配置encoder
&rgb {//1.这块使能相当于使能了encoderstatus = "okay";ports {port@1 {reg = <1>;rgb_out_panel: endpoint {//2.这块定义了连接的panel,即显示器remote-endpoint = <&panel_in_rgb>;};};};
};&rgb_in_vopb {//2.这块使能相当于使能了encoder的接收,即能够接收来自vopb_out_rgb的数据status = "okay";
};总结:以上2项配置相当于配置了encoder//配置panel,在panel中设置与液晶屏相关内容,例如分辨率、时钟,时序等各参数
panel: panel {port {panel_in_rgb: endpoint {//1.这块定义了连接的encoderremote-endpoint = <&rgb_out_panel>;};};
}
//分析3代的配置
//定义vopb
&vopb {status = "okay";
};&display_subsystem {route_dsi: route-dsi {status = "disabled";logo,uboot = "logo.bmp";logo,kernel = "logo_kernel.bmp";logo,mode = "center";charge_logo,mode = "center";connect = <&vopb_out_dsi>;};
}&route_dsi {logo,uboot = "logo_kernel.bmp";connect = <&vopb_out_dsi>;status = "okay";
};//定义encoder
&dsi {status = "okay";//在该处直接定义了panelpanel@0 {}
}&dsi_in_vopb {status = "okay";
};
3.设备节点
display-subsystem:
配置 Rockchip 的 display engine;通过 route 表将各组件(plane / crct / encoder / connector) 关联在一起,以便对应的驱动构建出 display pipe;
vopl: vop@ff8f0000:
配置 VOP little;
子节点 port 里有 5 个 endpoint,名字分别为 vopl_out_dsi / vopl_out_edp 等,它们是数据输出端,即 output endpoint;
每个 endpoint 都会连接到某个 remote-endpoint,VOP 的 remote-endpoint 连接的就是各种显示 Encoder 的 endpoint,例如 vopl_out_dsi ---> dsi_in_vopl;
vopb: vop@ff900000:
省略
edp: edp@ff970000:
配置 edp 控制器,大致包括基地址、中断、时钟、子节点 port;
2 个 input endpoint,分别连接到 VOPL 和 VOPB;
1 个 output endpoint 连接到了 epd panel 上;
有 3 条连接:
vopb_out_edp ---> edp_in_vopbvopl_out_edp ---> edp_in_vopledp_out ---> edp_panel
panel: edp-panel:
配置某一款具体的 edp 屏;
有 1 条连接:
edp_out ---> edp_panel
hdmi: hdmi@ff940000:
配置 hdmi 控制器,大致包括引脚、基地址、中断、时钟、子节点 port;
有 2 条连接:
vopb_out_hdmi ---> hdmi_in_vopbvopl_out_hdmi ---> hdmi_in_vopl
dsi: dsi@ff960000 dsi1: dsi@ff968000:
配置 mipi dsi,类似 edp / hdmi;
mipi_dphy_tx1rx1: mipi-dphy-tx1rx1@ff968000:
配置 mipi dphy;
4.参考文档
RK3399 探索之旅 Display 子系统 基础概念
这篇关于rockchip中的vop的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!