clockevents/drivers/zevio: Migrate to new 'set-state' interface
authorViresh Kumar <viresh.kumar@linaro.org>
Thu, 18 Jun 2015 10:54:55 +0000 (16:24 +0530)
committerDaniel Lezcano <daniel.lezcano@linaro.org>
Mon, 10 Aug 2015 09:40:51 +0000 (11:40 +0200)
Migrate zevio driver to the new 'set-state' interface provided by
clockevents core, the earlier 'set-mode' interface is marked obsolete
now.

This also enables us to implement callbacks for new states of clockevent
devices, for example: ONESHOT_STOPPED.

Cc: Daniel Tang <dt.tangr@gmail.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
drivers/clocksource/zevio-timer.c

index 7ce4421..ceaa613 100644 (file)
@@ -76,32 +76,28 @@ static int zevio_timer_set_event(unsigned long delta,
        return 0;
 }
 
-static void zevio_timer_set_mode(enum clock_event_mode mode,
-                                struct clock_event_device *dev)
+static int zevio_timer_shutdown(struct clock_event_device *dev)
 {
        struct zevio_timer *timer = container_of(dev, struct zevio_timer,
                                                 clkevt);
 
-       switch (mode) {
-       case CLOCK_EVT_MODE_RESUME:
-       case CLOCK_EVT_MODE_ONESHOT:
-               /* Enable timer interrupts */
-               writel(TIMER_INTR_MSK, timer->interrupt_regs + IO_INTR_MSK);
-               writel(TIMER_INTR_ALL, timer->interrupt_regs + IO_INTR_ACK);
-               break;
-       case CLOCK_EVT_MODE_SHUTDOWN:
-       case CLOCK_EVT_MODE_UNUSED:
-               /* Disable timer interrupts */
-               writel(0, timer->interrupt_regs + IO_INTR_MSK);
-               writel(TIMER_INTR_ALL, timer->interrupt_regs + IO_INTR_ACK);
-               /* Stop timer */
-               writel(CNTL_STOP_TIMER, timer->timer1 + IO_CONTROL);
-               break;
-       case CLOCK_EVT_MODE_PERIODIC:
-       default:
-               /* Unsupported */
-               break;
-       }
+       /* Disable timer interrupts */
+       writel(0, timer->interrupt_regs + IO_INTR_MSK);
+       writel(TIMER_INTR_ALL, timer->interrupt_regs + IO_INTR_ACK);
+       /* Stop timer */
+       writel(CNTL_STOP_TIMER, timer->timer1 + IO_CONTROL);
+       return 0;
+}
+
+static int zevio_timer_set_oneshot(struct clock_event_device *dev)
+{
+       struct zevio_timer *timer = container_of(dev, struct zevio_timer,
+                                                clkevt);
+
+       /* Enable timer interrupts */
+       writel(TIMER_INTR_MSK, timer->interrupt_regs + IO_INTR_MSK);
+       writel(TIMER_INTR_ALL, timer->interrupt_regs + IO_INTR_ACK);
+       return 0;
 }
 
 static irqreturn_t zevio_timer_interrupt(int irq, void *dev_id)
@@ -162,7 +158,9 @@ static int __init zevio_timer_add(struct device_node *node)
        if (timer->interrupt_regs && irqnr) {
                timer->clkevt.name              = timer->clockevent_name;
                timer->clkevt.set_next_event    = zevio_timer_set_event;
-               timer->clkevt.set_mode          = zevio_timer_set_mode;
+               timer->clkevt.set_state_shutdown = zevio_timer_shutdown;
+               timer->clkevt.set_state_oneshot = zevio_timer_set_oneshot;
+               timer->clkevt.tick_resume       = zevio_timer_set_oneshot;
                timer->clkevt.rating            = 200;
                timer->clkevt.cpumask           = cpu_all_mask;
                timer->clkevt.features          = CLOCK_EVT_FEAT_ONESHOT;