|
@@ -499,52 +499,13 @@ static inline void sh_rtc_write_alarm_value(struct sh_rtc *rtc,
|
|
|
writeb(bin2bcd(value) | AR_ENB, rtc->regbase + reg_off);
|
|
|
}
|
|
|
|
|
|
-static int sh_rtc_check_alarm(struct rtc_time *tm)
|
|
|
-{
|
|
|
- /*
|
|
|
- * The original rtc says anything > 0xc0 is "don't care" or "match
|
|
|
- * all" - most users use 0xff but rtc-dev uses -1 for the same thing.
|
|
|
- * The original rtc doesn't support years - some things use -1 and
|
|
|
- * some 0xffff. We use -1 to make out tests easier.
|
|
|
- */
|
|
|
- if (tm->tm_year == 0xffff)
|
|
|
- tm->tm_year = -1;
|
|
|
- if (tm->tm_mon >= 0xff)
|
|
|
- tm->tm_mon = -1;
|
|
|
- if (tm->tm_mday >= 0xff)
|
|
|
- tm->tm_mday = -1;
|
|
|
- if (tm->tm_wday >= 0xff)
|
|
|
- tm->tm_wday = -1;
|
|
|
- if (tm->tm_hour >= 0xff)
|
|
|
- tm->tm_hour = -1;
|
|
|
- if (tm->tm_min >= 0xff)
|
|
|
- tm->tm_min = -1;
|
|
|
- if (tm->tm_sec >= 0xff)
|
|
|
- tm->tm_sec = -1;
|
|
|
-
|
|
|
- if (tm->tm_year > 9999 ||
|
|
|
- tm->tm_mon >= 12 ||
|
|
|
- tm->tm_mday == 0 || tm->tm_mday >= 32 ||
|
|
|
- tm->tm_wday >= 7 ||
|
|
|
- tm->tm_hour >= 24 ||
|
|
|
- tm->tm_min >= 60 ||
|
|
|
- tm->tm_sec >= 60)
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
static int sh_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *wkalrm)
|
|
|
{
|
|
|
struct platform_device *pdev = to_platform_device(dev);
|
|
|
struct sh_rtc *rtc = platform_get_drvdata(pdev);
|
|
|
unsigned int rcr1;
|
|
|
struct rtc_time *tm = &wkalrm->time;
|
|
|
- int mon, err;
|
|
|
-
|
|
|
- err = sh_rtc_check_alarm(tm);
|
|
|
- if (unlikely(err < 0))
|
|
|
- return err;
|
|
|
+ int mon;
|
|
|
|
|
|
spin_lock_irq(&rtc->lock);
|
|
|
|