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: |
