ARM: mxs: use CLKSRC_OF helper to initialize timer
authorShawn Guo <shawn.guo@linaro.org>
Mon, 25 Mar 2013 06:53:08 +0000 (14:53 +0800)
committerShawn Guo <shawn.guo@linaro.org>
Mon, 1 Apr 2013 08:30:01 +0000 (16:30 +0800)
Select CLKSRC_OF and use clocksource_of_init() to initialize timer, so
that the call to mxs_timer_init() in clock driver can be removed.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
arch/arm/Kconfig
arch/arm/mach-mxs/include/mach/common.h
arch/arm/mach-mxs/mach-mxs.c
arch/arm/mach-mxs/timer.c
drivers/clk/mxs/clk-imx23.c
drivers/clk/mxs/clk-imx28.c

index 865c25ded153557c07a0f591b70f6e34cf69d241..5a1f0c9e0ab0b8014a2baa4188bca5b5454c0119 100644 (file)
@@ -473,6 +473,7 @@ config ARCH_MXS
        select ARCH_REQUIRE_GPIOLIB
        select CLKDEV_LOOKUP
        select CLKSRC_MMIO
+       select CLKSRC_OF
        select COMMON_CLK
        select GENERIC_CLOCKEVENTS
        select HAVE_CLK_PREPARE
index be5a9c93cb2a849fa9c5f6f99d8637b140997d02..e043c4735b5a1f4da931046ca025a941de6b4c60 100644 (file)
@@ -13,7 +13,6 @@
 
 extern const u32 *mxs_get_ocotp(void);
 extern int mxs_reset_block(void __iomem *);
-extern void mxs_timer_init(void);
 extern void mxs_restart(char, const char *);
 extern int mxs_saif_clkmux_select(unsigned int clkmux);
 
index e7b781d3788f2c9a9e896ef75b502f789fd15d64..c1c0fb414c2883ad60ddd0a41d3cb4745bda92e2 100644 (file)
@@ -12,6 +12,7 @@
 
 #include <linux/clk.h>
 #include <linux/clkdev.h>
+#include <linux/clocksource.h>
 #include <linux/can/platform/flexcan.h>
 #include <linux/delay.h>
 #include <linux/err.h>
@@ -168,11 +169,13 @@ static struct of_dev_auxdata mxs_auxdata_lookup[] __initdata = {
 static void __init imx23_timer_init(void)
 {
        mx23_clocks_init();
+       clocksource_of_init();
 }
 
 static void __init imx28_timer_init(void)
 {
        mx28_clocks_init();
+       clocksource_of_init();
 }
 
 enum mac_oui {
index 421020498a1b3a01d6f5cb761d25169ffcb294dd..fe2903d7939aeb767b2e624a5c1387a3571ff94c 100644 (file)
@@ -242,18 +242,11 @@ static int __init mxs_clocksource_init(struct clk *timer_clk)
        return 0;
 }
 
-void __init mxs_timer_init(void)
+static void __init mxs_timer_init(struct device_node *np)
 {
-       struct device_node *np;
        struct clk *timer_clk;
        int irq;
 
-       np = of_find_compatible_node(NULL, NULL, "fsl,timrot");
-       if (!np) {
-               pr_err("%s: failed find timrot node\n", __func__);
-               return;
-       }
-
        timer_clk = clk_get_sys("timrot", NULL);
        if (IS_ERR(timer_clk)) {
                pr_err("%s: failed to get clk\n", __func__);
@@ -304,3 +297,4 @@ void __init mxs_timer_init(void)
        irq = irq_of_parse_and_map(np, 0);
        setup_irq(irq, &mxs_timer_irq);
 }
+CLOCKSOURCE_OF_DECLARE(mxs, "fsl,timrot", mxs_timer_init)
index b5c06f9766f610439954d7f55489e4e7750cf726..291cc44713f49f307f38ce633d34a5b9101f92d0 100644 (file)
@@ -15,7 +15,6 @@
 #include <linux/init.h>
 #include <linux/io.h>
 #include <linux/of.h>
-#include <mach/common.h>
 #include <mach/mx23.h>
 #include "clk.h"
 
@@ -165,7 +164,5 @@ int __init mx23_clocks_init(void)
        for (i = 0; i < ARRAY_SIZE(clks_init_on); i++)
                clk_prepare_enable(clks[clks_init_on[i]]);
 
-       mxs_timer_init();
-
        return 0;
 }
index 76ce6c6d1113dc4e9a9451ff96da6166442da308..d861bfd8c5378c45428829933a08ac42750336a7 100644 (file)
@@ -15,7 +15,6 @@
 #include <linux/init.h>
 #include <linux/io.h>
 #include <linux/of.h>
-#include <mach/common.h>
 #include <mach/mx28.h>
 #include "clk.h"
 
@@ -244,7 +243,5 @@ int __init mx28_clocks_init(void)
        for (i = 0; i < ARRAY_SIZE(clks_init_on); i++)
                clk_prepare_enable(clks[clks_init_on[i]]);
 
-       mxs_timer_init();
-
        return 0;
 }