Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / arch / sh / kernel / cpu / clock.c
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