diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2012-10-04 15:24:27 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2012-10-04 15:24:57 +0200 |
commit | 94de405d8f56aa66283d7497c707380762440601 (patch) | |
tree | ef6618eb4604ff3cbc69af90d9ec6feb4db5e771 /arch/arm/mach-imx/clocksource.c | |
parent | ddba7e606bc7a6b3715d6c123c0a9b708a6b8776 (diff) | |
parent | d4edd480b2ab0754361b142e307796405310d34b (diff) | |
download | barebox-94de405d8f56aa66283d7497c707380762440601.tar.gz barebox-94de405d8f56aa66283d7497c707380762440601.tar.xz |
Merge branch 'for-next/imx-clk'
Diffstat (limited to 'arch/arm/mach-imx/clocksource.c')
-rw-r--r-- | arch/arm/mach-imx/clocksource.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/arch/arm/mach-imx/clocksource.c b/arch/arm/mach-imx/clocksource.c index bd41e75888..5fa6201174 100644 --- a/arch/arm/mach-imx/clocksource.c +++ b/arch/arm/mach-imx/clocksource.c @@ -29,9 +29,10 @@ #include <init.h> #include <clock.h> #include <errno.h> +#include <linux/clk.h> +#include <linux/err.h> #include <notifier.h> #include <mach/imx-regs.h> -#include <mach/clock.h> #include <io.h> /* Part 1: Registers */ @@ -46,6 +47,8 @@ #define IMX31_TCTL_CLKSOURCE_IPG (1 << 6) /* Clock source bit position */ #define TCTL_TEN (1 << 0) /* Timer enable */ +static struct clk *clk_gpt; + struct imx_gpt_regs { unsigned int tcn; uint32_t tctl_val; @@ -77,7 +80,7 @@ static struct clocksource cs = { static int imx_clocksource_clock_change(struct notifier_block *nb, unsigned long event, void *data) { - cs.mult = clocksource_hz2mult(imx_get_gptclk(), cs.shift); + cs.mult = clocksource_hz2mult(clk_get_rate(clk_gpt), cs.shift); return 0; } @@ -89,6 +92,7 @@ static int imx_gpt_probe(struct device_d *dev) { int i; int ret; + unsigned long rate; /* one timer is enough */ if (timer_base) @@ -118,10 +122,18 @@ static int imx_gpt_probe(struct device_d *dev) for (i = 0; i < 100; i++) writel(0, timer_base + GPT_TCTL); /* We have no udelay by now */ + clk_gpt = clk_get(dev, NULL); + if (IS_ERR(clk_gpt)) { + rate = 20000000; + dev_err(dev, "failed to get clock\n"); + } else { + rate = clk_get_rate(clk_gpt); + } + writel(0, timer_base + GPT_TPRER); writel(regs->tctl_val, timer_base + GPT_TCTL); - cs.mult = clocksource_hz2mult(imx_get_gptclk(), cs.shift); + cs.mult = clocksource_hz2mult(rate, cs.shift); init_clock(&cs); |