Lines Matching refs:ti
65 struct ct_timer_instance *ti = from_timer(ti, t, timer);
66 struct snd_pcm_substream *substream = ti->substream;
68 struct ct_atc_pcm *apcm = ti->apcm;
75 dist = (position + buffer_size - ti->position) % buffer_size;
77 position / period_size != ti->position / period_size) {
79 ti->position = position;
85 spin_lock_irqsave(&ti->lock, flags);
86 if (ti->running)
87 mod_timer(&ti->timer, jiffies + interval);
88 spin_unlock_irqrestore(&ti->lock, flags);
91 static void ct_systimer_init(struct ct_timer_instance *ti)
93 timer_setup(&ti->timer, ct_systimer_callback, 0);
96 static void ct_systimer_start(struct ct_timer_instance *ti)
98 struct snd_pcm_runtime *runtime = ti->substream->runtime;
101 spin_lock_irqsave(&ti->lock, flags);
102 ti->running = 1;
103 mod_timer(&ti->timer,
106 spin_unlock_irqrestore(&ti->lock, flags);
109 static void ct_systimer_stop(struct ct_timer_instance *ti)
113 spin_lock_irqsave(&ti->lock, flags);
114 ti->running = 0;
115 del_timer(&ti->timer);
116 spin_unlock_irqrestore(&ti->lock, flags);
119 static void ct_systimer_prepare(struct ct_timer_instance *ti)
121 ct_systimer_stop(ti);
122 try_to_del_timer_sync(&ti->timer);
181 struct ct_timer_instance *ti;
195 list_for_each_entry(ti, &atimer->running_head, running_list) {
196 if (ti->frag_count > diff)
197 ti->frag_count -= diff;
202 period_size = ti->substream->runtime->period_size;
203 rate = ti->substream->runtime->rate;
204 pos = ti->substream->ops->pointer(ti->substream);
205 if (pos / period_size != ti->position / period_size) {
206 ti->need_update = 1;
207 ti->position = pos;
212 ti->frag_count = div_u64((u64)pos * CT_TIMER_FREQ +
215 if (ti->need_update && !can_update)
217 if (ti->frag_count < min_intr)
218 min_intr = ti->frag_count;
231 struct ct_timer_instance *ti;
235 list_for_each_entry(ti, &atimer->instance_head, instance_list) {
236 if (ti->running && ti->need_update) {
237 ti->need_update = 0;
238 ti->apcm->interrupt(ti->apcm);
263 static void ct_xfitimer_prepare(struct ct_timer_instance *ti)
265 ti->frag_count = ti->substream->runtime->period_size;
266 ti->running = 0;
267 ti->need_update = 0;
289 static void ct_xfitimer_start(struct ct_timer_instance *ti)
291 struct ct_timer *atimer = ti->timer_base;
295 if (list_empty(&ti->running_list))
297 ti->running = 1;
298 ti->need_update = 0;
299 list_add(&ti->running_list, &atimer->running_head);
304 static void ct_xfitimer_stop(struct ct_timer_instance *ti)
306 struct ct_timer *atimer = ti->timer_base;
310 list_del_init(&ti->running_list);
311 ti->running = 0;
336 struct ct_timer_instance *ti;
338 ti = kzalloc(sizeof(*ti), GFP_KERNEL);
339 if (!ti)
341 spin_lock_init(&ti->lock);
342 INIT_LIST_HEAD(&ti->instance_list);
343 INIT_LIST_HEAD(&ti->running_list);
344 ti->timer_base = atimer;
345 ti->apcm = apcm;
346 ti->substream = apcm->substream;
348 atimer->ops->init(ti);
351 list_add(&ti->instance_list, &atimer->instance_head);
354 return ti;
357 void ct_timer_prepare(struct ct_timer_instance *ti)
359 if (ti->timer_base->ops->prepare)
360 ti->timer_base->ops->prepare(ti);
361 ti->position = 0;
362 ti->running = 0;
365 void ct_timer_start(struct ct_timer_instance *ti)
367 struct ct_timer *atimer = ti->timer_base;
368 atimer->ops->start(ti);
371 void ct_timer_stop(struct ct_timer_instance *ti)
373 struct ct_timer *atimer = ti->timer_base;
374 atimer->ops->stop(ti);
377 void ct_timer_instance_free(struct ct_timer_instance *ti)
379 struct ct_timer *atimer = ti->timer_base;
381 atimer->ops->stop(ti); /* to be sure */
383 atimer->ops->free_instance(ti);
386 list_del(&ti->instance_list);
389 kfree(ti);