platform: msm_shared: add support for checking alarmboot mode

When the phone is triggered by alarm, it's required to turn off
the display during booting until the alarm app is invoked. So add
the function to check device if it's alarm boot.

Change-Id: I4eca894753dd47095dca93958a29c19476f42382
diff --git a/include/platform.h b/include/platform.h
index e71c407..2aa4c56 100644
--- a/include/platform.h
+++ b/include/platform.h
@@ -54,6 +54,7 @@
 unsigned board_platform_id(void);
 unsigned check_reboot_mode(void);
 unsigned check_hard_reboot_mode(void);
+uint32_t check_alarm_boot(void);
 void platform_uninit_timer(void);
 void reboot_device(unsigned);
 int set_download_mode(enum dload_mode mode);
diff --git a/platform/init.c b/platform/init.c
index 34c5726..13612b7 100644
--- a/platform/init.c
+++ b/platform/init.c
@@ -145,3 +145,8 @@
 {
 	return 0;
 }
+
+__WEAK uint32_t check_alarm_boot()
+{
+	return 0;
+}
diff --git a/platform/msm_shared/reboot.c b/platform/msm_shared/reboot.c
index 2e49bf7..abe2ce9 100644
--- a/platform/msm_shared/reboot.c
+++ b/platform/msm_shared/reboot.c
@@ -91,6 +91,21 @@
 	return hard_restart_reason;
 }
 
+/* Return true if it is triggered by alarm. */
+uint32_t check_alarm_boot(void)
+{
+	/* Check reboot reason and power on reason */
+	if (pm8x41_get_is_cold_boot()) {
+		if (pm8x41_get_pon_reason() == RTC_TRG)
+			return 1;
+	} else {
+		if (readl(RESTART_REASON_ADDR) == ALARM_BOOT)
+			return 1;
+	}
+
+	return 0;
+}
+
 void reboot_device(unsigned reboot_reason)
 {
 	uint8_t reset_type = 0;
diff --git a/platform/msm_shared/reboot.h b/platform/msm_shared/reboot.h
index 516c829..cf03b27 100644
--- a/platform/msm_shared/reboot.h
+++ b/platform/msm_shared/reboot.h
@@ -27,6 +27,8 @@
  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 #define FASTBOOT_MODE     0x77665500
+#define ALARM_BOOT        0x77665503
+#define RTC_TRG           4
 #define PON_SOFT_RB_SPARE 0x88F
 
 #if USER_FORCE_RESET_SUPPORT
@@ -38,4 +40,6 @@
 
 unsigned check_hard_reboot_mode(void);
 
+uint32_t check_alarm_boot(void);
+
 void reboot_device(unsigned reboot_reason);