alarm: init power_on_alarm in alarm_dev_init
The power_on alarm might be missed during suspend/resume if power_on_alarm was not set in some cases like power-off charging using wall charger. So init power_on_alarm according to RTC alarm reg during booting to guarantee power_on alarm will not be missed by accident. Change-Id: If4e84b5d34fd199897b178081e764f96d2b64194 Signed-off-by: Mao Jinlong <c_jmao@codeaurora.org>
This commit is contained in:
parent
d67480719d
commit
b93528d4d4
|
@ -445,6 +445,8 @@ static int __init alarm_dev_init(void)
|
|||
}
|
||||
|
||||
wakeup_source_init(&alarm_wake_lock, "alarm");
|
||||
|
||||
power_on_alarm_init();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -49,6 +49,7 @@ void alarm_restart(struct alarm *alarm);
|
|||
int alarm_try_to_cancel(struct alarm *alarm);
|
||||
int alarm_cancel(struct alarm *alarm);
|
||||
void set_power_on_alarm(long secs, bool enable);
|
||||
void power_on_alarm_init(void);
|
||||
|
||||
u64 alarm_forward(struct alarm *alarm, ktime_t now, ktime_t interval);
|
||||
u64 alarm_forward_now(struct alarm *alarm, ktime_t interval);
|
||||
|
|
|
@ -57,6 +57,24 @@ static DEFINE_SPINLOCK(rtcdev_lock);
|
|||
static unsigned long power_on_alarm;
|
||||
static struct mutex power_on_alarm_lock;
|
||||
|
||||
|
||||
void power_on_alarm_init(void)
|
||||
{
|
||||
struct rtc_wkalrm rtc_alarm;
|
||||
struct rtc_time rt;
|
||||
unsigned long alarm_time;
|
||||
|
||||
rtc_read_alarm(rtcdev, &rtc_alarm);
|
||||
rt = rtc_alarm.time;
|
||||
|
||||
rtc_tm_to_time(&rt, &alarm_time);
|
||||
|
||||
if (alarm_time)
|
||||
power_on_alarm = alarm_time + ALARM_DELTA;
|
||||
else
|
||||
power_on_alarm = 0;
|
||||
}
|
||||
|
||||
void set_power_on_alarm(long secs, bool enable)
|
||||
{
|
||||
int rc;
|
||||
|
|
Loading…
Reference in New Issue