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()
160 bool snd_usb_pcm_has_fixed_rate(struct snd_usb_substream *subs) in snd_usb_pcm_has_fixed_rate() argument
166 if (!subs) in snd_usb_pcm_has_fixed_rate()
168 chip = subs->stream->chip; in snd_usb_pcm_has_fixed_rate()
171 list_for_each_entry(fp, &subs->fmt_list, list) { in snd_usb_pcm_has_fixed_rate()
250 static bool stop_endpoints(struct snd_usb_substream *subs, bool keep_pending) in stop_endpoints() argument
254 if (test_and_clear_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags)) { in stop_endpoints()
255 snd_usb_endpoint_stop(subs->sync_endpoint, keep_pending); in stop_endpoints()
258 if (test_and_clear_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags)) { in stop_endpoints()
259 snd_usb_endpoint_stop(subs->data_endpoint, keep_pending); in stop_endpoints()
265 static int start_endpoints(struct snd_usb_substream *subs) in start_endpoints() argument
269 if (!subs->data_endpoint) in start_endpoints()
272 if (!test_and_set_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags)) { in start_endpoints()
273 err = snd_usb_endpoint_start(subs->data_endpoint); in start_endpoints()
275 clear_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags); in start_endpoints()
280 if (subs->sync_endpoint && in start_endpoints()
281 !test_and_set_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags)) { in start_endpoints()
282 err = snd_usb_endpoint_start(subs->sync_endpoint); in start_endpoints()
284 clear_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags); in start_endpoints()
292 stop_endpoints(subs, false); in start_endpoints()
296 static void sync_pending_stops(struct snd_usb_substream *subs) in sync_pending_stops() argument
298 snd_usb_endpoint_sync_pending_stop(subs->sync_endpoint); in sync_pending_stops()
299 snd_usb_endpoint_sync_pending_stop(subs->data_endpoint); in sync_pending_stops()
305 struct snd_usb_substream *subs = substream->runtime->private_data; in snd_usb_pcm_sync_stop() local
307 sync_pending_stops(subs); in snd_usb_pcm_sync_stop()
401 static int snd_usb_pcm_change_state(struct snd_usb_substream *subs, int state) in snd_usb_pcm_change_state() argument
405 if (!subs->str_pd) in snd_usb_pcm_change_state()
408 ret = snd_usb_power_domain_set(subs->stream->chip, subs->str_pd, state); in snd_usb_pcm_change_state()
410 dev_err(&subs->dev->dev, in snd_usb_pcm_change_state()
412 subs->str_pd->pd_id, state, ret); in snd_usb_pcm_change_state()
450 struct snd_usb_substream *subs) in close_endpoints() argument
452 if (subs->data_endpoint) { in close_endpoints()
453 snd_usb_endpoint_set_sync(chip, subs->data_endpoint, NULL); in close_endpoints()
454 snd_usb_endpoint_close(chip, subs->data_endpoint); in close_endpoints()
455 subs->data_endpoint = NULL; in close_endpoints()
458 if (subs->sync_endpoint) { in close_endpoints()
459 snd_usb_endpoint_close(chip, subs->sync_endpoint); in close_endpoints()
460 subs->sync_endpoint = NULL; in close_endpoints()
477 struct snd_usb_substream *subs = substream->runtime->private_data; in snd_usb_hw_params() local
478 struct snd_usb_audio *chip = subs->stream->chip; in snd_usb_hw_params()
484 ret = snd_media_start_pipeline(subs); in snd_usb_hw_params()
488 fixed_rate = snd_usb_pcm_has_fixed_rate(subs); in snd_usb_hw_params()
489 fmt = find_substream_format(subs, hw_params); in snd_usb_hw_params()
523 ret = snd_usb_pcm_change_state(subs, UAC3_PD_STATE_D0); in snd_usb_hw_params()
527 if (subs->data_endpoint) { in snd_usb_hw_params()
528 if (snd_usb_endpoint_compatible(chip, subs->data_endpoint, in snd_usb_hw_params()
531 if (stop_endpoints(subs, false)) in snd_usb_hw_params()
532 sync_pending_stops(subs); in snd_usb_hw_params()
533 close_endpoints(chip, subs); in snd_usb_hw_params()
536 subs->data_endpoint = snd_usb_endpoint_open(chip, fmt, hw_params, false, fixed_rate); in snd_usb_hw_params()
537 if (!subs->data_endpoint) { in snd_usb_hw_params()
543 subs->sync_endpoint = snd_usb_endpoint_open(chip, sync_fmt, in snd_usb_hw_params()
547 if (!subs->sync_endpoint) { in snd_usb_hw_params()
552 snd_usb_endpoint_set_sync(chip, subs->data_endpoint, in snd_usb_hw_params()
553 subs->sync_endpoint); in snd_usb_hw_params()
557 subs->cur_audiofmt = fmt; in snd_usb_hw_params()
560 if (!subs->data_endpoint->need_setup) in snd_usb_hw_params()
563 if (subs->sync_endpoint) { in snd_usb_hw_params()
564 ret = snd_usb_endpoint_set_params(chip, subs->sync_endpoint); in snd_usb_hw_params()
569 ret = snd_usb_endpoint_set_params(chip, subs->data_endpoint); in snd_usb_hw_params()
573 close_endpoints(chip, subs); in snd_usb_hw_params()
578 snd_media_stop_pipeline(subs); in snd_usb_hw_params()
590 struct snd_usb_substream *subs = substream->runtime->private_data; in snd_usb_hw_free() local
591 struct snd_usb_audio *chip = subs->stream->chip; in snd_usb_hw_free()
593 snd_media_stop_pipeline(subs); in snd_usb_hw_free()
595 subs->cur_audiofmt = NULL; in snd_usb_hw_free()
598 if (stop_endpoints(subs, false)) in snd_usb_hw_free()
599 sync_pending_stops(subs); in snd_usb_hw_free()
600 close_endpoints(chip, subs); in snd_usb_hw_free()
615 struct snd_usb_substream *subs) in lowlatency_playback_available() argument
617 struct snd_usb_audio *chip = subs->stream->chip; in lowlatency_playback_available()
619 if (subs->direction == SNDRV_PCM_STREAM_CAPTURE) in lowlatency_playback_available()
627 if (snd_usb_endpoint_implicit_feedback_sink(subs->data_endpoint)) in lowlatency_playback_available()
640 struct snd_usb_substream *subs = runtime->private_data; in snd_usb_pcm_prepare() local
641 struct snd_usb_audio *chip = subs->stream->chip; in snd_usb_pcm_prepare()
648 if (snd_BUG_ON(!subs->data_endpoint)) { in snd_usb_pcm_prepare()
654 if (subs->sync_endpoint) { in snd_usb_pcm_prepare()
655 ret = snd_usb_endpoint_prepare(chip, subs->sync_endpoint); in snd_usb_pcm_prepare()
660 ret = snd_usb_endpoint_prepare(chip, subs->data_endpoint); in snd_usb_pcm_prepare()
664 snd_usb_set_format_quirk(subs, subs->cur_audiofmt); in snd_usb_pcm_prepare()
668 subs->buffer_bytes = frames_to_bytes(runtime, runtime->buffer_size); in snd_usb_pcm_prepare()
669 subs->inflight_bytes = 0; in snd_usb_pcm_prepare()
670 subs->hwptr_done = 0; in snd_usb_pcm_prepare()
671 subs->transfer_done = 0; in snd_usb_pcm_prepare()
672 subs->last_frame_number = 0; in snd_usb_pcm_prepare()
673 subs->period_elapsed_pending = 0; in snd_usb_pcm_prepare()
676 subs->lowlatency_playback = lowlatency_playback_available(runtime, subs); in snd_usb_pcm_prepare()
678 !subs->lowlatency_playback) { in snd_usb_pcm_prepare()
679 ret = start_endpoints(subs); in snd_usb_pcm_prepare()
684 sync_pending_stops(subs); in snd_usb_pcm_prepare()
720 static int hw_check_valid_format(struct snd_usb_substream *subs, in hw_check_valid_format() argument
755 if (subs->speed != USB_SPEED_FULL) { in hw_check_valid_format()
813 struct snd_usb_substream *subs = rule->private; in hw_rule_rate() local
814 struct snd_usb_audio *chip = subs->stream->chip; in hw_rule_rate()
824 list_for_each_entry(fp, &subs->fmt_list, list) { in hw_rule_rate()
825 if (!hw_check_valid_format(subs, params, fp)) in hw_rule_rate()
829 subs->data_endpoint); in hw_rule_rate()
840 subs->sync_endpoint); in hw_rule_rate()
879 struct snd_usb_substream *subs = rule->private; in hw_rule_channels() local
887 list_for_each_entry(fp, &subs->fmt_list, list) { in hw_rule_channels()
888 if (!hw_check_valid_format(subs, params, fp)) in hw_rule_channels()
918 struct snd_usb_substream *subs = rule->private; in hw_rule_format() local
919 struct snd_usb_audio *chip = subs->stream->chip; in hw_rule_format()
927 list_for_each_entry(fp, &subs->fmt_list, list) { in hw_rule_format()
928 if (!hw_check_valid_format(subs, params, fp)) in hw_rule_format()
932 subs->data_endpoint); in hw_rule_format()
942 subs->sync_endpoint); in hw_rule_format()
959 struct snd_usb_substream *subs = rule->private; in hw_rule_period_time() local
968 list_for_each_entry(fp, &subs->fmt_list, list) { in hw_rule_period_time()
969 if (!hw_check_valid_format(subs, params, fp)) in hw_rule_period_time()
987 struct snd_usb_substream *subs = rule->private; in hw_rule_period_size_implicit_fb() local
988 struct snd_usb_audio *chip = subs->stream->chip; in hw_rule_period_size_implicit_fb()
998 list_for_each_entry(fp, &subs->fmt_list, list) { in hw_rule_period_size_implicit_fb()
999 if (!hw_check_valid_format(subs, params, fp)) in hw_rule_period_size_implicit_fb()
1002 subs->data_endpoint); in hw_rule_period_size_implicit_fb()
1013 subs->sync_endpoint); in hw_rule_period_size_implicit_fb()
1032 struct snd_usb_substream *subs = rule->private; in hw_rule_periods_implicit_fb() local
1033 struct snd_usb_audio *chip = subs->stream->chip; in hw_rule_periods_implicit_fb()
1043 list_for_each_entry(fp, &subs->fmt_list, list) { in hw_rule_periods_implicit_fb()
1044 if (!hw_check_valid_format(subs, params, fp)) in hw_rule_periods_implicit_fb()
1047 subs->data_endpoint); in hw_rule_periods_implicit_fb()
1058 subs->sync_endpoint); in hw_rule_periods_implicit_fb()
1078 static int setup_hw_info(struct snd_pcm_runtime *runtime, struct snd_usb_substream *subs) in setup_hw_info() argument
1085 runtime->hw.formats = subs->formats; in setup_hw_info()
1094 list_for_each_entry(fp, &subs->fmt_list, list) { in setup_hw_info()
1114 if (subs->speed == USB_SPEED_FULL) in setup_hw_info()
1128 hw_rule_rate, subs, in setup_hw_info()
1138 hw_rule_channels, subs, in setup_hw_info()
1147 hw_rule_format, subs, in setup_hw_info()
1158 hw_rule_period_time, subs, in setup_hw_info()
1181 hw_rule_period_size_implicit_fb, subs, in setup_hw_info()
1186 hw_rule_periods_implicit_fb, subs, in setup_hw_info()
1191 list_for_each_entry(fp, &subs->fmt_list, list) { in setup_hw_info()
1206 struct snd_usb_substream *subs = &as->substream[direction]; in snd_usb_pcm_open() local
1214 runtime->private_data = subs; in snd_usb_pcm_open()
1215 subs->pcm_substream = substream; in snd_usb_pcm_open()
1219 subs->dsd_dop.byte_idx = 0; in snd_usb_pcm_open()
1220 subs->dsd_dop.channel = 0; in snd_usb_pcm_open()
1221 subs->dsd_dop.marker = 1; in snd_usb_pcm_open()
1223 ret = setup_hw_info(runtime, subs); in snd_usb_pcm_open()
1226 ret = snd_usb_autoresume(subs->stream->chip); in snd_usb_pcm_open()
1229 ret = snd_media_stream_init(subs, as->pcm, direction); in snd_usb_pcm_open()
1231 snd_usb_autosuspend(subs->stream->chip); in snd_usb_pcm_open()
1239 struct snd_usb_substream *subs = &as->substream[direction]; in snd_usb_pcm_close() local
1242 snd_media_stop_pipeline(subs); in snd_usb_pcm_close()
1244 if (!snd_usb_lock_shutdown(subs->stream->chip)) { in snd_usb_pcm_close()
1245 ret = snd_usb_pcm_change_state(subs, UAC3_PD_STATE_D1); in snd_usb_pcm_close()
1246 snd_usb_unlock_shutdown(subs->stream->chip); in snd_usb_pcm_close()
1251 subs->pcm_substream = NULL; in snd_usb_pcm_close()
1252 snd_usb_autosuspend(subs->stream->chip); in snd_usb_pcm_close()
1262 static void retire_capture_urb(struct snd_usb_substream *subs, in retire_capture_urb() argument
1265 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; in retire_capture_urb()
1273 current_frame_number = usb_get_current_frame_number(subs->dev); in retire_capture_urb()
1278 cp = (unsigned char *)urb->transfer_buffer + urb->iso_frame_desc[i].offset + subs->pkt_offset_adj; in retire_capture_urb()
1280 dev_dbg(&subs->dev->dev, "frame %d active: %d\n", in retire_capture_urb()
1285 if (subs->stream_offset_adj > 0) { in retire_capture_urb()
1286 unsigned int adj = min(subs->stream_offset_adj, bytes); in retire_capture_urb()
1289 subs->stream_offset_adj -= adj; in retire_capture_urb()
1292 if (!subs->txfr_quirk) in retire_capture_urb()
1297 dev_warn_ratelimited(&subs->dev->dev, in retire_capture_urb()
1302 spin_lock_irqsave(&subs->lock, flags); in retire_capture_urb()
1303 oldptr = subs->hwptr_done; in retire_capture_urb()
1304 subs->hwptr_done += bytes; in retire_capture_urb()
1305 if (subs->hwptr_done >= subs->buffer_bytes) in retire_capture_urb()
1306 subs->hwptr_done -= subs->buffer_bytes; in retire_capture_urb()
1308 subs->transfer_done += frames; in retire_capture_urb()
1309 if (subs->transfer_done >= runtime->period_size) { in retire_capture_urb()
1310 subs->transfer_done -= runtime->period_size; in retire_capture_urb()
1315 subs->last_frame_number = current_frame_number; in retire_capture_urb()
1317 spin_unlock_irqrestore(&subs->lock, flags); in retire_capture_urb()
1319 if (oldptr + bytes > subs->buffer_bytes) { in retire_capture_urb()
1320 unsigned int bytes1 = subs->buffer_bytes - oldptr; in retire_capture_urb()
1330 snd_pcm_period_elapsed(subs->pcm_substream); in retire_capture_urb()
1333 static void urb_ctx_queue_advance(struct snd_usb_substream *subs, in urb_ctx_queue_advance() argument
1339 subs->inflight_bytes += bytes; in urb_ctx_queue_advance()
1340 subs->hwptr_done += bytes; in urb_ctx_queue_advance()
1341 if (subs->hwptr_done >= subs->buffer_bytes) in urb_ctx_queue_advance()
1342 subs->hwptr_done -= subs->buffer_bytes; in urb_ctx_queue_advance()
1345 static inline void fill_playback_urb_dsd_dop(struct snd_usb_substream *subs, in fill_playback_urb_dsd_dop() argument
1348 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; in fill_playback_urb_dsd_dop()
1350 unsigned int src_idx = subs->hwptr_done; in fill_playback_urb_dsd_dop()
1351 unsigned int wrap = subs->buffer_bytes; in fill_playback_urb_dsd_dop()
1374 if (++subs->dsd_dop.byte_idx == 3) { in fill_playback_urb_dsd_dop()
1376 dst[dst_idx++] = marker[subs->dsd_dop.marker]; in fill_playback_urb_dsd_dop()
1378 subs->dsd_dop.byte_idx = 0; in fill_playback_urb_dsd_dop()
1380 if (++subs->dsd_dop.channel % runtime->channels == 0) { in fill_playback_urb_dsd_dop()
1382 subs->dsd_dop.marker++; in fill_playback_urb_dsd_dop()
1383 subs->dsd_dop.marker %= ARRAY_SIZE(marker); in fill_playback_urb_dsd_dop()
1384 subs->dsd_dop.channel = 0; in fill_playback_urb_dsd_dop()
1388 int idx = (src_idx + subs->dsd_dop.byte_idx - 1) % wrap; in fill_playback_urb_dsd_dop()
1390 if (subs->cur_audiofmt->dsd_bitrev) in fill_playback_urb_dsd_dop()
1398 urb_ctx_queue_advance(subs, urb, queued); in fill_playback_urb_dsd_dop()
1402 static void fill_playback_urb_dsd_bitrev(struct snd_usb_substream *subs, in fill_playback_urb_dsd_bitrev() argument
1405 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; in fill_playback_urb_dsd_bitrev()
1408 int i, ofs = subs->hwptr_done; in fill_playback_urb_dsd_bitrev()
1412 if (++ofs >= subs->buffer_bytes) in fill_playback_urb_dsd_bitrev()
1416 urb_ctx_queue_advance(subs, urb, bytes); in fill_playback_urb_dsd_bitrev()
1419 static void copy_to_urb(struct snd_usb_substream *subs, struct urb *urb, in copy_to_urb() argument
1422 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; in copy_to_urb()
1424 if (subs->hwptr_done + bytes > subs->buffer_bytes) { in copy_to_urb()
1426 unsigned int bytes1 = subs->buffer_bytes - subs->hwptr_done; in copy_to_urb()
1429 runtime->dma_area + subs->hwptr_done, bytes1); in copy_to_urb()
1434 runtime->dma_area + subs->hwptr_done, bytes); in copy_to_urb()
1437 urb_ctx_queue_advance(subs, urb, bytes); in copy_to_urb()
1440 static unsigned int copy_to_urb_quirk(struct snd_usb_substream *subs, in copy_to_urb_quirk() argument
1458 copy_to_urb(subs, urb, offset + sizeof(packet_length), in copy_to_urb_quirk()
1466 static int prepare_playback_urb(struct snd_usb_substream *subs, in prepare_playback_urb() argument
1470 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; in prepare_playback_urb()
1471 struct snd_usb_endpoint *ep = subs->data_endpoint; in prepare_playback_urb()
1486 spin_lock_irqsave(&subs->lock, flags); in prepare_playback_urb()
1487 frame_limit = subs->frame_limit + ep->max_urb_frames; in prepare_playback_urb()
1488 transfer_done = subs->transfer_done; in prepare_playback_urb()
1490 if (subs->lowlatency_playback && in prepare_playback_urb()
1492 unsigned int hwptr = subs->hwptr_done / stride; in prepare_playback_urb()
1517 if (subs->fmt_type == UAC_FORMAT_TYPE_II) { in prepare_playback_urb()
1550 subs->transfer_done = transfer_done; in prepare_playback_urb()
1551 subs->frame_limit = frame_limit; in prepare_playback_urb()
1553 subs->cur_audiofmt->dsd_dop)) { in prepare_playback_urb()
1554 fill_playback_urb_dsd_dop(subs, urb, bytes); in prepare_playback_urb()
1556 subs->cur_audiofmt->dsd_bitrev)) { in prepare_playback_urb()
1557 fill_playback_urb_dsd_bitrev(subs, urb, bytes); in prepare_playback_urb()
1560 if (!subs->tx_length_quirk) in prepare_playback_urb()
1561 copy_to_urb(subs, urb, 0, stride, bytes); in prepare_playback_urb()
1563 bytes = copy_to_urb_quirk(subs, urb, stride, bytes); in prepare_playback_urb()
1567 subs->last_frame_number = usb_get_current_frame_number(subs->dev); in prepare_playback_urb()
1569 if (subs->trigger_tstamp_pending_update) { in prepare_playback_urb()
1574 subs->trigger_tstamp_pending_update = false; in prepare_playback_urb()
1577 if (period_elapsed && !subs->running && subs->lowlatency_playback) { in prepare_playback_urb()
1578 subs->period_elapsed_pending = 1; in prepare_playback_urb()
1583 spin_unlock_irqrestore(&subs->lock, flags); in prepare_playback_urb()
1589 snd_pcm_period_elapsed_under_stream_lock(subs->pcm_substream); in prepare_playback_urb()
1591 snd_pcm_period_elapsed(subs->pcm_substream); in prepare_playback_urb()
1600 static void retire_playback_urb(struct snd_usb_substream *subs, in retire_playback_urb() argument
1607 spin_lock_irqsave(&subs->lock, flags); in retire_playback_urb()
1609 if (subs->inflight_bytes >= ctx->queued) in retire_playback_urb()
1610 subs->inflight_bytes -= ctx->queued; in retire_playback_urb()
1612 subs->inflight_bytes = 0; in retire_playback_urb()
1615 subs->last_frame_number = usb_get_current_frame_number(subs->dev); in retire_playback_urb()
1616 if (subs->running) { in retire_playback_urb()
1617 period_elapsed = subs->period_elapsed_pending; in retire_playback_urb()
1618 subs->period_elapsed_pending = 0; in retire_playback_urb()
1620 spin_unlock_irqrestore(&subs->lock, flags); in retire_playback_urb()
1622 snd_pcm_period_elapsed(subs->pcm_substream); in retire_playback_urb()
1630 struct snd_usb_substream *subs = substream->runtime->private_data; in snd_usb_pcm_playback_ack() local
1633 if (!subs->lowlatency_playback || !subs->running) in snd_usb_pcm_playback_ack()
1635 ep = subs->data_endpoint; in snd_usb_pcm_playback_ack()
1649 struct snd_usb_substream *subs = substream->runtime->private_data; in snd_usb_substream_playback_trigger() local
1654 subs->trigger_tstamp_pending_update = true; in snd_usb_substream_playback_trigger()
1657 snd_usb_endpoint_set_callback(subs->data_endpoint, in snd_usb_substream_playback_trigger()
1660 subs); in snd_usb_substream_playback_trigger()
1661 if (subs->lowlatency_playback && in snd_usb_substream_playback_trigger()
1664 subs->lowlatency_playback = false; in snd_usb_substream_playback_trigger()
1665 err = start_endpoints(subs); in snd_usb_substream_playback_trigger()
1667 snd_usb_endpoint_set_callback(subs->data_endpoint, in snd_usb_substream_playback_trigger()
1672 subs->running = 1; in snd_usb_substream_playback_trigger()
1673 dev_dbg(&subs->dev->dev, "%d:%d Start Playback PCM\n", in snd_usb_substream_playback_trigger()
1674 subs->cur_audiofmt->iface, in snd_usb_substream_playback_trigger()
1675 subs->cur_audiofmt->altsetting); in snd_usb_substream_playback_trigger()
1679 stop_endpoints(subs, substream->runtime->state == SNDRV_PCM_STATE_DRAINING); in snd_usb_substream_playback_trigger()
1680 snd_usb_endpoint_set_callback(subs->data_endpoint, in snd_usb_substream_playback_trigger()
1682 subs->running = 0; in snd_usb_substream_playback_trigger()
1683 dev_dbg(&subs->dev->dev, "%d:%d Stop Playback PCM\n", in snd_usb_substream_playback_trigger()
1684 subs->cur_audiofmt->iface, in snd_usb_substream_playback_trigger()
1685 subs->cur_audiofmt->altsetting); in snd_usb_substream_playback_trigger()
1689 snd_usb_endpoint_set_callback(subs->data_endpoint, in snd_usb_substream_playback_trigger()
1692 subs); in snd_usb_substream_playback_trigger()
1693 subs->running = 0; in snd_usb_substream_playback_trigger()
1694 dev_dbg(&subs->dev->dev, "%d:%d Pause Playback PCM\n", in snd_usb_substream_playback_trigger()
1695 subs->cur_audiofmt->iface, in snd_usb_substream_playback_trigger()
1696 subs->cur_audiofmt->altsetting); in snd_usb_substream_playback_trigger()
1707 struct snd_usb_substream *subs = substream->runtime->private_data; in snd_usb_substream_capture_trigger() local
1711 err = start_endpoints(subs); in snd_usb_substream_capture_trigger()
1716 snd_usb_endpoint_set_callback(subs->data_endpoint, in snd_usb_substream_capture_trigger()
1718 subs); in snd_usb_substream_capture_trigger()
1719 subs->last_frame_number = usb_get_current_frame_number(subs->dev); in snd_usb_substream_capture_trigger()
1720 subs->running = 1; in snd_usb_substream_capture_trigger()
1721 dev_dbg(&subs->dev->dev, "%d:%d Start Capture PCM\n", in snd_usb_substream_capture_trigger()
1722 subs->cur_audiofmt->iface, in snd_usb_substream_capture_trigger()
1723 subs->cur_audiofmt->altsetting); in snd_usb_substream_capture_trigger()
1727 stop_endpoints(subs, false); in snd_usb_substream_capture_trigger()
1730 snd_usb_endpoint_set_callback(subs->data_endpoint, in snd_usb_substream_capture_trigger()
1732 subs->running = 0; in snd_usb_substream_capture_trigger()
1733 dev_dbg(&subs->dev->dev, "%d:%d Stop Capture PCM\n", in snd_usb_substream_capture_trigger()
1734 subs->cur_audiofmt->iface, in snd_usb_substream_capture_trigger()
1735 subs->cur_audiofmt->altsetting); in snd_usb_substream_capture_trigger()
1774 void snd_usb_preallocate_buffer(struct snd_usb_substream *subs) in snd_usb_preallocate_buffer() argument
1776 struct snd_pcm *pcm = subs->stream->pcm; in snd_usb_preallocate_buffer()
1777 struct snd_pcm_substream *s = pcm->streams[subs->direction].substream; in snd_usb_preallocate_buffer()
1778 struct device *dev = subs->dev->bus->sysdev; in snd_usb_preallocate_buffer()