提交 06cad098 编写于 作者: K Kevin Hilman 提交者: Tony Lindgren

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: NTim Bird <tim.bird@am.sony.com>
Signed-off-by: NKevin Hilman <khilman@mvista.com>
Signed-off-by: NTony Lindgren <tony@atomide.com>
上级 457fb605
...@@ -469,6 +469,7 @@ config ARCH_OMAP ...@@ -469,6 +469,7 @@ config ARCH_OMAP
bool "TI OMAP" bool "TI OMAP"
select GENERIC_GPIO select GENERIC_GPIO
select GENERIC_TIME select GENERIC_TIME
select GENERIC_CLOCKEVENTS
help help
Support for TI's OMAP platform (OMAP1 and OMAP2). Support for TI's OMAP platform (OMAP1 and OMAP2).
......
...@@ -132,13 +132,20 @@ static inline void omap_mpu_timer_start(int nr, unsigned long load_val, ...@@ -132,13 +132,20 @@ static inline void omap_mpu_timer_start(int nr, unsigned long load_val,
timer->cntl = timerflags; 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 * MPU timer 1 ... count down to zero, interrupt, reload
* --------------------------------------------------------------------------- * ---------------------------------------------------------------------------
*/ */
static int omap_mpu_set_next_event(unsigned long cycles, 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); omap_mpu_timer_start(0, cycles, 0);
return 0; return 0;
...@@ -152,6 +159,7 @@ static void omap_mpu_set_mode(enum clock_event_mode mode, ...@@ -152,6 +159,7 @@ static void omap_mpu_set_mode(enum clock_event_mode mode,
omap_mpu_set_autoreset(0); omap_mpu_set_autoreset(0);
break; break;
case CLOCK_EVT_MODE_ONESHOT: case CLOCK_EVT_MODE_ONESHOT:
omap_mpu_timer_stop(0);
omap_mpu_remove_autoreset(0); omap_mpu_remove_autoreset(0);
break; break;
case CLOCK_EVT_MODE_UNUSED: case CLOCK_EVT_MODE_UNUSED:
......
...@@ -11,7 +11,6 @@ choice ...@@ -11,7 +11,6 @@ choice
config ARCH_OMAP1 config ARCH_OMAP1
bool "TI OMAP1" bool "TI OMAP1"
select GENERIC_CLOCKEVENTS
config ARCH_OMAP2 config ARCH_OMAP2
bool "TI OMAP2" bool "TI OMAP2"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册