1 /*****************************************************************************/
4 * audio.c -- USB Audio Class driver
7 * Alan Cox (alan@lxorguk.ukuu.org.uk)
8 * Thomas Sailer (sailer@ife.ee.ethz.ch)
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
16 * 1999-09-07: Alan Cox
17 * Parsing Audio descriptor patch
18 * 1999-09-08: Thomas Sailer
19 * Added OSS compatible data io functions; both parts of the
20 * driver remain to be glued together
21 * 1999-09-10: Thomas Sailer
22 * Beautified the driver. Added sample format conversions.
23 * Still not properly glued with the parsing code.
24 * The parsing code seems to have its problems btw,
25 * Since it parses all available configs but doesn't
26 * store which iface/altsetting belongs to which config.
27 * 1999-09-20: Thomas Sailer
28 * Threw out Alan's parsing code and implemented my own one.
29 * You cannot reasonnably linearly parse audio descriptors,
30 * especially the AudioClass descriptors have to be considered
31 * pointer lists. Mixer parsing untested, due to lack of device.
32 * First stab at synch pipe implementation, the Dallas USB DAC
33 * wants to use an Asynch out pipe. usb_audio_state now basically
34 * only contains lists of mixer and wave devices. We can therefore
35 * now have multiple mixer/wave devices per USB device.
36 * 1999-10-28: Thomas Sailer
37 * Converted to URB API. Fixed a taskstate/wakeup semantics mistake
38 * that made the driver consume all available CPU cycles.
39 * Now runs stable on UHCI-Acher/Fliegl/Sailer.
40 * 1999-10-31: Thomas Sailer
41 * Audio can now be unloaded if it is not in use by any mixer
42 * or dsp client (formerly you had to disconnect the audio devices
44 * Finally, about three months after ordering, my "Maxxtro SPK222"
45 * speakers arrived, isn't disdata a great mail order company 8-)
46 * Parse class specific endpoint descriptor of the audiostreaming
47 * interfaces and take the endpoint attributes from there.
48 * Unbelievably, the Philips USB DAC has a sampling rate range
49 * of over a decade, yet does not support the sampling rate control!
50 * No wonder it sounds so bad, has very audible sampling rate
51 * conversion distortion. Don't try to listen to it using
53 * "Let's make things better" -> but please Philips start with your
55 * 1999-11-02: It takes the Philips boxes several seconds to acquire synchronisation
56 * that means they won't play short sounds. Should probably maintain
57 * the ISO datastream even if there's nothing to play.
58 * Fix counting the total_bytes counter, RealPlayer G2 depends on it.
59 * 1999-12-20: Fix bad bug in conversion to per interface probing.
60 * disconnect was called multiple times for the audio device,
61 * leading to a premature freeing of the audio structures
68 * Alan Cox and Thomas Sailer are starting to dig at opposite ends and
69 * are hoping to meet in the middle, just like tunnel diggers :)
70 * Alan tackles the descriptor parsing, Thomas the actual data IO and the
71 * OSS compatible interface.
73 * Data IO implementation issues
75 * A mmap'able ring buffer per direction is implemented, because
76 * almost every OSS app expects it. It is however impractical to
77 * transmit/receive USB data directly into and out of the ring buffer,
78 * due to alignment and synchronisation issues. Instead, the ring buffer
79 * feeds a constant time delay line that handles the USB issues.
81 * Now we first try to find an alternate setting that exactly matches
82 * the sample format requested by the user. If we find one, we do not
83 * need to perform any sample rate conversions. If there is no matching
84 * altsetting, we choose the closest one and perform sample format
85 * conversions. We never do sample rate conversion; these are too
86 * expensive to be performed in the kernel.
89 * - Pretty stable on UHCI-Acher/Fliegl/Sailer
90 * - Does not work on OHCI due to lack of OHCI driver supporting URB's
92 * Generally: Due to the brokenness of the Audio Class spec
93 * it seems generally impossible to write a generic Audio Class driver,
94 * so a reasonable driver should implement the features that are actually
97 * Parsing implementation issues
99 * One cannot reasonably parse the AudioClass descriptors linearly.
100 * Therefore the current implementation features routines to look
101 * for a specific descriptor in the descriptor list.
103 * How does the parsing work? First, all interfaces are searched
104 * for an AudioControl class interface. If found, the config descriptor
105 * that belongs to the current configuration is fetched from the device.
106 * Then the HEADER descriptor is fetched. It contains a list of
107 * all AudioStreaming and MIDIStreaming devices. This list is then walked,
108 * and all AudioStreaming interfaces are classified into input and output
109 * interfaces (according to the endpoint0 direction in altsetting1) (MIDIStreaming
110 * is currently not supported). The input & output list is then used
111 * to group inputs and outputs together and issued pairwise to the
112 * AudioStreaming class parser. Finally, all OUTPUT_TERMINAL descriptors
113 * are walked and issued to the mixer construction routine.
115 * The AudioStreaming parser simply enumerates all altsettings belonging
116 * to the specified interface. It looks for AS_GENERAL and FORMAT_TYPE
117 * class specific descriptors to extract the sample format/sample rate
118 * data. Only sample format types PCM and PCM8 are supported right now, and
119 * only FORMAT_TYPE_I is handled. The isochronous data endpoint needs to
120 * be the first endpoint of the interface, and the optional synchronisation
121 * isochronous endpoint the second one.
123 * Mixer construction works as follows: The various TERMINAL and UNIT
124 * descriptors span a tree from the root (OUTPUT_TERMINAL) through the
125 * intermediate nodes (UNITs) to the leaves (INPUT_TERMINAL). We walk
126 * that tree in a depth first manner. FEATURE_UNITs may contribute volume,
127 * bass and treble sliders to the mixer, MIXER_UNITs volume sliders.
128 * The terminal type encoded in the INPUT_TERMINALs feeds a heuristic
129 * to determine "meaningful" OSS slider numbers, however we will see
130 * how well this works in practice. Other features are not used at the
131 * moment, they seem less often used. Also, it seems difficult at least
132 * to construct recording source switches from SELECTOR_UNITs, but
133 * since there are not many USB ADC's available, we leave that for later.
136 /*****************************************************************************/
138 #include <linux/version.h>
139 #include <linux/kernel.h>
140 #include <linux/malloc.h>
141 #include <linux/string.h>
142 #include <linux/timer.h>
143 #include <linux/sched.h>
144 #include <linux/module.h>
145 #include <linux/sound.h>
146 #include <linux/soundcard.h>
147 #include <linux/list.h>
148 #include <linux/vmalloc.h>
149 #include <linux/wrapper.h>
150 #include <linux/init.h>
151 #include <linux/poll.h>
152 #include <linux/bitops.h>
153 #include <asm/uaccess.h>
155 #include <linux/usb.h>
159 #define AUDIO_DEBUG 1
161 #define SND_DEV_DSP16 5
164 /* --------------------------------------------------------------------- */
167 * Linked list of all audio devices...
169 static struct list_head audiodevs
= LIST_HEAD_INIT(audiodevs
);
170 static DECLARE_MUTEX(open_sem
);
173 * wait queue for processes wanting to open an USB audio device
175 static DECLARE_WAIT_QUEUE_HEAD(open_wait
);
178 #define MAXFORMATS MAX_ALT
179 #define DMABUFSHIFT 17 /* 128k worth of DMA buffer */
180 #define NRSGBUF (1U<<(DMABUFSHIFT-PAGE_SHIFT))
186 * - Synchronisation behaviour
187 * Don't touch this if you don't understand all of the above.
190 #define SYNCFRAMES DESCFRAMES
192 #define MIXFLG_STEREOIN 1
193 #define MIXFLG_STEREOOUT 2
195 struct mixerchannel
{
197 __u16 osschannel
; /* number of the OSS channel */
198 __s16 minval
, maxval
;
207 unsigned int sratelo
;
208 unsigned int sratehi
;
209 unsigned char altsetting
;
210 unsigned char attributes
;
214 /* buffer data format */
217 /* physical buffer */
218 unsigned char *sgbuf
[NRSGBUF
];
222 unsigned wrptr
, rdptr
;
223 unsigned total_bytes
;
225 unsigned error
; /* over/underrun */
226 wait_queue_head_t wait
;
227 /* redundant, but makes calculations easier */
233 unsigned ossfragshift
;
235 unsigned subdivision
;
238 struct usb_audio_state
;
240 #define FLG_URB0RUNNING 1
241 #define FLG_URB1RUNNING 2
242 #define FLG_SYNC0RUNNING 4
243 #define FLG_SYNC1RUNNING 8
244 #define FLG_RUNNING 16
245 #define FLG_CONNECTED 32
249 iso_packet_descriptor_t isoframe
[DESCFRAMES
];
254 iso_packet_descriptor_t isoframe
[SYNCFRAMES
];
258 struct usb_audiodev
{
259 struct list_head list
;
260 struct usb_audio_state
*state
;
262 /* soundcore stuff */
267 spinlock_t lock
; /* DMA buffer access spinlock */
270 int interface
; /* Interface number, -1 means not used */
271 unsigned int format
; /* USB data format */
272 unsigned int datapipe
; /* the data input pipe */
273 unsigned int syncpipe
; /* the synchronisation pipe - 0 for anything but adaptive IN mode */
274 unsigned int syncinterval
; /* P for adaptive IN mode, 0 otherwise */
275 unsigned int freqn
; /* nominal sampling rate in USB format, i.e. fs/1000 in Q10.14 */
276 unsigned int freqmax
; /* maximum sampling rate, used for buffer management */
277 unsigned int phase
; /* phase accumulator */
278 unsigned int flags
; /* see FLG_ defines */
280 struct my_data_urb durb
[2]; /* ISO descriptors for the data endpoint */
281 struct my_sync_urb surb
[2]; /* ISO sync pipe descriptor if needed */
287 int interface
; /* Interface number, -1 means not used */
288 unsigned int format
; /* USB data format */
289 unsigned int datapipe
; /* the data input pipe */
290 unsigned int syncpipe
; /* the synchronisation pipe - 0 for anything but asynchronous OUT mode */
291 unsigned int syncinterval
; /* P for asynchronous OUT mode, 0 otherwise */
292 unsigned int freqn
; /* nominal sampling rate in USB format, i.e. fs/1000 in Q10.14 */
293 unsigned int freqm
; /* momentary sampling rate in USB format, i.e. fs/1000 in Q10.14 */
294 unsigned int freqmax
; /* maximum sampling rate, used for buffer management */
295 unsigned int phase
; /* phase accumulator */
296 unsigned int flags
; /* see FLG_ defines */
298 struct my_data_urb durb
[2]; /* ISO descriptors for the data endpoint */
299 struct my_sync_urb surb
[2]; /* ISO sync pipe descriptor if needed */
305 unsigned int numfmtin
, numfmtout
;
306 struct audioformat fmtin
[MAXFORMATS
];
307 struct audioformat fmtout
[MAXFORMATS
];
310 struct usb_mixerdev
{
311 struct list_head list
;
312 struct usb_audio_state
*state
;
314 /* soundcore stuff */
317 unsigned char iface
; /* interface number of the AudioControl interface */
319 /* USB format descriptions */
320 unsigned int numch
, modcnt
;
322 /* mixch is last and gets allocated dynamically */
323 struct mixerchannel ch
[0];
326 struct usb_audio_state
{
327 struct list_head audiodev
;
330 struct usb_device
*usbdev
;
332 struct list_head audiolist
;
333 struct list_head mixerlist
;
335 unsigned count
; /* usage counter; NOTE: the usb stack is also considered a user */
338 /* private audio format extensions */
339 #define AFMT_STEREO 0x80000000
340 #define AFMT_ISSTEREO(x) ((x) & AFMT_STEREO)
341 #define AFMT_IS16BIT(x) ((x) & (AFMT_S16_LE|AFMT_S16_BE|AFMT_U16_LE|AFMT_U16_BE))
342 #define AFMT_ISUNSIGNED(x) ((x) & (AFMT_U8|AFMT_U16_LE|AFMT_U16_BE))
343 #define AFMT_BYTESSHIFT(x) ((AFMT_ISSTEREO(x) ? 1 : 0) + (AFMT_IS16BIT(x) ? 1 : 0))
344 #define AFMT_BYTES(x) (1<<AFMT_BYTESSHFIT(x))
346 /* --------------------------------------------------------------------- */
348 extern inline unsigned ld2(unsigned int x
)
373 /* --------------------------------------------------------------------- */
376 * OSS compatible ring buffer management. The ring buffer may be mmap'ed into
377 * an application address space.
379 * I first used the rvmalloc stuff copied from bttv. Alan Cox did not like it, so
380 * we now use an array of pointers to a single page each. This saves us the
381 * kernel page table manipulations, but we have to do a page table alike mechanism
382 * (though only one indirection) in software.
385 static void dmabuf_release(struct dmabuf
*db
)
390 for(nr
= 0; nr
< NRSGBUF
; nr
++) {
391 if (!(p
= db
->sgbuf
[nr
]))
393 mem_map_unreserve(MAP_NR(p
));
394 free_page((unsigned long)p
);
395 db
->sgbuf
[nr
] = NULL
;
397 db
->mapped
= db
->ready
= 0;
400 static int dmabuf_init(struct dmabuf
*db
)
402 unsigned int nr
, bytepersec
, bufs
;
405 /* initialize some fields */
406 db
->rdptr
= db
->wrptr
= db
->total_bytes
= db
->count
= db
->error
= 0;
407 /* calculate required buffer size */
408 bytepersec
= db
->srate
<< AFMT_BYTESSHIFT(db
->format
);
409 bufs
= 1U << DMABUFSHIFT
;
410 if (db
->ossfragshift
) {
411 if ((1000 << db
->ossfragshift
) < bytepersec
)
412 db
->fragshift
= ld2(bytepersec
/1000);
414 db
->fragshift
= db
->ossfragshift
;
416 db
->fragshift
= ld2(bytepersec
/100/(db
->subdivision
? db
->subdivision
: 1));
417 if (db
->fragshift
< 3)
420 db
->numfrag
= bufs
>> db
->fragshift
;
421 while (db
->numfrag
< 4 && db
->fragshift
> 3) {
423 db
->numfrag
= bufs
>> db
->fragshift
;
425 db
->fragsize
= 1 << db
->fragshift
;
426 if (db
->ossmaxfrags
>= 4 && db
->ossmaxfrags
< db
->numfrag
)
427 db
->numfrag
= db
->ossmaxfrags
;
428 db
->dmasize
= db
->numfrag
<< db
->fragshift
;
429 for(nr
= 0; nr
< NRSGBUF
; nr
++) {
430 if (!db
->sgbuf
[nr
]) {
431 p
= (void *)get_free_page(GFP_KERNEL
);
435 mem_map_reserve(MAP_NR(p
));
437 memset(db
->sgbuf
[nr
], AFMT_ISUNSIGNED(db
->format
) ? 0x80 : 0, PAGE_SIZE
);
438 if ((nr
<< PAGE_SHIFT
) >= db
->dmasize
)
441 db
->bufsize
= nr
<< PAGE_SHIFT
;
443 printk(KERN_DEBUG
"dmabuf_init: bytepersec %d bufs %d ossfragshift %d ossmaxfrags %d "
444 "fragshift %d fragsize %d numfrag %d dmasize %d bufsize %d\n",
445 bytepersec
, bufs
, db
->ossfragshift
, db
->ossmaxfrags
, db
->fragshift
, db
->fragsize
,
446 db
->numfrag
, db
->dmasize
, db
->bufsize
);
450 static int dmabuf_mmap(struct dmabuf
*db
, unsigned long start
, unsigned long size
, pgprot_t prot
)
454 if (!db
->ready
|| db
->mapped
|| (start
| size
) & (PAGE_SIZE
-1) || size
> db
->bufsize
)
457 for(nr
= 0; nr
< size
; nr
++)
461 for(nr
= 0; nr
< size
; nr
++) {
462 if (remap_page_range(start
, virt_to_phys(db
->sgbuf
[nr
]), PAGE_SIZE
, prot
))
469 static void dmabuf_copyin(struct dmabuf
*db
, const void *buffer
, unsigned int size
)
471 unsigned int pgrem
, rem
;
473 db
->total_bytes
+= size
;
477 pgrem
= ((~db
->wrptr
) & (PAGE_SIZE
-1)) + 1;
480 rem
= db
->dmasize
- db
->wrptr
;
483 memcpy((db
->sgbuf
[db
->wrptr
>> PAGE_SHIFT
]) + (db
->wrptr
& (PAGE_SIZE
-1)), buffer
, pgrem
);
485 (char *)buffer
+= pgrem
;
487 if (db
->wrptr
>= db
->dmasize
)
492 static void dmabuf_copyout(struct dmabuf
*db
, void *buffer
, unsigned int size
)
494 unsigned int pgrem
, rem
;
496 db
->total_bytes
+= size
;
500 pgrem
= ((~db
->rdptr
) & (PAGE_SIZE
-1)) + 1;
503 rem
= db
->dmasize
- db
->rdptr
;
506 memcpy(buffer
, (db
->sgbuf
[db
->rdptr
>> PAGE_SHIFT
]) + (db
->rdptr
& (PAGE_SIZE
-1)), pgrem
);
508 (char *)buffer
+= pgrem
;
510 if (db
->rdptr
>= db
->dmasize
)
515 static int dmabuf_copyin_user(struct dmabuf
*db
, unsigned int ptr
, const void *buffer
, unsigned int size
)
517 unsigned int pgrem
, rem
;
519 if (!db
->ready
|| db
->mapped
)
524 pgrem
= ((~ptr
) & (PAGE_SIZE
-1)) + 1;
527 rem
= db
->dmasize
- ptr
;
530 copy_from_user_ret((db
->sgbuf
[ptr
>> PAGE_SHIFT
]) + (ptr
& (PAGE_SIZE
-1)), buffer
, pgrem
, -EFAULT
);
532 (char *)buffer
+= pgrem
;
534 if (ptr
>= db
->dmasize
)
539 static int dmabuf_copyout_user(struct dmabuf
*db
, unsigned int ptr
, void *buffer
, unsigned int size
)
541 unsigned int pgrem
, rem
;
543 if (!db
->ready
|| db
->mapped
)
548 pgrem
= ((~ptr
) & (PAGE_SIZE
-1)) + 1;
551 rem
= db
->dmasize
- ptr
;
554 copy_to_user_ret(buffer
, (db
->sgbuf
[ptr
>> PAGE_SHIFT
]) + (ptr
& (PAGE_SIZE
-1)), pgrem
, -EFAULT
);
556 (char *)buffer
+= pgrem
;
558 if (ptr
>= db
->dmasize
)
563 /* --------------------------------------------------------------------- */
565 * USB I/O code. We do sample format conversion if necessary
568 static void usbin_stop(struct usb_audiodev
*as
)
570 struct usbin
*u
= &as
->usbin
;
572 unsigned int i
, notkilled
= 1;
574 spin_lock_irqsave(&as
->lock
, flags
);
575 u
->flags
&= ~FLG_RUNNING
;
577 spin_unlock_irqrestore(&as
->lock
, flags
);
578 while (i
& (FLG_URB0RUNNING
|FLG_URB1RUNNING
|FLG_SYNC0RUNNING
|FLG_SYNC1RUNNING
)) {
579 set_current_state(notkilled
? TASK_INTERRUPTIBLE
: TASK_UNINTERRUPTIBLE
);
581 spin_lock_irqsave(&as
->lock
, flags
);
583 spin_unlock_irqrestore(&as
->lock
, flags
);
584 if (notkilled
&& signal_pending(current
)) {
585 if (i
& FLG_URB0RUNNING
)
586 usb_unlink_urb(&u
->durb
[0].urb
);
587 if (i
& FLG_URB1RUNNING
)
588 usb_unlink_urb(&u
->durb
[1].urb
);
589 if (i
& FLG_SYNC0RUNNING
)
590 usb_unlink_urb(&u
->surb
[0].urb
);
591 if (i
& FLG_SYNC1RUNNING
)
592 usb_unlink_urb(&u
->surb
[1].urb
);
596 set_current_state(TASK_RUNNING
);
597 if (u
->durb
[0].urb
.transfer_buffer
)
598 kfree(u
->durb
[0].urb
.transfer_buffer
);
599 if (u
->durb
[1].urb
.transfer_buffer
)
600 kfree(u
->durb
[1].urb
.transfer_buffer
);
601 if (u
->surb
[0].urb
.transfer_buffer
)
602 kfree(u
->surb
[0].urb
.transfer_buffer
);
603 if (u
->surb
[1].urb
.transfer_buffer
)
604 kfree(u
->surb
[1].urb
.transfer_buffer
);
605 u
->durb
[0].urb
.transfer_buffer
= u
->durb
[1].urb
.transfer_buffer
=
606 u
->surb
[0].urb
.transfer_buffer
= u
->surb
[1].urb
.transfer_buffer
= NULL
;
609 static inline void usbin_release(struct usb_audiodev
*as
)
614 static void usbin_disc(struct usb_audiodev
*as
)
616 struct usbin
*u
= &as
->usbin
;
620 spin_lock_irqsave(&as
->lock
, flags
);
621 u
->flags
&= ~(FLG_RUNNING
| FLG_CONNECTED
);
622 spin_unlock_irqrestore(&as
->lock
, flags
);
626 static void conversion(const void *ibuf
, unsigned int ifmt
, void *obuf
, unsigned int ofmt
, void *tmp
, unsigned int scnt
)
633 if (AFMT_ISSTEREO(ifmt
))
635 sp
= ((__s16
*)tmp
) + cnt
;
636 switch (ifmt
& ~AFMT_STEREO
) {
638 for (bp
= ((unsigned char *)ibuf
)+cnt
, i
= 0; i
< cnt
; i
++) {
641 *sp
= (*bp
^ 0x80) << 8;
646 for (bp
= ((unsigned char *)ibuf
)+cnt
, i
= 0; i
< cnt
; i
++) {
654 for (bp
= ((unsigned char *)ibuf
)+2*cnt
, i
= 0; i
< cnt
; i
++) {
657 *sp
= (bp
[0] | (bp
[1] << 8)) ^ 0x8000;
662 for (bp
= ((unsigned char *)ibuf
)+2*cnt
, i
= 0; i
< cnt
; i
++) {
665 *sp
= (bp
[1] | (bp
[0] << 8)) ^ 0x8000;
670 for (bp
= ((unsigned char *)ibuf
)+2*cnt
, i
= 0; i
< cnt
; i
++) {
673 *sp
= bp
[0] | (bp
[1] << 8);
678 for (bp
= ((unsigned char *)ibuf
)+2*cnt
, i
= 0; i
< cnt
; i
++) {
681 *sp
= bp
[1] | (bp
[0] << 8);
685 if (!AFMT_ISSTEREO(ifmt
) && AFMT_ISSTEREO(ofmt
)) {
686 /* expand from mono to stereo */
687 for (sp
= ((__s16
*)tmp
)+scnt
, sp2
= ((__s16
*)tmp
)+2*scnt
, i
= 0; i
< scnt
; i
++) {
690 sp2
[0] = sp2
[1] = sp
[0];
693 if (AFMT_ISSTEREO(ifmt
) && !AFMT_ISSTEREO(ofmt
)) {
694 /* contract from stereo to mono */
695 for (sp
= sp2
= ((__s16
*)tmp
), i
= 0; i
< scnt
; i
++, sp
++, sp2
+= 2)
696 sp
[0] = (sp2
[0] + sp2
[1]) >> 1;
699 if (AFMT_ISSTEREO(ofmt
))
702 bp
= ((unsigned char *)obuf
);
703 switch (ofmt
& ~AFMT_STEREO
) {
705 for (i
= 0; i
< cnt
; i
++, sp
++, bp
++)
706 *bp
= (*sp
>> 8) ^ 0x80;
710 for (i
= 0; i
< cnt
; i
++, sp
++, bp
++)
715 for (i
= 0; i
< cnt
; i
++, sp
++, bp
+= 2) {
718 bp
[1] = (s
>> 8) ^ 0x80;
723 for (i
= 0; i
< cnt
; i
++, sp
++, bp
+= 2) {
726 bp
[0] = (s
>> 8) ^ 0x80;
731 for (i
= 0; i
< cnt
; i
++, sp
++, bp
+= 2) {
739 for (i
= 0; i
< cnt
; i
++, sp
++, bp
+= 2) {
749 static void usbin_convert(struct usbin
*u
, unsigned char *buffer
, unsigned int samples
)
755 unsigned int scnt
, maxs
, ufmtsh
, dfmtsh
;
757 ufmtsh
= AFMT_BYTESSHIFT(u
->format
);
758 dfmtsh
= AFMT_BYTESSHIFT(u
->dma
.format
);
759 maxs
= (AFMT_ISSTEREO(u
->dma
.format
| u
->format
)) ? 32 : 64;
760 while (samples
> 0) {
764 conversion(buffer
, u
->format
, tmp
.b
, u
->dma
.format
, tmp
.b
, scnt
);
765 dmabuf_copyin(&u
->dma
, tmp
.b
, scnt
<< dfmtsh
);
766 buffer
+= scnt
<< ufmtsh
;
771 static int usbin_prepare_desc(struct usbin
*u
, purb_t urb
)
773 unsigned int i
, maxsize
, offs
;
775 maxsize
= (u
->freqmax
+ 0x3fff) >> (14 - AFMT_BYTESSHIFT(u
->format
));
776 //printk(KERN_DEBUG "usbin_prepare_desc: maxsize %d freq 0x%x format 0x%x\n", maxsize, u->freqn, u->format);
777 for (i
= offs
= 0; i
< DESCFRAMES
; i
++, offs
+= maxsize
) {
778 urb
->iso_frame_desc
[i
].length
= maxsize
;
779 urb
->iso_frame_desc
[i
].offset
= offs
;
785 * return value: 0 if descriptor should be restarted, -1 otherwise
786 * convert sample format on the fly if necessary
788 static int usbin_retire_desc(struct usbin
*u
, purb_t urb
)
790 unsigned int i
, ufmtsh
, dfmtsh
, err
= 0, cnt
, scnt
, dmafree
;
793 ufmtsh
= AFMT_BYTESSHIFT(u
->format
);
794 dfmtsh
= AFMT_BYTESSHIFT(u
->dma
.format
);
795 for (i
= 0; i
< DESCFRAMES
; i
++) {
796 cp
= ((unsigned char *)urb
->transfer_buffer
) + urb
->iso_frame_desc
[i
].offset
;
797 if (urb
->iso_frame_desc
[i
].status
) {
798 printk(KERN_DEBUG
"usbin_retire_desc: frame %u status %d\n", i
, urb
->iso_frame_desc
[i
].status
);
801 scnt
= urb
->iso_frame_desc
[i
].actual_length
>> ufmtsh
;
804 cnt
= scnt
<< dfmtsh
;
805 if (!u
->dma
.mapped
) {
806 dmafree
= u
->dma
.dmasize
- u
->dma
.count
;
808 scnt
= dmafree
>> dfmtsh
;
809 cnt
= scnt
<< dfmtsh
;
814 if (u
->format
== u
->dma
.format
) {
815 /* we do not need format conversion */
816 dmabuf_copyin(&u
->dma
, cp
, cnt
);
818 /* we need sampling format conversion */
819 usbin_convert(u
, cp
, scnt
);
824 if (u
->dma
.count
>= (signed)u
->dma
.fragsize
)
825 wake_up(&u
->dma
.wait
);
829 static void usbin_completed(struct urb
*urb
)
831 struct usb_audiodev
*as
= (struct usb_audiodev
*)urb
->context
;
832 struct usbin
*u
= &as
->usbin
;
835 int suret
= USB_ST_NOERROR
;
838 printk(KERN_DEBUG
"usbin_completed: status %d errcnt %d flags 0x%x\n", urb
->status
, urb
->error_count
, u
->flags
);
840 if (urb
== &u
->durb
[0].urb
)
841 mask
= FLG_URB0RUNNING
;
842 else if (urb
== &u
->durb
[1].urb
)
843 mask
= FLG_URB1RUNNING
;
846 printk(KERN_ERR
"usbin_completed: panic: unknown URB\n");
848 spin_lock_irqsave(&as
->lock
, flags
);
849 if (!usbin_retire_desc(u
, urb
) &&
850 u
->flags
& FLG_RUNNING
&&
851 !usbin_prepare_desc(u
, urb
) &&
852 (suret
= usb_submit_urb(urb
)) == USB_ST_NOERROR
) {
855 u
->flags
&= ~(mask
| FLG_RUNNING
);
856 wake_up(&u
->dma
.wait
);
857 printk(KERN_DEBUG
"usbin_completed: descriptor not restarted (usb_submit_urb: %d)\n", suret
);
859 spin_unlock_irqrestore(&as
->lock
, flags
);
863 * we output sync data
865 static int usbin_sync_prepare_desc(struct usbin
*u
, purb_t urb
)
867 unsigned char *cp
= urb
->transfer_buffer
;
868 unsigned int i
, offs
;
870 for (i
= offs
= 0; i
< SYNCFRAMES
; i
++, offs
+= 3, cp
+= 3) {
871 urb
->iso_frame_desc
[i
].length
= 3;
872 urb
->iso_frame_desc
[i
].offset
= offs
;
874 cp
[1] = u
->freqn
>> 8;
875 cp
[2] = u
->freqn
>> 16;
881 * return value: 0 if descriptor should be restarted, -1 otherwise
883 static int usbin_sync_retire_desc(struct usbin
*u
, purb_t urb
)
887 for (i
= 0; i
< SYNCFRAMES
; i
++)
888 if (urb
->iso_frame_desc
[0].status
)
889 printk(KERN_DEBUG
"usbin_sync_retire_desc: frame %u status %d\n", i
, urb
->iso_frame_desc
[i
].status
);
893 static void usbin_sync_completed(struct urb
*urb
)
895 struct usb_audiodev
*as
= (struct usb_audiodev
*)urb
->context
;
896 struct usbin
*u
= &as
->usbin
;
899 int suret
= USB_ST_NOERROR
;
902 printk(KERN_DEBUG
"usbin_sync_completed: status %d errcnt %d flags 0x%x\n", urb
->status
, urb
->error_count
, u
->flags
);
904 if (urb
== &u
->surb
[0].urb
)
905 mask
= FLG_SYNC0RUNNING
;
906 else if (urb
== &u
->surb
[1].urb
)
907 mask
= FLG_SYNC1RUNNING
;
910 printk(KERN_ERR
"usbin_sync_completed: panic: unknown URB\n");
912 spin_lock_irqsave(&as
->lock
, flags
);
913 if (!usbin_sync_retire_desc(u
, urb
) &&
914 u
->flags
& FLG_RUNNING
&&
915 !usbin_sync_prepare_desc(u
, urb
) &&
916 (suret
= usb_submit_urb(urb
)) == USB_ST_NOERROR
) {
919 u
->flags
&= ~(mask
| FLG_RUNNING
);
920 wake_up(&u
->dma
.wait
);
921 printk(KERN_DEBUG
"usbin_sync_completed: descriptor not restarted (usb_submit_urb: %d)\n", suret
);
923 spin_unlock_irqrestore(&as
->lock
, flags
);
926 static int usbin_start(struct usb_audiodev
*as
)
928 struct usb_device
*dev
= as
->state
->usbdev
;
929 struct usbin
*u
= &as
->usbin
;
932 unsigned int maxsze
, bufsz
;
935 printk(KERN_DEBUG
"usbin_start: device %d ufmt 0x%08x dfmt 0x%08x srate %d\n",
936 dev
->devnum
, u
->format
, u
->dma
.format
, u
->dma
.srate
);
938 /* allocate USB storage if not already done */
939 spin_lock_irqsave(&as
->lock
, flags
);
940 if (!(u
->flags
& FLG_CONNECTED
)) {
941 spin_unlock_irqrestore(&as
->lock
, flags
);
944 if (!(u
->flags
& FLG_RUNNING
)) {
945 spin_unlock_irqrestore(&as
->lock
, flags
);
946 u
->freqn
= ((u
->dma
.srate
<< 11) + 62) / 125; /* this will overflow at approx 2MSPS */
947 u
->freqmax
= u
->freqn
+ (u
->freqn
>> 2);
949 maxsze
= (u
->freqmax
+ 0x3fff) >> (14 - AFMT_BYTESSHIFT(u
->format
));
950 bufsz
= DESCFRAMES
* maxsze
;
951 if (u
->durb
[0].urb
.transfer_buffer
)
952 kfree(u
->durb
[0].urb
.transfer_buffer
);
953 u
->durb
[0].urb
.transfer_buffer
= kmalloc(bufsz
, GFP_KERNEL
);
954 u
->durb
[0].urb
.transfer_buffer_length
= bufsz
;
955 if (u
->durb
[1].urb
.transfer_buffer
)
956 kfree(u
->durb
[1].urb
.transfer_buffer
);
957 u
->durb
[1].urb
.transfer_buffer
= kmalloc(bufsz
, GFP_KERNEL
);
958 u
->durb
[1].urb
.transfer_buffer_length
= bufsz
;
960 if (u
->surb
[0].urb
.transfer_buffer
)
961 kfree(u
->surb
[0].urb
.transfer_buffer
);
962 u
->surb
[0].urb
.transfer_buffer
= kmalloc(3*SYNCFRAMES
, GFP_KERNEL
);
963 u
->surb
[0].urb
.transfer_buffer_length
= 3*SYNCFRAMES
;
964 if (u
->surb
[1].urb
.transfer_buffer
)
965 kfree(u
->surb
[1].urb
.transfer_buffer
);
966 u
->surb
[1].urb
.transfer_buffer
= kmalloc(3*SYNCFRAMES
, GFP_KERNEL
);
967 u
->surb
[1].urb
.transfer_buffer_length
= 3*SYNCFRAMES
;
969 if (!u
->durb
[0].urb
.transfer_buffer
|| !u
->durb
[1].urb
.transfer_buffer
||
970 (u
->syncpipe
&& (!u
->surb
[0].urb
.transfer_buffer
|| !u
->surb
[1].urb
.transfer_buffer
))) {
971 printk(KERN_ERR
"usbaudio: cannot start playback device %d\n", dev
->devnum
);
974 spin_lock_irqsave(&as
->lock
, flags
);
976 u
->flags
|= FLG_RUNNING
;
977 if (!(u
->flags
& FLG_URB0RUNNING
)) {
978 urb
= &u
->durb
[0].urb
;
980 urb
->pipe
= u
->datapipe
;
981 urb
->transfer_flags
= USB_ISO_ASAP
;
982 urb
->number_of_packets
= DESCFRAMES
;
984 urb
->complete
= usbin_completed
;
985 if (!usbin_prepare_desc(u
, urb
) && !usb_submit_urb(urb
))
986 u
->flags
|= FLG_URB0RUNNING
;
988 u
->flags
&= ~FLG_RUNNING
;
990 if (u
->flags
& FLG_RUNNING
&& !(u
->flags
& FLG_URB1RUNNING
)) {
991 urb
= &u
->durb
[1].urb
;
993 urb
->pipe
= u
->datapipe
;
994 urb
->transfer_flags
= USB_ISO_ASAP
;
995 urb
->number_of_packets
= DESCFRAMES
;
997 urb
->complete
= usbin_completed
;
998 if (!usbin_prepare_desc(u
, urb
) && !usb_submit_urb(urb
))
999 u
->flags
|= FLG_URB1RUNNING
;
1001 u
->flags
&= ~FLG_RUNNING
;
1004 if (u
->flags
& FLG_RUNNING
&& !(u
->flags
& FLG_SYNC0RUNNING
)) {
1005 urb
= &u
->surb
[0].urb
;
1007 urb
->pipe
= u
->syncpipe
;
1008 urb
->transfer_flags
= USB_ISO_ASAP
;
1009 urb
->number_of_packets
= SYNCFRAMES
;
1011 urb
->complete
= usbin_sync_completed
;
1012 /* stride: u->syncinterval */
1013 if (!usbin_sync_prepare_desc(u
, urb
) && !usb_submit_urb(urb
))
1014 u
->flags
|= FLG_SYNC0RUNNING
;
1016 u
->flags
&= ~FLG_RUNNING
;
1018 if (u
->flags
& FLG_RUNNING
&& !(u
->flags
& FLG_SYNC1RUNNING
)) {
1019 urb
= &u
->surb
[1].urb
;
1021 urb
->pipe
= u
->syncpipe
;
1022 urb
->transfer_flags
= USB_ISO_ASAP
;
1023 urb
->number_of_packets
= SYNCFRAMES
;
1025 urb
->complete
= usbin_sync_completed
;
1026 /* stride: u->syncinterval */
1027 if (!usbin_sync_prepare_desc(u
, urb
) && !usb_submit_urb(urb
))
1028 u
->flags
|= FLG_SYNC1RUNNING
;
1030 u
->flags
&= ~FLG_RUNNING
;
1033 spin_unlock_irqrestore(&as
->lock
, flags
);
1037 static void usbout_stop(struct usb_audiodev
*as
)
1039 struct usbout
*u
= &as
->usbout
;
1040 unsigned long flags
;
1041 unsigned int i
, notkilled
= 1;
1043 spin_lock_irqsave(&as
->lock
, flags
);
1044 u
->flags
&= ~FLG_RUNNING
;
1046 spin_unlock_irqrestore(&as
->lock
, flags
);
1047 while (i
& (FLG_URB0RUNNING
|FLG_URB1RUNNING
|FLG_SYNC0RUNNING
|FLG_SYNC1RUNNING
)) {
1048 set_current_state(notkilled
? TASK_INTERRUPTIBLE
: TASK_UNINTERRUPTIBLE
);
1049 schedule_timeout(1);
1050 spin_lock_irqsave(&as
->lock
, flags
);
1052 spin_unlock_irqrestore(&as
->lock
, flags
);
1053 if (notkilled
&& signal_pending(current
)) {
1054 if (i
& FLG_URB0RUNNING
)
1055 usb_unlink_urb(&u
->durb
[0].urb
);
1056 if (i
& FLG_URB1RUNNING
)
1057 usb_unlink_urb(&u
->durb
[1].urb
);
1058 if (i
& FLG_SYNC0RUNNING
)
1059 usb_unlink_urb(&u
->surb
[0].urb
);
1060 if (i
& FLG_SYNC1RUNNING
)
1061 usb_unlink_urb(&u
->surb
[1].urb
);
1065 set_current_state(TASK_RUNNING
);
1066 if (u
->durb
[0].urb
.transfer_buffer
)
1067 kfree(u
->durb
[0].urb
.transfer_buffer
);
1068 if (u
->durb
[1].urb
.transfer_buffer
)
1069 kfree(u
->durb
[1].urb
.transfer_buffer
);
1070 if (u
->surb
[0].urb
.transfer_buffer
)
1071 kfree(u
->surb
[0].urb
.transfer_buffer
);
1072 if (u
->surb
[1].urb
.transfer_buffer
)
1073 kfree(u
->surb
[1].urb
.transfer_buffer
);
1074 u
->durb
[0].urb
.transfer_buffer
= u
->durb
[1].urb
.transfer_buffer
=
1075 u
->surb
[0].urb
.transfer_buffer
= u
->surb
[1].urb
.transfer_buffer
= NULL
;
1078 static inline void usbout_release(struct usb_audiodev
*as
)
1083 static void usbout_disc(struct usb_audiodev
*as
)
1085 struct usbout
*u
= &as
->usbout
;
1086 unsigned long flags
;
1088 spin_lock_irqsave(&as
->lock
, flags
);
1089 u
->flags
&= ~(FLG_RUNNING
| FLG_CONNECTED
);
1090 spin_unlock_irqrestore(&as
->lock
, flags
);
1094 static void usbout_convert(struct usbout
*u
, unsigned char *buffer
, unsigned int samples
)
1100 unsigned int scnt
, maxs
, ufmtsh
, dfmtsh
;
1102 ufmtsh
= AFMT_BYTESSHIFT(u
->format
);
1103 dfmtsh
= AFMT_BYTESSHIFT(u
->dma
.format
);
1104 maxs
= (AFMT_ISSTEREO(u
->dma
.format
| u
->format
)) ? 32 : 64;
1105 while (samples
> 0) {
1109 dmabuf_copyout(&u
->dma
, tmp
.b
, scnt
<< dfmtsh
);
1110 conversion(tmp
.b
, u
->dma
.format
, buffer
, u
->format
, tmp
.b
, scnt
);
1111 buffer
+= scnt
<< ufmtsh
;
1116 static int usbout_prepare_desc(struct usbout
*u
, purb_t urb
)
1118 unsigned int i
, ufmtsh
, dfmtsh
, err
= 0, cnt
, scnt
, offs
;
1119 unsigned char *cp
= urb
->transfer_buffer
;
1121 ufmtsh
= AFMT_BYTESSHIFT(u
->format
);
1122 dfmtsh
= AFMT_BYTESSHIFT(u
->dma
.format
);
1123 for (i
= offs
= 0; i
< DESCFRAMES
; i
++) {
1124 urb
->iso_frame_desc
[i
].offset
= offs
;
1125 u
->phase
= (u
->phase
& 0x3fff) + u
->freqm
;
1126 scnt
= u
->phase
>> 14;
1128 urb
->iso_frame_desc
[i
].length
= 0;
1131 cnt
= scnt
<< dfmtsh
;
1132 if (!u
->dma
.mapped
) {
1133 if (cnt
> u
->dma
.count
) {
1134 scnt
= u
->dma
.count
>> dfmtsh
;
1135 cnt
= scnt
<< dfmtsh
;
1138 u
->dma
.count
-= cnt
;
1140 u
->dma
.count
+= cnt
;
1141 if (u
->format
== u
->dma
.format
) {
1142 /* we do not need format conversion */
1143 dmabuf_copyout(&u
->dma
, cp
, cnt
);
1145 /* we need sampling format conversion */
1146 usbout_convert(u
, cp
, scnt
);
1148 cnt
= scnt
<< ufmtsh
;
1149 urb
->iso_frame_desc
[i
].length
= cnt
;
1155 if (u
->dma
.mapped
) {
1156 if (u
->dma
.count
>= (signed)u
->dma
.fragsize
)
1157 wake_up(&u
->dma
.wait
);
1159 if ((signed)u
->dma
.dmasize
>= u
->dma
.count
+ (signed)u
->dma
.fragsize
)
1160 wake_up(&u
->dma
.wait
);
1162 return err
? -1 : 0;
1166 * return value: 0 if descriptor should be restarted, -1 otherwise
1168 static int usbout_retire_desc(struct usbout
*u
, purb_t urb
)
1172 for (i
= 0; i
< DESCFRAMES
; i
++) {
1173 if (urb
->iso_frame_desc
[i
].status
) {
1174 printk(KERN_DEBUG
"usbout_retire_desc: frame %u status %d\n", i
, urb
->iso_frame_desc
[i
].status
);
1181 static void usbout_completed(struct urb
*urb
)
1183 struct usb_audiodev
*as
= (struct usb_audiodev
*)urb
->context
;
1184 struct usbout
*u
= &as
->usbout
;
1185 unsigned long flags
;
1187 int suret
= USB_ST_NOERROR
;
1190 printk(KERN_DEBUG
"usbout_completed: status %d errcnt %d flags 0x%x\n", urb
->status
, urb
->error_count
, u
->flags
);
1192 if (urb
== &u
->durb
[0].urb
)
1193 mask
= FLG_URB0RUNNING
;
1194 else if (urb
== &u
->durb
[1].urb
)
1195 mask
= FLG_URB1RUNNING
;
1198 printk(KERN_ERR
"usbout_completed: panic: unknown URB\n");
1200 spin_lock_irqsave(&as
->lock
, flags
);
1201 if (!usbout_retire_desc(u
, urb
) &&
1202 u
->flags
& FLG_RUNNING
&&
1203 !usbout_prepare_desc(u
, urb
) &&
1204 (suret
= usb_submit_urb(urb
)) == USB_ST_NOERROR
) {
1207 u
->flags
&= ~(mask
| FLG_RUNNING
);
1208 wake_up(&u
->dma
.wait
);
1209 printk(KERN_DEBUG
"usbout_completed: descriptor not restarted (usb_submit_urb: %d)\n", suret
);
1211 spin_unlock_irqrestore(&as
->lock
, flags
);
1214 static int usbout_sync_prepare_desc(struct usbout
*u
, purb_t urb
)
1216 unsigned int i
, offs
;
1218 for (i
= offs
= 0; i
< SYNCFRAMES
; i
++, offs
+= 3) {
1219 urb
->iso_frame_desc
[i
].length
= 3;
1220 urb
->iso_frame_desc
[i
].offset
= offs
;
1226 * return value: 0 if descriptor should be restarted, -1 otherwise
1228 static int usbout_sync_retire_desc(struct usbout
*u
, purb_t urb
)
1230 unsigned char *cp
= urb
->transfer_buffer
;
1233 for (i
= 0; i
< SYNCFRAMES
; i
++, cp
+= 3) {
1234 if (urb
->iso_frame_desc
[i
].status
) {
1235 printk(KERN_DEBUG
"usbout_sync_retire_desc: frame %u status %d\n", i
, urb
->iso_frame_desc
[i
].status
);
1238 if (urb
->iso_frame_desc
[i
].actual_length
< 3) {
1239 printk(KERN_DEBUG
"usbout_sync_retire_desc: frame %u length %d\n", i
, urb
->iso_frame_desc
[i
].actual_length
);
1242 f
= cp
[0] | (cp
[1] << 8) | (cp
[2] << 16);
1243 if (abs(f
- u
->freqn
) > (u
->freqn
>> 3) || f
> u
->freqmax
) {
1244 printk(KERN_WARNING
"usbout_sync_retire_desc: requested frequency %u (nominal %u) out of range!\n", f
, u
->freqn
);
1252 static void usbout_sync_completed(struct urb
*urb
)
1254 struct usb_audiodev
*as
= (struct usb_audiodev
*)urb
->context
;
1255 struct usbout
*u
= &as
->usbout
;
1256 unsigned long flags
;
1258 int suret
= USB_ST_NOERROR
;
1261 printk(KERN_DEBUG
"usbout_sync_completed: status %d errcnt %d flags 0x%x\n", urb
->status
, urb
->error_count
, u
->flags
);
1263 if (urb
== &u
->surb
[0].urb
)
1264 mask
= FLG_SYNC0RUNNING
;
1265 else if (urb
== &u
->surb
[1].urb
)
1266 mask
= FLG_SYNC1RUNNING
;
1269 printk(KERN_ERR
"usbout_sync_completed: panic: unknown URB\n");
1271 spin_lock_irqsave(&as
->lock
, flags
);
1272 if (!usbout_sync_retire_desc(u
, urb
) &&
1273 u
->flags
& FLG_RUNNING
&&
1274 !usbout_sync_prepare_desc(u
, urb
) &&
1275 (suret
= usb_submit_urb(urb
)) == USB_ST_NOERROR
) {
1278 u
->flags
&= ~(mask
| FLG_RUNNING
);
1279 wake_up(&u
->dma
.wait
);
1280 printk(KERN_DEBUG
"usbout_sync_completed: descriptor not restarted (usb_submit_urb: %d)\n", suret
);
1282 spin_unlock_irqrestore(&as
->lock
, flags
);
1285 static int usbout_start(struct usb_audiodev
*as
)
1287 struct usb_device
*dev
= as
->state
->usbdev
;
1288 struct usbout
*u
= &as
->usbout
;
1290 unsigned long flags
;
1291 unsigned int maxsze
, bufsz
;
1294 printk(KERN_DEBUG
"usbout_start: device %d ufmt 0x%08x dfmt 0x%08x srate %d\n",
1295 dev
->devnum
, u
->format
, u
->dma
.format
, u
->dma
.srate
);
1297 /* allocate USB storage if not already done */
1298 spin_lock_irqsave(&as
->lock
, flags
);
1299 if (!(u
->flags
& FLG_CONNECTED
)) {
1300 spin_unlock_irqrestore(&as
->lock
, flags
);
1303 if (!(u
->flags
& FLG_RUNNING
)) {
1304 spin_unlock_irqrestore(&as
->lock
, flags
);
1305 u
->freqn
= u
->freqm
= ((u
->dma
.srate
<< 11) + 62) / 125; /* this will overflow at approx 2MSPS */
1306 u
->freqmax
= u
->freqn
+ (u
->freqn
>> 2);
1308 maxsze
= (u
->freqmax
+ 0x3fff) >> (14 - AFMT_BYTESSHIFT(u
->format
));
1309 bufsz
= DESCFRAMES
* maxsze
;
1310 if (u
->durb
[0].urb
.transfer_buffer
)
1311 kfree(u
->durb
[0].urb
.transfer_buffer
);
1312 u
->durb
[0].urb
.transfer_buffer
= kmalloc(bufsz
, GFP_KERNEL
);
1313 u
->durb
[0].urb
.transfer_buffer_length
= bufsz
;
1314 if (u
->durb
[1].urb
.transfer_buffer
)
1315 kfree(u
->durb
[1].urb
.transfer_buffer
);
1316 u
->durb
[1].urb
.transfer_buffer
= kmalloc(bufsz
, GFP_KERNEL
);
1317 u
->durb
[1].urb
.transfer_buffer_length
= bufsz
;
1319 if (u
->surb
[0].urb
.transfer_buffer
)
1320 kfree(u
->surb
[0].urb
.transfer_buffer
);
1321 u
->surb
[0].urb
.transfer_buffer
= kmalloc(3*SYNCFRAMES
, GFP_KERNEL
);
1322 u
->surb
[0].urb
.transfer_buffer_length
= 3*SYNCFRAMES
;
1323 if (u
->surb
[1].urb
.transfer_buffer
)
1324 kfree(u
->surb
[1].urb
.transfer_buffer
);
1325 u
->surb
[1].urb
.transfer_buffer
= kmalloc(3*SYNCFRAMES
, GFP_KERNEL
);
1326 u
->surb
[1].urb
.transfer_buffer_length
= 3*SYNCFRAMES
;
1328 if (!u
->durb
[0].urb
.transfer_buffer
|| !u
->durb
[1].urb
.transfer_buffer
||
1329 (u
->syncpipe
&& (!u
->surb
[0].urb
.transfer_buffer
|| !u
->surb
[1].urb
.transfer_buffer
))) {
1330 printk(KERN_ERR
"usbaudio: cannot start playback device %d\n", dev
->devnum
);
1333 spin_lock_irqsave(&as
->lock
, flags
);
1335 u
->flags
|= FLG_RUNNING
;
1336 if (!(u
->flags
& FLG_URB0RUNNING
)) {
1337 urb
= &u
->durb
[0].urb
;
1339 urb
->pipe
= u
->datapipe
;
1340 urb
->transfer_flags
= USB_ISO_ASAP
;
1341 urb
->number_of_packets
= DESCFRAMES
;
1343 urb
->complete
= usbout_completed
;
1344 if (!usbout_prepare_desc(u
, urb
) && !usb_submit_urb(urb
))
1345 u
->flags
|= FLG_URB0RUNNING
;
1347 u
->flags
&= ~FLG_RUNNING
;
1349 if (u
->flags
& FLG_RUNNING
&& !(u
->flags
& FLG_URB1RUNNING
)) {
1350 urb
= &u
->durb
[1].urb
;
1352 urb
->pipe
= u
->datapipe
;
1353 urb
->transfer_flags
= USB_ISO_ASAP
;
1354 urb
->number_of_packets
= DESCFRAMES
;
1356 urb
->complete
= usbout_completed
;
1357 if (!usbout_prepare_desc(u
, urb
) && !usb_submit_urb(urb
))
1358 u
->flags
|= FLG_URB1RUNNING
;
1360 u
->flags
&= ~FLG_RUNNING
;
1363 if (u
->flags
& FLG_RUNNING
&& !(u
->flags
& FLG_SYNC0RUNNING
)) {
1364 urb
= &u
->surb
[0].urb
;
1366 urb
->pipe
= u
->syncpipe
;
1367 urb
->transfer_flags
= USB_ISO_ASAP
;
1368 urb
->number_of_packets
= SYNCFRAMES
;
1370 urb
->complete
= usbout_sync_completed
;
1371 /* stride: u->syncinterval */
1372 if (!usbout_sync_prepare_desc(u
, urb
) && !usb_submit_urb(urb
))
1373 u
->flags
|= FLG_SYNC0RUNNING
;
1375 u
->flags
&= ~FLG_RUNNING
;
1377 if (u
->flags
& FLG_RUNNING
&& !(u
->flags
& FLG_SYNC1RUNNING
)) {
1378 urb
= &u
->surb
[1].urb
;
1380 urb
->pipe
= u
->syncpipe
;
1381 urb
->transfer_flags
= USB_ISO_ASAP
;
1382 urb
->number_of_packets
= SYNCFRAMES
;
1384 urb
->complete
= usbout_sync_completed
;
1385 /* stride: u->syncinterval */
1386 if (!usbout_sync_prepare_desc(u
, urb
) && !usb_submit_urb(urb
))
1387 u
->flags
|= FLG_SYNC1RUNNING
;
1389 u
->flags
&= ~FLG_RUNNING
;
1392 spin_unlock_irqrestore(&as
->lock
, flags
);
1396 /* --------------------------------------------------------------------- */
1398 static unsigned int find_format(struct audioformat
*afp
, unsigned int nr
, unsigned int fmt
, unsigned int rate
)
1402 /* first find an exact match, taking both format and sample rate into account,
1403 but ignore stereo bit */
1404 for (i
= 0; i
< nr
; i
++) {
1405 if (afp
[i
].format
== (fmt
& ~AFMT_STEREO
) && rate
>= afp
[i
].sratelo
&& rate
<= afp
[i
].sratehi
)
1409 /* second find a match with the same stereo/mono and 8bit/16bit property */
1410 for (i
= 0; i
< nr
; i
++)
1411 if (!AFMT_ISSTEREO(afp
[i
].format
) == !AFMT_ISSTEREO(fmt
) &&
1412 !AFMT_IS16BIT(afp
[i
].format
) == !AFMT_IS16BIT(fmt
) &&
1413 rate
>= afp
[i
].sratelo
&& rate
<= afp
[i
].sratehi
)
1415 /* third find a match with the same number of channels */
1416 for (i
= 0; i
< nr
; i
++)
1417 if (!AFMT_ISSTEREO(afp
[i
].format
) == !AFMT_ISSTEREO(fmt
) &&
1418 rate
>= afp
[i
].sratelo
&& rate
<= afp
[i
].sratehi
)
1420 /* return failure */
1424 static int set_format_in(struct usb_audiodev
*as
)
1426 struct usb_device
*dev
= as
->state
->usbdev
;
1427 struct usb_config_descriptor
*config
= dev
->actconfig
;
1428 struct usb_interface_descriptor
*alts
;
1429 struct usb_interface
*iface
;
1430 struct usbin
*u
= &as
->usbin
;
1431 struct dmabuf
*d
= &u
->dma
;
1432 struct audioformat
*fmt
;
1433 unsigned int fmtnr
, ep
;
1434 unsigned char data
[3];
1437 if (u
->interface
< 0 || u
->interface
>= config
->bNumInterfaces
)
1439 iface
= &config
->interface
[u
->interface
];
1441 fmtnr
= find_format(as
->fmtin
, as
->numfmtin
, d
->format
, d
->srate
);
1443 printk(KERN_ERR
"usbaudio: set_format_in(): failed to find desired format/speed combination.\n");
1447 fmt
= as
->fmtin
+ fmtnr
;
1448 alts
= &iface
->altsetting
[fmt
->altsetting
];
1449 u
->format
= fmt
->format
;
1450 u
->datapipe
= usb_rcvisocpipe(dev
, alts
->endpoint
[0].bEndpointAddress
& 0xf);
1451 u
->syncpipe
= u
->syncinterval
= 0;
1452 if ((alts
->endpoint
[0].bmAttributes
& 0x0c) == 0x08) {
1453 if (alts
->bNumEndpoints
< 2 ||
1454 alts
->endpoint
[1].bmAttributes
!= 0x01 ||
1455 alts
->endpoint
[1].bSynchAddress
!= 0 ||
1456 alts
->endpoint
[1].bEndpointAddress
!= (alts
->endpoint
[0].bSynchAddress
& 0x7f)) {
1457 printk(KERN_ERR
"usbaudio: device %d interface %d altsetting %d invalid synch pipe\n",
1458 dev
->devnum
, u
->interface
, fmt
->altsetting
);
1461 u
->syncpipe
= usb_sndisocpipe(dev
, alts
->endpoint
[1].bEndpointAddress
& 0xf);
1462 u
->syncinterval
= alts
->endpoint
[1].bRefresh
;
1464 if (d
->srate
< fmt
->sratelo
)
1465 d
->srate
= fmt
->sratelo
;
1466 if (d
->srate
> fmt
->sratehi
)
1467 d
->srate
= fmt
->sratehi
;
1468 printk(KERN_DEBUG
"usb_audio: set_format_in: usb_set_interface %u %u\n", alts
->bInterfaceNumber
, fmt
->altsetting
);
1469 if (usb_set_interface(dev
, alts
->bInterfaceNumber
, fmt
->altsetting
) < 0) {
1470 printk(KERN_WARNING
"usbaudio: usb_set_interface failed, device %d interface %d altsetting %d\n",
1471 dev
->devnum
, u
->interface
, fmt
->altsetting
);
1474 if (fmt
->sratelo
== fmt
->sratehi
)
1476 ep
= usb_pipeendpoint(u
->datapipe
) | (u
->datapipe
& USB_DIR_IN
);
1477 /* if endpoint has pitch control, enable it */
1478 if (fmt
->attributes
& 0x02) {
1480 if ((ret
= usb_control_msg(dev
, usb_sndctrlpipe(dev
, 0), SET_CUR
, USB_TYPE_CLASS
|USB_RECIP_ENDPOINT
|USB_DIR_OUT
,
1481 PITCH_CONTROL
<< 8, ep
, data
, 1, HZ
)) < 0) {
1482 printk(KERN_ERR
"usbaudio: failure (error %d) to set output pitch control device %d interface %u endpoint 0x%x to %u\n",
1483 ret
, dev
->devnum
, u
->interface
, ep
, d
->srate
);
1487 /* if endpoint has sampling rate control, set it */
1488 if (fmt
->attributes
& 0x01) {
1490 data
[1] = d
->srate
>> 8;
1491 data
[2] = d
->srate
>> 16;
1492 if ((ret
= usb_control_msg(dev
, usb_sndctrlpipe(dev
, 0), SET_CUR
, USB_TYPE_CLASS
|USB_RECIP_ENDPOINT
|USB_DIR_OUT
,
1493 SAMPLING_FREQ_CONTROL
<< 8, ep
, data
, 3, HZ
)) < 0) {
1494 printk(KERN_ERR
"usbaudio: failure (error %d) to set input sampling frequency device %d interface %u endpoint 0x%x to %u\n",
1495 ret
, dev
->devnum
, u
->interface
, ep
, d
->srate
);
1498 if ((ret
= usb_control_msg(dev
, usb_rcvctrlpipe(dev
, 0), GET_CUR
, USB_TYPE_CLASS
|USB_RECIP_ENDPOINT
|USB_DIR_IN
,
1499 SAMPLING_FREQ_CONTROL
<< 8, ep
, data
, 3, HZ
)) < 0) {
1500 printk(KERN_ERR
"usbaudio: failure (error %d) to get input sampling frequency device %d interface %u endpoint 0x%x\n",
1501 ret
, dev
->devnum
, u
->interface
, ep
);
1504 printk(KERN_DEBUG
"usbaudio: set_format_in: device %d interface %d altsetting %d srate req: %u real %u\n",
1505 dev
->devnum
, u
->interface
, fmt
->altsetting
, d
->srate
, data
[0] | (data
[1] << 8) | (data
[2] << 16));
1506 d
->srate
= data
[0] | (data
[1] << 8) | (data
[2] << 16);
1511 static int set_format_out(struct usb_audiodev
*as
)
1513 struct usb_device
*dev
= as
->state
->usbdev
;
1514 struct usb_config_descriptor
*config
= dev
->actconfig
;
1515 struct usb_interface_descriptor
*alts
;
1516 struct usb_interface
*iface
;
1517 struct usbout
*u
= &as
->usbout
;
1518 struct dmabuf
*d
= &u
->dma
;
1519 struct audioformat
*fmt
;
1520 unsigned int fmtnr
, ep
;
1521 unsigned char data
[3];
1524 if (u
->interface
< 0 || u
->interface
>= config
->bNumInterfaces
)
1526 iface
= &config
->interface
[u
->interface
];
1528 fmtnr
= find_format(as
->fmtout
, as
->numfmtout
, d
->format
, d
->srate
);
1530 printk(KERN_ERR
"usbaudio: set_format_out(): failed to find desired format/speed combination.\n");
1534 fmt
= as
->fmtout
+ fmtnr
;
1535 u
->format
= fmt
->format
;
1536 alts
= &iface
->altsetting
[fmt
->altsetting
];
1537 u
->datapipe
= usb_sndisocpipe(dev
, alts
->endpoint
[0].bEndpointAddress
& 0xf);
1538 u
->syncpipe
= u
->syncinterval
= 0;
1539 if ((alts
->endpoint
[0].bmAttributes
& 0x0c) == 0x04) {
1541 printk(KERN_DEBUG
"bNumEndpoints 0x%02x endpoint[1].bmAttributes 0x%02x\n"
1542 KERN_DEBUG
"endpoint[1].bSynchAddress 0x%02x endpoint[1].bEndpointAddress 0x%02x\n"
1543 KERN_DEBUG
"endpoint[0].bSynchAddress 0x%02x\n", alts
->bNumEndpoints
,
1544 alts
->endpoint
[1].bmAttributes
, alts
->endpoint
[1].bSynchAddress
,
1545 alts
->endpoint
[1].bEndpointAddress
, alts
->endpoint
[0].bSynchAddress
);
1547 if (alts
->bNumEndpoints
< 2 ||
1548 alts
->endpoint
[1].bmAttributes
!= 0x01 ||
1549 alts
->endpoint
[1].bSynchAddress
!= 0 ||
1550 alts
->endpoint
[1].bEndpointAddress
!= (alts
->endpoint
[0].bSynchAddress
| 0x80)) {
1551 printk(KERN_ERR
"usbaudio: device %d interface %d altsetting %d invalid synch pipe\n",
1552 dev
->devnum
, u
->interface
, fmt
->altsetting
);
1555 u
->syncpipe
= usb_rcvisocpipe(dev
, alts
->endpoint
[1].bEndpointAddress
& 0xf);
1556 u
->syncinterval
= alts
->endpoint
[1].bRefresh
;
1558 if (d
->srate
< fmt
->sratelo
)
1559 d
->srate
= fmt
->sratelo
;
1560 if (d
->srate
> fmt
->sratehi
)
1561 d
->srate
= fmt
->sratehi
;
1562 printk(KERN_DEBUG
"usb_audio: set_format_out: usb_set_interface %u %u\n", alts
->bInterfaceNumber
, fmt
->altsetting
);
1563 if (usb_set_interface(dev
, u
->interface
, fmt
->altsetting
) < 0) {
1564 printk(KERN_WARNING
"usbaudio: usb_set_interface failed, device %d interface %d altsetting %d\n",
1565 dev
->devnum
, u
->interface
, fmt
->altsetting
);
1568 if (fmt
->sratelo
== fmt
->sratehi
)
1570 ep
= usb_pipeendpoint(u
->datapipe
) | (u
->datapipe
& USB_DIR_IN
);
1571 /* if endpoint has pitch control, enable it */
1572 if (fmt
->attributes
& 0x02) {
1574 if ((ret
= usb_control_msg(dev
, usb_sndctrlpipe(dev
, 0), SET_CUR
, USB_TYPE_CLASS
|USB_RECIP_ENDPOINT
|USB_DIR_OUT
,
1575 PITCH_CONTROL
<< 8, ep
, data
, 1, HZ
)) < 0) {
1576 printk(KERN_ERR
"usbaudio: failure (error %d) to set output pitch control device %d interface %u endpoint 0x%x to %u\n",
1577 ret
, dev
->devnum
, u
->interface
, ep
, d
->srate
);
1581 /* if endpoint has sampling rate control, set it */
1582 if (fmt
->attributes
& 0x01) {
1584 data
[1] = d
->srate
>> 8;
1585 data
[2] = d
->srate
>> 16;
1586 if ((ret
= usb_control_msg(dev
, usb_sndctrlpipe(dev
, 0), SET_CUR
, USB_TYPE_CLASS
|USB_RECIP_ENDPOINT
|USB_DIR_OUT
,
1587 SAMPLING_FREQ_CONTROL
<< 8, ep
, data
, 3, HZ
)) < 0) {
1588 printk(KERN_ERR
"usbaudio: failure (error %d) to set output sampling frequency device %d interface %u endpoint 0x%x to %u\n",
1589 ret
, dev
->devnum
, u
->interface
, ep
, d
->srate
);
1592 if ((ret
= usb_control_msg(dev
, usb_rcvctrlpipe(dev
, 0), GET_CUR
, USB_TYPE_CLASS
|USB_RECIP_ENDPOINT
|USB_DIR_IN
,
1593 SAMPLING_FREQ_CONTROL
<< 8, ep
, data
, 3, HZ
)) < 0) {
1594 printk(KERN_ERR
"usbaudio: failure (error %d) to get output sampling frequency device %d interface %u endpoint 0x%x\n",
1595 ret
, dev
->devnum
, u
->interface
, ep
);
1598 printk(KERN_DEBUG
"usbaudio: set_format_out: device %d interface %d altsetting %d srate req: %u real %u\n",
1599 dev
->devnum
, u
->interface
, fmt
->altsetting
, d
->srate
, data
[0] | (data
[1] << 8) | (data
[2] << 16));
1600 d
->srate
= data
[0] | (data
[1] << 8) | (data
[2] << 16);
1605 static int set_format(struct usb_audiodev
*s
, unsigned int fmode
, unsigned int fmt
, unsigned int srate
)
1607 int ret1
= 0, ret2
= 0;
1609 if (!(fmode
& (FMODE_READ
|FMODE_WRITE
)))
1611 if (fmode
& FMODE_READ
) {
1613 s
->usbin
.dma
.ready
= 0;
1614 if (fmt
== AFMT_QUERY
)
1615 fmt
= s
->usbin
.dma
.format
;
1617 s
->usbin
.dma
.format
= fmt
;
1619 srate
= s
->usbin
.dma
.srate
;
1621 s
->usbin
.dma
.srate
= srate
;
1623 if (fmode
& FMODE_WRITE
) {
1625 s
->usbout
.dma
.ready
= 0;
1626 if (fmt
== AFMT_QUERY
)
1627 fmt
= s
->usbout
.dma
.format
;
1629 s
->usbout
.dma
.format
= fmt
;
1631 srate
= s
->usbout
.dma
.srate
;
1633 s
->usbout
.dma
.srate
= srate
;
1635 if (fmode
& FMODE_READ
)
1636 ret1
= set_format_in(s
);
1637 if (fmode
& FMODE_WRITE
)
1638 ret2
= set_format_out(s
);
1639 return ret1
? ret1
: ret2
;
1642 /* --------------------------------------------------------------------- */
1644 static int wrmixer(struct usb_mixerdev
*ms
, unsigned mixch
, unsigned value
)
1646 struct usb_device
*dev
= ms
->state
->usbdev
;
1647 unsigned char data
[2];
1648 struct mixerchannel
*ch
;
1651 if (mixch
>= ms
->numch
)
1653 ch
= &ms
->ch
[mixch
];
1654 v3
= ch
->maxval
- ch
->minval
;
1656 v2
= (value
>> 8) & 0xff;
1661 if (!(ch
->flags
& (MIXFLG_STEREOIN
| MIXFLG_STEREOOUT
)))
1663 ch
->value
= v1
| (v2
<< 8);
1664 v1
= (v1
* v3
) / 100 + ch
->minval
;
1665 v2
= (v2
* v3
) / 100 + ch
->minval
;
1666 switch (ch
->selector
) {
1667 case 0: /* mixer unit request */
1670 if (usb_control_msg(dev
, usb_sndctrlpipe(dev
, 0), SET_CUR
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_OUT
,
1671 (ch
->chnum
<< 8) | 1, ms
->iface
| (ch
->unitid
<< 8), data
, 2, HZ
) < 0)
1673 if (!(ch
->flags
& (MIXFLG_STEREOIN
| MIXFLG_STEREOOUT
)))
1677 if (usb_control_msg(dev
, usb_sndctrlpipe(dev
, 0), SET_CUR
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_OUT
,
1678 ((ch
->chnum
+ !!(ch
->flags
& MIXFLG_STEREOIN
)) << 8) | (1 + !!(ch
->flags
& MIXFLG_STEREOOUT
)),
1679 ms
->iface
| (ch
->unitid
<< 8), data
, 2, HZ
) < 0)
1683 /* various feature unit controls */
1684 case VOLUME_CONTROL
:
1687 if (usb_control_msg(dev
, usb_sndctrlpipe(dev
, 0), SET_CUR
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_OUT
,
1688 (ch
->selector
<< 8) | ch
->chnum
, ms
->iface
| (ch
->unitid
<< 8), data
, 2, HZ
) < 0)
1694 if (usb_control_msg(dev
, usb_sndctrlpipe(dev
, 0), SET_CUR
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_OUT
,
1695 (ch
->selector
<< 8) | (ch
->chnum
+ 1), ms
->iface
| (ch
->unitid
<< 8), data
, 2, HZ
) < 0)
1701 case TREBLE_CONTROL
:
1703 if (usb_control_msg(dev
, usb_sndctrlpipe(dev
, 0), SET_CUR
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_OUT
,
1704 (ch
->selector
<< 8) | ch
->chnum
, ms
->iface
| (ch
->unitid
<< 8), data
, 1, HZ
) < 0)
1709 if (usb_control_msg(dev
, usb_sndctrlpipe(dev
, 0), SET_CUR
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_OUT
,
1710 (ch
->selector
<< 8) | (ch
->chnum
+ 1), ms
->iface
| (ch
->unitid
<< 8), data
, 1, HZ
) < 0)
1720 printk(KERN_ERR
"usbaudio: mixer request device %u if %u unit %u ch %u selector %u failed\n",
1721 dev
->devnum
, ms
->iface
, ch
->unitid
, ch
->chnum
, ch
->selector
);
1725 /* --------------------------------------------------------------------- */
1728 * should be called with open_sem hold, so that no new processes
1729 * look at the audio device to be destroyed
1732 static void release(struct usb_audio_state
*s
)
1734 struct usb_audiodev
*as
;
1735 struct usb_mixerdev
*ms
;
1743 wake_up(&open_wait
);
1744 while (!list_empty(&s
->audiolist
)) {
1745 as
= list_entry(s
->audiolist
.next
, struct usb_audiodev
, list
);
1746 list_del(&as
->list
);
1749 dmabuf_release(&as
->usbin
.dma
);
1750 dmabuf_release(&as
->usbout
.dma
);
1753 while (!list_empty(&s
->mixerlist
)) {
1754 ms
= list_entry(s
->mixerlist
.next
, struct usb_mixerdev
, list
);
1755 list_del(&ms
->list
);
1761 extern inline int prog_dmabuf_in(struct usb_audiodev
*as
)
1764 return dmabuf_init(&as
->usbin
.dma
);
1767 extern inline int prog_dmabuf_out(struct usb_audiodev
*as
)
1770 return dmabuf_init(&as
->usbout
.dma
);
1773 /* --------------------------------------------------------------------- */
1775 static loff_t
usb_audio_llseek(struct file
*file
, loff_t offset
, int origin
)
1780 /* --------------------------------------------------------------------- */
1782 static int usb_audio_open_mixdev(struct inode
*inode
, struct file
*file
)
1784 int minor
= MINOR(inode
->i_rdev
);
1785 struct list_head
*devs
, *mdevs
;
1786 struct usb_mixerdev
*ms
;
1787 struct usb_audio_state
*s
;
1790 for (devs
= audiodevs
.next
; devs
!= &audiodevs
; devs
= devs
->next
) {
1791 s
= list_entry(devs
, struct usb_audio_state
, audiodev
);
1792 for (mdevs
= s
->mixerlist
.next
; mdevs
!= &s
->mixerlist
; mdevs
= mdevs
->next
) {
1793 ms
= list_entry(mdevs
, struct usb_mixerdev
, list
);
1794 if (ms
->dev_mixer
== minor
)
1806 file
->private_data
= ms
;
1814 static int usb_audio_release_mixdev(struct inode
*inode
, struct file
*file
)
1816 struct usb_mixerdev
*ms
= (struct usb_mixerdev
*)file
->private_data
;
1817 struct usb_audio_state
*s
= ms
->state
;
1825 static int usb_audio_ioctl_mixdev(struct inode
*inode
, struct file
*file
, unsigned int cmd
, unsigned long arg
)
1827 struct usb_mixerdev
*ms
= (struct usb_mixerdev
*)file
->private_data
;
1830 if (!ms
->state
->usbdev
)
1833 if (cmd
== SOUND_MIXER_INFO
) {
1835 strncpy(info
.id
, "USB_AUDIO", sizeof(info
.id
));
1836 strncpy(info
.name
, "USB Audio Class Driver", sizeof(info
.name
));
1837 info
.modify_counter
= ms
->modcnt
;
1838 if (copy_to_user((void *)arg
, &info
, sizeof(info
)))
1842 if (cmd
== SOUND_OLD_MIXER_INFO
) {
1843 _old_mixer_info info
;
1844 strncpy(info
.id
, "USB_AUDIO", sizeof(info
.id
));
1845 strncpy(info
.name
, "USB Audio Class Driver", sizeof(info
.name
));
1846 if (copy_to_user((void *)arg
, &info
, sizeof(info
)))
1850 if (cmd
== OSS_GETVERSION
)
1851 return put_user(SOUND_VERSION
, (int *)arg
);
1852 if (_IOC_TYPE(cmd
) != 'M' || _IOC_SIZE(cmd
) != sizeof(int))
1854 if (_IOC_DIR(cmd
) == _IOC_READ
) {
1855 switch (_IOC_NR(cmd
)) {
1856 case SOUND_MIXER_RECSRC
: /* Arg contains a bit for each recording source */
1857 /* don't know how to handle this yet */
1858 return put_user(0, (int *)arg
);
1860 case SOUND_MIXER_DEVMASK
: /* Arg contains a bit for each supported device */
1861 for (val
= i
= 0; i
< ms
->numch
; i
++)
1862 val
|= 1 << ms
->ch
[i
].osschannel
;
1863 return put_user(val
, (int *)arg
);
1865 case SOUND_MIXER_RECMASK
: /* Arg contains a bit for each supported recording source */
1866 /* don't know how to handle this yet */
1867 return put_user(0, (int *)arg
);
1869 case SOUND_MIXER_STEREODEVS
: /* Mixer channels supporting stereo */
1870 for (val
= i
= 0; i
< ms
->numch
; i
++)
1871 if (ms
->ch
[i
].flags
& (MIXFLG_STEREOIN
| MIXFLG_STEREOOUT
))
1872 val
|= 1 << ms
->ch
[i
].osschannel
;
1873 return put_user(val
, (int *)arg
);
1875 case SOUND_MIXER_CAPS
:
1876 return put_user(0, (int *)arg
);
1880 if (i
>= SOUND_MIXER_NRDEVICES
)
1882 for (j
= 0; j
< ms
->numch
; j
++) {
1883 if (ms
->ch
[j
].osschannel
== i
) {
1884 return put_user(ms
->ch
[j
].value
, (int *)arg
);
1890 if (_IOC_DIR(cmd
) != (_IOC_READ
|_IOC_WRITE
))
1893 switch (_IOC_NR(cmd
)) {
1894 case SOUND_MIXER_RECSRC
: /* Arg contains a bit for each recording source */
1895 get_user_ret(val
, (int *)arg
, -EFAULT
);
1896 /* set recording source: val */
1901 if (i
>= SOUND_MIXER_NRDEVICES
)
1903 for (j
= 0; j
< ms
->numch
&& ms
->ch
[j
].osschannel
!= i
; j
++);
1906 get_user_ret(val
, (int *)arg
, -EFAULT
);
1907 if (wrmixer(ms
, j
, val
))
1909 return put_user(ms
->ch
[j
].value
, (int *)arg
);
1913 static /*const*/ struct file_operations usb_mixer_fops
= {
1914 llseek
: usb_audio_llseek
,
1915 ioctl
: usb_audio_ioctl_mixdev
,
1916 open
: usb_audio_open_mixdev
,
1917 release
: usb_audio_release_mixdev
,
1920 /* --------------------------------------------------------------------- */
1922 static int drain_out(struct usb_audiodev
*as
, int nonblock
)
1924 DECLARE_WAITQUEUE(wait
, current
);
1925 unsigned long flags
;
1928 if (as
->usbout
.dma
.mapped
|| !as
->usbout
.dma
.ready
)
1930 add_wait_queue(&as
->usbout
.dma
.wait
, &wait
);
1932 __set_current_state(TASK_INTERRUPTIBLE
);
1933 spin_lock_irqsave(&as
->lock
, flags
);
1934 count
= as
->usbout
.dma
.count
;
1935 spin_unlock_irqrestore(&as
->lock
, flags
);
1938 if (signal_pending(current
))
1941 remove_wait_queue(&as
->usbout
.dma
.wait
, &wait
);
1942 set_current_state(TASK_RUNNING
);
1945 tmo
= 3 * HZ
* count
/ as
->usbout
.dma
.srate
;
1946 tmo
>>= AFMT_BYTESSHIFT(as
->usbout
.dma
.format
);
1947 if (!schedule_timeout(tmo
+ 1)) {
1948 printk(KERN_DEBUG
"usbaudio: dma timed out??\n");
1952 remove_wait_queue(&as
->usbout
.dma
.wait
, &wait
);
1953 set_current_state(TASK_RUNNING
);
1954 if (signal_pending(current
))
1955 return -ERESTARTSYS
;
1959 /* --------------------------------------------------------------------- */
1961 static ssize_t
usb_audio_read(struct file
*file
, char *buffer
, size_t count
, loff_t
*ppos
)
1963 struct usb_audiodev
*as
= (struct usb_audiodev
*)file
->private_data
;
1964 DECLARE_WAITQUEUE(wait
, current
);
1966 unsigned long flags
;
1970 if (ppos
!= &file
->f_pos
)
1972 if (as
->usbin
.dma
.mapped
)
1974 if (!as
->usbin
.dma
.ready
&& (ret
= prog_dmabuf_in(as
)))
1976 if (!access_ok(VERIFY_WRITE
, buffer
, count
))
1978 add_wait_queue(&as
->usbin
.dma
.wait
, &wait
);
1980 spin_lock_irqsave(&as
->lock
, flags
);
1981 ptr
= as
->usbin
.dma
.rdptr
;
1982 cnt
= as
->usbin
.dma
.count
;
1983 /* set task state early to avoid wakeup races */
1985 __set_current_state(TASK_INTERRUPTIBLE
);
1986 spin_unlock_irqrestore(&as
->lock
, flags
);
1990 if (usbin_start(as
)) {
1995 if (file
->f_flags
& O_NONBLOCK
) {
2001 if (signal_pending(current
)) {
2008 if ((err
= dmabuf_copyout_user(&as
->usbin
.dma
, ptr
, buffer
, cnt
))) {
2014 if (ptr
>= as
->usbin
.dma
.dmasize
)
2015 ptr
-= as
->usbin
.dma
.dmasize
;
2016 spin_lock_irqsave(&as
->lock
, flags
);
2017 as
->usbin
.dma
.rdptr
= ptr
;
2018 as
->usbin
.dma
.count
-= cnt
;
2019 spin_unlock_irqrestore(&as
->lock
, flags
);
2024 __set_current_state(TASK_RUNNING
);
2025 remove_wait_queue(&as
->usbin
.dma
.wait
, &wait
);
2029 static ssize_t
usb_audio_write(struct file
*file
, const char *buffer
, size_t count
, loff_t
*ppos
)
2031 struct usb_audiodev
*as
= (struct usb_audiodev
*)file
->private_data
;
2032 DECLARE_WAITQUEUE(wait
, current
);
2034 unsigned long flags
;
2038 if (ppos
!= &file
->f_pos
)
2040 if (as
->usbout
.dma
.mapped
)
2042 if (!as
->usbout
.dma
.ready
&& (ret
= prog_dmabuf_out(as
)))
2044 if (!access_ok(VERIFY_READ
, buffer
, count
))
2046 add_wait_queue(&as
->usbout
.dma
.wait
, &wait
);
2049 printk(KERN_DEBUG
"usb_audio_write: count %u dma: count %u rdptr %u wrptr %u dmasize %u fragsize %u flags 0x%02x taskst 0x%x\n",
2050 count
, as
->usbout
.dma
.count
, as
->usbout
.dma
.rdptr
, as
->usbout
.dma
.wrptr
, as
->usbout
.dma
.dmasize
, as
->usbout
.dma
.fragsize
,
2051 as
->usbout
.flags
, current
->state
);
2053 spin_lock_irqsave(&as
->lock
, flags
);
2054 if (as
->usbout
.dma
.count
< 0) {
2055 as
->usbout
.dma
.count
= 0;
2056 as
->usbout
.dma
.rdptr
= as
->usbout
.dma
.wrptr
;
2058 ptr
= as
->usbout
.dma
.wrptr
;
2059 cnt
= as
->usbout
.dma
.dmasize
- as
->usbout
.dma
.count
;
2060 /* set task state early to avoid wakeup races */
2062 __set_current_state(TASK_INTERRUPTIBLE
);
2063 spin_unlock_irqrestore(&as
->lock
, flags
);
2067 if (usbout_start(as
)) {
2072 if (file
->f_flags
& O_NONBLOCK
) {
2078 if (signal_pending(current
)) {
2085 if ((err
= dmabuf_copyin_user(&as
->usbout
.dma
, ptr
, buffer
, cnt
))) {
2091 if (ptr
>= as
->usbout
.dma
.dmasize
)
2092 ptr
-= as
->usbout
.dma
.dmasize
;
2093 spin_lock_irqsave(&as
->lock
, flags
);
2094 as
->usbout
.dma
.wrptr
= ptr
;
2095 as
->usbout
.dma
.count
+= cnt
;
2096 spin_unlock_irqrestore(&as
->lock
, flags
);
2100 if (usbout_start(as
)) {
2106 __set_current_state(TASK_RUNNING
);
2107 remove_wait_queue(&as
->usbout
.dma
.wait
, &wait
);
2111 /* Called without the kernel lock - fine */
2112 static unsigned int usb_audio_poll(struct file
*file
, struct poll_table_struct
*wait
)
2114 struct usb_audiodev
*as
= (struct usb_audiodev
*)file
->private_data
;
2115 unsigned long flags
;
2116 unsigned int mask
= 0;
2118 if (file
->f_mode
& FMODE_WRITE
) {
2119 if (!as
->usbout
.dma
.ready
)
2120 prog_dmabuf_out(as
);
2121 poll_wait(file
, &as
->usbout
.dma
.wait
, wait
);
2123 if (file
->f_mode
& FMODE_READ
) {
2124 if (!as
->usbin
.dma
.ready
)
2126 poll_wait(file
, &as
->usbin
.dma
.wait
, wait
);
2128 spin_lock_irqsave(&as
->lock
, flags
);
2129 if (file
->f_mode
& FMODE_READ
) {
2130 if (as
->usbin
.dma
.count
>= (signed)as
->usbin
.dma
.fragsize
)
2131 mask
|= POLLIN
| POLLRDNORM
;
2133 if (file
->f_mode
& FMODE_WRITE
) {
2134 if (as
->usbout
.dma
.mapped
) {
2135 if (as
->usbout
.dma
.count
>= (signed)as
->usbout
.dma
.fragsize
)
2136 mask
|= POLLOUT
| POLLWRNORM
;
2138 if ((signed)as
->usbout
.dma
.dmasize
>= as
->usbout
.dma
.count
+ (signed)as
->usbout
.dma
.fragsize
)
2139 mask
|= POLLOUT
| POLLWRNORM
;
2142 spin_unlock_irqrestore(&as
->lock
, flags
);
2146 static int usb_audio_mmap(struct file
*file
, struct vm_area_struct
*vma
)
2148 struct usb_audiodev
*as
= (struct usb_audiodev
*)file
->private_data
;
2152 if (vma
->vm_flags
& VM_WRITE
) {
2153 if ((ret
= prog_dmabuf_out(as
)) != 0)
2155 db
= &as
->usbout
.dma
;
2156 } else if (vma
->vm_flags
& VM_READ
) {
2157 if ((ret
= prog_dmabuf_in(as
)) != 0)
2159 db
= &as
->usbin
.dma
;
2163 if (vma
->vm_pgoff
!= 0)
2166 return dmabuf_mmap(db
, vma
->vm_start
, vma
->vm_end
- vma
->vm_start
, vma
->vm_page_prot
);
2169 static int usb_audio_ioctl(struct inode
*inode
, struct file
*file
, unsigned int cmd
, unsigned long arg
)
2171 struct usb_audiodev
*as
= (struct usb_audiodev
*)file
->private_data
;
2172 struct usb_audio_state
*s
= as
->state
;
2173 unsigned long flags
;
2174 audio_buf_info abinfo
;
2176 int val
, val2
, mapped
, ret
;
2180 mapped
= ((file
->f_mode
& FMODE_WRITE
) && as
->usbout
.dma
.mapped
) ||
2181 ((file
->f_mode
& FMODE_READ
) && as
->usbin
.dma
.mapped
);
2183 case OSS_GETVERSION
:
2184 return put_user(SOUND_VERSION
, (int *)arg
);
2186 case SNDCTL_DSP_SYNC
:
2187 if (file
->f_mode
& FMODE_WRITE
)
2188 return drain_out(as
, 0/*file->f_flags & O_NONBLOCK*/);
2191 case SNDCTL_DSP_SETDUPLEX
:
2194 case SNDCTL_DSP_GETCAPS
:
2195 return put_user(DSP_CAP_DUPLEX
| DSP_CAP_REALTIME
| DSP_CAP_TRIGGER
|
2196 DSP_CAP_MMAP
| DSP_CAP_BATCH
, (int *)arg
);
2198 case SNDCTL_DSP_RESET
:
2199 if (file
->f_mode
& FMODE_WRITE
) {
2201 as
->usbout
.dma
.rdptr
= as
->usbout
.dma
.wrptr
= as
->usbout
.dma
.count
= as
->usbout
.dma
.total_bytes
= 0;
2203 if (file
->f_mode
& FMODE_READ
) {
2205 as
->usbin
.dma
.rdptr
= as
->usbin
.dma
.wrptr
= as
->usbin
.dma
.count
= as
->usbin
.dma
.total_bytes
= 0;
2209 case SNDCTL_DSP_SPEED
:
2210 get_user_ret(val
, (int *)arg
, -EFAULT
);
2216 if (set_format(as
, file
->f_mode
, AFMT_QUERY
, val
))
2219 return put_user((file
->f_mode
& FMODE_READ
) ? as
->usbin
.dma
.srate
: as
->usbout
.dma
.srate
, (int *)arg
);
2221 case SNDCTL_DSP_STEREO
:
2222 val2
= (file
->f_mode
& FMODE_READ
) ? as
->usbin
.dma
.format
: as
->usbout
.dma
.format
;
2223 if (set_format(as
, file
->f_mode
, val2
| AFMT_STEREO
, 0))
2227 case SNDCTL_DSP_CHANNELS
:
2228 get_user_ret(val
, (int *)arg
, -EFAULT
);
2230 val2
= (file
->f_mode
& FMODE_READ
) ? as
->usbin
.dma
.format
: as
->usbout
.dma
.format
;
2232 val2
&= ~AFMT_STEREO
;
2234 val2
|= AFMT_STEREO
;
2235 if (set_format(as
, file
->f_mode
, val2
, 0))
2238 val2
= (file
->f_mode
& FMODE_READ
) ? as
->usbin
.dma
.format
: as
->usbout
.dma
.format
;
2239 return put_user(AFMT_ISSTEREO(val2
) ? 2 : 1, (int *)arg
);
2241 case SNDCTL_DSP_GETFMTS
: /* Returns a mask */
2242 return put_user(AFMT_U8
| AFMT_U16_LE
| AFMT_U16_BE
|
2243 AFMT_S8
| AFMT_S16_LE
| AFMT_S16_BE
, (int *)arg
);
2245 case SNDCTL_DSP_SETFMT
: /* Selects ONE fmt*/
2246 get_user_ret(val
, (int *)arg
, -EFAULT
);
2247 if (val
!= AFMT_QUERY
) {
2248 if (hweight32(val
) != 1)
2250 if (!(val
& (AFMT_U8
| AFMT_U16_LE
| AFMT_U16_BE
|
2251 AFMT_S8
| AFMT_S16_LE
| AFMT_S16_BE
)))
2253 val2
= (file
->f_mode
& FMODE_READ
) ? as
->usbin
.dma
.format
: as
->usbout
.dma
.format
;
2254 val
|= val2
& AFMT_STEREO
;
2255 if (set_format(as
, file
->f_mode
, val
, 0))
2258 val2
= (file
->f_mode
& FMODE_READ
) ? as
->usbin
.dma
.format
: as
->usbout
.dma
.format
;
2259 return put_user(val2
& ~AFMT_STEREO
, (int *)arg
);
2261 case SNDCTL_DSP_POST
:
2264 case SNDCTL_DSP_GETTRIGGER
:
2266 if (file
->f_mode
& FMODE_READ
&& as
->usbin
.flags
& FLG_RUNNING
)
2267 val
|= PCM_ENABLE_INPUT
;
2268 if (file
->f_mode
& FMODE_WRITE
&& as
->usbout
.flags
& FLG_RUNNING
)
2269 val
|= PCM_ENABLE_OUTPUT
;
2270 return put_user(val
, (int *)arg
);
2272 case SNDCTL_DSP_SETTRIGGER
:
2273 get_user_ret(val
, (int *)arg
, -EFAULT
);
2274 if (file
->f_mode
& FMODE_READ
) {
2275 if (val
& PCM_ENABLE_INPUT
) {
2276 if (!as
->usbin
.dma
.ready
&& (ret
= prog_dmabuf_in(as
)))
2278 if (usbin_start(as
))
2283 if (file
->f_mode
& FMODE_WRITE
) {
2284 if (val
& PCM_ENABLE_OUTPUT
) {
2285 if (!as
->usbout
.dma
.ready
&& (ret
= prog_dmabuf_out(as
)))
2287 if (usbout_start(as
))
2294 case SNDCTL_DSP_GETOSPACE
:
2295 if (!(file
->f_mode
& FMODE_WRITE
))
2297 if (!(as
->usbout
.flags
& FLG_RUNNING
) && (val
= prog_dmabuf_out(as
)) != 0)
2299 spin_lock_irqsave(&as
->lock
, flags
);
2300 abinfo
.fragsize
= as
->usbout
.dma
.fragsize
;
2301 abinfo
.bytes
= as
->usbout
.dma
.dmasize
- as
->usbout
.dma
.count
;
2302 abinfo
.fragstotal
= as
->usbout
.dma
.numfrag
;
2303 abinfo
.fragments
= abinfo
.bytes
>> as
->usbout
.dma
.fragshift
;
2304 spin_unlock_irqrestore(&as
->lock
, flags
);
2305 return copy_to_user((void *)arg
, &abinfo
, sizeof(abinfo
)) ? -EFAULT
: 0;
2307 case SNDCTL_DSP_GETISPACE
:
2308 if (!(file
->f_mode
& FMODE_READ
))
2310 if (!(as
->usbin
.flags
& FLG_RUNNING
) && (val
= prog_dmabuf_in(as
)) != 0)
2312 spin_lock_irqsave(&as
->lock
, flags
);
2313 abinfo
.fragsize
= as
->usbin
.dma
.fragsize
;
2314 abinfo
.bytes
= as
->usbin
.dma
.count
;
2315 abinfo
.fragstotal
= as
->usbin
.dma
.numfrag
;
2316 abinfo
.fragments
= abinfo
.bytes
>> as
->usbin
.dma
.fragshift
;
2317 spin_unlock_irqrestore(&as
->lock
, flags
);
2318 return copy_to_user((void *)arg
, &abinfo
, sizeof(abinfo
)) ? -EFAULT
: 0;
2320 case SNDCTL_DSP_NONBLOCK
:
2321 file
->f_flags
|= O_NONBLOCK
;
2324 case SNDCTL_DSP_GETODELAY
:
2325 if (!(file
->f_mode
& FMODE_WRITE
))
2327 spin_lock_irqsave(&as
->lock
, flags
);
2328 val
= as
->usbout
.dma
.count
;
2329 spin_unlock_irqrestore(&as
->lock
, flags
);
2330 return put_user(val
, (int *)arg
);
2332 case SNDCTL_DSP_GETIPTR
:
2333 if (!(file
->f_mode
& FMODE_READ
))
2335 spin_lock_irqsave(&as
->lock
, flags
);
2336 cinfo
.bytes
= as
->usbin
.dma
.total_bytes
;
2337 cinfo
.blocks
= as
->usbin
.dma
.count
>> as
->usbin
.dma
.fragshift
;
2338 cinfo
.ptr
= as
->usbin
.dma
.wrptr
;
2339 if (as
->usbin
.dma
.mapped
)
2340 as
->usbin
.dma
.count
&= as
->usbin
.dma
.fragsize
-1;
2341 spin_unlock_irqrestore(&as
->lock
, flags
);
2342 return copy_to_user((void *)arg
, &cinfo
, sizeof(cinfo
));
2344 case SNDCTL_DSP_GETOPTR
:
2345 if (!(file
->f_mode
& FMODE_WRITE
))
2347 spin_lock_irqsave(&as
->lock
, flags
);
2348 cinfo
.bytes
= as
->usbout
.dma
.total_bytes
;
2349 cinfo
.blocks
= as
->usbout
.dma
.count
>> as
->usbout
.dma
.fragshift
;
2350 cinfo
.ptr
= as
->usbout
.dma
.rdptr
;
2351 if (as
->usbout
.dma
.mapped
)
2352 as
->usbout
.dma
.count
&= as
->usbout
.dma
.fragsize
-1;
2353 spin_unlock_irqrestore(&as
->lock
, flags
);
2354 return copy_to_user((void *)arg
, &cinfo
, sizeof(cinfo
));
2356 case SNDCTL_DSP_GETBLKSIZE
:
2357 if (file
->f_mode
& FMODE_WRITE
) {
2358 if ((val
= prog_dmabuf_out(as
)))
2360 return put_user(as
->usbout
.dma
.fragsize
, (int *)arg
);
2362 if ((val
= prog_dmabuf_in(as
)))
2364 return put_user(as
->usbin
.dma
.fragsize
, (int *)arg
);
2366 case SNDCTL_DSP_SETFRAGMENT
:
2367 get_user_ret(val
, (int *)arg
, -EFAULT
);
2368 if (file
->f_mode
& FMODE_READ
) {
2369 as
->usbin
.dma
.ossfragshift
= val
& 0xffff;
2370 as
->usbin
.dma
.ossmaxfrags
= (val
>> 16) & 0xffff;
2371 if (as
->usbin
.dma
.ossfragshift
< 4)
2372 as
->usbin
.dma
.ossfragshift
= 4;
2373 if (as
->usbin
.dma
.ossfragshift
> 15)
2374 as
->usbin
.dma
.ossfragshift
= 15;
2375 if (as
->usbin
.dma
.ossmaxfrags
< 4)
2376 as
->usbin
.dma
.ossmaxfrags
= 4;
2378 if (file
->f_mode
& FMODE_WRITE
) {
2379 as
->usbout
.dma
.ossfragshift
= val
& 0xffff;
2380 as
->usbout
.dma
.ossmaxfrags
= (val
>> 16) & 0xffff;
2381 if (as
->usbout
.dma
.ossfragshift
< 4)
2382 as
->usbout
.dma
.ossfragshift
= 4;
2383 if (as
->usbout
.dma
.ossfragshift
> 15)
2384 as
->usbout
.dma
.ossfragshift
= 15;
2385 if (as
->usbout
.dma
.ossmaxfrags
< 4)
2386 as
->usbout
.dma
.ossmaxfrags
= 4;
2390 case SNDCTL_DSP_SUBDIVIDE
:
2391 if ((file
->f_mode
& FMODE_READ
&& as
->usbin
.dma
.subdivision
) ||
2392 (file
->f_mode
& FMODE_WRITE
&& as
->usbout
.dma
.subdivision
))
2394 get_user_ret(val
, (int *)arg
, -EFAULT
);
2395 if (val
!= 1 && val
!= 2 && val
!= 4)
2397 if (file
->f_mode
& FMODE_READ
)
2398 as
->usbin
.dma
.subdivision
= val
;
2399 if (file
->f_mode
& FMODE_WRITE
)
2400 as
->usbout
.dma
.subdivision
= val
;
2403 case SOUND_PCM_READ_RATE
:
2404 return put_user((file
->f_mode
& FMODE_READ
) ? as
->usbin
.dma
.srate
: as
->usbout
.dma
.srate
, (int *)arg
);
2406 case SOUND_PCM_READ_CHANNELS
:
2407 val2
= (file
->f_mode
& FMODE_READ
) ? as
->usbin
.dma
.format
: as
->usbout
.dma
.format
;
2408 return put_user(AFMT_ISSTEREO(val2
) ? 2 : 1, (int *)arg
);
2410 case SOUND_PCM_READ_BITS
:
2411 val2
= (file
->f_mode
& FMODE_READ
) ? as
->usbin
.dma
.format
: as
->usbout
.dma
.format
;
2412 return put_user(AFMT_IS16BIT(val2
) ? 16 : 8, (int *)arg
);
2414 case SOUND_PCM_WRITE_FILTER
:
2415 case SNDCTL_DSP_SETSYNCRO
:
2416 case SOUND_PCM_READ_FILTER
:
2419 return -ENOIOCTLCMD
;
2422 static int usb_audio_open(struct inode
*inode
, struct file
*file
)
2424 int minor
= MINOR(inode
->i_rdev
);
2425 DECLARE_WAITQUEUE(wait
, current
);
2426 struct list_head
*devs
, *adevs
;
2427 struct usb_audiodev
*as
;
2428 struct usb_audio_state
*s
;
2432 for (devs
= audiodevs
.next
; devs
!= &audiodevs
; devs
= devs
->next
) {
2433 s
= list_entry(devs
, struct usb_audio_state
, audiodev
);
2434 for (adevs
= s
->audiolist
.next
; adevs
!= &s
->audiolist
; adevs
= adevs
->next
) {
2435 as
= list_entry(adevs
, struct usb_audiodev
, list
);
2436 if (!((as
->dev_audio
^ minor
) & ~0xf))
2448 /* wait for device to become free */
2449 if (!(as
->open_mode
& file
->f_mode
))
2451 if (file
->f_flags
& O_NONBLOCK
) {
2455 __set_current_state(TASK_INTERRUPTIBLE
);
2456 add_wait_queue(&open_wait
, &wait
);
2459 __set_current_state(TASK_RUNNING
);
2460 remove_wait_queue(&open_wait
, &wait
);
2461 if (signal_pending(current
))
2462 return -ERESTARTSYS
;
2464 if (file
->f_mode
& FMODE_READ
)
2465 as
->usbin
.dma
.ossfragshift
= as
->usbin
.dma
.ossmaxfrags
= as
->usbin
.dma
.subdivision
= 0;
2466 if (file
->f_mode
& FMODE_WRITE
)
2467 as
->usbout
.dma
.ossfragshift
= as
->usbout
.dma
.ossmaxfrags
= as
->usbout
.dma
.subdivision
= 0;
2468 if (set_format(as
, file
->f_mode
, ((minor
& 0xf) == SND_DEV_DSP16
) ? AFMT_S16_LE
: AFMT_U8
/* AFMT_ULAW */, 8000)) {
2472 file
->private_data
= as
;
2473 as
->open_mode
|= file
->f_mode
& (FMODE_READ
| FMODE_WRITE
);
2480 static int usb_audio_release(struct inode
*inode
, struct file
*file
)
2482 struct usb_audiodev
*as
= (struct usb_audiodev
*)file
->private_data
;
2483 struct usb_audio_state
*s
= as
->state
;
2484 struct usb_device
*dev
= s
->usbdev
;
2485 struct usb_interface
*iface
;
2487 if (file
->f_mode
& FMODE_WRITE
)
2488 drain_out(as
, file
->f_flags
& O_NONBLOCK
);
2490 if (file
->f_mode
& FMODE_WRITE
) {
2492 if (dev
&& as
->usbout
.interface
>= 0) {
2493 iface
= &dev
->actconfig
->interface
[as
->usbout
.interface
];
2494 usb_set_interface(dev
, iface
->altsetting
->bInterfaceNumber
, 0);
2496 dmabuf_release(&as
->usbout
.dma
);
2499 if (file
->f_mode
& FMODE_READ
) {
2501 if (dev
&& as
->usbin
.interface
>= 0) {
2502 iface
= &dev
->actconfig
->interface
[as
->usbin
.interface
];
2503 usb_set_interface(dev
, iface
->altsetting
->bInterfaceNumber
, 0);
2505 dmabuf_release(&as
->usbin
.dma
);
2508 as
->open_mode
&= (~file
->f_mode
) & (FMODE_READ
|FMODE_WRITE
);
2510 wake_up(&open_wait
);
2515 static /*const*/ struct file_operations usb_audio_fops
= {
2516 llseek
: usb_audio_llseek
,
2517 read
: usb_audio_read
,
2518 write
: usb_audio_write
,
2519 poll
: usb_audio_poll
,
2520 ioctl
: usb_audio_ioctl
,
2521 mmap
: usb_audio_mmap
,
2522 open
: usb_audio_open
,
2523 release
: usb_audio_release
,
2526 /* --------------------------------------------------------------------- */
2529 * TO DO in order to get to the point of building an OSS interface
2530 * structure, let alone playing music..
2532 * Use kmalloc/kfree for the descriptors we build
2533 * Write the descriptor->OSS convertor code
2534 * Figure how we deal with mixers
2535 * Check alternate configurations. For now assume we will find one
2536 * zero bandwidth (idle) config and one or more live one pers interface.
2539 static void * usb_audio_probe(struct usb_device
*dev
, unsigned int ifnum
);
2540 static void usb_audio_disconnect(struct usb_device
*dev
, void *ptr
);
2542 static struct usb_driver usb_audio_driver
= {
2545 usb_audio_disconnect
,
2546 /*{ NULL, NULL }, */ LIST_HEAD_INIT(usb_audio_driver
.driver_list
),
2553 static int usb_audio_irq(int state
, void *buffer
, int len
, void *dev_id
)
2556 struct usb_audio_device
*aud
= (struct usb_audio_device
*)dev_id
;
2558 printk(KERN_DEBUG
"irq on %p\n", aud
);
2565 static void *find_descriptor(void *descstart
, unsigned int desclen
, void *after
,
2566 u8 dtype
, int iface
, int altsetting
)
2569 int ifc
= -1, as
= -1;
2579 if (p
[1] == USB_DT_INTERFACE
) {
2580 /* minimum length of interface descriptor */
2586 if (p
[1] == dtype
&& (!after
|| (void *)p
> after
) &&
2587 (iface
== -1 || iface
== ifc
) && (altsetting
== -1 || altsetting
== as
)) {
2595 static void *find_csinterface_descriptor(void *descstart
, unsigned int desclen
, void *after
, u8 dsubtype
, int iface
, int altsetting
)
2599 p
= find_descriptor(descstart
, desclen
, after
, USB_DT_CS_INTERFACE
, iface
, altsetting
);
2601 if (p
[0] >= 3 && p
[2] == dsubtype
)
2603 p
= find_descriptor(descstart
, desclen
, p
, USB_DT_CS_INTERFACE
, iface
, altsetting
);
2608 static void *find_audiocontrol_unit(void *descstart
, unsigned int desclen
, void *after
, u8 unit
, int iface
)
2612 p
= find_descriptor(descstart
, desclen
, after
, USB_DT_CS_INTERFACE
, iface
, -1);
2614 if (p
[0] >= 4 && p
[2] >= INPUT_TERMINAL
&& p
[2] <= EXTENSION_UNIT
&& p
[3] == unit
)
2616 p
= find_descriptor(descstart
, desclen
, p
, USB_DT_CS_INTERFACE
, iface
, -1);
2621 static void usb_audio_parsestreaming(struct usb_audio_state
*s
, unsigned char *buffer
, unsigned int buflen
, int asifin
, int asifout
)
2623 struct usb_device
*dev
= s
->usbdev
;
2624 struct usb_audiodev
*as
;
2625 struct usb_config_descriptor
*config
= dev
->actconfig
;
2626 struct usb_interface_descriptor
*alts
;
2627 struct usb_interface
*iface
;
2628 struct audioformat
*fp
;
2629 unsigned char *fmt
, *csep
;
2630 unsigned int i
, j
, k
, format
;
2632 if (!(as
= kmalloc(sizeof(struct usb_audiodev
), GFP_KERNEL
)))
2634 memset(as
, 0, sizeof(struct usb_audiodev
));
2635 init_waitqueue_head(&as
->usbin
.dma
.wait
);
2636 init_waitqueue_head(&as
->usbout
.dma
.wait
);
2637 spin_lock_init(&as
->lock
);
2639 as
->usbin
.interface
= asifin
;
2640 as
->usbout
.interface
= asifout
;
2641 /* search for input formats */
2643 as
->usbin
.flags
= FLG_CONNECTED
;
2644 iface
= &config
->interface
[asifin
];
2645 for (i
= 0; i
< iface
->num_altsetting
; i
++) {
2646 alts
= &iface
->altsetting
[i
];
2647 if (alts
->bInterfaceClass
!= USB_CLASS_AUDIO
|| alts
->bInterfaceSubClass
!= 2)
2649 if (alts
->bNumEndpoints
< 1) {
2650 printk(KERN_ERR
"usbaudio: device %u interface %u altsetting %u does not have an endpoint\n",
2651 dev
->devnum
, asifin
, i
);
2654 if ((alts
->endpoint
[0].bmAttributes
& 0x03) != 0x01 ||
2655 !(alts
->endpoint
[0].bEndpointAddress
& 0x80)) {
2656 printk(KERN_ERR
"usbaudio: device %u interface %u altsetting %u first endpoint not isochronous in\n",
2657 dev
->devnum
, asifin
, i
);
2660 fmt
= find_csinterface_descriptor(buffer
, buflen
, NULL
, AS_GENERAL
, asifin
, i
);
2662 printk(KERN_ERR
"usbaudio: device %u interface %u altsetting %u FORMAT_TYPE descriptor not found\n",
2663 dev
->devnum
, asifin
, i
);
2666 if (fmt
[0] < 7 || fmt
[6] != 0 || (fmt
[5] != 1 && fmt
[5] != 2)) {
2667 printk(KERN_ERR
"usbaudio: device %u interface %u altsetting %u format not supported\n",
2668 dev
->devnum
, asifin
, i
);
2671 format
= (fmt
[5] == 2) ? (AFMT_U16_LE
| AFMT_U8
) : (AFMT_S16_LE
| AFMT_S8
);
2672 fmt
= find_csinterface_descriptor(buffer
, buflen
, NULL
, FORMAT_TYPE
, asifin
, i
);
2674 printk(KERN_ERR
"usbaudio: device %u interface %u altsetting %u FORMAT_TYPE descriptor not found\n",
2675 dev
->devnum
, asifin
, i
);
2678 if (fmt
[0] < 8+3*(fmt
[7] ? fmt
[7] : 2) || fmt
[3] != 1) {
2679 printk(KERN_ERR
"usbaudio: device %u interface %u altsetting %u FORMAT_TYPE descriptor not supported\n",
2680 dev
->devnum
, asifin
, i
);
2683 if (fmt
[4] < 1 || fmt
[4] > 2 || fmt
[5] < 1 || fmt
[5] > 2) {
2684 printk(KERN_ERR
"usbaudio: device %u interface %u altsetting %u unsupported channels %u framesize %u\n",
2685 dev
->devnum
, asifin
, i
, fmt
[4], fmt
[5]);
2688 csep
= find_descriptor(buffer
, buflen
, NULL
, USB_DT_CS_ENDPOINT
, asifin
, i
);
2689 if (!csep
|| csep
[0] < 7 || csep
[2] != EP_GENERAL
) {
2690 printk(KERN_ERR
"usbaudio: device %u interface %u altsetting %u no or invalid class specific endpoint descriptor\n",
2691 dev
->devnum
, asifin
, i
);
2694 if (as
->numfmtin
>= MAXFORMATS
)
2696 fp
= &as
->fmtin
[as
->numfmtin
++];
2698 format
&= (AFMT_U16_LE
| AFMT_S16_LE
);
2700 format
&= (AFMT_U8
| AFMT_S8
);
2702 format
|= AFMT_STEREO
;
2703 fp
->format
= format
;
2705 fp
->sratelo
= fp
->sratehi
= fmt
[8] | (fmt
[9] << 8) | (fmt
[10] << 16);
2706 for (j
= fmt
[7] ? (fmt
[7]-1) : 1; j
> 0; j
--) {
2707 k
= fmt
[8+3*j
] | (fmt
[9+3*j
] << 8) | (fmt
[10+3*j
] << 16);
2708 if (k
> fp
->sratehi
)
2710 if (k
< fp
->sratelo
)
2713 fp
->attributes
= csep
[3];
2714 printk(KERN_INFO
"usbaudio: device %u interface %u altsetting %u: format 0x%08x sratelo %u sratehi %u attributes 0x%02x\n",
2715 dev
->devnum
, asifin
, i
, fp
->format
, fp
->sratelo
, fp
->sratehi
, fp
->attributes
);
2718 /* search for output formats */
2720 as
->usbout
.flags
= FLG_CONNECTED
;
2721 iface
= &config
->interface
[asifout
];
2722 for (i
= 0; i
< iface
->num_altsetting
; i
++) {
2723 alts
= &iface
->altsetting
[i
];
2724 if (alts
->bInterfaceClass
!= USB_CLASS_AUDIO
|| alts
->bInterfaceSubClass
!= 2)
2726 if (alts
->bNumEndpoints
< 1) {
2727 printk(KERN_ERR
"usbaudio: device %u interface %u altsetting %u does not have an endpoint\n",
2728 dev
->devnum
, asifout
, i
);
2731 if ((alts
->endpoint
[0].bmAttributes
& 0x03) != 0x01 ||
2732 (alts
->endpoint
[0].bEndpointAddress
& 0x80)) {
2733 printk(KERN_ERR
"usbaudio: device %u interface %u altsetting %u first endpoint not isochronous out\n",
2734 dev
->devnum
, asifout
, i
);
2737 fmt
= find_csinterface_descriptor(buffer
, buflen
, NULL
, AS_GENERAL
, asifout
, i
);
2739 printk(KERN_ERR
"usbaudio: device %u interface %u altsetting %u FORMAT_TYPE descriptor not found\n",
2740 dev
->devnum
, asifout
, i
);
2743 if (fmt
[0] < 7 || fmt
[6] != 0 || (fmt
[5] != 1 && fmt
[5] != 2)) {
2744 printk(KERN_ERR
"usbaudio: device %u interface %u altsetting %u format not supported\n",
2745 dev
->devnum
, asifout
, i
);
2748 format
= (fmt
[5] == 2) ? (AFMT_U16_LE
| AFMT_U8
) : (AFMT_S16_LE
| AFMT_S8
);
2749 fmt
= find_csinterface_descriptor(buffer
, buflen
, NULL
, FORMAT_TYPE
, asifout
, i
);
2751 printk(KERN_ERR
"usbaudio: device %u interface %u altsetting %u FORMAT_TYPE descriptor not found\n",
2752 dev
->devnum
, asifout
, i
);
2755 if (fmt
[0] < 8+3*(fmt
[7] ? fmt
[7] : 2) || fmt
[3] != 1) {
2756 printk(KERN_ERR
"usbaudio: device %u interface %u altsetting %u FORMAT_TYPE descriptor not supported\n",
2757 dev
->devnum
, asifout
, i
);
2760 if (fmt
[4] < 1 || fmt
[4] > 2 || fmt
[5] < 1 || fmt
[5] > 2) {
2761 printk(KERN_ERR
"usbaudio: device %u interface %u altsetting %u unsupported channels %u framesize %u\n",
2762 dev
->devnum
, asifout
, i
, fmt
[4], fmt
[5]);
2765 csep
= find_descriptor(buffer
, buflen
, NULL
, USB_DT_CS_ENDPOINT
, asifout
, i
);
2766 if (!csep
|| csep
[0] < 7 || csep
[2] != EP_GENERAL
) {
2767 printk(KERN_ERR
"usbaudio: device %u interface %u altsetting %u no or invalid class specific endpoint descriptor\n",
2768 dev
->devnum
, asifout
, i
);
2771 if (as
->numfmtout
>= MAXFORMATS
)
2773 fp
= &as
->fmtout
[as
->numfmtout
++];
2775 format
&= (AFMT_U16_LE
| AFMT_S16_LE
);
2777 format
&= (AFMT_U8
| AFMT_S8
);
2779 format
|= AFMT_STEREO
;
2780 fp
->format
= format
;
2782 fp
->sratelo
= fp
->sratehi
= fmt
[8] | (fmt
[9] << 8) | (fmt
[10] << 16);
2783 for (j
= fmt
[7] ? (fmt
[7]-1) : 1; j
> 0; j
--) {
2784 k
= fmt
[8+3*j
] | (fmt
[9+3*j
] << 8) | (fmt
[10+3*j
] << 16);
2785 if (k
> fp
->sratehi
)
2787 if (k
< fp
->sratelo
)
2790 fp
->attributes
= csep
[3];
2791 printk(KERN_INFO
"usbaudio: device %u interface %u altsetting %u: format 0x%08x sratelo %u sratehi %u attributes 0x%02x\n",
2792 dev
->devnum
, asifout
, i
, fp
->format
, fp
->sratelo
, fp
->sratehi
, fp
->attributes
);
2795 if (as
->numfmtin
== 0 && as
->numfmtout
== 0) {
2799 if ((as
->dev_audio
= register_sound_dsp(&usb_audio_fops
, -1)) < 0) {
2800 printk(KERN_ERR
"usbaudio: cannot register dsp\n");
2804 /* everything successful */
2805 list_add_tail(&as
->list
, &s
->audiolist
);
2808 struct consmixstate
{
2809 struct usb_audio_state
*s
;
2810 unsigned char *buffer
;
2811 unsigned int buflen
;
2812 unsigned int ctrlif
;
2813 struct mixerchannel mixch
[SOUND_MIXER_NRDEVICES
];
2814 unsigned int nrmixch
;
2815 unsigned int mixchmask
;
2816 unsigned long unitbitmap
[32/sizeof(unsigned long)];
2818 unsigned int nrchannels
;
2819 unsigned int termtype
;
2820 unsigned int chconfig
;
2823 static struct mixerchannel
*getmixchannel(struct consmixstate
*state
, unsigned int nr
)
2825 struct mixerchannel
*c
;
2827 if (nr
>= SOUND_MIXER_NRDEVICES
) {
2828 printk(KERN_ERR
"usbaudio: invalid OSS mixer channel %u\n", nr
);
2831 if (!(state
->mixchmask
& (1 << nr
))) {
2832 printk(KERN_WARNING
"usbaudio: OSS mixer channel %u already in use\n", nr
);
2835 c
= &state
->mixch
[state
->nrmixch
++];
2837 state
->mixchmask
&= ~(1 << nr
);
2841 static unsigned int getvolchannel(struct consmixstate
*state
)
2845 if ((state
->termtype
& 0xff00) == 0x0000 && !(state
->mixchmask
& SOUND_MASK_VOLUME
))
2846 return SOUND_MIXER_VOLUME
;
2847 if ((state
->termtype
& 0xff00) == 0x0100) {
2848 if (state
->mixchmask
& SOUND_MASK_PCM
)
2849 return SOUND_MIXER_PCM
;
2850 if (state
->mixchmask
& SOUND_MASK_ALTPCM
)
2851 return SOUND_MIXER_ALTPCM
;
2853 if ((state
->termtype
& 0xff00) == 0x0200 && (state
->mixchmask
& SOUND_MASK_MIC
))
2854 return SOUND_MIXER_MIC
;
2855 if ((state
->termtype
& 0xff00) == 0x0300 && (state
->mixchmask
& SOUND_MASK_SPEAKER
))
2856 return SOUND_MIXER_SPEAKER
;
2857 if ((state
->termtype
& 0xff00) == 0x0300 && (state
->mixchmask
& SOUND_MASK_SPEAKER
))
2858 return SOUND_MIXER_SPEAKER
;
2859 if ((state
->termtype
& 0xff00) == 0x0500) {
2860 if (state
->mixchmask
& SOUND_MASK_PHONEIN
)
2861 return SOUND_MIXER_PHONEIN
;
2862 if (state
->mixchmask
& SOUND_MASK_PHONEOUT
)
2863 return SOUND_MIXER_PHONEOUT
;
2865 if (state
->termtype
>= 0x710 && state
->termtype
<= 0x711 && (state
->mixchmask
& SOUND_MASK_RADIO
))
2866 return SOUND_MIXER_RADIO
;
2867 if (state
->termtype
>= 0x709 && state
->termtype
<= 0x70f && (state
->mixchmask
& SOUND_MASK_VIDEO
))
2868 return SOUND_MIXER_VIDEO
;
2869 u
= ffs(state
->mixchmask
& (SOUND_MASK_LINE
| SOUND_MASK_CD
| SOUND_MASK_LINE1
| SOUND_MASK_LINE2
| SOUND_MASK_LINE3
|
2870 SOUND_MASK_DIGITAL1
| SOUND_MASK_DIGITAL2
| SOUND_MASK_DIGITAL3
));
2874 static void prepmixch(struct consmixstate
*state
)
2876 struct usb_device
*dev
= state
->s
->usbdev
;
2877 struct mixerchannel
*ch
;
2878 unsigned char buf
[2];
2880 unsigned int v2
, v3
;
2882 if (!state
->nrmixch
|| state
->nrmixch
> SOUND_MIXER_NRDEVICES
)
2884 ch
= &state
->mixch
[state
->nrmixch
-1];
2885 switch (ch
->selector
) {
2886 case 0: /* mixer unit request */
2887 if (usb_control_msg(dev
, usb_rcvctrlpipe(dev
, 0), GET_MIN
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_IN
,
2888 (ch
->chnum
<< 8) | 1, state
->ctrlif
| (ch
->unitid
<< 8), buf
, 2, HZ
) < 0)
2890 ch
->minval
= buf
[0] | (buf
[1] << 8);
2891 if (usb_control_msg(dev
, usb_rcvctrlpipe(dev
, 0), GET_MAX
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_IN
,
2892 (ch
->chnum
<< 8) | 1, state
->ctrlif
| (ch
->unitid
<< 8), buf
, 2, HZ
) < 0)
2894 ch
->maxval
= buf
[0] | (buf
[1] << 8);
2895 v2
= ch
->maxval
- ch
->minval
;
2898 if (usb_control_msg(dev
, usb_rcvctrlpipe(dev
, 0), GET_CUR
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_IN
,
2899 (ch
->chnum
<< 8) | 1, state
->ctrlif
| (ch
->unitid
<< 8), buf
, 2, HZ
) < 0)
2901 v1
= buf
[0] | (buf
[1] << 8);
2902 v3
= v1
- ch
->minval
;
2907 if (ch
->flags
& (MIXFLG_STEREOIN
| MIXFLG_STEREOOUT
)) {
2908 if (usb_control_msg(dev
, usb_rcvctrlpipe(dev
, 0), GET_CUR
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_IN
,
2909 ((ch
->chnum
+ !!(ch
->flags
& MIXFLG_STEREOIN
)) << 8) | (1 + !!(ch
->flags
& MIXFLG_STEREOOUT
)),
2910 state
->ctrlif
| (ch
->unitid
<< 8), buf
, 2, HZ
) < 0)
2912 v1
= buf
[0] | (buf
[1] << 8);
2913 v3
= v1
- ch
->minval
;
2918 ch
->value
|= v3
<< 8;
2921 /* various feature unit controls */
2922 case VOLUME_CONTROL
:
2923 if (usb_control_msg(dev
, usb_rcvctrlpipe(dev
, 0), GET_MIN
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_IN
,
2924 (ch
->selector
<< 8) | ch
->chnum
, state
->ctrlif
| (ch
->unitid
<< 8), buf
, 2, HZ
) < 0)
2926 ch
->minval
= buf
[0] | (buf
[1] << 8);
2927 if (usb_control_msg(dev
, usb_rcvctrlpipe(dev
, 0), GET_MAX
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_IN
,
2928 (ch
->selector
<< 8) | ch
->chnum
, state
->ctrlif
| (ch
->unitid
<< 8), buf
, 2, HZ
) < 0)
2930 ch
->maxval
= buf
[0] | (buf
[1] << 8);
2931 if (usb_control_msg(dev
, usb_rcvctrlpipe(dev
, 0), GET_CUR
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_IN
,
2932 (ch
->selector
<< 8) | ch
->chnum
, state
->ctrlif
| (ch
->unitid
<< 8), buf
, 2, HZ
) < 0)
2934 v1
= buf
[0] | (buf
[1] << 8);
2935 v2
= ch
->maxval
- ch
->minval
;
2936 v3
= v1
- ch
->minval
;
2943 if (ch
->chnum
!= 0) {
2944 if (usb_control_msg(dev
, usb_rcvctrlpipe(dev
, 0), GET_CUR
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_IN
,
2945 (ch
->selector
<< 8) | (ch
->chnum
+ 1), state
->ctrlif
| (ch
->unitid
<< 8), buf
, 2, HZ
) < 0)
2947 v1
= buf
[0] | (buf
[1] << 8);
2948 v3
= v1
- ch
->minval
;
2953 ch
->value
|= v3
<< 8;
2958 case TREBLE_CONTROL
:
2959 if (usb_control_msg(dev
, usb_rcvctrlpipe(dev
, 0), GET_MIN
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_IN
,
2960 (ch
->selector
<< 8) | ch
->chnum
, state
->ctrlif
| (ch
->unitid
<< 8), buf
, 1, HZ
) < 0)
2962 ch
->minval
= buf
[0] << 8;
2963 if (usb_control_msg(dev
, usb_rcvctrlpipe(dev
, 0), GET_MAX
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_IN
,
2964 (ch
->selector
<< 8) | ch
->chnum
, state
->ctrlif
| (ch
->unitid
<< 8), buf
, 1, HZ
) < 0)
2966 ch
->maxval
= buf
[0] << 8;
2967 if (usb_control_msg(dev
, usb_rcvctrlpipe(dev
, 0), GET_CUR
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_IN
,
2968 (ch
->selector
<< 8) | ch
->chnum
, state
->ctrlif
| (ch
->unitid
<< 8), buf
, 1, HZ
) < 0)
2971 v2
= ch
->maxval
- ch
->minval
;
2972 v3
= v1
- ch
->minval
;
2979 if (ch
->chnum
!= 0) {
2980 if (usb_control_msg(dev
, usb_rcvctrlpipe(dev
, 0), GET_CUR
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_IN
,
2981 (ch
->selector
<< 8) | (ch
->chnum
+ 1), state
->ctrlif
| (ch
->unitid
<< 8), buf
, 1, HZ
) < 0)
2984 v3
= v1
- ch
->minval
;
2989 ch
->value
|= v3
<< 8;
2998 printk(KERN_ERR
"usbaudio: mixer request device %u if %u unit %u ch %u selector %u failed\n",
2999 dev
->devnum
, state
->ctrlif
, ch
->unitid
, ch
->chnum
, ch
->selector
);
3005 static void usb_audio_recurseunit(struct consmixstate
*state
, unsigned char unitid
);
3007 extern inline int checkmixbmap(unsigned char *bmap
, unsigned char flg
, unsigned int inidx
, unsigned int numoch
)
3012 if (!(bmap
[-(idx
>> 3)] & (0x80 >> (idx
& 7))))
3014 if (!(flg
& (MIXFLG_STEREOIN
| MIXFLG_STEREOOUT
)))
3016 idx
= (inidx
+!!(flg
& MIXFLG_STEREOIN
))*numoch
+!!(flg
& MIXFLG_STEREOOUT
);
3017 if (!(bmap
[-(idx
>> 3)] & (0x80 >> (idx
& 7))))
3022 static void usb_audio_mixerunit(struct consmixstate
*state
, unsigned char *mixer
)
3024 unsigned int nroutch
= mixer
[5+mixer
[4]];
3025 unsigned int chidx
[SOUND_MIXER_NRDEVICES
+1];
3026 unsigned int termt
[SOUND_MIXER_NRDEVICES
];
3027 unsigned char flg
= (nroutch
>= 2) ? MIXFLG_STEREOOUT
: 0;
3028 unsigned char *bmap
= &mixer
[9+mixer
[4]];
3029 unsigned int bmapsize
;
3030 struct mixerchannel
*ch
;
3034 printk(KERN_ERR
"usbaudio: unit %u invalid MIXER_UNIT descriptor\n", mixer
[3]);
3037 if (mixer
[4] > SOUND_MIXER_NRDEVICES
) {
3038 printk(KERN_ERR
"usbaudio: mixer unit %u: too many input pins\n", mixer
[3]);
3042 for (i
= 0; i
< mixer
[4]; i
++) {
3043 usb_audio_recurseunit(state
, mixer
[5+i
]);
3044 chidx
[i
+1] = chidx
[i
] + state
->nrchannels
;
3045 termt
[i
] = state
->termtype
;
3047 state
->termtype
= 0;
3048 state
->chconfig
= mixer
[6+mixer
[4]] | (mixer
[7+mixer
[4]] << 8);
3049 bmapsize
= (nroutch
* chidx
[mixer
[4]] + 7) >> 3;
3050 bmap
+= bmapsize
- 1;
3051 if (mixer
[0] < 10+mixer
[4]+bmapsize
) {
3052 printk(KERN_ERR
"usbaudio: unit %u invalid MIXER_UNIT descriptor (bitmap too small)\n", mixer
[3]);
3055 for (i
= 0; i
< mixer
[4]; i
++) {
3056 state
->termtype
= termt
[i
];
3057 if (chidx
[i
+1]-chidx
[i
] >= 2) {
3058 flg
|= MIXFLG_STEREOIN
;
3059 if (checkmixbmap(bmap
, flg
, chidx
[i
], nroutch
)) {
3060 ch
= getmixchannel(state
, getvolchannel(state
));
3062 ch
->unitid
= mixer
[3];
3064 ch
->chnum
= chidx
[i
]+1;
3071 flg
&= ~MIXFLG_STEREOIN
;
3072 if (checkmixbmap(bmap
, flg
, chidx
[i
], nroutch
)) {
3073 ch
= getmixchannel(state
, getvolchannel(state
));
3075 ch
->unitid
= mixer
[3];
3077 ch
->chnum
= chidx
[i
]+1;
3083 state
->termtype
= 0;
3086 static void usb_audio_selectorunit(struct consmixstate
*state
, unsigned char *selector
)
3088 unsigned int chnum
, i
;
3091 printk(KERN_ERR
"usbaudio: unit %u invalid SELECTOR_UNIT descriptor\n", selector
[3]);
3094 usb_audio_recurseunit(state
, selector
[5]);
3095 chnum
= state
->nrchannels
;
3096 for (i
= 1; i
< selector
[4]; i
++) {
3097 usb_audio_recurseunit(state
, selector
[5+i
]);
3098 if (chnum
!= state
->nrchannels
) {
3099 printk(KERN_ERR
"usbaudio: selector unit %u: input pins with varying channel numbers\n", selector
[3]);
3100 state
->termtype
= 0;
3101 state
->chconfig
= 0;
3102 state
->nrchannels
= 0;
3106 state
->termtype
= 0;
3107 state
->chconfig
= 0;
3110 /* in the future we might try to handle 3D etc. effect units */
3112 static void usb_audio_processingunit(struct consmixstate
*state
, unsigned char *proc
)
3116 for (i
= 0; i
< proc
[6]; i
++)
3117 usb_audio_recurseunit(state
, proc
[7+i
]);
3118 state
->nrchannels
= proc
[7+proc
[6]];
3119 state
->termtype
= 0;
3120 state
->chconfig
= proc
[8+proc
[6]] | (proc
[9+proc
[6]] << 8);
3123 static void usb_audio_featureunit(struct consmixstate
*state
, unsigned char *ftr
)
3125 struct mixerchannel
*ch
;
3126 unsigned short chftr
, mchftr
;
3128 struct usb_device
*dev
= state
->s
->usbdev
;
3129 unsigned char data
[1];
3132 usb_audio_recurseunit(state
, ftr
[4]);
3133 if (state
->nrchannels
== 0) {
3134 printk(KERN_ERR
"usbaudio: feature unit %u source has no channels\n", ftr
[3]);
3137 if (state
->nrchannels
> 2)
3138 printk(KERN_WARNING
"usbaudio: feature unit %u: OSS mixer interface does not support more than 2 channels\n", ftr
[3]);
3139 if (state
->nrchannels
== 1 && ftr
[0] == 7+ftr
[5]) {
3140 printk(KERN_WARNING
"usbaudio: workaround for broken Philips Camera Microphone descriptor enabled\n");
3144 if (ftr
[0] < 7+ftr
[5]*(1+state
->nrchannels
)) {
3145 printk(KERN_ERR
"usbaudio: unit %u: invalid FEATURE_UNIT descriptor\n", ftr
[3]);
3149 chftr
= ftr
[6+ftr
[5]];
3150 if (state
->nrchannels
> 1)
3151 chftr
&= ftr
[6+2*ftr
[5]];
3153 /* volume control */
3155 ch
= getmixchannel(state
, getvolchannel(state
));
3157 ch
->unitid
= ftr
[3];
3158 ch
->selector
= VOLUME_CONTROL
;
3160 ch
->flags
= MIXFLG_STEREOIN
| MIXFLG_STEREOOUT
;
3163 } else if (mchftr
& 2) {
3164 ch
= getmixchannel(state
, getvolchannel(state
));
3166 ch
->unitid
= ftr
[3];
3167 ch
->selector
= VOLUME_CONTROL
;
3175 ch
= getmixchannel(state
, SOUND_MIXER_BASS
);
3177 ch
->unitid
= ftr
[3];
3178 ch
->selector
= BASS_CONTROL
;
3180 ch
->flags
= MIXFLG_STEREOIN
| MIXFLG_STEREOOUT
;
3183 } else if (mchftr
& 4) {
3184 ch
= getmixchannel(state
, SOUND_MIXER_BASS
);
3186 ch
->unitid
= ftr
[3];
3187 ch
->selector
= BASS_CONTROL
;
3193 /* treble control */
3195 ch
= getmixchannel(state
, SOUND_MIXER_TREBLE
);
3197 ch
->unitid
= ftr
[3];
3198 ch
->selector
= TREBLE_CONTROL
;
3200 ch
->flags
= MIXFLG_STEREOIN
| MIXFLG_STEREOOUT
;
3203 } else if (mchftr
& 16) {
3204 ch
= getmixchannel(state
, SOUND_MIXER_TREBLE
);
3206 ch
->unitid
= ftr
[3];
3207 ch
->selector
= TREBLE_CONTROL
;
3214 /* if there are mute controls, unmute them */
3215 /* does not seem to be necessary, and the Dallas chip does not seem to support the "all" channel (255) */
3216 if ((chftr
& 1) || (mchftr
& 1)) {
3217 printk(KERN_DEBUG
"usbaudio: unmuting feature unit %u interface %u\n", ftr
[3], state
->ctrlif
);
3219 if (usb_control_msg(dev
, usb_sndctrlpipe(dev
, 0), SET_CUR
, USB_RECIP_INTERFACE
| USB_TYPE_CLASS
| USB_DIR_OUT
,
3220 (MUTE_CONTROL
<< 8) | 0xff, state
->ctrlif
| (ftr
[3] << 8), data
, 1, HZ
) < 0)
3221 printk(KERN_WARNING
"usbaudio: failure to unmute feature unit %u interface %u\n", ftr
[3], state
->ctrlif
);
3226 static void usb_audio_recurseunit(struct consmixstate
*state
, unsigned char unitid
)
3231 if (test_and_set_bit(unitid
, &state
->unitbitmap
)) {
3232 printk(KERN_ERR
"usbaudio: mixer path recursion detected, unit %d!\n", unitid
);
3235 p1
= find_audiocontrol_unit(state
->buffer
, state
->buflen
, NULL
, unitid
, state
->ctrlif
);
3237 printk(KERN_ERR
"usbaudio: unit %d not found!\n", unitid
);
3240 state
->nrchannels
= 0;
3241 state
->termtype
= 0;
3242 state
->chconfig
= 0;
3244 case INPUT_TERMINAL
:
3246 printk(KERN_ERR
"usbaudio: unit %u: invalid INPUT_TERMINAL descriptor\n", unitid
);
3249 state
->nrchannels
= p1
[7];
3250 state
->termtype
= p1
[4] | (p1
[5] << 8);
3251 state
->chconfig
= p1
[8] | (p1
[9] << 8);
3255 if (p1
[0] < 10 || p1
[0] < 10+p1
[4]) {
3256 printk(KERN_ERR
"usbaudio: unit %u: invalid MIXER_UNIT descriptor\n", unitid
);
3259 usb_audio_mixerunit(state
, p1
);
3263 if (p1
[0] < 6 || p1
[0] < 6+p1
[4]) {
3264 printk(KERN_ERR
"usbaudio: unit %u: invalid SELECTOR_UNIT descriptor\n", unitid
);
3267 usb_audio_selectorunit(state
, p1
);
3271 if (p1
[0] < 7 || p1
[0] < 7+p1
[5]) {
3272 printk(KERN_ERR
"usbaudio: unit %u: invalid FEATURE_UNIT descriptor\n", unitid
);
3275 usb_audio_featureunit(state
, p1
);
3278 case PROCESSING_UNIT
:
3279 if (p1
[0] < 13 || p1
[0] < 13+p1
[6] || p1
[0] < 13+p1
[6]+p1
[11+p1
[6]] || p1
[0] < 13+p1
[6]+p1
[11+p1
[6]]+p1
[13+p1
[6]+p1
[11+p1
[6]]]) {
3280 printk(KERN_ERR
"usbaudio: unit %u: invalid PROCESSING_UNIT descriptor\n", unitid
);
3283 usb_audio_processingunit(state
, p1
);
3286 case EXTENSION_UNIT
:
3287 if (p1
[0] < 13 || p1
[0] < 13+p1
[6] || p1
[0] < 13+p1
[6]+p1
[11+p1
[6]]) {
3288 printk(KERN_ERR
"usbaudio: unit %u: invalid EXTENSION_UNIT descriptor\n", unitid
);
3291 for (j
= i
= 0; i
< p1
[6]; i
++) {
3292 usb_audio_recurseunit(state
, p1
[7+i
]);
3294 j
= state
->termtype
;
3295 else if (j
!= state
->termtype
)
3298 state
->nrchannels
= p1
[7+p1
[6]];
3299 state
->chconfig
= p1
[8+p1
[6]] | (p1
[9+p1
[6]] << 8);
3300 state
->termtype
= j
;
3304 printk(KERN_ERR
"usbaudio: unit %u: unexpected type 0x%02x\n", unitid
, p1
[2]);
3309 static void usb_audio_constructmixer(struct usb_audio_state
*s
, unsigned char *buffer
, unsigned int buflen
, unsigned int ctrlif
, unsigned char *oterm
)
3311 struct usb_mixerdev
*ms
;
3312 struct consmixstate state
;
3314 memset(&state
, 0, sizeof(state
));
3317 state
.mixchmask
= ~0;
3318 state
.buffer
= buffer
;
3319 state
.buflen
= buflen
;
3320 state
.ctrlif
= ctrlif
;
3321 set_bit(oterm
[3], &state
.unitbitmap
); /* mark terminal ID as visited */
3322 printk(KERN_INFO
"usbaudio: constructing mixer for Terminal %u type 0x%04x\n",
3323 oterm
[3], oterm
[4] | (oterm
[5] << 8));
3324 usb_audio_recurseunit(&state
, oterm
[7]);
3325 if (!state
.nrmixch
) {
3326 printk(KERN_INFO
"usbaudio: no mixer controls found for Terminal %u\n", oterm
[3]);
3329 if (!(ms
= kmalloc(sizeof(struct usb_mixerdev
)+state
.nrmixch
*sizeof(struct mixerchannel
), GFP_KERNEL
)))
3331 memset(ms
, 0, sizeof(struct usb_mixerdev
));
3332 memcpy(&ms
->ch
, &state
.mixch
, state
.nrmixch
*sizeof(struct mixerchannel
));
3335 ms
->numch
= state
.nrmixch
;
3336 if ((ms
->dev_mixer
= register_sound_mixer(&usb_mixer_fops
, -1)) < 0) {
3337 printk(KERN_ERR
"usbaudio: cannot register mixer\n");
3341 list_add_tail(&ms
->list
, &s
->mixerlist
);
3344 static void *usb_audio_parsecontrol(struct usb_device
*dev
, unsigned char *buffer
, unsigned int buflen
, unsigned int ctrlif
)
3346 struct usb_audio_state
*s
;
3347 struct usb_config_descriptor
*config
= dev
->actconfig
;
3348 struct usb_interface
*iface
;
3349 unsigned char ifin
[USB_MAXINTERFACES
], ifout
[USB_MAXINTERFACES
];
3351 unsigned int i
, j
, k
, numifin
= 0, numifout
= 0;
3353 if (!(s
= kmalloc(sizeof(struct usb_audio_state
), GFP_KERNEL
)))
3355 memset(s
, 0, sizeof(struct usb_audio_state
));
3356 INIT_LIST_HEAD(&s
->audiolist
);
3357 INIT_LIST_HEAD(&s
->mixerlist
);
3361 /* find audiocontrol interface */
3362 if (!(p1
= find_csinterface_descriptor(buffer
, buflen
, NULL
, HEADER
, ctrlif
, -1))) {
3363 printk(KERN_ERR
"usbaudio: device %d audiocontrol interface %u no HEADER found\n",
3364 dev
->devnum
, ctrlif
);
3367 if (p1
[0] < 8 + p1
[7]) {
3368 printk(KERN_ERR
"usbaudio: device %d audiocontrol interface %u HEADER error\n",
3369 dev
->devnum
, ctrlif
);
3373 printk(KERN_INFO
"usbaudio: device %d audiocontrol interface %u has no AudioStreaming and MidiStreaming interfaces\n",
3374 dev
->devnum
, ctrlif
);
3375 for (i
= 0; i
< p1
[7]; i
++) {
3377 if (j
>= config
->bNumInterfaces
) {
3378 printk(KERN_ERR
"usbaudio: device %d audiocontrol interface %u interface %u does not exist\n",
3379 dev
->devnum
, ctrlif
, j
);
3382 iface
= &config
->interface
[j
];
3383 if (iface
->altsetting
[0].bInterfaceClass
!= USB_CLASS_AUDIO
) {
3384 printk(KERN_ERR
"usbaudio: device %d audiocontrol interface %u interface %u is not an AudioClass interface\n",
3385 dev
->devnum
, ctrlif
, j
);
3388 if (iface
->altsetting
[0].bInterfaceSubClass
== 3) {
3389 printk(KERN_INFO
"usbaudio: device %d audiocontrol interface %u interface %u MIDIStreaming not supported\n",
3390 dev
->devnum
, ctrlif
, j
);
3393 if (iface
->altsetting
[0].bInterfaceSubClass
!= 2) {
3394 printk(KERN_ERR
"usbaudio: device %d audiocontrol interface %u interface %u invalid AudioClass subtype\n",
3395 dev
->devnum
, ctrlif
, j
);
3398 if (iface
->num_altsetting
== 0) {
3399 printk(KERN_ERR
"usbaudio: device %d audiocontrol interface %u has no working interface.\n", dev
->devnum
, ctrlif
);
3402 if (iface
->num_altsetting
== 1) {
3403 printk(KERN_ERR
"usbaudio: device %d audiocontrol interface %u has only 1 altsetting.\n", dev
->devnum
, ctrlif
);
3406 if (iface
->altsetting
[0].bNumEndpoints
> 0) {
3407 /* Check all endpoints; should they all have a bandwidth of 0 ? */
3408 for (k
= 0; k
< iface
->altsetting
[0].bNumEndpoints
; k
++) {
3409 if (iface
->altsetting
[0].endpoint
[k
].wMaxPacketSize
> 0) {
3410 printk(KERN_ERR
"usbaudio: device %d audiocontrol interface %u endpoint %d does not have 0 bandwidth at alt[0]\n", dev
->devnum
, ctrlif
, k
);
3414 if (k
< iface
->altsetting
[0].bNumEndpoints
)
3417 if (iface
->altsetting
[1].bNumEndpoints
< 1) {
3418 printk(KERN_ERR
"usbaudio: device %d audiocontrol interface %u interface %u has no endpoint\n",
3419 dev
->devnum
, ctrlif
, j
);
3422 /* note: this requires the data endpoint to be ep0 and the optional sync
3423 ep to be ep1, which seems to be the case */
3424 if (iface
->altsetting
[1].endpoint
[0].bEndpointAddress
& USB_DIR_IN
) {
3425 if (numifin
< USB_MAXINTERFACES
) {
3426 ifin
[numifin
++] = j
;
3427 usb_driver_claim_interface(&usb_audio_driver
, iface
, (void *)-1);
3430 if (numifout
< USB_MAXINTERFACES
) {
3431 ifout
[numifout
++] = j
;
3432 usb_driver_claim_interface(&usb_audio_driver
, iface
, (void *)-1);
3436 printk(KERN_INFO
"usbaudio: device %d audiocontrol interface %u has %u input and %u output AudioStreaming interfaces\n",
3437 dev
->devnum
, ctrlif
, numifin
, numifout
);
3438 for (i
= 0; i
< numifin
&& i
< numifout
; i
++)
3439 usb_audio_parsestreaming(s
, buffer
, buflen
, ifin
[i
], ifout
[i
]);
3440 for (j
= i
; j
< numifin
; j
++)
3441 usb_audio_parsestreaming(s
, buffer
, buflen
, ifin
[i
], -1);
3442 for (j
= i
; j
< numifout
; j
++)
3443 usb_audio_parsestreaming(s
, buffer
, buflen
, -1, ifout
[i
]);
3444 /* now walk through all OUTPUT_TERMINAL descriptors to search for mixers */
3445 p1
= find_csinterface_descriptor(buffer
, buflen
, NULL
, OUTPUT_TERMINAL
, ctrlif
, -1);
3448 usb_audio_constructmixer(s
, buffer
, buflen
, ctrlif
, p1
);
3449 p1
= find_csinterface_descriptor(buffer
, buflen
, p1
, OUTPUT_TERMINAL
, ctrlif
, -1);
3453 if (list_empty(&s
->audiolist
) && list_empty(&s
->mixerlist
)) {
3457 /* everything successful */
3459 list_add_tail(&s
->audiodev
, &audiodevs
);
3461 printk(KERN_DEBUG
"usb_audio_parsecontrol: usb_audio_state at %p\n", s
);
3465 /* we only care for the currently active configuration */
3467 static void *usb_audio_probe(struct usb_device
*dev
, unsigned int ifnum
)
3469 struct usb_config_descriptor
*config
= dev
->actconfig
;
3470 unsigned char *buffer
;
3471 unsigned char buf
[8];
3472 unsigned int i
, buflen
;
3476 printk(KERN_DEBUG
"usbaudio: Probing if %i: IC %x, ISC %x\n", ifnum
,
3477 config
->interface
[ifnum
].altsetting
[0].bInterfaceClass
,
3478 config
->interface
[ifnum
].altsetting
[0].bInterfaceSubClass
);
3480 if (config
->interface
[ifnum
].altsetting
[0].bInterfaceClass
!= USB_CLASS_AUDIO
||
3481 config
->interface
[ifnum
].altsetting
[0].bInterfaceSubClass
!= 1) {
3482 printk(KERN_DEBUG
"usbaudio: vendor id 0x%04x, product id 0x%04x contains no AudioControl interface\n",
3483 dev
->descriptor
.idVendor
, dev
->descriptor
.idProduct
);
3487 * audiocontrol interface found
3488 * find which configuration number is active
3490 for (i
= 0; i
< dev
->descriptor
.bNumConfigurations
; i
++)
3491 if (dev
->config
+i
== config
)
3493 printk(KERN_ERR
"usbaudio: cannot find active configuration number of device %d\n", dev
->devnum
);
3497 if (usb_set_configuration(dev
, config
->bConfigurationValue
) < 0) {
3498 printk(KERN_ERR
"usbaudio: set_configuration failed (ConfigValue 0x%x)\n", config
->bConfigurationValue
);
3501 ret
= usb_get_descriptor(dev
, USB_DT_CONFIG
, i
, buf
, 8);
3503 printk(KERN_ERR
"usbaudio: cannot get first 8 bytes of config descriptor %d of device %d\n", i
, dev
->devnum
);
3506 if (buf
[1] != USB_DT_CONFIG
|| buf
[0] < 9) {
3507 printk(KERN_ERR
"usbaudio: invalid config descriptor %d of device %d\n", i
, dev
->devnum
);
3510 buflen
= buf
[2] | (buf
[3] << 8);
3511 if (!(buffer
= kmalloc(buflen
, GFP_KERNEL
)))
3513 ret
= usb_get_descriptor(dev
, USB_DT_CONFIG
, i
, buffer
, buflen
);
3516 printk(KERN_ERR
"usbaudio: cannot get config descriptor %d of device %d\n", i
, dev
->devnum
);
3519 return usb_audio_parsecontrol(dev
, buffer
, buflen
, ifnum
);
3523 /* a revoke facility would make things simpler */
3525 static void usb_audio_disconnect(struct usb_device
*dev
, void *ptr
)
3527 struct usb_audio_state
*s
= (struct usb_audio_state
*)ptr
;
3528 struct list_head
*list
;
3529 struct usb_audiodev
*as
;
3530 struct usb_mixerdev
*ms
;
3532 /* we get called with -1 for every audiostreaming interface registered */
3533 if (s
== (struct usb_audio_state
*)-1) {
3534 printk(KERN_DEBUG
"usb_audio_disconnect: called with -1\n");
3538 printk(KERN_DEBUG
"usb_audio_disconnect: already called for %p!\n", s
);
3542 list_del(&s
->audiodev
);
3543 INIT_LIST_HEAD(&s
->audiodev
);
3545 /* deregister all audio and mixer devices, so no new processes can open this device */
3546 for(list
= s
->audiolist
.next
; list
!= &s
->audiolist
; list
= list
->next
) {
3547 as
= list_entry(list
, struct usb_audiodev
, list
);
3550 wake_up(&as
->usbin
.dma
.wait
);
3551 wake_up(&as
->usbout
.dma
.wait
);
3552 if (as
->dev_audio
>= 0)
3553 unregister_sound_dsp(as
->dev_audio
);
3556 for(list
= s
->mixerlist
.next
; list
!= &s
->mixerlist
; list
= list
->next
) {
3557 ms
= list_entry(list
, struct usb_mixerdev
, list
);
3558 if (ms
->dev_mixer
>= 0)
3559 unregister_sound_mixer(ms
->dev_mixer
);
3564 usb_release_irq(dev
, aud
->irq_handle
, aud
->irqpipe
);
3565 aud
->irq_handle
= NULL
;
3568 wake_up(&open_wait
);
3571 int usb_audio_init(void)
3573 usb_register(&usb_audio_driver
);
3578 int init_module(void)
3580 return usb_audio_init();
3583 void cleanup_module(void)
3585 usb_deregister(&usb_audio_driver
);