[ALSA] usb-audio: use usb_buffer_alloc/free
[cascardo/linux.git] / sound / usb / usbaudio.c
1 /*
2  *   (Tentative) USB Audio Driver for ALSA
3  *
4  *   Main and PCM part
5  *
6  *   Copyright (c) 2002 by Takashi Iwai <tiwai@suse.de>
7  *
8  *   Many codes borrowed from audio.c by
9  *          Alan Cox (alan@lxorguk.ukuu.org.uk)
10  *          Thomas Sailer (sailer@ife.ee.ethz.ch)
11  *
12  *
13  *   This program is free software; you can redistribute it and/or modify
14  *   it under the terms of the GNU General Public License as published by
15  *   the Free Software Foundation; either version 2 of the License, or
16  *   (at your option) any later version.
17  *
18  *   This program is distributed in the hope that it will be useful,
19  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
20  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  *   GNU General Public License for more details.
22  *
23  *   You should have received a copy of the GNU General Public License
24  *   along with this program; if not, write to the Free Software
25  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
26  *
27  *
28  *  NOTES:
29  *
30  *   - async unlink should be used for avoiding the sleep inside lock.
31  *     2.4.22 usb-uhci seems buggy for async unlinking and results in
32  *     oops.  in such a cse, pass async_unlink=0 option.
33  *   - the linked URBs would be preferred but not used so far because of
34  *     the instability of unlinking.
35  *   - type II is not supported properly.  there is no device which supports
36  *     this type *correctly*.  SB extigy looks as if it supports, but it's
37  *     indeed an AC3 stream packed in SPDIF frames (i.e. no real AC3 stream).
38  */
39
40
41 #include <sound/driver.h>
42 #include <linux/bitops.h>
43 #include <linux/init.h>
44 #include <linux/interrupt.h>
45 #include <linux/list.h>
46 #include <linux/slab.h>
47 #include <linux/string.h>
48 #include <linux/usb.h>
49 #include <linux/moduleparam.h>
50 #include <sound/core.h>
51 #include <sound/info.h>
52 #include <sound/pcm.h>
53 #include <sound/pcm_params.h>
54 #include <sound/initval.h>
55
56 #include "usbaudio.h"
57
58
59 MODULE_AUTHOR("Takashi Iwai <tiwai@suse.de>");
60 MODULE_DESCRIPTION("USB Audio");
61 MODULE_LICENSE("GPL");
62 MODULE_SUPPORTED_DEVICE("{{Generic,USB Audio}}");
63
64
65 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;      /* Index 0-MAX */
66 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;       /* ID for this card */
67 static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;      /* Enable this card */
68 static int vid[SNDRV_CARDS] = { [0 ... (SNDRV_CARDS-1)] = -1 }; /* Vendor ID for this card */
69 static int pid[SNDRV_CARDS] = { [0 ... (SNDRV_CARDS-1)] = -1 }; /* Product ID for this card */
70 static int nrpacks = 4;         /* max. number of packets per urb */
71 static int async_unlink = 1;
72
73 module_param_array(index, int, NULL, 0444);
74 MODULE_PARM_DESC(index, "Index value for the USB audio adapter.");
75 module_param_array(id, charp, NULL, 0444);
76 MODULE_PARM_DESC(id, "ID string for the USB audio adapter.");
77 module_param_array(enable, bool, NULL, 0444);
78 MODULE_PARM_DESC(enable, "Enable USB audio adapter.");
79 module_param_array(vid, int, NULL, 0444);
80 MODULE_PARM_DESC(vid, "Vendor ID for the USB audio device.");
81 module_param_array(pid, int, NULL, 0444);
82 MODULE_PARM_DESC(pid, "Product ID for the USB audio device.");
83 module_param(nrpacks, int, 0644);
84 MODULE_PARM_DESC(nrpacks, "Max. number of packets per URB.");
85 module_param(async_unlink, bool, 0444);
86 MODULE_PARM_DESC(async_unlink, "Use async unlink mode.");
87
88
89 /*
90  * debug the h/w constraints
91  */
92 /* #define HW_CONST_DEBUG */
93
94
95 /*
96  *
97  */
98
99 #define MAX_PACKS       10
100 #define MAX_PACKS_HS    (MAX_PACKS * 8) /* in high speed mode */
101 #define MAX_URBS        8
102 #define SYNC_URBS       4       /* always four urbs for sync */
103 #define MIN_PACKS_URB   1       /* minimum 1 packet per urb */
104
105 typedef struct snd_usb_substream snd_usb_substream_t;
106 typedef struct snd_usb_stream snd_usb_stream_t;
107 typedef struct snd_urb_ctx snd_urb_ctx_t;
108
109 struct audioformat {
110         struct list_head list;
111         snd_pcm_format_t format;        /* format type */
112         unsigned int channels;          /* # channels */
113         unsigned int fmt_type;          /* USB audio format type (1-3) */
114         unsigned int frame_size;        /* samples per frame for non-audio */
115         int iface;                      /* interface number */
116         unsigned char altsetting;       /* corresponding alternate setting */
117         unsigned char altset_idx;       /* array index of altenate setting */
118         unsigned char attributes;       /* corresponding attributes of cs endpoint */
119         unsigned char endpoint;         /* endpoint */
120         unsigned char ep_attr;          /* endpoint attributes */
121         unsigned int maxpacksize;       /* max. packet size */
122         unsigned int rates;             /* rate bitmasks */
123         unsigned int rate_min, rate_max;        /* min/max rates */
124         unsigned int nr_rates;          /* number of rate table entries */
125         unsigned int *rate_table;       /* rate table */
126 };
127
128 struct snd_urb_ctx {
129         struct urb *urb;
130         unsigned int buffer_size;       /* size of data buffer, if data URB */
131         snd_usb_substream_t *subs;
132         int index;      /* index for urb array */
133         int packets;    /* number of packets per urb */
134 };
135
136 struct snd_urb_ops {
137         int (*prepare)(snd_usb_substream_t *subs, snd_pcm_runtime_t *runtime, struct urb *u);
138         int (*retire)(snd_usb_substream_t *subs, snd_pcm_runtime_t *runtime, struct urb *u);
139         int (*prepare_sync)(snd_usb_substream_t *subs, snd_pcm_runtime_t *runtime, struct urb *u);
140         int (*retire_sync)(snd_usb_substream_t *subs, snd_pcm_runtime_t *runtime, struct urb *u);
141 };
142
143 struct snd_usb_substream {
144         snd_usb_stream_t *stream;
145         struct usb_device *dev;
146         snd_pcm_substream_t *pcm_substream;
147         int direction;  /* playback or capture */
148         int interface;  /* current interface */
149         int endpoint;   /* assigned endpoint */
150         struct audioformat *cur_audiofmt;       /* current audioformat pointer (for hw_params callback) */
151         unsigned int cur_rate;          /* current rate (for hw_params callback) */
152         unsigned int period_bytes;      /* current period bytes (for hw_params callback) */
153         unsigned int format;     /* USB data format */
154         unsigned int datapipe;   /* the data i/o pipe */
155         unsigned int syncpipe;   /* 1 - async out or adaptive in */
156         unsigned int datainterval;      /* log_2 of data packet interval */
157         unsigned int syncinterval;  /* P for adaptive mode, 0 otherwise */
158         unsigned int freqn;      /* nominal sampling rate in fs/fps in Q16.16 format */
159         unsigned int freqm;      /* momentary sampling rate in fs/fps in Q16.16 format */
160         unsigned int freqmax;    /* maximum sampling rate, used for buffer management */
161         unsigned int phase;      /* phase accumulator */
162         unsigned int maxpacksize;       /* max packet size in bytes */
163         unsigned int maxframesize;      /* max packet size in frames */
164         unsigned int curpacksize;       /* current packet size in bytes (for capture) */
165         unsigned int curframesize;      /* current packet size in frames (for capture) */
166         unsigned int fill_max: 1;       /* fill max packet size always */
167         unsigned int fmt_type;          /* USB audio format type (1-3) */
168         unsigned int packs_per_ms;      /* packets per millisecond (for playback) */
169
170         unsigned int running: 1;        /* running status */
171
172         unsigned int hwptr_done;                        /* processed frame position in the buffer */
173         unsigned int transfer_done;             /* processed frames since last period update */
174         unsigned long active_mask;      /* bitmask of active urbs */
175         unsigned long unlink_mask;      /* bitmask of unlinked urbs */
176
177         unsigned int nurbs;                     /* # urbs */
178         snd_urb_ctx_t dataurb[MAX_URBS];        /* data urb table */
179         snd_urb_ctx_t syncurb[SYNC_URBS];       /* sync urb table */
180         char *syncbuf;                          /* sync buffer for all sync URBs */
181         dma_addr_t sync_dma;                    /* DMA address of syncbuf */
182
183         u64 formats;                    /* format bitmasks (all or'ed) */
184         unsigned int num_formats;               /* number of supported audio formats (list) */
185         struct list_head fmt_list;      /* format list */
186         spinlock_t lock;
187         struct tasklet_struct start_period_elapsed;     /* for start trigger */
188
189         struct snd_urb_ops ops;         /* callbacks (must be filled at init) */
190 };
191
192
193 struct snd_usb_stream {
194         snd_usb_audio_t *chip;
195         snd_pcm_t *pcm;
196         int pcm_index;
197         unsigned int fmt_type;          /* USB audio format type (1-3) */
198         snd_usb_substream_t substream[2];
199         struct list_head list;
200 };
201
202
203 /*
204  * we keep the snd_usb_audio_t instances by ourselves for merging
205  * the all interfaces on the same card as one sound device.
206  */
207
208 static DECLARE_MUTEX(register_mutex);
209 static snd_usb_audio_t *usb_chip[SNDRV_CARDS];
210
211
212 /*
213  * convert a sampling rate into our full speed format (fs/1000 in Q16.16)
214  * this will overflow at approx 524 kHz
215  */
216 static inline unsigned get_usb_full_speed_rate(unsigned int rate)
217 {
218         return ((rate << 13) + 62) / 125;
219 }
220
221 /*
222  * convert a sampling rate into USB high speed format (fs/8000 in Q16.16)
223  * this will overflow at approx 4 MHz
224  */
225 static inline unsigned get_usb_high_speed_rate(unsigned int rate)
226 {
227         return ((rate << 10) + 62) / 125;
228 }
229
230 /* convert our full speed USB rate into sampling rate in Hz */
231 static inline unsigned get_full_speed_hz(unsigned int usb_rate)
232 {
233         return (usb_rate * 125 + (1 << 12)) >> 13;
234 }
235
236 /* convert our high speed USB rate into sampling rate in Hz */
237 static inline unsigned get_high_speed_hz(unsigned int usb_rate)
238 {
239         return (usb_rate * 125 + (1 << 9)) >> 10;
240 }
241
242
243 /*
244  * prepare urb for full speed capture sync pipe
245  *
246  * fill the length and offset of each urb descriptor.
247  * the fixed 10.14 frequency is passed through the pipe.
248  */
249 static int prepare_capture_sync_urb(snd_usb_substream_t *subs,
250                                     snd_pcm_runtime_t *runtime,
251                                     struct urb *urb)
252 {
253         unsigned char *cp = urb->transfer_buffer;
254         snd_urb_ctx_t *ctx = (snd_urb_ctx_t *)urb->context;
255
256         urb->dev = ctx->subs->dev; /* we need to set this at each time */
257         urb->iso_frame_desc[0].length = 3;
258         urb->iso_frame_desc[0].offset = 0;
259         cp[0] = subs->freqn >> 2;
260         cp[1] = subs->freqn >> 10;
261         cp[2] = subs->freqn >> 18;
262         return 0;
263 }
264
265 /*
266  * prepare urb for high speed capture sync pipe
267  *
268  * fill the length and offset of each urb descriptor.
269  * the fixed 12.13 frequency is passed as 16.16 through the pipe.
270  */
271 static int prepare_capture_sync_urb_hs(snd_usb_substream_t *subs,
272                                        snd_pcm_runtime_t *runtime,
273                                        struct urb *urb)
274 {
275         unsigned char *cp = urb->transfer_buffer;
276         snd_urb_ctx_t *ctx = (snd_urb_ctx_t *)urb->context;
277
278         urb->dev = ctx->subs->dev; /* we need to set this at each time */
279         urb->iso_frame_desc[0].length = 4;
280         urb->iso_frame_desc[0].offset = 0;
281         cp[0] = subs->freqn;
282         cp[1] = subs->freqn >> 8;
283         cp[2] = subs->freqn >> 16;
284         cp[3] = subs->freqn >> 24;
285         return 0;
286 }
287
288 /*
289  * process after capture sync complete
290  * - nothing to do
291  */
292 static int retire_capture_sync_urb(snd_usb_substream_t *subs,
293                                    snd_pcm_runtime_t *runtime,
294                                    struct urb *urb)
295 {
296         return 0;
297 }
298
299 /*
300  * prepare urb for capture data pipe
301  *
302  * fill the offset and length of each descriptor.
303  *
304  * we use a temporary buffer to write the captured data.
305  * since the length of written data is determined by host, we cannot
306  * write onto the pcm buffer directly...  the data is thus copied
307  * later at complete callback to the global buffer.
308  */
309 static int prepare_capture_urb(snd_usb_substream_t *subs,
310                                snd_pcm_runtime_t *runtime,
311                                struct urb *urb)
312 {
313         int i, offs;
314         snd_urb_ctx_t *ctx = (snd_urb_ctx_t *)urb->context;
315
316         offs = 0;
317         urb->dev = ctx->subs->dev; /* we need to set this at each time */
318         for (i = 0; i < ctx->packets; i++) {
319                 urb->iso_frame_desc[i].offset = offs;
320                 urb->iso_frame_desc[i].length = subs->curpacksize;
321                 offs += subs->curpacksize;
322         }
323         urb->transfer_buffer_length = offs;
324         urb->number_of_packets = ctx->packets;
325 #if 0 // for check
326         if (! urb->bandwidth) {
327                 int bustime;
328                 bustime = usb_check_bandwidth(urb->dev, urb);
329                 if (bustime < 0)
330                         return bustime;
331                 printk("urb %d: bandwidth = %d (packets = %d)\n", ctx->index, bustime, urb->number_of_packets);
332                 usb_claim_bandwidth(urb->dev, urb, bustime, 1);
333         }
334 #endif // for check
335         return 0;
336 }
337
338 /*
339  * process after capture complete
340  *
341  * copy the data from each desctiptor to the pcm buffer, and
342  * update the current position.
343  */
344 static int retire_capture_urb(snd_usb_substream_t *subs,
345                               snd_pcm_runtime_t *runtime,
346                               struct urb *urb)
347 {
348         unsigned long flags;
349         unsigned char *cp;
350         int i;
351         unsigned int stride, len, oldptr;
352         int period_elapsed = 0;
353
354         stride = runtime->frame_bits >> 3;
355
356         for (i = 0; i < urb->number_of_packets; i++) {
357                 cp = (unsigned char *)urb->transfer_buffer + urb->iso_frame_desc[i].offset;
358                 if (urb->iso_frame_desc[i].status) {
359                         snd_printd(KERN_ERR "frame %d active: %d\n", i, urb->iso_frame_desc[i].status);
360                         // continue;
361                 }
362                 len = urb->iso_frame_desc[i].actual_length / stride;
363                 if (! len)
364                         continue;
365                 /* update the current pointer */
366                 spin_lock_irqsave(&subs->lock, flags);
367                 oldptr = subs->hwptr_done;
368                 subs->hwptr_done += len;
369                 if (subs->hwptr_done >= runtime->buffer_size)
370                         subs->hwptr_done -= runtime->buffer_size;
371                 subs->transfer_done += len;
372                 if (subs->transfer_done >= runtime->period_size) {
373                         subs->transfer_done -= runtime->period_size;
374                         period_elapsed = 1;
375                 }
376                 spin_unlock_irqrestore(&subs->lock, flags);
377                 /* copy a data chunk */
378                 if (oldptr + len > runtime->buffer_size) {
379                         unsigned int cnt = runtime->buffer_size - oldptr;
380                         unsigned int blen = cnt * stride;
381                         memcpy(runtime->dma_area + oldptr * stride, cp, blen);
382                         memcpy(runtime->dma_area, cp + blen, len * stride - blen);
383                 } else {
384                         memcpy(runtime->dma_area + oldptr * stride, cp, len * stride);
385                 }
386         }
387         if (period_elapsed)
388                 snd_pcm_period_elapsed(subs->pcm_substream);
389         return 0;
390 }
391
392
393 /*
394  * prepare urb for full speed playback sync pipe
395  *
396  * set up the offset and length to receive the current frequency.
397  */
398
399 static int prepare_playback_sync_urb(snd_usb_substream_t *subs,
400                                      snd_pcm_runtime_t *runtime,
401                                      struct urb *urb)
402 {
403         snd_urb_ctx_t *ctx = (snd_urb_ctx_t *)urb->context;
404
405         urb->dev = ctx->subs->dev; /* we need to set this at each time */
406         urb->iso_frame_desc[0].length = 3;
407         urb->iso_frame_desc[0].offset = 0;
408         return 0;
409 }
410
411 /*
412  * prepare urb for high speed playback sync pipe
413  *
414  * set up the offset and length to receive the current frequency.
415  */
416
417 static int prepare_playback_sync_urb_hs(snd_usb_substream_t *subs,
418                                         snd_pcm_runtime_t *runtime,
419                                         struct urb *urb)
420 {
421         snd_urb_ctx_t *ctx = (snd_urb_ctx_t *)urb->context;
422
423         urb->dev = ctx->subs->dev; /* we need to set this at each time */
424         urb->iso_frame_desc[0].length = 4;
425         urb->iso_frame_desc[0].offset = 0;
426         return 0;
427 }
428
429 /*
430  * process after full speed playback sync complete
431  *
432  * retrieve the current 10.14 frequency from pipe, and set it.
433  * the value is referred in prepare_playback_urb().
434  */
435 static int retire_playback_sync_urb(snd_usb_substream_t *subs,
436                                     snd_pcm_runtime_t *runtime,
437                                     struct urb *urb)
438 {
439         unsigned int f;
440         unsigned long flags;
441
442         if (urb->iso_frame_desc[0].status == 0 &&
443             urb->iso_frame_desc[0].actual_length == 3) {
444                 f = combine_triple((u8*)urb->transfer_buffer) << 2;
445                 if (f >= subs->freqn - subs->freqn / 8 && f <= subs->freqmax) {
446                         spin_lock_irqsave(&subs->lock, flags);
447                         subs->freqm = f;
448                         spin_unlock_irqrestore(&subs->lock, flags);
449                 }
450         }
451
452         return 0;
453 }
454
455 /*
456  * process after high speed playback sync complete
457  *
458  * retrieve the current 12.13 frequency from pipe, and set it.
459  * the value is referred in prepare_playback_urb().
460  */
461 static int retire_playback_sync_urb_hs(snd_usb_substream_t *subs,
462                                        snd_pcm_runtime_t *runtime,
463                                        struct urb *urb)
464 {
465         unsigned int f;
466         unsigned long flags;
467
468         if (urb->iso_frame_desc[0].status == 0 &&
469             urb->iso_frame_desc[0].actual_length == 4) {
470                 f = combine_quad((u8*)urb->transfer_buffer) & 0x0fffffff;
471                 if (f >= subs->freqn - subs->freqn / 8 && f <= subs->freqmax) {
472                         spin_lock_irqsave(&subs->lock, flags);
473                         subs->freqm = f;
474                         spin_unlock_irqrestore(&subs->lock, flags);
475                 }
476         }
477
478         return 0;
479 }
480
481 /*
482  * prepare urb for playback data pipe
483  *
484  * Since a URB can handle only a single linear buffer, we must use double
485  * buffering when the data to be transferred overflows the buffer boundary.
486  * To avoid inconsistencies when updating hwptr_done, we use double buffering
487  * for all URBs.
488  */
489 static int prepare_playback_urb(snd_usb_substream_t *subs,
490                                 snd_pcm_runtime_t *runtime,
491                                 struct urb *urb)
492 {
493         int i, stride, offs;
494         unsigned int counts;
495         unsigned long flags;
496         int period_elapsed = 0;
497         snd_urb_ctx_t *ctx = (snd_urb_ctx_t *)urb->context;
498
499         stride = runtime->frame_bits >> 3;
500
501         offs = 0;
502         urb->dev = ctx->subs->dev; /* we need to set this at each time */
503         urb->number_of_packets = 0;
504         spin_lock_irqsave(&subs->lock, flags);
505         for (i = 0; i < ctx->packets; i++) {
506                 /* calculate the size of a packet */
507                 if (subs->fill_max)
508                         counts = subs->maxframesize; /* fixed */
509                 else {
510                         subs->phase = (subs->phase & 0xffff)
511                                 + (subs->freqm << subs->datainterval);
512                         counts = subs->phase >> 16;
513                         if (counts > subs->maxframesize)
514                                 counts = subs->maxframesize;
515                 }
516                 /* set up descriptor */
517                 urb->iso_frame_desc[i].offset = offs * stride;
518                 urb->iso_frame_desc[i].length = counts * stride;
519                 offs += counts;
520                 urb->number_of_packets++;
521                 subs->transfer_done += counts;
522                 if (subs->transfer_done >= runtime->period_size) {
523                         subs->transfer_done -= runtime->period_size;
524                         period_elapsed = 1;
525                         if (subs->fmt_type == USB_FORMAT_TYPE_II) {
526                                 if (subs->transfer_done > 0) {
527                                         /* FIXME: fill-max mode is not
528                                          * supported yet */
529                                         offs -= subs->transfer_done;
530                                         counts -= subs->transfer_done;
531                                         urb->iso_frame_desc[i].length =
532                                                 counts * stride;
533                                         subs->transfer_done = 0;
534                                 }
535                                 i++;
536                                 if (i < ctx->packets) {
537                                         /* add a transfer delimiter */
538                                         urb->iso_frame_desc[i].offset =
539                                                 offs * stride;
540                                         urb->iso_frame_desc[i].length = 0;
541                                         urb->number_of_packets++;
542                                 }
543                                 break;
544                         }
545                 }
546                 /* finish at the frame boundary at/after the period boundary */
547                 if (period_elapsed &&
548                     (i & (subs->packs_per_ms - 1)) == subs->packs_per_ms - 1)
549                         break;
550         }
551         if (subs->hwptr_done + offs > runtime->buffer_size) {
552                 /* err, the transferred area goes over buffer boundary. */
553                 unsigned int len = runtime->buffer_size - subs->hwptr_done;
554                 memcpy(urb->transfer_buffer,
555                        runtime->dma_area + subs->hwptr_done * stride,
556                        len * stride);
557                 memcpy(urb->transfer_buffer + len * stride,
558                        runtime->dma_area,
559                        (offs - len) * stride);
560         } else {
561                 memcpy(urb->transfer_buffer,
562                        runtime->dma_area + subs->hwptr_done * stride,
563                        offs * stride);
564         }
565         subs->hwptr_done += offs;
566         if (subs->hwptr_done >= runtime->buffer_size)
567                 subs->hwptr_done -= runtime->buffer_size;
568         spin_unlock_irqrestore(&subs->lock, flags);
569         urb->transfer_buffer_length = offs * stride;
570         if (period_elapsed) {
571                 if (likely(subs->running))
572                         snd_pcm_period_elapsed(subs->pcm_substream);
573                 else
574                         tasklet_hi_schedule(&subs->start_period_elapsed);
575         }
576         return 0;
577 }
578
579 /*
580  * process after playback data complete
581  * - nothing to do
582  */
583 static int retire_playback_urb(snd_usb_substream_t *subs,
584                                snd_pcm_runtime_t *runtime,
585                                struct urb *urb)
586 {
587         return 0;
588 }
589
590 /*
591  * Delay the snd_pcm_period_elapsed() call until after the start trigger
592  * callback so that we're not longer in the substream's lock.
593  */
594 static void start_period_elapsed(unsigned long data)
595 {
596         snd_usb_substream_t *subs = (snd_usb_substream_t *)data;
597         snd_pcm_period_elapsed(subs->pcm_substream);
598 }
599
600
601 /*
602  */
603 static struct snd_urb_ops audio_urb_ops[2] = {
604         {
605                 .prepare =      prepare_playback_urb,
606                 .retire =       retire_playback_urb,
607                 .prepare_sync = prepare_playback_sync_urb,
608                 .retire_sync =  retire_playback_sync_urb,
609         },
610         {
611                 .prepare =      prepare_capture_urb,
612                 .retire =       retire_capture_urb,
613                 .prepare_sync = prepare_capture_sync_urb,
614                 .retire_sync =  retire_capture_sync_urb,
615         },
616 };
617
618 static struct snd_urb_ops audio_urb_ops_high_speed[2] = {
619         {
620                 .prepare =      prepare_playback_urb,
621                 .retire =       retire_playback_urb,
622                 .prepare_sync = prepare_playback_sync_urb_hs,
623                 .retire_sync =  retire_playback_sync_urb_hs,
624         },
625         {
626                 .prepare =      prepare_capture_urb,
627                 .retire =       retire_capture_urb,
628                 .prepare_sync = prepare_capture_sync_urb_hs,
629                 .retire_sync =  retire_capture_sync_urb,
630         },
631 };
632
633 /*
634  * complete callback from data urb
635  */
636 static void snd_complete_urb(struct urb *urb, struct pt_regs *regs)
637 {
638         snd_urb_ctx_t *ctx = (snd_urb_ctx_t *)urb->context;
639         snd_usb_substream_t *subs = ctx->subs;
640         snd_pcm_substream_t *substream = ctx->subs->pcm_substream;
641         int err = 0;
642
643         if ((subs->running && subs->ops.retire(subs, substream->runtime, urb)) ||
644             ! subs->running || /* can be stopped during retire callback */
645             (err = subs->ops.prepare(subs, substream->runtime, urb)) < 0 ||
646             (err = usb_submit_urb(urb, GFP_ATOMIC)) < 0) {
647                 clear_bit(ctx->index, &subs->active_mask);
648                 if (err < 0) {
649                         snd_printd(KERN_ERR "cannot submit urb (err = %d)\n", err);
650                         snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
651                 }
652         }
653 }
654
655
656 /*
657  * complete callback from sync urb
658  */
659 static void snd_complete_sync_urb(struct urb *urb, struct pt_regs *regs)
660 {
661         snd_urb_ctx_t *ctx = (snd_urb_ctx_t *)urb->context;
662         snd_usb_substream_t *subs = ctx->subs;
663         snd_pcm_substream_t *substream = ctx->subs->pcm_substream;
664         int err = 0;
665
666         if ((subs->running && subs->ops.retire_sync(subs, substream->runtime, urb)) ||
667             ! subs->running || /* can be stopped during retire callback */
668             (err = subs->ops.prepare_sync(subs, substream->runtime, urb)) < 0 ||
669             (err = usb_submit_urb(urb, GFP_ATOMIC)) < 0) {
670                 clear_bit(ctx->index + 16, &subs->active_mask);
671                 if (err < 0) {
672                         snd_printd(KERN_ERR "cannot submit sync urb (err = %d)\n", err);
673                         snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
674                 }
675         }
676 }
677
678
679 /*
680  * unlink active urbs.
681  */
682 static int deactivate_urbs(snd_usb_substream_t *subs, int force, int can_sleep)
683 {
684         unsigned int i;
685         int async;
686
687         subs->running = 0;
688
689         if (!force && subs->stream->chip->shutdown) /* to be sure... */
690                 return -EBADFD;
691
692         async = !can_sleep && async_unlink;
693
694         if (! async && in_interrupt())
695                 return 0;
696
697         for (i = 0; i < subs->nurbs; i++) {
698                 if (test_bit(i, &subs->active_mask)) {
699                         if (! test_and_set_bit(i, &subs->unlink_mask)) {
700                                 struct urb *u = subs->dataurb[i].urb;
701                                 if (async) {
702                                         u->transfer_flags |= URB_ASYNC_UNLINK;
703                                         usb_unlink_urb(u);
704                                 } else
705                                         usb_kill_urb(u);
706                         }
707                 }
708         }
709         if (subs->syncpipe) {
710                 for (i = 0; i < SYNC_URBS; i++) {
711                         if (test_bit(i+16, &subs->active_mask)) {
712                                 if (! test_and_set_bit(i+16, &subs->unlink_mask)) {
713                                         struct urb *u = subs->syncurb[i].urb;
714                                         if (async) {
715                                                 u->transfer_flags |= URB_ASYNC_UNLINK;
716                                                 usb_unlink_urb(u);
717                                         } else
718                                                 usb_kill_urb(u);
719                                 }
720                         }
721                 }
722         }
723         return 0;
724 }
725
726
727 /*
728  * set up and start data/sync urbs
729  */
730 static int start_urbs(snd_usb_substream_t *subs, snd_pcm_runtime_t *runtime)
731 {
732         unsigned int i;
733         int err;
734
735         if (subs->stream->chip->shutdown)
736                 return -EBADFD;
737
738         for (i = 0; i < subs->nurbs; i++) {
739                 snd_assert(subs->dataurb[i].urb, return -EINVAL);
740                 if (subs->ops.prepare(subs, runtime, subs->dataurb[i].urb) < 0) {
741                         snd_printk(KERN_ERR "cannot prepare datapipe for urb %d\n", i);
742                         goto __error;
743                 }
744         }
745         if (subs->syncpipe) {
746                 for (i = 0; i < SYNC_URBS; i++) {
747                         snd_assert(subs->syncurb[i].urb, return -EINVAL);
748                         if (subs->ops.prepare_sync(subs, runtime, subs->syncurb[i].urb) < 0) {
749                                 snd_printk(KERN_ERR "cannot prepare syncpipe for urb %d\n", i);
750                                 goto __error;
751                         }
752                 }
753         }
754
755         subs->active_mask = 0;
756         subs->unlink_mask = 0;
757         subs->running = 1;
758         for (i = 0; i < subs->nurbs; i++) {
759                 if ((err = usb_submit_urb(subs->dataurb[i].urb, GFP_ATOMIC)) < 0) {
760                         snd_printk(KERN_ERR "cannot submit datapipe for urb %d, err = %d\n", i, err);
761                         goto __error;
762                 }
763                 set_bit(i, &subs->active_mask);
764         }
765         if (subs->syncpipe) {
766                 for (i = 0; i < SYNC_URBS; i++) {
767                         if ((err = usb_submit_urb(subs->syncurb[i].urb, GFP_ATOMIC)) < 0) {
768                                 snd_printk(KERN_ERR "cannot submit syncpipe for urb %d, err = %d\n", i, err);
769                                 goto __error;
770                         }
771                         set_bit(i + 16, &subs->active_mask);
772                 }
773         }
774         return 0;
775
776  __error:
777         // snd_pcm_stop(subs->pcm_substream, SNDRV_PCM_STATE_XRUN);
778         deactivate_urbs(subs, 0, 0);
779         return -EPIPE;
780 }
781
782
783 /*
784  *  wait until all urbs are processed.
785  */
786 static int wait_clear_urbs(snd_usb_substream_t *subs)
787 {
788         unsigned long end_time = jiffies + msecs_to_jiffies(1000);
789         unsigned int i;
790         int alive;
791
792         do {
793                 alive = 0;
794                 for (i = 0; i < subs->nurbs; i++) {
795                         if (test_bit(i, &subs->active_mask))
796                                 alive++;
797                 }
798                 if (subs->syncpipe) {
799                         for (i = 0; i < SYNC_URBS; i++) {
800                                 if (test_bit(i + 16, &subs->active_mask))
801                                         alive++;
802                         }
803                 }
804                 if (! alive)
805                         break;
806                 set_current_state(TASK_UNINTERRUPTIBLE);
807                 schedule_timeout(1);
808         } while (time_before(jiffies, end_time));
809         if (alive)
810                 snd_printk(KERN_ERR "timeout: still %d active urbs..\n", alive);
811         return 0;
812 }
813
814
815 /*
816  * return the current pcm pointer.  just return the hwptr_done value.
817  */
818 static snd_pcm_uframes_t snd_usb_pcm_pointer(snd_pcm_substream_t *substream)
819 {
820         snd_usb_substream_t *subs;
821         snd_pcm_uframes_t hwptr_done;
822         
823         subs = (snd_usb_substream_t *)substream->runtime->private_data;
824         spin_lock(&subs->lock);
825         hwptr_done = subs->hwptr_done;
826         spin_unlock(&subs->lock);
827         return hwptr_done;
828 }
829
830
831 /*
832  * start/stop substream
833  */
834 static int snd_usb_pcm_trigger(snd_pcm_substream_t *substream, int cmd)
835 {
836         snd_usb_substream_t *subs = (snd_usb_substream_t *)substream->runtime->private_data;
837         int err;
838
839         switch (cmd) {
840         case SNDRV_PCM_TRIGGER_START:
841                 err = start_urbs(subs, substream->runtime);
842                 break;
843         case SNDRV_PCM_TRIGGER_STOP:
844                 err = deactivate_urbs(subs, 0, 0);
845                 break;
846         default:
847                 err = -EINVAL;
848                 break;
849         }
850         return err < 0 ? err : 0;
851 }
852
853
854 /*
855  * release a urb data
856  */
857 static void release_urb_ctx(snd_urb_ctx_t *u)
858 {
859         if (u->urb) {
860                 if (u->buffer_size)
861                         usb_buffer_free(u->subs->dev, u->buffer_size,
862                                         u->urb->transfer_buffer,
863                                         u->urb->transfer_dma);
864                 usb_free_urb(u->urb);
865                 u->urb = NULL;
866         }
867 }
868
869 /*
870  * release a substream
871  */
872 static void release_substream_urbs(snd_usb_substream_t *subs, int force)
873 {
874         int i;
875
876         /* stop urbs (to be sure) */
877         deactivate_urbs(subs, force, 1);
878         wait_clear_urbs(subs);
879
880         for (i = 0; i < MAX_URBS; i++)
881                 release_urb_ctx(&subs->dataurb[i]);
882         for (i = 0; i < SYNC_URBS; i++)
883                 release_urb_ctx(&subs->syncurb[i]);
884         usb_buffer_free(subs->dev, SYNC_URBS * 4,
885                         subs->syncbuf, subs->sync_dma);
886         subs->syncbuf = NULL;
887         subs->nurbs = 0;
888 }
889
890 /*
891  * initialize a substream for plaback/capture
892  */
893 static int init_substream_urbs(snd_usb_substream_t *subs, unsigned int period_bytes,
894                                unsigned int rate, unsigned int frame_bits)
895 {
896         unsigned int maxsize, n, i;
897         int is_playback = subs->direction == SNDRV_PCM_STREAM_PLAYBACK;
898         unsigned int npacks[MAX_URBS], urb_packs, total_packs, packs_per_ms;
899
900         /* calculate the frequency in 16.16 format */
901         if (snd_usb_get_speed(subs->dev) == USB_SPEED_FULL)
902                 subs->freqn = get_usb_full_speed_rate(rate);
903         else
904                 subs->freqn = get_usb_high_speed_rate(rate);
905         subs->freqm = subs->freqn;
906         /* calculate max. frequency */
907         if (subs->maxpacksize) {
908                 /* whatever fits into a max. size packet */
909                 maxsize = subs->maxpacksize;
910                 subs->freqmax = (maxsize / (frame_bits >> 3))
911                                 << (16 - subs->datainterval);
912         } else {
913                 /* no max. packet size: just take 25% higher than nominal */
914                 subs->freqmax = subs->freqn + (subs->freqn >> 2);
915                 maxsize = ((subs->freqmax + 0xffff) * (frame_bits >> 3))
916                                 >> (16 - subs->datainterval);
917         }
918         subs->phase = 0;
919
920         if (subs->fill_max)
921                 subs->curpacksize = subs->maxpacksize;
922         else
923                 subs->curpacksize = maxsize;
924
925         if (snd_usb_get_speed(subs->dev) == USB_SPEED_HIGH)
926                 packs_per_ms = 8 >> subs->datainterval;
927         else
928                 packs_per_ms = 1;
929         subs->packs_per_ms = packs_per_ms;
930
931         if (is_playback) {
932                 urb_packs = nrpacks;
933                 urb_packs = max(urb_packs, (unsigned int)MIN_PACKS_URB);
934                 urb_packs = min(urb_packs, (unsigned int)MAX_PACKS);
935         } else
936                 urb_packs = 1;
937         urb_packs *= packs_per_ms;
938
939         /* decide how many packets to be used */
940         if (is_playback) {
941                 unsigned int minsize;
942                 /* determine how small a packet can be */
943                 minsize = (subs->freqn >> (16 - subs->datainterval))
944                           * (frame_bits >> 3);
945                 /* with sync from device, assume it can be 12% lower */
946                 if (subs->syncpipe)
947                         minsize -= minsize >> 3;
948                 minsize = max(minsize, 1u);
949                 total_packs = (period_bytes + minsize - 1) / minsize;
950                 /* round up to multiple of packs_per_ms */
951                 total_packs = (total_packs + packs_per_ms - 1)
952                                 & ~(packs_per_ms - 1);
953                 /* we need at least two URBs for queueing */
954                 if (total_packs < 2 * MIN_PACKS_URB * packs_per_ms)
955                         total_packs = 2 * MIN_PACKS_URB * packs_per_ms;
956         } else {
957                 total_packs = MAX_URBS * urb_packs;
958         }
959         subs->nurbs = (total_packs + urb_packs - 1) / urb_packs;
960         if (subs->nurbs > MAX_URBS) {
961                 /* too much... */
962                 subs->nurbs = MAX_URBS;
963                 total_packs = MAX_URBS * urb_packs;
964         }
965         n = total_packs;
966         for (i = 0; i < subs->nurbs; i++) {
967                 npacks[i] = n > urb_packs ? urb_packs : n;
968                 n -= urb_packs;
969         }
970         if (subs->nurbs <= 1) {
971                 /* too little - we need at least two packets
972                  * to ensure contiguous playback/capture
973                  */
974                 subs->nurbs = 2;
975                 npacks[0] = (total_packs + 1) / 2;
976                 npacks[1] = total_packs - npacks[0];
977         } else if (npacks[subs->nurbs-1] < MIN_PACKS_URB * packs_per_ms) {
978                 /* the last packet is too small.. */
979                 if (subs->nurbs > 2) {
980                         /* merge to the first one */
981                         npacks[0] += npacks[subs->nurbs - 1];
982                         subs->nurbs--;
983                 } else {
984                         /* divide to two */
985                         subs->nurbs = 2;
986                         npacks[0] = (total_packs + 1) / 2;
987                         npacks[1] = total_packs - npacks[0];
988                 }
989         }
990
991         /* allocate and initialize data urbs */
992         for (i = 0; i < subs->nurbs; i++) {
993                 snd_urb_ctx_t *u = &subs->dataurb[i];
994                 u->index = i;
995                 u->subs = subs;
996                 u->packets = npacks[i];
997                 u->buffer_size = maxsize * u->packets;
998                 if (subs->fmt_type == USB_FORMAT_TYPE_II)
999                         u->packets++; /* for transfer delimiter */
1000                 u->urb = usb_alloc_urb(u->packets, GFP_KERNEL);
1001                 if (! u->urb)
1002                         goto out_of_memory;
1003                 u->urb->transfer_buffer =
1004                         usb_buffer_alloc(subs->dev, u->buffer_size, GFP_KERNEL,
1005                                          &u->urb->transfer_dma);
1006                 if (! u->urb->transfer_buffer)
1007                         goto out_of_memory;
1008                 u->urb->pipe = subs->datapipe;
1009                 u->urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
1010                 u->urb->interval = 1 << subs->datainterval;
1011                 u->urb->context = u;
1012                 u->urb->complete = snd_usb_complete_callback(snd_complete_urb);
1013         }
1014
1015         if (subs->syncpipe) {
1016                 /* allocate and initialize sync urbs */
1017                 subs->syncbuf = usb_buffer_alloc(subs->dev, SYNC_URBS * 4,
1018                                                  GFP_KERNEL, &subs->sync_dma);
1019                 if (! subs->syncbuf)
1020                         goto out_of_memory;
1021                 for (i = 0; i < SYNC_URBS; i++) {
1022                         snd_urb_ctx_t *u = &subs->syncurb[i];
1023                         u->index = i;
1024                         u->subs = subs;
1025                         u->packets = 1;
1026                         u->urb = usb_alloc_urb(1, GFP_KERNEL);
1027                         if (! u->urb)
1028                                 goto out_of_memory;
1029                         u->urb->transfer_buffer = subs->syncbuf + i * 4;
1030                         u->urb->transfer_dma = subs->sync_dma + i * 4;
1031                         u->urb->transfer_buffer_length = 4;
1032                         u->urb->pipe = subs->syncpipe;
1033                         u->urb->transfer_flags = URB_ISO_ASAP |
1034                                                  URB_NO_TRANSFER_DMA_MAP;
1035                         u->urb->number_of_packets = 1;
1036                         u->urb->interval = 1 << subs->syncinterval;
1037                         u->urb->context = u;
1038                         u->urb->complete = snd_usb_complete_callback(snd_complete_sync_urb);
1039                 }
1040         }
1041         return 0;
1042
1043 out_of_memory:
1044         release_substream_urbs(subs, 0);
1045         return -ENOMEM;
1046 }
1047
1048
1049 /*
1050  * find a matching audio format
1051  */
1052 static struct audioformat *find_format(snd_usb_substream_t *subs, unsigned int format,
1053                                        unsigned int rate, unsigned int channels)
1054 {
1055         struct list_head *p;
1056         struct audioformat *found = NULL;
1057         int cur_attr = 0, attr;
1058
1059         list_for_each(p, &subs->fmt_list) {
1060                 struct audioformat *fp;
1061                 fp = list_entry(p, struct audioformat, list);
1062                 if (fp->format != format || fp->channels != channels)
1063                         continue;
1064                 if (rate < fp->rate_min || rate > fp->rate_max)
1065                         continue;
1066                 if (! (fp->rates & SNDRV_PCM_RATE_CONTINUOUS)) {
1067                         unsigned int i;
1068                         for (i = 0; i < fp->nr_rates; i++)
1069                                 if (fp->rate_table[i] == rate)
1070                                         break;
1071                         if (i >= fp->nr_rates)
1072                                 continue;
1073                 }
1074                 attr = fp->ep_attr & EP_ATTR_MASK;
1075                 if (! found) {
1076                         found = fp;
1077                         cur_attr = attr;
1078                         continue;
1079                 }
1080                 /* avoid async out and adaptive in if the other method
1081                  * supports the same format.
1082                  * this is a workaround for the case like
1083                  * M-audio audiophile USB.
1084                  */
1085                 if (attr != cur_attr) {
1086                         if ((attr == EP_ATTR_ASYNC &&
1087                              subs->direction == SNDRV_PCM_STREAM_PLAYBACK) ||
1088                             (attr == EP_ATTR_ADAPTIVE &&
1089                              subs->direction == SNDRV_PCM_STREAM_CAPTURE))
1090                                 continue;
1091                         if ((cur_attr == EP_ATTR_ASYNC &&
1092                              subs->direction == SNDRV_PCM_STREAM_PLAYBACK) ||
1093                             (cur_attr == EP_ATTR_ADAPTIVE &&
1094                              subs->direction == SNDRV_PCM_STREAM_CAPTURE)) {
1095                                 found = fp;
1096                                 cur_attr = attr;
1097                                 continue;
1098                         }
1099                 }
1100                 /* find the format with the largest max. packet size */
1101                 if (fp->maxpacksize > found->maxpacksize) {
1102                         found = fp;
1103                         cur_attr = attr;
1104                 }
1105         }
1106         return found;
1107 }
1108
1109
1110 /*
1111  * initialize the picth control and sample rate
1112  */
1113 static int init_usb_pitch(struct usb_device *dev, int iface,
1114                           struct usb_host_interface *alts,
1115                           struct audioformat *fmt)
1116 {
1117         unsigned int ep;
1118         unsigned char data[1];
1119         int err;
1120
1121         ep = get_endpoint(alts, 0)->bEndpointAddress;
1122         /* if endpoint has pitch control, enable it */
1123         if (fmt->attributes & EP_CS_ATTR_PITCH_CONTROL) {
1124                 data[0] = 1;
1125                 if ((err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR,
1126                                            USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT,
1127                                            PITCH_CONTROL << 8, ep, data, 1, 1000)) < 0) {
1128                         snd_printk(KERN_ERR "%d:%d:%d: cannot set enable PITCH\n",
1129                                    dev->devnum, iface, ep);
1130                         return err;
1131                 }
1132         }
1133         return 0;
1134 }
1135
1136 static int init_usb_sample_rate(struct usb_device *dev, int iface,
1137                                 struct usb_host_interface *alts,
1138                                 struct audioformat *fmt, int rate)
1139 {
1140         unsigned int ep;
1141         unsigned char data[3];
1142         int err;
1143
1144         ep = get_endpoint(alts, 0)->bEndpointAddress;
1145         /* if endpoint has sampling rate control, set it */
1146         if (fmt->attributes & EP_CS_ATTR_SAMPLE_RATE) {
1147                 int crate;
1148                 data[0] = rate;
1149                 data[1] = rate >> 8;
1150                 data[2] = rate >> 16;
1151                 if ((err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), SET_CUR,
1152                                            USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT,
1153                                            SAMPLING_FREQ_CONTROL << 8, ep, data, 3, 1000)) < 0) {
1154                         snd_printk(KERN_ERR "%d:%d:%d: cannot set freq %d to ep 0x%x\n",
1155                                    dev->devnum, iface, fmt->altsetting, rate, ep);
1156                         return err;
1157                 }
1158                 if ((err = snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), GET_CUR,
1159                                            USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_IN,
1160                                            SAMPLING_FREQ_CONTROL << 8, ep, data, 3, 1000)) < 0) {
1161                         snd_printk(KERN_WARNING "%d:%d:%d: cannot get freq at ep 0x%x\n",
1162                                    dev->devnum, iface, fmt->altsetting, ep);
1163                         return 0; /* some devices don't support reading */
1164                 }
1165                 crate = data[0] | (data[1] << 8) | (data[2] << 16);
1166                 if (crate != rate) {
1167                         snd_printd(KERN_WARNING "current rate %d is different from the runtime rate %d\n", crate, rate);
1168                         // runtime->rate = crate;
1169                 }
1170         }
1171         return 0;
1172 }
1173
1174 /*
1175  * find a matching format and set up the interface
1176  */
1177 static int set_format(snd_usb_substream_t *subs, struct audioformat *fmt)
1178 {
1179         struct usb_device *dev = subs->dev;
1180         struct usb_host_interface *alts;
1181         struct usb_interface_descriptor *altsd;
1182         struct usb_interface *iface;
1183         unsigned int ep, attr;
1184         int is_playback = subs->direction == SNDRV_PCM_STREAM_PLAYBACK;
1185         int err;
1186
1187         iface = usb_ifnum_to_if(dev, fmt->iface);
1188         snd_assert(iface, return -EINVAL);
1189         alts = &iface->altsetting[fmt->altset_idx];
1190         altsd = get_iface_desc(alts);
1191         snd_assert(altsd->bAlternateSetting == fmt->altsetting, return -EINVAL);
1192
1193         if (fmt == subs->cur_audiofmt)
1194                 return 0;
1195
1196         /* close the old interface */
1197         if (subs->interface >= 0 && subs->interface != fmt->iface) {
1198                 usb_set_interface(subs->dev, subs->interface, 0);
1199                 subs->interface = -1;
1200                 subs->format = 0;
1201         }
1202
1203         /* set interface */
1204         if (subs->interface != fmt->iface || subs->format != fmt->altset_idx) {
1205                 if (usb_set_interface(dev, fmt->iface, fmt->altsetting) < 0) {
1206                         snd_printk(KERN_ERR "%d:%d:%d: usb_set_interface failed\n",
1207                                    dev->devnum, fmt->iface, fmt->altsetting);
1208                         return -EIO;
1209                 }
1210                 snd_printdd(KERN_INFO "setting usb interface %d:%d\n", fmt->iface, fmt->altsetting);
1211                 subs->interface = fmt->iface;
1212                 subs->format = fmt->altset_idx;
1213         }
1214
1215         /* create a data pipe */
1216         ep = fmt->endpoint & USB_ENDPOINT_NUMBER_MASK;
1217         if (is_playback)
1218                 subs->datapipe = usb_sndisocpipe(dev, ep);
1219         else
1220                 subs->datapipe = usb_rcvisocpipe(dev, ep);
1221         if (snd_usb_get_speed(subs->dev) == USB_SPEED_HIGH &&
1222             get_endpoint(alts, 0)->bInterval >= 1 &&
1223             get_endpoint(alts, 0)->bInterval <= 4)
1224                 subs->datainterval = get_endpoint(alts, 0)->bInterval - 1;
1225         else
1226                 subs->datainterval = 0;
1227         subs->syncpipe = subs->syncinterval = 0;
1228         subs->maxpacksize = fmt->maxpacksize;
1229         subs->fill_max = 0;
1230
1231         /* we need a sync pipe in async OUT or adaptive IN mode */
1232         /* check the number of EP, since some devices have broken
1233          * descriptors which fool us.  if it has only one EP,
1234          * assume it as adaptive-out or sync-in.
1235          */
1236         attr = fmt->ep_attr & EP_ATTR_MASK;
1237         if (((is_playback && attr == EP_ATTR_ASYNC) ||
1238              (! is_playback && attr == EP_ATTR_ADAPTIVE)) &&
1239             altsd->bNumEndpoints >= 2) {
1240                 /* check sync-pipe endpoint */
1241                 /* ... and check descriptor size before accessing bSynchAddress
1242                    because there is a version of the SB Audigy 2 NX firmware lacking
1243                    the audio fields in the endpoint descriptors */
1244                 if ((get_endpoint(alts, 1)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) != 0x01 ||
1245                     (get_endpoint(alts, 1)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
1246                      get_endpoint(alts, 1)->bSynchAddress != 0)) {
1247                         snd_printk(KERN_ERR "%d:%d:%d : invalid synch pipe\n",
1248                                    dev->devnum, fmt->iface, fmt->altsetting);
1249                         return -EINVAL;
1250                 }
1251                 ep = get_endpoint(alts, 1)->bEndpointAddress;
1252                 if (get_endpoint(alts, 0)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
1253                     (( is_playback && ep != (unsigned int)(get_endpoint(alts, 0)->bSynchAddress | USB_DIR_IN)) ||
1254                      (!is_playback && ep != (unsigned int)(get_endpoint(alts, 0)->bSynchAddress & ~USB_DIR_IN)))) {
1255                         snd_printk(KERN_ERR "%d:%d:%d : invalid synch pipe\n",
1256                                    dev->devnum, fmt->iface, fmt->altsetting);
1257                         return -EINVAL;
1258                 }
1259                 ep &= USB_ENDPOINT_NUMBER_MASK;
1260                 if (is_playback)
1261                         subs->syncpipe = usb_rcvisocpipe(dev, ep);
1262                 else
1263                         subs->syncpipe = usb_sndisocpipe(dev, ep);
1264                 if (get_endpoint(alts, 1)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE &&
1265                     get_endpoint(alts, 1)->bRefresh >= 1 &&
1266                     get_endpoint(alts, 1)->bRefresh <= 9)
1267                         subs->syncinterval = get_endpoint(alts, 1)->bRefresh;
1268                 else if (snd_usb_get_speed(subs->dev) == USB_SPEED_FULL)
1269                         subs->syncinterval = 1;
1270                 else if (get_endpoint(alts, 1)->bInterval >= 1 &&
1271                          get_endpoint(alts, 1)->bInterval <= 16)
1272                         subs->syncinterval = get_endpoint(alts, 1)->bInterval - 1;
1273                 else
1274                         subs->syncinterval = 3;
1275         }
1276
1277         /* always fill max packet size */
1278         if (fmt->attributes & EP_CS_ATTR_FILL_MAX)
1279                 subs->fill_max = 1;
1280
1281         if ((err = init_usb_pitch(dev, subs->interface, alts, fmt)) < 0)
1282                 return err;
1283
1284         subs->cur_audiofmt = fmt;
1285
1286 #if 0
1287         printk("setting done: format = %d, rate = %d, channels = %d\n",
1288                fmt->format, fmt->rate, fmt->channels);
1289         printk("  datapipe = 0x%0x, syncpipe = 0x%0x\n",
1290                subs->datapipe, subs->syncpipe);
1291 #endif
1292
1293         return 0;
1294 }
1295
1296 /*
1297  * hw_params callback
1298  *
1299  * allocate a buffer and set the given audio format.
1300  *
1301  * so far we use a physically linear buffer although packetize transfer
1302  * doesn't need a continuous area.
1303  * if sg buffer is supported on the later version of alsa, we'll follow
1304  * that.
1305  */
1306 static int snd_usb_hw_params(snd_pcm_substream_t *substream,
1307                              snd_pcm_hw_params_t *hw_params)
1308 {
1309         snd_usb_substream_t *subs = (snd_usb_substream_t *)substream->runtime->private_data;
1310         struct audioformat *fmt;
1311         unsigned int channels, rate, format;
1312         int ret, changed;
1313
1314         ret = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
1315         if (ret < 0)
1316                 return ret;
1317
1318         format = params_format(hw_params);
1319         rate = params_rate(hw_params);
1320         channels = params_channels(hw_params);
1321         fmt = find_format(subs, format, rate, channels);
1322         if (! fmt) {
1323                 snd_printd(KERN_DEBUG "cannot set format: format = %s, rate = %d, channels = %d\n",
1324                            snd_pcm_format_name(format), rate, channels);
1325                 return -EINVAL;
1326         }
1327
1328         changed = subs->cur_audiofmt != fmt ||
1329                 subs->period_bytes != params_period_bytes(hw_params) ||
1330                 subs->cur_rate != rate;
1331         if ((ret = set_format(subs, fmt)) < 0)
1332                 return ret;
1333
1334         if (subs->cur_rate != rate) {
1335                 struct usb_host_interface *alts;
1336                 struct usb_interface *iface;
1337                 iface = usb_ifnum_to_if(subs->dev, fmt->iface);
1338                 alts = &iface->altsetting[fmt->altset_idx];
1339                 ret = init_usb_sample_rate(subs->dev, subs->interface, alts, fmt, rate);
1340                 if (ret < 0)
1341                         return ret;
1342                 subs->cur_rate = rate;
1343         }
1344
1345         if (changed) {
1346                 /* format changed */
1347                 release_substream_urbs(subs, 0);
1348                 /* influenced: period_bytes, channels, rate, format, */
1349                 ret = init_substream_urbs(subs, params_period_bytes(hw_params),
1350                                           params_rate(hw_params),
1351                                           snd_pcm_format_physical_width(params_format(hw_params)) * params_channels(hw_params));
1352         }
1353
1354         return ret;
1355 }
1356
1357 /*
1358  * hw_free callback
1359  *
1360  * reset the audio format and release the buffer
1361  */
1362 static int snd_usb_hw_free(snd_pcm_substream_t *substream)
1363 {
1364         snd_usb_substream_t *subs = (snd_usb_substream_t *)substream->runtime->private_data;
1365
1366         subs->cur_audiofmt = NULL;
1367         subs->cur_rate = 0;
1368         subs->period_bytes = 0;
1369         release_substream_urbs(subs, 0);
1370         return snd_pcm_lib_free_pages(substream);
1371 }
1372
1373 /*
1374  * prepare callback
1375  *
1376  * only a few subtle things...
1377  */
1378 static int snd_usb_pcm_prepare(snd_pcm_substream_t *substream)
1379 {
1380         snd_pcm_runtime_t *runtime = substream->runtime;
1381         snd_usb_substream_t *subs = (snd_usb_substream_t *)runtime->private_data;
1382
1383         if (! subs->cur_audiofmt) {
1384                 snd_printk(KERN_ERR "usbaudio: no format is specified!\n");
1385                 return -ENXIO;
1386         }
1387
1388         /* some unit conversions in runtime */
1389         subs->maxframesize = bytes_to_frames(runtime, subs->maxpacksize);
1390         subs->curframesize = bytes_to_frames(runtime, subs->curpacksize);
1391
1392         /* reset the pointer */
1393         subs->hwptr_done = 0;
1394         subs->transfer_done = 0;
1395         subs->phase = 0;
1396
1397         /* clear urbs (to be sure) */
1398         deactivate_urbs(subs, 0, 1);
1399         wait_clear_urbs(subs);
1400
1401         return 0;
1402 }
1403
1404 static snd_pcm_hardware_t snd_usb_playback =
1405 {
1406         .info =                 (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
1407                                  SNDRV_PCM_INFO_BLOCK_TRANSFER |
1408                                  SNDRV_PCM_INFO_MMAP_VALID),
1409         .buffer_bytes_max =     (128*1024),
1410         .period_bytes_min =     64,
1411         .period_bytes_max =     (128*1024),
1412         .periods_min =          2,
1413         .periods_max =          1024,
1414 };
1415
1416 static snd_pcm_hardware_t snd_usb_capture =
1417 {
1418         .info =                 (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
1419                                  SNDRV_PCM_INFO_BLOCK_TRANSFER |
1420                                  SNDRV_PCM_INFO_MMAP_VALID),
1421         .buffer_bytes_max =     (128*1024),
1422         .period_bytes_min =     64,
1423         .period_bytes_max =     (128*1024),
1424         .periods_min =          2,
1425         .periods_max =          1024,
1426 };
1427
1428 /*
1429  * h/w constraints
1430  */
1431
1432 #ifdef HW_CONST_DEBUG
1433 #define hwc_debug(fmt, args...) printk(KERN_DEBUG fmt, ##args)
1434 #else
1435 #define hwc_debug(fmt, args...) /**/
1436 #endif
1437
1438 static int hw_check_valid_format(snd_pcm_hw_params_t *params, struct audioformat *fp)
1439 {
1440         snd_interval_t *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
1441         snd_interval_t *ct = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
1442         snd_mask_t *fmts = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
1443
1444         /* check the format */
1445         if (! snd_mask_test(fmts, fp->format)) {
1446                 hwc_debug("   > check: no supported format %d\n", fp->format);
1447                 return 0;
1448         }
1449         /* check the channels */
1450         if (fp->channels < ct->min || fp->channels > ct->max) {
1451                 hwc_debug("   > check: no valid channels %d (%d/%d)\n", fp->channels, ct->min, ct->max);
1452                 return 0;
1453         }
1454         /* check the rate is within the range */
1455         if (fp->rate_min > it->max || (fp->rate_min == it->max && it->openmax)) {
1456                 hwc_debug("   > check: rate_min %d > max %d\n", fp->rate_min, it->max);
1457                 return 0;
1458         }
1459         if (fp->rate_max < it->min || (fp->rate_max == it->min && it->openmin)) {
1460                 hwc_debug("   > check: rate_max %d < min %d\n", fp->rate_max, it->min);
1461                 return 0;
1462         }
1463         return 1;
1464 }
1465
1466 static int hw_rule_rate(snd_pcm_hw_params_t *params,
1467                         snd_pcm_hw_rule_t *rule)
1468 {
1469         snd_usb_substream_t *subs = rule->private;
1470         struct list_head *p;
1471         snd_interval_t *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
1472         unsigned int rmin, rmax;
1473         int changed;
1474
1475         hwc_debug("hw_rule_rate: (%d,%d)\n", it->min, it->max);
1476         changed = 0;
1477         rmin = rmax = 0;
1478         list_for_each(p, &subs->fmt_list) {
1479                 struct audioformat *fp;
1480                 fp = list_entry(p, struct audioformat, list);
1481                 if (! hw_check_valid_format(params, fp))
1482                         continue;
1483                 if (changed++) {
1484                         if (rmin > fp->rate_min)
1485                                 rmin = fp->rate_min;
1486                         if (rmax < fp->rate_max)
1487                                 rmax = fp->rate_max;
1488                 } else {
1489                         rmin = fp->rate_min;
1490                         rmax = fp->rate_max;
1491                 }
1492         }
1493
1494         if (! changed) {
1495                 hwc_debug("  --> get empty\n");
1496                 it->empty = 1;
1497                 return -EINVAL;
1498         }
1499
1500         changed = 0;
1501         if (it->min < rmin) {
1502                 it->min = rmin;
1503                 it->openmin = 0;
1504                 changed = 1;
1505         }
1506         if (it->max > rmax) {
1507                 it->max = rmax;
1508                 it->openmax = 0;
1509                 changed = 1;
1510         }
1511         if (snd_interval_checkempty(it)) {
1512                 it->empty = 1;
1513                 return -EINVAL;
1514         }
1515         hwc_debug("  --> (%d, %d) (changed = %d)\n", it->min, it->max, changed);
1516         return changed;
1517 }
1518
1519
1520 static int hw_rule_channels(snd_pcm_hw_params_t *params,
1521                             snd_pcm_hw_rule_t *rule)
1522 {
1523         snd_usb_substream_t *subs = rule->private;
1524         struct list_head *p;
1525         snd_interval_t *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
1526         unsigned int rmin, rmax;
1527         int changed;
1528
1529         hwc_debug("hw_rule_channels: (%d,%d)\n", it->min, it->max);
1530         changed = 0;
1531         rmin = rmax = 0;
1532         list_for_each(p, &subs->fmt_list) {
1533                 struct audioformat *fp;
1534                 fp = list_entry(p, struct audioformat, list);
1535                 if (! hw_check_valid_format(params, fp))
1536                         continue;
1537                 if (changed++) {
1538                         if (rmin > fp->channels)
1539                                 rmin = fp->channels;
1540                         if (rmax < fp->channels)
1541                                 rmax = fp->channels;
1542                 } else {
1543                         rmin = fp->channels;
1544                         rmax = fp->channels;
1545                 }
1546         }
1547
1548         if (! changed) {
1549                 hwc_debug("  --> get empty\n");
1550                 it->empty = 1;
1551                 return -EINVAL;
1552         }
1553
1554         changed = 0;
1555         if (it->min < rmin) {
1556                 it->min = rmin;
1557                 it->openmin = 0;
1558                 changed = 1;
1559         }
1560         if (it->max > rmax) {
1561                 it->max = rmax;
1562                 it->openmax = 0;
1563                 changed = 1;
1564         }
1565         if (snd_interval_checkempty(it)) {
1566                 it->empty = 1;
1567                 return -EINVAL;
1568         }
1569         hwc_debug("  --> (%d, %d) (changed = %d)\n", it->min, it->max, changed);
1570         return changed;
1571 }
1572
1573 static int hw_rule_format(snd_pcm_hw_params_t *params,
1574                           snd_pcm_hw_rule_t *rule)
1575 {
1576         snd_usb_substream_t *subs = rule->private;
1577         struct list_head *p;
1578         snd_mask_t *fmt = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
1579         u64 fbits;
1580         u32 oldbits[2];
1581         int changed;
1582
1583         hwc_debug("hw_rule_format: %x:%x\n", fmt->bits[0], fmt->bits[1]);
1584         fbits = 0;
1585         list_for_each(p, &subs->fmt_list) {
1586                 struct audioformat *fp;
1587                 fp = list_entry(p, struct audioformat, list);
1588                 if (! hw_check_valid_format(params, fp))
1589                         continue;
1590                 fbits |= (1ULL << fp->format);
1591         }
1592
1593         oldbits[0] = fmt->bits[0];
1594         oldbits[1] = fmt->bits[1];
1595         fmt->bits[0] &= (u32)fbits;
1596         fmt->bits[1] &= (u32)(fbits >> 32);
1597         if (! fmt->bits[0] && ! fmt->bits[1]) {
1598                 hwc_debug("  --> get empty\n");
1599                 return -EINVAL;
1600         }
1601         changed = (oldbits[0] != fmt->bits[0] || oldbits[1] != fmt->bits[1]);
1602         hwc_debug("  --> %x:%x (changed = %d)\n", fmt->bits[0], fmt->bits[1], changed);
1603         return changed;
1604 }
1605
1606 #define MAX_MASK        64
1607
1608 /*
1609  * check whether the registered audio formats need special hw-constraints
1610  */
1611 static int check_hw_params_convention(snd_usb_substream_t *subs)
1612 {
1613         int i;
1614         u32 *channels;
1615         u32 *rates;
1616         u32 cmaster, rmaster;
1617         u32 rate_min = 0, rate_max = 0;
1618         struct list_head *p;
1619         int err = 1;
1620
1621         channels = kcalloc(MAX_MASK, sizeof(u32), GFP_KERNEL);
1622         rates = kcalloc(MAX_MASK, sizeof(u32), GFP_KERNEL);
1623
1624         list_for_each(p, &subs->fmt_list) {
1625                 struct audioformat *f;
1626                 f = list_entry(p, struct audioformat, list);
1627                 /* unconventional channels? */
1628                 if (f->channels > 32)
1629                         goto __out;
1630                 /* continuous rate min/max matches? */
1631                 if (f->rates & SNDRV_PCM_RATE_CONTINUOUS) {
1632                         if (rate_min && f->rate_min != rate_min)
1633                                 goto __out;
1634                         if (rate_max && f->rate_max != rate_max)
1635                                 goto __out;
1636                         rate_min = f->rate_min;
1637                         rate_max = f->rate_max;
1638                 }
1639                 /* combination of continuous rates and fixed rates? */
1640                 if (rates[f->format] & SNDRV_PCM_RATE_CONTINUOUS) {
1641                         if (f->rates != rates[f->format])
1642                                 goto __out;
1643                 }
1644                 if (f->rates & SNDRV_PCM_RATE_CONTINUOUS) {
1645                         if (rates[f->format] && rates[f->format] != f->rates)
1646                                 goto __out;
1647                 }
1648                 channels[f->format] |= (1 << f->channels);
1649                 rates[f->format] |= f->rates;
1650         }
1651         /* check whether channels and rates match for all formats */
1652         cmaster = rmaster = 0;
1653         for (i = 0; i < MAX_MASK; i++) {
1654                 if (cmaster != channels[i] && cmaster && channels[i])
1655                         goto __out;
1656                 if (rmaster != rates[i] && rmaster && rates[i])
1657                         goto __out;
1658                 if (channels[i])
1659                         cmaster = channels[i];
1660                 if (rates[i])
1661                         rmaster = rates[i];
1662         }
1663         /* check whether channels match for all distinct rates */
1664         memset(channels, 0, MAX_MASK * sizeof(u32));
1665         list_for_each(p, &subs->fmt_list) {
1666                 struct audioformat *f;
1667                 f = list_entry(p, struct audioformat, list);
1668                 if (f->rates & SNDRV_PCM_RATE_CONTINUOUS)
1669                         continue;
1670                 for (i = 0; i < 32; i++) {
1671                         if (f->rates & (1 << i))
1672                                 channels[i] |= (1 << f->channels);
1673                 }
1674         }
1675         cmaster = 0;
1676         for (i = 0; i < 32; i++) {
1677                 if (cmaster != channels[i] && cmaster && channels[i])
1678                         goto __out;
1679                 if (channels[i])
1680                         cmaster = channels[i];
1681         }
1682         err = 0;
1683
1684  __out:
1685         kfree(channels);
1686         kfree(rates);
1687         return err;
1688 }
1689
1690
1691 /*
1692  * set up the runtime hardware information.
1693  */
1694
1695 static int setup_hw_info(snd_pcm_runtime_t *runtime, snd_usb_substream_t *subs)
1696 {
1697         struct list_head *p;
1698         int err;
1699
1700         runtime->hw.formats = subs->formats;
1701
1702         runtime->hw.rate_min = 0x7fffffff;
1703         runtime->hw.rate_max = 0;
1704         runtime->hw.channels_min = 256;
1705         runtime->hw.channels_max = 0;
1706         runtime->hw.rates = 0;
1707         /* check min/max rates and channels */
1708         list_for_each(p, &subs->fmt_list) {
1709                 struct audioformat *fp;
1710                 fp = list_entry(p, struct audioformat, list);
1711                 runtime->hw.rates |= fp->rates;
1712                 if (runtime->hw.rate_min > fp->rate_min)
1713                         runtime->hw.rate_min = fp->rate_min;
1714                 if (runtime->hw.rate_max < fp->rate_max)
1715                         runtime->hw.rate_max = fp->rate_max;
1716                 if (runtime->hw.channels_min > fp->channels)
1717                         runtime->hw.channels_min = fp->channels;
1718                 if (runtime->hw.channels_max < fp->channels)
1719                         runtime->hw.channels_max = fp->channels;
1720                 if (fp->fmt_type == USB_FORMAT_TYPE_II && fp->frame_size > 0) {
1721                         /* FIXME: there might be more than one audio formats... */
1722                         runtime->hw.period_bytes_min = runtime->hw.period_bytes_max =
1723                                 fp->frame_size;
1724                 }
1725         }
1726
1727         /* set the period time minimum 1ms */
1728         snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_PERIOD_TIME,
1729                                      1000 * MIN_PACKS_URB,
1730                                      /*(nrpacks * MAX_URBS) * 1000*/ UINT_MAX);
1731
1732         if (check_hw_params_convention(subs)) {
1733                 hwc_debug("setting extra hw constraints...\n");
1734                 if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
1735                                                hw_rule_rate, subs,
1736                                                SNDRV_PCM_HW_PARAM_FORMAT,
1737                                                SNDRV_PCM_HW_PARAM_CHANNELS,
1738                                                -1)) < 0)
1739                         return err;
1740                 if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
1741                                                hw_rule_channels, subs,
1742                                                SNDRV_PCM_HW_PARAM_FORMAT,
1743                                                SNDRV_PCM_HW_PARAM_RATE,
1744                                                -1)) < 0)
1745                         return err;
1746                 if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_FORMAT,
1747                                                hw_rule_format, subs,
1748                                                SNDRV_PCM_HW_PARAM_RATE,
1749                                                SNDRV_PCM_HW_PARAM_CHANNELS,
1750                                                -1)) < 0)
1751                         return err;
1752         }
1753         return 0;
1754 }
1755
1756 static int snd_usb_pcm_open(snd_pcm_substream_t *substream, int direction,
1757                             snd_pcm_hardware_t *hw)
1758 {
1759         snd_usb_stream_t *as = snd_pcm_substream_chip(substream);
1760         snd_pcm_runtime_t *runtime = substream->runtime;
1761         snd_usb_substream_t *subs = &as->substream[direction];
1762
1763         subs->interface = -1;
1764         subs->format = 0;
1765         runtime->hw = *hw;
1766         runtime->private_data = subs;
1767         subs->pcm_substream = substream;
1768         return setup_hw_info(runtime, subs);
1769 }
1770
1771 static int snd_usb_pcm_close(snd_pcm_substream_t *substream, int direction)
1772 {
1773         snd_usb_stream_t *as = snd_pcm_substream_chip(substream);
1774         snd_usb_substream_t *subs = &as->substream[direction];
1775
1776         if (subs->interface >= 0) {
1777                 usb_set_interface(subs->dev, subs->interface, 0);
1778                 subs->interface = -1;
1779         }
1780         subs->pcm_substream = NULL;
1781         return 0;
1782 }
1783
1784 static int snd_usb_playback_open(snd_pcm_substream_t *substream)
1785 {
1786         return snd_usb_pcm_open(substream, SNDRV_PCM_STREAM_PLAYBACK, &snd_usb_playback);
1787 }
1788
1789 static int snd_usb_playback_close(snd_pcm_substream_t *substream)
1790 {
1791         return snd_usb_pcm_close(substream, SNDRV_PCM_STREAM_PLAYBACK);
1792 }
1793
1794 static int snd_usb_capture_open(snd_pcm_substream_t *substream)
1795 {
1796         return snd_usb_pcm_open(substream, SNDRV_PCM_STREAM_CAPTURE, &snd_usb_capture);
1797 }
1798
1799 static int snd_usb_capture_close(snd_pcm_substream_t *substream)
1800 {
1801         return snd_usb_pcm_close(substream, SNDRV_PCM_STREAM_CAPTURE);
1802 }
1803
1804 static snd_pcm_ops_t snd_usb_playback_ops = {
1805         .open =         snd_usb_playback_open,
1806         .close =        snd_usb_playback_close,
1807         .ioctl =        snd_pcm_lib_ioctl,
1808         .hw_params =    snd_usb_hw_params,
1809         .hw_free =      snd_usb_hw_free,
1810         .prepare =      snd_usb_pcm_prepare,
1811         .trigger =      snd_usb_pcm_trigger,
1812         .pointer =      snd_usb_pcm_pointer,
1813 };
1814
1815 static snd_pcm_ops_t snd_usb_capture_ops = {
1816         .open =         snd_usb_capture_open,
1817         .close =        snd_usb_capture_close,
1818         .ioctl =        snd_pcm_lib_ioctl,
1819         .hw_params =    snd_usb_hw_params,
1820         .hw_free =      snd_usb_hw_free,
1821         .prepare =      snd_usb_pcm_prepare,
1822         .trigger =      snd_usb_pcm_trigger,
1823         .pointer =      snd_usb_pcm_pointer,
1824 };
1825
1826
1827
1828 /*
1829  * helper functions
1830  */
1831
1832 /*
1833  * combine bytes and get an integer value
1834  */
1835 unsigned int snd_usb_combine_bytes(unsigned char *bytes, int size)
1836 {
1837         switch (size) {
1838         case 1:  return *bytes;
1839         case 2:  return combine_word(bytes);
1840         case 3:  return combine_triple(bytes);
1841         case 4:  return combine_quad(bytes);
1842         default: return 0;
1843         }
1844 }
1845
1846 /*
1847  * parse descriptor buffer and return the pointer starting the given
1848  * descriptor type.
1849  */
1850 void *snd_usb_find_desc(void *descstart, int desclen, void *after, u8 dtype)
1851 {
1852         u8 *p, *end, *next;
1853
1854         p = descstart;
1855         end = p + desclen;
1856         for (; p < end;) {
1857                 if (p[0] < 2)
1858                         return NULL;
1859                 next = p + p[0];
1860                 if (next > end)
1861                         return NULL;
1862                 if (p[1] == dtype && (!after || (void *)p > after)) {
1863                         return p;
1864                 }
1865                 p = next;
1866         }
1867         return NULL;
1868 }
1869
1870 /*
1871  * find a class-specified interface descriptor with the given subtype.
1872  */
1873 void *snd_usb_find_csint_desc(void *buffer, int buflen, void *after, u8 dsubtype)
1874 {
1875         unsigned char *p = after;
1876
1877         while ((p = snd_usb_find_desc(buffer, buflen, p,
1878                                       USB_DT_CS_INTERFACE)) != NULL) {
1879                 if (p[0] >= 3 && p[2] == dsubtype)
1880                         return p;
1881         }
1882         return NULL;
1883 }
1884
1885 /*
1886  * Wrapper for usb_control_msg().
1887  * Allocates a temp buffer to prevent dmaing from/to the stack.
1888  */
1889 int snd_usb_ctl_msg(struct usb_device *dev, unsigned int pipe, __u8 request,
1890                     __u8 requesttype, __u16 value, __u16 index, void *data,
1891                     __u16 size, int timeout)
1892 {
1893         int err;
1894         void *buf = NULL;
1895
1896         if (size > 0) {
1897                 buf = kmalloc(size, GFP_KERNEL);
1898                 if (!buf)
1899                         return -ENOMEM;
1900                 memcpy(buf, data, size);
1901         }
1902         err = usb_control_msg(dev, pipe, request, requesttype,
1903                               value, index, buf, size, timeout);
1904         if (size > 0) {
1905                 memcpy(data, buf, size);
1906                 kfree(buf);
1907         }
1908         return err;
1909 }
1910
1911
1912 /*
1913  * entry point for linux usb interface
1914  */
1915
1916 static int usb_audio_probe(struct usb_interface *intf,
1917                            const struct usb_device_id *id);
1918 static void usb_audio_disconnect(struct usb_interface *intf);
1919
1920 static struct usb_device_id usb_audio_ids [] = {
1921 #include "usbquirks.h"
1922     { .match_flags = (USB_DEVICE_ID_MATCH_INT_CLASS | USB_DEVICE_ID_MATCH_INT_SUBCLASS),
1923       .bInterfaceClass = USB_CLASS_AUDIO,
1924       .bInterfaceSubClass = USB_SUBCLASS_AUDIO_CONTROL },
1925     { }                                         /* Terminating entry */
1926 };
1927
1928 MODULE_DEVICE_TABLE (usb, usb_audio_ids);
1929
1930 static struct usb_driver usb_audio_driver = {
1931         .owner =        THIS_MODULE,
1932         .name =         "snd-usb-audio",
1933         .probe =        usb_audio_probe,
1934         .disconnect =   usb_audio_disconnect,
1935         .id_table =     usb_audio_ids,
1936 };
1937
1938
1939 /*
1940  * proc interface for list the supported pcm formats
1941  */
1942 static void proc_dump_substream_formats(snd_usb_substream_t *subs, snd_info_buffer_t *buffer)
1943 {
1944         struct list_head *p;
1945         static char *sync_types[4] = {
1946                 "NONE", "ASYNC", "ADAPTIVE", "SYNC"
1947         };
1948
1949         list_for_each(p, &subs->fmt_list) {
1950                 struct audioformat *fp;
1951                 fp = list_entry(p, struct audioformat, list);
1952                 snd_iprintf(buffer, "  Interface %d\n", fp->iface);
1953                 snd_iprintf(buffer, "    Altset %d\n", fp->altsetting);
1954                 snd_iprintf(buffer, "    Format: %s\n", snd_pcm_format_name(fp->format));
1955                 snd_iprintf(buffer, "    Channels: %d\n", fp->channels);
1956                 snd_iprintf(buffer, "    Endpoint: %d %s (%s)\n",
1957                             fp->endpoint & USB_ENDPOINT_NUMBER_MASK,
1958                             fp->endpoint & USB_DIR_IN ? "IN" : "OUT",
1959                             sync_types[(fp->ep_attr & EP_ATTR_MASK) >> 2]);
1960                 if (fp->rates & SNDRV_PCM_RATE_CONTINUOUS) {
1961                         snd_iprintf(buffer, "    Rates: %d - %d (continuous)\n",
1962                                     fp->rate_min, fp->rate_max);
1963                 } else {
1964                         unsigned int i;
1965                         snd_iprintf(buffer, "    Rates: ");
1966                         for (i = 0; i < fp->nr_rates; i++) {
1967                                 if (i > 0)
1968                                         snd_iprintf(buffer, ", ");
1969                                 snd_iprintf(buffer, "%d", fp->rate_table[i]);
1970                         }
1971                         snd_iprintf(buffer, "\n");
1972                 }
1973                 // snd_iprintf(buffer, "    Max Packet Size = %d\n", fp->maxpacksize);
1974                 // snd_iprintf(buffer, "    EP Attribute = 0x%x\n", fp->attributes);
1975         }
1976 }
1977
1978 static void proc_dump_substream_status(snd_usb_substream_t *subs, snd_info_buffer_t *buffer)
1979 {
1980         if (subs->running) {
1981                 unsigned int i;
1982                 snd_iprintf(buffer, "  Status: Running\n");
1983                 snd_iprintf(buffer, "    Interface = %d\n", subs->interface);
1984                 snd_iprintf(buffer, "    Altset = %d\n", subs->format);
1985                 snd_iprintf(buffer, "    URBs = %d [ ", subs->nurbs);
1986                 for (i = 0; i < subs->nurbs; i++)
1987                         snd_iprintf(buffer, "%d ", subs->dataurb[i].packets);
1988                 snd_iprintf(buffer, "]\n");
1989                 snd_iprintf(buffer, "    Packet Size = %d\n", subs->curpacksize);
1990                 snd_iprintf(buffer, "    Momentary freq = %u Hz (%#x.%04x)\n",
1991                             snd_usb_get_speed(subs->dev) == USB_SPEED_FULL
1992                             ? get_full_speed_hz(subs->freqm)
1993                             : get_high_speed_hz(subs->freqm),
1994                             subs->freqm >> 16, subs->freqm & 0xffff);
1995         } else {
1996                 snd_iprintf(buffer, "  Status: Stop\n");
1997         }
1998 }
1999
2000 static void proc_pcm_format_read(snd_info_entry_t *entry, snd_info_buffer_t *buffer)
2001 {
2002         snd_usb_stream_t *stream = entry->private_data;
2003
2004         snd_iprintf(buffer, "%s : %s\n", stream->chip->card->longname, stream->pcm->name);
2005
2006         if (stream->substream[SNDRV_PCM_STREAM_PLAYBACK].num_formats) {
2007                 snd_iprintf(buffer, "\nPlayback:\n");
2008                 proc_dump_substream_status(&stream->substream[SNDRV_PCM_STREAM_PLAYBACK], buffer);
2009                 proc_dump_substream_formats(&stream->substream[SNDRV_PCM_STREAM_PLAYBACK], buffer);
2010         }
2011         if (stream->substream[SNDRV_PCM_STREAM_CAPTURE].num_formats) {
2012                 snd_iprintf(buffer, "\nCapture:\n");
2013                 proc_dump_substream_status(&stream->substream[SNDRV_PCM_STREAM_CAPTURE], buffer);
2014                 proc_dump_substream_formats(&stream->substream[SNDRV_PCM_STREAM_CAPTURE], buffer);
2015         }
2016 }
2017
2018 static void proc_pcm_format_add(snd_usb_stream_t *stream)
2019 {
2020         snd_info_entry_t *entry;
2021         char name[32];
2022         snd_card_t *card = stream->chip->card;
2023
2024         sprintf(name, "stream%d", stream->pcm_index);
2025         if (! snd_card_proc_new(card, name, &entry))
2026                 snd_info_set_text_ops(entry, stream, 1024, proc_pcm_format_read);
2027 }
2028
2029
2030 /*
2031  * initialize the substream instance.
2032  */
2033
2034 static void init_substream(snd_usb_stream_t *as, int stream, struct audioformat *fp)
2035 {
2036         snd_usb_substream_t *subs = &as->substream[stream];
2037
2038         INIT_LIST_HEAD(&subs->fmt_list);
2039         spin_lock_init(&subs->lock);
2040         if (stream == SNDRV_PCM_STREAM_PLAYBACK)
2041                 tasklet_init(&subs->start_period_elapsed, start_period_elapsed,
2042                              (unsigned long)subs);
2043
2044         subs->stream = as;
2045         subs->direction = stream;
2046         subs->dev = as->chip->dev;
2047         if (snd_usb_get_speed(subs->dev) == USB_SPEED_FULL)
2048                 subs->ops = audio_urb_ops[stream];
2049         else
2050                 subs->ops = audio_urb_ops_high_speed[stream];
2051         snd_pcm_lib_preallocate_pages(as->pcm->streams[stream].substream,
2052                                       SNDRV_DMA_TYPE_CONTINUOUS,
2053                                       snd_dma_continuous_data(GFP_NOIO),
2054                                       64 * 1024, 128 * 1024);
2055         snd_pcm_set_ops(as->pcm, stream,
2056                         stream == SNDRV_PCM_STREAM_PLAYBACK ?
2057                         &snd_usb_playback_ops : &snd_usb_capture_ops);
2058
2059         list_add_tail(&fp->list, &subs->fmt_list);
2060         subs->formats |= 1ULL << fp->format;
2061         subs->endpoint = fp->endpoint;
2062         subs->num_formats++;
2063         subs->fmt_type = fp->fmt_type;
2064 }
2065
2066
2067 /*
2068  * free a substream
2069  */
2070 static void free_substream(snd_usb_substream_t *subs)
2071 {
2072         struct list_head *p, *n;
2073
2074         if (! subs->num_formats)
2075                 return; /* not initialized */
2076         list_for_each_safe(p, n, &subs->fmt_list) {
2077                 struct audioformat *fp = list_entry(p, struct audioformat, list);
2078                 kfree(fp->rate_table);
2079                 kfree(fp);
2080         }
2081 }
2082
2083
2084 /*
2085  * free a usb stream instance
2086  */
2087 static void snd_usb_audio_stream_free(snd_usb_stream_t *stream)
2088 {
2089         free_substream(&stream->substream[0]);
2090         free_substream(&stream->substream[1]);
2091         list_del(&stream->list);
2092         kfree(stream);
2093 }
2094
2095 static void snd_usb_audio_pcm_free(snd_pcm_t *pcm)
2096 {
2097         snd_usb_stream_t *stream = pcm->private_data;
2098         if (stream) {
2099                 stream->pcm = NULL;
2100                 snd_pcm_lib_preallocate_free_for_all(pcm);
2101                 snd_usb_audio_stream_free(stream);
2102         }
2103 }
2104
2105
2106 /*
2107  * add this endpoint to the chip instance.
2108  * if a stream with the same endpoint already exists, append to it.
2109  * if not, create a new pcm stream.
2110  */
2111 static int add_audio_endpoint(snd_usb_audio_t *chip, int stream, struct audioformat *fp)
2112 {
2113         struct list_head *p;
2114         snd_usb_stream_t *as;
2115         snd_usb_substream_t *subs;
2116         snd_pcm_t *pcm;
2117         int err;
2118
2119         list_for_each(p, &chip->pcm_list) {
2120                 as = list_entry(p, snd_usb_stream_t, list);
2121                 if (as->fmt_type != fp->fmt_type)
2122                         continue;
2123                 subs = &as->substream[stream];
2124                 if (! subs->endpoint)
2125                         continue;
2126                 if (subs->endpoint == fp->endpoint) {
2127                         list_add_tail(&fp->list, &subs->fmt_list);
2128                         subs->num_formats++;
2129                         subs->formats |= 1ULL << fp->format;
2130                         return 0;
2131                 }
2132         }
2133         /* look for an empty stream */
2134         list_for_each(p, &chip->pcm_list) {
2135                 as = list_entry(p, snd_usb_stream_t, list);
2136                 if (as->fmt_type != fp->fmt_type)
2137                         continue;
2138                 subs = &as->substream[stream];
2139                 if (subs->endpoint)
2140                         continue;
2141                 err = snd_pcm_new_stream(as->pcm, stream, 1);
2142                 if (err < 0)
2143                         return err;
2144                 init_substream(as, stream, fp);
2145                 return 0;
2146         }
2147
2148         /* create a new pcm */
2149         as = kmalloc(sizeof(*as), GFP_KERNEL);
2150         if (! as)
2151                 return -ENOMEM;
2152         memset(as, 0, sizeof(*as));
2153         as->pcm_index = chip->pcm_devs;
2154         as->chip = chip;
2155         as->fmt_type = fp->fmt_type;
2156         err = snd_pcm_new(chip->card, "USB Audio", chip->pcm_devs,
2157                           stream == SNDRV_PCM_STREAM_PLAYBACK ? 1 : 0,
2158                           stream == SNDRV_PCM_STREAM_PLAYBACK ? 0 : 1,
2159                           &pcm);
2160         if (err < 0) {
2161                 kfree(as);
2162                 return err;
2163         }
2164         as->pcm = pcm;
2165         pcm->private_data = as;
2166         pcm->private_free = snd_usb_audio_pcm_free;
2167         pcm->info_flags = 0;
2168         if (chip->pcm_devs > 0)
2169                 sprintf(pcm->name, "USB Audio #%d", chip->pcm_devs);
2170         else
2171                 strcpy(pcm->name, "USB Audio");
2172
2173         init_substream(as, stream, fp);
2174
2175         list_add(&as->list, &chip->pcm_list);
2176         chip->pcm_devs++;
2177
2178         proc_pcm_format_add(as);
2179
2180         return 0;
2181 }
2182
2183
2184 /*
2185  * check if the device uses big-endian samples
2186  */
2187 static int is_big_endian_format(snd_usb_audio_t *chip, struct audioformat *fp)
2188 {
2189         switch (chip->usb_id) {
2190         case USB_ID(0x0763, 0x2001): /* M-Audio Quattro: captured data only */
2191                 if (fp->endpoint & USB_DIR_IN)
2192                         return 1;
2193                 break;
2194         case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */
2195                 return 1;
2196         }
2197         return 0;
2198 }
2199
2200 /*
2201  * parse the audio format type I descriptor
2202  * and returns the corresponding pcm format
2203  *
2204  * @dev: usb device
2205  * @fp: audioformat record
2206  * @format: the format tag (wFormatTag)
2207  * @fmt: the format type descriptor
2208  */
2209 static int parse_audio_format_i_type(snd_usb_audio_t *chip, struct audioformat *fp,
2210                                      int format, unsigned char *fmt)
2211 {
2212         int pcm_format;
2213         int sample_width, sample_bytes;
2214
2215         /* FIXME: correct endianess and sign? */
2216         pcm_format = -1;
2217         sample_width = fmt[6];
2218         sample_bytes = fmt[5];
2219         switch (format) {
2220         case 0: /* some devices don't define this correctly... */
2221                 snd_printdd(KERN_INFO "%d:%u:%d : format type 0 is detected, processed as PCM\n",
2222                             chip->dev->devnum, fp->iface, fp->altsetting);
2223                 /* fall-through */
2224         case USB_AUDIO_FORMAT_PCM:
2225                 if (sample_width > sample_bytes * 8) {
2226                         snd_printk(KERN_INFO "%d:%u:%d : sample bitwidth %d in over sample bytes %d\n",
2227                                    chip->dev->devnum, fp->iface, fp->altsetting,
2228                                    sample_width, sample_bytes);
2229                 }
2230                 /* check the format byte size */
2231                 switch (fmt[5]) {
2232                 case 1:
2233                         pcm_format = SNDRV_PCM_FORMAT_S8;
2234                         break;
2235                 case 2:
2236                         if (is_big_endian_format(chip, fp))
2237                                 pcm_format = SNDRV_PCM_FORMAT_S16_BE; /* grrr, big endian!! */
2238                         else
2239                                 pcm_format = SNDRV_PCM_FORMAT_S16_LE;
2240                         break;
2241                 case 3:
2242                         if (is_big_endian_format(chip, fp))
2243                                 pcm_format = SNDRV_PCM_FORMAT_S24_3BE; /* grrr, big endian!! */
2244                         else
2245                                 pcm_format = SNDRV_PCM_FORMAT_S24_3LE;
2246                         break;
2247                 case 4:
2248                         pcm_format = SNDRV_PCM_FORMAT_S32_LE;
2249                         break;
2250                 default:
2251                         snd_printk(KERN_INFO "%d:%u:%d : unsupported sample bitwidth %d in %d bytes\n",
2252                                    chip->dev->devnum, fp->iface,
2253                                    fp->altsetting, sample_width, sample_bytes);
2254                         break;
2255                 }
2256                 break;
2257         case USB_AUDIO_FORMAT_PCM8:
2258                 /* Dallas DS4201 workaround */
2259                 if (chip->usb_id == USB_ID(0x04fa, 0x4201))
2260                         pcm_format = SNDRV_PCM_FORMAT_S8;
2261                 else
2262                         pcm_format = SNDRV_PCM_FORMAT_U8;
2263                 break;
2264         case USB_AUDIO_FORMAT_IEEE_FLOAT:
2265                 pcm_format = SNDRV_PCM_FORMAT_FLOAT_LE;
2266                 break;
2267         case USB_AUDIO_FORMAT_ALAW:
2268                 pcm_format = SNDRV_PCM_FORMAT_A_LAW;
2269                 break;
2270         case USB_AUDIO_FORMAT_MU_LAW:
2271                 pcm_format = SNDRV_PCM_FORMAT_MU_LAW;
2272                 break;
2273         default:
2274                 snd_printk(KERN_INFO "%d:%u:%d : unsupported format type %d\n",
2275                            chip->dev->devnum, fp->iface, fp->altsetting, format);
2276                 break;
2277         }
2278         return pcm_format;
2279 }
2280
2281
2282 /*
2283  * parse the format descriptor and stores the possible sample rates
2284  * on the audioformat table.
2285  *
2286  * @dev: usb device
2287  * @fp: audioformat record
2288  * @fmt: the format descriptor
2289  * @offset: the start offset of descriptor pointing the rate type
2290  *          (7 for type I and II, 8 for type II)
2291  */
2292 static int parse_audio_format_rates(snd_usb_audio_t *chip, struct audioformat *fp,
2293                                     unsigned char *fmt, int offset)
2294 {
2295         int nr_rates = fmt[offset];
2296         if (fmt[0] < offset + 1 + 3 * (nr_rates ? nr_rates : 2)) {
2297                 snd_printk(KERN_ERR "%d:%u:%d : invalid FORMAT_TYPE desc\n",
2298                                    chip->dev->devnum, fp->iface, fp->altsetting);
2299                 return -1;
2300         }
2301
2302         if (nr_rates) {
2303                 /*
2304                  * build the rate table and bitmap flags
2305                  */
2306                 int r, idx, c;
2307                 /* this table corresponds to the SNDRV_PCM_RATE_XXX bit */
2308                 static unsigned int conv_rates[] = {
2309                         5512, 8000, 11025, 16000, 22050, 32000, 44100, 48000,
2310                         64000, 88200, 96000, 176400, 192000
2311                 };
2312                 fp->rate_table = kmalloc(sizeof(int) * nr_rates, GFP_KERNEL);
2313                 if (fp->rate_table == NULL) {
2314                         snd_printk(KERN_ERR "cannot malloc\n");
2315                         return -1;
2316                 }
2317
2318                 fp->nr_rates = nr_rates;
2319                 fp->rate_min = fp->rate_max = combine_triple(&fmt[8]);
2320                 for (r = 0, idx = offset + 1; r < nr_rates; r++, idx += 3) {
2321                         unsigned int rate = fp->rate_table[r] = combine_triple(&fmt[idx]);
2322                         if (rate < fp->rate_min)
2323                                 fp->rate_min = rate;
2324                         else if (rate > fp->rate_max)
2325                                 fp->rate_max = rate;
2326                         for (c = 0; c < (int)ARRAY_SIZE(conv_rates); c++) {
2327                                 if (rate == conv_rates[c]) {
2328                                         fp->rates |= (1 << c);
2329                                         break;
2330                                 }
2331                         }
2332                 }
2333         } else {
2334                 /* continuous rates */
2335                 fp->rates = SNDRV_PCM_RATE_CONTINUOUS;
2336                 fp->rate_min = combine_triple(&fmt[offset + 1]);
2337                 fp->rate_max = combine_triple(&fmt[offset + 4]);
2338         }
2339         return 0;
2340 }
2341
2342 /*
2343  * parse the format type I and III descriptors
2344  */
2345 static int parse_audio_format_i(snd_usb_audio_t *chip, struct audioformat *fp,
2346                                 int format, unsigned char *fmt)
2347 {
2348         int pcm_format;
2349
2350         if (fmt[3] == USB_FORMAT_TYPE_III) {
2351                 /* FIXME: the format type is really IECxxx
2352                  *        but we give normal PCM format to get the existing
2353                  *        apps working...
2354                  */
2355                 pcm_format = SNDRV_PCM_FORMAT_S16_LE;
2356         } else {
2357                 pcm_format = parse_audio_format_i_type(chip, fp, format, fmt);
2358                 if (pcm_format < 0)
2359                         return -1;
2360         }
2361         fp->format = pcm_format;
2362         fp->channels = fmt[4];
2363         if (fp->channels < 1) {
2364                 snd_printk(KERN_ERR "%d:%u:%d : invalid channels %d\n",
2365                            chip->dev->devnum, fp->iface, fp->altsetting, fp->channels);
2366                 return -1;
2367         }
2368         return parse_audio_format_rates(chip, fp, fmt, 7);
2369 }
2370
2371 /*
2372  * prase the format type II descriptor
2373  */
2374 static int parse_audio_format_ii(snd_usb_audio_t *chip, struct audioformat *fp,
2375                                  int format, unsigned char *fmt)
2376 {
2377         int brate, framesize;
2378         switch (format) {
2379         case USB_AUDIO_FORMAT_AC3:
2380                 /* FIXME: there is no AC3 format defined yet */
2381                 // fp->format = SNDRV_PCM_FORMAT_AC3;
2382                 fp->format = SNDRV_PCM_FORMAT_U8; /* temporarily hack to receive byte streams */
2383                 break;
2384         case USB_AUDIO_FORMAT_MPEG:
2385                 fp->format = SNDRV_PCM_FORMAT_MPEG;
2386                 break;
2387         default:
2388                 snd_printd(KERN_INFO "%d:%u:%d : unknown format tag 0x%x is detected.  processed as MPEG.\n",
2389                            chip->dev->devnum, fp->iface, fp->altsetting, format);
2390                 fp->format = SNDRV_PCM_FORMAT_MPEG;
2391                 break;
2392         }
2393         fp->channels = 1;
2394         brate = combine_word(&fmt[4]);  /* fmt[4,5] : wMaxBitRate (in kbps) */
2395         framesize = combine_word(&fmt[6]); /* fmt[6,7]: wSamplesPerFrame */
2396         snd_printd(KERN_INFO "found format II with max.bitrate = %d, frame size=%d\n", brate, framesize);
2397         fp->frame_size = framesize;
2398         return parse_audio_format_rates(chip, fp, fmt, 8); /* fmt[8..] sample rates */
2399 }
2400
2401 static int parse_audio_format(snd_usb_audio_t *chip, struct audioformat *fp,
2402                               int format, unsigned char *fmt, int stream)
2403 {
2404         int err;
2405
2406         switch (fmt[3]) {
2407         case USB_FORMAT_TYPE_I:
2408         case USB_FORMAT_TYPE_III:
2409                 err = parse_audio_format_i(chip, fp, format, fmt);
2410                 break;
2411         case USB_FORMAT_TYPE_II:
2412                 err = parse_audio_format_ii(chip, fp, format, fmt);
2413                 break;
2414         default:
2415                 snd_printd(KERN_INFO "%d:%u:%d : format type %d is not supported yet\n",
2416                            chip->dev->devnum, fp->iface, fp->altsetting, fmt[3]);
2417                 return -1;
2418         }
2419         fp->fmt_type = fmt[3];
2420         if (err < 0)
2421                 return err;
2422 #if 1
2423         /* FIXME: temporary hack for extigy/audigy 2 nx */
2424         /* extigy apparently supports sample rates other than 48k
2425          * but not in ordinary way.  so we enable only 48k atm.
2426          */
2427         if (chip->usb_id == USB_ID(0x041e, 0x3000) ||
2428             chip->usb_id == USB_ID(0x041e, 0x3020)) {
2429                 if (fmt[3] == USB_FORMAT_TYPE_I &&
2430                     fp->rates != SNDRV_PCM_RATE_48000 &&
2431                     fp->rates != SNDRV_PCM_RATE_96000)
2432                         return -1;
2433         }
2434 #endif
2435         return 0;
2436 }
2437
2438 static int parse_audio_endpoints(snd_usb_audio_t *chip, int iface_no)
2439 {
2440         struct usb_device *dev;
2441         struct usb_interface *iface;
2442         struct usb_host_interface *alts;
2443         struct usb_interface_descriptor *altsd;
2444         int i, altno, err, stream;
2445         int format;
2446         struct audioformat *fp;
2447         unsigned char *fmt, *csep;
2448
2449         dev = chip->dev;
2450
2451         /* parse the interface's altsettings */
2452         iface = usb_ifnum_to_if(dev, iface_no);
2453         for (i = 0; i < iface->num_altsetting; i++) {
2454                 alts = &iface->altsetting[i];
2455                 altsd = get_iface_desc(alts);
2456                 /* skip invalid one */
2457                 if ((altsd->bInterfaceClass != USB_CLASS_AUDIO &&
2458                      altsd->bInterfaceClass != USB_CLASS_VENDOR_SPEC) ||
2459                     (altsd->bInterfaceSubClass != USB_SUBCLASS_AUDIO_STREAMING &&
2460                      altsd->bInterfaceSubClass != USB_SUBCLASS_VENDOR_SPEC) ||
2461                     altsd->bNumEndpoints < 1 ||
2462                     le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize) == 0)
2463                         continue;
2464                 /* must be isochronous */
2465                 if ((get_endpoint(alts, 0)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) !=
2466                     USB_ENDPOINT_XFER_ISOC)
2467                         continue;
2468                 /* check direction */
2469                 stream = (get_endpoint(alts, 0)->bEndpointAddress & USB_DIR_IN) ?
2470                         SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
2471                 altno = altsd->bAlternateSetting;
2472
2473                 /* get audio formats */
2474                 fmt = snd_usb_find_csint_desc(alts->extra, alts->extralen, NULL, AS_GENERAL);
2475                 if (!fmt) {
2476                         snd_printk(KERN_ERR "%d:%u:%d : AS_GENERAL descriptor not found\n",
2477                                    dev->devnum, iface_no, altno);
2478                         continue;
2479                 }
2480
2481                 if (fmt[0] < 7) {
2482                         snd_printk(KERN_ERR "%d:%u:%d : invalid AS_GENERAL desc\n",
2483                                    dev->devnum, iface_no, altno);
2484                         continue;
2485                 }
2486
2487                 format = (fmt[6] << 8) | fmt[5]; /* remember the format value */
2488
2489                 /* get format type */
2490                 fmt = snd_usb_find_csint_desc(alts->extra, alts->extralen, NULL, FORMAT_TYPE);
2491                 if (!fmt) {
2492                         snd_printk(KERN_ERR "%d:%u:%d : no FORMAT_TYPE desc\n",
2493                                    dev->devnum, iface_no, altno);
2494                         continue;
2495                 }
2496                 if (fmt[0] < 8) {
2497                         snd_printk(KERN_ERR "%d:%u:%d : invalid FORMAT_TYPE desc\n",
2498                                    dev->devnum, iface_no, altno);
2499                         continue;
2500                 }
2501
2502                 csep = snd_usb_find_desc(alts->endpoint[0].extra, alts->endpoint[0].extralen, NULL, USB_DT_CS_ENDPOINT);
2503                 /* Creamware Noah has this descriptor after the 2nd endpoint */
2504                 if (!csep && altsd->bNumEndpoints >= 2)
2505                         csep = snd_usb_find_desc(alts->endpoint[1].extra, alts->endpoint[1].extralen, NULL, USB_DT_CS_ENDPOINT);
2506                 if (!csep || csep[0] < 7 || csep[2] != EP_GENERAL) {
2507                         snd_printk(KERN_ERR "%d:%u:%d : no or invalid class specific endpoint descriptor\n",
2508                                    dev->devnum, iface_no, altno);
2509                         continue;
2510                 }
2511
2512                 fp = kmalloc(sizeof(*fp), GFP_KERNEL);
2513                 if (! fp) {
2514                         snd_printk(KERN_ERR "cannot malloc\n");
2515                         return -ENOMEM;
2516                 }
2517
2518                 memset(fp, 0, sizeof(*fp));
2519                 fp->iface = iface_no;
2520                 fp->altsetting = altno;
2521                 fp->altset_idx = i;
2522                 fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress;
2523                 fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
2524                 fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
2525                 if (snd_usb_get_speed(dev) == USB_SPEED_HIGH)
2526                         fp->maxpacksize = (((fp->maxpacksize >> 11) & 3) + 1)
2527                                         * (fp->maxpacksize & 0x7ff);
2528                 fp->attributes = csep[3];
2529
2530                 /* some quirks for attributes here */
2531
2532                 switch (chip->usb_id) {
2533                 case USB_ID(0x0a92, 0x0053): /* AudioTrak Optoplay */
2534                         /* Optoplay sets the sample rate attribute although
2535                          * it seems not supporting it in fact.
2536                          */
2537                         fp->attributes &= ~EP_CS_ATTR_SAMPLE_RATE;
2538                         break;
2539                 case USB_ID(0x041e, 0x3020): /* Creative SB Audigy 2 NX */
2540                 case USB_ID(0x0763, 0x2003): /* M-Audio Audiophile USB */
2541                         /* doesn't set the sample rate attribute, but supports it */
2542                         fp->attributes |= EP_CS_ATTR_SAMPLE_RATE;
2543                         break;
2544                 case USB_ID(0x047f, 0x0ca1): /* plantronics headset */
2545                 case USB_ID(0x077d, 0x07af): /* Griffin iMic (note that there is
2546                                                 an older model 77d:223) */
2547                 /*
2548                  * plantronics headset and Griffin iMic have set adaptive-in
2549                  * although it's really not...
2550                  */
2551                         fp->ep_attr &= ~EP_ATTR_MASK;
2552                         if (stream == SNDRV_PCM_STREAM_PLAYBACK)
2553                                 fp->ep_attr |= EP_ATTR_ADAPTIVE;
2554                         else
2555                                 fp->ep_attr |= EP_ATTR_SYNC;
2556                         break;
2557                 }
2558
2559                 /* ok, let's parse further... */
2560                 if (parse_audio_format(chip, fp, format, fmt, stream) < 0) {
2561                         kfree(fp->rate_table);
2562                         kfree(fp);
2563                         continue;
2564                 }
2565
2566                 snd_printdd(KERN_INFO "%d:%u:%d: add audio endpoint 0x%x\n", dev->devnum, iface_no, i, fp->endpoint);
2567                 err = add_audio_endpoint(chip, stream, fp);
2568                 if (err < 0) {
2569                         kfree(fp->rate_table);
2570                         kfree(fp);
2571                         return err;
2572                 }
2573                 /* try to set the interface... */
2574                 usb_set_interface(chip->dev, iface_no, altno);
2575                 init_usb_pitch(chip->dev, iface_no, alts, fp);
2576                 init_usb_sample_rate(chip->dev, iface_no, alts, fp, fp->rate_max);
2577         }
2578         return 0;
2579 }
2580
2581
2582 /*
2583  * disconnect streams
2584  * called from snd_usb_audio_disconnect()
2585  */
2586 static void snd_usb_stream_disconnect(struct list_head *head)
2587 {
2588         int idx;
2589         snd_usb_stream_t *as;
2590         snd_usb_substream_t *subs;
2591
2592         as = list_entry(head, snd_usb_stream_t, list);
2593         for (idx = 0; idx < 2; idx++) {
2594                 subs = &as->substream[idx];
2595                 if (!subs->num_formats)
2596                         return;
2597                 release_substream_urbs(subs, 1);
2598                 subs->interface = -1;
2599         }
2600 }
2601
2602 /*
2603  * parse audio control descriptor and create pcm/midi streams
2604  */
2605 static int snd_usb_create_streams(snd_usb_audio_t *chip, int ctrlif)
2606 {
2607         struct usb_device *dev = chip->dev;
2608         struct usb_host_interface *host_iface;
2609         struct usb_interface *iface;
2610         unsigned char *p1;
2611         int i, j;
2612
2613         /* find audiocontrol interface */
2614         host_iface = &usb_ifnum_to_if(dev, ctrlif)->altsetting[0];
2615         if (!(p1 = snd_usb_find_csint_desc(host_iface->extra, host_iface->extralen, NULL, HEADER))) {
2616                 snd_printk(KERN_ERR "cannot find HEADER\n");
2617                 return -EINVAL;
2618         }
2619         if (! p1[7] || p1[0] < 8 + p1[7]) {
2620                 snd_printk(KERN_ERR "invalid HEADER\n");
2621                 return -EINVAL;
2622         }
2623
2624         /*
2625          * parse all USB audio streaming interfaces
2626          */
2627         for (i = 0; i < p1[7]; i++) {
2628                 struct usb_host_interface *alts;
2629                 struct usb_interface_descriptor *altsd;
2630                 j = p1[8 + i];
2631                 iface = usb_ifnum_to_if(dev, j);
2632                 if (!iface) {
2633                         snd_printk(KERN_ERR "%d:%u:%d : does not exist\n",
2634                                    dev->devnum, ctrlif, j);
2635                         continue;
2636                 }
2637                 if (usb_interface_claimed(iface)) {
2638                         snd_printdd(KERN_INFO "%d:%d:%d: skipping, already claimed\n", dev->devnum, ctrlif, j);
2639                         continue;
2640                 }
2641                 alts = &iface->altsetting[0];
2642                 altsd = get_iface_desc(alts);
2643                 if ((altsd->bInterfaceClass == USB_CLASS_AUDIO ||
2644                      altsd->bInterfaceClass == USB_CLASS_VENDOR_SPEC) &&
2645                     altsd->bInterfaceSubClass == USB_SUBCLASS_MIDI_STREAMING) {
2646                         if (snd_usb_create_midi_interface(chip, iface, NULL) < 0) {
2647                                 snd_printk(KERN_ERR "%d:%u:%d: cannot create sequencer device\n", dev->devnum, ctrlif, j);
2648                                 continue;
2649                         }
2650                         usb_driver_claim_interface(&usb_audio_driver, iface, (void *)-1L);
2651                         continue;
2652                 }
2653                 if ((altsd->bInterfaceClass != USB_CLASS_AUDIO &&
2654                      altsd->bInterfaceClass != USB_CLASS_VENDOR_SPEC) ||
2655                     altsd->bInterfaceSubClass != USB_SUBCLASS_AUDIO_STREAMING) {
2656                         snd_printdd(KERN_ERR "%d:%u:%d: skipping non-supported interface %d\n", dev->devnum, ctrlif, j, altsd->bInterfaceClass);
2657                         /* skip non-supported classes */
2658                         continue;
2659                 }
2660                 if (! parse_audio_endpoints(chip, j)) {
2661                         usb_set_interface(dev, j, 0); /* reset the current interface */
2662                         usb_driver_claim_interface(&usb_audio_driver, iface, (void *)-1L);
2663                 }
2664         }
2665
2666         return 0;
2667 }
2668
2669 /*
2670  * create a stream for an endpoint/altsetting without proper descriptors
2671  */
2672 static int create_fixed_stream_quirk(snd_usb_audio_t *chip,
2673                                      struct usb_interface *iface,
2674                                      const snd_usb_audio_quirk_t *quirk)
2675 {
2676         struct audioformat *fp;
2677         struct usb_host_interface *alts;
2678         int stream, err;
2679         int *rate_table = NULL;
2680
2681         fp = kmalloc(sizeof(*fp), GFP_KERNEL);
2682         if (! fp) {
2683                 snd_printk(KERN_ERR "cannot malloc\n");
2684                 return -ENOMEM;
2685         }
2686         memcpy(fp, quirk->data, sizeof(*fp));
2687         if (fp->nr_rates > 0) {
2688                 rate_table = kmalloc(sizeof(int) * fp->nr_rates, GFP_KERNEL);
2689                 if (!rate_table) {
2690                         kfree(fp);
2691                         return -ENOMEM;
2692                 }
2693                 memcpy(rate_table, fp->rate_table, sizeof(int) * fp->nr_rates);
2694                 fp->rate_table = rate_table;
2695         }
2696
2697         stream = (fp->endpoint & USB_DIR_IN)
2698                 ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
2699         err = add_audio_endpoint(chip, stream, fp);
2700         if (err < 0) {
2701                 kfree(fp);
2702                 kfree(rate_table);
2703                 return err;
2704         }
2705         if (fp->iface != get_iface_desc(&iface->altsetting[0])->bInterfaceNumber ||
2706             fp->altset_idx >= iface->num_altsetting) {
2707                 kfree(fp);
2708                 kfree(rate_table);
2709                 return -EINVAL;
2710         }
2711         alts = &iface->altsetting[fp->altset_idx];
2712         usb_set_interface(chip->dev, fp->iface, 0);
2713         init_usb_pitch(chip->dev, fp->iface, alts, fp);
2714         init_usb_sample_rate(chip->dev, fp->iface, alts, fp, fp->rate_max);
2715         return 0;
2716 }
2717
2718 /*
2719  * create a stream for an interface with proper descriptors
2720  */
2721 static int create_standard_interface_quirk(snd_usb_audio_t *chip,
2722                                            struct usb_interface *iface,
2723                                            const snd_usb_audio_quirk_t *quirk)
2724 {
2725         struct usb_host_interface *alts;
2726         struct usb_interface_descriptor *altsd;
2727         int err;
2728
2729         alts = &iface->altsetting[0];
2730         altsd = get_iface_desc(alts);
2731         switch (quirk->type) {
2732         case QUIRK_AUDIO_STANDARD_INTERFACE:
2733                 err = parse_audio_endpoints(chip, altsd->bInterfaceNumber);
2734                 if (!err)
2735                         usb_set_interface(chip->dev, altsd->bInterfaceNumber, 0); /* reset the current interface */
2736                 break;
2737         case QUIRK_MIDI_STANDARD_INTERFACE:
2738                 err = snd_usb_create_midi_interface(chip, iface, NULL);
2739                 break;
2740         default:
2741                 snd_printd(KERN_ERR "invalid quirk type %d\n", quirk->type);
2742                 return -ENXIO;
2743         }
2744         if (err < 0) {
2745                 snd_printk(KERN_ERR "cannot setup if %d: error %d\n",
2746                            altsd->bInterfaceNumber, err);
2747                 return err;
2748         }
2749         return 0;
2750 }
2751
2752 /*
2753  * Create a stream for an Edirol UA-700/UA-25 interface.  The only way
2754  * to detect the sample rate is by looking at wMaxPacketSize.
2755  */
2756 static int create_ua700_ua25_quirk(snd_usb_audio_t *chip,
2757                                    struct usb_interface *iface,
2758                                    const snd_usb_audio_quirk_t *quirk)
2759 {
2760         static const struct audioformat ua_format = {
2761                 .format = SNDRV_PCM_FORMAT_S24_3LE,
2762                 .channels = 2,
2763                 .fmt_type = USB_FORMAT_TYPE_I,
2764                 .altsetting = 1,
2765                 .altset_idx = 1,
2766                 .rates = SNDRV_PCM_RATE_CONTINUOUS,
2767         };
2768         struct usb_host_interface *alts;
2769         struct usb_interface_descriptor *altsd;
2770         struct audioformat *fp;
2771         int stream, err;
2772
2773         /* both PCM and MIDI interfaces have 2 altsettings */
2774         if (iface->num_altsetting != 2)
2775                 return -ENXIO;
2776         alts = &iface->altsetting[1];
2777         altsd = get_iface_desc(alts);
2778
2779         if (altsd->bNumEndpoints == 2) {
2780                 static const snd_usb_midi_endpoint_info_t ua700_ep = {
2781                         .out_cables = 0x0003,
2782                         .in_cables  = 0x0003
2783                 };
2784                 static const snd_usb_audio_quirk_t ua700_quirk = {
2785                         .type = QUIRK_MIDI_FIXED_ENDPOINT,
2786                         .data = &ua700_ep
2787                 };
2788                 static const snd_usb_midi_endpoint_info_t ua25_ep = {
2789                         .out_cables = 0x0001,
2790                         .in_cables  = 0x0001
2791                 };
2792                 static const snd_usb_audio_quirk_t ua25_quirk = {
2793                         .type = QUIRK_MIDI_FIXED_ENDPOINT,
2794                         .data = &ua25_ep
2795                 };
2796                 if (chip->usb_id == USB_ID(0x0582, 0x002b))
2797                         return snd_usb_create_midi_interface(chip, iface,
2798                                                              &ua700_quirk);
2799                 else
2800                         return snd_usb_create_midi_interface(chip, iface,
2801                                                              &ua25_quirk);
2802         }
2803
2804         if (altsd->bNumEndpoints != 1)
2805                 return -ENXIO;
2806
2807         fp = kmalloc(sizeof(*fp), GFP_KERNEL);
2808         if (!fp)
2809                 return -ENOMEM;
2810         memcpy(fp, &ua_format, sizeof(*fp));
2811
2812         fp->iface = altsd->bInterfaceNumber;
2813         fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress;
2814         fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
2815         fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
2816
2817         switch (fp->maxpacksize) {
2818         case 0x120:
2819                 fp->rate_max = fp->rate_min = 44100;
2820                 break;
2821         case 0x138:
2822         case 0x140:
2823                 fp->rate_max = fp->rate_min = 48000;
2824                 break;
2825         case 0x258:
2826         case 0x260:
2827                 fp->rate_max = fp->rate_min = 96000;
2828                 break;
2829         default:
2830                 snd_printk(KERN_ERR "unknown sample rate\n");
2831                 kfree(fp);
2832                 return -ENXIO;
2833         }
2834
2835         stream = (fp->endpoint & USB_DIR_IN)
2836                 ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
2837         err = add_audio_endpoint(chip, stream, fp);
2838         if (err < 0) {
2839                 kfree(fp);
2840                 return err;
2841         }
2842         usb_set_interface(chip->dev, fp->iface, 0);
2843         return 0;
2844 }
2845
2846 /*
2847  * Create a stream for an Edirol UA-1000 interface.
2848  */
2849 static int create_ua1000_quirk(snd_usb_audio_t *chip,
2850                                struct usb_interface *iface,
2851                                const snd_usb_audio_quirk_t *quirk)
2852 {
2853         static const struct audioformat ua1000_format = {
2854                 .format = SNDRV_PCM_FORMAT_S32_LE,
2855                 .fmt_type = USB_FORMAT_TYPE_I,
2856                 .altsetting = 1,
2857                 .altset_idx = 1,
2858                 .attributes = 0,
2859                 .rates = SNDRV_PCM_RATE_CONTINUOUS,
2860         };
2861         struct usb_host_interface *alts;
2862         struct usb_interface_descriptor *altsd;
2863         struct audioformat *fp;
2864         int stream, err;
2865
2866         if (iface->num_altsetting != 2)
2867                 return -ENXIO;
2868         alts = &iface->altsetting[1];
2869         altsd = get_iface_desc(alts);
2870         if (alts->extralen != 11 || alts->extra[1] != CS_AUDIO_INTERFACE ||
2871             altsd->bNumEndpoints != 1)
2872                 return -ENXIO;
2873
2874         fp = kmalloc(sizeof(*fp), GFP_KERNEL);
2875         if (!fp)
2876                 return -ENOMEM;
2877         memcpy(fp, &ua1000_format, sizeof(*fp));
2878
2879         fp->channels = alts->extra[4];
2880         fp->iface = altsd->bInterfaceNumber;
2881         fp->endpoint = get_endpoint(alts, 0)->bEndpointAddress;
2882         fp->ep_attr = get_endpoint(alts, 0)->bmAttributes;
2883         fp->maxpacksize = le16_to_cpu(get_endpoint(alts, 0)->wMaxPacketSize);
2884         fp->rate_max = fp->rate_min = combine_triple(&alts->extra[8]);
2885
2886         stream = (fp->endpoint & USB_DIR_IN)
2887                 ? SNDRV_PCM_STREAM_CAPTURE : SNDRV_PCM_STREAM_PLAYBACK;
2888         err = add_audio_endpoint(chip, stream, fp);
2889         if (err < 0) {
2890                 kfree(fp);
2891                 return err;
2892         }
2893         /* FIXME: playback must be synchronized to capture */
2894         usb_set_interface(chip->dev, fp->iface, 0);
2895         return 0;
2896 }
2897
2898 static int snd_usb_create_quirk(snd_usb_audio_t *chip,
2899                                 struct usb_interface *iface,
2900                                 const snd_usb_audio_quirk_t *quirk);
2901
2902 /*
2903  * handle the quirks for the contained interfaces
2904  */
2905 static int create_composite_quirk(snd_usb_audio_t *chip,
2906                                   struct usb_interface *iface,
2907                                   const snd_usb_audio_quirk_t *quirk)
2908 {
2909         int probed_ifnum = get_iface_desc(iface->altsetting)->bInterfaceNumber;
2910         int err;
2911
2912         for (quirk = quirk->data; quirk->ifnum >= 0; ++quirk) {
2913                 iface = usb_ifnum_to_if(chip->dev, quirk->ifnum);
2914                 if (!iface)
2915                         continue;
2916                 if (quirk->ifnum != probed_ifnum &&
2917                     usb_interface_claimed(iface))
2918                         continue;
2919                 err = snd_usb_create_quirk(chip, iface, quirk);
2920                 if (err < 0)
2921                         return err;
2922                 if (quirk->ifnum != probed_ifnum)
2923                         usb_driver_claim_interface(&usb_audio_driver, iface, (void *)-1L);
2924         }
2925         return 0;
2926 }
2927
2928 static int ignore_interface_quirk(snd_usb_audio_t *chip,
2929                                   struct usb_interface *iface,
2930                                   const snd_usb_audio_quirk_t *quirk)
2931 {
2932         return 0;
2933 }
2934
2935
2936 /*
2937  * boot quirks
2938  */
2939
2940 #define EXTIGY_FIRMWARE_SIZE_OLD 794
2941 #define EXTIGY_FIRMWARE_SIZE_NEW 483
2942
2943 static int snd_usb_extigy_boot_quirk(struct usb_device *dev, struct usb_interface *intf)
2944 {
2945         struct usb_host_config *config = dev->actconfig;
2946         int err;
2947
2948         if (le16_to_cpu(get_cfg_desc(config)->wTotalLength) == EXTIGY_FIRMWARE_SIZE_OLD ||
2949             le16_to_cpu(get_cfg_desc(config)->wTotalLength) == EXTIGY_FIRMWARE_SIZE_NEW) {
2950                 snd_printdd("sending Extigy boot sequence...\n");
2951                 /* Send message to force it to reconnect with full interface. */
2952                 err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev,0),
2953                                       0x10, 0x43, 0x0001, 0x000a, NULL, 0, 1000);
2954                 if (err < 0) snd_printdd("error sending boot message: %d\n", err);
2955                 err = usb_get_descriptor(dev, USB_DT_DEVICE, 0,
2956                                 &dev->descriptor, sizeof(dev->descriptor));
2957                 config = dev->actconfig;
2958                 if (err < 0) snd_printdd("error usb_get_descriptor: %d\n", err);
2959                 err = usb_reset_configuration(dev);
2960                 if (err < 0) snd_printdd("error usb_reset_configuration: %d\n", err);
2961                 snd_printdd("extigy_boot: new boot length = %d\n",
2962                             le16_to_cpu(get_cfg_desc(config)->wTotalLength));
2963                 return -ENODEV; /* quit this anyway */
2964         }
2965         return 0;
2966 }
2967
2968 static int snd_usb_audigy2nx_boot_quirk(struct usb_device *dev)
2969 {
2970         u8 buf = 1;
2971
2972         snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), 0x2a,
2973                         USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_OTHER,
2974                         0, 0, &buf, 1, 1000);
2975         if (buf == 0) {
2976                 snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0x29,
2977                                 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_OTHER,
2978                                 1, 2000, NULL, 0, 1000);
2979                 return -ENODEV;
2980         }
2981         return 0;
2982 }
2983
2984
2985 /*
2986  * audio-interface quirks
2987  *
2988  * returns zero if no standard audio/MIDI parsing is needed.
2989  * returns a postive value if standard audio/midi interfaces are parsed
2990  * after this.
2991  * returns a negative value at error.
2992  */
2993 static int snd_usb_create_quirk(snd_usb_audio_t *chip,
2994                                 struct usb_interface *iface,
2995                                 const snd_usb_audio_quirk_t *quirk)
2996 {
2997         typedef int (*quirk_func_t)(snd_usb_audio_t *, struct usb_interface *,
2998                                     const snd_usb_audio_quirk_t *);
2999         static const quirk_func_t quirk_funcs[] = {
3000                 [QUIRK_IGNORE_INTERFACE] = ignore_interface_quirk,
3001                 [QUIRK_COMPOSITE] = create_composite_quirk,
3002                 [QUIRK_MIDI_STANDARD_INTERFACE] = snd_usb_create_midi_interface,
3003                 [QUIRK_MIDI_FIXED_ENDPOINT] = snd_usb_create_midi_interface,
3004                 [QUIRK_MIDI_YAMAHA] = snd_usb_create_midi_interface,
3005                 [QUIRK_MIDI_MIDIMAN] = snd_usb_create_midi_interface,
3006                 [QUIRK_MIDI_NOVATION] = snd_usb_create_midi_interface,
3007                 [QUIRK_MIDI_RAW] = snd_usb_create_midi_interface,
3008                 [QUIRK_MIDI_EMAGIC] = snd_usb_create_midi_interface,
3009                 [QUIRK_MIDI_MIDITECH] = snd_usb_create_midi_interface,
3010                 [QUIRK_AUDIO_STANDARD_INTERFACE] = create_standard_interface_quirk,
3011                 [QUIRK_AUDIO_FIXED_ENDPOINT] = create_fixed_stream_quirk,
3012                 [QUIRK_AUDIO_EDIROL_UA700_UA25] = create_ua700_ua25_quirk,
3013                 [QUIRK_AUDIO_EDIROL_UA1000] = create_ua1000_quirk,
3014         };
3015
3016         if (quirk->type < QUIRK_TYPE_COUNT) {
3017                 return quirk_funcs[quirk->type](chip, iface, quirk);
3018         } else {
3019                 snd_printd(KERN_ERR "invalid quirk type %d\n", quirk->type);
3020                 return -ENXIO;
3021         }
3022 }
3023
3024
3025 /*
3026  * common proc files to show the usb device info
3027  */
3028 static void proc_audio_usbbus_read(snd_info_entry_t *entry, snd_info_buffer_t *buffer)
3029 {
3030         snd_usb_audio_t *chip = entry->private_data;
3031         if (! chip->shutdown)
3032                 snd_iprintf(buffer, "%03d/%03d\n", chip->dev->bus->busnum, chip->dev->devnum);
3033 }
3034
3035 static void proc_audio_usbid_read(snd_info_entry_t *entry, snd_info_buffer_t *buffer)
3036 {
3037         snd_usb_audio_t *chip = entry->private_data;
3038         if (! chip->shutdown)
3039                 snd_iprintf(buffer, "%04x:%04x\n", 
3040                             USB_ID_VENDOR(chip->usb_id),
3041                             USB_ID_PRODUCT(chip->usb_id));
3042 }
3043
3044 static void snd_usb_audio_create_proc(snd_usb_audio_t *chip)
3045 {
3046         snd_info_entry_t *entry;
3047         if (! snd_card_proc_new(chip->card, "usbbus", &entry))
3048                 snd_info_set_text_ops(entry, chip, 1024, proc_audio_usbbus_read);
3049         if (! snd_card_proc_new(chip->card, "usbid", &entry))
3050                 snd_info_set_text_ops(entry, chip, 1024, proc_audio_usbid_read);
3051 }
3052
3053 /*
3054  * free the chip instance
3055  *
3056  * here we have to do not much, since pcm and controls are already freed
3057  *
3058  */
3059
3060 static int snd_usb_audio_free(snd_usb_audio_t *chip)
3061 {
3062         kfree(chip);
3063         return 0;
3064 }
3065
3066 static int snd_usb_audio_dev_free(snd_device_t *device)
3067 {
3068         snd_usb_audio_t *chip = device->device_data;
3069         return snd_usb_audio_free(chip);
3070 }
3071
3072
3073 /*
3074  * create a chip instance and set its names.
3075  */
3076 static int snd_usb_audio_create(struct usb_device *dev, int idx,
3077                                 const snd_usb_audio_quirk_t *quirk,
3078                                 snd_usb_audio_t **rchip)
3079 {
3080         snd_card_t *card;
3081         snd_usb_audio_t *chip;
3082         int err, len;
3083         char component[14];
3084         static snd_device_ops_t ops = {
3085                 .dev_free =     snd_usb_audio_dev_free,
3086         };
3087
3088         *rchip = NULL;
3089
3090         if (snd_usb_get_speed(dev) != USB_SPEED_FULL &&
3091             snd_usb_get_speed(dev) != USB_SPEED_HIGH) {
3092                 snd_printk(KERN_ERR "unknown device speed %d\n", snd_usb_get_speed(dev));
3093                 return -ENXIO;
3094         }
3095
3096         card = snd_card_new(index[idx], id[idx], THIS_MODULE, 0);
3097         if (card == NULL) {
3098                 snd_printk(KERN_ERR "cannot create card instance %d\n", idx);
3099                 return -ENOMEM;
3100         }
3101
3102         chip = kcalloc(1, sizeof(*chip), GFP_KERNEL);
3103         if (! chip) {
3104                 snd_card_free(card);
3105                 return -ENOMEM;
3106         }
3107
3108         chip->index = idx;
3109         chip->dev = dev;
3110         chip->card = card;
3111         chip->usb_id = USB_ID(le16_to_cpu(dev->descriptor.idVendor),
3112                               le16_to_cpu(dev->descriptor.idProduct));
3113         INIT_LIST_HEAD(&chip->pcm_list);
3114         INIT_LIST_HEAD(&chip->midi_list);
3115         INIT_LIST_HEAD(&chip->mixer_list);
3116
3117         if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
3118                 snd_usb_audio_free(chip);
3119                 snd_card_free(card);
3120                 return err;
3121         }
3122
3123         strcpy(card->driver, "USB-Audio");
3124         sprintf(component, "USB%04x:%04x",
3125                 USB_ID_VENDOR(chip->usb_id), USB_ID_PRODUCT(chip->usb_id));
3126         snd_component_add(card, component);
3127
3128         /* retrieve the device string as shortname */
3129         if (quirk && quirk->product_name) {
3130                 strlcpy(card->shortname, quirk->product_name, sizeof(card->shortname));
3131         } else {
3132                 if (!dev->descriptor.iProduct ||
3133                     usb_string(dev, dev->descriptor.iProduct,
3134                                card->shortname, sizeof(card->shortname)) <= 0) {
3135                         /* no name available from anywhere, so use ID */
3136                         sprintf(card->shortname, "USB Device %#04x:%#04x",
3137                                 USB_ID_VENDOR(chip->usb_id),
3138                                 USB_ID_PRODUCT(chip->usb_id));
3139                 }
3140         }
3141
3142         /* retrieve the vendor and device strings as longname */
3143         if (quirk && quirk->vendor_name) {
3144                 len = strlcpy(card->longname, quirk->vendor_name, sizeof(card->longname));
3145         } else {
3146                 if (dev->descriptor.iManufacturer)
3147                         len = usb_string(dev, dev->descriptor.iManufacturer,
3148                                          card->longname, sizeof(card->longname));
3149                 else
3150                         len = 0;
3151                 /* we don't really care if there isn't any vendor string */
3152         }
3153         if (len > 0)
3154                 strlcat(card->longname, " ", sizeof(card->longname));
3155
3156         strlcat(card->longname, card->shortname, sizeof(card->longname));
3157
3158         len = strlcat(card->longname, " at ", sizeof(card->longname));
3159
3160         if (len < sizeof(card->longname))
3161                 usb_make_path(dev, card->longname + len, sizeof(card->longname) - len);
3162
3163         strlcat(card->longname,
3164                 snd_usb_get_speed(dev) == USB_SPEED_FULL ? ", full speed" : ", high speed",
3165                 sizeof(card->longname));
3166
3167         snd_usb_audio_create_proc(chip);
3168
3169         *rchip = chip;
3170         return 0;
3171 }
3172
3173
3174 /*
3175  * probe the active usb device
3176  *
3177  * note that this can be called multiple times per a device, when it
3178  * includes multiple audio control interfaces.
3179  *
3180  * thus we check the usb device pointer and creates the card instance
3181  * only at the first time.  the successive calls of this function will
3182  * append the pcm interface to the corresponding card.
3183  */
3184 static void *snd_usb_audio_probe(struct usb_device *dev,
3185                                  struct usb_interface *intf,
3186                                  const struct usb_device_id *usb_id)
3187 {
3188         struct usb_host_config *config = dev->actconfig;
3189         const snd_usb_audio_quirk_t *quirk = (const snd_usb_audio_quirk_t *)usb_id->driver_info;
3190         int i, err;
3191         snd_usb_audio_t *chip;
3192         struct usb_host_interface *alts;
3193         int ifnum;
3194         u32 id;
3195
3196         alts = &intf->altsetting[0];
3197         ifnum = get_iface_desc(alts)->bInterfaceNumber;
3198         id = USB_ID(le16_to_cpu(dev->descriptor.idVendor),
3199                     le16_to_cpu(dev->descriptor.idProduct));
3200
3201         if (quirk && quirk->ifnum >= 0 && ifnum != quirk->ifnum)
3202                 goto __err_val;
3203
3204         /* SB Extigy needs special boot-up sequence */
3205         /* if more models come, this will go to the quirk list. */
3206         if (id == USB_ID(0x041e, 0x3000)) {
3207                 if (snd_usb_extigy_boot_quirk(dev, intf) < 0)
3208                         goto __err_val;
3209                 config = dev->actconfig;
3210         }
3211         /* SB Audigy 2 NX needs its own boot-up magic, too */
3212         if (id == USB_ID(0x041e, 0x3020)) {
3213                 if (snd_usb_audigy2nx_boot_quirk(dev) < 0)
3214                         goto __err_val;
3215         }
3216
3217         /*
3218          * found a config.  now register to ALSA
3219          */
3220
3221         /* check whether it's already registered */
3222         chip = NULL;
3223         down(&register_mutex);
3224         for (i = 0; i < SNDRV_CARDS; i++) {
3225                 if (usb_chip[i] && usb_chip[i]->dev == dev) {
3226                         if (usb_chip[i]->shutdown) {
3227                                 snd_printk(KERN_ERR "USB device is in the shutdown state, cannot create a card instance\n");
3228                                 goto __error;
3229                         }
3230                         chip = usb_chip[i];
3231                         break;
3232                 }
3233         }
3234         if (! chip) {
3235                 /* it's a fresh one.
3236                  * now look for an empty slot and create a new card instance
3237                  */
3238                 /* first, set the current configuration for this device */
3239                 if (usb_reset_configuration(dev) < 0) {
3240                         snd_printk(KERN_ERR "cannot reset configuration (value 0x%x)\n", get_cfg_desc(config)->bConfigurationValue);
3241                         goto __error;
3242                 }
3243                 for (i = 0; i < SNDRV_CARDS; i++)
3244                         if (enable[i] && ! usb_chip[i] &&
3245                             (vid[i] == -1 || vid[i] == USB_ID_VENDOR(id)) &&
3246                             (pid[i] == -1 || pid[i] == USB_ID_PRODUCT(id))) {
3247                                 if (snd_usb_audio_create(dev, i, quirk, &chip) < 0) {
3248                                         goto __error;
3249                                 }
3250                                 snd_card_set_dev(chip->card, &intf->dev);
3251                                 break;
3252                         }
3253                 if (! chip) {
3254                         snd_printk(KERN_ERR "no available usb audio device\n");
3255                         goto __error;
3256                 }
3257         }
3258
3259         err = 1; /* continue */
3260         if (quirk && quirk->ifnum != QUIRK_NO_INTERFACE) {
3261                 /* need some special handlings */
3262                 if ((err = snd_usb_create_quirk(chip, intf, quirk)) < 0)
3263                         goto __error;
3264         }
3265
3266         if (err > 0) {
3267                 /* create normal USB audio interfaces */
3268                 if (snd_usb_create_streams(chip, ifnum) < 0 ||
3269                     snd_usb_create_mixer(chip, ifnum) < 0) {
3270                         goto __error;
3271                 }
3272         }
3273
3274         /* we are allowed to call snd_card_register() many times */
3275         if (snd_card_register(chip->card) < 0) {
3276                 goto __error;
3277         }
3278
3279         usb_chip[chip->index] = chip;
3280         chip->num_interfaces++;
3281         up(&register_mutex);
3282         return chip;
3283
3284  __error:
3285         if (chip && !chip->num_interfaces)
3286                 snd_card_free(chip->card);
3287         up(&register_mutex);
3288  __err_val:
3289         return NULL;
3290 }
3291
3292 /*
3293  * we need to take care of counter, since disconnection can be called also
3294  * many times as well as usb_audio_probe().
3295  */
3296 static void snd_usb_audio_disconnect(struct usb_device *dev, void *ptr)
3297 {
3298         snd_usb_audio_t *chip;
3299         snd_card_t *card;
3300         struct list_head *p;
3301
3302         if (ptr == (void *)-1L)
3303                 return;
3304
3305         chip = ptr;
3306         card = chip->card;
3307         down(&register_mutex);
3308         chip->shutdown = 1;
3309         chip->num_interfaces--;
3310         if (chip->num_interfaces <= 0) {
3311                 snd_card_disconnect(card);
3312                 /* release the pcm resources */
3313                 list_for_each(p, &chip->pcm_list) {
3314                         snd_usb_stream_disconnect(p);
3315                 }
3316                 /* release the midi resources */
3317                 list_for_each(p, &chip->midi_list) {
3318                         snd_usbmidi_disconnect(p);
3319                 }
3320                 /* release mixer resources */
3321                 list_for_each(p, &chip->mixer_list) {
3322                         snd_usb_mixer_disconnect(p);
3323                 }
3324                 usb_chip[chip->index] = NULL;
3325                 up(&register_mutex);
3326                 snd_card_free(card);
3327         } else {
3328                 up(&register_mutex);
3329         }
3330 }
3331
3332 /*
3333  * new 2.5 USB kernel API
3334  */
3335 static int usb_audio_probe(struct usb_interface *intf,
3336                            const struct usb_device_id *id)
3337 {
3338         void *chip;
3339         chip = snd_usb_audio_probe(interface_to_usbdev(intf), intf, id);
3340         if (chip) {
3341                 dev_set_drvdata(&intf->dev, chip);
3342                 return 0;
3343         } else
3344                 return -EIO;
3345 }
3346
3347 static void usb_audio_disconnect(struct usb_interface *intf)
3348 {
3349         snd_usb_audio_disconnect(interface_to_usbdev(intf),
3350                                  dev_get_drvdata(&intf->dev));
3351 }
3352
3353
3354 static int __init snd_usb_audio_init(void)
3355 {
3356         if (nrpacks < MIN_PACKS_URB || nrpacks > MAX_PACKS) {
3357                 printk(KERN_WARNING "invalid nrpacks value.\n");
3358                 return -EINVAL;
3359         }
3360         usb_register(&usb_audio_driver);
3361         return 0;
3362 }
3363
3364
3365 static void __exit snd_usb_audio_cleanup(void)
3366 {
3367         usb_deregister(&usb_audio_driver);
3368 }
3369
3370 module_init(snd_usb_audio_init);
3371 module_exit(snd_usb_audio_cleanup);