1. Display简介
RK3588 的VOP (video output process)分为4个Port:
port | 分辨率 |
---|---|
VP0 | 4K |
VP1 | 4K |
VP2 | 4K |
VP3 | 1080P |
RK3588 VP 和各显⽰接口的连接关系:
需要注意的是,RK3588 的 HDMI 和 DP ⽀持 8K 输出,但是在 8K 输出模式下,⼀个显⽰接口需要同时占⽤ VP0 和 VP1 。所以如果产 品上需要⽀持 8K 显⽰输出,VP1 上要注意不要连接其他显⽰接口。
1.2 RK3588支持的显示接口
- 2个DP
- 2个HDMI/eDP 共用接口
- 2个MIPI DSI
- BT656/BT1120
2. ArmSoM-W3显示接口
ArmSoM-W3有着丰富的显示接口。最多支持四路显示输出:两路HDMI,一路MIPI-DSI,外加一路DP接口。可以做到多屏同显/异显。
下面对各个显示输出接口的配置和使用作基本的介绍
3. HDMI
- ArmSoM-W3硬件上有两个 HDMI 显示输出接口:2x HDMI OUT2.1
- 其中一个HDMI OUT 支持 8K@60fps 或者 4K@120fps另一个HDMI OUT 支持 4K@60fps
3.1 HDMI相关的DTS配置
- kernel\arch\arm64\boot\dts\rockchip\rk3588-armsom-w3.dts
//打开 HDMI0 功能
&hdmi0 {
status = "okay";
};
//打开 HDMI0 的 硬件 phy
&hdptxphy_hdmi0 {
status = "okay";
};
//配置HDMI0到VP0上面
&hdmi0_in_vp0 {
status = "okay";
};
//打开 HDMI0 音频输出
&hdmi0_sound {
status = "okay";
};
//配置HDMI0上面显示开机logo
&route_hdmi0 {
status = "okay";
};
//打开 hdmi1 功能
&hdmi1 {
status = "okay";
};
//打开 hdmi1 的 硬件 phy
&hdptxphy_hdmi1 {
status = "okay";
};
//配置HDMI1到VP1上面
&hdmi1_in_vp1 {
status = "okay";
};
//打开 HDMI1 音频输出
&hdmi1_sound {
status = "okay";
};
//配置HDMI1上面显示开机logo
&route_hdmi1 {
status = "okay";
};
4. DP
ArmSoM-W3硬件上有一个 Type-C 接口输出的DP,分辨率可达 8192x4320@30Hz, PHY 链路速率可以达到 8.1Gbps/lane。
4.1 DTS配置
4.1.1 DP 控制器的配置如下:
&dp0 {
status = "okay";
};
&dp0_in_vp2 {
status = "okay";
};
4.1.2 PHY 配置如下:
&usbdp_phy0 {
status = "okay";
orientation-switch;
svid = <0xff01>;
sbu1-dc-gpios = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>;
sbu2-dc-gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_HIGH>;
port {
#address-cells = <1>;
#size-cells = <0>;
usbdp_phy0_orientation_switch: endpoint@0 {
reg = <0>;
remote-endpoint = <&usbc0_orien_sw>;
};
usbdp_phy0_dp_altmode_mux: endpoint@1 {
reg = <1>;
remote-endpoint = <&dp_altmode_mux>;
};
};
};
4.1.3 Type-C 接口配置PD 芯片
Type-C 接口需要通过 Type-C 的 CC 检测和 PD 协商来配置 lane 和 HPD 的状态, 所以还需要配置 PD 芯 ⽚(当前⽀持的 PD 芯⽚有 fusb302, husb311):
&i2c4 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&i2c4m1_xfer>;
usbc0: fusb302@22 {
compatible = "fcs,fusb302";
reg = <0x22>;
interrupt-parent = <&gpio3>;
interrupts = <RK_PB4 IRQ_TYPE_LEVEL_LOW>;
int-n-gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&usbc0_int>;
//vbus-supply = <&vcc12v_dcin>;
vbus-supply = <&vbus5v0_typec>;
status = "okay";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
usbc0_role_sw: endpoint@0 {
remote-endpoint = <&dwc3_0_role_switch>;
};
};
};
usb_con: connector {
compatible = "usb-c-connector";
label = "USB-C";
data-role = "dual";
power-role = "dual";
try-power-role = "sink";
op-sink-microwatt = <1000000>;
sink-pdos =
<PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)