Lines Matching refs:dpcm

235 static void dummy_systimer_rearm(struct dummy_systimer_pcm *dpcm)  in dummy_systimer_rearm()  argument
237 mod_timer(&dpcm->timer, jiffies + in dummy_systimer_rearm()
238 DIV_ROUND_UP(dpcm->frac_period_rest, dpcm->rate)); in dummy_systimer_rearm()
241 static void dummy_systimer_update(struct dummy_systimer_pcm *dpcm) in dummy_systimer_update() argument
245 delta = jiffies - dpcm->base_time; in dummy_systimer_update()
248 dpcm->base_time += delta; in dummy_systimer_update()
249 delta *= dpcm->rate; in dummy_systimer_update()
250 dpcm->frac_pos += delta; in dummy_systimer_update()
251 while (dpcm->frac_pos >= dpcm->frac_buffer_size) in dummy_systimer_update()
252 dpcm->frac_pos -= dpcm->frac_buffer_size; in dummy_systimer_update()
253 while (dpcm->frac_period_rest <= delta) { in dummy_systimer_update()
254 dpcm->elapsed++; in dummy_systimer_update()
255 dpcm->frac_period_rest += dpcm->frac_period_size; in dummy_systimer_update()
257 dpcm->frac_period_rest -= delta; in dummy_systimer_update()
262 struct dummy_systimer_pcm *dpcm = substream->runtime->private_data; in dummy_systimer_start() local
263 spin_lock(&dpcm->lock); in dummy_systimer_start()
264 dpcm->base_time = jiffies; in dummy_systimer_start()
265 dummy_systimer_rearm(dpcm); in dummy_systimer_start()
266 spin_unlock(&dpcm->lock); in dummy_systimer_start()
272 struct dummy_systimer_pcm *dpcm = substream->runtime->private_data; in dummy_systimer_stop() local
273 spin_lock(&dpcm->lock); in dummy_systimer_stop()
274 del_timer(&dpcm->timer); in dummy_systimer_stop()
275 spin_unlock(&dpcm->lock); in dummy_systimer_stop()
282 struct dummy_systimer_pcm *dpcm = runtime->private_data; in dummy_systimer_prepare() local
284 dpcm->frac_pos = 0; in dummy_systimer_prepare()
285 dpcm->rate = runtime->rate; in dummy_systimer_prepare()
286 dpcm->frac_buffer_size = runtime->buffer_size * HZ; in dummy_systimer_prepare()
287 dpcm->frac_period_size = runtime->period_size * HZ; in dummy_systimer_prepare()
288 dpcm->frac_period_rest = dpcm->frac_period_size; in dummy_systimer_prepare()
289 dpcm->elapsed = 0; in dummy_systimer_prepare()
296 struct dummy_systimer_pcm *dpcm = from_timer(dpcm, t, timer); in dummy_systimer_callback() local
300 spin_lock_irqsave(&dpcm->lock, flags); in dummy_systimer_callback()
301 dummy_systimer_update(dpcm); in dummy_systimer_callback()
302 dummy_systimer_rearm(dpcm); in dummy_systimer_callback()
303 elapsed = dpcm->elapsed; in dummy_systimer_callback()
304 dpcm->elapsed = 0; in dummy_systimer_callback()
305 spin_unlock_irqrestore(&dpcm->lock, flags); in dummy_systimer_callback()
307 snd_pcm_period_elapsed(dpcm->substream); in dummy_systimer_callback()
313 struct dummy_systimer_pcm *dpcm = substream->runtime->private_data; in dummy_systimer_pointer() local
316 spin_lock(&dpcm->lock); in dummy_systimer_pointer()
317 dummy_systimer_update(dpcm); in dummy_systimer_pointer()
318 pos = dpcm->frac_pos / HZ; in dummy_systimer_pointer()
319 spin_unlock(&dpcm->lock); in dummy_systimer_pointer()
325 struct dummy_systimer_pcm *dpcm; in dummy_systimer_create() local
327 dpcm = kzalloc(sizeof(*dpcm), GFP_KERNEL); in dummy_systimer_create()
328 if (!dpcm) in dummy_systimer_create()
330 substream->runtime->private_data = dpcm; in dummy_systimer_create()
331 timer_setup(&dpcm->timer, dummy_systimer_callback, 0); in dummy_systimer_create()
332 spin_lock_init(&dpcm->lock); in dummy_systimer_create()
333 dpcm->substream = substream; in dummy_systimer_create()
368 struct dummy_hrtimer_pcm *dpcm; in dummy_hrtimer_callback() local
370 dpcm = container_of(timer, struct dummy_hrtimer_pcm, timer); in dummy_hrtimer_callback()
371 if (!atomic_read(&dpcm->running)) in dummy_hrtimer_callback()
377 snd_pcm_period_elapsed(dpcm->substream); in dummy_hrtimer_callback()
378 if (!atomic_read(&dpcm->running)) in dummy_hrtimer_callback()
381 hrtimer_forward_now(timer, dpcm->period_time); in dummy_hrtimer_callback()
387 struct dummy_hrtimer_pcm *dpcm = substream->runtime->private_data; in dummy_hrtimer_start() local
389 dpcm->base_time = hrtimer_cb_get_time(&dpcm->timer); in dummy_hrtimer_start()
390 hrtimer_start(&dpcm->timer, dpcm->period_time, HRTIMER_MODE_REL_SOFT); in dummy_hrtimer_start()
391 atomic_set(&dpcm->running, 1); in dummy_hrtimer_start()
397 struct dummy_hrtimer_pcm *dpcm = substream->runtime->private_data; in dummy_hrtimer_stop() local
399 atomic_set(&dpcm->running, 0); in dummy_hrtimer_stop()
400 if (!hrtimer_callback_running(&dpcm->timer)) in dummy_hrtimer_stop()
401 hrtimer_cancel(&dpcm->timer); in dummy_hrtimer_stop()
405 static inline void dummy_hrtimer_sync(struct dummy_hrtimer_pcm *dpcm) in dummy_hrtimer_sync() argument
407 hrtimer_cancel(&dpcm->timer); in dummy_hrtimer_sync()
414 struct dummy_hrtimer_pcm *dpcm = runtime->private_data; in dummy_hrtimer_pointer() local
418 delta = ktime_us_delta(hrtimer_cb_get_time(&dpcm->timer), in dummy_hrtimer_pointer()
419 dpcm->base_time); in dummy_hrtimer_pointer()
428 struct dummy_hrtimer_pcm *dpcm = runtime->private_data; in dummy_hrtimer_prepare() local
433 dummy_hrtimer_sync(dpcm); in dummy_hrtimer_prepare()
439 dpcm->period_time = ktime_set(sec, nsecs); in dummy_hrtimer_prepare()
446 struct dummy_hrtimer_pcm *dpcm; in dummy_hrtimer_create() local
448 dpcm = kzalloc(sizeof(*dpcm), GFP_KERNEL); in dummy_hrtimer_create()
449 if (!dpcm) in dummy_hrtimer_create()
451 substream->runtime->private_data = dpcm; in dummy_hrtimer_create()
452 hrtimer_init(&dpcm->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_SOFT); in dummy_hrtimer_create()
453 dpcm->timer.function = dummy_hrtimer_callback; in dummy_hrtimer_create()
454 dpcm->substream = substream; in dummy_hrtimer_create()
455 atomic_set(&dpcm->running, 0); in dummy_hrtimer_create()
461 struct dummy_hrtimer_pcm *dpcm = substream->runtime->private_data; in dummy_hrtimer_free() local
462 dummy_hrtimer_sync(dpcm); in dummy_hrtimer_free()
463 kfree(dpcm); in dummy_hrtimer_free()