Lines Matching refs:subs
32 static snd_pcm_uframes_t snd_usb_pcm_delay(struct snd_usb_substream *subs, in snd_usb_pcm_delay() argument
40 if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK) { in snd_usb_pcm_delay()
41 queued = bytes_to_frames(runtime, subs->inflight_bytes); in snd_usb_pcm_delay()
44 } else if (!subs->running) { in snd_usb_pcm_delay()
48 current_frame_number = usb_get_current_frame_number(subs->dev); in snd_usb_pcm_delay()
54 frame_diff = (current_frame_number - subs->last_frame_number) & 0xff; in snd_usb_pcm_delay()
60 if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK) { in snd_usb_pcm_delay()
75 struct snd_usb_substream *subs = runtime->private_data; in snd_usb_pcm_pointer() local
78 if (atomic_read(&subs->stream->chip->shutdown)) in snd_usb_pcm_pointer()
80 spin_lock(&subs->lock); in snd_usb_pcm_pointer()
81 hwptr_done = subs->hwptr_done; in snd_usb_pcm_pointer()
82 runtime->delay = snd_usb_pcm_delay(subs, runtime); in snd_usb_pcm_pointer()
83 spin_unlock(&subs->lock); in snd_usb_pcm_pointer()
93 struct snd_usb_substream *subs) in find_format() argument
127 if (subs && attr != cur_attr) { in find_format()
129 subs->direction == SNDRV_PCM_STREAM_PLAYBACK) || in find_format()
131 subs->direction == SNDRV_PCM_STREAM_CAPTURE)) in find_format()
134 subs->direction == SNDRV_PCM_STREAM_PLAYBACK) || in find_format()
136 subs->direction == SNDRV_PCM_STREAM_CAPTURE)) { in find_format()
152 find_substream_format(struct snd_usb_substream *subs, in find_substream_format() argument
155 return find_format(&subs->fmt_list, params_format(params), in find_substream_format()
157 true, subs); in find_substream_format()
222 static bool stop_endpoints(struct snd_usb_substream *subs, bool keep_pending) in stop_endpoints() argument
226 if (test_and_clear_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags)) { in stop_endpoints()
227 snd_usb_endpoint_stop(subs->sync_endpoint, keep_pending); in stop_endpoints()
230 if (test_and_clear_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags)) { in stop_endpoints()
231 snd_usb_endpoint_stop(subs->data_endpoint, keep_pending); in stop_endpoints()
237 static int start_endpoints(struct snd_usb_substream *subs) in start_endpoints() argument
241 if (!subs->data_endpoint) in start_endpoints()
244 if (!test_and_set_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags)) { in start_endpoints()
245 err = snd_usb_endpoint_start(subs->data_endpoint); in start_endpoints()
247 clear_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags); in start_endpoints()
252 if (subs->sync_endpoint && in start_endpoints()
253 !test_and_set_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags)) { in start_endpoints()
254 err = snd_usb_endpoint_start(subs->sync_endpoint); in start_endpoints()
256 clear_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags); in start_endpoints()
264 stop_endpoints(subs, false); in start_endpoints()
268 static void sync_pending_stops(struct snd_usb_substream *subs) in sync_pending_stops() argument
270 snd_usb_endpoint_sync_pending_stop(subs->sync_endpoint); in sync_pending_stops()
271 snd_usb_endpoint_sync_pending_stop(subs->data_endpoint); in sync_pending_stops()
277 struct snd_usb_substream *subs = substream->runtime->private_data; in snd_usb_pcm_sync_stop() local
279 sync_pending_stops(subs); in snd_usb_pcm_sync_stop()
370 static int snd_usb_pcm_change_state(struct snd_usb_substream *subs, int state) in snd_usb_pcm_change_state() argument
374 if (!subs->str_pd) in snd_usb_pcm_change_state()
377 ret = snd_usb_power_domain_set(subs->stream->chip, subs->str_pd, state); in snd_usb_pcm_change_state()
379 dev_err(&subs->dev->dev, in snd_usb_pcm_change_state()
381 subs->str_pd->pd_id, state, ret); in snd_usb_pcm_change_state()
419 struct snd_usb_substream *subs) in close_endpoints() argument
421 if (subs->data_endpoint) { in close_endpoints()
422 snd_usb_endpoint_set_sync(chip, subs->data_endpoint, NULL); in close_endpoints()
423 snd_usb_endpoint_close(chip, subs->data_endpoint); in close_endpoints()
424 subs->data_endpoint = NULL; in close_endpoints()
427 if (subs->sync_endpoint) { in close_endpoints()
428 snd_usb_endpoint_close(chip, subs->sync_endpoint); in close_endpoints()
429 subs->sync_endpoint = NULL; in close_endpoints()
434 struct snd_usb_substream *subs) in configure_endpoints() argument
438 if (subs->data_endpoint->need_setup) { in configure_endpoints()
440 if (stop_endpoints(subs, false)) in configure_endpoints()
441 sync_pending_stops(subs); in configure_endpoints()
442 err = snd_usb_endpoint_configure(chip, subs->data_endpoint); in configure_endpoints()
445 snd_usb_set_format_quirk(subs, subs->cur_audiofmt); in configure_endpoints()
448 if (subs->sync_endpoint) { in configure_endpoints()
449 err = snd_usb_endpoint_configure(chip, subs->sync_endpoint); in configure_endpoints()
470 struct snd_usb_substream *subs = substream->runtime->private_data; in snd_usb_hw_params() local
471 struct snd_usb_audio *chip = subs->stream->chip; in snd_usb_hw_params()
476 ret = snd_media_start_pipeline(subs); in snd_usb_hw_params()
480 fmt = find_substream_format(subs, hw_params); in snd_usb_hw_params()
512 ret = snd_usb_pcm_change_state(subs, UAC3_PD_STATE_D0); in snd_usb_hw_params()
516 if (subs->data_endpoint) { in snd_usb_hw_params()
517 if (snd_usb_endpoint_compatible(chip, subs->data_endpoint, in snd_usb_hw_params()
520 close_endpoints(chip, subs); in snd_usb_hw_params()
523 subs->data_endpoint = snd_usb_endpoint_open(chip, fmt, hw_params, false); in snd_usb_hw_params()
524 if (!subs->data_endpoint) { in snd_usb_hw_params()
530 subs->sync_endpoint = snd_usb_endpoint_open(chip, sync_fmt, in snd_usb_hw_params()
533 if (!subs->sync_endpoint) { in snd_usb_hw_params()
538 snd_usb_endpoint_set_sync(chip, subs->data_endpoint, in snd_usb_hw_params()
539 subs->sync_endpoint); in snd_usb_hw_params()
543 subs->cur_audiofmt = fmt; in snd_usb_hw_params()
546 ret = configure_endpoints(chip, subs); in snd_usb_hw_params()
550 close_endpoints(chip, subs); in snd_usb_hw_params()
555 snd_media_stop_pipeline(subs); in snd_usb_hw_params()
567 struct snd_usb_substream *subs = substream->runtime->private_data; in snd_usb_hw_free() local
568 struct snd_usb_audio *chip = subs->stream->chip; in snd_usb_hw_free()
570 snd_media_stop_pipeline(subs); in snd_usb_hw_free()
572 subs->cur_audiofmt = NULL; in snd_usb_hw_free()
575 if (stop_endpoints(subs, false)) in snd_usb_hw_free()
576 sync_pending_stops(subs); in snd_usb_hw_free()
577 close_endpoints(chip, subs); in snd_usb_hw_free()
592 struct snd_usb_substream *subs) in lowlatency_playback_available() argument
594 struct snd_usb_audio *chip = subs->stream->chip; in lowlatency_playback_available()
596 if (subs->direction == SNDRV_PCM_STREAM_CAPTURE) in lowlatency_playback_available()
604 if (snd_usb_endpoint_implicit_feedback_sink(subs->data_endpoint)) in lowlatency_playback_available()
617 struct snd_usb_substream *subs = runtime->private_data; in snd_usb_pcm_prepare() local
618 struct snd_usb_audio *chip = subs->stream->chip; in snd_usb_pcm_prepare()
624 if (snd_BUG_ON(!subs->data_endpoint)) { in snd_usb_pcm_prepare()
629 ret = configure_endpoints(chip, subs); in snd_usb_pcm_prepare()
634 subs->buffer_bytes = frames_to_bytes(runtime, runtime->buffer_size); in snd_usb_pcm_prepare()
635 subs->inflight_bytes = 0; in snd_usb_pcm_prepare()
636 subs->hwptr_done = 0; in snd_usb_pcm_prepare()
637 subs->transfer_done = 0; in snd_usb_pcm_prepare()
638 subs->last_frame_number = 0; in snd_usb_pcm_prepare()
639 subs->period_elapsed_pending = 0; in snd_usb_pcm_prepare()
642 subs->lowlatency_playback = lowlatency_playback_available(runtime, subs); in snd_usb_pcm_prepare()
644 !subs->lowlatency_playback) in snd_usb_pcm_prepare()
645 ret = start_endpoints(subs); in snd_usb_pcm_prepare()
679 static int hw_check_valid_format(struct snd_usb_substream *subs, in hw_check_valid_format() argument
714 if (subs->speed != USB_SPEED_FULL) { in hw_check_valid_format()
757 struct snd_usb_substream *subs = rule->private; in hw_rule_rate() local
758 struct snd_usb_audio *chip = subs->stream->chip; in hw_rule_rate()
767 list_for_each_entry(fp, &subs->fmt_list, list) { in hw_rule_rate()
768 if (!hw_check_valid_format(subs, params, fp)) in hw_rule_rate()
799 struct snd_usb_substream *subs = rule->private; in hw_rule_channels() local
807 list_for_each_entry(fp, &subs->fmt_list, list) { in hw_rule_channels()
808 if (!hw_check_valid_format(subs, params, fp)) in hw_rule_channels()
838 struct snd_usb_substream *subs = rule->private; in hw_rule_format() local
845 list_for_each_entry(fp, &subs->fmt_list, list) { in hw_rule_format()
846 if (!hw_check_valid_format(subs, params, fp)) in hw_rule_format()
856 struct snd_usb_substream *subs = rule->private; in hw_rule_period_time() local
865 list_for_each_entry(fp, &subs->fmt_list, list) { in hw_rule_period_time()
866 if (!hw_check_valid_format(subs, params, fp)) in hw_rule_period_time()
882 get_sync_ep_from_substream(struct snd_usb_substream *subs) in get_sync_ep_from_substream() argument
884 struct snd_usb_audio *chip = subs->stream->chip; in get_sync_ep_from_substream()
888 list_for_each_entry(fp, &subs->fmt_list, list) { in get_sync_ep_from_substream()
895 if (ep->cur_audiofmt != subs->cur_audiofmt || ep->opened > 1) in get_sync_ep_from_substream()
912 struct snd_usb_substream *subs = rule->private; in hw_rule_format_implicit_fb() local
916 ep = get_sync_ep_from_substream(subs); in hw_rule_format_implicit_fb()
927 struct snd_usb_substream *subs = rule->private; in hw_rule_rate_implicit_fb() local
931 ep = get_sync_ep_from_substream(subs); in hw_rule_rate_implicit_fb()
943 struct snd_usb_substream *subs = rule->private; in hw_rule_period_size_implicit_fb() local
947 ep = get_sync_ep_from_substream(subs); in hw_rule_period_size_implicit_fb()
960 struct snd_usb_substream *subs = rule->private; in hw_rule_periods_implicit_fb() local
964 ep = get_sync_ep_from_substream(subs); in hw_rule_periods_implicit_fb()
978 static int setup_hw_info(struct snd_pcm_runtime *runtime, struct snd_usb_substream *subs) in setup_hw_info() argument
985 runtime->hw.formats = subs->formats; in setup_hw_info()
994 list_for_each_entry(fp, &subs->fmt_list, list) { in setup_hw_info()
1014 if (subs->speed == USB_SPEED_FULL) in setup_hw_info()
1028 hw_rule_rate, subs, in setup_hw_info()
1038 hw_rule_channels, subs, in setup_hw_info()
1047 hw_rule_format, subs, in setup_hw_info()
1058 hw_rule_period_time, subs, in setup_hw_info()
1069 hw_rule_format_implicit_fb, subs, in setup_hw_info()
1074 hw_rule_rate_implicit_fb, subs, in setup_hw_info()
1079 hw_rule_period_size_implicit_fb, subs, in setup_hw_info()
1084 hw_rule_periods_implicit_fb, subs, in setup_hw_info()
1089 list_for_each_entry(fp, &subs->fmt_list, list) { in setup_hw_info()
1104 struct snd_usb_substream *subs = &as->substream[direction]; in snd_usb_pcm_open() local
1112 runtime->private_data = subs; in snd_usb_pcm_open()
1113 subs->pcm_substream = substream; in snd_usb_pcm_open()
1117 subs->dsd_dop.byte_idx = 0; in snd_usb_pcm_open()
1118 subs->dsd_dop.channel = 0; in snd_usb_pcm_open()
1119 subs->dsd_dop.marker = 1; in snd_usb_pcm_open()
1121 ret = setup_hw_info(runtime, subs); in snd_usb_pcm_open()
1124 ret = snd_usb_autoresume(subs->stream->chip); in snd_usb_pcm_open()
1127 ret = snd_media_stream_init(subs, as->pcm, direction); in snd_usb_pcm_open()
1129 snd_usb_autosuspend(subs->stream->chip); in snd_usb_pcm_open()
1137 struct snd_usb_substream *subs = &as->substream[direction]; in snd_usb_pcm_close() local
1140 snd_media_stop_pipeline(subs); in snd_usb_pcm_close()
1142 if (!snd_usb_lock_shutdown(subs->stream->chip)) { in snd_usb_pcm_close()
1143 ret = snd_usb_pcm_change_state(subs, UAC3_PD_STATE_D1); in snd_usb_pcm_close()
1144 snd_usb_unlock_shutdown(subs->stream->chip); in snd_usb_pcm_close()
1149 subs->pcm_substream = NULL; in snd_usb_pcm_close()
1150 snd_usb_autosuspend(subs->stream->chip); in snd_usb_pcm_close()
1160 static void retire_capture_urb(struct snd_usb_substream *subs, in retire_capture_urb() argument
1163 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; in retire_capture_urb()
1171 current_frame_number = usb_get_current_frame_number(subs->dev); in retire_capture_urb()
1176 cp = (unsigned char *)urb->transfer_buffer + urb->iso_frame_desc[i].offset + subs->pkt_offset_adj; in retire_capture_urb()
1178 dev_dbg(&subs->dev->dev, "frame %d active: %d\n", in retire_capture_urb()
1183 if (subs->stream_offset_adj > 0) { in retire_capture_urb()
1184 unsigned int adj = min(subs->stream_offset_adj, bytes); in retire_capture_urb()
1187 subs->stream_offset_adj -= adj; in retire_capture_urb()
1190 if (!subs->txfr_quirk) in retire_capture_urb()
1195 dev_warn_ratelimited(&subs->dev->dev, in retire_capture_urb()
1200 spin_lock_irqsave(&subs->lock, flags); in retire_capture_urb()
1201 oldptr = subs->hwptr_done; in retire_capture_urb()
1202 subs->hwptr_done += bytes; in retire_capture_urb()
1203 if (subs->hwptr_done >= subs->buffer_bytes) in retire_capture_urb()
1204 subs->hwptr_done -= subs->buffer_bytes; in retire_capture_urb()
1206 subs->transfer_done += frames; in retire_capture_urb()
1207 if (subs->transfer_done >= runtime->period_size) { in retire_capture_urb()
1208 subs->transfer_done -= runtime->period_size; in retire_capture_urb()
1213 subs->last_frame_number = current_frame_number; in retire_capture_urb()
1215 spin_unlock_irqrestore(&subs->lock, flags); in retire_capture_urb()
1217 if (oldptr + bytes > subs->buffer_bytes) { in retire_capture_urb()
1218 unsigned int bytes1 = subs->buffer_bytes - oldptr; in retire_capture_urb()
1228 snd_pcm_period_elapsed(subs->pcm_substream); in retire_capture_urb()
1231 static void urb_ctx_queue_advance(struct snd_usb_substream *subs, in urb_ctx_queue_advance() argument
1237 subs->inflight_bytes += bytes; in urb_ctx_queue_advance()
1238 subs->hwptr_done += bytes; in urb_ctx_queue_advance()
1239 if (subs->hwptr_done >= subs->buffer_bytes) in urb_ctx_queue_advance()
1240 subs->hwptr_done -= subs->buffer_bytes; in urb_ctx_queue_advance()
1243 static inline void fill_playback_urb_dsd_dop(struct snd_usb_substream *subs, in fill_playback_urb_dsd_dop() argument
1246 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; in fill_playback_urb_dsd_dop()
1248 unsigned int src_idx = subs->hwptr_done; in fill_playback_urb_dsd_dop()
1249 unsigned int wrap = subs->buffer_bytes; in fill_playback_urb_dsd_dop()
1272 if (++subs->dsd_dop.byte_idx == 3) { in fill_playback_urb_dsd_dop()
1274 dst[dst_idx++] = marker[subs->dsd_dop.marker]; in fill_playback_urb_dsd_dop()
1276 subs->dsd_dop.byte_idx = 0; in fill_playback_urb_dsd_dop()
1278 if (++subs->dsd_dop.channel % runtime->channels == 0) { in fill_playback_urb_dsd_dop()
1280 subs->dsd_dop.marker++; in fill_playback_urb_dsd_dop()
1281 subs->dsd_dop.marker %= ARRAY_SIZE(marker); in fill_playback_urb_dsd_dop()
1282 subs->dsd_dop.channel = 0; in fill_playback_urb_dsd_dop()
1286 int idx = (src_idx + subs->dsd_dop.byte_idx - 1) % wrap; in fill_playback_urb_dsd_dop()
1288 if (subs->cur_audiofmt->dsd_bitrev) in fill_playback_urb_dsd_dop()
1296 urb_ctx_queue_advance(subs, urb, queued); in fill_playback_urb_dsd_dop()
1300 static void fill_playback_urb_dsd_bitrev(struct snd_usb_substream *subs, in fill_playback_urb_dsd_bitrev() argument
1303 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; in fill_playback_urb_dsd_bitrev()
1306 int i, ofs = subs->hwptr_done; in fill_playback_urb_dsd_bitrev()
1310 if (++ofs >= subs->buffer_bytes) in fill_playback_urb_dsd_bitrev()
1314 urb_ctx_queue_advance(subs, urb, bytes); in fill_playback_urb_dsd_bitrev()
1317 static void copy_to_urb(struct snd_usb_substream *subs, struct urb *urb, in copy_to_urb() argument
1320 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; in copy_to_urb()
1322 if (subs->hwptr_done + bytes > subs->buffer_bytes) { in copy_to_urb()
1324 unsigned int bytes1 = subs->buffer_bytes - subs->hwptr_done; in copy_to_urb()
1327 runtime->dma_area + subs->hwptr_done, bytes1); in copy_to_urb()
1332 runtime->dma_area + subs->hwptr_done, bytes); in copy_to_urb()
1335 urb_ctx_queue_advance(subs, urb, bytes); in copy_to_urb()
1338 static unsigned int copy_to_urb_quirk(struct snd_usb_substream *subs, in copy_to_urb_quirk() argument
1356 copy_to_urb(subs, urb, offset + sizeof(packet_length), in copy_to_urb_quirk()
1364 static int prepare_playback_urb(struct snd_usb_substream *subs, in prepare_playback_urb() argument
1368 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; in prepare_playback_urb()
1369 struct snd_usb_endpoint *ep = subs->data_endpoint; in prepare_playback_urb()
1384 spin_lock_irqsave(&subs->lock, flags); in prepare_playback_urb()
1385 frame_limit = subs->frame_limit + ep->max_urb_frames; in prepare_playback_urb()
1386 transfer_done = subs->transfer_done; in prepare_playback_urb()
1388 if (subs->lowlatency_playback && in prepare_playback_urb()
1390 unsigned int hwptr = subs->hwptr_done / stride; in prepare_playback_urb()
1415 if (subs->fmt_type == UAC_FORMAT_TYPE_II) { in prepare_playback_urb()
1448 subs->transfer_done = transfer_done; in prepare_playback_urb()
1449 subs->frame_limit = frame_limit; in prepare_playback_urb()
1451 subs->cur_audiofmt->dsd_dop)) { in prepare_playback_urb()
1452 fill_playback_urb_dsd_dop(subs, urb, bytes); in prepare_playback_urb()
1454 subs->cur_audiofmt->dsd_bitrev)) { in prepare_playback_urb()
1455 fill_playback_urb_dsd_bitrev(subs, urb, bytes); in prepare_playback_urb()
1458 if (!subs->tx_length_quirk) in prepare_playback_urb()
1459 copy_to_urb(subs, urb, 0, stride, bytes); in prepare_playback_urb()
1461 bytes = copy_to_urb_quirk(subs, urb, stride, bytes); in prepare_playback_urb()
1465 subs->last_frame_number = usb_get_current_frame_number(subs->dev); in prepare_playback_urb()
1467 if (subs->trigger_tstamp_pending_update) { in prepare_playback_urb()
1472 subs->trigger_tstamp_pending_update = false; in prepare_playback_urb()
1475 if (period_elapsed && !subs->running && subs->lowlatency_playback) { in prepare_playback_urb()
1476 subs->period_elapsed_pending = 1; in prepare_playback_urb()
1481 spin_unlock_irqrestore(&subs->lock, flags); in prepare_playback_urb()
1487 snd_pcm_period_elapsed_under_stream_lock(subs->pcm_substream); in prepare_playback_urb()
1489 snd_pcm_period_elapsed(subs->pcm_substream); in prepare_playback_urb()
1498 static void retire_playback_urb(struct snd_usb_substream *subs, in retire_playback_urb() argument
1505 spin_lock_irqsave(&subs->lock, flags); in retire_playback_urb()
1507 if (subs->inflight_bytes >= ctx->queued) in retire_playback_urb()
1508 subs->inflight_bytes -= ctx->queued; in retire_playback_urb()
1510 subs->inflight_bytes = 0; in retire_playback_urb()
1513 subs->last_frame_number = usb_get_current_frame_number(subs->dev); in retire_playback_urb()
1514 if (subs->running) { in retire_playback_urb()
1515 period_elapsed = subs->period_elapsed_pending; in retire_playback_urb()
1516 subs->period_elapsed_pending = 0; in retire_playback_urb()
1518 spin_unlock_irqrestore(&subs->lock, flags); in retire_playback_urb()
1520 snd_pcm_period_elapsed(subs->pcm_substream); in retire_playback_urb()
1528 struct snd_usb_substream *subs = substream->runtime->private_data; in snd_usb_pcm_playback_ack() local
1531 if (!subs->lowlatency_playback || !subs->running) in snd_usb_pcm_playback_ack()
1533 ep = subs->data_endpoint; in snd_usb_pcm_playback_ack()
1547 struct snd_usb_substream *subs = substream->runtime->private_data; in snd_usb_substream_playback_trigger() local
1552 subs->trigger_tstamp_pending_update = true; in snd_usb_substream_playback_trigger()
1555 snd_usb_endpoint_set_callback(subs->data_endpoint, in snd_usb_substream_playback_trigger()
1558 subs); in snd_usb_substream_playback_trigger()
1559 if (subs->lowlatency_playback && in snd_usb_substream_playback_trigger()
1562 subs->lowlatency_playback = false; in snd_usb_substream_playback_trigger()
1563 err = start_endpoints(subs); in snd_usb_substream_playback_trigger()
1565 snd_usb_endpoint_set_callback(subs->data_endpoint, in snd_usb_substream_playback_trigger()
1570 subs->running = 1; in snd_usb_substream_playback_trigger()
1571 dev_dbg(&subs->dev->dev, "%d:%d Start Playback PCM\n", in snd_usb_substream_playback_trigger()
1572 subs->cur_audiofmt->iface, in snd_usb_substream_playback_trigger()
1573 subs->cur_audiofmt->altsetting); in snd_usb_substream_playback_trigger()
1577 stop_endpoints(subs, substream->runtime->status->state == SNDRV_PCM_STATE_DRAINING); in snd_usb_substream_playback_trigger()
1578 snd_usb_endpoint_set_callback(subs->data_endpoint, in snd_usb_substream_playback_trigger()
1580 subs->running = 0; in snd_usb_substream_playback_trigger()
1581 dev_dbg(&subs->dev->dev, "%d:%d Stop Playback PCM\n", in snd_usb_substream_playback_trigger()
1582 subs->cur_audiofmt->iface, in snd_usb_substream_playback_trigger()
1583 subs->cur_audiofmt->altsetting); in snd_usb_substream_playback_trigger()
1587 snd_usb_endpoint_set_callback(subs->data_endpoint, in snd_usb_substream_playback_trigger()
1590 subs); in snd_usb_substream_playback_trigger()
1591 subs->running = 0; in snd_usb_substream_playback_trigger()
1592 dev_dbg(&subs->dev->dev, "%d:%d Pause Playback PCM\n", in snd_usb_substream_playback_trigger()
1593 subs->cur_audiofmt->iface, in snd_usb_substream_playback_trigger()
1594 subs->cur_audiofmt->altsetting); in snd_usb_substream_playback_trigger()
1605 struct snd_usb_substream *subs = substream->runtime->private_data; in snd_usb_substream_capture_trigger() local
1609 err = start_endpoints(subs); in snd_usb_substream_capture_trigger()
1614 snd_usb_endpoint_set_callback(subs->data_endpoint, in snd_usb_substream_capture_trigger()
1616 subs); in snd_usb_substream_capture_trigger()
1617 subs->last_frame_number = usb_get_current_frame_number(subs->dev); in snd_usb_substream_capture_trigger()
1618 subs->running = 1; in snd_usb_substream_capture_trigger()
1619 dev_dbg(&subs->dev->dev, "%d:%d Start Capture PCM\n", in snd_usb_substream_capture_trigger()
1620 subs->cur_audiofmt->iface, in snd_usb_substream_capture_trigger()
1621 subs->cur_audiofmt->altsetting); in snd_usb_substream_capture_trigger()
1625 stop_endpoints(subs, false); in snd_usb_substream_capture_trigger()
1628 snd_usb_endpoint_set_callback(subs->data_endpoint, in snd_usb_substream_capture_trigger()
1630 subs->running = 0; in snd_usb_substream_capture_trigger()
1631 dev_dbg(&subs->dev->dev, "%d:%d Stop Capture PCM\n", in snd_usb_substream_capture_trigger()
1632 subs->cur_audiofmt->iface, in snd_usb_substream_capture_trigger()
1633 subs->cur_audiofmt->altsetting); in snd_usb_substream_capture_trigger()
1672 void snd_usb_preallocate_buffer(struct snd_usb_substream *subs) in snd_usb_preallocate_buffer() argument
1674 struct snd_pcm *pcm = subs->stream->pcm; in snd_usb_preallocate_buffer()
1675 struct snd_pcm_substream *s = pcm->streams[subs->direction].substream; in snd_usb_preallocate_buffer()
1676 struct device *dev = subs->dev->bus->sysdev; in snd_usb_preallocate_buffer()