aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/sh/boards/mpc1211/rtc.c18
1 files changed, 3 insertions, 15 deletions
diff --git a/arch/sh/boards/mpc1211/rtc.c b/arch/sh/boards/mpc1211/rtc.c
index 4d100f048072..76aab46e59a0 100644
--- a/arch/sh/boards/mpc1211/rtc.c
+++ b/arch/sh/boards/mpc1211/rtc.c
@@ -19,26 +19,13 @@
19#define BIN_TO_BCD(val) ((val)=(((val)/10)<<4) + (val)%10) 19#define BIN_TO_BCD(val) ((val)=(((val)/10)<<4) + (val)%10)
20#endif 20#endif
21 21
22/* arc/i386/kernel/time.c */
23unsigned long get_cmos_time(void) 22unsigned long get_cmos_time(void)
24{ 23{
25 unsigned int year, mon, day, hour, min, sec; 24 unsigned int year, mon, day, hour, min, sec;
26 int i;
27 25
28 spin_lock(&rtc_lock); 26 spin_lock(&rtc_lock);
29 /* The Linux interpretation of the CMOS clock register contents: 27
30 * When the Update-In-Progress (UIP) flag goes from 1 to 0, the 28 do {
31 * RTC registers show the second which has precisely just started.
32 * Let's hope other operating systems interpret the RTC the same way.
33 */
34 /* read RTC exactly on falling edge of update flag */
35 for (i = 0 ; i < 1000000 ; i++) /* may take up to 1 second... */
36 if (CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP)
37 break;
38 for (i = 0 ; i < 1000000 ; i++) /* must try at least 2.228 ms */
39 if (!(CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP))
40 break;
41 do { /* Isn't this overkill ? UIP above should guarantee consistency */
42 sec = CMOS_READ(RTC_SECONDS); 29 sec = CMOS_READ(RTC_SECONDS);
43 min = CMOS_READ(RTC_MINUTES); 30 min = CMOS_READ(RTC_MINUTES);
44 hour = CMOS_READ(RTC_HOURS); 31 hour = CMOS_READ(RTC_HOURS);
@@ -46,6 +33,7 @@ unsigned long get_cmos_time(void)
46 mon = CMOS_READ(RTC_MONTH); 33 mon = CMOS_READ(RTC_MONTH);
47 year = CMOS_READ(RTC_YEAR); 34 year = CMOS_READ(RTC_YEAR);
48 } while (sec != CMOS_READ(RTC_SECONDS)); 35 } while (sec != CMOS_READ(RTC_SECONDS));
36
49 if (!(CMOS_READ(RTC_CONTROL) & RTC_DM_BINARY) || RTC_ALWAYS_BCD) 37 if (!(CMOS_READ(RTC_CONTROL) & RTC_DM_BINARY) || RTC_ALWAYS_BCD)
50 { 38 {
51 BCD_TO_BIN(sec); 39 BCD_TO_BIN(sec);