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> | |
26dd3e4f PG |
11 | #include <linux/init.h> |
12 | #include <linux/export.h> | |
3f0a06b0 JC |
13 | #include <linux/clkdev.h> |
14 | #include <linux/clk.h> | |
15 | ||
16 | #include <asm/time.h> | |
17 | ||
18 | #include "common.h" | |
19 | ||
20 | struct clk { | |
21 | struct clk_lookup cl; | |
22 | unsigned long rate; | |
23 | }; | |
24 | ||
25 | void ralink_clk_add(const char *dev, unsigned long rate) | |
26 | { | |
27 | struct clk *clk = kzalloc(sizeof(struct clk), GFP_KERNEL); | |
28 | ||
29 | if (!clk) | |
f7777dcc | 30 | panic("failed to add clock"); |
3f0a06b0 JC |
31 | |
32 | clk->cl.dev_id = dev; | |
33 | clk->cl.clk = clk; | |
34 | ||
35 | clk->rate = rate; | |
36 | ||
37 | clkdev_add(&clk->cl); | |
38 | } | |
39 | ||
40 | /* | |
41 | * Linux clock API | |
42 | */ | |
43 | int clk_enable(struct clk *clk) | |
44 | { | |
45 | return 0; | |
46 | } | |
47 | EXPORT_SYMBOL_GPL(clk_enable); | |
48 | ||
49 | void clk_disable(struct clk *clk) | |
50 | { | |
51 | } | |
52 | EXPORT_SYMBOL_GPL(clk_disable); | |
53 | ||
54 | unsigned long clk_get_rate(struct clk *clk) | |
55 | { | |
56 | return clk->rate; | |
57 | } | |
58 | EXPORT_SYMBOL_GPL(clk_get_rate); | |
59 | ||
a8b62047 JC |
60 | int clk_set_rate(struct clk *clk, unsigned long rate) |
61 | { | |
62 | return -1; | |
63 | } | |
64 | EXPORT_SYMBOL_GPL(clk_set_rate); | |
65 | ||
80e6321a JC |
66 | long clk_round_rate(struct clk *clk, unsigned long rate) |
67 | { | |
68 | return -1; | |
69 | } | |
70 | EXPORT_SYMBOL_GPL(clk_round_rate); | |
71 | ||
3f0a06b0 JC |
72 | void __init plat_time_init(void) |
73 | { | |
74 | struct clk *clk; | |
75 | ||
76 | ralink_of_remap(); | |
77 | ||
78 | ralink_clk_init(); | |
79 | clk = clk_get_sys("cpu", NULL); | |
80 | if (IS_ERR(clk)) | |
81 | panic("unable to get CPU clock, err=%ld", PTR_ERR(clk)); | |
82 | pr_info("CPU Clock: %ldMHz\n", clk_get_rate(clk) / 1000000); | |
83 | mips_hpt_frequency = clk_get_rate(clk) / 2; | |
84 | clk_put(clk); | |
3722ed23 | 85 | clocksource_probe(); |
3f0a06b0 | 86 | } |