Lines Matching refs:timer
43 struct sunxi_timer *timer = (struct sunxi_timer *)dev; in sunxi_timer_irq_handle() local
46 hal_writel((0x1 << timer->timer_id), (unsigned long)TIMER_IRQ_ST_REG); in sunxi_timer_irq_handle()
49 if (timer->callback != NULL) in sunxi_timer_irq_handle()
51 timer->callback(timer->param); in sunxi_timer_irq_handle()
57 static void sunxi_timer_sync(uint32_t timer) in sunxi_timer_sync() argument
59 uint32_t old = hal_readl((unsigned long)TIMER_CNTVAL_REG(timer)); in sunxi_timer_sync()
61 while ((old - hal_readl((unsigned long)TIMER_CNTVAL_REG(timer))) < TIMER_SYNC_TICKS) in sunxi_timer_sync()
69 uint32_t sunxi_timer_get_count(uint32_t timer) in sunxi_timer_get_count() argument
71 return hal_readl((unsigned long)TIMER_CNTVAL_REG(timer)); in sunxi_timer_get_count()
74 void sunxi_timer_stop(uint32_t timer) in sunxi_timer_stop() argument
76 uint32_t val = hal_readl((unsigned long)TIMER_CTL_REG(timer)); in sunxi_timer_stop()
78 hal_writel(val & ~TIMER_CTL_ENABLE, (unsigned long)TIMER_CTL_REG(timer)); in sunxi_timer_stop()
80 sunxi_timer_sync(timer); in sunxi_timer_stop()
83 void sunxi_timer_start(uint32_t timer, bool periodic) in sunxi_timer_start() argument
85 uint32_t val = hal_readl((unsigned long)TIMER_CTL_REG(timer)); in sunxi_timer_start()
100 hal_writel(val | TIMER_CTL_ENABLE | TIMER_CTL_RELOAD, (unsigned long)TIMER_CTL_REG(timer)); in sunxi_timer_start()
103 static void sunxi_timer_setup(uint32_t tick, uint32_t timer) in sunxi_timer_setup() argument
105 hal_writel(tick, (unsigned long)TIMER_INTVAL_REG(timer)); in sunxi_timer_setup()
108 int sunxi_timer_set_oneshot(uint32_t delay_us, uint32_t timer, timer_callback callback, void *callb… in sunxi_timer_set_oneshot() argument
112 if (tick < g_timer[timer].min_delta_ticks || tick > g_timer[timer].max_delta_ticks) in sunxi_timer_set_oneshot()
119 g_timer[timer].callback = callback; in sunxi_timer_set_oneshot()
120 g_timer[timer].param = callback_param; in sunxi_timer_set_oneshot()
123 sunxi_timer_stop(timer); in sunxi_timer_set_oneshot()
125 sunxi_timer_setup(tick, timer); in sunxi_timer_set_oneshot()
127 sunxi_timer_start(timer, false); in sunxi_timer_set_oneshot()
132 int sunxi_timer_set_periodic(uint32_t delay_us, uint32_t timer, timer_callback callback, void *call… in sunxi_timer_set_periodic() argument
136 if (tick < g_timer[timer].min_delta_ticks || tick > g_timer[timer].max_delta_ticks) in sunxi_timer_set_periodic()
143 g_timer[timer].callback = callback; in sunxi_timer_set_periodic()
144 g_timer[timer].param = callback_param; in sunxi_timer_set_periodic()
147 sunxi_timer_stop(timer); in sunxi_timer_set_periodic()
149 sunxi_timer_setup(tick, timer); in sunxi_timer_set_periodic()
151 sunxi_timer_start(timer, true); in sunxi_timer_set_periodic()