X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=drivers%2Frtc%2Fbfin_rtc.c;h=21a2189e2753b8d2fffceecc41a5e3c2b4c780e6;hb=93e1459641e758d2b096d3f1b39414a39bb314f8;hp=5755a20bc52e853db8771123a8601fdb8cc5afbc;hpb=5561857aae9a5921772b18b571708956788148d8;p=karo-tx-uboot.git diff --git a/drivers/rtc/bfin_rtc.c b/drivers/rtc/bfin_rtc.c index 5755a20bc5..21a2189e27 100644 --- a/drivers/rtc/bfin_rtc.c +++ b/drivers/rtc/bfin_rtc.c @@ -11,7 +11,7 @@ #include #include -#if defined(CONFIG_RTC_BFIN) && defined(CONFIG_CMD_DATE) +#if defined(CONFIG_CMD_DATE) #include #include @@ -26,10 +26,17 @@ #define NUM_SECS_IN_HR HRS_TO_SECS(1) #define NUM_SECS_IN_DAY DAYS_TO_SECS(1) +/* Enable the RTC prescaler enable register */ +static void rtc_init(void) +{ + if (!(bfin_read_RTC_PREN() & 0x1)) + bfin_write_RTC_PREN(0x1); +} + /* Our on-chip RTC has no notion of "reset" */ void rtc_reset(void) { - return; + rtc_init(); } /* Wait for pending writes to complete */ @@ -42,18 +49,10 @@ static void wait_for_complete(void) bfin_write_RTC_ISTAT(WRITE_COMPLETE); } -/* Enable the RTC prescaler enable register */ -int rtc_init(void) -{ - pr_stamp(); - bfin_write_RTC_PREN(0x1); - return 0; -} - /* Set the time. Get the time_in_secs which is the number of seconds since Jan 1970 and set the RTC registers * based on this value. */ -void rtc_set(struct rtc_time *tmp) +int rtc_set(struct rtc_time *tmp) { unsigned long remain, days, hrs, mins, secs; @@ -61,14 +60,15 @@ void rtc_set(struct rtc_time *tmp) if (tmp == NULL) { puts("Error setting the date/time\n"); - return; + return -1; } + rtc_init(); wait_for_complete(); /* Calculate number of seconds this incoming time represents */ remain = mktime(tmp->tm_year, tmp->tm_mon, tmp->tm_mday, - tmp->tm_hour, tmp->tm_min, tmp->tm_sec); + tmp->tm_hour, tmp->tm_min, tmp->tm_sec); /* Figure out how many days since epoch */ days = remain / NUM_SECS_IN_DAY; @@ -82,10 +82,12 @@ void rtc_set(struct rtc_time *tmp) /* Encode these time values into our RTC_STAT register */ bfin_write_RTC_STAT(SET_ALARM(days, hrs, mins, secs)); + + return 0; } /* Read the time from the RTC_STAT. time_in_seconds is seconds since Jan 1970 */ -void rtc_get(struct rtc_time *tmp) +int rtc_get(struct rtc_time *tmp) { uint32_t cur_rtc_stat; int time_in_sec; @@ -95,9 +97,10 @@ void rtc_get(struct rtc_time *tmp) if (tmp == NULL) { puts("Error getting the date/time\n"); - return; + return -1; } + rtc_init(); wait_for_complete(); /* Read the RTC_STAT register */ @@ -112,6 +115,8 @@ void rtc_get(struct rtc_time *tmp) /* Calculate the total number of seconds since epoch */ time_in_sec = (tm_sec) + MIN_TO_SECS(tm_min) + HRS_TO_SECS(tm_hr) + DAYS_TO_SECS(tm_day); to_tm(time_in_sec, tmp); + + return 0; } #endif