Lines Matching full:loopback
3 * Loopback soundcard
34 MODULE_DESCRIPTION("A loopback soundcard");
36 MODULE_SUPPORTED_DEVICE("{{ALSA,Loopback soundcard}}");
48 MODULE_PARM_DESC(index, "Index value for loopback soundcard.");
50 MODULE_PARM_DESC(id, "ID string for loopback soundcard.");
52 MODULE_PARM_DESC(enable, "Enable this loopback soundcard.");
54 MODULE_PARM_DESC(pcm_substreams, "PCM substreams # (1-8) for loopback driver.");
71 * call in loopback->cable_lock
87 * call in loopback->cable_lock
130 struct loopback { struct
140 struct loopback *loopback; member
194 return &dpcm->loopback->setup[dpcm->substream->number][device]; in get_setup()
234 /* Loopback device has to use same period as timer card. Therefore in loopback_snd_timer_start()
296 /* call in loopback->cable_lock */
307 * loopback->cable_lock is locked. Therefore no need to lock in loopback_snd_timer_close_cable()
351 card = cable->streams[SNDRV_PCM_STREAM_PLAYBACK]->loopback->card; in loopback_check_format()
373 snd_ctl_notify(dpcm->loopback->card, in loopback_active_notify()
489 mutex_lock(&dpcm->loopback->cable_lock); in loopback_prepare()
495 mutex_unlock(&dpcm->loopback->cable_lock); in loopback_prepare()
700 …of loopback device is not corresponding to timer resolution (%lu nsec = %lu frames) of card timer … in loopback_snd_timer_check_resolution()
915 mutex_lock(&dpcm->loopback->cable_lock); in loopback_hw_free()
917 mutex_unlock(&dpcm->loopback->cable_lock); in loopback_hw_free()
937 mutex_lock(&dpcm->loopback->cable_lock); in rule_format()
940 mutex_unlock(&dpcm->loopback->cable_lock); in rule_format()
951 mutex_lock(&dpcm->loopback->cable_lock); in rule_rate()
954 mutex_unlock(&dpcm->loopback->cable_lock); in rule_rate()
967 mutex_lock(&dpcm->loopback->cable_lock); in rule_channels()
970 mutex_unlock(&dpcm->loopback->cable_lock); in rule_channels()
983 mutex_lock(&dpcm->loopback->cable_lock); in rule_period_bytes()
986 mutex_unlock(&dpcm->loopback->cable_lock); in rule_period_bytes()
995 struct loopback *loopback = substream->private_data; in free_cable() local
999 cable = loopback->cables[substream->number][dev]; in free_cable()
1013 loopback->cables[substream->number][dev] = NULL; in free_cable()
1095 /* call in loopback->cable_lock */
1112 err = loopback_parse_timer_id(dpcm->loopback->timer_source, &tid); in loopback_snd_timer_open()
1116 dpcm->loopback->timer_source, err); in loopback_snd_timer_open()
1123 timeri = snd_timer_instance_new(dpcm->loopback->card->id); in loopback_snd_timer_open()
1144 /* The mutex loopback->cable_lock is kept locked. in loopback_snd_timer_open()
1187 struct loopback *loopback = substream->private_data; in loopback_open() local
1193 mutex_lock(&loopback->cable_lock); in loopback_open()
1199 dpcm->loopback = loopback; in loopback_open()
1202 cable = loopback->cables[substream->number][dev]; in loopback_open()
1211 if (loopback->timer_source) in loopback_open()
1215 loopback->cables[substream->number][dev] = cable; in loopback_open()
1281 mutex_unlock(&loopback->cable_lock); in loopback_open()
1287 struct loopback *loopback = substream->private_data; in loopback_close() local
1293 mutex_lock(&loopback->cable_lock); in loopback_close()
1295 mutex_unlock(&loopback->cable_lock); in loopback_close()
1308 static int loopback_pcm_new(struct loopback *loopback, in loopback_pcm_new() argument
1314 err = snd_pcm_new(loopback->card, "Loopback PCM", device, in loopback_pcm_new()
1322 pcm->private_data = loopback; in loopback_pcm_new()
1324 strcpy(pcm->name, "Loopback PCM"); in loopback_pcm_new()
1326 loopback->pcm[device] = pcm; in loopback_pcm_new()
1344 struct loopback *loopback = snd_kcontrol_chip(kcontrol); in loopback_rate_shift_get() local
1346 mutex_lock(&loopback->cable_lock); in loopback_rate_shift_get()
1348 loopback->setup[kcontrol->id.subdevice] in loopback_rate_shift_get()
1350 mutex_unlock(&loopback->cable_lock); in loopback_rate_shift_get()
1357 struct loopback *loopback = snd_kcontrol_chip(kcontrol); in loopback_rate_shift_put() local
1366 mutex_lock(&loopback->cable_lock); in loopback_rate_shift_put()
1367 if (val != loopback->setup[kcontrol->id.subdevice] in loopback_rate_shift_put()
1369 loopback->setup[kcontrol->id.subdevice] in loopback_rate_shift_put()
1373 mutex_unlock(&loopback->cable_lock); in loopback_rate_shift_put()
1380 struct loopback *loopback = snd_kcontrol_chip(kcontrol); in loopback_notify_get() local
1382 mutex_lock(&loopback->cable_lock); in loopback_notify_get()
1384 loopback->setup[kcontrol->id.subdevice] in loopback_notify_get()
1386 mutex_unlock(&loopback->cable_lock); in loopback_notify_get()
1393 struct loopback *loopback = snd_kcontrol_chip(kcontrol); in loopback_notify_put() local
1398 mutex_lock(&loopback->cable_lock); in loopback_notify_put()
1399 if (val != loopback->setup[kcontrol->id.subdevice] in loopback_notify_put()
1401 loopback->setup[kcontrol->id.subdevice] in loopback_notify_put()
1405 mutex_unlock(&loopback->cable_lock); in loopback_notify_put()
1412 struct loopback *loopback = snd_kcontrol_chip(kcontrol); in loopback_active_get() local
1417 mutex_lock(&loopback->cable_lock); in loopback_active_get()
1418 cable = loopback->cables[kcontrol->id.subdevice][kcontrol->id.device ^ 1]; in loopback_active_get()
1424 mutex_unlock(&loopback->cable_lock); in loopback_active_get()
1443 struct loopback *loopback = snd_kcontrol_chip(kcontrol); in loopback_format_get() local
1446 (__force int)loopback->setup[kcontrol->id.subdevice] in loopback_format_get()
1465 struct loopback *loopback = snd_kcontrol_chip(kcontrol); in loopback_rate_get() local
1467 mutex_lock(&loopback->cable_lock); in loopback_rate_get()
1469 loopback->setup[kcontrol->id.subdevice] in loopback_rate_get()
1471 mutex_unlock(&loopback->cable_lock); in loopback_rate_get()
1489 struct loopback *loopback = snd_kcontrol_chip(kcontrol); in loopback_channels_get() local
1491 mutex_lock(&loopback->cable_lock); in loopback_channels_get()
1493 loopback->setup[kcontrol->id.subdevice] in loopback_channels_get()
1495 mutex_unlock(&loopback->cable_lock); in loopback_channels_get()
1548 static int loopback_mixer_new(struct loopback *loopback, int notify) in loopback_mixer_new() argument
1550 struct snd_card *card = loopback->card; in loopback_mixer_new()
1556 strcpy(card->mixername, "Loopback Mixer"); in loopback_mixer_new()
1558 pcm = loopback->pcm[dev]; in loopback_mixer_new()
1562 setup = &loopback->setup[substr][dev]; in loopback_mixer_new()
1571 loopback); in loopback_mixer_new()
1627 struct loopback *loopback, in print_substream_info() argument
1631 struct loopback_cable *cable = loopback->cables[sub][num]; in print_substream_info()
1648 struct loopback *loopback = entry->private_data; in print_cable_info() local
1651 mutex_lock(&loopback->cable_lock); in print_cable_info()
1655 print_substream_info(buffer, loopback, sub, num); in print_cable_info()
1656 mutex_unlock(&loopback->cable_lock); in print_cable_info()
1659 static int loopback_cable_proc_new(struct loopback *loopback, int cidx) in loopback_cable_proc_new() argument
1664 return snd_card_ro_proc_new(loopback->card, name, loopback, in loopback_cable_proc_new()
1668 static void loopback_set_timer_source(struct loopback *loopback, in loopback_set_timer_source() argument
1671 if (loopback->timer_source) { in loopback_set_timer_source()
1672 devm_kfree(loopback->card->dev, loopback->timer_source); in loopback_set_timer_source()
1673 loopback->timer_source = NULL; in loopback_set_timer_source()
1676 loopback->timer_source = devm_kstrdup(loopback->card->dev, in loopback_set_timer_source()
1683 struct loopback *loopback = entry->private_data; in print_timer_source_info() local
1685 mutex_lock(&loopback->cable_lock); in print_timer_source_info()
1687 loopback->timer_source ? loopback->timer_source : ""); in print_timer_source_info()
1688 mutex_unlock(&loopback->cable_lock); in print_timer_source_info()
1694 struct loopback *loopback = entry->private_data; in change_timer_source_info() local
1697 mutex_lock(&loopback->cable_lock); in change_timer_source_info()
1699 loopback_set_timer_source(loopback, strim(line)); in change_timer_source_info()
1700 mutex_unlock(&loopback->cable_lock); in change_timer_source_info()
1703 static int loopback_timer_source_proc_new(struct loopback *loopback) in loopback_timer_source_proc_new() argument
1705 return snd_card_rw_proc_new(loopback->card, "timer_source", loopback, in loopback_timer_source_proc_new()
1713 struct loopback *loopback; in loopback_probe() local
1718 sizeof(struct loopback), &card); in loopback_probe()
1721 loopback = card->private_data; in loopback_probe()
1728 loopback->card = card; in loopback_probe()
1729 loopback_set_timer_source(loopback, timer_source[dev]); in loopback_probe()
1731 mutex_init(&loopback->cable_lock); in loopback_probe()
1733 err = loopback_pcm_new(loopback, 0, pcm_substreams[dev]); in loopback_probe()
1736 err = loopback_pcm_new(loopback, 1, pcm_substreams[dev]); in loopback_probe()
1739 err = loopback_mixer_new(loopback, pcm_notify[dev] ? 1 : 0); in loopback_probe()
1742 loopback_cable_proc_new(loopback, 0); in loopback_probe()
1743 loopback_cable_proc_new(loopback, 1); in loopback_probe()
1744 loopback_timer_source_proc_new(loopback); in loopback_probe()
1745 strcpy(card->driver, "Loopback"); in loopback_probe()
1746 strcpy(card->shortname, "Loopback"); in loopback_probe()
1747 sprintf(card->longname, "Loopback %i", dev + 1); in loopback_probe()
1834 printk(KERN_ERR "aloop: No loopback enabled\n"); in alsa_card_loopback_init()