一.DP显示接口介绍
在RK上VOP输出DP,DP可以使用两种接口接显示屏,可以用type-c out接口显示,也可以用DP out接口显示。
DP接口:
type-c接口:
一般VOP的DP输出,可以接DP接口也可以连接到type-c接口,type-c接口除了显示功能,还有USB功能,充电功能。
Type-C口有4对TX/RX分线,2对USBD+/D-,一对SBU,2个CC,另外还有4个VBUS和4个地线。
当Type-C接口仅用作传输DP信号时,则可利用4对TX/RX,从而实现4Lane传输,这种模式称为DPonly模式;
Type-C还保留了USB D+/D-,用以接USB2.0设备,同时使用USB D+/D-和上面的DPonly模式配合可实现DP+USB2.0模式;
正常来说USB3.0只需要使用2对TX/RX、USB2.0只需要使用一对D+/D-,所以Type-C接口中总会有一半的接口是多余的;而DP的交替模式则是将DP的差分信号加载到2对“多余”的TX/RX上面,所以也可实现USB3.0+DP的模式。
2条SBU线则是在DP功能启用时,化身为DP协议中的AUX_P/N差分对(它的极性是可以根据正反插方向修改的),负责传输设备的DPCD、EDID等信息(而平时这对引脚一般用不到,可忽略)。
二.硬件原理图
三.DP驱动文件
DP Controller 驱动文件路径:
drivers/gpu/drm/rockchip/dw-dp.c
DP PHY 驱动文件路径:
drivers/phy/rockchip/phy-rockchip-usbdp.c
四.设备树DTS配置
VOP:
&dp0 {
status = "okay";
};
&dp0_in_vp2 {
status = "okay";
};
PHY:
&usbdp_phy0
{
orientation-switch;
svid = <0xff01>;
sbu1-dc-gpios = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>;
sbu2-dc-gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_HIGH>;
status = "okay";
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>;
};
};
};
type-c out不仅支持DP显示输出,也支持PD充电。
PD协议芯片为HUSB311,协议芯片与RK的I2C4通信。
PD协议是一种充电协议,全称为“USB Power Delivery(USB PD)”,是由USB-IF(USB Implementers Forum)组织制定的一种标准协议。它是一种基于USB接口的快速充电技术,可以实现高达100W的最大功率输出,可以为各种设备提供更快、更高效、更安全的充电方式。
type-c接口接收PD芯片可以实现快速充电。
&i2c4 {
status = "okay";
usbc0: husb311@4e {
compatible = "hynetek,husb311";
reg = <0x4e>;
interrupt-parent = <&gpio0>;
interrupts = <RK_PD3 IRQ_TYPE_LEVEL_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&usbc0_int>;
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, 1000, PDO_FIXED_USB_COMM)>;
source-pdos =
<PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)>;
altmodes {
#address-cells = <1>;
#size-cells = <0>;
altmode@0 {
reg = <0>;
svid = <0xff01>;
vdo = <0xffffffff>;
};
};
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
usbc0_orien_sw: endpoint {
remote-endpoint = <&usbdp_phy0_orientation_switch>;
};
};
port@1 {
reg = <1>;
dp_altmode_mux: endpoint {
remote-endpoint = <&usbdp_phy0_dp_altmode_mux>;
};
};
};
};
};
};
五.DP调试
查看是哪一路DP:
console:/sys/class/drm # ls
card0 card0-HDMI-A-1 card0-Writeback-1 renderD128 ttm
card0-DP-1 card0-HDMI-A-2 card1 renderD129 version
查看当前连接状态:
console:/sys/class/drm/card0-DP-1 # cat status
disconnected //未连接
查看可以支持的模式:
console:/sys/class/drm/card0-DP-1 # cat modes
3840x2160
4096x2160
4096x2160
4096x2160
4096x2160
4096x2160
4096x2160
4096x2160
4096x2160
3840x2160
3840x2160
3840x2160
3840x2160
3840x2160
3840x2160
3840x2160
3840x2160
1920x1080
1920x1080
1920x1080
1920x1080
1920x1080
1920x1080
1920x1080
1280x720
1280x720
1280x720
720x576
720x576
720x480
720x480
720x480
720x480
720x480
640x480
640x480