sh: tmu: Changed switch statement to shift operation
authorNobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
Tue, 21 Aug 2012 04:24:43 +0000 (13:24 +0900)
committerNobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
Tue, 21 Aug 2012 06:00:34 +0000 (15:00 +0900)
Calculation of the bit position using switch statement can substitute
shift operation using ffs.
And removed unsed macro and variable.

Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
arch/sh/lib/time.c

index 48404727c3dcd91f61625cc39eec709da0f0d905..00230c3298013dfdefe186f44f3e30379298dfb7 100644 (file)
 
 static struct tmu_regs *tmu = (struct tmu_regs *)TMU_BASE;
 
-#define TMU_MAX_COUNTER (~0UL)
-
-static ulong timer_freq;
+static u16 bit;
 static unsigned long last_tcnt;
 static unsigned long long overflow_ticks;
 
+unsigned long get_tbclk(void)
+{
+       return get_tmu0_clk_rate() >> ((bit + 1) * 2);
+}
+
 static inline unsigned long long tick_to_time(unsigned long long tick)
 {
        tick *= CONFIG_SYS_HZ;
-       do_div(tick, timer_freq);
+       do_div(tick, get_tbclk());
 
        return tick;
 }
 
 static inline unsigned long long usec_to_tick(unsigned long long usec)
 {
-       usec *= timer_freq;
+       usec *= get_tbclk();
        do_div(usec, 1000000);
 
        return usec;
@@ -74,31 +77,9 @@ static void tmu_timer_stop(unsigned int timer)
 
 int timer_init(void)
 {
-       /* Divide clock by CONFIG_SYS_TMU_CLK_DIV */
-       u16 bit = 0;
-
-       switch (CONFIG_SYS_TMU_CLK_DIV) {
-       case 1024:
-               bit = 4;
-               break;
-       case 256:
-               bit = 3;
-               break;
-       case 64:
-               bit = 2;
-               break;
-       case 16:
-               bit = 1;
-               break;
-       case 4:
-       default:
-               break;
-       }
+       bit = (ffs(CONFIG_SYS_TMU_CLK_DIV) >> 1) - 1;
        writew(readw(&tmu->tcr0) | bit, &tmu->tcr0);
 
-       /* Calc clock rate */
-       timer_freq = get_tmu0_clk_rate() >> ((bit + 1) * 2);
-
        tmu_timer_stop(0);
        tmu_timer_start(0);
 
@@ -137,7 +118,14 @@ unsigned long get_timer(unsigned long base)
        return tick_to_time(get_ticks()) - base;
 }
 
-unsigned long get_tbclk(void)
+void set_timer(unsigned long t)
+{
+       writel((0 - t), &tmu->tcnt0);
+}
+
+void reset_timer(void)
 {
-       return timer_freq;
+       tmu_timer_stop(0);
+       set_timer(0);
+       tmu_timer_start(0);
 }