[PATCH] sh: Simple timer framework
[linux-2.6.git] / arch / sh / kernel / timers / timer.c
1 /*
2  * arch/sh/kernel/timers/timer.c - Common timer code
3  *
4  *  Copyright (C) 2005  Paul Mundt
5  *
6  * This file is subject to the terms and conditions of the GNU General Public
7  * License.  See the file "COPYING" in the main directory of this archive
8  * for more details.
9  */
10 #include <linux/kernel.h>
11 #include <linux/init.h>
12 #include <linux/timer.h>
13 #include <linux/string.h>
14 #include <asm/timer.h>
15
16 static struct sys_timer *sys_timers[] __initdata = {
17 #ifdef CONFIG_SH_TMU
18         &tmu_timer,
19 #endif
20         NULL,
21 };
22
23 static char timer_override[10] __initdata;
24 static int __init timer_setup(char *str)
25 {
26         if (str)
27                 strlcpy(timer_override, str, sizeof(timer_override));
28         return 1;
29 }
30 __setup("timer=", timer_setup);
31
32 struct sys_timer *get_sys_timer(void)
33 {
34         int i;
35
36         for (i = 0; i < ARRAY_SIZE(sys_timers); i++) {
37                 struct sys_timer *t = sys_timers[i];
38
39                 if (unlikely(!t))
40                         break;
41                 if (unlikely(timer_override[0]))
42                         if ((strcmp(timer_override, t->name) != 0))
43                                 continue;
44                 if (likely(t->ops->init() == 0))
45                         return t;
46         }
47
48         return NULL;
49 }
50