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.这块使能相当于使能了encoder
status = "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.这块定义了连接的encoder
remote-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" ;
//在该处直接定义了panel
panel@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 子系统 基础概念