[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)