diff options
author | Lin Fuzhen <fuzhen.lin@freescale.com> | 2011-11-23 17:45:13 +0800 |
---|---|---|
committer | Lin Fuzhen <fuzhen.lin@freescale.com> | 2011-11-23 19:18:39 +0800 |
commit | e8d838a81333ad9994358b20ee293bcbe6f9f4cd (patch) | |
tree | 9ff39e159def2384eb39a5333663bf20353566fb | |
parent | bd275ce9916bd22cd14e23d2edb4d0d3c7c6ea31 (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.c | 8 | ||||
-rw-r--r-- | drivers/rtc/rtc-da9052.c | 14 |
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; } |