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