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 19struct clk { 20 struct clk_lookup cl; 21 unsigned long rate; 22}; 23 24void 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 */ 42int clk_enable(struct clk *clk) 43{ 44 return 0; 45} 46EXPORT_SYMBOL_GPL(clk_enable); 47 48void clk_disable(struct clk *clk) 49{ 50} 51EXPORT_SYMBOL_GPL(clk_disable); 52 53unsigned long clk_get_rate(struct clk *clk) 54{ 55 return clk->rate; 56} 57EXPORT_SYMBOL_GPL(clk_get_rate); 58 59int clk_set_rate(struct clk *clk, unsigned long rate) 60{ 61 return -1; 62} 63EXPORT_SYMBOL_GPL(clk_set_rate); 64 65void __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_of_init(); 79} 80