* [PATCH] rtc/nuc900: patch for tm_year to add 'if' condition.
@ 2010-06-06 12:42 Wan ZongShun
0 siblings, 0 replies; only message in thread
From: Wan ZongShun @ 2010-06-06 12:42 UTC (permalink / raw)
To: Andrew Morton, Alessandro Zummo, rtc-linux, LKML
Andrew,
When user application wants to set rtc time, RTC subsystem takes advantage of
'rtc_valid_tm(tm)' to check 'rtc_time *tm' value validity, it make sure the 'tm->tm_year'
is larger than 70,so if '70< tm_year < 100', the '(settm->tm_year - 100)' will be negative.
'
Setting the negative value to hardware register will be invalid, so I add the 'if' condition
to make sure set a valid value to register.
Signed-off-by: Wan ZongShun <mcuos.com@gmail.com>
---
drivers/rtc/rtc-nuc900.c | 14 ++++++++++----
1 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/drivers/rtc/rtc-nuc900.c b/drivers/rtc/rtc-nuc900.c
index 21d1330..20bc70b 100644
--- a/drivers/rtc/rtc-nuc900.c
+++ b/drivers/rtc/rtc-nuc900.c
@@ -116,12 +116,18 @@ static void nuc900_rtc_bcd2bin(unsigned int timereg,
rtc_valid_tm(tm);
}
-static void nuc900_rtc_bin2bcd(struct rtc_time *settm,
+static void nuc900_rtc_bin2bcd(struct device *dev, struct rtc_time *settm,
struct nuc900_bcd_time *gettm)
{
gettm->bcd_mday = bin2bcd(settm->tm_mday) << 0;
gettm->bcd_mon = bin2bcd(settm->tm_mon) << 8;
- gettm->bcd_year = bin2bcd(settm->tm_year - 100) << 16;
+
+ if (settm->tm_year < 100) {
+ dev_warn(dev, "The year will be between 1970-1999, right?\n");
+ gettm->bcd_year = bin2bcd(settm->tm_year) << 16;
+ } else {
+ gettm->bcd_year = bin2bcd(settm->tm_year - 100) << 16;
+ }
gettm->bcd_sec = bin2bcd(settm->tm_sec) << 0;
gettm->bcd_min = bin2bcd(settm->tm_min) << 8;
@@ -176,7 +182,7 @@ static int nuc900_rtc_set_time(struct device *dev, struct rtc_time *tm)
unsigned long val;
int *err;
- nuc900_rtc_bin2bcd(tm, &gettm);
+ nuc900_rtc_bin2bcd(dev, tm, &gettm);
err = check_rtc_access_enable(rtc);
if (IS_ERR(err))
@@ -211,7 +217,7 @@ static int nuc900_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
unsigned long val;
int *err;
- nuc900_rtc_bin2bcd(&alrm->time, &tm);
+ nuc900_rtc_bin2bcd(dev, &alrm->time, &tm);
err = check_rtc_access_enable(rtc);
if (IS_ERR(err))
--
1.6.3.3
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2010-06-06 12:42 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-06-06 12:42 [PATCH] rtc/nuc900: patch for tm_year to add 'if' condition Wan ZongShun
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.