rtc_reg = (bin2bcd(tm->tm_mday) << RTC_MDAY_OFFS) |
                (bin2bcd(tm->tm_mon + 1) << RTC_MONTH_OFFS) |
-               (bin2bcd(tm->tm_year % 100) << RTC_YEAR_OFFS);
+               (bin2bcd(tm->tm_year - 100) << RTC_YEAR_OFFS);
        writel(rtc_reg, ioaddr + RTC_DATE_REG_OFFS);
 
        return 0;
                        << RTC_MONTH_OFFS;
 
        if (alm->time.tm_year >= 0)
-               rtc_reg |= (RTC_ALARM_VALID | bin2bcd(alm->time.tm_year % 100))
+               rtc_reg |= (RTC_ALARM_VALID | bin2bcd(alm->time.tm_year - 100))
                        << RTC_YEAR_OFFS;
 
        writel(rtc_reg, ioaddr + RTC_ALARM_DATE_REG_OFFS);
                pdata->rtc->ops = &mv_rtc_ops;
        }
 
+       pdata->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
+       pdata->rtc->range_max = RTC_TIMESTAMP_END_2099;
+
        ret = rtc_register_device(pdata->rtc);
        if (!ret)
                return 0;