static int sun4i_clkevt_next_event(unsigned long evt, struct clock_event_device *unused) { sun4i_clkevt_time_stop(0); sun4i_clkevt_time_setup(0, evt - TIMER_SYNC_TICKS); sun4i_clkevt_time_start(0, false); return 0; }
static int sun4i_clkevt_set_oneshot(struct clock_event_device *evt) { struct timer_of *to = to_timer_of(evt); sun4i_clkevt_time_stop(timer_of_base(to), 0); sun4i_clkevt_time_start(timer_of_base(to), 0, false); return 0; }
static int sun4i_clkevt_set_periodic(struct clock_event_device *evt) { struct timer_of *to = to_timer_of(evt); sun4i_clkevt_time_stop(timer_of_base(to), 0); sun4i_clkevt_time_setup(timer_of_base(to), 0, timer_of_period(to)); sun4i_clkevt_time_start(timer_of_base(to), 0, true); return 0; }
static void sun4i_clkevt_mode(enum clock_event_mode mode, struct clock_event_device *clk) { switch (mode) { case CLOCK_EVT_MODE_PERIODIC: sun4i_clkevt_time_stop(0); sun4i_clkevt_time_setup(0, ticks_per_jiffy); sun4i_clkevt_time_start(0, true); break; case CLOCK_EVT_MODE_ONESHOT: sun4i_clkevt_time_stop(0); sun4i_clkevt_time_start(0, false); break; case CLOCK_EVT_MODE_UNUSED: case CLOCK_EVT_MODE_SHUTDOWN: default: sun4i_clkevt_time_stop(0); break; } }
static int sun4i_clkevt_next_event(unsigned long evt, struct clock_event_device *clkevt) { struct timer_of *to = to_timer_of(clkevt); sun4i_clkevt_time_stop(timer_of_base(to), 0); sun4i_clkevt_time_setup(timer_of_base(to), 0, evt - TIMER_SYNC_TICKS); sun4i_clkevt_time_start(timer_of_base(to), 0, false); return 0; }