Skip to content

Commit

Permalink
[MIPS] Switch from to_tm to rtc_time_to_tm
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
ralfbaechle committed Oct 11, 2007
1 parent 4b55048 commit 90b0234
Show file tree
Hide file tree
Showing 7 changed files with 14 additions and 63 deletions.
1 change: 1 addition & 0 deletions arch/mips/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ config MIPS
default y
# Horrible source of confusion. Die, die, die ...
select EMBEDDED
select RTC_LIB

mainmenu "Linux/MIPS Kernel Configuration"

Expand Down
49 changes: 0 additions & 49 deletions arch/mips/kernel/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
8 changes: 6 additions & 2 deletions arch/mips/pmc-sierra/yosemite/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,12 @@ int rtc_mips_set_time(unsigned long tim)
struct rtc_time tm;
unsigned long flags;

/* convert to a more useful format -- note months count from 0 */
to_tm(sec, &tm);
/*
* Convert to a more useful format -- note months count from 0
* and years from 1900
*/
rtc_time_to_tm(tim, &tm);
tm.tm_year += 1900;
tm.tm_mon += 1;

spin_lock_irqsave(&rtc_lock, flags);
Expand Down
6 changes: 3 additions & 3 deletions arch/mips/sgi-ip22/ip22-time.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
#include <asm/sgi/ip22.h>

/*
* note that mktime uses month from 1 to 12 while to_tm
* Note that mktime uses month from 1 to 12 while rtc_time_to_tm
* uses 0 to 11.
*/
unsigned long read_persistent_clock(void)
Expand Down Expand Up @@ -66,10 +66,10 @@ int rtc_mips_set_time(unsigned long tim)
unsigned int save_control;
unsigned long flags;

to_tm(tim, &tm);
rtc_time_to_tm(tim, &tm);

tm.tm_mon += 1; /* tm_mon starts at zero */
tm.tm_year -= 1940;
tm.tm_year -= 40;
if (tm.tm_year >= 100)
tm.tm_year -= 100;

Expand Down
3 changes: 2 additions & 1 deletion arch/mips/sibyte/swarm/rtc_m41t81.c
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,8 @@ int m41t81_set_time(unsigned long t)
struct rtc_time tm;
unsigned long flags;

to_tm(t, &tm);
/* Note we don't care about the century */
rtc_time_to_tm(t, &tm);

/*
* Note the write order matters as it ensures the correctness.
Expand Down
3 changes: 2 additions & 1 deletion arch/mips/sibyte/swarm/rtc_xicor1241.c
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,8 @@ int xicor_set_time(unsigned long t)
int tmp;
unsigned long flags;

to_tm(t, &tm);
rtc_time_to_tm(t, &tm);
tm.tm_year += 1900;

spin_lock_irqsave(&rtc_lock, flags);
/* unlock writes to the CCR */
Expand Down
7 changes: 0 additions & 7 deletions include/asm-mips/time.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,6 @@ extern void (*mips_timer_ack)(void);
*/
extern struct clocksource clocksource_mips;

/*
* to_tm() converts system time back to (year, mon, day, hour, min, sec).
* It is intended to help implement rtc_set_time() functions.
* Copied from PPC implementation.
*/
extern void to_tm(unsigned long tim, struct rtc_time *tm);

/*
* high-level timer interrupt routines.
*/
Expand Down

0 comments on commit 90b0234

Please sign in to comment.