timer.c 1.1 KB
Newer Older
P
Paul Mundt 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/*
 * arch/sh/kernel/timers/timer.c - Common timer code
 *
 *  Copyright (C) 2005  Paul Mundt
 *
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 */
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/timer.h>
#include <linux/string.h>
#include <asm/timer.h>

static struct sys_timer *sys_timers[] __initdata = {
#ifdef CONFIG_SH_TMU
	&tmu_timer,
19 20 21 22 23 24
#endif
#ifdef CONFIG_SH_MTU2
	&mtu2_timer,
#endif
#ifdef CONFIG_SH_CMT
	&cmt_timer,
P
Paul Mundt 已提交
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
#endif
	NULL,
};

static char timer_override[10] __initdata;
static int __init timer_setup(char *str)
{
	if (str)
		strlcpy(timer_override, str, sizeof(timer_override));
	return 1;
}
__setup("timer=", timer_setup);

struct sys_timer *get_sys_timer(void)
{
	int i;

	for (i = 0; i < ARRAY_SIZE(sys_timers); i++) {
		struct sys_timer *t = sys_timers[i];

		if (unlikely(!t))
			break;
		if (unlikely(timer_override[0]))
			if ((strcmp(timer_override, t->name) != 0))
				continue;
		if (likely(t->ops->init() == 0))
			return t;
	}

	return NULL;
}