]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
[ARM] MXC: rework timer/clock initialisation
authorSascha Hauer <s.hauer@pengutronix.de>
Mon, 16 Feb 2009 13:36:49 +0000 (14:36 +0100)
committerSascha Hauer <s.hauer@pengutronix.de>
Fri, 13 Mar 2009 09:33:47 +0000 (10:33 +0100)
- rename mxc_clocks_init to architecture specific versions. This
  allows us to have more than one architecture compiled in.
- call mxc_timer_init from clock initialisation instead from board
  code

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
13 files changed:
arch/arm/mach-mx1/clock.c
arch/arm/mach-mx1/mx1ads.c
arch/arm/mach-mx2/clock_imx27.c
arch/arm/mach-mx2/mx27ads.c
arch/arm/mach-mx2/pcm038.c
arch/arm/mach-mx3/clock.c
arch/arm/mach-mx3/mx31ads.c
arch/arm/mach-mx3/mx31lite.c
arch/arm/mach-mx3/mx31moboard.c
arch/arm/mach-mx3/mx31pdk.c
arch/arm/mach-mx3/pcm037.c
arch/arm/plat-mxc/include/mach/common.h
arch/arm/plat-mxc/time.c

index 3c464331b8704940bedd32e2b6cc2f11bc0d537b..40a2274380a3fe71d80dc9db6511f4fbff3381fd 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <mach/clock.h>
 #include <mach/hardware.h>
+#include <mach/common.h>
 #include "crm_regs.h"
 
 static int _clk_enable(struct clk *clk)
@@ -594,7 +595,7 @@ static struct clk *mxc_clks[] = {
        &rtc_clk,
 };
 
-int __init mxc_clocks_init(unsigned long fref)
+int __init mx1_clocks_init(unsigned long fref)
 {
        struct clk **clkp;
        unsigned int reg;
@@ -625,5 +626,7 @@ int __init mxc_clocks_init(unsigned long fref)
        clk_enable(&hclk);
        clk_enable(&fclk);
 
+       mxc_timer_init(&gpt_clk);
+
        return 0;
 }
index be7dd75ebbe197dd5904485de705b234ddf3f6c2..09dc77bb48122e22009a924cfa516c1bb8730ee1 100644 (file)
@@ -118,8 +118,7 @@ static void __init mx1ads_init(void)
 
 static void __init mx1ads_timer_init(void)
 {
-       mxc_clocks_init(32000);
-       mxc_timer_init("gpt_clk");
+       mx1_clocks_init(32000);
 }
 
 struct sys_timer mx1ads_timer = {
index 047e71e6ea9aab743a381b137b0ff213870511d0..7b2c1122d9ab245a71016329042f290d4494f0f3 100644 (file)
@@ -1551,7 +1551,7 @@ static void __init probe_mxc_clocks(void)
  * must be called very early to get information about the
  * available clock rate when the timer framework starts
  */
-int __init mxc_clocks_init(unsigned long fref)
+int __init mx27_clocks_init(unsigned long fref)
 {
        u32 cscr;
        struct clk **clkp;
@@ -1593,5 +1593,8 @@ int __init mxc_clocks_init(unsigned long fref)
 #ifdef CONFIG_DEBUG_LL_CONSOLE
        clk_enable(&uart1_clk[0]);
 #endif
+
+       mxc_timer_init(&gpt1_clk[0]);
+
        return 0;
 }
index 7721c470d5ab8650ab33658477e2e96d38e16827..536bf64bc7c8ddf6c7ca58428617b05e029d6d53 100644 (file)
@@ -263,8 +263,7 @@ static void __init mx27ads_timer_init(void)
        if ((__raw_readw(PBC_VERSION_REG) & CKIH_27MHZ_BIT_SET) == 0)
                fref = 27000000;
 
-       mxc_clocks_init(fref);
-       mxc_timer_init("gpt_clk.0");
+       mx27_clocks_init(fref);
 }
 
 struct sys_timer mx27ads_timer = {
index 534fd9a4ff9f1c9645f9ab79112f5566fffad011..63cdef8565db7173b4f37ba5ca2febb26065a337 100644 (file)
@@ -230,8 +230,7 @@ static void __init pcm038_init(void)
 
 static void __init pcm038_timer_init(void)
 {
-       mxc_clocks_init(26000000);
-       mxc_timer_init("gpt_clk.0");
+       mx27_clocks_init(26000000);
 }
 
 struct sys_timer pcm038_timer = {
index 8486ea46d6c19808a0e2b6c4cbab8512f5504f3e..8b41facb391b8acc576f22bed9252e50846bebeb 100644 (file)
@@ -25,6 +25,7 @@
 #include <linux/io.h>
 #include <mach/clock.h>
 #include <mach/hardware.h>
+#include <mach/common.h>
 #include <asm/div64.h>
 
 #include "crm_regs.h"
@@ -1071,7 +1072,7 @@ static struct clk *mxc_clks[] = {
        &iim_clk,
 };
 
-int __init mxc_clocks_init(unsigned long fref)
+int __init mx31_clocks_init(unsigned long fref)
 {
        u32 reg;
        struct clk **clkp;
@@ -1121,6 +1122,8 @@ int __init mxc_clocks_init(unsigned long fref)
                __raw_writel(reg, MXC_CCM_PMCR1);
        }
 
+       mxc_timer_init(&ipg_clk);
+
        return 0;
 }
 
index f902a7c37c31d6a6519d58b4559d9f87364799c0..f913999eedf00f2d600678cea40411c1487d4135 100644 (file)
@@ -244,8 +244,7 @@ static void __init mxc_board_init(void)
 
 static void __init mx31ads_timer_init(void)
 {
-       mxc_clocks_init(26000000);
-       mxc_timer_init("ipg_clk.0");
+       mx31_clocks_init(26000000);
 }
 
 struct sys_timer mx31ads_timer = {
index c434400701430ca1603eaecbec32071be2ce22fa..e61fad2f60f363bf63bcc2c80f71202e36556aa3 100644 (file)
@@ -82,8 +82,7 @@ static void __init mxc_board_init(void)
 
 static void __init mx31lite_timer_init(void)
 {
-       mxc_clocks_init(26000000);
-       mxc_timer_init("ipg_clk.0");
+       mx31_clocks_init(26000000);
 }
 
 struct sys_timer mx31lite_timer = {
index c29098af7394d7d6c7f5f537cb24b9ec2c70d2b8..3d2773e4bc8156ede18e9e6fffedd0ddf5cd1f6a 100644 (file)
@@ -120,8 +120,7 @@ void __init mx31moboard_map_io(void)
 
 static void __init mx31moboard_timer_init(void)
 {
-       mxc_clocks_init(26000000);
-       mxc_timer_init("ipg_clk.0");
+       mx31_clocks_init(26000000);
 }
 
 struct sys_timer mx31moboard_timer = {
index d464d068a4a606386707226cd2f4c8e89c1cf28d..ac427edb4db142fbe49cc1d2f33047045635b75d 100644 (file)
@@ -91,8 +91,7 @@ static void __init mxc_board_init(void)
 
 static void __init mx31pdk_timer_init(void)
 {
-       mxc_clocks_init(26000000);
-       mxc_timer_init("ipg_clk.0");
+       mx31_clocks_init(26000000);
 }
 
 static struct sys_timer mx31pdk_timer = {
index 8cea825872221a3efd0b8f15e56a729a5764430a..3b5ba551cb146bd93136a248ba4ad43e89636278 100644 (file)
@@ -181,8 +181,7 @@ void __init pcm037_map_io(void)
 
 static void __init pcm037_timer_init(void)
 {
-       mxc_clocks_init(26000000);
-       mxc_timer_init("ipg_clk.0");
+       mx31_clocks_init(26000000);
 }
 
 struct sys_timer pcm037_timer = {
index 6350287a59b9089acde56fe2cd535c1625773eea..2c08b8e14e395feea0fa8e4fa861b00b32f81ba7 100644 (file)
 #define __ASM_ARCH_MXC_COMMON_H__
 
 struct platform_device;
+struct clk;
 
 extern void mxc_map_io(void);
 extern void mxc_init_irq(void);
-extern void mxc_timer_init(const char *clk_timer);
-extern int mxc_clocks_init(unsigned long fref);
+extern void mxc_timer_init(struct clk *timer_clk);
+extern int mx1_clocks_init(unsigned long fref);
+extern int mx27_clocks_init(unsigned long fref);
+extern int mx31_clocks_init(unsigned long fref);
 extern int mxc_register_gpios(void);
 extern int mxc_register_device(struct platform_device *pdev, void *data);
 
index 758a1293bcfaaefa2be4191f030eb74b8dcc0ce8..eb93fd1789db63aefd765130e5caa0646077cb84 100644 (file)
@@ -34,9 +34,6 @@
 static struct clock_event_device clockevent_mxc;
 static enum clock_event_mode clockevent_mode = CLOCK_EVT_MODE_UNUSED;
 
-/* clock source for the timer */
-static struct clk *timer_clk;
-
 /* clock source */
 
 static cycle_t mxc_get_cycles(void)
@@ -53,7 +50,7 @@ static struct clocksource clocksource_mxc = {
        .flags          = CLOCK_SOURCE_IS_CONTINUOUS,
 };
 
-static int __init mxc_clocksource_init(void)
+static int __init mxc_clocksource_init(struct clk *timer_clk)
 {
        unsigned int clock;
 
@@ -177,7 +174,7 @@ static struct clock_event_device clockevent_mxc = {
        .rating         = 200,
 };
 
-static int __init mxc_clockevent_init(void)
+static int __init mxc_clockevent_init(struct clk *timer_clk)
 {
        unsigned int clock;
 
@@ -197,14 +194,8 @@ static int __init mxc_clockevent_init(void)
        return 0;
 }
 
-void __init mxc_timer_init(const char *clk_timer)
+void __init mxc_timer_init(struct clk *timer_clk)
 {
-       timer_clk = clk_get(NULL, clk_timer);
-       if (!timer_clk) {
-               printk(KERN_ERR"Cannot determine timer clock. Giving up.\n");
-               return;
-       }
-
        clk_enable(timer_clk);
 
        /*
@@ -219,10 +210,9 @@ void __init mxc_timer_init(const char *clk_timer)
                     TIMER_BASE + MXC_TCTL);
 
        /* init and register the timer to the framework */
-       mxc_clocksource_init();
-       mxc_clockevent_init();
+       mxc_clocksource_init(timer_clk);
+       mxc_clockevent_init(timer_clk);
 
        /* Make irqs happen */
        setup_irq(TIMER_INTERRUPT, &mxc_timer_irq);
 }
-