RK3568系列16——eDP屏幕配置

  eDP屏幕由于具有和屏幕的双向通信能力,其目标就是取代已落后LVDS屏幕,且由于eDP屏幕不需要传输时钟信号,其配置方式较为简单。

预备知识

  • eDP屏幕只需要传输数据信号,不需要时钟信号
  • eDP屏幕硬件上总共有三路链接信号:
  • Main Link:主数据线,可以是1/2/4 Line模式
  • AUX Channel:辅助通道,用于传输控制指令
  • HPD:热插拔信号,用于检测屏幕是否连接

原理图分析

  • 硬件接口只接了2条Main Link
  • 没有接HPD信号
  • 一个用于控制屏幕供电开关的GPIO
  • 一个用于控制背光供电开关的GPIO
  • 一个用于控制屏幕背光升压电路的GPIO

配置要点

  • 要为panel配置一个regulator,且在其中配置相关GPIO
  • 也要为backlight配置一个regulator,且在其中配置相关GPIO

DTS配置

  关于屏幕参数配置请参考前文《RK3568系列14——屏幕参数公共配置》

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <dt-bindings/display/media-bus-format.h>

/ {
edp-panel {
compatible = "simple-panel";
power-supply = <&vcc3v3_edp_panel>;
backlight = <&backlight>;
prepare-delay-ms = <20>;
enable-delay-ms = <20>;
disable-delay-ms = <20>;
unprepare-delay-ms = <20>;
bpc = <8>; // color bits 6|8
bus-format = <MEDIA_BUS_FMT_RGB888_1X24>;

// eDP屏幕可以通过AUX通道交换屏幕参数信息,但是RK还是建议代码中写死
display-timings {
native-mode = <&lcd_auo_b133han05e>;
lcd_auo_b133han05e: lcd-auo-b133han05e {
clock-frequency = <142600000>;
hactive = <1920>;
hfront-porch = <80>;
hback-porch = <70>;
hsync-len = <10>;
vactive = <1080>;
vfront-porch = <32>;
vback-porch = <20>;
vsync-len = <10>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <0>;
pixelclk-active = <0>;
};
};

port {
panel_in_edp: endpoint {
remote-endpoint = <&edp_out_panel>;
};
};
};

vcc3v3_edp_panel: vcc3v3-edp-panel {
compatible = "regulator-fixed";
regulator-name = "vcc3v3_edp";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
gpio = <&gpio1 RK_PD1 GPIO_ACTIVE_HIGH>; // eDP屏幕供电使能
enable-active-high;
pinctrl-names = "default";
pinctrl-0 = <&edp_panel_enable>;
vin-supply = <&vcc3v3_sys>;
regulator-boot-on;
regulator-state-mem {
regulator-off-in-suspend;
};
};

vcc12v0_edp_backlight: vcc12v0-edp-backlight {
compatible = "regulator-fixed";
regulator-name = "vcc12v0_edp_backlight";
regulator-min-microvolt = <12000000>;
regulator-max-microvolt = <12000000>;
gpio = <&gpio0 RK_PC3 GPIO_ACTIVE_HIGH>; // eDP背光升压电路使能
enable-active-high;
pinctrl-names = "default";
pinctrl-0 = <&edp_backlight_power>;
vin-supply = <&vcc5v0_sys>;
regulator-boot-on;
regulator-state-mem {
regulator-off-in-suspend;
};
};
};

&pinctrl {
edp {
edp_panel_enable: edp-panel-enable {
rockchip,pins = <1 RK_PD1 RK_FUNC_GPIO &pcfg_pull_down>;
};
edp_backlight_power: edp-backlight-power {
rockchip,pins = <0 RK_PC3 RK_FUNC_GPIO &pcfg_pull_down>;
};
edp_backlight_enable: edp-backlight-enable {
rockchip,pins = <0 RK_PB7 RK_FUNC_GPIO &pcfg_pull_down>;
};
};
};

&edp {
status = "okay";
// hpd-gpios = <&gpio4 RK_PC7 GPIO_ACTIVE_HIGH> // 有HPD信号则配置此项
force-hpd; // 无HPD信号则配置此项

ports {
port@1 {
reg = <1>;

edp_out_panel: endpoint@0 {
remote-endpoint = <&panel_in_edp>;
};
};
};
};

&edp_phy {
status = "okay";
};

&edp_in_vp0 {
status = "disabled";
};

&edp_in_vp1 {
status = "okay";
};

&route_edp {
status = "okay";
connect = <&vp1_out_edp>;
};

&backlight {
status = "okay";
pwms = <&pwm5 0 1000000 0>;
power-supply = <&vcc12v0_edp_backlight>;
enable-gpios = <&gpio0 RK_PB7 GPIO_ACTIVE_HIGH>; // eDP背光供电使能
pinctrl-names = "default";
pinctrl-0 = <&edp_backlight_enable>;
};

遇到的问题

  • 若控制屏幕供电开关的GPIO配置在panel里时,drm框架启动会报错,猜测原因是eDP辅助通道没有上拉供电,无法交换信息,因此要配在panel的regulator中
  • 屏幕没有接HPD信号,无法点亮,因此要配置force-hpd,让CPU忽略热插拔检测

参考文档

  • RKDocs/common/display/Rockchip_Developer_Guide_DRM_Panel_Porting_CN.pdf