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> 7 * Copyright (C) 2013 John Crispin <blogic@openwrt.org> 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) 29 panic("failed to add clock"); 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 59 int clk_set_rate(struct clk *clk, unsigned long rate) 60 { 61 return -1; 62 } 63 EXPORT_SYMBOL_GPL(clk_set_rate); 64 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); 78 clocksource_probe(); 79 } 80