Merge git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux
[pandora-kernel.git] / sound / usb / pcm.c
1 /*
2  *   This program is free software; you can redistribute it and/or modify
3  *   it under the terms of the GNU General Public License as published by
4  *   the Free Software Foundation; either version 2 of the License, or
5  *   (at your option) any later version.
6  *
7  *   This program is distributed in the hope that it will be useful,
8  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
9  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  *   GNU General Public License for more details.
11  *
12  *   You should have received a copy of the GNU General Public License
13  *   along with this program; if not, write to the Free Software
14  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
15  */
16
17 #include <linux/init.h>
18 #include <linux/slab.h>
19 #include <linux/ratelimit.h>
20 #include <linux/usb.h>
21 #include <linux/usb/audio.h>
22 #include <linux/usb/audio-v2.h>
23
24 #include <sound/core.h>
25 #include <sound/pcm.h>
26 #include <sound/pcm_params.h>
27
28 #include "usbaudio.h"
29 #include "card.h"
30 #include "quirks.h"
31 #include "debug.h"
32 #include "endpoint.h"
33 #include "helper.h"
34 #include "pcm.h"
35 #include "clock.h"
36 #include "power.h"
37
38 #define SUBSTREAM_FLAG_DATA_EP_STARTED  0
39 #define SUBSTREAM_FLAG_SYNC_EP_STARTED  1
40
41 /* return the estimated delay based on USB frame counters */
42 snd_pcm_uframes_t snd_usb_pcm_delay(struct snd_usb_substream *subs,
43                                     unsigned int rate)
44 {
45         int current_frame_number;
46         int frame_diff;
47         int est_delay;
48
49         current_frame_number = usb_get_current_frame_number(subs->dev);
50         /*
51          * HCD implementations use different widths, use lower 8 bits.
52          * The delay will be managed up to 256ms, which is more than
53          * enough
54          */
55         frame_diff = (current_frame_number - subs->last_frame_number) & 0xff;
56
57         /* Approximation based on number of samples per USB frame (ms),
58            some truncation for 44.1 but the estimate is good enough */
59         est_delay =  subs->last_delay - (frame_diff * rate / 1000);
60         if (est_delay < 0)
61                 est_delay = 0;
62         return est_delay;
63 }
64
65 /*
66  * return the current pcm pointer.  just based on the hwptr_done value.
67  */
68 static snd_pcm_uframes_t snd_usb_pcm_pointer(struct snd_pcm_substream *substream)
69 {
70         struct snd_usb_substream *subs;
71         unsigned int hwptr_done;
72
73         subs = (struct snd_usb_substream *)substream->runtime->private_data;
74         spin_lock(&subs->lock);
75         hwptr_done = subs->hwptr_done;
76         substream->runtime->delay = snd_usb_pcm_delay(subs,
77                                                 substream->runtime->rate);
78         spin_unlock(&subs->lock);
79         return hwptr_done / (substream->runtime->frame_bits >> 3);
80 }
81
82 /*
83  * find a matching audio format
84  */
85 static struct audioformat *find_format(struct snd_usb_substream *subs)
86 {
87         struct list_head *p;
88         struct audioformat *found = NULL;
89         int cur_attr = 0, attr;
90
91         list_for_each(p, &subs->fmt_list) {
92                 struct audioformat *fp;
93                 fp = list_entry(p, struct audioformat, list);
94                 if (!(fp->formats & (1uLL << subs->pcm_format)))
95                         continue;
96                 if (fp->channels != subs->channels)
97                         continue;
98                 if (subs->cur_rate < fp->rate_min ||
99                     subs->cur_rate > fp->rate_max)
100                         continue;
101                 if (! (fp->rates & SNDRV_PCM_RATE_CONTINUOUS)) {
102                         unsigned int i;
103                         for (i = 0; i < fp->nr_rates; i++)
104                                 if (fp->rate_table[i] == subs->cur_rate)
105                                         break;
106                         if (i >= fp->nr_rates)
107                                 continue;
108                 }
109                 attr = fp->ep_attr & USB_ENDPOINT_SYNCTYPE;
110                 if (! found) {
111                         found = fp;
112                         cur_attr = attr;
113                         continue;
114                 }
115                 /* avoid async out and adaptive in if the other method
116                  * supports the same format.
117                  * this is a workaround for the case like
118                  * M-audio audiophile USB.
119                  */
120                 if (attr != cur_attr) {
121                         if ((attr == USB_ENDPOINT_SYNC_ASYNC &&
122                              subs->direction == SNDRV_PCM_STREAM_PLAYBACK) ||
123                             (attr == USB_ENDPOINT_SYNC_ADAPTIVE &&
124                              subs->direction == SNDRV_PCM_STREAM_CAPTURE))
125                                 continue;
126                         if ((cur_attr == USB_ENDPOINT_SYNC_ASYNC &&
127                              subs->direction == SNDRV_PCM_STREAM_PLAYBACK) ||
128                             (cur_attr == USB_ENDPOINT_SYNC_ADAPTIVE &&
129                              subs->direction == SNDRV_PCM_STREAM_CAPTURE)) {
130                                 found = fp;
131                                 cur_attr = attr;
132                                 continue;
133                         }
134                 }
135                 /* find the format with the largest max. packet size */
136                 if (fp->maxpacksize > found->maxpacksize) {
137                         found = fp;
138                         cur_attr = attr;
139                 }
140         }
141         return found;
142 }
143
144 static int init_pitch_v1(struct snd_usb_audio *chip, int iface,
145                          struct usb_host_interface *alts,
146                          struct audioformat *fmt)
147 {
148         struct usb_device *dev = chip->dev;
149         unsigned int ep;
150         unsigned char data[1];
151         int err;
152
153         ep = get_endpoint(alts, 0)->bEndpointAddress;
154
155         data[0] = 1;
156         if ((err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), UAC_SET_CUR,
157                                    USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT,
158                                    UAC_EP_CS_ATTR_PITCH_CONTROL << 8, ep,
159                                    data, sizeof(data))) < 0) {
160                 snd_printk(KERN_ERR "%d:%d:%d: cannot set enable PITCH\n",
161                            dev->devnum, iface, ep);
162                 return err;
163         }
164
165         return 0;
166 }
167
168 static int init_pitch_v2(struct snd_usb_audio *chip, int iface,
169                          struct usb_host_interface *alts,
170                          struct audioformat *fmt)
171 {
172         struct usb_device *dev = chip->dev;
173         unsigned char data[1];
174         unsigned int ep;
175         int err;
176
177         ep = get_endpoint(alts, 0)->bEndpointAddress;
178
179         data[0] = 1;
180         if ((err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), UAC2_CS_CUR,
181                                    USB_TYPE_CLASS | USB_RECIP_ENDPOINT | USB_DIR_OUT,
182                                    UAC2_EP_CS_PITCH << 8, 0,
183                                    data, sizeof(data))) < 0) {
184                 snd_printk(KERN_ERR "%d:%d:%d: cannot set enable PITCH (v2)\n",
185                            dev->devnum, iface, fmt->altsetting);
186                 return err;
187         }
188
189         return 0;
190 }
191
192 /*
193  * initialize the pitch control and sample rate
194  */
195 int snd_usb_init_pitch(struct snd_usb_audio *chip, int iface,
196                        struct usb_host_interface *alts,
197                        struct audioformat *fmt)
198 {
199         struct usb_interface_descriptor *altsd = get_iface_desc(alts);
200
201         /* if endpoint doesn't have pitch control, bail out */
202         if (!(fmt->attributes & UAC_EP_CS_ATTR_PITCH_CONTROL))
203                 return 0;
204
205         switch (altsd->bInterfaceProtocol) {
206         case UAC_VERSION_1:
207         default:
208                 return init_pitch_v1(chip, iface, alts, fmt);
209
210         case UAC_VERSION_2:
211                 return init_pitch_v2(chip, iface, alts, fmt);
212         }
213 }
214
215 static int start_endpoints(struct snd_usb_substream *subs, int can_sleep)
216 {
217         int err;
218
219         if (!subs->data_endpoint)
220                 return -EINVAL;
221
222         if (!test_and_set_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags)) {
223                 struct snd_usb_endpoint *ep = subs->data_endpoint;
224
225                 snd_printdd(KERN_DEBUG "Starting data EP @%p\n", ep);
226
227                 ep->data_subs = subs;
228                 err = snd_usb_endpoint_start(ep, can_sleep);
229                 if (err < 0) {
230                         clear_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags);
231                         return err;
232                 }
233         }
234
235         if (subs->sync_endpoint &&
236             !test_and_set_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags)) {
237                 struct snd_usb_endpoint *ep = subs->sync_endpoint;
238
239                 if (subs->data_endpoint->iface != subs->sync_endpoint->iface ||
240                     subs->data_endpoint->alt_idx != subs->sync_endpoint->alt_idx) {
241                         err = usb_set_interface(subs->dev,
242                                                 subs->sync_endpoint->iface,
243                                                 subs->sync_endpoint->alt_idx);
244                         if (err < 0) {
245                                 snd_printk(KERN_ERR
246                                            "%d:%d:%d: cannot set interface (%d)\n",
247                                            subs->dev->devnum,
248                                            subs->sync_endpoint->iface,
249                                            subs->sync_endpoint->alt_idx, err);
250                                 return -EIO;
251                         }
252                 }
253
254                 snd_printdd(KERN_DEBUG "Starting sync EP @%p\n", ep);
255
256                 ep->sync_slave = subs->data_endpoint;
257                 err = snd_usb_endpoint_start(ep, can_sleep);
258                 if (err < 0) {
259                         clear_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags);
260                         return err;
261                 }
262         }
263
264         return 0;
265 }
266
267 static void stop_endpoints(struct snd_usb_substream *subs,
268                            int force, int can_sleep, int wait)
269 {
270         if (test_and_clear_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags))
271                 snd_usb_endpoint_stop(subs->sync_endpoint,
272                                       force, can_sleep, wait);
273
274         if (test_and_clear_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags))
275                 snd_usb_endpoint_stop(subs->data_endpoint,
276                                       force, can_sleep, wait);
277 }
278
279 static int deactivate_endpoints(struct snd_usb_substream *subs)
280 {
281         int reta, retb;
282
283         reta = snd_usb_endpoint_deactivate(subs->sync_endpoint);
284         retb = snd_usb_endpoint_deactivate(subs->data_endpoint);
285
286         if (reta < 0)
287                 return reta;
288
289         if (retb < 0)
290                 return retb;
291
292         return 0;
293 }
294
295 /*
296  * find a matching format and set up the interface
297  */
298 static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt)
299 {
300         struct usb_device *dev = subs->dev;
301         struct usb_host_interface *alts;
302         struct usb_interface_descriptor *altsd;
303         struct usb_interface *iface;
304         unsigned int ep, attr;
305         int is_playback = subs->direction == SNDRV_PCM_STREAM_PLAYBACK;
306         int err, implicit_fb = 0;
307
308         iface = usb_ifnum_to_if(dev, fmt->iface);
309         if (WARN_ON(!iface))
310                 return -EINVAL;
311         alts = &iface->altsetting[fmt->altset_idx];
312         altsd = get_iface_desc(alts);
313         if (WARN_ON(altsd->bAlternateSetting != fmt->altsetting))
314                 return -EINVAL;
315
316         if (fmt == subs->cur_audiofmt)
317                 return 0;
318
319         /* close the old interface */
320         if (subs->interface >= 0 && subs->interface != fmt->iface) {
321                 err = usb_set_interface(subs->dev, subs->interface, 0);
322                 if (err < 0) {
323                         snd_printk(KERN_ERR "%d:%d:%d: return to setting 0 failed (%d)\n",
324                                 dev->devnum, fmt->iface, fmt->altsetting, err);
325                         return -EIO;
326                 }
327                 subs->interface = -1;
328                 subs->altset_idx = 0;
329         }
330
331         /* set interface */
332         if (subs->interface != fmt->iface ||
333             subs->altset_idx != fmt->altset_idx) {
334                 err = usb_set_interface(dev, fmt->iface, fmt->altsetting);
335                 if (err < 0) {
336                         snd_printk(KERN_ERR "%d:%d:%d: usb_set_interface failed (%d)\n",
337                                    dev->devnum, fmt->iface, fmt->altsetting, err);
338                         return -EIO;
339                 }
340                 snd_printdd(KERN_INFO "setting usb interface %d:%d\n",
341                                 fmt->iface, fmt->altsetting);
342                 subs->interface = fmt->iface;
343                 subs->altset_idx = fmt->altset_idx;
344         }
345
346         subs->data_endpoint = snd_usb_add_endpoint(subs->stream->chip,
347                                                    alts, fmt->endpoint, subs->direction,
348                                                    SND_USB_ENDPOINT_TYPE_DATA);
349         if (!subs->data_endpoint)
350                 return -EINVAL;
351
352         /* we need a sync pipe in async OUT or adaptive IN mode */
353         /* check the number of EP, since some devices have broken
354          * descriptors which fool us.  if it has only one EP,
355          * assume it as adaptive-out or sync-in.
356          */
357         attr = fmt->ep_attr & USB_ENDPOINT_SYNCTYPE;
358
359         switch (subs->stream->chip->usb_id) {
360         case USB_ID(0x0763, 0x2080): /* M-Audio FastTrack Ultra */
361         case USB_ID(0x0763, 0x2081):
362                 if (is_playback) {
363                         implicit_fb = 1;
364                         ep = 0x81;
365                         iface = usb_ifnum_to_if(dev, 2);
366
367                         if (!iface || iface->num_altsetting == 0)
368                                 return -EINVAL;
369
370                         alts = &iface->altsetting[1];
371                         goto add_sync_ep;
372                 }
373         }
374
375         if (((is_playback && attr == USB_ENDPOINT_SYNC_ASYNC) ||
376              (!is_playback && attr == USB_ENDPOINT_SYNC_ADAPTIVE)) &&
377             altsd->bNumEndpoints >= 2) {
378                 /* check sync-pipe endpoint */
379                 /* ... and check descriptor size before accessing bSynchAddress
380                    because there is a version of the SB Audigy 2 NX firmware lacking
381                    the audio fields in the endpoint descriptors */
382                 if ((get_endpoint(alts, 1)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) != 0x01 ||
383                     (get_endpoint(alts, 1)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
384                      get_endpoint(alts, 1)->bSynchAddress != 0 &&
385                      !implicit_fb)) {
386                         snd_printk(KERN_ERR "%d:%d:%d : invalid sync pipe. bmAttributes %02x, bLength %d, bSynchAddress %02x\n",
387                                    dev->devnum, fmt->iface, fmt->altsetting,
388                                    get_endpoint(alts, 1)->bmAttributes,
389                                    get_endpoint(alts, 1)->bLength,
390                                    get_endpoint(alts, 1)->bSynchAddress);
391                         return -EINVAL;
392                 }
393                 ep = get_endpoint(alts, 1)->bEndpointAddress;
394                 if (!implicit_fb &&
395                     get_endpoint(alts, 0)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
396                     (( is_playback && ep != (unsigned int)(get_endpoint(alts, 0)->bSynchAddress | USB_DIR_IN)) ||
397                      (!is_playback && ep != (unsigned int)(get_endpoint(alts, 0)->bSynchAddress & ~USB_DIR_IN)))) {
398                         snd_printk(KERN_ERR "%d:%d:%d : invalid sync pipe. is_playback %d, ep %02x, bSynchAddress %02x\n",
399                                    dev->devnum, fmt->iface, fmt->altsetting,
400                                    is_playback, ep, get_endpoint(alts, 0)->bSynchAddress);
401                         return -EINVAL;
402                 }
403
404                 implicit_fb = (get_endpoint(alts, 1)->bmAttributes & USB_ENDPOINT_USAGE_MASK)
405                                 == USB_ENDPOINT_USAGE_IMPLICIT_FB;
406
407 add_sync_ep:
408                 subs->sync_endpoint = snd_usb_add_endpoint(subs->stream->chip,
409                                                            alts, ep, !subs->direction,
410                                                            implicit_fb ?
411                                                                 SND_USB_ENDPOINT_TYPE_DATA :
412                                                                 SND_USB_ENDPOINT_TYPE_SYNC);
413                 if (!subs->sync_endpoint)
414                         return -EINVAL;
415
416                 subs->data_endpoint->sync_master = subs->sync_endpoint;
417         }
418
419         if ((err = snd_usb_init_pitch(subs->stream->chip, fmt->iface, alts, fmt)) < 0)
420                 return err;
421
422         subs->cur_audiofmt = fmt;
423
424         snd_usb_set_format_quirk(subs, fmt);
425
426 #if 0
427         printk(KERN_DEBUG
428                "setting done: format = %d, rate = %d..%d, channels = %d\n",
429                fmt->format, fmt->rate_min, fmt->rate_max, fmt->channels);
430         printk(KERN_DEBUG
431                "  datapipe = 0x%0x, syncpipe = 0x%0x\n",
432                subs->datapipe, subs->syncpipe);
433 #endif
434
435         return 0;
436 }
437
438 /*
439  * configure endpoint params
440  *
441  * called  during initial setup and upon resume
442  */
443 static int configure_endpoint(struct snd_usb_substream *subs)
444 {
445         int ret;
446
447         mutex_lock(&subs->stream->chip->shutdown_mutex);
448         /* format changed */
449         stop_endpoints(subs, 0, 0, 0);
450         ret = snd_usb_endpoint_set_params(subs->data_endpoint,
451                                           subs->pcm_format,
452                                           subs->channels,
453                                           subs->period_bytes,
454                                           subs->cur_rate,
455                                           subs->cur_audiofmt,
456                                           subs->sync_endpoint);
457         if (ret < 0)
458                 goto unlock;
459
460         if (subs->sync_endpoint)
461                 ret = snd_usb_endpoint_set_params(subs->data_endpoint,
462                                                   subs->pcm_format,
463                                                   subs->channels,
464                                                   subs->period_bytes,
465                                                   subs->cur_rate,
466                                                   subs->cur_audiofmt,
467                                                   NULL);
468
469 unlock:
470         mutex_unlock(&subs->stream->chip->shutdown_mutex);
471         return ret;
472 }
473
474 /*
475  * hw_params callback
476  *
477  * allocate a buffer and set the given audio format.
478  *
479  * so far we use a physically linear buffer although packetize transfer
480  * doesn't need a continuous area.
481  * if sg buffer is supported on the later version of alsa, we'll follow
482  * that.
483  */
484 static int snd_usb_hw_params(struct snd_pcm_substream *substream,
485                              struct snd_pcm_hw_params *hw_params)
486 {
487         struct snd_usb_substream *subs = substream->runtime->private_data;
488         struct audioformat *fmt;
489         int ret;
490
491         ret = snd_pcm_lib_alloc_vmalloc_buffer(substream,
492                                                params_buffer_bytes(hw_params));
493         if (ret < 0)
494                 return ret;
495
496         subs->pcm_format = params_format(hw_params);
497         subs->period_bytes = params_period_bytes(hw_params);
498         subs->channels = params_channels(hw_params);
499         subs->cur_rate = params_rate(hw_params);
500
501         fmt = find_format(subs);
502         if (!fmt) {
503                 snd_printd(KERN_DEBUG "cannot set format: format = %#x, rate = %d, channels = %d\n",
504                            subs->pcm_format, subs->cur_rate, subs->channels);
505                 return -EINVAL;
506         }
507
508         if ((ret = set_format(subs, fmt)) < 0)
509                 return ret;
510
511         subs->interface = fmt->iface;
512         subs->altset_idx = fmt->altset_idx;
513         subs->need_setup_ep = true;
514
515         return 0;
516 }
517
518 /*
519  * hw_free callback
520  *
521  * reset the audio format and release the buffer
522  */
523 static int snd_usb_hw_free(struct snd_pcm_substream *substream)
524 {
525         struct snd_usb_substream *subs = substream->runtime->private_data;
526
527         subs->cur_audiofmt = NULL;
528         subs->cur_rate = 0;
529         subs->period_bytes = 0;
530         mutex_lock(&subs->stream->chip->shutdown_mutex);
531         stop_endpoints(subs, 0, 1, 1);
532         deactivate_endpoints(subs);
533         mutex_unlock(&subs->stream->chip->shutdown_mutex);
534         return snd_pcm_lib_free_vmalloc_buffer(substream);
535 }
536
537 /*
538  * prepare callback
539  *
540  * only a few subtle things...
541  */
542 static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream)
543 {
544         struct snd_pcm_runtime *runtime = substream->runtime;
545         struct snd_usb_substream *subs = runtime->private_data;
546         struct usb_host_interface *alts;
547         struct usb_interface *iface;
548         int ret;
549
550         if (! subs->cur_audiofmt) {
551                 snd_printk(KERN_ERR "usbaudio: no format is specified!\n");
552                 return -ENXIO;
553         }
554
555         if (snd_BUG_ON(!subs->data_endpoint))
556                 return -EIO;
557
558         ret = set_format(subs, subs->cur_audiofmt);
559         if (ret < 0)
560                 return ret;
561
562         iface = usb_ifnum_to_if(subs->dev, subs->cur_audiofmt->iface);
563         alts = &iface->altsetting[subs->cur_audiofmt->altset_idx];
564         ret = snd_usb_init_sample_rate(subs->stream->chip,
565                                        subs->cur_audiofmt->iface,
566                                        alts,
567                                        subs->cur_audiofmt,
568                                        subs->cur_rate);
569         if (ret < 0)
570                 return ret;
571
572         if (subs->need_setup_ep) {
573                 ret = configure_endpoint(subs);
574                 if (ret < 0)
575                         return ret;
576                 subs->need_setup_ep = false;
577         }
578
579         /* some unit conversions in runtime */
580         subs->data_endpoint->maxframesize =
581                 bytes_to_frames(runtime, subs->data_endpoint->maxpacksize);
582         subs->data_endpoint->curframesize =
583                 bytes_to_frames(runtime, subs->data_endpoint->curpacksize);
584
585         /* reset the pointer */
586         subs->hwptr_done = 0;
587         subs->transfer_done = 0;
588         subs->last_delay = 0;
589         subs->last_frame_number = 0;
590         runtime->delay = 0;
591
592         /* for playback, submit the URBs now; otherwise, the first hwptr_done
593          * updates for all URBs would happen at the same time when starting */
594         if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK)
595                 return start_endpoints(subs, 1);
596
597         return 0;
598 }
599
600 static struct snd_pcm_hardware snd_usb_hardware =
601 {
602         .info =                 SNDRV_PCM_INFO_MMAP |
603                                 SNDRV_PCM_INFO_MMAP_VALID |
604                                 SNDRV_PCM_INFO_BATCH |
605                                 SNDRV_PCM_INFO_INTERLEAVED |
606                                 SNDRV_PCM_INFO_BLOCK_TRANSFER |
607                                 SNDRV_PCM_INFO_PAUSE,
608         .buffer_bytes_max =     1024 * 1024,
609         .period_bytes_min =     64,
610         .period_bytes_max =     512 * 1024,
611         .periods_min =          2,
612         .periods_max =          1024,
613 };
614
615 static int hw_check_valid_format(struct snd_usb_substream *subs,
616                                  struct snd_pcm_hw_params *params,
617                                  struct audioformat *fp)
618 {
619         struct snd_interval *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
620         struct snd_interval *ct = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
621         struct snd_mask *fmts = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
622         struct snd_interval *pt = hw_param_interval(params, SNDRV_PCM_HW_PARAM_PERIOD_TIME);
623         struct snd_mask check_fmts;
624         unsigned int ptime;
625
626         /* check the format */
627         snd_mask_none(&check_fmts);
628         check_fmts.bits[0] = (u32)fp->formats;
629         check_fmts.bits[1] = (u32)(fp->formats >> 32);
630         snd_mask_intersect(&check_fmts, fmts);
631         if (snd_mask_empty(&check_fmts)) {
632                 hwc_debug("   > check: no supported format %d\n", fp->format);
633                 return 0;
634         }
635         /* check the channels */
636         if (fp->channels < ct->min || fp->channels > ct->max) {
637                 hwc_debug("   > check: no valid channels %d (%d/%d)\n", fp->channels, ct->min, ct->max);
638                 return 0;
639         }
640         /* check the rate is within the range */
641         if (fp->rate_min > it->max || (fp->rate_min == it->max && it->openmax)) {
642                 hwc_debug("   > check: rate_min %d > max %d\n", fp->rate_min, it->max);
643                 return 0;
644         }
645         if (fp->rate_max < it->min || (fp->rate_max == it->min && it->openmin)) {
646                 hwc_debug("   > check: rate_max %d < min %d\n", fp->rate_max, it->min);
647                 return 0;
648         }
649         /* check whether the period time is >= the data packet interval */
650         if (snd_usb_get_speed(subs->dev) != USB_SPEED_FULL) {
651                 ptime = 125 * (1 << fp->datainterval);
652                 if (ptime > pt->max || (ptime == pt->max && pt->openmax)) {
653                         hwc_debug("   > check: ptime %u > max %u\n", ptime, pt->max);
654                         return 0;
655                 }
656         }
657         return 1;
658 }
659
660 static int hw_rule_rate(struct snd_pcm_hw_params *params,
661                         struct snd_pcm_hw_rule *rule)
662 {
663         struct snd_usb_substream *subs = rule->private;
664         struct list_head *p;
665         struct snd_interval *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
666         unsigned int rmin, rmax;
667         int changed;
668
669         hwc_debug("hw_rule_rate: (%d,%d)\n", it->min, it->max);
670         changed = 0;
671         rmin = rmax = 0;
672         list_for_each(p, &subs->fmt_list) {
673                 struct audioformat *fp;
674                 fp = list_entry(p, struct audioformat, list);
675                 if (!hw_check_valid_format(subs, params, fp))
676                         continue;
677                 if (changed++) {
678                         if (rmin > fp->rate_min)
679                                 rmin = fp->rate_min;
680                         if (rmax < fp->rate_max)
681                                 rmax = fp->rate_max;
682                 } else {
683                         rmin = fp->rate_min;
684                         rmax = fp->rate_max;
685                 }
686         }
687
688         if (!changed) {
689                 hwc_debug("  --> get empty\n");
690                 it->empty = 1;
691                 return -EINVAL;
692         }
693
694         changed = 0;
695         if (it->min < rmin) {
696                 it->min = rmin;
697                 it->openmin = 0;
698                 changed = 1;
699         }
700         if (it->max > rmax) {
701                 it->max = rmax;
702                 it->openmax = 0;
703                 changed = 1;
704         }
705         if (snd_interval_checkempty(it)) {
706                 it->empty = 1;
707                 return -EINVAL;
708         }
709         hwc_debug("  --> (%d, %d) (changed = %d)\n", it->min, it->max, changed);
710         return changed;
711 }
712
713
714 static int hw_rule_channels(struct snd_pcm_hw_params *params,
715                             struct snd_pcm_hw_rule *rule)
716 {
717         struct snd_usb_substream *subs = rule->private;
718         struct list_head *p;
719         struct snd_interval *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
720         unsigned int rmin, rmax;
721         int changed;
722
723         hwc_debug("hw_rule_channels: (%d,%d)\n", it->min, it->max);
724         changed = 0;
725         rmin = rmax = 0;
726         list_for_each(p, &subs->fmt_list) {
727                 struct audioformat *fp;
728                 fp = list_entry(p, struct audioformat, list);
729                 if (!hw_check_valid_format(subs, params, fp))
730                         continue;
731                 if (changed++) {
732                         if (rmin > fp->channels)
733                                 rmin = fp->channels;
734                         if (rmax < fp->channels)
735                                 rmax = fp->channels;
736                 } else {
737                         rmin = fp->channels;
738                         rmax = fp->channels;
739                 }
740         }
741
742         if (!changed) {
743                 hwc_debug("  --> get empty\n");
744                 it->empty = 1;
745                 return -EINVAL;
746         }
747
748         changed = 0;
749         if (it->min < rmin) {
750                 it->min = rmin;
751                 it->openmin = 0;
752                 changed = 1;
753         }
754         if (it->max > rmax) {
755                 it->max = rmax;
756                 it->openmax = 0;
757                 changed = 1;
758         }
759         if (snd_interval_checkempty(it)) {
760                 it->empty = 1;
761                 return -EINVAL;
762         }
763         hwc_debug("  --> (%d, %d) (changed = %d)\n", it->min, it->max, changed);
764         return changed;
765 }
766
767 static int hw_rule_format(struct snd_pcm_hw_params *params,
768                           struct snd_pcm_hw_rule *rule)
769 {
770         struct snd_usb_substream *subs = rule->private;
771         struct list_head *p;
772         struct snd_mask *fmt = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
773         u64 fbits;
774         u32 oldbits[2];
775         int changed;
776
777         hwc_debug("hw_rule_format: %x:%x\n", fmt->bits[0], fmt->bits[1]);
778         fbits = 0;
779         list_for_each(p, &subs->fmt_list) {
780                 struct audioformat *fp;
781                 fp = list_entry(p, struct audioformat, list);
782                 if (!hw_check_valid_format(subs, params, fp))
783                         continue;
784                 fbits |= fp->formats;
785         }
786
787         oldbits[0] = fmt->bits[0];
788         oldbits[1] = fmt->bits[1];
789         fmt->bits[0] &= (u32)fbits;
790         fmt->bits[1] &= (u32)(fbits >> 32);
791         if (!fmt->bits[0] && !fmt->bits[1]) {
792                 hwc_debug("  --> get empty\n");
793                 return -EINVAL;
794         }
795         changed = (oldbits[0] != fmt->bits[0] || oldbits[1] != fmt->bits[1]);
796         hwc_debug("  --> %x:%x (changed = %d)\n", fmt->bits[0], fmt->bits[1], changed);
797         return changed;
798 }
799
800 static int hw_rule_period_time(struct snd_pcm_hw_params *params,
801                                struct snd_pcm_hw_rule *rule)
802 {
803         struct snd_usb_substream *subs = rule->private;
804         struct audioformat *fp;
805         struct snd_interval *it;
806         unsigned char min_datainterval;
807         unsigned int pmin;
808         int changed;
809
810         it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_PERIOD_TIME);
811         hwc_debug("hw_rule_period_time: (%u,%u)\n", it->min, it->max);
812         min_datainterval = 0xff;
813         list_for_each_entry(fp, &subs->fmt_list, list) {
814                 if (!hw_check_valid_format(subs, params, fp))
815                         continue;
816                 min_datainterval = min(min_datainterval, fp->datainterval);
817         }
818         if (min_datainterval == 0xff) {
819                 hwc_debug("  --> get empty\n");
820                 it->empty = 1;
821                 return -EINVAL;
822         }
823         pmin = 125 * (1 << min_datainterval);
824         changed = 0;
825         if (it->min < pmin) {
826                 it->min = pmin;
827                 it->openmin = 0;
828                 changed = 1;
829         }
830         if (snd_interval_checkempty(it)) {
831                 it->empty = 1;
832                 return -EINVAL;
833         }
834         hwc_debug("  --> (%u,%u) (changed = %d)\n", it->min, it->max, changed);
835         return changed;
836 }
837
838 /*
839  *  If the device supports unusual bit rates, does the request meet these?
840  */
841 static int snd_usb_pcm_check_knot(struct snd_pcm_runtime *runtime,
842                                   struct snd_usb_substream *subs)
843 {
844         struct audioformat *fp;
845         int *rate_list;
846         int count = 0, needs_knot = 0;
847         int err;
848
849         kfree(subs->rate_list.list);
850         subs->rate_list.list = NULL;
851
852         list_for_each_entry(fp, &subs->fmt_list, list) {
853                 if (fp->rates & SNDRV_PCM_RATE_CONTINUOUS)
854                         return 0;
855                 count += fp->nr_rates;
856                 if (fp->rates & SNDRV_PCM_RATE_KNOT)
857                         needs_knot = 1;
858         }
859         if (!needs_knot)
860                 return 0;
861
862         subs->rate_list.list = rate_list =
863                 kmalloc(sizeof(int) * count, GFP_KERNEL);
864         if (!subs->rate_list.list)
865                 return -ENOMEM;
866         subs->rate_list.count = count;
867         subs->rate_list.mask = 0;
868         count = 0;
869         list_for_each_entry(fp, &subs->fmt_list, list) {
870                 int i;
871                 for (i = 0; i < fp->nr_rates; i++)
872                         rate_list[count++] = fp->rate_table[i];
873         }
874         err = snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
875                                          &subs->rate_list);
876         if (err < 0)
877                 return err;
878
879         return 0;
880 }
881
882
883 /*
884  * set up the runtime hardware information.
885  */
886
887 static int setup_hw_info(struct snd_pcm_runtime *runtime, struct snd_usb_substream *subs)
888 {
889         struct list_head *p;
890         unsigned int pt, ptmin;
891         int param_period_time_if_needed;
892         int err;
893
894         runtime->hw.formats = subs->formats;
895
896         runtime->hw.rate_min = 0x7fffffff;
897         runtime->hw.rate_max = 0;
898         runtime->hw.channels_min = 256;
899         runtime->hw.channels_max = 0;
900         runtime->hw.rates = 0;
901         ptmin = UINT_MAX;
902         /* check min/max rates and channels */
903         list_for_each(p, &subs->fmt_list) {
904                 struct audioformat *fp;
905                 fp = list_entry(p, struct audioformat, list);
906                 runtime->hw.rates |= fp->rates;
907                 if (runtime->hw.rate_min > fp->rate_min)
908                         runtime->hw.rate_min = fp->rate_min;
909                 if (runtime->hw.rate_max < fp->rate_max)
910                         runtime->hw.rate_max = fp->rate_max;
911                 if (runtime->hw.channels_min > fp->channels)
912                         runtime->hw.channels_min = fp->channels;
913                 if (runtime->hw.channels_max < fp->channels)
914                         runtime->hw.channels_max = fp->channels;
915                 if (fp->fmt_type == UAC_FORMAT_TYPE_II && fp->frame_size > 0) {
916                         /* FIXME: there might be more than one audio formats... */
917                         runtime->hw.period_bytes_min = runtime->hw.period_bytes_max =
918                                 fp->frame_size;
919                 }
920                 pt = 125 * (1 << fp->datainterval);
921                 ptmin = min(ptmin, pt);
922         }
923         err = snd_usb_autoresume(subs->stream->chip);
924         if (err < 0)
925                 return err;
926
927         param_period_time_if_needed = SNDRV_PCM_HW_PARAM_PERIOD_TIME;
928         if (snd_usb_get_speed(subs->dev) == USB_SPEED_FULL)
929                 /* full speed devices have fixed data packet interval */
930                 ptmin = 1000;
931         if (ptmin == 1000)
932                 /* if period time doesn't go below 1 ms, no rules needed */
933                 param_period_time_if_needed = -1;
934         snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_PERIOD_TIME,
935                                      ptmin, UINT_MAX);
936
937         if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
938                                        hw_rule_rate, subs,
939                                        SNDRV_PCM_HW_PARAM_FORMAT,
940                                        SNDRV_PCM_HW_PARAM_CHANNELS,
941                                        param_period_time_if_needed,
942                                        -1)) < 0)
943                 goto rep_err;
944         if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
945                                        hw_rule_channels, subs,
946                                        SNDRV_PCM_HW_PARAM_FORMAT,
947                                        SNDRV_PCM_HW_PARAM_RATE,
948                                        param_period_time_if_needed,
949                                        -1)) < 0)
950                 goto rep_err;
951         if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_FORMAT,
952                                        hw_rule_format, subs,
953                                        SNDRV_PCM_HW_PARAM_RATE,
954                                        SNDRV_PCM_HW_PARAM_CHANNELS,
955                                        param_period_time_if_needed,
956                                        -1)) < 0)
957                 goto rep_err;
958         if (param_period_time_if_needed >= 0) {
959                 err = snd_pcm_hw_rule_add(runtime, 0,
960                                           SNDRV_PCM_HW_PARAM_PERIOD_TIME,
961                                           hw_rule_period_time, subs,
962                                           SNDRV_PCM_HW_PARAM_FORMAT,
963                                           SNDRV_PCM_HW_PARAM_CHANNELS,
964                                           SNDRV_PCM_HW_PARAM_RATE,
965                                           -1);
966                 if (err < 0)
967                         goto rep_err;
968         }
969         if ((err = snd_usb_pcm_check_knot(runtime, subs)) < 0)
970                 goto rep_err;
971         return 0;
972
973 rep_err:
974         snd_usb_autosuspend(subs->stream->chip);
975         return err;
976 }
977
978 static int snd_usb_pcm_open(struct snd_pcm_substream *substream, int direction)
979 {
980         struct snd_usb_stream *as = snd_pcm_substream_chip(substream);
981         struct snd_pcm_runtime *runtime = substream->runtime;
982         struct snd_usb_substream *subs = &as->substream[direction];
983
984         subs->interface = -1;
985         subs->altset_idx = 0;
986         runtime->hw = snd_usb_hardware;
987         runtime->private_data = subs;
988         subs->pcm_substream = substream;
989         /* runtime PM is also done there */
990         return setup_hw_info(runtime, subs);
991 }
992
993 static int snd_usb_pcm_close(struct snd_pcm_substream *substream, int direction)
994 {
995         struct snd_usb_stream *as = snd_pcm_substream_chip(substream);
996         struct snd_usb_substream *subs = &as->substream[direction];
997
998         stop_endpoints(subs, 0, 0, 0);
999
1000         if (!as->chip->shutdown && subs->interface >= 0) {
1001                 usb_set_interface(subs->dev, subs->interface, 0);
1002                 subs->interface = -1;
1003         }
1004
1005         subs->pcm_substream = NULL;
1006         snd_usb_autosuspend(subs->stream->chip);
1007
1008         return 0;
1009 }
1010
1011 /* Since a URB can handle only a single linear buffer, we must use double
1012  * buffering when the data to be transferred overflows the buffer boundary.
1013  * To avoid inconsistencies when updating hwptr_done, we use double buffering
1014  * for all URBs.
1015  */
1016 static void retire_capture_urb(struct snd_usb_substream *subs,
1017                                struct urb *urb)
1018 {
1019         struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
1020         unsigned int stride, frames, bytes, oldptr;
1021         int i, period_elapsed = 0;
1022         unsigned long flags;
1023         unsigned char *cp;
1024
1025         stride = runtime->frame_bits >> 3;
1026
1027         for (i = 0; i < urb->number_of_packets; i++) {
1028                 cp = (unsigned char *)urb->transfer_buffer + urb->iso_frame_desc[i].offset;
1029                 if (urb->iso_frame_desc[i].status && printk_ratelimit()) {
1030                         snd_printdd(KERN_ERR "frame %d active: %d\n", i, urb->iso_frame_desc[i].status);
1031                         // continue;
1032                 }
1033                 bytes = urb->iso_frame_desc[i].actual_length;
1034                 frames = bytes / stride;
1035                 if (!subs->txfr_quirk)
1036                         bytes = frames * stride;
1037                 if (bytes % (runtime->sample_bits >> 3) != 0) {
1038 #ifdef CONFIG_SND_DEBUG_VERBOSE
1039                         int oldbytes = bytes;
1040 #endif
1041                         bytes = frames * stride;
1042                         snd_printdd(KERN_ERR "Corrected urb data len. %d->%d\n",
1043                                                         oldbytes, bytes);
1044                 }
1045                 /* update the current pointer */
1046                 spin_lock_irqsave(&subs->lock, flags);
1047                 oldptr = subs->hwptr_done;
1048                 subs->hwptr_done += bytes;
1049                 if (subs->hwptr_done >= runtime->buffer_size * stride)
1050                         subs->hwptr_done -= runtime->buffer_size * stride;
1051                 frames = (bytes + (oldptr % stride)) / stride;
1052                 subs->transfer_done += frames;
1053                 if (subs->transfer_done >= runtime->period_size) {
1054                         subs->transfer_done -= runtime->period_size;
1055                         period_elapsed = 1;
1056                 }
1057                 spin_unlock_irqrestore(&subs->lock, flags);
1058                 /* copy a data chunk */
1059                 if (oldptr + bytes > runtime->buffer_size * stride) {
1060                         unsigned int bytes1 =
1061                                         runtime->buffer_size * stride - oldptr;
1062                         memcpy(runtime->dma_area + oldptr, cp, bytes1);
1063                         memcpy(runtime->dma_area, cp + bytes1, bytes - bytes1);
1064                 } else {
1065                         memcpy(runtime->dma_area + oldptr, cp, bytes);
1066                 }
1067         }
1068
1069         if (period_elapsed)
1070                 snd_pcm_period_elapsed(subs->pcm_substream);
1071 }
1072
1073 static void prepare_playback_urb(struct snd_usb_substream *subs,
1074                                  struct urb *urb)
1075 {
1076         struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
1077         struct snd_usb_endpoint *ep = subs->data_endpoint;
1078         struct snd_urb_ctx *ctx = urb->context;
1079         unsigned int counts, frames, bytes;
1080         int i, stride, period_elapsed = 0;
1081         unsigned long flags;
1082
1083         stride = runtime->frame_bits >> 3;
1084
1085         frames = 0;
1086         urb->number_of_packets = 0;
1087         spin_lock_irqsave(&subs->lock, flags);
1088         for (i = 0; i < ctx->packets; i++) {
1089                 if (ctx->packet_size[i])
1090                         counts = ctx->packet_size[i];
1091                 else
1092                         counts = snd_usb_endpoint_next_packet_size(ep);
1093
1094                 /* set up descriptor */
1095                 urb->iso_frame_desc[i].offset = frames * stride;
1096                 urb->iso_frame_desc[i].length = counts * stride;
1097                 frames += counts;
1098                 urb->number_of_packets++;
1099                 subs->transfer_done += counts;
1100                 if (subs->transfer_done >= runtime->period_size) {
1101                         subs->transfer_done -= runtime->period_size;
1102                         period_elapsed = 1;
1103                         if (subs->fmt_type == UAC_FORMAT_TYPE_II) {
1104                                 if (subs->transfer_done > 0) {
1105                                         /* FIXME: fill-max mode is not
1106                                          * supported yet */
1107                                         frames -= subs->transfer_done;
1108                                         counts -= subs->transfer_done;
1109                                         urb->iso_frame_desc[i].length =
1110                                                 counts * stride;
1111                                         subs->transfer_done = 0;
1112                                 }
1113                                 i++;
1114                                 if (i < ctx->packets) {
1115                                         /* add a transfer delimiter */
1116                                         urb->iso_frame_desc[i].offset =
1117                                                 frames * stride;
1118                                         urb->iso_frame_desc[i].length = 0;
1119                                         urb->number_of_packets++;
1120                                 }
1121                                 break;
1122                         }
1123                 }
1124                 if (period_elapsed &&
1125                     !snd_usb_endpoint_implict_feedback_sink(subs->data_endpoint)) /* finish at the period boundary */
1126                         break;
1127         }
1128         bytes = frames * stride;
1129         if (subs->hwptr_done + bytes > runtime->buffer_size * stride) {
1130                 /* err, the transferred area goes over buffer boundary. */
1131                 unsigned int bytes1 =
1132                         runtime->buffer_size * stride - subs->hwptr_done;
1133                 memcpy(urb->transfer_buffer,
1134                        runtime->dma_area + subs->hwptr_done, bytes1);
1135                 memcpy(urb->transfer_buffer + bytes1,
1136                        runtime->dma_area, bytes - bytes1);
1137         } else {
1138                 memcpy(urb->transfer_buffer,
1139                        runtime->dma_area + subs->hwptr_done, bytes);
1140         }
1141         subs->hwptr_done += bytes;
1142         if (subs->hwptr_done >= runtime->buffer_size * stride)
1143                 subs->hwptr_done -= runtime->buffer_size * stride;
1144
1145         /* update delay with exact number of samples queued */
1146         runtime->delay = subs->last_delay;
1147         runtime->delay += frames;
1148         subs->last_delay = runtime->delay;
1149
1150         /* realign last_frame_number */
1151         subs->last_frame_number = usb_get_current_frame_number(subs->dev);
1152         subs->last_frame_number &= 0xFF; /* keep 8 LSBs */
1153
1154         spin_unlock_irqrestore(&subs->lock, flags);
1155         urb->transfer_buffer_length = bytes;
1156         if (period_elapsed)
1157                 snd_pcm_period_elapsed(subs->pcm_substream);
1158 }
1159
1160 /*
1161  * process after playback data complete
1162  * - decrease the delay count again
1163  */
1164 static void retire_playback_urb(struct snd_usb_substream *subs,
1165                                struct urb *urb)
1166 {
1167         unsigned long flags;
1168         struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
1169         int stride = runtime->frame_bits >> 3;
1170         int processed = urb->transfer_buffer_length / stride;
1171         int est_delay;
1172
1173         /* ignore the delay accounting when procssed=0 is given, i.e.
1174          * silent payloads are procssed before handling the actual data
1175          */
1176         if (!processed)
1177                 return;
1178
1179         spin_lock_irqsave(&subs->lock, flags);
1180         est_delay = snd_usb_pcm_delay(subs, runtime->rate);
1181         /* update delay with exact number of samples played */
1182         if (processed > subs->last_delay)
1183                 subs->last_delay = 0;
1184         else
1185                 subs->last_delay -= processed;
1186         runtime->delay = subs->last_delay;
1187
1188         /*
1189          * Report when delay estimate is off by more than 2ms.
1190          * The error should be lower than 2ms since the estimate relies
1191          * on two reads of a counter updated every ms.
1192          */
1193         if (abs(est_delay - subs->last_delay) * 1000 > runtime->rate * 2)
1194                 snd_printk(KERN_DEBUG "delay: estimated %d, actual %d\n",
1195                         est_delay, subs->last_delay);
1196
1197         spin_unlock_irqrestore(&subs->lock, flags);
1198 }
1199
1200 static int snd_usb_playback_open(struct snd_pcm_substream *substream)
1201 {
1202         return snd_usb_pcm_open(substream, SNDRV_PCM_STREAM_PLAYBACK);
1203 }
1204
1205 static int snd_usb_playback_close(struct snd_pcm_substream *substream)
1206 {
1207         return snd_usb_pcm_close(substream, SNDRV_PCM_STREAM_PLAYBACK);
1208 }
1209
1210 static int snd_usb_capture_open(struct snd_pcm_substream *substream)
1211 {
1212         return snd_usb_pcm_open(substream, SNDRV_PCM_STREAM_CAPTURE);
1213 }
1214
1215 static int snd_usb_capture_close(struct snd_pcm_substream *substream)
1216 {
1217         return snd_usb_pcm_close(substream, SNDRV_PCM_STREAM_CAPTURE);
1218 }
1219
1220 static int snd_usb_substream_playback_trigger(struct snd_pcm_substream *substream,
1221                                               int cmd)
1222 {
1223         struct snd_usb_substream *subs = substream->runtime->private_data;
1224
1225         switch (cmd) {
1226         case SNDRV_PCM_TRIGGER_START:
1227         case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
1228                 subs->data_endpoint->prepare_data_urb = prepare_playback_urb;
1229                 subs->data_endpoint->retire_data_urb = retire_playback_urb;
1230                 subs->running = 1;
1231                 return 0;
1232         case SNDRV_PCM_TRIGGER_STOP:
1233                 stop_endpoints(subs, 0, 0, 0);
1234                 subs->running = 0;
1235                 return 0;
1236         case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
1237                 subs->data_endpoint->prepare_data_urb = NULL;
1238                 subs->data_endpoint->retire_data_urb = NULL;
1239                 subs->running = 0;
1240                 return 0;
1241         }
1242
1243         return -EINVAL;
1244 }
1245
1246 static int snd_usb_substream_capture_trigger(struct snd_pcm_substream *substream,
1247                                              int cmd)
1248 {
1249         int err;
1250         struct snd_usb_substream *subs = substream->runtime->private_data;
1251
1252         switch (cmd) {
1253         case SNDRV_PCM_TRIGGER_START:
1254                 err = start_endpoints(subs, 0);
1255                 if (err < 0)
1256                         return err;
1257
1258                 subs->data_endpoint->retire_data_urb = retire_capture_urb;
1259                 subs->running = 1;
1260                 return 0;
1261         case SNDRV_PCM_TRIGGER_STOP:
1262                 stop_endpoints(subs, 0, 0, 0);
1263                 subs->running = 0;
1264                 return 0;
1265         case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
1266                 subs->data_endpoint->retire_data_urb = NULL;
1267                 subs->running = 0;
1268                 return 0;
1269         case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
1270                 subs->data_endpoint->retire_data_urb = retire_capture_urb;
1271                 subs->running = 1;
1272                 return 0;
1273         }
1274
1275         return -EINVAL;
1276 }
1277
1278 static struct snd_pcm_ops snd_usb_playback_ops = {
1279         .open =         snd_usb_playback_open,
1280         .close =        snd_usb_playback_close,
1281         .ioctl =        snd_pcm_lib_ioctl,
1282         .hw_params =    snd_usb_hw_params,
1283         .hw_free =      snd_usb_hw_free,
1284         .prepare =      snd_usb_pcm_prepare,
1285         .trigger =      snd_usb_substream_playback_trigger,
1286         .pointer =      snd_usb_pcm_pointer,
1287         .page =         snd_pcm_lib_get_vmalloc_page,
1288         .mmap =         snd_pcm_lib_mmap_vmalloc,
1289 };
1290
1291 static struct snd_pcm_ops snd_usb_capture_ops = {
1292         .open =         snd_usb_capture_open,
1293         .close =        snd_usb_capture_close,
1294         .ioctl =        snd_pcm_lib_ioctl,
1295         .hw_params =    snd_usb_hw_params,
1296         .hw_free =      snd_usb_hw_free,
1297         .prepare =      snd_usb_pcm_prepare,
1298         .trigger =      snd_usb_substream_capture_trigger,
1299         .pointer =      snd_usb_pcm_pointer,
1300         .page =         snd_pcm_lib_get_vmalloc_page,
1301         .mmap =         snd_pcm_lib_mmap_vmalloc,
1302 };
1303
1304 void snd_usb_set_pcm_ops(struct snd_pcm *pcm, int stream)
1305 {
1306         snd_pcm_set_ops(pcm, stream,
1307                         stream == SNDRV_PCM_STREAM_PLAYBACK ?
1308                         &snd_usb_playback_ops : &snd_usb_capture_ops);
1309 }