Lines Matching refs:timer

50     struct sunxi_htimer *timer = (struct sunxi_htimer *)data;  in sunxi_htimer_irq_handle()  local
53 writel((0x1 << timer->timer_id), HTIMER_IRQ_ST_REG); in sunxi_htimer_irq_handle()
56 if (timer->callback != NULL) in sunxi_htimer_irq_handle()
58 timer->callback(timer->param); in sunxi_htimer_irq_handle()
62 static void sunxi_htimer_sync(uint32_t timer) in sunxi_htimer_sync() argument
64 uint32_t old = readl(HTIMER_CNTVAL_LO_REG(timer)); in sunxi_htimer_sync()
66 while ((old - readl(HTIMER_CNTVAL_LO_REG(timer))) < HTIMER_SYNC_TICKS) in sunxi_htimer_sync()
74 void sunxi_htimer_stop(uint32_t timer) in sunxi_htimer_stop() argument
76 uint32_t val = readl(HTIMER_CTL_REG(timer)); in sunxi_htimer_stop()
78 writel(val & ~HTIMER_CTL_ENABLE, HTIMER_CTL_REG(timer)); in sunxi_htimer_stop()
80 sunxi_htimer_sync(timer); in sunxi_htimer_stop()
83 void sunxi_htimer_start(uint32_t timer, bool periodic) in sunxi_htimer_start() argument
85 uint32_t val = readl(HTIMER_CTL_REG(timer)); in sunxi_htimer_start()
98 writel(val | HTIMER_CTL_ENABLE | HTIMER_CTL_RELOAD, HTIMER_CTL_REG(timer)); in sunxi_htimer_start()
101 static void sunxi_htimer_setup(uint32_t tick, uint32_t timer) in sunxi_htimer_setup() argument
103 writel(tick, HTIMER_INTVAL_LO_REG(timer)); in sunxi_htimer_setup()
106 int sunxi_htimer_set_oneshot(uint32_t delay_us, uint32_t timer, timer_callback callback, void *call… in sunxi_htimer_set_oneshot() argument
110 if (tick < g_htimer[timer].min_delta_ticks || tick > g_htimer[timer].max_delta_ticks) in sunxi_htimer_set_oneshot()
118 g_htimer[timer].callback = callback; in sunxi_htimer_set_oneshot()
119 g_htimer[timer].param = callback_param; in sunxi_htimer_set_oneshot()
122 sunxi_htimer_stop(timer); in sunxi_htimer_set_oneshot()
124 sunxi_htimer_setup(tick, timer); in sunxi_htimer_set_oneshot()
126 sunxi_htimer_start(timer, false); in sunxi_htimer_set_oneshot()
129 int sunxi_htimer_set_periodic(uint32_t delay_us, uint32_t timer, timer_callback callback, void *cal… in sunxi_htimer_set_periodic() argument
133 if (tick < g_htimer[timer].min_delta_ticks || tick > g_htimer[timer].max_delta_ticks) in sunxi_htimer_set_periodic()
141 g_htimer[timer].callback = callback; in sunxi_htimer_set_periodic()
142 g_htimer[timer].param = callback_param; in sunxi_htimer_set_periodic()
145 sunxi_htimer_stop(timer); in sunxi_htimer_set_periodic()
147 sunxi_htimer_setup(tick, timer); in sunxi_htimer_set_periodic()
149 sunxi_htimer_start(timer, true); in sunxi_htimer_set_periodic()
156 struct sunxi_htimer *timer = NULL; in sunxi_htimer_init() local
170 timer = (struct sunxi_htimer *)malloc(size * sizeof(struct sunxi_htimer)); in sunxi_htimer_init()
171 if (timer == NULL) in sunxi_htimer_init()
179 timer[i].timer_id = i; in sunxi_htimer_init()
180 timer[i].clk_rate = 200000000; //ahb1,should get form clk driver in sunxi_htimer_init()
181 timer[i].irq = sunxi_htimer_irq_num[i]; in sunxi_htimer_init()
182 timer[i].min_delta_ticks = HTIMER_SYNC_TICKS; in sunxi_htimer_init()
183 timer[i].max_delta_ticks = 0xffffffff; in sunxi_htimer_init()
184 timer[i].callback = NULL; in sunxi_htimer_init()
185 timer[i].param = NULL; in sunxi_htimer_init()
186 irq_request(timer[i].irq, sunxi_htimer_irq_handle, (void *)&timer[i]); in sunxi_htimer_init()
200 irq_enable(timer[i].irq); in sunxi_htimer_init()
203 g_htimer = timer; in sunxi_htimer_init()