diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-autosuspend/files/autosuspend_wakeup_count.c b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-autosuspend/files/autosuspend_wakeup_count.c
index 85fbc84..b1d03ff 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-autosuspend/files/autosuspend_wakeup_count.c
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-autosuspend/files/autosuspend_wakeup_count.c
@@ -235,13 +235,26 @@
 }
 #endif
 
-static int suspend_ctrl(char *wakeup_count,int wakeup_count_len)
+#ifdef MOBILETEK_TARGET_PLATFORM_T106
+int t106_early_suspend(void)
 {
+    RLOGD("t106_early_suspend start\n");
+    system("/etc/init.d/syslog stop");
+    return 0;
+}
 
+void t106_early_resume(void)
+{
+    RLOGD("t106_early_resume start\n");
+    system("/etc/init.d/syslog start");
+    return NULL;
+}
+#endif
 
-    char buf[80];
-    int ret = 0;
 #ifdef MOBILETEK_SUSPEND_CFG
+int t800_early_suspend(char *wakeup_count, int wakeup_count_len)
+{
+    char buf[80];
     system("echo \"Sys standby mode\" >/dev/console");
     // sleep(1);
     system("echo 7 | emdlogger_ctrl");
@@ -278,6 +291,63 @@
             return -1;
         }    
     }
+    return 0;
+}
+
+void t800_early_resume(bool success)
+{
+    system("hwclock -s");
+    RLOGD("TIME: rtc to sys\n");
+    if (!success)
+    {
+
+       system("mdlogctl start");
+
+       system("echo 8 | emdlogger_ctrl");
+    
+       usleep(200000); 
+       ALOGI("Log on with failure\n");
+       return ;
+    }
+    
+    if (lynq_screen(1) != 0)  // notify ril for screen on
+    {
+        ALOGI("lynq_screen on fail\n");
+    }
+
+    system("mdlogctl start");
+
+    system("echo 8 | emdlogger_ctrl");
+    usleep(300000); //delay 2s for ril handling screen on,at least 70ms
+
+    return NULL;
+}
+#endif
+
+
+static int suspend_ctrl(char *wakeup_count,int wakeup_count_len)
+{
+
+
+    char buf[80];
+    int ret = 0;
+#ifdef MOBILETEK_SUSPEND_CFG
+    ret = t800_early_suspend(char *wakeup_count, wakeup_count_len);
+    if(ret != 0)
+    {
+	ALOGD("t800_early_suspend fail\n");
+        return -1;
+    }
+#endif
+
+
+#ifdef MOBILETEK_TARGET_PLATFORM_T106
+    ret = t106_early_suspend();
+    if(ret != 0)
+    {
+        ALOGD("t106_early_suspend fail\n");
+        return -1;
+    }
 #endif
 
     system("echo \"autosuspend:Sys suspend\" >/dev/console");
@@ -297,35 +367,14 @@
 
     char buf[80];
     long sleeptime = 0;
+
 #ifdef MOBILETEK_SUSPEND_CFG
-    system("hwclock -s");
-    RLOGD("TIME: rtc to sys\n");
-    if (!success)
-    {
+    t800_early_resume(bool success);
+#endif
 
-       system("mdlogctl start");
 
-       system("echo 8 | emdlogger_ctrl");
-    
-       usleep(200000); 
-       ALOGI("Log on with failure\n");
-       return ;
-    }
-
-    
-    if (lynq_screen(1) != 0)  // notify ril for screen on
-    {
-    ALOGI("lynq_screen on fail\n");
-
-    }
-
-    system("mdlogctl start");
-
-//  sleep(1);
-
-    system("echo 8 | emdlogger_ctrl");
-
-    usleep(300000); //delay 2s for ril handling screen on,at least 70ms
+#ifdef MOBILETEK_TARGET_PLATFORM_T106
+    t106_early_resume();
 #endif
 
     pthread_mutex_lock(&time_info_mutex);
diff --git a/cap/zx297520v3/sources/meta-zxic/conf/pub_esdk.inc b/cap/zx297520v3/sources/meta-zxic/conf/pub_esdk.inc
index b66ac77..8b7ec5a 100755
--- a/cap/zx297520v3/sources/meta-zxic/conf/pub_esdk.inc
+++ b/cap/zx297520v3/sources/meta-zxic/conf/pub_esdk.inc
@@ -7,6 +7,7 @@
 ZXIC_ZX297520V3_CFLAGS += "-I${BSPDIR}/pub/project/zx297520v3/include/drv "
 ZXIC_ZX297520V3_CFLAGS += "-I${BSPDIR}/pub/project/zx297520v3/include/nv "
 ZXIC_ZX297520V3_CFLAGS += "-D_CHIP_ZX297520V3 -DCPU_SHIFT=0 -D_USE_VEHICLE_DC -D_USE_ZXIC_DEBUG_INFO"
+ZXIC_ZX297520V3_CFLAGS += "${@bb.utils.contains('DISTRO_FEATURES', 'vehicle_dc_ref', '-D_USE_VEHICLE_DC_REF', '', d)}"
 
 ZXIC_EXTRA_CFLAGS += "${@bb.utils.contains('MACHINE', 'zx297520v3', '${ZXIC_ZX297520V3_CFLAGS}', '', d)}"
 
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-at-common/liblynq-at-common.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-at-common/liblynq-at-common.cpp
index cacdf2d..ccb8eaa 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-at-common/liblynq-at-common.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-at-common/liblynq-at-common.cpp
@@ -24,21 +24,21 @@
 
 void lynq_response_ok()
 {
-    char *str = "OK\n";
+    char *str = "OK\r\n";
     handle_output(str, strlen(str), Response);
 }
 
 void lynq_response_error(int error_code)
 {
     char str[32] = {0};
-    sprintf(str, "+CME ERROR: %d\n", error_code);
+    sprintf(str, "+CME ERROR: %d\r\n", error_code);
     handle_output(str, strlen(str), Response);
 }
 
 void lynq_handle_version()
 {
     char buf[64] = {0};
-    sprintf(buf,"%s\n",LYNQ_SW_INSIDE_VERSION);
+    sprintf(buf,"+CGIR:%s\r\n",LYNQ_SW_INSIDE_VERSION);
     handle_output(buf, strlen(buf), Response);
     lynq_response_ok();
     return;
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-at-factory/gpio_T106.conf b/cap/zx297520v3/src/lynq/lib/liblynq-at-factory/gpio_T106.conf
index 5133ad0..28dfd24 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-at-factory/gpio_T106.conf
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-at-factory/gpio_T106.conf
@@ -1,4 +1,4 @@
 platform:T106
 total:49
-gpio:16,17,18,20,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,45,46,48,52,53,54,64,72,73,74,75,76,77,84,87,88,89,90,91,92,119,120,121,122,123,124,127,128,129,130,131,132,
+gpio:16,17,18,25,26,27,28,29,30,31,32,35,36,37,38,39,40,41,42,45,46,48,52,53,54,66,67,68,69,70,71,84,87,88,89,90,91,92,119,120,121,122,123,124,127,128,129,130,131,132,
 
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-at-factory/liblynq-at-factory.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-at-factory/liblynq-at-factory.cpp
index b82cb42..ed8ca40 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-at-factory/liblynq-at-factory.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-at-factory/liblynq-at-factory.cpp
@@ -42,14 +42,14 @@
 
 void lynq_response_ok()
 {
-    char *str = "OK\n";
+    char *str = "OK\r\n";
     handle_output(str, strlen(str), Response);
 }
 
 void lynq_response_error(int error_code)
 {
     char str[32] = {0};
-    sprintf(str, "+CME ERROR: %d\n", error_code);
+    sprintf(str, "+CME ERROR: %d\r\n", error_code);
     handle_output(str, strlen(str), Response);
 }
 
@@ -92,7 +92,7 @@
 
     fp=popen(lynq_adc_dev, "r");
     fgets(lynq_adc_buf,sizeof(lynq_adc_buf),fp);
-    sprintf(flag,"%s %s", "ADC:", lynq_adc_buf);
+    sprintf(flag,"%s %s\r\n", "+ADC:", lynq_adc_buf);
     if(handle_output != NULL)
     {
         handle_output(flag, strlen(flag), Response);
@@ -159,7 +159,7 @@
             }
             else
             {
-                handle_output("input error\r\n", strlen("input error\r\n"), Response);
+                handle_output("+GPIO:input error\r\n", strlen("input error\r\n"), Response);
                 return -1;
             }
         }
@@ -175,13 +175,13 @@
         if(k >= total_length)
         {
             bzero(res,64);
-            sprintf(res,"GPIO%d input error\r\n",num);
+            sprintf(res,"+GPIO:GPIO%d input error\r\n",num);
             handle_output(res, strlen(res), Response);
         }
     }
     if (lynq_gpio_arr == NULL)
     {
-        handle_output("input all gpio not exist\r\n", strlen("input all gpio not exist\r\n"), Response);
+        handle_output("+GPIO:input all gpio not exist\r\n", strlen("input all gpio not exist\r\n"), Response);
         return -1;
     }
     return size;
@@ -249,21 +249,8 @@
 {
     int ret;
     int value;
-    if(test_gpio_handle[50] != NULL)
-    {
-        ret = sc_gpio_uninit(test_gpio_handle[50]);
-        if(ret)
-        {
-            ALOGE("uninit 50 fail\n");
-            return -1;
-        }
-    }
-    test_gpio_handle[50] = sc_gpio_init(50, 0, 0, 0);
-    if(test_gpio_handle[50] == NULL)
-    {
-        ALOGE("init 50 fail\n");
-        return -1;
-    }
+
+    
     for(int m = 0; m < total_length; m++)
     {
         if(test_gpio_handle[lynq_gpio_arr[m]] != NULL)
@@ -285,6 +272,7 @@
     ret = sc_gpio_value_get(test_gpio_handle[50], &value);
     if(ret)
     {
+        ALOGE("RET = %d, value = %d\n",ret,value);
         return -1;
     }
     if(value != status)
@@ -297,13 +285,17 @@
 int all_gpio_uninit(int total_length, int lynq_gpio_total_arr[256])
 {
     int ret;
-    ret = sc_gpio_uninit(test_gpio_handle[50]);
-    if(ret)
+    if(test_gpio_handle[50] != NULL)
     {
-        return -1;
-        ALOGE("uninit 50 fail\n");
+        ret = sc_gpio_uninit(test_gpio_handle[50]);
+        if(ret)
+        {
+            ALOGE("uninit 50 fail\n");
+            return -1;
+        }
+        test_gpio_handle[50] = NULL;
     }
-    test_gpio_handle[50] = NULL;
+    
     for(int m = 0; m < total_length; m++)
     {
         ret = sc_gpio_uninit(test_gpio_handle[lynq_gpio_total_arr[m]]);
@@ -338,6 +330,12 @@
         ALOGE("Don't have this platform gpio configure\n");
         return;
     }
+    test_gpio_handle[50] = sc_gpio_init(50, 0, 0, 0);
+    ALOGE("50 youm:%p\n",test_gpio_handle[50]);
+    if(test_gpio_handle[50] == NULL)
+    {
+        ALOGE("uninit 50 fail\n");
+    }
     ALOGD("start function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
     input = input + strlen("gpio");
     if((valid_length = lynq_gpio_analysis(input, lynq_gpio_arr, lynq_gpio_total_arr, total_length)) < 0)
@@ -346,7 +344,7 @@
         return;
     }
     ALOGE("The Valid count:%d\n",valid_length);
-    for(i=0; i < sizeof(lynq_gpio_arr)/sizeof(int); i++)
+    for(i=0; i < valid_length; i++)
     {
         for(j=0;j<3;j++)
         {
@@ -357,7 +355,7 @@
 
             if (need_int == 1)
             {
-                ret = set_all_gpio_status_and_check(lynq_gpio_total_arr, 0, total_length);
+                ret = set_all_gpio_status_and_check(lynq_gpio_arr, 0, valid_length);
                 if (ret == 1)
                 {
                     ALOGE("can't pull up or pull down gpio-50\n");
@@ -374,7 +372,7 @@
                     lynq_response_error(100);
                     return;
                 }
-                ALOGD("finsh configure function %s line %d input %s\n", __FUNCTION__, __LINE__, input);  
+                ALOGD("finsh configure function\n");  
             }
 
             lynq_gpio_low = 0;
@@ -382,25 +380,26 @@
 
             for(int n=0;n<3;n++)
             {
-                ret = sc_gpio_value_set(test_gpio_handle[lynq_gpio_arr[1]], 1);
+                ret = sc_gpio_value_set(test_gpio_handle[lynq_gpio_arr[i]], 1);
+                usleep(10000);
                 ret = sc_gpio_value_get(test_gpio_handle[50], &value);
                 if(ret)
                 {
-                    ALOGD("sc_gpio_value_get");
+                    ALOGE("sc_gpio_value_get\n");
                 }
                 if(value == 1)
                 {
-                    ALOGD("high function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
+                    ALOGE("high function is OK,input %d\n",lynq_gpio_arr[i]);
                     lynq_gpio_high = 1;
                     lynq_gpio_test_env_error = 0;
                     break;
                 }
                 else
                 {
-                    ALOGD("high function %s line %d input %s num %d\n", __FUNCTION__, __LINE__, input,lynq_gpio_arr[i]);
+                    ALOGE("high function is Fail, input %d\n",lynq_gpio_arr[i]);
                     if(i == 0 && j == 0)
                     {
-                        lynq_gpio_test_env_error = set_all_gpio_status_and_check(lynq_gpio_total_arr, 1, total_length) == 0 ? 0 : 1;
+                        lynq_gpio_test_env_error = set_all_gpio_status_and_check(lynq_gpio_arr, 1, valid_length) == 0 ? 0 : 1;
                     }
                 }
             }
@@ -409,8 +408,9 @@
             ret = sc_gpio_value_set(test_gpio_handle[lynq_gpio_arr[i]], 0);
             if(ret)
                 {
-                    ALOGD("sc_gpio_value_set gpio%d fail\n",lynq_gpio_arr[i]);
+                    ALOGE("sc_gpio_value_set gpio%d fail\n",lynq_gpio_arr[i]);
                 }
+                usleep(10000);
             ret = sc_gpio_value_get(test_gpio_handle[50], &value);
             if(ret)
                 {
@@ -418,22 +418,22 @@
                 }
             if(value == 0)
             {
-                ALOGD("*low function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
+                ALOGE("low function is OK,input %d\n",lynq_gpio_arr[i]);
                 lynq_gpio_low = 1;
             }
             else
             {
-                ALOGE("low function fail %s line %d input %s num %d\n", __FUNCTION__, __LINE__, input,lynq_gpio_arr[i]);
+                ALOGE("low function is fail,input %d\n",lynq_gpio_arr[i]);
             }
             bzero(lynq_show_gpio_state, 64);
             if((lynq_gpio_low != 1) || (lynq_gpio_high != 1))
             {
-                ALOGE("fail function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
+                ALOGE("total fail function,input %d\n",lynq_gpio_arr[i]);
             }
             else
             {
-                ALOGD("success function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
-                sprintf(lynq_show_gpio_state,"gpio%d\n",lynq_gpio_arr[i]);
+                ALOGE("success function,input:%d\n",lynq_gpio_arr[i]);
+                sprintf(lynq_show_gpio_state,"+GPIO:%d\r\n",lynq_gpio_arr[i]);
                 handle_output(lynq_show_gpio_state, strlen(lynq_show_gpio_state), Response);
                 break; // do not retry when pass
             }
@@ -446,7 +446,7 @@
         if (j >= 3 )
         {
             lynq_gpio_beta_state = 0;
-            sprintf(lynq_show_gpio_state,"[gpio%d][result]:FAIL \n",lynq_gpio_arr[i]);
+            sprintf(lynq_show_gpio_state,"+GPIO:%d FAIL\r\n",lynq_gpio_arr[i]);
             handle_output(lynq_show_gpio_state, strlen(lynq_show_gpio_state), Response);
         }
     } // for(i=0; i < sizeof(lynq_gpio_arr)/sizeof(lynq_gpio_arr[0]); i++)
@@ -454,17 +454,17 @@
     if(lynq_gpio_test_env_error == 1)
     {
         ALOGE("tool error\n");
-        handle_output("tool error\n", strlen("tool error\n"), Response);
+        handle_output("+GPIO:tool error\r\n", strlen("+GPIO:tool error\r\n"), Response);
     }
 
     if(lynq_gpio_beta_state == 1)
     {
-        ALOGD("total success function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
+        ALOGD("total success function\n");
         lynq_response_ok();
     }
     else
     {
-        ALOGE("total fail function %s line %d input %s\n", __FUNCTION__, __LINE__, input);
+        ALOGE("total fail function\n");
         lynq_response_error(100);
     }
     ret = all_gpio_uninit(total_length, lynq_gpio_total_arr);
@@ -546,7 +546,7 @@
         }
         
     }
-    handle_output("can't receive correct data", strlen("can't receive correct data"), Response);
+    handle_output("+RMII:can't receive correct data\r\n", strlen("+RMII:can't receive correct data\r\n"), Response);
     return -1;
 }
 
@@ -558,14 +558,14 @@
     sprintf(lynq_set_rgmii_arr,"echo 1,0x03,0x8800,0xc834 > /sys/devices/platform/soc/1307000.gmac/mdio_test");
     if(system(lynq_set_rgmii_arr))
     {
-        handle_output("Please checkout network_line", strlen("Please checkout network_line"), Response);
+        handle_output("+RMII:Please checkout network_line\r\n", strlen("+RMII:Please checkout network_line\r\n"), Response);
         return -1;
     }
     bzero(lynq_set_rgmii_arr, 128);
     sprintf(lynq_set_rgmii_arr,"echo 1,0x01,0x0,0xa000 > /sys/devices/platform/soc/1307000.gmac/mdio_test");
     if(system(lynq_set_rgmii_arr))
     {
-        handle_output("Please checkout network_line", strlen("Please checkout network_line"), Response);
+        handle_output("+RMII:Please checkout network_line\r\n", strlen("+RMII:Please checkout network_line\r\n"), Response);
         return -1;
     }
 
@@ -627,7 +627,6 @@
     int raw_socket = -1;
     char buf_init[1024];
     char buf_recv[1472];
-    char flag[256]={0};
     struct sockaddr_in ser_addr;
     struct sockaddr_in cli_addr;
     struct sockaddr_ll raw_addr;
@@ -653,7 +652,7 @@
     socketfd = rgmii_socket_init(&ser_addr,ser_ip);
     if(socketfd < 0)
     {
-        handle_output("init_failed", strlen("init_failed"), Response);
+        ALOGE("init_failed\n");
         lynq_response_error(2);
         return;
     }
@@ -661,7 +660,7 @@
     raw_socket = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
     if(raw_socket < 0)
     {
-        handle_output("raw_socket init_failed", strlen("raw_socket init_failed"), Response);
+        ALOGE("raw_socket init_failed\n");
         lynq_response_error(2);
         return;
     }
@@ -673,7 +672,7 @@
     ret = bind(raw_socket, (struct sockaddr*)&raw_addr, sizeof(raw_addr));//bind network interface card
     if(ret < 0)
     {
-        handle_output("bind raw_socket init_failed", strlen("bind raw_socket init_failed"), Response);
+        ALOGE("bind raw_socket init_failed\n");
         lynq_response_error(3);
         return;
     }
@@ -726,8 +725,7 @@
     }
     else
     {
-        sprintf(flag,"sent %d, success %d\n", check_count, check_ok_count);
-        handle_output(flag, strlen(flag), Response);
+        ALOGE("sent %d, success %d\r\n", check_count, check_ok_count);
         lynq_response_error(100);
     }
 
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp
index b5b2f6c..85767bc 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp
@@ -411,6 +411,11 @@
             sum_node = sum_node->next;
             continue;
         }
+        else if(strcmp((char *)xmlGetProp(sum_node, "apn_type"), apn->apn_type) == 0)
+        {
+            LYERRLOG("apntype already exists\n");
+            goto FAILED;
+        }
         node_num++;
         sum_node = sum_node->next;
     }
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/lynq_qser_gnss.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/lynq_qser_gnss.cpp
index 8884a7a..a238919 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/lynq_qser_gnss.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/src/lynq_qser_gnss.cpp
@@ -487,14 +487,14 @@
     char cgpsnmea_at_res[64]={};
     if (at_type == 0)
     {
-        strncpy(cgpsnmea_at_res,"+CGPSNMEA:(0,1)\r\n",64);
+        sprintf(cgpsnmea_at_res,"+CGPSNMEA:(0,1)\r\n");
         atsvc_gnss_outcb(cgpsnmea_at_res,strlen(cgpsnmea_at_res),0);
         return 0;
     }
     else if(at_type == 1)
     {
         bzero(cgpsnmea_at_res,64);
-        sprintf(cgpsnmea_at_res,"+CGPSNMEA:<%d>",at_gpsnmea_status);
+        sprintf(cgpsnmea_at_res,"+CGPSNMEA:<%d>\r\n",at_gpsnmea_status);
         atsvc_gnss_outcb(cgpsnmea_at_res,strlen(cgpsnmea_at_res),0);
         return 0;
     }
@@ -507,7 +507,7 @@
         }
         else
         {
-            strncpy(cgpsnmea_at_res,"+CGPSNMEA: same status\r\n",64);
+            sprintf(cgpsnmea_at_res,"+CGPSNMEA: same status\r\n");
             atsvc_gnss_outcb(cgpsnmea_at_res,strlen(cgpsnmea_at_res),0);
             return -1;
         }
@@ -546,22 +546,21 @@
     int res = 0;
     int income_at_type = 0;
     int gnss_state_type = -1;
-    char at_cmd[128]={0};
+    //char at_cmd[128]={0};
     char gnss_at_cmd[64] = {0};
     char parse_atcmd[128] = {0}; 
     if(NULL == input)
     {
-        strncpy(gnss_at_cmd,"+CME ERROR: 100\r\n",64);
+        sprintf(gnss_at_cmd,"+CME ERROR: 100\r\n");
         atsvc_gnss_outcb(gnss_at_cmd,strlen(gnss_at_cmd),0);
         return;
     }
-    bzero(at_cmd,128);
-    strncpy(at_cmd,input,strlen(input));
-    res = gnss_at_cmd_parse(at_cmd,parse_atcmd,&gnss_state_type,&income_at_type);
+
+    res = gnss_at_cmd_parse(input,parse_atcmd,&gnss_state_type,&income_at_type);
     if (res != 0)
     {
         ALOGE("parse at cmd error");
-        strncpy(gnss_at_cmd,"+CME ERROR: 100\r\n",64);
+        sprintf(gnss_at_cmd,"+CME ERROR: 100\r\n");
         atsvc_gnss_outcb(gnss_at_cmd,strlen(gnss_at_cmd),0);
         return;
     }
@@ -571,7 +570,7 @@
         res = lynq_at_cgps(income_at_type,gnss_state_type);
         if (res != 0)
         {
-            strncpy(gnss_at_cmd,"+CME ERROR: 100\r\n",64);
+            sprintf(gnss_at_cmd,"+CME ERROR: 100\r\n");
             atsvc_gnss_outcb(gnss_at_cmd,strlen(gnss_at_cmd),0);
             return;
         }
@@ -581,12 +580,12 @@
         res = lynq_at_cgpsnmea(income_at_type,gnss_state_type);
         if (res != 0)
         {
-            strncpy(gnss_at_cmd,"+CME ERROR: 100\r\n",64);
+            sprintf(gnss_at_cmd,"+CME ERROR: 100\r\n");
             atsvc_gnss_outcb(gnss_at_cmd,strlen(gnss_at_cmd),0);
             return;
         }
     }
-    strncpy(gnss_at_cmd,"ok\r\n",64);
+    sprintf(gnss_at_cmd,"OK\r\n");
     atsvc_gnss_outcb(gnss_at_cmd,strlen(gnss_at_cmd),0);
     return;
 }
diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3.dtsi b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3.dtsi
index 29f581a..f8adc55 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3.dtsi
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3.dtsi
@@ -488,7 +488,7 @@
 			codec_ti3104: ti3104@18 {         
 				compatible = "ti,tlv320aic3104";
 				reg = <0x18>;		
-				reset-gpios = <&bgpio 119 GPIO_ACTIVE_HIGH>;/*RST*/
+				//reset-gpios = <&bgpio 119 GPIO_ACTIVE_HIGH>;/*RST*/
 				ai3x-micbias-vg = <MICBIAS_2_0V>;
 
 				clocks = <&clkc CLKOUT2_CLK>;
