From 511127767aab3f653b2b67955a963b0536ff2069 Mon Sep 17 00:00:00 2001 From: Tony Lindgren Date: Thu, 11 Oct 2007 14:31:18 -0700 Subject: [PATCH] ARM: OMAP: Make dyntick work again Add set_next_event() and let the clock event code take care of the rest. Note that we're still reprogramming timer in periodic mode, but this is OK as in the worst case we'll just get another interrupt before timer is programmed again. Signed-off-by: Tony Lindgren --- arch/arm/plat-omap/timer32k.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/arch/arm/plat-omap/timer32k.c b/arch/arm/plat-omap/timer32k.c index be7cb8eb33b..1eaec1c179e 100644 --- a/arch/arm/plat-omap/timer32k.c +++ b/arch/arm/plat-omap/timer32k.c @@ -146,6 +146,14 @@ static inline void omap_32k_timer_ack_irq(void) #endif +static int omap_32k_timer_set_next_event(unsigned long delta, + struct clock_event_device *dev) +{ + omap_32k_timer_start(delta); + + return 0; +} + static void omap_32k_timer_set_mode(enum clock_event_mode mode, struct clock_event_device *evt) { @@ -153,9 +161,9 @@ static void omap_32k_timer_set_mode(enum clock_event_mode mode, switch (mode) { case CLOCK_EVT_MODE_PERIODIC: + case CLOCK_EVT_MODE_ONESHOT: omap_32k_timer_start(OMAP_32K_TIMER_TICK_PERIOD); break; - case CLOCK_EVT_MODE_ONESHOT: case CLOCK_EVT_MODE_UNUSED: case CLOCK_EVT_MODE_SHUTDOWN: break; @@ -166,8 +174,9 @@ static void omap_32k_timer_set_mode(enum clock_event_mode mode, static struct clock_event_device clockevent_32k_timer = { .name = "32k-timer", - .features = CLOCK_EVT_FEAT_PERIODIC, + .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, .shift = 32, + .set_next_event = omap_32k_timer_set_next_event, .set_mode = omap_32k_timer_set_mode, }; -- 2.41.0