Lines Matching full:cable
78 * call in cable->lock
82 * call in cable->lock
94 * call in cable->lock
96 unsigned int (*pos_update)(struct loopback_cable *cable);
145 struct loopback_cable *cable; member
226 /* call in cable->lock */
247 /* call in cable->lock */
250 struct loopback_cable *cable = dpcm->cable; in loopback_snd_timer_start() local
256 err = snd_timer_start(cable->snd_timer.instance, 1); in loopback_snd_timer_start()
260 * of the same cable in loopback_snd_timer_start()
267 cable->snd_timer.id.card, in loopback_snd_timer_start()
268 cable->snd_timer.id.device, in loopback_snd_timer_start()
269 cable->snd_timer.id.subdevice, in loopback_snd_timer_start()
276 /* call in cable->lock */
285 /* call in cable->lock */
288 struct loopback_cable *cable = dpcm->cable; in loopback_snd_timer_stop() local
292 if (cable->running ^ cable->pause) in loopback_snd_timer_stop()
295 err = snd_timer_stop(cable->snd_timer.instance); in loopback_snd_timer_stop()
299 cable->snd_timer.id.card, in loopback_snd_timer_stop()
300 cable->snd_timer.id.device, in loopback_snd_timer_stop()
301 cable->snd_timer.id.subdevice, in loopback_snd_timer_stop()
318 struct loopback_cable *cable = dpcm->cable; in loopback_snd_timer_close_cable() local
321 if (!cable->snd_timer.instance) in loopback_snd_timer_close_cable()
327 * cable->lock; in loopback_snd_timer_close_cable()
329 snd_timer_close(cable->snd_timer.instance); in loopback_snd_timer_close_cable()
332 cancel_work_sync(&cable->snd_timer.event_work); in loopback_snd_timer_close_cable()
334 snd_timer_instance_free(cable->snd_timer.instance); in loopback_snd_timer_close_cable()
335 memset(&cable->snd_timer, 0, sizeof(cable->snd_timer)); in loopback_snd_timer_close_cable()
340 static int loopback_check_format(struct loopback_cable *cable, int stream) in loopback_check_format() argument
347 if (cable->valid != CABLE_VALID_BOTH) { in loopback_check_format()
352 runtime = cable->streams[SNDRV_PCM_STREAM_PLAYBACK]-> in loopback_check_format()
354 cruntime = cable->streams[SNDRV_PCM_STREAM_CAPTURE]-> in loopback_check_format()
364 snd_pcm_stop(cable->streams[SNDRV_PCM_STREAM_CAPTURE]-> in loopback_check_format()
367 runtime = cable->streams[SNDRV_PCM_STREAM_PLAYBACK]-> in loopback_check_format()
369 setup = get_setup(cable->streams[SNDRV_PCM_STREAM_PLAYBACK]); in loopback_check_format()
370 card = cable->streams[SNDRV_PCM_STREAM_PLAYBACK]->loopback->card; in loopback_check_format()
401 struct loopback_cable *cable = dpcm->cable; in loopback_trigger() local
406 err = loopback_check_format(cable, substream->stream); in loopback_trigger()
412 spin_lock(&cable->lock); in loopback_trigger()
413 cable->running |= stream; in loopback_trigger()
414 cable->pause &= ~stream; in loopback_trigger()
415 err = cable->ops->start(dpcm); in loopback_trigger()
416 spin_unlock(&cable->lock); in loopback_trigger()
421 spin_lock(&cable->lock); in loopback_trigger()
422 cable->running &= ~stream; in loopback_trigger()
423 cable->pause &= ~stream; in loopback_trigger()
424 err = cable->ops->stop(dpcm); in loopback_trigger()
425 spin_unlock(&cable->lock); in loopback_trigger()
431 spin_lock(&cable->lock); in loopback_trigger()
432 cable->pause |= stream; in loopback_trigger()
433 err = cable->ops->stop(dpcm); in loopback_trigger()
434 spin_unlock(&cable->lock); in loopback_trigger()
440 spin_lock(&cable->lock); in loopback_trigger()
442 cable->pause &= ~stream; in loopback_trigger()
443 err = cable->ops->start(dpcm); in loopback_trigger()
444 spin_unlock(&cable->lock); in loopback_trigger()
458 struct loopback_cable *cable = dpcm->cable; in params_change() local
460 cable->hw.formats = pcm_format_to_bits(runtime->format); in params_change()
461 cable->hw.rate_min = runtime->rate; in params_change()
462 cable->hw.rate_max = runtime->rate; in params_change()
463 cable->hw.channels_min = runtime->channels; in params_change()
464 cable->hw.channels_max = runtime->channels; in params_change()
466 if (cable->snd_timer.instance) { in params_change()
467 cable->hw.period_bytes_min = in params_change()
469 cable->hw.period_bytes_max = cable->hw.period_bytes_min; in params_change()
478 struct loopback_cable *cable = dpcm->cable; in loopback_prepare() local
481 if (cable->ops->stop_sync) { in loopback_prepare()
482 err = cable->ops->stop_sync(dpcm); in loopback_prepare()
509 if (!(cable->valid & ~(1 << substream->stream)) || in loopback_prepare()
513 cable->valid |= 1 << substream->stream; in loopback_prepare()
620 /* call in cable->lock */
622 (struct loopback_cable *cable) in loopback_jiffies_timer_pos_update() argument
625 cable->streams[SNDRV_PCM_STREAM_PLAYBACK]; in loopback_jiffies_timer_pos_update()
627 cable->streams[SNDRV_PCM_STREAM_CAPTURE]; in loopback_jiffies_timer_pos_update()
632 running = cable->running ^ cable->pause; in loopback_jiffies_timer_pos_update()
681 spin_lock_irqsave(&dpcm->cable->lock, flags); in loopback_jiffies_timer_function()
682 if (loopback_jiffies_timer_pos_update(dpcm->cable) & in loopback_jiffies_timer_function()
687 spin_unlock_irqrestore(&dpcm->cable->lock, flags); in loopback_jiffies_timer_function()
693 spin_unlock_irqrestore(&dpcm->cable->lock, flags); in loopback_jiffies_timer_function()
696 /* call in cable->lock */
702 struct loopback_cable *cable = dpcm->cable; in loopback_snd_timer_check_resolution() local
721 cable->snd_timer.id.card, in loopback_snd_timer_check_resolution()
722 cable->snd_timer.id.device, in loopback_snd_timer_check_resolution()
723 cable->snd_timer.id.subdevice, in loopback_snd_timer_check_resolution()
730 static void loopback_snd_timer_period_elapsed(struct loopback_cable *cable, in loopback_snd_timer_period_elapsed() argument
740 spin_lock_irqsave(&cable->lock, flags); in loopback_snd_timer_period_elapsed()
741 running = cable->running ^ cable->pause; in loopback_snd_timer_period_elapsed()
744 spin_unlock_irqrestore(&cable->lock, flags); in loopback_snd_timer_period_elapsed()
748 dpcm_play = cable->streams[SNDRV_PCM_STREAM_PLAYBACK]; in loopback_snd_timer_period_elapsed()
749 dpcm_capt = cable->streams[SNDRV_PCM_STREAM_CAPTURE]; in loopback_snd_timer_period_elapsed()
755 spin_unlock_irqrestore(&cable->lock, flags); in loopback_snd_timer_period_elapsed()
776 spin_unlock_irqrestore(&cable->lock, flags); in loopback_snd_timer_period_elapsed()
799 spin_unlock_irqrestore(&cable->lock, flags); in loopback_snd_timer_period_elapsed()
811 struct loopback_cable *cable = timeri->callback_data; in loopback_snd_timer_function() local
813 loopback_snd_timer_period_elapsed(cable, SNDRV_TIMER_EVENT_TICK, in loopback_snd_timer_function()
819 struct loopback_cable *cable; in loopback_snd_timer_work() local
821 cable = container_of(work, struct loopback_cable, snd_timer.event_work); in loopback_snd_timer_work()
822 loopback_snd_timer_period_elapsed(cable, SNDRV_TIMER_EVENT_MSTOP, 0); in loopback_snd_timer_work()
830 /* Do not lock cable->lock here because timer->lock is already hold. in loopback_snd_timer_event()
831 * There are other functions which first lock cable->lock and than in loopback_snd_timer_event()
834 * spin_lock(&cable->lock) in loopback_snd_timer_event()
843 struct loopback_cable *cable = timeri->callback_data; in loopback_snd_timer_event() local
853 schedule_work(&cable->snd_timer.event_work); in loopback_snd_timer_event()
872 struct loopback_cable *cable = dpcm->cable; in loopback_snd_timer_dpcm_info() local
875 cable->snd_timer.id.card, in loopback_snd_timer_dpcm_info()
876 cable->snd_timer.id.device, in loopback_snd_timer_dpcm_info()
877 cable->snd_timer.id.subdevice); in loopback_snd_timer_dpcm_info()
879 (cable->snd_timer.stream == SNDRV_PCM_STREAM_CAPTURE) ? in loopback_snd_timer_dpcm_info()
889 spin_lock(&dpcm->cable->lock); in loopback_pointer()
890 if (dpcm->cable->ops->pos_update) in loopback_pointer()
891 dpcm->cable->ops->pos_update(dpcm->cable); in loopback_pointer()
893 spin_unlock(&dpcm->cable->lock); in loopback_pointer()
932 struct loopback_cable *cable = dpcm->cable; in loopback_hw_free() local
935 cable->valid &= ~(1 << substream->stream); in loopback_hw_free()
952 struct loopback_cable *cable = dpcm->cable; in rule_format() local
957 m.bits[0] = (u_int32_t)cable->hw.formats; in rule_format()
958 m.bits[1] = (u_int32_t)(cable->hw.formats >> 32); in rule_format()
967 struct loopback_cable *cable = dpcm->cable; in rule_rate() local
971 t.min = cable->hw.rate_min; in rule_rate()
972 t.max = cable->hw.rate_max; in rule_rate()
983 struct loopback_cable *cable = dpcm->cable; in rule_channels() local
987 t.min = cable->hw.channels_min; in rule_channels()
988 t.max = cable->hw.channels_max; in rule_channels()
999 struct loopback_cable *cable = dpcm->cable; in rule_period_bytes() local
1003 t.min = cable->hw.period_bytes_min; in rule_period_bytes()
1004 t.max = cable->hw.period_bytes_max; in rule_period_bytes()
1016 struct loopback_cable *cable; in free_cable() local
1018 cable = loopback->cables[substream->number][dev]; in free_cable()
1019 if (!cable) in free_cable()
1021 if (cable->streams[!substream->stream]) { in free_cable()
1023 spin_lock_irq(&cable->lock); in free_cable()
1024 cable->streams[substream->stream] = NULL; in free_cable()
1025 spin_unlock_irq(&cable->lock); in free_cable()
1029 if (cable->ops && cable->ops->close_cable && dpcm) in free_cable()
1030 cable->ops->close_cable(dpcm); in free_cable()
1031 /* free the cable */ in free_cable()
1033 kfree(cable); in free_cable()
1123 struct loopback_cable *cable = dpcm->cable; in loopback_snd_timer_open() local
1126 * per playback and capture subdevice (aka cable). in loopback_snd_timer_open()
1128 if (cable->snd_timer.instance) in loopback_snd_timer_open()
1139 cable->snd_timer.stream = dpcm->substream->stream; in loopback_snd_timer_open()
1140 cable->snd_timer.id = tid; in loopback_snd_timer_open()
1157 timeri->callback_data = (void *)cable; in loopback_snd_timer_open()
1161 INIT_WORK(&cable->snd_timer.event_work, loopback_snd_timer_work); in loopback_snd_timer_open()
1165 * by the other device of the same cable. in loopback_snd_timer_open()
1168 * Unlock cable->lock for snd_timer_close/open() call in loopback_snd_timer_open()
1174 err = snd_timer_open(timeri, &cable->snd_timer.id, current->pid); in loopback_snd_timer_open()
1178 cable->snd_timer.id.card, in loopback_snd_timer_open()
1179 cable->snd_timer.id.device, in loopback_snd_timer_open()
1180 cable->snd_timer.id.subdevice, in loopback_snd_timer_open()
1186 cable->snd_timer.instance = timeri; in loopback_snd_timer_open()
1208 struct loopback_cable *cable = NULL; in loopback_open() local
1221 cable = loopback->cables[substream->number][dev]; in loopback_open()
1222 if (!cable) { in loopback_open()
1223 cable = kzalloc(sizeof(*cable), GFP_KERNEL); in loopback_open()
1224 if (!cable) { in loopback_open()
1228 spin_lock_init(&cable->lock); in loopback_open()
1229 cable->hw = loopback_pcm_hardware; in loopback_open()
1231 cable->ops = &loopback_snd_timer_ops; in loopback_open()
1233 cable->ops = &loopback_jiffies_timer_ops; in loopback_open()
1234 loopback->cables[substream->number][dev] = cable; in loopback_open()
1236 dpcm->cable = cable; in loopback_open()
1239 if (cable->ops->open) { in loopback_open()
1240 err = cable->ops->open(dpcm); in loopback_open()
1273 if (cable->snd_timer.instance) { in loopback_open()
1289 runtime->hw = cable->hw; in loopback_open()
1291 spin_lock_irq(&cable->lock); in loopback_open()
1292 cable->streams[substream->stream] = dpcm; in loopback_open()
1293 spin_unlock_irq(&cable->lock); in loopback_open()
1310 if (dpcm->cable->ops->close_substream) in loopback_close()
1311 err = dpcm->cable->ops->close_substream(dpcm); in loopback_close()
1432 struct loopback_cable *cable; in loopback_active_get() local
1437 cable = loopback->cables[kcontrol->id.subdevice][kcontrol->id.device ^ 1]; in loopback_active_get()
1438 if (cable != NULL) { in loopback_active_get()
1439 unsigned int running = cable->running ^ cable->pause; in loopback_active_get()
1641 if (dpcm->cable->ops->dpcm_info) in print_dpcm_info()
1642 dpcm->cable->ops->dpcm_info(dpcm, buffer); in print_dpcm_info()
1650 struct loopback_cable *cable = loopback->cables[sub][num]; in print_substream_info() local
1652 snd_iprintf(buffer, "Cable %i substream %i:\n", num, sub); in print_substream_info()
1653 if (cable == NULL) { in print_substream_info()
1657 snd_iprintf(buffer, " valid: %u\n", cable->valid); in print_substream_info()
1658 snd_iprintf(buffer, " running: %u\n", cable->running); in print_substream_info()
1659 snd_iprintf(buffer, " pause: %u\n", cable->pause); in print_substream_info()
1660 print_dpcm_info(buffer, cable->streams[0], "Playback"); in print_substream_info()
1661 print_dpcm_info(buffer, cable->streams[1], "Capture"); in print_substream_info()
1682 snprintf(name, sizeof(name), "cable#%d", cidx); in loopback_cable_proc_new()