Commit | Line | Data |
---|---|---|
75f83d06 MF |
1 | #include <linux/clk.h> |
2 | #include <linux/err.h> | |
3 | #include <linux/of.h> | |
4 | #include <linux/slab.h> | |
3a84d17b | 5 | #include <linux/spinlock.h> |
41921c13 | 6 | #include "clk.h" |
3a84d17b SH |
7 | |
8 | DEFINE_SPINLOCK(imx_ccm_lock); | |
75f83d06 MF |
9 | |
10 | static struct clk * __init imx_obtain_fixed_clock_from_dt(const char *name) | |
11 | { | |
cc27cce2 | 12 | struct of_phandle_args phandle; |
75f83d06 MF |
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 | } |