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>; bus-format = <MEDIA_BUS_FMT_RGB888_1X24>;
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>; 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>; 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"; force-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>; 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