diff options
author | Kevin Liu <kliu5@marvell.com> | 2012-03-23 18:02:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-03-23 19:58:39 -0400 |
commit | fad0738dcf6feccf601f5a24b8ccd3b26894b337 (patch) | |
tree | 7340f5de44b573899a6f7c82fe9647fdaf7760cc | |
parent | 0cf30bdd919685b201f715ea347dd96d590942e8 (diff) |
drivers/rtc/rtc-max8925.c: fix alarm->enabled mistake in max8925_rtc_read_alarm/max8925_rtc_set_alarm
max8925_rtc_read_alarm() should set alrm->enabled based on both
ALARM_IRQ_MASK and ALARM_CTRL setting. max8925_rtc_set_alarm() should
enable/disable alarm according to ALARM_CTRL reg setting.
Signed-off-by: Kevin Liu <kliu5@marvell.com>
Signed-off-by: Haojian Zhuang <haojian.zhuang@marvell.com>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | drivers/rtc/rtc-max8925.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/drivers/rtc/rtc-max8925.c b/drivers/rtc/rtc-max8925.c index ff6b9a2cb8e3..1459055a83aa 100644 --- a/drivers/rtc/rtc-max8925.c +++ b/drivers/rtc/rtc-max8925.c | |||
@@ -193,10 +193,17 @@ static int max8925_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) | |||
193 | ret = max8925_reg_read(info->rtc, MAX8925_RTC_IRQ_MASK); | 193 | ret = max8925_reg_read(info->rtc, MAX8925_RTC_IRQ_MASK); |
194 | if (ret < 0) | 194 | if (ret < 0) |
195 | goto out; | 195 | goto out; |
196 | if ((ret & ALARM0_IRQ) == 0) | 196 | if (ret & ALARM0_IRQ) { |
197 | alrm->enabled = 1; | ||
198 | else | ||
199 | alrm->enabled = 0; | 197 | alrm->enabled = 0; |
198 | } else { | ||
199 | ret = max8925_reg_read(info->rtc, MAX8925_ALARM0_CNTL); | ||
200 | if (ret < 0) | ||
201 | goto out; | ||
202 | if (!ret) | ||
203 | alrm->enabled = 0; | ||
204 | else | ||
205 | alrm->enabled = 1; | ||
206 | } | ||
200 | ret = max8925_reg_read(info->rtc, MAX8925_RTC_STATUS); | 207 | ret = max8925_reg_read(info->rtc, MAX8925_RTC_STATUS); |
201 | if (ret < 0) | 208 | if (ret < 0) |
202 | goto out; | 209 | goto out; |
@@ -221,8 +228,11 @@ static int max8925_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) | |||
221 | ret = max8925_bulk_write(info->rtc, MAX8925_ALARM0_SEC, TIME_NUM, buf); | 228 | ret = max8925_bulk_write(info->rtc, MAX8925_ALARM0_SEC, TIME_NUM, buf); |
222 | if (ret < 0) | 229 | if (ret < 0) |
223 | goto out; | 230 | goto out; |
224 | /* only enable alarm on year/month/day/hour/min/sec */ | 231 | if (alrm->enabled) |
225 | ret = max8925_reg_write(info->rtc, MAX8925_ALARM0_CNTL, 0x77); | 232 | /* only enable alarm on year/month/day/hour/min/sec */ |
233 | ret = max8925_reg_write(info->rtc, MAX8925_ALARM0_CNTL, 0x77); | ||
234 | else | ||
235 | ret = max8925_reg_write(info->rtc, MAX8925_ALARM0_CNTL, 0x0); | ||
226 | if (ret < 0) | 236 | if (ret < 0) |
227 | goto out; | 237 | goto out; |
228 | out: | 238 | out: |