-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ARM: i.MX5: Allow DT clock providers
Currently clock providers defined in the DT are not registered on i.MX5 platforms since of_clk_init() is not called. This is not a problem for the SOC's own clocks, which are registered in code, but prevents the DT being used to define clocks for external hardware. Fix this by calling of_clk_init() and actually using the DT to obtain the 4 SOC fixed clocks. These are already defined in the DT but were previously just used to manually obtain the rate. Fall back to the old scheme for non DT platforms. Since the same method may be useful for other i.MX platforms implement the imx_obtain_fixed_clock() function in common code. Actually changing other i.MX platforms to use this should be done later by someone with access to the appropriate hardware. Signed-off-by: Martin Fuzzey <mfuzzey@parkeon.com> Tested-by: Fabio Estevam <fabio.estevam@freescale.com> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
- Loading branch information
Martin Fuzzey
authored and
Shawn Guo
committed
Jun 17, 2013
1 parent
7d13205
commit 75f83d0
Showing
3 changed files
with
46 additions
and
36 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,39 @@ | ||
#include <linux/clk.h> | ||
#include <linux/err.h> | ||
#include <linux/of.h> | ||
#include <linux/slab.h> | ||
#include <linux/spinlock.h> | ||
#include "clk.h" | ||
|
||
DEFINE_SPINLOCK(imx_ccm_lock); | ||
|
||
static struct clk * __init imx_obtain_fixed_clock_from_dt(const char *name) | ||
{ | ||
struct of_phandle_args phandle = {0}; | ||
struct clk *clk = ERR_PTR(-ENODEV); | ||
char *path; | ||
|
||
path = kasprintf(GFP_KERNEL, "/clocks/%s", name); | ||
if (!path) | ||
return ERR_PTR(-ENOMEM); | ||
|
||
phandle.np = of_find_node_by_path(path); | ||
kfree(path); | ||
|
||
if (phandle.np) { | ||
clk = of_clk_get_from_provider(&phandle); | ||
of_node_put(phandle.np); | ||
} | ||
return clk; | ||
} | ||
|
||
struct clk * __init imx_obtain_fixed_clock( | ||
const char *name, unsigned long rate) | ||
{ | ||
struct clk *clk; | ||
|
||
clk = imx_obtain_fixed_clock_from_dt(name); | ||
if (IS_ERR(clk)) | ||
clk = imx_clk_fixed(name, rate); | ||
return clk; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters