diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-irq-demo/files/lynq-irq-demo.cpp b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-irq-demo/files/lynq-irq-demo.cpp
index 537273e..0f8ddef 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-irq-demo/files/lynq-irq-demo.cpp
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-irq-demo/files/lynq-irq-demo.cpp
@@ -5,10 +5,35 @@
 #include <include/lynq-irq.h>
 
 
+#define CMD_SET_WAKE    "set_wake"
+#define CMD_GET_WAKE    "get_wake\n"
+#define CMD_SET_TYPE    "set_type"
+#define CMD_GET_TYPE    "get_type\n"
+#define CMD_UNINSTALL   "uninstall\n"
+#define CMD_QUIT_TEST   "quit\n"
+
+int line;
+
+
+static void printUsage(void)
+{
+    printf("Usage:\n");
+    printf("-set_wake <en>\n");
+    printf("-set_type <en>\n");
+    printf("-get_type\n");
+    printf("-get_wake\n");
+    printf("-uninstall\n");
+    printf("-quit\n");
+    printf("Please input an cmd:");
+}
+
 
 static void irq_test_handler(void)
 {
-    printf("this is irq_test_handler\n");
+    int trig_type;
+    trig_type = lynq_irq_get_type(line);
+    printf("this is irq_test_handler\nthis irq is gpio %d,trig_type is %d\n", line_gpio[line], trig_type);
+    return NULL;
 }
 
 
@@ -18,60 +43,45 @@
     int irq;
     int trig_type;
     int en;
+    char cmd[16];
+    char *cmd2;
+    char *cmd1;
 
-    if(argc < 2)
+    if(argc != 3)
     {
-        printf("wrong input format, please -h \n");
+        printf("wrong input format, please inout lynq-irq-demo <irq_line> <trig_type/wake_state> \n");
         return -1;
     }
-
-    if(strcmp(argv[1],"-h") == 0)
-    {
-        printf("        -h                                        --help\n");
-        printf("        -t   [irq][trig_type]                    --lynq_irq_set_type\n");
-        printf("        -sw  [irq][en]                           --lynq_irq_set_wake\n");
-        printf("        -gw  [irq]                               --lynq_irq_get_wake\n");
-        return 0;
-    }
-
-    if(argv[2] == NULL)
-    {
-        printf("wrong input format, please -h \n");
-        return -1;
-    }
-
-    irq = atoi(argv[2]);
-    ret = lynq_irq_install(irq, irq_test_handler, 1);
+    irq = atoi(argv[1]);
+    trig_type = atoi(argv[2]);
+    ret = lynq_irq_install(irq, irq_test_handler, trig_type);
     if(ret != 0)
     {
         printf("lynq_irq_install fail\n");
+        return 0;
     }
     else
     {
         printf("lynq_irq_install success\n");
+        line = irq;
     }
 
-    if(strcmp(argv[1],"-t") == 0)
+    while(1)
     {
-        if(argv[3] != NULL)
+        printUsage();
+        memset(cmd,0,sizeof(cmd));
+        fgets(cmd, sizeof(cmd), stdin);
+        printf("cmd:%s\n",cmd);
+        cmd1 = strtok(cmd, " ");
+        cmd2 = strtok(NULL, " ");
+        if(strcmp(cmd1, CMD_SET_WAKE) == 0)
         {
-            trig_type = atoi(argv[3]);
-            ret = lynq_irq_set_type(irq, trig_type);
-            if(ret < 0)
+            if(cmd2 == NULL)
             {
-                printf("lynq_irq_set_type fail\n");
+                printf("wake_state is NULL\n");
+                break;
             }
-            else
-            {
-                printf("lynq_irq_set_type success\n");
-            }
-        }
-    }
-    else if (strcmp(argv[1],"-sw") == 0)
-    {
-        if(argv[3] != NULL)
-        {
-            en = atoi(argv[3]);
+            en = atoi(cmd2);
             ret = lynq_irq_set_wake(irq, en);
             if(ret < 0)
             {
@@ -84,30 +94,66 @@
                 printf("ret=%d\n", ret);
             }
         }
-    }
-    else if (strcmp(argv[1],"-gw") == 0)
-    {
-        ret = lynq_irq_get_wake(irq);
-        printf("lynq_irq_get_wake ret %d\n", ret);
-    }
-    else
-    {
-        printf("wrong input format, please -h \n");
-        return -1;
+        else if(strcmp(cmd1, CMD_GET_WAKE) == 0)
+        {
+            ret = lynq_irq_get_wake(irq);
+            printf("lynq_irq_get_wake ret %d\n", ret);
+        }
+        else if(strcmp(cmd1, CMD_SET_TYPE) == 0)
+        {
+            if(cmd2 == NULL)
+            {
+                printf("trig_type is NULL\n");
+                break;
+            }
+            trig_type = atoi(cmd2);
+            ret = lynq_irq_set_type(line, trig_type);
+            if(ret < 0)
+            {
+                printf("lynq_irq_set_type fail\n");
+            }
+            else
+            {
+                printf("lynq_irq_set_type success\n");
+            }
+        }
+        else if(strcmp(cmd1, CMD_GET_TYPE) == 0)
+        {
+            ret = lynq_irq_get_type(irq);
+            printf("lynq_irq_get_type ret %d\n", ret);
+        }
+        else if(strcmp(cmd1, CMD_UNINSTALL) == 0)
+        {
+            ret = lynq_irq_uninstall(irq);
+            if(ret != 0)
+            {
+                printf("lynq_irq_uninstall fail\n");
+            }
+            else
+            {
+                printf("lynq_irq_uninstall success\n");
+            }
+        }
+        else if(strcmp(cmd1, CMD_QUIT_TEST) == 0)
+        {
+            ret = lynq_irq_uninstall(irq);
+            if(ret != 0)
+            {
+                printf("lynq_irq_uninstall fail\n");
+            }
+            else
+            {
+                printf("lynq_irq_uninstall success\n");
+                break;
+            }
+        }
+        else
+        {
+            printf("wrong input format\n");
+        }
     }
 
-    ret = lynq_irq_uninstall(irq);
-    if(ret != 0)
-    {
-        printf("lynq_irq_uninstall fail\n");
-    }
-    else
-    {
-        printf("lynq_irq_uninstall success\n");
-    }
-        
     return 0;
-
 }
 
 
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/poweralarm-demo/files/poweralarm-demo.cpp b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/poweralarm-demo/files/poweralarm-demo.cpp
index a83d3d7..75da1e1 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/poweralarm-demo/files/poweralarm-demo.cpp
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/poweralarm-demo/files/poweralarm-demo.cpp
@@ -16,20 +16,26 @@
 st_api_test_case at_api_testcases[] = 
 {
     {0,   "print_help"},
-    {1,   "poweralarm"},
-    {2,   "wakealarm"},
-    {3,   "cancel_wakealarm"},
-    {4,   "lynq_set_poweralarm"},
-    {5,   "lynq_set_wakealarm"},
+    {1,   "lynq_rtc_service_init"},
+    {2,   "poweralarm"},
+    {3,   "wakealarm"},
+    {4,   "cancel_wakealarm"},
+    {5,   "lynq_set_poweralarm"},
+    {6,   "lynq_set_wakealarm"},
+    {7,   "lynq_rtc_service_deinit"},
     {-1,    NULL}
 };
 
+int src_id = -1;
+typedef int (*lynq_wakealarm_add_cb)(unsigned int src_id, int rtc_id);
 
-int (*poweralarm)(char *buffer);
-int (*wakealarm)(char *buffer);
-int (*cancel_wakealarm)();
-int (*lynq_set_poweralarm)(unsigned long time_sec);
-int (*lynq_set_wakealarm)(unsigned long time_sec);
+int (*lynq_rtc_service_init)(void);
+int (*lynq_rtc_service_deinit)(void);
+int (*poweralarm)(char *buffer,int src_id);
+int (*wakealarm)(char *buffer,int srcid,int rtc_id,lynq_wakealarm_add_cb wakealarm_notify);
+int (*cancel_wakealarm)(int src_id,int rtc_id);
+int (*lynq_set_poweralarm)(unsigned long time_sec,int src_id);
+int (*lynq_set_wakealarm)(unsigned long time_sec,int srcid,int rtc_id,lynq_wakealarm_add_cb wakealarm_notify);
 
 void *dlHandle_poweralarm = NULL;
 
@@ -48,10 +54,16 @@
     }
 }
 
+int lynq_wakealarm_add_callback(unsigned int src_id, int rtc_id)
+{
+    printf("wake alarm callback test \n");
+    return 0;
+}
+
+
 int main(int argc,char *argv[])
 {
 
-    int flag = 0; 
     int cmdIdx = 0;
     printf("Enter main function\n");
     
@@ -63,38 +75,53 @@
         return -1;
     }
 
-    poweralarm = (int (*)(char *buffer))dlsym(dlHandle_poweralarm, "poweralarm");
+    poweralarm = (int (*)(char *buffer,int src_ids))dlsym(dlHandle_poweralarm, "poweralarm");
     if(poweralarm == NULL)
     {
         printf("poweralarm is null\n");
         return -1;
     }
 
-   wakealarm = (int (*)(char *buffer))dlsym(dlHandle_poweralarm, "wakealarm");
+    wakealarm = (int (*)(char *buffer,int srcid,int rtc_id,lynq_wakealarm_add_cb wakealarm_notify))dlsym(dlHandle_poweralarm, "wakealarm");
     if(wakealarm == NULL)
     {
         printf("wakealarm is null\n");
         return -1;
     }
-    lynq_set_poweralarm = (int (*)(unsigned long))dlsym(dlHandle_poweralarm,"lynq_set_poweralarm");
+    lynq_set_poweralarm = (int (*)(unsigned long,int src_id))dlsym(dlHandle_poweralarm,"lynq_set_poweralarm");
     if(lynq_set_poweralarm == NULL)
     {
         printf("lynq_set_poweralarm is null\n");
         return -1;
     }
-    lynq_set_wakealarm = (int (*)(unsigned long))dlsym(dlHandle_poweralarm,"lynq_set_wakealarm");
+    lynq_set_wakealarm = (int (*)(unsigned long,int srcid,int rtc_id,lynq_wakealarm_add_cb wakealarm_notify))dlsym(dlHandle_poweralarm,"lynq_set_wakealarm");
     if(lynq_set_wakealarm == NULL)
     {
         printf("lynq_set_wakealarm is null\n");
         return -1;
     }
     
-    cancel_wakealarm = (int (*)())dlsym(dlHandle_poweralarm, "cancel_wakealarm");
+    cancel_wakealarm = (int (*)(int src_id,int rtc_id))dlsym(dlHandle_poweralarm, "cancel_wakealarm");
      if(cancel_wakealarm == NULL)
     {
         printf("cancel_wakealarm is null\n");
         return -1;
     }
+
+    lynq_rtc_service_init = (int(*)())dlsym(dlHandle_poweralarm,"lynq_rtc_service_init");
+    if(lynq_rtc_service_init == NULL)
+    {
+        printf("lynq_rtc_service_init is null\n");
+        return -1;
+    }
+
+    lynq_rtc_service_deinit = (int (*)())dlsym(dlHandle_poweralarm,"lynq_rtc_service_deinit");
+    if(lynq_rtc_service_deinit == NULL)
+    {
+        printf("lynq_rtc_service_deinit is null \n");
+        return -1;
+    }
+    
     print_help();
     while(1)
     {
@@ -111,11 +138,16 @@
                 break;
             case 1:
                 {
+                    src_id = lynq_rtc_service_init();
+                    break;
+                }
+            case 2:
+                {
                     int ret = 0;
                     char tmp_time[32] = {0};
                     printf("Set poweralarm time,e.g: 60 (seconds)\n");
                     scanf("%s",tmp_time);
-                    ret = poweralarm(tmp_time);
+                    ret = poweralarm(tmp_time,src_id);
                     if(ret != 0)
                     {
                         printf("set poweralarm failed\n");
@@ -123,13 +155,15 @@
                     }
                 break;
                 }
-            case 2:
+            case 3:
                 {
                     int ret = 0;
                     char tmp_time[32]={0};
-                    printf("Set wakealarm time ,e.g: 60 (seconds)\n");
-                    scanf("%s",tmp_time);
-                    ret = wakealarm(tmp_time);
+                    int rtc_id = 0;
+                    printf("Set wakealarm time ,e.g: 60  1 (seconds)\n");
+                    scanf("%s%d",tmp_time,&rtc_id);
+                   
+                    ret = wakealarm(tmp_time,src_id,rtc_id,lynq_wakealarm_add_callback);
                     if(ret != 0)
                     {
                         printf("set wakealarm failed\n");
@@ -137,10 +171,13 @@
                     }
                     break;
                 }
-             case 3:
+             case 4:
                 {
                     int ret = 0;
-                    ret = cancel_wakealarm();
+                    int rtc_id = 0;
+                    printf("Please input you want cancel rtc timer rtc id\n");
+                    scanf("%d",&rtc_id);
+                    ret = cancel_wakealarm(src_id,rtc_id);
                     if(ret != 0)
                     {
                         printf("Cancel_wakealarm failed!!!");
@@ -148,13 +185,13 @@
                     }
                     break;
                 }
-             case 4:
+             case 5:
                 { 
                    int ret = 0; 
                    unsigned long time_sec = 0;
-                   printf("Input time_sec you want poweralarm,e.g:60 (seconds)\n");
+                   printf("Input time_sec you want poweralarm,e.g: 60 (seconds)\n");
                    scanf("%lu",&time_sec);
-                   ret =lynq_set_poweralarm(time_sec);
+                   ret =lynq_set_poweralarm(time_sec,src_id);
                    printf("ret is %d\n",ret);
                    if(ret != 0)
                    {
@@ -163,25 +200,40 @@
                    }
                    break;
                 }
-            case 5:
-                { 
+            case 6:
+                 { 
                    int ret = 0; 
                    unsigned long time_sec = 0;
-                   printf("Input time_sec you want wakealarm,e.g:60 (seconds)\n");
-                   scanf("%lu",&time_sec);
-                   ret =lynq_set_wakealarm(time_sec);
+                   int rtc_id;
+                   printf("Input time_sec you want wakealarm,e.g:60  1(seconds)\n");
+                   scanf("%lu%d",&time_sec,&rtc_id);
+                   ret =lynq_set_wakealarm(time_sec,src_id,rtc_id,lynq_wakealarm_add_callback);
                    if(ret != 0)
                    {
                         printf("lynq_set_wakealarm failed\n");
                         return -1;
                    }
                    break;
-               }
+                }
+            case 7:
+                {
+                    int ret  = -1;
+                    printf("rtc servce deinit !!!!!!!!!!!!");
+                    ret = lynq_rtc_service_deinit();
+                    if(ret != 0)
+                    {
+                        printf("lynq rtc service deinit failed \n");
+                        return -1;
+
+                    }
+                    break;
+                }
                 
             default:
                 break;
         }
     }
+
     return 0;
 
 }
diff --git a/cap/zx297520v3/sources/meta-zxic/recipes-kernel/linux/files/zx297520v3/linux-5_10-vehicle_dc_ref-normal-defconfig b/cap/zx297520v3/sources/meta-zxic/recipes-kernel/linux/files/zx297520v3/linux-5_10-vehicle_dc_ref-normal-defconfig
index 6edd109..8bc48e6 100755
--- a/cap/zx297520v3/sources/meta-zxic/recipes-kernel/linux/files/zx297520v3/linux-5_10-vehicle_dc_ref-normal-defconfig
+++ b/cap/zx297520v3/sources/meta-zxic/recipes-kernel/linux/files/zx297520v3/linux-5_10-vehicle_dc_ref-normal-defconfig
@@ -1975,12 +1975,12 @@
 # CONFIG_SND_SOC_ZX29_TI3100 is not set
 #dongyu@modify for codec start
 # CONFIG_SND_SOC_ZX29_NAU8810 is not set
-CONFIG_SND_SOC_ZX29_TI3104=y
+# CONFIG_SND_SOC_ZX29_TI3104 is not set
 # CONFIG_SND_SOC_ZX29_ES8374 is not set
 # CONFIG_SND_SOC_ZX29_ES8312 is not set
 # CONFIG_SND_SOC_ZX29_AK4940 is not set
 # CONFIG_SND_SOC_ZX29_MAX9867 is not set
-# CONFIG_SND_SOC_ZX29_ES8311 is not set
+CONFIG_SND_SOC_ZX29_ES8311=y
 CONFIG_SND_SOC_ZX_VOICE=y
 CONFIG_SND_SOC_ZX297520V3=y
 CONFIG_SND_SOC_ZX_I2S=y
@@ -1988,9 +1988,9 @@
 # CONFIG_SND_SOC_ZX_TDM is not set
 # CONFIG_SND_SOC_TLV320AIC31XX is not set
 # CONFIG_SND_SOC_NAU8810 is not set
-CONFIG_SND_SOC_TLV320AIC3X=y
+# CONFIG_SND_SOC_TLV320AIC3X is not set
 # CONFIG_SND_SOC_MAX9867 is not set
-# CONFIG_SND_SOC_ES8311 is not set
+CONFIG_SND_SOC_ES8311=y
 #dongyu@modify for codec end
 CONFIG_SND_EXTRA_CTRL=y
 CONFIG_USE_TOP_I2S0=y
diff --git a/cap/zx297520v3/src/lynq/framework/lynq-atcid/zxic_at_func_wrapper.cpp b/cap/zx297520v3/src/lynq/framework/lynq-atcid/zxic_at_func_wrapper.cpp
index 3037e62..99794fb 100755
--- a/cap/zx297520v3/src/lynq/framework/lynq-atcid/zxic_at_func_wrapper.cpp
+++ b/cap/zx297520v3/src/lynq/framework/lynq-atcid/zxic_at_func_wrapper.cpp
@@ -29,7 +29,7 @@
 template <int n>
 void zxic_at_callback(unsigned char * input, unsigned char * output)
 {
-    char org_cmd[64] = {0};
+    char *org_cmd = NULL;
     if (input == NULL || output == NULL)
     {
         ALOGE("zxic_at_callback invalid params %p-%p \n", input, output);
@@ -37,6 +37,12 @@
     }
     strcpy((char*)output, "\r\n");
     struct callback_entry *pEntry = g_all_reg_entry[n];
+	org_cmd = new char [strlen(input) + 32];
+	if (org_cmd == NULL)
+	{
+		strcat(output, "+CME ERROR: 100\r\n");
+	}
+	org_cmd[0] = '\0';
     strcat(org_cmd, pEntry->at_prefix);
     strcat(org_cmd, (char *)input);
     pEntry->plugin_entry->output_buffer = (char*)output;
@@ -44,6 +50,7 @@
     pEntry->plugin_entry->atsvc_incb(org_cmd, strlen(org_cmd));
     pEntry->plugin_entry->output_buffer = NULL;
     ALOGD("zxic_at_callback output -- %s \n", output);
+	delete [] org_cmd;
     //return 0;
 }
 
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-irq/include/lynq-irq.h b/cap/zx297520v3/src/lynq/lib/liblynq-irq/include/lynq-irq.h
index 298e75a..36fd9ed 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-irq/include/lynq-irq.h
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-irq/include/lynq-irq.h
@@ -6,6 +6,9 @@
 extern "C" {
 #endif
 
+
+int line_gpio[15]={-1,48,49,50,51,52,53,54,119,128,129,-1,131,-1,125};//this is the line match gpio
+
 typedef void (*irq_handler)(void);
 
 int lynq_irq_install(int line, irq_handler irq_handler, int trig_type);
@@ -14,6 +17,8 @@
 
 int lynq_irq_set_type(int line, int trig_type);
 
+int lynq_irq_get_type(int line);
+
 int lynq_irq_set_wake(int line, int en);
 
 int lynq_irq_get_wake(int line);
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-irq/lynq-irq.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-irq/lynq-irq.cpp
index 566961e..a48090e 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-irq/lynq-irq.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-irq/lynq-irq.cpp
@@ -12,7 +12,6 @@
 extern "C" {
 #endif
 
-#define USER_LOG_TAG "LYNQ_IRQ"
 
 /*****************************************
 * @brief:lynq_irq_install
@@ -27,8 +26,10 @@
 int lynq_irq_install(int line, irq_handler irq_test_handler, int trig_type)
 {
     int ret;
-    LYLOGSET(LOG_INFO);
-    LYLOGEINIT(USER_LOG_TAG);
+    if(trig_type < 0)
+    {
+        return -1;
+    }
     ret = sc_irq_install(line, irq_test_handler, trig_type);
     if (ret != 0)
     {
@@ -52,8 +53,6 @@
 int lynq_irq_uninstall(int line)
 {
     int ret;
-    LYLOGSET(LOG_INFO);
-    LYLOGEINIT(USER_LOG_TAG);
     ret = sc_irq_uninstall(line);
     if (ret != 0)
     {
@@ -77,8 +76,10 @@
 int lynq_irq_set_type(int line, int trig_type)
 {
     int ret;
-    LYLOGSET(LOG_INFO);
-    LYLOGEINIT(USER_LOG_TAG);
+    if(trig_type < 0)
+    {
+        return -1;
+    }
     ret = sc_irq_set_type(line, trig_type);
     if (ret < 0)
     {
@@ -89,6 +90,29 @@
 
 }
 
+/*****************************************
+* @brief:lynq_irq_get_type
+* @param count [IN]:1
+* @param sum [OUT]:NA
+* @return :success >= 0, failed other
+* @todo:NA
+* @see:NA
+* @warning:NA
+******************************************/
+int lynq_irq_get_type(int line)
+{
+    int ret;
+    int trig_type;
+    ret = sc_irq_get_type(line, &trig_type);
+    if (ret != 0)
+    {
+        LYINFLOG("get_type failed, ret:%d\n", ret);
+        return ret;
+    }
+    LYINFLOG("get_type readback(%d)\n", trig_type);
+    return trig_type;
+}
+
 
 /*****************************************
 * @brief:lynq_irq_set_wake
@@ -102,8 +126,6 @@
 int lynq_irq_set_wake(int line, int en)
 {
     int ret;
-    LYLOGSET(LOG_INFO);
-    LYLOGEINIT(USER_LOG_TAG);
     ret = sc_irq_set_wake(line, en);
     if (ret < 0)
     {
@@ -126,8 +148,6 @@
 {
     int ret;
     int en;
-    LYLOGSET(LOG_INFO);
-    LYLOGEINIT(USER_LOG_TAG);
     ret = sc_irq_get_wake(line, &en);
     if (ret != 0)
     {
diff --git a/cap/zx297520v3/src/lynq/lib/libpoweralarm/include/libpoweralarm.h b/cap/zx297520v3/src/lynq/lib/libpoweralarm/include/libpoweralarm.h
index 54191a6..4110fba 100755
--- a/cap/zx297520v3/src/lynq/lib/libpoweralarm/include/libpoweralarm.h
+++ b/cap/zx297520v3/src/lynq/lib/libpoweralarm/include/libpoweralarm.h
@@ -15,11 +15,17 @@
     extern "C" {
 #endif
 
-ssize_t poweralarm(char * buffer);
-ssize_t wakealarm(char *buffer);
-ssize_t cancel_wakealarm(void);
-int lynq_set_wakealarm(unsigned long  time_sec);
-int lynq_set_poweralarm(unsigned long time_sec);
+typedef int (*lynq_wakealarm_add_cb)(unsigned int src_id, int rtc_id);
+int lynq_rtc_service_init(void);
+int lynq_rtc_service_deinit(void);
+ssize_t poweralarm(char *buffer,int src_id);
+ssize_t wakealarm(char *buffer,int src_id,int rtc_id,lynq_wakealarm_add_cb wakealarm_notify );
+ssize_t cancel_wakealarm(int src_id, int rtc_id);
+
+int lynq_set_wakealarm(unsigned long time_sec,int src_id,int rtc_id,lynq_wakealarm_add_cb wakealarm_notify );
+int  lynq_set_poweralarm(unsigned long time_sec,int src_id);
+
+
 
 
 #ifdef __cplusplus
diff --git a/cap/zx297520v3/src/lynq/lib/libpoweralarm/libpoweralarm.cpp b/cap/zx297520v3/src/lynq/lib/libpoweralarm/libpoweralarm.cpp
index b3b7827..26f57be 100755
--- a/cap/zx297520v3/src/lynq/lib/libpoweralarm/libpoweralarm.cpp
+++ b/cap/zx297520v3/src/lynq/lib/libpoweralarm/libpoweralarm.cpp
@@ -30,10 +30,9 @@
 #define MAX_TIME    268435456
 
 
-static int wk_rtc_id = 1;
-static int wk_srcid = 0;
-
 typedef int (*sc_rtc_timer_exp_cb)(unsigned int src_id, int rtc_id);
+typedef int (*lynq_wakealarm_add_cb)(unsigned int src_id, int rtc_id);
+
 extern int sc_rtc_timer_init(void);
 extern int sc_rtc_timer_uninit(void );
 extern int sc_rtc_timer_add(int srcid, int rtc_id, unsigned long ulSec, sc_rtc_timer_exp_cb rtc_notify);
@@ -45,31 +44,67 @@
 
 extern int sc_rtc_add_poweroff_alarm(int srcid, int alarm_modid, int rtc_id, struct tm *utc_sec, sc_rtc_timer_exp_cb rtc_notify);
 
+
 /*****************************************
-* @brief:sc_rtc_timer_add_cb
-* @param count [IN]:src_id, rtc_id,
+* @brief:lynq_rtc_service_init
+* @param count [IN]:NA
 * @param sum [OUT]:NA
-* @return :0
+* @return :success src_id, failed -1
 * @todo:
 * @see:NA
 * @warning:
-******************************************/
-int sc_rtc_timer_add_cb(unsigned int src_id, int rtc_id)
+*****************************************/
+int lynq_rtc_service_init(void)
 {
+    int src_id = -1;
+    
+    LYLOGSET(LOG_INFO);
+    LYLOGEINIT(USER_LOG_TAG);
+    
+    src_id = sc_rtc_timer_init();
+    if (src_id <= 0)
+    {
+        LYERRLOG("rtc_timer_init fail!");
+        return -1;
+    }
+    return src_id;
+
+}
+
+/*****************************************
+* @brief:lynq_rtc_service_init
+* @param count [IN]:NA
+* @param sum [OUT]:NA
+* @return :success src_id, failed -1
+* @todo:
+* @see:NA
+* @warning:
+*****************************************/
+int lynq_rtc_service_deinit(void)
+{
+    int ret = -1;
+    ret = sc_rtc_timer_uninit();
+    if(ret != 0)
+    {
+        LYINFLOG("Deinit failed!!!");
+        return -1;
+    }
+    
     return 0;
+
 }
 
 
 /*****************************************
 * @brief:Set wakealarm time
-* @param count [IN]:buffer,
+* @param count [IN]:char *buffer,int src_id ...
 * @param sum [OUT]:NA
 * @return :success 0, failed -1
 * @todo:
 * @see:NA
 * @warning:
 ******************************************/
-ssize_t wakealarm(char *buffer)
+ssize_t wakealarm(char *buffer,int src_id,int rtc_id,lynq_wakealarm_add_cb wakealarm_notify )
 {
     unsigned long  time_sec = 0;
     int ret = 0;
@@ -80,9 +115,6 @@
     tmp_time = time(NULL);
     localtime(&tmp_time);
     
-    LYLOGSET(LOG_INFO);
-    LYLOGEINIT(USER_LOG_TAG);
-    
     if(buffer == NULL)
     {
         LYINFLOG("Bad input parameter,exit!!!!");
@@ -115,15 +147,8 @@
     wake_arlarm = localtime(&tmp_time);
     
     LYINFLOG("Set  wakealarm   %lu seconds ",time_sec);
-    
-    wk_srcid = sc_rtc_timer_init();
-    if (wk_srcid <= 0)
-    {
-        LYINFLOG("rtc_timer_init fail!");
-        return -1;
-    }
-    
-    ret = sc_rtc_timer_add_utc(wk_srcid, wk_rtc_id,wake_arlarm,0,sc_rtc_timer_add_cb);
+
+    ret = sc_rtc_timer_add_utc(src_id, rtc_id,wake_arlarm,0,wakealarm_notify);
     if(ret < 0)
     {
         LYINFLOG("Add  rtc timer failed!!!!");
@@ -132,12 +157,6 @@
     
     LYINFLOG("Set wakealarm success !!!");
 
-    ret = sc_rtc_timer_uninit();
-    if(ret != 0)
-    {
-        LYINFLOG("Deinit failed");
-    }
-    
     return 0;
 
 }
@@ -145,28 +164,26 @@
 
 /*****************************************
 * @brief:set poweralarm time 
-* @param count [IN]:buffer,
+* @param count [IN]:char *buffer, int srcid
 * @param sum [OUT]:NA
 * @return :success 0, failed -1
 * @todo:
 * @see:NA
 * @warning:
 ******************************************/
-ssize_t poweralarm(char *buffer)
+ssize_t poweralarm(char *buffer,int src_id )
 {
-    int srcid = 0;
+
     unsigned long  time_sec = 0;
     int ret = 0;
     char *buf_bak = buffer;
-
+    
     int alarmid = 0;
     char username[8] = "user";
     time_t tmp_time = 0;
     struct tm *power_arlarm = NULL;
     tmp_time = time(NULL);
     localtime(&tmp_time);
-
-
     LYLOGSET(LOG_INFO);
     LYLOGEINIT(USER_LOG_TAG);
    
@@ -203,21 +220,16 @@
     }
     
     LYINFLOG("Set poweralarm %lu seconds",time_sec);
-    srcid = sc_rtc_timer_init();
-    if (srcid <= 0)
-    {
-        LYERRLOG("rtc_timer_init fail!");
-        return -1;
-    }
 
-    alarmid = sc_rtc_get_poweroff_alarm_modid(srcid, username);
+    
+    alarmid = sc_rtc_get_poweroff_alarm_modid(src_id, username);
     if(alarmid < 0)
     {
         LYERRLOG("Get poweroff alarm id failed !!!");
         return -1;
     }
 
-    ret = sc_rtc_add_poweroff_alarm(srcid, alarmid, 0, power_arlarm, sc_rtc_timer_add_cb);
+    ret = sc_rtc_add_poweroff_alarm(src_id, alarmid, 0, power_arlarm, NULL);
     if(ret < 0)
     {
         LYERRLOG("Set power alarm failed !!!");
@@ -225,37 +237,31 @@
     }
     LYINFLOG("Set power alarm success !!!!");
 
-    ret = sc_rtc_timer_uninit();
-    if(ret != 0)
-    {
-        LYINFLOG("Deinit failed!!!");
-    }
-    
     return 0;
     
 }
 
 /**********************************************
 * @brief:cancel_wakealarm,
-* @param count [IN]:void
+* @param count [IN]:int src_id, int rtc_id
 * @param sum [OUT]:NA
 * @return :success 0, failed -1
 * @todo:
 * @see:NA
 * @warning:
 ********************************************/
-ssize_t cancel_wakealarm(void)
+ssize_t cancel_wakealarm(int src_id, int rtc_id)
 {
     int ret = 0;
 
     LYINFLOG("Enter cancel_wakealarm ");
-    ret = sc_rtc_timer_del(wk_srcid, wk_rtc_id);
+    ret = sc_rtc_timer_del(src_id, rtc_id);
     if(ret < 0)
     {
         LYERRLOG("Del wakealarm failed!!!");
         return -1;
     }
-
+    LYINFLOG("Cancel success  ");
     return 0;
     
 }
@@ -263,19 +269,17 @@
 
 /*****************************************
 * @brief:lynq_set_poweralarm
-* @param count [IN]:unsigned long time_sec
+* @param count [IN]:unsigned long time_sec , int src_id
 * @param sum [OUT]:NA
 * @return :success 0, failed -1
 * @todo:
 * @see:NA
 * @warning:
 ******************************************/
-int  lynq_set_poweralarm(unsigned long time_sec)
+int  lynq_set_poweralarm(unsigned long time_sec,int src_id)
 {
 
     int ret = 0;
-    int srcid = 0;
-
     int alarmid = 0;
     char username[8] = "user";
     
@@ -283,14 +287,11 @@
     struct tm *power_arlarm = NULL;
     tmp_time = time(NULL);
     localtime(&tmp_time);
-    
 
+    
     tmp_time += time_sec;
     power_arlarm = localtime(&tmp_time);
-    
-    LYLOGSET(LOG_INFO);
-    LYLOGEINIT(USER_LOG_TAG);
-    
+   
     if(time_sec < MIN_TIME || time_sec > MAX_TIME )
     {
         LYERRLOG("Illeagle input: too large or too small !!!");
@@ -298,21 +299,16 @@
     }
 
     LYINFLOG("lynq_set_poweralarm  %lu seconds",time_sec);
-    srcid = sc_rtc_timer_init();
-    if (srcid <= 0)
-    {
-        LYERRLOG("rtc_timer_init fail!");
-        return -1;
-    }
 
-    alarmid = sc_rtc_get_poweroff_alarm_modid(srcid, username);
+
+    alarmid = sc_rtc_get_poweroff_alarm_modid(src_id, username);
     if(alarmid < 0)
     {
         LYERRLOG("Get poweroff alarm id failed !!!");
         return -1;
     }
 
-    ret = sc_rtc_add_poweroff_alarm(srcid, alarmid, 0, power_arlarm, sc_rtc_timer_add_cb);
+    ret = sc_rtc_add_poweroff_alarm(src_id, alarmid, 0, power_arlarm, NULL);
     if(ret < 0)
     {
         LYERRLOG("Set power alarm failed !!!");
@@ -321,12 +317,6 @@
     
     LYINFLOG("Set power alarm success !!!!");
     
-    ret = sc_rtc_timer_uninit();
-    if(ret != 0)
-    {
-        LYINFLOG("Deinit rtc_timer  failed!!!");
-    }
-    
     return 0;
     
 
@@ -335,14 +325,14 @@
 
 /*****************************************
 * @brief:lynq_set_wakealarm
-* @param count [IN]:unsigned long  time_sec
+* @param count [IN]:unsigned long  time_sec,....
 * @param sum [OUT]:NA
 * @return :success 0, failed -1
 * @todo:
 * @see:NA
 * @warning:
 ******************************************/
-int lynq_set_wakealarm(unsigned long  time_sec)
+int lynq_set_wakealarm(unsigned long time_sec,int src_id,int rtc_id,lynq_wakealarm_add_cb wakealarm_notify )
 {
     int ret = 0;
     
@@ -350,10 +340,7 @@
     struct tm *wake_arlarm = NULL;
     tmp_time = time(NULL);
     localtime(&tmp_time);
-    
-    LYLOGSET(LOG_INFO);
-    LYLOGEINIT(USER_LOG_TAG);
-    
+        
     if(time_sec < MIN_TIME || time_sec > MAX_TIME)
     {
         LYERRLOG("Illeagle input: too large or too small !!!");
@@ -361,19 +348,12 @@
     }
     
     LYINFLOG("lynq_set_wakealarm   %lu seconds ",time_sec);
-    
-    wk_srcid = sc_rtc_timer_init();
-    if (wk_srcid <= 0)
-    {
-        LYINFLOG("rtc_timer_init fail!");
-        return -1;
-    }
-    
+
     tmp_time += time_sec;
     wake_arlarm = localtime(&tmp_time);
     LYINFLOG("Set  wakealarm   %lu seconds ",time_sec);
     
-    ret = sc_rtc_timer_add_utc(wk_srcid, wk_rtc_id,wake_arlarm,0,sc_rtc_timer_add_cb);
+    ret = sc_rtc_timer_add_utc(src_id, rtc_id,wake_arlarm,0,wakealarm_notify);
     if(ret < 0)
     {
         LYINFLOG("Add  rtc timer failed!!!!");
@@ -381,17 +361,12 @@
     }
     
     LYINFLOG("Set wakealarm success !!!");
-
-    ret = sc_rtc_timer_uninit();
-    if(ret != 0)
-    {
-        LYINFLOG("Deinit failed!!!");
-    }
     
     return 0;
 
 }
 
+
 DEFINE_LYNQ_LIB_LOG(LYNQ_POWERALARM)
 
 #ifdef __cplusplus
diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3-pinctrl.dtsi b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3-pinctrl.dtsi
index f9f558d..1a6ab53 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3-pinctrl.dtsi
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3-pinctrl.dtsi
@@ -288,97 +288,97 @@
 	sc_ext_int0: sc_ext_int0 {
 		pins = "EXT_INT0";
 		function = "EXT_INT0";
-		bias-disable;
+		//bias-disable; jb.qi changed for pullset fail on 20231107
 	};
 
 	sc_ext_int1: sc_ext_int1 {
 		pins = "EXT_INT1";
 		function = "EXT_INT1";
-		bias-disable;
+		//bias-disable; jb.qi changed for pullset fail on 20231107
 	};
 
 	sc_ext_int2: sc_ext_int2 {
 		pins = "EXT_INT2";
 		function = "EXT_INT2";
-		bias-disable;
+		//bias-disable; jb.qi changed for pullset fail on 20231107
 	};
 
 	sc_ext_int3: sc_ext_int3 {
 		pins = "EXT_INT3";
 		function = "EXT_INT3";
-		bias-disable;
+		//bias-disable; jb.qi changed for pullset fail on 20231107
 	};
 
 	sc_ext_int4: sc_ext_int4 {
 		pins = "EXT_INT4";
 		function = "EXT_INT4";
-		bias-disable;
+		//bias-disable; jb.qi changed for pullset fail on 20231107
 	};
 
 	sc_ext_int5: sc_ext_int5 {
 		pins = "EXT_INT5";
 		function = "EXT_INT5";
-		bias-disable;
+		//bias-disable; jb.qi changed for pullset fail on 20231107
 	};
 
 	sc_ext_int6: sc_ext_int6 {
 		pins = "EXT_INT6";
 		function = "EXT_INT6";
-		bias-disable;
+		//bias-disable; jb.qi changed for pullset fail on 20231107
 	};
 
 	sc_ext_int7: sc_ext_int7 {
 		pins = "EXT_INT7";
 		function = "EXT_INT7";
-		bias-disable;
+		//bias-disable; jb.qi changed for pullset fail on 20231107
 	};
 
 	sc_ext_int8: sc_ext_int8 {
 		pins = "EXT_INT8";
 		function = "EXT_INT8";
-		bias-disable;
+		//bias-disable; jb.qi changed for pullset fail on 20231107
 	};
 
 	sc_ext_int9: sc_ext_int9 {
 		pins = "EXT_INT9";
 		function = "EXT_INT9";
-		bias-disable;
+		//bias-disable; jb.qi changed for pullset fail on 20231107
 	};
 
 	sc_ext_int10: sc_ext_int10 {
 		pins = "GPIO129";   /*jb.qi add for EXT_INIT10 success*/
 		function = "EXT_INT10";
-		bias-disable;
+		//bias-disable; jb.qi changed for pullset fail on 20231107
 	};
 
 	sc_ext_int11: sc_ext_int11 {
 		pins = "EXT_INT11";
 		function = "EXT_INT11";
-		bias-disable;
+		//bias-disable; jb.qi changed for pullset fail on 20231107
 	};
 
 	sc_ext_int12: sc_ext_int12 {
 		pins = "GPIO131";  //"EXT_INT12";
 		function = "EXT_INT12";
-		bias-disable;
+		//bias-disable; jb.qi changed for pullset fail on 20231107
 	};
 
 	sc_ext_int13: sc_ext_int13 {
 		pins = "EXT_INT13";
 		function = "EXT_INT13";
-		bias-disable;
+		//bias-disable; jb.qi changed for pullset fail on 20231107
 	};
 
 	sc_ext_int14: sc_ext_int14 {
 		pins = "EXT_INT14";
 		function = "EXT_INT14";
-		bias-disable;
+		//bias-disable; jb.qi changed for pullset fail on 20231107
 	};
 
 	sc_ext_int15: sc_ext_int15 {
 		pins = "EXT_INT15";
 		function = "EXT_INT15";
-		bias-disable;
+		//bias-disable; jb.qi changed for pullset fail on 20231107
 	};
 
 };
diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3-vehicle_dc_ref.dts b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3-vehicle_dc_ref.dts
index da48fcc..6f7cf69 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3-vehicle_dc_ref.dts
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/arch/arm/boot/dts/zx297520v3-vehicle_dc_ref.dts
@@ -130,11 +130,11 @@
 //	status = "okay";
 };
 &codec_ti3104 {
-	status = "okay";
+//	status = "okay";
 };	
 &zx29_ti3104 {
 	pinctrl-0 = <&i2s0_pins>;
-	status = "okay";
+//	status = "okay";
 };
 &codec_nau8810 {
 //	status = "okay";
@@ -155,11 +155,11 @@
 //	status = "okay";
 };
 &codec_es8311 {
-//	status = "okay";
+	status = "okay";
 };	
 &zx29_es8311 {
 	pinctrl-0 = <&i2s0_pins>;
-//	status = "okay";
+	status = "okay";
 };
 &gmac {
     port-nums = <1>;
diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/net/ethernet/zte/zx29_gmac.c b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/net/ethernet/zte/zx29_gmac.c
index 05a5b0b..7bc3ed0 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/net/ethernet/zte/zx29_gmac.c
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/drivers/net/ethernet/zte/zx29_gmac.c
@@ -1357,11 +1357,45 @@
     return 0;
 }
 
+/*jb.qi add for gamc power down on 20231116 start*/
+
+extern int gmac_power = 1;
+int gmac_power_flag = 0;
+
+ssize_t gmac_power_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
+{
+    int val = 0;
+    int ret;
+    ret = sscanf(buf, "%d", &val);
+    if(ret < 1)
+    {
+        printk(KERN_INFO "gmac: failed ti read user buf, ret=%d, input %d\n", ret,val);
+        return count;
+    }
+    gmac_power = val;
+    gpio_direction_output(gmac_power_flag, val);
+    return count;
+}
+
+ssize_t gmac_power_show(struct device *dev, struct device_attribute *attr, char *buf)
+{
+    if(gmac_power)
+        memcpy(buf, "on",3);
+    else
+        memcpy(buf, "off", 4);
+
+    printk("gmac_power %s\n", buf);
+    return 0;
+
+}
+/*jb.qi add for gamc power down on 20231116 end */
+
 static DEVICE_ATTR(gmac_test, 0664, show_fun, store_fun);
 static DEVICE_ATTR(mdio_test, 0664, mdio_show, mdio_store);
 static DEVICE_ATTR(free_mdio, 0664, free_mdio_show, free_mdio_store);
 static DEVICE_ATTR(debug_on, 0664, debug_on_show, debug_on_store);
-
+static DEVICE_ATTR(gmac_power, 0664, gmac_power_show, gmac_power_store);//jb.qi add for gamc power down on 20231116
+
 static int zx29_gmac_probe(struct platform_device *pdev)
 {
     struct zx29_gmac_dev *prv = NULL;
@@ -1387,6 +1421,7 @@
 	device_create_file(&pdev->dev, &dev_attr_mdio_test);
 	device_create_file(&pdev->dev, &dev_attr_free_mdio);
 	device_create_file(&pdev->dev, &dev_attr_debug_on);
+    device_create_file(&pdev->dev, &dev_attr_gmac_power);//jb.qi add for gamc power down on 20231116
 
 	prv = netdev_priv(ndev);
 	memset(prv, 0, sizeof(*prv));
@@ -1422,7 +1457,7 @@
 	gpio_direction_output(prv->gpio_power[1], 1);
 	mdelay(15);
 #endif    
-
+    gmac_power_flag = prv->gpio_power[0];
 	SET_NETDEV_DEV(ndev, &pdev->dev); //if not, will panic
 	
 	base = devm_platform_ioremap_resource(pdev, 0);
@@ -1630,7 +1665,8 @@
 		device_remove_file(&pdev->dev, &dev_attr_gmac_test);
 	    device_remove_file(&pdev->dev, &dev_attr_mdio_test);
 	    device_remove_file(&pdev->dev, &dev_attr_free_mdio);
-	    device_remove_file(&pdev->dev, &dev_attr_debug_on);		
+	    device_remove_file(&pdev->dev, &dev_attr_debug_on);
+        device_remove_file(&pdev->dev, &dev_attr_gmac_power);//jb.qi add for gamc power down on 20231116
 	}
 	return 0;
 }
