clocksource: samsung_pwm_timer: Cache clocksource register address
authorTomasz Figa <tomasz.figa@gmail.com>
Sun, 16 Jun 2013 22:07:03 +0000 (00:07 +0200)
committerTomasz Figa <tomasz.figa@gmail.com>
Mon, 5 Aug 2013 23:21:42 +0000 (01:21 +0200)
Instead of calculating register every time the timer should be read,
we can just do it one time at initialization and store the address in
driver data.

Signed-off-by: Tomasz Figa <tomasz.figa@gmail.com>
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/samsung_pwm_timer.c

index 5d0049f07af42ea962b24ce0e28ced65653db0ae..0c005f4fa2969ed9b2cbd265f3e7464402ce9cf4 100644 (file)
@@ -65,6 +65,7 @@ EXPORT_SYMBOL(samsung_pwm_lock);
 
 struct samsung_pwm_clocksource {
        void __iomem *base;
+       void __iomem *source_reg;
        unsigned int irq[SAMSUNG_PWM_NUM];
        struct samsung_pwm_variant variant;
 
@@ -297,23 +298,6 @@ static void __init samsung_clockevent_init(void)
        }
 }
 
-static void __iomem *samsung_timer_reg(void)
-{
-       switch (pwm.source_id) {
-       case 0:
-       case 1:
-       case 2:
-       case 3:
-               return pwm.base + pwm.source_id * 0x0c + 0x14;
-
-       case 4:
-               return pwm.base + 0x40;
-
-       default:
-               BUG();
-       }
-}
-
 /*
  * Override the global weak sched_clock symbol with this
  * local implementation which uses the clocksource to get some
@@ -323,17 +307,11 @@ static void __iomem *samsung_timer_reg(void)
  */
 static u32 notrace samsung_read_sched_clock(void)
 {
-       void __iomem *reg = samsung_timer_reg();
-
-       if (!reg)
-               return 0;
-
-       return ~__raw_readl(reg);
+       return ~__raw_readl(pwm.source_reg);
 }
 
 static void __init samsung_clocksource_init(void)
 {
-       void __iomem *reg = samsung_timer_reg();
        unsigned long pclk;
        unsigned long clock_rate;
        int ret;
@@ -348,10 +326,15 @@ static void __init samsung_clocksource_init(void)
        samsung_time_setup(pwm.source_id, pwm.tcnt_max);
        samsung_time_start(pwm.source_id, true);
 
+       if (pwm.source_id == 4)
+               pwm.source_reg = pwm.base + 0x40;
+       else
+               pwm.source_reg = pwm.base + pwm.source_id * 0x0c + 0x14;
+
        setup_sched_clock(samsung_read_sched_clock,
                                                pwm.variant.bits, clock_rate);
 
-       ret = clocksource_mmio_init(reg, "samsung_clocksource_timer",
+       ret = clocksource_mmio_init(pwm.source_reg, "samsung_clocksource_timer",
                                        clock_rate, 250, pwm.variant.bits,
                                        clocksource_mmio_readl_down);
        if (ret)
This page took 0.041362 seconds and 5 git commands to generate.