| Ralf Baechle | 940f6b4 | 2007-11-24 22:33:28 +0000 | [diff] [blame] | 1 | /* | 
 | 2 |  * This file is subject to the terms and conditions of the GNU General Public | 
 | 3 |  * License.  See the file "COPYING" in the main directory of this archive | 
 | 4 |  * for more details. | 
 | 5 |  * | 
 | 6 |  * Copyright (C) 2007 by Ralf Baechle | 
 | 7 |  */ | 
| Ralf Baechle | e6a1bb7 | 2007-11-28 15:07:42 +0000 | [diff] [blame] | 8 | #include <linux/clocksource.h> | 
 | 9 | #include <linux/init.h> | 
 | 10 |  | 
 | 11 | #include <asm/time.h> | 
| Ralf Baechle | 940f6b4 | 2007-11-24 22:33:28 +0000 | [diff] [blame] | 12 |  | 
 | 13 | static cycle_t c0_hpt_read(void) | 
 | 14 | { | 
 | 15 | 	return read_c0_count(); | 
 | 16 | } | 
 | 17 |  | 
 | 18 | static struct clocksource clocksource_mips = { | 
 | 19 | 	.name		= "MIPS", | 
 | 20 | 	.read		= c0_hpt_read, | 
 | 21 | 	.mask		= CLOCKSOURCE_MASK(32), | 
 | 22 | 	.flags		= CLOCK_SOURCE_IS_CONTINUOUS, | 
 | 23 | }; | 
 | 24 |  | 
| Ralf Baechle | 69e634f | 2008-03-12 13:58:10 +0000 | [diff] [blame] | 25 | int __init init_mips_clocksource(void) | 
| Ralf Baechle | 940f6b4 | 2007-11-24 22:33:28 +0000 | [diff] [blame] | 26 | { | 
| Ralf Baechle | 69e634f | 2008-03-12 13:58:10 +0000 | [diff] [blame] | 27 | 	if (!cpu_has_counter || !mips_hpt_frequency) | 
 | 28 | 		return -ENXIO; | 
 | 29 |  | 
| Ralf Baechle | 940f6b4 | 2007-11-24 22:33:28 +0000 | [diff] [blame] | 30 | 	/* Calclate a somewhat reasonable rating value */ | 
 | 31 | 	clocksource_mips.rating = 200 + mips_hpt_frequency / 10000000; | 
 | 32 |  | 
 | 33 | 	clocksource_set_clock(&clocksource_mips, mips_hpt_frequency); | 
 | 34 |  | 
 | 35 | 	clocksource_register(&clocksource_mips); | 
| Ralf Baechle | 69e634f | 2008-03-12 13:58:10 +0000 | [diff] [blame] | 36 |  | 
 | 37 | 	return 0; | 
| Ralf Baechle | 940f6b4 | 2007-11-24 22:33:28 +0000 | [diff] [blame] | 38 | } |