Merge "[Feature][T8TSK-286]add sms parameters"
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/liblynq-qser-autosuspend/liblynq-qser-autosuspend.bb b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/liblynq-qser-autosuspend/liblynq-qser-autosuspend.bb
old mode 100644
new mode 100755
index 375742d..2f48049
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/liblynq-qser-autosuspend/liblynq-qser-autosuspend.bb
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/liblynq-qser-autosuspend/liblynq-qser-autosuspend.bb
@@ -4,7 +4,7 @@
 LICENSE = "CLOSED"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=e1696b147d49d491bcb4da1a57173fff"
 
-DEPENDS += "${@bb.utils.contains('TARGET_PLATFORM', 'mt2735', 'audio-mixer-ctrl streamer1.0', '', d)}  liblynq-autosuspend liblynq-log"
+DEPENDS += "${@bb.utils.contains('TARGET_PLATFORM', 'mt2735', 'audio-mixer-ctrl streamer1.0', '', d)}  liblynq-autosuspend liblynq-log at-ctl libsctel"
 #inherit workonsrc
 WORKONSRC = "${TOPDIR}/../src/lynq/lib/liblynq-qser-autosuspend/"
 FILESEXTRAPATHS_prepend :="${TOPDIR}/../src/lynq/lib/:"
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-autosuspend-demo/files/lynq-qser-autosuspend-demo.cpp b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-autosuspend-demo/files/lynq-qser-autosuspend-demo.cpp
index 4c661e0..fdeb548 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-autosuspend-demo/files/lynq-qser-autosuspend-demo.cpp
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-qser-autosuspend-demo/files/lynq-qser-autosuspend-demo.cpp
@@ -74,6 +74,10 @@
         printf("        -dl [wakelock num]  --qser_wakelock_destroy\n");
         printf("        -ccl                --check created locks\n");
         printf("        -cll                --check lockup locks\n");
+        printf("        -wla [id]           --qser_whitelist_add\n");
+        printf("        -wld [id]           --qser_whitelist_del\n");
+        printf("        -wlg                --qser_whitelist_get\n");
+        printf("        -wlc                --qser_whitelist_clear\n");
     }
     else if(strcmp(argv[1],"-d") == 0)
     {
@@ -202,6 +206,39 @@
             printf("check created lock fail\n");
         }
     }
+    else if(strcmp(argv[1],"-wla") == 0)
+    {
+        num = atoi(argv[2]);
+        ret = qser_whitelist_add(num);
+        if(ret != 0)
+        {
+            printf("mnet_whitelist_add ret %d.\n", ret);
+        }
+
+    }
+    else if(strcmp(argv[1],"-wld") == 0)
+    {
+        num = atoi(argv[2]);
+        ret = qser_whitelist_del(num);
+        if(ret != 0)
+        {
+            printf("mnet_whitelist_del ret %d.\n", ret);
+        }
+    }
+    else if(strcmp(argv[1],"-wlg") == 0)
+    {
+        char* whitelist;
+        qser_whitelist_get(whitelist);
+        printf("mnet_whitelist_get :%s\n",whitelist);
+    }
+    else if(strcmp(argv[1],"-wlc") == 0)
+    {
+        ret = qser_whitelist_clear();
+        if(ret != 0)
+        {
+            printf("mnet_whitelist_clear ret %d.\n", ret);
+        }
+    }
     else
     {
         printf("wrong input format, please -h \n");
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 a48090e..c77fb2c 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-irq/lynq-irq.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-irq/lynq-irq.cpp
@@ -81,7 +81,7 @@
         return -1;
     }
     ret = sc_irq_set_type(line, trig_type);
-    if (ret < 0)
+    if (ret != 0)
     {
         LYINFLOG("set_type failed, ret:%d\n", ret);
         return ret;
@@ -118,7 +118,7 @@
 * @brief:lynq_irq_set_wake
 * @param count [IN]:2
 * @param sum [OUT]:NA
-* @return :success >0, failed <0
+* @return :success 0, failed other
 * @todo:NA
 * @see:NA
 * @warning:NA
@@ -126,8 +126,13 @@
 int lynq_irq_set_wake(int line, int en)
 {
     int ret;
+    if((en != 0) && (en != 1))
+    {
+        LYINFLOG("wake_state is not 0 or 1\n");
+        return -1;
+    }
     ret = sc_irq_set_wake(line, en);
-    if (ret < 0)
+    if (ret != 0)
     {
         LYINFLOG("set_wake failed, ret:%d\n", ret);
         return ret;
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-autosuspend/include/lynq-qser-autosuspend.h b/cap/zx297520v3/src/lynq/lib/liblynq-qser-autosuspend/include/lynq-qser-autosuspend.h
old mode 100644
new mode 100755
index 8ea9c01..dc769e1
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-autosuspend/include/lynq-qser-autosuspend.h
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-autosuspend/include/lynq-qser-autosuspend.h
@@ -64,6 +64,10 @@
 int qser_wakelock_unlock(int fd);
 int qser_wakelock_destroy(int fd);
 
+int qser_whitelist_add(int id);
+int qser_whitelist_del(int id);
+int qser_whitelist_get(char* whitelist);
+int qser_whitelist_clear(void);
 
 #ifdef __cplusplus
 }
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-autosuspend/lynq-qser-autosuspend.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-autosuspend/lynq-qser-autosuspend.cpp
index 04b2ad0..e82e2c0 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-autosuspend/lynq-qser-autosuspend.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-autosuspend/lynq-qser-autosuspend.cpp
@@ -11,6 +11,7 @@
 #include <lynq_autosuspend.h>
 #include "lynq-qser-autosuspend.h"
 #include "liblog/lynq_deflog.h"
+#include "sc_mnet_whitelist.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -351,10 +352,84 @@
         return ret;
     }
 
-    ret = delete_lock(fd);    
+    ret = delete_lock(fd);
     return ret;
 }
 
+int qser_whitelist_add(int id)
+{
+    int ret;
+    if(sc_mnet_whitelist_init() != 0)
+    {
+        LYINFLOG("sc_mnet_whitelist_init failed.\n");
+        return -1;
+    }
+
+    ret =  sc_mnet_whitelist_add(id);
+    LYINFLOG("sc_mnet_whitelist_add ret %d.\n", ret);
+
+    sc_mnet_whitelist_deinit();
+    return ret;
+
+}
+
+int qser_whitelist_del(int id)
+{
+    int ret;
+    if(sc_mnet_whitelist_init() != 0)
+    {
+        LYINFLOG("sc_mnet_whitelist_init failed.\n");
+        return -1;
+    }
+
+    ret =  sc_mnet_whitelist_del(id);
+    LYINFLOG("qser_whitelist_del ret %d.\n", ret);
+
+    sc_mnet_whitelist_deinit();
+    return ret;
+
+}
+
+int qser_whitelist_get(char* whitelist)
+{
+    int ret;
+    if(sc_mnet_whitelist_init() != 0)
+    {
+        LYINFLOG("sc_mnet_whitelist_init failed.\n");
+        return -1;
+    }
+
+    whitelist = sc_mnet_whitelist_get();
+    if(NULL != whitelist)
+    {
+        LYINFLOG("sc_mnet_whitelist_get :%s\n",whitelist);
+        ret = 0;
+    }
+    else
+    {
+        LYINFLOG("sc_mnet_whitelist_get empty\n");
+        ret = -1;
+    }
+    sc_mnet_whitelist_deinit();
+    return ret;
+}
+
+int qser_whitelist_clear(void)
+{
+    int ret;
+    if(sc_mnet_whitelist_init() != 0)
+    {
+        LYINFLOG("sc_mnet_whitelist_init failed.\n");
+        return -1;
+    }
+    ret = sc_mnet_whitelist_clear();
+    LYINFLOG("sc_mnet_whitelist_clear ret %d\n", ret);
+    sc_mnet_whitelist_deinit();
+    return ret;
+
+}
+
+
 DEFINE_LYNQ_LIB_LOG(LYNQ_QSER_AUTOSUSPEND)
 
 #ifdef __cplusplus
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-autosuspend/makefile b/cap/zx297520v3/src/lynq/lib/liblynq-qser-autosuspend/makefile
old mode 100644
new mode 100755
index 510b40e..4027a6d
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-autosuspend/makefile
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-autosuspend/makefile
@@ -31,6 +31,7 @@
     -lpthread \
     -llynq-autosuspend \
     -llynq-log \
+    -lsctel \
 
 
 SOURCES = $(wildcard *.cpp)
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 47b5562..2928d8d 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
@@ -990,6 +990,10 @@
     if (NULL == data_call || NULL == err)
     {
         LYERRLOG("call start incoming paramters error");
+        if(err != NULL)
+        {
+            *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
+        }
         return ret;
     }
     if (data_call->profile_idx == 0)
@@ -1004,12 +1008,13 @@
         if (ret != 0)
         {
             LYERRLOG("qser_apn_get error");
+            *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
             return ret;
         }
         judge_pdp_type(apn_info.pdp_type,pdptype);
         ret = lynq_setup_data_call_sp(&handle,apn_info.apn_name,apn_info.apn_type,apn_info.username,apn_info.password,NULL,pdptype,pdptype);
     }
-    if (ret < 0)
+    if (ret != 0)
     {
         *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
     }
@@ -1026,12 +1031,18 @@
         LYERRLOG("call stop incoming paramters error");
         return ret;
     }
-    data_call_handle_get(profile_idx,&handle);
+    ret = data_call_handle_get(profile_idx,&handle);
+    if(ret != 0)
+    {
+        LYERRLOG("datacall handle get error");
+        *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
+        return ret;
+    }
     ret = lynq_deactive_data_call(&handle);
-    if (ret < 0)
+    if (ret != 0)
     {
         *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
-        return *err;
+        return ret;
     }
     return ret;
 }
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/include/lynq_qser_gnss.h b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/include/lynq_qser_gnss.h
index e02832b..b98377e 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/include/lynq_qser_gnss.h
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-gnss/include/lynq_qser_gnss.h
@@ -112,6 +112,7 @@
 int qser_Set_Indications(uint32_t h_gnss,e_msg_id_t type);
 int qser_Gnss_Start(uint32_t h_gnss);
 int qser_Gnss_Stop(uint32_t h_gnss);
+int qser_Gnss_Set_Frequency(uint32_t h_gnss, int frequency);
 int qser_Gnss_Delete_Aiding_Data(uint32_t h_gnss,DELETE_AIDING_DATA_TYPE_T flags);
 int qser_Gnss_InjectTime(uint32_t h_gnss,LYNQ_INJECT_TIME_INTO_T *time_info);
 int qser_firmware_update(uint32_t h_gnss);
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 c66aafd..52241a9 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
@@ -168,7 +168,53 @@
     return 0;
 }
 
-
+static unsigned char save_configuration[] = {0xF1,0xD9,0x06,0x09,0x08,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x26,0x37};
+static unsigned char one_frequency[] = {0xF1,0xD9,0x06,0x42,0x14,0x00,0x00,0x01,0x00,0x00,0xE8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x48,0xF6};
+static unsigned char two_frequency[] = {0xF1,0xD9,0x06,0x42,0x14,0x00,0x00,0x02,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC4,0x88};
+static unsigned char three_frequency[] = {0xF1,0xD9,0x06,0x42,0x14,0x00,0x00,0x05,0x66,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC7,0xC1};
+int qser_Gnss_Set_Frequency(uint32_t h_gnss, int frequency)
+{
+    int ret;
+    int buf_lenth;
+    unsigned char *send_buf;
+    struct mbtk_gnss_handle_t *gnss_handle = (struct mbtk_gnss_handle_t *)h_gnss;
+    switch(frequency)
+    {
+        case 1:
+        {
+            send_buf = one_frequency;
+            buf_lenth = sizeof(one_frequency);
+            break;
+        }
+        case 2:
+        {
+            send_buf = two_frequency;
+            buf_lenth = sizeof(two_frequency);
+            break;
+        }
+        case 5:
+        {
+            send_buf = three_frequency;
+            buf_lenth = sizeof(three_frequency);
+            break;
+        }
+        default:
+            return 0;
+    }
+    ret = write(gnss_handle->dev_fd, send_buf, buf_lenth);
+    if(ret < 0)
+    {
+        printf("send faild");
+        return -1;
+    }
+    ret = write(gnss_handle->dev_fd, save_configuration, sizeof(save_configuration));
+    if(ret < 0)
+    {
+        printf("send faild");
+        return -1;
+    }
+    return 0;
+}
 
 /*清除辅助数据
 bit0 - 清除星历
diff --git a/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/data.cpp b/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/data.cpp
index b3d1971..01ba78e 100755
--- a/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/data.cpp
+++ b/cap/zx297520v3/src/lynq/packages/apps/Mobiletek_Tester_RDIT/data.cpp
@@ -167,6 +167,7 @@
     memcpy(datacall.cdma_password, argv[5], QSER_APN_PASSWORD_SIZE);    

     

     ret = qser_data_call_start(&datacall, &err);

+    printf("LYNQ_QSER_SETUP_DATA_CALL err = %d\n", err);

     printf("%s%d\n",TEST_RESULT,ret);

     return ret;

 }

@@ -197,6 +198,7 @@
     }

 

     ret = qser_data_call_stop(profile_idx_int, ip_family, &err);

+    printf("LYNQ_QSER_DEACTIVATE_DATA_CALL err = %d\n", err);

     printf("%s%d\n",TEST_RESULT,ret);

     return ret;

 }

diff --git a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/tlv320aic3x.c b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/tlv320aic3x.c
index 09ef085..c1fd5d4 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/tlv320aic3x.c
+++ b/cap/zx297520v3/zxic_code/zxic_source/linux-5.10/sound/soc/codecs/tlv320aic3x.c
@@ -1018,15 +1018,6 @@
 	struct aic3x_priv *info = dev_get_drvdata(dev);
 	struct device_node *np = dev->of_node;
 
-        #if 1
-        unsigned tmp;
-        void __iomem 	*reg_base;
-        reg_base = ioremap(0x13B000+0x94 ,4);
-        tmp  = ioread32(reg_base);
-        tmp |= (1<<0)|(1<<2);
-        iowrite32(tmp,reg_base);
-        #endif
-
 	dev_info(dev, "%s:start!\n", __func__);
 
 	if(dev == NULL){
@@ -2068,6 +2059,39 @@
 	return 0;
 }
 
+static int component_open(struct snd_soc_component *component,
+                struct snd_pcm_substream *substream)
+{
+        int ret = 0;
+        struct aic3x_priv *info = snd_soc_component_get_drvdata(component);
+        printk("Enter into %s()\n", __func__);
+
+        if(info->clk != NULL) {
+                ret = clk_enable(info->clk);
+                if(ret) {
+                        pr_err("failed to enable clkout");
+                }
+        }
+        pr_info("%s:clk en end!\n", __func__);
+
+        return ret;
+}
+
+static int component_close(struct snd_soc_component *component,
+                struct snd_pcm_substream *substream)
+{
+        int ret = 0;
+        struct aic3x_priv *info = snd_soc_component_get_drvdata(component);
+        printk("Enter into %s()\n", __func__);
+
+        if(info->clk != NULL) {
+                clk_disable(info->clk);
+        }
+        pr_info("%s:clk dis end!\n", __func__);
+
+        return ret;
+}
+
 static const struct snd_soc_component_driver soc_component_dev_aic3x = {
 	.set_bias_level		= aic3x_set_bias_level,
 	.probe			= aic3x_probe,
@@ -2080,6 +2104,8 @@
 	.use_pmdown_time	= 1,
 	.endianness		= 1,
 	.non_legacy_dai_naming	= 1,
+        .open = component_open,
+        .close = component_close,
 };
 
 static void aic3x_configure_ocmv(struct i2c_client *client)