static int tegra_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *wkalrm) { struct rtc_time *time = &wkalrm->time; NvU32 now; NvU32 alarm_sec; struct rtc_time now_time; printk("%s(): wkalrm->enabled=%d\n", __func__, wkalrm?wkalrm->enabled:-1); pr_debug("wkalrm->enabled = %d\n", wkalrm->enabled); if (wkalrm->enabled == 0) { if(!NvOdmPmuWriteAlarm(hPmu, 0)) return -EINVAL; return 0; } if (!NvOdmPmuReadRtc(hPmu, &now)) { pr_debug("NvOdmPmuReadRtc failed\n"); return -1; } rtc_time_to_tm(now, &now_time); pr_debug( "read now_time %02d:%02d:%02d %02d/%02d/%04d\n", now_time.tm_hour, now_time.tm_min, now_time.tm_sec, now_time.tm_mon + 1, now_time.tm_mday, now_time.tm_year + 1900); pr_debug("write alarm_time %02d:%02d:%02d %02d/%02d/%04d\n", time->tm_hour, time->tm_min, time->tm_sec, time->tm_mon+1, time->tm_mday, time->tm_yday+1900); alarm_sec = (NvU32)mktime(now_time.tm_year + 1900, time->tm_mon+1, time->tm_mday, time->tm_hour, time->tm_min, time->tm_sec); if (alarm_sec < now) alarm_sec = (NvU32)mktime(now_time.tm_year + 1901, time->tm_mon+1, time->tm_mday, time->tm_hour, time->tm_min, time->tm_sec); pr_debug("alarm_sec = %u\n", alarm_sec); if(!NvOdmPmuWriteAlarm(hPmu, alarm_sec-now)) return -EINVAL; #if SYNC_EXTERNAL_RTC_TO_INTERNAL_RTC return internal_tegra_rtc_set_alarm(wkalrm); #else pr_info("%s():enter.\n", __func__); /* Alarm set */ events |= RTC_IRQF | RTC_AF; if (rtc) rtc_update_irq(rtc, 1, events); return NV_TRUE; #endif }
static int tegra_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *wkalrm) { struct rtc_time *time = &wkalrm->time; NvU32 now; NvU32 alarm_sec; struct rtc_time now_time; pr_debug("wkalrm->enabled = %d\n", wkalrm->enabled); if (wkalrm->enabled == 0) return 0; if (!NvOdmPmuReadRtc(hPmu, &now)) { pr_debug("NvOdmPmuReadRtc failed\n"); return -1; } rtc_time_to_tm(now, &now_time); pr_debug( "read now_time %02d:%02d:%02d %02d/%02d/%04d\n", now_time.tm_hour, now_time.tm_min, now_time.tm_sec, now_time.tm_mon + 1, now_time.tm_mday, now_time.tm_year + 1900); pr_debug("write alarm_time %02d:%02d:%02d %02d/%02d/%04d\n", time->tm_hour, time->tm_min, time->tm_sec, time->tm_mon+1, time->tm_mday, time->tm_yday+1900); alarm_sec = (NvU32)mktime(now_time.tm_year + 1900, time->tm_mon+1, time->tm_mday, time->tm_hour, time->tm_min, time->tm_sec); if (alarm_sec < now) alarm_sec = (NvU32)mktime(now_time.tm_year + 1901, time->tm_mon+1, time->tm_mday, time->tm_hour, time->tm_min, time->tm_sec); pr_debug("alarm_sec = %u\n", alarm_sec); if(!NvOdmPmuWriteAlarm(hPmu, alarm_sec-now)) return -EINVAL; #if SYNC_EXTERNAL_RTC_TO_INTERNAL_RTC return internal_tegra_rtc_set_alarm(wkalrm); #else return 0; #endif }