[MIPS] Switch from to_tm to rtc_time_to_tm
This replaces the MIPS-specific to_tm function with the generic rtc_time_to_tm function. The big difference between the two functions is that rtc_time_to_tm uses epoch 70 while to_tm uses 1970, so the result of rtc_time_to_tm needs to be fixed up. Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
@ -397,52 +397,3 @@ void __init time_init(void)
|
||||
|
||||
init_mips_clocksource();
|
||||
}
|
||||
|
||||
#define FEBRUARY 2
|
||||
#define STARTOFTIME 1970
|
||||
#define SECDAY 86400L
|
||||
#define SECYR (SECDAY * 365)
|
||||
#define leapyear(y) ((!((y) % 4) && ((y) % 100)) || !((y) % 400))
|
||||
#define days_in_year(y) (leapyear(y) ? 366 : 365)
|
||||
#define days_in_month(m) (month_days[(m) - 1])
|
||||
|
||||
static int month_days[12] = {
|
||||
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
|
||||
};
|
||||
|
||||
void to_tm(unsigned long tim, struct rtc_time *tm)
|
||||
{
|
||||
long hms, day, gday;
|
||||
int i;
|
||||
|
||||
gday = day = tim / SECDAY;
|
||||
hms = tim % SECDAY;
|
||||
|
||||
/* Hours, minutes, seconds are easy */
|
||||
tm->tm_hour = hms / 3600;
|
||||
tm->tm_min = (hms % 3600) / 60;
|
||||
tm->tm_sec = (hms % 3600) % 60;
|
||||
|
||||
/* Number of years in days */
|
||||
for (i = STARTOFTIME; day >= days_in_year(i); i++)
|
||||
day -= days_in_year(i);
|
||||
tm->tm_year = i;
|
||||
|
||||
/* Number of months in days left */
|
||||
if (leapyear(tm->tm_year))
|
||||
days_in_month(FEBRUARY) = 29;
|
||||
for (i = 1; day >= days_in_month(i); i++)
|
||||
day -= days_in_month(i);
|
||||
days_in_month(FEBRUARY) = 28;
|
||||
tm->tm_mon = i - 1; /* tm_mon starts from 0 to 11 */
|
||||
|
||||
/* Days are what is left over (+1) from all that. */
|
||||
tm->tm_mday = day + 1;
|
||||
|
||||
/*
|
||||
* Determine the day of week
|
||||
*/
|
||||
tm->tm_wday = (gday + 4) % 7; /* 1970/1/1 was Thursday */
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(to_tm);
|
||||
|
Reference in New Issue
Block a user