• Home
  • Raw
  • Download

Lines Matching full:pcm

3  *  Digital Audio (PCM) abstract layer
16 #include <sound/pcm.h>
24 MODULE_DESCRIPTION("Midlevel PCM code for ALSA.");
33 static int snd_pcm_free(struct snd_pcm *pcm);
40 struct snd_pcm *pcm; in snd_pcm_get() local
42 list_for_each_entry(pcm, &snd_pcm_devices, list) { in snd_pcm_get()
43 if (pcm->card == card && pcm->device == device) in snd_pcm_get()
44 return pcm; in snd_pcm_get()
51 struct snd_pcm *pcm; in snd_pcm_next() local
53 list_for_each_entry(pcm, &snd_pcm_devices, list) { in snd_pcm_next()
54 if (pcm->card == card && pcm->device > device) in snd_pcm_next()
55 return pcm->device; in snd_pcm_next()
56 else if (pcm->card->number > card->number) in snd_pcm_next()
64 struct snd_pcm *pcm; in snd_pcm_add() local
69 list_for_each_entry(pcm, &snd_pcm_devices, list) { in snd_pcm_add()
70 if (pcm->card == newpcm->card && pcm->device == newpcm->device) in snd_pcm_add()
72 if (pcm->card->number > newpcm->card->number || in snd_pcm_add()
73 (pcm->card == newpcm->card && in snd_pcm_add()
74 pcm->device > newpcm->device)) { in snd_pcm_add()
75 list_add(&newpcm->list, pcm->list.prev); in snd_pcm_add()
106 struct snd_pcm *pcm; in snd_pcm_control_ioctl() local
122 pcm = snd_pcm_get(card, device); in snd_pcm_control_ioctl()
123 if (pcm == NULL) { in snd_pcm_control_ioctl()
127 pstr = &pcm->streams[stream]; in snd_pcm_control_ioctl()
144 mutex_lock(&pcm->open_mutex); in snd_pcm_control_ioctl()
146 mutex_unlock(&pcm->open_mutex); in snd_pcm_control_ioctl()
217 * snd_pcm_format_name - Return a name string for the given PCM format
218 * @format: PCM format
383 mutex_lock(&substream->pcm->open_mutex); in snd_pcm_substream_proc_hw_params_read()
411 mutex_unlock(&substream->pcm->open_mutex); in snd_pcm_substream_proc_hw_params_read()
420 mutex_lock(&substream->pcm->open_mutex); in snd_pcm_substream_proc_sw_params_read()
439 mutex_unlock(&substream->pcm->open_mutex); in snd_pcm_substream_proc_sw_params_read()
450 mutex_lock(&substream->pcm->open_mutex); in snd_pcm_substream_proc_status_read()
475 mutex_unlock(&substream->pcm->open_mutex); in snd_pcm_substream_proc_status_read()
506 struct snd_pcm *pcm = pstr->pcm; in snd_pcm_stream_proc_init() local
510 sprintf(name, "pcm%i%c", pcm->device, in snd_pcm_stream_proc_init()
512 entry = snd_info_create_card_entry(pcm->card, name, in snd_pcm_stream_proc_init()
513 pcm->card->proc_root); in snd_pcm_stream_proc_init()
518 entry = snd_info_create_card_entry(pcm->card, "info", pstr->proc_root); in snd_pcm_stream_proc_init()
522 entry = snd_info_create_card_entry(pcm->card, "xrun_debug", in snd_pcm_stream_proc_init()
548 entry = snd_info_create_card_entry(substream->pcm->card, name, in create_substream_info_entry()
561 card = substream->pcm->card; in snd_pcm_substream_proc_init()
608 if (!pstr->pcm->no_device_suspend) in do_pcm_suspend()
609 snd_pcm_suspend_all(pstr->pcm); in do_pcm_suspend()
618 /* device type for PCM -- basically only for passing PM callbacks */
620 .name = "pcm",
625 * snd_pcm_new_stream - create a new PCM stream
626 * @pcm: the pcm instance
630 * Creates a new stream for the pcm.
631 * The corresponding stream on the pcm must have been empty before
637 int snd_pcm_new_stream(struct snd_pcm *pcm, int stream, int substream_count) in snd_pcm_new_stream() argument
640 struct snd_pcm_str *pstr = &pcm->streams[stream]; in snd_pcm_new_stream()
647 pstr->pcm = pcm; in snd_pcm_new_stream()
652 snd_device_initialize(&pstr->dev, pcm->card); in snd_pcm_new_stream()
655 dev_set_name(&pstr->dev, "pcmC%iD%i%c", pcm->card->number, pcm->device, in snd_pcm_new_stream()
658 if (!pcm->internal) { in snd_pcm_new_stream()
661 pcm_err(pcm, "Error in snd_pcm_stream_proc_init\n"); in snd_pcm_new_stream()
670 substream->pcm = pcm; in snd_pcm_new_stream()
681 if (!pcm->internal) { in snd_pcm_new_stream()
684 pcm_err(pcm, in snd_pcm_new_stream()
708 struct snd_pcm *pcm; in _snd_pcm_new() local
723 pcm = kzalloc(sizeof(*pcm), GFP_KERNEL); in _snd_pcm_new()
724 if (!pcm) in _snd_pcm_new()
726 pcm->card = card; in _snd_pcm_new()
727 pcm->device = device; in _snd_pcm_new()
728 pcm->internal = internal; in _snd_pcm_new()
729 mutex_init(&pcm->open_mutex); in _snd_pcm_new()
730 init_waitqueue_head(&pcm->open_wait); in _snd_pcm_new()
731 INIT_LIST_HEAD(&pcm->list); in _snd_pcm_new()
733 strlcpy(pcm->id, id, sizeof(pcm->id)); in _snd_pcm_new()
735 err = snd_pcm_new_stream(pcm, SNDRV_PCM_STREAM_PLAYBACK, in _snd_pcm_new()
740 err = snd_pcm_new_stream(pcm, SNDRV_PCM_STREAM_CAPTURE, capture_count); in _snd_pcm_new()
744 err = snd_device_new(card, SNDRV_DEV_PCM, pcm, in _snd_pcm_new()
750 *rpcm = pcm; in _snd_pcm_new()
754 snd_pcm_free(pcm); in _snd_pcm_new()
759 * snd_pcm_new - create a new PCM instance
765 * @rpcm: the pointer to store the new pcm instance
767 * Creates a new PCM instance.
769 * The pcm operators have to be set afterwards to the new instance
783 * snd_pcm_new_internal - create a new internal PCM instance
789 * @rpcm: the pointer to store the new pcm instance
791 * Creates a new internal PCM instance with no userspace device or procfs
792 * entries. This is used by ASoC Back End PCMs in order to create a PCM that
797 * The pcm operators have to be set afterwards to the new instance
814 struct snd_card *card = pstr->pcm->card; in free_chmap()
853 #define pcm_call_notify(pcm, call) \ argument
857 _notify->call(pcm); \
860 #define pcm_call_notify(pcm, call) do {} while (0) argument
863 static int snd_pcm_free(struct snd_pcm *pcm) in snd_pcm_free() argument
865 if (!pcm) in snd_pcm_free()
867 if (!pcm->internal) in snd_pcm_free()
868 pcm_call_notify(pcm, n_unregister); in snd_pcm_free()
869 if (pcm->private_free) in snd_pcm_free()
870 pcm->private_free(pcm); in snd_pcm_free()
871 snd_pcm_lib_preallocate_free_for_all(pcm); in snd_pcm_free()
872 snd_pcm_free_stream(&pcm->streams[SNDRV_PCM_STREAM_PLAYBACK]); in snd_pcm_free()
873 snd_pcm_free_stream(&pcm->streams[SNDRV_PCM_STREAM_CAPTURE]); in snd_pcm_free()
874 kfree(pcm); in snd_pcm_free()
880 struct snd_pcm *pcm = device->device_data; in snd_pcm_dev_free() local
881 return snd_pcm_free(pcm); in snd_pcm_dev_free()
884 int snd_pcm_attach_substream(struct snd_pcm *pcm, int stream, in snd_pcm_attach_substream() argument
895 if (snd_BUG_ON(!pcm || !rsubstream)) in snd_pcm_attach_substream()
901 pstr = &pcm->streams[stream]; in snd_pcm_attach_substream()
905 card = pcm->card; in snd_pcm_attach_substream()
908 if (pcm->info_flags & SNDRV_PCM_INFO_HALF_DUPLEX) { in snd_pcm_attach_substream()
911 for (substream = pcm->streams[opposite].substream; substream; in snd_pcm_attach_substream()
977 substream->private_data = pcm->private_data; in snd_pcm_attach_substream()
1000 /* Avoid concurrent access to runtime via PCM timer interface */ in snd_pcm_detach_substream()
1019 struct snd_pcm *pcm = pstr->pcm; in show_pcm_class() local
1028 if (pcm->dev_class > SNDRV_PCM_CLASS_LAST) in show_pcm_class()
1031 str = strs[pcm->dev_class]; in show_pcm_class()
1054 struct snd_pcm *pcm; in snd_pcm_dev_register() local
1058 pcm = device->device_data; in snd_pcm_dev_register()
1061 err = snd_pcm_add(pcm); in snd_pcm_dev_register()
1066 if (pcm->streams[cidx].substream == NULL) in snd_pcm_dev_register()
1076 /* register pcm */ in snd_pcm_dev_register()
1077 err = snd_register_device(devtype, pcm->card, pcm->device, in snd_pcm_dev_register()
1078 &snd_pcm_f_ops[cidx], pcm, in snd_pcm_dev_register()
1079 &pcm->streams[cidx].dev); in snd_pcm_dev_register()
1081 list_del_init(&pcm->list); in snd_pcm_dev_register()
1085 for (substream = pcm->streams[cidx].substream; substream; substream = substream->next) in snd_pcm_dev_register()
1089 pcm_call_notify(pcm, n_register); in snd_pcm_dev_register()
1098 struct snd_pcm *pcm = device->device_data; in snd_pcm_dev_disconnect() local
1103 mutex_lock(&pcm->open_mutex); in snd_pcm_dev_disconnect()
1104 wake_up(&pcm->open_wait); in snd_pcm_dev_disconnect()
1105 list_del_init(&pcm->list); in snd_pcm_dev_disconnect()
1107 for (substream = pcm->streams[cidx].substream; substream; substream = substream->next) { in snd_pcm_dev_disconnect()
1123 for (substream = pcm->streams[cidx].substream; substream; substream = substream->next) in snd_pcm_dev_disconnect()
1126 pcm_call_notify(pcm, n_disconnect); in snd_pcm_dev_disconnect()
1128 snd_unregister_device(&pcm->streams[cidx].dev); in snd_pcm_dev_disconnect()
1129 free_chmap(&pcm->streams[cidx]); in snd_pcm_dev_disconnect()
1131 mutex_unlock(&pcm->open_mutex); in snd_pcm_dev_disconnect()
1139 * @notify: PCM notify list
1143 * called for each registered PCM devices. This exists only for PCM OSS
1148 struct snd_pcm *pcm; in snd_pcm_notify() local
1158 list_for_each_entry(pcm, &snd_pcm_devices, list) in snd_pcm_notify()
1159 notify->n_unregister(pcm); in snd_pcm_notify()
1162 list_for_each_entry(pcm, &snd_pcm_devices, list) in snd_pcm_notify()
1163 notify->n_register(pcm); in snd_pcm_notify()
1179 struct snd_pcm *pcm; in snd_pcm_proc_read() local
1182 list_for_each_entry(pcm, &snd_pcm_devices, list) { in snd_pcm_proc_read()
1184 pcm->card->number, pcm->device, pcm->id, pcm->name); in snd_pcm_proc_read()
1185 if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) in snd_pcm_proc_read()
1187 pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream_count); in snd_pcm_proc_read()
1188 if (pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream) in snd_pcm_proc_read()
1190 pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream_count); in snd_pcm_proc_read()
1202 entry = snd_info_create_module_entry(THIS_MODULE, "pcm", NULL); in snd_pcm_proc_init()