xref: /linux/arch/sh/kernel/cpu/clock.c (revision e5c86679d5e864947a52fb31e45a425dea3e7fa9)
1 /*
2  * arch/sh/kernel/cpu/clock.c - SuperH clock framework
3  *
4  *  Copyright (C) 2005 - 2009  Paul Mundt
5  *
6  * This clock framework is derived from the OMAP version by:
7  *
8  *	Copyright (C) 2004 - 2008 Nokia Corporation
9  *	Written by Tuukka Tikkanen <tuukka.tikkanen@elektrobit.com>
10  *
11  *  Modified for omap shared clock framework by Tony Lindgren <tony@atomide.com>
12  *
13  * This file is subject to the terms and conditions of the GNU General Public
14  * License.  See the file "COPYING" in the main directory of this archive
15  * for more details.
16  */
17 #include <linux/kernel.h>
18 #include <linux/init.h>
19 #include <linux/clk.h>
20 #include <asm/clock.h>
21 #include <asm/machvec.h>
22 
23 int __init clk_init(void)
24 {
25 	int ret;
26 
27 #ifndef CONFIG_COMMON_CLK
28 	ret = arch_clk_init();
29 	if (unlikely(ret)) {
30 		pr_err("%s: CPU clock registration failed.\n", __func__);
31 		return ret;
32 	}
33 #endif
34 
35 	if (sh_mv.mv_clk_init) {
36 		ret = sh_mv.mv_clk_init();
37 		if (unlikely(ret)) {
38 			pr_err("%s: machvec clock initialization failed.\n",
39 			       __func__);
40 			return ret;
41 		}
42 	}
43 
44 #ifndef CONFIG_COMMON_CLK
45 	/* Kick the child clocks.. */
46 	recalculate_root_clocks();
47 
48 	/* Enable the necessary init clocks */
49 	clk_enable_init_clocks();
50 #endif
51 
52 	return ret;
53 }
54 
55 
56