联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话: QQ:1602036736

15.6寸 GT9110H电容触摸 RK3566 android 调试记录

需求

在RK3566泰山派原本的android11 SDK基础下,调试出15.6寸LVDS屏 + 15.6寸GT9110H电容触摸。

关于 15.6寸LVDS屏 之前已经调过就不写怎么驱动了。本文主要讲 触摸调试。

硬件

图片#B #S #R #60% #auto
图片#B #S #R #60% #auto

驱动

驱动用是的 SDK 中默认自带的驱动,供应商提供的驱动没有用到,以及 cfg 文件也没有用到。

设备树

触摸I2C的设备树:

&i2c5 {
    status = "okay";
    pinctrl-0 = <&i2c5m0_xfer>;
    clock-frequency = <400000>;

    gt911: gt911@14 {
        compatible = "goodix,gt9xx";
        reg = <0x14>;
        status = "okay";

        tp-size = <9110>;
        max-x = <1920>;
        max-y = <1080>;
        pinctrl-0 = <&touch_gpio>;
        touch-gpio = <&gpio3 RK_PC1 IRQ_TYPE_EDGE_RISING>;
        pinctrl-names = "default";
        pinctrl-1 = <&reset_gpio>;
        reset-gpio = <&gpio3 RK_PC2 GPIO_ACTIVE_HIGH>;
    };
};

&pinctrl {

   ...(省略)
   
    gt911{
        touch_gpio: touch-gpio {
            rockchip,pins = <3 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>;
        };
        reset_gpio: reset-gpio {
            rockchip,pins = <3 RK_PC2 RK_FUNC_GPIO &pcfg_pull_up>;
        };
    };
};

测试方法

进入系统的开发者选项。在设置找到 关于平板电脑 -> 版本号。连续点击版本号几次直到提示进入 开发者模式 为止。

进入开发者模式后,退回设置主页,找到 系统 -> 高级 -> 开发者选项 -> 指针位置 。将指针位置的选项打开,即可看到触摸点。

图片#B #S #R #60% #auto

调试记录

触摸范围不对

烧录上面的设备树后,发现X Y都镜像,触摸范围大小跟屏幕也不搭。

后面打开驱动源码的调试功能,看看具体啥问题。驱动源码位置:

<android SDK>\kernel\drivers\input\touchscreen\gt9xx

在 gt9xx.h 中找到 DEBUG_SWITCH 宏定义并设置为 1,即可打开DEBUG选项。
图片#B #S #R #60% #auto

完成后,编译内核烧录上电,通过 adb 调试查看日志发现在设备树中设置的像素并没有设置到屏幕里面,触摸范围是默认的1366,768。

查看日志命令:

dmesg | grep GTP-INFO

日志输出:
图片#B #S #R #60% #auto

可以看到它使用的触摸范围是默认的,而不是我们设置的,我的解决办法是直接写死触摸范围。
更新代码:
图片#B #S #R #60% #auto
主要是更新为以下代码:

input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X, 0, ts->abs_x_max, 0, 0);
input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y, 0, ts->abs_y_max, 0, 0);

ts->abs_x_max 和 ts->abs_y_max 就是我们输入的参数。
设置完成后编译烧录测试应该触摸范围正常了。

触摸XY镜像

后面了解到,在设备树中,配置tp-size 参数为 9110,而在驱动代码中,是根据这个 tp-size 来配置的是否镜像。

驱动源码中关于 tp-size 配置是否镜像的位置:

图片#B #S #R #60% #auto

三个关键参数:

gtp_change_x2y = FALSE; // x、y是否交换方向  TRUE开启   FALSE关闭
gtp_x_reverse = FALSE; //是否开启X反向  TRUE开启   FALSE关闭
gtp_y_reverse = FALSE;//是否开启Y反向  TRUE开启   FALSE关闭

这里我全部关闭就正常了。

无法通过UI看到触摸情况时的调试命令

查看当前触摸接口的中断:

cat /proc/bus/input/devices

确定了是哪一个中断号后,通过下面命令查看触摸效果:

比如我的是中断5
evtest /dev/input/event5

android13 的调试记录

在android13 的 kernel5.10 中是没有 CONFIG_TOUCHSCREEN_GT9XX 选项的,需要在目录:Z:\android13\kernel-5.10\drivers\input\touchscreen\Kconfig 下新增说明:

diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
index 0efc7e75a3dd..b1f0bedc57b7 100644
--- a/drivers/input/touchscreen/Kconfig
+++ b/drivers/input/touchscreen/Kconfig
@@ -426,6 +426,15 @@ config TOUCHSCREEN_GSLX680_PAD
 	tristate "gslX680 touchpad driver for pad"
 	help
 	  gslX680 touchpad driver for pad
+	  
+config TOUCHSCREEN_GT9XX
+	tristate "Goodix gt9xx support for rockchip platform"
+	depends on I2C && ARCH_ROCKCHIP
+	help
+	  Say Y here if you have a touchscreen interface using the gt9xx
+	  on Rockchip platform, and your board-specific initialization
+	  code includes that in its table of IIC devices.
+	  If unsure, say N.
 
 config TOUCHSCREEN_GT1X
 	tristate "GT1X touchscreens support"

完成后在同目录下的 Makefile 中新增编译使能:

diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile
index 0b1975b3bf95..21582b592945 100644
--- a/drivers/input/touchscreen/Makefile
+++ b/drivers/input/touchscreen/Makefile
@@ -54,6 +54,7 @@ gsl3673-800x1280-y := gsl3673_800x1280.o gsl_point_id.o
 obj-$(CONFIG_TOUCHSCREEN_GSLX680_PAD)	+= gslx680-pad.o
 gslx680-pad-y := gslx680_pad.o gsl_point_id.o
 obj-$(CONFIG_TOUCHSCREEN_GT1X)		+= gt1x/
+obj-$(CONFIG_TOUCHSCREEN_GT9XX)		+= gt9xx/
 obj-$(CONFIG_TOUCHSCREEN_HIDEEP)	+= hideep.o
 obj-$(CONFIG_TOUCHSCREEN_ILI210X)	+= ili210x.o
 obj-$(CONFIG_TOUCHSCREEN_IMX6UL_TSC)	+= imx6ul_tsc.o

更新驱动适配触摸屏:

diff --git a/drivers/input/touchscreen/gt9xx/gt9xx.c b/drivers/input/touchscreen/gt9xx/gt9xx.c
index 67b1b3451dab..5cc2d61f4371 100644
--- a/drivers/input/touchscreen/gt9xx/gt9xx.c
+++ b/drivers/input/touchscreen/gt9xx/gt9xx.c
@@ -92,12 +92,16 @@ static ssize_t gt91xx_config_read_proc(struct file *, char __user *, size_t, lof
 static ssize_t gt91xx_config_write_proc(struct file *, const char __user *, size_t, loff_t *);
 
 static struct proc_dir_entry *gt91xx_config_proc = NULL;
-static const struct file_operations config_proc_ops = {
-    .owner = THIS_MODULE,
-    .read = gt91xx_config_read_proc,
-    .write = gt91xx_config_write_proc,
+// static const struct file_operations config_proc_ops = {
+//     .owner = THIS_MODULE,
+//     .read = gt91xx_config_read_proc,
+//     .write = gt91xx_config_write_proc,
+// };
+static const struct proc_ops config_proc_ops = {
+    .proc_read = gt91xx_config_read_proc,
+    .proc_write = gt91xx_config_write_proc,
+    .proc_lseek = default_llseek,
 };
-
 #if GTP_CREATE_WR_NODE
 extern s32 init_wr_node(struct i2c_client*);
 extern void uninit_wr_node(void);
@@ -1675,6 +1679,7 @@ static s32 gtp_init_panel(struct goodix_ts_data *ts)
         }
         config[ts->gtp_cfg_len] = (~check_sum) + 1;
     #endif
+        GTP_INFO("TEST STAT");
         GTP_INFO("X_MAX: %d, Y_MAX: %d, TRIGGER: 0x%02x", ts->abs_x_max,ts->abs_y_max,ts->int_trigger_type);
     }
     
@@ -2102,6 +2107,8 @@ static s8 gtp_request_input_dev(struct i2c_client *client,
     input_set_abs_params(ts->input_dev, ABS_X, 0, ts->abs_x_max, 0, 0);
     input_set_abs_params(ts->input_dev, ABS_Y, 0, ts->abs_y_max, 0, 0);
 #endif
+    // input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X, 0, 1080, 0, 0);
+    // input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y, 0, 1920, 0, 0);
     input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X, 0, ts->abs_x_max, 0, 0);
     input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y, 0, ts->abs_y_max, 0, 0);
     input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0);
@@ -2654,8 +2661,8 @@ static int goodix_ts_probe(struct i2c_client *client, const struct i2c_device_id
 	if (val == 89) {
 		m89or101 = TRUE;
 		gtp_change_x2y = TRUE;
-		gtp_x_reverse = FALSE;
-		gtp_y_reverse = TRUE;
+		gtp_x_reverse = TRUE;
+		gtp_y_reverse = FALSE;
 	} else if (val == 101) {
 		m89or101 = FALSE;
 		gtp_change_x2y = TRUE;
@@ -2670,8 +2677,8 @@ static int goodix_ts_probe(struct i2c_client *client, const struct i2c_device_id
 	} else if (val == 9110) {
 		m89or101 = FALSE;
 		bgt9110 = TRUE;
-		gtp_change_x2y = TRUE;
-		gtp_x_reverse = TRUE;
+		gtp_change_x2y = FALSE;
+		gtp_x_reverse = FALSE;
 		gtp_y_reverse = FALSE;
 	} else if (val == 9111) {
 		m89or101 = FALSE;
diff --git a/drivers/input/touchscreen/gt9xx/gt9xx.h b/drivers/input/touchscreen/gt9xx/gt9xx.h
index acc288575691..37584c11e39c 100644
--- a/drivers/input/touchscreen/gt9xx/gt9xx.h
+++ b/drivers/input/touchscreen/gt9xx/gt9xx.h
@@ -1,3 +1,4 @@
+// #endif /* _GOODIX_GT9XX_H_ */
 /* drivers/input/touchscreen/gt9xx.h
  * 
  * 2010 - 2013 Goodix Technology.
@@ -40,7 +41,7 @@
 //#include <linux/earlysuspend.h>
 
 #define CONFIG_8_9  0
-#define DEBUG_SWITCH  0
+#define DEBUG_SWITCH  1
 
 //***************************PART1:ON/OFF define*******************************
 #define GTP_CUSTOM_CFG        0
@@ -53,7 +54,7 @@
 #define GTP_X_REVERSE_ENABLE	1
 #define GTP_Y_REVERSE_ENABLE	0
 #endif
-#define GTP_DRIVER_SEND_CFG   1
+#define GTP_DRIVER_SEND_CFG   0
 #define GTP_HAVE_TOUCH_KEY    0
 #define GTP_POWER_CTRL_SLEEP  0
 
@@ -67,7 +68,7 @@
 #define GTP_HEADER_FW_UPDATE  0    // auto update fw by gtp_default_FW in gt9xx_firmware.h, function together with GTP_AUTO_UPDATE
 #define GTP_AUTO_UPDATE_CFG   0    // auto update config by .cfg file, function together with GTP_AUTO_UPDATE
 
-#define GTP_COMPATIBLE_MODE   1    /* compatible with GT9XXF */
+#define GTP_COMPATIBLE_MODE   0    /* compatible with GT9XXF */
 
 #define GTP_CREATE_WR_NODE    0
 #define GTP_ESD_PROTECT       0    // esd protection with a cycle of 2 seconds
@@ -78,8 +79,8 @@
 #define GTP_GESTURE_WAKEUP    0    // gesture wakeup
 
 #define GTP_DEBUG_ON          1
-#define GTP_DEBUG_ARRAY_ON    0
-#define GTP_DEBUG_FUNC_ON     0
+#define GTP_DEBUG_ARRAY_ON    1
+#define GTP_DEBUG_FUNC_ON     1
 
 /* init use fixed clk num */
 /* if open, u8 p_main_clk[6] = {69,69,69,69,69,167}; */
@@ -220,21 +221,22 @@ extern u16 total_len;
 
 //WGJ10187_GT9271_Config_20140623_104014_0X41.cfg
 #define CTP_CFG_GROUP1 {\
-    0x41,0x80,0x07,0xB0,0x04,0x0A,0x05,0x00,0x01,0x08,0x28,0x0F,0x50,0x32,0x03, \
-    0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8F,0x2F,0x99, \
-    0x2B,0x2D,0x31,0x0D,0x00,0x00,0x00,0x01,0x03,0x1D,0x00,0x00,0x00,0x00,0x00, \
-    0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x55,0x94,0xC5,0x02,0x07,0x00,0x00,0x00, \
-    0x8C,0x26,0x00,0x7B,0x2D,0x00,0x6C,0x36,0x00,0x61,0x41,0x00,0x58,0x4E,0x00, \
-    0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, \
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, \
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x05,0x06,0x07,0x08,0x09, \
-    0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x14,0x15,0x16,0x17,0xFF,0xFF,0x00,0x00,0x00, \
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x13,0x12,0x11,0x10,0x0F,0x0D,0x0C, \
-    0x0A,0x08,0x07,0x06,0x04,0x02,0x00,0x19,0x1B,0x1C,0x1E,0x1F,0x20,0x21,0x22, \
-    0x23,0x24,0x25,0x26,0x27,0x28,0x29,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, \
-    0x00,0x00,0x00,0x00,0xB5,0x01 \
+    0x60,0x20,0x03,0x00,0x05,0x0A,0x05,0x00,0x01,0xC2,0x1F,0x05,0x4B,\
+	0x37,0x03,0x00,0x00,0x00,0x1F,0x00,0x23,0x22,0x04,0x19,0x17,0x20,\
+	0x14,0x93,0x33,0xCC,0x1C,0x1E,0x0A,0x1A,0x53,0x00,0x00,0x9B,0x33,\
+	0x1C,0x17,0x1A,0x1C,0x90,0x83,0x23,0x46,0x3C,0x0C,0x08,0x11,0x14,\
+	0x50,0x94,0xC0,0x52,0x14,0x0F,0x00,0x04,0xCB,0x17,0x00,0xAA,0x1E,\
+	0xA6,0x91,0x28,0x00,0x83,0x35,0x00,0x7D,0x46,0x00,0x7D,0x00,0x00,\
+	0x00,0x00,0xF0,0x50,0x32,0xFF,0xFF,0x07,0x22,0x22,0x66,0x03,0x54,\
+	0x55,0x21,0x42,0x00,0xFF,0x7D,0x06,0x00,0x00,0x00,0x00,0x00,0x00,\
+	0x00,0x00,0x00,0x00,0xA0,0x00,0x32,0x19,0x17,0x16,0x15,0x14,0x13,\
+	0x12,0x11,0x10,0x0F,0x0E,0x0D,0x0C,0x0B,0x0A,0x09,0x08,0x07,0x06,\
+	0x05,0x04,0x03,0x02,0x01,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x29,\
+	0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1F,0x1E,0x1D,0x1B,\
+	0x19,0x18,0x17,0x16,0x15,0x13,0x12,0x11,0x10,0x0F,0x00,0x01,0x02,\
+	0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0E,0xFF,0xFF,\
+	0xFF,0xFF,0xFB,0x01\
     }
-
 // TODO: define your config for Sensor_ID == 1 here, if needed
 #define CTP_CFG_GROUP2 {\
     }
@@ -391,7 +393,7 @@ extern u16 total_len;
                                        }while (0)
 
 //*****************************End of Part III********************************
-#define TRUE    1
-#define FALSE   0
+// #define TRUE    1
+// #define FALSE   0
 
 #endif /* _GOODIX_GT9XX_H_ */

最后,在 kernel5.10 的 config 中添加驱动使能:

diff --git a/arch/arm64/configs/rockchip_defconfig b/arch/arm64/configs/rockchip_defconfig
index b2912832b178..04a8ff67e791 100644
--- a/arch/arm64/configs/rockchip_defconfig
+++ b/arch/arm64/configs/rockchip_defconfig
@@ -56,7 +56,6 @@ CONFIG_ARCH_ROCKCHIP=y
 # CONFIG_ARM64_ERRATUM_1463225 is not set
 # CONFIG_ARM64_ERRATUM_1542419 is not set
 # CONFIG_ARM64_ERRATUM_1508412 is not set
-# CONFIG_ARM64_ERRATUM_2051678 is not set
 # CONFIG_ARM64_ERRATUM_2054223 is not set
 # CONFIG_ARM64_ERRATUM_2067961 is not set
 # CONFIG_CAVIUM_ERRATUM_22375 is not set
@@ -80,13 +79,10 @@ CONFIG_ARMV8_DEPRECATED=y
 CONFIG_SWP_EMULATION=y
 CONFIG_CP15_BARRIER_EMULATION=y
 CONFIG_SETEND_EMULATION=y
-# CONFIG_ARM64_PTR_AUTH is not set
 # CONFIG_ARM64_AMU_EXTN is not set
-# CONFIG_ARM64_TLB_RANGE is not set
 # CONFIG_ARM64_BTI is not set
 # CONFIG_ARM64_E0PD is not set
 # CONFIG_ARCH_RANDOM is not set
-# CONFIG_ARM64_MTE is not set
 # CONFIG_ARM64_SVE is not set
 CONFIG_ARM64_PSEUDO_NMI=y
 CONFIG_RANDOMIZE_BASE=y
@@ -412,7 +408,6 @@ CONFIG_USB_EPSON2888=y
 CONFIG_USB_KC2190=y
 CONFIG_USB_NET_CX82310_ETH=y
 CONFIG_USB_NET_KALMIA=y
-CONFIG_USB_NET_QMI_WWAN=y
 CONFIG_USB_HSO=y
 CONFIG_USB_NET_INT51X1=y
 CONFIG_USB_IPHETH=y
@@ -859,7 +854,6 @@ CONFIG_LEDS_TRIGGER_BACKLIGHT=y
 CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
 CONFIG_RTC_CLASS=y
 CONFIG_RTC_DRV_HYM8563=y
-CONFIG_RTC_DRV_RK808=y
 CONFIG_DMADEVICES=y
 CONFIG_PL330_DMA=y
 CONFIG_RK_DMABUF_DEBUG=y
@@ -1023,3 +1017,4 @@ CONFIG_SCHEDSTATS=y
 CONFIG_BUG_ON_DATA_CORRUPTION=y
 CONFIG_ENABLE_DEFAULT_TRACERS=y
 # CONFIG_RUNTIME_TESTING_MENU is not set
+CONFIG_TOUCHSCREEN_GT9XX=y
\ No newline at end of file
注意!上面的补丁修改只要关注 CONFIG_TOUCHSCREEN_GT9XX=y 就好,其他的 + 是我个人其他的配置,在触摸上不用关注。

完成后编译 kernel 然后烧录验证即可。

Buildroot 的调试记录

具体更改diff:

主要关注 gt9xx.c .h
diff --git a/arch/arm64/boot/dts/rockchip/tspi-rk3566-core-v10.dtsi b/arch/arm64/boot/dts/rockchip/tspi-rk3566-core-v10.dtsi
index 6c9afefd9002..e319edd1e834 100755
--- a/arch/arm64/boot/dts/rockchip/tspi-rk3566-core-v10.dtsi
+++ b/arch/arm64/boot/dts/rockchip/tspi-rk3566-core-v10.dtsi
@@ -238,8 +238,8 @@
 		pinctrl-0 = <&uart1m0_rtsn>;
 		pinctrl-1 = <&uart1_gpios>;
 		BT,reset_gpio    = <&gpio2 RK_PB7 GPIO_ACTIVE_HIGH>;
-		BT,wake_gpio     = <&gpio2 RK_PC1 GPIO_ACTIVE_HIGH>;
-		BT,wake_host_irq = <&gpio2 RK_PC0 GPIO_ACTIVE_HIGH>;
+		BT,wake_gpio     = <&gpio0 RK_PC3 GPIO_ACTIVE_HIGH>;
+		BT,wake_host_irq = <&gpio0 RK_PC4 GPIO_ACTIVE_HIGH>;
 		status = "okay";
 	};
 
@@ -338,6 +338,15 @@
 &i2c0 {
 	status = "okay";
 
+	hym8563:hym8563@51{
+		compatible = "haoyu,hym8563";
+		reg = <0x51>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&rtc_int>;
+		interrupt-parent = <&gpio0>;
+		interrupts = <RK_PD3 IRQ_TYPE_LEVEL_LOW>;
+	};
+	
 	vdd_cpu: tcs4525@1c {
 		compatible = "tcs,tcs452x";
 		reg = <0x1c>;
@@ -700,6 +709,12 @@
 			rockchip,pins = <2 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;
 		};
 	};
+
+	rtc{
+		rtc_int: rtc-int{
+			rockchip,pins = <0 RK_PD3 RK_FUNC_GPIO &pcfg_pull_up>;
+		};
+	};
 };
 
  /*
@@ -841,7 +856,7 @@
 
 //音频输出接口
 &spdif_8ch {
-	status = "disabled";
+	status = "okay";
 };
 
 //温度监测
diff --git a/arch/arm64/boot/dts/rockchip/tspi-rk3566-dsi-v10.dtsi b/arch/arm64/boot/dts/rockchip/tspi-rk3566-dsi-v10.dtsi
index 6c3a782fe64a..f0e4ea287f04 100755
--- a/arch/arm64/boot/dts/rockchip/tspi-rk3566-dsi-v10.dtsi
+++ b/arch/arm64/boot/dts/rockchip/tspi-rk3566-dsi-v10.dtsi
@@ -1,20 +1,7 @@
-/*********************************************************************
- *           立创开发板不靠卖板赚钱,以培养中国工程师为己任  
- *         泰山派软硬件资料与相关扩展板软硬件资料官网全部开源
- *                      开发板官网:www.lckfb.com            
- *                     立创论坛:oshwhub.com/forum           
- *            关注B站:【立创开发板】,掌握我们的最新动态!  
- *********************************************************************
- * 文件名:tspi-rk3566-dsi-v10.dtsi
- * 描述:mipi 屏幕
- * 更新:
- * 时间          作者           联系           说明
- * 2023-09-13   吴才成    1378913492@qq.com   v1.0.0
- *********************************************************************/
 / {
 	backlight: backlight {
 		compatible = "pwm-backlight";
-		pwms = <&pwm5 0 25000 0>;
+		pwms = <&pwm0 0 25000 0>;
 		brightness-levels = <
 			  0  20  20  21  21  22  22  23
 			 23  24  24  25  25  26  26  27
@@ -53,16 +40,45 @@
 	};
 };
 
-&pwm5 {
+&pwm0 {
 	status = "okay";
+	pinctrl-0 = <&pwm0m0_pins>;
 };
 
+// &i2c1 {
+// 	status = "okay";
+// 	ts@5d {
+// 		compatible = "goodix,gt9xx";
+// 		reg = <0x5d>;
+// 		tp-size = <89>;
+// 		max-x = <1280>;
+// 		max-y = <800>;
+// 		touch-gpio = <&gpio1 RK_PA0 IRQ_TYPE_LEVEL_LOW>;
+// 		reset-gpio = <&gpio1 RK_PA1 IRQ_TYPE_LEVEL_LOW>;
+// 	};
+// };
+// &i2c1 {
+// 	status = "okay";
+// 	ts@5d {
+// 		pinctrl-0 = <&touch_gpio>;
+// 		compatible = "goodix,gt9xx";
+// 		reg = <0x5d>;
+// 		tp-size = <970>;
+// 		max-x = <1080>;
+// 		max-y = <1920>;
+// 		touch-gpio = <&gpio1 RK_PA0 IRQ_TYPE_LEVEL_LOW>;
+// 		reset-gpio = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>;
+// 	};
+// };
 
 &pinctrl {
 	dsi1 {
 		dsi1_rst_gpio: dsi1-rst-gpio {
-			rockchip,pins = <3 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>;
+			rockchip,pins = <1 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>;
 		};
+		// touch_gpio: touch-gpio {
+		// 	rockchip,pins = <1 RK_PA0 RK_FUNC_GPIO &pcfg_pull_up>;
+		// };
 	};
 };
 
@@ -75,10 +91,12 @@
 };
 
 &dsi1_in_vp0 {
+	//status = "disabled";
 	status = "okay";
 };
 
 &dsi1_in_vp1 {
+	//status = "okay";
 	status = "disabled";
 };
 
@@ -88,229 +106,76 @@
 
 &route_dsi1 {
 	status = "okay";//wucaicheng mipi okay
+	//connect = <&vp1_out_dsi1>;
 	connect = <&vp0_out_dsi1>;
 };
 
-//默认 8寸800x1280
+//3.1寸屏幕
+// D310T9362V1
 &dsi1 {
 	status = "okay";
-	rockchip,lane-rate = <480>;
+	rockchip,lane-rate = <480>;//(480+50+60+10)*(800+20+34+2)*60*3*8/2,+100mhz
 	dsi1_panel: panel@0 {
 		status = "okay";
 		compatible = "simple-panel-dsi";
-		reset-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>;
+		reset-gpios = <&gpio1 RK_PA4 GPIO_ACTIVE_LOW>;
 		pinctrl-names = "default";
 		pinctrl-0 = <&dsi1_rst_gpio>;
 		reg = <0>;
 		backlight = <&backlight>;
-		reset-delay-ms = <10>;
-		enable-delay-ms = <120>;
+		reset-delay-ms = <200>;
+		enable-delay-ms = <100>;
 		prepare-delay-ms = <20>;
 		unprepare-delay-ms = <20>;
-		disable-delay-ms = <50>;
+		disable-delay-ms = <20>;
+		init-delay-ms = <120>;
 		dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
 			MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>;
 		dsi,format = <MIPI_DSI_FMT_RGB888>;
-		dsi,lanes  = <4>;
+		dsi,lanes  = <2>;
 		panel-init-sequence = [
-			15 00 02 E0 00
-			15 00 02 E1 93
-			15 00 02 E2 65
-			15 00 02 E3 F8
-			15 00 02 80 03
-			15 00 02 E0 01
-			15 00 02 00 00
-			15 00 02 01 3C
-			15 00 02 03 10
-			15 00 02 04 38
-			15 00 02 0C 74
-			15 00 02 17 00
-			15 00 02 18 E7
-			15 00 02 19 01
-			15 00 02 1A 00
-			15 00 02 1B E7
-			15 00 02 1C 01
-			15 00 02 24 FE
-			15 00 02 35 23
-			15 00 02 37 09
-			15 00 02 38 04
-			15 00 02 39 00
-			15 00 02 3A 01
-			15 00 02 3C 70
-			15 00 02 3D FF
-			15 00 02 3E FF
-			15 00 02 3F 7F
-			15 00 02 40 06
-			15 00 02 41 A0
-			15 00 02 43 1E
-			15 00 02 44 0B
-			15 00 02 45 28
-			15 00 02 55 02
-			15 00 02 57 A9
-			15 00 02 59 0A
-			15 00 02 5A 2D
-			15 00 02 5B 19
-			15 00 02 5C 15
-			15 00 02 5D 7F
-			15 00 02 5E 6E
-			15 00 02 5F 5F
-			15 00 02 60 53
-			15 00 02 61 50
-			15 00 02 62 41
-			15 00 02 63 44
-			15 00 02 64 2C
-			15 00 02 65 44
-			15 00 02 66 42
-			15 00 02 67 40
-			15 00 02 68 5B
-			15 00 02 69 45
-			15 00 02 6A 48
-			15 00 02 6B 38
-			15 00 02 6C 32
-			15 00 02 6D 25
-			15 00 02 6E 14
-			15 00 02 6F 08
-			15 00 02 70 7F
-			15 00 02 71 6E
-			15 00 02 72 5F
-			15 00 02 73 53
-			15 00 02 74 50
-			15 00 02 75 41
-			15 00 02 76 44
-			15 00 02 77 2C
-			15 00 02 78 44
-			15 00 02 79 42
-			15 00 02 7A 40
-			15 00 02 7B 5B
-			15 00 02 7C 45
-			15 00 02 7D 48
-			15 00 02 7E 38
-			15 00 02 7F 32
-			15 00 02 80 25
-			15 00 02 81 14
-			15 00 02 82 08
-			15 00 02 E0 02
-			15 00 02 00 50
-			15 00 02 01 5F
-			15 00 02 02 5F
-			15 00 02 03 52
-			15 00 02 04 77
-			15 00 02 05 57
-			15 00 02 06 5F
-			15 00 02 07 4E
-			15 00 02 08 4C
-			15 00 02 09 5F
-			15 00 02 0A 4A
-			15 00 02 0B 48
-			15 00 02 0C 5F
-			15 00 02 0D 46
-			15 00 02 0E 44
-			15 00 02 0F 40
-			15 00 02 10 5F
-			15 00 02 11 5F
-			15 00 02 12 5F
-			15 00 02 13 5F
-			15 00 02 14 5F
-			15 00 02 15 5F
-			15 00 02 16 51
-			15 00 02 17 5F
-			15 00 02 18 5F
-			15 00 02 19 53
-			15 00 02 1A 77
-			15 00 02 1B 57
-			15 00 02 1C 5F
-			15 00 02 1D 4F
-			15 00 02 1E 4D
-			15 00 02 1F 5F
-			15 00 02 20 4B
-			15 00 02 21 49
-			15 00 02 22 5F
-			15 00 02 23 47
-			15 00 02 24 45
-			15 00 02 25 41
-			15 00 02 26 5F
-			15 00 02 27 5F
-			15 00 02 28 5F
-			15 00 02 29 5F
-			15 00 02 2A 5F
-			15 00 02 2B 5F
-			15 00 02 2C 01
-			15 00 02 2D 1F
-			15 00 02 2E 1F
-			15 00 02 2F 13
-			15 00 02 30 17
-			15 00 02 31 17
-			15 00 02 32 1F
-			15 00 02 33 0D
-			15 00 02 34 0F
-			15 00 02 35 1F
-			15 00 02 36 05
-			15 00 02 37 07
-			15 00 02 38 1F
-			15 00 02 39 09
-			15 00 02 3A 0B
-			15 00 02 3B 11
-			15 00 02 3C 1F
-			15 00 02 3D 1F
-			15 00 02 3E 1F
-			15 00 02 3F 1F
-			15 00 02 40 1F
-			15 00 02 41 1F
-			15 00 02 42 00
-			15 00 02 43 1F
-			15 00 02 44 1F
-			15 00 02 45 12
-			15 00 02 46 17
-			15 00 02 47 17
-			15 00 02 48 1F
-			15 00 02 49 0C
-			15 00 02 4A 0E
-			15 00 02 4B 1F
-			15 00 02 4C 04
-			15 00 02 4D 06
-			15 00 02 4E 1F
-			15 00 02 4F 08
-			15 00 02 50 0A
-			15 00 02 51 10
-			15 00 02 52 1F
-			15 00 02 53 1F
-			15 00 02 54 1F
-			15 00 02 55 1F
-			15 00 02 56 1F
-			15 00 02 57 1F
-			15 00 02 58 40
-			15 00 02 5B 10
-			15 00 02 5C 06
-			15 00 02 5D 40
-			15 00 02 5E 00
-			15 00 02 5F 00
-			15 00 02 60 40
-			15 00 02 61 03
-			15 00 02 62 04
-			15 00 02 63 6C
-			15 00 02 64 6C
-			15 00 02 65 75
-			15 00 02 66 08
-			15 00 02 67 B4
-			15 00 02 68 08
-			15 00 02 69 6C
-			15 00 02 6A 6C
-			15 00 02 6B 0C
-			15 00 02 6D 00
-			15 00 02 6E 00
-			15 00 02 6F 88
-			15 00 02 75 BB
-			15 00 02 76 00
-			15 00 02 77 05
-			15 00 02 78 2A
-			15 00 02 E0 04
-			15 00 02 00 0E
-			15 00 02 02 B3
-			15 00 02 09 60
-			15 00 02 0E 48
-			15 00 02 E0 00
-			05 fa 01 11
-			05 32 01 29
+			// init code
+			05 78 01 01
+			05 78 01 11
+			39 0A 06 FF 77 01 00 00 11
+			15 0A 02 D1 11
+			15 0A 02 55 B0 // 80 90 b0
+			39 0A 06 FF 77 01 00 00 10
+			39 0A 03 C0 63 00
+			39 0A 03 C1 09 02
+			39 0A 03 C2 37 08
+			15 0A 02 C7 00 // x-dir rotate 0:0x00,rotate 180:0x04
+			15 0A 02 CC 38
+			39 0A 11 B0 00 11 19 0C 10 06 07 0A 09 22 04 10 0E 28 30 1C
+			39 6E 11 B1 00 12 19 0D 10 04 06 07 08 23 04 12 11 28 30 1C
+			39 0A 06 FF 77 01 00 00 11 // enable  bk fun of  command 2  BK1
+			15 0A 02 B0 4D
+			15 0A 02 B1 60 // 0x56  0x4a  0x5b
+			15 0A 02 B2 07
+			15 6E 02 B3 80
+			15 0A 02 B5 47
+			15 0A 02 B7 8A
+			15 0A 02 B8 21
+			15 0A 02 C1 78
+			15 0A 02 C2 78
+			15 0A 02 D0 88
+			39 0A 04 E0 00 00 02
+			39 0A 0C E1 01 A0 03 A0 02 A0 04 A0 00 44 44
+			39 0A 0D E2 00 00 00 00 00 00 00 00 00 00 00 00
+			39 0A 05 E3 00 00 33 33
+			39 0A 03 E4 44 44
+			39 0A 11 E5 01 26 A0 A0 03 28 A0 A0 05 2A A0 A0 07 2C A0 A0
+			39 0A 05 E6 00 00 33 33
+			39 0A 03 E7 44 44
+			39 0A 11 E8 02 26 A0 A0 04 28 A0 A0 06 2A A0 A0 08 2C A0 A0
+			39 0A 08 EB 00 01 E4 E4 44 00 40
+			39 0A 11 ED FF F7 65 4F 0B A1 CF FF FF FC 1A B0 F4 56 7F FF
+			15 0A 02 EE 42 // missing?
+			39 0A 06 FF 77 01 00 00 00
+			15 0A 02 36 00 //U&D  Y-DIR rotate 0:0x00,rotate 180:0x10
+			15 0A 02 3A 55
+			05 78 01 11           
+			05 14 01 29		
 		];
 
 		panel-exit-sequence = [
@@ -321,23 +186,29 @@
 		disp_timings1: display-timings {
 			native-mode = <&dsi1_timing0>;
 			dsi1_timing0: timing0 {
-				clock-frequency = <66000000>;
-				hactive = <800>;
-				vactive = <1280>;
-				hfront-porch = <18>;
-				hsync-len = <12>;
-				hback-porch = <18>;
-				vfront-porch = <24>;
-				vsync-len = <4>;
-				vback-porch = <12>;
+				clock-frequency = <30816000>;// (480+50+60+10)*(800+20+34+2)*60
+
+				hactive = <480>;
+				hfront-porch = <50>;
+				hback-porch = <60>;
+				hsync-len = <10>;
+
+				vactive = <800>;
+				vfront-porch = <20>;
+				vback-porch = <34>;
+				vsync-len = <2>;
+
 				hsync-active = <0>;
 				vsync-active = <0>;
 				de-active = <0>;
-				pixelclk-active = <1>;
+				pixelclk-active = <0>;
+
+				swap-rb = <0>;
+				swap-rg = <0>;
+				swap-gb = <0>;
 			};
 		};
-
-		ports {
+	ports {
 			#address-cells = <1>;
 			#size-cells = <0>;
 
@@ -363,169 +234,3 @@
 	};
 
 };
-
-// &dsi1 {
-// 	status = "okay";
-// 	rockchip,lane-rate = <1000>;
-// 	dsi1_panel: panel@0 {
-// 		status = "okay";
-// 		compatible = "simple-panel-dsi";
-// 		reset-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_LOW>;
-// 		pinctrl-names = "default";
-// 		pinctrl-0 = <&dsi1_rst_gpio>;
-// 		reg = <0>;
-// 		backlight = <&backlight>;
-// 		reset-delay-ms = <100>;
-// 		enable-delay-ms = <120>;
-// 		prepare-delay-ms = <20>;
-// 		unprepare-delay-ms = <20>;
-// 		disable-delay-ms = <100>;
-// 		dsi,flags = <(MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
-// 			MIPI_DSI_MODE_LPM | MIPI_DSI_MODE_EOT_PACKET)>;
-// 		dsi,format = <MIPI_DSI_FMT_RGB888>;
-// 		dsi,lanes  = <4>;
-// 		panel-init-sequence = [
-// 			15 00 02 B0 01
-// 			15 00 02 C3 4F
-// 			15 00 02 C4 40
-// 			15 00 02 C5 40
-// 			15 00 02 C6 40
-// 			15 00 02 C7 40
-// 			15 00 02 C8 4D
-// 			15 00 02 C9 52
-// 			15 00 02 CA 51
-// 			15 00 02 CD 5D
-// 			15 00 02 CE 5B
-// 			15 00 02 CF 4B
-// 			15 00 02 D0 49
-// 			15 00 02 D1 47
-// 			15 00 02 D2 45
-// 			15 00 02 D3 41
-// 			15 00 02 D7 50
-// 			15 00 02 D8 40
-// 			15 00 02 D9 40
-// 			15 00 02 DA 40
-// 			15 00 02 DB 40
-// 			15 00 02 DC 4E
-// 			15 00 02 DD 52
-// 			15 00 02 DE 51
-// 			15 00 02 E1 5E
-// 			15 00 02 E2 5C
-// 			15 00 02 E3 4C
-// 			15 00 02 E4 4A
-// 			15 00 02 E5 48
-// 			15 00 02 E6 46
-// 			15 00 02 E7 42
-// 			15 00 02 B0 03
-// 			15 00 02 BE 03
-// 			15 00 02 CC 44
-// 			15 00 02 C8 07
-// 			15 00 02 C9 05
-// 			15 00 02 CA 42
-// 			15 00 02 CD 3E
-// 			15 00 02 CF 60
-// 			15 00 02 D2 04
-// 			15 00 02 D3 04
-// 			15 00 02 D4 01
-// 			15 00 02 D5 00
-// 			15 00 02 D6 03
-// 			15 00 02 D7 04
-// 			15 00 02 D9 01
-// 			15 00 02 DB 01
-// 			15 00 02 E4 F0
-// 			15 00 02 E5 0A
-// 			15 00 02 B0 00
-// 			15 00 02 B1 08
-// 			15 00 02 BD 54
-// 			15 00 02 C2 06
-// 			15 00 02 C4 0B
-// 			15 00 02 B0 02
-// 			15 00 02 C0 00
-// 			15 00 02 C1 0A
-// 			15 00 02 C2 20
-// 			15 00 02 C3 24
-// 			15 00 02 C4 23
-// 			15 00 02 C5 29
-// 			15 00 02 C6 23
-// 			15 00 02 C7 1C
-// 			15 00 02 C8 19
-// 			15 00 02 C9 17
-// 			15 00 02 CA 17
-// 			15 00 02 CB 18
-// 			15 00 02 CC 1A
-// 			15 00 02 CD 1E
-// 			15 00 02 CE 20
-// 			15 00 02 CF 23
-// 			15 00 02 D0 07
-// 			15 00 02 D1 00
-// 			15 00 02 D2 00
-// 			15 00 02 D3 0A
-// 			15 00 02 D4 13
-// 			15 00 02 D5 1C
-// 			15 00 02 D6 1A
-// 			15 00 02 D7 13
-// 			15 00 02 D8 17
-// 			15 00 02 D9 1C
-// 			15 00 02 DA 19
-// 			15 00 02 DB 17
-// 			15 00 02 DC 17
-// 			15 00 02 DD 18
-// 			15 00 02 DE 1A
-// 			15 00 02 DF 1E
-// 			15 00 02 E0 20
-// 			15 00 02 E1 23
-// 			15 00 02 E2 07
-// 			05 78 01 11
-// 			05 14 01 29
-// 		];
-
-// 		panel-exit-sequence = [
-// 			05 00 01 28
-// 			05 00 01 10
-// 		];
-
-// 		disp_timings1: display-timings {
-// 			native-mode = <&dsi1_timing0>;
-// 			dsi1_timing0: timing0 {
-// 				clock-frequency = <156000000>;
-// 				hactive = <1200 >;
-// 				vactive = <1920>;
-// 				hfront-porch = <42>;
-// 				hsync-len = <10>;
-// 				hback-porch = <32>;
-// 				vfront-porch = <35>;
-// 				vsync-len = <4>;
-// 				vback-porch = <30>;
-// 				hsync-active = <0>;
-// 				vsync-active = <0>;
-// 				de-active = <0>;
-// 				pixelclk-active = <0>;
-// 			};
-// 		};
-
-// 		ports {
-// 			#address-cells = <1>;
-// 			#size-cells = <0>;
-
-// 			port@0 {
-// 				reg = <0>;
-// 				panel_in_dsi1: endpoint {
-// 					remote-endpoint = <&dsi1_out_panel>;
-// 				};
-// 			};
-// 		};
-// 	};
-
-// 	ports {
-// 		#address-cells = <1>;
-// 		#size-cells = <0>;
-
-// 		port@1 {
-// 			reg = <1>;
-// 			dsi1_out_panel: endpoint {
-// 				remote-endpoint = <&panel_in_dsi1>;
-// 			};
-// 		};
-// 	};
-
-// };
\ No newline at end of file
diff --git a/arch/arm64/boot/dts/rockchip/tspi-rk3566-gmac1-v10.dtsi b/arch/arm64/boot/dts/rockchip/tspi-rk3566-gmac1-v10.dtsi
index e00f33838612..fe1c72dbb252 100755
--- a/arch/arm64/boot/dts/rockchip/tspi-rk3566-gmac1-v10.dtsi
+++ b/arch/arm64/boot/dts/rockchip/tspi-rk3566-gmac1-v10.dtsi
@@ -14,36 +14,71 @@
 
 
 
+// &gmac1 {
+// 	phy-mode = "rgmii";
+// 	clock_in_out = "output";
+
+// 	snps,reset-gpio = <&gpio0 RK_PC7 GPIO_ACTIVE_LOW>;
+// 	snps,reset-active-low;
+// 	/* Reset time is 20ms, 100ms for rtl8211f */
+// 	snps,reset-delays-us = <0 20000 100000>;
+
+// 	assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1>;
+// 	assigned-clock-parents = <&cru SCLK_GMAC1_RGMII_SPEED>, <&cru CLK_MAC1_2TOP>;
+// 	assigned-clock-rates = <0>, <125000000>;
+
+// 	pinctrl-names = "default";
+// 	pinctrl-0 = <&gmac1m1_miim
+// 		     &gmac1m1_tx_bus2
+// 		     &gmac1m1_rx_bus2
+// 		     &gmac1m1_rgmii_clk
+// 		     &gmac1m1_rgmii_bus>;
+
+// 	tx_delay = <0x4f>;
+// 	rx_delay = <0x25>;
+
+// 	phy-handle = <&rgmii_phy0>;
+// 	status = "okay";
+// };
+
 &gmac1 {
-	phy-mode = "rgmii";
+	phy-mode = "rmii";
 	clock_in_out = "output";
 
-	snps,reset-gpio = <&gpio0 RK_PC7 GPIO_ACTIVE_LOW>;
+	snps,reset-gpio = <&gpio0 RK_PA6 GPIO_ACTIVE_LOW>;
 	snps,reset-active-low;
 	/* Reset time is 20ms, 100ms for rtl8211f */
 	snps,reset-delays-us = <0 20000 100000>;
-
-	assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1>;
-	assigned-clock-parents = <&cru SCLK_GMAC1_RGMII_SPEED>, <&cru CLK_MAC1_2TOP>;
-	assigned-clock-rates = <0>, <125000000>;
+	max-speed = <100>;
+	assigned-clocks = <&cru SCLK_GMAC1_RX_TX>, <&cru SCLK_GMAC1>,<&cru CLK_MAC1_OUT>;
+	assigned-clock-parents = <&cru SCLK_GMAC1_RMII_SPEED>;
+	assigned-clock-rates = <0>,<50000000>,<50000000>;
 
 	pinctrl-names = "default";
 	pinctrl-0 = <&gmac1m1_miim
-		     &gmac1m1_tx_bus2
+		     &gmac1m1_tx_bus2  
 		     &gmac1m1_rx_bus2
-		     &gmac1m1_rgmii_clk
-		     &gmac1m1_rgmii_bus>;
+			&gmac1m1_clkinout/*&eth1m0_pins*/
+		    >; 
+
+//mdc mdio
+//txd0 txd1 txen
+//rxd0 rxd1 rxen
+//refclk 25m  &eth1m1_pins
+//mclk gmac1m1_clkinout
 
 	tx_delay = <0x4f>;
 	rx_delay = <0x25>;
 
-	phy-handle = <&rgmii_phy0>;
+	phy-handle = <&rmii_phy0>;
 	status = "okay";
 };
 
+
 &mdio1 {
-	rgmii_phy0: phy@0 {
-		compatible = "ethernet-phy-ieee802.3-c22";
+	rmii_phy0: phy@0 {
+		//compatible = "ethernet-phy-ieee802.3-c22";
+		compatible = "realtek,rtl8201f";
 		reg = <0x0>;
 	};
 };
diff --git a/arch/arm64/boot/dts/rockchip/tspi-rk3566-user-v10-linux.dts b/arch/arm64/boot/dts/rockchip/tspi-rk3566-user-v10-linux.dts
index 97da688286b2..08bc78e3882f 100755
--- a/arch/arm64/boot/dts/rockchip/tspi-rk3566-user-v10-linux.dts
+++ b/arch/arm64/boot/dts/rockchip/tspi-rk3566-user-v10-linux.dts
@@ -33,7 +33,10 @@
 // #include "tspi-rk3566-edp-v10.dtsi"
 
 //【开/关】mipi 显示屏幕配置,用户可以基于此复制自己的屏幕,注意EDP与MIPI屏幕互斥,因为共用了VOP如果需要同显自行修改
-// #include "tspi-rk3566-dsi-v10.dtsi"
+//#include "tspi-rk3566-dsi-v10.dtsi"
+
+// //【开/关】LVDS 显示屏幕配置
+#include "tspi-rk3566-lvds-v10.dtsi"
 
 //【开/关】HDMI 显示屏幕配置,里面内容几乎可以不用动,如果不需要hdmi显示直接注释掉即可
 #include "tspi-rk3566-hdmi-v10.dtsi"
@@ -42,7 +45,7 @@
 #include "tspi-rk3566-csi-v10.dtsi"
 
 //【开/关】网口 扩展板上使用的是千兆网,不接扩展板情况下可以关闭
-// #include "tspi-rk3566-gmac1-v10.dtsi"
+#include "tspi-rk3566-gmac1-v10.dtsi"
 
 //【开/关】下方是用户定义层,所有用户修改理论上在此下方修改就好了
 / {
@@ -81,6 +84,84 @@
 		};
 	};
 
+/*
+VDD5V  GPIO0_D5 v
+VDD3V3  GPIO0_D4 v
+VCC12V_OUT GPIO0_D6
+VCC5V0_OUT GPIO2_C0 v
+VCC3V3_OUT GPIO2_C1 v
+VCC5V0_USB_OTG GPIO3_D2
+MIPI_DSI_VCC_LED2+ PWM0_M0
+VCC5V0_DSI1 and VCC3V3_DSI1 GPIO3_D3 v
+SPKCTL GPIO3-A5
+*/
+regulators {
+        compatible = "simple-bus";
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        vdd3v3_en: vdd3v3-en {
+            compatible = "regulator-fixed";
+            regulator-name = "vdd3v3_en";
+            gpio = <&gpio0 RK_PD4 GPIO_ACTIVE_HIGH>;  // GPIO0_D4 = 28
+            enable-active-high;
+            regulator-always-on;
+        };
+
+        vcc3v3_out_en: vcc3v3-out-en {
+            compatible = "regulator-fixed";
+            regulator-name = "vcc3v3_out_en";
+            gpio = <&gpio2 RK_PC1 GPIO_ACTIVE_HIGH>;  // GPIO2_C1 = 81
+            enable-active-high;
+            regulator-always-on;
+        };
+
+        vcc5v0_out_en: vcc5v0-out-en {
+            compatible = "regulator-fixed";
+            regulator-name = "vcc5v0_out_en";
+            gpio = <&gpio2 RK_PC0 GPIO_ACTIVE_HIGH>;  // GPIO2_C0 = 80
+            enable-active-high;
+            regulator-always-on;
+        };
+
+        vdd_5v_en: vdd-5v-en {
+            compatible = "regulator-fixed";
+            regulator-name = "vdd_5v_en";
+            gpio = <&gpio0 RK_PD5 GPIO_ACTIVE_HIGH>;  // GPIO0_D5 = 29
+            enable-active-high;
+            regulator-always-on;
+        };
+
+		vcc5v0_dsi_en: vcc5v0-dsi-en {
+            compatible = "regulator-fixed";
+            regulator-name = "vcc5v0_dsi_en";
+            gpio = <&gpio3 RK_PD3 GPIO_ACTIVE_HIGH>; 
+            enable-active-high;
+            regulator-always-on;
+        };
+
+		spk_ctl_en: spk-stl-en {
+            compatible = "regulator-fixed";
+            regulator-name = "spk_ctl_en";
+            gpio = <&gpio3 RK_PA5 GPIO_ACTIVE_HIGH>; 
+            enable-active-high;
+            regulator-always-on;
+        };
+		power_12v_en: power-12v-en {
+            compatible = "regulator-fixed";
+            regulator-name = "power_12v_en";
+            gpio = <&gpio0 RK_PD6 GPIO_ACTIVE_HIGH>; 
+            enable-active-high;
+            regulator-always-on;
+        };		
+		typec_5v_en: typec-5v-en {
+            compatible = "regulator-fixed";
+            regulator-name = "typec_5v_en";
+            gpio = <&gpio3 RK_PD2 GPIO_ACTIVE_HIGH>; 
+            enable-active-high;
+            regulator-always-on;
+        };				
+    };
 };
 
 &pinctrl {
@@ -107,97 +188,135 @@
 	pinctrl-names = "default";
 	pinctrl-0 = <&uart3m1_xfer>;
 };
-
-//用户I2C2
-&i2c2 {
+//串口0
+&uart0{
 	status = "okay";
-
-	/*添加你的I2C设备参考
-	gt1x: gt1x@14 {
-		compatible = "goodix,gt1x";
-		reg = <0x14>;
-		pinctrl-names = "default";
-		pinctrl-0 = <&touch_gpio>;
-		goodix,rst-gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
-		goodix,irq-gpio = <&gpio0 RK_PB5 IRQ_TYPE_LEVEL_LOW>;
-	};*/
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart0_xfer>;
 };
-
-&i2c3 {
+//串口5
+&uart5{
 	status = "okay";
 	pinctrl-names = "default";
-	pinctrl-0 = <&i2c3m1_xfer>;
-	/*添加你的I2C设备参考
-	gt1x: gt1x@14 {
-		compatible = "goodix,gt1x";
-		reg = <0x14>;
-		pinctrl-names = "default";
-		pinctrl-0 = <&touch_gpio>;
-		goodix,rst-gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
-		goodix,irq-gpio = <&gpio0 RK_PB5 IRQ_TYPE_LEVEL_LOW>;
-	};*/
+	pinctrl-0 = <&uart5m1_xfer>;
 };
-
-
-&spi3 {
+//串口7
+&uart7{
 	status = "okay";
-	max-freq = <48000000>;
-	dma-names = "tx","rx";
-	pinctrl-names = "default", "high_speed";
-	pinctrl-0 = <&spi3m1_cs0 &spi3m1_pins>;
-	pinctrl-1 = <&spi3m1_cs0 &spi3m1_pins_hs>;
-	spi_test@10 {
-		compatible ="rockchip,spi_test_bus1_cs0";
-		reg = <0>;
-		spi-max-frequency = <24000000>;
-		status = "okay";
-	};
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart7m1_xfer>;
 };
-
-&pwm8 {
+//串口8
+&uart8 {
 	status = "okay";
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart8m0_xfer>;
 };
-
-&pwm9 {
+//串口9
+&uart9{
 	status = "okay";
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart9m1_xfer>;
 };
 
-&pwm14 {
+//串口4
+&uart4 {
 	status = "okay";
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart4m1_xfer>;
 };
 
-//pwd 15遥控器
-&pwm15 {
-	status = "okay";
-	compatible = "rockchip,remotectl-pwm";
-	remote_pwm_id = <3>;
-	handle_cpu_id = <1>;
-	remote_support_psci = <0>;
-	pinctrl-names = "default";
-	pinctrl-0 = <&pwm15m0_pins>;
-
-	//用户自定方法:adb设置输出日志并通过dmesg确定usercode=address与key_table=command
-	//echo 1 > sys/module/rockchip_pwm_remotectl/parameters/code_print
-	//键值可在 include/dt-bindings/input/linux-event-codes.h 中查找
-	ir_key1 {
-		rockchip,usercode = <0xff00>;
-		rockchip,key_table =
-			<0xf2	KEY_MENU>,
-			<0xe9	KEY_BACK>,
-			<0xe3	KEY_ENTER>,
-			<0xe7	KEY_UP>,
-			<0xad	KEY_DOWN>,
-			<0xf7	KEY_LEFT>,
-			<0xa5	KEY_RIGHT>,
-			<0xba	KEY_1>,
-			<0xb9	KEY_2>,
-			<0xb8	KEY_3>,
-			<0xbb	KEY_4>,
-			<0xbf	KEY_5>,
-			<0xbc	KEY_6>,
-			<0xf8	KEY_7>,
-			<0xea	KEY_8>,
-			<0xf6	KEY_9>,
-			<0xe6	KEY_0>;
-	};
-};
\ No newline at end of file
+
+// //用户I2C2
+// &i2c2 {
+// 	status = "okay";
+
+// 	/*添加你的I2C设备参考
+// 	gt1x: gt1x@14 {
+// 		compatible = "goodix,gt1x";
+// 		reg = <0x14>;
+// 		pinctrl-names = "default";
+// 		pinctrl-0 = <&touch_gpio>;
+// 		goodix,rst-gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
+// 		goodix,irq-gpio = <&gpio0 RK_PB5 IRQ_TYPE_LEVEL_LOW>;
+// 	};*/
+// };
+
+// &i2c3 {
+// 	status = "okay";
+// 	pinctrl-names = "default";
+// 	pinctrl-0 = <&i2c3m1_xfer>;
+// 	/*添加你的I2C设备参考
+// 	gt1x: gt1x@14 {
+// 		compatible = "goodix,gt1x";
+// 		reg = <0x14>;
+// 		pinctrl-names = "default";
+// 		pinctrl-0 = <&touch_gpio>;
+// 		goodix,rst-gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
+// 		goodix,irq-gpio = <&gpio0 RK_PB5 IRQ_TYPE_LEVEL_LOW>;
+// 	};*/
+// };
+
+
+// &spi3 {
+// 	status = "okay";
+// 	max-freq = <48000000>;
+// 	dma-names = "tx","rx";
+// 	pinctrl-names = "default", "high_speed";
+// 	pinctrl-0 = <&spi3m1_cs0 &spi3m1_pins>;
+// 	pinctrl-1 = <&spi3m1_cs0 &spi3m1_pins_hs>;
+// 	spi_test@10 {
+// 		compatible ="rockchip,spi_test_bus1_cs0";
+// 		reg = <0>;
+// 		spi-max-frequency = <24000000>;
+// 		status = "okay";
+// 	};
+// };
+
+// &pwm8 {
+// 	status = "okay";
+// };
+
+// &pwm9 {
+// 	status = "okay";
+// };
+
+// &pwm14 {
+// 	status = "okay";
+// };
+
+// //pwd 15遥控器
+// &pwm15 {
+// 	status = "okay";
+// 	compatible = "rockchip,remotectl-pwm";
+// 	remote_pwm_id = <3>;
+// 	handle_cpu_id = <1>;
+// 	remote_support_psci = <0>;
+// 	pinctrl-names = "default";
+// 	pinctrl-0 = <&pwm15m0_pins>;
+
+// 	//用户自定方法:adb设置输出日志并通过dmesg确定usercode=address与key_table=command
+// 	//echo 1 > sys/module/rockchip_pwm_remotectl/parameters/code_print
+// 	//键值可在 include/dt-bindings/input/linux-event-codes.h 中查找
+// 	ir_key1 {
+// 		rockchip,usercode = <0xff00>;
+// 		rockchip,key_table =
+// 			<0xf2	KEY_MENU>,
+// 			<0xe9	KEY_BACK>,
+// 			<0xe3	KEY_ENTER>,
+// 			<0xe7	KEY_UP>,
+// 			<0xad	KEY_DOWN>,
+// 			<0xf7	KEY_LEFT>,
+// 			<0xa5	KEY_RIGHT>,
+// 			<0xba	KEY_1>,
+// 			<0xb9	KEY_2>,
+// 			<0xb8	KEY_3>,
+// 			<0xbb	KEY_4>,
+// 			<0xbf	KEY_5>,
+// 			<0xbc	KEY_6>,
+// 			<0xf8	KEY_7>,
+// 			<0xea	KEY_8>,
+// 			<0xf6	KEY_9>,
+// 			<0xe6	KEY_0>;
+// 	};
+// };
\ No newline at end of file
diff --git a/arch/arm64/configs/rockchip_linux_defconfig b/arch/arm64/configs/rockchip_linux_defconfig
index c5bb7a887f9f..8c9920325618 100755
--- a/arch/arm64/configs/rockchip_linux_defconfig
+++ b/arch/arm64/configs/rockchip_linux_defconfig
@@ -182,6 +182,7 @@ CONFIG_STMMAC_ETH=y
 # CONFIG_NET_VENDOR_TI is not set
 # CONFIG_NET_VENDOR_VIA is not set
 # CONFIG_NET_VENDOR_WIZNET is not set
+CONFIG_REALTEK_PHY=y
 CONFIG_ROCKCHIP_PHY=y
 CONFIG_RK630_PHY=y
 CONFIG_USB_RTL8150=y
@@ -195,7 +196,6 @@ CONFIG_MWIFIEX=m
 CONFIG_MWIFIEX_SDIO=m
 CONFIG_WL_ROCKCHIP=y
 CONFIG_WIFI_BUILD_MODULE=y
-# CONFIG_WIFI_LOAD_DRIVER_WHEN_KERNEL_BOOTUP  is not set
 CONFIG_AP6XXX=m
 CONFIG_USB_NET_RNDIS_WLAN=y
 CONFIG_INPUT_FF_MEMLESS=y
@@ -267,7 +267,6 @@ CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR=y
 CONFIG_THERMAL_GOV_FAIR_SHARE=y
 CONFIG_THERMAL_GOV_STEP_WISE=y
 CONFIG_CPU_THERMAL=y
-CONFIG_DEVFREQ_THERMAL=y
 CONFIG_ROCKCHIP_THERMAL=y
 CONFIG_WATCHDOG=y
 CONFIG_DW_WATCHDOG=y
@@ -349,7 +348,6 @@ CONFIG_MALI_PLATFORM_THIRDPARTY_NAME="rk"
 CONFIG_MALI_DEBUG=y
 CONFIG_MALI_PWRSOFT_765=y
 CONFIG_MALI_BIFROST=y
-CONFIG_MALI_BIFROST_DEVFREQ=y
 CONFIG_MALI_PLATFORM_NAME="rk"
 CONFIG_BACKLIGHT_LCD_SUPPORT=y
 # CONFIG_LCD_CLASS_DEVICE is not set
@@ -481,7 +479,6 @@ CONFIG_ROCKCHIP_PM_DOMAINS=y
 CONFIG_ROCKCHIP_PVTM=y
 CONFIG_ROCKCHIP_SUSPEND_MODE=y
 CONFIG_ROCKCHIP_VENDOR_STORAGE_UPDATE_LOADER=y
-CONFIG_PM_DEVFREQ=y
 CONFIG_DEVFREQ_GOV_PERFORMANCE=y
 CONFIG_DEVFREQ_GOV_POWERSAVE=y
 CONFIG_DEVFREQ_GOV_USERSPACE=y
diff --git a/defconfig b/defconfig
index 1b78a90ffb19..8c9920325618 100644
--- a/defconfig
+++ b/defconfig
@@ -182,6 +182,7 @@ CONFIG_STMMAC_ETH=y
 # CONFIG_NET_VENDOR_TI is not set
 # CONFIG_NET_VENDOR_VIA is not set
 # CONFIG_NET_VENDOR_WIZNET is not set
+CONFIG_REALTEK_PHY=y
 CONFIG_ROCKCHIP_PHY=y
 CONFIG_RK630_PHY=y
 CONFIG_USB_RTL8150=y
@@ -435,14 +436,9 @@ CONFIG_USB_GADGET_VBUS_DRAW=500
 CONFIG_USB_CONFIGFS=y
 CONFIG_USB_CONFIGFS_UEVENT=y
 CONFIG_USB_CONFIGFS_ACM=y
-CONFIG_USB_CONFIGFS_ECM=y
-CONFIG_USB_CONFIGFS_ECM_SUBSET=y
-CONFIG_USB_CONFIGFS_RNDIS=y
-CONFIG_USB_CONFIGFS_EEM=y
 CONFIG_USB_CONFIGFS_MASS_STORAGE=y
 CONFIG_USB_CONFIGFS_F_FS=y
 CONFIG_USB_CONFIGFS_F_UVC=y
-CONFIG_USB_ETH=y
 CONFIG_MMC=y
 CONFIG_MMC_BLOCK_MINORS=32
 CONFIG_MMC_TEST=y
diff --git a/drivers/input/touchscreen/gt9xx/gt9xx.c b/drivers/input/touchscreen/gt9xx/gt9xx.c
index 67b1b3451dab..40c2fc940449 100644
--- a/drivers/input/touchscreen/gt9xx/gt9xx.c
+++ b/drivers/input/touchscreen/gt9xx/gt9xx.c
@@ -2102,7 +2102,7 @@ static s8 gtp_request_input_dev(struct i2c_client *client,
     input_set_abs_params(ts->input_dev, ABS_X, 0, ts->abs_x_max, 0, 0);
     input_set_abs_params(ts->input_dev, ABS_Y, 0, ts->abs_y_max, 0, 0);
 #endif
-    input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X, 0, ts->abs_x_max, 0, 0);
+    input_set_abs_params(ts->input_dev, ABS_MT_POSITION_X, 0,  ts->abs_x_max, 0, 0);
     input_set_abs_params(ts->input_dev, ABS_MT_POSITION_Y, 0, ts->abs_y_max, 0, 0);
     input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0);
     input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0);
@@ -2654,8 +2654,8 @@ static int goodix_ts_probe(struct i2c_client *client, const struct i2c_device_id
 	if (val == 89) {
 		m89or101 = TRUE;
 		gtp_change_x2y = TRUE;
-		gtp_x_reverse = FALSE;
-		gtp_y_reverse = TRUE;
+		gtp_x_reverse = TRUE;
+		gtp_y_reverse = FALSE;
 	} else if (val == 101) {
 		m89or101 = FALSE;
 		gtp_change_x2y = TRUE;
@@ -2670,8 +2670,8 @@ static int goodix_ts_probe(struct i2c_client *client, const struct i2c_device_id
 	} else if (val == 9110) {
 		m89or101 = FALSE;
 		bgt9110 = TRUE;
-		gtp_change_x2y = TRUE;
-		gtp_x_reverse = TRUE;
+		gtp_change_x2y = FALSE;
+		gtp_x_reverse = FALSE;
 		gtp_y_reverse = FALSE;
 	} else if (val == 9111) {
 		m89or101 = FALSE;
diff --git a/drivers/input/touchscreen/gt9xx/gt9xx.h b/drivers/input/touchscreen/gt9xx/gt9xx.h
index acc288575691..5812e8f3fbb6 100644
--- a/drivers/input/touchscreen/gt9xx/gt9xx.h
+++ b/drivers/input/touchscreen/gt9xx/gt9xx.h
@@ -40,7 +40,7 @@
 //#include <linux/earlysuspend.h>
 
 #define CONFIG_8_9  0
-#define DEBUG_SWITCH  0
+#define DEBUG_SWITCH  1
 
 //***************************PART1:ON/OFF define*******************************
 #define GTP_CUSTOM_CFG        0
@@ -53,7 +53,7 @@
 #define GTP_X_REVERSE_ENABLE	1
 #define GTP_Y_REVERSE_ENABLE	0
 #endif
-#define GTP_DRIVER_SEND_CFG   1
+#define GTP_DRIVER_SEND_CFG   0
 #define GTP_HAVE_TOUCH_KEY    0
 #define GTP_POWER_CTRL_SLEEP  0
 
@@ -67,7 +67,7 @@
 #define GTP_HEADER_FW_UPDATE  0    // auto update fw by gtp_default_FW in gt9xx_firmware.h, function together with GTP_AUTO_UPDATE
 #define GTP_AUTO_UPDATE_CFG   0    // auto update config by .cfg file, function together with GTP_AUTO_UPDATE
 
-#define GTP_COMPATIBLE_MODE   1    /* compatible with GT9XXF */
+#define GTP_COMPATIBLE_MODE   0    /* compatible with GT9XXF */
 
 #define GTP_CREATE_WR_NODE    0
 #define GTP_ESD_PROTECT       0    // esd protection with a cycle of 2 seconds
@@ -78,8 +78,8 @@
 #define GTP_GESTURE_WAKEUP    0    // gesture wakeup
 
 #define GTP_DEBUG_ON          1
-#define GTP_DEBUG_ARRAY_ON    0
-#define GTP_DEBUG_FUNC_ON     0
+#define GTP_DEBUG_ARRAY_ON    1
+#define GTP_DEBUG_FUNC_ON     1
 
 /* init use fixed clk num */
 /* if open, u8 p_main_clk[6] = {69,69,69,69,69,167}; */
@@ -220,21 +220,22 @@ extern u16 total_len;
 
 //WGJ10187_GT9271_Config_20140623_104014_0X41.cfg
 #define CTP_CFG_GROUP1 {\
-    0x41,0x80,0x07,0xB0,0x04,0x0A,0x05,0x00,0x01,0x08,0x28,0x0F,0x50,0x32,0x03, \
-    0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8F,0x2F,0x99, \
-    0x2B,0x2D,0x31,0x0D,0x00,0x00,0x00,0x01,0x03,0x1D,0x00,0x00,0x00,0x00,0x00, \
-    0x00,0x00,0x00,0x00,0x00,0x00,0x23,0x55,0x94,0xC5,0x02,0x07,0x00,0x00,0x00, \
-    0x8C,0x26,0x00,0x7B,0x2D,0x00,0x6C,0x36,0x00,0x61,0x41,0x00,0x58,0x4E,0x00, \
-    0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, \
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, \
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x04,0x05,0x06,0x07,0x08,0x09, \
-    0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x14,0x15,0x16,0x17,0xFF,0xFF,0x00,0x00,0x00, \
-    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x13,0x12,0x11,0x10,0x0F,0x0D,0x0C, \
-    0x0A,0x08,0x07,0x06,0x04,0x02,0x00,0x19,0x1B,0x1C,0x1E,0x1F,0x20,0x21,0x22, \
-    0x23,0x24,0x25,0x26,0x27,0x28,0x29,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00, \
-    0x00,0x00,0x00,0x00,0xB5,0x01 \
+    0x60,0x20,0x03,0x00,0x05,0x0A,0x05,0x00,0x01,0xC2,0x1F,0x05,0x4B,\
+	0x37,0x03,0x00,0x00,0x00,0x1F,0x00,0x23,0x22,0x04,0x19,0x17,0x20,\
+	0x14,0x93,0x33,0xCC,0x1C,0x1E,0x0A,0x1A,0x53,0x00,0x00,0x9B,0x33,\
+	0x1C,0x17,0x1A,0x1C,0x90,0x83,0x23,0x46,0x3C,0x0C,0x08,0x11,0x14,\
+	0x50,0x94,0xC0,0x52,0x14,0x0F,0x00,0x04,0xCB,0x17,0x00,0xAA,0x1E,\
+	0xA6,0x91,0x28,0x00,0x83,0x35,0x00,0x7D,0x46,0x00,0x7D,0x00,0x00,\
+	0x00,0x00,0xF0,0x50,0x32,0xFF,0xFF,0x07,0x22,0x22,0x66,0x03,0x54,\
+	0x55,0x21,0x42,0x00,0xFF,0x7D,0x06,0x00,0x00,0x00,0x00,0x00,0x00,\
+	0x00,0x00,0x00,0x00,0xA0,0x00,0x32,0x19,0x17,0x16,0x15,0x14,0x13,\
+	0x12,0x11,0x10,0x0F,0x0E,0x0D,0x0C,0x0B,0x0A,0x09,0x08,0x07,0x06,\
+	0x05,0x04,0x03,0x02,0x01,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x29,\
+	0x28,0x27,0x26,0x25,0x24,0x23,0x22,0x21,0x20,0x1F,0x1E,0x1D,0x1B,\
+	0x19,0x18,0x17,0x16,0x15,0x13,0x12,0x11,0x10,0x0F,0x00,0x01,0x02,\
+	0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0E,0xFF,0xFF,\
+	0xFF,0xFF,0xFB,0x01\
     }
-
 // TODO: define your config for Sensor_ID == 1 here, if needed
 #define CTP_CFG_GROUP2 {\
     }
diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig
index 21f40747f28b..2b4791f6ecea 100644
--- a/drivers/net/ethernet/stmicro/stmmac/Kconfig
+++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig
@@ -127,6 +127,29 @@ config DWMAC_ROCKCHIP
 	  This selects the Rockchip RK3288 SoC glue layer support for
 	  the stmmac device driver.
 
+config DWMAC_RK_AUTO_DELAYLINE
+	bool "Auto search rgmii delayline"
+	default DWMAC_ROCKCHIP
+	depends on DWMAC_ROCKCHIP
+	help
+	  Auto search suitable rgmii delayline at first boot, and save it
+	  at vendor storage if success.
+
+config DWMAC_RK_AUTO_DELAYLINE_RAPID_SEARCH
+	bool "Rapid search"
+	default DWMAC_RK_AUTO_DELAYLINE
+	depends on DWMAC_RK_AUTO_DELAYLINE
+	help
+	  The delaylines are halted as soon as they become available, rather
+	  than choosing the median value after all scans.
+
+config DWMAC_RK_DELAYLINE_SCAN_STEP
+	hex "Auto search rgmii delayline step"
+	default 0x1
+	depends on DWMAC_ROCKCHIP
+	help
+	  The step of the auto search.
+
 config DWMAC_ROCKCHIP_TOOL
 	bool "Rockchip dwmac tool support"
 	depends on DWMAC_ROCKCHIP
diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.c
index 46633a665f7e..5b688501e2bd 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk-tool.c
@@ -99,7 +99,8 @@ struct dwmac_rk_lb_priv {
 
 #define	STMMAC_ALIGN(x) __ALIGN_KERNEL(x, SMP_CACHE_BYTES)
 #define MAX_DELAYLINE 0x7f
-#define SCAN_STEP 0x5
+//#define SCAN_STEP 0x5
+#define SCAN_STEP CONFIG_DWMAC_RK_DELAYLINE_SCAN_STEP
 #define SCAN_VALID_RANGE 0xA
 
 #define DWMAC_RK_TEST_PKT_SIZE (sizeof(struct ethhdr) + sizeof(struct iphdr) + \
@@ -1452,3 +1453,54 @@ int dwmac_rk_remove_loopback_sysfs(struct device *device)
 
 	return 0;
 }
+
+#ifdef CONFIG_DWMAC_RK_AUTO_DELAYLINE
+int dwmac_rk_search_rgmii_delayline(struct stmmac_priv *priv)
+{
+	struct dwmac_rk_lb_priv *lb_priv;
+	int phy_iface = dwmac_rk_get_phy_interface(priv);
+	unsigned char delayline[2];
+	int ret;
+
+	if (phy_iface != PHY_INTERFACE_MODE_RGMII &&
+	    phy_iface != PHY_INTERFACE_MODE_RGMII_ID)
+		return 0;
+
+	memset(delayline, 0x0, sizeof(delayline));
+	ret = rk_vendor_read(LAN_RGMII_DL_ID, delayline, 2);
+	if (ret == 2 &&
+	    dwmac_rk_delayline_is_valid(delayline[0], delayline[1])) {
+		pr_info("Read rgmii delayline from vendor: tx = 0x%02x, rx = 0x%02x\n",
+			delayline[0], delayline[1]);
+		dwmac_rk_set_rgmii_delayline(priv, delayline[0], delayline[1]);
+
+		return 0;
+	}
+
+	lb_priv = kzalloc(sizeof(*lb_priv), GFP_KERNEL);
+	if (!lb_priv)
+		return -ENOMEM;
+
+#ifdef CONFIG_DWMAC_RK_AUTO_DELAYLINE_RAPID_SEARCH
+	lb_priv->sysfs = 0;
+#else
+	lb_priv->sysfs = 1;
+#endif
+	lb_priv->type = LOOPBACK_TYPE_PHY;
+	lb_priv->speed = LOOPBACK_SPEED1000;
+	lb_priv->scan = 1;
+
+	ret = dwmac_rk_loopback_run(priv, lb_priv);
+	if (!ret) {
+		delayline[0] = lb_priv->final_tx;
+		delayline[1] = lb_priv->final_rx;
+		if (!rk_vendor_write(LAN_RGMII_DL_ID, delayline, 2))
+		/* write tx/rx delayline back if loopback okay */
+		dwmac_rk_set_rgmii_delayline(priv, lb_priv->final_tx,
+					     lb_priv->final_rx);
+	}
+
+	kfree(lb_priv);
+	return ret;
+}
+#endif
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac.h b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
index 1eaa1f8bdbe2..264e2d3d833c 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac.h
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac.h
@@ -188,6 +188,11 @@ struct stmmac_priv {
 	void __iomem *mmcaddr;
 	void __iomem *ptpaddr;
 
+	#ifdef CONFIG_DWMAC_RK_AUTO_DELAYLINE
+	bool delayline_scanned;
+	struct delayed_work scan_dwork;
+#endif
+
 #ifdef CONFIG_DEBUG_FS
 	struct dentry *dbgfs_dir;
 	struct dentry *dbgfs_rings_status;
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index 7ff658739cf3..6c806acedc3d 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
@@ -54,7 +54,7 @@
 #include "dwmac1000.h"
 #include "dwxgmac2.h"
 #include "hwif.h"
-
+#include "dwmac-rk-tool.h"
 #define	STMMAC_ALIGN(x)		ALIGN(ALIGN(x, SMP_CACHE_BYTES), 16)
 #define	TSO_MAX_BUFF_SIZE	(SZ_16K - 1)
 
@@ -2690,6 +2690,12 @@ static int stmmac_open(struct net_device *dev)
 
 	stmmac_enable_all_queues(priv);
 	netif_tx_start_all_queues(priv->dev);
+#ifdef CONFIG_DWMAC_RK_AUTO_DELAYLINE
+	if (!priv->delayline_scanned) {
+		priv->delayline_scanned = true;
+		schedule_delayed_work(&priv->scan_dwork, msecs_to_jiffies(6000));
+	}
+#endif
 
 	return 0;
 
@@ -4265,6 +4271,14 @@ static int stmmac_hw_init(struct stmmac_priv *priv)
 
 	return 0;
 }
+#ifdef CONFIG_DWMAC_RK_AUTO_DELAYLINE
+static void stmmac_scan_delayline_dwork(struct work_struct *work)
+{
+	struct stmmac_priv *priv = container_of(work, struct stmmac_priv,
+						scan_dwork.work);
+	dwmac_rk_search_rgmii_delayline(priv);
+};
+#endif
 
 /**
  * stmmac_dvr_probe
@@ -4458,6 +4472,9 @@ int stmmac_dvr_probe(struct device *device,
 		netdev_warn(priv->dev, "%s: failed debugFS registration\n",
 			    __func__);
 #endif
+#ifdef CONFIG_DWMAC_RK_AUTO_DELAYLINE
+	INIT_DELAYED_WORK(&priv->scan_dwork, stmmac_scan_delayline_dwork);
+#endif
 
 	return ret;
 
diff --git a/logo.bmp b/logo.bmp
old mode 100755
new mode 100644
index 6eadb944eab6..f86203d0797e
Binary files a/logo.bmp and b/logo.bmp differ
diff --git a/logo_kernel.bmp b/logo_kernel.bmp
index 35ec76e69a45..f86203d0797e 100755
Binary files a/logo_kernel.bmp and b/logo_kernel.bmp differ

 

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册