diff options
Diffstat (limited to 'arch/mips/momentum/ocelot_3/setup.c')
-rw-r--r-- | arch/mips/momentum/ocelot_3/setup.c | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/arch/mips/momentum/ocelot_3/setup.c b/arch/mips/momentum/ocelot_3/setup.c index 969612eab8a6..370e75d0e75c 100644 --- a/arch/mips/momentum/ocelot_3/setup.c +++ b/arch/mips/momentum/ocelot_3/setup.c | |||
@@ -58,6 +58,7 @@ | |||
58 | #include <linux/bootmem.h> | 58 | #include <linux/bootmem.h> |
59 | #include <linux/mv643xx.h> | 59 | #include <linux/mv643xx.h> |
60 | #include <linux/pm.h> | 60 | #include <linux/pm.h> |
61 | #include <linux/bcd.h> | ||
61 | 62 | ||
62 | #include <asm/time.h> | 63 | #include <asm/time.h> |
63 | #include <asm/page.h> | 64 | #include <asm/page.h> |
@@ -131,9 +132,6 @@ void setup_wired_tlb_entries(void) | |||
131 | add_wired_entry(ENTRYLO(0xfc000000), ENTRYLO(0xfd000000), (signed)0xfc000000, PM_16M); | 132 | add_wired_entry(ENTRYLO(0xfc000000), ENTRYLO(0xfd000000), (signed)0xfc000000, PM_16M); |
132 | } | 133 | } |
133 | 134 | ||
134 | #define CONV_BCD_TO_BIN(val) (((val) & 0xf) + (((val) >> 4) * 10)) | ||
135 | #define CONV_BIN_TO_BCD(val) (((val) % 10) + (((val) / 10) << 4)) | ||
136 | |||
137 | unsigned long m48t37y_get_time(void) | 135 | unsigned long m48t37y_get_time(void) |
138 | { | 136 | { |
139 | unsigned int year, month, day, hour, min, sec; | 137 | unsigned int year, month, day, hour, min, sec; |
@@ -143,16 +141,16 @@ unsigned long m48t37y_get_time(void) | |||
143 | /* stop the update */ | 141 | /* stop the update */ |
144 | rtc_base[0x7ff8] = 0x40; | 142 | rtc_base[0x7ff8] = 0x40; |
145 | 143 | ||
146 | year = CONV_BCD_TO_BIN(rtc_base[0x7fff]); | 144 | year = BCD2BIN(rtc_base[0x7fff]); |
147 | year += CONV_BCD_TO_BIN(rtc_base[0x7ff1]) * 100; | 145 | year += BCD2BIN(rtc_base[0x7ff1]) * 100; |
148 | 146 | ||
149 | month = CONV_BCD_TO_BIN(rtc_base[0x7ffe]); | 147 | month = BCD2BIN(rtc_base[0x7ffe]); |
150 | 148 | ||
151 | day = CONV_BCD_TO_BIN(rtc_base[0x7ffd]); | 149 | day = BCD2BIN(rtc_base[0x7ffd]); |
152 | 150 | ||
153 | hour = CONV_BCD_TO_BIN(rtc_base[0x7ffb]); | 151 | hour = BCD2BIN(rtc_base[0x7ffb]); |
154 | min = CONV_BCD_TO_BIN(rtc_base[0x7ffa]); | 152 | min = BCD2BIN(rtc_base[0x7ffa]); |
155 | sec = CONV_BCD_TO_BIN(rtc_base[0x7ff9]); | 153 | sec = BCD2BIN(rtc_base[0x7ff9]); |
156 | 154 | ||
157 | /* start the update */ | 155 | /* start the update */ |
158 | rtc_base[0x7ff8] = 0x00; | 156 | rtc_base[0x7ff8] = 0x00; |
@@ -175,22 +173,22 @@ int m48t37y_set_time(unsigned long sec) | |||
175 | rtc_base[0x7ff8] = 0x80; | 173 | rtc_base[0x7ff8] = 0x80; |
176 | 174 | ||
177 | /* year */ | 175 | /* year */ |
178 | rtc_base[0x7fff] = CONV_BIN_TO_BCD(tm.tm_year % 100); | 176 | rtc_base[0x7fff] = BIN2BCD(tm.tm_year % 100); |
179 | rtc_base[0x7ff1] = CONV_BIN_TO_BCD(tm.tm_year / 100); | 177 | rtc_base[0x7ff1] = BIN2BCD(tm.tm_year / 100); |
180 | 178 | ||
181 | /* month */ | 179 | /* month */ |
182 | rtc_base[0x7ffe] = CONV_BIN_TO_BCD(tm.tm_mon); | 180 | rtc_base[0x7ffe] = BIN2BCD(tm.tm_mon); |
183 | 181 | ||
184 | /* day */ | 182 | /* day */ |
185 | rtc_base[0x7ffd] = CONV_BIN_TO_BCD(tm.tm_mday); | 183 | rtc_base[0x7ffd] = BIN2BCD(tm.tm_mday); |
186 | 184 | ||
187 | /* hour/min/sec */ | 185 | /* hour/min/sec */ |
188 | rtc_base[0x7ffb] = CONV_BIN_TO_BCD(tm.tm_hour); | 186 | rtc_base[0x7ffb] = BIN2BCD(tm.tm_hour); |
189 | rtc_base[0x7ffa] = CONV_BIN_TO_BCD(tm.tm_min); | 187 | rtc_base[0x7ffa] = BIN2BCD(tm.tm_min); |
190 | rtc_base[0x7ff9] = CONV_BIN_TO_BCD(tm.tm_sec); | 188 | rtc_base[0x7ff9] = BIN2BCD(tm.tm_sec); |
191 | 189 | ||
192 | /* day of week -- not really used, but let's keep it up-to-date */ | 190 | /* day of week -- not really used, but let's keep it up-to-date */ |
193 | rtc_base[0x7ffc] = CONV_BIN_TO_BCD(tm.tm_wday + 1); | 191 | rtc_base[0x7ffc] = BIN2BCD(tm.tm_wday + 1); |
194 | 192 | ||
195 | /* disable writing */ | 193 | /* disable writing */ |
196 | rtc_base[0x7ff8] = 0x00; | 194 | rtc_base[0x7ff8] = 0x00; |