[PATCH 17/23] ARM i.MX: Switch clocksource to clk_get
Sascha Hauer
s.hauer at pengutronix.de
Mon Sep 24 07:04:46 EDT 2012
Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
arch/arm/mach-imx/clocksource.c | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/arch/arm/mach-imx/clocksource.c b/arch/arm/mach-imx/clocksource.c
index 2c6f6a0..df018e6 100644
--- a/arch/arm/mach-imx/clocksource.c
+++ b/arch/arm/mach-imx/clocksource.c
@@ -29,6 +29,8 @@
#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>
@@ -46,6 +48,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 +81,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 +93,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 +123,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);
--
1.7.10.4
More information about the barebox
mailing list