Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Edirol UA-101/UA-1000 driver
4 * Copyright (c) Clemens Ladisch <clemens@ladisch.de>
5 */
6
7#include <linux/init.h>
8#include <linux/module.h>
9#include <linux/slab.h>
10#include <linux/usb.h>
11#include <linux/usb/audio.h>
12#include <sound/core.h>
13#include <sound/initval.h>
14#include <sound/pcm.h>
15#include <sound/pcm_params.h>
16#include "../usbaudio.h"
17#include "../midi.h"
18
19MODULE_DESCRIPTION("Edirol UA-101/1000 driver");
20MODULE_AUTHOR("Clemens Ladisch <clemens@ladisch.de>");
21MODULE_LICENSE("GPL v2");
22
23/*
24 * Should not be lower than the minimum scheduling delay of the host
25 * controller. Some Intel controllers need more than one frame; as long as
26 * that driver doesn't tell us about this, use 1.5 frames just to be sure.
27 */
28#define MIN_QUEUE_LENGTH 12
29/* Somewhat random. */
30#define MAX_QUEUE_LENGTH 30
31/*
32 * This magic value optimizes memory usage efficiency for the UA-101's packet
33 * sizes at all sample rates, taking into account the stupid cache pool sizes
34 * that usb_alloc_coherent() uses.
35 */
36#define DEFAULT_QUEUE_LENGTH 21
37
38#define MAX_PACKET_SIZE 672 /* hardware specific */
39#define MAX_MEMORY_BUFFERS DIV_ROUND_UP(MAX_QUEUE_LENGTH, \
40 PAGE_SIZE / MAX_PACKET_SIZE)
41
42static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
43static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
44static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
45static unsigned int queue_length = 21;
46
47module_param_array(index, int, NULL, 0444);
48MODULE_PARM_DESC(index, "card index");
49module_param_array(id, charp, NULL, 0444);
50MODULE_PARM_DESC(id, "ID string");
51module_param_array(enable, bool, NULL, 0444);
52MODULE_PARM_DESC(enable, "enable card");
53module_param(queue_length, uint, 0644);
54MODULE_PARM_DESC(queue_length, "USB queue length in microframes, "
55 __stringify(MIN_QUEUE_LENGTH)"-"__stringify(MAX_QUEUE_LENGTH));
56
57enum {
58 INTF_PLAYBACK,
59 INTF_CAPTURE,
60 INTF_MIDI,
61
62 INTF_COUNT
63};
64
65/* bits in struct ua101::states */
66enum {
67 USB_CAPTURE_RUNNING,
68 USB_PLAYBACK_RUNNING,
69 ALSA_CAPTURE_OPEN,
70 ALSA_PLAYBACK_OPEN,
71 ALSA_CAPTURE_RUNNING,
72 ALSA_PLAYBACK_RUNNING,
73 CAPTURE_URB_COMPLETED,
74 PLAYBACK_URB_COMPLETED,
75 DISCONNECTED,
76};
77
78struct ua101 {
79 struct usb_device *dev;
80 struct snd_card *card;
81 struct usb_interface *intf[INTF_COUNT];
82 int card_index;
83 struct snd_pcm *pcm;
84 struct list_head midi_list;
85 u64 format_bit;
86 unsigned int rate;
87 unsigned int packets_per_second;
88 spinlock_t lock;
89 struct mutex mutex;
90 unsigned long states;
91
92 /* FIFO to synchronize playback rate to capture rate */
93 unsigned int rate_feedback_start;
94 unsigned int rate_feedback_count;
95 u8 rate_feedback[MAX_QUEUE_LENGTH];
96
97 struct list_head ready_playback_urbs;
98 struct work_struct playback_work;
99 wait_queue_head_t alsa_capture_wait;
100 wait_queue_head_t rate_feedback_wait;
101 wait_queue_head_t alsa_playback_wait;
102 struct ua101_stream {
103 struct snd_pcm_substream *substream;
104 unsigned int usb_pipe;
105 unsigned int channels;
106 unsigned int frame_bytes;
107 unsigned int max_packet_bytes;
108 unsigned int period_pos;
109 unsigned int buffer_pos;
110 unsigned int queue_length;
111 struct ua101_urb {
112 struct urb urb;
113 struct usb_iso_packet_descriptor iso_frame_desc[1];
114 struct list_head ready_list;
115 } *urbs[MAX_QUEUE_LENGTH];
116 struct {
117 unsigned int size;
118 void *addr;
119 dma_addr_t dma;
120 } buffers[MAX_MEMORY_BUFFERS];
121 } capture, playback;
122};
123
124static DEFINE_MUTEX(devices_mutex);
125static unsigned int devices_used;
126static struct usb_driver ua101_driver;
127
128static void abort_alsa_playback(struct ua101 *ua);
129static void abort_alsa_capture(struct ua101 *ua);
130
131static const char *usb_error_string(int err)
132{
133 switch (err) {
134 case -ENODEV:
135 return "no device";
136 case -ENOENT:
137 return "endpoint not enabled";
138 case -EPIPE:
139 return "endpoint stalled";
140 case -ENOSPC:
141 return "not enough bandwidth";
142 case -ESHUTDOWN:
143 return "device disabled";
144 case -EHOSTUNREACH:
145 return "device suspended";
146 case -EINVAL:
147 case -EAGAIN:
148 case -EFBIG:
149 case -EMSGSIZE:
150 return "internal error";
151 default:
152 return "unknown error";
153 }
154}
155
156static void abort_usb_capture(struct ua101 *ua)
157{
158 if (test_and_clear_bit(USB_CAPTURE_RUNNING, &ua->states)) {
159 wake_up(&ua->alsa_capture_wait);
160 wake_up(&ua->rate_feedback_wait);
161 }
162}
163
164static void abort_usb_playback(struct ua101 *ua)
165{
166 if (test_and_clear_bit(USB_PLAYBACK_RUNNING, &ua->states))
167 wake_up(&ua->alsa_playback_wait);
168}
169
170static void playback_urb_complete(struct urb *usb_urb)
171{
172 struct ua101_urb *urb = (struct ua101_urb *)usb_urb;
173 struct ua101 *ua = urb->urb.context;
174
175 if (unlikely(urb->urb.status == -ENOENT || /* unlinked */
176 urb->urb.status == -ENODEV || /* device removed */
177 urb->urb.status == -ECONNRESET || /* unlinked */
178 urb->urb.status == -ESHUTDOWN)) { /* device disabled */
179 abort_usb_playback(ua);
180 abort_alsa_playback(ua);
181 return;
182 }
183
184 if (test_bit(USB_PLAYBACK_RUNNING, &ua->states)) {
185 /* append URB to FIFO */
186 guard(spinlock_irqsave)(&ua->lock);
187 list_add_tail(&urb->ready_list, &ua->ready_playback_urbs);
188 if (ua->rate_feedback_count > 0)
189 queue_work(system_highpri_wq, &ua->playback_work);
190 ua->playback.substream->runtime->delay -=
191 urb->urb.iso_frame_desc[0].length /
192 ua->playback.frame_bytes;
193 }
194}
195
196static void first_playback_urb_complete(struct urb *urb)
197{
198 struct ua101 *ua = urb->context;
199
200 urb->complete = playback_urb_complete;
201 playback_urb_complete(urb);
202
203 set_bit(PLAYBACK_URB_COMPLETED, &ua->states);
204 wake_up(&ua->alsa_playback_wait);
205}
206
207/* copy data from the ALSA ring buffer into the URB buffer */
208static bool copy_playback_data(struct ua101_stream *stream, struct urb *urb,
209 unsigned int frames)
210{
211 struct snd_pcm_runtime *runtime;
212 unsigned int frame_bytes, frames1;
213 const u8 *source;
214
215 runtime = stream->substream->runtime;
216 frame_bytes = stream->frame_bytes;
217 source = runtime->dma_area + stream->buffer_pos * frame_bytes;
218 if (stream->buffer_pos + frames <= runtime->buffer_size) {
219 memcpy(urb->transfer_buffer, source, frames * frame_bytes);
220 } else {
221 /* wrap around at end of ring buffer */
222 frames1 = runtime->buffer_size - stream->buffer_pos;
223 memcpy(urb->transfer_buffer, source, frames1 * frame_bytes);
224 memcpy(urb->transfer_buffer + frames1 * frame_bytes,
225 runtime->dma_area, (frames - frames1) * frame_bytes);
226 }
227
228 stream->buffer_pos += frames;
229 if (stream->buffer_pos >= runtime->buffer_size)
230 stream->buffer_pos -= runtime->buffer_size;
231 stream->period_pos += frames;
232 if (stream->period_pos >= runtime->period_size) {
233 stream->period_pos -= runtime->period_size;
234 return true;
235 }
236 return false;
237}
238
239static inline void add_with_wraparound(struct ua101 *ua,
240 unsigned int *value, unsigned int add)
241{
242 *value += add;
243 if (*value >= ua->playback.queue_length)
244 *value -= ua->playback.queue_length;
245}
246
247static void playback_work(struct work_struct *work)
248{
249 struct ua101 *ua = container_of(work, struct ua101, playback_work);
250 unsigned int frames;
251 struct ua101_urb *urb;
252 bool do_period_elapsed = false;
253 int err;
254
255 if (unlikely(!test_bit(USB_PLAYBACK_RUNNING, &ua->states)))
256 return;
257
258 /*
259 * Synchronizing the playback rate to the capture rate is done by using
260 * the same sequence of packet sizes for both streams.
261 * Submitting a playback URB therefore requires both a ready URB and
262 * the size of the corresponding capture packet, i.e., both playback
263 * and capture URBs must have been completed. Since the USB core does
264 * not guarantee that playback and capture complete callbacks are
265 * called alternately, we use two FIFOs for packet sizes and read URBs;
266 * submitting playback URBs is possible as long as both FIFOs are
267 * nonempty.
268 */
269 scoped_guard(spinlock_irqsave, &ua->lock) {
270 while (ua->rate_feedback_count > 0 &&
271 !list_empty(&ua->ready_playback_urbs)) {
272 /* take packet size out of FIFO */
273 frames = ua->rate_feedback[ua->rate_feedback_start];
274 add_with_wraparound(ua, &ua->rate_feedback_start, 1);
275 ua->rate_feedback_count--;
276
277 /* take URB out of FIFO */
278 urb = list_first_entry(&ua->ready_playback_urbs,
279 struct ua101_urb, ready_list);
280 list_del(&urb->ready_list);
281
282 /* fill packet with data or silence */
283 urb->urb.iso_frame_desc[0].length =
284 frames * ua->playback.frame_bytes;
285 if (test_bit(ALSA_PLAYBACK_RUNNING, &ua->states))
286 do_period_elapsed |= copy_playback_data(&ua->playback,
287 &urb->urb,
288 frames);
289 else
290 memset(urb->urb.transfer_buffer, 0,
291 urb->urb.iso_frame_desc[0].length);
292
293 /* and off you go ... */
294 err = usb_submit_urb(&urb->urb, GFP_ATOMIC);
295 if (unlikely(err < 0)) {
296 abort_usb_playback(ua);
297 abort_alsa_playback(ua);
298 dev_err(&ua->dev->dev, "USB request error %d: %s\n",
299 err, usb_error_string(err));
300 return;
301 }
302 ua->playback.substream->runtime->delay += frames;
303 }
304 }
305
306 if (do_period_elapsed)
307 snd_pcm_period_elapsed(ua->playback.substream);
308}
309
310/* copy data from the URB buffer into the ALSA ring buffer */
311static bool copy_capture_data(struct ua101_stream *stream, struct urb *urb,
312 unsigned int frames)
313{
314 struct snd_pcm_runtime *runtime;
315 unsigned int frame_bytes, frames1;
316 u8 *dest;
317
318 runtime = stream->substream->runtime;
319 frame_bytes = stream->frame_bytes;
320 dest = runtime->dma_area + stream->buffer_pos * frame_bytes;
321 if (stream->buffer_pos + frames <= runtime->buffer_size) {
322 memcpy(dest, urb->transfer_buffer, frames * frame_bytes);
323 } else {
324 /* wrap around at end of ring buffer */
325 frames1 = runtime->buffer_size - stream->buffer_pos;
326 memcpy(dest, urb->transfer_buffer, frames1 * frame_bytes);
327 memcpy(runtime->dma_area,
328 urb->transfer_buffer + frames1 * frame_bytes,
329 (frames - frames1) * frame_bytes);
330 }
331
332 stream->buffer_pos += frames;
333 if (stream->buffer_pos >= runtime->buffer_size)
334 stream->buffer_pos -= runtime->buffer_size;
335 stream->period_pos += frames;
336 if (stream->period_pos >= runtime->period_size) {
337 stream->period_pos -= runtime->period_size;
338 return true;
339 }
340 return false;
341}
342
343static void capture_urb_complete(struct urb *urb)
344{
345 struct ua101 *ua = urb->context;
346 struct ua101_stream *stream = &ua->capture;
347 unsigned int frames, write_ptr;
348 bool do_period_elapsed;
349 int err;
350
351 if (unlikely(urb->status == -ENOENT || /* unlinked */
352 urb->status == -ENODEV || /* device removed */
353 urb->status == -ECONNRESET || /* unlinked */
354 urb->status == -ESHUTDOWN)) /* device disabled */
355 goto stream_stopped;
356
357 if (urb->status >= 0 && urb->iso_frame_desc[0].status >= 0)
358 frames = urb->iso_frame_desc[0].actual_length /
359 stream->frame_bytes;
360 else
361 frames = 0;
362
363 scoped_guard(spinlock_irqsave, &ua->lock) {
364
365 if (frames > 0 && test_bit(ALSA_CAPTURE_RUNNING, &ua->states))
366 do_period_elapsed = copy_capture_data(stream, urb, frames);
367 else
368 do_period_elapsed = false;
369
370 if (test_bit(USB_CAPTURE_RUNNING, &ua->states)) {
371 err = usb_submit_urb(urb, GFP_ATOMIC);
372 if (unlikely(err < 0)) {
373 dev_err(&ua->dev->dev, "USB request error %d: %s\n",
374 err, usb_error_string(err));
375 goto stream_stopped;
376 }
377
378 /* append packet size to FIFO */
379 write_ptr = ua->rate_feedback_start;
380 add_with_wraparound(ua, &write_ptr, ua->rate_feedback_count);
381 ua->rate_feedback[write_ptr] = frames;
382 if (ua->rate_feedback_count < ua->playback.queue_length) {
383 ua->rate_feedback_count++;
384 if (ua->rate_feedback_count ==
385 ua->playback.queue_length)
386 wake_up(&ua->rate_feedback_wait);
387 } else {
388 /*
389 * Ring buffer overflow; this happens when the playback
390 * stream is not running. Throw away the oldest entry,
391 * so that the playback stream, when it starts, sees
392 * the most recent packet sizes.
393 */
394 add_with_wraparound(ua, &ua->rate_feedback_start, 1);
395 }
396 if (test_bit(USB_PLAYBACK_RUNNING, &ua->states) &&
397 !list_empty(&ua->ready_playback_urbs))
398 queue_work(system_highpri_wq, &ua->playback_work);
399 }
400 }
401
402 if (do_period_elapsed)
403 snd_pcm_period_elapsed(stream->substream);
404
405 return;
406
407stream_stopped:
408 abort_usb_playback(ua);
409 abort_usb_capture(ua);
410 abort_alsa_playback(ua);
411 abort_alsa_capture(ua);
412}
413
414static void first_capture_urb_complete(struct urb *urb)
415{
416 struct ua101 *ua = urb->context;
417
418 urb->complete = capture_urb_complete;
419 capture_urb_complete(urb);
420
421 set_bit(CAPTURE_URB_COMPLETED, &ua->states);
422 wake_up(&ua->alsa_capture_wait);
423}
424
425static int submit_stream_urbs(struct ua101 *ua, struct ua101_stream *stream)
426{
427 unsigned int i;
428
429 for (i = 0; i < stream->queue_length; ++i) {
430 int err = usb_submit_urb(&stream->urbs[i]->urb, GFP_KERNEL);
431 if (err < 0) {
432 dev_err(&ua->dev->dev, "USB request error %d: %s\n",
433 err, usb_error_string(err));
434 return err;
435 }
436 }
437 return 0;
438}
439
440static void kill_stream_urbs(struct ua101_stream *stream)
441{
442 unsigned int i;
443
444 for (i = 0; i < stream->queue_length; ++i)
445 if (stream->urbs[i])
446 usb_kill_urb(&stream->urbs[i]->urb);
447}
448
449static int enable_iso_interface(struct ua101 *ua, unsigned int intf_index)
450{
451 struct usb_host_interface *alts;
452
453 alts = ua->intf[intf_index]->cur_altsetting;
454 if (alts->desc.bAlternateSetting != 1) {
455 int err = usb_set_interface(ua->dev,
456 alts->desc.bInterfaceNumber, 1);
457 if (err < 0) {
458 dev_err(&ua->dev->dev,
459 "cannot initialize interface; error %d: %s\n",
460 err, usb_error_string(err));
461 return err;
462 }
463 }
464 return 0;
465}
466
467static void disable_iso_interface(struct ua101 *ua, unsigned int intf_index)
468{
469 struct usb_host_interface *alts;
470
471 if (!ua->intf[intf_index])
472 return;
473
474 alts = ua->intf[intf_index]->cur_altsetting;
475 if (alts->desc.bAlternateSetting != 0) {
476 int err = usb_set_interface(ua->dev,
477 alts->desc.bInterfaceNumber, 0);
478 if (err < 0 && !test_bit(DISCONNECTED, &ua->states))
479 dev_warn(&ua->dev->dev,
480 "interface reset failed; error %d: %s\n",
481 err, usb_error_string(err));
482 }
483}
484
485static void stop_usb_capture(struct ua101 *ua)
486{
487 clear_bit(USB_CAPTURE_RUNNING, &ua->states);
488
489 kill_stream_urbs(&ua->capture);
490
491 disable_iso_interface(ua, INTF_CAPTURE);
492}
493
494static int start_usb_capture(struct ua101 *ua)
495{
496 int err;
497
498 if (test_bit(DISCONNECTED, &ua->states))
499 return -ENODEV;
500
501 if (test_bit(USB_CAPTURE_RUNNING, &ua->states))
502 return 0;
503
504 kill_stream_urbs(&ua->capture);
505
506 err = enable_iso_interface(ua, INTF_CAPTURE);
507 if (err < 0)
508 return err;
509
510 clear_bit(CAPTURE_URB_COMPLETED, &ua->states);
511 ua->capture.urbs[0]->urb.complete = first_capture_urb_complete;
512 ua->rate_feedback_start = 0;
513 ua->rate_feedback_count = 0;
514
515 set_bit(USB_CAPTURE_RUNNING, &ua->states);
516 err = submit_stream_urbs(ua, &ua->capture);
517 if (err < 0)
518 stop_usb_capture(ua);
519 return err;
520}
521
522static void stop_usb_playback(struct ua101 *ua)
523{
524 clear_bit(USB_PLAYBACK_RUNNING, &ua->states);
525
526 kill_stream_urbs(&ua->playback);
527
528 cancel_work_sync(&ua->playback_work);
529
530 disable_iso_interface(ua, INTF_PLAYBACK);
531}
532
533static int start_usb_playback(struct ua101 *ua)
534{
535 unsigned int i, frames;
536 struct urb *urb;
537 int err = 0;
538
539 if (test_bit(DISCONNECTED, &ua->states))
540 return -ENODEV;
541
542 if (test_bit(USB_PLAYBACK_RUNNING, &ua->states))
543 return 0;
544
545 kill_stream_urbs(&ua->playback);
546 cancel_work_sync(&ua->playback_work);
547
548 err = enable_iso_interface(ua, INTF_PLAYBACK);
549 if (err < 0)
550 return err;
551
552 clear_bit(PLAYBACK_URB_COMPLETED, &ua->states);
553 ua->playback.urbs[0]->urb.complete =
554 first_playback_urb_complete;
555 scoped_guard(spinlock_irq, &ua->lock) {
556 INIT_LIST_HEAD(&ua->ready_playback_urbs);
557 }
558
559 /*
560 * We submit the initial URBs all at once, so we have to wait for the
561 * packet size FIFO to be full.
562 */
563 wait_event(ua->rate_feedback_wait,
564 ua->rate_feedback_count >= ua->playback.queue_length ||
565 !test_bit(USB_CAPTURE_RUNNING, &ua->states) ||
566 test_bit(DISCONNECTED, &ua->states));
567 if (test_bit(DISCONNECTED, &ua->states)) {
568 stop_usb_playback(ua);
569 return -ENODEV;
570 }
571 if (!test_bit(USB_CAPTURE_RUNNING, &ua->states)) {
572 stop_usb_playback(ua);
573 return -EIO;
574 }
575
576 for (i = 0; i < ua->playback.queue_length; ++i) {
577 /* all initial URBs contain silence */
578 scoped_guard(spinlock_irq, &ua->lock) {
579 frames = ua->rate_feedback[ua->rate_feedback_start];
580 add_with_wraparound(ua, &ua->rate_feedback_start, 1);
581 ua->rate_feedback_count--;
582 }
583 urb = &ua->playback.urbs[i]->urb;
584 urb->iso_frame_desc[0].length =
585 frames * ua->playback.frame_bytes;
586 memset(urb->transfer_buffer, 0,
587 urb->iso_frame_desc[0].length);
588 }
589
590 set_bit(USB_PLAYBACK_RUNNING, &ua->states);
591 err = submit_stream_urbs(ua, &ua->playback);
592 if (err < 0)
593 stop_usb_playback(ua);
594 return err;
595}
596
597static void abort_alsa_capture(struct ua101 *ua)
598{
599 if (test_bit(ALSA_CAPTURE_RUNNING, &ua->states))
600 snd_pcm_stop_xrun(ua->capture.substream);
601}
602
603static void abort_alsa_playback(struct ua101 *ua)
604{
605 if (test_bit(ALSA_PLAYBACK_RUNNING, &ua->states))
606 snd_pcm_stop_xrun(ua->playback.substream);
607}
608
609static int set_stream_hw(struct ua101 *ua, struct snd_pcm_substream *substream,
610 unsigned int channels)
611{
612 int err;
613
614 substream->runtime->hw.info =
615 SNDRV_PCM_INFO_MMAP |
616 SNDRV_PCM_INFO_MMAP_VALID |
617 SNDRV_PCM_INFO_BATCH |
618 SNDRV_PCM_INFO_INTERLEAVED |
619 SNDRV_PCM_INFO_BLOCK_TRANSFER |
620 SNDRV_PCM_INFO_FIFO_IN_FRAMES;
621 substream->runtime->hw.formats = ua->format_bit;
622 substream->runtime->hw.rates = snd_pcm_rate_to_rate_bit(ua->rate);
623 substream->runtime->hw.rate_min = ua->rate;
624 substream->runtime->hw.rate_max = ua->rate;
625 substream->runtime->hw.channels_min = channels;
626 substream->runtime->hw.channels_max = channels;
627 substream->runtime->hw.buffer_bytes_max = 45000 * 1024;
628 substream->runtime->hw.period_bytes_min = 1;
629 substream->runtime->hw.period_bytes_max = UINT_MAX;
630 substream->runtime->hw.periods_min = 2;
631 substream->runtime->hw.periods_max = UINT_MAX;
632 err = snd_pcm_hw_constraint_minmax(substream->runtime,
633 SNDRV_PCM_HW_PARAM_PERIOD_TIME,
634 1500000 / ua->packets_per_second,
635 UINT_MAX);
636 if (err < 0)
637 return err;
638 err = snd_pcm_hw_constraint_msbits(substream->runtime, 0, 32, 24);
639 return err;
640}
641
642static int capture_pcm_open(struct snd_pcm_substream *substream)
643{
644 struct ua101 *ua = substream->private_data;
645 int err;
646
647 ua->capture.substream = substream;
648 err = set_stream_hw(ua, substream, ua->capture.channels);
649 if (err < 0)
650 return err;
651 substream->runtime->hw.fifo_size =
652 DIV_ROUND_CLOSEST(ua->rate, ua->packets_per_second);
653 substream->runtime->delay = substream->runtime->hw.fifo_size;
654
655 guard(mutex)(&ua->mutex);
656 err = start_usb_capture(ua);
657 if (err >= 0)
658 set_bit(ALSA_CAPTURE_OPEN, &ua->states);
659 return err;
660}
661
662static int playback_pcm_open(struct snd_pcm_substream *substream)
663{
664 struct ua101 *ua = substream->private_data;
665 int err;
666
667 ua->playback.substream = substream;
668 err = set_stream_hw(ua, substream, ua->playback.channels);
669 if (err < 0)
670 return err;
671 substream->runtime->hw.fifo_size =
672 DIV_ROUND_CLOSEST(ua->rate * ua->playback.queue_length,
673 ua->packets_per_second);
674
675 guard(mutex)(&ua->mutex);
676 err = start_usb_capture(ua);
677 if (err < 0)
678 return err;
679 err = start_usb_playback(ua);
680 if (err < 0) {
681 if (!test_bit(ALSA_CAPTURE_OPEN, &ua->states))
682 stop_usb_capture(ua);
683 return err;
684 }
685 set_bit(ALSA_PLAYBACK_OPEN, &ua->states);
686 return 0;
687}
688
689static int capture_pcm_close(struct snd_pcm_substream *substream)
690{
691 struct ua101 *ua = substream->private_data;
692
693 guard(mutex)(&ua->mutex);
694 clear_bit(ALSA_CAPTURE_OPEN, &ua->states);
695 if (!test_bit(ALSA_PLAYBACK_OPEN, &ua->states))
696 stop_usb_capture(ua);
697 return 0;
698}
699
700static int playback_pcm_close(struct snd_pcm_substream *substream)
701{
702 struct ua101 *ua = substream->private_data;
703
704 guard(mutex)(&ua->mutex);
705 stop_usb_playback(ua);
706 clear_bit(ALSA_PLAYBACK_OPEN, &ua->states);
707 if (!test_bit(ALSA_CAPTURE_OPEN, &ua->states))
708 stop_usb_capture(ua);
709 return 0;
710}
711
712static int capture_pcm_hw_params(struct snd_pcm_substream *substream,
713 struct snd_pcm_hw_params *hw_params)
714{
715 struct ua101 *ua = substream->private_data;
716
717 guard(mutex)(&ua->mutex);
718 return start_usb_capture(ua);
719}
720
721static int playback_pcm_hw_params(struct snd_pcm_substream *substream,
722 struct snd_pcm_hw_params *hw_params)
723{
724 struct ua101 *ua = substream->private_data;
725 int err;
726
727 guard(mutex)(&ua->mutex);
728 err = start_usb_capture(ua);
729 if (err >= 0)
730 err = start_usb_playback(ua);
731 return err;
732}
733
734static int capture_pcm_prepare(struct snd_pcm_substream *substream)
735{
736 struct ua101 *ua = substream->private_data;
737 int err;
738
739 scoped_guard(mutex, &ua->mutex) {
740 err = start_usb_capture(ua);
741 }
742 if (err < 0)
743 return err;
744
745 /*
746 * The EHCI driver schedules the first packet of an iso stream at 10 ms
747 * in the future, i.e., no data is actually captured for that long.
748 * Take the wait here so that the stream is known to be actually
749 * running when the start trigger has been called.
750 */
751 wait_event(ua->alsa_capture_wait,
752 test_bit(CAPTURE_URB_COMPLETED, &ua->states) ||
753 !test_bit(USB_CAPTURE_RUNNING, &ua->states));
754 if (test_bit(DISCONNECTED, &ua->states))
755 return -ENODEV;
756 if (!test_bit(USB_CAPTURE_RUNNING, &ua->states))
757 return -EIO;
758
759 ua->capture.period_pos = 0;
760 ua->capture.buffer_pos = 0;
761 return 0;
762}
763
764static int playback_pcm_prepare(struct snd_pcm_substream *substream)
765{
766 struct ua101 *ua = substream->private_data;
767 int err;
768
769 scoped_guard(mutex, &ua->mutex) {
770 err = start_usb_capture(ua);
771 if (err >= 0)
772 err = start_usb_playback(ua);
773 }
774 if (err < 0)
775 return err;
776
777 /* see the comment in capture_pcm_prepare() */
778 wait_event(ua->alsa_playback_wait,
779 test_bit(PLAYBACK_URB_COMPLETED, &ua->states) ||
780 !test_bit(USB_PLAYBACK_RUNNING, &ua->states));
781 if (test_bit(DISCONNECTED, &ua->states))
782 return -ENODEV;
783 if (!test_bit(USB_PLAYBACK_RUNNING, &ua->states))
784 return -EIO;
785
786 substream->runtime->delay = 0;
787 ua->playback.period_pos = 0;
788 ua->playback.buffer_pos = 0;
789 return 0;
790}
791
792static int capture_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
793{
794 struct ua101 *ua = substream->private_data;
795
796 switch (cmd) {
797 case SNDRV_PCM_TRIGGER_START:
798 if (!test_bit(USB_CAPTURE_RUNNING, &ua->states))
799 return -EIO;
800 set_bit(ALSA_CAPTURE_RUNNING, &ua->states);
801 return 0;
802 case SNDRV_PCM_TRIGGER_STOP:
803 clear_bit(ALSA_CAPTURE_RUNNING, &ua->states);
804 return 0;
805 default:
806 return -EINVAL;
807 }
808}
809
810static int playback_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
811{
812 struct ua101 *ua = substream->private_data;
813
814 switch (cmd) {
815 case SNDRV_PCM_TRIGGER_START:
816 if (!test_bit(USB_PLAYBACK_RUNNING, &ua->states))
817 return -EIO;
818 set_bit(ALSA_PLAYBACK_RUNNING, &ua->states);
819 return 0;
820 case SNDRV_PCM_TRIGGER_STOP:
821 clear_bit(ALSA_PLAYBACK_RUNNING, &ua->states);
822 return 0;
823 default:
824 return -EINVAL;
825 }
826}
827
828static inline snd_pcm_uframes_t ua101_pcm_pointer(struct ua101 *ua,
829 struct ua101_stream *stream)
830{
831 guard(spinlock_irqsave)(&ua->lock);
832 return stream->buffer_pos;
833}
834
835static snd_pcm_uframes_t capture_pcm_pointer(struct snd_pcm_substream *subs)
836{
837 struct ua101 *ua = subs->private_data;
838
839 return ua101_pcm_pointer(ua, &ua->capture);
840}
841
842static snd_pcm_uframes_t playback_pcm_pointer(struct snd_pcm_substream *subs)
843{
844 struct ua101 *ua = subs->private_data;
845
846 return ua101_pcm_pointer(ua, &ua->playback);
847}
848
849static const struct snd_pcm_ops capture_pcm_ops = {
850 .open = capture_pcm_open,
851 .close = capture_pcm_close,
852 .hw_params = capture_pcm_hw_params,
853 .prepare = capture_pcm_prepare,
854 .trigger = capture_pcm_trigger,
855 .pointer = capture_pcm_pointer,
856};
857
858static const struct snd_pcm_ops playback_pcm_ops = {
859 .open = playback_pcm_open,
860 .close = playback_pcm_close,
861 .hw_params = playback_pcm_hw_params,
862 .prepare = playback_pcm_prepare,
863 .trigger = playback_pcm_trigger,
864 .pointer = playback_pcm_pointer,
865};
866
867static const struct uac_format_type_i_discrete_descriptor *
868find_format_descriptor(struct usb_interface *interface)
869{
870 struct usb_host_interface *alt;
871 u8 *extra;
872 int extralen;
873
874 if (interface->num_altsetting != 2) {
875 dev_err(&interface->dev, "invalid num_altsetting\n");
876 return NULL;
877 }
878
879 alt = &interface->altsetting[0];
880 if (alt->desc.bNumEndpoints != 0) {
881 dev_err(&interface->dev, "invalid bNumEndpoints\n");
882 return NULL;
883 }
884
885 alt = &interface->altsetting[1];
886 if (alt->desc.bNumEndpoints != 1) {
887 dev_err(&interface->dev, "invalid bNumEndpoints\n");
888 return NULL;
889 }
890
891 extra = alt->extra;
892 extralen = alt->extralen;
893 while (extralen >= sizeof(struct usb_descriptor_header)) {
894 struct uac_format_type_i_discrete_descriptor *desc;
895
896 desc = (struct uac_format_type_i_discrete_descriptor *)extra;
897 if (desc->bLength > extralen) {
898 dev_err(&interface->dev, "descriptor overflow\n");
899 return NULL;
900 }
901 if (desc->bLength == UAC_FORMAT_TYPE_I_DISCRETE_DESC_SIZE(1) &&
902 desc->bDescriptorType == USB_DT_CS_INTERFACE &&
903 desc->bDescriptorSubtype == UAC_FORMAT_TYPE) {
904 if (desc->bFormatType != UAC_FORMAT_TYPE_I_PCM ||
905 desc->bSamFreqType != 1) {
906 dev_err(&interface->dev,
907 "invalid format type\n");
908 return NULL;
909 }
910 return desc;
911 }
912 extralen -= desc->bLength;
913 extra += desc->bLength;
914 }
915 dev_err(&interface->dev, "sample format descriptor not found\n");
916 return NULL;
917}
918
919static int detect_usb_format(struct ua101 *ua)
920{
921 const struct uac_format_type_i_discrete_descriptor *fmt_capture;
922 const struct uac_format_type_i_discrete_descriptor *fmt_playback;
923 const struct usb_endpoint_descriptor *epd;
924 unsigned int rate2;
925
926 fmt_capture = find_format_descriptor(ua->intf[INTF_CAPTURE]);
927 fmt_playback = find_format_descriptor(ua->intf[INTF_PLAYBACK]);
928 if (!fmt_capture || !fmt_playback)
929 return -ENXIO;
930
931 switch (fmt_capture->bSubframeSize) {
932 case 3:
933 ua->format_bit = SNDRV_PCM_FMTBIT_S24_3LE;
934 break;
935 case 4:
936 ua->format_bit = SNDRV_PCM_FMTBIT_S32_LE;
937 break;
938 default:
939 dev_err(&ua->dev->dev, "sample width is not 24 or 32 bits\n");
940 return -ENXIO;
941 }
942 if (fmt_capture->bSubframeSize != fmt_playback->bSubframeSize) {
943 dev_err(&ua->dev->dev,
944 "playback/capture sample widths do not match\n");
945 return -ENXIO;
946 }
947
948 if (fmt_capture->bBitResolution != 24 ||
949 fmt_playback->bBitResolution != 24) {
950 dev_err(&ua->dev->dev, "sample width is not 24 bits\n");
951 return -ENXIO;
952 }
953
954 ua->rate = combine_triple(fmt_capture->tSamFreq[0]);
955 rate2 = combine_triple(fmt_playback->tSamFreq[0]);
956 if (ua->rate != rate2) {
957 dev_err(&ua->dev->dev,
958 "playback/capture rates do not match: %u/%u\n",
959 rate2, ua->rate);
960 return -ENXIO;
961 }
962
963 switch (ua->dev->speed) {
964 case USB_SPEED_FULL:
965 ua->packets_per_second = 1000;
966 break;
967 case USB_SPEED_HIGH:
968 ua->packets_per_second = 8000;
969 break;
970 default:
971 dev_err(&ua->dev->dev, "unknown device speed\n");
972 return -ENXIO;
973 }
974
975 ua->capture.channels = fmt_capture->bNrChannels;
976 ua->playback.channels = fmt_playback->bNrChannels;
977 ua->capture.frame_bytes =
978 fmt_capture->bSubframeSize * ua->capture.channels;
979 ua->playback.frame_bytes =
980 fmt_playback->bSubframeSize * ua->playback.channels;
981
982 epd = &ua->intf[INTF_CAPTURE]->altsetting[1].endpoint[0].desc;
983 if (!usb_endpoint_is_isoc_in(epd) || usb_endpoint_maxp(epd) == 0) {
984 dev_err(&ua->dev->dev, "invalid capture endpoint\n");
985 return -ENXIO;
986 }
987 ua->capture.usb_pipe = usb_rcvisocpipe(ua->dev, usb_endpoint_num(epd));
988 ua->capture.max_packet_bytes = usb_endpoint_maxp(epd);
989
990 epd = &ua->intf[INTF_PLAYBACK]->altsetting[1].endpoint[0].desc;
991 if (!usb_endpoint_is_isoc_out(epd) || usb_endpoint_maxp(epd) == 0) {
992 dev_err(&ua->dev->dev, "invalid playback endpoint\n");
993 return -ENXIO;
994 }
995 ua->playback.usb_pipe = usb_sndisocpipe(ua->dev, usb_endpoint_num(epd));
996 ua->playback.max_packet_bytes = usb_endpoint_maxp(epd);
997 return 0;
998}
999
1000static int alloc_stream_buffers(struct ua101 *ua, struct ua101_stream *stream)
1001{
1002 unsigned int remaining_packets, packets, packets_per_page, i;
1003 size_t size;
1004
1005 stream->queue_length = queue_length;
1006 stream->queue_length = max(stream->queue_length,
1007 (unsigned int)MIN_QUEUE_LENGTH);
1008 stream->queue_length = min(stream->queue_length,
1009 (unsigned int)MAX_QUEUE_LENGTH);
1010
1011 /*
1012 * The cache pool sizes used by usb_alloc_coherent() (128, 512, 2048) are
1013 * quite bad when used with the packet sizes of this device (e.g. 280,
1014 * 520, 624). Therefore, we allocate and subdivide entire pages, using
1015 * a smaller buffer only for the last chunk.
1016 */
1017 remaining_packets = stream->queue_length;
1018 packets_per_page = PAGE_SIZE / stream->max_packet_bytes;
1019 for (i = 0; i < ARRAY_SIZE(stream->buffers); ++i) {
1020 packets = min(remaining_packets, packets_per_page);
1021 size = packets * stream->max_packet_bytes;
1022 stream->buffers[i].addr =
1023 usb_alloc_coherent(ua->dev, size, GFP_KERNEL,
1024 &stream->buffers[i].dma);
1025 if (!stream->buffers[i].addr)
1026 return -ENOMEM;
1027 stream->buffers[i].size = size;
1028 remaining_packets -= packets;
1029 if (!remaining_packets)
1030 break;
1031 }
1032 if (remaining_packets) {
1033 dev_err(&ua->dev->dev, "too many packets\n");
1034 return -ENXIO;
1035 }
1036 return 0;
1037}
1038
1039static void free_stream_buffers(struct ua101 *ua, struct ua101_stream *stream)
1040{
1041 unsigned int i;
1042
1043 for (i = 0; i < ARRAY_SIZE(stream->buffers); ++i)
1044 usb_free_coherent(ua->dev,
1045 stream->buffers[i].size,
1046 stream->buffers[i].addr,
1047 stream->buffers[i].dma);
1048}
1049
1050static int alloc_stream_urbs(struct ua101 *ua, struct ua101_stream *stream,
1051 void (*urb_complete)(struct urb *))
1052{
1053 unsigned max_packet_size = stream->max_packet_bytes;
1054 struct ua101_urb *urb;
1055 unsigned int b, u = 0;
1056
1057 for (b = 0; b < ARRAY_SIZE(stream->buffers); ++b) {
1058 unsigned int size = stream->buffers[b].size;
1059 u8 *addr = stream->buffers[b].addr;
1060 dma_addr_t dma = stream->buffers[b].dma;
1061
1062 while (size >= max_packet_size) {
1063 if (u >= stream->queue_length)
1064 goto bufsize_error;
1065 urb = kmalloc_obj(*urb);
1066 if (!urb)
1067 return -ENOMEM;
1068 usb_init_urb(&urb->urb);
1069 urb->urb.dev = ua->dev;
1070 urb->urb.pipe = stream->usb_pipe;
1071 urb->urb.transfer_flags = URB_NO_TRANSFER_DMA_MAP;
1072 urb->urb.transfer_buffer = addr;
1073 urb->urb.transfer_dma = dma;
1074 urb->urb.transfer_buffer_length = max_packet_size;
1075 urb->urb.number_of_packets = 1;
1076 urb->urb.interval = 1;
1077 urb->urb.context = ua;
1078 urb->urb.complete = urb_complete;
1079 urb->urb.iso_frame_desc[0].offset = 0;
1080 urb->urb.iso_frame_desc[0].length = max_packet_size;
1081 stream->urbs[u++] = urb;
1082 size -= max_packet_size;
1083 addr += max_packet_size;
1084 dma += max_packet_size;
1085 }
1086 }
1087 if (u == stream->queue_length)
1088 return 0;
1089bufsize_error:
1090 dev_err(&ua->dev->dev, "internal buffer size error\n");
1091 return -ENXIO;
1092}
1093
1094static void free_stream_urbs(struct ua101_stream *stream)
1095{
1096 unsigned int i;
1097
1098 for (i = 0; i < stream->queue_length; ++i) {
1099 kfree(stream->urbs[i]);
1100 stream->urbs[i] = NULL;
1101 }
1102}
1103
1104static void free_usb_related_resources(struct ua101 *ua,
1105 struct usb_interface *interface)
1106{
1107 unsigned int i;
1108 struct usb_interface *intf;
1109
1110 scoped_guard(mutex, &ua->mutex) {
1111 free_stream_urbs(&ua->capture);
1112 free_stream_urbs(&ua->playback);
1113 }
1114 free_stream_buffers(ua, &ua->capture);
1115 free_stream_buffers(ua, &ua->playback);
1116
1117 for (i = 0; i < ARRAY_SIZE(ua->intf); ++i) {
1118 scoped_guard(mutex, &ua->mutex) {
1119 intf = ua->intf[i];
1120 ua->intf[i] = NULL;
1121 }
1122 if (intf) {
1123 usb_set_intfdata(intf, NULL);
1124 if (intf != interface)
1125 usb_driver_release_interface(&ua101_driver,
1126 intf);
1127 }
1128 }
1129}
1130
1131static void ua101_card_free(struct snd_card *card)
1132{
1133 struct ua101 *ua = card->private_data;
1134
1135 mutex_destroy(&ua->mutex);
1136}
1137
1138static int ua101_probe(struct usb_interface *interface,
1139 const struct usb_device_id *usb_id)
1140{
1141 static const struct snd_usb_midi_endpoint_info midi_ep = {
1142 .out_cables = 0x0001,
1143 .in_cables = 0x0001
1144 };
1145 static const struct snd_usb_audio_quirk midi_quirk = {
1146 .type = QUIRK_MIDI_FIXED_ENDPOINT,
1147 .data = &midi_ep
1148 };
1149 static const int intf_numbers[2][3] = {
1150 { /* UA-101 */
1151 [INTF_PLAYBACK] = 0,
1152 [INTF_CAPTURE] = 1,
1153 [INTF_MIDI] = 2,
1154 },
1155 { /* UA-1000 */
1156 [INTF_CAPTURE] = 1,
1157 [INTF_PLAYBACK] = 2,
1158 [INTF_MIDI] = 3,
1159 },
1160 };
1161 struct snd_card *card;
1162 struct ua101 *ua;
1163 unsigned int card_index, i;
1164 int is_ua1000;
1165 const char *name;
1166 char usb_path[32];
1167 int err;
1168
1169 is_ua1000 = usb_id->idProduct == 0x0044;
1170
1171 if (interface->altsetting->desc.bInterfaceNumber !=
1172 intf_numbers[is_ua1000][0])
1173 return -ENODEV;
1174
1175 guard(mutex)(&devices_mutex);
1176
1177 for (card_index = 0; card_index < SNDRV_CARDS; ++card_index)
1178 if (enable[card_index] && !(devices_used & (1 << card_index)))
1179 break;
1180 if (card_index >= SNDRV_CARDS)
1181 return -ENOENT;
1182 err = snd_card_new(&interface->dev,
1183 index[card_index], id[card_index], THIS_MODULE,
1184 sizeof(*ua), &card);
1185 if (err < 0)
1186 return err;
1187 card->private_free = ua101_card_free;
1188 ua = card->private_data;
1189 ua->dev = interface_to_usbdev(interface);
1190 ua->card = card;
1191 ua->card_index = card_index;
1192 INIT_LIST_HEAD(&ua->midi_list);
1193 spin_lock_init(&ua->lock);
1194 mutex_init(&ua->mutex);
1195 INIT_LIST_HEAD(&ua->ready_playback_urbs);
1196 INIT_WORK(&ua->playback_work, playback_work);
1197 init_waitqueue_head(&ua->alsa_capture_wait);
1198 init_waitqueue_head(&ua->rate_feedback_wait);
1199 init_waitqueue_head(&ua->alsa_playback_wait);
1200
1201 ua->intf[0] = interface;
1202 for (i = 1; i < ARRAY_SIZE(ua->intf); ++i) {
1203 ua->intf[i] = usb_ifnum_to_if(ua->dev,
1204 intf_numbers[is_ua1000][i]);
1205 if (!ua->intf[i]) {
1206 dev_err(&ua->dev->dev, "interface %u not found\n",
1207 intf_numbers[is_ua1000][i]);
1208 err = -ENXIO;
1209 goto probe_error;
1210 }
1211 err = usb_driver_claim_interface(&ua101_driver,
1212 ua->intf[i], ua);
1213 if (err < 0) {
1214 ua->intf[i] = NULL;
1215 err = -EBUSY;
1216 goto probe_error;
1217 }
1218 }
1219
1220 err = detect_usb_format(ua);
1221 if (err < 0)
1222 goto probe_error;
1223
1224 name = usb_id->idProduct == 0x0044 ? "UA-1000" : "UA-101";
1225 strscpy(card->driver, "UA-101");
1226 strscpy(card->shortname, name);
1227 usb_make_path(ua->dev, usb_path, sizeof(usb_path));
1228 snprintf(ua->card->longname, sizeof(ua->card->longname),
1229 "EDIROL %s (serial %s), %u Hz at %s, %s speed", name,
1230 ua->dev->serial ? ua->dev->serial : "?", ua->rate, usb_path,
1231 ua->dev->speed == USB_SPEED_HIGH ? "high" : "full");
1232
1233 err = alloc_stream_buffers(ua, &ua->capture);
1234 if (err < 0)
1235 goto probe_error;
1236 err = alloc_stream_buffers(ua, &ua->playback);
1237 if (err < 0)
1238 goto probe_error;
1239
1240 err = alloc_stream_urbs(ua, &ua->capture, capture_urb_complete);
1241 if (err < 0)
1242 goto probe_error;
1243 err = alloc_stream_urbs(ua, &ua->playback, playback_urb_complete);
1244 if (err < 0)
1245 goto probe_error;
1246
1247 err = snd_pcm_new(card, name, 0, 1, 1, &ua->pcm);
1248 if (err < 0)
1249 goto probe_error;
1250 ua->pcm->private_data = ua;
1251 strscpy(ua->pcm->name, name);
1252 snd_pcm_set_ops(ua->pcm, SNDRV_PCM_STREAM_PLAYBACK, &playback_pcm_ops);
1253 snd_pcm_set_ops(ua->pcm, SNDRV_PCM_STREAM_CAPTURE, &capture_pcm_ops);
1254 snd_pcm_set_managed_buffer_all(ua->pcm, SNDRV_DMA_TYPE_VMALLOC,
1255 NULL, 0, 0);
1256
1257 err = snd_usbmidi_create(card, ua->intf[INTF_MIDI],
1258 &ua->midi_list, &midi_quirk);
1259 if (err < 0)
1260 goto probe_error;
1261
1262 err = snd_card_register(card);
1263 if (err < 0)
1264 goto probe_error;
1265
1266 usb_set_intfdata(interface, ua);
1267 devices_used |= 1 << card_index;
1268
1269 return 0;
1270
1271probe_error:
1272 free_usb_related_resources(ua, interface);
1273 snd_card_free(card);
1274 return err;
1275}
1276
1277static void ua101_disconnect(struct usb_interface *interface)
1278{
1279 struct ua101 *ua = usb_get_intfdata(interface);
1280 struct list_head *midi;
1281
1282 if (!ua)
1283 return;
1284
1285 guard(mutex)(&devices_mutex);
1286
1287 set_bit(DISCONNECTED, &ua->states);
1288 wake_up(&ua->rate_feedback_wait);
1289
1290 /* make sure that userspace cannot create new requests */
1291 snd_card_disconnect(ua->card);
1292
1293 /* make sure that there are no pending USB requests */
1294 list_for_each(midi, &ua->midi_list)
1295 snd_usbmidi_disconnect(midi);
1296 abort_alsa_playback(ua);
1297 abort_alsa_capture(ua);
1298 scoped_guard(mutex, &ua->mutex) {
1299 stop_usb_playback(ua);
1300 stop_usb_capture(ua);
1301 }
1302
1303 free_usb_related_resources(ua, interface);
1304
1305 devices_used &= ~(1 << ua->card_index);
1306
1307 snd_card_free_when_closed(ua->card);
1308}
1309
1310static const struct usb_device_id ua101_ids[] = {
1311 { USB_DEVICE(0x0582, 0x0044) }, /* UA-1000 high speed */
1312 { USB_DEVICE(0x0582, 0x007d) }, /* UA-101 high speed */
1313 { USB_DEVICE(0x0582, 0x008d) }, /* UA-101 full speed */
1314 { }
1315};
1316MODULE_DEVICE_TABLE(usb, ua101_ids);
1317
1318static struct usb_driver ua101_driver = {
1319 .name = "snd-ua101",
1320 .id_table = ua101_ids,
1321 .probe = ua101_probe,
1322 .disconnect = ua101_disconnect,
1323#if 0
1324 .suspend = ua101_suspend,
1325 .resume = ua101_resume,
1326#endif
1327};
1328
1329module_usb_driver(ua101_driver);