tools headers UAPI: Sync drm/i915_drm.h with the kernel sources
[linux-2.6-microblaze.git] / sound / usb / pcm.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  */
4
5 #include <linux/init.h>
6 #include <linux/slab.h>
7 #include <linux/bitrev.h>
8 #include <linux/ratelimit.h>
9 #include <linux/usb.h>
10 #include <linux/usb/audio.h>
11 #include <linux/usb/audio-v2.h>
12
13 #include <sound/core.h>
14 #include <sound/pcm.h>
15 #include <sound/pcm_params.h>
16
17 #include "usbaudio.h"
18 #include "card.h"
19 #include "quirks.h"
20 #include "endpoint.h"
21 #include "helper.h"
22 #include "pcm.h"
23 #include "clock.h"
24 #include "power.h"
25 #include "media.h"
26 #include "implicit.h"
27
28 #define SUBSTREAM_FLAG_DATA_EP_STARTED  0
29 #define SUBSTREAM_FLAG_SYNC_EP_STARTED  1
30
31 /* return the estimated delay based on USB frame counters */
32 snd_pcm_uframes_t snd_usb_pcm_delay(struct snd_usb_substream *subs,
33                                     unsigned int rate)
34 {
35         int current_frame_number;
36         int frame_diff;
37         int est_delay;
38
39         if (!subs->last_delay)
40                 return 0; /* short path */
41
42         current_frame_number = usb_get_current_frame_number(subs->dev);
43         /*
44          * HCD implementations use different widths, use lower 8 bits.
45          * The delay will be managed up to 256ms, which is more than
46          * enough
47          */
48         frame_diff = (current_frame_number - subs->last_frame_number) & 0xff;
49
50         /* Approximation based on number of samples per USB frame (ms),
51            some truncation for 44.1 but the estimate is good enough */
52         est_delay =  frame_diff * rate / 1000;
53         if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK)
54                 est_delay = subs->last_delay - est_delay;
55         else
56                 est_delay = subs->last_delay + est_delay;
57
58         if (est_delay < 0)
59                 est_delay = 0;
60         return est_delay;
61 }
62
63 /*
64  * return the current pcm pointer.  just based on the hwptr_done value.
65  */
66 static snd_pcm_uframes_t snd_usb_pcm_pointer(struct snd_pcm_substream *substream)
67 {
68         struct snd_usb_substream *subs = substream->runtime->private_data;
69         unsigned int hwptr_done;
70
71         if (atomic_read(&subs->stream->chip->shutdown))
72                 return SNDRV_PCM_POS_XRUN;
73         spin_lock(&subs->lock);
74         hwptr_done = subs->hwptr_done;
75         substream->runtime->delay = snd_usb_pcm_delay(subs,
76                                                 substream->runtime->rate);
77         spin_unlock(&subs->lock);
78         return hwptr_done / (substream->runtime->frame_bits >> 3);
79 }
80
81 /*
82  * find a matching audio format
83  */
84 static const struct audioformat *
85 find_format(struct list_head *fmt_list_head, snd_pcm_format_t format,
86             unsigned int rate, unsigned int channels, bool strict_match,
87             struct snd_usb_substream *subs)
88 {
89         const struct audioformat *fp;
90         const struct audioformat *found = NULL;
91         int cur_attr = 0, attr;
92
93         list_for_each_entry(fp, fmt_list_head, list) {
94                 if (strict_match) {
95                         if (!(fp->formats & pcm_format_to_bits(format)))
96                                 continue;
97                         if (fp->channels != channels)
98                                 continue;
99                 }
100                 if (rate < fp->rate_min || rate > fp->rate_max)
101                         continue;
102                 if (!(fp->rates & SNDRV_PCM_RATE_CONTINUOUS)) {
103                         unsigned int i;
104                         for (i = 0; i < fp->nr_rates; i++)
105                                 if (fp->rate_table[i] == rate)
106                                         break;
107                         if (i >= fp->nr_rates)
108                                 continue;
109                 }
110                 attr = fp->ep_attr & USB_ENDPOINT_SYNCTYPE;
111                 if (!found) {
112                         found = fp;
113                         cur_attr = attr;
114                         continue;
115                 }
116                 /* avoid async out and adaptive in if the other method
117                  * supports the same format.
118                  * this is a workaround for the case like
119                  * M-audio audiophile USB.
120                  */
121                 if (subs && attr != cur_attr) {
122                         if ((attr == USB_ENDPOINT_SYNC_ASYNC &&
123                              subs->direction == SNDRV_PCM_STREAM_PLAYBACK) ||
124                             (attr == USB_ENDPOINT_SYNC_ADAPTIVE &&
125                              subs->direction == SNDRV_PCM_STREAM_CAPTURE))
126                                 continue;
127                         if ((cur_attr == USB_ENDPOINT_SYNC_ASYNC &&
128                              subs->direction == SNDRV_PCM_STREAM_PLAYBACK) ||
129                             (cur_attr == USB_ENDPOINT_SYNC_ADAPTIVE &&
130                              subs->direction == SNDRV_PCM_STREAM_CAPTURE)) {
131                                 found = fp;
132                                 cur_attr = attr;
133                                 continue;
134                         }
135                 }
136                 /* find the format with the largest max. packet size */
137                 if (fp->maxpacksize > found->maxpacksize) {
138                         found = fp;
139                         cur_attr = attr;
140                 }
141         }
142         return found;
143 }
144
145 static const struct audioformat *
146 find_substream_format(struct snd_usb_substream *subs,
147                       const struct snd_pcm_hw_params *params)
148 {
149         return find_format(&subs->fmt_list, params_format(params),
150                            params_rate(params), params_channels(params),
151                            true, subs);
152 }
153
154 static int init_pitch_v1(struct snd_usb_audio *chip, int ep)
155 {
156         struct usb_device *dev = chip->dev;
157         unsigned char data[1];
158         int err;
159
160         data[0] = 1;
161         err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), UAC_SET_CUR,
162                               USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT,
163                               UAC_EP_CS_ATTR_PITCH_CONTROL << 8, ep,
164                               data, sizeof(data));
165         return err;
166 }
167
168 static int init_pitch_v2(struct snd_usb_audio *chip, int ep)
169 {
170         struct usb_device *dev = chip->dev;
171         unsigned char data[1];
172         int err;
173
174         data[0] = 1;
175         err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), UAC2_CS_CUR,
176                               USB_TYPE_CLASS | USB_RECIP_ENDPOINT | USB_DIR_OUT,
177                               UAC2_EP_CS_PITCH << 8, 0,
178                               data, sizeof(data));
179         return err;
180 }
181
182 /*
183  * initialize the pitch control and sample rate
184  */
185 int snd_usb_init_pitch(struct snd_usb_audio *chip,
186                        const struct audioformat *fmt)
187 {
188         int err;
189
190         /* if endpoint doesn't have pitch control, bail out */
191         if (!(fmt->attributes & UAC_EP_CS_ATTR_PITCH_CONTROL))
192                 return 0;
193
194         usb_audio_dbg(chip, "enable PITCH for EP 0x%x\n", fmt->endpoint);
195
196         switch (fmt->protocol) {
197         case UAC_VERSION_1:
198                 err = init_pitch_v1(chip, fmt->endpoint);
199                 break;
200         case UAC_VERSION_2:
201                 err = init_pitch_v2(chip, fmt->endpoint);
202                 break;
203         default:
204                 return 0;
205         }
206
207         if (err < 0) {
208                 usb_audio_err(chip, "failed to enable PITCH for EP 0x%x\n",
209                               fmt->endpoint);
210                 return err;
211         }
212
213         return 0;
214 }
215
216 static bool stop_endpoints(struct snd_usb_substream *subs)
217 {
218         bool stopped = 0;
219
220         if (test_and_clear_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags)) {
221                 snd_usb_endpoint_stop(subs->sync_endpoint);
222                 stopped = true;
223         }
224         if (test_and_clear_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags)) {
225                 snd_usb_endpoint_stop(subs->data_endpoint);
226                 stopped = true;
227         }
228         return stopped;
229 }
230
231 static int start_endpoints(struct snd_usb_substream *subs)
232 {
233         int err;
234
235         if (!subs->data_endpoint)
236                 return -EINVAL;
237
238         if (!test_and_set_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags)) {
239                 err = snd_usb_endpoint_start(subs->data_endpoint);
240                 if (err < 0) {
241                         clear_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags);
242                         goto error;
243                 }
244         }
245
246         if (subs->sync_endpoint &&
247             !test_and_set_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags)) {
248                 err = snd_usb_endpoint_start(subs->sync_endpoint);
249                 if (err < 0) {
250                         clear_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags);
251                         goto error;
252                 }
253         }
254
255         return 0;
256
257  error:
258         stop_endpoints(subs);
259         return err;
260 }
261
262 static void sync_pending_stops(struct snd_usb_substream *subs)
263 {
264         snd_usb_endpoint_sync_pending_stop(subs->sync_endpoint);
265         snd_usb_endpoint_sync_pending_stop(subs->data_endpoint);
266 }
267
268 /* PCM sync_stop callback */
269 static int snd_usb_pcm_sync_stop(struct snd_pcm_substream *substream)
270 {
271         struct snd_usb_substream *subs = substream->runtime->private_data;
272
273         sync_pending_stops(subs);
274         return 0;
275 }
276
277 /* Set up sync endpoint */
278 int snd_usb_audioformat_set_sync_ep(struct snd_usb_audio *chip,
279                                     struct audioformat *fmt)
280 {
281         struct usb_device *dev = chip->dev;
282         struct usb_host_interface *alts;
283         struct usb_interface_descriptor *altsd;
284         unsigned int ep, attr, sync_attr;
285         bool is_playback;
286         int err;
287
288         alts = snd_usb_get_host_interface(chip, fmt->iface, fmt->altsetting);
289         if (!alts)
290                 return 0;
291         altsd = get_iface_desc(alts);
292
293         err = snd_usb_parse_implicit_fb_quirk(chip, fmt, alts);
294         if (err > 0)
295                 return 0; /* matched */
296
297         /*
298          * Generic sync EP handling
299          */
300
301         if (altsd->bNumEndpoints < 2)
302                 return 0;
303
304         is_playback = !(get_endpoint(alts, 0)->bEndpointAddress & USB_DIR_IN);
305         attr = fmt->ep_attr & USB_ENDPOINT_SYNCTYPE;
306         if ((is_playback && (attr == USB_ENDPOINT_SYNC_SYNC ||
307                              attr == USB_ENDPOINT_SYNC_ADAPTIVE)) ||
308             (!is_playback && attr != USB_ENDPOINT_SYNC_ADAPTIVE))
309                 return 0;
310
311         sync_attr = get_endpoint(alts, 1)->bmAttributes;
312
313         /*
314          * In case of illegal SYNC_NONE for OUT endpoint, we keep going to see
315          * if we don't find a sync endpoint, as on M-Audio Transit. In case of
316          * error fall back to SYNC mode and don't create sync endpoint
317          */
318
319         /* check sync-pipe endpoint */
320         /* ... and check descriptor size before accessing bSynchAddress
321            because there is a version of the SB Audigy 2 NX firmware lacking
322            the audio fields in the endpoint descriptors */
323         if ((sync_attr & USB_ENDPOINT_XFERTYPE_MASK) != USB_ENDPOINT_XFER_ISOC ||
324             (get_endpoint(alts, 1)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
325              get_endpoint(alts, 1)->bSynchAddress != 0)) {
326                 dev_err(&dev->dev,
327                         "%d:%d : invalid sync pipe. bmAttributes %02x, bLength %d, bSynchAddress %02x\n",
328                            fmt->iface, fmt->altsetting,
329                            get_endpoint(alts, 1)->bmAttributes,
330                            get_endpoint(alts, 1)->bLength,
331                            get_endpoint(alts, 1)->bSynchAddress);
332                 if (is_playback && attr == USB_ENDPOINT_SYNC_NONE)
333                         return 0;
334                 return -EINVAL;
335         }
336         ep = get_endpoint(alts, 1)->bEndpointAddress;
337         if (get_endpoint(alts, 0)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
338             get_endpoint(alts, 0)->bSynchAddress != 0 &&
339             ((is_playback && ep != (unsigned int)(get_endpoint(alts, 0)->bSynchAddress | USB_DIR_IN)) ||
340              (!is_playback && ep != (unsigned int)(get_endpoint(alts, 0)->bSynchAddress & ~USB_DIR_IN)))) {
341                 dev_err(&dev->dev,
342                         "%d:%d : invalid sync pipe. is_playback %d, ep %02x, bSynchAddress %02x\n",
343                            fmt->iface, fmt->altsetting,
344                            is_playback, ep, get_endpoint(alts, 0)->bSynchAddress);
345                 if (is_playback && attr == USB_ENDPOINT_SYNC_NONE)
346                         return 0;
347                 return -EINVAL;
348         }
349
350         fmt->sync_ep = ep;
351         fmt->sync_iface = altsd->bInterfaceNumber;
352         fmt->sync_altsetting = altsd->bAlternateSetting;
353         fmt->sync_ep_idx = 1;
354         if ((sync_attr & USB_ENDPOINT_USAGE_MASK) == USB_ENDPOINT_USAGE_IMPLICIT_FB)
355                 fmt->implicit_fb = 1;
356
357         dev_dbg(&dev->dev, "%d:%d: found sync_ep=0x%x, iface=%d, alt=%d, implicit_fb=%d\n",
358                 fmt->iface, fmt->altsetting, fmt->sync_ep, fmt->sync_iface,
359                 fmt->sync_altsetting, fmt->implicit_fb);
360
361         return 0;
362 }
363
364 static int snd_usb_pcm_change_state(struct snd_usb_substream *subs, int state)
365 {
366         int ret;
367
368         if (!subs->str_pd)
369                 return 0;
370
371         ret = snd_usb_power_domain_set(subs->stream->chip, subs->str_pd, state);
372         if (ret < 0) {
373                 dev_err(&subs->dev->dev,
374                         "Cannot change Power Domain ID: %d to state: %d. Err: %d\n",
375                         subs->str_pd->pd_id, state, ret);
376                 return ret;
377         }
378
379         return 0;
380 }
381
382 int snd_usb_pcm_suspend(struct snd_usb_stream *as)
383 {
384         int ret;
385
386         ret = snd_usb_pcm_change_state(&as->substream[0], UAC3_PD_STATE_D2);
387         if (ret < 0)
388                 return ret;
389
390         ret = snd_usb_pcm_change_state(&as->substream[1], UAC3_PD_STATE_D2);
391         if (ret < 0)
392                 return ret;
393
394         return 0;
395 }
396
397 int snd_usb_pcm_resume(struct snd_usb_stream *as)
398 {
399         int ret;
400
401         ret = snd_usb_pcm_change_state(&as->substream[0], UAC3_PD_STATE_D1);
402         if (ret < 0)
403                 return ret;
404
405         ret = snd_usb_pcm_change_state(&as->substream[1], UAC3_PD_STATE_D1);
406         if (ret < 0)
407                 return ret;
408
409         return 0;
410 }
411
412 static void close_endpoints(struct snd_usb_audio *chip,
413                             struct snd_usb_substream *subs)
414 {
415         if (subs->data_endpoint) {
416                 snd_usb_endpoint_set_sync(chip, subs->data_endpoint, NULL);
417                 snd_usb_endpoint_close(chip, subs->data_endpoint);
418                 subs->data_endpoint = NULL;
419         }
420
421         if (subs->sync_endpoint) {
422                 snd_usb_endpoint_close(chip, subs->sync_endpoint);
423                 subs->sync_endpoint = NULL;
424         }
425 }
426
427 static int configure_endpoints(struct snd_usb_audio *chip,
428                                struct snd_usb_substream *subs)
429 {
430         int err;
431
432         if (subs->data_endpoint->need_setup) {
433                 /* stop any running stream beforehand */
434                 if (stop_endpoints(subs))
435                         sync_pending_stops(subs);
436                 err = snd_usb_endpoint_configure(chip, subs->data_endpoint);
437                 if (err < 0)
438                         return err;
439                 snd_usb_set_format_quirk(subs, subs->cur_audiofmt);
440         }
441
442         if (subs->sync_endpoint) {
443                 err = snd_usb_endpoint_configure(chip, subs->sync_endpoint);
444                 if (err < 0)
445                         return err;
446         }
447
448         return 0;
449 }
450
451 /*
452  * hw_params callback
453  *
454  * allocate a buffer and set the given audio format.
455  *
456  * so far we use a physically linear buffer although packetize transfer
457  * doesn't need a continuous area.
458  * if sg buffer is supported on the later version of alsa, we'll follow
459  * that.
460  */
461 static int snd_usb_hw_params(struct snd_pcm_substream *substream,
462                              struct snd_pcm_hw_params *hw_params)
463 {
464         struct snd_usb_substream *subs = substream->runtime->private_data;
465         struct snd_usb_audio *chip = subs->stream->chip;
466         const struct audioformat *fmt;
467         const struct audioformat *sync_fmt;
468         int ret;
469
470         ret = snd_media_start_pipeline(subs);
471         if (ret)
472                 return ret;
473
474         fmt = find_substream_format(subs, hw_params);
475         if (!fmt) {
476                 usb_audio_dbg(chip,
477                               "cannot find format: format=%s, rate=%d, channels=%d\n",
478                               snd_pcm_format_name(params_format(hw_params)),
479                               params_rate(hw_params), params_channels(hw_params));
480                 ret = -EINVAL;
481                 goto stop_pipeline;
482         }
483
484         if (fmt->implicit_fb) {
485                 sync_fmt = snd_usb_find_implicit_fb_sync_format(chip, fmt,
486                                                                 hw_params,
487                                                                 !substream->stream);
488                 if (!sync_fmt) {
489                         usb_audio_dbg(chip,
490                                       "cannot find sync format: ep=0x%x, iface=%d:%d, format=%s, rate=%d, channels=%d\n",
491                                       fmt->sync_ep, fmt->sync_iface,
492                                       fmt->sync_altsetting,
493                                       snd_pcm_format_name(params_format(hw_params)),
494                                       params_rate(hw_params), params_channels(hw_params));
495                         ret = -EINVAL;
496                         goto stop_pipeline;
497                 }
498         } else {
499                 sync_fmt = fmt;
500         }
501
502         ret = snd_usb_lock_shutdown(chip);
503         if (ret < 0)
504                 goto stop_pipeline;
505
506         ret = snd_usb_pcm_change_state(subs, UAC3_PD_STATE_D0);
507         if (ret < 0)
508                 goto unlock;
509
510         if (subs->data_endpoint) {
511                 if (snd_usb_endpoint_compatible(chip, subs->data_endpoint,
512                                                 fmt, hw_params))
513                         goto unlock;
514                 close_endpoints(chip, subs);
515         }
516
517         subs->data_endpoint = snd_usb_endpoint_open(chip, fmt, hw_params, false);
518         if (!subs->data_endpoint) {
519                 ret = -EINVAL;
520                 goto unlock;
521         }
522
523         if (fmt->sync_ep) {
524                 subs->sync_endpoint = snd_usb_endpoint_open(chip, sync_fmt,
525                                                             hw_params,
526                                                             fmt == sync_fmt);
527                 if (!subs->sync_endpoint) {
528                         ret = -EINVAL;
529                         goto unlock;
530                 }
531
532                 snd_usb_endpoint_set_sync(chip, subs->data_endpoint,
533                                           subs->sync_endpoint);
534         }
535
536         mutex_lock(&chip->mutex);
537         subs->cur_audiofmt = fmt;
538         mutex_unlock(&chip->mutex);
539
540         ret = configure_endpoints(chip, subs);
541
542  unlock:
543         if (ret < 0)
544                 close_endpoints(chip, subs);
545
546         snd_usb_unlock_shutdown(chip);
547  stop_pipeline:
548         if (ret < 0)
549                 snd_media_stop_pipeline(subs);
550
551         return ret;
552 }
553
554 /*
555  * hw_free callback
556  *
557  * reset the audio format and release the buffer
558  */
559 static int snd_usb_hw_free(struct snd_pcm_substream *substream)
560 {
561         struct snd_usb_substream *subs = substream->runtime->private_data;
562         struct snd_usb_audio *chip = subs->stream->chip;
563
564         snd_media_stop_pipeline(subs);
565         mutex_lock(&chip->mutex);
566         subs->cur_audiofmt = NULL;
567         mutex_unlock(&chip->mutex);
568         if (!snd_usb_lock_shutdown(chip)) {
569                 if (stop_endpoints(subs))
570                         sync_pending_stops(subs);
571                 close_endpoints(chip, subs);
572                 snd_usb_unlock_shutdown(chip);
573         }
574
575         return 0;
576 }
577
578 /*
579  * prepare callback
580  *
581  * only a few subtle things...
582  */
583 static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream)
584 {
585         struct snd_pcm_runtime *runtime = substream->runtime;
586         struct snd_usb_substream *subs = runtime->private_data;
587         struct snd_usb_audio *chip = subs->stream->chip;
588         int ret;
589
590         ret = snd_usb_lock_shutdown(chip);
591         if (ret < 0)
592                 return ret;
593         if (snd_BUG_ON(!subs->data_endpoint)) {
594                 ret = -EIO;
595                 goto unlock;
596         }
597
598         ret = configure_endpoints(chip, subs);
599         if (ret < 0)
600                 goto unlock;
601
602         /* reset the pointer */
603         subs->hwptr_done = 0;
604         subs->transfer_done = 0;
605         subs->last_delay = 0;
606         subs->last_frame_number = 0;
607         runtime->delay = 0;
608
609         /* for playback, submit the URBs now; otherwise, the first hwptr_done
610          * updates for all URBs would happen at the same time when starting */
611         if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK)
612                 ret = start_endpoints(subs);
613
614  unlock:
615         snd_usb_unlock_shutdown(chip);
616         return ret;
617 }
618
619 /*
620  * h/w constraints
621  */
622
623 #ifdef HW_CONST_DEBUG
624 #define hwc_debug(fmt, args...) pr_debug(fmt, ##args)
625 #else
626 #define hwc_debug(fmt, args...) do { } while(0)
627 #endif
628
629 static const struct snd_pcm_hardware snd_usb_hardware =
630 {
631         .info =                 SNDRV_PCM_INFO_MMAP |
632                                 SNDRV_PCM_INFO_MMAP_VALID |
633                                 SNDRV_PCM_INFO_BATCH |
634                                 SNDRV_PCM_INFO_INTERLEAVED |
635                                 SNDRV_PCM_INFO_BLOCK_TRANSFER |
636                                 SNDRV_PCM_INFO_PAUSE,
637         .channels_min =         1,
638         .channels_max =         256,
639         .buffer_bytes_max =     1024 * 1024,
640         .period_bytes_min =     64,
641         .period_bytes_max =     512 * 1024,
642         .periods_min =          2,
643         .periods_max =          1024,
644 };
645
646 static int hw_check_valid_format(struct snd_usb_substream *subs,
647                                  struct snd_pcm_hw_params *params,
648                                  const struct audioformat *fp)
649 {
650         struct snd_interval *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
651         struct snd_interval *ct = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
652         struct snd_mask *fmts = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
653         struct snd_interval *pt = hw_param_interval(params, SNDRV_PCM_HW_PARAM_PERIOD_TIME);
654         struct snd_mask check_fmts;
655         unsigned int ptime;
656
657         /* check the format */
658         snd_mask_none(&check_fmts);
659         check_fmts.bits[0] = (u32)fp->formats;
660         check_fmts.bits[1] = (u32)(fp->formats >> 32);
661         snd_mask_intersect(&check_fmts, fmts);
662         if (snd_mask_empty(&check_fmts)) {
663                 hwc_debug("   > check: no supported format 0x%llx\n", fp->formats);
664                 return 0;
665         }
666         /* check the channels */
667         if (fp->channels < ct->min || fp->channels > ct->max) {
668                 hwc_debug("   > check: no valid channels %d (%d/%d)\n", fp->channels, ct->min, ct->max);
669                 return 0;
670         }
671         /* check the rate is within the range */
672         if (fp->rate_min > it->max || (fp->rate_min == it->max && it->openmax)) {
673                 hwc_debug("   > check: rate_min %d > max %d\n", fp->rate_min, it->max);
674                 return 0;
675         }
676         if (fp->rate_max < it->min || (fp->rate_max == it->min && it->openmin)) {
677                 hwc_debug("   > check: rate_max %d < min %d\n", fp->rate_max, it->min);
678                 return 0;
679         }
680         /* check whether the period time is >= the data packet interval */
681         if (subs->speed != USB_SPEED_FULL) {
682                 ptime = 125 * (1 << fp->datainterval);
683                 if (ptime > pt->max || (ptime == pt->max && pt->openmax)) {
684                         hwc_debug("   > check: ptime %u > max %u\n", ptime, pt->max);
685                         return 0;
686                 }
687         }
688         return 1;
689 }
690
691 static int apply_hw_params_minmax(struct snd_interval *it, unsigned int rmin,
692                                   unsigned int rmax)
693 {
694         int changed;
695
696         if (rmin > rmax) {
697                 hwc_debug("  --> get empty\n");
698                 it->empty = 1;
699                 return -EINVAL;
700         }
701
702         changed = 0;
703         if (it->min < rmin) {
704                 it->min = rmin;
705                 it->openmin = 0;
706                 changed = 1;
707         }
708         if (it->max > rmax) {
709                 it->max = rmax;
710                 it->openmax = 0;
711                 changed = 1;
712         }
713         if (snd_interval_checkempty(it)) {
714                 it->empty = 1;
715                 return -EINVAL;
716         }
717         hwc_debug("  --> (%d, %d) (changed = %d)\n", it->min, it->max, changed);
718         return changed;
719 }
720
721 static int hw_rule_rate(struct snd_pcm_hw_params *params,
722                         struct snd_pcm_hw_rule *rule)
723 {
724         struct snd_usb_substream *subs = rule->private;
725         const struct audioformat *fp;
726         struct snd_interval *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
727         unsigned int rmin, rmax, r;
728         int i;
729
730         hwc_debug("hw_rule_rate: (%d,%d)\n", it->min, it->max);
731         rmin = UINT_MAX;
732         rmax = 0;
733         list_for_each_entry(fp, &subs->fmt_list, list) {
734                 if (!hw_check_valid_format(subs, params, fp))
735                         continue;
736                 if (fp->rate_table && fp->nr_rates) {
737                         for (i = 0; i < fp->nr_rates; i++) {
738                                 r = fp->rate_table[i];
739                                 if (!snd_interval_test(it, r))
740                                         continue;
741                                 rmin = min(rmin, r);
742                                 rmax = max(rmax, r);
743                         }
744                 } else {
745                         rmin = min(rmin, fp->rate_min);
746                         rmax = max(rmax, fp->rate_max);
747                 }
748         }
749
750         return apply_hw_params_minmax(it, rmin, rmax);
751 }
752
753
754 static int hw_rule_channels(struct snd_pcm_hw_params *params,
755                             struct snd_pcm_hw_rule *rule)
756 {
757         struct snd_usb_substream *subs = rule->private;
758         const struct audioformat *fp;
759         struct snd_interval *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
760         unsigned int rmin, rmax;
761
762         hwc_debug("hw_rule_channels: (%d,%d)\n", it->min, it->max);
763         rmin = UINT_MAX;
764         rmax = 0;
765         list_for_each_entry(fp, &subs->fmt_list, list) {
766                 if (!hw_check_valid_format(subs, params, fp))
767                         continue;
768                 rmin = min(rmin, fp->channels);
769                 rmax = max(rmax, fp->channels);
770         }
771
772         return apply_hw_params_minmax(it, rmin, rmax);
773 }
774
775 static int apply_hw_params_format_bits(struct snd_mask *fmt, u64 fbits)
776 {
777         u32 oldbits[2];
778         int changed;
779
780         oldbits[0] = fmt->bits[0];
781         oldbits[1] = fmt->bits[1];
782         fmt->bits[0] &= (u32)fbits;
783         fmt->bits[1] &= (u32)(fbits >> 32);
784         if (!fmt->bits[0] && !fmt->bits[1]) {
785                 hwc_debug("  --> get empty\n");
786                 return -EINVAL;
787         }
788         changed = (oldbits[0] != fmt->bits[0] || oldbits[1] != fmt->bits[1]);
789         hwc_debug("  --> %x:%x (changed = %d)\n", fmt->bits[0], fmt->bits[1], changed);
790         return changed;
791 }
792
793 static int hw_rule_format(struct snd_pcm_hw_params *params,
794                           struct snd_pcm_hw_rule *rule)
795 {
796         struct snd_usb_substream *subs = rule->private;
797         const struct audioformat *fp;
798         struct snd_mask *fmt = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
799         u64 fbits;
800
801         hwc_debug("hw_rule_format: %x:%x\n", fmt->bits[0], fmt->bits[1]);
802         fbits = 0;
803         list_for_each_entry(fp, &subs->fmt_list, list) {
804                 if (!hw_check_valid_format(subs, params, fp))
805                         continue;
806                 fbits |= fp->formats;
807         }
808         return apply_hw_params_format_bits(fmt, fbits);
809 }
810
811 static int hw_rule_period_time(struct snd_pcm_hw_params *params,
812                                struct snd_pcm_hw_rule *rule)
813 {
814         struct snd_usb_substream *subs = rule->private;
815         const struct audioformat *fp;
816         struct snd_interval *it;
817         unsigned char min_datainterval;
818         unsigned int pmin;
819
820         it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_PERIOD_TIME);
821         hwc_debug("hw_rule_period_time: (%u,%u)\n", it->min, it->max);
822         min_datainterval = 0xff;
823         list_for_each_entry(fp, &subs->fmt_list, list) {
824                 if (!hw_check_valid_format(subs, params, fp))
825                         continue;
826                 min_datainterval = min(min_datainterval, fp->datainterval);
827         }
828         if (min_datainterval == 0xff) {
829                 hwc_debug("  --> get empty\n");
830                 it->empty = 1;
831                 return -EINVAL;
832         }
833         pmin = 125 * (1 << min_datainterval);
834
835         return apply_hw_params_minmax(it, pmin, UINT_MAX);
836 }
837
838 /* get the EP or the sync EP for implicit fb when it's already set up */
839 static const struct snd_usb_endpoint *
840 get_sync_ep_from_substream(struct snd_usb_substream *subs)
841 {
842         struct snd_usb_audio *chip = subs->stream->chip;
843         const struct audioformat *fp;
844         const struct snd_usb_endpoint *ep;
845
846         list_for_each_entry(fp, &subs->fmt_list, list) {
847                 ep = snd_usb_get_endpoint(chip, fp->endpoint);
848                 if (ep && ep->cur_rate)
849                         return ep;
850                 if (!fp->implicit_fb)
851                         continue;
852                 /* for the implicit fb, check the sync ep as well */
853                 ep = snd_usb_get_endpoint(chip, fp->sync_ep);
854                 if (ep && ep->cur_rate)
855                         return ep;
856         }
857         return NULL;
858 }
859
860 /* additional hw constraints for implicit feedback mode */
861 static int hw_rule_format_implicit_fb(struct snd_pcm_hw_params *params,
862                                       struct snd_pcm_hw_rule *rule)
863 {
864         struct snd_usb_substream *subs = rule->private;
865         const struct snd_usb_endpoint *ep;
866         struct snd_mask *fmt = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
867
868         ep = get_sync_ep_from_substream(subs);
869         if (!ep)
870                 return 0;
871
872         hwc_debug("applying %s\n", __func__);
873         return apply_hw_params_format_bits(fmt, pcm_format_to_bits(ep->cur_format));
874 }
875
876 static int hw_rule_rate_implicit_fb(struct snd_pcm_hw_params *params,
877                                     struct snd_pcm_hw_rule *rule)
878 {
879         struct snd_usb_substream *subs = rule->private;
880         const struct snd_usb_endpoint *ep;
881         struct snd_interval *it;
882
883         ep = get_sync_ep_from_substream(subs);
884         if (!ep)
885                 return 0;
886
887         hwc_debug("applying %s\n", __func__);
888         it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
889         return apply_hw_params_minmax(it, ep->cur_rate, ep->cur_rate);
890 }
891
892 static int hw_rule_period_size_implicit_fb(struct snd_pcm_hw_params *params,
893                                            struct snd_pcm_hw_rule *rule)
894 {
895         struct snd_usb_substream *subs = rule->private;
896         const struct snd_usb_endpoint *ep;
897         struct snd_interval *it;
898
899         ep = get_sync_ep_from_substream(subs);
900         if (!ep)
901                 return 0;
902
903         hwc_debug("applying %s\n", __func__);
904         it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE);
905         return apply_hw_params_minmax(it, ep->cur_period_frames,
906                                       ep->cur_period_frames);
907 }
908
909 static int hw_rule_periods_implicit_fb(struct snd_pcm_hw_params *params,
910                                        struct snd_pcm_hw_rule *rule)
911 {
912         struct snd_usb_substream *subs = rule->private;
913         const struct snd_usb_endpoint *ep;
914         struct snd_interval *it;
915
916         ep = get_sync_ep_from_substream(subs);
917         if (!ep)
918                 return 0;
919
920         hwc_debug("applying %s\n", __func__);
921         it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_PERIODS);
922         return apply_hw_params_minmax(it, ep->cur_buffer_periods,
923                                       ep->cur_buffer_periods);
924 }
925
926 /*
927  * set up the runtime hardware information.
928  */
929
930 static int setup_hw_info(struct snd_pcm_runtime *runtime, struct snd_usb_substream *subs)
931 {
932         const struct audioformat *fp;
933         unsigned int pt, ptmin;
934         int param_period_time_if_needed = -1;
935         int err;
936
937         runtime->hw.formats = subs->formats;
938
939         runtime->hw.rate_min = 0x7fffffff;
940         runtime->hw.rate_max = 0;
941         runtime->hw.channels_min = 256;
942         runtime->hw.channels_max = 0;
943         runtime->hw.rates = 0;
944         ptmin = UINT_MAX;
945         /* check min/max rates and channels */
946         list_for_each_entry(fp, &subs->fmt_list, list) {
947                 runtime->hw.rates |= fp->rates;
948                 if (runtime->hw.rate_min > fp->rate_min)
949                         runtime->hw.rate_min = fp->rate_min;
950                 if (runtime->hw.rate_max < fp->rate_max)
951                         runtime->hw.rate_max = fp->rate_max;
952                 if (runtime->hw.channels_min > fp->channels)
953                         runtime->hw.channels_min = fp->channels;
954                 if (runtime->hw.channels_max < fp->channels)
955                         runtime->hw.channels_max = fp->channels;
956                 if (fp->fmt_type == UAC_FORMAT_TYPE_II && fp->frame_size > 0) {
957                         /* FIXME: there might be more than one audio formats... */
958                         runtime->hw.period_bytes_min = runtime->hw.period_bytes_max =
959                                 fp->frame_size;
960                 }
961                 pt = 125 * (1 << fp->datainterval);
962                 ptmin = min(ptmin, pt);
963         }
964
965         param_period_time_if_needed = SNDRV_PCM_HW_PARAM_PERIOD_TIME;
966         if (subs->speed == USB_SPEED_FULL)
967                 /* full speed devices have fixed data packet interval */
968                 ptmin = 1000;
969         if (ptmin == 1000)
970                 /* if period time doesn't go below 1 ms, no rules needed */
971                 param_period_time_if_needed = -1;
972
973         err = snd_pcm_hw_constraint_minmax(runtime,
974                                            SNDRV_PCM_HW_PARAM_PERIOD_TIME,
975                                            ptmin, UINT_MAX);
976         if (err < 0)
977                 return err;
978
979         err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
980                                   hw_rule_rate, subs,
981                                   SNDRV_PCM_HW_PARAM_RATE,
982                                   SNDRV_PCM_HW_PARAM_FORMAT,
983                                   SNDRV_PCM_HW_PARAM_CHANNELS,
984                                   param_period_time_if_needed,
985                                   -1);
986         if (err < 0)
987                 return err;
988
989         err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
990                                   hw_rule_channels, subs,
991                                   SNDRV_PCM_HW_PARAM_CHANNELS,
992                                   SNDRV_PCM_HW_PARAM_FORMAT,
993                                   SNDRV_PCM_HW_PARAM_RATE,
994                                   param_period_time_if_needed,
995                                   -1);
996         if (err < 0)
997                 return err;
998         err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_FORMAT,
999                                   hw_rule_format, subs,
1000                                   SNDRV_PCM_HW_PARAM_FORMAT,
1001                                   SNDRV_PCM_HW_PARAM_RATE,
1002                                   SNDRV_PCM_HW_PARAM_CHANNELS,
1003                                   param_period_time_if_needed,
1004                                   -1);
1005         if (err < 0)
1006                 return err;
1007         if (param_period_time_if_needed >= 0) {
1008                 err = snd_pcm_hw_rule_add(runtime, 0,
1009                                           SNDRV_PCM_HW_PARAM_PERIOD_TIME,
1010                                           hw_rule_period_time, subs,
1011                                           SNDRV_PCM_HW_PARAM_FORMAT,
1012                                           SNDRV_PCM_HW_PARAM_CHANNELS,
1013                                           SNDRV_PCM_HW_PARAM_RATE,
1014                                           -1);
1015                 if (err < 0)
1016                         return err;
1017         }
1018
1019         /* additional hw constraints for implicit fb */
1020         err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_FORMAT,
1021                                   hw_rule_format_implicit_fb, subs,
1022                                   SNDRV_PCM_HW_PARAM_FORMAT, -1);
1023         if (err < 0)
1024                 return err;
1025         err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
1026                                   hw_rule_rate_implicit_fb, subs,
1027                                   SNDRV_PCM_HW_PARAM_RATE, -1);
1028         if (err < 0)
1029                 return err;
1030         err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE,
1031                                   hw_rule_period_size_implicit_fb, subs,
1032                                   SNDRV_PCM_HW_PARAM_PERIOD_SIZE, -1);
1033         if (err < 0)
1034                 return err;
1035         err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_PERIODS,
1036                                   hw_rule_periods_implicit_fb, subs,
1037                                   SNDRV_PCM_HW_PARAM_PERIODS, -1);
1038         if (err < 0)
1039                 return err;
1040
1041         return 0;
1042 }
1043
1044 static int snd_usb_pcm_open(struct snd_pcm_substream *substream)
1045 {
1046         int direction = substream->stream;
1047         struct snd_usb_stream *as = snd_pcm_substream_chip(substream);
1048         struct snd_pcm_runtime *runtime = substream->runtime;
1049         struct snd_usb_substream *subs = &as->substream[direction];
1050         int ret;
1051
1052         runtime->hw = snd_usb_hardware;
1053         runtime->private_data = subs;
1054         subs->pcm_substream = substream;
1055         /* runtime PM is also done there */
1056
1057         /* initialize DSD/DOP context */
1058         subs->dsd_dop.byte_idx = 0;
1059         subs->dsd_dop.channel = 0;
1060         subs->dsd_dop.marker = 1;
1061
1062         ret = setup_hw_info(runtime, subs);
1063         if (ret < 0)
1064                 return ret;
1065         ret = snd_usb_autoresume(subs->stream->chip);
1066         if (ret < 0)
1067                 return ret;
1068         ret = snd_media_stream_init(subs, as->pcm, direction);
1069         if (ret < 0)
1070                 snd_usb_autosuspend(subs->stream->chip);
1071         return ret;
1072 }
1073
1074 static int snd_usb_pcm_close(struct snd_pcm_substream *substream)
1075 {
1076         int direction = substream->stream;
1077         struct snd_usb_stream *as = snd_pcm_substream_chip(substream);
1078         struct snd_usb_substream *subs = &as->substream[direction];
1079         int ret;
1080
1081         snd_media_stop_pipeline(subs);
1082
1083         if (!snd_usb_lock_shutdown(subs->stream->chip)) {
1084                 ret = snd_usb_pcm_change_state(subs, UAC3_PD_STATE_D1);
1085                 snd_usb_unlock_shutdown(subs->stream->chip);
1086                 if (ret < 0)
1087                         return ret;
1088         }
1089
1090         subs->pcm_substream = NULL;
1091         snd_usb_autosuspend(subs->stream->chip);
1092
1093         return 0;
1094 }
1095
1096 /* Since a URB can handle only a single linear buffer, we must use double
1097  * buffering when the data to be transferred overflows the buffer boundary.
1098  * To avoid inconsistencies when updating hwptr_done, we use double buffering
1099  * for all URBs.
1100  */
1101 static void retire_capture_urb(struct snd_usb_substream *subs,
1102                                struct urb *urb)
1103 {
1104         struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
1105         unsigned int stride, frames, bytes, oldptr;
1106         int i, period_elapsed = 0;
1107         unsigned long flags;
1108         unsigned char *cp;
1109         int current_frame_number;
1110
1111         /* read frame number here, update pointer in critical section */
1112         current_frame_number = usb_get_current_frame_number(subs->dev);
1113
1114         stride = runtime->frame_bits >> 3;
1115
1116         for (i = 0; i < urb->number_of_packets; i++) {
1117                 cp = (unsigned char *)urb->transfer_buffer + urb->iso_frame_desc[i].offset + subs->pkt_offset_adj;
1118                 if (urb->iso_frame_desc[i].status && printk_ratelimit()) {
1119                         dev_dbg(&subs->dev->dev, "frame %d active: %d\n",
1120                                 i, urb->iso_frame_desc[i].status);
1121                         // continue;
1122                 }
1123                 bytes = urb->iso_frame_desc[i].actual_length;
1124                 if (subs->stream_offset_adj > 0) {
1125                         unsigned int adj = min(subs->stream_offset_adj, bytes);
1126                         cp += adj;
1127                         bytes -= adj;
1128                         subs->stream_offset_adj -= adj;
1129                 }
1130                 frames = bytes / stride;
1131                 if (!subs->txfr_quirk)
1132                         bytes = frames * stride;
1133                 if (bytes % (runtime->sample_bits >> 3) != 0) {
1134                         int oldbytes = bytes;
1135                         bytes = frames * stride;
1136                         dev_warn_ratelimited(&subs->dev->dev,
1137                                  "Corrected urb data len. %d->%d\n",
1138                                                         oldbytes, bytes);
1139                 }
1140                 /* update the current pointer */
1141                 spin_lock_irqsave(&subs->lock, flags);
1142                 oldptr = subs->hwptr_done;
1143                 subs->hwptr_done += bytes;
1144                 if (subs->hwptr_done >= runtime->buffer_size * stride)
1145                         subs->hwptr_done -= runtime->buffer_size * stride;
1146                 frames = (bytes + (oldptr % stride)) / stride;
1147                 subs->transfer_done += frames;
1148                 if (subs->transfer_done >= runtime->period_size) {
1149                         subs->transfer_done -= runtime->period_size;
1150                         period_elapsed = 1;
1151                 }
1152                 /* capture delay is by construction limited to one URB,
1153                  * reset delays here
1154                  */
1155                 runtime->delay = subs->last_delay = 0;
1156
1157                 /* realign last_frame_number */
1158                 subs->last_frame_number = current_frame_number;
1159                 subs->last_frame_number &= 0xFF; /* keep 8 LSBs */
1160
1161                 spin_unlock_irqrestore(&subs->lock, flags);
1162                 /* copy a data chunk */
1163                 if (oldptr + bytes > runtime->buffer_size * stride) {
1164                         unsigned int bytes1 =
1165                                         runtime->buffer_size * stride - oldptr;
1166                         memcpy(runtime->dma_area + oldptr, cp, bytes1);
1167                         memcpy(runtime->dma_area, cp + bytes1, bytes - bytes1);
1168                 } else {
1169                         memcpy(runtime->dma_area + oldptr, cp, bytes);
1170                 }
1171         }
1172
1173         if (period_elapsed)
1174                 snd_pcm_period_elapsed(subs->pcm_substream);
1175 }
1176
1177 static inline void fill_playback_urb_dsd_dop(struct snd_usb_substream *subs,
1178                                              struct urb *urb, unsigned int bytes)
1179 {
1180         struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
1181         unsigned int stride = runtime->frame_bits >> 3;
1182         unsigned int dst_idx = 0;
1183         unsigned int src_idx = subs->hwptr_done;
1184         unsigned int wrap = runtime->buffer_size * stride;
1185         u8 *dst = urb->transfer_buffer;
1186         u8 *src = runtime->dma_area;
1187         u8 marker[] = { 0x05, 0xfa };
1188
1189         /*
1190          * The DSP DOP format defines a way to transport DSD samples over
1191          * normal PCM data endpoints. It requires stuffing of marker bytes
1192          * (0x05 and 0xfa, alternating per sample frame), and then expects
1193          * 2 additional bytes of actual payload. The whole frame is stored
1194          * LSB.
1195          *
1196          * Hence, for a stereo transport, the buffer layout looks like this,
1197          * where L refers to left channel samples and R to right.
1198          *
1199          *   L1 L2 0x05   R1 R2 0x05   L3 L4 0xfa  R3 R4 0xfa
1200          *   L5 L6 0x05   R5 R6 0x05   L7 L8 0xfa  R7 R8 0xfa
1201          *   .....
1202          *
1203          */
1204
1205         while (bytes--) {
1206                 if (++subs->dsd_dop.byte_idx == 3) {
1207                         /* frame boundary? */
1208                         dst[dst_idx++] = marker[subs->dsd_dop.marker];
1209                         src_idx += 2;
1210                         subs->dsd_dop.byte_idx = 0;
1211
1212                         if (++subs->dsd_dop.channel % runtime->channels == 0) {
1213                                 /* alternate the marker */
1214                                 subs->dsd_dop.marker++;
1215                                 subs->dsd_dop.marker %= ARRAY_SIZE(marker);
1216                                 subs->dsd_dop.channel = 0;
1217                         }
1218                 } else {
1219                         /* stuff the DSD payload */
1220                         int idx = (src_idx + subs->dsd_dop.byte_idx - 1) % wrap;
1221
1222                         if (subs->cur_audiofmt->dsd_bitrev)
1223                                 dst[dst_idx++] = bitrev8(src[idx]);
1224                         else
1225                                 dst[dst_idx++] = src[idx];
1226
1227                         subs->hwptr_done++;
1228                 }
1229         }
1230         if (subs->hwptr_done >= runtime->buffer_size * stride)
1231                 subs->hwptr_done -= runtime->buffer_size * stride;
1232 }
1233
1234 static void copy_to_urb(struct snd_usb_substream *subs, struct urb *urb,
1235                         int offset, int stride, unsigned int bytes)
1236 {
1237         struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
1238
1239         if (subs->hwptr_done + bytes > runtime->buffer_size * stride) {
1240                 /* err, the transferred area goes over buffer boundary. */
1241                 unsigned int bytes1 =
1242                         runtime->buffer_size * stride - subs->hwptr_done;
1243                 memcpy(urb->transfer_buffer + offset,
1244                        runtime->dma_area + subs->hwptr_done, bytes1);
1245                 memcpy(urb->transfer_buffer + offset + bytes1,
1246                        runtime->dma_area, bytes - bytes1);
1247         } else {
1248                 memcpy(urb->transfer_buffer + offset,
1249                        runtime->dma_area + subs->hwptr_done, bytes);
1250         }
1251         subs->hwptr_done += bytes;
1252         if (subs->hwptr_done >= runtime->buffer_size * stride)
1253                 subs->hwptr_done -= runtime->buffer_size * stride;
1254 }
1255
1256 static unsigned int copy_to_urb_quirk(struct snd_usb_substream *subs,
1257                                       struct urb *urb, int stride,
1258                                       unsigned int bytes)
1259 {
1260         __le32 packet_length;
1261         int i;
1262
1263         /* Put __le32 length descriptor at start of each packet. */
1264         for (i = 0; i < urb->number_of_packets; i++) {
1265                 unsigned int length = urb->iso_frame_desc[i].length;
1266                 unsigned int offset = urb->iso_frame_desc[i].offset;
1267
1268                 packet_length = cpu_to_le32(length);
1269                 offset += i * sizeof(packet_length);
1270                 urb->iso_frame_desc[i].offset = offset;
1271                 urb->iso_frame_desc[i].length += sizeof(packet_length);
1272                 memcpy(urb->transfer_buffer + offset,
1273                        &packet_length, sizeof(packet_length));
1274                 copy_to_urb(subs, urb, offset + sizeof(packet_length),
1275                             stride, length);
1276         }
1277         /* Adjust transfer size accordingly. */
1278         bytes += urb->number_of_packets * sizeof(packet_length);
1279         return bytes;
1280 }
1281
1282 static void prepare_playback_urb(struct snd_usb_substream *subs,
1283                                  struct urb *urb)
1284 {
1285         struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
1286         struct snd_usb_endpoint *ep = subs->data_endpoint;
1287         struct snd_urb_ctx *ctx = urb->context;
1288         unsigned int counts, frames, bytes;
1289         int i, stride, period_elapsed = 0;
1290         unsigned long flags;
1291
1292         stride = runtime->frame_bits >> 3;
1293
1294         frames = 0;
1295         urb->number_of_packets = 0;
1296         spin_lock_irqsave(&subs->lock, flags);
1297         subs->frame_limit += ep->max_urb_frames;
1298         for (i = 0; i < ctx->packets; i++) {
1299                 counts = snd_usb_endpoint_next_packet_size(ep, ctx, i);
1300                 /* set up descriptor */
1301                 urb->iso_frame_desc[i].offset = frames * ep->stride;
1302                 urb->iso_frame_desc[i].length = counts * ep->stride;
1303                 frames += counts;
1304                 urb->number_of_packets++;
1305                 subs->transfer_done += counts;
1306                 if (subs->transfer_done >= runtime->period_size) {
1307                         subs->transfer_done -= runtime->period_size;
1308                         subs->frame_limit = 0;
1309                         period_elapsed = 1;
1310                         if (subs->fmt_type == UAC_FORMAT_TYPE_II) {
1311                                 if (subs->transfer_done > 0) {
1312                                         /* FIXME: fill-max mode is not
1313                                          * supported yet */
1314                                         frames -= subs->transfer_done;
1315                                         counts -= subs->transfer_done;
1316                                         urb->iso_frame_desc[i].length =
1317                                                 counts * ep->stride;
1318                                         subs->transfer_done = 0;
1319                                 }
1320                                 i++;
1321                                 if (i < ctx->packets) {
1322                                         /* add a transfer delimiter */
1323                                         urb->iso_frame_desc[i].offset =
1324                                                 frames * ep->stride;
1325                                         urb->iso_frame_desc[i].length = 0;
1326                                         urb->number_of_packets++;
1327                                 }
1328                                 break;
1329                         }
1330                 }
1331                 /* finish at the period boundary or after enough frames */
1332                 if ((period_elapsed ||
1333                                 subs->transfer_done >= subs->frame_limit) &&
1334                     !snd_usb_endpoint_implicit_feedback_sink(ep))
1335                         break;
1336         }
1337         bytes = frames * ep->stride;
1338
1339         if (unlikely(ep->cur_format == SNDRV_PCM_FORMAT_DSD_U16_LE &&
1340                      subs->cur_audiofmt->dsd_dop)) {
1341                 fill_playback_urb_dsd_dop(subs, urb, bytes);
1342         } else if (unlikely(ep->cur_format == SNDRV_PCM_FORMAT_DSD_U8 &&
1343                            subs->cur_audiofmt->dsd_bitrev)) {
1344                 /* bit-reverse the bytes */
1345                 u8 *buf = urb->transfer_buffer;
1346                 for (i = 0; i < bytes; i++) {
1347                         int idx = (subs->hwptr_done + i)
1348                                 % (runtime->buffer_size * stride);
1349                         buf[i] = bitrev8(runtime->dma_area[idx]);
1350                 }
1351
1352                 subs->hwptr_done += bytes;
1353                 if (subs->hwptr_done >= runtime->buffer_size * stride)
1354                         subs->hwptr_done -= runtime->buffer_size * stride;
1355         } else {
1356                 /* usual PCM */
1357                 if (!subs->tx_length_quirk)
1358                         copy_to_urb(subs, urb, 0, stride, bytes);
1359                 else
1360                         bytes = copy_to_urb_quirk(subs, urb, stride, bytes);
1361                         /* bytes is now amount of outgoing data */
1362         }
1363
1364         /* update delay with exact number of samples queued */
1365         runtime->delay = subs->last_delay;
1366         runtime->delay += frames;
1367         subs->last_delay = runtime->delay;
1368
1369         /* realign last_frame_number */
1370         subs->last_frame_number = usb_get_current_frame_number(subs->dev);
1371         subs->last_frame_number &= 0xFF; /* keep 8 LSBs */
1372
1373         if (subs->trigger_tstamp_pending_update) {
1374                 /* this is the first actual URB submitted,
1375                  * update trigger timestamp to reflect actual start time
1376                  */
1377                 snd_pcm_gettime(runtime, &runtime->trigger_tstamp);
1378                 subs->trigger_tstamp_pending_update = false;
1379         }
1380
1381         spin_unlock_irqrestore(&subs->lock, flags);
1382         urb->transfer_buffer_length = bytes;
1383         if (period_elapsed)
1384                 snd_pcm_period_elapsed(subs->pcm_substream);
1385 }
1386
1387 /*
1388  * process after playback data complete
1389  * - decrease the delay count again
1390  */
1391 static void retire_playback_urb(struct snd_usb_substream *subs,
1392                                struct urb *urb)
1393 {
1394         unsigned long flags;
1395         struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
1396         struct snd_usb_endpoint *ep = subs->data_endpoint;
1397         int processed = urb->transfer_buffer_length / ep->stride;
1398         int est_delay;
1399
1400         /* ignore the delay accounting when processed=0 is given, i.e.
1401          * silent payloads are processed before handling the actual data
1402          */
1403         if (!processed)
1404                 return;
1405
1406         spin_lock_irqsave(&subs->lock, flags);
1407         if (!subs->last_delay)
1408                 goto out; /* short path */
1409
1410         est_delay = snd_usb_pcm_delay(subs, runtime->rate);
1411         /* update delay with exact number of samples played */
1412         if (processed > subs->last_delay)
1413                 subs->last_delay = 0;
1414         else
1415                 subs->last_delay -= processed;
1416         runtime->delay = subs->last_delay;
1417
1418         /*
1419          * Report when delay estimate is off by more than 2ms.
1420          * The error should be lower than 2ms since the estimate relies
1421          * on two reads of a counter updated every ms.
1422          */
1423         if (abs(est_delay - subs->last_delay) * 1000 > runtime->rate * 2)
1424                 dev_dbg_ratelimited(&subs->dev->dev,
1425                         "delay: estimated %d, actual %d\n",
1426                         est_delay, subs->last_delay);
1427
1428         if (!subs->running) {
1429                 /* update last_frame_number for delay counting here since
1430                  * prepare_playback_urb won't be called during pause
1431                  */
1432                 subs->last_frame_number =
1433                         usb_get_current_frame_number(subs->dev) & 0xff;
1434         }
1435
1436  out:
1437         spin_unlock_irqrestore(&subs->lock, flags);
1438 }
1439
1440 static int snd_usb_substream_playback_trigger(struct snd_pcm_substream *substream,
1441                                               int cmd)
1442 {
1443         struct snd_usb_substream *subs = substream->runtime->private_data;
1444
1445         switch (cmd) {
1446         case SNDRV_PCM_TRIGGER_START:
1447                 subs->trigger_tstamp_pending_update = true;
1448                 fallthrough;
1449         case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
1450                 snd_usb_endpoint_set_callback(subs->data_endpoint,
1451                                               prepare_playback_urb,
1452                                               retire_playback_urb,
1453                                               subs);
1454                 subs->running = 1;
1455                 dev_dbg(&subs->dev->dev, "%d:%d Start Playback PCM\n",
1456                         subs->cur_audiofmt->iface,
1457                         subs->cur_audiofmt->altsetting);
1458                 return 0;
1459         case SNDRV_PCM_TRIGGER_SUSPEND:
1460         case SNDRV_PCM_TRIGGER_STOP:
1461                 stop_endpoints(subs);
1462                 snd_usb_endpoint_set_callback(subs->data_endpoint,
1463                                               NULL, NULL, NULL);
1464                 subs->running = 0;
1465                 dev_dbg(&subs->dev->dev, "%d:%d Stop Playback PCM\n",
1466                         subs->cur_audiofmt->iface,
1467                         subs->cur_audiofmt->altsetting);
1468                 return 0;
1469         case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
1470                 /* keep retire_data_urb for delay calculation */
1471                 snd_usb_endpoint_set_callback(subs->data_endpoint,
1472                                               NULL,
1473                                               retire_playback_urb,
1474                                               subs);
1475                 subs->running = 0;
1476                 dev_dbg(&subs->dev->dev, "%d:%d Pause Playback PCM\n",
1477                         subs->cur_audiofmt->iface,
1478                         subs->cur_audiofmt->altsetting);
1479                 return 0;
1480         }
1481
1482         return -EINVAL;
1483 }
1484
1485 static int snd_usb_substream_capture_trigger(struct snd_pcm_substream *substream,
1486                                              int cmd)
1487 {
1488         int err;
1489         struct snd_usb_substream *subs = substream->runtime->private_data;
1490
1491         switch (cmd) {
1492         case SNDRV_PCM_TRIGGER_START:
1493                 err = start_endpoints(subs);
1494                 if (err < 0)
1495                         return err;
1496                 fallthrough;
1497         case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
1498                 snd_usb_endpoint_set_callback(subs->data_endpoint,
1499                                               NULL, retire_capture_urb,
1500                                               subs);
1501                 subs->running = 1;
1502                 dev_dbg(&subs->dev->dev, "%d:%d Start Capture PCM\n",
1503                         subs->cur_audiofmt->iface,
1504                         subs->cur_audiofmt->altsetting);
1505                 return 0;
1506         case SNDRV_PCM_TRIGGER_SUSPEND:
1507         case SNDRV_PCM_TRIGGER_STOP:
1508                 stop_endpoints(subs);
1509                 fallthrough;
1510         case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
1511                 snd_usb_endpoint_set_callback(subs->data_endpoint,
1512                                               NULL, NULL, NULL);
1513                 subs->running = 0;
1514                 dev_dbg(&subs->dev->dev, "%d:%d Stop Capture PCM\n",
1515                         subs->cur_audiofmt->iface,
1516                         subs->cur_audiofmt->altsetting);
1517                 return 0;
1518         }
1519
1520         return -EINVAL;
1521 }
1522
1523 static const struct snd_pcm_ops snd_usb_playback_ops = {
1524         .open =         snd_usb_pcm_open,
1525         .close =        snd_usb_pcm_close,
1526         .hw_params =    snd_usb_hw_params,
1527         .hw_free =      snd_usb_hw_free,
1528         .prepare =      snd_usb_pcm_prepare,
1529         .trigger =      snd_usb_substream_playback_trigger,
1530         .sync_stop =    snd_usb_pcm_sync_stop,
1531         .pointer =      snd_usb_pcm_pointer,
1532 };
1533
1534 static const struct snd_pcm_ops snd_usb_capture_ops = {
1535         .open =         snd_usb_pcm_open,
1536         .close =        snd_usb_pcm_close,
1537         .hw_params =    snd_usb_hw_params,
1538         .hw_free =      snd_usb_hw_free,
1539         .prepare =      snd_usb_pcm_prepare,
1540         .trigger =      snd_usb_substream_capture_trigger,
1541         .sync_stop =    snd_usb_pcm_sync_stop,
1542         .pointer =      snd_usb_pcm_pointer,
1543 };
1544
1545 void snd_usb_set_pcm_ops(struct snd_pcm *pcm, int stream)
1546 {
1547         const struct snd_pcm_ops *ops;
1548
1549         ops = stream == SNDRV_PCM_STREAM_PLAYBACK ?
1550                         &snd_usb_playback_ops : &snd_usb_capture_ops;
1551         snd_pcm_set_ops(pcm, stream, ops);
1552 }
1553
1554 void snd_usb_preallocate_buffer(struct snd_usb_substream *subs)
1555 {
1556         struct snd_pcm *pcm = subs->stream->pcm;
1557         struct snd_pcm_substream *s = pcm->streams[subs->direction].substream;
1558         struct device *dev = subs->dev->bus->sysdev;
1559
1560         if (snd_usb_use_vmalloc)
1561                 snd_pcm_set_managed_buffer(s, SNDRV_DMA_TYPE_VMALLOC,
1562                                            NULL, 0, 0);
1563         else
1564                 snd_pcm_set_managed_buffer(s, SNDRV_DMA_TYPE_DEV_SG,
1565                                            dev, 64*1024, 512*1024);
1566 }