blob: 4e7e747d1b696c59a16016cb42aedbe516ae734b [file] [log] [blame]
Paul Mundtaa016662006-01-16 22:14:18 -08001/*
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
Paul Mundtddd43b02007-05-23 12:24:32 +090016static struct sys_timer *sys_timers[] = {
Paul Mundtaa016662006-01-16 22:14:18 -080017#ifdef CONFIG_SH_TMU
18 &tmu_timer,
19#endif
Yoshinori Sato9d4436a2006-11-05 15:40:13 +090020#ifdef CONFIG_SH_MTU2
21 &mtu2_timer,
22#endif
23#ifdef CONFIG_SH_CMT
24 &cmt_timer,
25#endif
Paul Mundtaa016662006-01-16 22:14:18 -080026 NULL,
27};
28
Paul Mundtddd43b02007-05-23 12:24:32 +090029static char timer_override[10];
Paul Mundtaa016662006-01-16 22:14:18 -080030static 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}