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
16static 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
29static char timer_override[10];
30static 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
38struct 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}
56