diff options
Diffstat (limited to 'arch/arm/mach-imx/clk.c')
-rw-r--r-- | arch/arm/mach-imx/clk.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/arch/arm/mach-imx/clk.c b/arch/arm/mach-imx/clk.c index 37e884ed1cd4..53e8788b0d0f 100644 --- a/arch/arm/mach-imx/clk.c +++ b/arch/arm/mach-imx/clk.c | |||
@@ -1,4 +1,39 @@ | |||
1 | #include <linux/clk.h> | ||
2 | #include <linux/err.h> | ||
3 | #include <linux/of.h> | ||
4 | #include <linux/slab.h> | ||
1 | #include <linux/spinlock.h> | 5 | #include <linux/spinlock.h> |
2 | #include "clk.h" | 6 | #include "clk.h" |
3 | 7 | ||
4 | DEFINE_SPINLOCK(imx_ccm_lock); | 8 | DEFINE_SPINLOCK(imx_ccm_lock); |
9 | |||
10 | static struct clk * __init imx_obtain_fixed_clock_from_dt(const char *name) | ||
11 | { | ||
12 | struct of_phandle_args phandle = {0}; | ||
13 | struct clk *clk = ERR_PTR(-ENODEV); | ||
14 | char *path; | ||
15 | |||
16 | path = kasprintf(GFP_KERNEL, "/clocks/%s", name); | ||
17 | if (!path) | ||
18 | return ERR_PTR(-ENOMEM); | ||
19 | |||
20 | phandle.np = of_find_node_by_path(path); | ||
21 | kfree(path); | ||
22 | |||
23 | if (phandle.np) { | ||
24 | clk = of_clk_get_from_provider(&phandle); | ||
25 | of_node_put(phandle.np); | ||
26 | } | ||
27 | return clk; | ||
28 | } | ||
29 | |||
30 | struct clk * __init imx_obtain_fixed_clock( | ||
31 | const char *name, unsigned long rate) | ||
32 | { | ||
33 | struct clk *clk; | ||
34 | |||
35 | clk = imx_obtain_fixed_clock_from_dt(name); | ||
36 | if (IS_ERR(clk)) | ||
37 | clk = imx_clk_fixed(name, rate); | ||
38 | return clk; | ||
39 | } | ||