diff options
author | Kevin Hilman <khilman@mvista.com> | 2007-10-18 23:04:43 -0700 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2008-03-20 16:56:09 +0200 |
commit | 06cad098d28e02d2ee3ed587bb261377e4ae2f17 (patch) | |
tree | 3fcea2c58607af9dc5a6c5849f529b0b0df0d7b3 /arch/arm/mach-omap1 | |
parent | 457fb605834504af294916411be128a9b21fc3f6 (diff) | |
download | linux-stable-06cad098d28e02d2ee3ed587bb261377e4ae2f17.tar.gz linux-stable-06cad098d28e02d2ee3ed587bb261377e4ae2f17.tar.bz2 linux-stable-06cad098d28e02d2ee3ed587bb261377e4ae2f17.zip |
ARM: OMAP: Fix clockevent support for hrtimers
One-shot mode was broken in MPU-timer support for OMAP1 due to a typo.
Also, ensure timer is stopped before changing the auto-reload flag.
The TRM says changing the AR flag when timer is running is undefined.
Also set GENERIC_CLOCKEVENTS for all omaps.
Signed-off-by: Tim Bird <tim.bird@am.sony.com>
Signed-off-by: Kevin Hilman <khilman@mvista.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch/arm/mach-omap1')
-rw-r--r-- | arch/arm/mach-omap1/time.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/arch/arm/mach-omap1/time.c b/arch/arm/mach-omap1/time.c index 237651ebae5d..572a2dbc72ab 100644 --- a/arch/arm/mach-omap1/time.c +++ b/arch/arm/mach-omap1/time.c @@ -132,13 +132,20 @@ static inline void omap_mpu_timer_start(int nr, unsigned long load_val, timer->cntl = timerflags; } +static inline void omap_mpu_timer_stop(int nr) +{ + volatile omap_mpu_timer_regs_t* timer = omap_mpu_timer_base(nr); + + timer->cntl &= ~MPU_TIMER_ST; +} + /* * --------------------------------------------------------------------------- * MPU timer 1 ... count down to zero, interrupt, reload * --------------------------------------------------------------------------- */ static int omap_mpu_set_next_event(unsigned long cycles, - struct clock_event_device *evt) + struct clock_event_device *evt) { omap_mpu_timer_start(0, cycles, 0); return 0; @@ -152,6 +159,7 @@ static void omap_mpu_set_mode(enum clock_event_mode mode, omap_mpu_set_autoreset(0); break; case CLOCK_EVT_MODE_ONESHOT: + omap_mpu_timer_stop(0); omap_mpu_remove_autoreset(0); break; case CLOCK_EVT_MODE_UNUSED: |