Merge "[Feature][T106]version update to T106CN-ZS03.V2.01.01.02P52U02.AP.09.01_CAP.09.01"
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;

 }