全称为Embedded DisplayPort,用于笔记本、平板电脑的一种数字接口。是视讯电子标准协会(VESA)针对行动装置应用。
提示:屏幕点不亮多半是软件没适配好。
a) rk3568 适配eDP屏
b) rk3568 自动适配eDP屏参
c) rk3568 只亮背光
经过翻阅原理图,屏幕亮起前须适配屏的 LCD1_VDD、EDP_HPD 和背光的使能 IO、PWM 信号。
屏幕供电仅有LCD1_VDD 需要控制,对应GPIO3_D6。
背光供电直连12V,BL_EN1 对应GPIO3_D5, PWM 对应 PWM4。
经核查 eDP 模块的 avdd_0v9 和 avdd_1v8 均与 rk3568-evb.dtsi
中 rk809(PMIC)电源配置配置,故无需再额外配置电源。
当前设备树引用 rk3568-evb.dtsi
,恰好在其中有声明 vcc3v3_lcd0_n
和 backlight
;仅仅作简单的覆写即可。
rk3568 的 eDP 屏需要同时启用 edp、edp_phy、edp_vop(本篇使用 vop 中 vp1)。需要开机显示 logo图片则要额外配置 route_edp。屏参可根据供应厂商提供的屏幕手册自行填写。
include "rk3568-evb.dtsi"
/
{
vcc3v3_lcd0_n: vcc3v3-lcd0-n {
gpio = <&gpio3 RK_PD6 GPIO_ACTIVE_HIGH>;
};
edp-panel {
compatible = "simple-panel";
backlight = <&backlight>;
power-supply = <&vcc3v3_lcd0_n>;
prepare-delay-ms = <120>;
enable-delay-ms = <10>;
disable-delay-ms = <20>;
unprepare-delay-ms = <50>;
init-delay-ms = <10>;
display-timings {
native-mode = <&edp_timing>;
edp_timing: timing0 {
clock-frequency = <200000000>;
hactive = <1536>;
vactive = <2048>;
hfront-porch = <12>;
hsync-len = <16>;
hback-porch = <48>;
vfront-porch = <8>;
vsync-len = <4>;
vback-porch = <8>;
hsync-active = <0>;
vsync-active = <0>;
de-active = <0>;
pixelclk-active = <0>;
};
};
port {
panel_in_edp: endpoint {
remote-endpoint = <&edp_out_panel>;
};
};
};
};
&backlight {
enable-gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>;
};
&edp {
force-hpd;
status = "okay";
ports {
port@1 {
reg = <1>;
edp_out_panel: endpoint {
remote-endpoint = <&panel_in_edp>;
};
};
};
};
&edp_phy {
status = "okay";
};
&edp_in_vp0 {
status = "disabled";
};
&edp_in_vp1 {
status = "okay";
};
&route_edp {
connect = <&vp1_out_edp>;
status = "okay";
};
rk3568 eDP带 HPD检测,支持自动匹配屏参,如何配置呢?
由于驱动中缺少固定 eDP 屏参则会使用屏幕驱动IC中读取到参数,删除相关timings 配置即可。
vcc3v3_lcd0_n: vcc3v3-lcd0-n {
gpio = <&gpio3 RK_PD6 GPIO_ACTIVE_HIGH>;
};
edp-panel {
compatible = "simple-panel";
backlight = <&backlight>;
power-supply = <&vcc3v3_lcd0_n>;
prepare-delay-ms = <120>;
enable-delay-ms = <10>;
disable-delay-ms = <20>;
unprepare-delay-ms = <50>;
init-delay-ms = <10>;
- display-timings {
- native-mode = <&edp_timing>;
-
- edp_timing: timing0 {
- clock-frequency = <200000000>;
- hactive = <1536>;
- vactive = <2048>;
- hfront-porch = <12>;
- hsync-len = <16>;
- hback-porch = <48>;
- vfront-porch = <8>;
- vsync-len = <4>;
- vback-porch = <8>;
- hsync-active = <0>;
- vsync-active = <0>;
- de-active = <0>;
- pixelclk-active = <0>;
- };
- };
-
port {
panel_in_edp: endpoint {
remote-endpoint = <&edp_out_panel>;
};
};
};
};
&backlight {
enable-gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>;
};
BSP开发硬件先行(检查)原则,硬件排查排查提及的相关电源。首先是电压是否正常,然后上电过程无电源塌陷;最后是上电时许和总线信号。硬件核验完成且无问题基本都可正常点亮屏幕。实际调试过程总会有各种现象,各种问题。接下来分享几个简单现象。
首先核查显示属性,发现屏幕的行场时许均有。
cat /d/dri/0/summary
Video Port0: DISABLED
Video Port1: ACTIVE
Connector: eDP-1
bus_format[100a]: RGB888_1X24
overlay_mode[0] output_mode[f] color_space[0]
Display mode: 1920x1080p60
clk[141410] real_clk[141410] type[48] flag[a]
H: 1920 1978 2020 2108
V: 1080 1088 1102 1118
Cluster0-win0: ACTIVE
win_id: 4
format: AB24 little-endian (0x34324241)[AFBC] SDR[0] color_space[0] glb_alpha[0xff]
rotate: xmirror: 0 ymirror: 0 rotate_90: 0 rotate_270: 0
csc: y2r[0] r2y[0] csc mode[0]
zpos: 0
src: pos[0, 0] rect[3840 x 2160]
dst: pos[0, 0] rect[1920 x 1080]
buf[0]: addr: 0x000000000a819000 pitch: 15360 offset: 0
休眠唤醒后仍然不能显示,但屏幕参数仍然正常。
由此推测 eDP 模块供电正常,SOC与屏之前通信正常且正确收发无误。
此过程背光有亮灭变化,背光控制无问题。
再仔细核查发现 route_edp 中定向到错误的默认 vp1
,添加connect = <&vp1_out_edp>;
后恢复。
&edp_in_vp0 {
status = "disabled";
};
&edp_in_vp1 {
status = "okay";
};
&route_edp {
+ connect = <&vp1_out_edp>;
status = "okay";
};
图像错位大多与屏参直接相关,核查 /d/dri/0/summary
与屏幕实际参数差异即可。
问题相对简单不再赘述。
此种情况多发生在多屏显示用错背光或者背光未正常控制,可查看背光使能控制的GPIO和PWM。
cat /d/gpio | gren enable
gpio-125 ( |enable ) out hi
gpio-126 ( |enable ) out hi
GPIO3_D5 申请编号 gpio-125, GPIO3_D6 申请编号 gpio-126;如果编号部匹配则需要查GPIO复用。
cat sys/kernel/debug/pwm
platform/fe6e0000.pwm, 1 PWM device
pwm-0 (backlight ): requested enabled period: 25000 ns duty: 4417 ns polarity: normal
如果查看不到关于 backlight
的pwm则需要查看 PWM IO复用或确认PWM 是否开启。
此种情况须查看屏幕背光规格书。如规格书中背光工作PWM 是100~350KHz,实际使用 40KHz 控制信号,很大概率会出现闪屏问题。PWM 总线时钟为1G,预备分频周期间隔时间100000pS,后周期变为 100KHz,配置如下。
&backlight {
+ pwms = <&pwm4 0 10000 0>;
enable-gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>;
};
此种情况多半为排线连接不良。轻微晃动排线问题消失,更换排线即可解决问题。
/d/dri/0/summary
无任何数据,但是测量供电和信号又正常。# 模拟电源键,休眠唤醒分别执行两次即可看出不同
input keyevent 26
cat /d/gpio
机器硬件很诚实,就像数学的1+1;找到+1的因素问题才会迎刃而解。