Lines Matching full:loopback
3 * Loopback soundcard
34 MODULE_DESCRIPTION("A loopback soundcard");
47 MODULE_PARM_DESC(index, "Index value for loopback soundcard.");
49 MODULE_PARM_DESC(id, "ID string for loopback soundcard.");
51 MODULE_PARM_DESC(enable, "Enable this loopback soundcard.");
53 MODULE_PARM_DESC(pcm_substreams, "PCM substreams # (1-8) for loopback driver.");
70 * call in loopback->cable_lock
86 * call in loopback->cable_lock
131 struct loopback { struct
141 struct loopback *loopback; argument
198 return &dpcm->loopback->setup[dpcm->substream->number][device]; in get_setup()
238 /* Loopback device has to use same period as timer card. Therefore in loopback_snd_timer_start()
300 /* call in loopback->cable_lock */
311 * loopback->cable_lock is locked. Therefore no need to lock in loopback_snd_timer_close_cable()
368 card = cable->streams[SNDRV_PCM_STREAM_PLAYBACK]->loopback->card; in loopback_check_format()
396 snd_ctl_notify(dpcm->loopback->card, in loopback_active_notify()
513 mutex_lock(&dpcm->loopback->cable_lock); in loopback_prepare()
519 mutex_unlock(&dpcm->loopback->cable_lock); in loopback_prepare()
743 …of loopback device is not corresponding to timer resolution (%lu nsec = %lu frames) of card timer … in loopback_snd_timer_check_resolution()
960 mutex_lock(&dpcm->loopback->cable_lock); in loopback_hw_free()
962 mutex_unlock(&dpcm->loopback->cable_lock); in loopback_hw_free()
982 mutex_lock(&dpcm->loopback->cable_lock); in rule_format()
985 mutex_unlock(&dpcm->loopback->cable_lock); in rule_format()
996 mutex_lock(&dpcm->loopback->cable_lock); in rule_rate()
999 mutex_unlock(&dpcm->loopback->cable_lock); in rule_rate()
1012 mutex_lock(&dpcm->loopback->cable_lock); in rule_channels()
1015 mutex_unlock(&dpcm->loopback->cable_lock); in rule_channels()
1028 mutex_lock(&dpcm->loopback->cable_lock); in rule_period_bytes()
1031 mutex_unlock(&dpcm->loopback->cable_lock); in rule_period_bytes()
1040 struct loopback *loopback = substream->private_data; in free_cable() local
1044 cable = loopback->cables[substream->number][dev]; in free_cable()
1058 loopback->cables[substream->number][dev] = NULL; in free_cable()
1142 /* call in loopback->cable_lock */
1159 err = loopback_parse_timer_id(dpcm->loopback->timer_source, &tid); in loopback_snd_timer_open()
1163 dpcm->loopback->timer_source, err); in loopback_snd_timer_open()
1170 timeri = snd_timer_instance_new(dpcm->loopback->card->id); in loopback_snd_timer_open()
1191 /* The mutex loopback->cable_lock is kept locked. in loopback_snd_timer_open()
1234 struct loopback *loopback = substream->private_data; in loopback_open() local
1240 mutex_lock(&loopback->cable_lock); in loopback_open()
1246 dpcm->loopback = loopback; in loopback_open()
1249 cable = loopback->cables[substream->number][dev]; in loopback_open()
1258 if (loopback->timer_source) in loopback_open()
1262 loopback->cables[substream->number][dev] = cable; in loopback_open()
1328 mutex_unlock(&loopback->cable_lock); in loopback_open()
1334 struct loopback *loopback = substream->private_data; in loopback_close() local
1340 mutex_lock(&loopback->cable_lock); in loopback_close()
1342 mutex_unlock(&loopback->cable_lock); in loopback_close()
1355 static int loopback_pcm_new(struct loopback *loopback, in loopback_pcm_new() argument
1361 err = snd_pcm_new(loopback->card, "Loopback PCM", device, in loopback_pcm_new()
1369 pcm->private_data = loopback; in loopback_pcm_new()
1371 strcpy(pcm->name, "Loopback PCM"); in loopback_pcm_new()
1373 loopback->pcm[device] = pcm; in loopback_pcm_new()
1391 struct loopback *loopback = snd_kcontrol_chip(kcontrol); in loopback_rate_shift_get() local
1393 mutex_lock(&loopback->cable_lock); in loopback_rate_shift_get()
1395 loopback->setup[kcontrol->id.subdevice] in loopback_rate_shift_get()
1397 mutex_unlock(&loopback->cable_lock); in loopback_rate_shift_get()
1404 struct loopback *loopback = snd_kcontrol_chip(kcontrol); in loopback_rate_shift_put() local
1413 mutex_lock(&loopback->cable_lock); in loopback_rate_shift_put()
1414 if (val != loopback->setup[kcontrol->id.subdevice] in loopback_rate_shift_put()
1416 loopback->setup[kcontrol->id.subdevice] in loopback_rate_shift_put()
1420 mutex_unlock(&loopback->cable_lock); in loopback_rate_shift_put()
1427 struct loopback *loopback = snd_kcontrol_chip(kcontrol); in loopback_notify_get() local
1429 mutex_lock(&loopback->cable_lock); in loopback_notify_get()
1431 loopback->setup[kcontrol->id.subdevice] in loopback_notify_get()
1433 mutex_unlock(&loopback->cable_lock); in loopback_notify_get()
1440 struct loopback *loopback = snd_kcontrol_chip(kcontrol); in loopback_notify_put() local
1445 mutex_lock(&loopback->cable_lock); in loopback_notify_put()
1446 if (val != loopback->setup[kcontrol->id.subdevice] in loopback_notify_put()
1448 loopback->setup[kcontrol->id.subdevice] in loopback_notify_put()
1452 mutex_unlock(&loopback->cable_lock); in loopback_notify_put()
1459 struct loopback *loopback = snd_kcontrol_chip(kcontrol); in loopback_active_get() local
1464 mutex_lock(&loopback->cable_lock); in loopback_active_get()
1465 cable = loopback->cables[kcontrol->id.subdevice][kcontrol->id.device ^ 1]; in loopback_active_get()
1471 mutex_unlock(&loopback->cable_lock); in loopback_active_get()
1490 struct loopback *loopback = snd_kcontrol_chip(kcontrol); in loopback_format_get() local
1493 (__force int)loopback->setup[kcontrol->id.subdevice] in loopback_format_get()
1512 struct loopback *loopback = snd_kcontrol_chip(kcontrol); in loopback_rate_get() local
1514 mutex_lock(&loopback->cable_lock); in loopback_rate_get()
1516 loopback->setup[kcontrol->id.subdevice] in loopback_rate_get()
1518 mutex_unlock(&loopback->cable_lock); in loopback_rate_get()
1536 struct loopback *loopback = snd_kcontrol_chip(kcontrol); in loopback_channels_get() local
1538 mutex_lock(&loopback->cable_lock); in loopback_channels_get()
1540 loopback->setup[kcontrol->id.subdevice] in loopback_channels_get()
1542 mutex_unlock(&loopback->cable_lock); in loopback_channels_get()
1557 struct loopback *loopback = snd_kcontrol_chip(kcontrol); in loopback_access_get() local
1560 mutex_lock(&loopback->cable_lock); in loopback_access_get()
1561 access = loopback->setup[kcontrol->id.subdevice][kcontrol->id.device].access; in loopback_access_get()
1565 mutex_unlock(&loopback->cable_lock); in loopback_access_get()
1626 static int loopback_mixer_new(struct loopback *loopback, int notify) in loopback_mixer_new() argument
1628 struct snd_card *card = loopback->card; in loopback_mixer_new()
1634 strcpy(card->mixername, "Loopback Mixer"); in loopback_mixer_new()
1636 pcm = loopback->pcm[dev]; in loopback_mixer_new()
1640 setup = &loopback->setup[substr][dev]; in loopback_mixer_new()
1650 loopback); in loopback_mixer_new()
1709 struct loopback *loopback, in print_substream_info() argument
1713 struct loopback_cable *cable = loopback->cables[sub][num]; in print_substream_info()
1730 struct loopback *loopback = entry->private_data; in print_cable_info() local
1733 mutex_lock(&loopback->cable_lock); in print_cable_info()
1737 print_substream_info(buffer, loopback, sub, num); in print_cable_info()
1738 mutex_unlock(&loopback->cable_lock); in print_cable_info()
1741 static int loopback_cable_proc_new(struct loopback *loopback, int cidx) in loopback_cable_proc_new() argument
1746 return snd_card_ro_proc_new(loopback->card, name, loopback, in loopback_cable_proc_new()
1750 static void loopback_set_timer_source(struct loopback *loopback, in loopback_set_timer_source() argument
1753 if (loopback->timer_source) { in loopback_set_timer_source()
1754 devm_kfree(loopback->card->dev, loopback->timer_source); in loopback_set_timer_source()
1755 loopback->timer_source = NULL; in loopback_set_timer_source()
1758 loopback->timer_source = devm_kstrdup(loopback->card->dev, in loopback_set_timer_source()
1765 struct loopback *loopback = entry->private_data; in print_timer_source_info() local
1767 mutex_lock(&loopback->cable_lock); in print_timer_source_info()
1769 loopback->timer_source ? loopback->timer_source : ""); in print_timer_source_info()
1770 mutex_unlock(&loopback->cable_lock); in print_timer_source_info()
1776 struct loopback *loopback = entry->private_data; in change_timer_source_info() local
1779 mutex_lock(&loopback->cable_lock); in change_timer_source_info()
1781 loopback_set_timer_source(loopback, strim(line)); in change_timer_source_info()
1782 mutex_unlock(&loopback->cable_lock); in change_timer_source_info()
1785 static int loopback_timer_source_proc_new(struct loopback *loopback) in loopback_timer_source_proc_new() argument
1787 return snd_card_rw_proc_new(loopback->card, "timer_source", loopback, in loopback_timer_source_proc_new()
1795 struct loopback *loopback; in loopback_probe() local
1800 sizeof(struct loopback), &card); in loopback_probe()
1803 loopback = card->private_data; in loopback_probe()
1810 loopback->card = card; in loopback_probe()
1811 loopback_set_timer_source(loopback, timer_source[dev]); in loopback_probe()
1813 mutex_init(&loopback->cable_lock); in loopback_probe()
1815 err = loopback_pcm_new(loopback, 0, pcm_substreams[dev]); in loopback_probe()
1818 err = loopback_pcm_new(loopback, 1, pcm_substreams[dev]); in loopback_probe()
1821 err = loopback_mixer_new(loopback, pcm_notify[dev] ? 1 : 0); in loopback_probe()
1824 loopback_cable_proc_new(loopback, 0); in loopback_probe()
1825 loopback_cable_proc_new(loopback, 1); in loopback_probe()
1826 loopback_timer_source_proc_new(loopback); in loopback_probe()
1827 strcpy(card->driver, "Loopback"); in loopback_probe()
1828 strcpy(card->shortname, "Loopback"); in loopback_probe()
1829 sprintf(card->longname, "Loopback %i", dev + 1); in loopback_probe()
1901 pr_err("aloop: No loopback enabled\n"); in alsa_card_loopback_init()