diff options
-rw-r--r-- | arch/sh/boards/mpc1211/rtc.c | 18 |
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 */ | ||
23 | unsigned long get_cmos_time(void) | 22 | unsigned 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); |