17. 屏幕与触摸调试

本章配套视频介绍:

../../_images/video.png

《28-屏幕与触摸设置》

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

LubanCat-RK3576系列板卡都支持mipi屏以及hdmi显示屏的显示。

17.1. 旋转触摸屏

参考文章 触摸校准

参考文章 旋转触摸方向

配置触摸旋转方向

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

17.1.1. 永久配置(单屏)

注意

本方法将会永久配置屏幕的触摸方向,配置完成后需要重启或者重启服务才能运行,直到重新修改配置

 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
#修改配置文件
sudo vi /etc/X11/xorg.conf.d/20-modesetting.conf

#在文件的后面添加或者修改下面内容(四选一,选择自己要调整的)
#"Goodix Capacitive TouchScreen"是5.5寸屏的修改方法,树莓派屏可以修改为``fts_ts``

#(默认,不旋转)
Section "InputClass"
        Identifier "Goodix Capacitive TouchScreen"
        Option "Coordinate Transformation Matrix" " 1 0 0 0 1 0 0 0 1 "
EndSection

#(默认,向右旋转90度)
Section "InputClass"
        Identifier "Goodix Capacitive TouchScreen"
        Option "Coordinate Transformation Matrix" " 0 1 0 -1 0 1 0 0 1 "
EndSection

#(默认,向左旋转90度)
Section "InputClass"
        Identifier "Goodix Capacitive TouchScreen"
        Option "Coordinate Transformation Matrix" " 0 -1 1 1 0 0 0 0 1 "
EndSection


#(默认,旋转180度)
Section "InputClass"
        Identifier "Goodix Capacitive TouchScreen"
        Option "Coordinate Transformation Matrix" " -1 0 1 0 -1 1 0 0 1 "
EndSection


#修改完成后可以重启或者运行下列命令重启显示服务
sudo systemctl restart lightdm.service

17.2. 触摸屏绑定屏幕

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
14
15
#查看当前的屏幕
xrandr -q

DSI-1:mipi屏
DSI-2:mipi屏
HDMI-1:HDMI屏
DP-1:DP屏幕
eDP-1:eDP屏幕

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

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

xinput map-to-output 10 DSI-1

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

17.3. 旋转屏幕方向

17.3.1. 命令行配置

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

DSI-1:mipi屏
DSI-2:mipi屏
HDMI-1:HDMI屏
DP-1:DP屏幕
eDP-1:eDP屏幕

小编在用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

17.3.2. 桌面配置

右击打开选择屏幕显示设置,然后可以按照下面图片的方法配置

未找到图片

17.4. 多屏异显

默认情况下为多屏异显,不需要进行配置,打开多个屏幕的设备树插件,接上屏幕即可显示不同内容。

17.5. 多屏同显

17.5.1. 使用命令脚本配置

以下以1080P HDMI屏幕和5.5寸mipi屏幕为例,通过udev规则调用脚本来支持HDMI热插拔时能够同显,通过自启动服务确保启动能够同显:

因为5.5寸屏幕默认是竖屏的,并且只能通过桌面配置图像输出来旋转,无法通过驱动或设备树修改显示方向,所以要通过前面介绍的屏幕和触摸旋转方法进行配置。

17.5.1.1. 创建udev规则

1
2
#创建udev规则文件
sudo vim /etc/udev/rules.d/99-monitor-hotplug.rules

然后在99-monitor-hotplug.rules添加以下内容

1
2
ACTION=="add", SUBSYSTEM=="drm", DEVPATH=="/devices/platform/display-subsystem/drm/card0", RUN+="/home/cat/monitor-hotplug.sh"
ACTION=="remove", SUBSYSTEM=="drm", DEVPATH=="/devices/platform/display-subsystem/drm/card0", RUN+="/home/cat/monitor-hotplug.sh"

然后重新加载规则:

1
2
sudo udevadm control --reload-rules
sudo systemctl restart udev

以上规则是插入和拔掉HDMI都会调用/home/cat/monitor-hotplug.sh脚本。

17.5.1.2. 自启动调用配置

在桌面登录用户的家目录下创建启动文件:

1
2
3
4
5
#以cat用户为例
mkdir /home/cat/.config/autostart

#创建配置文件
vim /home/cat/.config/autostart/screen_settings.desktop

在screen_settings.desktop文件中添加以下内容:

1
2
3
4
5
6
7
8
[Desktop Entry]
Type=Application
Exec=/home/cat/monitor-hotplug.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=My App
Comment=Start My App on login

以上自启动配置是启动自动调用/home/cat/monitor-hotplug.sh脚本

17.5.1.3. 创建同显脚本

1
2
#创建udev调用的脚本
sudo vim /home/cat/monitor-hotplug.sh

然后在monitor-hotplug.sh添加以下内容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/bash

export DISPLAY=:0

# Define your desired resolutions and settings
DSI_MODE="1080x1920"
HDMI_MODE="1920x1080"
ROTATION="right"

# Function to detect HDMI connection status
function check_hdmi_connection {
        HDMI_STATUS=$(</sys/class/drm/card0-HDMI-A-1/status)

        if [ "$HDMI_STATUS" = connected ]; then
                xrandr --output DSI-1 --mode $DSI_MODE --rotate $ROTATION
                xrandr --output HDMI-1 --mode $HDMI_MODE
                xrandr --output HDMI-1 --same-as DSI-1 --auto
        elif [ "$HDMI_STATUS" = disconnected ]; then
                xrandr --output DSI-1 --mode $DSI_MODE --rotate $ROTATION
        fi
}

# Run the function to check HDMI connection status
check_hdmi_connection

然后添加脚本执行权限:

1
sudo chmod 777 /home/cat/monitor-hotplug.sh

以上monitor-hotplug.sh脚本中就使用了前面介绍的命令进行旋转和同显,截取代码如下:

1
2
3
xrandr --output DSI-1 --mode $DSI_MODE --rotate $ROTATION
xrandr --output HDMI-1 --mode $HDMI_MODE
xrandr --output HDMI-1 --same-as DSI-1 --auto

重启后进入可以发现两个屏幕同显了,并且拔掉HDMI再插入也弄够进行同显。

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

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

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

17.7. 切换屏幕VP接口

LubanCat-rk3576系列板卡野火默认的vp分配下:

  • Video Port0——HDMI接口 最大支持4K@120Hz

  • Video Port1——DP接口 最大支持2560x1600@60Hz

  • Video Port2——DSI接口 最大支持1920x1080@60Hz

以上Video Port可切换自由分配切换,例如DP接口使用Video Port0就可以实现最大支持4K@120Hz。

以下以Lubancat-3为例将Video Port0连接到DP接口,Video Port1连接到HDMI接口。

修改内核源码/arch/arm64/boot/dts/rockchip/rk3576-lubancat-3.dts

1、将HDMI接口修改使用Video Port1:

未找到图片

2、将DP接口修改使用Video Port0:

未找到图片

修改完成后重新编译设备树,替换板卡/boot/dtb/下面同名dtb文件即可。

17.8. 屏幕调试方法

17.8.1. mipi 屏幕

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

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

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

未找到图片

17.8.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";
};
  • 步骤四编译烧写,调试屏幕

17.8.2. lvds 屏幕

  • GM8775C

原生显示接口不支持双通道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
             ];

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