高通平台Andorid默认不支持关机闹钟,需要手动修改。Andorid O以前的Andorid版本可通过如下修改达到关机闹钟的功能。
1、修改设备树文件,将qcom,qpnp-rtc-alarm-pwrup值改为1。
qcom,pm8941_rtc {
spmi-dev-container;
compatible = "qcom,qpnp-rtc";
#address-cells = <1>;
#size-cells = <1>;
qcom,qpnp-rtc-write = <0>;
qcom,qpnp-rtc-alarm-pwrup = <1>;
2、经过上诉修改之后设置闹钟,关机,闹钟时间到后,设备会开机,但是开机完成后,闹钟时间也就过了,所以闹钟不会响。这时候我们需要让设备提前开机,在设定闹钟时间到之前开机,我这里是设置提前两分钟开机。设置方法如下:
修改alarmtimer.c文件
Index: alarmtimer.c
===================================================================
--- alarmtimer.c (revision 2721)
+++ alarmtimer.c (revision 2722)
@@ -26,6 +26,10 @@
#include <linux/workqueue.h>
#include <linux/freezer.h>
+#define ALARM_DELTA 120
+
#ifdef CONFIG_MSM_PM
#include "lpm-levels.h"
#endif
@@ -147,6 +151,19 @@
alarm_delta = wall_time.tv_sec - rtc_secs;
alarm_time = alarm_secs - alarm_delta;
+ /*
+ * Substract ALARM_DELTA from actual alarm time
+ * to powerup the device before actual alarm
+ * expiration.
+ */
+ if ((alarm_time - ALARM_DELTA) > rtc_secs)
+ alarm_time -= ALARM_DELTA;
+
+ if (alarm_time <= rtc_secs)
+ goto disable_alarm;
+
rtc_time_to_tm(alarm_time, &alarm.time);
alarm.enabled = 1;
rc = rtc_set_alarm(rtcdev, &alarm);