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]; timer_setup(char * str)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 get_sys_timer(void)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