]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/rtc/rtc-s3c.c
Merge remote-tracking branch 'rtc/rtc-next'
[karo-tx-linux.git] / drivers / rtc / rtc-s3c.c
index 7cc8f73a3fe8f65174c43922529a8523177ded27..ffb860d18701753bfaea2308fea9deb2a6ed6a9d 100644 (file)
@@ -302,6 +302,7 @@ static int s3c_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
        struct s3c_rtc *info = dev_get_drvdata(dev);
        struct rtc_time *tm = &alrm->time;
        unsigned int alrm_en;
+       int year = tm->tm_year - 100;
 
        dev_dbg(dev, "s3c_rtc_setalarm: %d, %04d.%02d.%02d %02d:%02d:%02d\n",
                 alrm->enabled,
@@ -328,6 +329,21 @@ static int s3c_rtc_setalarm(struct device *dev, struct rtc_wkalrm *alrm)
                writeb(bin2bcd(tm->tm_hour), info->base + S3C2410_ALMHOUR);
        }
 
+       if (year < 100 && year >= 0) {
+               alrm_en |= S3C2410_RTCALM_YEAREN;
+               writeb(bin2bcd(year), info->base + S3C2410_ALMYEAR);
+       }
+
+       if (tm->tm_mon < 12 && tm->tm_mon >= 0) {
+               alrm_en |= S3C2410_RTCALM_MONEN;
+               writeb(bin2bcd(tm->tm_mon + 1), info->base + S3C2410_ALMMON);
+       }
+
+       if (tm->tm_mday <= 31 && tm->tm_mday >= 1) {
+               alrm_en |= S3C2410_RTCALM_DAYEN;
+               writeb(bin2bcd(tm->tm_mday), info->base + S3C2410_ALMDATE);
+       }
+
        dev_dbg(dev, "setting S3C2410_RTCALM to %08x\n", alrm_en);
 
        writeb(alrm_en, info->base + S3C2410_RTCALM);