Lines Matching refs:cable

74 	 * call in cable->lock
78 * call in cable->lock
90 * call in cable->lock
92 unsigned int (*pos_update)(struct loopback_cable *cable);
141 struct loopback_cable *cable;
206 /* call in cable->lock */
227 /* call in cable->lock */
230 struct loopback_cable *cable = dpcm->cable;
236 err = snd_timer_start(cable->snd_timer.instance, 1);
240 * of the same cable
247 cable->snd_timer.id.card,
248 cable->snd_timer.id.device,
249 cable->snd_timer.id.subdevice,
256 /* call in cable->lock */
265 /* call in cable->lock */
268 struct loopback_cable *cable = dpcm->cable;
272 if (cable->running ^ cable->pause)
275 err = snd_timer_stop(cable->snd_timer.instance);
279 cable->snd_timer.id.card,
280 cable->snd_timer.id.device,
281 cable->snd_timer.id.subdevice,
298 struct loopback_cable *cable = dpcm->cable;
301 if (!cable->snd_timer.instance)
307 * cable->lock;
309 snd_timer_close(cable->snd_timer.instance);
312 cancel_work_sync(&cable->snd_timer.event_work);
314 snd_timer_instance_free(cable->snd_timer.instance);
315 memset(&cable->snd_timer, 0, sizeof(cable->snd_timer));
320 static int loopback_check_format(struct loopback_cable *cable, int stream)
327 if (cable->valid != CABLE_VALID_BOTH) {
332 runtime = cable->streams[SNDRV_PCM_STREAM_PLAYBACK]->
334 cruntime = cable->streams[SNDRV_PCM_STREAM_CAPTURE]->
344 snd_pcm_stop(cable->streams[SNDRV_PCM_STREAM_CAPTURE]->
347 runtime = cable->streams[SNDRV_PCM_STREAM_PLAYBACK]->
349 setup = get_setup(cable->streams[SNDRV_PCM_STREAM_PLAYBACK]);
350 card = cable->streams[SNDRV_PCM_STREAM_PLAYBACK]->loopback->card;
381 struct loopback_cable *cable = dpcm->cable;
386 err = loopback_check_format(cable, substream->stream);
392 spin_lock(&cable->lock);
393 cable->running |= stream;
394 cable->pause &= ~stream;
395 err = cable->ops->start(dpcm);
396 spin_unlock(&cable->lock);
401 spin_lock(&cable->lock);
402 cable->running &= ~stream;
403 cable->pause &= ~stream;
404 err = cable->ops->stop(dpcm);
405 spin_unlock(&cable->lock);
411 spin_lock(&cable->lock);
412 cable->pause |= stream;
413 err = cable->ops->stop(dpcm);
414 spin_unlock(&cable->lock);
420 spin_lock(&cable->lock);
422 cable->pause &= ~stream;
423 err = cable->ops->start(dpcm);
424 spin_unlock(&cable->lock);
438 struct loopback_cable *cable = dpcm->cable;
440 cable->hw.formats = pcm_format_to_bits(runtime->format);
441 cable->hw.rate_min = runtime->rate;
442 cable->hw.rate_max = runtime->rate;
443 cable->hw.channels_min = runtime->channels;
444 cable->hw.channels_max = runtime->channels;
446 if (cable->snd_timer.instance) {
447 cable->hw.period_bytes_min =
449 cable->hw.period_bytes_max = cable->hw.period_bytes_min;
458 struct loopback_cable *cable = dpcm->cable;
461 if (cable->ops->stop_sync) {
462 err = cable->ops->stop_sync(dpcm);
489 if (!(cable->valid & ~(1 << substream->stream)) ||
493 cable->valid |= 1 << substream->stream;
600 /* call in cable->lock */
602 (struct loopback_cable *cable)
605 cable->streams[SNDRV_PCM_STREAM_PLAYBACK];
607 cable->streams[SNDRV_PCM_STREAM_CAPTURE];
612 running = cable->running ^ cable->pause;
661 spin_lock_irqsave(&dpcm->cable->lock, flags);
662 if (loopback_jiffies_timer_pos_update(dpcm->cable) &
667 spin_unlock_irqrestore(&dpcm->cable->lock, flags);
673 spin_unlock_irqrestore(&dpcm->cable->lock, flags);
676 /* call in cable->lock */
682 struct loopback_cable *cable = dpcm->cable;
701 cable->snd_timer.id.card,
702 cable->snd_timer.id.device,
703 cable->snd_timer.id.subdevice,
710 static void loopback_snd_timer_period_elapsed(struct loopback_cable *cable,
720 spin_lock_irqsave(&cable->lock, flags);
721 running = cable->running ^ cable->pause;
724 spin_unlock_irqrestore(&cable->lock, flags);
728 dpcm_play = cable->streams[SNDRV_PCM_STREAM_PLAYBACK];
729 dpcm_capt = cable->streams[SNDRV_PCM_STREAM_CAPTURE];
735 spin_unlock_irqrestore(&cable->lock, flags);
756 spin_unlock_irqrestore(&cable->lock, flags);
779 spin_unlock_irqrestore(&cable->lock, flags);
791 struct loopback_cable *cable = timeri->callback_data;
793 loopback_snd_timer_period_elapsed(cable, SNDRV_TIMER_EVENT_TICK,
799 struct loopback_cable *cable;
801 cable = container_of(work, struct loopback_cable, snd_timer.event_work);
802 loopback_snd_timer_period_elapsed(cable, SNDRV_TIMER_EVENT_MSTOP, 0);
810 /* Do not lock cable->lock here because timer->lock is already hold.
811 * There are other functions which first lock cable->lock and than
814 * spin_lock(&cable->lock)
823 struct loopback_cable *cable = timeri->callback_data;
833 schedule_work(&cable->snd_timer.event_work);
852 struct loopback_cable *cable = dpcm->cable;
855 cable->snd_timer.id.card,
856 cable->snd_timer.id.device,
857 cable->snd_timer.id.subdevice);
859 (cable->snd_timer.stream == SNDRV_PCM_STREAM_CAPTURE) ?
869 spin_lock(&dpcm->cable->lock);
870 if (dpcm->cable->ops->pos_update)
871 dpcm->cable->ops->pos_update(dpcm->cable);
873 spin_unlock(&dpcm->cable->lock);
912 struct loopback_cable *cable = dpcm->cable;
915 cable->valid &= ~(1 << substream->stream);
932 struct loopback_cable *cable = dpcm->cable;
937 m.bits[0] = (u_int32_t)cable->hw.formats;
938 m.bits[1] = (u_int32_t)(cable->hw.formats >> 32);
947 struct loopback_cable *cable = dpcm->cable;
951 t.min = cable->hw.rate_min;
952 t.max = cable->hw.rate_max;
963 struct loopback_cable *cable = dpcm->cable;
967 t.min = cable->hw.channels_min;
968 t.max = cable->hw.channels_max;
979 struct loopback_cable *cable = dpcm->cable;
983 t.min = cable->hw.period_bytes_min;
984 t.max = cable->hw.period_bytes_max;
996 struct loopback_cable *cable;
998 cable = loopback->cables[substream->number][dev];
999 if (!cable)
1001 if (cable->streams[!substream->stream]) {
1003 spin_lock_irq(&cable->lock);
1004 cable->streams[substream->stream] = NULL;
1005 spin_unlock_irq(&cable->lock);
1009 if (cable->ops && cable->ops->close_cable && dpcm)
1010 cable->ops->close_cable(dpcm);
1011 /* free the cable */
1013 kfree(cable);
1103 struct loopback_cable *cable = dpcm->cable;
1106 * per playback and capture subdevice (aka cable).
1108 if (cable->snd_timer.instance)
1119 cable->snd_timer.stream = dpcm->substream->stream;
1120 cable->snd_timer.id = tid;
1137 timeri->callback_data = (void *)cable;
1141 INIT_WORK(&cable->snd_timer.event_work, loopback_snd_timer_work);
1145 * by the other device of the same cable.
1148 * Unlock cable->lock for snd_timer_close/open() call
1154 err = snd_timer_open(timeri, &cable->snd_timer.id, current->pid);
1158 cable->snd_timer.id.card,
1159 cable->snd_timer.id.device,
1160 cable->snd_timer.id.subdevice,
1166 cable->snd_timer.instance = timeri;
1188 struct loopback_cable *cable = NULL;
1201 cable = loopback->cables[substream->number][dev];
1202 if (!cable) {
1203 cable = kzalloc(sizeof(*cable), GFP_KERNEL);
1204 if (!cable) {
1208 spin_lock_init(&cable->lock);
1209 cable->hw = loopback_pcm_hardware;
1211 cable->ops = &loopback_snd_timer_ops;
1213 cable->ops = &loopback_jiffies_timer_ops;
1214 loopback->cables[substream->number][dev] = cable;
1216 dpcm->cable = cable;
1219 if (cable->ops->open) {
1220 err = cable->ops->open(dpcm);
1253 if (cable->snd_timer.instance) {
1269 runtime->hw = cable->hw;
1271 spin_lock_irq(&cable->lock);
1272 cable->streams[substream->stream] = dpcm;
1273 spin_unlock_irq(&cable->lock);
1290 if (dpcm->cable->ops->close_substream)
1291 err = dpcm->cable->ops->close_substream(dpcm);
1412 struct loopback_cable *cable;
1417 cable = loopback->cables[kcontrol->id.subdevice][kcontrol->id.device ^ 1];
1418 if (cable != NULL) {
1419 unsigned int running = cable->running ^ cable->pause;
1621 if (dpcm->cable->ops->dpcm_info)
1622 dpcm->cable->ops->dpcm_info(dpcm, buffer);
1630 struct loopback_cable *cable = loopback->cables[sub][num];
1633 if (cable == NULL) {
1637 snd_iprintf(buffer, " valid: %u\n", cable->valid);
1638 snd_iprintf(buffer, " running: %u\n", cable->running);
1639 snd_iprintf(buffer, " pause: %u\n", cable->pause);
1640 print_dpcm_info(buffer, cable->streams[0], "Playback");
1641 print_dpcm_info(buffer, cable->streams[1], "Capture");
1662 snprintf(name, sizeof(name), "cable#%d", cidx);