summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLin Fuzhen <fuzhen.lin@freescale.com>2011-11-23 17:45:13 +0800
committerLin Fuzhen <fuzhen.lin@freescale.com>2011-11-23 19:18:39 +0800
commite8d838a81333ad9994358b20ee293bcbe6f9f4cd (patch)
tree9ff39e159def2384eb39a5333663bf20353566fb
parentbd275ce9916bd22cd14e23d2edb4d0d3c7c6ea31 (diff)
ENGR00162593-1 MX53 RTC: fix alarm can't wake up system
When switch to PMIC RTC, it needs to enable the PMIC alarm IRQ, so that PMIC cand wakeup the sytem when system in suspend mode if a alarm event occur Signed-off-by: Lin Fuzhen <fuzhen.lin@freescale.com>
-rw-r--r--drivers/mfd/da9052-core.c8
-rw-r--r--drivers/rtc/rtc-da9052.c14
2 files changed, 14 insertions, 8 deletions
diff --git a/drivers/mfd/da9052-core.c b/drivers/mfd/da9052-core.c
index 8783b76a0b6a..88921dddc669 100644
--- a/drivers/mfd/da9052-core.c
+++ b/drivers/mfd/da9052-core.c
@@ -2,7 +2,7 @@
* da9052-core.c -- Device access for Dialog DA9052
*
* Copyright(c) 2009 Dialog Semiconductor Ltd.
- *
+ * Copyright 2010-2011 Freescale Semiconductor, Inc.
* Author: Dialog Semiconductor Ltd <dchen@diasemi.com>
*
* This program is free software; you can redistribute it and/or modify it
@@ -310,8 +310,10 @@ void eh_workqueue_isr(struct work_struct *work)
}
/* Collect all events */
- for (cnt = 0; cnt < 4; cnt++)
- events_sts |= (eve_data[cnt].data << (8 * cnt));
+ for (cnt = 0; cnt < 4; cnt++) {
+ pr_debug(" reg[%d]: %x\n", cnt+5, eve_data[cnt].data);
+ events_sts |= ((eve_data[cnt].data&0x00ff) << (8 * cnt));
+ }
/* Check if we really got any event */
if (events_sts == 0) {
diff --git a/drivers/rtc/rtc-da9052.c b/drivers/rtc/rtc-da9052.c
index e901892050cd..f8217eb737dd 100644
--- a/drivers/rtc/rtc-da9052.c
+++ b/drivers/rtc/rtc-da9052.c
@@ -1,5 +1,6 @@
/*
* Copyright(c) 2009 Dialog Semiconductor Ltd.
+ * Copyright 2010-2011 Freescale Semiconductor, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -310,7 +311,6 @@ static int da9052_alarm_settime(struct da9052 *da9052, struct rtc_time *rtc_tm)
msg.data = msg.data & ~(DA9052_ALARMY_ALARMYEAR);
-
msg.data |= rtc_tm->tm_year;
msg_arr[loop_index].addr = DA9052_ALARMY_REG;
msg_arr[loop_index].data = 0;
@@ -422,8 +422,9 @@ static ssize_t da9052_rtc_unmask_irq(struct da9052 *da9052)
return ret;
}
- data = ret;
- ssc_msg.data = data &= ~DA9052_IRQMASKA_MALRAM;
+ ssc_msg.data &= ~DA9052_IRQMASKA_MALRAM;
+ ssc_msg.data |= DA9052_IRQMASKA_MSEQRDY;
+ pr_debug("%s: write REG10 0x%x\n", __func__, ssc_msg.data);
ret = da9052->write(da9052, &ssc_msg);
if (ret != 0) {
@@ -483,8 +484,9 @@ static int da9052_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
if (ret)
return ret;
- /* don't enable rtc-alarm when set the alram */
- ret = da9052_rtc_enable_alarm(da9052, 0);
+ /* enable rtc-alarm when set the alram */
+ ret = da9052_rtc_enable_alarm(da9052, 1);
+ ret = da9052_rtc_unmask_irq(da9052);
return ret;
}
@@ -501,6 +503,8 @@ static int da9052_rtc_update_irq_enable(struct device *dev,
(priv->da9052);
da9052_unlock(priv->da9052);
+ /* enable rtc-alarm */
+ da9052_rtc_enable_alarm(priv->da9052, 1);
return ret;
}