static int tegra_timer_set_periodic(struct clock_event_device *evt) { void __iomem *reg_base = timer_of_base(to_timer_of(evt)); writel_relaxed(TIMER_PTV_EN | TIMER_PTV_PER | ((timer_of_rate(to_timer_of(evt)) / HZ) - 1), reg_base + TIMER_PTV); return 0; }
static int sun4i_clkevt_shutdown(struct clock_event_device *evt) { struct timer_of *to = to_timer_of(evt); sun4i_clkevt_time_stop(timer_of_base(to), 0); return 0; }
static int tegra_timer_shutdown(struct clock_event_device *evt) { void __iomem *reg_base = timer_of_base(to_timer_of(evt)); writel_relaxed(0, reg_base + TIMER_PTV); 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 irqreturn_t tegra_timer_isr(int irq, void *dev_id) { struct clock_event_device *evt = (struct clock_event_device *)dev_id; void __iomem *reg_base = timer_of_base(to_timer_of(evt)); writel_relaxed(TIMER_PCR_INTR_CLR, reg_base + TIMER_PCR); evt->event_handler(evt); return IRQ_HANDLED; }
static irqreturn_t sun4i_timer_interrupt(int irq, void *dev_id) { struct clock_event_device *evt = (struct clock_event_device *)dev_id; struct timer_of *to = to_timer_of(evt); sun4i_timer_clear_interrupt(timer_of_base(to)); evt->event_handler(evt); return IRQ_HANDLED; }
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 int tegra_timer_set_next_event(unsigned long cycles, struct clock_event_device *evt) { void __iomem *reg_base = timer_of_base(to_timer_of(evt)); writel_relaxed(TIMER_PTV_EN | ((cycles > 1) ? (cycles - 1) : 0), /* n+1 scheme */ reg_base + TIMER_PTV); return 0; }
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; }
static void tegra_timer_suspend(struct clock_event_device *evt) { void __iomem *reg_base = timer_of_base(to_timer_of(evt)); writel_relaxed(TIMER_PCR_INTR_CLR, reg_base + TIMER_PCR); }