[Feature] merge MR3.0 because some files are missed

Change-Id: If3617f3442c7d439fde33aa66a4f769c39788b9b
diff --git a/src/bsp/lk/platform/mt2735/drivers/auxadc/plat_auxadc.c b/src/bsp/lk/platform/mt2735/drivers/auxadc/plat_auxadc.c
new file mode 100644
index 0000000..3df3084
--- /dev/null
+++ b/src/bsp/lk/platform/mt2735/drivers/auxadc/plat_auxadc.c
@@ -0,0 +1,84 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright (c) 2021 MediaTek Inc.
+ *
+ * Use of this source code is governed by a MIT-style
+ * license that can be found in the LICENSE file or at
+ * https://opensource.org/licenses/MIT
+ */
+#include <auxadc.h>
+#include <debug.h>
+#include <platform/sec_devinfo.h>
+#include <stdlib.h>
+
+#define ADC_OE_A_SHIFT      0
+#define ADC_OE_A_MASK       (0x3ff << ADC_OE_A_SHIFT)
+#define ADC_GE_A_SHIFT      10
+#define ADC_GE_A_MASK       (0x3ff << ADC_GE_A_SHIFT)
+#define ADC_CALI_EN_A_SHIFT 20
+#define ADC_CALI_EN_A_MASK  (0x1 << ADC_CALI_EN_A_SHIFT)
+
+struct auxadc_platform_info_t {
+    uint32_t                            is_init;
+    enum auxadc_platform_info_flag_t    flags;
+    uint32_t                            cali_data;
+    uint32_t                            cali_ge_a;
+    uint32_t                            cali_oe_a;
+    int32_t                             cali_ge;
+    int32_t                             cali_oe;
+};
+
+struct auxadc_platform_info_t auxadc_platform_info = {0};
+
+void auxadc_get_platform_data(void)
+{
+    uint32_t cali_data;
+    uint32_t cali_ge_a = 0, cali_oe_a = 0;
+    int32_t cali_ge, cali_oe;
+
+    if (auxadc_platform_info.is_init)
+        return;
+
+    cali_data = get_devinfo_with_index(62);
+
+    if (((cali_data & ADC_CALI_EN_A_MASK) >> ADC_CALI_EN_A_SHIFT) != 0) {
+        cali_oe_a = (cali_data & ADC_OE_A_MASK) >> ADC_OE_A_SHIFT;
+        cali_ge_a = ((cali_data & ADC_GE_A_MASK) >> ADC_GE_A_SHIFT);
+        cali_ge = cali_ge_a - 512;
+        cali_oe = cali_oe_a - 512;
+        dprintf(INFO, "[AUXADC]: cali_ge = 0x%x, cali_oe = 0x%x\n",
+            cali_ge, cali_oe);
+    } else {
+        cali_oe = 0;
+        cali_ge = 0;
+        dprintf(INFO, "[AUXADC]: No efuse data\n");
+    }
+
+    auxadc_platform_info.is_init = 1;
+    auxadc_platform_info.flags |= AUXADC_CALI_EN;
+
+    auxadc_platform_info.cali_data = cali_data;
+    auxadc_platform_info.cali_ge_a = cali_ge_a;
+    auxadc_platform_info.cali_oe_a = cali_oe_a;
+    auxadc_platform_info.cali_ge = cali_ge;
+    auxadc_platform_info.cali_oe = cali_oe;
+}
+
+enum auxadc_platform_info_flag_t auxadc_get_platform_flag(void)
+{
+    auxadc_get_platform_data();
+    return auxadc_platform_info.flags;
+}
+
+int32_t auxadc_get_platform_cali(int32_t *cali_ge, int32_t *cali_oe)
+{
+    if ((!cali_ge) || (!cali_ge))
+        return -1;
+
+    auxadc_get_platform_data();
+    *cali_ge = auxadc_platform_info.cali_ge;
+    *cali_oe = auxadc_platform_info.cali_oe;
+
+    return 0;
+
+}
diff --git a/src/bsp/lk/platform/mt2735/drivers/auxadc/rules.mk b/src/bsp/lk/platform/mt2735/drivers/auxadc/rules.mk
new file mode 100644
index 0000000..e9511a6
--- /dev/null
+++ b/src/bsp/lk/platform/mt2735/drivers/auxadc/rules.mk
@@ -0,0 +1,14 @@
+# SPDX-License-Identifier: MIT
+LOCAL_DIR := $(GET_LOCAL_DIR)
+
+MODULE := $(LOCAL_DIR)
+
+MODULE_SRCS += $(LOCAL_DIR)/plat_auxadc.c
+
+$(info [PH] log on platform mk)
+
+MODULE_DEPS += \
+	platform/mediatek/common/drivers/auxadc
+
+include make/module.mk
+
diff --git a/src/bsp/lk/platform/mt2735/drivers/clkbuf/clkbuf_ctl.c b/src/bsp/lk/platform/mt2735/drivers/clkbuf/clkbuf_ctl.c
index df3cd89..7058a94 100644
--- a/src/bsp/lk/platform/mt2735/drivers/clkbuf/clkbuf_ctl.c
+++ b/src/bsp/lk/platform/mt2735/drivers/clkbuf/clkbuf_ctl.c
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: MIT
 /*
  * Copyright (c) 2019 MediaTek Inc.
  *
@@ -80,6 +81,7 @@
 #else
 #define PMIC_CW00_INIT_VAL			0x1D /* 0001 1101 */
 #define PMIC_CW00_H_INIT_VAL			0x4E /* 0100 1110 */
+#define PMIC_CW00_H_INIT_VAL_TCXO		0x4C /* 0100 1100 */
 #define PMIC_CW09_INIT_VAL			0xF0 /* 1111 0000 */
 #define PMIC_CW09_H_INIT_VAL			0x51 /* 0101 0001 */
 #endif
@@ -309,8 +311,13 @@
 
 	pmic_config_interface(PMIC_XO_EXTBUF1_MODE_ADDR, PMIC_CW00_INIT_VAL,
 				PMIC_REG_MASK, PMIC_REG_SHIFT);
+#ifdef ENABLE_TCXO //tcxo
+	pmic_config_interface(PMIC_XO_EXTBUF3_EN_M_ADDR, PMIC_CW00_H_INIT_VAL_TCXO,
+				PMIC_REG_MASK, PMIC_REG_SHIFT);
+#else //normal case
 	pmic_config_interface(PMIC_XO_EXTBUF3_EN_M_ADDR, PMIC_CW00_H_INIT_VAL,
 				PMIC_REG_MASK, PMIC_REG_SHIFT);
+#endif
 	pmic_config_interface(PMIC_XO_EXTBUF7_MODE_ADDR, PMIC_CW09_H_INIT_VAL,
 				PMIC_REG_MASK, PMIC_REG_SHIFT);
 
@@ -404,6 +411,17 @@
 				PMIC_TMA_KEY_H_MASK, PMIC_TMA_KEY_H_SHIFT);
 
 	/* disable clock buffer by DCT setting */
+
+#ifdef ENABLE_TCXO  //tcxo
+	pmic_config_interface(PMIC_DCXO_CW00_CLR_ADDR,
+				      PMIC_XO_EXTBUF2_MODE_MASK,
+				      PMIC_XO_EXTBUF2_MODE_MASK,
+				      PMIC_XO_EXTBUF2_MODE_SHIFT);
+	pmic_config_interface(PMIC_DCXO_CW00_CLR_ADDR,
+				      PMIC_XO_EXTBUF2_EN_M_MASK,
+				      PMIC_XO_EXTBUF2_EN_M_MASK,
+				      PMIC_XO_EXTBUF2_EN_M_SHIFT);
+#else //normal case
 	if (CLK_BUF2_STATUS_PMIC == CLOCK_BUFFER_DISABLE) {
 		pmic_config_interface(PMIC_DCXO_CW00_CLR_ADDR,
 				      PMIC_XO_EXTBUF2_MODE_MASK,
@@ -414,6 +432,7 @@
 				      PMIC_XO_EXTBUF2_EN_M_MASK,
 				      PMIC_XO_EXTBUF2_EN_M_SHIFT);
 	}
+#endif
 
 	if (CLK_BUF3_STATUS_PMIC == CLOCK_BUFFER_DISABLE) {
 		pmic_config_interface(PMIC_DCXO_CW00_CLR_ADDR,
diff --git a/src/bsp/lk/platform/mt2735/drivers/rules.mk b/src/bsp/lk/platform/mt2735/drivers/rules.mk
index adbdbb7..b1bf5cb 100644
--- a/src/bsp/lk/platform/mt2735/drivers/rules.mk
+++ b/src/bsp/lk/platform/mt2735/drivers/rules.mk
@@ -120,5 +120,7 @@
 	$(LOCAL_DIR)/sspm/sspm_expdb.c
 endif
 
+MODULE_DEPS += $(LOCAL_DIR)/auxadc
+
 include make/module.mk
 include $(LOCAL_DIR)/audio/rules.mk
diff --git a/src/kernel/linux/v4.19/drivers/rtc/rtc-mt6330.c b/src/kernel/linux/v4.19/drivers/rtc/rtc-mt6330.c
index d5286da..8190779 100644
--- a/src/kernel/linux/v4.19/drivers/rtc/rtc-mt6330.c
+++ b/src/kernel/linux/v4.19/drivers/rtc/rtc-mt6330.c
@@ -828,7 +828,8 @@
 	return err;
 }
 
-static int mtk_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)
+static int mtk_rtc_ioctl(struct device *dev,
+	unsigned int cmd, unsigned long arg)
 {
 	void __user *uarg = (void __user *) arg;
 	int err = 0;
diff --git a/src/kernel/linux/v4.19/drivers/rtc/rtc-sysfs.c b/src/kernel/linux/v4.19/drivers/rtc/rtc-sysfs.c
index a1dc393..fa36f45 100644
--- a/src/kernel/linux/v4.19/drivers/rtc/rtc-sysfs.c
+++ b/src/kernel/linux/v4.19/drivers/rtc/rtc-sysfs.c
@@ -280,9 +280,9 @@
 	retval = kstrtos64(buf_ptr, 0, &alarm);
 	if (retval)
 		return retval;
-	if (adjust) {
+	if (adjust)
 		alarm += now;
-	}
+
 	if (alarm > now || push) {
 		/* Avoid accidentally clobbering active alarms; we can't
 		 * entirely prevent that here, without even the minimal