|
@@ -193,10 +193,17 @@ static int max8925_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm)
|
|
|
ret = max8925_reg_read(info->rtc, MAX8925_RTC_IRQ_MASK);
|
|
|
if (ret < 0)
|
|
|
goto out;
|
|
|
- if ((ret & ALARM0_IRQ) == 0)
|
|
|
- alrm->enabled = 1;
|
|
|
- else
|
|
|
+ if (ret & ALARM0_IRQ) {
|
|
|
alrm->enabled = 0;
|
|
|
+ } else {
|
|
|
+ ret = max8925_reg_read(info->rtc, MAX8925_ALARM0_CNTL);
|
|
|
+ if (ret < 0)
|
|
|
+ goto out;
|
|
|
+ if (!ret)
|
|
|
+ alrm->enabled = 0;
|
|
|
+ else
|
|
|
+ alrm->enabled = 1;
|
|
|
+ }
|
|
|
ret = max8925_reg_read(info->rtc, MAX8925_RTC_STATUS);
|
|
|
if (ret < 0)
|
|
|
goto out;
|
|
@@ -221,8 +228,11 @@ static int max8925_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
|
|
|
ret = max8925_bulk_write(info->rtc, MAX8925_ALARM0_SEC, TIME_NUM, buf);
|
|
|
if (ret < 0)
|
|
|
goto out;
|
|
|
- /* only enable alarm on year/month/day/hour/min/sec */
|
|
|
- ret = max8925_reg_write(info->rtc, MAX8925_ALARM0_CNTL, 0x77);
|
|
|
+ if (alrm->enabled)
|
|
|
+ /* only enable alarm on year/month/day/hour/min/sec */
|
|
|
+ ret = max8925_reg_write(info->rtc, MAX8925_ALARM0_CNTL, 0x77);
|
|
|
+ else
|
|
|
+ ret = max8925_reg_write(info->rtc, MAX8925_ALARM0_CNTL, 0x0);
|
|
|
if (ret < 0)
|
|
|
goto out;
|
|
|
out:
|