Lines Matching refs:loopback
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
129 struct loopback {
139 struct loopback *loopback;
193 return &dpcm->loopback->setup[dpcm->substream->number][device];
295 /* call in loopback->cable_lock */
306 * loopback->cable_lock is locked. Therefore no need to lock
350 card = cable->streams[SNDRV_PCM_STREAM_PLAYBACK]->loopback->card;
372 snd_ctl_notify(dpcm->loopback->card,
488 mutex_lock(&dpcm->loopback->cable_lock);
494 mutex_unlock(&dpcm->loopback->cable_lock);
699 "Period size (%lu frames) of loopback device is not corresponding to timer resolution (%lu nsec = %lu frames) of card timer %d,%d,%d. Use period size of %lu frames for loopback device.",
914 mutex_lock(&dpcm->loopback->cable_lock);
916 mutex_unlock(&dpcm->loopback->cable_lock);
936 mutex_lock(&dpcm->loopback->cable_lock);
939 mutex_unlock(&dpcm->loopback->cable_lock);
950 mutex_lock(&dpcm->loopback->cable_lock);
953 mutex_unlock(&dpcm->loopback->cable_lock);
966 mutex_lock(&dpcm->loopback->cable_lock);
969 mutex_unlock(&dpcm->loopback->cable_lock);
982 mutex_lock(&dpcm->loopback->cable_lock);
985 mutex_unlock(&dpcm->loopback->cable_lock);
994 struct loopback *loopback = substream->private_data;
998 cable = loopback->cables[substream->number][dev];
1012 loopback->cables[substream->number][dev] = NULL;
1094 /* call in loopback->cable_lock */
1111 err = loopback_parse_timer_id(dpcm->loopback->timer_source, &tid);
1115 dpcm->loopback->timer_source, err);
1122 timeri = snd_timer_instance_new(dpcm->loopback->card->id);
1143 /* The mutex loopback->cable_lock is kept locked.
1186 struct loopback *loopback = substream->private_data;
1192 mutex_lock(&loopback->cable_lock);
1198 dpcm->loopback = loopback;
1201 cable = loopback->cables[substream->number][dev];
1210 if (loopback->timer_source)
1214 loopback->cables[substream->number][dev] = cable;
1280 mutex_unlock(&loopback->cable_lock);
1286 struct loopback *loopback = substream->private_data;
1292 mutex_lock(&loopback->cable_lock);
1294 mutex_unlock(&loopback->cable_lock);
1307 static int loopback_pcm_new(struct loopback *loopback,
1313 err = snd_pcm_new(loopback->card, "Loopback PCM", device,
1321 pcm->private_data = loopback;
1325 loopback->pcm[device] = pcm;
1343 struct loopback *loopback = snd_kcontrol_chip(kcontrol);
1345 mutex_lock(&loopback->cable_lock);
1347 loopback->setup[kcontrol->id.subdevice]
1349 mutex_unlock(&loopback->cable_lock);
1356 struct loopback *loopback = snd_kcontrol_chip(kcontrol);
1365 mutex_lock(&loopback->cable_lock);
1366 if (val != loopback->setup[kcontrol->id.subdevice]
1368 loopback->setup[kcontrol->id.subdevice]
1372 mutex_unlock(&loopback->cable_lock);
1379 struct loopback *loopback = snd_kcontrol_chip(kcontrol);
1381 mutex_lock(&loopback->cable_lock);
1383 loopback->setup[kcontrol->id.subdevice]
1385 mutex_unlock(&loopback->cable_lock);
1392 struct loopback *loopback = snd_kcontrol_chip(kcontrol);
1397 mutex_lock(&loopback->cable_lock);
1398 if (val != loopback->setup[kcontrol->id.subdevice]
1400 loopback->setup[kcontrol->id.subdevice]
1404 mutex_unlock(&loopback->cable_lock);
1411 struct loopback *loopback = snd_kcontrol_chip(kcontrol);
1416 mutex_lock(&loopback->cable_lock);
1417 cable = loopback->cables[kcontrol->id.subdevice][kcontrol->id.device ^ 1];
1423 mutex_unlock(&loopback->cable_lock);
1442 struct loopback *loopback = snd_kcontrol_chip(kcontrol);
1445 (__force int)loopback->setup[kcontrol->id.subdevice]
1464 struct loopback *loopback = snd_kcontrol_chip(kcontrol);
1466 mutex_lock(&loopback->cable_lock);
1468 loopback->setup[kcontrol->id.subdevice]
1470 mutex_unlock(&loopback->cable_lock);
1488 struct loopback *loopback = snd_kcontrol_chip(kcontrol);
1490 mutex_lock(&loopback->cable_lock);
1492 loopback->setup[kcontrol->id.subdevice]
1494 mutex_unlock(&loopback->cable_lock);
1547 static int loopback_mixer_new(struct loopback *loopback, int notify)
1549 struct snd_card *card = loopback->card;
1557 pcm = loopback->pcm[dev];
1561 setup = &loopback->setup[substr][dev];
1570 loopback);
1626 struct loopback *loopback,
1630 struct loopback_cable *cable = loopback->cables[sub][num];
1647 struct loopback *loopback = entry->private_data;
1650 mutex_lock(&loopback->cable_lock);
1654 print_substream_info(buffer, loopback, sub, num);
1655 mutex_unlock(&loopback->cable_lock);
1658 static int loopback_cable_proc_new(struct loopback *loopback, int cidx)
1663 return snd_card_ro_proc_new(loopback->card, name, loopback,
1667 static void loopback_set_timer_source(struct loopback *loopback,
1670 if (loopback->timer_source) {
1671 devm_kfree(loopback->card->dev, loopback->timer_source);
1672 loopback->timer_source = NULL;
1675 loopback->timer_source = devm_kstrdup(loopback->card->dev,
1682 struct loopback *loopback = entry->private_data;
1684 mutex_lock(&loopback->cable_lock);
1686 loopback->timer_source ? loopback->timer_source : "");
1687 mutex_unlock(&loopback->cable_lock);
1693 struct loopback *loopback = entry->private_data;
1696 mutex_lock(&loopback->cable_lock);
1698 loopback_set_timer_source(loopback, strim(line));
1699 mutex_unlock(&loopback->cable_lock);
1702 static int loopback_timer_source_proc_new(struct loopback *loopback)
1704 return snd_card_rw_proc_new(loopback->card, "timer_source", loopback,
1712 struct loopback *loopback;
1717 sizeof(struct loopback), &card);
1720 loopback = card->private_data;
1727 loopback->card = card;
1728 loopback_set_timer_source(loopback, timer_source[dev]);
1730 mutex_init(&loopback->cable_lock);
1732 err = loopback_pcm_new(loopback, 0, pcm_substreams[dev]);
1735 err = loopback_pcm_new(loopback, 1, pcm_substreams[dev]);
1738 err = loopback_mixer_new(loopback, pcm_notify[dev] ? 1 : 0);
1741 loopback_cable_proc_new(loopback, 0);
1742 loopback_cable_proc_new(loopback, 1);
1743 loopback_timer_source_proc_new(loopback);
1823 printk(KERN_ERR "aloop: No loopback enabled\n");