diff options
author | Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> | 2012-08-21 13:24:43 +0900 |
---|---|---|
committer | Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> | 2012-08-21 15:00:34 +0900 |
commit | d4430426b6d135d6d3fc550be660055793185e0d (patch) | |
tree | b16764e6cee06e1402e8d6feadf7c80bcac6e87e | |
parent | 73f35e0b156c771333d449ca86b99600d094d37f (diff) | |
download | u-boot-imx-d4430426b6d135d6d3fc550be660055793185e0d.zip u-boot-imx-d4430426b6d135d6d3fc550be660055793185e0d.tar.gz u-boot-imx-d4430426b6d135d6d3fc550be660055793185e0d.tar.bz2 |
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>
-rw-r--r-- | arch/sh/lib/time.c | 48 |
1 files changed, 18 insertions, 30 deletions
diff --git a/arch/sh/lib/time.c b/arch/sh/lib/time.c index 4840472..00230c3 100644 --- a/arch/sh/lib/time.c +++ b/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); } |