extern unsigned char vrtc_cmos_read(unsigned char reg);
 extern void vrtc_cmos_write(unsigned char val, unsigned char reg);
-extern unsigned long vrtc_get_time(void);
-extern int vrtc_set_mmss(unsigned long nowtime);
+extern void vrtc_get_time(struct timespec *now);
+extern int vrtc_set_mmss(const struct timespec *now);
 
 #endif
 
 }
 EXPORT_SYMBOL_GPL(vrtc_cmos_write);
 
-unsigned long vrtc_get_time(void)
+void vrtc_get_time(struct timespec *now)
 {
        u8 sec, min, hour, mday, mon;
        unsigned long flags;
        printk(KERN_INFO "vRTC: sec: %d min: %d hour: %d day: %d "
                "mon: %d year: %d\n", sec, min, hour, mday, mon, year);
 
-       return mktime(year, mon, mday, hour, min, sec);
+       now->tv_sec = mktime(year, mon, mday, hour, min, sec);
+       now->tv_nsec = 0;
 }
 
-int vrtc_set_mmss(unsigned long nowtime)
+int vrtc_set_mmss(const struct timespec *now)
 {
        unsigned long flags;
        struct rtc_time tm;
        int year;
        int retval = 0;
 
-       rtc_time_to_tm(nowtime, &tm);
+       rtc_time_to_tm(now->tv_sec, &tm);
        if (!rtc_valid_tm(&tm) && tm.tm_year >= 72) {
                /*
                 * tm.year is the number of years since 1900, and the
        } else {
                printk(KERN_ERR
                       "%s: Invalid vRTC value: write of %lx to vRTC failed\n",
-                       __FUNCTION__, nowtime);
+                       __FUNCTION__, now->tv_sec);
                retval = -EINVAL;
        }
        return retval;