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