[Feature][T8TSK-116]check whether or not wakeup by RTC

Change-Id: I099122d8fc23228b8cb769138f36dcc46b708da6
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 8190779..9ae0db2 100644
--- a/src/kernel/linux/v4.19/drivers/rtc/rtc-mt6330.c
+++ b/src/kernel/linux/v4.19/drivers/rtc/rtc-mt6330.c
@@ -177,8 +177,12 @@
 	struct regmap_field	*spare[SPARE_RG_MAX];
 	struct regmap_field	*cali[CALI_FILED_MAX];
 	bool			cali_is_supported;
+	ktime_t		wakeup_time; //jb.qi change for rtc resume API on 2022.11.18 start
 };
 
+bool wakeup_by_rtc; //jb.qi change for rtc resume API on 2022.11.18 start
+#define RTC_WAKEUP_THRESHOLD	500000000 // 500ms jb.qi change for rtc resume API on 2022.11.18 start
+
 static int mtk_rtc_write_trigger(struct mt6330_rtc *rtc);
 
 static u16 rtc_pwron_reg[RTC_OFFSET_COUNT][3] = {
@@ -459,7 +463,11 @@
 				 irqen) == 0)
 			mtk_rtc_write_trigger(rtc);
 		mutex_unlock(&rtc->lock);
-
+		/*jb.qi change for rtc resume API on 2022.11.18 start*/
+		dev_err(rtc->dev, "%s\n", __func__);
+		wakeup_by_rtc = false;
+		rtc->wakeup_time = ktime_get();
+		/*jb.qi change for rtc resume API on 2022.11.18 end*/
 		return IRQ_HANDLED;
 	}
 
@@ -1015,6 +1023,10 @@
 	if (rtc->dev_comp->cali_reg_fields)
 		if (mtk_rtc_config_eosc_cali(&pdev->dev))
 			dev_err(&pdev->dev, "config eosc cali failed\n");
+	/*jb.qi change for rtc resume API on 2022.11.18 start*/
+	rtc->wakeup_time = ktime_get();
+	wakeup_by_rtc = false;
+	/*jb.qi change for rtc resume API on 2022.11.18 end*/
 
 	return 0;
 
@@ -1036,6 +1048,12 @@
 }
 
 #ifdef CONFIG_PM_SLEEP
+/*jb.qi change for rtc resume API on 2022.11.18 start*/
+bool isWakeupByRTC(void)
+{
+	return wakeup_by_rtc;
+}
+/*jb.qi change for rtc resume API on 2022.11.18 start*/
 static int mt6330_rtc_suspend(struct device *dev)
 {
 	struct mt6330_rtc *rtc = dev_get_drvdata(dev);
@@ -1043,16 +1061,27 @@
 	if (device_may_wakeup(dev))
 		enable_irq_wake(rtc->irq);
 
+	wakeup_by_rtc = false; //jb.qi change for rtc resume API on 2022.11.18 
+
 	return 0;
 }
 
 static int mt6330_rtc_resume(struct device *dev)
 {
 	struct mt6330_rtc *rtc = dev_get_drvdata(dev);
-
+	ktime_t temp; //jb.qi change for rtc resume API on 2022.11.18 
+ 
 	if (device_may_wakeup(dev))
 		disable_irq_wake(rtc->irq);
+	/*jb.qi change for rtc resume API on 2022.11.18 start*/
+	temp = ktime_get();
 
+	wakeup_by_rtc = false;
+	if((temp - rtc->wakeup_time) < RTC_WAKEUP_THRESHOLD)
+		wakeup_by_rtc = true;
+
+	dev_info(dev, "%s: wakeup time:%lld, resume_time %lld wakeup_by_rtc %d\n", __func__, rtc->wakeup_time, temp, wakeup_by_rtc);
+	/*jb.qi change for rtc resume API on 2022.11.18 end*/
 	return 0;
 }
 #endif
diff --git a/src/kernel/linux/v4.19/drivers/rtc/rtc-proc.c b/src/kernel/linux/v4.19/drivers/rtc/rtc-proc.c
index a9dd921..9256596 100644
--- a/src/kernel/linux/v4.19/drivers/rtc/rtc-proc.c
+++ b/src/kernel/linux/v4.19/drivers/rtc/rtc-proc.c
@@ -106,12 +106,27 @@
 
 	return 0;
 }
+/*jb.qi change for rtc resume API on 2022.11.18 start*/
+#ifdef CONFIG_PM_SLEEP
+extern bool isWakeupByRTC(void);
+#endif
 
+static int rtc_wakeup_proc_show(struct seq_file *seq, void *offset)
+{
+#ifdef CONFIG_PM_SLEEP
+	seq_printf(seq, "%d\n", isWakeupByRTC());
+#endif
+	return 0;
+}
+/*jb.qi change for rtc resume API on 2022.11.18 end*/
 void rtc_proc_add_device(struct rtc_device *rtc)
 {
-	if (is_rtc_hctosys(rtc))
-		proc_create_single_data("driver/rtc", 0, NULL, rtc_proc_show,
-				rtc);
+	if (is_rtc_hctosys(rtc)) {
+ 		proc_create_single_data("driver/rtc", 0, NULL, rtc_proc_show,
+ 				rtc);
+		proc_create_single_data("driver/rtc_wakeup", 0, NULL, rtc_wakeup_proc_show,
+				rtc); //jb.qi change for rtc resume API on 2022.11.18
+	}
 }
 
 void rtc_proc_del_device(struct rtc_device *rtc)