[Bugfix][API-730][GNSS]Merge MTK TCXO Patch,Fixed bug where TCXO affects GNSS cannot power on immediately
Change-Id: Id73a30cb8f5d333ee1966866a8e5390d1e2799a8
diff --git a/src/kernel/linux/v4.19/drivers/soc/mediatek/mtk-scpsys.c b/src/kernel/linux/v4.19/drivers/soc/mediatek/mtk-scpsys.c
index d9736f0..6540816 100755
--- a/src/kernel/linux/v4.19/drivers/soc/mediatek/mtk-scpsys.c
+++ b/src/kernel/linux/v4.19/drivers/soc/mediatek/mtk-scpsys.c
@@ -62,10 +62,15 @@
#define SPM_WB_PWR_CON 0x02ec /* MT7622 */
/* NETSYS_S_SRAM_CON (0x10006000+0x378)*/
#define NETSYS_S_SRAM_CON 0x0378
-
+/* CONN_STATUS (0x10006000+0x62C)*/
+/*Typethree add for tcxo power problem 2023/01/12 start*/
+#define CONN_STATUS 0x062C
+/*Typethree add for tcxo power problem 2023/01/12 end*/
#define SPM_PWR_STATUS 0x060c
#define SPM_PWR_STATUS_2ND 0x0610
-
+/*Typethree add for tcxo power problem 2023/01/12 start*/
+#define CONN_STATUS_BIT BIT(0)
+/*Typethree add for tcxo power problem 2023/01/12 end*/
#define PWR_RST_B_BIT BIT(0)
#define PWR_ISO_BIT BIT(1)
#define PWR_ON_BIT BIT(2)
@@ -647,8 +652,26 @@
struct scp_domain *scpd = container_of(genpd, struct scp_domain, genpd);
struct scp *scp = scpd->scp;
void __iomem *ctl_addr = scp->base + scpd->data->ctl_offs;
+/*Typethree add for tcxo power problem 2023/01/12 start*/
+#ifdef CONFIG_MTK_TCXO_SUPPORT
+ void __iomem *conn_status_addr = scp->base + CONN_STATUS;
+#endif
+/*Typethree add for tcxo power problem 2023/01/12 end*/
u32 val;
int ret, tmp;
+/*Typethree add for tcxo power problem 2023/01/12 start*/
+#ifdef CONFIG_MTK_TCXO_SUPPORT
+ val = readl(conn_status_addr);
+ if (strcmp(genpd->name, "conn") == 0) {
+ if ((val & CONN_STATUS_BIT) == CONN_STATUS_BIT)
+ dev_err(scp->dev, "gps try to power on\n");
+ else {
+ dev_err(scp->dev, "Skip conn power on\n");
+ return 0;
+ }
+ }
+#endif
+/*Typethree add for tcxo power problem 2023/01/12 end*/
ret = scpsys_regulator_enable(scpd);
if (ret < 0)
@@ -755,9 +778,24 @@
struct scp_domain *scpd = container_of(genpd, struct scp_domain, genpd);
struct scp *scp = scpd->scp;
void __iomem *ctl_addr = scp->base + scpd->data->ctl_offs;
+#ifdef CONFIG_MTK_TCXO_SUPPORT
+ void __iomem *conn_status_addr = scp->base + CONN_STATUS;
+#endif
u32 val;
int ret, tmp;
+#ifdef CONFIG_MTK_TCXO_SUPPORT
+ val = readl(conn_status_addr);
+ if (strcmp(genpd->name, "conn") == 0) {
+ if ((val & CONN_STATUS_BIT) == CONN_STATUS_BIT)
+ dev_err(scp->dev, "gps try to power off\n");
+ else {
+ dev_err(scp->dev, "Skip conn power off\n");
+ return 0;
+ }
+ }
+#endif
+
ret = scpsys_bus_protect_enable(scpd);
if (ret < 0)
goto out;