summaryrefslogtreecommitdiff
path: root/drivers/rtc
diff options
context:
space:
mode:
authorKamal Kannan Balagopalan <kbalagopalan@nvidia.com>2013-06-17 15:55:51 -0700
committerDan Willemsen <dwillemsen@nvidia.com>2013-09-14 13:27:24 -0700
commit4622713854722a30d7f2076d091b36926760ceb3 (patch)
tree141d6b94e20ea3f3e2644eadfe8662e2b97f3624 /drivers/rtc
parent15a99dd2fc39b14ac201fe4f20bc6605baa6128d (diff)
rtc: ams3722: Fix setting alarm time in the past
Alarm year was manipulated incorrectly and alarm set returned error as alarm year was in the past. This also caused suspend entry to exit abnormally. Bug 1284096 Change-Id: Id6ade9949dd29e5b866c78fbf053e1c5048c1c6e Signed-off-by: Kamal Kannan Balagopalan <kbalagopalan@nvidia.com> Reviewed-on: http://git-master/r/239442 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Diffstat (limited to 'drivers/rtc')
-rw-r--r--drivers/rtc/rtc-as3722.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/rtc/rtc-as3722.c b/drivers/rtc/rtc-as3722.c
index 7b05ac1c9ea3..ab03a68c30d9 100644
--- a/drivers/rtc/rtc-as3722.c
+++ b/drivers/rtc/rtc-as3722.c
@@ -95,10 +95,11 @@ static int as3722_rtc_settime(struct device *dev, struct rtc_time *tm)
+ (tm->tm_mday % 10);
as_time_array[4] = ((tm->tm_mon / 10) << 4)
+ (tm->tm_mon % 10);
- if (tm->tm_year > AS3722_RTC_START_YEAR)
- as_time_array[5] = (((tm->tm_year - AS3722_RTC_START_YEAR)
- / 10) << 4)
- + ((tm->tm_year - AS3722_RTC_START_YEAR) % 10);
+ if (tm->tm_year >= (AS3722_RTC_START_YEAR - 1900))
+ as_time_array[5] = (((tm->tm_year
+ - (AS3722_RTC_START_YEAR - 1900)) / 10) << 4)
+ + ((tm->tm_year
+ - (AS3722_RTC_START_YEAR - 1900)) % 10);
else
return -1;
@@ -156,11 +157,11 @@ static int as3722_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
+ (alrm->time.tm_mday % 10);
as_time_array[4] = ((alrm->time.tm_mon / 10) << 4)
+ (alrm->time.tm_mon % 10);
- if (alrm->time.tm_year > AS3722_RTC_START_YEAR)
- as_time_array[5] =
- (((alrm->time.tm_year - AS3722_RTC_START_YEAR)
- / 10) << 4)
- + ((alrm->time.tm_year - AS3722_RTC_START_YEAR) % 10);
+ if (alrm->time.tm_year >= (AS3722_RTC_START_YEAR - 1900))
+ as_time_array[5] = (((alrm->time.tm_year
+ - (AS3722_RTC_START_YEAR - 1900)) / 10) << 4)
+ + ((alrm->time.tm_year
+ - (AS3722_RTC_START_YEAR - 1900)) % 10);
else
return -1;