rk3568点亮LCD(eDP)

rk3568 Android11/12 适配 eDP LCD

全称为Embedded DisplayPort,用于笔记本、平板电脑的一种数字接口。是视讯电子标准协会(VESA)针对行动装置应用。

  1. eDP协议是针对DP应用在嵌入式方向架构和协议的拓展,所以eDP协议完全兼容DP协议;
  2. eDP接口属内部接口,可以用做芯片与芯片之间的传输,也可用显示屏与驱动板之间的传输;
  3. 由于该类接口能够实现多数据高速同时传输,且电磁干扰小,目前正在逐渐取代传统的低电压差动讯号(LVDS)接口。

提示:屏幕点不亮多半是软件没适配好。

文章目录

  • rk3568 Android11/12 适配 eDP LCD
  • 圈重点 看想学
  • 1. rk3568 适配eDP屏
    • 1.1 核查原理图,适配eDP硬件
    • 1.2 rk3568 自动匹配eDP屏参
  • 2 调试过程异常
    • 2.1 eDP屏只亮背光,无图像
    • 2.2 eDP 屏图像错位
    • 2.3 eDP 屏背光不亮,灯光照射有图像
    • 2.4 eDP 屏背光闪烁
    • 2.5 eDP 屏偏色
  • Tips
  • 总结


圈重点 看想学

a) rk3568 适配eDP屏
b) rk3568 自动适配eDP屏参
c) rk3568 只亮背光


1. rk3568 适配eDP屏

经过翻阅原理图,屏幕亮起前须适配屏的 LCD1_VDD、EDP_HPD 和背光的使能 IO、PWM 信号。
rk3568点亮LCD(eDP)_第1张图片屏幕供电仅有LCD1_VDD 需要控制,对应GPIO3_D6。
rk3568点亮LCD(eDP)_第2张图片背光供电直连12V,BL_EN1 对应GPIO3_D5, PWM 对应 PWM4。
rk3568点亮LCD(eDP)_第3张图片经核查 eDP 模块的 avdd_0v9 和 avdd_1v8 均与 rk3568-evb.dtsi 中 rk809(PMIC)电源配置配置,故无需再额外配置电源。

1.1 核查原理图,适配eDP硬件

当前设备树引用 rk3568-evb.dtsi,恰好在其中有声明 vcc3v3_lcd0_nbacklight;仅仅作简单的覆写即可。
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";
};

1.2 rk3568 自动匹配eDP屏参

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>;
};

2 调试过程异常

BSP开发硬件先行(检查)原则,硬件排查排查提及的相关电源。首先是电压是否正常,然后上电过程无电源塌陷;最后是上电时许和总线信号。硬件核验完成且无问题基本都可正常点亮屏幕。实际调试过程总会有各种现象,各种问题。接下来分享几个简单现象。

2.1 eDP屏只亮背光,无图像

首先核查显示属性,发现屏幕的行场时许均有。

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";
};

2.2 eDP 屏图像错位

图像错位大多与屏参直接相关,核查 /d/dri/0/summary与屏幕实际参数差异即可。
问题相对简单不再赘述。

2.3 eDP 屏背光不亮,灯光照射有图像

此种情况多发生在多屏显示用错背光或者背光未正常控制,可查看背光使能控制的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 是否开启。

2.4 eDP 屏背光闪烁

此种情况须查看屏幕背光规格书。如规格书中背光工作PWM 是100~350KHz,实际使用 40KHz 控制信号,很大概率会出现闪屏问题。PWM 总线时钟为1G,预备分频周期间隔时间100000pS,后周期变为 100KHz,配置如下。

&backlight {
+	pwms = <&pwm4 0 10000 0>;
	enable-gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>;
};

2.5 eDP 屏偏色

此种情况多半为排线连接不良。轻微晃动排线问题消失,更换排线即可解决问题。

Tips

  1. 没有屏幕规格书如何获取屏幕参数?
    答案:可使用自动匹配屏参获取参数,然后填入 timings。
  2. 读取/d/dri/0/summary无任何数据,但是测量供电和信号又正常。
    此时可以查看共模电容是否断开。
  3. 查看休眠唤醒时GPIO状态,可使用如下命令。
# 模拟电源键,休眠唤醒分别执行两次即可看出不同
input keyevent 26
cat /d/gpio

总结

机器硬件很诚实,就像数学的1+1;找到+1的因素问题才会迎刃而解。

你可能感兴趣的:(Android,LCD,Linux,android)