Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/sound/usb/misc/ua101.c
29266 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* Edirol UA-101/UA-1000 driver
4
* Copyright (c) Clemens Ladisch <[email protected]>
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
19
MODULE_DESCRIPTION("Edirol UA-101/1000 driver");
20
MODULE_AUTHOR("Clemens Ladisch <[email protected]>");
21
MODULE_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
42
static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
43
static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
44
static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
45
static unsigned int queue_length = 21;
46
47
module_param_array(index, int, NULL, 0444);
48
MODULE_PARM_DESC(index, "card index");
49
module_param_array(id, charp, NULL, 0444);
50
MODULE_PARM_DESC(id, "ID string");
51
module_param_array(enable, bool, NULL, 0444);
52
MODULE_PARM_DESC(enable, "enable card");
53
module_param(queue_length, uint, 0644);
54
MODULE_PARM_DESC(queue_length, "USB queue length in microframes, "
55
__stringify(MIN_QUEUE_LENGTH)"-"__stringify(MAX_QUEUE_LENGTH));
56
57
enum {
58
INTF_PLAYBACK,
59
INTF_CAPTURE,
60
INTF_MIDI,
61
62
INTF_COUNT
63
};
64
65
/* bits in struct ua101::states */
66
enum {
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
78
struct 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
124
static DEFINE_MUTEX(devices_mutex);
125
static unsigned int devices_used;
126
static struct usb_driver ua101_driver;
127
128
static void abort_alsa_playback(struct ua101 *ua);
129
static void abort_alsa_capture(struct ua101 *ua);
130
131
static 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
156
static 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
164
static 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
170
static 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
196
static 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 */
208
static 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
239
static 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
247
static 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 */
311
static 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
343
static 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
407
stream_stopped:
408
abort_usb_playback(ua);
409
abort_usb_capture(ua);
410
abort_alsa_playback(ua);
411
abort_alsa_capture(ua);
412
}
413
414
static 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
425
static 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
440
static 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
449
static 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
467
static 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
485
static 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
494
static 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
522
static 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
533
static 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
597
static 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
603
static 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
609
static 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
642
static 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
662
static 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
689
static 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
700
static 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
712
static 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
721
static 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
734
static 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
764
static 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
792
static 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
810
static 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
828
static 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
835
static 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
842
static 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
849
static 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
858
static 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
867
static const struct uac_format_type_i_discrete_descriptor *
868
find_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
919
static 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
1000
static 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
1039
static 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
1050
static 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(sizeof(*urb), GFP_KERNEL);
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;
1089
bufsize_error:
1090
dev_err(&ua->dev->dev, "internal buffer size error\n");
1091
return -ENXIO;
1092
}
1093
1094
static 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
1104
static 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
1131
static void ua101_card_free(struct snd_card *card)
1132
{
1133
struct ua101 *ua = card->private_data;
1134
1135
mutex_destroy(&ua->mutex);
1136
}
1137
1138
static 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
1271
probe_error:
1272
free_usb_related_resources(ua, interface);
1273
snd_card_free(card);
1274
return err;
1275
}
1276
1277
static 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
1310
static 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
};
1316
MODULE_DEVICE_TABLE(usb, ua101_ids);
1317
1318
static 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
1329
module_usb_driver(ua101_driver);
1330
1331