static int sun5i_clkevt_next_event(unsigned long evt, struct clock_event_device *unused) { sun5i_clkevt_time_stop(0); sun5i_clkevt_time_setup(0, evt - TIMER_SYNC_TICKS); sun5i_clkevt_time_start(0, false); return 0; }
static int sun5i_clkevt_set_periodic(struct clock_event_device *clkevt) { struct sun5i_timer_clkevt *ce = to_sun5i_timer_clkevt(clkevt); sun5i_clkevt_time_stop(ce, 0); sun5i_clkevt_time_setup(ce, 0, ce->timer.ticks_per_jiffy); sun5i_clkevt_time_start(ce, 0, true); return 0; }
static int sun5i_clkevt_next_event(unsigned long evt, struct clock_event_device *clkevt) { struct sun5i_timer_clkevt *ce = to_sun5i_timer_clkevt(clkevt); sun5i_clkevt_time_stop(ce, 0); sun5i_clkevt_time_setup(ce, 0, evt - TIMER_SYNC_TICKS); sun5i_clkevt_time_start(ce, 0, false); return 0; }
static void sun5i_clkevt_mode(enum clock_event_mode mode, struct clock_event_device *clk) { switch (mode) { case CLOCK_EVT_MODE_PERIODIC: sun5i_clkevt_time_stop(0); sun5i_clkevt_time_setup(0, ticks_per_jiffy); sun5i_clkevt_time_start(0, true); break; case CLOCK_EVT_MODE_ONESHOT: sun5i_clkevt_time_stop(0); sun5i_clkevt_time_start(0, false); break; case CLOCK_EVT_MODE_UNUSED: case CLOCK_EVT_MODE_SHUTDOWN: default: sun5i_clkevt_time_stop(0); break; } }