Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
[linux-2.6] / 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[] = {
17 #ifdef CONFIG_SH_TMU
18         &tmu_timer,
19 #endif
20 #ifdef CONFIG_SH_MTU2
21         &mtu2_timer,
22 #endif
23 #ifdef CONFIG_SH_CMT
24         &cmt_timer,
25 #endif
26         NULL,
27 };
28
29 static char timer_override[10];
30 static int __init timer_setup(char *str)
31 {
32         if (str)
33                 strlcpy(timer_override, str, sizeof(timer_override));
34         return 1;
35 }
36 __setup("timer=", timer_setup);
37
38 struct sys_timer *get_sys_timer(void)
39 {
40         int i;
41
42         for (i = 0; i < ARRAY_SIZE(sys_timers); i++) {
43                 struct sys_timer *t = sys_timers[i];
44
45                 if (unlikely(!t))
46                         break;
47                 if (unlikely(timer_override[0]))
48                         if ((strcmp(timer_override, t->name) != 0))
49                                 continue;
50                 if (likely(t->ops->init() == 0))
51                         return t;
52         }
53
54         return NULL;
55 }