]> git.karo-electronics.de Git - linux-beck.git/commitdiff
clocksource: samsung_pwm_timer: Do not use clocksource_mmio
authorTomasz Figa <tomasz.figa@gmail.com>
Sun, 16 Jun 2013 22:13:06 +0000 (00:13 +0200)
committerTomasz Figa <tomasz.figa@gmail.com>
Mon, 5 Aug 2013 23:21:43 +0000 (01:21 +0200)
In case of Samsung PWM timer, clocksource MMIO can not be used, because
custom suspend/resume callbacks are required.

Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com>
Reviewed-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Reviewed-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Tested-by: Heiko Stuebner <heiko@sntech.de>
Tested-by: Mark Brown <broonie@linaro.org>
Tested-by: Sylwester Nawrocki <sylvester.nawrocki@gmail.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
drivers/clocksource/Kconfig
drivers/clocksource/samsung_pwm_timer.c

index b7b9b040a89ba807e36062c2029feedfceee8016..41c69469ce2000ec223170970c856a2287f10db2 100644 (file)
@@ -99,7 +99,6 @@ config CLKSRC_EXYNOS_MCT
 
 config CLKSRC_SAMSUNG_PWM
        bool
-       select CLKSRC_MMIO
        help
          This is a new clocksource driver for the PWM timer found in
          Samsung S3C, S5P and Exynos SoCs, replacing an earlier driver
index 0c005f4fa2969ed9b2cbd265f3e7464402ce9cf4..b3112dc293bab741da572f9a331260f21b5374da 100644 (file)
@@ -298,6 +298,18 @@ static void __init samsung_clockevent_init(void)
        }
 }
 
+static cycle_t samsung_clocksource_read(struct clocksource *c)
+{
+       return ~readl_relaxed(pwm.source_reg);
+}
+
+static struct clocksource samsung_clocksource = {
+       .name           = "samsung_clocksource_timer",
+       .rating         = 250,
+       .read           = samsung_clocksource_read,
+       .flags          = CLOCK_SOURCE_IS_CONTINUOUS,
+};
+
 /*
  * Override the global weak sched_clock symbol with this
  * local implementation which uses the clocksource to get some
@@ -307,7 +319,7 @@ static void __init samsung_clockevent_init(void)
  */
 static u32 notrace samsung_read_sched_clock(void)
 {
-       return ~__raw_readl(pwm.source_reg);
+       return samsung_clocksource_read(NULL);
 }
 
 static void __init samsung_clocksource_init(void)
@@ -334,9 +346,8 @@ static void __init samsung_clocksource_init(void)
        setup_sched_clock(samsung_read_sched_clock,
                                                pwm.variant.bits, clock_rate);
 
-       ret = clocksource_mmio_init(pwm.source_reg, "samsung_clocksource_timer",
-                                       clock_rate, 250, pwm.variant.bits,
-                                       clocksource_mmio_readl_down);
+       samsung_clocksource.mask = CLOCKSOURCE_MASK(pwm.variant.bits);
+       ret = clocksource_register_hz(&samsung_clocksource, clock_rate);
        if (ret)
                panic("samsung_clocksource_timer: can't register clocksource\n");
 }