Lines Matching refs:cable
92 unsigned int (*pos_update)(struct loopback_cable *cable);
141 struct loopback_cable *cable; member
230 struct loopback_cable *cable = dpcm->cable; in loopback_snd_timer_start() local
236 err = snd_timer_start(cable->snd_timer.instance, 1); in loopback_snd_timer_start()
247 cable->snd_timer.id.card, in loopback_snd_timer_start()
248 cable->snd_timer.id.device, in loopback_snd_timer_start()
249 cable->snd_timer.id.subdevice, in loopback_snd_timer_start()
268 struct loopback_cable *cable = dpcm->cable; in loopback_snd_timer_stop() local
272 if (cable->running ^ cable->pause) in loopback_snd_timer_stop()
275 err = snd_timer_stop(cable->snd_timer.instance); in loopback_snd_timer_stop()
279 cable->snd_timer.id.card, in loopback_snd_timer_stop()
280 cable->snd_timer.id.device, in loopback_snd_timer_stop()
281 cable->snd_timer.id.subdevice, in loopback_snd_timer_stop()
298 struct loopback_cable *cable = dpcm->cable; in loopback_snd_timer_close_cable() local
301 if (!cable->snd_timer.instance) in loopback_snd_timer_close_cable()
309 snd_timer_close(cable->snd_timer.instance); in loopback_snd_timer_close_cable()
312 cancel_work_sync(&cable->snd_timer.event_work); in loopback_snd_timer_close_cable()
314 snd_timer_instance_free(cable->snd_timer.instance); in loopback_snd_timer_close_cable()
315 memset(&cable->snd_timer, 0, sizeof(cable->snd_timer)); in loopback_snd_timer_close_cable()
320 static int loopback_check_format(struct loopback_cable *cable, int stream) in loopback_check_format() argument
327 if (cable->valid != CABLE_VALID_BOTH) { in loopback_check_format()
332 runtime = cable->streams[SNDRV_PCM_STREAM_PLAYBACK]-> in loopback_check_format()
334 cruntime = cable->streams[SNDRV_PCM_STREAM_CAPTURE]-> in loopback_check_format()
344 snd_pcm_stop(cable->streams[SNDRV_PCM_STREAM_CAPTURE]-> in loopback_check_format()
347 runtime = cable->streams[SNDRV_PCM_STREAM_PLAYBACK]-> in loopback_check_format()
349 setup = get_setup(cable->streams[SNDRV_PCM_STREAM_PLAYBACK]); in loopback_check_format()
350 card = cable->streams[SNDRV_PCM_STREAM_PLAYBACK]->loopback->card; in loopback_check_format()
381 struct loopback_cable *cable = dpcm->cable; in loopback_trigger() local
386 err = loopback_check_format(cable, substream->stream); in loopback_trigger()
392 spin_lock(&cable->lock); in loopback_trigger()
393 cable->running |= stream; in loopback_trigger()
394 cable->pause &= ~stream; in loopback_trigger()
395 err = cable->ops->start(dpcm); in loopback_trigger()
396 spin_unlock(&cable->lock); in loopback_trigger()
401 spin_lock(&cable->lock); in loopback_trigger()
402 cable->running &= ~stream; in loopback_trigger()
403 cable->pause &= ~stream; in loopback_trigger()
404 err = cable->ops->stop(dpcm); in loopback_trigger()
405 spin_unlock(&cable->lock); in loopback_trigger()
411 spin_lock(&cable->lock); in loopback_trigger()
412 cable->pause |= stream; in loopback_trigger()
413 err = cable->ops->stop(dpcm); in loopback_trigger()
414 spin_unlock(&cable->lock); in loopback_trigger()
420 spin_lock(&cable->lock); in loopback_trigger()
422 cable->pause &= ~stream; in loopback_trigger()
423 err = cable->ops->start(dpcm); in loopback_trigger()
424 spin_unlock(&cable->lock); in loopback_trigger()
438 struct loopback_cable *cable = dpcm->cable; in params_change() local
440 cable->hw.formats = pcm_format_to_bits(runtime->format); in params_change()
441 cable->hw.rate_min = runtime->rate; in params_change()
442 cable->hw.rate_max = runtime->rate; in params_change()
443 cable->hw.channels_min = runtime->channels; in params_change()
444 cable->hw.channels_max = runtime->channels; in params_change()
446 if (cable->snd_timer.instance) { in params_change()
447 cable->hw.period_bytes_min = in params_change()
449 cable->hw.period_bytes_max = cable->hw.period_bytes_min; in params_change()
458 struct loopback_cable *cable = dpcm->cable; in loopback_prepare() local
461 if (cable->ops->stop_sync) { in loopback_prepare()
462 err = cable->ops->stop_sync(dpcm); in loopback_prepare()
489 if (!(cable->valid & ~(1 << substream->stream)) || in loopback_prepare()
493 cable->valid |= 1 << substream->stream; in loopback_prepare()
602 (struct loopback_cable *cable) in loopback_jiffies_timer_pos_update() argument
605 cable->streams[SNDRV_PCM_STREAM_PLAYBACK]; in loopback_jiffies_timer_pos_update()
607 cable->streams[SNDRV_PCM_STREAM_CAPTURE]; in loopback_jiffies_timer_pos_update()
611 running = cable->running ^ cable->pause; in loopback_jiffies_timer_pos_update()
660 spin_lock_irqsave(&dpcm->cable->lock, flags); in loopback_jiffies_timer_function()
661 if (loopback_jiffies_timer_pos_update(dpcm->cable) & in loopback_jiffies_timer_function()
666 spin_unlock_irqrestore(&dpcm->cable->lock, flags); in loopback_jiffies_timer_function()
672 spin_unlock_irqrestore(&dpcm->cable->lock, flags); in loopback_jiffies_timer_function()
681 struct loopback_cable *cable = dpcm->cable; in loopback_snd_timer_check_resolution() local
700 cable->snd_timer.id.card, in loopback_snd_timer_check_resolution()
701 cable->snd_timer.id.device, in loopback_snd_timer_check_resolution()
702 cable->snd_timer.id.subdevice, in loopback_snd_timer_check_resolution()
709 static void loopback_snd_timer_period_elapsed(struct loopback_cable *cable, in loopback_snd_timer_period_elapsed() argument
719 spin_lock_irqsave(&cable->lock, flags); in loopback_snd_timer_period_elapsed()
720 running = cable->running ^ cable->pause; in loopback_snd_timer_period_elapsed()
723 spin_unlock_irqrestore(&cable->lock, flags); in loopback_snd_timer_period_elapsed()
727 dpcm_play = cable->streams[SNDRV_PCM_STREAM_PLAYBACK]; in loopback_snd_timer_period_elapsed()
728 dpcm_capt = cable->streams[SNDRV_PCM_STREAM_CAPTURE]; in loopback_snd_timer_period_elapsed()
734 spin_unlock_irqrestore(&cable->lock, flags); in loopback_snd_timer_period_elapsed()
755 spin_unlock_irqrestore(&cable->lock, flags); in loopback_snd_timer_period_elapsed()
778 spin_unlock_irqrestore(&cable->lock, flags); in loopback_snd_timer_period_elapsed()
790 struct loopback_cable *cable = timeri->callback_data; in loopback_snd_timer_function() local
792 loopback_snd_timer_period_elapsed(cable, SNDRV_TIMER_EVENT_TICK, in loopback_snd_timer_function()
798 struct loopback_cable *cable; in loopback_snd_timer_work() local
800 cable = container_of(work, struct loopback_cable, snd_timer.event_work); in loopback_snd_timer_work()
801 loopback_snd_timer_period_elapsed(cable, SNDRV_TIMER_EVENT_MSTOP, 0); in loopback_snd_timer_work()
822 struct loopback_cable *cable = timeri->callback_data; in loopback_snd_timer_event() local
832 schedule_work(&cable->snd_timer.event_work); in loopback_snd_timer_event()
851 struct loopback_cable *cable = dpcm->cable; in loopback_snd_timer_dpcm_info() local
854 cable->snd_timer.id.card, in loopback_snd_timer_dpcm_info()
855 cable->snd_timer.id.device, in loopback_snd_timer_dpcm_info()
856 cable->snd_timer.id.subdevice); in loopback_snd_timer_dpcm_info()
858 (cable->snd_timer.stream == SNDRV_PCM_STREAM_CAPTURE) ? in loopback_snd_timer_dpcm_info()
868 spin_lock(&dpcm->cable->lock); in loopback_pointer()
869 if (dpcm->cable->ops->pos_update) in loopback_pointer()
870 dpcm->cable->ops->pos_update(dpcm->cable); in loopback_pointer()
872 spin_unlock(&dpcm->cable->lock); in loopback_pointer()
911 struct loopback_cable *cable = dpcm->cable; in loopback_hw_free() local
914 cable->valid &= ~(1 << substream->stream); in loopback_hw_free()
931 struct loopback_cable *cable = dpcm->cable; in rule_format() local
936 m.bits[0] = (u_int32_t)cable->hw.formats; in rule_format()
937 m.bits[1] = (u_int32_t)(cable->hw.formats >> 32); in rule_format()
946 struct loopback_cable *cable = dpcm->cable; in rule_rate() local
950 t.min = cable->hw.rate_min; in rule_rate()
951 t.max = cable->hw.rate_max; in rule_rate()
962 struct loopback_cable *cable = dpcm->cable; in rule_channels() local
966 t.min = cable->hw.channels_min; in rule_channels()
967 t.max = cable->hw.channels_max; in rule_channels()
978 struct loopback_cable *cable = dpcm->cable; in rule_period_bytes() local
982 t.min = cable->hw.period_bytes_min; in rule_period_bytes()
983 t.max = cable->hw.period_bytes_max; in rule_period_bytes()
995 struct loopback_cable *cable; in free_cable() local
997 cable = loopback->cables[substream->number][dev]; in free_cable()
998 if (!cable) in free_cable()
1000 if (cable->streams[!substream->stream]) { in free_cable()
1002 spin_lock_irq(&cable->lock); in free_cable()
1003 cable->streams[substream->stream] = NULL; in free_cable()
1004 spin_unlock_irq(&cable->lock); in free_cable()
1008 if (cable->ops && cable->ops->close_cable && dpcm) in free_cable()
1009 cable->ops->close_cable(dpcm); in free_cable()
1012 kfree(cable); in free_cable()
1102 struct loopback_cable *cable = dpcm->cable; in loopback_snd_timer_open() local
1107 if (cable->snd_timer.instance) in loopback_snd_timer_open()
1118 cable->snd_timer.stream = dpcm->substream->stream; in loopback_snd_timer_open()
1119 cable->snd_timer.id = tid; in loopback_snd_timer_open()
1136 timeri->callback_data = (void *)cable; in loopback_snd_timer_open()
1140 INIT_WORK(&cable->snd_timer.event_work, loopback_snd_timer_work); in loopback_snd_timer_open()
1153 err = snd_timer_open(timeri, &cable->snd_timer.id, current->pid); in loopback_snd_timer_open()
1157 cable->snd_timer.id.card, in loopback_snd_timer_open()
1158 cable->snd_timer.id.device, in loopback_snd_timer_open()
1159 cable->snd_timer.id.subdevice, in loopback_snd_timer_open()
1165 cable->snd_timer.instance = timeri; in loopback_snd_timer_open()
1187 struct loopback_cable *cable = NULL; in loopback_open() local
1200 cable = loopback->cables[substream->number][dev]; in loopback_open()
1201 if (!cable) { in loopback_open()
1202 cable = kzalloc(sizeof(*cable), GFP_KERNEL); in loopback_open()
1203 if (!cable) { in loopback_open()
1207 spin_lock_init(&cable->lock); in loopback_open()
1208 cable->hw = loopback_pcm_hardware; in loopback_open()
1210 cable->ops = &loopback_snd_timer_ops; in loopback_open()
1212 cable->ops = &loopback_jiffies_timer_ops; in loopback_open()
1213 loopback->cables[substream->number][dev] = cable; in loopback_open()
1215 dpcm->cable = cable; in loopback_open()
1218 if (cable->ops->open) { in loopback_open()
1219 err = cable->ops->open(dpcm); in loopback_open()
1252 if (cable->snd_timer.instance) { in loopback_open()
1268 runtime->hw = cable->hw; in loopback_open()
1270 spin_lock_irq(&cable->lock); in loopback_open()
1271 cable->streams[substream->stream] = dpcm; in loopback_open()
1272 spin_unlock_irq(&cable->lock); in loopback_open()
1289 if (dpcm->cable->ops->close_substream) in loopback_close()
1290 err = dpcm->cable->ops->close_substream(dpcm); in loopback_close()
1411 struct loopback_cable *cable; in loopback_active_get() local
1416 cable = loopback->cables[kcontrol->id.subdevice][kcontrol->id.device ^ 1]; in loopback_active_get()
1417 if (cable != NULL) { in loopback_active_get()
1418 unsigned int running = cable->running ^ cable->pause; in loopback_active_get()
1620 if (dpcm->cable->ops->dpcm_info) in print_dpcm_info()
1621 dpcm->cable->ops->dpcm_info(dpcm, buffer); in print_dpcm_info()
1629 struct loopback_cable *cable = loopback->cables[sub][num]; in print_substream_info() local
1632 if (cable == NULL) { in print_substream_info()
1636 snd_iprintf(buffer, " valid: %u\n", cable->valid); in print_substream_info()
1637 snd_iprintf(buffer, " running: %u\n", cable->running); in print_substream_info()
1638 snd_iprintf(buffer, " pause: %u\n", cable->pause); in print_substream_info()
1639 print_dpcm_info(buffer, cable->streams[0], "Playback"); in print_substream_info()
1640 print_dpcm_info(buffer, cable->streams[1], "Capture"); in print_substream_info()