Lines Matching refs:dpcm
250 static void dummy_systimer_rearm(struct dummy_systimer_pcm *dpcm) in dummy_systimer_rearm() argument
252 mod_timer(&dpcm->timer, jiffies + in dummy_systimer_rearm()
253 (dpcm->frac_period_rest + dpcm->rate - 1) / dpcm->rate); in dummy_systimer_rearm()
256 static void dummy_systimer_update(struct dummy_systimer_pcm *dpcm) in dummy_systimer_update() argument
260 delta = jiffies - dpcm->base_time; in dummy_systimer_update()
263 dpcm->base_time += delta; in dummy_systimer_update()
264 delta *= dpcm->rate; in dummy_systimer_update()
265 dpcm->frac_pos += delta; in dummy_systimer_update()
266 while (dpcm->frac_pos >= dpcm->frac_buffer_size) in dummy_systimer_update()
267 dpcm->frac_pos -= dpcm->frac_buffer_size; in dummy_systimer_update()
268 while (dpcm->frac_period_rest <= delta) { in dummy_systimer_update()
269 dpcm->elapsed++; in dummy_systimer_update()
270 dpcm->frac_period_rest += dpcm->frac_period_size; in dummy_systimer_update()
272 dpcm->frac_period_rest -= delta; in dummy_systimer_update()
277 struct dummy_systimer_pcm *dpcm = substream->runtime->private_data; in dummy_systimer_start() local
278 spin_lock(&dpcm->lock); in dummy_systimer_start()
279 dpcm->base_time = jiffies; in dummy_systimer_start()
280 dummy_systimer_rearm(dpcm); in dummy_systimer_start()
281 spin_unlock(&dpcm->lock); in dummy_systimer_start()
287 struct dummy_systimer_pcm *dpcm = substream->runtime->private_data; in dummy_systimer_stop() local
288 spin_lock(&dpcm->lock); in dummy_systimer_stop()
289 del_timer(&dpcm->timer); in dummy_systimer_stop()
290 spin_unlock(&dpcm->lock); in dummy_systimer_stop()
297 struct dummy_systimer_pcm *dpcm = runtime->private_data; in dummy_systimer_prepare() local
299 dpcm->frac_pos = 0; in dummy_systimer_prepare()
300 dpcm->rate = runtime->rate; in dummy_systimer_prepare()
301 dpcm->frac_buffer_size = runtime->buffer_size * HZ; in dummy_systimer_prepare()
302 dpcm->frac_period_size = runtime->period_size * HZ; in dummy_systimer_prepare()
303 dpcm->frac_period_rest = dpcm->frac_period_size; in dummy_systimer_prepare()
304 dpcm->elapsed = 0; in dummy_systimer_prepare()
311 struct dummy_systimer_pcm *dpcm = from_timer(dpcm, t, timer); in dummy_systimer_callback() local
315 spin_lock_irqsave(&dpcm->lock, flags); in dummy_systimer_callback()
316 dummy_systimer_update(dpcm); in dummy_systimer_callback()
317 dummy_systimer_rearm(dpcm); in dummy_systimer_callback()
318 elapsed = dpcm->elapsed; in dummy_systimer_callback()
319 dpcm->elapsed = 0; in dummy_systimer_callback()
320 spin_unlock_irqrestore(&dpcm->lock, flags); in dummy_systimer_callback()
322 snd_pcm_period_elapsed(dpcm->substream); in dummy_systimer_callback()
328 struct dummy_systimer_pcm *dpcm = substream->runtime->private_data; in dummy_systimer_pointer() local
331 spin_lock(&dpcm->lock); in dummy_systimer_pointer()
332 dummy_systimer_update(dpcm); in dummy_systimer_pointer()
333 pos = dpcm->frac_pos / HZ; in dummy_systimer_pointer()
334 spin_unlock(&dpcm->lock); in dummy_systimer_pointer()
340 struct dummy_systimer_pcm *dpcm; in dummy_systimer_create() local
342 dpcm = kzalloc(sizeof(*dpcm), GFP_KERNEL); in dummy_systimer_create()
343 if (!dpcm) in dummy_systimer_create()
345 substream->runtime->private_data = dpcm; in dummy_systimer_create()
346 timer_setup(&dpcm->timer, dummy_systimer_callback, 0); in dummy_systimer_create()
347 spin_lock_init(&dpcm->lock); in dummy_systimer_create()
348 dpcm->substream = substream; in dummy_systimer_create()
383 struct dummy_hrtimer_pcm *dpcm; in dummy_hrtimer_callback() local
385 dpcm = container_of(timer, struct dummy_hrtimer_pcm, timer); in dummy_hrtimer_callback()
386 if (!atomic_read(&dpcm->running)) in dummy_hrtimer_callback()
392 snd_pcm_period_elapsed(dpcm->substream); in dummy_hrtimer_callback()
393 if (!atomic_read(&dpcm->running)) in dummy_hrtimer_callback()
396 hrtimer_forward_now(timer, dpcm->period_time); in dummy_hrtimer_callback()
402 struct dummy_hrtimer_pcm *dpcm = substream->runtime->private_data; in dummy_hrtimer_start() local
404 dpcm->base_time = hrtimer_cb_get_time(&dpcm->timer); in dummy_hrtimer_start()
405 hrtimer_start(&dpcm->timer, dpcm->period_time, HRTIMER_MODE_REL_SOFT); in dummy_hrtimer_start()
406 atomic_set(&dpcm->running, 1); in dummy_hrtimer_start()
412 struct dummy_hrtimer_pcm *dpcm = substream->runtime->private_data; in dummy_hrtimer_stop() local
414 atomic_set(&dpcm->running, 0); in dummy_hrtimer_stop()
415 if (!hrtimer_callback_running(&dpcm->timer)) in dummy_hrtimer_stop()
416 hrtimer_cancel(&dpcm->timer); in dummy_hrtimer_stop()
420 static inline void dummy_hrtimer_sync(struct dummy_hrtimer_pcm *dpcm) in dummy_hrtimer_sync() argument
422 hrtimer_cancel(&dpcm->timer); in dummy_hrtimer_sync()
429 struct dummy_hrtimer_pcm *dpcm = runtime->private_data; in dummy_hrtimer_pointer() local
433 delta = ktime_us_delta(hrtimer_cb_get_time(&dpcm->timer), in dummy_hrtimer_pointer()
434 dpcm->base_time); in dummy_hrtimer_pointer()
443 struct dummy_hrtimer_pcm *dpcm = runtime->private_data; in dummy_hrtimer_prepare() local
448 dummy_hrtimer_sync(dpcm); in dummy_hrtimer_prepare()
454 dpcm->period_time = ktime_set(sec, nsecs); in dummy_hrtimer_prepare()
461 struct dummy_hrtimer_pcm *dpcm; in dummy_hrtimer_create() local
463 dpcm = kzalloc(sizeof(*dpcm), GFP_KERNEL); in dummy_hrtimer_create()
464 if (!dpcm) in dummy_hrtimer_create()
466 substream->runtime->private_data = dpcm; in dummy_hrtimer_create()
467 hrtimer_init(&dpcm->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_SOFT); in dummy_hrtimer_create()
468 dpcm->timer.function = dummy_hrtimer_callback; in dummy_hrtimer_create()
469 dpcm->substream = substream; in dummy_hrtimer_create()
470 atomic_set(&dpcm->running, 0); in dummy_hrtimer_create()
476 struct dummy_hrtimer_pcm *dpcm = substream->runtime->private_data; in dummy_hrtimer_free() local
477 dummy_hrtimer_sync(dpcm); in dummy_hrtimer_free()
478 kfree(dpcm); in dummy_hrtimer_free()