Commit 91550f715b7f7707b5ab5b9b0cd455bda8505954
1 parent
51e22e7a05
Exists in
master
and in
39 other branches
sh: Kill off the rest of the legacy rtc mess.
With the new RTC class driver, we can get rid of most of the old left over cruft. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Showing 9 changed files with 23 additions and 381 deletions Side-by-side Diff
arch/sh/Kconfig
... | ... | @@ -296,19 +296,6 @@ |
296 | 296 | endian byte order. These modes require different kernels. Say Y if |
297 | 297 | your machine is little endian, N if it's a big endian machine. |
298 | 298 | |
299 | -# The SH7750 RTC module is disabled in the Dreamcast | |
300 | -config SH_RTC | |
301 | - bool | |
302 | - depends on !SH_DREAMCAST && !SH_SATURN && !SH_7300_SOLUTION_ENGINE && \ | |
303 | - !SH_73180_SOLUTION_ENGINE && !SH_LANDISK && \ | |
304 | - !SH_R7780RP && !SH_SHMIN | |
305 | - default y | |
306 | - help | |
307 | - Selecting this option will allow the Linux kernel to emulate | |
308 | - PC's RTC. | |
309 | - | |
310 | - If unsure, say N. | |
311 | - | |
312 | 299 | config SH_FPU |
313 | 300 | bool "FPU support" |
314 | 301 | depends on !CPU_SH3 |
arch/sh/boards/snapgear/rtc.c
... | ... | @@ -19,10 +19,8 @@ |
19 | 19 | #include <linux/mc146818rtc.h> |
20 | 20 | #include <asm/io.h> |
21 | 21 | |
22 | -/****************************************************************************/ | |
22 | +static int use_ds1302; | |
23 | 23 | |
24 | -static int use_ds1302 = 0; | |
25 | - | |
26 | 24 | /****************************************************************************/ |
27 | 25 | /* |
28 | 26 | * we need to implement a DS1302 driver here that can operate in |
... | ... | @@ -79,10 +77,6 @@ |
79 | 77 | unsigned int val; |
80 | 78 | unsigned long flags; |
81 | 79 | |
82 | -#if 0 | |
83 | - printk("SnapGear RTC: ds1302_readbyte(addr=%x)\n", addr); | |
84 | -#endif | |
85 | - | |
86 | 80 | local_irq_save(flags); |
87 | 81 | set_dirp(get_dirp() | RTC_RESET | RTC_IODATA | RTC_SCLK); |
88 | 82 | set_dp(get_dp() & ~(RTC_RESET | RTC_IODATA | RTC_SCLK)); |
... | ... | @@ -101,10 +95,6 @@ |
101 | 95 | { |
102 | 96 | unsigned long flags; |
103 | 97 | |
104 | -#if 0 | |
105 | - printk("SnapGear RTC: ds1302_writebyte(addr=%x)\n", addr); | |
106 | -#endif | |
107 | - | |
108 | 98 | local_irq_save(flags); |
109 | 99 | set_dirp(get_dirp() | RTC_RESET | RTC_IODATA | RTC_SCLK); |
110 | 100 | set_dp(get_dp() & ~(RTC_RESET | RTC_IODATA | RTC_SCLK)); |
... | ... | @@ -167,9 +157,6 @@ |
167 | 157 | if (use_ds1302) { |
168 | 158 | rtc_sh_get_time = snapgear_rtc_gettimeofday; |
169 | 159 | rtc_sh_set_time = snapgear_rtc_settimeofday; |
170 | - } else { | |
171 | - rtc_sh_get_time = sh_rtc_gettimeofday; | |
172 | - rtc_sh_set_time = sh_rtc_settimeofday; | |
173 | 160 | } |
174 | 161 | |
175 | 162 | printk("SnapGear RTC: using %s rtc.\n", use_ds1302 ? "ds1302" : "internal"); |
176 | 163 | |
... | ... | @@ -184,10 +171,8 @@ |
184 | 171 | { |
185 | 172 | unsigned int sec, min, hr, day, mon, yr; |
186 | 173 | |
187 | - if (!use_ds1302) { | |
188 | - sh_rtc_gettimeofday(ts); | |
174 | + if (!use_ds1302) | |
189 | 175 | return; |
190 | - } | |
191 | 176 | |
192 | 177 | sec = bcd2int(ds1302_readbyte(RTC_ADDR_SEC)); |
193 | 178 | min = bcd2int(ds1302_readbyte(RTC_ADDR_MIN)); |
... | ... | @@ -228,7 +213,7 @@ |
228 | 213 | unsigned long nowtime; |
229 | 214 | |
230 | 215 | if (!use_ds1302) |
231 | - return sh_rtc_settimeofday(secs); | |
216 | + return 0; | |
232 | 217 | |
233 | 218 | /* |
234 | 219 | * This is called direct from the kernel timer handling code. |
... | ... | @@ -237,10 +222,6 @@ |
237 | 222 | |
238 | 223 | nowtime = secs; |
239 | 224 | |
240 | -#if 1 | |
241 | - printk("SnapGear RTC: snapgear_rtc_settimeofday(nowtime=%ld)\n", nowtime); | |
242 | -#endif | |
243 | - | |
244 | 225 | /* STOP RTC */ |
245 | 226 | ds1302_writebyte(RTC_ADDR_SEC, ds1302_readbyte(RTC_ADDR_SEC) | 0x80); |
246 | 227 | |
... | ... | @@ -326,6 +307,4 @@ |
326 | 307 | default: break; |
327 | 308 | } |
328 | 309 | } |
329 | - | |
330 | -/****************************************************************************/ |
arch/sh/kernel/cpu/Makefile
arch/sh/kernel/cpu/irq/ipr.c
... | ... | @@ -124,7 +124,7 @@ |
124 | 124 | #ifndef CONFIG_CPU_SUBTYPE_SH7780 |
125 | 125 | make_ipr_irq(TIMER_IRQ, TIMER_IPR_ADDR, TIMER_IPR_POS, TIMER_PRIORITY); |
126 | 126 | make_ipr_irq(TIMER1_IRQ, TIMER1_IPR_ADDR, TIMER1_IPR_POS, TIMER1_PRIORITY); |
127 | -#if defined(CONFIG_SH_RTC) | |
127 | +#ifdef RTC_IRQ | |
128 | 128 | make_ipr_irq(RTC_IRQ, RTC_IPR_ADDR, RTC_IPR_POS, RTC_PRIORITY); |
129 | 129 | #endif |
130 | 130 |
arch/sh/kernel/cpu/rtc.c
1 | -/* | |
2 | - * linux/arch/sh/kernel/rtc.c -- SH3 / SH4 on-chip RTC support | |
3 | - * | |
4 | - * Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org> | |
5 | - * Copyright (C) 1999 Tetsuya Okada & Niibe Yutaka | |
6 | - */ | |
7 | - | |
8 | -#include <linux/init.h> | |
9 | -#include <linux/kernel.h> | |
10 | -#include <linux/sched.h> | |
11 | -#include <linux/time.h> | |
12 | -#include <linux/bcd.h> | |
13 | -#include <asm/io.h> | |
14 | -#include <asm/rtc.h> | |
15 | - | |
16 | -void sh_rtc_gettimeofday(struct timespec *ts) | |
17 | -{ | |
18 | - unsigned int sec128, sec, sec2, min, hr, wk, day, mon, yr, yr100, cf_bit; | |
19 | - unsigned long flags; | |
20 | - | |
21 | - again: | |
22 | - do { | |
23 | - local_irq_save(flags); | |
24 | - ctrl_outb(0, RCR1); /* Clear CF-bit */ | |
25 | - sec128 = ctrl_inb(R64CNT); | |
26 | - sec = ctrl_inb(RSECCNT); | |
27 | - min = ctrl_inb(RMINCNT); | |
28 | - hr = ctrl_inb(RHRCNT); | |
29 | - wk = ctrl_inb(RWKCNT); | |
30 | - day = ctrl_inb(RDAYCNT); | |
31 | - mon = ctrl_inb(RMONCNT); | |
32 | -#if defined(CONFIG_CPU_SH4) | |
33 | - yr = ctrl_inw(RYRCNT); | |
34 | - yr100 = (yr >> 8); | |
35 | - yr &= 0xff; | |
36 | -#else | |
37 | - yr = ctrl_inb(RYRCNT); | |
38 | - yr100 = (yr == 0x99) ? 0x19 : 0x20; | |
39 | -#endif | |
40 | - sec2 = ctrl_inb(R64CNT); | |
41 | - cf_bit = ctrl_inb(RCR1) & RCR1_CF; | |
42 | - local_irq_restore(flags); | |
43 | - } while (cf_bit != 0 || ((sec128 ^ sec2) & RTC_BIT_INVERTED) != 0); | |
44 | - | |
45 | - BCD_TO_BIN(yr100); | |
46 | - BCD_TO_BIN(yr); | |
47 | - BCD_TO_BIN(mon); | |
48 | - BCD_TO_BIN(day); | |
49 | - BCD_TO_BIN(hr); | |
50 | - BCD_TO_BIN(min); | |
51 | - BCD_TO_BIN(sec); | |
52 | - | |
53 | - if (yr > 99 || mon < 1 || mon > 12 || day > 31 || day < 1 || | |
54 | - hr > 23 || min > 59 || sec > 59) { | |
55 | - printk(KERN_ERR | |
56 | - "SH RTC: invalid value, resetting to 1 Jan 2000\n"); | |
57 | - local_irq_save(flags); | |
58 | - ctrl_outb(RCR2_RESET, RCR2); /* Reset & Stop */ | |
59 | - ctrl_outb(0, RSECCNT); | |
60 | - ctrl_outb(0, RMINCNT); | |
61 | - ctrl_outb(0, RHRCNT); | |
62 | - ctrl_outb(6, RWKCNT); | |
63 | - ctrl_outb(1, RDAYCNT); | |
64 | - ctrl_outb(1, RMONCNT); | |
65 | -#if defined(CONFIG_CPU_SH4) | |
66 | - ctrl_outw(0x2000, RYRCNT); | |
67 | -#else | |
68 | - ctrl_outb(0, RYRCNT); | |
69 | -#endif | |
70 | - ctrl_outb(RCR2_RTCEN|RCR2_START, RCR2); /* Start */ | |
71 | - goto again; | |
72 | - } | |
73 | - | |
74 | -#if RTC_BIT_INVERTED != 0 | |
75 | - if ((sec128 & RTC_BIT_INVERTED)) | |
76 | - sec--; | |
77 | -#endif | |
78 | - | |
79 | - ts->tv_sec = mktime(yr100 * 100 + yr, mon, day, hr, min, sec); | |
80 | - ts->tv_nsec = ((sec128 * 1000000) / 128) * 1000; | |
81 | -} | |
82 | - | |
83 | -/* | |
84 | - * Changed to only care about tv_sec, and not the full timespec struct | |
85 | - * (i.e. tv_nsec). It can easily be switched to timespec for future cpus | |
86 | - * that support setting usec or nsec RTC values. | |
87 | - */ | |
88 | -int sh_rtc_settimeofday(const time_t secs) | |
89 | -{ | |
90 | - int retval = 0; | |
91 | - int real_seconds, real_minutes, cmos_minutes; | |
92 | - unsigned long flags; | |
93 | - | |
94 | - local_irq_save(flags); | |
95 | - ctrl_outb(RCR2_RESET, RCR2); /* Reset pre-scaler & stop RTC */ | |
96 | - | |
97 | - cmos_minutes = ctrl_inb(RMINCNT); | |
98 | - BCD_TO_BIN(cmos_minutes); | |
99 | - | |
100 | - /* | |
101 | - * since we're only adjusting minutes and seconds, | |
102 | - * don't interfere with hour overflow. This avoids | |
103 | - * messing with unknown time zones but requires your | |
104 | - * RTC not to be off by more than 15 minutes | |
105 | - */ | |
106 | - real_seconds = secs % 60; | |
107 | - real_minutes = secs / 60; | |
108 | - if (((abs(real_minutes - cmos_minutes) + 15)/30) & 1) | |
109 | - real_minutes += 30; /* correct for half hour time zone */ | |
110 | - real_minutes %= 60; | |
111 | - | |
112 | - if (abs(real_minutes - cmos_minutes) < 30) { | |
113 | - BIN_TO_BCD(real_seconds); | |
114 | - BIN_TO_BCD(real_minutes); | |
115 | - ctrl_outb(real_seconds, RSECCNT); | |
116 | - ctrl_outb(real_minutes, RMINCNT); | |
117 | - } else { | |
118 | - printk(KERN_WARNING | |
119 | - "set_rtc_time: can't update from %d to %d\n", | |
120 | - cmos_minutes, real_minutes); | |
121 | - retval = -1; | |
122 | - } | |
123 | - | |
124 | - ctrl_outb(RCR2_RTCEN|RCR2_START, RCR2); /* Start RTC */ | |
125 | - local_irq_restore(flags); | |
126 | - | |
127 | - return retval; | |
128 | -} |
arch/sh/kernel/time.c
... | ... | @@ -3,13 +3,12 @@ |
3 | 3 | * |
4 | 4 | * Copyright (C) 1999 Tetsuya Okada & Niibe Yutaka |
5 | 5 | * Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org> |
6 | - * Copyright (C) 2002, 2003, 2004, 2005 Paul Mundt | |
6 | + * Copyright (C) 2002 - 2006 Paul Mundt | |
7 | 7 | * Copyright (C) 2002 M. R. Brown <mrbrown@linux-sh.org> |
8 | 8 | * |
9 | 9 | * Some code taken from i386 version. |
10 | 10 | * Copyright (C) 1991, 1992, 1995 Linus Torvalds |
11 | 11 | */ |
12 | - | |
13 | 12 | #include <linux/kernel.h> |
14 | 13 | #include <linux/module.h> |
15 | 14 | #include <linux/init.h> |
16 | 15 | |
... | ... | @@ -26,16 +25,21 @@ |
26 | 25 | DEFINE_SPINLOCK(rtc_lock); |
27 | 26 | EXPORT_SYMBOL(rtc_lock); |
28 | 27 | |
29 | -/* XXX: Can we initialize this in a routine somewhere? Dreamcast doesn't want | |
30 | - * these routines anywhere... */ | |
31 | -#ifdef CONFIG_SH_RTC | |
32 | -void (*rtc_sh_get_time)(struct timespec *) = sh_rtc_gettimeofday; | |
33 | -int (*rtc_sh_set_time)(const time_t) = sh_rtc_settimeofday; | |
34 | -#else | |
35 | -void (*rtc_sh_get_time)(struct timespec *); | |
36 | -int (*rtc_sh_set_time)(const time_t); | |
37 | -#endif | |
28 | +/* Dummy RTC ops */ | |
29 | +static void null_rtc_get_time(struct timespec *tv) | |
30 | +{ | |
31 | + tv->tv_sec = mktime(2000, 1, 1, 0, 0, 0); | |
32 | + tv->tv_nsec = 0; | |
33 | +} | |
38 | 34 | |
35 | +static int null_rtc_set_time(const time_t secs) | |
36 | +{ | |
37 | + return 0; | |
38 | +} | |
39 | + | |
40 | +void (*rtc_sh_get_time)(struct timespec *) = null_rtc_get_time; | |
41 | +int (*rtc_sh_set_time)(const time_t) = null_rtc_set_time; | |
42 | + | |
39 | 43 | /* |
40 | 44 | * Scheduler clock - returns current time in nanosec units. |
41 | 45 | */ |
... | ... | @@ -70,7 +74,6 @@ |
70 | 74 | tv->tv_sec = sec; |
71 | 75 | tv->tv_usec = usec; |
72 | 76 | } |
73 | - | |
74 | 77 | EXPORT_SYMBOL(do_gettimeofday); |
75 | 78 | |
76 | 79 | int do_settimeofday(struct timespec *tv) |
... | ... | @@ -103,7 +106,6 @@ |
103 | 106 | |
104 | 107 | return 0; |
105 | 108 | } |
106 | - | |
107 | 109 | EXPORT_SYMBOL(do_settimeofday); |
108 | 110 | |
109 | 111 | /* last time the RTC clock got updated */ |
... | ... | @@ -181,7 +183,6 @@ |
181 | 183 | sys_timer->dev.cls = &timer_sysclass; |
182 | 184 | return sysdev_register(&sys_timer->dev); |
183 | 185 | } |
184 | - | |
185 | 186 | device_initcall(timer_init_sysfs); |
186 | 187 | |
187 | 188 | void (*board_time_init)(void); |
... | ... | @@ -193,15 +194,9 @@ |
193 | 194 | |
194 | 195 | clk_init(); |
195 | 196 | |
196 | - if (rtc_sh_get_time) { | |
197 | - rtc_sh_get_time(&xtime); | |
198 | - } else { | |
199 | - xtime.tv_sec = mktime(2000, 1, 1, 0, 0, 0); | |
200 | - xtime.tv_nsec = 0; | |
201 | - } | |
202 | - | |
203 | - set_normalized_timespec(&wall_to_monotonic, | |
204 | - -xtime.tv_sec, -xtime.tv_nsec); | |
197 | + rtc_sh_get_time(&xtime); | |
198 | + set_normalized_timespec(&wall_to_monotonic, | |
199 | + -xtime.tv_sec, -xtime.tv_nsec); | |
205 | 200 | |
206 | 201 | /* |
207 | 202 | * Find the timer to use as the system timer, it will be |
drivers/char/Kconfig
... | ... | @@ -739,7 +739,7 @@ |
739 | 739 | |
740 | 740 | config RTC |
741 | 741 | tristate "Enhanced Real Time Clock Support" |
742 | - depends on !PPC && !PARISC && !IA64 && !M68K && (!SPARC || PCI) && !FRV && !ARM | |
742 | + depends on !PPC && !PARISC && !IA64 && !M68K && (!SPARC || PCI) && !FRV && !ARM && !SUPERH | |
743 | 743 | ---help--- |
744 | 744 | If you say Y here and create a character special file /dev/rtc with |
745 | 745 | major number 10 and minor number 135 using mknod ("man mknod"), you |
include/asm-sh/mc146818rtc.h
... | ... | @@ -4,174 +4,5 @@ |
4 | 4 | #ifndef _ASM_MC146818RTC_H |
5 | 5 | #define _ASM_MC146818RTC_H |
6 | 6 | |
7 | -#ifdef CONFIG_SH_MPC1211 | |
8 | -#undef _ASM_MC146818RTC_H | |
9 | -#undef RTC_IRQ | |
10 | -#include <asm/mpc1211/mc146818rtc.h> | |
11 | -#else | |
12 | - | |
13 | -#include <asm/rtc.h> | |
14 | - | |
15 | -#define RTC_ALWAYS_BCD 1 | |
16 | - | |
17 | -/* FIXME:RTC Interrupt feature is not implemented yet. */ | |
18 | -#undef RTC_IRQ | |
19 | -#define RTC_IRQ 0 | |
20 | - | |
21 | -#if defined(CONFIG_CPU_SH3) | |
22 | -#define RTC_PORT(n) (R64CNT+(n)*2) | |
23 | -#define CMOS_READ(addr) __CMOS_READ(addr,b) | |
24 | -#define CMOS_WRITE(val,addr) __CMOS_WRITE(val,addr,b) | |
25 | - | |
26 | -#elif defined(CONFIG_SH_SECUREEDGE5410) | |
27 | -#include <asm/snapgear.h> | |
28 | - | |
29 | -#define RTC_PORT(n) SECUREEDGE_IOPORT_ADDR | |
30 | -#define CMOS_READ(addr) secureedge5410_cmos_read(addr) | |
31 | -#define CMOS_WRITE(val,addr) secureedge5410_cmos_write(val,addr) | |
32 | -extern unsigned char secureedge5410_cmos_read(int addr); | |
33 | -extern void secureedge5410_cmos_write(unsigned char val, int addr); | |
34 | - | |
35 | -#elif defined(CONFIG_CPU_SH4) | |
36 | -#define RTC_PORT(n) (R64CNT+(n)*4) | |
37 | -#define CMOS_READ(addr) __CMOS_READ(addr,w) | |
38 | -#define CMOS_WRITE(val,addr) __CMOS_WRITE(val,addr,w) | |
39 | -#endif | |
40 | - | |
41 | -#define __CMOS_READ(addr, s) ({ \ | |
42 | - unsigned char val=0, rcr1, rcr2, r64cnt, retry; \ | |
43 | - switch(addr) { \ | |
44 | - case RTC_SECONDS: \ | |
45 | - val = ctrl_inb(RSECCNT); \ | |
46 | - break; \ | |
47 | - case RTC_SECONDS_ALARM: \ | |
48 | - val = ctrl_inb(RSECAR); \ | |
49 | - break; \ | |
50 | - case RTC_MINUTES: \ | |
51 | - val = ctrl_inb(RMINCNT); \ | |
52 | - break; \ | |
53 | - case RTC_MINUTES_ALARM: \ | |
54 | - val = ctrl_inb(RMINAR); \ | |
55 | - break; \ | |
56 | - case RTC_HOURS: \ | |
57 | - val = ctrl_inb(RHRCNT); \ | |
58 | - break; \ | |
59 | - case RTC_HOURS_ALARM: \ | |
60 | - val = ctrl_inb(RHRAR); \ | |
61 | - break; \ | |
62 | - case RTC_DAY_OF_WEEK: \ | |
63 | - val = ctrl_inb(RWKCNT); \ | |
64 | - break; \ | |
65 | - case RTC_DAY_OF_MONTH: \ | |
66 | - val = ctrl_inb(RDAYCNT); \ | |
67 | - break; \ | |
68 | - case RTC_MONTH: \ | |
69 | - val = ctrl_inb(RMONCNT); \ | |
70 | - break; \ | |
71 | - case RTC_YEAR: \ | |
72 | - val = ctrl_in##s(RYRCNT); \ | |
73 | - break; \ | |
74 | - case RTC_REG_A: /* RTC_FREQ_SELECT */ \ | |
75 | - rcr2 = ctrl_inb(RCR2); \ | |
76 | - val = (rcr2 & RCR2_PESMASK) >> 4; \ | |
77 | - rcr1 = ctrl_inb(RCR1); \ | |
78 | - rcr1 = (rcr1 & (RCR1_CIE | RCR1_AIE)) | RCR1_AF;\ | |
79 | - retry = 0; \ | |
80 | - do { \ | |
81 | - ctrl_outb(rcr1, RCR1); /* clear CF */ \ | |
82 | - r64cnt = ctrl_inb(R64CNT); \ | |
83 | - } while((ctrl_inb(RCR1) & RCR1_CF) && retry++ < 1000);\ | |
84 | - r64cnt ^= RTC_BIT_INVERTED; \ | |
85 | - if(r64cnt == 0x7f || r64cnt == 0) \ | |
86 | - val |= RTC_UIP; \ | |
87 | - break; \ | |
88 | - case RTC_REG_B: /* RTC_CONTROL */ \ | |
89 | - rcr1 = ctrl_inb(RCR1); \ | |
90 | - rcr2 = ctrl_inb(RCR2); \ | |
91 | - if(rcr1 & RCR1_CIE) val |= RTC_UIE; \ | |
92 | - if(rcr1 & RCR1_AIE) val |= RTC_AIE; \ | |
93 | - if(rcr2 & RCR2_PESMASK) val |= RTC_PIE; \ | |
94 | - if(!(rcr2 & RCR2_START))val |= RTC_SET; \ | |
95 | - val |= RTC_24H; \ | |
96 | - break; \ | |
97 | - case RTC_REG_C: /* RTC_INTR_FLAGS */ \ | |
98 | - rcr1 = ctrl_inb(RCR1); \ | |
99 | - rcr1 &= ~(RCR1_CF | RCR1_AF); \ | |
100 | - ctrl_outb(rcr1, RCR1); \ | |
101 | - rcr2 = ctrl_inb(RCR2); \ | |
102 | - rcr2 &= ~RCR2_PEF; \ | |
103 | - ctrl_outb(rcr2, RCR2); \ | |
104 | - break; \ | |
105 | - case RTC_REG_D: /* RTC_VALID */ \ | |
106 | - /* Always valid ... */ \ | |
107 | - val = RTC_VRT; \ | |
108 | - break; \ | |
109 | - default: \ | |
110 | - break; \ | |
111 | - } \ | |
112 | - val; \ | |
113 | -}) | |
114 | - | |
115 | -#define __CMOS_WRITE(val, addr, s) ({ \ | |
116 | - unsigned char rcr1,rcr2; \ | |
117 | - switch(addr) { \ | |
118 | - case RTC_SECONDS: \ | |
119 | - ctrl_outb(val, RSECCNT); \ | |
120 | - break; \ | |
121 | - case RTC_SECONDS_ALARM: \ | |
122 | - ctrl_outb(val, RSECAR); \ | |
123 | - break; \ | |
124 | - case RTC_MINUTES: \ | |
125 | - ctrl_outb(val, RMINCNT); \ | |
126 | - break; \ | |
127 | - case RTC_MINUTES_ALARM: \ | |
128 | - ctrl_outb(val, RMINAR); \ | |
129 | - break; \ | |
130 | - case RTC_HOURS: \ | |
131 | - ctrl_outb(val, RHRCNT); \ | |
132 | - break; \ | |
133 | - case RTC_HOURS_ALARM: \ | |
134 | - ctrl_outb(val, RHRAR); \ | |
135 | - break; \ | |
136 | - case RTC_DAY_OF_WEEK: \ | |
137 | - ctrl_outb(val, RWKCNT); \ | |
138 | - break; \ | |
139 | - case RTC_DAY_OF_MONTH: \ | |
140 | - ctrl_outb(val, RDAYCNT); \ | |
141 | - break; \ | |
142 | - case RTC_MONTH: \ | |
143 | - ctrl_outb(val, RMONCNT); \ | |
144 | - break; \ | |
145 | - case RTC_YEAR: \ | |
146 | - ctrl_out##s((ctrl_in##s(RYRCNT) & 0xff00) | (val & 0xff), RYRCNT);\ | |
147 | - break; \ | |
148 | - case RTC_REG_A: /* RTC_FREQ_SELECT */ \ | |
149 | - rcr2 = ctrl_inb(RCR2); \ | |
150 | - if((val & RTC_DIV_CTL) == RTC_DIV_RESET2) \ | |
151 | - rcr2 |= RCR2_RESET; \ | |
152 | - ctrl_outb(rcr2, RCR2); \ | |
153 | - break; \ | |
154 | - case RTC_REG_B: /* RTC_CONTROL */ \ | |
155 | - rcr1 = (ctrl_inb(RCR1) & 0x99) | RCR1_AF; \ | |
156 | - if(val & RTC_AIE) rcr1 |= RCR1_AIE; \ | |
157 | - else rcr1 &= ~RCR1_AIE; \ | |
158 | - if(val & RTC_UIE) rcr1 |= RCR1_CIE; \ | |
159 | - else rcr1 &= ~RCR1_CIE; \ | |
160 | - ctrl_outb(rcr1, RCR1); \ | |
161 | - rcr2 = ctrl_inb(RCR2); \ | |
162 | - if(val & RTC_SET) rcr2 &= ~RCR2_START; \ | |
163 | - else rcr2 |= RCR2_START; \ | |
164 | - ctrl_outb(rcr2, RCR2); \ | |
165 | - break; \ | |
166 | - case RTC_REG_C: /* RTC_INTR_FLAGS */ \ | |
167 | - break; \ | |
168 | - case RTC_REG_D: /* RTC_VALID */ \ | |
169 | - break; \ | |
170 | - default: \ | |
171 | - break; \ | |
172 | - } \ | |
173 | -}) | |
174 | - | |
175 | -#endif /* CONFIG_SH_MPC1211 */ | |
176 | 7 | #endif /* _ASM_MC146818RTC_H */ |
include/asm-sh/rtc.h
1 | 1 | #ifndef _ASM_RTC_H |
2 | 2 | #define _ASM_RTC_H |
3 | -#ifdef __KERNEL__ | |
4 | 3 | |
5 | -#include <asm/machvec.h> | |
6 | -#include <asm/cpu/rtc.h> | |
7 | - | |
8 | -extern void sh_rtc_gettimeofday(struct timespec *ts); | |
9 | -extern int sh_rtc_settimeofday(const time_t secs); | |
10 | 4 | extern void (*board_time_init)(void); |
11 | 5 | extern void (*rtc_sh_get_time)(struct timespec *); |
12 | 6 | extern int (*rtc_sh_set_time)(const time_t); |
13 | 7 | |
14 | -/* RCR1 Bits */ | |
15 | -#define RCR1_CF 0x80 /* Carry Flag */ | |
16 | -#define RCR1_CIE 0x10 /* Carry Interrupt Enable */ | |
17 | -#define RCR1_AIE 0x08 /* Alarm Interrupt Enable */ | |
18 | -#define RCR1_AF 0x01 /* Alarm Flag */ | |
19 | - | |
20 | -/* RCR2 Bits */ | |
21 | -#define RCR2_PEF 0x80 /* PEriodic interrupt Flag */ | |
22 | -#define RCR2_PESMASK 0x70 /* Periodic interrupt Set */ | |
23 | -#define RCR2_RTCEN 0x08 /* ENable RTC */ | |
24 | -#define RCR2_ADJ 0x04 /* ADJustment (30-second) */ | |
25 | -#define RCR2_RESET 0x02 /* Reset bit */ | |
26 | -#define RCR2_START 0x01 /* Start bit */ | |
27 | - | |
28 | -#endif /* __KERNEL__ */ | |
29 | 8 | #endif /* _ASM_RTC_H */ |