|
@@ -60,30 +60,36 @@ static int orion_clkevt_next_event(unsigned long delta,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static void orion_clkevt_mode(enum clock_event_mode mode,
|
|
|
- struct clock_event_device *dev)
|
|
|
+static int orion_clkevt_shutdown(struct clock_event_device *dev)
|
|
|
{
|
|
|
- if (mode == CLOCK_EVT_MODE_PERIODIC) {
|
|
|
- /* setup and enable periodic timer at 1/HZ intervals */
|
|
|
- writel(ticks_per_jiffy - 1, timer_base + TIMER1_RELOAD);
|
|
|
- writel(ticks_per_jiffy - 1, timer_base + TIMER1_VAL);
|
|
|
- atomic_io_modify(timer_base + TIMER_CTRL,
|
|
|
- TIMER1_RELOAD_EN | TIMER1_EN,
|
|
|
- TIMER1_RELOAD_EN | TIMER1_EN);
|
|
|
- } else {
|
|
|
- /* disable timer */
|
|
|
- atomic_io_modify(timer_base + TIMER_CTRL,
|
|
|
- TIMER1_RELOAD_EN | TIMER1_EN, 0);
|
|
|
- }
|
|
|
+ /* disable timer */
|
|
|
+ atomic_io_modify(timer_base + TIMER_CTRL,
|
|
|
+ TIMER1_RELOAD_EN | TIMER1_EN, 0);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int orion_clkevt_set_periodic(struct clock_event_device *dev)
|
|
|
+{
|
|
|
+ /* setup and enable periodic timer at 1/HZ intervals */
|
|
|
+ writel(ticks_per_jiffy - 1, timer_base + TIMER1_RELOAD);
|
|
|
+ writel(ticks_per_jiffy - 1, timer_base + TIMER1_VAL);
|
|
|
+ atomic_io_modify(timer_base + TIMER_CTRL,
|
|
|
+ TIMER1_RELOAD_EN | TIMER1_EN,
|
|
|
+ TIMER1_RELOAD_EN | TIMER1_EN);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static struct clock_event_device orion_clkevt = {
|
|
|
- .name = "orion_event",
|
|
|
- .features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC,
|
|
|
- .shift = 32,
|
|
|
- .rating = 300,
|
|
|
- .set_next_event = orion_clkevt_next_event,
|
|
|
- .set_mode = orion_clkevt_mode,
|
|
|
+ .name = "orion_event",
|
|
|
+ .features = CLOCK_EVT_FEAT_ONESHOT |
|
|
|
+ CLOCK_EVT_FEAT_PERIODIC,
|
|
|
+ .shift = 32,
|
|
|
+ .rating = 300,
|
|
|
+ .set_next_event = orion_clkevt_next_event,
|
|
|
+ .set_state_shutdown = orion_clkevt_shutdown,
|
|
|
+ .set_state_periodic = orion_clkevt_set_periodic,
|
|
|
+ .set_state_oneshot = orion_clkevt_shutdown,
|
|
|
+ .tick_resume = orion_clkevt_shutdown,
|
|
|
};
|
|
|
|
|
|
static irqreturn_t orion_clkevt_irq_handler(int irq, void *dev_id)
|