Merge "[Bugfix][API-1048][Code] merge RIL module same code" into MR3.0-merge
diff --git a/meta/meta-mediatek-mt2735/recipes-core/images/mtk-image-2735.bb b/meta/meta-mediatek-mt2735/recipes-core/images/mtk-image-2735.bb
index eebe5f4..78c93ab 100755
--- a/meta/meta-mediatek-mt2735/recipes-core/images/mtk-image-2735.bb
+++ b/meta/meta-mediatek-mt2735/recipes-core/images/mtk-image-2735.bb
@@ -89,7 +89,9 @@
 	audio-ctrl-service \
 	audio-ctrl-service-bin \
 	mtk-phonecall-ioplugin \
-	connman \
+	${@bb.utils.contains("CONNMAN_SUPPORT", "no", "", "connman", d)}  \
+	${@bb.utils.contains("CONNMAN_SUPPORT", "no", "dnsmasq", "", d)}  \
+	${@bb.utils.contains("CONNMAN_SUPPORT", "no", "dhcpcd", "", d)}  \
 	python3-cffi \
 	tel-demo \
 	libvendor-ril \
@@ -211,6 +213,7 @@
 	TARGET=${TOPDIR}/tmp/work/auto2735evb_ivt_main-poky-linux/mtk-image-2735/1.0-r0/rootfs
 	mkdir ${TARGET}/data_backup
 	cp ${TARGET}/etc/config/radio_property ${TARGET}/data_backup/
+	cp ${TARGET}/etc/config/lynq_uci ${TARGET}/data_backup/
         cp ${TARGET}/data/atsvc/lynq_atsvc_plugin.xml ${TARGET}/data_backup/
         cp ${TARGET}/data/atsvc/terminal_controller.conf ${TARGET}/data_backup/
 	cd ${SOURCE}
diff --git a/meta/meta-mediatek-mt2735/recipes-core/initial/files/lynq_data_recover_wom b/meta/meta-mediatek-mt2735/recipes-core/initial/files/lynq_data_recover_wom
new file mode 100644
index 0000000..a46a3bf
--- /dev/null
+++ b/meta/meta-mediatek-mt2735/recipes-core/initial/files/lynq_data_recover_wom
@@ -0,0 +1,139 @@
+#!/bin/busybox sh
+TAG=[DATA_BACKUP_RECOVER]
+echo "$TAG: === Initial: LYNQ MOUNT Abnomal Judge Start ===" > /dev/kmsg
+FilePath=/data/lynq-low-power.sh
+
+detect_read(){
+    a=1
+    while [ $a -le 3 ]
+    do
+        if [ -r "$FilePath" ]
+        then
+            echo "$TAG a=$a can read" > /dev/kmsg
+            return 0
+        else
+            echo "$TAG a=$a can't read" > /dev/kmsg
+        fi
+        a=$[$a+1]
+    done
+    return 1
+}
+detect_write(){
+    a=1
+    while [ $a -le 3 ]
+    do
+        if [ -w "$FilePath" ]
+        then
+            echo "$TAG a=$a can write" > /dev/kmsg
+            return 0
+        else
+        echo "$TAG a=$a can't write" > /dev/kmsg
+        fi
+            a=$[$a+1]
+    done
+    return 1
+}
+
+format_ubi(){
+    ubidetach -m 38
+    echo "$TAG detach over" > /dev/kmsg
+    echo y | ubiformat /dev/mtd38
+    echo "$TAG format over" > /dev/kmsg
+    ubiattach /dev/ubi_ctrl -m 38 -d 31
+    echo "$TAG attach over" > /dev/kmsg
+    ubimkvol /dev/ubi31 -m -N data_recover
+    echo "$TAG mkvol over" > /dev/kmsg
+    mount -t ubifs /dev/ubi31_0 /STATE
+}
+
+mount_read_only(){
+    echo "$TAG: umount start" > /dev/kmsg
+
+    umount /usr/lib/tmpfiles.d
+    umount /etc/firmware
+    umount /etc/syslog
+    umount /home
+    umount /mnt/sncfg
+    umount /mnt/vendor/nvram
+    umount /mnt 
+    umount /srv 
+    umount /usr/local 
+    umount /system/etc/firmware 
+    umount /custom/etc/firmware 
+    umount /var/lib 
+    umount /data
+    umount /system/etc/tele 
+    umount /system/etc/adr
+    umount /system/etc/agps 
+    umount /system/etc/security 
+    umount /etc/adr 
+    umount /etc/gnss
+    umount /usr/share/gps 
+    umount /etc/thermal 
+    umount /etc/config
+    umount /STATE
+
+    echo "$TAG: after umount" > /dev/kmsg
+    mount | grep "ubi1" > /dev/kmsg
+    #some directories are not umount
+    if [ $(mount | grep "ubi1") != "" ];
+        then echo "$TAG: umount Fail!" > /dev/kmsg
+        reboot
+        exit
+    fi
+    format_ubi
+
+}
+cd /
+
+echo "$TAG: Before recover radio_property" > /dev/kmsg
+rm -rf /etc/config/.*.uci*
+cp /data_backup/radio_property /etc/config/radio_property
+cp /data_backup/lynq_uci /etc/config/lynq_uci
+mkdir -p /data/atsvc
+cp /data_backup/lynq_atsvc_plugin.xml /data/atsvc/lynq_atsvc_plugin.xml
+cp /data_backup/terminal_controller.conf /data/atsvc/terminal_controller.conf
+echo "$TAG: After recover radio_property" > /dev/kmsg
+
+IFRO="$(cat /sys/class/ubi/ubi1/ro_mode)"
+echo "$TAG the ro_mode:$IFRO" > /dev/kmsg
+
+echo "$TAG ubimount:" > /dev/kmsg
+echo "$(mount | grep "ubi1")" > /dev/kmsg
+#if ro_mode = 1, ubi1 in read-only mode
+if [ $IFRO = "1" ];
+    then echo "$TAG: [Read-Only]ubi1 ro_mode is readonly" > /dev/kmsg
+    mount_read_only
+    cd /data_backup
+    tar -zxvf userdata.tar.gz -C /STATE/
+    reboot
+else
+    detect_read
+    result_read=$?
+    detect_write
+    result_write=$?
+    #can't read the file, the file is lost
+    if [ $result_read -eq 1 ];
+        then echo "$TAG: File Lost!!!" > /dev/kmsg
+        exit
+    fi
+    #ubi1 is not in read-only mode, but no directory is mounted on ubi1
+    if [ $(mount | grep "ubi1") = ""];
+        then echo "$TAG: [Unmount]Unmount!!!" > /dev/kmsg
+        format_ubi
+        cd /data_backup
+        tar -zxvf userdata.tar.gz -C /STATE/
+        reboot
+    else
+        #ubi1 is not in read-only mode, directories mounted on ubi1, but the file can't write
+        #/data is mounted in read-only mode
+        if [ $result_write -eq 1 ];
+            then echo "$TAG: [Read-only]/data is Readonly!!!" > /dev/kmsg
+            mount_read_only
+            cd /data_backup
+            tar -zxvf userdata.tar.gz -C /STATE/
+            reboot
+        fi
+    fi
+fi
+echo "$TAG === Initial: LYNQ MOUNT Abnomal End ===" > /dev/kmsg
diff --git a/meta/meta-mediatek-mt2735/recipes-core/initial/init-2735_1.0.0.bb b/meta/meta-mediatek-mt2735/recipes-core/initial/init-2735_1.0.0.bb
index 25b963f..8d87332 100755
--- a/meta/meta-mediatek-mt2735/recipes-core/initial/init-2735_1.0.0.bb
+++ b/meta/meta-mediatek-mt2735/recipes-core/initial/init-2735_1.0.0.bb
@@ -11,6 +11,10 @@
 SRC_URI += "${@bb.utils.contains("MOBILETEK_OEMAPP_CFG", "PLATFORM", "file://init_mount_nand", "", d)}"
 SRC_URI += "${@bb.utils.contains("MOBILETEK_USB_CFG", "PLATFORM", "file://usb_switch", "", d)}"
 SRC_URI += "${@bb.utils.contains("MOBILETEK_USB_CFG", "GSW", "file://usb_switch_gsw", "", d)}"
+#xf.li@20230530 add for wom rndis start
+SRC_URI += "${@bb.utils.contains("MOBILETEK_RNDIS_CFG", "PLATFORM", "file://lynq_data_recover", "", d)}"
+SRC_URI += "${@bb.utils.contains("MOBILETEK_RNDIS_CFG", "WOM", "file://lynq_data_recover_wom", "", d)}"
+#xf.li@20230530 add for wom rndis end
 SRC_URI += "file://init_network.service"
 SRC_URI += "file://init_mount.service"
 SRC_URI += "file://nvram_daemon.service"
@@ -123,9 +127,15 @@
     if [ "${MOBILETEK_USB_CFG}" = "GSW" ]; then
         install -m 0755 init_usb_gsw ${D}${datadir}/init/init_usb
     fi
+#xf.li@20230530 add for wom rndis start
+    if [ "${MOBILETEK_RNDIS_CFG}" = "WOM" ]; then
+        install -m 0755 lynq_data_recover_wom ${D}${datadir}/init/lynq_data_recover
+    else
+        install -m 0755 lynq_data_recover ${D}${datadir}/init/lynq_data_recover
+    fi
+#xf.li@20230530 add for wom rndis end
     install -m 0755 smp.sh ${D}${datadir}/init/smp.sh
 #xf.li 2022.11.17 modify for userdata recover start
-    install -m 0755 lynq_data_recover ${D}${datadir}/init/lynq_data_recover
     install -m 0755 lynq_ubi1_wmtd ${D}${datadir}/init/lynq_ubi1_wmtd
 #xf.li 2022.11.17 modify for userdata recover end
 #dongyu@2022.7.15 delete for Slow loading of ETS port start
diff --git a/meta/meta-mediatek-mt2735/recipes-kernel/modules/wg870-drv-insmod.bb b/meta/meta-mediatek-mt2735/recipes-kernel/modules/wg870-drv-insmod.bb
index 13f034c..3df3928 100755
--- a/meta/meta-mediatek-mt2735/recipes-kernel/modules/wg870-drv-insmod.bb
+++ b/meta/meta-mediatek-mt2735/recipes-kernel/modules/wg870-drv-insmod.bb
@@ -32,4 +32,8 @@
 	install -m 755 ${WORKDIR}/wg870_drv_insmod.sh ${D}/etc/wg870/
 	install -m 755 ${WORKDIR}/wg870_drv_insmod.service ${D}${systemd_unitdir}/system/
 
+	if [ "${CONNMAN_SUPPORT}" = "no" ]; then
+		eval sed -i "s/\-dd\ \-t\ \-u/\-dd\ \-t/g" ${D}/etc/wg870/wg870_drv_insmod.sh
+		eval sed -i "/connmanctl/d" ${D}/etc/wg870/wg870_drv_insmod.sh
+	fi
 }
diff --git a/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-qser-adc/liblynq-qser-adc.bb b/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-qser-adc/liblynq-qser-adc.bb
new file mode 100755
index 0000000..47f9644
--- /dev/null
+++ b/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-qser-adc/liblynq-qser-adc.bb
@@ -0,0 +1,45 @@
+inherit externalsrc package

+

+DESCRIPTION = "lynq-qser-adc.so demo"

+LICENSE = "MobileTekProprietary"

+LIC_FILES_CHKSUM = "file://LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"

+DEPENDS += "liblynq-log"

+inherit workonsrc

+WORKONSRC = "${TOPDIR}/../src/lynq/lib/liblynq-qser-adc"

+

+TARGET_CC_ARCH += "${LDFLAGS}"

+BB_INCLUDE_ADD = "--sysroot=${STAGING_DIR_HOST}"

+BB_LDFLAGS_ADD = "--sysroot=${STAGING_DIR_HOST} -Wl,--hash-style=gnu"

+#Parameters passed to do_compile()

+EXTRA_OEMAKE = "'RAT_CONFIG_C2K_SUPPORT = ${RAT_CONFIG_C2K_SUPPORT}'\

+                'MTK_MULTI_SIM_SUPPORT = ${MTK_MULTI_SIM_SUPPORT}'\

+                'TARGET_PLATFORM = ${TARGET_PLATFORM}'"

+

+FILES_${PN} = "${base_libdir}/*.so \

+               ${base_bindir}\

+               ${base_sbindir} \

+               /etc/dbus-1/system.d/"

+FILES_${PN}-dev = "/test \

+                   ${includedir}"

+FILES_${PN}-doc = "/doc"

+FILES_${PN}-dbg ="${base_bindir}/.debug \

+                  ${base_libdir}/.debug \

+                  ${base_sbindir}/.debug"

+INSANE_SKIP_${PN} += "already-stripped"

+INSANE_SKIP_${PN} += "installed-vs-shipped"

+#INHIBIT_PACKAGE_STRIP = "1"

+do_compile () {

+	if [ "${PACKAGE_ARCH}" = "cortexa7hf-vfp-vfpv4-neon" ]; then

+		oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -mfpu=neon-vfpv4 -mhard-float -Wl,--hash-style=gnu -DTELEPHONYWARE"

+	elif [ "${PACKAGE_ARCH}" = "cortexa7hf-neon-vfpv4" ]; then

+		oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -mfpu=neon-vfpv4 -mhard-float -Wl,--hash-style=gnu -DTELEPHONYWARE"

+	elif [ "${PACKAGE_ARCH}" = "cortexa53hf-neon-fp-armv8" ]; then

+		oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -mfpu=neon-vfpv4 -mhard-float -Wl,--hash-style=gnu -DTELEPHONYWARE -mhard-float -mfpu=neon-fp-armv8 -mfloat-abi=hard -mcpu=cortex-a53 -mtune=cortex-a53"

+	else

+		oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -Os -Wl,--hash-style=gnu -DTELEPHONYWARE"

+	fi

+}

+

+do_install() {

+    oe_runmake install ROOT=${D}

+}

diff --git a/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-wifi6/liblynq-wifi6.bb b/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-wifi6/liblynq-wifi6.bb
index 40e9441..0d374ae 100644
--- a/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-wifi6/liblynq-wifi6.bb
+++ b/meta/meta-mediatek-mt2735/recipes-lynq/liblynq-wifi6/liblynq-wifi6.bb
@@ -22,7 +22,8 @@
 
 FILES_${PN} = "${base_libdir}/*.so \
                ${base_bindir}\
-               ${base_sbindir}"
+               ${base_sbindir} \
+               /etc/wg870/*"
 
 
 FILES_${PN}-dev = "/test \
@@ -58,6 +59,15 @@
         install -d ${D}${includedir}/
         cp -af ${S}/include/ ${D}${includedir}/
       fi
+
+	install -d ${D}/etc/wg870
+	if [ "${CONNMAN_SUPPORT}" != "no" ];then
+		cp -af ${S}/scripts_connman ${D}/etc/wg870/scripts
+	else
+		cp -af ${S}/scripts ${D}/etc/wg870/scripts
+	fi
+
+	chmod -R +x ${D}/etc/wg870/scripts/
 }
 
 addtask bachclean
diff --git a/meta/meta-mediatek-mt2735/recipes-lynq/lynq-wg870/lynq-wg870.bb b/meta/meta-mediatek-mt2735/recipes-lynq/lynq-wg870/lynq-wg870.bb
index 9cc57f3..83bef6e 100755
--- a/meta/meta-mediatek-mt2735/recipes-lynq/lynq-wg870/lynq-wg870.bb
+++ b/meta/meta-mediatek-mt2735/recipes-lynq/lynq-wg870/lynq-wg870.bb
@@ -3,17 +3,19 @@
 DESCRIPTION = "wpa_supplicant test"

 LICENSE = "CLOSED"

 LIC_FILES_CHKSUM = "file://LICENSE;md5=e1696b147d49d491bcb4da1a57173fff"

-DEPENDS += "platform-libs glib-2.0 openssl libnl dbus"

+DEPENDS += "platform-libs glib-2.0 openssl libnl"

+DEPENDS += "${@bb.utils.contains("CONNMAN_SUPPORT", "no", "", "dbus", d)}"

+

 inherit workonsrc

 WORKONSRC = "${TOPDIR}/../src/lynq/packages/thirdpart/lynq-wg870"

 

-LDFLAGS = "-L${STAGING_LIBDIR} -ldbus-1"

+LDFLAGS = "${@bb.utils.contains("CONNMAN_SUPPORT", "no", "", "-L${STAGING_LIBDIR} -ldbus-1", d)}"

 

 TARGET_CC_ARCH += "${LDFLAGS}"

 

 CFLAGS = "-I${STAGING_INCDIR}/libnl3"

-CFLAGS += "-I${STAGING_INCDIR}/dbus-${PV}"

-CFLAGS += "-I${STAGING_LIBDIR}/dbus-${PV}/include/"

+CFLAGS += "${@bb.utils.contains("CONNMAN_SUPPORT", "no", "", "-I${STAGING_INCDIR}/dbus-${PV}", d)}"

+CFLAGS += "${@bb.utils.contains("CONNMAN_SUPPORT", "no", "", "-I${STAGING_LIBDIR}/dbus-${PV}/include/", d)}"

 

 

 #Parameters passed to do_compile()

@@ -43,6 +45,12 @@
 	export CONFIG_DRIVER_NL80211_IFX=y

 	export CONFIG_WEP=y

 

+	if [ "${CONNMAN_SUPPORT}" = "no" ]; then

+		sed -i "s/^CONFIG_CTRL_IFACE_DBUS_NEW=y/#CONFIG_CTRL_IFACE_DBUS_NEW=y/" ${S}wpa_supplicant/.config

+	else

+		sed -i "s/^#CONFIG_CTRL_IFACE_DBUS_NEW=y/CONFIG_CTRL_IFACE_DBUS_NEW=y/" ${S}wpa_supplicant/.config

+	fi

+

 	if test "${PACKAGE_ARCH}" = "cortexa7hf-vfp-vfpv4-neon" || test "${PACKAGE_ARCH}" = "cortexa7hf-neon-vfpv4"; then

 		oe_runmake all ROOT=${STAGING_DIR_HOST} OFLAGS="--sysroot=${STAGING_DIR_HOST} -mhard-float"

 	else

@@ -63,8 +71,10 @@
 	install -m 0644 ${S}conf/wpa_supplicant_ap.conf ${D}/data/wifi/wg870/

 	install -m 0644 ${S}conf/p2p_supplicant.conf ${D}/data/wifi/wg870/

 	

-	install -d ${D}/etc/dbus-1/system.d/

-	install -m 0644 ${S}wpa_supplicant/dbus/dbus-wpa_supplicant.conf ${D}/etc/dbus-1/system.d/

+	if [ "${CONNMAN_SUPPORT}" != "no" ]; then

+		install -d ${D}/etc/dbus-1/system.d/

+		install -m 0644 ${S}wpa_supplicant/dbus/dbus-wpa_supplicant.conf ${D}/etc/dbus-1/system.d/

+	fi

 

 	install -d ${D}${includedir}/

 	install -m 0644 ${S}src/common/wpa_ctrl.h ${D}${includedir}/

diff --git a/meta/meta-mediatek-mt2735/recipes-lynq/packagegroups/packagegroup-lync-mt2735.bb b/meta/meta-mediatek-mt2735/recipes-lynq/packagegroups/packagegroup-lync-mt2735.bb
index 202527b..1f2e1ab 100755
--- a/meta/meta-mediatek-mt2735/recipes-lynq/packagegroups/packagegroup-lync-mt2735.bb
+++ b/meta/meta-mediatek-mt2735/recipes-lynq/packagegroups/packagegroup-lync-mt2735.bb
@@ -4,6 +4,7 @@
 inherit packagegroup
 
 RDEPENDS_packagegroup-lync-mt2735 = "\
+    liblynq-qser-adc\
     libautosuspend \
     libpoweralarm \
     lynq-autosuspend \
diff --git a/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb_zk.dts b/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb_zk.dts
new file mode 100644
index 0000000..1ecdf65
--- /dev/null
+++ b/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/auto2735evb_zk.dts
@@ -0,0 +1,1533 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2019 MediaTek Inc.
+ */
+
+/dts-v1/;
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+//#include "mt6890.dtsi"
+#include "mt2735_zk.dtsi"
+#include "tcpc_config.dtsi"
+#include "rt9467.dtsi"
+
+&reserved_memory {
+};
+
+/ {
+	model = "MediaTek evb6890v1_64_cpe";
+	compatible = "mediatek,evb6890v1_64_cpe", "mediatek,mt6890";
+
+	memory@40000000 {
+		device_type = "memory";
+#if defined(CONFIG_MTK_MEMORY_SIZE) && (CONFIG_MTK_MEMORY_SIZE == 1024)
+		reg = <0 0x40000000 0 0x40000000>;
+#elif defined(CONFIG_MTK_MEMORY_SIZE) && (CONFIG_MTK_MEMORY_SIZE == 896)
+		reg = <0 0x40000000 0 0x38000000>;
+#elif defined(CONFIG_MTK_MEMORY_SIZE) && (CONFIG_MTK_MEMORY_SIZE == 768)
+		reg = <0 0x40000000 0 0x30000000>;
+#elif defined(CONFIG_MTK_MEMORY_SIZE) && (CONFIG_MTK_MEMORY_SIZE == 640)
+		reg = <0 0x40000000 0 0x28000000>;
+#else
+		reg = <0 0x40000000 0 0x20000000>;
+#endif
+	};
+
+	chosen {
+		bootargs = "console=tty0 console=ttyS0,921600n1 ubi.mtd=14 \
+		ubi.mtd=38,0,2 ubi.mtd=5,0,1 \
+		ubi.mtd=9,0,1 ubi.mtd=10,0,1 ubi.mtd=11,0,1 ubi.mtd=40,0,1 \
+		ubi.mtd=27,0,1 ubi.mtd=20,0,1 ubi.mtd=22,0,1 \
+		rootwait \
+		androidboot.selinux=permissive androidboot.hardware=mt6890 \
+		initcall_debug=1 page_owner=on";
+
+		atag,videolfb-fb_base_l = <0x7e605000>;
+		atag,videolfb-fb_base_h = <0x0>;
+		atag,videolfb-islcmfound = <1>;
+		atag,videolfb-islcm_inited = <0>;
+		atag,videolfb-fps= <6000>;
+		atag,videolfb-vramSize= <0x1be0000>;
+		atag,videolfb-lcmname=
+			"nt35595_fhd_dsi_cmd_truly_nt50358_drv";
+#if defined(CONFIG_MTK_AEE_FEATURE)
+		aee,enable = "mini";
+		mrdump,cblock = <0x12e000 0x2000>;
+#endif
+		atag,boot = <0x03000000 0x02080041 0x0>;
+	};
+
+	gpio_meta: meta {
+		compatible = "mediatek,metainfo";
+		meta_gpio_num = <&pio 0 1>;
+		status = "okay";
+	};
+	gsw: gsw@0 {
+		compatible = "mediatek,mt753x";
+		mediatek,ethsys = <&ethsys>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+	};
+	
+	subpmic_pmu_eint: subpmic_pmu_eint {
+	};
+
+	tcpc_pd: tcpc_pd_eint {
+	};
+	/* zhengzhou for eint interface start*/
+	eint_gpio: eintgpio {
+		compatible = "mediatek,eint_gpio";
+		//eint_gpio1 = <&pio 1 GPIO_ACTIVE_LOW>;
+		eint_gpio2 = <&pio 2 GPIO_ACTIVE_LOW>;
+		eint_gpio3 = <&pio 3 GPIO_ACTIVE_LOW>;
+		//eint_gpio4 = <&pio 4 GPIO_ACTIVE_LOW>;//tianyan@2021.12.1 modify for DTR/RI gpio
+		eint_gpio5 = <&pio 5 GPIO_ACTIVE_LOW>;
+		//eint_gpio6 = <&pio 6 GPIO_ACTIVE_LOW>;//tianyan@2021.12.1 modify for DTR/RI gpio
+	    status = "okay";
+	};
+	wakeup_gpio: wakeup {
+		compatible = "mediatek,wakeup_gpio";
+		wakeup_gpio = <&pio 0 GPIO_ACTIVE_LOW>;
+	    status = "okay";
+	};
+		/* zhengzhou for eint interface start*/
+//tianyan@2021.10.28 modify for DTR/RI gpio start	
+	wakeup_dtr: wakeupdtr {
+		compatible = "mediatek,wakeup_dtr";
+		wakeup_dtr = <&pio 6 GPIO_ACTIVE_LOW>;//tianyan@2021.12.1 modify for DTR/RI gpio
+		wakeup_ri = <&pio 4 GPIO_ACTIVE_LOW>;//tianyan@2021.12.1 modify for DTR/RI gpio
+	    	status = "okay";
+	};
+//tianyan@2021.10.28 modify for DTR/RI gpio end
+};
+
+&snps_mac {
+	phy-mode ="rgmii-rxid";
+	phy-handle = <&eth_phy0>;
+	pinctrl-names = "default", "sleep";
+	pinctrl-0 = <&eth_default>;
+	pinctrl-1 = <&eth_sleep>;
+	mediatek,tx-delay-ps = <560>;
+	mediatek,rx-delay-ps = <1440>;
+	snps,reset-gpio = <&pio 26 GPIO_ACTIVE_LOW>;
+	snps,reset-active-low;
+	snps,reset-delays-us = <0 1000 0>;
+	status = "okay";
+
+    mdio {
+		compatible = "snps,dwmac-mdio";
+		#address-cells = <1>;
+		#size-cells = <0>;
+		eth_phy0: eth_phy0@1 {
+			compatible = "ethernet-phy-ieee802.3-c22";
+			reg = <0x1>;
+
+		};
+	};
+};
+
+
+&eth {
+	pinctrl-names = "eth_gpio_default",
+		"eth_smi_mdio_pinctl",
+		"eth_smi_mdc_pinctl";
+	pinctrl-0 = <&eth_gpio_default>;
+	pinctrl-1 = <&eth_smi_mdio_pinctl>;
+	pinctrl-2 = <&eth_smi_mdc_pinctl>;
+	status = "okay";
+	gmac0: mac@0 {
+		compatible = "mediatek,eth-mac";
+		reg = <0>;
+#if defined(CONFIG_MTK_SGMII_NETSYS)
+		phy-mode = "sgmii";
+		phy-handle = <&eth_phy1>;
+                /*modify by chencheng 0817*/
+		/*
+		fixed-link {
+			speed = <1000>;
+			full-duplex;
+			pause;
+		};
+		*/
+#endif
+	};
+	
+	gmac1: mac@1 {
+		compatible = "mediatek,eth-mac";
+		reg = <1>;
+#if defined(CONFIG_MTK_SGMII_NETSYS)
+		phy-mode = "sgmii";
+		fixed-link {
+			speed = <1000>;
+			full-duplex;
+			pause;
+		};
+#endif
+	};
+	
+	mdio: mdio-bus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+	    eth_phy1: eth_phy1@1 {   /*modify by chencheng 0817*/
+	        phy-mode = "sgmii";
+			compatible = "ethernet-phy-ieee802.3-c22";
+			reg = <0x1>;
+		};
+	};
+};
+
+&gsw {
+	mediatek,mdio = <&mdio>;
+	mediatek,portmap = "llllw";
+	mediatek,mdio_master_pinmux = <0>;
+	reset-gpios = <&pio 66 0>;
+	interrupt-parent = <&pio>;
+	interrupts = <65 IRQ_TYPE_LEVEL_HIGH>;
+
+#if defined(CONFIG_MTK_SGMII_NETSYS) /*merge MTK3.0 on 20220917*/
+	status = "okay";
+#else /*merge MTK3.0 on 20220917*/
+	status = "disabled" /*merge MTK3.0 on 20220917*/;
+#endif /*merge MTK3.0 on 20220917*/
+
+	port5: port@5 {
+		compatible = "mediatek,mt753x-port";
+		reg = <5>;
+		phy-mode = "sgmii";
+		fixed-link {
+			speed = <2500>;
+			full-duplex;
+		};
+	};
+};
+
+&i2c0 {
+        pinctrl-names = "default";
+        pinctrl-0 = <&i2c0_pins>;
+		status = "okay";
+			/*zhengzhou 0316 ++++*/
+		nuvoton:nuvoton@1a {
+		compatible = "nuvoton,nau8810";
+		reg = <0x1a>;
+		/*nau8810,pwr-gpio = <&pio 12 0>;*/
+			/*zhengzhou 0316 ----*/
+	};
+
+//tianyan@2021.7.16 modify for compatible codec tlv320aic3104 start
+	tlv320:tlv320aic3104@18 {
+		compatible = "ti,tlv320aic3104";
+		reg = <0x18>;
+		gpio-reset = <&pio 201 0>; 
+		ai3x-micbias-vg = <2>;
+	};
+//tianyan@2021.7.16 modify for compatible codec tlv320aic3104 end
+
+};
+
+&i2c1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&i2c1_pins>;
+	clock-frequency = <400000>;
+	status = "okay";
+
+	//smi130@0e {
+	//	compatible = "mediatek,smi130_sensor";
+	//	reg = <0x0e>;
+	//	direction = <2>;
+	//	status = "okay";
+	//};
+
+	kxtj3@0e {
+		compatible = "mediatek,kxtj3_gsensor";
+		reg = <0x0e>;
+		direction = <2>;
+		status = "okay";
+	};
+	mtk-iicd@74 {
+		compatible = "mediatek,mtk-iicd";
+		reg = <0x74>;
+		status = "okay";
+	};
+};
+
+&i2c2 {
+        pinctrl-names = "default";
+        pinctrl-0 = <&i2c2_pins>;
+        status = "okay";
+};
+
+&i2c3 {
+	clock-frequency = <400000>;
+	pinctrl-names = "default";
+	pinctrl-0 = <&i2c3_pins>;
+	status = "okay";
+};
+
+&i2c4 {
+        pinctrl-names = "default";
+        pinctrl-0 = <&i2c4_pins>;
+        status = "okay";
+		ak4940@12 {
+			compatible = "akm,ak4940";
+			reg = <0x12>;
+			ak4940,pdn-gpio = <&pio 26 0>;       /* pdn pin */
+		};
+};
+
+&i2c5 {
+        pinctrl-names = "default";
+        pinctrl-0 = <&i2c5_pins>;
+        status = "disable";
+};
+
+//tianyan@2021.09.09 modify for add pwm start
+&pwm {
+        pinctrl-names = "default";
+        pinctrl-0 = <&pwm_pins_gpio1_output>;
+        status = "okay";
+};
+//tianyan@2021.09.09 modify for add pwm end
+
+&pcie0 {
+	max-link-speed = <3>;
+	pinctrl-names = "default","default";//tianyan@2021.7.27 modify for add wifi6 module start
+	pinctrl-0 = <&pcie0_pins_default>;
+	pinctrl-1 = <&pcie0_pins_power>;//tianyan@2021.7.27 modify for add wifi6 module end
+	status = "okay";
+};
+
+/*
+&odm {
+	vibrator0:vibrator@0 {
+		compatible = "mediatek,vibrator";
+		vib_timer = <25>;
+		vib_limit = <9>;
+		vib_vol= <9>;
+	};
+};*/
+
+/* DISPSYS GPIO standardization */
+#if 0
+&pio {
+	mtkfb_pins_lcd_bias_enp1: lcd_bias_enp1_gpio {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO28__FUNC_GPIO28>;
+			slew-rate = <1>;
+			output-high;
+		};
+	};
+
+	mtkfb_pins_lcd_bias_enp0: lcd_bias_enp0_gpio {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO28__FUNC_GPIO28>;
+			slew-rate = <1>;
+			output-low;
+		};
+	};
+
+	mtkfb_pins_lcd_bias_enn1: lcd_bias_enn1_gpio {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO29__FUNC_GPIO29>;
+			slew-rate = <1>;
+			output-high;
+		};
+	};
+
+	mtkfb_pins_lcd_bias_enn0: lcd_bias_enn0_gpio {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO29__FUNC_GPIO29>;
+			slew-rate = <1>;
+			output-low;
+		};
+	};
+
+	mtkfb_pins_lcm_rst_out1_gpio: lcm_rst_out1_gpio {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO42__FUNC_GPIO42>;
+			slew-rate = <1>;
+			output-high;
+		};
+	};
+
+	mtkfb_pins_lcm_rst_out0_gpio: lcm_rst_out0_gpio {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO42__FUNC_GPIO42>;
+			slew-rate = <1>;
+			output-low;
+		};
+	};
+	mtkfb_pins_lcm_dsi_te: lcm_dsi_te {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO41__FUNC_DSI_TE>;
+		};
+	};
+};
+
+&mtkfb {
+	pinctrl-names = "lcd_bias_enp1_gpio", "lcd_bias_enp0_gpio",
+		"lcd_bias_enn1_gpio", "lcd_bias_enn0_gpio",
+		"lcm_rst_out1_gpio", "lcm_rst_out0_gpio",
+		"mode_te_te";
+	pinctrl-0 = <&mtkfb_pins_lcd_bias_enp1>;
+	pinctrl-1 = <&mtkfb_pins_lcd_bias_enp0>;
+	pinctrl-2 = <&mtkfb_pins_lcd_bias_enn1>;
+	pinctrl-3 = <&mtkfb_pins_lcd_bias_enn0>;
+	pinctrl-4 = <&mtkfb_pins_lcm_rst_out1_gpio>;
+	pinctrl-5 = <&mtkfb_pins_lcm_rst_out0_gpio>;
+	pinctrl-6 = <&mtkfb_pins_lcm_dsi_te>;
+	status = "okay";
+};
+#endif
+
+#if 0
+&spi3 {
+	status = "okay";
+	#address-cells=<1>;
+	#size-cells=<0>;
+
+	proslic_spi: proslic_spi@0 {
+		compatible = "silabs,proslic_spi";
+		reg = <0>;
+		spi-max-frequency = <24000000>;
+		spi-cpha = <1>;
+		spi-cpol = <1>;
+		channel_count = <1>;
+		debug_level = <7>;       /* 1 = TRC, 2 = DBG, 4 = ERR */
+		reset_gpio = <&pio 23 0>;       /* Hz */
+		ig,enable-spi = <1>;                /* 1: Enable, 0: Disable */
+	};
+};
+#endif
+/*zhengzhou for spi start*/
+&spi0 {
+status = "okay";
+	pinctrl-names = "default";
+	pinctrl-0 = <&spi_pins_0>;
+	status = "okay";
+	spidev0: spi@0 {
+		compatible = "mediatek,spi-mt65xx-dev";
+		reg = <0>;
+		spi-max-frequency = <24000000>;
+	};
+};
+&spi1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&spi_pins_1>;
+	status = "okay";
+	spidev1: spi@0 {
+		compatible = "mediatek,spi-mt65xx-dev";
+		reg = <0>;
+		spi-max-frequency = <24000000>;
+	};
+};
+&spi2 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&spi_pins_2>;
+	status = "okay";
+	spidev2: spi@0 {
+		compatible = "mediatek,spi-mt65xx-dev";
+		reg = <0>;
+		spi-max-frequency = <24000000>;
+	};
+};
+/*zhengzhou for spi end*/
+/* SPIS GPIO standardization start */
+&pio {
+/*zhengzhou for spi start*/
+spi_pins_0: spi0@0 {
+		pins_spi {
+			pinmux = <PINMUX_GPIO101__FUNC_SPI0_A_MI>,
+				 <PINMUX_GPIO102__FUNC_SPI0_A_CSB>,
+				 <PINMUX_GPIO103__FUNC_SPI0_A_MO>,
+				 <PINMUX_GPIO104__FUNC_SPI0_A_CLK>;
+			bias-disable;
+			input-enable;
+                        drive-strength=<3>;/*modify by chencheng 0817*/
+		};
+	};
+spi_pins_1: spi1@0 {
+		pins_spi {
+			pinmux = <PINMUX_GPIO185__FUNC_SPI1_A_MI>,
+				 <PINMUX_GPIO186__FUNC_SPI1_A_CSB>,
+				 <PINMUX_GPIO187__FUNC_SPI1_A_MO>,
+				 <PINMUX_GPIO188__FUNC_SPI1_A_CLK>;
+			bias-disable;
+			input-enable;
+			drive-strength=<3>;/*modify by chencheng 0817*/
+		};
+	};
+spi_pins_2: spi2@0 {
+		pins_spi {
+			pinmux = <PINMUX_GPIO189__FUNC_SPI2_A_MI>,
+				 <PINMUX_GPIO190__FUNC_SPI2_A_CSB>,
+				 <PINMUX_GPIO191__FUNC_SPI2_A_MO>,
+				 <PINMUX_GPIO192__FUNC_SPI2_A_CLK>;
+			bias-disable;
+			input-enable;
+			drive-strength=<3>;/*modify by chencheng 0817*/
+		};
+	};
+	spis_pins_0: spis0@0 {
+		pins_spi {
+			pinmux = <PINMUX_GPIO193__FUNC_SPIS_SI>,
+				 <PINMUX_GPIO194__FUNC_SPIS_CSB>,
+				 <PINMUX_GPIO195__FUNC_SPIS_SO>,
+				 <PINMUX_GPIO196__FUNC_SPIS_CLK>;
+			bias-disable;
+			input-enable;
+		};
+	};
+/*zhengzhou for spi end*/
+};
+
+&spis0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&spis_pins_0>;
+	status = "okay";/*zhengzhou for spi*/
+	#address-cells=<1>;
+	#size-cells=<0>;
+
+	slave {
+		compatible = "spi-slave-mt27xx-test";
+	};
+};
+/* UART GPIO standardization */
+/*zhengzhou for spi start*/
+&uart0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart0_pin_default>;
+	status = "okay";
+};
+
+&uart1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart1_pin_default>;
+	status = "okay";
+};
+
+&uart2 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart2_pin_default>;
+	status = "okay";
+};
+
+&uart3 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&uart3_pin_default>;
+	status = "okay";
+};
+
+&pio {
+
+uart0_pin_default: uart0_pin_uart_default {
+		pins_rx {
+			pinmux = <PINMUX_GPIO172__FUNC_URXD0>;
+			input-enable;
+			bias-pull-up;
+		};
+		pins_tx {
+			pinmux = <PINMUX_GPIO171__FUNC_UTXD0>;
+			output-high;
+			bias-disable;
+		};
+			
+//tianyan@2021.10.14 modify for add uart0 flow start		
+		pins_rts {
+		    pinmux = <PINMUX_GPIO170__FUNC_URTS0>;
+		    output-high;
+			bias-pull-up;
+		    input-schmitt-enable;
+		};
+
+		pins_cts {
+		    pinmux = <PINMUX_GPIO169__FUNC_UCTS0>;
+		    input-enable;
+			bias-pull-up;
+		    input-schmitt-enable;
+		};	
+//tianyan@2021.10.14 modify for add uart0 flow end	
+	};
+	uart1_pin_default: uart1_pin_uart_default {
+		pins_rx {
+			pinmux = <PINMUX_GPIO176__FUNC_URXD1>;
+			input-enable;
+			bias-pull-up;
+		};
+		pins_tx {
+			pinmux = <PINMUX_GPIO175__FUNC_UTXD1>;
+			output-high;
+		};
+		
+//tianyan@2021.10.14 modify for add uart1 flow start		
+		pins_rts {
+			pinmux = <PINMUX_GPIO174__FUNC_URTS1>;
+			output-high;
+			bias-pull-up;
+			input-schmitt-enable;
+		};
+
+		pins_cts {
+			pinmux = <PINMUX_GPIO173__FUNC_UCTS1>;
+			input-enable;
+			bias-pull-up;
+			input-schmitt-enable;
+		};
+//tianyan@2021.10.14 modify for add uart1 flow end	
+	};
+
+	uart2_pin_default: uart2_pin_uart_default {
+	pins_rx {
+		pinmux = <PINMUX_GPIO180__FUNC_URXD2>;
+		input-enable;
+		bias-pull-up;
+	};
+	pins_tx {
+		pinmux = <PINMUX_GPIO179__FUNC_UTXD2>;
+		output-high;
+	};
+			
+	pins_rts {
+		pinmux = <PINMUX_GPIO178__FUNC_URTS2>;
+		output-high;
+		bias-pull-up;
+		input-schmitt-enable;
+	};
+
+	pins_cts {
+		pinmux = <PINMUX_GPIO177__FUNC_UCTS2>;
+		input-enable;
+		bias-pull-up;
+		input-schmitt-enable;
+	};
+};
+
+
+	uart3_pin_default: uart3_pin_uart_default {
+		pins_rx {
+			pinmux = <PINMUX_GPIO184__FUNC_URXD3>;
+			input-enable;
+			bias-pull-up;
+		};
+		pins_tx {
+			pinmux = <PINMUX_GPIO183__FUNC_UTXD3>;
+			output-high;
+		};
+		
+//tianyan@2021.10.14 modify for add uart3 flow start		
+		pins_rts {
+		    pinmux = <PINMUX_GPIO182__FUNC_URTS3>;
+		    output-high;
+			bias-pull-up;
+		    input-schmitt-enable;
+		};
+
+		pins_cts {
+		    pinmux = <PINMUX_GPIO181__FUNC_UCTS3>;
+		    input-enable;
+			bias-pull-up;
+		    input-schmitt-enable;
+		};	
+//tianyan@2021.10.14 modify for add uart3 flow end	
+	};
+
+};
+/*zhengzhou for spi  end*/
+
+
+
+/* GPS GPIO standardization start */
+#if 1
+&pio {
+/*modify by chencheng 2021/11/10*/
+	mtu3_pin_default: mtu3_usb_pin_default {
+			pins_input {
+				pinmux = <PINMUX_GPIO42__FUNC_GPIO42>;
+				input-enable;
+				bias-disable; 
+			};
+		};
+/*modify by chencheng 2021/11/10*/
+
+	eth_gpio_default: mdio_default {
+		mux {
+			pinmux = <PINMUX_GPIO61__FUNC_GPIO61>;
+		};
+	};
+
+	eth_smi_mdio_pinctl: eth_smi_mdio_pinctl {
+		mux {
+			pinmux = <PINMUX_GPIO61__FUNC_SMI_MDIO>;
+		};
+	};
+
+	eth_smi_mdc_pinctl: eth_smi_mdc_pinctl {
+		mux {
+			pinmux = <PINMUX_GPIO62__FUNC_SMI_MDC>;
+		};
+	};
+/*modify by chencheng 2021/11/10*/
+	eth_default: eth_default {
+		txd_pins {
+
+			pinmux = <PINMUX_GPIO8__FUNC_GBE_TXD3>,
+				 <PINMUX_GPIO9__FUNC_GBE_TXD2>,
+				 <PINMUX_GPIO10__FUNC_GBE_TXD1>,
+				 <PINMUX_GPIO11__FUNC_GBE_TXD0>;
+			drive-strength = <4>;
+			bias-disable;
+
+		};
+		cc_pins {
+			pinmux = <PINMUX_GPIO18__FUNC_GBE_TXC>,
+				 <PINMUX_GPIO21__FUNC_GBE_TXEN>,
+				 <PINMUX_GPIO20__FUNC_GBE_RXDV>,
+				 <PINMUX_GPIO19__FUNC_GBE_RXC>;
+			drive-strength = <4>;
+			bias-disable;
+		};
+		rxd_pins {
+
+			pinmux = <PINMUX_GPIO14__FUNC_GBE_RXD3>,
+				 <PINMUX_GPIO15__FUNC_GBE_RXD2>,
+				 <PINMUX_GPIO16__FUNC_GBE_RXD1>,
+				 <PINMUX_GPIO17__FUNC_GBE_RXD0>;
+			drive-strength = <4>;
+			bias-disable;
+	
+		};
+		mdio_pins {
+			pinmux = <PINMUX_GPIO12__FUNC_GBE_MDC>,
+				 <PINMUX_GPIO13__FUNC_GBE_MDIO>;
+			drive-strength = <3>;
+			bias-disable;
+
+		};
+	};
+
+	eth_sleep: eth_sleep {
+		txd_pins {		
+				pinmux = <PINMUX_GPIO8__FUNC_GPIO8>,
+				 <PINMUX_GPIO9__FUNC_GPIO9>,
+				 <PINMUX_GPIO10__FUNC_GPIO10>,
+				 <PINMUX_GPIO11__FUNC_GPIO11>;
+			input-enable;
+			bias-pull-down;
+
+		};
+		cc_pins {
+			pinmux = <PINMUX_GPIO18__FUNC_GPIO18>,
+				 <PINMUX_GPIO21__FUNC_GPIO21>,
+				 <PINMUX_GPIO20__FUNC_GPIO20>,
+				 <PINMUX_GPIO19__FUNC_GPIO19>;
+			input-enable;
+			bias-pull-down;
+		};
+		rxd_pins {	
+			pinmux = <PINMUX_GPIO14__FUNC_GPIO14>,
+				 <PINMUX_GPIO15__FUNC_GPIO15>,
+				 <PINMUX_GPIO16__FUNC_GPIO16>,
+				 <PINMUX_GPIO17__FUNC_GPIO17>;
+			input-enable;
+			bias-pull-down;
+
+		};
+		mdio_pins {
+			pinmux = <PINMUX_GPIO12__FUNC_GPIO12>,
+				 <PINMUX_GPIO13__FUNC_GPIO13>;
+			input-enable;
+			bias-pull-down;
+		};
+
+	};
+/*modify by chencheng 2021/11/10*/
+        i2c0_pins: i2c0default {
+                pins_bus {
+                        pinmux = <PINMUX_GPIO105__FUNC_SDA0>,
+                                 <PINMUX_GPIO106__FUNC_SCL0>;
+//tianyan@2021.7.27 modify for cancel internal pull-up start
+                        bias-disable;
+//tianyan@2021.7.27 modify for cancel internal pull-up end
+			mediatek,res-sel = <3>;
+                };
+        };
+
+        i2c1_pins: i2c1default {
+                pins_bus {
+                        pinmux = <PINMUX_GPIO107__FUNC_SDA1>,
+                                 <PINMUX_GPIO108__FUNC_SCL1>;
+//tianyan@2021.7.27 modify for cancel internal pull-up start
+                        bias-disable;
+//tianyan@2021.7.27 modify for cancel internal pull-up end
+			mediatek,res-sel = <3>;
+                };
+        };
+
+	i2c2_pins: i2c2default {
+                pins_bus {
+                        pinmux = <PINMUX_GPIO109__FUNC_SDA2>,
+                                 <PINMUX_GPIO110__FUNC_SCL2>;
+                        bias-pull-up;
+			mediatek,res-sel = <3>;
+                };
+        };
+
+         i2c3_pins: i2c3default {
+                pins_bus {
+                        pinmux = <PINMUX_GPIO197__FUNC_SDA3>,
+                                 <PINMUX_GPIO198__FUNC_SCL3>;
+                        bias-pull-up;
+			mediatek,res-sel = <3>;
+                };
+        };
+
+        i2c4_pins: i2c4default {
+                pins_bus {
+                        pinmux = <PINMUX_GPIO79__FUNC_SDA4>,
+                                 <PINMUX_GPIO80__FUNC_SCL4>;
+                        bias-pull-up;
+			mediatek,res-sel = <3>;
+                };
+        };
+
+	i2c5_pins: i2c5default {
+		pins_bus {
+			pinmux = <PINMUX_GPIO81__FUNC_SDA5>,
+				 <PINMUX_GPIO82__FUNC_SCL5>;
+//Typethree@2023.2.01 modify for cancel internal pull-up start
+                        bias-disable;
+//Typethree@2023.2.01 modify for cancel internal pull-up end
+			mediatek,res-sel = <3>;
+                };
+        };
+		
+//tianyan@2021.09.09 modify for add pwm start
+	pwm_pins_gpio1_output: pwm_pins_output {
+		mux {
+			pinmux = <PINMUX_GPIO1__FUNC_PWM_1>;
+                };
+        };
+//tianyan@2021.09.09 modify for add pwm end
+
+	pcie0_pins_default: pcie0-default {
+		mux {
+			pinmux = <PINMUX_GPIO67__FUNC_PCIE_PERESET_N_0P>,
+			         <PINMUX_GPIO68__FUNC_PCIE_WAKE_N_0P>,
+				 <PINMUX_GPIO69__FUNC_PCIE_CLKREQ_N_0P>;
+			bias-pull-up;
+		};
+	};
+
+//tianyan@2021.7.27 modify for add wifi6 module start
+	pcie0_pins_power: pcie0-power {
+		mux {
+			pinmux = <PINMUX_GPIO104__FUNC_GPIO104>;
+			output-high;
+		};
+	};
+//tianyan@2021.7.27 modify for add wifi6 module end
+
+	gps_pins_default: gps_default {
+	};
+
+	gps_l1_lna_pins_ol: gps_l1_lna@0 {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO125__FUNC_GPIO125>;
+			output-low;
+		};
+	};
+	gps_l1_lna_pins_dsp_ctrl: gps_l1_lna@1 {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO125__FUNC_GPS_L1_ELNA_EN>;
+		};
+	};
+	gps_l1_lna_pins_oh: gps_l1_lna@2 {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO125__FUNC_GPIO125>;
+			output-high;
+		};
+	};
+
+	gps_l5_lna_pins_ol: gps_l5_lna@0 {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO126__FUNC_GPIO126>;
+			output-low;
+		};
+	};
+	gps_l5_lna_pins_dsp_ctrl: gps_l5_lna@1 {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO126__FUNC_GPS_L5_ELNA_EN>;
+		};
+	};
+	gps_l5_lna_pins_oh: gps_l5_lna@2 {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO126__FUNC_GPIO126>;
+			output-high;
+		};
+	};
+
+	aud_gpio_i2s0_off: aud_gpio_i2s0_off {
+		pins_cmd0_dat {
+			pinmux = <PINMUX_GPIO230__FUNC_GPIO230>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd1_dat {
+			pinmux = <PINMUX_GPIO231__FUNC_GPIO231>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd2_dat {
+			pinmux = <PINMUX_GPIO232__FUNC_GPIO232>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd3_dat {
+			pinmux = <PINMUX_GPIO233__FUNC_GPIO233>;
+			input-enable;
+			bias-pull-down;
+		};
+	};
+	aud_gpio_i2s0_on: aud_gpio_i2s0_on {
+		pins_cmd0_dat {
+			pinmux = <PINMUX_GPIO230__FUNC_I2S0_MCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd1_dat {
+			pinmux = <PINMUX_GPIO231__FUNC_I2S0_BCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd2_dat {
+			pinmux = <PINMUX_GPIO232__FUNC_I2S0_LRCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd3_dat {
+			pinmux = <PINMUX_GPIO233__FUNC_I2S0_DI>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+	};
+	aud_gpio_i2s1_off: aud_gpio_i2s1_off {
+		pins_cmd0_dat {
+			pinmux = <PINMUX_GPIO91__FUNC_GPIO91>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd1_dat {
+			pinmux = <PINMUX_GPIO92__FUNC_GPIO92>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd2_dat {
+			pinmux = <PINMUX_GPIO93__FUNC_GPIO93>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd3_dat {
+			pinmux = <PINMUX_GPIO95__FUNC_GPIO95>;
+			input-enable;
+			bias-pull-down;
+		};
+	};
+	aud_gpio_i2s1_on: aud_gpio_i2s1_on {
+		pins_cmd0_dat {
+			pinmux = <PINMUX_GPIO91__FUNC_I2S2_MCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd1_dat {
+			pinmux = <PINMUX_GPIO92__FUNC_I2S2_BCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd2_dat {
+			pinmux = <PINMUX_GPIO93__FUNC_I2S2_LRCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd3_dat {
+			pinmux = <PINMUX_GPIO95__FUNC_I2S1_DO>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+	};
+	aud_gpio_i2s2_off: aud_gpio_i2s2_off {
+		pins_cmd0_dat {
+			pinmux = <PINMUX_GPIO91__FUNC_GPIO91>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd1_dat {
+			pinmux = <PINMUX_GPIO92__FUNC_GPIO92>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd2_dat {
+			pinmux = <PINMUX_GPIO93__FUNC_GPIO93>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd3_dat {
+			pinmux = <PINMUX_GPIO94__FUNC_GPIO94>;
+			input-enable;
+			bias-pull-down;
+		};
+	};
+	aud_gpio_i2s2_on: aud_gpio_i2s2_on {
+		pins_cmd0_dat {
+			pinmux = <PINMUX_GPIO91__FUNC_I2S2_MCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd1_dat {
+			pinmux = <PINMUX_GPIO92__FUNC_I2S2_BCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd2_dat {
+			pinmux = <PINMUX_GPIO93__FUNC_I2S2_LRCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd3_dat {
+			pinmux = <PINMUX_GPIO94__FUNC_I2S2_DI>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+	};
+	aud_gpio_i2s3_off: aud_gpio_i2s3_off {
+		pins_cmd0_dat {
+			pinmux = <PINMUX_GPIO230__FUNC_GPIO230>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd1_dat {
+			pinmux = <PINMUX_GPIO231__FUNC_GPIO231>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd2_dat {
+			pinmux = <PINMUX_GPIO232__FUNC_GPIO232>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd3_dat {
+			pinmux = <PINMUX_GPIO234__FUNC_GPIO234>;
+			input-enable;
+			bias-pull-down;
+		};
+	};
+	aud_gpio_i2s3_on: aud_gpio_i2s3_on {
+		pins_cmd0_dat {
+			pinmux = <PINMUX_GPIO230__FUNC_I2S0_MCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd1_dat {
+			pinmux = <PINMUX_GPIO231__FUNC_I2S0_BCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd2_dat {
+			pinmux = <PINMUX_GPIO232__FUNC_I2S0_LRCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd3_dat {
+			pinmux = <PINMUX_GPIO234__FUNC_I2S0_DO>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+	};
+	aud_gpio_i2s4_off: aud_gpio_i2s4_off {
+		pins_cmd0_dat {
+			pinmux = <PINMUX_GPIO32__FUNC_GPIO32>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd1_dat {
+			pinmux = <PINMUX_GPIO33__FUNC_GPIO33>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd2_dat {
+			pinmux = <PINMUX_GPIO34__FUNC_GPIO34>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd3_dat {
+			pinmux = <PINMUX_GPIO35__FUNC_GPIO35>;
+			input-enable;
+			bias-pull-down;
+		};
+	};
+	aud_gpio_i2s4_on: aud_gpio_i2s4_on {
+		pins_cmd0_dat {
+			pinmux = <PINMUX_GPIO32__FUNC_I2S4_MCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd1_dat {
+			pinmux = <PINMUX_GPIO33__FUNC_I2S4_BCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd2_dat {
+			pinmux = <PINMUX_GPIO34__FUNC_I2S4_LRCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd3_dat {
+			pinmux = <PINMUX_GPIO35__FUNC_I2S4_DI>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+	};
+	aud_gpio_i2s5_off: aud_gpio_i2s5_off {
+		pins_cmd0_dat {
+			pinmux = <PINMUX_GPIO32__FUNC_GPIO32>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd1_dat {
+			pinmux = <PINMUX_GPIO33__FUNC_GPIO33>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd2_dat {
+			pinmux = <PINMUX_GPIO34__FUNC_GPIO34>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd3_dat {
+			pinmux = <PINMUX_GPIO36__FUNC_GPIO36>;
+			input-enable;
+			bias-pull-down;
+		};
+	};
+	aud_gpio_i2s5_on: aud_gpio_i2s5_on {
+		pins_cmd0_dat {
+			pinmux = <PINMUX_GPIO32__FUNC_I2S5_MCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd1_dat {
+			pinmux = <PINMUX_GPIO33__FUNC_I2S5_BCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd2_dat {
+			pinmux = <PINMUX_GPIO34__FUNC_I2S5_LRCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd3_dat {
+			pinmux = <PINMUX_GPIO36__FUNC_I2S5_DO>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+	};
+	aud_gpio_i2s6_off: aud_gpio_i2s6_off {
+		pins_cmd0_dat {
+			pinmux = <PINMUX_GPIO32__FUNC_GPIO32>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd1_dat {
+			pinmux = <PINMUX_GPIO33__FUNC_GPIO33>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd2_dat {
+			pinmux = <PINMUX_GPIO34__FUNC_GPIO34>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd3_dat {
+			pinmux = <PINMUX_GPIO35__FUNC_GPIO35>;
+			input-enable;
+			bias-pull-down;
+		};
+	};
+	aud_gpio_i2s6_on: aud_gpio_i2s6_on {
+		pins_cmd0_dat {
+			pinmux = <PINMUX_GPIO32__FUNC_I2S6_MCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd1_dat {
+			pinmux = <PINMUX_GPIO33__FUNC_I2S6_BCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd2_dat {
+			pinmux = <PINMUX_GPIO34__FUNC_I2S6_LRCK>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+		pins_cmd3_dat {
+			pinmux = <PINMUX_GPIO35__FUNC_I2S6_DI>;
+			input-schmitt-enable;
+			bias-disable;
+		};
+	};
+	aud_gpio_proslic_off: aud_gpio_proslic_off {	/*zhengzhou 0316 ++++*/
+	/*	pins_cmd0_dat {
+			pinmux = <PINMUX_GPIO199__FUNC_GPIO199>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd1_dat {
+			pinmux = <PINMUX_GPIO200__FUNC_GPIO200>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd2_dat {
+			pinmux = <PINMUX_GPIO201__FUNC_GPIO201>;
+			input-enable;
+			bias-pull-down;
+		};
+		pins_cmd3_dat {
+			pinmux = <PINMUX_GPIO202__FUNC_GPIO202>;
+			input-enable;
+			bias-pull-down;
+		};*/
+			/*zhengzhou 0316 -----*/
+	};
+	aud_gpio_proslic_on: aud_gpio_proslic_on {/*zhengzhou 0316 ++++*/
+	/*	pins_cmd0_dat {
+			pinmux = <PINMUX_GPIO199__FUNC_PCM1_CLK>;
+			bias-disable;
+		};
+		pins_cmd1_dat {
+			pinmux = <PINMUX_GPIO200__FUNC_PCM1_SYNC>;
+			bias-disable;
+		};
+		pins_cmd2_dat {
+			pinmux = <PINMUX_GPIO201__FUNC_PCM1_DI>;
+			bias-disable;
+		};
+		pins_cmd3_dat {
+			pinmux = <PINMUX_GPIO202__FUNC_PCM1_DO>;
+			bias-disable;
+		};*/
+			/*zhengzhou 0316 -----*/
+	};
+	aud_gpio_tdm_off: aud_gpio_tdm_off {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO199__FUNC_GPIO199>,
+				 <PINMUX_GPIO200__FUNC_GPIO200>,
+				 <PINMUX_GPIO201__FUNC_GPIO201>,
+				 <PINMUX_GPIO202__FUNC_GPIO202>,
+				 //<PINMUX_GPIO203__FUNC_GPIO203>,
+				 <PINMUX_GPIO204__FUNC_GPIO204>,
+				 <PINMUX_GPIO205__FUNC_GPIO205>;
+		};
+	};
+	aud_gpio_tdm_on: aud_gpio_tdm_on {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO199__FUNC_TDM_LRCK>,
+				 <PINMUX_GPIO200__FUNC_TDM_BCK>,
+				 <PINMUX_GPIO201__FUNC_TDM_MCK>,
+				 <PINMUX_GPIO202__FUNC_TDM_DATA0>,
+				 //<PINMUX_GPIO203__FUNC_TDM_DATA1>,
+				 <PINMUX_GPIO204__FUNC_TDM_DATA2>,
+				 <PINMUX_GPIO205__FUNC_TDM_DATA3>;
+		};
+	};
+	aud_pins_extamp_high: audexamphigh {
+		pins_cmd0_dat {
+			pinmux = <PINMUX_GPIO27__FUNC_GPIO27>;
+			output-low;
+		};
+	};
+	aud_pins_extamp_low: audexamplow {
+		pins_cmd0_dat {
+			pinmux = <PINMUX_GPIO27__FUNC_GPIO27>;
+			//input-enable;
+			//bias-pull-down=<MTK_PUPD_SET_R1R0_01>;
+		};
+	};
+};
+
+&gps {
+	pinctrl-names = "default",
+		"gps_l1_lna_disable",
+		"gps_l1_lna_dsp_ctrl",
+		"gps_l1_lna_enable",
+		"gps_l5_lna_disable",
+		"gps_l5_lna_dsp_ctrl",
+		"gps_l5_lna_enable";
+	pinctrl-0 = <&gps_pins_default>;
+	pinctrl-1 = <&gps_l1_lna_pins_ol>;
+	pinctrl-2 = <&gps_l1_lna_pins_dsp_ctrl>;
+	pinctrl-3 = <&gps_l1_lna_pins_oh>;
+	pinctrl-4 = <&gps_l5_lna_pins_ol>;
+	pinctrl-5 = <&gps_l5_lna_pins_dsp_ctrl>;
+	pinctrl-6 = <&gps_l5_lna_pins_oh>;
+	status = "okay";
+};
+#endif
+/* GPS GPIO standardization end */
+
+/* usb typec swtich */
+&pio {
+	c1_active: c1_high {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO95__FUNC_GPIO95>;
+			output-high;
+		};
+	};
+
+	c2_active: c2_highz {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO94__FUNC_GPIO94>;
+			input-enable;
+			bias-disable;
+		};
+	};
+
+	c1_sleep: c1_low {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO95__FUNC_GPIO95>;
+			output-low;
+		};
+	};
+
+	c2_sleep: c2_low {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO94__FUNC_GPIO94>;
+			output-low;
+		};
+	};
+
+	sel_up: sel_high {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO93__FUNC_GPIO93>;
+			output-high;
+		};
+	};
+
+	sel_down: sel_low {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO93__FUNC_GPIO93>;
+			output-low;
+		};
+	};
+
+	sw_enable: sw_enable {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO92__FUNC_GPIO92>;
+			output-low;
+		};
+	};
+
+	sw_disable: sw_disable {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO92__FUNC_GPIO92>;
+			output-low;
+		};
+	};
+	kpd_gpios_def_cfg: kpdgpiodefault {
+		pins_cmd_dat {
+			pinmux = <PINMUX_GPIO114__FUNC_KPROW0>,
+				<PINMUX_GPIO115__FUNC_KPROW1>,
+				<PINMUX_GPIO116__FUNC_KPROW2>,/*zhengzhou 0316 ++++*/
+				<PINMUX_GPIO111__FUNC_KPCOL0>,
+				<PINMUX_GPIO112__FUNC_KPCOL1>,
+				<PINMUX_GPIO113__FUNC_KPCOL2>;/*zhengzhou 0316 ----*/
+			mediatek,pull-down-adv = <MTK_PUPD_SET_R1R0_01>;
+			output-low;
+			input-schmitt-enable;
+		};
+	};
+};
+
+&keypad {
+	mediatek,key-debounce-ms = <1024>;
+	/*HW Keycode [0~71] -> Linux Keycode*/
+	mediatek,hw-map-num = <72>;
+	mediatek,hw-init-map = <0 0 114 0 0 0 0 0 0 0 0 0 0 0 0 115 0 0 0 0 0 0 0
+		0 0 0 0 0 112 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+		0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >;
+	status = "okay";
+	pinctrl-names = "default";
+	pinctrl-0 = <&kpd_gpios_def_cfg>;
+};
+
+&typec_switch {
+	switch-names = "ptn36241g","fusb304";
+	pinctrl-names = "c1_active", "c1_sleep",
+		"c2_active", "c2_sleep",
+		"sel_up", "sel_down",
+		"enable", "disable";
+	/* ptn36241g */
+	pinctrl-0 = <&c1_active>;
+	pinctrl-1 = <&c1_sleep>;
+	pinctrl-2 = <&c2_active>;
+	pinctrl-3 = <&c2_sleep>;
+	/* fusb304 */
+	pinctrl-4 = <&sel_up>;
+	pinctrl-5 = <&sel_down>;
+	pinctrl-6 = <&sw_enable>;
+	pinctrl-7 = <&sw_disable>;
+};
+
+&extcon_usb {
+/*zhengzhou 0316 ++++*/
+	compatible = "linux,extcon-usb-gpio";
+	vbus-voltage = <5000000>;
+	vbus-supply = <&otg_vbus>;
+	vbus-current = <1800000>;
+	/*zhengzhou 0316 ----*/
+};
+
+&rt1711_typec {
+	switch = <&typec_switch>;
+};
+
+/*************************
+ * PMIC LED DTSI File
+*************************/
+&pmic {
+	mt6330-led {
+		compatible = "mediatek,mt6330_leds";
+		Isink1 {
+			reg = <1>;
+			label = "led9515:green:cellular-radio";
+			linux,default-trigger = "none";
+			default-state = "off";
+		};
+		Isink2 {
+			reg = <2>;
+			label = "led9516:green:cellular-quality";
+			linux,default-trigger = "none";
+			default-state = "off";
+		};
+		Isink3 {
+			reg = <3>;
+			label = "led9517:red:system";
+			linux,default-trigger = "none";
+			default-state = "off";
+		};
+	};
+};
+
+/************ NAND ***********/
+&pio {
+#if defined(CONFIG_MTD_NANDX_V2_SPI)
+	nandc_pins_default: nandcdefault {
+		pins0 {
+			pinmux = <PINMUX_GPIO224__FUNC_SNFI_CS>,
+				<PINMUX_GPIO225__FUNC_SNFI_WP>,
+				<PINMUX_GPIO226__FUNC_SNFI_HOLD>;
+			drive-strength = <MTK_DRIVE_4mA>;
+			bias-pull-up;
+		};
+		pins1 {
+			pinmux = <PINMUX_GPIO223__FUNC_SNFI_MOSI>,
+				<PINMUX_GPIO227__FUNC_SNFI_CLK>,
+				<PINMUX_GPIO228__FUNC_SNFI_MISO>;
+			drive-strength = <MTK_DRIVE_4mA>;
+			bias-pull-down;
+		};
+	};
+#else
+	nandc_pins_default: nandcdefault {
+		pins0 {
+			pinmux = <PINMUX_GPIO215__FUNC_NLD0>,
+				<PINMUX_GPIO216__FUNC_NLD1>,
+				<PINMUX_GPIO217__FUNC_NLD2>,
+				<PINMUX_GPIO218__FUNC_NLD3>,
+				<PINMUX_GPIO219__FUNC_NLD4>,
+				<PINMUX_GPIO220__FUNC_NLD5>,
+				<PINMUX_GPIO221__FUNC_NLD6>,
+				<PINMUX_GPIO222__FUNC_NLD7>,
+				<PINMUX_GPIO228__FUNC_NALE>,
+				<PINMUX_GPIO229__FUNC_NCLE>;
+			bias-pull-down;
+		};
+		pins1 {
+			pinmux = <PINMUX_GPIO223__FUNC_NCEB1>,
+				<PINMUX_GPIO224__FUNC_NCEB0>,
+				<PINMUX_GPIO225__FUNC_NRNB>,
+				<PINMUX_GPIO226__FUNC_NREB>,
+				<PINMUX_GPIO227__FUNC_NWEB>;
+			bias-pull-up;
+		};
+	};
+#endif
+};
+&nandc {
+    status = "okay";
+    pinctrl-names = "default";
+    pinctrl-0 = <&nandc_pins_default>;
+    clocks =<&topckgen_clk CLK_TOP_TCK_26M_MX9>,
+            <&topckgen_clk CLK_TOP_UNIVPLL_D5_D4>,
+            <&topckgen_clk CLK_TOP_MAINPLL_D7_D4>,
+            <&topckgen_clk CLK_TOP_MAINPLL_D6_D4>,
+            <&topckgen_clk CLK_TOP_UNIVPLL_D6_D4>,
+            <&topckgen_clk CLK_TOP_MAINPLL_D4_D4>,
+            <&topckgen_clk CLK_TOP_UNIVPLL_D4_D4>,
+            <&topckgen_clk CLK_TOP_MAINPLL_D6_D2>,
+            <&topckgen_clk CLK_TOP_NFI1X_SEL>,
+            <&infracfg_ao_clk CLK_IFRAO_RG_66M_NFI_HCLK_CK>,
+#if defined(CONFIG_MTD_NANDX_V2_SPI)
+            <&infracfg_ao_clk CLK_IFRAO_RG_NFI>,
+            <&topckgen_clk CLK_TOP_UNIVPLL_D6_D8>,
+            <&topckgen_clk CLK_TOP_UNIVPLL_D5_D8>,
+            <&topckgen_clk CLK_TOP_MAINPLL_D4_D8>,
+            <&topckgen_clk CLK_TOP_UNIVPLL_D4_D8>,
+            <&topckgen_clk CLK_TOP_MAINPLL_D6_D4>,
+            <&topckgen_clk CLK_TOP_UNIVPLL_D6_D4>,
+            <&topckgen_clk CLK_TOP_UNIVPLL_D5_D4>,
+            <&topckgen_clk CLK_TOP_SPINFI_BCLK_SEL>,
+            <&infracfg_ao_clk CLK_IFRAO_RG_FPINFI_BCLK_CK>;
+#else
+            <&infracfg_ao_clk CLK_IFRAO_RG_NFI>;
+#endif
+    clock-names = "nfi_parent_26m",
+            "nfi_parent124.8m",
+            "nfi_parent78m",
+            "nfi_parent91m",
+            "nfi_parent104m",
+            "nfi_parent136.5m",
+            "nfi_parent156m",
+            "nfi_parent182m",
+            "nfi_clk_sel",
+            "dma_cg",
+#if defined(CONFIG_MTD_NANDX_V2_SPI)
+            "nfi_cg",
+            "snfi_parent52m",
+            "snfi_parent62.4m",
+            "snfi_parent68.25m",
+            "snfi_parent78m",
+            "snfi_parent91m",
+            "snfi_parent104m",
+            "snfi_parent124.8m",
+            "snfi_clk_sel",
+            "snfi_cg";
+#else
+            "nfi_cg";
+#endif
+};
+/*Lxf add in 2022/12/2 for gpio init*/
+&gpio_init{
+	phy_standby_gpio_113{
+		gpio_num = <113>;
+		gpio_mode = <0>;
+		gpio_dir = <1>;
+		gpio_dout = <1>;
+	};
+	phy_mute_gpio_29{
+		gpio_num = <29>;
+		gpio_mode = <0>;
+		gpio_dir = <1>;
+		gpio_dout = <1>;
+	};
+};
+/*Lxf add in 2022/12/2 for gpio init end*/
+#include <mediatek/evb6890v1_64_cpe/cust.dtsi>
+/*End of this file, DO NOT ADD ANYTHING HERE*/
diff --git a/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/mt2735_zk.dtsi b/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/mt2735_zk.dtsi
new file mode 100644
index 0000000..7c128cc
--- /dev/null
+++ b/src/kernel/linux/v4.19/arch/arm64/boot/dts/mediatek/mt2735_zk.dtsi
@@ -0,0 +1,4547 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2019 MediaTek Inc.
+ */
+
+/dts-v1/;
+#include <generated/autoconf.h>
+
+#include <dt-bindings/clock/mt6890-clk.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/pinctrl/mt2735-pinfunc.h>
+#include <dt-bindings/memory/mt6880-larb-port.h>
+#include <dt-bindings/power/mt6890-power.h>
+#include <dt-bindings/reset/ti-syscon.h>
+#include <dt-bindings/soc/mediatek,boot-mode.h>
+#include <dt-bindings/spmi/spmi.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/phy/phy.h>
+#include <dt-bindings/interconnect/mtk,mt6873-emi.h>
+#include <dt-bindings/iio/mt635x-auxadc.h>
+#include <dt-bindings/gce/mt6890-gce.h>
+#include <dt-bindings/thermal/thermal.h>
+/ {
+	model = "MT6890";
+	compatible = "mediatek,MT6890";
+	interrupt-parent = <&gic>;
+	#address-cells = <2>;
+	#size-cells = <2>;
+
+	/* chosen */
+	chosen: chosen {
+		bootargs = "console=tty0 console=ttyS0,921600n1 root=/dev/ram \
+			vmalloc=400M slub_debug=OFZPU swiotlb=noforce \
+			firmware_class.path=/vendor/firmware \
+			page_owner=on";
+	};
+
+	psci {
+		compatible = "arm,psci-0.2";
+		method = "smc";
+	};
+
+	gpio_leds {
+		compatible = "gpio-leds";
+		led0 {
+			label = "led9501:red:sim";
+			gpios = <&pio 209 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "none";
+			default-state = "off";
+		};
+		led1 {
+			label = "led9502:red:cellular-stat";
+			gpios = <&pio 210 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "none";
+			default-state = "off";
+		};
+		led2 {
+			label = "led9504:red:cellular-data";
+			gpios = <&pio 211 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "none";
+			default-state = "off";
+		};
+		led3 {
+			label = "led9505:red:cellular-rat";
+			gpios = <&pio 212 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "none";
+			default-state = "off";
+		};
+		led4 {
+			label = "led9506:red:cellular-ims";
+			gpios = <&pio 213 GPIO_ACTIVE_HIGH>;
+			linux,default-trigger = "none";
+			default-state = "off";
+		};
+	};
+
+	cluster0_opp: opp_table0 {
+                compatible = "operating-points-v2";
+                opp-shared;
+		opp0 {
+			opp-hz = /bits/ 64 <500000000>;
+			opp-microvolt = <650000>;
+		};
+		opp1 {
+			opp-hz = /bits/ 64 <600000000>;
+			opp-microvolt = <650000>;
+		};
+		opp2 {
+			opp-hz = /bits/ 64 <684000000>;
+			opp-microvolt = <668750>;
+		};
+		opp3 {
+			opp-hz = /bits/ 64 <768000000>;
+			opp-microvolt = <687500>;
+		};
+		opp4 {
+			opp-hz = /bits/ 64 <820000000>;
+			opp-microvolt = <700000>;
+		};
+		opp5 {
+			opp-hz = /bits/ 64 <937000000>;
+			opp-microvolt = <725000>;
+		};
+		opp6 {
+			opp-hz = /bits/ 64 <1060000000>;
+			opp-microvolt = <750000>;
+		};
+		opp7 {
+			opp-hz = /bits/ 64 <1134000000>;
+			opp-microvolt = <768750>;
+		};
+		opp8 {
+			opp-hz = /bits/ 64 <1275000000>;
+			opp-microvolt = <800000>;
+		};
+		opp9 {
+			opp-hz = /bits/ 64 <1387000000>;
+			opp-microvolt = <825000>;
+		};
+		opp10 {
+			opp-hz = /bits/ 64 <1500000000>;
+			opp-microvolt = <850000>;
+		};
+        };
+
+	cpus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+#if CONFIG_MTK_CORE_NUM == 4
+		cpu0: cpu@0 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a55";
+			reg = <0x0000>;
+			enable-method = "psci";
+			clock-frequency = <1701000000>;
+			operating-points-v2 = <&cluster0_opp>;
+			cpu-idle-states = <&cpuoff_l &clusteroff_l &mcusysoff>;
+			dynamic-power-coefficient = <85>;
+			#cooling-cells = <2>;
+		};
+
+		cpu1: cpu@001 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a55";
+			reg = <0x0100>;
+			enable-method = "psci";
+			clock-frequency = <1701000000>;
+			operating-points-v2 = <&cluster0_opp>;
+			cpu-idle-states = <&cpuoff_l &clusteroff_l &mcusysoff>;
+			dynamic-power-coefficient = <85>;
+			#cooling-cells = <2>;
+		};
+		cpu2: cpu@002 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a55";
+			reg = <0x0200>;
+			enable-method = "psci";
+			clock-frequency = <1701000000>;
+			operating-points-v2 = <&cluster0_opp>;
+			cpu-idle-states = <&cpuoff_l &clusteroff_l &mcusysoff>;
+			dynamic-power-coefficient = <85>;
+			#cooling-cells = <2>;
+		};
+
+		cpu3: cpu@003 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a55";
+			reg = <0x0300>;
+			enable-method = "psci";
+			clock-frequency = <1701000000>;
+			operating-points-v2 = <&cluster0_opp>;
+			cpu-idle-states = <&cpuoff_l &clusteroff_l &mcusysoff>;
+			dynamic-power-coefficient = <85>;
+			#cooling-cells = <2>;
+		};
+#elif CONFIG_MTK_CORE_NUM == 2
+		cpu0: cpu@0 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a55";
+			reg = <0x0000>;
+			enable-method = "psci";
+			clock-frequency = <1701000000>;
+			operating-points-v2 = <&cluster0_opp>;
+			cpu-idle-states = <&cpuoff_l &clusteroff_l &mcusysoff>;
+			dynamic-power-coefficient = <85>;
+			#cooling-cells = <2>;
+		};
+		cpu1: cpu@001 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a55";
+			reg = <0x0100>;
+			enable-method = "psci";
+			clock-frequency = <1701000000>;
+			operating-points-v2 = <&cluster0_opp>;
+			cpu-idle-states = <&cpuoff_l &clusteroff_l &mcusysoff>;
+			dynamic-power-coefficient = <85>;
+			#cooling-cells = <2>;
+		};
+#endif
+		cpu-map {
+			cluster0 {
+#if CONFIG_MTK_CORE_NUM == 4
+				core0 {
+					cpu = <&cpu0>;
+				};
+				core1 {
+					cpu = <&cpu1>;
+				};
+				core2 {
+					cpu = <&cpu2>;
+				};
+				core3 {
+					cpu = <&cpu3>;
+				};
+#elif CONFIG_MTK_CORE_NUM == 2
+				core0 {
+					cpu = <&cpu0>;
+				};
+				core1 {
+					cpu = <&cpu1>;
+				};
+#endif
+			};
+		};
+
+		idle-states {
+			entry-method = "arm,psci";
+			cpuoff_l: cpuoff_l {
+					compatible = "mediatek,idle-state";
+					arm,psci-suspend-param = <0x00010001>;
+					local-timer-stop;
+					entry-latency-us = <50>;
+					exit-latency-us = <100>;
+					min-residency-us = <1600>;
+			};
+			clusteroff_l: clusteroff_l {
+					compatible = "mediatek,idle-state";
+					arm,psci-suspend-param = <0x01010001>;
+					local-timer-stop;
+					entry-latency-us = <100>;
+					exit-latency-us = <250>;
+					min-residency-us = <2100>;
+			};
+			mcusysoff: mcusysoff {
+					compatible = "mediatek,idle-state";
+					arm,psci-suspend-param = <0x01010002>;
+					local-timer-stop;
+					entry-latency-us = <300>;
+					exit-latency-us = <1200>;
+					min-residency-us = <2600>;
+			};
+		};
+
+	};
+
+	pmu {
+		compatible = "arm,armv8-pmuv3";
+		interrupt-parent = <&gic>;
+		interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	dsu-pmu-0 {
+		compatible = "arm,dsu-pmu";
+		interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;
+#if CONFIG_MTK_CORE_NUM == 4
+		cpus = <&cpu0>, <&cpu1>, <&cpu2>, <&cpu3>;
+#elif CONFIG_MTK_CORE_NUM == 2
+		cpus = <&cpu0>, <&cpu1>;
+#endif
+	};
+
+	dvfsp: dvfsp@0011bc00 {
+                compatible = "mediatek,mcupm-dvfsp";
+                reg = <0 0x0011bc00 0 0x1400>;
+		nvmem = <&efuse>;
+                nvmem-names = "mtk_efuse";
+                nvmem-cells = <&efuse_segment>;
+                nvmem-cell-names = "efuse_segment_cell";
+        };
+
+        leakage@1100b000 {
+                compatible = "mediatek,leakage";
+                reg = <0 0x1100b000 0 0x1000>;
+                interrupts = <GIC_SPI 125 IRQ_TYPE_LEVEL_LOW>;
+                nvmem = <&efuse>;
+                nvmem-names = "mtk_efuse";
+                nvmem-cells = <&efuse_segment>;
+                nvmem-cell-names = "efuse_segment_cell";
+                n-domain = <7>;
+                domain = "LL", "CCI", "VCORE", "MODEM_NR", "VSRAM_CPULL", "VSRAM_MODEM", "VCORE_OFF";
+                LL = <750 30 0x224 0 0 1>;
+                CCI = <750 30 0x220 24 0 1>;
+                VCORE = <750 30 0x21C 16 0 1>;
+                MODEM_NR = <825 30 0x21C 8 0 1>;
+                VSRAM_CPULL = <750 30 0X228 16 0 1>;
+                VSRAM_MODEM = <825 30 0X22C 0 0 1>;
+                VCORE_OFF = <550 30 0x224 16 0 1>;
+        };
+
+	memory {
+		device_type = "memory";
+#if defined(CONFIG_MTK_MEMORY_SIZE) && (CONFIG_MTK_MEMORY_SIZE == 1024)
+		reg = <0 0x40000000 0 0x40000000>;
+#elif defined(CONFIG_MTK_MEMORY_SIZE) && (CONFIG_MTK_MEMORY_SIZE == 896)
+		reg = <0 0x40000000 0 0x38000000>;
+#elif defined(CONFIG_MTK_MEMORY_SIZE) && (CONFIG_MTK_MEMORY_SIZE == 768)
+		reg = <0 0x40000000 0 0x30000000>;
+#elif defined(CONFIG_MTK_MEMORY_SIZE) && (CONFIG_MTK_MEMORY_SIZE == 640)
+		reg = <0 0x40000000 0 0x28000000>;
+#else
+		reg = <0 0x40000000 0 0x20000000>;
+#endif
+	};
+
+	wed: wed@15010000 {
+                compatible = "mediatek,wed";
+                wed_num = <2>;
+                /* add this property for wed get the pci slot number. */
+                pci_slot_map = <0>, <1>;
+                reg = <0 0x15010000 0 0x1000>,
+                                <0 0x15011000 0 0x1000>;
+		interrupt-parent = <&gic>;
+                interrupts = <GIC_SPI 406 IRQ_TYPE_LEVEL_HIGH>,
+                                                <GIC_SPI 407 IRQ_TYPE_LEVEL_HIGH>;
+        };
+
+        wed2: wed2@15011000 {
+                compatible = "mediatek,wed2";
+                wed_num = <2>;
+                reg = <0 0x15010000 0 0x1000>,
+                                <0 0x15011000 0 0x1000>;
+		interrupt-parent = <&gic>;
+                interrupts = <GIC_SPI 406 IRQ_TYPE_LEVEL_HIGH>,
+                                                <GIC_SPI 407 IRQ_TYPE_LEVEL_HIGH>;
+        };
+
+        wdma: wdma@15102800 {
+                compatible = "mediatek,wed-wdma";
+                reg = <0 0x15102800 0 0x400>,
+                                <0 0x15102c00 0 0x400>;
+		interrupt-parent = <&gic>;
+                interrupts = <GIC_SPI 216 IRQ_TYPE_LEVEL_HIGH>,
+                                                <GIC_SPI 217 IRQ_TYPE_LEVEL_HIGH>,
+                                                <GIC_SPI 218 IRQ_TYPE_LEVEL_HIGH>,
+                                                <GIC_SPI 219 IRQ_TYPE_LEVEL_HIGH>,
+                                                <GIC_SPI 220 IRQ_TYPE_LEVEL_HIGH>,
+                                                <GIC_SPI 221 IRQ_TYPE_LEVEL_HIGH>;
+        };
+
+	ap2woccif: ap2woccif@151A9000 {
+                compatible = "mediatek,ap2woccif";
+                reg = <0 0x151a9000 0 0x1000>,
+                                <0 0x151ab000 0 0x1000>;
+		interrupt-parent = <&gic>;
+                interrupts = <GIC_SPI 414 IRQ_TYPE_LEVEL_HIGH>,
+                                                <GIC_SPI 415 IRQ_TYPE_LEVEL_HIGH>;
+        };
+
+        wocpu_sysram: wocpu@15180000 {
+                compatible = "mediatek,wocpu_sysram";
+                reg = <0 0x15180000 0 0x8000>;
+                shared = <1>;
+        };
+
+        wocpu_dlm: wocpu_dlm@1518E000 {
+                compatible = "mediatek,wocpu_dlm";
+                reg = <0 0x1518E000 0 0x2000>,
+				<0 0x15192000 0 0x2000>;
+
+		resets = <&ethsysrst 0>;
+		reset-names = "wocpu_rst";
+        };
+
+        cpu_boot: wocpu_boot@15194000 {
+                compatible = "mediatek,wocpu_boot";
+                reg = <0 0x15194000 0 0x1000>;
+        };
+
+        pcie_mirror: pcie_mirror@10201000 {
+                compatible = "mediatek,pcie-mirror";
+                reg = <0 0x10201000 0 0x1000>;
+        };
+
+	reserved_memory: reserved-memory {
+		#address-cells = <2>;
+		#size-cells = <2>;
+		ranges;
+
+		reserve-memory-atf {
+			compatible = "mediatek,reserve-memory-atf";
+			no-map;
+			reg = <0 0x42FB0000 0 0x1FA000>;
+		};
+
+		reserve-memory-mcupm_share {
+			compatible = "mediatek,reserve-memory-mcupm_share";
+			no-map;
+			status = "okay";
+#if defined(CONFIG_MTK_GMO_RAM_OPTIMIZE) || defined(CONFIG_MTK_MET_MEM_ALLOC)
+			reg = <0 0x42290000 0 0x210000>; /* 2M + 64K */
+#else
+			reg = <0 0x42290000 0 0x610000>; /* 6M + 64K */
+#endif
+		};
+
+		reserve-memory-medmcu_share {
+			compatible = "mediatek,reserve-memory-medmcu_share";
+			no-map;
+			alignment = <0 0x10000>;
+			reg = <0 0x60040000 0 0x328700>;
+		};
+		
+		reserve-memory-sspm_share {
+			compatible = "mediatek,reserve-memory-sspm_share";
+			no-map;
+			status = "okay";
+#if defined(CONFIG_MTK_GMO_RAM_OPTIMIZE) || defined(CONFIG_MTK_MET_MEM_ALLOC)
+			reg = <0 0x429A0000 0 0x210000>; /* 2M + 64K */
+#else
+			reg = <0 0x429A0000 0 0x610000>; /* 6M + 64K */
+#endif
+		};
+
+		gps_mem: gps-reserve-memory {
+			compatible = "mediatek,gps-reserve-memory";
+			no-map;
+			reg = <0 0x432ca000 0 0x60000>; /* 384KB */
+		};
+
+		reserved-memory-pstore  {
+			compatible = "ramoops";
+			reg = <0x0 0x4332a000 0x0 0xe0000>;
+			record-size = <0x1000>;
+			console-size = <0x40000>;
+			ftrace-size = <0x1000>;
+			pmsg-size = <0x10000>;
+		};
+		
+#if defined(CONFIG_MTK_AEE_FEATURE)
+		reserve-memory-emi_isu_buf {
+			compatible = "mediatek,emi_isu_buf";
+			no-map;
+			reg = <0 0x60800000 0 0x800000>;
+		};
+#endif
+
+		wocpu0_emi: wocpu0_emi@50000000 {
+                        compatible = "mediatek,wocpu0_emi";
+                        no-map;
+                        reg = <0 0x50000000 0 0x80000>;
+                        shared = <0>;
+                };
+
+                wocpu1_emi: wocpu1_emi@50040000 {
+                        compatible = "mediatek,wocpu1_emi";
+                        no-map;
+                        reg = <0 0x50080000 0 0x80000>;
+                        shared = <0>;
+                };
+
+                wocpu_data: wocpu_data@50100000 {
+                        compatible = "mediatek,wocpu_data";
+                        no-map;
+                        reg = <0 0x50100000 0 0x180000>;
+                        shared = <1>;
+                };
+
+#if defined(CONFIG_OPTEE)
+		reserve-memory-tee {
+			compatible = "mediatek,reserve-memory-tee";
+			no-map;
+			reg = <0 0x4e9a0000 0 0xb00000>;
+		};
+#endif
+	};
+
+	gic: interrupt-controller {
+		compatible = "arm,gic-v3";
+		#interrupt-cells = <3>;
+		#address-cells = <2>;
+		#size-cells = <2>;
+		#redistributor-regions = <1>;
+		interrupt-parent = <&gic>;
+		interrupt-controller;
+		reg = <0 0x0c000000 0 0x40000>, // distributor
+		      <0 0x0c040000 0 0x200000>; // redistributor
+		interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	clkao: clkao {
+		compatible = "simple-bus";
+	};
+
+	clocks {
+		clk_null: clk_null {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <0>;
+		};
+
+		clk10m: clk10m {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <10000000>;
+		};
+
+		clk26m: clk26m {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <26000000>;
+		};
+
+		clk12m: clk12m {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <12000000>;
+		};
+
+		clk32k: clk32k {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <32000>;
+		};
+
+		clk13m: clk13m {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <13000000>;
+		};
+
+		ulposc: ulposc {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <260000000>;
+		};
+	};
+
+	topckgen_clk: syscon@10000000 {
+		compatible = "mediatek,mt6890-topckgen", "syscon";
+		reg = <0 0x10000000 0 0x1000>;
+		#clock-cells = <1>;
+	};
+
+	apmixedsys_clk: syscon@1000c000 {
+		compatible = "mediatek,mt6890-apmixedsys", "syscon";
+		reg = <0 0x1000c000 0 0xe00>;
+		#clock-cells=<1>;
+	};
+
+	dbgsys_dem_clk: syscon@0d0a0000 {
+		compatible = "mediatek,mt6890-dbgsys_dem", "syscon";
+		reg = <0 0x0d0a0000 0 0x1000>;
+		#clock-cells = <1>;
+	};
+
+	infracfg_ao_clk: syscon@10001000 {
+		compatible = "mediatek,mt6890-infracfg_ao", "syscon";
+		reg = <0 0x10001000 0 0x1000>;
+		#clock-cells = <1>;
+	};
+
+	pericfg_clk: syscon@10003000 {
+		compatible = "mediatek,mt6890-pericfg", "syscon";
+		reg = <0 0x10003000 0 0x1000>;
+		#clock-cells = <1>;
+	};
+
+	scpsys: power-controller@10006000 {
+		compatible = "mediatek,mt6890-scpsys", "syscon";
+		reg = <0 0x10006000 0 0x1000>;
+		#power-domain-cells = <1>;
+		infracfg = <&infracfg_ao_clk>;
+		clocks = <&topckgen_clk CLK_TOP_MM_SEL>,
+			<&topckgen_clk CLK_TOP_MFG_SEL>,
+			<&topckgen_clk CLK_TOP_MEDSYS_SEL>,
+			<&topckgen_clk CLK_TOP_NETSYS_SEL>,
+			<&topckgen_clk CLK_TOP_NETSYS_500M_SEL>,
+			<&topckgen_clk CLK_TOP_NETSYS_MED_MCU_SEL>,
+			<&topckgen_clk CLK_TOP_NETSYS_WED_MCU_SEL>,
+			<&topckgen_clk CLK_TOP_NETSYS_2X_SEL>,
+			<&topckgen_clk CLK_TOP_SGMII_SEL>,
+			<&topckgen_clk CLK_TOP_SGMII_SBUS_SEL>,
+			<&topckgen_clk CLK_TOP_SNPS_ETH_312P5M_SEL>,
+			<&topckgen_clk CLK_TOP_SNPS_ETH_250M_SEL>,
+			<&topckgen_clk CLK_TOP_SNPS_ETH_62P4M_PTP_SEL>,
+			<&topckgen_clk CLK_TOP_SNPS_ETH_50M_RMII_SEL>,
+			<&topckgen_clk CLK_TOP_EIP97_SEL>,
+			<&infracfg_ao_clk CLK_IFRAO_AUDIO_26M_BCLK>,
+			<&topckgen_clk CLK_TOP_HSM_ARC_SEL>;
+		clock-names = "mm",
+			"mfg",
+			"medsys_sel",
+			"netsys_sel",
+			"netsys_500m_sel",
+			"netsys_med_mcu_sel",
+			"netsys_wed_mcu_sel",
+			"netsys_2x_sel",
+			"sgmii_sel",
+			"sgmii_sbus_sel",
+			"snps_eth_312p5m_sel",
+ 			"snps_eth_250m_sel",
+			"snps_ptp_sel",
+			"snps_rmii_sel",
+			"eip97_sel",
+			"audio",
+			"hsm_sel";
+		/*status="disabled";*/
+	};
+
+	gce_clk: syscon@10228000 {
+		compatible = "mediatek,mt6890-gce", "syscon";
+		reg = <0 0x10228000 0 0x1000>;
+		#clock-cells = <1>;
+	};
+
+	audsys_clk: syscon@11210000 {
+		compatible = "mediatek,mt6890-audsys", "syscon";
+		reg = <0 0x11210000 0 0x1000>;
+		#clock-cells = <1>;
+	};
+
+	imp_iic_wrap_e_clk: syscon@11c46000 {
+		compatible = "mediatek,mt6890-imp_iic_wrap_e", "syscon";
+		reg = <0 0x11c46000 0 0x1000>;
+		#clock-cells = <1>;
+	};
+
+	mfgsys_clk: syscon@13fbf000 {
+		compatible = "mediatek,mt6890-mfgsys", "syscon";
+		reg = <0 0x13fbf000 0 0x1000>;
+		#clock-cells = <1>;
+	};
+
+	mmsys_config_clk: syson@14000000 {
+		compatible = "mediatek,mt6890-mmsys_config", "syscon";
+		reg = <0 0x14000000 0 0x1000>;
+		#clock-cells = <1>;
+	};
+
+	mtk_lpm: mtk_lpm {
+		compatible = "mediatek,mtk-lpm";
+		#address-cells = <2>;
+		#size-cells = <2>;
+		ranges;
+		suspend-method = "system";
+		irq-remain = <&edge_keypad &edge_mdwdt>;
+		resource-ctrl = <&bus26m &infra &syspll>,
+				<&dram_s0 &dram_s1>;
+		constraints = <&rc_bus26m &rc_syspll &rc_dram>;
+
+		lpm_sysram: lpm_sysram@0011b500 {
+			compatible = "mediatek,lpm-sysram";
+			reg = <0 0x0011b500 0 0x300>;
+		};
+
+		irq-remain-list {
+			edge_keypad: edge_keypad {
+				target = <&keypad>;
+				value = <1 0 0 0x4>;
+			};
+			edge_mdwdt: edge_mdwdt {
+				target = <&mddriver>;
+				value = <1 0 0 0x02000000>;
+			};
+		};
+		resource-ctrl-list {
+			bus26m: bus26m {
+				id = <0x00000000>;
+				value = <0>;
+			};
+			infra: infra {
+				id = <0x00000001>;
+				value = <0>;
+			};
+			syspll: syspll {
+				id = <0x00000002>;
+				value = <0>;
+			};
+			dram_s0: dram_s0 {
+				id = <0x00000003>;
+				value = <0>;
+			};
+			dram_s1: dram_s1 {
+				id = <0x00000004>;
+				value = <0>;
+			};
+		};
+		constraint-list {
+			rc_bus26m: rc_bus26m {
+				id = <0x00000000>;
+				value = <1>;
+			};
+			rc_syspll: rc_syspll {
+				id = <0x00000001>;
+				value = <1>;
+			};
+			rc_dram: rc_dram {
+				id = <0x00000002>;
+				value = <1>;
+			};
+		};
+	};
+
+	cpupm_sysram: cpupm-sysram@0011b000 {
+		compatible = "mediatek,cpupm-sysram";
+		reg = <0 0x0011b000 0 0x500>;
+	};
+
+	mcusys_ctrl: mcusys-ctrl@0c53a000 {
+			compatible = "mediatek,mcusys-ctrl";
+			reg = <0 0x0c53a000 0 0x1000>;
+	};
+
+	tboard_thermistor1: thermal-ntc1 {
+		compatible = "mediatek,mt6880-board-ntc";
+		#thermal-sensor-cells = <0>;
+		reg = <0 0x1001C0D4 0 0x4>; /* TIA DATA T0 */
+		pmic_auxadc = <&pmic_auxadc>;
+		temperature-lookup-table = <
+			(-40000) 4397119
+			(-39000) 4092874
+			(-38000) 3811717
+			(-37000) 3551749
+			(-36000) 3311236
+			(-35000) 3088599
+			(-34000) 2882396
+			(-33000) 2691310
+			(-32000) 2514137
+			(-31000) 2349778
+			(-30000) 2197225
+			(-29000) 2055558
+			(-28000) 1923932
+			(-27000) 1801573
+			(-26000) 1687773
+			(-25000) 1581881
+			(-24000) 1483100
+			(-23000) 1391113
+			(-22000) 1305413
+			(-21000) 1225531
+			(-20000) 1151037
+			(-19000) 1081535
+			(-18000) 1016661
+			(-17000) 956080
+			(-16000) 899481
+			(-15000) 846579
+			(-14000) 797111
+			(-13000) 750834
+			(-12000) 707524
+			(-11000) 666972
+			(-10000) 628988
+			(-9000) 593342
+			(-8000) 559931
+			(-7000) 528602
+			(-6000) 499212
+			(-5000) 471632
+			(-4000) 445772
+			(-3000) 421480
+			(-2000) 398652
+			(-1000) 377193
+			0 357012
+			1000 338006
+			2000 320122
+			3000 303287
+			4000 287434
+			5000 272500
+			6000 258426
+			7000 245160
+			8000 232649
+			9000 220847
+			10000 209710
+			11000 199196
+			12000 189268
+			13000 179890
+			14000 171027
+			15000 162651
+			16000 154726
+			17000 147232
+			18000 140142
+			19000 133432
+			20000 127080
+			21000 121066
+			22000 115368
+			23000 109970
+			24000 104852
+			25000 100000
+			26000 95398
+			27000 91032
+			28000 86889
+			29000 82956
+			30000 79222
+			31000 75675
+			32000 72306
+			33000 69104
+			34000 66061
+			35000 63167
+			36000 60415
+			37000 57797
+			38000 55306
+			39000 52934
+			40000 50677
+			41000 48528
+			42000 46482
+			43000 44533
+			44000 42675
+			45000 40904
+			46000 39213
+			47000 37601
+			48000 36063
+			49000 34595
+			50000 33195
+			51000 31859
+			52000 30584
+			53000 29366
+			54000 28203
+			55000 27091
+			56000 26028
+			57000 25013
+			58000 24042
+			59000 23113
+			60000 22224
+			61000 21374
+			62000 20560
+			63000 19782
+			64000 19036
+			65000 18322
+			66000 17640
+			67000 16986
+			68000 16360
+			69000 15759
+			70000 15184
+			71000 14631
+			72000 14100
+			73000 13591
+			74000 13103
+			75000 12635
+			76000 12187
+			77000 11756
+			78000 11343
+			79000 10946
+			80000 10565
+			81000 10199
+			82000 9847
+			83000 9509
+			84000 9184
+			85000 8872
+			86000 8572
+			87000 8283
+			88000 8005
+			89000 7738
+			90000 7481
+			91000 7234
+			92000 6997
+			93000 6769
+			94000 6548
+			95000 6337
+			96000 6132
+			97000 5934
+			98000 5744
+			99000 5561
+			100000 5384
+			101000 5214
+			102000 5051
+			103000 4893
+			104000 4741
+			105000 4594
+			106000 4453
+			107000 4316
+			108000 4184
+			109000 4057
+			110000 3934
+			111000 3816
+			112000 3701
+			113000 3591
+			114000 3484
+			115000 3380
+			116000 3281
+			117000 3185
+			118000 3093
+			119000 3003
+			120000 2916
+			121000 2832
+			122000 2751
+			123000 2672
+			124000 2596
+			125000 2522>;
+	};
+
+	tboard_thermistor2: thermal-ntc2 {
+		compatible = "mediatek,mt6880-board-ntc";
+		#thermal-sensor-cells = <0>;
+		reg = <0 0x1001C0D8 0 0x4>; /* TIA DATA T1 */
+		pmic_auxadc = <&pmic_auxadc>;
+		temperature-lookup-table = <
+			(-40000) 4397119
+			(-39000) 4092874
+			(-38000) 3811717
+			(-37000) 3551749
+			(-36000) 3311236
+			(-35000) 3088599
+			(-34000) 2882396
+			(-33000) 2691310
+			(-32000) 2514137
+			(-31000) 2349778
+			(-30000) 2197225
+			(-29000) 2055558
+			(-28000) 1923932
+			(-27000) 1801573
+			(-26000) 1687773
+			(-25000) 1581881
+			(-24000) 1483100
+			(-23000) 1391113
+			(-22000) 1305413
+			(-21000) 1225531
+			(-20000) 1151037
+			(-19000) 1081535
+			(-18000) 1016661
+			(-17000) 956080
+			(-16000) 899481
+			(-15000) 846579
+			(-14000) 797111
+			(-13000) 750834
+			(-12000) 707524
+			(-11000) 666972
+			(-10000) 628988
+			(-9000) 593342
+			(-8000) 559931
+			(-7000) 528602
+			(-6000) 499212
+			(-5000) 471632
+			(-4000) 445772
+			(-3000) 421480
+			(-2000) 398652
+			(-1000) 377193
+			0 357012
+			1000 338006
+			2000 320122
+			3000 303287
+			4000 287434
+			5000 272500
+			6000 258426
+			7000 245160
+			8000 232649
+			9000 220847
+			10000 209710
+			11000 199196
+			12000 189268
+			13000 179890
+			14000 171027
+			15000 162651
+			16000 154726
+			17000 147232
+			18000 140142
+			19000 133432
+			20000 127080
+			21000 121066
+			22000 115368
+			23000 109970
+			24000 104852
+			25000 100000
+			26000 95398
+			27000 91032
+			28000 86889
+			29000 82956
+			30000 79222
+			31000 75675
+			32000 72306
+			33000 69104
+			34000 66061
+			35000 63167
+			36000 60415
+			37000 57797
+			38000 55306
+			39000 52934
+			40000 50677
+			41000 48528
+			42000 46482
+			43000 44533
+			44000 42675
+			45000 40904
+			46000 39213
+			47000 37601
+			48000 36063
+			49000 34595
+			50000 33195
+			51000 31859
+			52000 30584
+			53000 29366
+			54000 28203
+			55000 27091
+			56000 26028
+			57000 25013
+			58000 24042
+			59000 23113
+			60000 22224
+			61000 21374
+			62000 20560
+			63000 19782
+			64000 19036
+			65000 18322
+			66000 17640
+			67000 16986
+			68000 16360
+			69000 15759
+			70000 15184
+			71000 14631
+			72000 14100
+			73000 13591
+			74000 13103
+			75000 12635
+			76000 12187
+			77000 11756
+			78000 11343
+			79000 10946
+			80000 10565
+			81000 10199
+			82000 9847
+			83000 9509
+			84000 9184
+			85000 8872
+			86000 8572
+			87000 8283
+			88000 8005
+			89000 7738
+			90000 7481
+			91000 7234
+			92000 6997
+			93000 6769
+			94000 6548
+			95000 6337
+			96000 6132
+			97000 5934
+			98000 5744
+			99000 5561
+			100000 5384
+			101000 5214
+			102000 5051
+			103000 4893
+			104000 4741
+			105000 4594
+			106000 4453
+			107000 4316
+			108000 4184
+			109000 4057
+			110000 3934
+			111000 3816
+			112000 3701
+			113000 3591
+			114000 3484
+			115000 3380
+			116000 3281
+			117000 3185
+			118000 3093
+			119000 3003
+			120000 2916
+			121000 2832
+			122000 2751
+			123000 2672
+			124000 2596
+			125000 2522>;
+	};
+
+	tboard_thermistor3: thermal-ntc3 {
+		compatible = "mediatek,mt6880-board-ntc";
+		#thermal-sensor-cells = <0>;
+		reg = <0 0x1001C0DC 0 0x4>; /* TIA DATA T2 */
+		pmic_auxadc = <&pmic_auxadc>;
+		temperature-lookup-table = <
+			(-40000) 4397119
+			(-39000) 4092874
+			(-38000) 3811717
+			(-37000) 3551749
+			(-36000) 3311236
+			(-35000) 3088599
+			(-34000) 2882396
+			(-33000) 2691310
+			(-32000) 2514137
+			(-31000) 2349778
+			(-30000) 2197225
+			(-29000) 2055558
+			(-28000) 1923932
+			(-27000) 1801573
+			(-26000) 1687773
+			(-25000) 1581881
+			(-24000) 1483100
+			(-23000) 1391113
+			(-22000) 1305413
+			(-21000) 1225531
+			(-20000) 1151037
+			(-19000) 1081535
+			(-18000) 1016661
+			(-17000) 956080
+			(-16000) 899481
+			(-15000) 846579
+			(-14000) 797111
+			(-13000) 750834
+			(-12000) 707524
+			(-11000) 666972
+			(-10000) 628988
+			(-9000) 593342
+			(-8000) 559931
+			(-7000) 528602
+			(-6000) 499212
+			(-5000) 471632
+			(-4000) 445772
+			(-3000) 421480
+			(-2000) 398652
+			(-1000) 377193
+			0 357012
+			1000 338006
+			2000 320122
+			3000 303287
+			4000 287434
+			5000 272500
+			6000 258426
+			7000 245160
+			8000 232649
+			9000 220847
+			10000 209710
+			11000 199196
+			12000 189268
+			13000 179890
+			14000 171027
+			15000 162651
+			16000 154726
+			17000 147232
+			18000 140142
+			19000 133432
+			20000 127080
+			21000 121066
+			22000 115368
+			23000 109970
+			24000 104852
+			25000 100000
+			26000 95398
+			27000 91032
+			28000 86889
+			29000 82956
+			30000 79222
+			31000 75675
+			32000 72306
+			33000 69104
+			34000 66061
+			35000 63167
+			36000 60415
+			37000 57797
+			38000 55306
+			39000 52934
+			40000 50677
+			41000 48528
+			42000 46482
+			43000 44533
+			44000 42675
+			45000 40904
+			46000 39213
+			47000 37601
+			48000 36063
+			49000 34595
+			50000 33195
+			51000 31859
+			52000 30584
+			53000 29366
+			54000 28203
+			55000 27091
+			56000 26028
+			57000 25013
+			58000 24042
+			59000 23113
+			60000 22224
+			61000 21374
+			62000 20560
+			63000 19782
+			64000 19036
+			65000 18322
+			66000 17640
+			67000 16986
+			68000 16360
+			69000 15759
+			70000 15184
+			71000 14631
+			72000 14100
+			73000 13591
+			74000 13103
+			75000 12635
+			76000 12187
+			77000 11756
+			78000 11343
+			79000 10946
+			80000 10565
+			81000 10199
+			82000 9847
+			83000 9509
+			84000 9184
+			85000 8872
+			86000 8572
+			87000 8283
+			88000 8005
+			89000 7738
+			90000 7481
+			91000 7234
+			92000 6997
+			93000 6769
+			94000 6548
+			95000 6337
+			96000 6132
+			97000 5934
+			98000 5744
+			99000 5561
+			100000 5384
+			101000 5214
+			102000 5051
+			103000 4893
+			104000 4741
+			105000 4594
+			106000 4453
+			107000 4316
+			108000 4184
+			109000 4057
+			110000 3934
+			111000 3816
+			112000 3701
+			113000 3591
+			114000 3484
+			115000 3380
+			116000 3281
+			117000 3185
+			118000 3093
+			119000 3003
+			120000 2916
+			121000 2832
+			122000 2751
+			123000 2672
+			124000 2596
+			125000 2522>;
+	};
+
+	tboard_thermistor4: thermal-ntc4 {
+		compatible = "mediatek,mt6880-board-ntc";
+		#thermal-sensor-cells = <0>;
+		reg = <0 0x1001C0E0 0 0x4>; /* TIA DATA T3 */
+		pmic_auxadc = <&pmic_auxadc>;
+		temperature-lookup-table = <
+			(-40000) 4397119
+			(-39000) 4092874
+			(-38000) 3811717
+			(-37000) 3551749
+			(-36000) 3311236
+			(-35000) 3088599
+			(-34000) 2882396
+			(-33000) 2691310
+			(-32000) 2514137
+			(-31000) 2349778
+			(-30000) 2197225
+			(-29000) 2055558
+			(-28000) 1923932
+			(-27000) 1801573
+			(-26000) 1687773
+			(-25000) 1581881
+			(-24000) 1483100
+			(-23000) 1391113
+			(-22000) 1305413
+			(-21000) 1225531
+			(-20000) 1151037
+			(-19000) 1081535
+			(-18000) 1016661
+			(-17000) 956080
+			(-16000) 899481
+			(-15000) 846579
+			(-14000) 797111
+			(-13000) 750834
+			(-12000) 707524
+			(-11000) 666972
+			(-10000) 628988
+			(-9000) 593342
+			(-8000) 559931
+			(-7000) 528602
+			(-6000) 499212
+			(-5000) 471632
+			(-4000) 445772
+			(-3000) 421480
+			(-2000) 398652
+			(-1000) 377193
+			0 357012
+			1000 338006
+			2000 320122
+			3000 303287
+			4000 287434
+			5000 272500
+			6000 258426
+			7000 245160
+			8000 232649
+			9000 220847
+			10000 209710
+			11000 199196
+			12000 189268
+			13000 179890
+			14000 171027
+			15000 162651
+			16000 154726
+			17000 147232
+			18000 140142
+			19000 133432
+			20000 127080
+			21000 121066
+			22000 115368
+			23000 109970
+			24000 104852
+			25000 100000
+			26000 95398
+			27000 91032
+			28000 86889
+			29000 82956
+			30000 79222
+			31000 75675
+			32000 72306
+			33000 69104
+			34000 66061
+			35000 63167
+			36000 60415
+			37000 57797
+			38000 55306
+			39000 52934
+			40000 50677
+			41000 48528
+			42000 46482
+			43000 44533
+			44000 42675
+			45000 40904
+			46000 39213
+			47000 37601
+			48000 36063
+			49000 34595
+			50000 33195
+			51000 31859
+			52000 30584
+			53000 29366
+			54000 28203
+			55000 27091
+			56000 26028
+			57000 25013
+			58000 24042
+			59000 23113
+			60000 22224
+			61000 21374
+			62000 20560
+			63000 19782
+			64000 19036
+			65000 18322
+			66000 17640
+			67000 16986
+			68000 16360
+			69000 15759
+			70000 15184
+			71000 14631
+			72000 14100
+			73000 13591
+			74000 13103
+			75000 12635
+			76000 12187
+			77000 11756
+			78000 11343
+			79000 10946
+			80000 10565
+			81000 10199
+			82000 9847
+			83000 9509
+			84000 9184
+			85000 8872
+			86000 8572
+			87000 8283
+			88000 8005
+			89000 7738
+			90000 7481
+			91000 7234
+			92000 6997
+			93000 6769
+			94000 6548
+			95000 6337
+			96000 6132
+			97000 5934
+			98000 5744
+			99000 5561
+			100000 5384
+			101000 5214
+			102000 5051
+			103000 4893
+			104000 4741
+			105000 4594
+			106000 4453
+			107000 4316
+			108000 4184
+			109000 4057
+			110000 3934
+			111000 3816
+			112000 3701
+			113000 3591
+			114000 3484
+			115000 3380
+			116000 3281
+			117000 3185
+			118000 3093
+			119000 3003
+			120000 2916
+			121000 2832
+			122000 2751
+			123000 2672
+			124000 2596
+			125000 2522>;
+	};
+
+	trm: thermal_risk_monitor {
+		compatible = "mediatek,mt6880-trm";
+	};
+
+	pmic_temp: pmic_temp {
+		compatible = "mediatek,mt6330-pmic-temp";
+		io-channels =
+			<&pmic_auxadc AUXADC_CHIP_TEMP>;
+		io-channel-names =
+			"pmic_chip_temp";
+
+		#thermal-sensor-cells = <0>;
+		nvmem-cells = <&thermal_efuse_data1>;
+		nvmem-cell-names = "t_e_data1@6c";
+		pmic_temp,cali_factor = <1681>;
+		pmic_temp,iio_chan = <0>;
+	};
+
+	pmic_vcore: pmic_vcore {
+		compatible = "mediatek,mt6330-pmic-temp";
+		io-channels =
+			<&pmic_auxadc AUXADC_VCORE_TEMP>;
+		io-channel-names =
+			"pmic_buck1_temp";
+
+		#thermal-sensor-cells = <0>;
+		nvmem-cells = <&thermal_efuse_data1>;
+		nvmem-cell-names = "t_e_data1@6c";
+		pmic_temp,cali_factor = <1863>;
+		pmic_temp,iio_chan = <1>;
+	};
+
+	pmic_vproc: pmic_vproc {
+		compatible = "mediatek,mt6330-pmic-temp";
+		io-channels =
+			<&pmic_auxadc AUXADC_VPROC_TEMP>;
+		io-channel-names =
+			"pmic_buck2_temp";
+		#thermal-sensor-cells = <0>;
+		nvmem-cells = <&thermal_efuse_data1>;
+		nvmem-cell-names = "t_e_data1@6c";
+		pmic_temp,cali_factor = <1863>;
+		pmic_temp,iio_chan = <2>;
+	};
+
+	pmic_vgpu: pmic_vgpu {
+		compatible = "mediatek,mt6330-pmic-temp";
+		io-channels =
+			<&pmic_auxadc AUXADC_VGPU_TEMP>;
+		io-channel-names =
+			"pmic_buck3_temp";
+		#thermal-sensor-cells = <0>;
+		nvmem-cells = <&thermal_efuse_data1>;
+		nvmem-cell-names = "t_e_data1@6c";
+		pmic_temp,cali_factor = <1863>;
+		pmic_temp,iio_chan = <3>;
+	};
+
+	md_rf_ic: md-rf-ic {
+		compatible = "mediatek,md-rf";
+		#thermal-sensor-cells = <0>;
+	};
+
+	md_cooler_mutt: mutt {
+		compatible = "mediatek,mt6297-md-cooler-mutt";
+		mutt_pa1: mutt-pa1 {
+			id = <0>;
+			#cooling-cells = <2>;
+		};
+		mutt_pa1_no_ims: mutt-pa1-no-ims {
+			id = <0>;
+			#cooling-cells = <2>;
+		};
+		mutt_pa2: mutt-pa2 {
+			id = <1>;
+			#cooling-cells = <2>;
+		};
+		mutt_pa2_no_ims: mutt-pa2-no-ims {
+			id = <1>;
+			#cooling-cells = <2>;
+		};
+	};
+	md_cooler_tx_pwr: tx-pwr {
+		compatible = "mediatek,md-cooler-tx-pwr";
+		tx_pwr_pa1: tx-pwr-pa1 {
+			id = <0>;
+			#cooling-cells = <2>;
+		};
+		tx_pwr_pa2: tx-pwr-pa2 {
+			id = <1>;
+			#cooling-cells = <2>;
+		};
+	};
+	md_cooler_scg_off: scg-off {
+		compatible = "mediatek,md-cooler-scg-off";
+		scg_off_pa2: scg-off-pa2 {
+			id = <1>;
+			#cooling-cells = <2>;
+		};
+	};
+
+	thermal-zones {
+		soc_max {
+			polling-delay = <100>; /* milliseconds */
+			polling-delay-passive = <50>; /* milliseconds */
+			thermal-sensors = <&lvts 0>;
+			sustainable-power = <1700>;
+
+			trips {
+				threshold: trip-point@0 {
+					temperature = <85000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				ipa_target: trip-point@1 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+
+				soc_max_crit: soc_max_crit@0 {
+					temperature = <115000>;
+					hysteresis = <2000>;
+					type = "critical";
+				};
+			};
+
+			cooling-maps {
+				map0 {
+					trip = <&ipa_target>;
+					cooling-device = <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+					contribution = <1024>;
+				};
+
+				map1 {
+					trip = <&ipa_target>;
+					cooling-device = <&mali THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+					contribution = <1024>;
+				};
+			};
+		};
+
+		cpu_little0 {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 1>;
+		};
+
+		cpu_little1 {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 2>;
+		};
+
+		cpu_little2 {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 3>;
+		};
+
+		cpu_little3 {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 4>;
+		};
+
+		gpu0 {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 5>;
+		};
+
+		gpu1 {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 6>;
+		};
+
+		dramc {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 7>;
+		};
+
+		mmsys {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 8>;
+		};
+
+		md_5g {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 9>;
+		};
+
+		md_4g {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 10>;
+		};
+
+		md_3g {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&lvts 11>;
+		};
+
+		soc_dram_ntc {
+			polling-delay = <1000>; /* milliseconds */
+			polling-delay-passive = <1000>; /* milliseconds */
+			thermal-sensors = <&tboard_thermistor1>;
+
+			trips {
+				soc_dram_ntc_crit: soc_dram_ntc_crit@0 {
+					temperature = <115000>;
+					hysteresis = <2000>;
+					type = "critical";
+				};
+			};
+		};
+
+		nrpa_ntc {
+			polling-delay = <1000>; /* milliseconds */
+			polling-delay-passive = <1000>; /* milliseconds */
+			thermal-sensors = <&tboard_thermistor2>;
+
+			trips {
+				/*nrpa_ntc_target: nrpa_ntc_trip@0 {
+					temperature = <82000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+				*/
+				nrpa_ntc_tx_pwr: nrpa_ntc_trip@0 {
+					temperature = <85000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+				/*nrpa_ntc_no_ims: nrpa_ntc_trip@2 {
+					temperature = <90000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+				*/
+				nrpa_ntc_scg_off: nrpa_ntc_trip@1 {
+					temperature = <95000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+				nrpa_ntc_crit: nrpa_ntc_trip@2 {
+					temperature = <115000>;
+					hysteresis = <2000>;
+					type = "critical";
+				};
+			};
+			cooling-maps {
+				/*map0 {
+					trip = <&nrpa_ntc_target>;
+					cooling-device = <&mutt_pa2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+				};
+				*/
+				map0 {
+					trip = <&nrpa_ntc_tx_pwr>;
+					cooling-device = <&tx_pwr_pa2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+				};	
+				/*map2 {
+					trip = <&nrpa_ntc_no_ims>;
+					cooling-device = <&mutt_pa2_no_ims THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+				};
+				*/
+				map1 {
+				trip = <&nrpa_ntc_scg_off>;
+				cooling-device = <&scg_off_pa2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+				};			
+			};
+		};
+
+		ltepa_ntc {
+			polling-delay = <1000>; /* milliseconds */
+			polling-delay-passive = <1000>; /* milliseconds */
+			thermal-sensors = <&tboard_thermistor3>;
+
+			trips {
+				/*ltepa_ntc_target: ltepa_ntc_trip@0 {
+					temperature = <82000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+				*/
+				ltepa_ntc_tx_pwr: ltepa_ntc_trip@1 {
+					temperature = <85000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+				/*ltepa_ntc_no_ims: ltepa_ntc_trip@2 {
+					temperature = <90000>;
+					hysteresis = <2000>;
+					type = "passive";
+				};
+				*/
+				ltepa_ntc_crit: ltepa_ntc_trip@3 {
+					temperature = <115000>;
+					hysteresis = <2000>;
+					type = "critical";
+				};
+			};
+			cooling-maps {
+				/*map0 {
+					trip = <&ltepa_ntc_target>;
+					cooling-device = <&mutt_pa1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+				};
+				*/
+				map1 {
+					trip = <&ltepa_ntc_tx_pwr>;
+					cooling-device = <&tx_pwr_pa1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+				};
+				/*map2 {
+					trip = <&ltepa_ntc_no_ims>;
+					cooling-device = <&mutt_pa1_no_ims THERMAL_NO_LIMIT THERMAL_NO_LIMIT>;
+				};
+				*/
+			};
+		};
+
+		rf_ntc {
+			polling-delay = <1000>; /* milliseconds */
+			polling-delay-passive = <1000>; /* milliseconds */
+			thermal-sensors = <&tboard_thermistor4>;
+
+			trips {
+				rf_ntc_crit: rf_ntc_crit@0 {
+					temperature = <115000>;
+					hysteresis = <2000>;
+					type = "critical";
+				};
+			};
+		};
+
+		pmic {
+			polling-delay = <1000>; /* milliseconds */
+			polling-delay-passive = <1000>; /* milliseconds */
+			thermal-sensors = <&pmic_temp>;
+
+			trips {
+				pmic_temp_crit: pmic_temp_crit@0 {
+					temperature = <125000>;
+					hysteresis = <2000>;
+					type = "critical";
+				};
+			};
+		};
+		pmic_vcore {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&pmic_vcore>;
+		};
+		pmic_vproc {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&pmic_vproc>;
+		};
+		pmic_vgpu {
+			polling-delay = <0>; /* milliseconds */
+			polling-delay-passive = <0>; /* milliseconds */
+			thermal-sensors = <&pmic_vgpu>;
+		};
+
+		md_rf {
+			polling-delay = <1000>; /* milliseconds */
+			polling-delay-passive = <1000>; /* milliseconds */
+			thermal-sensors = <&md_rf_ic>;
+
+			trips {
+				md_rf_crit: md_rf_crit@0 {
+					temperature = <117000>;
+					hysteresis = <2000>;
+					type = "critical";
+				};
+			};
+		};
+		conn_gps {
+			polling-delay = <1000>; /* milliseconds */
+			polling-delay-passive = <1000>; /* milliseconds */
+			thermal-sensors = <&consys>;
+
+			trips {
+				consys_max_crit: consys_max_crit@0 {
+					temperature = <117000>;
+					hysteresis = <2000>;
+					type = "critical";
+				};
+			};
+		};
+	};
+
+	chipid@08000000 {
+		compatible = "mediatek,chipid";
+		reg = <0 0x08000000 0 0x0004>,
+		      <0 0x08000004 0 0x0004>,
+		      <0 0x08000008 0 0x0004>,
+		      <0 0x0800000c 0 0x0004>;
+	};
+
+	dbgtop@1000d000 {
+		compatible = "mediatek,dbgtop";
+		reg = <0 0x1000d000 0 0x1000>;
+	};
+
+	mcupm@0C540000 {
+		compatible = "mediatek,mcupm";
+		reg =<0 0x0C540000 0 0x22000>,
+
+			<0 0x0c55fb00 0 0xa0>,
+			<0 0x0c562004 0 0x4>,
+			<0 0x0c562018 0 0x4>,
+			<0 0x0c562000 0 0x4>,
+			<0 0x0c562010 0 0x4>,
+
+			<0 0x0c55fba0 0 0xa0>,
+			<0 0x0c562004 0 0x4>,
+			<0 0x0c562018 0 0x4>,
+			<0 0x0c562000 0 0x4>,
+			<0 0x0c562010 0 0x4>,
+
+			<0 0x0c55fc40 0 0xa0>,
+			<0 0x0c562004 0 0x4>,
+			<0 0x0c562018 0 0x4>,
+			<0 0x0c562000 0 0x4>,
+			<0 0x0c562010 0 0x4>,
+
+			<0 0x0c55fce0 0 0xa0>,
+			<0 0x0c562004 0 0x4>,
+			<0 0x0c562018 0 0x4>,
+			<0 0x0c562000 0 0x4>,
+			<0 0x0c562010 0 0x4>,
+
+			<0 0x0c55fd80 0 0xa0>,
+			<0 0x0c562004 0 0x4>,
+			<0 0x0c562018 0 0x4>,
+			<0 0x0c562000 0 0x4>,
+			<0 0x0c562010 0 0x4>,
+
+			<0 0x0c55fe20 0 0xa0>,
+			<0 0x0c562004 0 0x4>,
+			<0 0x0c562018 0 0x4>,
+			<0 0x0c562000 0 0x4>,
+			<0 0x0c562010 0 0x4>,
+
+			<0 0x0c55fec0 0 0xa0>,
+			<0 0x0c562004 0 0x4>,
+			<0 0x0c562018 0 0x4>,
+			<0 0x0c562000 0 0x4>,
+			<0 0x0c562010 0 0x4>,
+
+			<0 0x0c55ff60 0 0xa0>,
+			<0 0x0c562004 0 0x4>,
+			<0 0x0c562018 0 0x4>,
+			<0 0x0c562000 0 0x4>,
+			<0 0x0c562010 0 0x4>;
+
+		reg-names = "mcupm_base",
+
+			"mbox0_base",
+			"mbox0_set",
+			"mbox0_clr",
+			"mbox0_send",
+			"mbox0_recv",
+
+			"mbox1_base",
+			"mbox1_set",
+			"mbox1_clr",
+			"mbox1_send",
+			"mbox1_recv",
+
+			"mbox2_base",
+			"mbox2_set",
+			"mbox2_clr",
+			"mbox2_send",
+			"mbox2_recv",
+
+			"mbox3_base",
+			"mbox3_set",
+			"mbox3_clr",
+			"mbox3_send",
+			"mbox3_recv",
+
+			"mbox4_base",
+			"mbox4_set",
+			"mbox4_clr",
+			"mbox4_send",
+			"mbox4_recv",
+
+			"mbox5_base",
+			"mbox5_set",
+			"mbox5_clr",
+			"mbox5_send",
+			"mbox5_recv",
+
+			"mbox6_base",
+			"mbox6_set",
+			"mbox6_clr",
+			"mbox6_send",
+			"mbox6_recv",
+
+			"mbox7_base",
+			"mbox7_set",
+			"mbox7_clr",
+			"mbox7_send",
+			"mbox7_recv";
+
+		interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
+
+		interrupt-names = "mbox0",
+			"mbox1",
+			"mbox2",
+			"mbox3",
+			"mbox4",
+			"mbox5",
+			"mbox6",
+			"mbox7";
+	};
+
+	topckgen: topckgen@10000000 {
+		compatible = "mediatek,topckgen", "syscon";
+		reg = <0 0x10000000 0 0x1000>;
+	};
+
+	dcm: dcm@10001000 {
+		compatible = "mediatek,mt6880-dcm";
+		reg = <0 0x10001000 0 0x1000>,
+			<0 0x10002000 0 0x1000>,
+			<0 0x10022000 0 0x1000>,
+			<0 0x10219000 0 0x1000>,
+			<0 0x10230000 0 0x2000>,
+			<0 0x10235000 0 0x1000>,
+			<0 0x10238000 0 0x1000>,
+			<0 0x10240000 0 0x2000>,
+			<0 0x10248000 0 0x1000>,
+			<0 0xc538000 0 0x5000>,
+			<0 0xc53a800 0 0x1000>;
+		reg-names = "infracfg_ao",
+			"infracfg_ao_mem",
+			"infra_ao_bcrm",
+			"emi",
+			"dramc_ch0_top0",
+			"chn0_emi",
+			"dramc_ch0_top5",
+			"dramc_ch1_top0",
+			"dramc_ch1_top5",
+			"mp_cpusys_top",
+			"cpccfg_reg";
+	};
+
+	infracfg_ao: infracfg_ao@10001000 {
+		compatible = "mediatek,infracfg_ao", "syscon", "simple-mfd";
+		reg = <0 0x10001000 0 0x1000>;
+		infracfg_rst: reset-controller {
+			compatible = "ti,syscon-reset";
+			#reset-cells = <1>;
+
+			ti,reset-bits = <
+				0x120 0 0x124 0 0 0 (ASSERT_SET | DEASSERT_SET | STATUS_NONE) /* 0: lvts_ap */
+				0x730 12 0x734 12 0 0 (ASSERT_SET | DEASSERT_SET | STATUS_NONE) /* 1: lvts_mcu */
+				>;
+		};
+	};
+
+	infracfg_ao_mem@10002000 {
+		compatible = "mediatek,infracfg_ao_mem";
+		reg = <0 0x10002000 0 0x1000>;
+	};
+
+	pericfg@10003000 {
+		compatible = "mediatek,pericfg";
+		reg = <0 0x10003000 0 0x1000>;
+	};
+
+	gpio_usage_mapping: gpio_usage_mapping {
+		compatible = "mediatek,gpio_usage_mapping";
+	};
+
+	gpio: gpio@10005000 {
+		compatible = "mediatek,gpio";
+		reg = <0 0x10005000 0 0x1000>;
+	};
+
+	pio: pinctrl@10005000 {
+		compatible = "mediatek,mt2735-pinctrl";
+		reg = <0 0x10005000 0 0x1000>,
+		      <0 0x11c10000 0 0x1000>,
+		      <0 0x11c20000 0 0x1000>,
+		      <0 0x11d00000 0 0x1000>,
+		      <0 0x11d10000 0 0x1000>,
+		      <0 0x11d20000 0 0x1000>,
+		      <0 0x11e00000 0 0x1000>,
+		      <0 0x11f00000 0 0x1000>,
+			  <0 0x1000b000 0 0x1000>;
+		reg-names = "gpio", "iocfg_rm",
+			"iocfg_rb", "iocfg_bl",
+			"iocfg_bm", "iocfg_br",
+			"iocfg_lt", "iocfg_tl",
+			"eint";
+		gpio-controller;
+		#gpio-cells = <2>;
+		gpio-ranges = <&pio 0 0 235>;
+		interrupt-controller;
+		#interrupt-cells = <2>;
+		interrupts = <GIC_SPI 212 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-parent = <&gic>;
+	};
+
+	sleep: sleep@10006000 {
+		compatible = "mediatek,sleep", "syscon";
+		reg = <0 0x10006000 0 0x1000>;
+	};
+
+	spmtwam: spmtwam@10006000 {
+		compatible = "mediatek,spmtwam";
+		reg = <0 0x10006000 0 0x1000>;
+		interrupts = <GIC_SPI 222 IRQ_TYPE_LEVEL_HIGH>;
+		spm_twam_con = <0xa0>;
+		spm_twam_window_len = <0xa4>;
+		spm_twam_idle_sel = <0xa8>;
+		spm_irq_mask = <0xb4>;
+		spm_irq_sta = <0x128>;
+		spm_twam_last_sta0 = <0x1d0>;
+		spm_twam_last_sta1 = <0x1d4>;
+		spm_twam_last_sta2 = <0x1d8>;
+		spm_twam_last_sta3 = <0x1dc>;
+	};
+
+	srclken: srclken@10006500 {
+		compatible = "mediatek,srclken";
+		reg = <0 0x10006500 0 0x1000>,
+			<0 0x105c4000 0 0x1000>,
+			<0 0x10005000 0 0x1000>;
+		reg-names = "srclken", "scpdvfs", "gpio";
+		srclken-mode = "bringup";
+
+		srclken-rst-cfg = <0x0>;
+		srclken-central-cfg = <0x4 0x8 0x1C>;
+		srclken-cmd-cfg = <0xC>;
+		srclken-pmic-cfg = <0x10 0x14>;
+		srclken-dcxo-fpm-cfg = <0x18>;
+		srclken-subsys-cfg = <0x20>;
+		srclken-misc-cfg = <0xB4>;
+		srclken-spm-cfg = <0xB8>;
+		srclken-subsys-if-cfg = <0xBC>;
+		srclken-fsm-sta = <0x60>;
+		srclken-cmd-sta = <0x64 0x68>;
+		srclken-spi-sta = <0x6C>;
+		srclken-pipo-sta = <0x70>;
+		srclken-subsys-sta = <0x80>;
+		srclken-dbg-trace-sta = <0xC0 0xC4>;
+
+		srclken-scp-enable = "n";
+		scp-vreq-cfg = <0x54>;
+		scp-rc-vreq-bit = <27 28>;
+
+		srclken-gpio-enable = "n";
+		gpio-dir-cfg = <0x0>;
+		gpio-dout-cfg = <0x100>;
+		gpio-pull-bit = <6>;
+	};
+
+	watchdog: watchdog@10007000 {
+		compatible = "mediatek,mt2735-wdt";
+		reg = <0 0x10007000 0 0x1000>;
+	};
+
+	apxgpt@10008000 {
+		compatible = "mediatek,apxgpt";
+		reg = <0 0x10008000 0 0x1000>;
+		interrupts = <GIC_SPI 275 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	sej@1000a000 {
+		compatible = "mediatek,sej";
+		reg = <0 0x1000a000 0 0x1000>;
+		interrupts = <GIC_SPI 294 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	apmixed: apmixed@1000c000 {
+		compatible = "mediatek,apmixed";
+		reg = <0 0x1000c000 0 0xe00>;
+	};
+
+	fhctl@1000ce00 {
+		compatible = "mediatek,mt6880-fhctl";
+		reg = <0 0x1000ce00 0 0x200>;
+		mediatek,apmixed = <&apmixed>;
+
+		armpll_ll {
+			mediatek,fh-id = <0>;
+			mediatek,fh-pll-id = <CLK_APMIXED_ARMPLL_LL>;
+			mediatek,fh-cpu-pll;
+		};
+
+		mainpll {
+			mediatek,fh-id = <1>;
+			mediatek,fh-pll-id = <CLK_APMIXED_MAINPLL>;
+		};
+
+		mpll {
+			mediatek,fh-id = <2>;
+			mediatek,fh-pll-id = <CLK_APMIXED_MPLL>;
+		};
+
+		msdcpll {
+			mediatek,fh-id = <4>;
+			mediatek,fh-pll-id = <CLK_APMIXED_MSDCPLL>;
+		};
+
+		mfgpll {
+			mediatek,fh-id = <5>;
+			mediatek,fh-pll-id = <CLK_APMIXED_MFGPLL>;
+		};
+
+		mmpll {
+                        mediatek,fh-id = <6>;
+                        mediatek,fh-pll-id = <CLK_APMIXED_MMPLL>;
+                };
+	};
+
+	pwrap@1000d000 {
+		compatible = "mediatek,pwrap";
+		reg = <0 0x1000d000 0 0x1000>;
+	};
+
+	keypad:kp@10010000 {
+		compatible = "mediatek,kp";
+		reg = <0 0x10010000 0 0x1000>;
+		interrupts = <GIC_SPI 74 IRQ_TYPE_EDGE_RISING>;
+		clocks = <&clk26m>;
+		clock-names = "kpd";
+	};
+
+	gpio-keys {
+		compatible = "gpio-keys";
+
+		button0 {
+			label = "Modem RF";
+			gpios = <&pio 6 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_PHONE>;
+		};
+
+		button1 {
+			label = "GPS";
+			gpios = <&pio 7 GPIO_ACTIVE_LOW>;
+			linux,code = <246>;
+		};
+/*
+		button2 {
+			label = "Factory Mode";
+			gpios = <&pio 112 GPIO_ACTIVE_LOW>;
+			linux,code = <112>;
+		};
+
+		button3 {
+			label = "WIFI";
+			gpios = <&pio 114 GPIO_ACTIVE_LOW>;
+			linux,code = <114>;
+		};
+
+		button4 {
+			label = "WPS";
+			gpios = <&pio 115 GPIO_ACTIVE_LOW>;
+			linux,code = <115>;
+		};
+*/
+	};
+
+	topmisc@10011000 {
+		compatible = "mediatek,topmisc";
+		reg = <0 0x10011000 0 0x1000>;
+	};
+
+	dvfsrc: dvfsrc@10012000 {
+		compatible = "mediatek,mt6890-dvfsrc";
+		reg = <0 0x10012000 0 0x1000>,
+			<0 0x10006000 0 0x1000>;
+		reg-names = "dvfsrc", "spm";
+		#interconnect-cells = <1>;
+		dvfsrc_vcore: dvfsrc-vcore {
+			regulator-name = "dvfsrc-vcore";
+			regulator-min-microvolt = <550000>;
+			regulator-max-microvolt = <750000>;
+			regulator-always-on;
+		};
+
+		dvfsrc_freq_opp6: opp6 {
+			opp-peak-KBps = <0>;
+		};
+		dvfsrc_freq_opp5: opp5 {
+			opp-peak-KBps = <2500000>;
+		};
+		dvfsrc_freq_opp4: opp4 {
+			opp-peak-KBps = <3800000>;
+		};
+		dvfsrc_freq_opp3: opp3 {
+			opp-peak-KBps = <5100000>;
+		};
+		dvfsrc_freq_opp2: opp2 {
+			opp-peak-KBps = <5900000>;
+		};
+		dvfsrc_freq_opp1: opp1 {
+			opp-peak-KBps = <7600000>;
+		};
+		dvfsrc_freq_opp0: opp0 {
+			opp-peak-KBps = <10200000>;
+		};
+
+		dvfsrc-helper {
+			compatible = "mediatek,dvfsrc-helper";
+			vcore-supply = <&mt6330_vcore_buck_reg>;
+			rc-vcore-supply = <&dvfsrc_vcore>;
+			interconnects = <&dvfsrc MT6873_MASTER_DBGIF &dvfsrc MT6873_SLAVE_DDR_EMI>;
+			interconnect-names = "icc-perf-bw";
+			required-opps = <&dvfsrc_freq_opp0>,
+					<&dvfsrc_freq_opp1>,
+					<&dvfsrc_freq_opp2>,
+					<&dvfsrc_freq_opp3>,
+					<&dvfsrc_freq_opp4>,
+					<&dvfsrc_freq_opp5>,
+					<&dvfsrc_freq_opp6>;
+		};
+
+		dvfsrc-met {
+			compatible = "mediatek,dvfsrc-met";
+		};
+	};
+
+	mbist_ao@10013000 {
+		compatible = "mediatek,mbist_ao";
+		reg = <0 0x10013000 0 0x1000>;
+	};
+
+	dpmaif_ao@10014000 {
+		compatible = "mediatek,dpmaif_ao";
+		reg = <0 0x10014000 0 0x1000>;
+	};
+
+	aes_top0@10016000 {
+		compatible = "mediatek,aes_top0";
+		reg = <0 0x10016000 0 0x1000>;
+	};
+
+	timer: timer {
+		compatible = "arm,armv8-timer";
+		interrupt-parent = <&gic>;
+		interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_HIGH>,
+				<GIC_PPI 14 IRQ_TYPE_LEVEL_HIGH>,
+				<GIC_PPI 11 IRQ_TYPE_LEVEL_HIGH>,
+				<GIC_PPI 10 IRQ_TYPE_LEVEL_HIGH>;
+		clock-frequency = <13000000>;
+	};
+
+	sys_timer@10017000 {
+		compatible = "mediatek,sys_timer",
+				"mediatek,mt6765-timer";
+		reg = <0 0x10017000 0 0x1000>;
+		interrupts = <GIC_SPI 233 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&clk13m>;
+	};
+
+	modem_temp_share@10018000 {
+		compatible = "mediatek,modem_temp_share";
+		reg = <0 0x10018000 0 0x1000>;
+	};
+
+	security_ao@1001a000 {
+		compatible = "mediatek,security_ao";
+		reg = <0 0x1001a000 0 0x1000>;
+	};
+
+	topckgen_ao@1001b000 {
+		compatible = "mediatek,topckgen_ao";
+		reg = <0 0x1001b000 0 0x1000>;
+	};
+
+	devapc_ao_mm@1001c000 {
+		compatible = "mediatek,devapc_ao_mm";
+		reg = <0 0x1001c000 0 0x1000>;
+	};
+
+	sleep_sram@1001e000 {
+		compatible = "mediatek,sleep_sram";
+		reg = <0 0x1001e000 0 0x4000>;
+	};
+
+	bcrm_ao_peri@10022000 {
+		compatible = "mediatek,bcrm_ao_peri";
+		reg = <0 0x10022000 0 0x1000>;
+	};
+
+	debug_ao_peri@10023000 {
+		compatible = "mediatek,debug_ao_peri";
+		reg = <0 0x10023000 0 0x1000>;
+	};
+
+	mhccif: mhccif@10024000 {
+		compatible = "mediatek,mt6880-mhccif";
+		#interrupt-cells = <3>;
+		interrupt-controller;
+		reg = <0 0x10024000 0 0x1000>,
+		      <0 0x10025000 0 0x1000>;
+		reg-names = "mhccif_rc", "mhccif_ep";
+		interrupts = <GIC_SPI 317 IRQ_TYPE_LEVEL_HIGH>;
+		status = "disabled";
+	};
+
+	spmi_bus: spmi@10026000 {
+		compatible = "mediatek,mt6880-pmif-m", "syscon";
+		reg = <0 0x10026000 0 0x0008F0>,
+		      <0 0x10029000 0 0x000110>;
+		reg-names = "pmif", "spmimst";
+		interrupts-extended = <&gic GIC_SPI 220 IRQ_TYPE_LEVEL_HIGH>,
+				      <&pio 216 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-names = "pmif_irq", "rcs_irq";
+		interrupt-controller;
+		#interrupt-cells = <1>;
+		irq_event_en = <0x0 0x00180000 0x0 0x0 0x0>;
+		clocks = <&infracfg_ao_clk CLK_IFRAO_PMIC_AP_SET>,
+			<&infracfg_ao_clk CLK_IFRAO_PMIC_TMR_SET>,
+			<&topckgen_clk CLK_TOP_PWRAP_ULPOSC_SEL>,
+			<&topckgen_clk CLK_TOP_OSC_D10>,
+			<&topckgen_clk CLK_TOP_TCK_26M_MX9>,
+			<&topckgen_clk CLK_TOP_SPMI_M_MST_SEL>,
+			<&topckgen_clk CLK_TOP_TCK_26M_MX9>,
+			<&topckgen_clk CLK_TOP_OSC_D10>;
+		clock-names = "pmif_sys_ck",
+			"pmif_tmr_ck",
+			"pmif_clk_mux",
+			"pmif_clk_osc_d10",
+			"pmif_clk26m",
+			"spmimst_clk_mux",
+			"spmimst_clk26m",
+			"spmimst_clk_osc_d10";
+		swinf_ch_start = <6>;
+		ap_swinf_no = <2>;
+		grpid = <0xB>;
+		#address-cells = <2>;
+		#size-cells = <0>;
+	};
+
+	spmi_p_bus: spmi_p@10027000 {
+		compatible = "mediatek,mt6880-pmif-p";
+		reg = <0 0x10027000 0 0x0008F0>,
+		      <0 0x10028000 0 0x000110>;
+		reg-names = "pmif", "spmimst";
+		interrupts = <GIC_SPI 221 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-names = "pmif_irq";
+		irq_event_en = <0x0 0x0 0x0 0x0 0x0>;
+		clocks = <&infracfg_ao_clk CLK_IFRAO_PMIC_AP_SET>,
+			<&infracfg_ao_clk CLK_IFRAO_PMIC_TMR_SET>,
+			<&topckgen_clk CLK_TOP_PWRAP_ULPOSC_SEL>,
+			<&topckgen_clk CLK_TOP_OSC_D10>,
+			<&topckgen_clk CLK_TOP_TCK_26M_MX9>,
+			<&topckgen_clk CLK_TOP_SPMI_P_MST_SEL>,
+			<&topckgen_clk CLK_TOP_TCK_26M_MX9>,
+			<&topckgen_clk CLK_TOP_MAINPLL_D7_D8>;
+		clock-names = "pmif_sys_ck",
+			"pmif_tmr_ck",
+			"pmif_clk_mux",
+			"pmif_clk_osc_d10",
+			"pmif_clk26m",
+			"spmimst_clk_mux",
+			"spmimst_clk26m",
+			"spmimst_clk_mainpll_d7_d8";
+		swinf_ch_start = <6>;
+		ap_swinf_no = <2>;
+		grpid = <0xB>;
+		#address-cells = <2>;
+		#size-cells = <0>;
+	};
+
+	/* ATF logger */
+        atf_logger {
+                compatible = "mediatek,atf_logger";
+        };
+
+	bcrm_peri_ao@1002a000 {
+		compatible = "mediatek,bcrm_peri_ao";
+		reg = <0 0x1002a000 0 0x1000>;
+	};
+
+	debug_ao_peri@1002b000 {
+		compatible = "mediatek,debug_ao_peri";
+		reg = <0 0x1002b000 0 0x1000>;
+	};
+
+	bcrm_peri_ao2@1002d000 {
+		compatible = "mediatek,bcrm_peri_ao2";
+		reg = <0 0x1002d000 0 0x1000>;
+	};
+
+	debug_ao_peri2@1002e000 {
+		compatible = "mediatek,debug_ao_peri2";
+		reg = <0 0x1002e000 0 0x1000>;
+	};
+
+	devapc_ao_infra@10030000 {
+		compatible = "mediatek,devapc_ao_infra";
+		reg = <0 0x10030000 0 0x4000>;
+	};
+
+	devapc_ao_peri@10034000 {
+		compatible = "mediatek,devapc_ao_peri";
+		reg = <0 0x10034000 0 0x4000>;
+	};
+
+	devapc_ao_peri2@10038000 {
+		compatible = "mediatek,devapc_ao_peri2";
+		reg = <0 0x10038000 0 0x4000>;
+	};
+
+	devapc_ao_peri_par@1003c000 {
+		compatible = "mediatek,devapc_ao_peri_par";
+		reg = <0 0x1003c000 0 0x4000>;
+	};
+
+	debug_ao_peri_par@10040000 {
+		compatible = "mediatek,debug_ao_peri_par";
+		reg = <0 0x10040000 0 0x1000>;
+	};
+
+	bcrm_peri_par_ao@10041000 {
+		compatible = "mediatek,bcrm_peri_par_ao";
+		reg = <0 0x10041000 0 0x1000>;
+	};
+
+	debug_ao_fmem@10042000 {
+		compatible = "mediatek,debug_ao_fmem";
+		reg = <0 0x10042000 0 0x1000>;
+	};
+
+	bcrm_fmem_ao@10043000 {
+		compatible = "mediatek,bcrm_fmem_ao";
+		reg = <0 0x10043000 0 0x1000>;
+	};
+
+	devapc_ao_fmem@10044000 {
+		compatible = "mediatek,devapc_ao_fmem";
+		reg = <0 0x10044000 0 0x4000>;
+	};
+
+//tianyan@2021.09.09 modify for add pwm start
+	pwm:pwm@10048000 {
+//tianyan@2021.09.09 modify for add pwm end
+		compatible = "mediatek,mt6880-pwm";
+		reg = <0 0x10048000 0 0x1000>;
+		#pwm-cells = <2>;
+		interrupts = <GIC_SPI 274 IRQ_TYPE_LEVEL_HIGH>;
+
+		clocks = <&topckgen_clk CLK_TOP_PWM_SEL>,
+			<&infracfg_ao_clk CLK_IFRAO_PWM>,
+			<&infracfg_ao_clk CLK_IFRAO_PWM1>,
+			<&infracfg_ao_clk CLK_IFRAO_PWM2>,
+			<&infracfg_ao_clk CLK_IFRAO_PWM3>,
+			<&infracfg_ao_clk CLK_IFRAO_PWM4>,
+			<&infracfg_ao_clk CLK_IFRAO_PWM5>,
+			<&infracfg_ao_clk CLK_IFRAO_PWM6>,
+			<&infracfg_ao_clk CLK_IFRAO_PWM7>;
+		clock-names = "top",
+			"main",
+			"pwm1",
+			"pwm2",
+			"pwm3",
+			"pwm4",
+			"pwm5",
+			"pwm6",
+			"pwm7";
+	};
+
+#if defined(CONFIG_MTK_SGMII_NETSYS)
+	sgmii0@10060000 {
+		compatible = "mediatek,sgmii0";
+		reg = <0 0x10060000 0 0x8000>;
+		interrupts = <GIC_SPI 367 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	sgmii1@10070000 {
+		compatible = "mediatek,sgmii1";
+		reg = <0 0x10070000 0 0x8000>;
+		interrupts = <GIC_SPI 368 IRQ_TYPE_LEVEL_HIGH>;
+	};
+#endif
+
+	sys_cirq@10204000 {
+		compatible = "mediatek,sys_cirq";
+		reg = <0 0x10204000 0 0x1000>;
+		interrupts = <GIC_SPI 501 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	devapc@10207000 {
+		compatible = "mediatek,mt6880-devapc";
+		reg = <0 0x10207000 0 0x1000>,
+		      <0 0x10274000 0 0x1000>,
+		      <0 0x10275000 0 0x1000>,
+		      <0 0x11020000 0 0x1000>,
+		      <0 0x10030000 0 0x1000>,
+		      <0 0x1020e000 0 0x1000>,
+		      <0 0x10033000 0 0x1000>;
+		interrupts = <GIC_SPI 187 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&infracfg_ao_clk CLK_IFRAO_DEVICE_APC>;
+		clock-names = "devapc-infra-clock";
+	};
+
+	hwrng: hwrng {
+		compatible = "mediatek,mt67xx-rng";
+	};
+
+	bus_dbg@10208000 {
+		compatible = "mediatek,bus_dbg-v2";
+		reg = <0 0x10208000 0 0x1000>,
+			<0 0x10001000 0 0x1000>;
+		mediatek,bus_dbg_con_offset = <0x2fc>;
+		interrupt = <GIC_SPI 201 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	ap_ccif0@10209000 {
+		compatible = "mediatek,ap_ccif0";
+		reg = <0 0x10209000 0 0x1000>;
+		interrupts = <GIC_SPI 258 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	md_ccif0@1020a000 {
+		compatible = "mediatek,md_ccif0";
+		reg = <0 0x1020a000 0 0x1000>;
+	};
+
+	ap_ccif1@1020b000 {
+		compatible = "mediatek,ap_ccif1";
+		reg = <0 0x1020b000 0 0x1000>;
+		interrupts = <GIC_SPI 260 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	md_ccif1@1020c000 {
+		compatible = "mediatek,md_ccif1";
+		reg = <0 0x1020c000 0 0x1000>;
+	};
+
+	infra_mbist@1020d000 {
+		compatible = "mediatek,infra_mbist";
+		reg = <0 0x1020d000 0 0x1000>;
+	};
+
+	infracfg@1020e000 {
+		compatible = "mediatek,infracfg";
+		reg = <0 0x1020e000 0 0x1000>;
+	};
+
+	trng@1020f000 {
+		compatible = "mediatek,trng";
+		reg = <0 0x1020f000 0 0x1000>;
+		interrupts = <GIC_SPI 271 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	dxcc_sec@10210000 {
+		compatible = "mediatek,dxcc_sec";
+		reg = <0 0x10210000 0 0x1000>;
+	};
+
+	cq_dma@10212000 {
+		compatible = "mediatek,cq_dma";
+		reg = <0 0x10212000 0 0x1000>;
+		interrupts = <GIC_SPI 218 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	md2md_md2_ccif0@10213000 {
+		compatible = "mediatek,md2md_md2_ccif0";
+		reg = <0 0x10213000 0 0x1000>;
+	};
+
+	sramrom@10214000 {
+		compatible = "mediatek,sramrom";
+		reg = <0 0x10214000 0 0x1000>;
+	};
+
+	bcrm_infra@10215000 {
+		compatible = "mediatek,bcrm_infra";
+		reg = <0 0x10215000 0 0x1000>;
+	};
+
+	dbg_tracker2@10218000 {
+		compatible = "mediatek,dbg_tracker2";
+		reg = <0 0x10218000 0 0x1000>;
+	};
+
+	emicen: emicen@10219000 {
+		compatible = "mediatek,mt6880-emicen",
+			     "mediatek,common-emicen";
+		reg = <0 0x10219000 0 0x1000>;
+		mediatek,emi-reg = <&emichn>;
+	};
+
+	infra_device_mpu@1021a000 {
+		compatible = "mediatek,infra_device_mpu";
+		reg = <0 0x1021a000 0 0x1000>;
+	};
+
+	infra_device_mpu@1021b000 {
+		compatible = "mediatek,infra_device_mpu";
+		reg = <0 0x1021b000 0 0x1000>;
+	};
+
+	infracfg_mem@1021c000 {
+		compatible = "mediatek,infracfg_mem";
+		reg = <0 0x1021c000 0 0x1000>;
+	};
+
+	emimpu:emimpu@10226000 {
+		compatible = "mediatek,mt6880-emimpu",
+			     "mediatek,common-emimpu";
+		reg = <0 0x10226000 0 0x1000>;
+		mediatek,emi-reg = <&emicen>;
+		interrupts = <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>;
+		region_cnt = <32>;
+		domain_cnt = <16>;
+		addr_align = <16>;
+		ap_region = <31>;
+		ap_apc = <0 0 5 5 0 0 6 0>,
+			 <0 0 5 5 5 5 5 5>;
+		dump = <0x1f0 0x1f8 0x1fc>;
+		clear = <0x160 0xffffffff 16>,
+			<0x200 0x00000003 16>,
+			<0x1f0 0x80000000 1>;
+		clear_md = <0x1fc 0x80000000 1>;
+		ctrl_intf = <1>;
+		slverr = <0>;
+	};
+
+	cldma_sys_ap {
+		compatible = "mediatek,cldma_sys_ap";
+		reg = <0 0x1004A000 0 0x1000>, /*CLDMA0_AO_INDMA_AO_MD*/
+			<0 0x1021E000 0 0x1000>; /*CLDMA0_AO_INDMA_PD_MD*/
+		interrupts = <GIC_SPI 285 IRQ_TYPE_LEVEL_HIGH>; /*cldma0_md_int_ap*/
+		clocks = <&infracfg_ao_clk CLK_IFRAO_RG_133M_CLDMA_TOP>;
+		clock-names = "infra-cldma0-rh";
+		mediatek,hif_ids = <1>; /* (1 << HIF_ID_CLDMA) */
+	};
+
+	mrdump_ext_rst: mrdump_ext_rst {
+		compatible = "mediatek, mrdump_ext_rst-disabled";
+		mode = "IRQ";
+		status = "okay";
+	};
+
+	dpmaif:dpmaif@10014000 {
+		compatible = "mediatek,dpmaif";
+		reg = <0 0x10014000 0 0x1000>, /*AO_UL*/
+			<0 0x1022D000 0 0x1000>, /*PD_UL*/
+			<0 0x1022C000 0 0x1000>, /*PD_MD_MISC*/
+			<0 0x1022E000 0 0x1000>, /*SRAM*/
+			<0 0x15B14000 0 0x1000>, /*MED_BMP_CFG*/
+			<0 0x15B38000 0 0x1000>; /*MED_SSR1_CFG*/
+		interrupts = <GIC_SPI 209 IRQ_TYPE_LEVEL_HIGH>; /*209+32=241*/
+		mediatek,dpmaif_capability = <6>;
+		clocks = <&infracfg_ao_clk CLK_IFRAO_DPMAIF_MAIN>,
+			<&infracfg_ao_clk CLK_IFRAO_CLDMA_BCLK>;
+		clock-names = "infra-dpmaif-clk",
+			"infra-dpmaif-blk-clk";
+	};
+
+	mddriver:mddriver {
+		compatible = "mediatek,mddriver";
+		mediatek,mdhif_type = <2>; /* bit0~3: CLDMA|CCIF|DPMAIF */
+		mediatek,md_id = <0>;
+		mediatek,cldma_capability = <2>;
+		reg = <0 0x10209000 0 0x1000>, /*AP_CCIF_BASE*/
+			<0 0x1020a000 0 0x1000>; /*MD_CCIF_BASE*/
+		interrupts = <GIC_SPI 194 IRQ_TYPE_LEVEL_HIGH>, /*CCIF0 174/206*/
+			     <GIC_SPI 195 IRQ_TYPE_LEVEL_HIGH>, /*CCIF0 175/207*/
+			     <GIC_SPI 78 IRQ_TYPE_EDGE_RISING>; /*MDWDT*/
+		clocks = <&infracfg_ao_clk CLK_IFRAO_CCIF_AP>,
+			<&infracfg_ao_clk CLK_IFRAO_CCIF_MD>,
+			<&infracfg_ao_clk CLK_IFRAO_CCIF1_AP>,
+			<&infracfg_ao_clk CLK_IFRAO_CCIF1_MD>,
+			<&infracfg_ao_clk CLK_IFRAO_CCIF2_AP>,
+			<&infracfg_ao_clk CLK_IFRAO_CCIF2_MD>,
+			<&infracfg_ao_clk CLK_IFRAO_CCIF4_MD>;
+		clock-names = "infra-ccif-ap",
+			"infra-ccif-md",
+			"infra-ccif1-ap",
+			"infra-ccif1-md",
+			"infra-ccif2-ap",
+			"infra-ccif2-md",
+			"infra-ccif4-md";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_MD1>;
+	};
+
+/*	md_auxadc:md_auxadc {
+		compatible = "mediatek,md_auxadc";
+		io-channels = <&auxadc 2>;
+		io-channel-names = "md-channel",
+			"md-battery";
+	};
+
+	md_ccci_rtc:md_ccci_rtc {
+		compatible = "mediatek,md_ccci_rtc";
+		nvmem-cells = <&ext_32k>;
+		nvmem-cell-names = "external-32k";
+	}; */
+
+	gce_mbox: gce_mbox@10228000 {
+		compatible = "mediatek,mailbox-gce";
+		reg = <0 0x10228000 0 0x4000>;
+		interrupts = <GIC_SPI 203 IRQ_TYPE_LEVEL_HIGH>;
+
+		#mbox-cells = <3>;
+		#gce-event-cells = <1>;
+		#gce-subsys-cells = <2>;
+		default_tokens = /bits/ 16 <CMDQ_SYNC_TOKEN_GPR_SET_0>,
+			/bits/ 16 <CMDQ_SYNC_TOKEN_GPR_SET_1>,
+			/bits/ 16 <CMDQ_SYNC_TOKEN_GPR_SET_2>,
+			/bits/ 16 <CMDQ_SYNC_TOKEN_GPR_SET_3>,
+			/bits/ 16 <CMDQ_SYNC_TOKEN_GPR_SET_4>,
+			/bits/ 16 <CMDQ_SYNC_RESOURCE_WROT0>,
+			/bits/ 16 <CMDQ_SYNC_RESOURCE_WROT1>;
+		clocks = <&infracfg_ao_clk CLK_IFRAO_GCE>,
+			 <&infracfg_ao_clk CLK_IFRAO_GCE_26M_SET>;
+		clock-names = "gce", "gce-timer";
+	};
+
+	cmdq-test {
+		compatible = "mediatek,cmdq-test";
+		mediatek,gce = <&gce_mbox>;
+		mmsys_config = <&mmsys_config>;
+		mediatek,gce-subsys = <99>, <SUBSYS_1400XXXX>;
+		mboxes = <&gce_mbox 23 0 CMDQ_THR_PRIO_1>,
+			<&gce_mbox 22 CMDQ_NO_TIMEOUT CMDQ_THR_PRIO_1>,
+			<&gce_mbox 11 0 CMDQ_THR_PRIO_1>;
+		token_user0 = /bits/ 16 <CMDQ_SYNC_TOKEN_USER_0>;
+		token_gpr_set4 = /bits/ 16 <CMDQ_SYNC_TOKEN_GPR_SET_4>;
+	};
+
+	infra_dpmaif@1022c000 {
+		compatible = "mediatek,infra_dpmaif";
+		reg = <0 0x1022c000 0 0x10>;
+	};
+
+	dramc: dramc@10230000 {
+		compatible = "mediatek,mt6880-dramc",
+			"mediatek,common-dramc";
+		reg = <0 0x10230000 0 0x2000>, /* DRAMC AO CHA */
+			<0 0x10240000 0 0x2000>, /* DRAMC AO CHB */
+			<0 0x10234000 0 0x1000>, /* DRAMC NAO CHA */
+			<0 0x10244000 0 0x1000>, /* DRAMC NAO CHB */
+			<0 0x10238000 0 0x2000>, /* DDRPHY AO CHA */
+			<0 0x10248000 0 0x2000>, /* DDRPHY AO CHB */
+			<0 0x10236000 0 0x1000>, /* DDRPHY NAO CHA */
+			<0 0x10246000 0 0x1000>, /* DDRPHY NAO CHB */
+			<0 0x10006000 0 0x1000>; /* SLEEP BASE */
+		mr4_version = <1>;
+		mr4_rg = <0x0090 0x0000ffff 0>;
+		fmeter_version = <1>;
+		crystal_freq = <52>;
+		pll_id = <0x050c 0x00000100 8>;
+		shu_lv = <0x050c 0x00030000 16>;
+		shu_of = <0x700>;
+		sdmpcw = <0x0704 0xffff0000 16>,
+			<0x0724 0xffff0000 16>;
+		prediv = <0x0708 0x000c0000 18>,
+			<0x0728 0x000c0000 18>;
+		posdiv = <0x0708 0x00000007 0>,
+			<0x0728 0x00000007 0>;
+		ckdiv4 = <0x0874 0x00000004 2>,
+			<0x0874 0x00000004 2>;
+		pll_md = <0x0744 0x00000100 8>,
+			<0x0744 0x00000100 8>;
+		cldiv2 = <0x08b4 0x00000002 1>,
+			<0x08b4 0x00000002 1>;
+		fbksel = <0x070c 0x00000040 6>,
+			<0x070c 0x00000040 6>;
+		dqopen = <0x0870 0x00100000 20>,
+			<0x0870 0x00100000 20>;
+	};
+	emiisu: emiisu {
+		compatible = "mediatek,mt6880-emiisu",
+			     "mediatek,common-emiisu";
+		ctrl_intf = <1>;
+	};
+	emichn: emichn@10235000 {
+		compatible = "mediatek,mt6880-emichn",
+			     "mediatek,common-emichn";
+		reg = <0 0x10235000 0 0x1000>,
+		      <0 0x10245000 0 0x1000>;
+	};
+
+	dramc_ch0_top0@10230000 {
+		compatible = "mediatek,dramc_ch0_top0";
+		reg = <0 0x10230000 0 0x2000>;
+	};
+
+	dramc_ch0_top1@10232000 {
+		compatible = "mediatek,dramc_ch0_top1";
+		reg = <0 0x10232000 0 0x2000>;
+	};
+
+	dramc_ch0_top2@10234000 {
+		compatible = "mediatek,dramc_ch0_top2";
+		reg = <0 0x10234000 0 0x1000>;
+	};
+
+	dramc_ch0_top3@10235000 {
+		compatible = "mediatek,dramc_ch0_top3";
+		reg = <0 0x10235000 0 0x1000>;
+	};
+
+	dramc_ch0_top4@10236000 {
+		compatible = "mediatek,dramc_ch0_top4";
+		reg = <0 0x10236000 0 0x2000>;
+	};
+
+	dramc_ch0_top5@10238000 {
+		compatible = "mediatek,dramc_ch0_top5";
+		reg = <0 0x10238000 0 0x2000>;
+	};
+
+	dramc_ch0_top6@1023a000 {
+		compatible = "mediatek,dramc_ch0_top6";
+		reg = <0 0x1023a000 0 0x2000>;
+	};
+
+	ap_ccif2@1023c000 {
+		compatible = "mediatek,ap_ccif2";
+		reg = <0 0x1023c000 0 0x1000>;
+		interrupts = <GIC_SPI 262 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	md_ccif2@1023d000 {
+		compatible = "mediatek,md_ccif2";
+		reg = <0 0x1023d000 0 0x1000>;
+	};
+
+	ap_ccif3@1023e000 {
+		compatible = "mediatek,ap_ccif3";
+		reg = <0 0x1023e000 0 0x1000>;
+		interrupts = <GIC_SPI 263 IRQ_TYPE_LEVEL_HIGH>;
+	};
+
+	md_ccif3@1023f000 {
+		compatible = "mediatek,md_ccif3";
+		reg = <0 0x1023f000 0 0x1000>;
+	};
+
+	i2c_common: i2c_common {
+		compatible = "mediatek,i2c_common";
+		dma_support = /bits/ 8 <3>;
+		idvfs = /bits/ 8 <1>;
+		set_dt_div = /bits/ 8 <1>;
+		check_max_freq = /bits/ 8 <1>;
+		ver = /bits/ 8 <2>;
+		set_ltiming = /bits/ 8 <1>;
+		ext_time_config = /bits/ 16 <0x1801>;
+		cnt_constraint = /bits/ 8 <1>;
+		dma_ver = /bits/ 8 <1>;
+	};
+
+	i2c0: i2c0@11c40000 {
+		compatible = "mediatek,i2c";
+		id = <0>;
+		reg = <0 0x11c40000 0 0x1000>,
+			<0 0x10217080 0 0x80>;
+		interrupts = <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&imp_iic_wrap_e_clk CLK_IMPE_AP_CLOCK_I2C0_RO>,
+			<&infracfg_ao_clk CLK_IFRAO_I2C3>;
+		clock-names = "main", "dma";
+		clock-div = <5>;
+		aed = <0x1a>;
+	};
+
+	i2c1: i2c1@11c41000 {
+		compatible = "mediatek,i2c";
+		id = <1>;
+		reg = <0 0x11c41000 0 0x1000>,
+			<0 0x10217100 0 0x80>;
+		interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&imp_iic_wrap_e_clk CLK_IMPE_AP_CLOCK_I2C1_RO>,
+			<&infracfg_ao_clk CLK_IFRAO_I2C3>;
+		clock-names = "main", "dma";
+		clock-div = <5>;
+		aed = <0x1a>;
+	};
+
+	i2c2: i2c2@11c42000 {
+		compatible = "mediatek,i2c";
+		id = <2>;
+		reg = <0 0x11c42000 0 0x1000>,
+			<0 0x10217180 0 0x80>;
+		interrupts = <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&imp_iic_wrap_e_clk CLK_IMPE_AP_CLOCK_I2C2_RO>,
+			<&infracfg_ao_clk CLK_IFRAO_I2C3>;
+		clock-names = "main", "dma";
+		clock-div = <5>;
+		aed = <0x1a>;
+	};
+
+	i2c3: i2c3@11c43000 {
+		compatible = "mediatek,i2c";
+		id = <3>;
+		reg = <0 0x11c43000 0 0x1000>,
+			<0 0x10217200 0 0x80>;
+		interrupts = <GIC_SPI 115 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&imp_iic_wrap_e_clk CLK_IMPE_AP_CLOCK_I2C3_RO>,
+			<&infracfg_ao_clk CLK_IFRAO_I2C3>;
+		clock-names = "main", "dma";
+		clock-div = <5>;
+		aed = <0x1a>;
+	};
+
+	i2c4: i2c4@11c44000 {
+		compatible = "mediatek,i2c";
+		id = <4>;
+		reg = <0 0x11c44000 0 0x1000>,
+			<0 0x10217280 0 0x80>;
+		interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&imp_iic_wrap_e_clk CLK_IMPE_AP_CLOCK_I2C4_RO>,
+			<&infracfg_ao_clk CLK_IFRAO_I2C3>;
+		clock-names = "main", "dma";
+		clock-div = <5>;
+		aed = <0x1a>;
+	};
+
+	i2c5: i2c5@11c45000 {
+		compatible = "mediatek,i2c";
+		id = <5>;
+		reg = <0 0x11c45000 0 0x1000>,
+			<0 0x10217300 0 0x80>;
+		interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&imp_iic_wrap_e_clk CLK_IMPE_AP_CLOCK_I2C5_RO>,
+			<&infracfg_ao_clk CLK_IFRAO_I2C3>;
+		clock-names = "main", "dma";
+		clock-div = <5>;
+		aed = <0x1a>;
+	};
+
+	ssusb: usb@11201000 {
+		compatible = "mediatek,mtu3";
+		pinctrl-names = "default";
+	    pinctrl-0 = <&mtu3_pin_default>;
+		reg = <0 0x11201000 0 0x2e00>,
+			<0 0x11203e00 0 0x0100>;
+		reg-names = "mac", "ippc";
+		vusb33-supply = <&mt6330_vusb_ldo_reg>;
+		interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
+        vbus_detect = <&pio 42 GPIO_ACTIVE_HIGH>;/*modified by chencheng 2021/11/10*/
+		phy-cells = <1>;
+		phys = <&u2port0 PHY_TYPE_USB2>,
+			 <&u3port0 PHY_TYPE_USB3>;
+		plat_type = <1>; /* 0: FPGA 1: ASIC */
+		/*zhengzhou 0316 +++*/
+		vbus-supply = <&usb_p0_vbus>;
+		extcon = <&extcon_usb>;
+		 dr_mode = "otg";/* 0: peripheral 1: otg  host*/
+		 /*zhengzhou 0316 ---*/
+		maximum-speed = "super-speed";
+		clocks = <&infracfg_ao_clk CLK_IFRAO_SSUSB>,
+			 <&infracfg_ao_clk CLK_IFRAO_SSUSB_XHCI>;
+		clock-names = "sys_ck","ref_ck";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SSUSB>;
+		/*usb-role-switch;*//*zhengzhou 0316 +++*/
+		mediatek,force-vbus;
+		/* mediatek,clk-mgr;  *//*zhengzhou 0316 +++*/
+		mediatek,usb3-drd;
+
+		#address-cells = <2>;
+		#size-cells = <2>;
+		ranges;
+
+		usb_host: xhci0@11200000 {
+			compatible = "mediatek,mtk-xhci";
+			reg = <0 0x11200000 0 0x1000>;
+			reg-names = "mac";
+			interrupts = <GIC_SPI 97 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&clk26m>;
+			clock-names = "sys_ck";
+		};
+	};
+
+	u3fpgaphy: usb-phy {
+		compatible = "mediatek,fpga-u3phy";
+		mediatek,ippc = <0x11203e00>;
+		#address-cells = <2>;
+		#size-cells = <2>;
+		fpga_i2c_physical_base = <0x11c42000>;
+		status = "disabled";
+
+		u3fpgaport0: usb-phy@0 {
+			chip-id= <0xa60931a>;
+			port = <0>;
+			pclk_phase = <23>;
+			#phy-cells = <1>;
+		};
+	};
+
+	u3phy: usb-phy@11e30000 {
+		compatible = "mediatek,generic-tphy-v2";
+		clocks = <&clk26m>;
+		clock-names = "u3phya_ref";
+		#address-cells = <2>;
+		#size-cells = <2>;
+		ranges;
+
+		u2port0: usb2-phy0@11e30000 {
+			reg = <0 0x11e30000 0 0x700>;
+			#phy-cells = <1>;
+			mediatek,eye-rev6 = <1>;
+			mediatek,eye-vrt = <5>;
+			mediatek,eye-term = <5>;
+			mediatek,rx-sqth = <5>;
+			status = "okay";
+		};
+
+		u3port0: usb3-phy0@11e30700 {
+			reg = <0 0x11e30700 0 0x900>;
+			#phy-cells = <1>;
+			status = "okay";
+		};
+	};
+
+	apdma: dma-controller@0x10217000 {
+		compatible = "mediatek, mt6873-uart-dma",
+					 "mediatek,mt6577-uart-dma";
+		reg = <0 0x10217380 0 0x80>,
+			  <0 0x10217400 0 0x80>,
+			  <0 0x10217480 0 0x80>,
+			  <0 0x10217500 0 0x80>,
+			  <0 0x10217580 0 0x80>,
+			  <0 0x10217600 0 0x80>,
+			  <0 0x10217680 0 0x80>,/*zhengzhou uart*/
+			  <0 0x10217700 0 0x80>;/*zhengzhou uart*/
+		interrupts = <GIC_SPI 132 IRQ_TYPE_LEVEL_HIGH>,
+			  <GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>,
+			  <GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>,
+			  <GIC_SPI 135 IRQ_TYPE_LEVEL_HIGH>,
+			  <GIC_SPI 136 IRQ_TYPE_LEVEL_HIGH>,
+			  <GIC_SPI 137 IRQ_TYPE_LEVEL_HIGH>,
+			  <GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>,/*zhengzhou uart*/
+			  <GIC_SPI 139 IRQ_TYPE_LEVEL_HIGH>;/*zhengzhou uart*/
+		dma-requests = <6>;
+		dma-bits = <34>;
+		clocks = <&clk26m>;
+		#dma-cells = <1>;
+	};
+
+	auxadc: auxadc@11001000 {
+		compatible = "mediatek,mt6765-auxadc";
+		reg = <0 0x11001000 0 0x1000>;
+		interrupts = <GIC_SPI 64 IRQ_TYPE_EDGE_RISING>;
+		clocks = <&infracfg_ao_clk CLK_IFRAO_AUXADC>;
+		clock-names = "main";
+		#io-channel-cells = <1>;
+		/* Auxadc efuse calibration */
+		/* 1. Auxadc cali on/off bit shift */
+		mediatek,cali-en-bit = <20>;
+		/* 2. Auxadc cali ge bits shift */
+		mediatek,cali-ge-bit = <10>;
+		/* 3. Auxadc cali oe bits shift */
+		mediatek,cali-oe-bit = <0>;
+		/* 4. Auxadc cali efuse reg offset */
+		mediatek,cali-efuse-reg-offset = <0xf8>;
+		nvmem = <&efuse>;
+		nvmem-names = "mtk_efuse";
+		#interconnect-cells = <1>;
+	};
+
+	uart0: serial@11002000 {
+		compatible = "mediatek,mt6873-uart",
+					 "mediatek,mt6577-uart";
+		reg = <0 0x11002000 0 0x1000>;
+		interrupts = <GIC_SPI 109 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&clk26m>, <&infracfg_ao_clk CLK_IFRAO_UART0>;
+		clock-names = "baud", "bus";
+		dmas = <&apdma 0
+				&apdma 1>;
+		dma-names = "tx", "rx";
+	};
+
+	uart1: serial@11003000 {
+		compatible = "mediatek,mt6873-uart",
+					 "mediatek,mt6577-uart";
+		reg = <0 0x11003000 0 0x1000>;
+		interrupts = <GIC_SPI 110 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&clk26m>, <&infracfg_ao_clk CLK_IFRAO_UART1>;
+		clock-names = "baud", "bus";
+		dmas = <&apdma 2
+				&apdma 3>;
+		dma-names = "tx", "rx";
+	};
+
+	uart2: serial@11004000 {
+		compatible = "mediatek,mt6873-uart",
+					 "mediatek,mt6577-uart";
+		reg = <0 0x11004000 0 0x1000>;
+		interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&clk26m>, <&infracfg_ao_clk CLK_IFRAO_UART2>;
+		clock-names = "baud", "bus";
+		dmas = <&apdma 4
+				&apdma 5>;
+		dma-names = "tx", "rx";
+	};
+		/* zhengzhou uart3 */
+   uart3: serial@1100C000 {
+		compatible = "mediatek,mt6873-uart",
+					 "mediatek,mt6577-uart";
+		reg = <0 0x1100C000 0 0x1000>;
+		interrupts = <GIC_SPI 108 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&clk26m>, <&infracfg_ao_clk CLK_IFRAO_UART3>;
+		clock-names = "baud", "bus";
+		dmas = <&apdma 6
+                &apdma 7>;
+        dma-names = "tx", "rx";
+        };
+	/* zhengzhou uart3 */		
+		
+		
+		
+	nandc: nfi@11005000 {
+		compatible = "mediatek,mt6880-nfc";
+		reg = <0 0x11005000 0 0x1000>,
+			<0 0x11006000 0 0x1000>;
+		interrupts = <GIC_SPI 164 IRQ_TYPE_LEVEL_HIGH>,
+					<GIC_SPI 165 IRQ_TYPE_LEVEL_HIGH>;
+		status = "ok";/* zhengzhou  */	
+	};
+
+	nor: nor_flash@0x11250000 {
+		compatible = "mediatek,mt8173-nor";
+		reg = <0 0x11250000 0 0x1000>;
+		clocks =<&topckgen_clk CLK_TOP_SFLASH_SEL>,
+				<&infracfg_ao_clk CLK_IFRAO_RG_FLASHIF_SFLASH>;
+		clock-names = "spi", "sf";
+		#address-cells = <1>;
+		#size-cells = <0>;
+		status = "ok";
+	};
+
+#if defined(CONFIG_MTK_SGMII_NETSYS)
+	pd-sgmii_0_phy {
+		compatible = "mediatek,sgmii-bring-up";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SGMII_0_PHY>;
+	};
+
+	pd-sgmii_0_top {
+		compatible = "mediatek,sgmii-bring-up";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SGMII_0_TOP>;
+	};
+
+	pd-sgmii_1_phy {
+		compatible = "mediatek,sgmii-bring-up";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SGMII_1_PHY>;
+	};
+
+	pd-sgmii_1_top {
+		compatible = "mediatek,sgmii-bring-up";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SGMII_1_TOP>;
+	};
+
+	sgmiisys_0: sgmiisys@10060000 {
+		compatible = "mediatek,colgin-sgmiisys_0", "syscon";
+		reg = <0 0x10060000 0 0x1000>;
+		#clock-cells = <1>;
+		mediatek,physpeed = "1000";/*modify by chencheng0817*/
+        /*modify by CLK SW Pei-hsuan Cheng */
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SGMII_0_TOP>;
+	};
+
+	sgmiisys_1: sgmiisys@10070000 {
+		compatible = "mediatek,colgin-sgmiisys_1", "syscon";
+		reg = <0 0x10070000 0 0x1000>;
+		#clock-cells = <1>;
+		mediatek,physpeed = "2500";
+        /*modify by CLK SW Pei-hsuan Cheng */
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SGMII_1_TOP>;
+	};
+
+	sgmiisys_phy_0: sgmiiphy@11ED0000 {
+		compatible = "mediatek,colgin-sgmiisys_phy_0", "syscon";
+		reg = <0 0x11ED0000 0 0x1000>;
+		#clock-cells = <1>;
+        /*modify by CLK SW Pei-hsuan Cheng */
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SGMII_0_PHY>;
+	};
+
+	sgmiisys_phy_1: sgmiiphy@11EE0000 {
+		compatible = "mediatek,colgin-sgmiisys_phy_1", "syscon";
+		reg = <0 0x11EE0000 0 0x1000>;
+		#clock-cells = <1>;
+        /*modify by CLK SW Pei-hsuan Cheng */
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SGMII_1_PHY>;
+	};
+#endif
+
+	ethsys: ethsys@15000000 {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		compatible = "mediatek,leopard-ethsys", "syscon", "simple-mfd";
+		reg = <0 0x15000000 0 0x1000>;
+		#clock-cells = <1>;
+		#reset-cells = <1>;
+
+		ethsysrst: reset-controller {
+			compatible = "ti,syscon-reset";
+			#reset-cells = <1>;
+			ti,reset-bits = <
+				0x34 4 0x34 4 0x34 4 (ASSERT_SET | DEASSERT_CLEAR   | STATUS_SET) /* 4: wocpu_rst */
+			>;
+		};
+	};
+
+        wo: wo@15195000 {
+		compatible = "mediatek,leopard-ethsys", "syscon", "simple-mfd";
+                reg = <0 0x15195000 0 0x1000>;
+        };
+
+	hnat: hnat@15100e00 {
+		compatible = "mediatek,hnat", "syscon";
+		reg = <0 0x15100e00 0 0x1000>;
+	};
+
+	eth: ethernet@15100000 {
+#if defined(CONFIG_MTK_SGMII_NETSYS)
+		compatible = "mediatek,mt6890-eth",
+#else
+		compatible = "mediatek,mt2735-eth",
+#endif
+			     "syscon";
+		reg = <0 0x15100000 0 0x20000>;
+		interrupts-extended = <&gic GIC_SPI 393 IRQ_TYPE_LEVEL_HIGH>,
+				<&gic GIC_SPI 394 IRQ_TYPE_LEVEL_HIGH>,
+				<&gic GIC_SPI 402 IRQ_TYPE_LEVEL_HIGH>,
+				<&gic GIC_SPI 403 IRQ_TYPE_LEVEL_HIGH>,
+				<&gic GIC_SPI 404 IRQ_TYPE_LEVEL_HIGH>,
+				<&gic GIC_SPI 405 IRQ_TYPE_LEVEL_HIGH>,
+				<&gic GIC_SPI 390 IRQ_TYPE_LEVEL_HIGH>,
+				<&gic GIC_SPI 392 IRQ_TYPE_LEVEL_HIGH>,
+				<&pio 63 IRQ_TYPE_LEVEL_LOW>;
+#if defined(CONFIG_MTK_SGMII_NETSYS)
+		clocks = <&topckgen_clk CLK_TOP_NETSYS_SEL>,
+			 <&topckgen_clk CLK_TOP_MEDSYS_SEL>,
+			 <&topckgen_clk CLK_TOP_NETSYS_500M_SEL>,
+			 <&topckgen_clk CLK_TOP_NETSYS_MED_MCU_SEL>,
+			 <&topckgen_clk CLK_TOP_NETSYS_WED_MCU_SEL>,
+			 <&topckgen_clk CLK_TOP_NETSYS_2X_SEL>,
+			 <&topckgen_clk CLK_TOP_SGMII_SEL>,
+			 <&topckgen_clk CLK_TOP_SGMII_SBUS_SEL>;
+		clock-names = "net_sel", "med_sel", "net_500_sel",
+			      "med_mcu_sel", "wed_mcu_sel",
+			      "net_2x_sel", "sgmii_sel", "sgmii_sbus_sel";
+#else
+		clocks = <&topckgen_clk CLK_TOP_NETSYS_SEL>,
+			 <&topckgen_clk CLK_TOP_MEDSYS_SEL>,
+			 <&topckgen_clk CLK_TOP_NETSYS_500M_SEL>,
+			 <&topckgen_clk CLK_TOP_NETSYS_MED_MCU_SEL>,
+			 <&topckgen_clk CLK_TOP_NETSYS_WED_MCU_SEL>,
+			 <&topckgen_clk CLK_TOP_NETSYS_2X_SEL>;
+		clock-names = "net_sel", "med_sel", "net_500_sel",
+			      "med_mcu_sel", "wed_mcu_sel",
+			      "net_2x_sel";
+#endif
+        /*modify by CLK SW Pei-hsuan Cheng*/
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_NETSYS>;
+		mediatek,ethsys = <&ethsys>;
+		mediatek,wo = <&wo>;
+#if defined(CONFIG_MTK_SGMII_NETSYS)
+		mediatek,sgmiisys = <&sgmiisys_0>,<&sgmiisys_1>;
+		mediatek,sgmiisys_phy = <&sgmiisys_phy_0>,<&sgmiisys_phy_1>;
+#endif
+		#address-cells = <1>;
+		#size-cells = <0>;
+		status = "okay";
+	};
+
+#if defined(CONFIG_MTK_SGMII_NETSYS)
+	snps-pdsgmii_0_phy {
+		compatible = "mediatek,sgmii-up";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SGMII_0_PHY>;
+	};
+
+	snps-pdsgmii_0_top {
+		compatible = "mediatek,sgmii-up";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_SGMII_0_TOP>;
+	};
+#endif
+
+	stmmac_axi_setup: stmmac-axi-config {
+		snps,wr_osr_lmt = <0x7>;
+		snps,rd_osr_lmt = <0x7>;
+		snps,blen = <0 0 0 0 16 8 4>;
+	};
+
+	mtl_rx_setup: rx-queues-config {
+		snps,rx-queues-to-use = <1>;
+		snps,rx-sched-sp;
+		queue0 {
+			snps,dcb-algorithm;
+			snps,map-to-dma-channel = <0x0>;
+			snps,priority = <0x0>;
+		};
+		queue1 {
+			snps,dcb-algorithm;
+			snps,map-to-dma-channel = <0x1>;
+			snps,priority = <0x0>;
+			snps,route-ptp;
+		};
+		queue2 {
+			snps,dcb-algorithm;
+			snps,map-to-dma-channel = <0x2>;
+			snps,priority = <0x0>;
+			snps,route-multi-broad;
+		};
+	};
+
+	mtl_tx_setup: tx-queues-config {
+		snps,tx-queues-to-use = <3>;
+		snps,tx-sched-wrr;
+		queue0 {
+			snps,weight = <0x10>;
+			snps,dcb-algorithm;
+			snps,priority = <0x0>;
+		};
+
+		queue1 {
+			snps,weight = <0x11>;
+			snps,dcb-algorithm;
+			snps,priority = <0x1>;
+		};
+
+		queue2 {
+			snps,weight = <0x12>;
+			snps,dcb-algorithm;
+			snps,priority = <0x2>;
+		};
+	};
+
+	snps_mac: ethernet@11021000 {
+		compatible = "mediatek,mt2735-gmac";
+		reg = <0 0x11021000 0 0x1300>;
+		interrupts = <GIC_SPI 305 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-names = "macirq";
+		mac-address = [00 55 7b b5 7d f7];
+#if defined(CONFIG_MTK_SGMII_SNPS)
+		clock-names = "mac_main",
+			      "ptp_ref",
+			      "eth_cg",
+			      "eth_rmii",
+			      "sgmii_sel",
+			      "sgmii_sbus_sel";
+		clocks = <&topckgen_clk CLK_TOP_SNPS_ETH_312P5M_SEL>,
+			 <&topckgen_clk CLK_TOP_SNPS_ETH_62P4M_PTP_SEL>,
+			 <&topckgen_clk CLK_TOP_SNPS_ETH_250M_SEL>,
+			 <&topckgen_clk CLK_TOP_SNPS_ETH_50M_RMII_SEL>,
+			 <&topckgen_clk CLK_TOP_SGMII_SEL>,
+			 <&topckgen_clk CLK_TOP_SGMII_SBUS_SEL>;
+#else
+		clock-names = "mac_main",
+			      "ptp_ref",
+			      "eth_cg",
+			      "eth_rmii";
+		clocks = <&topckgen_clk CLK_TOP_SNPS_ETH_312P5M_SEL>,
+			 <&topckgen_clk CLK_TOP_SNPS_ETH_62P4M_PTP_SEL>,
+			 <&topckgen_clk CLK_TOP_SNPS_ETH_250M_SEL>,
+			 <&topckgen_clk CLK_TOP_SNPS_ETH_50M_RMII_SEL>;
+#endif
+		mediatek,pericfg = <&infracfg_ao>;
+		snps,axi-config = <&stmmac_axi_setup>;
+		snps,mtl-rx-config = <&mtl_rx_setup>;
+		snps,mtl-tx-config = <&mtl_tx_setup>;
+		/*modify by CLK SW Pei-hsuan Cheng */
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_ETH>;
+#if defined(CONFIG_MTK_SGMII_SNPS)
+		mediatek,sgmiisys = <&sgmiisys_0>;
+		mediatek,sgmiisys_phy = <&sgmiisys_phy_0>;
+#endif
+		snps,txpbl = <16>;
+		snps,rxpbl = <16>;
+		clk_csr = <0>;
+		status = "disabled";
+	};
+
+	crypto: crypto@10320000 {
+		/* compatible = "mediatek,eip97-crypto"; */
+		/* compatible = "safexcel-ip-97-mob"; */
+		compatible = "inside-secure,safexcel-eip97";
+		reg = <0 0x10320000 0 0x40000>;
+		interrupts = <GIC_SPI 312 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 313 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 314 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 315 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 316 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-names = "ring0", "ring1", "ring2", "ring3";
+		clocks = <&topckgen_clk CLK_TOP_EIP97_SEL>,
+				<&topckgen_clk CLK_TOP_NET2PLL>,
+				<&topckgen_clk CLK_TOP_MAINPLL_D5_D2>;
+		clock-names = "clk-mux", "net2pll", "D5_D2";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_EIP97>;
+	};
+
+	dramc_ch1_top0@10240000 {
+		compatible = "mediatek,dramc_ch1_top0";
+		reg = <0 0x10240000 0 0x2000>;
+	};
+
+	dramc_ch1_top1@10242000 {
+		compatible = "mediatek,dramc_ch1_top1";
+		reg = <0 0x10242000 0 0x2000>;
+	};
+
+	dramc_ch1_top2@10244000 {
+		compatible = "mediatek,dramc_ch1_top2";
+		reg = <0 0x10244000 0 0x1000>;
+	};
+
+	dramc_ch1_top3@10245000 {
+		compatible = "mediatek,dramc_ch1_top3";
+		reg = <0 0x10245000 0 0x1000>;
+	};
+
+	dramc_ch1_top4@10246000 {
+		compatible = "mediatek,dramc_ch1_top4";
+		reg = <0 0x10246000 0 0x2000>;
+	};
+
+	dramc_ch1_top5@10248000 {
+		compatible = "mediatek,dramc_ch1_top5";
+		reg = <0 0x10248000 0 0x2000>;
+	};
+
+	dramc_ch1_top6@1024a000 {
+		compatible = "mediatek,dramc_ch1_top6";
+		reg = <0 0x1024a000 0 0x2000>;
+	};
+
+	ap_ccif4@1024c000 {
+		compatible = "mediatek,ap_ccif4";
+		reg = <0 0x1024c000 0 0x1000>;
+	};
+
+	md_ccif4@1024d000 {
+		compatible = "mediatek,md_ccif4";
+		reg = <0 0x1024d000 0 0x1000>;
+	};
+
+	md_ccif4@1024e000 {
+		compatible = "mediatek,md_ccif4";
+		reg = <0 0x1024e000 0 0x1000>;
+	};
+
+	dramc_ch2_top0@10250000 {
+		compatible = "mediatek,dramc_ch2_top0";
+		reg = <0 0x10250000 0 0x2000>;
+	};
+
+	dramc_ch2_top1@10252000 {
+		compatible = "mediatek,dramc_ch2_top1";
+		reg = <0 0x10252000 0 0x2000>;
+	};
+
+	dramc_ch2_top2@10254000 {
+		compatible = "mediatek,dramc_ch2_top2";
+		reg = <0 0x10254000 0 0x1000>;
+	};
+
+	dramc_ch2_top3@10255000 {
+		compatible = "mediatek,dramc_ch2_top3";
+		reg = <0 0x10255000 0 0x1000>;
+	};
+
+	dramc_ch2_top4@10256000 {
+		compatible = "mediatek,dramc_ch2_top4";
+		reg = <0 0x10256000 0 0x2000>;
+	};
+
+	dramc_ch2_top5@10258000 {
+		compatible = "mediatek,dramc_ch2_top5";
+		reg = <0 0x10258000 0 0x2000>;
+	};
+
+	dramc_ch2_top6@1025a000 {
+		compatible = "mediatek,dramc_ch2_top6";
+		reg = <0 0x1025a000 0 0x2000>;
+	};
+
+	ap_ccif5@1025c000 {
+		compatible = "mediatek,ap_ccif5";
+		reg = <0 0x1025c000 0 0x1000>;
+	};
+
+	md_ccif5@1025d000 {
+		compatible = "mediatek,md_ccif5";
+		reg = <0 0x1025d000 0 0x1000>;
+	};
+
+	mm_vpu_m0_sub_common@1025e000 {
+		compatible = "mediatek,mm_vpu_m0_sub_common";
+		reg = <0 0x1025e000 0 0x1000>;
+	};
+
+	mm_vpu_m1_sub_common@1025f000 {
+		compatible = "mediatek,mm_vpu_m1_sub_common";
+		reg = <0 0x1025f000 0 0x1000>;
+	};
+
+	dramc_ch3_top0@10260000 {
+		compatible = "mediatek,dramc_ch3_top0";
+		reg = <0 0x10260000 0 0x2000>;
+	};
+
+	dramc_ch3_top1@10262000 {
+		compatible = "mediatek,dramc_ch3_top1";
+		reg = <0 0x10262000 0 0x2000>;
+	};
+
+	dramc_ch3_top2@10264000 {
+		compatible = "mediatek,dramc_ch3_top2";
+		reg = <0 0x10264000 0 0x1000>;
+	};
+
+	dramc_ch3_top3@10265000 {
+		compatible = "mediatek,dramc_ch3_top3";
+		reg = <0 0x10265000 0 0x1000>;
+	};
+
+	dramc_ch3_top4@10266000 {
+		compatible = "mediatek,dramc_ch3_top4";
+		reg = <0 0x10266000 0 0x2000>;
+	};
+
+	dramc_ch3_top5@10268000 {
+		compatible = "mediatek,dramc_ch3_top5";
+		reg = <0 0x10268000 0 0x2000>;
+	};
+
+	dramc_ch3_top6@1026a000 {
+		compatible = "mediatek,dramc_ch3_top6";
+		reg = <0 0x1026a000 0 0x2000>;
+	};
+
+	bcrm_peri@10272000 {
+		compatible = "mediatek,bcrm_peri";
+		reg = <0 0x10272000 0 0x1000>;
+	};
+
+	bcrm_peri2@10273000 {
+		compatible = "mediatek,bcrm_peri2";
+		reg = <0 0x10273000 0 0x1000>;
+	};
+
+	devapc_peri@10274000 {
+		compatible = "mediatek,devapc_peri";
+		reg = <0 0x10274000 0 0x1000>;
+	};
+
+	devapc_peri2@10275000 {
+		compatible = "mediatek,devapc_peri2";
+		reg = <0 0x10275000 0 0x1000>;
+	};
+
+	bcrm_fmem@10276000 {
+		compatible = "mediatek,bcrm_fmem";
+		reg = <0 0x10276000 0 0x1000>;
+	};
+
+	mm_vpu_m0_sub_common@10309000 {
+		compatible = "mediatek,mm_vpu_m0_sub_common";
+		reg = <0 0x10309000 0 0x1000>;
+	};
+
+	mm_vpu_m1_sub_common@1030a000 {
+		compatible = "mediatek,mm_vpu_m1_sub_common";
+		reg = <0 0x1030a000 0 0x1000>;
+	};
+
+	mm_vpu_m1_sub_common@1030b000 {
+		compatible = "mediatek,mm_vpu_m1_sub_common";
+		reg = <0 0x1030b000 0 0x1000>;
+	};
+
+	mm_vpu_m1_sub_common@1030c000 {
+		compatible = "mediatek,mm_vpu_m1_sub_common";
+		reg = <0 0x1030c000 0 0x1000>;
+	};
+
+	mm_vpu_m1_sub_common@1030d000 {
+		compatible = "mediatek,mm_vpu_m1_sub_common";
+		reg = <0 0x1030d000 0 0x1000>;
+	};
+
+	sys_cirq1@10312000 {
+		compatible = "mediatek,sys_cirq1";
+		reg = <0 0x10312000 0 0x1000>;
+	};
+
+	sys_cirq2@10313000 {
+		compatible = "mediatek,sys_cirq2";
+		reg = <0 0x10313000 0 0x1000>;
+	};
+
+	dbg_tracker@10314000 {
+		compatible = "mediatek,dbg_tracker";
+		reg = <0 0x10314000 0 0x1000>;
+	};
+
+	pwrmcu@10400000 {
+		compatible = "mediatek,pwrmcu";
+		reg = <0 0x10400000 0 0x100000>;
+	};
+
+	sspm@10400000 {
+		compatible = "mediatek,sspm";
+		reg = <0 0x10400000 0 0x28000>,
+			<0 0x10440000 0 0x10000>,
+			<0 0x10450000 0 0x100>,
+			<0 0x10451000 0 0x4>,
+			<0 0x10451004 0 0x4>,
+			<0 0x10460000 0 0x100>,
+			<0 0x10461000 0 0x4>,
+			<0 0x10461004 0 0x4>,
+			<0 0x10470000 0 0x100>,
+			<0 0x10471000 0 0x4>,
+			<0 0x10471004 0 0x4>,
+			<0 0x10480000 0 0x100>,
+			<0 0x10481000 0 0x4>,
+			<0 0x10481004 0 0x4>,
+			<0 0x10490000 0 0x100>,
+			<0 0x10491000 0 0x4>,
+			<0 0x10491004 0 0x4>;
+
+		reg-names = "sspm_base",
+			"cfgreg",
+			"mbox0_base",
+			"mbox0_set",
+			"mbox0_clr",
+			"mbox1_base",
+			"mbox1_set",
+			"mbox1_clr",
+			"mbox2_base",
+			"mbox2_set",
+			"mbox2_clr",
+			"mbox3_base",
+			"mbox3_set",
+			"mbox3_clr",
+			"mbox4_base",
+			"mbox4_set",
+			"mbox4_clr";
+
+		interrupts = <GIC_SPI 241 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 244 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 245 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 246 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 247 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 248 IRQ_TYPE_LEVEL_HIGH>;
+
+		interrupt-names = "ipc",
+			"mbox0",
+			"mbox1",
+			"mbox2",
+			"mbox3",
+			"mbox4";
+	};
+
+	tinsys@10500000 {
+		compatible = "mediatek,tinsys";
+		reg = <0 0x10500000 0 0x0>;
+	};
+
+	dramc_ch1_rsv0@10900000 {
+		compatible = "mediatek,dramc_ch1_rsv0";
+		reg = <0 0x10900000 0 0x40000>;
+	};
+
+	dramc_ch1_rsv1@10940000 {
+		compatible = "mediatek,dramc_ch1_rsv1";
+		reg = <0 0x10940000 0 0xc0000>;
+	};
+
+	mali: mali@13000000 {
+		compatible = "mediatek,mali", "arm,mali-midgard", "arm,mali-bifrost";
+		reg = <0 0x13000000 0 0x4000>;
+		interrupts =
+			<GIC_SPI 363 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 364 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 365 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 366 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-names =
+			"GPU",
+			"MMU",
+			"JOB",
+			"EVENT";
+		operating-points-v2 = <&gpu_mali_opp>;
+		#cooling-cells = <2>;
+		gpufreq-supply = <&gpufreq>;
+	};
+
+	gpu_mali_opp: opp-table0 {
+		compatible = "operating-points-v2";
+		opp00 {
+			opp-hz = /bits/ 64 <780000000>;
+			opp-microvolt = <750000>;
+		};
+		opp01 {
+			opp-hz = /bits/ 64 <570000000>;
+			opp-microvolt = <650000>;
+		};
+		opp02 {
+			opp-hz = /bits/ 64 <360000000>;
+			opp-microvolt = <600000>;
+		};
+		opp03 {
+			opp-hz = /bits/ 64 <300000000>;
+			opp-microvolt = <550000>;
+		};
+	};
+
+	gpufreq: gpufreq {
+		compatible = "mediatek,gpufreq";
+		clocks =
+			<&topckgen_clk CLK_TOP_MFG_SEL>,
+			<&topckgen_clk CLK_TOP_MFGPLL>,
+			<&topckgen_clk CLK_TOP_MFG_REF_SEL>,
+			<&mfgsys_clk CLK_MFGCFG_BG3D>;
+		clock-names =
+			"clk_mux",	/* switch main/sub */
+			"clk_main_parent",	/* main pll freq */
+			"clk_sub_parent",	/* default 218.4 MHz */
+			"cg_bg3d";
+		/* power-domains = <&scpsys MT6890_POWER_DOMAIN_MFG0>; */
+		status = "disabled";
+	};
+
+	mmc0: mmc@11230000 {
+		compatible = "mediatek,mt6880-mmc";
+		reg = <0 0x11230000 0 0x1000>,
+			<0 0x11f10000 0 0x1000>;
+		interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&topckgen_clk CLK_TOP_MSDC50_0_SEL>,
+				<&infracfg_ao_clk CLK_IFRAO_MSDC0>,
+				<&infracfg_ao_clk CLK_IFRAO_MSDC0_SRC_CLK>;
+		clock-names = "source", "hclk", "source_cg";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_MSDC>;
+		status = "disabled";
+	};
+
+	mmc1: mmc@11240000 {
+		compatible = "mediatek,mt6880-mmc";
+		reg = <0 0x11240000 0 0x1000>,
+			<0 0x11f20000 0 0x1000>;
+		interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&topckgen_clk CLK_TOP_MSDC30_1_SEL>,
+				 <&infracfg_ao_clk CLK_IFRAO_MSDC1>,
+				 <&infracfg_ao_clk CLK_IFRAO_MSDC1_SRC_CLK>;
+		clock-names = "source", "hclk", "source_cg";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_MSDC>;
+		status = "disabled";
+	};
+
+	lvts: lvts@1100b000 {
+		compatible = "mediatek,mt6880-lvts";
+		reg = <0 0x1100b000 0 0x1000>,
+		      <0 0x11278000 0 0x1000>,
+		      <0 0x10001000 0 0x1000>;
+		interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 170 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&infracfg_ao_clk CLK_IFRAO_THERM>;
+		clock-names = "lvts_clk";
+
+		resets = <&infracfg_rst 0>,
+			 <&infracfg_rst 1>;
+
+		nvmem-cells = <&lvts_e_data1>;
+		nvmem-cell-names = "e_data1";
+		#thermal-sensor-cells = <1>;
+	};
+
+	disp_pwm: disp_pwm0@1100e000 {
+		compatible = "mediatek,disp_pwm0",
+				"mediatek,mt6890-disp-pwm";
+		reg = <0 0x1100e000 0 0x1000>;
+		interrupts = <GIC_SPI 171 IRQ_TYPE_LEVEL_HIGH>;
+		#pwm-cells = <2>;
+		clocks = <&infracfg_ao CLK_IFRAO_DISP_PWM>,
+			<&topckgen CLK_TOP_DISP_PWM_SEL>;
+		clock-names = "main", "mm";
+	};
+
+	pcie0: pcie@11280000 {
+		compatible = "mediatek,mt2735-pcie";
+		reg = <0 0x11280000 0 0x2000>;
+		reg-names = "pcie-mac";
+		linux,pci-domain = <0>;
+		#address-cells = <3>;
+		#size-cells = <2>;
+		interrupts = <GIC_SPI 325 IRQ_TYPE_LEVEL_HIGH>;
+		bus-range = <0x00 0xff>;
+		ranges = <0x82000000 0 0x00000000
+			  0x0 0x30000000 0 0x10000000>;
+		status = "disabled";
+
+		clocks = <&infracfg_ao_clk CLK_IFRAO_PCIE_TL_26M>,
+		         <&infracfg_ao_clk CLK_IFRAO_PCIE_TL_96M>,
+			 <&infracfg_ao_clk CLK_IFRAO_PCIE_TL_32K>,
+			 <&infracfg_ao_clk CLK_IFRAO_PCIE_PERI_26M>,
+			 <&infracfg_ao_clk CLK_IFRAO_RG_133M_PCIE_P0>;
+
+		phys = <&pciephy0>;
+		phy-names = "pcie-phy";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_PEXTP_D_2LX1>;
+
+		#interrupt-cells = <1>;
+		interrupt-map-mask = <0 0 0 7>;
+		interrupt-map = <0 0 0 1 &pcie_intc0 0>,
+				<0 0 0 2 &pcie_intc0 1>,
+				<0 0 0 3 &pcie_intc0 2>,
+				<0 0 0 4 &pcie_intc0 3>;
+		pcie_intc0: legacy-interrupt-controller {
+			interrupt-controller;
+			#address-cells = <0>;
+			#interrupt-cells = <1>;
+		};
+	};
+
+	pciephy0: phy0@11e40000 {
+		compatible = "mediatek,mt2735-pcie-phy";
+		#address-cells = <2>;
+		#size-cells = <2>;
+		#phy-cells = <0>;
+		reg = <0 0x11e40000 0 0x10000>,
+		      <0 0x11e50000 0 0x10000>;
+		reg-names = "phy-sif", "phy-ckm";
+		nvmem = <&efuse>;
+		nvmem-names = "mtk_efuse";
+		nvmem-cells = <&efuse_segment>;
+		nvmem-cell-names = "efuse_segment_cell";
+
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_PEXTP_D_2LX1_PHY>;
+	};
+
+	efuse: efuse@11ec0000 {
+		compatible = "mediatek,devinfo";
+		reg = <0 0x11ec0000 0 0x10000>;
+		#address-cells = <1>;
+		#size-cells = <1>;
+		efuse_segment: segment@78 {
+			reg = <0x78 0x4>;
+		};
+
+                lvts_e_data1: data1 {
+			reg = <0x1E0 0x24>;
+                };
+	};
+
+	dfd@13e00000 {
+		compatible = "mediatek,dfd";
+		reg = <0 0x13e00000 0 0x40000>;
+	};
+
+	g3d_dvfs@13fbc000 {
+		compatible = "mediatek,g3d_dvfs";
+		reg = <0 0x13fbc000 0 0x1000>;
+	};
+
+	g3d_testbench@13fbd000 {
+		compatible = "mediatek,g3d_testbench";
+		reg = <0 0x13fbd000 0 0x1000>;
+	};
+
+	g3d_config@13fbf000 {
+		compatible = "mediatek,g3d_config";
+		reg = <0 0x13fbf000 0 0x1000>;
+	};
+
+	mmsys_config: mmsys_config@14000000 {
+		compatible = "mediatek,mmsys_config";
+		reg = <0 0x14000000 0 0x1000>;
+	};
+
+	disp_mutex0@14001000 {
+		compatible = "mediatek,disp_mutex0";
+		reg = <0 0x14001000 0 0x1000>;
+	};
+
+	mdp_rdma0@14002000 {
+		compatible = "mediatek,mdp_rdma0";
+		reg = <0 0x14002000 0 0x1000>;
+	};
+
+	mdp_rsz0@14003000 {
+		compatible = "mediatek,mdp_rsz0";
+		reg = <0 0x14003000 0 0x1000>;
+	};
+
+	mdp_wrot0@14004000 {
+		compatible = "mediatek,mdp_wrot0";
+		reg = <0 0x14004000 0 0x1000>;
+	};
+
+	mdp_tdshp0@14005000 {
+		compatible = "mediatek,mdp_tdshp0";
+		reg = <0 0x14005000 0 0x1000>;
+	};
+
+	disp_ovl0@14006000 {
+		compatible = "mediatek,disp_ovl0";
+		reg = <0 0x14006000 0 0x1000>;
+	};
+
+	disp_rdma0@14007000 {
+		compatible = "mediatek,disp_rdma0";
+		reg = <0 0x14007000 0 0x1000>;
+	};
+
+	disp_color0@14008000 {
+		compatible = "mediatek,disp_color0";
+		reg = <0 0x14008000 0 0x1000>;
+	};
+
+	disp_ccorr0@14009000 {
+		compatible = "mediatek,disp_ccorr0";
+		reg = <0 0x14009000 0 0x1000>;
+	};
+
+	disp_aal0@1400a000 {
+		compatible = "mediatek,disp_aal0";
+		reg = <0 0x1400a000 0 0x1000>;
+	};
+
+	disp_gamma0@1400b000 {
+		compatible = "mediatek,disp_gamma0";
+		reg = <0 0x1400b000 0 0x1000>;
+	};
+
+	disp_dither0@1400c000 {
+		compatible = "mediatek,disp_dither0";
+		reg = <0 0x1400c000 0 0x1000>;
+	};
+
+	disp_wdma0@1400d000 {
+		compatible = "mediatek,disp_wdma0";
+		reg = <0 0x1400d000 0 0x1000>;
+	};
+
+	dsi0@1400e000 {
+		compatible = "mediatek,dsi0";
+		reg = <0 0x1400e000 0 0x1000>;
+	};
+
+	dbpi0@1400f000 {
+		compatible = "mediatek,dbpi0";
+		reg = <0 0x1400f000 0 0x1000>;
+	};
+
+	smi_sub_common0@14010000 {
+		compatible = "mediatek,smi_sub_common0";
+		reg = <0 0x14010000 0 0x1000>;
+	};
+
+	smi_common0@14016000 {
+		compatible = "mediatek,smi_common0";
+		reg = <0 0x14016000 0 0x1000>;
+	};
+
+	smi_larb0: larb@14017000 {
+		compatible = "mediatek,smi_larb0";
+		reg = <0 0x14017000 0 0x1000>;
+		mediatek,larb-id = <0>;
+	};
+
+	spi0: spi0@1100a000 {
+		compatible = "mediatek,mt6765-spi";
+		mediatek,pad-select = <0>;
+		reg = <0 0x1100a000 0 0x100>;
+		interrupts = <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&topckgen_clk CLK_TOP_UNIVPLL_D6_D2>,
+			<&topckgen_clk CLK_TOP_SPI_SEL>,
+			<&infracfg_ao_clk CLK_IFRAO_SPI0>;
+		clock-names = "parent-clk", "sel-clk", "spi-clk";
+	};
+
+	spi1: spi1@11010000 {
+		compatible = "mediatek,mt6765-spi";
+		mediatek,pad-select = <0>;
+		reg = <0 0x11010000 0 0x100>;
+		interrupts = <GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&topckgen_clk CLK_TOP_UNIVPLL_D6_D2>,
+			<&topckgen_clk CLK_TOP_SPI_SEL>,
+			<&infracfg_ao_clk CLK_IFRAO_SPI1>;
+		clock-names = "parent-clk", "sel-clk", "spi-clk";
+	};
+
+	spi2: spi2@11012000 {
+		compatible = "mediatek,mt6765-spi";
+		mediatek,pad-select = <0>;
+		reg = <0 0x11012000 0 0x100>;
+		interrupts = <GIC_SPI 161 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&topckgen_clk CLK_TOP_UNIVPLL_D6_D2>,
+			<&topckgen_clk CLK_TOP_SPI_SEL>,
+			<&infracfg_ao_clk CLK_IFRAO_SPI2>;
+		clock-names = "parent-clk", "sel-clk", "spi-clk";
+	};
+/*modified by chencheng0813++++++*/
+
+
+
+/*
+	spi3: spi3@11013000 {
+		compatible = "mediatek,mt6765-spi";
+		mediatek,pad-select = <0>;
+		reg = <0 0x11013000 0 0x100>;
+		interrupts = <GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&topckgen_clk CLK_TOP_UNIVPLL_D6_D2>,
+			<&topckgen_clk CLK_TOP_SPI_SEL>,
+			<&infracfg_ao_clk CLK_IFRAO_SPI3>;
+		clock-names = "parent-clk", "sel-clk", "spi-clk";
+	};
+*/
+/*modified by chencheng0813---------*/
+	spis0: spis0@11013000 {
+		compatible = "mediatek,mt6765-spi-slave","mediatek,mt8512-spi-slave";
+		reg = <0 0x11014000 0 0x100>;
+		interrupts = <GIC_SPI 163 IRQ_TYPE_LEVEL_HIGH>;
+		clocks = <&infracfg_ao_clk CLK_IFRAO_RG_FSPIS_CK>,
+			 <&infracfg_ao_clk CLK_IFRAO_SPIS_HCLK_66M>;
+		clock-names = "spi", "axi";
+		assigned-clocks = <&topckgen_clk CLK_TOP_SPIS_SEL>;
+		assigned-clock-parents = <&topckgen_clk CLK_TOP_UNIVPLL_D6>;
+		status = "okay";	/*zhengzhou spi*/
+	};
+
+	iommu0: iommu@14011000 {
+		compatible = "mediatek,mt6880-m4u";
+		reg = <0 14011000 0 0x1000>;
+		mediatek,larbs = <&smi_larb0>;
+		interrupts = <GIC_SPI 300 IRQ_TYPE_LEVEL_HIGH>;
+#if 0
+		clocks = <&dispsys_config MM_SMI_INFRA>,
+		       <&dispsys_config MM_SMI_IOMMU>,
+		       <&scpsys SCP_SYS_DIS>;
+		clock-names = "disp-infra-ck", "disp-iommu-ck", "power";
+#endif
+		#iommu-cells = <1>;
+	};
+
+	amms_control {
+		compatible = "mediatek,amms";
+		interrupts = <GIC_SPI 425 IRQ_TYPE_EDGE_RISING>;
+	};
+
+	mtk_m4u_debug {
+		compatible = "mediatek,mt6880-m4u-debug";
+#if 0
+		iommus = <&iommu0 M4U_PORT_DISP_POSTMASK0>,
+			 <&iommu0 M4U_PORT_OVL_RDMA0_HDR>,
+			 <&iommu0 M4U_PORT_OVL_RDMA0>,
+			 <&iommu0 M4U_PORT_DISP_FAKE0>;
+#endif
+	};
+
+	reserved@14018000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x14018000 0 0x1000>;
+	};
+
+	reserved@14019000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x14019000 0 0x1000>;
+	};
+
+	reserved@1401a000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x1401a000 0 0x1000>;
+	};
+
+	reserved@1401b000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x1401b000 0 0x1000>;
+	};
+
+	reserved@1401c000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x1401c000 0 0x1000>;
+	};
+
+	reserved@1401d000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x1401d000 0 0x1000>;
+	};
+
+	reserved@1401e000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x1401e000 0 0x1000>;
+	};
+
+	reserved@1401f000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x1401f000 0 0x1000>;
+	};
+
+	reserved@14020000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x14020000 0 0x1000>;
+	};
+
+	reserved@14021000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x14021000 0 0x1000>;
+	};
+
+	reserved@14022000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x14022000 0 0x1000>;
+	};
+
+	reserved@14023000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x14023000 0 0x1000>;
+	};
+
+	reserved@14024000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x14024000 0 0x1000>;
+	};
+
+	reserved@14025000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x14025000 0 0x1000>;
+	};
+
+	reserved@14026000 {
+		compatible = "mediatek,reserved";
+		reg = <0 0x14026000 0 0xda000>;
+	};
+	
+	/* hsm-common is used for secure drivers test. */
+	hsm-common {
+		compatible = "mediatek,hsm-common";
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_HSMTOP>;
+	};
+
+        medmcu: medmcu@15f00000 {
+            compatible = "mediatek,medmcu";
+            status = "okay";
+            reg = <0 0x15d00000 0 0x20000>,  /* tcm */
+                <0 0x15f24000 0 0x1000>,     /* cfg */
+                <0 0x15f21000 0 0x1000>,     /* clk*/
+                <0 0x15f30000 0 0x1000>,     /* cfg core0 */
+                <0 0x15f40000 0 0x1000>,     /* cfg core1 */
+                <0 0x15f52000 0 0x1000>,     /* bus tracker */
+                <0 0x15f60000 0 0x40000>,    /* llc */
+                <0 0x15fa5000 0 0x4>,        /* cfg_sec */
+                <0 0x15ffb000 0 0x100>,      /* mbox0 base */
+                <0 0x15ffb100 0 0x4>,        /* mbox0 set */
+                <0 0x15ffb10c 0 0x4>,        /* mbox0 clr */
+                <0 0x15fa5020 0 0x4>,        /* mbox0 init */
+                <0 0x15ffc000 0 0x100>,      /* mbox1 base */
+                <0 0x15ffc100 0 0x4>,        /* mbox1 set */
+                <0 0x15ffc10c 0 0x4>,        /* mbox1 clr */
+                <0 0x15fa5024 0 0x4>,        /* mbox1 init */
+                <0 0x15ffd000 0 0x100>,      /* mbox2 base */
+                <0 0x15ffd100 0 0x4>,        /* mbox2 set */
+                <0 0x15ffd10c 0 0x4>,        /* mbox2 clr */
+                <0 0x15fa5028 0 0x4>,        /* mbox2 init */
+                <0 0x15ffe000 0 0x100>,      /* mbox3 base */
+                <0 0x15ffe100 0 0x4>,        /* mbox3 set */
+                <0 0x15ffe10c 0 0x4>,        /* mbox3 clr */
+                <0 0x15fa502c 0 0x4>,        /* mbox3 init */
+                <0 0x15fff000 0 0x100>,      /* mbox4 base */
+                <0 0x15fff100 0 0x4>,        /* mbox4 set */
+                <0 0x15fff10c 0 0x4>,        /* mbox4 clr */
+                <0 0x15fa5030 0 0x4>,        /* mbox4 init */
+                <0 0x15B80000 0 0x100>;      /* MED_INFRA_CLK 0x15B80014 */
+
+            reg-names = "scp_sram_base",
+                "scp_cfgreg",
+                "scp_clkreg",
+                "scp_cfgreg_core0",
+                "scp_cfgreg_core1",
+                "scp_bus_tracker",
+                "scp_l1creg",
+                "scp_cfgreg_sec",
+                "mbox0_base",
+                "mbox0_set",
+                "mbox0_clr",
+                "mbox0_init",
+                "mbox1_base",
+                "mbox1_set",
+                "mbox1_clr",
+                "mbox1_init",
+                "mbox2_base",
+                "mbox2_set",
+                "mbox2_clr",
+                "mbox2_init",
+                "mbox3_base",
+                "mbox3_set",
+                "mbox3_clr",
+                "mbox3_init",
+                "mbox4_base",
+                "mbox4_set",
+                "mbox4_clr",
+                "mbox4_init";
+
+            interrupts = <GIC_SPI 420 IRQ_TYPE_LEVEL_HIGH>,
+                <GIC_SPI 421 IRQ_TYPE_LEVEL_HIGH>,
+                <GIC_SPI 422 IRQ_TYPE_LEVEL_HIGH>,
+                <GIC_SPI 423 IRQ_TYPE_LEVEL_HIGH>,
+                <GIC_SPI 424 IRQ_TYPE_LEVEL_HIGH>;
+
+             interrupt-names = "mbox0",
+                "mbox1",
+                "mbox2",
+                "mbox3",
+                "mbox4";
+
+            core_0 = "enable";
+            scp_sramSize = <0x00020000>;
+        };
+
+	consys: consys@18000000 {
+		compatible = "mediatek,mt6880-consys";
+		#thermal-sensor-cells = <0>;
+			/* conn_infra_rgu */
+		reg = <0 0x18000000 0 0x1000>,
+			/* conn_infra_cfg */
+			<0 0x18001000 0 0x1000>,
+			/* conn_host_csr_top */
+			<0 0x18060000 0 0x10000>,
+			/* infracfg_ao */
+			<0 0x10001000 0 0x1000>,
+			/* TOP RGU */
+			<0 0x10007000 0 0x1000>,
+			/* SPM */
+			<0 0x10006000 0 0x1000>,
+			/* INFRACFG */
+			<0 0x1020e000 0 0x1000>,
+			/* conn_wt_slp_ctl_reg */
+			<0 0x18005000 0 0x1000>,
+			/* conn_afe_ctl */
+			<0 0x18003000 0 0x1000>,
+			/* GPIO */
+			<0 0x10005000 0 0x1000>,
+			/* conn_rf_spi_mst_reg */
+			<0 0x18004000 0 0x1000>,
+			/* conn_semaphore */
+			<0 0x18070000 0 0x10000>,
+			/* conn_top_therm_ctl */
+			<0 0x18002000 0 0x1000>,
+			/* IOCFG_BM */
+			<0 0x11d10000 0 0x1000>,
+			/* debug_ctrl */
+			<0 0x1800f000 0 0x1000>,
+			/* conn_infra_clkgen_on_top */
+			<0 0x18009000 0 0x1000>,
+			/* conn_infra_bus_cr */
+			<0 0x1800e000 0 0x400>,
+			/* conn_infra_debug_ctrl_ao */
+			<0 0x1802f000 0 0x430>;
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_CONN>;
+	};
+
+	gps: gps@18C00000 {
+		compatible = "mediatek,connac2-gps";
+		reg = <0 0x18000000 0 0x100000>,
+			<0 0x18C00000 0 0x100000>,
+			<0 0x10003304 0 0x4>,
+			<0 0x1001C000 0 0x4>,
+			<0 0x1001C030 0 0x4>;
+		reg-names = "conn_infra_base", "conn_gps_base",
+			"status_dummy_cr", "tia2_gps_on", "tia2_gps_rc_sel";
+		interrupts = <GIC_SPI 377 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 378 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 379 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 380 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 381 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 382 IRQ_TYPE_LEVEL_HIGH>,
+			<GIC_SPI 383 IRQ_TYPE_LEVEL_HIGH>;
+		memory-region = <&gps_mem>;
+		pmic = <&pmic_efuse>;
+		mtk-vcore-supply = <&dvfsrc_vcore>;
+	};
+
+	odm: odm {
+		compatible = "simple-bus";
+		/* reserved for overlay by odm */
+	};
+
+	pmic_clock_buffer_ctrl: pmic_clock_buffer_ctrl {
+		compatible = "mediatek,pmic_clock_buffer";
+		mediatek,clkbuf-quantity = <7>;
+		mediatek,clkbuf-config = <2 1 1 2 0 0 2>;
+		mediatek,clkbuf-output-impedance = <3 4 3 4 0 0 3>;
+		mediatek,clkbuf-controls-for-desense = <0 4 0 3 0 0 0>;
+		mediatek,bblpm-support = "enable";
+
+		pwrap-dcxo-en = <0x24 4 0x28 1 0x28 0>;
+		pwrap-dcxo-conn = <0x5c 0 0x5c 16 0x60 0 0x60 16>;
+		pwrap-dcxo-nfc = <0x64 0 0x64 16 0x68 0 0x68 16>;
+
+		spm-pwr-status = <0x16c 0 0x16c 1>;
+		spm-io-en = <0x2c 7>;
+		spm-power-on-val = <0x8 21 0x8 14>;
+		spm-sck-con = <0xc 24>;
+		pcm-reg7-rf = <0x10c 21>;
+
+		pwrap = <&spmi_bus>;
+		sleep = <&sleep>;
+	};
+	typec_switch: typec_switch {
+		compatible = "mediatek,typec_switch";
+	};
+	/*zhengzhou 0316 +++*/
+nau8810: nau8810 {
+  	compatible = "mediatek,nau8810";
+  	nau8810_power_gpio = <&pio 16 GPIO_ACTIVE_HIGH>;
+};
+/*zhengzhou 0316 ---*/
+/*zhengzhou 00607 ---*/
+eth_pwr: eth_pwr {
+  	compatible = "mediatek,eth_pwr";
+  	eth_power_gpio = <&pio 14 GPIO_ACTIVE_HIGH>;
+};/*zhengzhou 00607 ---*/
+	afe: mt6880-afe-pcm@11210000 {
+		compatible = "mediatek,mt6880-sound";
+		reg = <0 0x11210000 0 0x1000>;
+		interrupts = <GIC_SPI 202 IRQ_TYPE_LEVEL_HIGH>;
+		i2s3-share = "I2S0";
+		topckgen = <&topckgen_clk>;
+		power-domains = <&scpsys MT6890_POWER_DOMAIN_AUDIO>;
+		clocks = <&audsys_clk CLK_AUDSYS_AFE>,
+			 <&audsys_clk CLK_AUDSYS_DAC>,
+			 <&audsys_clk CLK_AUDSYS_DAC_PREDIS>,
+			 <&audsys_clk CLK_AUDSYS_ADC>,
+			 <&audsys_clk CLK_AUDSYS_22M>,
+			 <&audsys_clk CLK_AUDSYS_24M>,
+			 <&audsys_clk CLK_AUDSYS_APLL_TUNER>,
+			 <&audsys_clk CLK_AUDSYS_APLL2_TUNER>,
+			 <&audsys_clk CLK_AUDSYS_TDM>,
+			 <&audsys_clk CLK_AUDSYS_TML>,
+			 <&infracfg_ao_clk CLK_IFRAO_AUDIO>,
+			 <&infracfg_ao_clk CLK_IFRAO_AUDIO_26M_BCLK>,
+			 <&topckgen_clk CLK_TOP_AUDIO_SEL>,
+			 <&topckgen_clk CLK_TOP_AUD_INTBUS_SEL>,
+			 <&topckgen_clk CLK_TOP_MMPLL_D4_D4>,
+			 <&topckgen_clk CLK_TOP_AUD_1_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL1>,
+			 <&topckgen_clk CLK_TOP_AUD_2_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL2>,
+			 <&topckgen_clk CLK_TOP_AUD_ENGEN1_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL1_D8>,
+			 <&topckgen_clk CLK_TOP_AUD_ENGEN2_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL2_D8>,
+			 <&topckgen_clk CLK_TOP_APLL_I2S0_MCK_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL_I2S1_MCK_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL_I2S2_MCK_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL_I2S4_MCK_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL_TDMOUT_MCK_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL_I2S5_MCK_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL_I2S6_MCK_SEL>,
+			 <&topckgen_clk CLK_TOP_APLL12_CK_DIV0>,
+			 <&topckgen_clk CLK_TOP_APLL12_CK_DIV1>,
+			 <&topckgen_clk CLK_TOP_APLL12_CK_DIV2>,
+			 <&topckgen_clk CLK_TOP_APLL12_CK_DIV4>,
+			 <&topckgen_clk CLK_TOP_APLL12_CK_DIV_TDMOUT_M>,
+			 <&topckgen_clk CLK_TOP_APLL12_CK_DIV_TDMOUT_B>,
+			 <&topckgen_clk CLK_TOP_APLL12_CK_DIV5>,
+			 <&topckgen_clk CLK_TOP_APLL12_CK_DIV6>,
+			 <&topckgen_clk CLK_TOP_TCK_26M_MX9>;
+		clock-names = "aud_afe_clk",
+			      "aud_dac_clk",
+			      "aud_dac_predis_clk",
+			      "aud_adc_clk",
+			      "aud_apll22m_clk",
+			      "aud_apll24m_clk",
+			      "aud_apll1_tuner_clk",
+			      "aud_apll2_tuner_clk",
+			      "aud_tdm_clk",
+			      "aud_tml_clk",
+			      "aud_infra_clk",
+			      "mtkaif_26m_clk",
+			      "top_mux_audio",
+			      "top_mux_audio_int",
+			      "top_mainpll_d2_d4",
+			      "top_mux_aud_1",
+			      "top_apll1_ck",
+			      "top_mux_aud_2",
+			      "top_apll2_ck",
+			      "top_mux_aud_eng1",
+			      "top_apll1_d8",
+			      "top_mux_aud_eng2",
+			      "top_apll2_d8",
+			      "top_i2s0_m_sel",
+			      "top_i2s1_m_sel",
+			      "top_i2s2_m_sel",
+			      "top_i2s4_m_sel",
+			      "top_tdm_m_sel",
+			      "top_i2s5_m_sel",
+			      "top_i2s6_m_sel",
+			      "top_apll12_div0",
+			      "top_apll12_div1",
+			      "top_apll12_div2",
+			      "top_apll12_div4",
+			      "top_apll12_divm",
+			      "top_apll12_divb",
+			      "top_apll12_div5",
+			      "top_apll12_div6",
+			      "top_clk26m_clk";
+		pinctrl-names = "aud_gpio_i2s0_off",
+					"aud_gpio_i2s0_on",
+					"aud_gpio_i2s1_off",
+					"aud_gpio_i2s1_on",
+					"aud_gpio_i2s2_off",
+					"aud_gpio_i2s2_on",
+					"aud_gpio_i2s3_off",
+					"aud_gpio_i2s3_on",
+					"aud_gpio_i2s4_off",
+					"aud_gpio_i2s4_on",
+					"aud_gpio_i2s5_off",
+					"aud_gpio_i2s5_on",
+					"aud_gpio_i2s6_off",
+					"aud_gpio_i2s6_on",
+					"aud_gpio_proslic_off",
+					"aud_gpio_proslic_on",
+					"aud_gpio_tdm_off",
+					"aud_gpio_tdm_on",
+					"extamp-pullhigh",
+					"extamp-pulllow";
+		pinctrl-0 = <&aud_gpio_i2s0_off>;
+		pinctrl-1 = <&aud_gpio_i2s0_on>;
+		pinctrl-2 = <&aud_gpio_i2s1_off>;
+		pinctrl-3 = <&aud_gpio_i2s1_on>;
+		pinctrl-4 = <&aud_gpio_i2s2_off>;
+		pinctrl-5 = <&aud_gpio_i2s2_on>;
+		pinctrl-6 = <&aud_gpio_i2s3_off>;
+		pinctrl-7 = <&aud_gpio_i2s3_on>;
+		pinctrl-8 = <&aud_gpio_i2s4_off>;
+		pinctrl-9 = <&aud_gpio_i2s4_on>;
+		pinctrl-10 = <&aud_gpio_i2s5_off>;
+		pinctrl-11 = <&aud_gpio_i2s5_on>;
+		pinctrl-12 = <&aud_gpio_i2s6_off>;
+		pinctrl-13 = <&aud_gpio_i2s6_on>;
+		pinctrl-14 = <&aud_gpio_proslic_off>;
+		pinctrl-15 = <&aud_gpio_proslic_on>;
+		pinctrl-16 = <&aud_gpio_tdm_off>;
+		pinctrl-17 = <&aud_gpio_tdm_on>;
+		pinctrl-18 = <&aud_pins_extamp_high>;
+		pinctrl-19 = <&aud_pins_extamp_low>;
+	};
+	sound: sound {
+		compatible = "mediatek,mt6880-mt6359-sound";
+		mediatek,platform = <&afe>;
+		mediatek,ext-codec = <&nuvoton>;
+	};
+
+	audio_sram@11211000 {
+		compatible = "mediatek,audio_sram";
+		reg = <0 0x11211000 0 0x10000>;
+		prefer_mode = <1>;
+		mode_size = <0xC000 0x10000>;
+		block_size = <0x1000>;
+	};
+
+	smart_pa: smart_pa {
+	};
+
+	extcon_usb: extcon_usb {
+	/*zhengzhou 0316 +++*/
+	    compatible = "linux,extcon-usb-gpio";
+        id-gpio = <&pio 40 GPIO_ACTIVE_HIGH>;
+		vbus-gpio = <&pio 42 GPIO_ACTIVE_HIGH>;//tianyan@2021.11.29 modify for usb otg
+		/*compatible = "mediatek,extcon-usb";*/
+	/*	dev-conn = <&ssusb>;*/
+	/*	 id-gpio = <&pio 12 GPIO_ACTIVE_HIGH>;*/
+	};
+    usb_p0_vbus: regulator@1 {
+        compatible = "regulator-fixed";
+        regulator-name = "p0_vbus";
+        regulator-min-microvolt = <5000000>;
+        regulator-max-microvolt = <5000000>;
+        gpio = <&pio 41 GPIO_ACTIVE_HIGH>; 
+        enable-active-high;
+	/*zhengzhou 0316 ---*/
+    };
+/*Lxf add in 2022/12/2 for gpio init*/
+	gpio_init: gpio_init{
+		compatible = "linux,gpio_init";
+	};
+/*Lxf add in 2022/12/2 for gpio init end*/
+	firmware {
+		optee {
+			compatible = "linaro,optee-tz";
+			method = "smc";
+		};
+	};
+};
+
+&spmi_bus {
+	mt6315_5: mt6315@5 {
+		compatible = "mediatek,mt6315", "mtk,spmi-pmic";
+		reg = <0x5 SPMI_USID 0xb SPMI_GSID>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+		mt6315_5_regulator: mt6315_5_regulator {
+			compatible = "mediatek,mt6315_5-regulator";
+			#interrupt-cells = <2>;
+			interrupt-controller;
+			interrupt-parent = <&pio>;
+			interrupts = <2 IRQ_TYPE_LEVEL_HIGH>;
+		};
+	};
+
+	md1_sim1_hot_plug_eint: md1_sim1_hot_plug_eint {
+	};
+
+	md1_sim2_hot_plug_eint: md1_sim2_hot_plug_eint {
+	};
+};
+#include "mt6890-clkao.dtsi"
+#include "mt6330.dtsi"
+#include "cust_mt6890_msdc.dtsi"
+
+&pmic {
+	mt63xx_ot_debug: mt63xx-ot-debug {
+		compatible = "mediatek,mt63xx-ot-debug";
+		interrupt-parent = <&mt6315_5_regulator>;
+		/* INT_TEMP_H */
+		interrupts = <5 IRQ_TYPE_EDGE_RISING>;
+	};
+};
diff --git a/src/lynq/framework/lynq-ril-service/src/cc.cpp b/src/lynq/framework/lynq-ril-service/src/cc.cpp
index de73cd9..4225ab6 100755
--- a/src/lynq/framework/lynq-ril-service/src/cc.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/cc.cpp
@@ -1273,6 +1273,139 @@
     }
     return;
 }
+
+#ifdef ZK_RIL_CFG
+/*dongyu@2023.5.31 Add ZK set codec tlv320aic3x API register start*/
+void set_codec(int open)
+{
+    RLOGD("set_codec %d",open);
+    if(open==0)
+    {
+        system("echo out 201 0 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
+        system("echo out 113 0 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
+        system("echo out 29 0 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
+    }
+    else
+    {
+        system("echo out 201 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
+        usleep(10);//just open need usleep 10us
+        system("echo out 113 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
+        usleep(10);//just open need usleep 10us
+        system("echo out 29 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
+        system("echo 0x00 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x01 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x02 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x03 0x80 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x04 0x04 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x05 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x06 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x07 0xa0 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x08 0x20 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x09 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x0a 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x0b 0x32 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x0c 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x0d 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x0f 0x10 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x10 0x20 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x11 0xf8 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x12 0xff > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x13 0x7a > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x14 0x78 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x15 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x16 0x78 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x17 0x78 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x18 0x78 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x19 0x80 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x1a 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x1b 0xfe > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x1c 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x1d 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x1e 0xfe > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x1f 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x20 0x18 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x21 0x18 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x22 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x23 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x24 0xc0 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x25 0xc0 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x26 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x27 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x28 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x29 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x2a 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x2b 0x02 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x2c 0x02 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x2d 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x2e 0x02 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x2f 0x85 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x30 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x31 0x80 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x32 0x85 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x33 0x9f > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x34 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x35 0x80 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x36 0x82 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x37 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x38 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x39 0x82 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x3a 0x9f > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x3b 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x3c 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x3d 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x3e 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x3f 0x80 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x40 0xaf > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x41 0x0d > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x42 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x43 0x80 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x44 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x45 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x46 0x02 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x47 0xaf > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x48 0x0d > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x49 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x4a 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x4b 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x4c 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x4d 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x4e 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x4f 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x50 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x51 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x52 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x53 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x54 0x02 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x55 0xbf > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x56 0x9b > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x57 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x58 0x02 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x59 0xbf > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x5a 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x5b 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x5c 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x5d 0x08 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x5e 0xde > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x5f 0x0c > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x60 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x61 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x62 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x63 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x64 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x65 0x01 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x66 0xa2 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x67 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x68 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x69 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x6a 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x6b 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x6c 0x40 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x6d 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+    }
+}
+/*dongyu@2023.5.31 Add ZK set codec tlv320aic3x API register end*/
+#endif
+
 #ifdef GSW_RIL_CFG
 
 /*hqing add for Geely demand on 11/07/2022, after cs call, codec should sleep*/
@@ -1410,7 +1543,7 @@
     RLOGD("callnum = %d, Call State Change then judge speech on/off!", callnum);
     callIndex = callnum;
     lock_rtp_audio_mtx(); 	
-#ifdef GSW_RIL_CFG
+#if (defined GSW_RIL_CFG) || (defined ZK_RIL_CFG)
     if( callIndex > 0 && speechStatus == SPEECH_OFF) {  //speech on
         //RLOGD("DemoAPP Call shell command (pactl set-card-profile 0 phonecall)");
         //system("pactl set-card-profile 0 phonecall");
@@ -1454,7 +1587,7 @@
         inCallstatus = CALL_OFF;
         resetMute();
         unlock_rtp_audio_mtx();
-#ifdef GSW_RIL_CFG
+#if (defined GSW_RIL_CFG) || (defined ZK_RIL_CFG)
         set_codec(0); //hqing add for Geely demand on 11/07/2022, after cs call, close codec for power Manager
 #endif
         RLOGD("[speech]: set off");
diff --git a/src/lynq/framework/lynq-ril-service/src/makefile b/src/lynq/framework/lynq-ril-service/src/makefile
index b9cb52b..a01484d 100755
--- a/src/lynq/framework/lynq-ril-service/src/makefile
+++ b/src/lynq/framework/lynq-ril-service/src/makefile
@@ -58,6 +58,10 @@
 
 endif
 
+ifeq ($(strip $(MOBILETEK_RIL_CFG)), ZK)
+    LOCAL_CFLAGS += -DZK_RIL_CFG
+endif
+
 ifeq ($(strip $(MOBILETEK_RIL_CFG)), PLATFORM)
     LOCAL_CFLAGS += -DMOBILETEK_RIL_CFG
 
diff --git a/src/lynq/lib/liblynq-media/liblynq-media/makefile b/src/lynq/lib/liblynq-media/liblynq-media/makefile
index f0116b8..967c0db 100755
--- a/src/lynq/lib/liblynq-media/liblynq-media/makefile
+++ b/src/lynq/lib/liblynq-media/liblynq-media/makefile
@@ -16,6 +16,9 @@
 
 endif
 
+ifeq ($(strip $(MOBILETEK_MEDIA_CFG)), ZK)
+    LOCAL_CFLAGS += -DZK_MEDIA_CFG
+endif
 
 $(warning ################# RITA ROOT: $(ROOT),includedir:$(includedir))
 LOCAL_PATH   = .
diff --git a/src/lynq/lib/liblynq-media/liblynq-media/media_control.c b/src/lynq/lib/liblynq-media/liblynq-media/media_control.c
index 261a4aa..d20b695 100755
--- a/src/lynq/lib/liblynq-media/liblynq-media/media_control.c
+++ b/src/lynq/lib/liblynq-media/liblynq-media/media_control.c
@@ -257,6 +257,139 @@
     return 0;

 }

 

+#ifdef ZK_MEDIA_CFG

+/*dongyu@2023.5.31 Add ZK set codec tlv320aic3x API register start*/

+void set_codec(int open)

+{

+    RLOGD("set_codec %d",open);

+

+    if(open==0)

+    {

+        system("echo out 201 0 >/sys/devices/platform/10005000.pinctrl/mt_gpio");

+        system("echo out 113 0 >/sys/devices/platform/10005000.pinctrl/mt_gpio");

+        system("echo out 29 0 >/sys/devices/platform/10005000.pinctrl/mt_gpio");

+    }

+    else

+    {

+        system("echo out 201 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio");

+        usleep(10);//just open need usleep 10us

+        system("echo out 113 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio");

+        usleep(10);//just open need usleep 10us

+        system("echo out 29 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio");

+        system("echo 0x00 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x01 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x02 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x03 0x80 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x04 0x04 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x05 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x06 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x07 0xa0 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x08 0x20 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x09 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x0a 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x0b 0x32 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x0c 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x0d 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x0f 0x10 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x10 0x20 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x11 0xf8 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x12 0xff > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x13 0x7a > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x14 0x78 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x15 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x16 0x78 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x17 0x78 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x18 0x78 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x19 0x80 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x1a 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x1b 0xfe > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x1c 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x1d 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x1e 0xfe > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x1f 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x20 0x18 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x21 0x18 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x22 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x23 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x24 0xc0 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x25 0xc0 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x26 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x27 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x28 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x29 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x2a 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x2b 0x02 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x2c 0x02 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x2d 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x2e 0x02 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x2f 0x85 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x30 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x31 0x80 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x32 0x85 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x33 0x9f > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x34 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x35 0x80 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x36 0x82 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x37 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x38 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x39 0x82 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x3a 0x9f > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x3b 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x3c 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x3d 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x3e 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x3f 0x80 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x40 0xaf > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x41 0x0d > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x42 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x43 0x80 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x44 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x45 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x46 0x02 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x47 0xaf > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x48 0x0d > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x49 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x4a 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x4b 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x4c 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x4d 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x4e 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x4f 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x50 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x51 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x52 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x53 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x54 0x02 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x55 0xbf > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x56 0x9b > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x57 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x58 0x02 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x59 0xbf > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x5a 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x5b 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x5c 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x5d 0x08 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x5e 0xde > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x5f 0x0c > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x60 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x61 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x62 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x63 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x64 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x65 0x01 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x66 0xa2 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x67 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x68 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x69 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x6a 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x6b 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x6c 0x40 > /sys/kernel/debug/regmap/0-0018/registers");

+        system("echo 0x6d 0x00 > /sys/kernel/debug/regmap/0-0018/registers");

+    }

+}

+/*dongyu@2023.5.31 Add ZK set codec tlv320aic3x API register end*/

+#endif

+

 #ifdef GSW_MEDIA_CFG

 

 /*hqing add for Geely demand on 11/07/2022, after playing audio, codec should sleep*/

@@ -406,7 +539,7 @@
   free(param);

   param = NULL;

   g_media_handle=NULL;

-#ifdef GSW_MEDIA_CFG

+#if (defined GSW_MEDIA_CFG) || (defined ZK_MEDIA_CFG)  

   set_codec(0); //hqing add for Geely demand on 11/07/2022, stop audio, close codec

 #endif

   return 0;

@@ -493,8 +626,7 @@
   param->handle = handle;  

   start_main_loop(param);

   RLOGD ("gst_bus_add_watch.\n");

-  

-#ifdef GSW_MEDIA_CFG

+#if (defined GSW_MEDIA_CFG) || (defined ZK_MEDIA_CFG)  

   set_codec(1);

 #endif

   gst_element_set_state (playbin, GST_STATE_PLAYING);

diff --git a/src/lynq/lib/liblynq-qser-adc/LICENSE b/src/lynq/lib/liblynq-qser-adc/LICENSE
new file mode 100755
index 0000000..605b7ea
--- /dev/null
+++ b/src/lynq/lib/liblynq-qser-adc/LICENSE
@@ -0,0 +1,31 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MobileTek Software") are
+protected under relevant copyright laws. The information contained herein is
+confidential and proprietary to MobileTek Inc. and/or its licensors. Without
+the prior written permission of MobileTek inc. and/or its licensors, any
+reproduction, modification, use or disclosure of MobileTek Software, and
+information contained herein, in whole or in part, shall be strictly
+prohibited.
+
+MobileTek Inc. (C) 2015. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MobileTek SOFTWARE")
+RECEIVED FROM MobileTek AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ON AN "AS-IS" BASIS ONLY. MobileTek EXPRESSLY DISCLAIMS ANY AND ALL
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+NONINFRINGEMENT. NEITHER DOES MobileTek PROVIDE ANY WARRANTY WHATSOEVER WITH
+RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+INCORPORATED IN, OR SUPPLIED WITH THE MobileTek SOFTWARE, AND RECEIVER AGREES
+TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MobileTek
+SOFTWARE. MobileTek SHALL ALSO NOT BE RESPONSIBLE FOR ANY MobileTek SOFTWARE
+RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MobileTek'S
+ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MobileTek SOFTWARE
+RELEASED HEREUNDER WILL BE, AT MobileTek'S OPTION, TO REVISE OR REPLACE THE
+MobileTek SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+CHARGE PAID BY RECEIVER TO MobileTek FOR SUCH MobileTek SOFTWARE AT ISSUE.
diff --git a/src/lynq/lib/liblynq-qser-adc/include/liblynq-qser-adc.h b/src/lynq/lib/liblynq-qser-adc/include/liblynq-qser-adc.h
new file mode 100755
index 0000000..55fb090
--- /dev/null
+++ b/src/lynq/lib/liblynq-qser-adc/include/liblynq-qser-adc.h
@@ -0,0 +1,29 @@
+/*============================================================================= 

+#     FileName: lynq_qser_adc_show.h

+#     Desc: about adc show for user

+#     Author: cz.li

+#     Version: V1.0

+#     LastChange: 2023-05-31 

+#     History:

+      copyright:Mobiletek

+=============================================================================*/

+#ifndef LYNQLIB_QSER_ADC_SHOW_H

+#define LYNQLIB_QSER_ADC_SHOW__H 1

+#ifdef __cplusplus

+extern "C" {

+#endif

+typedef enum ADC_CHANNEL_ENUM

+{

+    QADC_NONE = 0,

+    ADC0 =1,

+    ADC1 =2,

+    ADC2 =3,

+    QADC_END

+}ADC_CHANNEL_E;

+

+int qser_adc_show(ADC_CHANNEL_E qadc);

+

+#ifdef __cplusplus

+}

+#endif

+#endif

diff --git a/src/lynq/lib/liblynq-qser-adc/liblynq_qser_adc.cpp b/src/lynq/lib/liblynq-qser-adc/liblynq_qser_adc.cpp
new file mode 100755
index 0000000..98f037f
--- /dev/null
+++ b/src/lynq/lib/liblynq-qser-adc/liblynq_qser_adc.cpp
@@ -0,0 +1,66 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <liblog/lynq_deflog.h>
+#include "include/liblynq-qser-adc.h"
+#define USER_LOG_TAG "LIBLYNQ_QSER_ADC"
+#undef LOG_TAG
+#define LOG_TAG "LIBLYNQ_QSER_ADC"
+int qser_adc_show(ADC_CHANNEL_E qadc)
+{
+    int adc_value;
+    char cmd[1024];
+    char cmd_ret[1024];
+    FILE *fp;
+    switch(qadc)
+    {
+    case QADC_NONE:
+    {
+        LYERRLOG("function %s line %d\n", __FUNCTION__, __LINE__);
+        return 0;
+    }
+    case ADC0:
+    {
+        LYDBGLOG("function %s line %d\n", __FUNCTION__, __LINE__);
+        sprintf(cmd,"cat /sys/bus/iio/devices/iio:device1/in_voltage0_input");
+        break;
+    }
+    case ADC1:
+    {
+        LYDBGLOG("function %s line %d\n", __FUNCTION__, __LINE__);
+        sprintf(cmd,"cat /sys/bus/iio/devices/iio:device1/in_voltage1_input");
+        break;
+    }
+    case ADC2:
+    {
+        LYDBGLOG("function %s line %d\n", __FUNCTION__, __LINE__);
+        sprintf(cmd,"cat /sys/bus/iio/devices/iio:device1/in_voltage2_input");
+        break;
+    }
+    default:
+    {
+        LYERRLOG("input error\n");
+        return -1;
+    }
+    }
+    if((fp = popen(cmd,"r")) == NULL)
+    {
+        LYERRLOG("popen error!");
+        return -1;
+    }
+    if((fread(cmd_ret,sizeof(cmd_ret),1,fp))<0)
+    {
+        LYERRLOG("fread fail!");
+        fclose(fp);
+        return -1;
+    }
+    fclose(fp);
+
+    adc_value = atoi(cmd_ret);
+    if (adc_value < 0 || adc_value > 12000)
+    {
+        LYERRLOG("bad adc value %s!", cmd_ret);
+        return -1;
+    }
+
+    return adc_value;
+}
diff --git a/src/lynq/lib/liblynq-qser-adc/makefile b/src/lynq/lib/liblynq-qser-adc/makefile
new file mode 100755
index 0000000..0ef16a1
--- /dev/null
+++ b/src/lynq/lib/liblynq-qser-adc/makefile
@@ -0,0 +1,70 @@
+SHELL = /bin/sh
+RM = rm -f
+
+LOCAL_CFLAGS := -Wall \
+                -std=gnu++14 \
+                -g -Os \
+                -flto \
+                -DRIL_SHLIB \
+                -DATCI_PARSE \
+                -fPIC \
+                -DKEEP_ALIVE \
+                -DECALL_SUPPORT \
+                -fpermissive \
+
+
+
+$(warning ################# lynq data demo ROOT: $(ROOT),includedir:$(includedir))
+LOCAL_PATH   = .
+
+LOCAL_C_INCLUDES = \
+  -I. \
+  -I$(LOCAL_PATH)/include/libcall \
+  -I$(ROOT)$(includedir)/logger \
+  -I$(ROOT)$(includedir)/liblog \
+  -I$(ROOT)$(includedir)/vendor-ril \
+  -I$(ROOT)$(includedir)/lynq_shm \
+
+
+LOCAL_LIBS := \
+    -L. \
+    -ldl \
+    -lstdc++ \
+    -llog \
+    -lcutils \
+    -lutils \
+    -lbinder \
+    -lpthread \
+    -llynq-log \
+
+SOURCES = $(wildcard *.cpp)
+
+EXECUTABLE = liblynq-qser-adc.so
+
+OBJECTS=$(SOURCES:.cpp=.o)
+
+
+.PHONY: build clean install pack_rootfs 
+all: build
+$(EXECUTABLE): $(OBJECTS)
+	$(CXX) -shared -Wl,--no-undefined $(OBJECTS) $(LOCAL_LIBS) $(LOCAL_CFLAGS) $(LOCAL_C_INCLUDES) -o $@
+
+%.o : %.cpp
+	$(CXX) $(LOCAL_C_INCLUDES) $(LOCAL_CFLAGS) $(LOCAL_LIBS) -o $@ -c $<
+
+build:  $(EXECUTABLE)
+	$(warning ########## build $(EXECUTABLE)  ##########)
+install:
+	mkdir -p $(ROOT)$(base_libdir)/
+	install $(EXECUTABLE) $(ROOT)$(base_libdir)/
+pack_rootfs:
+	mkdir -p $(PACK_INITRAMFS_TO)$(base_libdir)/
+	cp -af $(EXECUTABLE) $(PACK_INITRAMFS_TO)$(base_libdir)/
+	$(CROSS)strip $(PACK_INITRAMFS_TO)$(base_libdir)/$(EXECUTABLE)
+	mkdir -p $(PACK_TO)$(base_libdir)/
+	cp -af $(EXECUTABLE) $(PACK_TO)$(base_libdir)/
+	$(CROSS)strip $(PACK_TO)$(base_libdir)/$(EXECUTABLE)
+.PHONY: clean
+clean:
+	$(RM) $(OBJECTS) $(EXECUTABLE)
+	-find . -name "*.o" -delete
diff --git a/src/lynq/lib/liblynq-rtp/Makefile b/src/lynq/lib/liblynq-rtp/Makefile
index 4e3f785..8e81d11 100755
--- a/src/lynq/lib/liblynq-rtp/Makefile
+++ b/src/lynq/lib/liblynq-rtp/Makefile
@@ -16,6 +16,10 @@
 
 endif
 
+ifeq ($(strip $(MOBILETEK_RTP_CFG)), ZK)
+    LOCAL_CFLAGS += -DZK_RTP_CFG
+endif
+
 CPPFLAGS=\
   -std=c++11 \
 
@@ -64,4 +68,4 @@
 
 clean:
 	rm -f $(EXECUTABLE) rm -rf *.o
-	find ./ -name *.o | xargs rm -rf
\ No newline at end of file
+	find ./ -name *.o | xargs rm -rf
diff --git a/src/lynq/lib/liblynq-rtp/src/lynq_rtp.c b/src/lynq/lib/liblynq-rtp/src/lynq_rtp.c
index af668ec..e1eeaff 100755
--- a/src/lynq/lib/liblynq-rtp/src/lynq_rtp.c
+++ b/src/lynq/lib/liblynq-rtp/src/lynq_rtp.c
@@ -136,6 +136,138 @@
     return 0;
 }
 
+#ifdef ZK_RTP_CFG
+/*dongyu@2023.5.31 Add ZK set codec tlv320aic3x API register start*/
+void set_codec(int open)
+{
+    RLOGD("set_codec %d",open);
+    if(open==0)
+    {
+        system("echo out 201 0 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
+        system("echo out 113 0 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
+        system("echo out 29 0 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
+    }
+    else
+    {
+        system("echo out 201 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
+        usleep(10);//just open need usleep 10us
+        system("echo out 113 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
+        usleep(10);//just open need usleep 10us
+        system("echo out 29 1 >/sys/devices/platform/10005000.pinctrl/mt_gpio");
+        system("echo 0x00 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x01 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x02 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x03 0x80 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x04 0x04 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x05 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x06 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x07 0xa0 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x08 0x20 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x09 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x0a 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x0b 0x32 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x0c 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x0d 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x0f 0x10 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x10 0x20 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x11 0xf8 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x12 0xff > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x13 0x7a > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x14 0x78 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x15 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x16 0x78 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x17 0x78 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x18 0x78 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x19 0x80 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x1a 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x1b 0xfe > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x1c 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x1d 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x1e 0xfe > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x1f 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x20 0x18 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x21 0x18 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x22 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x23 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x24 0xc0 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x25 0xc0 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x26 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x27 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x28 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x29 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x2a 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x2b 0x02 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x2c 0x02 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x2d 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x2e 0x02 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x2f 0x85 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x30 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x31 0x80 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x32 0x85 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x33 0x9f > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x34 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x35 0x80 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x36 0x82 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x37 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x38 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x39 0x82 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x3a 0x9f > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x3b 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x3c 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x3d 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x3e 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x3f 0x80 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x40 0xaf > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x41 0x0d > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x42 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x43 0x80 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x44 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x45 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x46 0x02 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x47 0xaf > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x48 0x0d > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x49 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x4a 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x4b 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x4c 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x4d 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x4e 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x4f 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x50 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x51 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x52 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x53 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x54 0x02 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x55 0xbf > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x56 0x9b > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x57 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x58 0x02 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x59 0xbf > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x5a 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x5b 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x5c 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x5d 0x08 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x5e 0xde > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x5f 0x0c > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x60 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x61 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x62 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x63 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x64 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x65 0x01 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x66 0xa2 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x67 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x68 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x69 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x6a 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x6b 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x6c 0x40 > /sys/kernel/debug/regmap/0-0018/registers");
+        system("echo 0x6d 0x00 > /sys/kernel/debug/regmap/0-0018/registers");
+    }
+}
+/*dongyu@2023.5.31 Add ZK set codec tlv320aic3x API register end*/
+#endif
+
 #ifdef GSW_RTP_CFG
 /*hqing add for Geely demand on 11/17/2022, after playing audio, codec should sleep*/
 void set_codec(int open)
@@ -271,8 +403,8 @@
     ret = pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);
     if (g_lynq_rtp_mode == 0)
     {
-	
-#ifdef GSW_RTP_CFG
+
+#if (defined GSW_RTP_CFG) || (defined ZK_RTP_CFG)
 		set_codec(1);
 #endif
 
@@ -380,4 +512,4 @@
         strcpy(file_address,lynq_rtp_server_info.address);
     }
     return 0;
-}
\ No newline at end of file
+}
diff --git a/src/lynq/lib/liblynq-wifi6/include/libwifi6.h b/src/lynq/lib/liblynq-wifi6/include/libwifi6.h
index dc1751c..34a6ec8 100755
--- a/src/lynq/lib/liblynq-wifi6/include/libwifi6.h
+++ b/src/lynq/lib/liblynq-wifi6/include/libwifi6.h
@@ -49,6 +49,7 @@
 typedef enum {
     LYNQ_WIFI_STATUS_DISCONNECT = 0,
     LYNQ_WIFI_STATUS_CONNECT,
+    LYNQ_WIFI_SERVICE_ABNORMAL,
 }lynq_wifi_ap_status_s;
 
 typedef struct ap_info
@@ -153,6 +154,7 @@
 
 //sta start connect to dest_ap
 int lynq_wifi_sta_connect(lynq_wifi_index_e idx, char *ssid, lynq_wifi_auth_s auth, char *psw);
+int lynq_wifi_sta_connect_timeout(lynq_wifi_index_e idx, char *ssid, lynq_wifi_auth_s auth, char *psw, int timeout);
 //disconnect 
 int lynq_wifi_sta_disconnect(lynq_wifi_index_e idx,char *ssid);
 
@@ -186,6 +188,9 @@
     LYNQ_WIFI_STA_STATUS_DISCONNECT = 0,
     LYNQ_WIFI_STA_STATUS_CONNECT,
     LYNQ_WIFI_STA_STATUS_SCAN_RESULT,    //finish sta scan 
+    LYNQ_WIFI_STA_STATUS_CONNECT_FAIL,
+    LYNQ_WIFI_STA_SERVICE_ABNORMAL,
+    LYNQ_WIFI_STATUS_EGNORE,
 }lynq_wifi_sta_status_s;
 typedef enum
 {
diff --git a/src/lynq/lib/liblynq-wifi6/libwifi6.c b/src/lynq/lib/liblynq-wifi6/libwifi6.c
index 39314d2..b9658b9 100755
--- a/src/lynq/lib/liblynq-wifi6/libwifi6.c
+++ b/src/lynq/lib/liblynq-wifi6/libwifi6.c
@@ -22,6 +22,8 @@
 #include <netdb.h>
 #include <ifaddrs.h>
 #include "log/log.h"
+#include <sys/time.h>
+#include <asm/errno.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -38,6 +40,7 @@
 #define CTRL_STA 0
 #define CTRL_AP 1
 #define AP_NETWORK_0 0
+#define STA_MAX_SAVED_AP_NUM 50
 
 pthread_t g_ap_watcher_pid = 0;
 volatile int g_ap_watcher_stop_flag = 0;
@@ -62,13 +65,30 @@
 const char * cmd_remove_all = "REMOVE_NETWORK all";
 const char * state_scan_result = "CTRL-EVENT-SCAN-RESULTS";
 const char * STATE_COMPLETED = "COMPLETED";
+const char * STATE_DISCONNECTED = "DISCONNECTED";
+
+const char * cmd_ping = "PING";
+const char * rsp_pong = "PONG";
+const int SLEEP_TIME_ON_IDLE = 100 * 1000; // usecond
+const int MAX_IDLE_COUNT = 600; // 60s
+
+const char * start_wg870_service_script = "/etc/wg870/scripts/start_wg870_service.sh";
+const char * get_interface_name_script = "/etc/wg870/scripts/get_interface_name.sh";
+const char * start_stop_sta_script = "/etc/wg870/scripts/start_stop_sta.sh";
+const char * start_stop_ap_script = "/etc/wg870/scripts/start_stop_ap.sh";
+const char * sta_status_change_script = "/etc/wg870/scripts/sta_status_change.sh";
+
+static char s_ap_iterface_name[64] = {0};
 
 struct local_wpa_ctrl{
     struct wpa_ctrl *ctrl;
     pthread_mutex_t mutex;
 };
 
+
 static pthread_mutex_t s_check_wpa_ctrl_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t s_sta_callback_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t s_ap_callback_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static struct local_wpa_ctrl * g_lynq_wpa_ctrl[2] = {0};
 
@@ -86,6 +106,117 @@
     int net_no;
 }curr_status_info;
 
+typedef enum {
+    INNER_STA_STATUS_INIT = 0,
+    INNER_STA_STATUS_CONNECTING,
+    INNER_STA_STATUS_ASSOCIATING,
+    INNER_STA_STATUS_ASSOCIATED,
+    INNER_STA_STATUS_CONNECTED,
+    INNER_STA_STATUS_DISCONNECTING,
+    INNER_STA_STATUS_DISCONNECTED,
+    INNER_STA_STATUS_CANCEL,
+}inner_sta_status_s;
+
+static pthread_cond_t s_global_check_cond = PTHREAD_COND_INITIALIZER;
+static pthread_mutex_t s_global_check_mutex = PTHREAD_MUTEX_INITIALIZER;
+static inner_sta_status_s s_sta_status = INNER_STA_STATUS_INIT;
+static error_number_s s_sta_error_number = -1;
+static char s_sta_current_connecting_ssid[64] = {0};
+static struct timespec s_sta_connect_timeout;
+const int MAX_CONNNECT_TIME = 15; // second
+pthread_t g_global_watcher_pid = 0;
+static int s_service_invoke_timeout_cnt=0;
+const int FAKE_MAX_INT_VALUE = 99999;
+
+static void notify_service_invoke_fail(int error)
+{
+    struct local_wpa_ctrl *lynq_wpa_ctrl = NULL;
+    pthread_mutex_lock(&s_global_check_mutex);
+    if (error == -2) //timeout
+    {
+        s_service_invoke_timeout_cnt++;
+        if (s_service_invoke_timeout_cnt > 10)
+        {
+            pthread_cond_signal(&s_global_check_cond);
+        }
+    }
+    else if (error == -1)
+    {
+        // check if can connect wpa service
+        lynq_wpa_ctrl = wpa_ctrl_open(CTRL_PATH[0]);
+        if (lynq_wpa_ctrl == NULL)
+        {
+            s_service_invoke_timeout_cnt = FAKE_MAX_INT_VALUE;
+            pthread_cond_signal(&s_global_check_cond);
+        }
+        wpa_ctrl_close(lynq_wpa_ctrl);
+        lynq_wpa_ctrl = wpa_ctrl_open(CTRL_PATH[1]);
+        if (lynq_wpa_ctrl == NULL)
+        {
+            s_service_invoke_timeout_cnt = FAKE_MAX_INT_VALUE;
+            pthread_cond_signal(&s_global_check_cond);
+        }
+        wpa_ctrl_close(lynq_wpa_ctrl);
+    }
+
+    pthread_mutex_unlock(&s_global_check_mutex);
+}
+
+static int system_call_v(const char * fmt, ...)
+{
+    char str_cmd[256] = {0};
+    va_list args;
+    va_start(args, fmt);
+    vsprintf(str_cmd, fmt, args);
+    va_end(args);
+    printf("system call----------%s\n", str_cmd);
+    return system(str_cmd);
+}
+
+static int exec_cmd(const char *str_cmd, char * str_cmd_ret, size_t max_len);
+
+static const char * inner_get_ap_interface_name()
+{
+    char * p;
+    char cmd[128]={0};
+
+    sprintf(cmd, "%s %d", get_interface_name_script, LYNQ_WIFI_INTERFACE_1);
+    if (0 != exec_cmd(cmd, s_ap_iterface_name, sizeof(s_ap_iterface_name)) || s_ap_iterface_name[0] == '\0')
+    {
+        memset(s_ap_iterface_name, 0, sizeof (s_ap_iterface_name));
+        return NULL;
+    }
+    p = strchr(s_ap_iterface_name, ' ');
+    if (NULL != p)
+    {
+        *p = '\0';
+    }
+    p = strchr(s_ap_iterface_name, '\n');
+    if (NULL != p)
+    {
+        *p = '\0';
+    }
+    if (s_ap_iterface_name[0] == '\0')
+    {
+        return NULL;
+    }
+
+    return s_ap_iterface_name;
+}
+
+static void check_tether_and_notify()
+{
+    RLOGD("check_tether_and_notify called");
+    if (inner_get_ap_interface_name() == NULL || 0 == system_call_v("ifconfig | grep %s", s_ap_iterface_name))
+    {
+        return;
+    }
+    pthread_mutex_lock(&s_global_check_mutex);
+    s_service_invoke_timeout_cnt = FAKE_MAX_INT_VALUE;
+    pthread_cond_signal(&s_global_check_cond);
+    pthread_mutex_unlock(&s_global_check_mutex);
+}
+
 static int local_wpa_ctrl_request(struct local_wpa_ctrl *ctrl, const char *cmd, size_t cmd_len,
                             char *reply, size_t *reply_len,
                                   void (*msg_cb)(char *msg, size_t len))
@@ -98,6 +229,10 @@
     pthread_mutex_lock(&ctrl->mutex);
     ret = wpa_ctrl_request(ctrl->ctrl, cmd, cmd_len, reply, reply_len, msg_cb);
     pthread_mutex_unlock(&ctrl->mutex);
+    if (ret != 0)
+    {
+        notify_service_invoke_fail(ret);
+    }
     return ret;
 }
 
@@ -178,69 +313,157 @@
     }while (0)
 
 
-static int exec_cmd(const char *str_cmd, char * str_cmd_ret, size_t max_len);
+static int check_connection(struct wpa_ctrl * wpa_ctrl)
+{
+    size_t reply_len = MAX_RET;
+    char cmd_reply[MAX_RET]={0};
+    int ret;
+
+    RLOGD("check_connection [%p]", wpa_ctrl);
+    ret = wpa_ctrl_request(wpa_ctrl, cmd_ping, strlen(cmd_ping), cmd_reply, &reply_len, NULL);
+
+    if (ret != 0 || reply_len < 4 || memcmp(cmd_reply, rsp_pong, 4) != 0)
+    {
+        RLOGE("check_connection error: ctrl [%p], ret [%d], reply_len [%d], rsp [%s]", wpa_ctrl, ret, reply_len, cmd_reply);
+        if (ret != 0)
+        {
+            notify_service_invoke_fail(ret);
+        }
+        return -1;
+    }
+
+    return 0;
+}
+
+/**
+ * @brief check_pending_msg
+ * @param lynq_wpa_ctrl
+ * @return 1 has msg, 0 no msg, -1 error
+ */
+static int check_pending_msg(struct wpa_ctrl ** pp_lynq_wpa_ctrl, int type, int* idle_count, int *started_flag)
+{
+    int ret;
+
+    if (*pp_lynq_wpa_ctrl == NULL) // need connect
+    {
+        *pp_lynq_wpa_ctrl = wpa_ctrl_open(CTRL_PATH[type]); //@todo temp change
+        if (*pp_lynq_wpa_ctrl == NULL)
+        {
+            usleep(SLEEP_TIME_ON_IDLE);
+            return -1;
+        }
+
+        ret = wpa_ctrl_attach(*pp_lynq_wpa_ctrl);
+        if (ret == 0) // attach success
+        {
+            *started_flag = 1;
+        }
+        else
+        {
+            RLOGE("[wifi error]sta watch thread wpa_ctrl_attach fail");
+            wpa_ctrl_close(*pp_lynq_wpa_ctrl);
+            *pp_lynq_wpa_ctrl = NULL;
+            *idle_count = 0;
+            notify_service_invoke_fail(-2);
+            usleep(SLEEP_TIME_ON_IDLE);
+            return -1;
+        }
+    }
+
+    ret = wpa_ctrl_pending(*pp_lynq_wpa_ctrl);
+    if ( ret == 0) // no pending messages
+    {
+        usleep(SLEEP_TIME_ON_IDLE);
+        *idle_count += 1;
+        if (*idle_count > MAX_IDLE_COUNT)
+        {
+            if (check_connection(*pp_lynq_wpa_ctrl) != 0)
+            {
+                wpa_ctrl_detach(*pp_lynq_wpa_ctrl);
+                wpa_ctrl_close(*pp_lynq_wpa_ctrl);
+                *pp_lynq_wpa_ctrl = NULL;
+                *idle_count = 0;
+                return -1;
+            }
+            *idle_count = 0;
+        }
+        return 0;
+    }
+    else if ( ret == -1) // on error
+    {
+        RLOGE("[wifi error]sta wpa_ctrl_pending");
+        wpa_ctrl_detach(*pp_lynq_wpa_ctrl);
+        wpa_ctrl_close(*pp_lynq_wpa_ctrl);
+        *pp_lynq_wpa_ctrl = NULL;
+        *idle_count = 0;
+        notify_service_invoke_fail(ret);
+        return -1;
+    }
+
+    *idle_count = 0;
+    return 1;
+}
+
+static inline void inner_notify_ap_msg(lynq_wifi_ap_status_s status)
+{
+    pthread_mutex_lock(&s_ap_callback_mutex);
+    if (g_ap_callback_func != NULL)
+        g_ap_callback_func(g_ap_callback_priv, status);
+    pthread_mutex_unlock(&s_ap_callback_mutex);
+}
 
 static void APWatcherThreadProc() {
     size_t len = MAX_RET;
     char msg_notify[MAX_RET];
+    int idle_count = 0;
 
     struct wpa_ctrl *lynq_wpa_ctrl = NULL;
     g_ap_watcher_stop_flag = 0;
 
     while (g_ap_watcher_stop_flag == 0)
     {
-        if (lynq_wpa_ctrl == NULL)
-	{
-            lynq_wpa_ctrl = wpa_ctrl_open(CTRL_PATH[CTRL_AP]); //@todo temp change
-            if (lynq_wpa_ctrl == NULL)
-	    {
-                usleep(100*1000);
-                continue;
+        if (check_pending_msg(&lynq_wpa_ctrl, CTRL_AP, &idle_count, &g_ap_watcher_started_flag) != 1)
+        {
+            if (g_ap_callback_func != NULL && idle_count == MAX_IDLE_COUNT - 100 )
+            {
+                check_tether_and_notify();
             }
 
-            wpa_ctrl_attach(lynq_wpa_ctrl);
-            g_ap_watcher_started_flag = 1;
-        }
-
-        if ( 0 == wpa_ctrl_pending(lynq_wpa_ctrl))
-	{
-            usleep(100*1000);
             continue;
         }
+
         memset(msg_notify, 0, MAX_RET);
         len = MAX_RET;
         if (!wpa_ctrl_recv(lynq_wpa_ctrl, msg_notify, &len))
-	{
+        {
             msg_notify[len+1] = '\0';
             RLOGD("APWatcherThreadProc ap------> %s\n", msg_notify);
-//you.chen change for tv-box start
+            //you.chen change for tv-box start
             if (strstr(msg_notify, "AP-STA-DISCONNECTED") != NULL)
-	    {
-                if (g_ap_callback_func != NULL)
-                    g_ap_callback_func(g_ap_callback_priv, LYNQ_WIFI_STATUS_DISCONNECT);
+            {
+                inner_notify_ap_msg(LYNQ_WIFI_STATUS_DISCONNECT);
                 if (g_gbw_enabled == 1 && g_gbw_mac != NULL)
-		{
+                {
                     RLOGD("disconect %d, %s ,%s\n", g_gbw_enabled, g_gbw_mac, strstr(msg_notify, (const char*)g_gbw_mac));
                     if (strstr(msg_notify, (const char*)g_gbw_mac) != NULL)
-		    {
+                    {
                         stopGBW();
                     }
                 }
             }
             else if (strstr(msg_notify, "AP-STA-CONNECTED") != NULL)
-	    {
-                if (g_ap_callback_func != NULL)
-                    g_ap_callback_func(g_ap_callback_priv, LYNQ_WIFI_STATUS_CONNECT);
+            {
+                inner_notify_ap_msg(LYNQ_WIFI_STATUS_CONNECT);
                 if (g_gbw_enabled == 1 && g_gbw_mac != NULL)
-		{
+                {
                     RLOGD("conect %d, %s ,%s\n", g_gbw_enabled, g_gbw_mac, strstr(msg_notify, (const char*)g_gbw_mac));
                     if (strstr(msg_notify, (const char*)g_gbw_mac) != NULL)
-		    {
+                    {
                         startGBW();
                     }
                 }
             }
-//you.chen add for tv-box end
+            //you.chen add for tv-box end
         } // end if (!wpa_ctrl_recv(lynq_wpa_ctrl, msg_notify, &len))
     } // end while (g_ap_watcher_stop_flag == 0)
     if (lynq_wpa_ctrl != NULL)
@@ -250,6 +473,47 @@
     }
 }
 
+static void inner_check_connect_error(const char * event_msg, lynq_wifi_sta_status_s state, error_number_s error_num)
+{
+    char * p;
+    const char * try_associat_flag = "Trying to associate";
+    const char * associated_flag = "Associated with ";
+
+    pthread_mutex_lock(&s_global_check_mutex);
+    if (s_sta_status < INNER_STA_STATUS_CONNECTING || s_sta_status >= INNER_STA_STATUS_CONNECTED) //not in connecting stage, egnore
+    {
+        pthread_mutex_unlock(&s_global_check_mutex);
+        return;
+    }
+
+    if (state == LYNQ_WIFI_STATUS_EGNORE)
+    {
+        if (strstr(event_msg, try_associat_flag) != NULL && strstr(event_msg, s_sta_current_connecting_ssid) != NULL) //associating request ssid
+        {
+            s_sta_status = INNER_STA_STATUS_ASSOCIATING;
+        }
+        else if (s_sta_status == INNER_STA_STATUS_ASSOCIATING && (p=strstr(event_msg, associated_flag)) != NULL)
+        {
+            s_sta_status = INNER_STA_STATUS_ASSOCIATED;
+        }
+    }
+    else if (state == LYNQ_WIFI_STA_STATUS_DISCONNECT)
+    {
+        s_sta_error_number = error_num;
+        if (s_sta_status >= INNER_STA_STATUS_ASSOCIATING && strstr(event_msg, "CTRL-EVENT-SSID-TEMP-DISABLED") != NULL && error_num != LYNQ_WAIT_CONNECT_ACTIVE)
+        {
+            s_sta_status = INNER_STA_STATUS_DISCONNECTED;
+            pthread_cond_signal(&s_global_check_cond);
+        }
+    }
+    else if (state == LYNQ_WIFI_STA_STATUS_CONNECT)
+    {
+        s_sta_status = INNER_STA_STATUS_CONNECTED;
+        pthread_cond_signal(&s_global_check_cond);
+    }
+    pthread_mutex_unlock(&s_global_check_mutex);
+}
+
 void get_state_error(const char* modify, lynq_wifi_sta_status_s* state, error_number_s* error)
 {
     char *pReason;
@@ -360,42 +624,44 @@
         return;
     }
 
+    RLOGD("EVENT : %s\n", modify);
     *error = LYNQ_UNSPECIFIED_REASON;
-    *state = LYNQ_WIFI_STA_STATUS_DISCONNECT;
+    *state = LYNQ_WIFI_STATUS_EGNORE;
     RLOGD("LAST : STA state:%d,error:%d\n",*state,*error);
     return;
 
 }
 
+static void notify_connect_status(lynq_wifi_sta_status_s state, error_number_s error)
+{
+    pthread_mutex_lock(&s_sta_callback_mutex);
+    if (g_sta_callback_func != NULL && state != LYNQ_WIFI_STATUS_EGNORE)
+    {
+        RLOGD("STAWatcherThreadProc callback begin ------> %d %d\n", state, error);
+        g_sta_callback_func(g_sta_callback_priv, state, error);
+        RLOGD("STAWatcherThreadProc callback end ------> %d %d\n", state, error);
+    }
+    pthread_mutex_unlock(&s_sta_callback_mutex);
+}
+
 static void STAWatcherThreadProc() {
     size_t len = MAX_RET;
     char msg_notify[MAX_RET];
     error_number_s error;
-    lynq_wifi_sta_status_s state;
+    lynq_wifi_sta_status_s state, last_state = -1;
+    int idle_count = 0;
 
     struct wpa_ctrl *lynq_wpa_ctrl = NULL;
     g_sta_watcher_stop_flag = 0;
 
+    RLOGD("STAWatcherThreadProc thread started ------");
     while (g_sta_watcher_stop_flag == 0)
     {
-        if (lynq_wpa_ctrl == NULL)
+        if (check_pending_msg(&lynq_wpa_ctrl, CTRL_STA, &idle_count, &g_sta_watcher_started_flag) != 1)
         {
-            lynq_wpa_ctrl = wpa_ctrl_open(CTRL_PATH[CTRL_STA]);
-            if (lynq_wpa_ctrl == NULL)
-            {
-                usleep(100*1000);
-                continue;
-            }
-
-            wpa_ctrl_attach(lynq_wpa_ctrl);
-            g_sta_watcher_started_flag = 1;
-        }
-
-        if ( 0 == wpa_ctrl_pending(lynq_wpa_ctrl))
-        {
-            usleep(100*1000);
             continue;
         }
+
         memset(msg_notify, 0, MAX_RET);
         len = MAX_RET;
         if (!wpa_ctrl_recv(lynq_wpa_ctrl, msg_notify, &len))
@@ -412,8 +678,25 @@
                 continue;
             }
             get_state_error(msg_notify,&state,&error);
-            g_sta_callback_func(g_sta_callback_priv, state, error);
+            notify_connect_status(state, error);
 
+            if (state != LYNQ_WIFI_STA_STATUS_SCAN_RESULT)
+            {
+                inner_check_connect_error(msg_notify, state, error);
+                if (last_state != state)
+                {
+                    if (state == LYNQ_WIFI_STA_STATUS_CONNECT)
+                    {
+                        system_call_v("%s %s", sta_status_change_script, "connect");
+                    }
+                    else if (state == LYNQ_WIFI_STA_STATUS_DISCONNECT)
+                    {
+                        system_call_v("%s %s", sta_status_change_script, "disconnect");
+                    }
+                }
+
+                last_state = state;
+            }
         }
     }
     if (lynq_wpa_ctrl != NULL)
@@ -423,6 +706,127 @@
     }
 }
 
+// this thread will not exit when lynq_wifi_disable called,to avoid dead lock,take care
+static void GlobalWatcherThreadProc()
+{
+    int ret, connect_timeout, service_abnormal;
+    error_number_s error_num = -1;
+    inner_sta_status_s sta_status;
+    scan_info_s *scan_list = NULL;
+    int i, scan_len=0;
+    char connecting_ssid[64];
+    struct timeval now;
+
+    RLOGD("GlobalWatcherThreadProc start to run");
+
+    while (1)
+    {
+        pthread_mutex_lock(&s_global_check_mutex);
+        pthread_cond_wait(&s_global_check_cond,&s_global_check_mutex);
+        if (s_sta_status == INNER_STA_STATUS_CONNECTED)
+        {
+            pthread_mutex_unlock(&s_global_check_mutex);
+            usleep(50*1000);
+            notify_connect_status(LYNQ_WIFI_STA_STATUS_CONNECT, 0);
+            continue;
+        }
+
+        connect_timeout = 0;
+        service_abnormal = 0;
+        if (s_sta_status >= INNER_STA_STATUS_CONNECTING && s_sta_status < INNER_STA_STATUS_CONNECTED)
+        {
+            while (1)
+            {
+                ret = pthread_cond_timedwait(&s_global_check_cond, &s_global_check_mutex, &s_sta_connect_timeout);
+                if (ret == ETIME)
+                {
+                    connect_timeout = 1;
+                }
+                else if (ret != 0)
+                {
+                    gettimeofday(&now,NULL);
+                    if (now.tv_sec < s_sta_connect_timeout.tv_sec) //time not arrive
+                    {
+                        usleep(SLEEP_TIME_ON_IDLE);
+                        continue;
+                    }
+                    connect_timeout = 1;
+                }
+                sta_status = s_sta_status;
+                error_num = s_sta_error_number;
+                s_sta_status = INNER_STA_STATUS_INIT;
+                strcpy(connecting_ssid, s_sta_current_connecting_ssid);
+                memset(&s_sta_connect_timeout, 0, sizeof (s_sta_connect_timeout));
+                memset(&s_sta_current_connecting_ssid, 0, sizeof (s_sta_current_connecting_ssid));
+                break;
+            }
+        }
+        if (s_service_invoke_timeout_cnt > 10)
+        {
+            service_abnormal = 1;
+            s_service_invoke_timeout_cnt = 0;
+        }
+        pthread_mutex_unlock(&s_global_check_mutex);
+
+        if (service_abnormal == 1)
+        {
+            sleep(1);
+            RLOGE("wpa service is abnormal info app to exit");
+            notify_connect_status(LYNQ_WIFI_STA_SERVICE_ABNORMAL, -1);
+
+            inner_notify_ap_msg(LYNQ_WIFI_SERVICE_ABNORMAL);
+
+            sleep(FAKE_MAX_INT_VALUE); // wait process to exit
+        }
+
+        if (sta_status == INNER_STA_STATUS_CANCEL)
+        {
+            continue;
+        }
+        else if (sta_status == INNER_STA_STATUS_CONNECTED)
+        {
+            notify_connect_status(LYNQ_WIFI_STA_STATUS_CONNECT, 0);
+        }
+        else if (connect_timeout == 0 && error_num == LYNQ_NOT_FIND_AP) // not found ap maybe mismatch auth
+        {
+            if (0 == lynq_get_scan_list(0, &scan_list, &scan_len) && NULL != scan_list) // if not found, but scan result exist, maybe auth error
+            {
+                for(i=0; i < scan_len;i++)
+                {
+                    if (strcmp(scan_list[i].ssid, connecting_ssid) == 0)
+                    {
+                        error_num = LYNQ_AUTH_ERROR;
+                        break;
+                    }
+                }
+                free(scan_list);
+            }
+            notify_connect_status(LYNQ_WIFI_STA_STATUS_CONNECT_FAIL, error_num);
+        }
+        else if (connect_timeout == 0)
+        {
+            notify_connect_status(LYNQ_WIFI_STA_STATUS_CONNECT_FAIL, error_num);
+        }
+        else // wait timeout
+        {
+            if (0 != lynq_get_sta_status(LYNQ_WIFI_INTERFACE_0, &sta_status)) // get status fail
+            {
+                ; // wpa service abnormal
+            }
+            else if (sta_status == LYNQ_WIFI_STA_STATUS_ENABLE) // connect ok
+            {
+                RLOGD("GlobalWatcherThreadProc notify connected");
+                notify_connect_status(LYNQ_WIFI_STA_STATUS_CONNECT, 0);
+            }
+            else
+            {
+                RLOGD("GlobalWatcherThreadProc notify timeout");
+                notify_connect_status(LYNQ_WIFI_STA_STATUS_CONNECT_FAIL, LYNQ_TIME_OUT);
+            }
+        }
+    } // while (1)
+}
+
 int lynq_wifi_enable(void)
 {
     int ret = 0;
@@ -435,15 +839,7 @@
         goto out_enable;
     }
 
-    const char * cmd_check_service =
-            "state=`systemctl is-active wg870_drv_insmod.service`\n"
-            "[ \"\"$state == \"active\" ] && exit 0\n"
-            "[ \"\"$state == \"inactive\" ] && systemctl start wg870_drv_insmod.service\n";
-//    if (g_lynq_wpa_ctrl[0] != NULL && g_lynq_wpa_ctrl[1] != NULL) {
-//        return 0;
-//    }
-
-    ret = system(cmd_check_service);
+    ret = system(start_wg870_service_script);
     if (ret != 0)
     {
         //printf("service state %d\n", ret);
@@ -452,80 +848,16 @@
         goto out_enable;
     }
 
-    RLOGD("check service state is OK");
-    for (i=0; i<10; i++)
+    if (g_global_watcher_pid == 0 ) // this thread will not exit when lynq_wifi_disable called,to avoid dead lock,take care
     {
-        if (system("connmanctl technologies | grep -q \"/net/connman/technology/wifi\"") == 0) {
-            break;
-        }
-        usleep(300*1000);
-    }
-
-    if (i >= 10)
-    {
-	RLOGE("[wifi error] check connman technologies no wifi");
-        ret = -1;
-        goto out_enable;
-    }
-
-    //@todo delete add temp check for socket avilable start (20220606)
-    for (i=0; i<60; i++)
-    {
-        if (system("netstat -an | grep -q DGRAM") == 0) {
-            break;
-        }
-        sleep(1);
-    }
-
-    if (i >= 60)
-    {
-        ret  = -1;
-        goto out_enable;
-    }
-    //@todo delete add temp check for socket avilable end (20220606)
-
-    if (0 != system("ifconfig | grep -q ap0"))
-    {
-        system("connmanctl enable wifi");
-        usleep(300*1000);
-        system("wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 disconnect");
-        system("wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 DRIVER interface_create ap0");
-        usleep(300*1000);
-        system("connmanctl tether wifi on lynq 1qaz@WSX#$%^");
-        usleep(300*1000);
-        system("wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=ap0 disconnect");
-    }
-    if (g_ap_watcher_pid == 0 )
-    {
-        ret=pthread_create(&g_ap_watcher_pid,NULL,APWatcherThreadProc,NULL);
+        ret=pthread_create(&g_global_watcher_pid,NULL,GlobalWatcherThreadProc,NULL);
         if(ret<0)
-	{
-            RLOGE("[wifi error]creat APWatcherThreadProc fail");
+        {
+            RLOGE("[wifi error]creat GlobalWatcherThreadProc fail");
             ret = -1;
             goto out_enable;
         }
     }
-    
-    RLOGD("creat APWatcherTheradProc susccs");
-    if (g_sta_watcher_pid == 0 ) {
-        ret=pthread_create(&g_sta_watcher_pid,NULL,STAWatcherThreadProc,NULL);
-        if(ret<0)
-	{
-            RLOGE("[wifi error]creat STAWatcherThreadProc fail");
-            ret = -1;
-            goto out_enable;
-        }
-    }
-
-    RLOGD("creat STAWatcherTheradProc susccs");
-    for (i=0; i<10; i++)
-    {
-        usleep(300*1000);
-        if (g_ap_watcher_started_flag == 1 && g_sta_watcher_started_flag == 1)
-	{
-            break;
-        }
-    }
 
     g_lynq_wpa_ctrl[0] = malloc(sizeof (struct local_wpa_ctrl));
     g_lynq_wpa_ctrl[1] = malloc(sizeof (struct local_wpa_ctrl));
@@ -726,6 +1058,8 @@
         *str = '\0';
     }
 
+    results[ret] = NULL;
+
     return ret;
 }
 
@@ -751,6 +1085,9 @@
 static int inner_get_hostname_by_ip(char *ip, char *hostname) {
     struct in_addr addr ={0};
     struct hostent *ht;
+    char cmd[64] = {0};
+    char * p;
+    int ret;
 
     if (ip == NULL || *ip == '\0' || hostname == NULL)
     {
@@ -769,6 +1106,19 @@
 
     if (ht == NULL)
     {
+        hostname[0] = '\0';
+        sprintf(cmd, "grep -F '%s' /run/wg870/ap0.lease | awk '{print $4}' | tail -1", ip);
+        ret = exec_cmd(cmd, hostname, 32);
+        if (ret == 0)
+        {
+            p = strchr(hostname, '\n');
+            if (p != NULL)
+            {
+                *p = '\0';
+            }
+            return 0;
+        }
+        hostname[0] = '\0';
         RLOGE("---gethostbyaddr fail\n");
         herror(NULL);
         return -1;
@@ -972,6 +1322,7 @@
     return -1;
 }
 
+static int inner_get_network_auth(int interface, int net_no, lynq_wifi_auth_s *auth);
 static int inner_get_status_info(int interface, curr_status_info *curr_state) {
     int i, count;
     char *p;
@@ -1002,24 +1353,24 @@
     for(i=0; i < count; i++)
     {
         if (curr_state->ap != NULL)
-	{
+        {
             p = strstr(split_lines[i], FLAG_SBSID);
             if (p != NULL)
-	    {
+            {
                 strncpy(curr_state->ap->ap_mac, p + strlen(FLAG_SBSID), sizeof(curr_state->ap->ap_mac));
                 ret = 0;
                 continue;
             }
             p = strstr(split_lines[i], FLAG_SSID);
             if (p != NULL)
-	    {
+            {
                 inner_copy_ssid(curr_state->ap->ap_ssid, p + strlen(FLAG_SSID), sizeof (curr_state->ap->ap_ssid));
                 ret = 0;
                 continue;
             }
             p = strstr(split_lines[i], FLAG_KEY_MGMT);
             if (p != NULL)
-	    {
+            {
                 curr_state->ap->auth = convert_auth_from_key_mgmt(p + strlen(FLAG_KEY_MGMT));
                 RLOGD("inner_get_status_info: key_mgmt %d, -- %s\n", curr_state->ap->auth, p);
                 ret = 0;
@@ -1027,24 +1378,24 @@
             }
             p = strstr(split_lines[i], FLAG_FREQ);
             if (p != NULL)
-	    {
+            {
                 curr_state->ap->band = convert_band_from_freq(atoi( p + strlen(FLAG_FREQ)));
                 ret = 0;
                 continue;
             }
             p = strstr(split_lines[i], FLAG_IPADDR);
             if (p != NULL)
-	    {
+            {
                 strncpy(curr_state->ap->ap_ip, p + strlen(FLAG_IPADDR), sizeof(curr_state->ap->ap_ip));
                 ret = 0;
                 continue;
             }
         } // end  if (ap != NULL)
         if (curr_state->state != NULL)
-	{
+        {
             p = strstr(split_lines[i], FLAG_STATE);
             if (p != NULL)
-	    {
+            {
                 strcpy(curr_state->state, p + strlen(FLAG_STATE));
                 ret = 0;
                 continue;
@@ -1052,17 +1403,21 @@
 
         } //end else if (state != NULL)
         if ((p = strstr(split_lines[i], FLAG_ID)) == split_lines[i])
-	{
+        {
             ret = 0;
             curr_state->net_no = atoi(p + strlen(FLAG_ID));
             RLOGD("inner_get_status_info:net_no %d, -- %s\n", curr_state->net_no, p);
         }
     }
 
+    if (ret == 0 && curr_state->ap != NULL && curr_state->net_no >= 0) // auth may not right when add wpa3
+    {
+        inner_get_network_auth(interface, curr_state->net_no, &curr_state->ap->auth);
+    }
+
     return ret;
 }
 
-
 int lynq_wifi_ap_ssid_set(lynq_wifi_index_e idx,char *ap_ssid)
 {
     RLOGD("enter lynq_wifi_ap_ssid_set");
@@ -1575,6 +1930,49 @@
     return 0;
 }
 
+static int inner_check_ap_connected(lynq_wifi_index_e idx, int retry_count)
+{
+    char status[64];
+    char LYNQ_WIFI_CMD[32]={0};
+    curr_status_info curr_state;
+
+    CHECK_WPA_CTRL(CTRL_AP);
+
+    memset(status, 0, sizeof (status));
+
+    curr_state.ap = NULL;
+    curr_state.state = status;
+
+    printf("inner_check_ap_connected %d\n", retry_count);
+    usleep(500*1000);
+    if (0 == inner_get_status_info(idx, &curr_state))
+    {
+        if (strcmp(status, STATE_COMPLETED) == 0)
+        {
+            return 0;
+        }
+        else if (retry_count == 4) //not ok in 2s, do reconnect
+        {
+            DO_REQUEST("RECONNECT");
+            return inner_check_ap_connected(idx, retry_count+1);
+        }
+        else if (retry_count > 20)
+        {
+            printf("retry 10 time\n");
+            return -1;
+        }
+        else
+        {
+            if (strcmp(status, STATE_DISCONNECTED) == 0)
+            {
+                sprintf(LYNQ_WIFI_CMD,"SELECT_NETWORK %d",AP_NETWORK_0);
+                DO_REQUEST(LYNQ_WIFI_CMD);
+            }
+            return inner_check_ap_connected(idx, retry_count+1);
+        }
+    }
+    return -1;
+}
 
 int lynq_wifi_ap_start(lynq_wifi_index_e idx)
 {
@@ -1586,11 +1984,11 @@
 
     CHECK_WPA_CTRL(CTRL_AP);
 
-//    system("connmanctl enable wifi");
-//    system("connmanctl tether wifi on cy-test 12345678");
-//    system("ifconfig wlan0 down");
-//    system("ifconfig wlan0 up");
-//    system("ifconfig wlan0 up");
+    if (inner_get_ap_interface_name() == NULL)
+    {
+        RLOGE("lynq_wifi_ap_start get ap name fail");
+        return -1;
+    }
 
     //DO_OK_FAIL_REQUEST(lynq_remove_all_cmd);
     //DO_OK_FAIL_REQUEST(lynq_reconfig_cmd);
@@ -1598,6 +1996,20 @@
     sprintf(LYNQ_WIFI_CMD,"SELECT_NETWORK %d",AP_NETWORK_0);
     DO_OK_FAIL_REQUEST(LYNQ_WIFI_CMD);
 
+    ret = system_call_v("%s %s", start_stop_ap_script, "start");
+    if (ret != 0)
+    {
+        RLOGE("lynq_wifi_ap_start excute script fail");
+        return -1;
+    }
+
+    if (inner_check_ap_connected(idx, 0) != 0)
+    {
+        return -1;
+    }
+
+    check_tether_and_notify();
+
     return 0;
 }
 
@@ -1619,7 +2031,14 @@
     DO_OK_FAIL_REQUEST(LYNQ_WIFI_CMD);
 
 //    system("connmanctl tether wifi off");
-	
+
+    ret = system_call_v("%s %s", start_stop_ap_script, "stop");
+    if (ret != 0)
+    {
+        RLOGE("lynq_wifi_ap_start excute script fail");
+        return -1;
+    }
+
     return 0;
 }
 
@@ -1834,24 +2253,33 @@
     if (*auth == LYNQ_WIFI_AUTH_WPA_PSK)
     {
         if (inner_get_param(interface, net_no, "proto", lynq_proto_str) == 0)
-	{
+        {
             if (strcmp(lynq_proto_str, "RSN") == 0)
-	    {
+            {
                 *auth = LYNQ_WIFI_AUTH_WPA2_PSK;
                 return 0;
             }
+            else if (strcmp(lynq_proto_str, "WPA") == 0) // need compare when wpa3 supported
+            {
+                return 0;
+            }
         }
     }
+    else if (*auth == LYNQ_WIFI_AUTH_OPEN || *auth == LYNQ_WIFI_AUTH_WEP)
+    {
+        return 0;
+    }
+
     if (inner_get_param(interface, net_no,"ieee80211w",lynq_auth_str) !=0)
     {
-	RLOGE("check ieee80211w error\n");
+        RLOGE("check ieee80211w error\n");
         return -1;
     }
     if ( strncmp(lynq_auth_str,"1",1) == 0 )
     {
 
-       *auth = LYNQ_WIFI_AUTH_WPA2_WPA3_PSK;
-       return 0;
+        *auth = LYNQ_WIFI_AUTH_WPA2_WPA3_PSK;
+        return 0;
     }else if( strncmp(lynq_auth_str,"2",1) == 0 )
     {
 
@@ -1859,6 +2287,7 @@
         return 0;
     }else
     {
+        RLOGE("check ieee80211w error, not 1 or 2\n");
         *auth = -1;
         return -1;
     }
@@ -1917,10 +2346,11 @@
     char *split_lines[128] = {0};
     char *buff, *p, *ssid, *ssid_end_flag;
     char tmp_ssid[128]={0};
-	RLOGD("enter lynq_sta_ssid_password_get");
+    RLOGD("enter lynq_sta_ssid_password_get");
 
     network_len = 0;
     p = NULL;
+    buff = NULL;
 
     CHECK_IDX(idx, CTRL_STA);
 
@@ -1937,46 +2367,62 @@
         return  -1;
     }
 
-    buff = alloca(MAX_RET);
+    fseek(fp, 0, SEEK_END);
+    len = ftell(fp);
+    buff = malloc(len + 1);
+
+    if (buff == NULL)
+    {
+        RLOGE("[lynq_sta_ssid_password_get] malloc memory [%d] fail\n", len);
+        return  -1;
+    }
+
     fseek(fp, 0, SEEK_SET);
-    len = fread(buff, 1, MAX_RET, fp);
+    len = fread(buff, 1, len, fp);
     fclose(fp);
 
     for(index=0; index < len; index ++)
     {
         for(; index < len; index ++)
-	{
+        {
             if (memcmp(buff + index, "network={", 9) != 0)
-	    {
+            {
                 continue;
             }
-             p = buff + index + 9;
-             for (; index < len; index ++ )
-	     {
-                 if (buff[index] != '}')
-		 {
-                     continue;
-                 }
-                 buff[index] = '\0';
-                 break;
-             }
-             network_len = buff + index - p;
-             break;
+            p = buff + index + 9;
+            for (; index < len; index ++ )
+            {
+                if (buff[index] != '}')
+                {
+                    continue;
+                }
+                buff[index] = '\0';
+                break;
+            }
+            network_len = buff + index - p;
+            break;
         }
 
         if (p == NULL)
+        {
+            if (buff != NULL)
+            {
+                free(buff);
+            }
+
             return -1;
+        }
 
         ssid = strstr(p, "ssid=");
         if (ssid != NULL) {
             ssid += strlen("ssid=");
             if (ssid[0] == '\"')
-	    {
+            {
                 if (memcmp(ssid + 1, ap->ap_ssid, strlen(ap->ap_ssid)) == 0 && ssid[strlen(ap->ap_ssid) + 1] == '\"')
                     break;
             }
             else
-	    {
+            {
                 ssid_end_flag = strstr(ssid, "\n");
                 if (ssid_end_flag != NULL)
                 {
@@ -1995,6 +2441,10 @@
 
     if (index >= len || NULL == p || network_len <= 0)
     {
+        if (buff != NULL)
+        {
+            free(buff);
+        }
         return -1;
     }
 
@@ -2005,23 +2455,23 @@
     {
         p = strstr(split_lines[index], "psk=");
         if (p != NULL)
-	{
+        {
             p += 4;
             if (*p == '\"')
-	    {
+            {
                 p++;
             }
         }
         else if (NULL != (p = strstr(split_lines[index], "wep_key0=")))
-	{
+        {
             p += 9;
             if (*p == '\"')
-	    {
+            {
                 p++;
             }
         }
         else
-	{
+        {
             continue;
         }
 
@@ -2031,9 +2481,9 @@
 
         p = password;
         while(password - p < 64 && *password != '\0')
-	{
+        {
             if (*password == '\"')
-	    {
+            {
                 *password = '\0';
                 break;
             }
@@ -2043,6 +2493,11 @@
         break;
     } //end for(index=0; index < count; index++)
 
+    if (buff != NULL)
+    {
+        free(buff);
+    }
+
     return ret;
 }
 
@@ -2162,6 +2617,7 @@
         {
             info->status = LYNQ_WIFI_AP_STATUS_DISABLE;
         }
+        lynq_get_connect_ap_ip(idx, info->base_info.ap_ip);
         lynq_get_connect_ap_rssi(idx, &info->rssi);
         lynq_sta_ssid_password_get(idx, & info->base_info, info->base_info.psw);
         return 0;
@@ -2300,14 +2756,12 @@
 	case LYNQ_WIFI_AUTH_WPA3_PSK:
 	{
             sprintf(lynq_auth_cmd,"SET_NETWORK %d ieee80211w 2",net_no);
-            sprintf(lynq_ket_mgmt_cmd,"SET_NETWORk %d key_mgmt SAE",net_no);
+            sprintf(lynq_ket_mgmt_cmd,"SET_NETWORK %d key_mgmt SAE",net_no);
             sprintf(lynq_pairwise_cmd,"SET_NETWORK %d pairwise CCMP", net_no);
             sprintf(lynq_psk_cmd, "SET_NETWORK %d psk \"%s\"", net_no, password);
             
 	    DO_OK_FAIL_REQUEST(lynq_auth_cmd);
-	    RLOGD("inner_set_sta_auth_psw before set SAE CMD");
             DO_OK_FAIL_REQUEST(lynq_ket_mgmt_cmd);
-	    RLOGD("inner_set_sta_auth_psw after set SAE CMD");
             DO_OK_FAIL_REQUEST(lynq_pairwise_cmd);
             DO_OK_FAIL_REQUEST(lynq_psk_cmd);
 
@@ -2348,11 +2802,15 @@
     return inner_get_network_auth(CTRL_STA, net_no, auth);
 }
 
-int lynq_wifi_sta_connect(lynq_wifi_index_e idx, char *ssid, lynq_wifi_auth_s auth, char *psw)
+int lynq_wifi_sta_connect_timeout(lynq_wifi_index_e idx, char *ssid, lynq_wifi_auth_s auth, char *psw, int timeout)
 {
     int count, net_no, index;
     int net_no_list[128];
+    char rm_net_cmd[128];
     lynq_wifi_auth_s net_auth;
+    curr_status_info curr_state;
+    ap_info_s ap_info;
+    char status[64];
 
     if (ssid == NULL || *ssid == '\0')
     {
@@ -2363,39 +2821,84 @@
     if (LYNQ_WIFI_AUTH_OPEN != auth)
     {
         if (psw == NULL || strlen(psw) < 8 || strlen(psw) >= 64)
-	{
+        {
             RLOGE("bad password\n");
             return -1;
         }
     }
 
+
+    pthread_mutex_lock(&s_global_check_mutex);
+    if (s_sta_status != INNER_STA_STATUS_INIT)
+    {
+        s_sta_status = INNER_STA_STATUS_CANCEL;
+        pthread_cond_signal(&s_global_check_cond);
+    }
+    pthread_mutex_unlock(&s_global_check_mutex);
+
     CHECK_IDX(idx, CTRL_STA);
+    CHECK_WPA_CTRL(CTRL_STA);
 
     net_no = -1;
-    count = lynq_get_network_number_list(idx, CTRL_STA, net_no_list, ssid);
+    memset(&ap_info, 0, sizeof (ap_info));
+    memset(status, 0, sizeof (status));
 
-    for (index=0; index < count; index++)
+    curr_state.ap = &ap_info;
+    curr_state.state = status;
+
+    if (0 == inner_get_status_info(CTRL_STA, &curr_state) && curr_state.net_no >= 0)
     {
-        net_auth = -1;
-        if (0 == inner_get_network_auth(CTRL_STA, net_no_list[index], &net_auth) && net_auth == auth)
-	{
-            net_no = net_no_list[index];
-            break;
+        if (strcmp(status, STATE_COMPLETED) == 0 && strcmp(ap_info.ap_ssid, ssid) ==0 && ap_info.auth == auth)
+        {
+            net_no = curr_state.net_no;
+            if (0 == lynq_sta_ssid_password_get(idx, &ap_info, ap_info.psw)
+                    && strcmp(ap_info.psw, psw) == 0)
+            {
+                RLOGD("already connected\n");
+
+                pthread_mutex_lock(&s_global_check_mutex);
+                s_sta_status = INNER_STA_STATUS_CONNECTED;
+                pthread_cond_signal(&s_global_check_cond);
+                pthread_mutex_unlock(&s_global_check_mutex);
+                return 0;
+            }
         }
     }
 
-    if (net_no < 0)
+    if (net_no == -1)
     {
-        net_no = lynq_add_network(CTRL_STA);
-        if (net_no == -1)
-	{
-            return -1;
+        count = lynq_get_network_number_list(idx, CTRL_STA, net_no_list, ssid);
+
+        for (index=0; index < count; index++)
+        {
+            net_auth = -1;
+            if (0 == inner_get_network_auth(CTRL_STA, net_no_list[index], &net_auth) && net_auth == auth)
+            {
+                net_no = net_no_list[index];
+                break;
+            }
         }
 
-        RLOGD("net no is %d\n", net_no);
-        if (0 != inner_set_sta_ssid(net_no, ssid))
-	{
-            return -1;
+        if (net_no < 0)
+        {
+            count = lynq_get_network_number_list(idx, CTRL_STA, net_no_list, NULL);
+            for ( index = 0; index < (count - STA_MAX_SAVED_AP_NUM + 1 ) ;index++)       //+1 is for add new network
+            {
+                sprintf(rm_net_cmd,"REMOVE_NETWORK %d",net_no_list[index]);
+                RLOGD("call cmd rm_net_cmd: %s;index is %d\n",rm_net_cmd,index);
+                DO_OK_FAIL_REQUEST(rm_net_cmd);
+            }
+            net_no = lynq_add_network(CTRL_STA);
+            if (net_no == -1)
+            {
+                return -1;
+            }
+
+            RLOGD("net no is %d\n", net_no);
+            if (0 != inner_set_sta_ssid(net_no, ssid))
+            {
+                return -1;
+            }
         }
     }
 
@@ -2404,7 +2907,28 @@
         return -1;
     }
 
-    return inner_sta_start_stop(net_no, 1, 1);
+
+    DO_OK_FAIL_REQUEST(cmd_disconnect);
+    system("echo \"\" > /tmp/wlan0_dhcpcd_router");
+    usleep(200*1000);
+
+    ret = inner_sta_start_stop(net_no, 1, 1);
+
+    pthread_mutex_lock(&s_global_check_mutex);
+    s_sta_status = INNER_STA_STATUS_CONNECTING;
+    strcpy(s_sta_current_connecting_ssid, ssid);
+    struct timeval now;
+    gettimeofday(&now,NULL);
+    s_sta_connect_timeout.tv_sec = now.tv_sec + timeout;
+    s_sta_connect_timeout.tv_nsec = now.tv_usec*1000;
+    pthread_cond_signal(&s_global_check_cond);
+    pthread_mutex_unlock(&s_global_check_mutex);
+    return ret;
+}
+
+int lynq_wifi_sta_connect(lynq_wifi_index_e idx, char *ssid, lynq_wifi_auth_s auth, char *psw)
+{
+    return lynq_wifi_sta_connect_timeout(idx, ssid, auth, psw, MAX_CONNNECT_TIME);
 }
 
 int lynq_wifi_sta_disconnect(lynq_wifi_index_e idx, char *ssid)
@@ -2434,6 +2958,9 @@
         return 0;
     }
 
+    pthread_mutex_lock(&s_global_check_mutex);
+    s_sta_status = INNER_STA_STATUS_DISCONNECTING;
+    pthread_mutex_unlock(&s_global_check_mutex);
     return inner_sta_start_stop(curr_state.net_no, 0, 0);
 }
 
@@ -2448,45 +2975,64 @@
     CHECK_IDX(idx, CTRL_STA);
     CHECK_WPA_CTRL(CTRL_STA);
 
-    system("connmanctl enable wifi");
-
-    if (system("ifconfig | grep -q wlan0") != 0)
+    ret = system_call_v("%s %s", start_stop_sta_script, "start");
+    if (ret != 0)
     {
+        RLOGE("lynq_wifi_ap_start excute script fail");
         return -1;
     }
 
-//    DO_OK_FAIL_REQUEST(cmd_remove_all);
-//    system(lynq_first_sta_cmd);
-//    system(lynq_reconfigure_cmd);
-//    DO_OK_FAIL_REQUEST(lynq_reconnect_cmd);
     system(lynq_enable_sta_cmd);
     system(lynq_reconnect_cmd);
 //    DO_OK_FAIL_REQUEST(lynq_reconnect_cmd);
     return 0;
 }
 
+static int inner_get_status_info_state (int interface, char *state) {
+    curr_status_info curr_state;
+    curr_state.ap = NULL;
+    curr_state.state = state;
+    return inner_get_status_info(interface, &curr_state);
+}
+
 int lynq_wifi_sta_stop(lynq_wifi_index_e idx)
 {
 //    char lynq_disable_network_cmd[MAX_CMD];
 //    curr_status_info curr_state;
 //    ap_info_s ap_info;
+    int i=0;
+    char state[MAX_CMD];
 
-    const char * lynq_disable_sta_cmd = "wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 disable_net all";
+//    const char * lynq_disable_sta_cmd = "wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 disable_net all";
     CHECK_IDX(idx, CTRL_STA);
     CHECK_WPA_CTRL(CTRL_STA);
 
-//    curr_state.ap = &ap_info;
-//    curr_state.state = NULL;
-
-//    if (0 != inner_get_status_info(CTRL_STA, &curr_state) || curr_state.net_no < 0) {
-//        return 0;
-//    }
-
-//    sprintf(lynq_disable_network_cmd, "DISABLE_NETWORK %d", curr_state.net_no);
-//    DO_OK_FAIL_REQUEST(lynq_disable_network_cmd);
-    system(lynq_disable_sta_cmd);
+//    system(lynq_disable_sta_cmd);
+    DO_OK_FAIL_REQUEST(cmd_disconnect);
     DO_OK_FAIL_REQUEST(cmd_save_config);
 
+    ret = system_call_v("%s %s", start_stop_sta_script, "stop");
+    if (ret != 0)
+    {
+        RLOGE("lynq_wifi_ap_start excute script fail");
+        return -1;
+    }
+
+    for (i=0; i < 30; i++) // to check if sta is realy stoped
+    {
+        if (inner_get_status_info_state(idx, state) != 0)
+        {
+            break;
+        }
+
+        if (memcmp(state, STATE_DISCONNECTED, strlen (STATE_DISCONNECTED)) == 0)
+        {
+            break;
+        }
+        RLOGD("lynq_wifi_ap_start curr state %s", state);
+        usleep(SLEEP_TIME_ON_IDLE);
+    }
+
     return 0;
 //    return system("connmanctl disable wifi");
 }
@@ -2543,21 +3089,22 @@
 
     CHECK_WPA_CTRL(CTRL_AP);
 
-//    ap_info_s * tmp_ap;
-//    device_info_s * tmp_list;
+    //    ap_info_s * tmp_ap;
+    //    device_info_s * tmp_list;
     if (ap == NULL || list == NULL || len == NULL)
     {
         RLOGE("bad input param");
         return -1;
     }
 
-//    ap = &tmp_ap;
-//    list = &tmp_list;
+    //    ap = &tmp_ap;
+    //    list = &tmp_list;
     *ap = malloc(sizeof (ap_info_s));
+    memset(*ap, 0, sizeof (ap_info_s));
 
-    if (inner_get_status_info_ap (CTRL_AP, *ap) != 0)
+    if (inner_get_status_info_ap (CTRL_AP, *ap) != 0 || (*ap)->ap_ssid[0] == '\0')
     {
-	RLOGE("inner_get_status_info_ap !=0\n");
+        RLOGE("inner_get_status_info_ap !=0 or ap_ssid is empty\n");
         return -1;
     }
 
@@ -2570,7 +3117,7 @@
     while (reply_len > 0)
     {
         if (memcmp(cmd_reply, "FAIL", 4) == 0)
-	{
+        {
             break;
         }
         line_count = lynq_split(cmd_reply, reply_len, '\n', split_lines);
@@ -2582,7 +3129,7 @@
         cmd_reply[0] = '\0';
         ret = local_wpa_ctrl_request(lynq_wpa_ctrl, lynq_next_sta_cmd, strlen(lynq_next_sta_cmd), cmd_reply, &reply_len, NULL);
         if (ret != 0 || memcmp(cmd_reply, "FAIL", 4) == 0)
-	{
+        {
             RLOGD("run %s fail \n", lynq_next_sta_cmd);
             break;
         }
@@ -2642,6 +3189,7 @@
     for(index = 1;index < count; index++)
     {
         RLOGD("---- %s\n",split_lines[index]);
+        memset(split_words, 0 , sizeof (split_words));
         count_words = lynq_split(split_lines[index], strlen(split_lines[index]), '\t', split_words);
         if (count_words < 4)
             continue;
@@ -2652,7 +3200,14 @@
         p->band = convert_band_from_freq(atoi(split_words[1]));
         p->rssi = -1 * atoi( split_words[2]);
         p->auth = convert_max_auth_from_flag(split_words[3]);
-        inner_copy_ssid(p->ssid, split_words[4], sizeof (p->ssid));
+        if (count_words == 4) // ssid hided
+        {
+            p->ssid[0] = '\0';
+        }
+        else
+        {
+            inner_copy_ssid(p->ssid, split_words[4], sizeof (p->ssid));
+        }
     }
 
     return 0;
@@ -2720,29 +3275,36 @@
     count = lynq_get_network_number_list(idx, CTRL_STA, net_no_list, NULL);
     RLOGD("[lynq_get_sta_saved_ap]count is %d\n", count);
 
+    if (count < 0)
+    {
+        RLOGE("list network fail");
+        return count;
+    }
+    else if (count == 0)
+    {
+        *list = NULL;
+        *len = 0;
+        return 0;
+    }
+
     *list = malloc(sizeof (saved_ap_info_s) * count);
     memset(*list, 0, sizeof (saved_ap_info_s) * count);
     *len = count;
 
     for (index=0; index < count; index++)
     {
-	RLOGD("[lynq_get_sta_saved_ap]to get ssid %d", index);
-	RLOGD("[lynq_get_sta_saved_ap][inner_get_param]to get ssid");
         inner_get_param(CTRL_STA, net_no_list[index], "ssid", (*list)[index].base_info.ap_ssid);
-	RLOGD("[lynq_get_sta_saved_ap][inner_get_param]to get mac");
         inner_get_param(CTRL_STA, net_no_list[index], "bssid", (*list)[index].base_info.ap_mac);
-	RLOGD("[lynq_get_sta_saved_ap][inner_get_param]to get auth");
         inner_get_network_auth(CTRL_STA, net_no_list[index], &(*list)[index].base_info.auth);
-	RLOGD("[lynq_get_sta_saved_ap][inner_get_param]to get band");
         if (inner_get_param(CTRL_STA, net_no_list[index], "frequency", freq) == 0)
-	{
+        {
             (*list)[index].base_info.band = convert_band_from_freq(atoi(freq));
         }
         else
-	{
+        {
             (*list)[index].base_info.band = -1;
         }
-	RLOGD("[lynq_get_sta_saved_ap][inner_get_param]to get psw");
+        RLOGD("[lynq_get_sta_saved_ap][inner_get_param]to get psw");
         lynq_sta_ssid_password_get(idx, & (*list)[index].base_info, (*list)[index].base_info.psw);
     }
     RLOGD("[lynq_get_sta_saved_ap] return ok");
@@ -2758,7 +3320,11 @@
 
     CHECK_WPA_CTRL(CTRL_STA);
 
-    system(clean_last_re);
+    if (g_sta_scan_finish_flag == 1 && s_sta_status == INNER_STA_STATUS_INIT) // temp add
+    {
+        RLOGD("tmp clear scanlist");
+        system(clean_last_re);
+    }
     g_sta_scan_finish_flag = 0;
     DO_REQUEST(lynq_scan_cmd);
     if (reply_len >=9 && memcmp(cmd_reply, "FAIL-BUSY", 9) == 0 )
@@ -2780,19 +3346,39 @@
         return -1;
     }
 
+    pthread_mutex_lock(&s_ap_callback_mutex);
     g_ap_callback_priv = priv;
     g_ap_callback_func = cb;
+    pthread_mutex_unlock(&s_ap_callback_mutex);
+
+    pthread_mutex_lock(&s_check_wpa_ctrl_mutex);
+    if (g_ap_watcher_pid == 0 )
+    {
+        if(pthread_create(&g_ap_watcher_pid,NULL,APWatcherThreadProc,NULL) < 0)
+        {
+            g_ap_watcher_pid = 0;
+            pthread_mutex_unlock(&s_check_wpa_ctrl_mutex);
+            RLOGE("[wifi error]creat APWatcherThreadProc fail");
+            return -1;
+        }
+    }
+
+    pthread_mutex_unlock(&s_check_wpa_ctrl_mutex);
+    RLOGD("creat APWatcherTheradProc susccs");
 
     return 0;
 }
 
 int lynq_unreg_ap_event_callback(void * priv) {
+    pthread_mutex_lock(&s_ap_callback_mutex);
     if (g_ap_callback_priv == priv)
     {
         g_ap_callback_func = NULL;
         g_ap_callback_priv = NULL;
+        pthread_mutex_unlock(&s_ap_callback_mutex);
         return 0;
     }
+    pthread_mutex_unlock(&s_ap_callback_mutex);
     return -1;
 }
 
@@ -2803,30 +3389,40 @@
         return -1;
     }
 
+    pthread_mutex_lock(&s_sta_callback_mutex);
     g_sta_callback_priv = priv;
     g_sta_callback_func = cb;
+    pthread_mutex_unlock(&s_sta_callback_mutex);
 
+    pthread_mutex_lock(&s_check_wpa_ctrl_mutex);
+    if (g_sta_watcher_pid == 0 ) {
+        if(pthread_create(&g_sta_watcher_pid,NULL,STAWatcherThreadProc,NULL) < 0)
+        {
+            g_sta_watcher_pid = 0;
+            pthread_mutex_unlock(&s_check_wpa_ctrl_mutex);
+            RLOGE("[wifi error]creat STAWatcherThreadProc fail");
+            return -1;
+        }
+    }
+
+    pthread_mutex_unlock(&s_check_wpa_ctrl_mutex);
+    RLOGD("creat STAWatcherTheradProc susccs");
     return 0;
 }
 
 int lynq_unreg_sta_event_callback(void * priv) {
+    pthread_mutex_lock(&s_sta_callback_mutex);
     if (g_sta_callback_priv == priv)
     {
         g_sta_callback_func = NULL;
         g_sta_callback_priv = NULL;
+        pthread_mutex_unlock(&s_sta_callback_mutex);
         return 0;
     }
+    pthread_mutex_unlock(&s_sta_callback_mutex);
     return -1;
 }
 
-
-static int inner_get_status_info_state (int interface, char *state) {
-    curr_status_info curr_state;
-    curr_state.ap = NULL;
-    curr_state.state = state;
-    return inner_get_status_info(interface, &curr_state);
-}
-
 int lynq_get_ap_status(lynq_wifi_index_e idx, lynq_wifi_ap_run_status_s * ap_status)
 {
     char state[MAX_CMD];
@@ -2942,28 +3538,111 @@
     return 0;
 }
 
-int lynq_set_country_code(lynq_wifi_index_e idx, char * country_code) {
-//    const char * cmd_str = "GET country";
-//    CHECK_IDX(idx, CTRL_AP);
-//    CHECK_WPA_CTRL(CTRL_STA);
+static int check_and_init_uci_config(char * country_code)
+{
+    FILE * fp;
+    int is_different = 0;
+    const char * check_uci_cmd ="uci show | grep lynq_wifi_country_code";
+    const char * create_uci_cmd ="uci set lynq_uci.lynq_wifi_country_code='lynq_wifi_country_code'";
+    const char * commit_uci_cmd ="uci commit";
+    char set_country_cmd[MAX_CMD];
+    char lynq_cmd_ret[MAX_CMD]={0};
 
-//    DO_REQUEST(cmd_str);
-//    printf("result %s\n", cmd_reply);
+    sprintf(set_country_cmd, "uci set lynq_uci.lynq_wifi_country_code.code='%s'",country_code);
 
-    if (country_code == NULL || *country_code == '\0')
+    if (0 != system(check_uci_cmd))
     {
-        RLOGD("bad country code\n");
+        if (0 != system(create_uci_cmd))
+        {
+            RLOGE("creat_uci_cmd fail");
+            return -1;
+        }
+        is_different = 1;
+    }
+
+    if((fp=popen("uci get lynq_uci.lynq_wifi_country_code.code","r"))==NULL)
+    {
+        RLOGE("popen error!");
         return -1;
     }
 
-    char lynq_country_cmd[MAX_CMD];
-    sprintf(lynq_country_cmd, "wl country %s", country_code);
-    if (system(lynq_country_cmd) == 0)
+    if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0 )
     {
-        return 0;
+        RLOGE("fread fail!");
+        fclose(fp);
+        return -1;
     }
 
-    return -1;
+    if ( strncmp(lynq_cmd_ret,country_code,2) != 0 )
+    {
+        RLOGE("get country code for uci %s,input cpuntry code is:%s\n",lynq_cmd_ret,country_code);
+        is_different = 1;
+    }
+
+    fclose(fp);
+
+    if (is_different)
+    {
+        if ( 0 != system(set_country_cmd))
+        {
+            RLOGE("set_country_cmd fail");
+            return -1;
+        }
+        if (0 != system(commit_uci_cmd))
+        {
+            RLOGE("commmit fail");
+        }
+    }
+
+    return is_different;
+}
+
+int lynq_set_country_code(lynq_wifi_index_e idx, char * country_code) {
+    char check_current_code[10];
+    const char * support_country[] = {"CN", "EU"};
+
+    int ret,is_different, i, cc_count;
+
+    if (country_code == NULL || country_code[0] == '\0')
+    {
+        RLOGE("bad country code\n");
+        return -1;
+    }
+
+    cc_count = sizeof (support_country) / sizeof (char*);
+    for(i=0; i < cc_count; i++)
+    {
+        if (strcmp(support_country[i], country_code) == 0)
+        {
+            break;
+        }
+    }
+
+    if (i >= cc_count)
+    {
+        RLOGE("unspported country code %s\n", country_code);
+        return -1;
+    }
+
+    is_different = check_and_init_uci_config(country_code);
+    if( is_different < 0 )
+    {
+        RLOGE("init set uci fail\n");
+        return -1;
+    }
+
+    ret = lynq_get_country_code(idx,check_current_code);
+    if( ret == 0 && (is_different == 1 || strcmp(check_current_code, country_code) != 0))
+    {
+        ret = lynq_wifi_disable();
+        if(ret != 0 )
+        {
+            RLOGE("berfore set country,find bcmdhd insmod,remod fail\n");
+            return -1;
+        }
+    }
+
+    return 0;
 }
 
 int lynq_get_connect_ap_mac(lynq_wifi_index_e idx,char *mac)
@@ -3002,7 +3681,12 @@
 
     if (idx == 1)
     {
-       ifaName = "tether";
+       ifaName = inner_get_ap_interface_name();
+       if (ifaName == NULL)
+       {
+           RLOGE("[lynq_get_interface_ip] ap name get fail");
+           return -1;
+       }
     }
     else if (idx != 0)
     {
@@ -3106,24 +3790,16 @@
 
 //    *rssi = atoi(split_words[1]) * -1;
 
-    FILE *fp;
-    size_t i = 0;
     char lynq_cmd_ret[MAX_RET]={0};
 
-//    CHECK_IDX(idx, CTRL_AP);
 /*******change other cmd to get rssi*******
  *
  *wl rssi ---> wl -i wlan0 rssi
  *
  ***** change by qs.xiong 20221011*******/
-    if((fp=popen("wl -i wlan0 rssi","r"))==NULL)
+    if (0 !=  exec_cmd("wl -i wlan0 rssi", lynq_cmd_ret, MAX_RET))
     {
-        perror("popen error!");
-        return -1;
-    }
-    if((fread(lynq_cmd_ret,sizeof(lynq_cmd_ret),1,fp))<0)
-    {
-        perror("fread fail!");
+        RLOGE("[lynq_get_connect_ap_rssi] exec cmd [ wl -i wlan0 rssi ] fail");
         return -1;
     }
     *rssi = atoi(lynq_cmd_ret) * -1;
@@ -3131,7 +3807,7 @@
     if(*rssi == 0)
     {
         RLOGE("[lynq_get_connect_ap_rssi]sta didn't connected any ap device,please check connection\n");
-	return -1;
+        return -1;
     }
 
     return 0;
@@ -3160,6 +3836,8 @@
 
 int lynq_get_connect_ap_ip(lynq_wifi_index_e idx, char *ip)
 {
+    int ret;
+    char *p;
     char bssid[1024] = {0};
 
     if (ip == NULL)
@@ -3175,7 +3853,33 @@
         return -1;
     }
 
-    return inner_get_ip_by_mac(bssid, ip, 32); //better input by user
+    ip[0] = '\0';
+    ret = inner_get_ip_by_mac(bssid, ip, 32); //better input by user
+    if (ret != 0)
+    {
+        RLOGE("[lynq_get_connect_ap_ip] inner_get_ip_by_mac return fail");
+        return -1;
+    }
+
+    if (ip[0] == '\0' || strchr(ip, ':') != NULL) //temp change, not ok
+    {
+        ip[0] = '\0';
+        ret = exec_cmd("grep \"new_router\" /tmp/wlan0_dhcpcd_router | awk '{print $2}'| tail -1", ip, 32);
+        if (ret != 0)
+        {
+            ip[0] = '\0';
+            return 0;
+        }
+        else
+        {
+            p = strchr(ip, '\n');
+            if (p != NULL)
+            {
+                *p = '\0';
+            }
+        }
+    }
+    return 0;
 }
 
 int lynq_ap_connect_num(int sta_number)
@@ -3281,7 +3985,8 @@
     int mask_len;
     char *p;
     char tmp[64] = {0};
-    if (exec_cmd("ifconfig tether | grep Mask", str_cmd_ret, max_len) != 0)
+    sprintf(tmp, "ifconfig %s | grep Mask", s_ap_iterface_name);
+    if (exec_cmd(tmp, str_cmd_ret, max_len) != 0)
         return -1;
     p = strstr(str_cmd_ret, "Mask:");
     if (p == NULL)
@@ -3318,6 +4023,12 @@
     nmax = 6;
     ncheckcount = nidlecount = 0;
 
+    if (inner_get_ap_interface_name() == NULL)
+    {
+        RLOGE("------gbw thread run\n");
+        return;
+    }
+
     RLOGD("------gbw thread run\n");
     sprintf(str_cmd, "ip neigh | grep %s | awk '{print $1}'", g_gbw_mac);
     while (dest_ip[0] == '\0') {
@@ -3336,28 +4047,27 @@
         }
     }
 
-    system("tc qdisc del dev tether root > /dev/null 2>&1");
-    system("tc qdisc add dev tether root handle 1: htb r2q 1");
-    system("tc class add dev tether parent 1:  classid 1:1  htb rate 50Mbit ceil 70Mbit prio 2 quantum 3000");
+    system_call_v("tc qdisc del dev %s root > /dev/null 2>&1", s_ap_iterface_name);
+    system_call_v("tc qdisc add dev %s root handle 1: htb r2q 1", s_ap_iterface_name);
+    system_call_v("tc class add dev %s parent 1:  classid 1:1  htb rate 50Mbit ceil 70Mbit prio 2 quantum 3000", s_ap_iterface_name);
     if (get_tether_route_str(str_cmd_ret, sizeof (str_cmd_ret)) != 0)
     {
         RLOGD("not get tether info\n");
         return;
     }
-    sprintf(str_cmd, "tc filter add dev tether parent 1: protocol ip prio 16 u32 match ip dst %s flowid 1:1", str_cmd_ret);
-    system(str_cmd);
-    system("tc class add dev tether parent 1:  classid 1:2  htb rate 80Mbit ceil 100Mbit prio 0 quantum 3000000");
-    sprintf(str_cmd, "tc filter add dev tether parent 1: protocol ip prio 1 u32 match ip dst %s flowid 1:2", dest_ip);
-    //printf("----cmd:%s\n", str_cmd);
-    system(str_cmd);
+    system_call_v("tc filter add dev %s parent 1: protocol ip prio 16 u32 match ip dst %s flowid 1:1", s_ap_iterface_name, str_cmd_ret);
+    system_call_v("tc class add dev %s parent 1:  classid 1:2  htb rate 80Mbit ceil 100Mbit prio 0 quantum 3000000", s_ap_iterface_name);
+    system_call_v("tc filter add dev %s parent 1: protocol ip prio 1 u32 match ip dst %s flowid 1:2", s_ap_iterface_name, dest_ip);
 
     while (1) {
         sleep(1);
         memset(str_cmd, 0, sizeof(str_cmd));
-        if (0 != exec_cmd("tc -s class show dev tether classid 1:1 | grep Sent", str_cmd, sizeof (str_cmd)))
+        memset(str_cmd_ret, 0, sizeof(str_cmd_ret));
+        sprintf(str_cmd, "tc -s class show dev %s classid 1:1 | grep Sent", s_ap_iterface_name);
+        if (0 != exec_cmd(str_cmd, str_cmd_ret, sizeof (str_cmd_ret)))
             continue;
         //printf("ap1 --- %s\n", str_cmd);
-        n = lynq_split(str_cmd, strlen(str_cmd), ' ', results);
+        n = lynq_split(str_cmd_ret, strlen(str_cmd_ret), ' ', results);
         if (n > 9) {
             if (strcmp(results[1], "Sent") == 0) {
                 currAP1Bytes = atoll(results[2]);
@@ -3368,10 +4078,12 @@
         }
 
         memset(str_cmd, 0, sizeof(str_cmd));
-        if (0 != exec_cmd("tc -s class show dev tether classid 1:2 | grep Sent", str_cmd, sizeof (str_cmd)))
+        memset(str_cmd_ret, 0, sizeof(str_cmd_ret));
+        sprintf(str_cmd, "tc -s class show dev %s classid 1:2 | grep Sent", s_ap_iterface_name);
+        if (0 != exec_cmd(str_cmd, str_cmd_ret, sizeof (str_cmd_ret)))
             continue;
         //printf("ap2 --- %s\n", str_cmd);
-        n = lynq_split(str_cmd, strlen(str_cmd), ' ', results);
+        n = lynq_split(str_cmd_ret, strlen(str_cmd_ret), ' ', results);
         if (n > 9) {
             if (strcmp(results[1], "Sent") == 0) {
                 currAP2Bytes = atoll(results[2]);
@@ -3419,9 +4131,8 @@
 
         if (currSetAP1Speed != setAP1Speed) {
             setAP1Speed = currSetAP1Speed;
-            sprintf(str_cmd, "tc class replace dev tether parent 1:  classid 1:1  htb rate %dMbit ceil %dMbit prio 2 quantum 3000", setAP1Speed, (int)(setAP1Speed*1.4));
-            //printf("------***change speed: %s\n", str_cmd);
-            system(str_cmd);
+            system_call_v(str_cmd, "tc class replace dev %s parent 1:  classid 1:1  htb rate %dMbit ceil %dMbit prio 2 quantum 3000",
+                         s_ap_iterface_name, setAP1Speed, (int)(setAP1Speed*1.4));
         }
     }
 }
@@ -3480,9 +4191,15 @@
 
 static int stopGBW() {
     void* retval;
+    char cmd[64] = {0};
     pthread_cancel(g_gbw_watcher_pid);
     pthread_join(g_gbw_watcher_pid, &retval);
     g_gbw_watcher_pid = 0;
-    system("tc qdisc del dev tether root");
+    sprintf(cmd, "%s %d", get_interface_name_script, LYNQ_WIFI_INTERFACE_1);
+    if (s_ap_iterface_name[0] != '\0')
+    {
+        sprintf(cmd, "tc qdisc del dev %s root", s_ap_iterface_name);
+        system(cmd);
+    }
 }
 //you.chen add for tv-box end
diff --git a/src/lynq/lib/liblynq-wifi6/scripts/get_interface_name.sh b/src/lynq/lib/liblynq-wifi6/scripts/get_interface_name.sh
new file mode 100755
index 0000000..4dc8717
--- /dev/null
+++ b/src/lynq/lib/liblynq-wifi6/scripts/get_interface_name.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+if [ "$1" == "0" ]; then
+	echo "wlan0"
+elif [ "$1" == "1" ]; then
+	echo "ap0"
+else
+	exit 1
+fi
+
diff --git a/src/lynq/lib/liblynq-wifi6/scripts/sta_status_change.sh b/src/lynq/lib/liblynq-wifi6/scripts/sta_status_change.sh
new file mode 100755
index 0000000..829303e
--- /dev/null
+++ b/src/lynq/lib/liblynq-wifi6/scripts/sta_status_change.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+
diff --git a/src/lynq/lib/liblynq-wifi6/scripts/start_stop_ap.sh b/src/lynq/lib/liblynq-wifi6/scripts/start_stop_ap.sh
new file mode 100755
index 0000000..25dd644
--- /dev/null
+++ b/src/lynq/lib/liblynq-wifi6/scripts/start_stop_ap.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+if [ "$1" == "start" ]; then
+	ifconfig ap0 192.168.15.1 netmask 255.255.255.240
+
+	if [ $? != 0 ]; then
+		exit 1
+	fi
+	mkdir -p /run/wg870/dnsmasq.d
+	conf_file="/run/wg870/dnsmasq.conf"
+	echo "port=0" > $conf_file
+	echo "interface=ap0" >> $conf_file
+	echo "listen-address=192.168.15.1" >> $conf_file
+	echo "bind-interfaces"  >> $conf_file
+	echo "localise-queries" >> $conf_file
+	echo "dhcp-range=192.168.15.2,192.168.15.14,255.255.255.240,1h"  >> $conf_file
+	echo "dhcp-option=3,192.168.15.1"  >> $conf_file
+	echo "dhcp-option=6,192.168.15.1"  >> $conf_file
+	echo "dhcp-range=192.168.15.2,192.168.15.14,255.255.255.240,1h"  >> $conf_file
+	echo "dhcp-leasefile=/run/wg870/ap0.lease" >> $conf_file
+	ps -eo "%p %a" | grep "/usr/bin/dnsmasq -x /run/wg870/dnsmasq.pid" | grep -v grep 
+	if [ $? != 0 ]; then
+		/usr/bin/dnsmasq -x /run/wg870/dnsmasq.pid -7 /run/wg870/dnsmasq.d --local-service -C $conf_file -r /run/wg870
+	fi
+
+elif [ "$1" == "stop" ]; then
+	ps -eo "%p %a" | grep "/usr/bin/dnsmasq -x /run/wg870/dnsmasq.pid" | grep -v grep | awk '{print "kill "$1}' | sh
+	ifconfig ap0 down
+	if [ $? != 0 ]; then
+		exit 1
+	fi
+else
+	exit 2
+fi
+
+exit 0
diff --git a/src/lynq/lib/liblynq-wifi6/scripts/start_stop_sta.sh b/src/lynq/lib/liblynq-wifi6/scripts/start_stop_sta.sh
new file mode 100755
index 0000000..25ab126
--- /dev/null
+++ b/src/lynq/lib/liblynq-wifi6/scripts/start_stop_sta.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+if [ "$1" == "start" ]; then
+        ifconfig wlan0 up
+        if [ $? != 0 ]; then
+                exit 1
+        fi
+		ps -eo "%p %a" | grep "dhcpcd wlan0" | grep -v grep
+		if [ $? != 0 ];	then
+			echo "" > /tmp/wlan0_dhcpcd_router
+			mkdir -p /run/wg870/
+			hook_script="/run/wg870/wlan0_dhcpcd_run_hooks.sh"
+			echo "#!/bin/sh" > $hook_script
+			echo "if [ \"\$reason\" == \"BOUND\" -o \"\$reason\" == \"RENEW\" -o \"\$reason\" == \"REBIND\" ]; then" >> $hook_script
+			echo "    if [ \"\$new_routers\" != \"\" ]; then" >> $hook_script
+			echo "        for x in \$new_routers; do" >> $hook_script
+			echo "            echo \"new_router \$x\" > /tmp/wlan0_dhcpcd_router" >> $hook_script
+			echo "            ping -c2 \$x &" >> $hook_script
+			echo "        done" >> $hook_script
+			echo "    fi" >> $hook_script
+			echo "fi" >> $hook_script
+			chmod +x $hook_script
+			dhcpcd wlan0 -t 0 -o domain_name_servers --noipv4ll -4 -B -G -c $hook_script &
+		fi
+elif [ "$1" == "stop" ]; then
+        ps -eo "%p %a" | grep "dhcpcd wlan0" | grep -v grep | awk '{print "kill "$1}' | sh
+        ifconfig wlan0 0.0.0.0
+        if [ $? != 0 ]; then
+                exit 1
+        fi
+else
+        exit 2
+fi
+
+exit 0
diff --git a/src/lynq/lib/liblynq-wifi6/scripts/start_wg870_service.sh b/src/lynq/lib/liblynq-wifi6/scripts/start_wg870_service.sh
new file mode 100755
index 0000000..fae9b34
--- /dev/null
+++ b/src/lynq/lib/liblynq-wifi6/scripts/start_wg870_service.sh
@@ -0,0 +1,58 @@
+#!/bin/sh
+for ((i=0; i < 10; i++)); do
+        state=`systemctl is-active wg870_drv_insmod.service`
+        if [ "$state" == "active" ]; then
+                break
+        elif [ "$state" != "activating" ]; then
+                echo "to start now"
+                systemctl start wg870_drv_insmod.service
+        fi
+        usleep 100000
+done
+
+if [ "$state" != "active" ]; then
+        exit 1
+fi
+
+state=`wpa_cli -iwpa_wlan0_cmd -p/var/run/ ping`
+if  [ "$state" != "PONG" ]; then
+    for ((i=0; i < 50; i++)); do
+        usleep 100000
+        state=`wpa_cli -iwpa_wlan0_cmd -p/var/run/ ping`
+        echo "$state"
+        if [ "$state" == "PONG" ]; then
+            service_started=1
+            break
+        fi
+    done
+else
+        service_started=1
+fi
+
+if [ "$service_started" != "1" ];then
+        exit 1
+fi
+
+state=`wpa_cli -iwpa_wlan0_cmd -p/var/run/ interface | grep -vE "Available|p2p-dev" | grep wlan0`
+if [ $? != 0 ]; then
+        state=`wpa_cli -iwpa_wlan0_cmd -p/var/run/ interface_add wlan0 /data/wifi/wg870/wpa_supplicant.conf nl80211`
+        if [ "$state" != "OK" ]; then
+                exit 2
+        fi
+		wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 disconnect
+fi
+
+state=`wpa_cli -iwpa_wlan0_cmd -p/var/run/ interface | grep -vE "Available|p2p-dev" | grep ap0`
+if [ $? != 0 ]; then
+		wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 DRIVER interface_create ap0
+        state=`wpa_cli -iwpa_wlan0_cmd -p/var/run/ interface_add ap0 /data/wifi/wg870/wpa_supplicant_ap.conf nl80211`
+
+        if [ "$state" != "OK" ]; then
+                exit 3
+        fi
+        ifconfig ap0 down
+fi
+
+
+exit 0
+
diff --git a/src/lynq/lib/liblynq-wifi6/scripts_connman/get_interface_name.sh b/src/lynq/lib/liblynq-wifi6/scripts_connman/get_interface_name.sh
new file mode 100755
index 0000000..61b44d9
--- /dev/null
+++ b/src/lynq/lib/liblynq-wifi6/scripts_connman/get_interface_name.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+if [ "$1" == "0" ]; then
+	echo "wlan0"
+elif [ "$1" == "1" ]; then
+	echo "tether"
+else
+	exit 1
+fi
+
diff --git a/src/lynq/lib/liblynq-wifi6/scripts_connman/sta_status_change.sh b/src/lynq/lib/liblynq-wifi6/scripts_connman/sta_status_change.sh
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/src/lynq/lib/liblynq-wifi6/scripts_connman/sta_status_change.sh
diff --git a/src/lynq/lib/liblynq-wifi6/scripts_connman/start_stop_ap.sh b/src/lynq/lib/liblynq-wifi6/scripts_connman/start_stop_ap.sh
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/src/lynq/lib/liblynq-wifi6/scripts_connman/start_stop_ap.sh
diff --git a/src/lynq/lib/liblynq-wifi6/scripts_connman/start_stop_sta.sh b/src/lynq/lib/liblynq-wifi6/scripts_connman/start_stop_sta.sh
new file mode 100755
index 0000000..e69de29
--- /dev/null
+++ b/src/lynq/lib/liblynq-wifi6/scripts_connman/start_stop_sta.sh
diff --git a/src/lynq/lib/liblynq-wifi6/scripts_connman/start_wg870_service.sh b/src/lynq/lib/liblynq-wifi6/scripts_connman/start_wg870_service.sh
new file mode 100755
index 0000000..303a075
--- /dev/null
+++ b/src/lynq/lib/liblynq-wifi6/scripts_connman/start_wg870_service.sh
@@ -0,0 +1,76 @@
+#!/bin/sh
+
+for ((i=0; i < 10; i++)); do
+	state=`systemctl is-active wg870_drv_insmod.service`
+	if [ "$state" == "active" ]; then
+		break	
+	elif [ "$state" != "activating" ]; then
+
+		systemctl start wg870_drv_insmod.service
+	fi
+	usleep 100000 
+done
+
+if [ "$state" != "active" ]; then
+	exit 1
+fi
+
+for ((i=0; i < 10; i++)); do
+	connmanctl technologies | grep -q "/net/connman/technology/wifi"
+	if [ $? == 0 ]; then
+		connman_started=1
+		break
+	fi
+done
+
+if [ "$connman_started" == ""]; then
+	exit 2
+fi
+
+ifconfig | grep -q wlan0
+
+if [ $? != 0 ]; then
+	connmanctl enable wifi
+
+	for ((i=0; i < 5; i++)); do
+		usleep 100000 
+		ifconfig | grep -q wlan0
+		if [ $? == 0 ]; then
+			wlan0_started=1
+			wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 disconnect
+			break
+		fi
+	done
+else
+	wlan0_started=1
+fi
+
+
+if [ "$wlan0_started" == ""]; then
+    exit 3
+fi
+
+ifconfig | grep -q ap0
+
+if [ $? != 0 ]; then
+	wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 DRIVER interface_create ap0
+	connmanctl tether wifi on lynq 1qaz@WSX#$%^
+
+	for ((i=0; i < 5; i++)); do
+		usleep 100000 
+		ifconfig | grep -q ap0
+		if [ $? == 0 ]; then
+			ap0_started=1
+			wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=ap0 disconnect
+			break
+		fi
+	done
+else
+	ap0_started=1
+fi
+
+
+if [ "$ap0_started" == ""]; then
+    exit 4
+fi
+