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