Commit | Line | Data |
---|---|---|
940f6b48 RB |
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 | */ | |
e6a1bb72 RB |
8 | #include <linux/clocksource.h> |
9 | #include <linux/init.h> | |
10 | ||
11 | #include <asm/time.h> | |
940f6b48 RB |
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 | ||
69e634f1 | 25 | int __init init_mips_clocksource(void) |
940f6b48 | 26 | { |
69e634f1 RB |
27 | if (!cpu_has_counter || !mips_hpt_frequency) |
28 | return -ENXIO; | |
29 | ||
664c4bbb | 30 | /* Calculate a somewhat reasonable rating value */ |
940f6b48 RB |
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); | |
69e634f1 RB |
36 | |
37 | return 0; | |
940f6b48 | 38 | } |