• Home
  • Raw
  • Download

Lines Matching full:timer

32 #include <sound/timer.h>
51 MODULE_DESCRIPTION("ALSA timer interface");
59 MODULE_ALIAS("devname:snd/timer");
96 static int snd_timer_free(struct snd_timer *timer);
101 static void snd_timer_reschedule(struct snd_timer * timer, unsigned long ticks_left);
104 * create a timer instance with the given owner string.
105 * when timer is not NULL, increments the module counter
108 struct snd_timer *timer) in snd_timer_instance_new() argument
125 timeri->timer = timer; in snd_timer_instance_new()
126 if (timer && !try_module_get(timer->module)) { in snd_timer_instance_new()
136 * find a timer instance from the given timer id
140 struct snd_timer *timer = NULL; in snd_timer_find() local
142 list_for_each_entry(timer, &snd_timer_list, device_list) { in snd_timer_find()
143 if (timer->tmr_class != tid->dev_class) in snd_timer_find()
145 if ((timer->tmr_class == SNDRV_TIMER_CLASS_CARD || in snd_timer_find()
146 timer->tmr_class == SNDRV_TIMER_CLASS_PCM) && in snd_timer_find()
147 (timer->card == NULL || in snd_timer_find()
148 timer->card->number != tid->card)) in snd_timer_find()
150 if (timer->tmr_device != tid->device) in snd_timer_find()
152 if (timer->tmr_subdevice != tid->subdevice) in snd_timer_find()
154 return timer; in snd_timer_find()
166 request_module("snd-timer-%i", tid->device); in snd_timer_request()
188 struct snd_timer *timer; in snd_timer_check_slave() local
192 list_for_each_entry(timer, &snd_timer_list, device_list) { in snd_timer_check_slave()
193 list_for_each_entry(master, &timer->open_list_head, open_list) { in snd_timer_check_slave()
196 if (master->timer->num_instances >= in snd_timer_check_slave()
197 master->timer->max_instances) in snd_timer_check_slave()
201 master->timer->num_instances++; in snd_timer_check_slave()
204 slave->timer = master->timer; in snd_timer_check_slave()
227 if (master->timer->num_instances >= in snd_timer_check_master()
228 master->timer->max_instances) in snd_timer_check_master()
231 master->timer->num_instances++; in snd_timer_check_master()
233 spin_lock(&master->timer->lock); in snd_timer_check_master()
235 slave->timer = master->timer; in snd_timer_check_master()
239 spin_unlock(&master->timer->lock); in snd_timer_check_master()
250 * open a timer instance
257 struct snd_timer *timer; in snd_timer_open() local
267 pr_debug("ALSA: timer: invalid slave class %i\n", in snd_timer_open()
295 timer = snd_timer_find(tid); in snd_timer_open()
297 if (!timer) { in snd_timer_open()
301 timer = snd_timer_find(tid); in snd_timer_open()
304 if (!timer) { in snd_timer_open()
308 if (!list_empty(&timer->open_list_head)) { in snd_timer_open()
310 list_entry(timer->open_list_head.next, in snd_timer_open()
317 if (timer->num_instances >= timer->max_instances) { in snd_timer_open()
321 timeri = snd_timer_instance_new(owner, timer); in snd_timer_open()
327 if (timer->card) in snd_timer_open()
328 get_device(&timer->card->card_dev); in snd_timer_open()
332 if (list_empty(&timer->open_list_head) && timer->hw.open) { in snd_timer_open()
333 err = timer->hw.open(timer); in snd_timer_open()
339 if (timer->card) in snd_timer_open()
340 card_dev_to_put = &timer->card->card_dev; in snd_timer_open()
341 module_put(timer->module); in snd_timer_open()
346 list_add_tail(&timeri->open_list, &timer->open_list_head); in snd_timer_open()
347 timer->num_instances++; in snd_timer_open()
365 * close a timer instance
371 struct snd_timer *timer = NULL; in snd_timer_close_locked() local
378 /* force to stop the timer */ in snd_timer_close_locked()
381 timer = timeri->timer; in snd_timer_close_locked()
382 if (timer) { in snd_timer_close_locked()
383 timer->num_instances--; in snd_timer_close_locked()
385 spin_lock_irq(&timer->lock); in snd_timer_close_locked()
387 spin_unlock_irq(&timer->lock); in snd_timer_close_locked()
389 spin_lock_irq(&timer->lock); in snd_timer_close_locked()
391 spin_unlock_irq(&timer->lock); in snd_timer_close_locked()
395 spin_lock(&timer->lock); in snd_timer_close_locked()
399 timer->num_instances--; in snd_timer_close_locked()
401 slave->timer = NULL; in snd_timer_close_locked()
405 spin_unlock(&timer->lock); in snd_timer_close_locked()
408 /* slave doesn't need to release timer resources below */ in snd_timer_close_locked()
410 timer = NULL; in snd_timer_close_locked()
418 if (timer) { in snd_timer_close_locked()
419 if (list_empty(&timer->open_list_head) && timer->hw.close) in snd_timer_close_locked()
420 timer->hw.close(timer); in snd_timer_close_locked()
422 if (timer->card) in snd_timer_close_locked()
423 *card_devp_to_put = &timer->card->card_dev; in snd_timer_close_locked()
424 module_put(timer->module); in snd_timer_close_locked()
431 * close a timer instance
451 static unsigned long snd_timer_hw_resolution(struct snd_timer *timer) in snd_timer_hw_resolution() argument
453 if (timer->hw.c_resolution) in snd_timer_hw_resolution()
454 return timer->hw.c_resolution(timer); in snd_timer_hw_resolution()
456 return timer->hw.resolution; in snd_timer_hw_resolution()
461 struct snd_timer * timer; in snd_timer_resolution() local
467 timer = timeri->timer; in snd_timer_resolution()
468 if (timer) { in snd_timer_resolution()
469 spin_lock_irqsave(&timer->lock, flags); in snd_timer_resolution()
470 ret = snd_timer_hw_resolution(timer); in snd_timer_resolution()
471 spin_unlock_irqrestore(&timer->lock, flags); in snd_timer_resolution()
479 struct snd_timer *timer = ti->timer; in snd_timer_notify1() local
491 if (timer && in snd_timer_notify1()
494 resolution = snd_timer_hw_resolution(timer); in snd_timer_notify1()
499 if (timer == NULL) in snd_timer_notify1()
501 if (timer->hw.flags & SNDRV_TIMER_HW_SLAVE) in snd_timer_notify1()
508 /* start/continue a master timer */
512 struct snd_timer *timer; in snd_timer_start1() local
516 timer = timeri->timer; in snd_timer_start1()
517 if (!timer) in snd_timer_start1()
520 spin_lock_irqsave(&timer->lock, flags); in snd_timer_start1()
521 if (timer->card && timer->card->shutdown) { in snd_timer_start1()
537 list_move_tail(&timeri->active_list, &timer->active_list_head); in snd_timer_start1()
538 if (timer->running) { in snd_timer_start1()
539 if (timer->hw.flags & SNDRV_TIMER_HW_SLAVE) in snd_timer_start1()
541 timer->flags |= SNDRV_TIMER_FLG_RESCHED; in snd_timer_start1()
546 timer->sticks = ticks; in snd_timer_start1()
547 timer->hw.start(timer); in snd_timer_start1()
549 timer->running++; in snd_timer_start1()
556 spin_unlock_irqrestore(&timer->lock, flags); in snd_timer_start1()
560 /* start/continue a slave timer */
572 if (timeri->master && timeri->timer) { in snd_timer_start_slave()
573 spin_lock(&timeri->timer->lock); in snd_timer_start_slave()
578 spin_unlock(&timeri->timer->lock); in snd_timer_start_slave()
584 /* stop/pause a master timer */
587 struct snd_timer *timer; in snd_timer_stop1() local
591 timer = timeri->timer; in snd_timer_stop1()
592 if (!timer) in snd_timer_stop1()
594 spin_lock_irqsave(&timer->lock, flags); in snd_timer_stop1()
602 if (timer->card && timer->card->shutdown) in snd_timer_stop1()
609 !(--timer->running)) { in snd_timer_stop1()
610 timer->hw.stop(timer); in snd_timer_stop1()
611 if (timer->flags & SNDRV_TIMER_FLG_RESCHED) { in snd_timer_stop1()
612 timer->flags &= ~SNDRV_TIMER_FLG_RESCHED; in snd_timer_stop1()
613 snd_timer_reschedule(timer, 0); in snd_timer_stop1()
614 if (timer->flags & SNDRV_TIMER_FLG_CHANGE) { in snd_timer_stop1()
615 timer->flags &= ~SNDRV_TIMER_FLG_CHANGE; in snd_timer_stop1()
616 timer->hw.start(timer); in snd_timer_stop1()
628 spin_unlock_irqrestore(&timer->lock, flags); in snd_timer_stop1()
632 /* stop/pause a slave timer */
643 if (timeri->timer) { in snd_timer_stop_slave()
644 spin_lock(&timeri->timer->lock); in snd_timer_stop_slave()
649 spin_unlock(&timeri->timer->lock); in snd_timer_stop_slave()
656 * start the timer instance
670 * stop the timer instance.
672 * do not call this from the timer callback!
688 /* timer can continue only after pause */ in snd_timer_continue()
712 * reschedule the timer
715 * when the scheduling ticks is changed set CHANGE flag to reprogram the timer.
717 static void snd_timer_reschedule(struct snd_timer * timer, unsigned long ticks_left) in snd_timer_reschedule() argument
722 list_for_each_entry(ti, &timer->active_list_head, active_list) { in snd_timer_reschedule()
726 timer->running++; in snd_timer_reschedule()
734 timer->flags &= ~SNDRV_TIMER_FLG_RESCHED; in snd_timer_reschedule()
737 if (ticks > timer->hw.ticks) in snd_timer_reschedule()
738 ticks = timer->hw.ticks; in snd_timer_reschedule()
740 timer->flags |= SNDRV_TIMER_FLG_CHANGE; in snd_timer_reschedule()
741 timer->sticks = ticks; in snd_timer_reschedule()
745 * timer tasklet
750 struct snd_timer *timer = (struct snd_timer *) arg; in snd_timer_tasklet() local
756 if (timer->card && timer->card->shutdown) in snd_timer_tasklet()
759 spin_lock_irqsave(&timer->lock, flags); in snd_timer_tasklet()
761 while (!list_empty(&timer->sack_list_head)) { in snd_timer_tasklet()
762 p = timer->sack_list_head.next; /* get first item */ in snd_timer_tasklet()
773 spin_unlock(&timer->lock); in snd_timer_tasklet()
776 spin_lock(&timer->lock); in snd_timer_tasklet()
779 spin_unlock_irqrestore(&timer->lock, flags); in snd_timer_tasklet()
783 * timer interrupt
785 * ticks_left is usually equal to timer->sticks.
788 void snd_timer_interrupt(struct snd_timer * timer, unsigned long ticks_left) in snd_timer_interrupt() argument
796 if (timer == NULL) in snd_timer_interrupt()
799 if (timer->card && timer->card->shutdown) in snd_timer_interrupt()
802 spin_lock_irqsave(&timer->lock, flags); in snd_timer_interrupt()
805 resolution = snd_timer_hw_resolution(timer); in snd_timer_interrupt()
812 list_for_each_entry_safe(ti, tmp, &timer->active_list_head, in snd_timer_interrupt()
828 --timer->running; in snd_timer_interrupt()
831 if ((timer->hw.flags & SNDRV_TIMER_HW_TASKLET) || in snd_timer_interrupt()
833 ack_list_head = &timer->ack_list_head; in snd_timer_interrupt()
835 ack_list_head = &timer->sack_list_head; in snd_timer_interrupt()
845 if (timer->flags & SNDRV_TIMER_FLG_RESCHED) in snd_timer_interrupt()
846 snd_timer_reschedule(timer, timer->sticks); in snd_timer_interrupt()
847 if (timer->running) { in snd_timer_interrupt()
848 if (timer->hw.flags & SNDRV_TIMER_HW_STOP) { in snd_timer_interrupt()
849 timer->hw.stop(timer); in snd_timer_interrupt()
850 timer->flags |= SNDRV_TIMER_FLG_CHANGE; in snd_timer_interrupt()
852 if (!(timer->hw.flags & SNDRV_TIMER_HW_AUTO) || in snd_timer_interrupt()
853 (timer->flags & SNDRV_TIMER_FLG_CHANGE)) { in snd_timer_interrupt()
854 /* restart timer */ in snd_timer_interrupt()
855 timer->flags &= ~SNDRV_TIMER_FLG_CHANGE; in snd_timer_interrupt()
856 timer->hw.start(timer); in snd_timer_interrupt()
859 timer->hw.stop(timer); in snd_timer_interrupt()
863 while (!list_empty(&timer->ack_list_head)) { in snd_timer_interrupt()
864 p = timer->ack_list_head.next; /* get first item */ in snd_timer_interrupt()
874 spin_unlock(&timer->lock); in snd_timer_interrupt()
877 spin_lock(&timer->lock); in snd_timer_interrupt()
882 use_tasklet = !list_empty(&timer->sack_list_head); in snd_timer_interrupt()
883 spin_unlock_irqrestore(&timer->lock, flags); in snd_timer_interrupt()
886 tasklet_schedule(&timer->task_queue); in snd_timer_interrupt()
897 struct snd_timer *timer; in snd_timer_new() local
914 timer = kzalloc(sizeof(*timer), GFP_KERNEL); in snd_timer_new()
915 if (!timer) in snd_timer_new()
917 timer->tmr_class = tid->dev_class; in snd_timer_new()
918 timer->card = card; in snd_timer_new()
919 timer->tmr_device = tid->device; in snd_timer_new()
920 timer->tmr_subdevice = tid->subdevice; in snd_timer_new()
922 strlcpy(timer->id, id, sizeof(timer->id)); in snd_timer_new()
923 timer->sticks = 1; in snd_timer_new()
924 INIT_LIST_HEAD(&timer->device_list); in snd_timer_new()
925 INIT_LIST_HEAD(&timer->open_list_head); in snd_timer_new()
926 INIT_LIST_HEAD(&timer->active_list_head); in snd_timer_new()
927 INIT_LIST_HEAD(&timer->ack_list_head); in snd_timer_new()
928 INIT_LIST_HEAD(&timer->sack_list_head); in snd_timer_new()
929 spin_lock_init(&timer->lock); in snd_timer_new()
930 tasklet_init(&timer->task_queue, snd_timer_tasklet, in snd_timer_new()
931 (unsigned long)timer); in snd_timer_new()
932 timer->max_instances = 1000; /* default limit per timer */ in snd_timer_new()
934 timer->module = card->module; in snd_timer_new()
935 err = snd_device_new(card, SNDRV_DEV_TIMER, timer, &ops); in snd_timer_new()
937 snd_timer_free(timer); in snd_timer_new()
942 *rtimer = timer; in snd_timer_new()
947 static int snd_timer_free(struct snd_timer *timer) in snd_timer_free() argument
949 if (!timer) in snd_timer_free()
953 if (! list_empty(&timer->open_list_head)) { in snd_timer_free()
956 pr_warn("ALSA: timer %p is busy?\n", timer); in snd_timer_free()
957 list_for_each_safe(p, n, &timer->open_list_head) { in snd_timer_free()
960 ti->timer = NULL; in snd_timer_free()
963 list_del(&timer->device_list); in snd_timer_free()
966 if (timer->private_free) in snd_timer_free()
967 timer->private_free(timer); in snd_timer_free()
968 kfree(timer); in snd_timer_free()
974 struct snd_timer *timer = device->device_data; in snd_timer_dev_free() local
975 return snd_timer_free(timer); in snd_timer_dev_free()
980 struct snd_timer *timer = dev->device_data; in snd_timer_dev_register() local
983 if (snd_BUG_ON(!timer || !timer->hw.start || !timer->hw.stop)) in snd_timer_dev_register()
985 if (!(timer->hw.flags & SNDRV_TIMER_HW_SLAVE) && in snd_timer_dev_register()
986 !timer->hw.resolution && timer->hw.c_resolution == NULL) in snd_timer_dev_register()
991 if (timer1->tmr_class > timer->tmr_class) in snd_timer_dev_register()
993 if (timer1->tmr_class < timer->tmr_class) in snd_timer_dev_register()
995 if (timer1->card && timer->card) { in snd_timer_dev_register()
996 if (timer1->card->number > timer->card->number) in snd_timer_dev_register()
998 if (timer1->card->number < timer->card->number) in snd_timer_dev_register()
1001 if (timer1->tmr_device > timer->tmr_device) in snd_timer_dev_register()
1003 if (timer1->tmr_device < timer->tmr_device) in snd_timer_dev_register()
1005 if (timer1->tmr_subdevice > timer->tmr_subdevice) in snd_timer_dev_register()
1007 if (timer1->tmr_subdevice < timer->tmr_subdevice) in snd_timer_dev_register()
1013 list_add_tail(&timer->device_list, &timer1->device_list); in snd_timer_dev_register()
1020 struct snd_timer *timer = device->device_data; in snd_timer_dev_disconnect() local
1024 list_del_init(&timer->device_list); in snd_timer_dev_disconnect()
1026 list_for_each_entry(ti, &timer->open_list_head, open_list) { in snd_timer_dev_disconnect()
1034 void snd_timer_notify(struct snd_timer *timer, int event, struct timespec *tstamp) in snd_timer_notify() argument
1040 if (timer->card && timer->card->shutdown) in snd_timer_notify()
1042 if (! (timer->hw.flags & SNDRV_TIMER_HW_SLAVE)) in snd_timer_notify()
1047 spin_lock_irqsave(&timer->lock, flags); in snd_timer_notify()
1051 resolution = snd_timer_hw_resolution(timer); in snd_timer_notify()
1052 list_for_each_entry(ti, &timer->active_list_head, active_list) { in snd_timer_notify()
1059 spin_unlock_irqrestore(&timer->lock, flags); in snd_timer_notify()
1079 int snd_timer_global_free(struct snd_timer *timer) in snd_timer_global_free() argument
1081 return snd_timer_free(timer); in snd_timer_global_free()
1085 int snd_timer_global_register(struct snd_timer *timer) in snd_timer_global_register() argument
1090 dev.device_data = timer; in snd_timer_global_register()
1096 * System timer
1111 struct snd_timer *timer = priv->snd_timer; in snd_timer_s_function() local
1115 snd_timer_interrupt(timer, (long)jiff - (long)priv->last_jiffies); in snd_timer_s_function()
1118 static int snd_timer_s_start(struct snd_timer * timer) in snd_timer_s_start() argument
1123 priv = (struct snd_timer_system_private *) timer->private_data; in snd_timer_s_start()
1125 if (priv->correction > timer->sticks - 1) { in snd_timer_s_start()
1126 priv->correction -= timer->sticks - 1; in snd_timer_s_start()
1129 njiff += timer->sticks - priv->correction; in snd_timer_s_start()
1137 static int snd_timer_s_stop(struct snd_timer * timer) in snd_timer_s_stop() argument
1142 priv = (struct snd_timer_system_private *) timer->private_data; in snd_timer_s_stop()
1146 timer->sticks = priv->last_expires - jiff; in snd_timer_s_stop()
1148 timer->sticks = 1; in snd_timer_s_stop()
1153 static int snd_timer_s_close(struct snd_timer *timer) in snd_timer_s_close() argument
1157 priv = (struct snd_timer_system_private *)timer->private_data; in snd_timer_s_close()
1172 static void snd_timer_free_system(struct snd_timer *timer) in snd_timer_free_system() argument
1174 kfree(timer->private_data); in snd_timer_free_system()
1179 struct snd_timer *timer; in snd_timer_register_system() local
1183 err = snd_timer_global_new("system", SNDRV_TIMER_GLOBAL_SYSTEM, &timer); in snd_timer_register_system()
1186 strcpy(timer->name, "system timer"); in snd_timer_register_system()
1187 timer->hw = snd_timer_system; in snd_timer_register_system()
1190 snd_timer_free(timer); in snd_timer_register_system()
1193 priv->snd_timer = timer; in snd_timer_register_system()
1195 timer->private_data = priv; in snd_timer_register_system()
1196 timer->private_free = snd_timer_free_system; in snd_timer_register_system()
1197 return snd_timer_global_register(timer); in snd_timer_register_system()
1208 struct snd_timer *timer; in snd_timer_proc_read() local
1212 list_for_each_entry(timer, &snd_timer_list, device_list) { in snd_timer_proc_read()
1213 if (timer->card && timer->card->shutdown) in snd_timer_proc_read()
1215 switch (timer->tmr_class) { in snd_timer_proc_read()
1217 snd_iprintf(buffer, "G%i: ", timer->tmr_device); in snd_timer_proc_read()
1221 timer->card->number, timer->tmr_device); in snd_timer_proc_read()
1224 snd_iprintf(buffer, "P%i-%i-%i: ", timer->card->number, in snd_timer_proc_read()
1225 timer->tmr_device, timer->tmr_subdevice); in snd_timer_proc_read()
1228 snd_iprintf(buffer, "?%i-%i-%i-%i: ", timer->tmr_class, in snd_timer_proc_read()
1229 timer->card ? timer->card->number : -1, in snd_timer_proc_read()
1230 timer->tmr_device, timer->tmr_subdevice); in snd_timer_proc_read()
1232 snd_iprintf(buffer, "%s :", timer->name); in snd_timer_proc_read()
1233 if (timer->hw.resolution) in snd_timer_proc_read()
1235 timer->hw.resolution / 1000, in snd_timer_proc_read()
1236 timer->hw.resolution % 1000, in snd_timer_proc_read()
1237 timer->hw.ticks); in snd_timer_proc_read()
1238 if (timer->hw.flags & SNDRV_TIMER_HW_SLAVE) in snd_timer_proc_read()
1241 list_for_each_entry(ti, &timer->open_list_head, open_list) in snd_timer_proc_read()
1495 static void snd_timer_user_copy_id(struct snd_timer_id *id, struct snd_timer *timer) in snd_timer_user_copy_id() argument
1497 id->dev_class = timer->tmr_class; in snd_timer_user_copy_id()
1499 id->card = timer->card ? timer->card->number : -1; in snd_timer_user_copy_id()
1500 id->device = timer->tmr_device; in snd_timer_user_copy_id()
1501 id->subdevice = timer->tmr_subdevice; in snd_timer_user_copy_id()
1507 struct snd_timer *timer; in snd_timer_user_next_device() local
1517 timer = list_entry(snd_timer_list.next, in snd_timer_user_next_device()
1519 snd_timer_user_copy_id(&id, timer); in snd_timer_user_next_device()
1526 timer = list_entry(p, struct snd_timer, device_list); in snd_timer_user_next_device()
1527 if (timer->tmr_class > SNDRV_TIMER_CLASS_GLOBAL) { in snd_timer_user_next_device()
1528 snd_timer_user_copy_id(&id, timer); in snd_timer_user_next_device()
1531 if (timer->tmr_device >= id.device) { in snd_timer_user_next_device()
1532 snd_timer_user_copy_id(&id, timer); in snd_timer_user_next_device()
1554 timer = list_entry(p, struct snd_timer, device_list); in snd_timer_user_next_device()
1555 if (timer->tmr_class > id.dev_class) { in snd_timer_user_next_device()
1556 snd_timer_user_copy_id(&id, timer); in snd_timer_user_next_device()
1559 if (timer->tmr_class < id.dev_class) in snd_timer_user_next_device()
1561 if (timer->card->number > id.card) { in snd_timer_user_next_device()
1562 snd_timer_user_copy_id(&id, timer); in snd_timer_user_next_device()
1565 if (timer->card->number < id.card) in snd_timer_user_next_device()
1567 if (timer->tmr_device > id.device) { in snd_timer_user_next_device()
1568 snd_timer_user_copy_id(&id, timer); in snd_timer_user_next_device()
1571 if (timer->tmr_device < id.device) in snd_timer_user_next_device()
1573 if (timer->tmr_subdevice > id.subdevice) { in snd_timer_user_next_device()
1574 snd_timer_user_copy_id(&id, timer); in snd_timer_user_next_device()
1577 if (timer->tmr_subdevice < id.subdevice) in snd_timer_user_next_device()
1579 snd_timer_user_copy_id(&id, timer); in snd_timer_user_next_device()
1753 t = tu->timeri->timer; in snd_timer_user_info()
1783 t = tu->timeri->timer; in snd_timer_user_params()
1928 /* start timer instead of continue if it's not used before */ in snd_timer_user_continue()
2142 /* unregister the system timer */
2145 struct snd_timer *timer, *n; in snd_timer_free_all() local
2147 list_for_each_entry_safe(timer, n, &snd_timer_list, device_list) in snd_timer_free_all()
2148 snd_timer_free(timer); in snd_timer_free_all()
2162 dev_set_name(&timer_dev, "timer"); in alsa_timer_init()
2166 "system timer"); in alsa_timer_init()
2171 pr_err("ALSA: unable to register system timer (%i)\n", err); in alsa_timer_init()
2178 pr_err("ALSA: unable to register timer device (%i)\n", err); in alsa_timer_init()