1 // SPDX-License-Identifier: GPL-2.0-or-later
5 #include <linux/init.h>
6 #include <linux/slab.h>
7 #include <linux/bitrev.h>
8 #include <linux/ratelimit.h>
10 #include <linux/usb/audio.h>
11 #include <linux/usb/audio-v2.h>
13 #include <sound/core.h>
14 #include <sound/pcm.h>
15 #include <sound/pcm_params.h>
28 #define SUBSTREAM_FLAG_DATA_EP_STARTED 0
29 #define SUBSTREAM_FLAG_SYNC_EP_STARTED 1
31 /* return the estimated delay based on USB frame counters */
32 static snd_pcm_uframes_t
snd_usb_pcm_delay(struct snd_usb_substream
*subs
,
33 struct snd_pcm_runtime
*runtime
)
35 unsigned int current_frame_number
;
36 unsigned int frame_diff
;
40 if (subs
->direction
== SNDRV_PCM_STREAM_PLAYBACK
) {
41 queued
= bytes_to_frames(runtime
, subs
->inflight_bytes
);
44 } else if (!subs
->running
) {
48 current_frame_number
= usb_get_current_frame_number(subs
->dev
);
50 * HCD implementations use different widths, use lower 8 bits.
51 * The delay will be managed up to 256ms, which is more than
54 frame_diff
= (current_frame_number
- subs
->last_frame_number
) & 0xff;
56 /* Approximation based on number of samples per USB frame (ms),
57 some truncation for 44.1 but the estimate is good enough */
58 est_delay
= frame_diff
* runtime
->rate
/ 1000;
60 if (subs
->direction
== SNDRV_PCM_STREAM_PLAYBACK
) {
61 est_delay
= queued
- est_delay
;
70 * return the current pcm pointer. just based on the hwptr_done value.
72 static snd_pcm_uframes_t
snd_usb_pcm_pointer(struct snd_pcm_substream
*substream
)
74 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
75 struct snd_usb_substream
*subs
= runtime
->private_data
;
76 unsigned int hwptr_done
;
78 if (atomic_read(&subs
->stream
->chip
->shutdown
))
79 return SNDRV_PCM_POS_XRUN
;
80 spin_lock(&subs
->lock
);
81 hwptr_done
= subs
->hwptr_done
;
82 runtime
->delay
= snd_usb_pcm_delay(subs
, runtime
);
83 spin_unlock(&subs
->lock
);
84 return bytes_to_frames(runtime
, hwptr_done
);
88 * find a matching audio format
90 static const struct audioformat
*
91 find_format(struct list_head
*fmt_list_head
, snd_pcm_format_t format
,
92 unsigned int rate
, unsigned int channels
, bool strict_match
,
93 struct snd_usb_substream
*subs
)
95 const struct audioformat
*fp
;
96 const struct audioformat
*found
= NULL
;
97 int cur_attr
= 0, attr
;
99 list_for_each_entry(fp
, fmt_list_head
, list
) {
101 if (!(fp
->formats
& pcm_format_to_bits(format
)))
103 if (fp
->channels
!= channels
)
106 if (rate
< fp
->rate_min
|| rate
> fp
->rate_max
)
108 if (!(fp
->rates
& SNDRV_PCM_RATE_CONTINUOUS
)) {
110 for (i
= 0; i
< fp
->nr_rates
; i
++)
111 if (fp
->rate_table
[i
] == rate
)
113 if (i
>= fp
->nr_rates
)
116 attr
= fp
->ep_attr
& USB_ENDPOINT_SYNCTYPE
;
122 /* avoid async out and adaptive in if the other method
123 * supports the same format.
124 * this is a workaround for the case like
125 * M-audio audiophile USB.
127 if (subs
&& attr
!= cur_attr
) {
128 if ((attr
== USB_ENDPOINT_SYNC_ASYNC
&&
129 subs
->direction
== SNDRV_PCM_STREAM_PLAYBACK
) ||
130 (attr
== USB_ENDPOINT_SYNC_ADAPTIVE
&&
131 subs
->direction
== SNDRV_PCM_STREAM_CAPTURE
))
133 if ((cur_attr
== USB_ENDPOINT_SYNC_ASYNC
&&
134 subs
->direction
== SNDRV_PCM_STREAM_PLAYBACK
) ||
135 (cur_attr
== USB_ENDPOINT_SYNC_ADAPTIVE
&&
136 subs
->direction
== SNDRV_PCM_STREAM_CAPTURE
)) {
142 /* find the format with the largest max. packet size */
143 if (fp
->maxpacksize
> found
->maxpacksize
) {
151 static const struct audioformat
*
152 find_substream_format(struct snd_usb_substream
*subs
,
153 const struct snd_pcm_hw_params
*params
)
155 return find_format(&subs
->fmt_list
, params_format(params
),
156 params_rate(params
), params_channels(params
),
160 bool snd_usb_pcm_has_fixed_rate(struct snd_usb_substream
*subs
)
162 const struct audioformat
*fp
;
163 struct snd_usb_audio
*chip
;
168 chip
= subs
->stream
->chip
;
169 if (!(chip
->quirk_flags
& QUIRK_FLAG_FIXED_RATE
))
171 list_for_each_entry(fp
, &subs
->fmt_list
, list
) {
172 if (fp
->rates
& SNDRV_PCM_RATE_CONTINUOUS
)
174 if (fp
->nr_rates
< 1)
176 if (fp
->nr_rates
> 1)
179 rate
= fp
->rate_table
[0];
182 if (rate
!= fp
->rate_table
[0])
188 static int init_pitch_v1(struct snd_usb_audio
*chip
, int ep
)
190 struct usb_device
*dev
= chip
->dev
;
191 unsigned char data
[1];
195 err
= snd_usb_ctl_msg(dev
, usb_sndctrlpipe(dev
, 0), UAC_SET_CUR
,
196 USB_TYPE_CLASS
|USB_RECIP_ENDPOINT
|USB_DIR_OUT
,
197 UAC_EP_CS_ATTR_PITCH_CONTROL
<< 8, ep
,
202 static int init_pitch_v2(struct snd_usb_audio
*chip
, int ep
)
204 struct usb_device
*dev
= chip
->dev
;
205 unsigned char data
[1];
209 err
= snd_usb_ctl_msg(dev
, usb_sndctrlpipe(dev
, 0), UAC2_CS_CUR
,
210 USB_TYPE_CLASS
| USB_RECIP_ENDPOINT
| USB_DIR_OUT
,
211 UAC2_EP_CS_PITCH
<< 8, 0,
217 * initialize the pitch control and sample rate
219 int snd_usb_init_pitch(struct snd_usb_audio
*chip
,
220 const struct audioformat
*fmt
)
224 /* if endpoint doesn't have pitch control, bail out */
225 if (!(fmt
->attributes
& UAC_EP_CS_ATTR_PITCH_CONTROL
))
228 usb_audio_dbg(chip
, "enable PITCH for EP 0x%x\n", fmt
->endpoint
);
230 switch (fmt
->protocol
) {
232 err
= init_pitch_v1(chip
, fmt
->endpoint
);
235 err
= init_pitch_v2(chip
, fmt
->endpoint
);
242 usb_audio_err(chip
, "failed to enable PITCH for EP 0x%x\n",
250 static bool stop_endpoints(struct snd_usb_substream
*subs
, bool keep_pending
)
254 if (test_and_clear_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED
, &subs
->flags
)) {
255 snd_usb_endpoint_stop(subs
->sync_endpoint
, keep_pending
);
258 if (test_and_clear_bit(SUBSTREAM_FLAG_DATA_EP_STARTED
, &subs
->flags
)) {
259 snd_usb_endpoint_stop(subs
->data_endpoint
, keep_pending
);
265 static int start_endpoints(struct snd_usb_substream
*subs
)
269 if (!subs
->data_endpoint
)
272 if (!test_and_set_bit(SUBSTREAM_FLAG_DATA_EP_STARTED
, &subs
->flags
)) {
273 err
= snd_usb_endpoint_start(subs
->data_endpoint
);
275 clear_bit(SUBSTREAM_FLAG_DATA_EP_STARTED
, &subs
->flags
);
280 if (subs
->sync_endpoint
&&
281 !test_and_set_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED
, &subs
->flags
)) {
282 err
= snd_usb_endpoint_start(subs
->sync_endpoint
);
284 clear_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED
, &subs
->flags
);
292 stop_endpoints(subs
, false);
296 static void sync_pending_stops(struct snd_usb_substream
*subs
)
298 snd_usb_endpoint_sync_pending_stop(subs
->sync_endpoint
);
299 snd_usb_endpoint_sync_pending_stop(subs
->data_endpoint
);
302 /* PCM sync_stop callback */
303 static int snd_usb_pcm_sync_stop(struct snd_pcm_substream
*substream
)
305 struct snd_usb_substream
*subs
= substream
->runtime
->private_data
;
307 sync_pending_stops(subs
);
311 /* Set up sync endpoint */
312 int snd_usb_audioformat_set_sync_ep(struct snd_usb_audio
*chip
,
313 struct audioformat
*fmt
)
315 struct usb_device
*dev
= chip
->dev
;
316 struct usb_host_interface
*alts
;
317 struct usb_interface_descriptor
*altsd
;
318 unsigned int ep
, attr
, sync_attr
;
323 return 0; /* already set up */
325 alts
= snd_usb_get_host_interface(chip
, fmt
->iface
, fmt
->altsetting
);
328 altsd
= get_iface_desc(alts
);
330 err
= snd_usb_parse_implicit_fb_quirk(chip
, fmt
, alts
);
332 return 0; /* matched */
335 * Generic sync EP handling
338 if (fmt
->ep_idx
> 0 || altsd
->bNumEndpoints
< 2)
341 is_playback
= !(get_endpoint(alts
, 0)->bEndpointAddress
& USB_DIR_IN
);
342 attr
= fmt
->ep_attr
& USB_ENDPOINT_SYNCTYPE
;
343 if ((is_playback
&& (attr
== USB_ENDPOINT_SYNC_SYNC
||
344 attr
== USB_ENDPOINT_SYNC_ADAPTIVE
)) ||
345 (!is_playback
&& attr
!= USB_ENDPOINT_SYNC_ADAPTIVE
))
348 sync_attr
= get_endpoint(alts
, 1)->bmAttributes
;
351 * In case of illegal SYNC_NONE for OUT endpoint, we keep going to see
352 * if we don't find a sync endpoint, as on M-Audio Transit. In case of
353 * error fall back to SYNC mode and don't create sync endpoint
356 /* check sync-pipe endpoint */
357 /* ... and check descriptor size before accessing bSynchAddress
358 because there is a version of the SB Audigy 2 NX firmware lacking
359 the audio fields in the endpoint descriptors */
360 if ((sync_attr
& USB_ENDPOINT_XFERTYPE_MASK
) != USB_ENDPOINT_XFER_ISOC
||
361 (get_endpoint(alts
, 1)->bLength
>= USB_DT_ENDPOINT_AUDIO_SIZE
&&
362 get_endpoint(alts
, 1)->bSynchAddress
!= 0)) {
364 "%d:%d : invalid sync pipe. bmAttributes %02x, bLength %d, bSynchAddress %02x\n",
365 fmt
->iface
, fmt
->altsetting
,
366 get_endpoint(alts
, 1)->bmAttributes
,
367 get_endpoint(alts
, 1)->bLength
,
368 get_endpoint(alts
, 1)->bSynchAddress
);
369 if (is_playback
&& attr
== USB_ENDPOINT_SYNC_NONE
)
373 ep
= get_endpoint(alts
, 1)->bEndpointAddress
;
374 if (get_endpoint(alts
, 0)->bLength
>= USB_DT_ENDPOINT_AUDIO_SIZE
&&
375 get_endpoint(alts
, 0)->bSynchAddress
!= 0 &&
376 ((is_playback
&& ep
!= (unsigned int)(get_endpoint(alts
, 0)->bSynchAddress
| USB_DIR_IN
)) ||
377 (!is_playback
&& ep
!= (unsigned int)(get_endpoint(alts
, 0)->bSynchAddress
& ~USB_DIR_IN
)))) {
379 "%d:%d : invalid sync pipe. is_playback %d, ep %02x, bSynchAddress %02x\n",
380 fmt
->iface
, fmt
->altsetting
,
381 is_playback
, ep
, get_endpoint(alts
, 0)->bSynchAddress
);
382 if (is_playback
&& attr
== USB_ENDPOINT_SYNC_NONE
)
388 fmt
->sync_iface
= altsd
->bInterfaceNumber
;
389 fmt
->sync_altsetting
= altsd
->bAlternateSetting
;
390 fmt
->sync_ep_idx
= 1;
391 if ((sync_attr
& USB_ENDPOINT_USAGE_MASK
) == USB_ENDPOINT_USAGE_IMPLICIT_FB
)
392 fmt
->implicit_fb
= 1;
394 dev_dbg(&dev
->dev
, "%d:%d: found sync_ep=0x%x, iface=%d, alt=%d, implicit_fb=%d\n",
395 fmt
->iface
, fmt
->altsetting
, fmt
->sync_ep
, fmt
->sync_iface
,
396 fmt
->sync_altsetting
, fmt
->implicit_fb
);
401 static int snd_usb_pcm_change_state(struct snd_usb_substream
*subs
, int state
)
408 ret
= snd_usb_power_domain_set(subs
->stream
->chip
, subs
->str_pd
, state
);
410 dev_err(&subs
->dev
->dev
,
411 "Cannot change Power Domain ID: %d to state: %d. Err: %d\n",
412 subs
->str_pd
->pd_id
, state
, ret
);
419 int snd_usb_pcm_suspend(struct snd_usb_stream
*as
)
423 ret
= snd_usb_pcm_change_state(&as
->substream
[0], UAC3_PD_STATE_D2
);
427 ret
= snd_usb_pcm_change_state(&as
->substream
[1], UAC3_PD_STATE_D2
);
434 int snd_usb_pcm_resume(struct snd_usb_stream
*as
)
438 ret
= snd_usb_pcm_change_state(&as
->substream
[0], UAC3_PD_STATE_D1
);
442 ret
= snd_usb_pcm_change_state(&as
->substream
[1], UAC3_PD_STATE_D1
);
449 static void close_endpoints(struct snd_usb_audio
*chip
,
450 struct snd_usb_substream
*subs
)
452 if (subs
->data_endpoint
) {
453 snd_usb_endpoint_set_sync(chip
, subs
->data_endpoint
, NULL
);
454 snd_usb_endpoint_close(chip
, subs
->data_endpoint
);
455 subs
->data_endpoint
= NULL
;
458 if (subs
->sync_endpoint
) {
459 snd_usb_endpoint_close(chip
, subs
->sync_endpoint
);
460 subs
->sync_endpoint
= NULL
;
467 * allocate a buffer and set the given audio format.
469 * so far we use a physically linear buffer although packetize transfer
470 * doesn't need a continuous area.
471 * if sg buffer is supported on the later version of alsa, we'll follow
474 static int snd_usb_hw_params(struct snd_pcm_substream
*substream
,
475 struct snd_pcm_hw_params
*hw_params
)
477 struct snd_usb_substream
*subs
= substream
->runtime
->private_data
;
478 struct snd_usb_audio
*chip
= subs
->stream
->chip
;
479 const struct audioformat
*fmt
;
480 const struct audioformat
*sync_fmt
;
481 bool fixed_rate
, sync_fixed_rate
;
484 ret
= snd_media_start_pipeline(subs
);
488 fixed_rate
= snd_usb_pcm_has_fixed_rate(subs
);
489 fmt
= find_substream_format(subs
, hw_params
);
492 "cannot find format: format=%s, rate=%d, channels=%d\n",
493 snd_pcm_format_name(params_format(hw_params
)),
494 params_rate(hw_params
), params_channels(hw_params
));
499 if (fmt
->implicit_fb
) {
500 sync_fmt
= snd_usb_find_implicit_fb_sync_format(chip
, fmt
,
506 "cannot find sync format: ep=0x%x, iface=%d:%d, format=%s, rate=%d, channels=%d\n",
507 fmt
->sync_ep
, fmt
->sync_iface
,
508 fmt
->sync_altsetting
,
509 snd_pcm_format_name(params_format(hw_params
)),
510 params_rate(hw_params
), params_channels(hw_params
));
516 sync_fixed_rate
= fixed_rate
;
519 ret
= snd_usb_lock_shutdown(chip
);
523 ret
= snd_usb_pcm_change_state(subs
, UAC3_PD_STATE_D0
);
527 if (subs
->data_endpoint
) {
528 if (snd_usb_endpoint_compatible(chip
, subs
->data_endpoint
,
531 if (stop_endpoints(subs
, false))
532 sync_pending_stops(subs
);
533 close_endpoints(chip
, subs
);
536 subs
->data_endpoint
= snd_usb_endpoint_open(chip
, fmt
, hw_params
, false, fixed_rate
);
537 if (!subs
->data_endpoint
) {
543 subs
->sync_endpoint
= snd_usb_endpoint_open(chip
, sync_fmt
,
547 if (!subs
->sync_endpoint
) {
552 snd_usb_endpoint_set_sync(chip
, subs
->data_endpoint
,
553 subs
->sync_endpoint
);
556 mutex_lock(&chip
->mutex
);
557 subs
->cur_audiofmt
= fmt
;
558 mutex_unlock(&chip
->mutex
);
560 if (!subs
->data_endpoint
->need_setup
)
563 if (subs
->sync_endpoint
) {
564 ret
= snd_usb_endpoint_set_params(chip
, subs
->sync_endpoint
);
569 ret
= snd_usb_endpoint_set_params(chip
, subs
->data_endpoint
);
573 close_endpoints(chip
, subs
);
575 snd_usb_unlock_shutdown(chip
);
578 snd_media_stop_pipeline(subs
);
586 * reset the audio format and release the buffer
588 static int snd_usb_hw_free(struct snd_pcm_substream
*substream
)
590 struct snd_usb_substream
*subs
= substream
->runtime
->private_data
;
591 struct snd_usb_audio
*chip
= subs
->stream
->chip
;
593 snd_media_stop_pipeline(subs
);
594 mutex_lock(&chip
->mutex
);
595 subs
->cur_audiofmt
= NULL
;
596 mutex_unlock(&chip
->mutex
);
597 if (!snd_usb_lock_shutdown(chip
)) {
598 if (stop_endpoints(subs
, false))
599 sync_pending_stops(subs
);
600 close_endpoints(chip
, subs
);
601 snd_usb_unlock_shutdown(chip
);
607 /* free-wheeling mode? (e.g. dmix) */
608 static int in_free_wheeling_mode(struct snd_pcm_runtime
*runtime
)
610 return runtime
->stop_threshold
> runtime
->buffer_size
;
613 /* check whether early start is needed for playback stream */
614 static int lowlatency_playback_available(struct snd_pcm_runtime
*runtime
,
615 struct snd_usb_substream
*subs
)
617 struct snd_usb_audio
*chip
= subs
->stream
->chip
;
619 if (subs
->direction
== SNDRV_PCM_STREAM_CAPTURE
)
621 /* disabled via module option? */
622 if (!chip
->lowlatency
)
624 if (in_free_wheeling_mode(runtime
))
626 /* implicit feedback mode has own operation mode */
627 if (snd_usb_endpoint_implicit_feedback_sink(subs
->data_endpoint
))
635 * only a few subtle things...
637 static int snd_usb_pcm_prepare(struct snd_pcm_substream
*substream
)
639 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
640 struct snd_usb_substream
*subs
= runtime
->private_data
;
641 struct snd_usb_audio
*chip
= subs
->stream
->chip
;
645 ret
= snd_usb_lock_shutdown(chip
);
648 if (snd_BUG_ON(!subs
->data_endpoint
)) {
653 ret
= snd_usb_pcm_change_state(subs
, UAC3_PD_STATE_D0
);
658 if (subs
->sync_endpoint
) {
659 ret
= snd_usb_endpoint_prepare(chip
, subs
->sync_endpoint
);
664 ret
= snd_usb_endpoint_prepare(chip
, subs
->data_endpoint
);
668 snd_usb_set_format_quirk(subs
, subs
->cur_audiofmt
);
671 /* reset the pointer */
672 subs
->buffer_bytes
= frames_to_bytes(runtime
, runtime
->buffer_size
);
673 subs
->inflight_bytes
= 0;
674 subs
->hwptr_done
= 0;
675 subs
->transfer_done
= 0;
676 subs
->last_frame_number
= 0;
677 subs
->period_elapsed_pending
= 0;
680 subs
->lowlatency_playback
= lowlatency_playback_available(runtime
, subs
);
681 if (substream
->stream
== SNDRV_PCM_STREAM_PLAYBACK
&&
682 !subs
->lowlatency_playback
) {
683 ret
= start_endpoints(subs
);
684 /* if XRUN happens at starting streams (possibly with implicit
685 * fb case), restart again, but only try once.
687 if (ret
== -EPIPE
&& !retry
++) {
688 sync_pending_stops(subs
);
693 snd_usb_unlock_shutdown(chip
);
701 #ifdef HW_CONST_DEBUG
702 #define hwc_debug(fmt, args...) pr_debug(fmt, ##args)
704 #define hwc_debug(fmt, args...) do { } while(0)
707 static const struct snd_pcm_hardware snd_usb_hardware
=
709 .info
= SNDRV_PCM_INFO_MMAP
|
710 SNDRV_PCM_INFO_MMAP_VALID
|
711 SNDRV_PCM_INFO_BATCH
|
712 SNDRV_PCM_INFO_INTERLEAVED
|
713 SNDRV_PCM_INFO_BLOCK_TRANSFER
|
714 SNDRV_PCM_INFO_PAUSE
,
717 .buffer_bytes_max
= INT_MAX
, /* limited by BUFFER_TIME later */
718 .period_bytes_min
= 64,
719 .period_bytes_max
= INT_MAX
, /* limited by PERIOD_TIME later */
724 static int hw_check_valid_format(struct snd_usb_substream
*subs
,
725 struct snd_pcm_hw_params
*params
,
726 const struct audioformat
*fp
)
728 struct snd_interval
*it
= hw_param_interval(params
, SNDRV_PCM_HW_PARAM_RATE
);
729 struct snd_interval
*ct
= hw_param_interval(params
, SNDRV_PCM_HW_PARAM_CHANNELS
);
730 struct snd_mask
*fmts
= hw_param_mask(params
, SNDRV_PCM_HW_PARAM_FORMAT
);
731 struct snd_interval
*pt
= hw_param_interval(params
, SNDRV_PCM_HW_PARAM_PERIOD_TIME
);
732 struct snd_mask check_fmts
;
735 /* check the format */
736 snd_mask_none(&check_fmts
);
737 check_fmts
.bits
[0] = (u32
)fp
->formats
;
738 check_fmts
.bits
[1] = (u32
)(fp
->formats
>> 32);
739 snd_mask_intersect(&check_fmts
, fmts
);
740 if (snd_mask_empty(&check_fmts
)) {
741 hwc_debug(" > check: no supported format 0x%llx\n", fp
->formats
);
744 /* check the channels */
745 if (fp
->channels
< ct
->min
|| fp
->channels
> ct
->max
) {
746 hwc_debug(" > check: no valid channels %d (%d/%d)\n", fp
->channels
, ct
->min
, ct
->max
);
749 /* check the rate is within the range */
750 if (fp
->rate_min
> it
->max
|| (fp
->rate_min
== it
->max
&& it
->openmax
)) {
751 hwc_debug(" > check: rate_min %d > max %d\n", fp
->rate_min
, it
->max
);
754 if (fp
->rate_max
< it
->min
|| (fp
->rate_max
== it
->min
&& it
->openmin
)) {
755 hwc_debug(" > check: rate_max %d < min %d\n", fp
->rate_max
, it
->min
);
758 /* check whether the period time is >= the data packet interval */
759 if (subs
->speed
!= USB_SPEED_FULL
) {
760 ptime
= 125 * (1 << fp
->datainterval
);
761 if (ptime
> pt
->max
|| (ptime
== pt
->max
&& pt
->openmax
)) {
762 hwc_debug(" > check: ptime %u > max %u\n", ptime
, pt
->max
);
769 static int apply_hw_params_minmax(struct snd_interval
*it
, unsigned int rmin
,
775 hwc_debug(" --> get empty\n");
781 if (it
->min
< rmin
) {
786 if (it
->max
> rmax
) {
791 if (snd_interval_checkempty(it
)) {
795 hwc_debug(" --> (%d, %d) (changed = %d)\n", it
->min
, it
->max
, changed
);
799 /* get the specified endpoint object that is being used by other streams
800 * (i.e. the parameter is locked)
802 static const struct snd_usb_endpoint
*
803 get_endpoint_in_use(struct snd_usb_audio
*chip
, int endpoint
,
804 const struct snd_usb_endpoint
*ref_ep
)
806 const struct snd_usb_endpoint
*ep
;
808 ep
= snd_usb_get_endpoint(chip
, endpoint
);
809 if (ep
&& ep
->cur_audiofmt
&& (ep
!= ref_ep
|| ep
->opened
> 1))
814 static int hw_rule_rate(struct snd_pcm_hw_params
*params
,
815 struct snd_pcm_hw_rule
*rule
)
817 struct snd_usb_substream
*subs
= rule
->private;
818 struct snd_usb_audio
*chip
= subs
->stream
->chip
;
819 const struct snd_usb_endpoint
*ep
;
820 const struct audioformat
*fp
;
821 struct snd_interval
*it
= hw_param_interval(params
, SNDRV_PCM_HW_PARAM_RATE
);
822 unsigned int rmin
, rmax
, r
;
825 hwc_debug("hw_rule_rate: (%d,%d)\n", it
->min
, it
->max
);
828 list_for_each_entry(fp
, &subs
->fmt_list
, list
) {
829 if (!hw_check_valid_format(subs
, params
, fp
))
832 ep
= get_endpoint_in_use(chip
, fp
->endpoint
,
833 subs
->data_endpoint
);
835 hwc_debug("rate limit %d for ep#%x\n",
836 ep
->cur_rate
, fp
->endpoint
);
837 rmin
= min(rmin
, ep
->cur_rate
);
838 rmax
= max(rmax
, ep
->cur_rate
);
842 if (fp
->implicit_fb
) {
843 ep
= get_endpoint_in_use(chip
, fp
->sync_ep
,
844 subs
->sync_endpoint
);
846 hwc_debug("rate limit %d for sync_ep#%x\n",
847 ep
->cur_rate
, fp
->sync_ep
);
848 rmin
= min(rmin
, ep
->cur_rate
);
849 rmax
= max(rmax
, ep
->cur_rate
);
854 r
= snd_usb_endpoint_get_clock_rate(chip
, fp
->clock
);
856 if (!snd_interval_test(it
, r
))
862 if (fp
->rate_table
&& fp
->nr_rates
) {
863 for (i
= 0; i
< fp
->nr_rates
; i
++) {
864 r
= fp
->rate_table
[i
];
865 if (!snd_interval_test(it
, r
))
871 rmin
= min(rmin
, fp
->rate_min
);
872 rmax
= max(rmax
, fp
->rate_max
);
876 return apply_hw_params_minmax(it
, rmin
, rmax
);
880 static int hw_rule_channels(struct snd_pcm_hw_params
*params
,
881 struct snd_pcm_hw_rule
*rule
)
883 struct snd_usb_substream
*subs
= rule
->private;
884 const struct audioformat
*fp
;
885 struct snd_interval
*it
= hw_param_interval(params
, SNDRV_PCM_HW_PARAM_CHANNELS
);
886 unsigned int rmin
, rmax
;
888 hwc_debug("hw_rule_channels: (%d,%d)\n", it
->min
, it
->max
);
891 list_for_each_entry(fp
, &subs
->fmt_list
, list
) {
892 if (!hw_check_valid_format(subs
, params
, fp
))
894 rmin
= min(rmin
, fp
->channels
);
895 rmax
= max(rmax
, fp
->channels
);
898 return apply_hw_params_minmax(it
, rmin
, rmax
);
901 static int apply_hw_params_format_bits(struct snd_mask
*fmt
, u64 fbits
)
906 oldbits
[0] = fmt
->bits
[0];
907 oldbits
[1] = fmt
->bits
[1];
908 fmt
->bits
[0] &= (u32
)fbits
;
909 fmt
->bits
[1] &= (u32
)(fbits
>> 32);
910 if (!fmt
->bits
[0] && !fmt
->bits
[1]) {
911 hwc_debug(" --> get empty\n");
914 changed
= (oldbits
[0] != fmt
->bits
[0] || oldbits
[1] != fmt
->bits
[1]);
915 hwc_debug(" --> %x:%x (changed = %d)\n", fmt
->bits
[0], fmt
->bits
[1], changed
);
919 static int hw_rule_format(struct snd_pcm_hw_params
*params
,
920 struct snd_pcm_hw_rule
*rule
)
922 struct snd_usb_substream
*subs
= rule
->private;
923 struct snd_usb_audio
*chip
= subs
->stream
->chip
;
924 const struct snd_usb_endpoint
*ep
;
925 const struct audioformat
*fp
;
926 struct snd_mask
*fmt
= hw_param_mask(params
, SNDRV_PCM_HW_PARAM_FORMAT
);
929 hwc_debug("hw_rule_format: %x:%x\n", fmt
->bits
[0], fmt
->bits
[1]);
931 list_for_each_entry(fp
, &subs
->fmt_list
, list
) {
932 if (!hw_check_valid_format(subs
, params
, fp
))
935 ep
= get_endpoint_in_use(chip
, fp
->endpoint
,
936 subs
->data_endpoint
);
938 hwc_debug("format limit %d for ep#%x\n",
939 ep
->cur_format
, fp
->endpoint
);
940 fbits
|= pcm_format_to_bits(ep
->cur_format
);
944 if (fp
->implicit_fb
) {
945 ep
= get_endpoint_in_use(chip
, fp
->sync_ep
,
946 subs
->sync_endpoint
);
948 hwc_debug("format limit %d for sync_ep#%x\n",
949 ep
->cur_format
, fp
->sync_ep
);
950 fbits
|= pcm_format_to_bits(ep
->cur_format
);
955 fbits
|= fp
->formats
;
957 return apply_hw_params_format_bits(fmt
, fbits
);
960 static int hw_rule_period_time(struct snd_pcm_hw_params
*params
,
961 struct snd_pcm_hw_rule
*rule
)
963 struct snd_usb_substream
*subs
= rule
->private;
964 const struct audioformat
*fp
;
965 struct snd_interval
*it
;
966 unsigned char min_datainterval
;
969 it
= hw_param_interval(params
, SNDRV_PCM_HW_PARAM_PERIOD_TIME
);
970 hwc_debug("hw_rule_period_time: (%u,%u)\n", it
->min
, it
->max
);
971 min_datainterval
= 0xff;
972 list_for_each_entry(fp
, &subs
->fmt_list
, list
) {
973 if (!hw_check_valid_format(subs
, params
, fp
))
975 min_datainterval
= min(min_datainterval
, fp
->datainterval
);
977 if (min_datainterval
== 0xff) {
978 hwc_debug(" --> get empty\n");
982 pmin
= 125 * (1 << min_datainterval
);
984 return apply_hw_params_minmax(it
, pmin
, UINT_MAX
);
987 /* additional hw constraints for implicit feedback mode */
988 static int hw_rule_period_size_implicit_fb(struct snd_pcm_hw_params
*params
,
989 struct snd_pcm_hw_rule
*rule
)
991 struct snd_usb_substream
*subs
= rule
->private;
992 struct snd_usb_audio
*chip
= subs
->stream
->chip
;
993 const struct audioformat
*fp
;
994 const struct snd_usb_endpoint
*ep
;
995 struct snd_interval
*it
;
996 unsigned int rmin
, rmax
;
998 it
= hw_param_interval(params
, SNDRV_PCM_HW_PARAM_PERIOD_SIZE
);
999 hwc_debug("hw_rule_period_size: (%u,%u)\n", it
->min
, it
->max
);
1002 list_for_each_entry(fp
, &subs
->fmt_list
, list
) {
1003 if (!hw_check_valid_format(subs
, params
, fp
))
1005 ep
= get_endpoint_in_use(chip
, fp
->endpoint
,
1006 subs
->data_endpoint
);
1008 hwc_debug("period size limit %d for ep#%x\n",
1009 ep
->cur_period_frames
, fp
->endpoint
);
1010 rmin
= min(rmin
, ep
->cur_period_frames
);
1011 rmax
= max(rmax
, ep
->cur_period_frames
);
1015 if (fp
->implicit_fb
) {
1016 ep
= get_endpoint_in_use(chip
, fp
->sync_ep
,
1017 subs
->sync_endpoint
);
1019 hwc_debug("period size limit %d for sync_ep#%x\n",
1020 ep
->cur_period_frames
, fp
->sync_ep
);
1021 rmin
= min(rmin
, ep
->cur_period_frames
);
1022 rmax
= max(rmax
, ep
->cur_period_frames
);
1029 return 0; /* no limit by implicit fb */
1030 return apply_hw_params_minmax(it
, rmin
, rmax
);
1033 static int hw_rule_periods_implicit_fb(struct snd_pcm_hw_params
*params
,
1034 struct snd_pcm_hw_rule
*rule
)
1036 struct snd_usb_substream
*subs
= rule
->private;
1037 struct snd_usb_audio
*chip
= subs
->stream
->chip
;
1038 const struct audioformat
*fp
;
1039 const struct snd_usb_endpoint
*ep
;
1040 struct snd_interval
*it
;
1041 unsigned int rmin
, rmax
;
1043 it
= hw_param_interval(params
, SNDRV_PCM_HW_PARAM_PERIODS
);
1044 hwc_debug("hw_rule_periods: (%u,%u)\n", it
->min
, it
->max
);
1047 list_for_each_entry(fp
, &subs
->fmt_list
, list
) {
1048 if (!hw_check_valid_format(subs
, params
, fp
))
1050 ep
= get_endpoint_in_use(chip
, fp
->endpoint
,
1051 subs
->data_endpoint
);
1053 hwc_debug("periods limit %d for ep#%x\n",
1054 ep
->cur_buffer_periods
, fp
->endpoint
);
1055 rmin
= min(rmin
, ep
->cur_buffer_periods
);
1056 rmax
= max(rmax
, ep
->cur_buffer_periods
);
1060 if (fp
->implicit_fb
) {
1061 ep
= get_endpoint_in_use(chip
, fp
->sync_ep
,
1062 subs
->sync_endpoint
);
1064 hwc_debug("periods limit %d for sync_ep#%x\n",
1065 ep
->cur_buffer_periods
, fp
->sync_ep
);
1066 rmin
= min(rmin
, ep
->cur_buffer_periods
);
1067 rmax
= max(rmax
, ep
->cur_buffer_periods
);
1074 return 0; /* no limit by implicit fb */
1075 return apply_hw_params_minmax(it
, rmin
, rmax
);
1079 * set up the runtime hardware information.
1082 static int setup_hw_info(struct snd_pcm_runtime
*runtime
, struct snd_usb_substream
*subs
)
1084 const struct audioformat
*fp
;
1085 unsigned int pt
, ptmin
;
1086 int param_period_time_if_needed
= -1;
1089 runtime
->hw
.formats
= subs
->formats
;
1091 runtime
->hw
.rate_min
= 0x7fffffff;
1092 runtime
->hw
.rate_max
= 0;
1093 runtime
->hw
.channels_min
= 256;
1094 runtime
->hw
.channels_max
= 0;
1095 runtime
->hw
.rates
= 0;
1097 /* check min/max rates and channels */
1098 list_for_each_entry(fp
, &subs
->fmt_list
, list
) {
1099 runtime
->hw
.rates
|= fp
->rates
;
1100 if (runtime
->hw
.rate_min
> fp
->rate_min
)
1101 runtime
->hw
.rate_min
= fp
->rate_min
;
1102 if (runtime
->hw
.rate_max
< fp
->rate_max
)
1103 runtime
->hw
.rate_max
= fp
->rate_max
;
1104 if (runtime
->hw
.channels_min
> fp
->channels
)
1105 runtime
->hw
.channels_min
= fp
->channels
;
1106 if (runtime
->hw
.channels_max
< fp
->channels
)
1107 runtime
->hw
.channels_max
= fp
->channels
;
1108 if (fp
->fmt_type
== UAC_FORMAT_TYPE_II
&& fp
->frame_size
> 0) {
1109 /* FIXME: there might be more than one audio formats... */
1110 runtime
->hw
.period_bytes_min
= runtime
->hw
.period_bytes_max
=
1113 pt
= 125 * (1 << fp
->datainterval
);
1114 ptmin
= min(ptmin
, pt
);
1117 param_period_time_if_needed
= SNDRV_PCM_HW_PARAM_PERIOD_TIME
;
1118 if (subs
->speed
== USB_SPEED_FULL
)
1119 /* full speed devices have fixed data packet interval */
1122 /* if period time doesn't go below 1 ms, no rules needed */
1123 param_period_time_if_needed
= -1;
1125 err
= snd_pcm_hw_constraint_minmax(runtime
,
1126 SNDRV_PCM_HW_PARAM_PERIOD_TIME
,
1131 err
= snd_pcm_hw_rule_add(runtime
, 0, SNDRV_PCM_HW_PARAM_RATE
,
1133 SNDRV_PCM_HW_PARAM_RATE
,
1134 SNDRV_PCM_HW_PARAM_FORMAT
,
1135 SNDRV_PCM_HW_PARAM_CHANNELS
,
1136 param_period_time_if_needed
,
1141 err
= snd_pcm_hw_rule_add(runtime
, 0, SNDRV_PCM_HW_PARAM_CHANNELS
,
1142 hw_rule_channels
, subs
,
1143 SNDRV_PCM_HW_PARAM_CHANNELS
,
1144 SNDRV_PCM_HW_PARAM_FORMAT
,
1145 SNDRV_PCM_HW_PARAM_RATE
,
1146 param_period_time_if_needed
,
1150 err
= snd_pcm_hw_rule_add(runtime
, 0, SNDRV_PCM_HW_PARAM_FORMAT
,
1151 hw_rule_format
, subs
,
1152 SNDRV_PCM_HW_PARAM_FORMAT
,
1153 SNDRV_PCM_HW_PARAM_RATE
,
1154 SNDRV_PCM_HW_PARAM_CHANNELS
,
1155 param_period_time_if_needed
,
1159 if (param_period_time_if_needed
>= 0) {
1160 err
= snd_pcm_hw_rule_add(runtime
, 0,
1161 SNDRV_PCM_HW_PARAM_PERIOD_TIME
,
1162 hw_rule_period_time
, subs
,
1163 SNDRV_PCM_HW_PARAM_FORMAT
,
1164 SNDRV_PCM_HW_PARAM_CHANNELS
,
1165 SNDRV_PCM_HW_PARAM_RATE
,
1171 /* set max period and buffer sizes for 1 and 2 seconds, respectively */
1172 err
= snd_pcm_hw_constraint_minmax(runtime
,
1173 SNDRV_PCM_HW_PARAM_PERIOD_TIME
,
1177 err
= snd_pcm_hw_constraint_minmax(runtime
,
1178 SNDRV_PCM_HW_PARAM_BUFFER_TIME
,
1183 /* additional hw constraints for implicit fb */
1184 err
= snd_pcm_hw_rule_add(runtime
, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE
,
1185 hw_rule_period_size_implicit_fb
, subs
,
1186 SNDRV_PCM_HW_PARAM_PERIOD_SIZE
, -1);
1189 err
= snd_pcm_hw_rule_add(runtime
, 0, SNDRV_PCM_HW_PARAM_PERIODS
,
1190 hw_rule_periods_implicit_fb
, subs
,
1191 SNDRV_PCM_HW_PARAM_PERIODS
, -1);
1195 list_for_each_entry(fp
, &subs
->fmt_list
, list
) {
1196 if (fp
->implicit_fb
) {
1197 runtime
->hw
.info
|= SNDRV_PCM_INFO_JOINT_DUPLEX
;
1205 static int snd_usb_pcm_open(struct snd_pcm_substream
*substream
)
1207 int direction
= substream
->stream
;
1208 struct snd_usb_stream
*as
= snd_pcm_substream_chip(substream
);
1209 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
1210 struct snd_usb_substream
*subs
= &as
->substream
[direction
];
1213 runtime
->hw
= snd_usb_hardware
;
1214 /* need an explicit sync to catch applptr update in low-latency mode */
1215 if (direction
== SNDRV_PCM_STREAM_PLAYBACK
&&
1216 as
->chip
->lowlatency
)
1217 runtime
->hw
.info
|= SNDRV_PCM_INFO_SYNC_APPLPTR
;
1218 runtime
->private_data
= subs
;
1219 subs
->pcm_substream
= substream
;
1220 /* runtime PM is also done there */
1222 /* initialize DSD/DOP context */
1223 subs
->dsd_dop
.byte_idx
= 0;
1224 subs
->dsd_dop
.channel
= 0;
1225 subs
->dsd_dop
.marker
= 1;
1227 ret
= setup_hw_info(runtime
, subs
);
1230 ret
= snd_usb_autoresume(subs
->stream
->chip
);
1233 ret
= snd_media_stream_init(subs
, as
->pcm
, direction
);
1235 snd_usb_autosuspend(subs
->stream
->chip
);
1239 static int snd_usb_pcm_close(struct snd_pcm_substream
*substream
)
1241 int direction
= substream
->stream
;
1242 struct snd_usb_stream
*as
= snd_pcm_substream_chip(substream
);
1243 struct snd_usb_substream
*subs
= &as
->substream
[direction
];
1246 snd_media_stop_pipeline(subs
);
1248 if (!snd_usb_lock_shutdown(subs
->stream
->chip
)) {
1249 ret
= snd_usb_pcm_change_state(subs
, UAC3_PD_STATE_D1
);
1250 snd_usb_unlock_shutdown(subs
->stream
->chip
);
1255 subs
->pcm_substream
= NULL
;
1256 snd_usb_autosuspend(subs
->stream
->chip
);
1261 /* Since a URB can handle only a single linear buffer, we must use double
1262 * buffering when the data to be transferred overflows the buffer boundary.
1263 * To avoid inconsistencies when updating hwptr_done, we use double buffering
1266 static void retire_capture_urb(struct snd_usb_substream
*subs
,
1269 struct snd_pcm_runtime
*runtime
= subs
->pcm_substream
->runtime
;
1270 unsigned int stride
, frames
, bytes
, oldptr
;
1271 int i
, period_elapsed
= 0;
1272 unsigned long flags
;
1274 int current_frame_number
;
1276 /* read frame number here, update pointer in critical section */
1277 current_frame_number
= usb_get_current_frame_number(subs
->dev
);
1279 stride
= runtime
->frame_bits
>> 3;
1281 for (i
= 0; i
< urb
->number_of_packets
; i
++) {
1282 cp
= (unsigned char *)urb
->transfer_buffer
+ urb
->iso_frame_desc
[i
].offset
+ subs
->pkt_offset_adj
;
1283 if (urb
->iso_frame_desc
[i
].status
&& printk_ratelimit()) {
1284 dev_dbg(&subs
->dev
->dev
, "frame %d active: %d\n",
1285 i
, urb
->iso_frame_desc
[i
].status
);
1288 bytes
= urb
->iso_frame_desc
[i
].actual_length
;
1289 if (subs
->stream_offset_adj
> 0) {
1290 unsigned int adj
= min(subs
->stream_offset_adj
, bytes
);
1293 subs
->stream_offset_adj
-= adj
;
1295 frames
= bytes
/ stride
;
1296 if (!subs
->txfr_quirk
)
1297 bytes
= frames
* stride
;
1298 if (bytes
% (runtime
->sample_bits
>> 3) != 0) {
1299 int oldbytes
= bytes
;
1300 bytes
= frames
* stride
;
1301 dev_warn_ratelimited(&subs
->dev
->dev
,
1302 "Corrected urb data len. %d->%d\n",
1305 /* update the current pointer */
1306 spin_lock_irqsave(&subs
->lock
, flags
);
1307 oldptr
= subs
->hwptr_done
;
1308 subs
->hwptr_done
+= bytes
;
1309 if (subs
->hwptr_done
>= subs
->buffer_bytes
)
1310 subs
->hwptr_done
-= subs
->buffer_bytes
;
1311 frames
= (bytes
+ (oldptr
% stride
)) / stride
;
1312 subs
->transfer_done
+= frames
;
1313 if (subs
->transfer_done
>= runtime
->period_size
) {
1314 subs
->transfer_done
-= runtime
->period_size
;
1318 /* realign last_frame_number */
1319 subs
->last_frame_number
= current_frame_number
;
1321 spin_unlock_irqrestore(&subs
->lock
, flags
);
1322 /* copy a data chunk */
1323 if (oldptr
+ bytes
> subs
->buffer_bytes
) {
1324 unsigned int bytes1
= subs
->buffer_bytes
- oldptr
;
1326 memcpy(runtime
->dma_area
+ oldptr
, cp
, bytes1
);
1327 memcpy(runtime
->dma_area
, cp
+ bytes1
, bytes
- bytes1
);
1329 memcpy(runtime
->dma_area
+ oldptr
, cp
, bytes
);
1334 snd_pcm_period_elapsed(subs
->pcm_substream
);
1337 static void urb_ctx_queue_advance(struct snd_usb_substream
*subs
,
1338 struct urb
*urb
, unsigned int bytes
)
1340 struct snd_urb_ctx
*ctx
= urb
->context
;
1342 ctx
->queued
+= bytes
;
1343 subs
->inflight_bytes
+= bytes
;
1344 subs
->hwptr_done
+= bytes
;
1345 if (subs
->hwptr_done
>= subs
->buffer_bytes
)
1346 subs
->hwptr_done
-= subs
->buffer_bytes
;
1349 static inline void fill_playback_urb_dsd_dop(struct snd_usb_substream
*subs
,
1350 struct urb
*urb
, unsigned int bytes
)
1352 struct snd_pcm_runtime
*runtime
= subs
->pcm_substream
->runtime
;
1353 unsigned int dst_idx
= 0;
1354 unsigned int src_idx
= subs
->hwptr_done
;
1355 unsigned int wrap
= subs
->buffer_bytes
;
1356 u8
*dst
= urb
->transfer_buffer
;
1357 u8
*src
= runtime
->dma_area
;
1358 static const u8 marker
[] = { 0x05, 0xfa };
1359 unsigned int queued
= 0;
1362 * The DSP DOP format defines a way to transport DSD samples over
1363 * normal PCM data endpoints. It requires stuffing of marker bytes
1364 * (0x05 and 0xfa, alternating per sample frame), and then expects
1365 * 2 additional bytes of actual payload. The whole frame is stored
1368 * Hence, for a stereo transport, the buffer layout looks like this,
1369 * where L refers to left channel samples and R to right.
1371 * L1 L2 0x05 R1 R2 0x05 L3 L4 0xfa R3 R4 0xfa
1372 * L5 L6 0x05 R5 R6 0x05 L7 L8 0xfa R7 R8 0xfa
1378 if (++subs
->dsd_dop
.byte_idx
== 3) {
1379 /* frame boundary? */
1380 dst
[dst_idx
++] = marker
[subs
->dsd_dop
.marker
];
1382 subs
->dsd_dop
.byte_idx
= 0;
1384 if (++subs
->dsd_dop
.channel
% runtime
->channels
== 0) {
1385 /* alternate the marker */
1386 subs
->dsd_dop
.marker
++;
1387 subs
->dsd_dop
.marker
%= ARRAY_SIZE(marker
);
1388 subs
->dsd_dop
.channel
= 0;
1391 /* stuff the DSD payload */
1392 int idx
= (src_idx
+ subs
->dsd_dop
.byte_idx
- 1) % wrap
;
1394 if (subs
->cur_audiofmt
->dsd_bitrev
)
1395 dst
[dst_idx
++] = bitrev8(src
[idx
]);
1397 dst
[dst_idx
++] = src
[idx
];
1402 urb_ctx_queue_advance(subs
, urb
, queued
);
1405 /* copy bit-reversed bytes onto transfer buffer */
1406 static void fill_playback_urb_dsd_bitrev(struct snd_usb_substream
*subs
,
1407 struct urb
*urb
, unsigned int bytes
)
1409 struct snd_pcm_runtime
*runtime
= subs
->pcm_substream
->runtime
;
1410 const u8
*src
= runtime
->dma_area
;
1411 u8
*buf
= urb
->transfer_buffer
;
1412 int i
, ofs
= subs
->hwptr_done
;
1414 for (i
= 0; i
< bytes
; i
++) {
1415 *buf
++ = bitrev8(src
[ofs
]);
1416 if (++ofs
>= subs
->buffer_bytes
)
1420 urb_ctx_queue_advance(subs
, urb
, bytes
);
1423 static void copy_to_urb(struct snd_usb_substream
*subs
, struct urb
*urb
,
1424 int offset
, int stride
, unsigned int bytes
)
1426 struct snd_pcm_runtime
*runtime
= subs
->pcm_substream
->runtime
;
1428 if (subs
->hwptr_done
+ bytes
> subs
->buffer_bytes
) {
1429 /* err, the transferred area goes over buffer boundary. */
1430 unsigned int bytes1
= subs
->buffer_bytes
- subs
->hwptr_done
;
1432 memcpy(urb
->transfer_buffer
+ offset
,
1433 runtime
->dma_area
+ subs
->hwptr_done
, bytes1
);
1434 memcpy(urb
->transfer_buffer
+ offset
+ bytes1
,
1435 runtime
->dma_area
, bytes
- bytes1
);
1437 memcpy(urb
->transfer_buffer
+ offset
,
1438 runtime
->dma_area
+ subs
->hwptr_done
, bytes
);
1441 urb_ctx_queue_advance(subs
, urb
, bytes
);
1444 static unsigned int copy_to_urb_quirk(struct snd_usb_substream
*subs
,
1445 struct urb
*urb
, int stride
,
1448 __le32 packet_length
;
1451 /* Put __le32 length descriptor at start of each packet. */
1452 for (i
= 0; i
< urb
->number_of_packets
; i
++) {
1453 unsigned int length
= urb
->iso_frame_desc
[i
].length
;
1454 unsigned int offset
= urb
->iso_frame_desc
[i
].offset
;
1456 packet_length
= cpu_to_le32(length
);
1457 offset
+= i
* sizeof(packet_length
);
1458 urb
->iso_frame_desc
[i
].offset
= offset
;
1459 urb
->iso_frame_desc
[i
].length
+= sizeof(packet_length
);
1460 memcpy(urb
->transfer_buffer
+ offset
,
1461 &packet_length
, sizeof(packet_length
));
1462 copy_to_urb(subs
, urb
, offset
+ sizeof(packet_length
),
1465 /* Adjust transfer size accordingly. */
1466 bytes
+= urb
->number_of_packets
* sizeof(packet_length
);
1470 static int prepare_playback_urb(struct snd_usb_substream
*subs
,
1472 bool in_stream_lock
)
1474 struct snd_pcm_runtime
*runtime
= subs
->pcm_substream
->runtime
;
1475 struct snd_usb_endpoint
*ep
= subs
->data_endpoint
;
1476 struct snd_urb_ctx
*ctx
= urb
->context
;
1477 unsigned int frames
, bytes
;
1479 unsigned int transfer_done
, frame_limit
, avail
= 0;
1480 int i
, stride
, period_elapsed
= 0;
1481 unsigned long flags
;
1484 stride
= ep
->stride
;
1488 urb
->number_of_packets
= 0;
1490 spin_lock_irqsave(&subs
->lock
, flags
);
1491 frame_limit
= subs
->frame_limit
+ ep
->max_urb_frames
;
1492 transfer_done
= subs
->transfer_done
;
1494 if (subs
->lowlatency_playback
&&
1495 runtime
->state
!= SNDRV_PCM_STATE_DRAINING
) {
1496 unsigned int hwptr
= subs
->hwptr_done
/ stride
;
1498 /* calculate the byte offset-in-buffer of the appl_ptr */
1499 avail
= (runtime
->control
->appl_ptr
- runtime
->hw_ptr_base
)
1500 % runtime
->buffer_size
;
1502 avail
+= runtime
->buffer_size
;
1506 for (i
= 0; i
< ctx
->packets
; i
++) {
1507 counts
= snd_usb_endpoint_next_packet_size(ep
, ctx
, i
, avail
);
1510 /* set up descriptor */
1511 urb
->iso_frame_desc
[i
].offset
= frames
* stride
;
1512 urb
->iso_frame_desc
[i
].length
= counts
* stride
;
1515 urb
->number_of_packets
++;
1516 transfer_done
+= counts
;
1517 if (transfer_done
>= runtime
->period_size
) {
1518 transfer_done
-= runtime
->period_size
;
1521 if (subs
->fmt_type
== UAC_FORMAT_TYPE_II
) {
1522 if (transfer_done
> 0) {
1523 /* FIXME: fill-max mode is not
1525 frames
-= transfer_done
;
1526 counts
-= transfer_done
;
1527 urb
->iso_frame_desc
[i
].length
=
1532 if (i
< ctx
->packets
) {
1533 /* add a transfer delimiter */
1534 urb
->iso_frame_desc
[i
].offset
=
1536 urb
->iso_frame_desc
[i
].length
= 0;
1537 urb
->number_of_packets
++;
1542 /* finish at the period boundary or after enough frames */
1543 if ((period_elapsed
|| transfer_done
>= frame_limit
) &&
1544 !snd_usb_endpoint_implicit_feedback_sink(ep
))
1553 bytes
= frames
* stride
;
1554 subs
->transfer_done
= transfer_done
;
1555 subs
->frame_limit
= frame_limit
;
1556 if (unlikely(ep
->cur_format
== SNDRV_PCM_FORMAT_DSD_U16_LE
&&
1557 subs
->cur_audiofmt
->dsd_dop
)) {
1558 fill_playback_urb_dsd_dop(subs
, urb
, bytes
);
1559 } else if (unlikely(ep
->cur_format
== SNDRV_PCM_FORMAT_DSD_U8
&&
1560 subs
->cur_audiofmt
->dsd_bitrev
)) {
1561 fill_playback_urb_dsd_bitrev(subs
, urb
, bytes
);
1564 if (!subs
->tx_length_quirk
)
1565 copy_to_urb(subs
, urb
, 0, stride
, bytes
);
1567 bytes
= copy_to_urb_quirk(subs
, urb
, stride
, bytes
);
1568 /* bytes is now amount of outgoing data */
1571 subs
->last_frame_number
= usb_get_current_frame_number(subs
->dev
);
1573 if (subs
->trigger_tstamp_pending_update
) {
1574 /* this is the first actual URB submitted,
1575 * update trigger timestamp to reflect actual start time
1577 snd_pcm_gettime(runtime
, &runtime
->trigger_tstamp
);
1578 subs
->trigger_tstamp_pending_update
= false;
1581 if (period_elapsed
&& !subs
->running
&& subs
->lowlatency_playback
) {
1582 subs
->period_elapsed_pending
= 1;
1587 spin_unlock_irqrestore(&subs
->lock
, flags
);
1590 urb
->transfer_buffer_length
= bytes
;
1591 if (period_elapsed
) {
1593 snd_pcm_period_elapsed_under_stream_lock(subs
->pcm_substream
);
1595 snd_pcm_period_elapsed(subs
->pcm_substream
);
1601 * process after playback data complete
1602 * - decrease the delay count again
1604 static void retire_playback_urb(struct snd_usb_substream
*subs
,
1607 unsigned long flags
;
1608 struct snd_urb_ctx
*ctx
= urb
->context
;
1609 bool period_elapsed
= false;
1611 spin_lock_irqsave(&subs
->lock
, flags
);
1613 if (subs
->inflight_bytes
>= ctx
->queued
)
1614 subs
->inflight_bytes
-= ctx
->queued
;
1616 subs
->inflight_bytes
= 0;
1619 subs
->last_frame_number
= usb_get_current_frame_number(subs
->dev
);
1620 if (subs
->running
) {
1621 period_elapsed
= subs
->period_elapsed_pending
;
1622 subs
->period_elapsed_pending
= 0;
1624 spin_unlock_irqrestore(&subs
->lock
, flags
);
1626 snd_pcm_period_elapsed(subs
->pcm_substream
);
1629 /* PCM ack callback for the playback stream;
1630 * this plays a role only when the stream is running in low-latency mode.
1632 static int snd_usb_pcm_playback_ack(struct snd_pcm_substream
*substream
)
1634 struct snd_usb_substream
*subs
= substream
->runtime
->private_data
;
1635 struct snd_usb_endpoint
*ep
;
1637 if (!subs
->lowlatency_playback
|| !subs
->running
)
1639 ep
= subs
->data_endpoint
;
1642 /* When no more in-flight URBs available, try to process the pending
1645 if (!ep
->active_mask
)
1646 return snd_usb_queue_pending_output_urbs(ep
, true);
1650 static int snd_usb_substream_playback_trigger(struct snd_pcm_substream
*substream
,
1653 struct snd_usb_substream
*subs
= substream
->runtime
->private_data
;
1657 case SNDRV_PCM_TRIGGER_START
:
1658 subs
->trigger_tstamp_pending_update
= true;
1660 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE
:
1661 snd_usb_endpoint_set_callback(subs
->data_endpoint
,
1662 prepare_playback_urb
,
1663 retire_playback_urb
,
1665 if (subs
->lowlatency_playback
&&
1666 cmd
== SNDRV_PCM_TRIGGER_START
) {
1667 if (in_free_wheeling_mode(substream
->runtime
))
1668 subs
->lowlatency_playback
= false;
1669 err
= start_endpoints(subs
);
1671 snd_usb_endpoint_set_callback(subs
->data_endpoint
,
1677 dev_dbg(&subs
->dev
->dev
, "%d:%d Start Playback PCM\n",
1678 subs
->cur_audiofmt
->iface
,
1679 subs
->cur_audiofmt
->altsetting
);
1681 case SNDRV_PCM_TRIGGER_SUSPEND
:
1682 case SNDRV_PCM_TRIGGER_STOP
:
1683 stop_endpoints(subs
, substream
->runtime
->state
== SNDRV_PCM_STATE_DRAINING
);
1684 snd_usb_endpoint_set_callback(subs
->data_endpoint
,
1687 dev_dbg(&subs
->dev
->dev
, "%d:%d Stop Playback PCM\n",
1688 subs
->cur_audiofmt
->iface
,
1689 subs
->cur_audiofmt
->altsetting
);
1691 case SNDRV_PCM_TRIGGER_PAUSE_PUSH
:
1692 /* keep retire_data_urb for delay calculation */
1693 snd_usb_endpoint_set_callback(subs
->data_endpoint
,
1695 retire_playback_urb
,
1698 dev_dbg(&subs
->dev
->dev
, "%d:%d Pause Playback PCM\n",
1699 subs
->cur_audiofmt
->iface
,
1700 subs
->cur_audiofmt
->altsetting
);
1707 static int snd_usb_substream_capture_trigger(struct snd_pcm_substream
*substream
,
1711 struct snd_usb_substream
*subs
= substream
->runtime
->private_data
;
1714 case SNDRV_PCM_TRIGGER_START
:
1715 err
= start_endpoints(subs
);
1719 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE
:
1720 snd_usb_endpoint_set_callback(subs
->data_endpoint
,
1721 NULL
, retire_capture_urb
,
1723 subs
->last_frame_number
= usb_get_current_frame_number(subs
->dev
);
1725 dev_dbg(&subs
->dev
->dev
, "%d:%d Start Capture PCM\n",
1726 subs
->cur_audiofmt
->iface
,
1727 subs
->cur_audiofmt
->altsetting
);
1729 case SNDRV_PCM_TRIGGER_SUSPEND
:
1730 case SNDRV_PCM_TRIGGER_STOP
:
1731 stop_endpoints(subs
, false);
1733 case SNDRV_PCM_TRIGGER_PAUSE_PUSH
:
1734 snd_usb_endpoint_set_callback(subs
->data_endpoint
,
1737 dev_dbg(&subs
->dev
->dev
, "%d:%d Stop Capture PCM\n",
1738 subs
->cur_audiofmt
->iface
,
1739 subs
->cur_audiofmt
->altsetting
);
1746 static const struct snd_pcm_ops snd_usb_playback_ops
= {
1747 .open
= snd_usb_pcm_open
,
1748 .close
= snd_usb_pcm_close
,
1749 .hw_params
= snd_usb_hw_params
,
1750 .hw_free
= snd_usb_hw_free
,
1751 .prepare
= snd_usb_pcm_prepare
,
1752 .trigger
= snd_usb_substream_playback_trigger
,
1753 .sync_stop
= snd_usb_pcm_sync_stop
,
1754 .pointer
= snd_usb_pcm_pointer
,
1755 .ack
= snd_usb_pcm_playback_ack
,
1758 static const struct snd_pcm_ops snd_usb_capture_ops
= {
1759 .open
= snd_usb_pcm_open
,
1760 .close
= snd_usb_pcm_close
,
1761 .hw_params
= snd_usb_hw_params
,
1762 .hw_free
= snd_usb_hw_free
,
1763 .prepare
= snd_usb_pcm_prepare
,
1764 .trigger
= snd_usb_substream_capture_trigger
,
1765 .sync_stop
= snd_usb_pcm_sync_stop
,
1766 .pointer
= snd_usb_pcm_pointer
,
1769 void snd_usb_set_pcm_ops(struct snd_pcm
*pcm
, int stream
)
1771 const struct snd_pcm_ops
*ops
;
1773 ops
= stream
== SNDRV_PCM_STREAM_PLAYBACK
?
1774 &snd_usb_playback_ops
: &snd_usb_capture_ops
;
1775 snd_pcm_set_ops(pcm
, stream
, ops
);
1778 void snd_usb_preallocate_buffer(struct snd_usb_substream
*subs
)
1780 struct snd_pcm
*pcm
= subs
->stream
->pcm
;
1781 struct snd_pcm_substream
*s
= pcm
->streams
[subs
->direction
].substream
;
1782 struct device
*dev
= subs
->dev
->bus
->sysdev
;
1784 if (snd_usb_use_vmalloc
)
1785 snd_pcm_set_managed_buffer(s
, SNDRV_DMA_TYPE_VMALLOC
,
1788 snd_pcm_set_managed_buffer(s
, SNDRV_DMA_TYPE_DEV_SG
,
1789 dev
, 64*1024, 512*1024);