clocksource: samsung_pwm_timer: Add support for non-DT platforms
authorTomasz Figa <t.figa@samsung.com>
Tue, 23 Apr 2013 15:46:27 +0000 (17:46 +0200)
committerOlof Johansson <olof@lixom.net>
Sun, 28 Apr 2013 19:16:54 +0000 (12:16 -0700)
This patch extends the driver to support platforms that still use legacy
ATAGS-based boot, without device tree, by providing an exported function
that can be used from platform code to initialize the clocksource.

Signed-off-by: Tomasz Figa <t.figa@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Kukjin Kim <kgene.kim@samsung.com>
Signed-off-by: Olof Johansson <olof@lixom.net>
drivers/clocksource/Kconfig
drivers/clocksource/samsung_pwm_timer.c
include/clocksource/samsung_pwm.h

index ff5b6d87d65a2e486b2af7edaf544f74f685cb27..6d6174978f95edfb95bbda0b205ac15a7d7ab364 100644 (file)
@@ -70,7 +70,6 @@ config CLKSRC_METAG_GENERIC
 
 config CLKSRC_SAMSUNG_PWM
        bool
-       depends on OF
        select CLKSRC_MMIO
        help
          This is a new clocksource driver for the PWM timer found in
index e3257fae04e62530577386960e557efdf7514490..9f4bd6aa234369b70c435b4cec873892a5904d49 100644 (file)
@@ -356,7 +356,7 @@ static void __init samsung_timer_resources(void)
 /*
  * PWM master driver
  */
-static void __init samsung_pwm_clocksource_init(void)
+static void __init _samsung_pwm_clocksource_init(void)
 {
        u8 mask;
        int channel;
@@ -378,6 +378,17 @@ static void __init samsung_pwm_clocksource_init(void)
        samsung_clocksource_init();
 }
 
+void __init samsung_pwm_clocksource_init(void __iomem *base,
+                       unsigned int *irqs, struct samsung_pwm_variant *variant)
+{
+       pwm.base = base;
+       memcpy(&pwm.variant, variant, sizeof(pwm.variant));
+       memcpy(pwm.irq, irqs, SAMSUNG_PWM_NUM * sizeof(*irqs));
+
+       _samsung_pwm_clocksource_init();
+}
+
+#ifdef CONFIG_CLKSRC_OF
 static void __init samsung_pwm_alloc(struct device_node *np,
                                     const struct samsung_pwm_variant *variant)
 {
@@ -414,7 +425,7 @@ static void __init samsung_pwm_alloc(struct device_node *np,
                return;
        }
 
-       samsung_pwm_clocksource_init();
+       _samsung_pwm_clocksource_init();
 }
 
 static const struct samsung_pwm_variant s3c24xx_variant = {
@@ -468,3 +479,4 @@ static void __init s5p_pwm_clocksource_init(struct device_node *np)
        samsung_pwm_alloc(np, &s5p_variant);
 }
 CLOCKSOURCE_OF_DECLARE(s5pc100_pwm, "samsung,s5pc100-pwm", s5p_pwm_clocksource_init);
+#endif
index b1d8fe706f1ae1190c915454385a5b11df8e6c71..5c449c8199e9dcb7d867101a48ba72017e2d69bd 100644 (file)
@@ -30,4 +30,7 @@ struct samsung_pwm_variant {
        bool has_tint_cstat;
 };
 
+void samsung_pwm_clocksource_init(void __iomem *base,
+               unsigned int *irqs, struct samsung_pwm_variant *variant);
+
 #endif /* __CLOCKSOURCE_SAMSUNG_PWM_H */