RK平台EDP点屏
RK平台EDP点屏相关配置方法
RK平台EDP点屏相关配置方法
RKDocs中edp相关的文档主要有下面两个
\RKDocs\common\display\Rockchip_Developer_Guide_DRM_Panel_Porting_CN&EN.pdf
\RKDocs\common\display\Rockchip_Introduction_DRM_Integration_Helper_CN.pdf
驱动路径
edp驱动文件主要涉及下面几个
kernel路径下
drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
drivers/gpu/drm/bridge/analogix/analogix_dp_core.h
drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c
drivers/gpu/drm/bridge/analogix/analogix_dp_reg.h
drivers/gpu/drm/rockchip/analogix_dp-rockchip.c
include/drm/bridge/analogix_dp.h
drivers/gpu/drm/panel/panel-simple.c
drivers/phy/rockchip/phy-rockchip-samsung-hdptx.c
u-boot路径下
drivers/video/drm/analogix_dp.c
drivers/video/drm/analogix_dp.h
drivers/video/drm/analogix_dp_reg.c
drivers/phy/phy-rockchip-samsung-hdptx.c
drivers/video/drm/rockchip_panel.c
各平台显示接口最大输出分辨率和协议标准



需要注意的是在RK3588上面eDP 和 HDMI 的 PHY 是 combo 的,即在同一个产品上,使用了 HDMI0 就不能使用 eDP0,HDMI1 和 eDP1 同理。
DTS基础参数设置
VOP
RK3568 VP 和各显示接口的连接关系

RK3588 VP 和各显示接口的连接关系

由上述连接关系可知, RK3588的EDP输入源可以选择VP0/VP1/VP2,优先选择VP2
Timing
timing 指的是显示时序参数,它决定了屏幕如何接收和显示图像数据。这些参数定义了像素数据的传输方式,包括分辨率、刷新率、同步信号等。
显示时序(Display Timing)主要包括以下几个部分:
① 分辨率(Resolution)
- 水平分辨率(Hactive):屏幕一行中显示的有效像素数量(例如 1920)。
- 垂直分辨率(Vactive):屏幕一列中显示的有效像素数量(例如 1080)。
② 同步时序(Sync Timing)
eDP 在数据传输过程中,每一帧的传输不是连续的,存在一定的间隙。这些间隙用于同步数据传输,确保屏幕正确显示内容。
-
水平时序(Horizontal Timing)
- Hsync_len(水平同步信号宽度)
- Hback_porch(水平后沿)
- Hfront_porch(水平前沿)
- Htotal = Hactive + Hsync_len + Hback_porch + Hfront_porch
- Hsync_start = Hfront_porch + Hactive
- Hsync_end = Htotal - Hback_porch = Hsync_len + Hactive + Hfront_porch
-
垂直时序(Vertical Timing)
- Vsync_len(垂直同步信号宽度)
- Vback_porch(垂直后沿)
- Vfront_porch(垂直前沿)
- Vtotal = Vactive + Vsync_len + Vback_porch + Vfront_porch
- Vsync_start = Vfront_porch + Vactive
- Vsync_end = Vtotal - Vback_porch = Vsync_len + Vactive + Vfront_porch
③ 时钟(Clock / Pixel Clock)
- 像素时钟(Pixel Clock,单位 MHz)
- 这个参数决定了屏幕的像素刷新速率。例如,1920x1080@60Hz 的 eDP 屏幕,像素时钟可能是 148.5MHz。
④ 刷新率(Refresh Rate)
- 屏幕每秒刷新多少次(一般是 60Hz、120Hz、144Hz)。
屏参写入
主流的屏参写入方法一般有两种
1,通过EDID的方式获取并写入
这个方法主要先是获取屏幕的 timing 信息,需要打开 EDP 相关驱动,并配置 EDP
相关结点
xxxxxxxxxx
#接入屏幕后会在 uboot 串口中打印类似下面的信息
Maximum visible display size: 26 cm x 17 cm
Power management features: no active off, no suspend, no standby
Estabilished timings:
Standard timings:
2400x1600 59 Hz (detailed)
Monitor name: LQ123P1JX31
Detailed mode clock 252750 kHz, flags[a]
H: 2400 2448 2480 2560
V: 1600 1603 1613 1646
bus_format: 1009
通过上面的信息我们可以获取到
dclk = 252750 kHz
flags = 0xa
hactive = 2400.
hsync_start = 2448
hsync_end = 2480
htotal = 2560
vactive = 1600
vsync_start = 1603
vsync_end = 1613
vtotal = 1646
bus_format = 1009
其中flags对应标识可以从下面看出来
xxxxxxxxxx
/* Video mode flags */
/* bit compatible with the xorg definitions. */
#define DRM_MODE_FLAG_PHSYNC (1 << 0)
#define DRM_MODE_FLAG_NHSYNC (1 << 1)
#define DRM_MODE_FLAG_PVSYNC (1 << 2)
#define DRM_MODE_FLAG_NVSYNC (1 << 3)
#define DRM_MODE_FLAG_INTERLACE (1 << 4)
#define DRM_MODE_FLAG_DBLSCAN (1 << 5)
#define DRM_MODE_FLAG_CSYNC (1 << 6)
#define DRM_MODE_FLAG_PCSYNC (1 << 7)
#define DRM_MODE_FLAG_NCSYNC (1 << 8)
#define DRM_MODE_FLAG_HSKEW (1 << 9) /* hskew provided */
#define DRM_MODE_FLAG_BCAST (1 << 10)
#define DRM_MODE_FLAG_PIXMUX (1 << 11)
#define DRM_MODE_FLAG_DBLCLK (1 << 12)
#define DRM_MODE_FLAG_CLKDIV2 (1 << 13)
#define DRM_MODE_FLAG_PPIXDATA BIT(31) /* pixelclk-active */
flag = 0xa = 1010 即 DRM_MODE_FLAG_NVSYNC | DRM_MODE_FLAG_NHSYNC
bus_format 转换关系可以从下面网站查询
4.13.3.4.1. Media Bus Formats — The Linux Kernel documentation
换算成 DTS 解析的 Timing
hfront-porch = hsync start - hactive
hsync-len =hsync end -hsync start
hback-porch = htotal - hsync end
vfront-porch = vsync start- vactive
vsync-len =vsync end -vsync start
vback-porch = vtotal-vsync_end
hsync-active 和 vsync-active 即对应 flag 中的 BIT(0)- BIT(3)
hsync-active = <0>;表示 DRM_MODE_FLAG_PHSYNC 反之为 DRM_MODE_FLAG_NHSYNC
vsync-active = <0>; 表示 DRM_MODE_FLAG_PVSYNC 反之为 DRM_MODE_FLAG_NVSYNC按照上述换算后可以得到一个能写在 DTS panel 中的 timing
x
# example
timing0: timing0 {
clock-frequency = <252750000>;
hactive = <2400>;
vactive = <1600>;
hfront-porch = <8>;
hsync-len = <32>;
hback-porch = <80>;
vfront-porch = <3>;
vsync-len = <10>;
vback-porch = <33>;
hsync-active = <1>;
vsync-active = <1>;
pixelclk-active = <0>;
};
2,除了通过EDID的方式获取写入,屏厂给的规格书有时候很全面,可以通过查找规格书找到上述参数,若部分参数未找到可以直接询问屏厂
Panel
prepare-delay-ms 是最先 delay 的,在 panel simple_prepare 函数中会先使能电源在 delay 对应时间,若不需要可以不设置
如果出现点屏失败的情况,确认是时序方面的问题可以延长 prepare-delay-ms 至 500 进行测试
enable-delay-ms 在 panel-simple.c 中可以看到仅是 delay 点亮背光的时间,若不需要可以不设置pixelclk-active 表示pixel data的clk 极性
0 表示 active low = drive pixel data on falling edge /sample data on rising edge
1 表示active high = drive pixel data on rising edge/sample data on falling edge
EDP
除了配置 Panel 和 Timing 结点,通常应按需在 EDP 结点配置 HPD

二者选一个写入 edp 结点即可,hpd-gpios 配置参考如下
xxxxxxxxxx
&edp0 {
pinctrl-names = "default";
pinctrl-0 = <&edp0_hpd>;
hpd-gpios = <&gpio1 RK_PA5 GPIO_ACTIVE_HIGH>;
status = "okay";
};
&pinctrl {
edp {
edp0_hpd: edp0-hpd {
rockchip,pins = <1 RK_PA5 0 &pcfg_pull_none>;
};
};
};
AUX
xxxxxxxxxx
# AUX 报错参考
[ 11.591242] rockchip-dp fe0c0000.edp: AUX CH error happened: 0x2 (1)
[ 11.592663] rockchip-dp fe0c0000.edp: AUX CH error happened: 0x2 (1)
[ 11.594057] rockchip-dp fe0c0000.edp: AUX CH error happened: 0x2 (1)
# AUX 报错参考
console:/ # dmesg | grep edp
[ 3.236549] rockchip-dp fdec0000.edp: failed to read max link rate
[ 3.260422] rockchip-dp fdec0000.edp: failed to read max link rate
[ 3.284163] rockchip-dp fdec0000.edp: failed to read max link rate
遇到 AUX 报错,可以排查下以下几点。
先查下AUX接线,如遇到AUX接线接反,软件可以参考下列修改,反相N和P脚
xxxxxxxxxx
diff --git a/drivers/video/drm/analogix_dp_reg.c b/drivers/video/drm/analogix_dp_reg.c
index 3bd1cd55a0f..d0a4e93a42a 100644
--- a/drivers/video/drm/analogix_dp_reg.c
+++ b/drivers/video/drm/analogix_dp_reg.c
@@ -525,7 +525,7 @@ int analogix_dp_start_aux_transaction(struct analogix_dp_device *dp)
/* Enable AUX CH operation */
reg = analogix_dp_read(dp, ANALOGIX_DP_AUX_CH_CTL_2);
- reg |= AUX_EN;
+ reg |= AUX_EN | 0x4;
analogix_dp_write(dp, ANALOGIX_DP_AUX_CH_CTL_2, reg);
/* Is AUX CH command reply received? */
检査 HPD 是否正常,是否填写了 force-hpd 导致上电沟通时序不对,AUX 过早进行沟通如果填写的是 hpd-gpios,检查 HPD 脚是否有正确设置,示波器检査上电时序是否符合要求
xxxxxxxxxx
# 参考此结点访问,查询 hpd 状态
console:/ # cat /sys/class/drm/card0-eDP-1/status
connected
如果 status 为 disconnected,应该检査 HPD 脚
对于部分屏幕 AUX 报错可以通过延长上电时间来规避,这种情况一般是上电时序不对可以延长 panel 结点的 prepare-delay-ms 来解决,可以尝试较大值 500/1000 等
xxxxxxxxxx
# 参考
prepare-delay-ms = <500>;
若修改 HPD 和 delay 后仍然无法进行 AUX 供电,应该检查供电是否符合标准用示波器抓取供电脚和 HPD 脚,查看是否满足时序要求,电压是否稳定
更多推荐



所有评论(0)