11. 屏幕与触摸

本章配套视频介绍:

../../_images/video.png

《28-屏幕与触摸设置》

https://www.bilibili.com/video/BV1S14y1D7qB/

11.1. 屏幕支持列表

11.1.1. mipi屏幕

LubanCat-RK356x系列板卡支持野火自家提供的mipi屏以及树莓派5寸屏(需要转接板)

mipi屏幕

屏幕名称

屏幕类型

分辨率

色彩

接口

野火5.5寸mipi屏

LCD

1080x1920

RGB888

四通道mipi-dsi

野火7寸mipi屏

LCD

1024x600

RGB888

四通道mipi-dsi

野火10.1寸mipi屏

LCD

800x1280

RGB888

四通道mipi-dsi

树莓派5寸屏

LCD

800x480

RGB888

四通道mipi-dsi

  1. 购买链接: (野火)5.5寸电容屏1920*1080 MIPI接口5点触控 颜色深度24位 RGB888

  2. 购买链接: (野火)7寸电容屏1024*600 MIPI接口5点触控 颜色深度24位 RGB888

  3. 购买链接: (野火)10.1寸电容屏800*1280 MIPI接口5点触控 颜色深度24位 RGB888

  4. 购买链接(仅供参考): (淘宝)树莓派屏幕购买链接

注意

野火在售5.5寸和10.1寸mipi屏均为竖屏,7寸屏为横屏

11.1.2. lvds屏幕

LubanCat-1/2H板卡支持野火自家提供的lvds屏幕

  • 屏幕名称:野火lvds屏

  • 屏幕类型:LCD

  • 分辨率:1280x800

  • 色彩:RGB888

  • 接口:单路 8bit LVDS

购买链接(仅供参考): (淘宝)LVDS屏幕购买链接

11.1.3. edp屏幕

LubanCat-1/2H、LubanCat-1/2IO板卡支持野火自家提供的edp屏幕

  • 屏幕名称:野火edp屏

  • 屏幕类型:LCD

  • 分辨率:1280x800

  • 色彩:RGB888

购买链接(仅供参考): (淘宝)EDP屏幕购买链接

11.2. 板卡屏幕配置

LubanCat屏幕-RK3562/RK3566/RK3568系列屏幕配置

板子

MIPI-DSI

HDMI

多屏异显

LubanCat-Zero系列

支持

MINI-HDMI

不支持

LubanCat-1系列

支持

标准HDMI

不支持

LubanCat-2系列

支持

标准HDMI

支持

注意

LubanCat-Zero系列和LubanCat-1系列不支持多屏异显功能

LubanCat-RK3562/RK3566/RK3568系列最大支持的屏幕参数如下

未找到图片

11.3. 屏幕接口

LubanCat-RK3562/RK3566/RK3568系列板卡都支持mipi屏以及hdmi显示屏的显示,有的板卡还支持双mipi屏.

11.3.1. mipi-dsi接口

  • LubanCat-RK3562/RK3566/RK3568系列板卡的mipi dsi接口类型都一样,使用的都是30pin的fpc排座,如图下

未找到该图片

与mipi屏幕的连接如图下

未找到该图片

注意

mipi-dsi接口不支持热插拔,请勿在上电的时候安装或者卸载屏幕, 上电时安装和卸载可能会导致板卡短路, 轻则板卡保护关机,重则损坏芯片的接口或者烧坏芯片

11.3.2. HDMI接口

HDMI接口支持热插拔

LubanCat-RK3562/RK3566/RK3568系列板卡的HDMI有两种HDMI的接口:

  • MINI-HDMI : LubanCat-Zero系列板卡搭载,外观精致,小巧

  • HDMI : LubanCat-1和LubanCat-2系列板卡搭载标准HDMI接口,市面上大部分的显示器搭载的是标准HDMI接口

对比图,如下

未找到该图片

注意

HDMI和MINI-HDMI的接口大小和形状差距比较大, 所以他们之间是不能够直接连接在一起, 如果想要HDMI和MINI-HDMI连接使用, 需要购买HDMI转MINI-HDMI的转换口才能正常使用

11.3.3. LVDS接口

  • LubanCat-RK3562/RK3566/RK3568系列板卡的LVDS接口类型都一样,使用的都是30pin的排座,如图下:

未找到该图片

支持LVDS的板卡如下:

  • LubanCat-1H

  • LubanCat-1HS

  • LubanCat-2H

连接LVDS屏幕示意图如下:

LubanCat-1H:

未找到该图片

LubanCat-1HS:

未找到该图片

LubanCat-2H:

未找到该图片

连接LVDS屏幕需要接三个位置,一是LVDS背光接口,通过PH接口连接,二是LVDS屏电压选择,通过跳帽选择,可选3.3V/5V/12V,三是LVDS信号接口,通过30pin排针引出。

危险

LVDS屏电压选择千万不能选错,否则可能烧毁LVDS屏幕!

11.4. 屏幕切换

LubanCat-RK3562/RK3566/RK3568系列的板卡是使用设备树插件的方式进行屏幕的切换,配置设备树的插件的位置在 /boot/uEnv/ 目录下, 如果想要开启相应的插件需要找到自己板卡的uEnv文件,然后对其进行修改

可以点击下面链接找到自己和自己板卡相对应的配置文件

配置文件&设备树&设备树插件/配置文件

11.4.1. mipi屏幕

11.4.1.1. rk3566芯片系列设置

该小节适合LubanCat-0系列以及LubanCat-1系列板卡,我们这里以LubanCat-1为例,如下图

未找到该图片

可以看到这里面有5种屏幕可以配置,可根据使用的屏幕选择相应的设备树插件

注意

由于rk3566是不支持双屏异显功能的,因此,屏幕显示部分的设备树插件是不支持多开的,开启mipi屏的同时也会关闭hdmi的显示功能

  • 开启屏幕只需要把相应的设备树进行开启和关闭,然后重启即可,以野火5.5寸mipi屏为例

  • 野火5.5寸mipi屏开启

未找到该图片
  • 野火5.5寸mipi屏关闭

未找到该图片

11.4.1.2. LubanCat-2&2N设置

该小节适合LubanCat-2&2N板卡,我们这里以LubanCat-2为例,如下图

未找到该图片

可以看到这里面有5种屏幕可以配置,可根据使用的屏幕选择相应的设备树插件

注意

由于rk3568是支持双屏异显功能的,因此,开启了mipi屏幕后,hdmi也是可以正常显示的,不过两个mipi屏只能同时开一个

  • 野火5.5寸mipi屏开启

未找到该图片
  • 野火5.5寸mipi屏关闭

未找到该图片

11.4.1.3. LubanCat-2金手指&BTB设置

该小节适合LubanCat-2金手指&BTB板卡,我们这里以LubanCat-2IO为例,如下图

未找到该图片

可以看到设备树插件的名称中标注了vp0或者vp1

vp0/1 就是rk3568可以双屏异显的关键,一个vp只能同时开启一种显示

  • vp0 – HDMI(默认开启),DSI1(默认关闭)

  • vp1 – DSI0(默认关闭),eDP(默认关闭)

可以互相组合使用

  1. HDMI+DSI0

  2. HDMI+eDP

  3. DSI1+DSI0

  4. DSI1+eDP

注意

行首带 # 代表屏幕关闭 ,行首没有 # 代表屏幕开启,而hdmi相反,行首带 # 代表hdmi开启 ,行首没有 # 代表hdmi关闭

屏幕的开启和关闭可以根据上文去配置

11.4.2. hdmi

11.4.2.1. rk3566芯片系列设置方法

HDMI在默认情况下(没有开启屏幕设备树插件的)是打开的, 当开启任意的屏幕设备树插件的情况下,HDMI会自动关闭

11.4.2.2. rk3568芯片系列设置方法

HDMI在默认情况下是打开的,如果想要关闭HDMI的话,可以进入设备树配置文件把HDMI关闭的设备树打开,如下图

未找到该图片

11.4.3. 多屏异显

目前仅LubanCat-2系列支持,支持同时打开HDMI和mipi屏幕,设置方法如上面的小节所示。

11.5. 旋转触摸屏

参考文章 触摸校准

参考文章 旋转触摸方向

配置触摸旋转方向

1
2
# 1.查看触摸输入设备
xinput list

如下图,可以看到 Goodix Capacitive TouchScreen 的设备, Goodix Capacitive TouchScreen 是野火1080p的触摸屏,如果使用的屏幕是树莓派5寸屏,则显示 fts_ts

注意

需要进入桌面后才能使用xinput命令,请保持进入桌面。如果是用ssh进终端操作,请先输入export DISPLAY=:0

未找到图片
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 根据名字列出变量
xinput list-props 'pointer:Goodix Capacitive TouchScreen' | grep "Coordinate Transformation Matrix"

# 根据id列出变量
xinput list-props 10 | grep "Coordinate Transformation Matrix"


#修改触摸方向(可根据名字修改) 默认方向
xinput set-prop 10 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1

#修改触摸方向(可根据名字修改) 向左90度
xinput set-prop 10 'Coordinate Transformation Matrix' 0 -1 1 1 0 0 0 0 1

#修改触摸方向(可根据名字修改) 向右90度
xinput set-prop 10 'Coordinate Transformation Matrix' 0 1 0 -1 0 1 0 0 1

#修改触摸方向(可根据名字修改) 旋转180度
xinput set-prop 10 'Coordinate Transformation Matrix' -1 0 1 0 -1 1 0 0 1

11.6. 触摸屏绑定屏幕

1
2
# 1.查看触摸输入设备
xinput list

如下图,可以看到 Goodix Capacitive TouchScreen 的设备, Goodix Capacitive TouchScreen 是野火1080p的触摸屏,如果使用的屏幕是树莓派5寸屏,则显示 fts_ts

因为触摸屏是指针设备,所以我们的触摸屏是要带着 slave  pointer

未找到图片
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#查看当前的屏幕
xrandr -q

DSI-1:mipi屏
HDMI-1:HDMI屏
eDP-1:edp屏幕

小编在用DSI-1,后面以DSI-1作为屏幕修改配置

#已知上面的Goodix Capacitive TouchScreen触摸屏的id号为10
#然后通过触摸屏的id号来绑定屏幕

xinput map-to-output 10 DSI-1

完成后就可以看到可以支持触摸屏映射了。

11.7. 旋转屏幕方向

11.7.1. 命令行配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#查看当前的屏幕
xrandr -q

DSI-1:mipi屏
HDMI-1:HDMI屏

小编在用DSI-1,后面以DSI-1作为屏幕修改配置

#旋转屏幕-正常
xrandr --output DSI-1 --rotate normal

#旋转屏幕-向左90度
xrandr --output DSI-1 --rotate left

#旋转屏幕-向右90度
xrandr --output DSI-1 --rotate right

#旋转屏幕-旋转180度
xrandr --output DSI-1 --rotate inverted

11.7.2. 桌面配置

打开 桌面端的 Display 软件,然后可以按照下面图片的方法配置

未找到图片

11.8. 关闭桌面登录及保留屏幕开启

一般屏幕开启与桌面登录会绑定在一起,你开启了屏幕,屏幕就会作为一个新的终端, 下文教你如何在使用屏幕的情况下关闭屏幕终端

1
2
3
4
5
6
7
8
9
#关闭用户图形界面,使用tty登录。

sudo systemctl set-default multi-user.target
sudo reboot

#开启用户图形界面。

sudo systemctl set-default graphical.target
sudo reboot

11.9. 屏幕调试方法

11.9.1. mipi 屏幕

mipi屏幕调试一般都要着重关注屏幕的上电初始序列 :panel-init-sequence和下电初始化序列:panel-exit-sequence。

准备工作:在拿到一块新mipi屏幕的时候,一般屏幕厂商都会给我们两样东西,分别是 屏幕规格书屏幕初始化序列。 以下拿野火5.5寸1080p屏幕为例。屏幕的资料请查阅 (野火)5.5寸 1080p 屏幕资料文档

屏幕规格书 可以获取到屏幕参数,在 初始化序列中 可以获取到屏幕的panel-init-sequence代码。如下图:

未找到图片

11.9.1.1. 调试步骤分析:

mipi屏幕的点亮流程如下,以猫2为例。

  • 步骤一先将屏幕的背光点亮

在猫2的设备树配置的节点中,我们需要添加关于背光的配置。如图:

未找到图片

由mipi屏幕的接口电路图得知,屏幕背光由PWM4去配置,如下

未找到图片

按照rk屏幕背光的配置方法,我们可以得到如下backlight节点

 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
 backlight: backlight {
             status = "okay";
             compatible = "pwm-backlight";
             pwms = <&pwm4 0 50000 0>;
             brightness-levels = <
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      95  95  95  95  95  95  95  95
                      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 130 131 132 133 134 135
                     136 137 138 139 140 141 142 143
                     144 145 146 147 148 149 150 151
                     152 153 154 155 156 157 158 159
                     160 161 162 163 164 165 166 167
                     168 169 170 171 172 173 174 175
                     176 177 178 179 180 181 182 183
                     184 185 186 187 188 189 190 191
                     192 193 194 195 196 197 198 199
                     200 201 202 203 204 205 206 207
                     208 209 210 211 212 213 214 215
                     216 217 218 219 220 221 222 223
                     224 225 226 227 228 229 230 231
                     232 233 234 235 236 237 238 239
                     240 241 242 243 244 245 246 247
                     248 249 250 251 252 253 254 255
             >;
             default-brightness-level = <200>;
     };
  • 步骤二根据屏幕规格书和初始化序列配置dsi节点

屏幕初始化代码部分截图如下。

未找到图片

在linux系统中,LCD屏会有初始化和反初始化的过程。我们需要在MIPI DSI驱动中,将这些厂家提供的初始化代码转换为相应的DCS序列。

由于屏幕厂商没有提供寄存器手册,所以我不用知道他们到底设置了哪一个寄存器,我们只需要将初始化代码转化为如下格式的设备树配置就行了。

1
命令类型+延时+数据长度+数据

在屏幕初始化序列代码中包含三类指令,分别是: SET_GENERIC W_D delay_ms

在讲转换之前,我们先来看一下rk屏幕设备树初始化序列的命令类型。

  • 0x05 命令类型: 单字节数据 (DCS Short Write, no parameters)

  • 0x15 命令类型: 双字节数据 (DCS Short Write, 1 parameter)

  • 0x39 命令类型: 多字节数据 (DCS Long Write, n parameters n > 2)

那么我们该如何转换呢?首先,我们先数一下个数,以 SET_GENERIC 为开始,下一个 SET_GENERIC 为结束作为一次数据发送,数一数一共有几个数据。其次看延时,看看厂家提供的初始化代码里面有没有延时。

那么对于双字节序列:

1
2
3
 //Set_D2
 SET_GENERIC(2);
 W_D(0xD2);W_D(0x77);

我们将其转化成如下配置:

1
 15 00 02 D2 77

对于多字节序列:

1
2
 SET_GENERIC(4);
 W_D(0xB9);W_D(0xFF);W_D(0x83);W_D(0x99);

我们将其转化成如下配置:

1
 39 00 04 B9 FF 83 99

对于单字节延时序列:

1
2
3
 SET_GENERIC(1);
 W_D(0x11);
 delay_ms(200);

我们将其转化成如下配置:

1
 05 C8 01 11

将初始化序列代码整理一下就可以得到RK 屏幕的DCS序列,如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
panel-init-sequence = [
             39 00 04 B9 FF 83 99
             15 00 02 D2 77
             39 00 10 B1 02 04 74 94 01 32 33 11 11 AB 4D 56 73 02 02
             39 00 10 B2 00 80 80 AE 05 07 5A 11 00 00 10 1E 70 03 D4
             15 00 02 36 02
             39 00 2D B4 00 FF 02 C0 02 C0 00 00 08 00 04 06 00 32 04 0A 08 21 03 01 00 0F B8 8B 02 C0 02 C0 00 00 08 00 04 06 00 32 04 0A 08 01 00 0F B8 01
             39 05 22 D3 00 00 00 00 00 00 06 00 00 10 04 00 04 00 00 00 00 00 00 00 00 00 00 01 00 05 05 07 00 00 00 05 40
             39 05 21 D5 18 18 19 19 18 18 21 20 01 00 07 06 05 04 03 02 18 18 18 18 18 18 2F 2F 30 30 31 31 18 18 18 18
             39 05 21 D6 18 18 19 19 40 40 20 21 06 07 00 01 02 03 04 05 40 40 40 40 40 40 2F 2F 30 30 31 31 40 40 40 40
             39 00 11 D8 A2 AA 02 A0 A2 A8 02 A0 B0 00 00 00 B0 00 00 00
             15 00 02 BD 01
             39 00 11 D8 B0 00 00 00 B0 00 00 00 E2 AA 03 F0 E2 AA 03 F0
             15 00 02 BD 02
             39 00 09 D8 E2 AA 03 F0 E2 AA 03 F0
             15 00 02 BD 00
             39 00 03 B6 8D 8D
             39 05 37 E0 00 0E 19 13 2E 39 48 44 4D 57 5F 66 6C 76 7F 85 8A 95 9A A4 9B AB B0 5C 58 64 77 00 0E 19 13 2E 39 48 44 4D 57 5F 66 6C 76 7F 85 8A 95 9A A4 9B AB B0 5C 58 64 77
             05 C8 01 11
             05 C8 01 29
     ];

再结合屏幕规格书中的屏幕参数,得到如下配置。

未找到图片 未找到图片
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
 disp_timings0: display-timings {
       native-mode = <&dsi0_timing0>;
       dsi0_timing0: timing0 {
               clock-frequency = <131376000>;
           hactive = <1080>;
               vactive = <1920>;
               hsync-len = <10>;
               hback-porch = <20>;
               hfront-porch = <10>;
               vsync-len = <5>;
               vback-porch = <20>;
               vfront-porch = <10>;
               hsync-active = <0>;
               vsync-active = <0>;
               de-active = <0>;
               pixelclk-active = <0>;
             };
     };
  • 步骤三打开对应的dsi节点,开机logo,pwm等

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
&route_dsi0 {
       status = "okay";
       connect = <&vp1_out_dsi0>;
};

&video_phy0 {
       status = "okay";
};

&dsi0_in_vp0 {
       status = "disabled";
};

&dsi0_in_vp1 {
       status = "okay";
};

&pwm4 {
       status = "okay";
};
  • 步骤四编译烧写,调试屏幕

11.9.2. lvds 屏幕

  • GM8775C

RK3562/RK3566/RK3568 原生显示接口不支持双通道LVDS屏幕的数据输出,因此需要借助显示转换芯片才能实现单/双通道lvds屏幕的驱动。下面介绍使用GM8775C芯片的显 示方案。以rk3566 LubanCat-1H为例。

GM8775C 型 DSI 转 LVDS 发送器主要实现将 MIPI DSI 转单/双通道 LVDS功能,电路图如下

未找到图片

GM8775C 型 DSI 转 LVDS 发送器主要实现将 MIPI DSI 转单/双通道 LVDS功能,MIPI 支持 1/2/3/4 通道可选,最大支持 4Gbps 速率。 GM8775C 主要应用于前端视频应用处理器和后端显示设备之间,用于做 DSI 到 LVDS转换驱动输出功能。前端视频应用处理器输出 4lane DSI 数据,并 同步输出 1lane DSI 时钟信号。 GM8775C 将该 DSI 信号转换成 LVDS 差分信号输出,驱动后级显示器完成转换、传输和显示功能。示意图如下

未找到图片

以野火在售的单通道lvds屏幕为例,panel-init-sequence 需要填写 MIPI 向 GM8775C 芯片下发的寄存器参数,根据屏幕时序参数和硬件连接情况,此 处借助 GM8775C 配套的上位机软件,在软件界面中设置屏幕的参数,即可得到转换好的实际寄存器设置参数。

屏幕参数如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
dsi0_timing0: timing0 {
    clock-frequency = <71107200>;
        hactive = <1280>;
    vactive = <800>;

    hsync-len   = <32>;
    hback-porch = <80>;
    hfront-porch= <48>; //1440

    vsync-len    = <6>;
    vback-porch  = <14>;
    vfront-porch = <3>;  //823

    hsync-active = <0>;
    vsync-active = <0>;
    de-active = <0>;
    pixelclk-active = <0>;
     };

上位机软件配置如下

未找到图片

mipi时钟计算 dsi clk = Bitclk / 2  = H-total x V-total x fps x 位深 / lane number / 2

后续加上SSR展频,得到完整panel-init-sequence配置

 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
     panel-init-sequence = [
             23 00 02 27 AA
             23 00 02 48 02
             23 00 02 B6 20
             23 00 02 01 00
             23 00 02 02 20
             23 00 02 03 35
             23 00 02 04 08
             23 00 02 05 20
             23 00 02 06 0A
             23 00 02 07 00
             23 00 02 08 03
             23 00 02 09 06
             23 00 02 0A 03
             23 00 02 0B 82
             23 00 02 0C 27
             23 00 02 0D 01
             23 00 02 0E 80
             23 00 02 0F 20
             23 00 02 10 20
             23 00 02 11 03
             23 00 02 12 1B
             23 00 02 13 03
             23 00 02 14 01
             23 00 02 15 23
             23 00 02 16 40
             23 00 02 17 00
             23 00 02 18 01
             23 00 02 19 23
             23 00 02 1A 40
             23 00 02 1B 00
             23 00 02 1E 46
             23 00 02 51 30
             23 00 02 1F 10
             23 00 02 2A 01
             //如下为SSR展频,不加可能点不亮
             23 00 02 6A     08
             23 00 02 6C     9E
             23 00 02 6D 07
             23 00 02 6E     00
             23 00 02 6F     8A
             23 00 02 70 19
             23 64 02 71 00
             ];

11.9.3. edp 屏幕

edp屏幕的适配较为简单,只需要修改下时序即可。野火在售的edp屏幕的设备树插件配置如下:

  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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
     #include <dt-bindings/gpio/gpio.h>
     #include <dt-bindings/pinctrl/rockchip.h>
     #include <dt-bindings/display/drm_mipi_dsi.h>
     #include <dt-bindings/interrupt-controller/irq.h>
     #include <dt-bindings/display/rockchip_vop.h>

     / {

             fragment@0 {
                     target = <&route_edp>;

                     __overlay__ {
                             status = "okay";
                             connect = <&vp0_out_edp>;
                     };
             };

             fragment@1 {
                     target = <&edp_phy>;

                     __overlay__ {
                             status = "okay";
                     };
             };

             fragment@2 {
                     target = <&edp_in_vp0>;

                     __overlay__ {
                             status = "okay";
                     };
             };

             fragment@3 {
                     target = <&edp_in_vp1>;

                     __overlay__ {
                             status = "disabled";
                     };
             };

             fragment@4 {
                     target = <&edp>;

                     __overlay__ {
                             status = "okay";
                             // hpd-gpios = <&gpio4 RK_PC4 GPIO_ACTIVE_HIGH>; //热插拔信号检测
                             force-hpd; //强制hpd,忽略物理hdp信号

                             ports {
                                     #address-cells = <1>;
                                     #size-cells = <0>;

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

             fragment@5 {
                     target-path = "/";

                     __overlay__ {
                             edp_panel: edp-panel {
                                     compatible = "simple-panel";
                                     backlight = <&backlight_lvds_edp>;
                                     status = "okay";
                                     //bus-format = <MEDIA_BUS_FMT_RBG888_1X24>;
                                     prepare-delay-ms = <100>; //AUX通信前延时
                                     enable-delay-ms = <100>;

                                     display-timings {
                                             native-mode = <&timing0>;

                                             timing0: timing0 {
                                                     clock-frequency = <75590000>;
                                                     hactive = <1280>;
                                                     vactive = <800>;

                                                     hfront-porch = <126>;
                                                     hsync-len = <100>;
                                                     hback-porch = <10>;

                                                     vfront-porch = <16>;
                                                     vsync-len = <12>;
                                                     vback-porch = <3>;

                                                     hsync-active = <0>;
                                                     vsync-active = <0>;
                                                     de-active = <0>;
                                                     pixelclk-active = <0>;
                                             };
                                     };

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

                     fragment@6 {
                             target = <&route_hdmi>;

                             __overlay__ {
                                     status = "disabled";
                             };
                     };

                     fragment@7 {
                             target = <&hdmi_in_vp0>;

                             __overlay__ {
                             status = "disabled";
                             };
                     };

                     fragment@8 {
                             target = <&hdmi_in_vp1>;

                             __overlay__ {
                             status = "disabled";
                             };
                     };

                     fragment@9 {
                             target = <&hdmi>;

                             __overlay__ {
                                     status = "disabled";
                             };
                     };

                     fragment@10 {
                             target = <&vp0>;

                             __overlay__ {
                             rockchip,plane-mask = <(1 << ROCKCHIP_VOP2_CLUSTER0 | 1 << ROCKCHIP_VOP2_ESMART0 | \
                                                                             1 << ROCKCHIP_VOP2_SMART0)>;
                             rockchip,primary-plane = <ROCKCHIP_VOP2_SMART0>;
                             };
                     };
             };