Commit | Line | Data |
---|---|---|
3f0a06b0 JC |
1 | /* |
2 | * This program is free software; you can redistribute it and/or modify it | |
3 | * under the terms of the GNU General Public License version 2 as published | |
4 | * by the Free Software Foundation. | |
5 | * | |
6 | * Copyright (C) 2011 Gabor Juhos <juhosg@openwrt.org> | |
97b92108 | 7 | * Copyright (C) 2013 John Crispin <john@phrozen.org> |
3f0a06b0 JC |
8 | */ |
9 | ||
10 | #include <linux/kernel.h> | |
11 | #include <linux/module.h> | |
12 | #include <linux/clkdev.h> | |
13 | #include <linux/clk.h> | |
14 | ||
15 | #include <asm/time.h> | |
16 | ||
17 | #include "common.h" | |
18 | ||
19 | struct clk { | |
20 | struct clk_lookup cl; | |
21 | unsigned long rate; | |
22 | }; | |
23 | ||
24 | void ralink_clk_add(const char *dev, unsigned long rate) | |
25 | { | |
26 | struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL); | |
27 | ||
28 | if (!clk) | |
f7777dcc | 29 | panic("failed to add clock"); |
3f0a06b0 JC |
30 | |
31 | clk->cl.dev_id = dev; | |
32 | clk->cl.clk = clk; | |
33 | ||
34 | clk->rate = rate; | |
35 | ||
36 | clkdev_add(&clk->cl); | |
37 | } | |
38 | ||
39 | /* | |
40 | * Linux clock API | |
41 | */ | |
42 | int clk_enable(struct clk *clk) | |
43 | { | |
44 | return 0; | |
45 | } | |
46 | EXPORT_SYMBOL_GPL(clk_enable); | |
47 | ||
48 | void clk_disable(struct clk *clk) | |
49 | { | |
50 | } | |
51 | EXPORT_SYMBOL_GPL(clk_disable); | |
52 | ||
53 | unsigned long clk_get_rate(struct clk *clk) | |
54 | { | |
55 | return clk->rate; | |
56 | } | |
57 | EXPORT_SYMBOL_GPL(clk_get_rate); | |
58 | ||
a8b62047 JC |
59 | int clk_set_rate(struct clk *clk, unsigned long rate) |
60 | { | |
61 | return -1; | |
62 | } | |
63 | EXPORT_SYMBOL_GPL(clk_set_rate); | |
64 | ||
3f0a06b0 JC |
65 | void __init plat_time_init(void) |
66 | { | |
67 | struct clk *clk; | |
68 | ||
69 | ralink_of_remap(); | |
70 | ||
71 | ralink_clk_init(); | |
72 | clk = clk_get_sys("cpu", NULL); | |
73 | if (IS_ERR(clk)) | |
74 | panic("unable to get CPU clock, err=%ld", PTR_ERR(clk)); | |
75 | pr_info("CPU Clock: %ldMHz\n", clk_get_rate(clk) / 1000000); | |
76 | mips_hpt_frequency = clk_get_rate(clk) / 2; | |
77 | clk_put(clk); | |
3722ed23 | 78 | clocksource_probe(); |
3f0a06b0 | 79 | } |