sh: tmu: Changed switch statement to shift operation

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>
master
Nobuhiro Iwamatsu 12 years ago
parent 73f35e0b15
commit d4430426b6
  1. 48
      arch/sh/lib/time.c

@ -36,23 +36,26 @@
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);
}

Loading…
Cancel
Save