2 * Copyright (c) 2006-2008 Daniel Mack, Karsten Wiese
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 #include <linux/spinlock.h>
20 #include <linux/slab.h>
21 #include <linux/init.h>
22 #include <linux/usb.h>
23 #include <sound/core.h>
24 #include <sound/pcm.h>
30 #define CLOCK_DRIFT_TOLERANCE 5
31 #define FRAMES_PER_URB 8
32 #define BYTES_PER_FRAME 512
33 #define CHANNELS_PER_STREAM 2
34 #define BYTES_PER_SAMPLE 3
35 #define BYTES_PER_SAMPLE_USB 4
36 #define MAX_BUFFER_SIZE (128*1024)
37 #define MAX_ENDPOINT_SIZE 512
39 #define ENDPOINT_CAPTURE 2
40 #define ENDPOINT_PLAYBACK 6
42 #define MAKE_CHECKBYTE(dev,stream,i) \
43 (stream << 1) | (~(i / (dev->n_streams * BYTES_PER_SAMPLE_USB)) & 1)
45 static struct snd_pcm_hardware snd_usb_caiaq_pcm_hardware
= {
46 .info
= (SNDRV_PCM_INFO_MMAP
| SNDRV_PCM_INFO_INTERLEAVED
|
47 SNDRV_PCM_INFO_BLOCK_TRANSFER
),
48 .formats
= SNDRV_PCM_FMTBIT_S24_3BE
,
49 .rates
= (SNDRV_PCM_RATE_44100
| SNDRV_PCM_RATE_48000
|
50 SNDRV_PCM_RATE_96000
),
52 .rate_max
= 0, /* will overwrite later */
53 .channels_min
= CHANNELS_PER_STREAM
,
54 .channels_max
= CHANNELS_PER_STREAM
,
55 .buffer_bytes_max
= MAX_BUFFER_SIZE
,
56 .period_bytes_min
= 128,
57 .period_bytes_max
= MAX_BUFFER_SIZE
,
63 activate_substream(struct snd_usb_caiaqdev
*dev
,
64 struct snd_pcm_substream
*sub
)
66 spin_lock(&dev
->spinlock
);
68 if (sub
->stream
== SNDRV_PCM_STREAM_PLAYBACK
)
69 dev
->sub_playback
[sub
->number
] = sub
;
71 dev
->sub_capture
[sub
->number
] = sub
;
73 spin_unlock(&dev
->spinlock
);
77 deactivate_substream(struct snd_usb_caiaqdev
*dev
,
78 struct snd_pcm_substream
*sub
)
81 spin_lock_irqsave(&dev
->spinlock
, flags
);
83 if (sub
->stream
== SNDRV_PCM_STREAM_PLAYBACK
)
84 dev
->sub_playback
[sub
->number
] = NULL
;
86 dev
->sub_capture
[sub
->number
] = NULL
;
88 spin_unlock_irqrestore(&dev
->spinlock
, flags
);
92 all_substreams_zero(struct snd_pcm_substream
**subs
)
95 for (i
= 0; i
< MAX_STREAMS
; i
++)
101 static int stream_start(struct snd_usb_caiaqdev
*dev
)
105 debug("%s(%p)\n", __func__
, dev
);
110 memset(dev
->sub_playback
, 0, sizeof(dev
->sub_playback
));
111 memset(dev
->sub_capture
, 0, sizeof(dev
->sub_capture
));
112 dev
->input_panic
= 0;
113 dev
->output_panic
= 0;
114 dev
->first_packet
= 4;
118 for (i
= 0; i
< N_URBS
; i
++) {
119 ret
= usb_submit_urb(dev
->data_urbs_in
[i
], GFP_ATOMIC
);
121 log("unable to trigger read #%d! (ret %d)\n", i
, ret
);
130 static void stream_stop(struct snd_usb_caiaqdev
*dev
)
134 debug("%s(%p)\n", __func__
, dev
);
140 for (i
= 0; i
< N_URBS
; i
++) {
141 usb_kill_urb(dev
->data_urbs_in
[i
]);
143 if (test_bit(i
, &dev
->outurb_active_mask
))
144 usb_kill_urb(dev
->data_urbs_out
[i
]);
147 dev
->outurb_active_mask
= 0;
150 static int snd_usb_caiaq_substream_open(struct snd_pcm_substream
*substream
)
152 struct snd_usb_caiaqdev
*dev
= snd_pcm_substream_chip(substream
);
153 debug("%s(%p)\n", __func__
, substream
);
154 substream
->runtime
->hw
= dev
->pcm_info
;
155 snd_pcm_limit_hw_rates(substream
->runtime
);
159 static int snd_usb_caiaq_substream_close(struct snd_pcm_substream
*substream
)
161 struct snd_usb_caiaqdev
*dev
= snd_pcm_substream_chip(substream
);
163 debug("%s(%p)\n", __func__
, substream
);
164 if (all_substreams_zero(dev
->sub_playback
) &&
165 all_substreams_zero(dev
->sub_capture
)) {
166 /* when the last client has stopped streaming,
167 * all sample rates are allowed again */
169 dev
->pcm_info
.rates
= dev
->samplerates
;
175 static int snd_usb_caiaq_pcm_hw_params(struct snd_pcm_substream
*sub
,
176 struct snd_pcm_hw_params
*hw_params
)
178 debug("%s(%p)\n", __func__
, sub
);
179 return snd_pcm_lib_malloc_pages(sub
, params_buffer_bytes(hw_params
));
182 static int snd_usb_caiaq_pcm_hw_free(struct snd_pcm_substream
*sub
)
184 struct snd_usb_caiaqdev
*dev
= snd_pcm_substream_chip(sub
);
185 debug("%s(%p)\n", __func__
, sub
);
186 deactivate_substream(dev
, sub
);
187 return snd_pcm_lib_free_pages(sub
);
190 /* this should probably go upstream */
191 #if SNDRV_PCM_RATE_5512 != 1 << 0 || SNDRV_PCM_RATE_192000 != 1 << 12
192 #error "Change this table"
195 static unsigned int rates
[] = { 5512, 8000, 11025, 16000, 22050, 32000, 44100,
196 48000, 64000, 88200, 96000, 176400, 192000 };
198 static int snd_usb_caiaq_pcm_prepare(struct snd_pcm_substream
*substream
)
200 int bytes_per_sample
, bpp
, ret
, i
;
201 int index
= substream
->number
;
202 struct snd_usb_caiaqdev
*dev
= snd_pcm_substream_chip(substream
);
203 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
205 debug("%s(%p)\n", __func__
, substream
);
207 if (substream
->stream
== SNDRV_PCM_STREAM_PLAYBACK
) {
210 switch (dev
->spec
.data_alignment
) {
213 out_pos
= BYTES_PER_SAMPLE
+ 1;
221 dev
->period_out_count
[index
] = out_pos
;
222 dev
->audio_out_buf_pos
[index
] = out_pos
;
226 switch (dev
->spec
.data_alignment
) {
228 in_pos
= BYTES_PER_SAMPLE
+ 2;
231 in_pos
= BYTES_PER_SAMPLE
;
239 dev
->period_in_count
[index
] = in_pos
;
240 dev
->audio_in_buf_pos
[index
] = in_pos
;
246 /* the first client that opens a stream defines the sample rate
247 * setting for all subsequent calls, until the last client closed. */
248 for (i
=0; i
< ARRAY_SIZE(rates
); i
++)
249 if (runtime
->rate
== rates
[i
])
250 dev
->pcm_info
.rates
= 1 << i
;
252 snd_pcm_limit_hw_rates(runtime
);
254 bytes_per_sample
= BYTES_PER_SAMPLE
;
255 if (dev
->spec
.data_alignment
>= 2)
258 bpp
= ((runtime
->rate
/ 8000) + CLOCK_DRIFT_TOLERANCE
)
259 * bytes_per_sample
* CHANNELS_PER_STREAM
* dev
->n_streams
;
261 if (bpp
> MAX_ENDPOINT_SIZE
)
262 bpp
= MAX_ENDPOINT_SIZE
;
264 ret
= snd_usb_caiaq_set_audio_params(dev
, runtime
->rate
,
265 runtime
->sample_bits
, bpp
);
269 ret
= stream_start(dev
);
273 dev
->output_running
= 0;
274 wait_event_timeout(dev
->prepare_wait_queue
, dev
->output_running
, HZ
);
275 if (!dev
->output_running
) {
283 static int snd_usb_caiaq_pcm_trigger(struct snd_pcm_substream
*sub
, int cmd
)
285 struct snd_usb_caiaqdev
*dev
= snd_pcm_substream_chip(sub
);
287 debug("%s(%p) cmd %d\n", __func__
, sub
, cmd
);
290 case SNDRV_PCM_TRIGGER_START
:
291 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE
:
292 activate_substream(dev
, sub
);
294 case SNDRV_PCM_TRIGGER_STOP
:
295 case SNDRV_PCM_TRIGGER_PAUSE_PUSH
:
296 deactivate_substream(dev
, sub
);
305 static snd_pcm_uframes_t
306 snd_usb_caiaq_pcm_pointer(struct snd_pcm_substream
*sub
)
308 int index
= sub
->number
;
309 struct snd_usb_caiaqdev
*dev
= snd_pcm_substream_chip(sub
);
310 snd_pcm_uframes_t ptr
;
312 spin_lock(&dev
->spinlock
);
314 if (dev
->input_panic
|| dev
->output_panic
)
315 ptr
= SNDRV_PCM_POS_XRUN
;
317 if (sub
->stream
== SNDRV_PCM_STREAM_PLAYBACK
)
318 ptr
= bytes_to_frames(sub
->runtime
,
319 dev
->audio_out_buf_pos
[index
]);
321 ptr
= bytes_to_frames(sub
->runtime
,
322 dev
->audio_in_buf_pos
[index
]);
324 spin_unlock(&dev
->spinlock
);
328 /* operators for both playback and capture */
329 static struct snd_pcm_ops snd_usb_caiaq_ops
= {
330 .open
= snd_usb_caiaq_substream_open
,
331 .close
= snd_usb_caiaq_substream_close
,
332 .ioctl
= snd_pcm_lib_ioctl
,
333 .hw_params
= snd_usb_caiaq_pcm_hw_params
,
334 .hw_free
= snd_usb_caiaq_pcm_hw_free
,
335 .prepare
= snd_usb_caiaq_pcm_prepare
,
336 .trigger
= snd_usb_caiaq_pcm_trigger
,
337 .pointer
= snd_usb_caiaq_pcm_pointer
340 static void check_for_elapsed_periods(struct snd_usb_caiaqdev
*dev
,
341 struct snd_pcm_substream
**subs
)
343 int stream
, pb
, *cnt
;
344 struct snd_pcm_substream
*sub
;
346 for (stream
= 0; stream
< dev
->n_streams
; stream
++) {
351 pb
= snd_pcm_lib_period_bytes(sub
);
352 cnt
= (sub
->stream
== SNDRV_PCM_STREAM_PLAYBACK
) ?
353 &dev
->period_out_count
[stream
] :
354 &dev
->period_in_count
[stream
];
357 snd_pcm_period_elapsed(sub
);
363 static void read_in_urb_mode0(struct snd_usb_caiaqdev
*dev
,
364 const struct urb
*urb
,
365 const struct usb_iso_packet_descriptor
*iso
)
367 unsigned char *usb_buf
= urb
->transfer_buffer
+ iso
->offset
;
368 struct snd_pcm_substream
*sub
;
371 if (all_substreams_zero(dev
->sub_capture
))
374 for (i
= 0; i
< iso
->actual_length
;) {
375 for (stream
= 0; stream
< dev
->n_streams
; stream
++, i
++) {
376 sub
= dev
->sub_capture
[stream
];
378 struct snd_pcm_runtime
*rt
= sub
->runtime
;
379 char *audio_buf
= rt
->dma_area
;
380 int sz
= frames_to_bytes(rt
, rt
->buffer_size
);
381 audio_buf
[dev
->audio_in_buf_pos
[stream
]++]
383 dev
->period_in_count
[stream
]++;
384 if (dev
->audio_in_buf_pos
[stream
] == sz
)
385 dev
->audio_in_buf_pos
[stream
] = 0;
391 static void read_in_urb_mode2(struct snd_usb_caiaqdev
*dev
,
392 const struct urb
*urb
,
393 const struct usb_iso_packet_descriptor
*iso
)
395 unsigned char *usb_buf
= urb
->transfer_buffer
+ iso
->offset
;
396 unsigned char check_byte
;
397 struct snd_pcm_substream
*sub
;
400 for (i
= 0; i
< iso
->actual_length
;) {
401 if (i
% (dev
->n_streams
* BYTES_PER_SAMPLE_USB
) == 0) {
403 stream
< dev
->n_streams
;
405 if (dev
->first_packet
)
408 check_byte
= MAKE_CHECKBYTE(dev
, stream
, i
);
410 if ((usb_buf
[i
] & 0x3f) != check_byte
)
411 dev
->input_panic
= 1;
413 if (usb_buf
[i
] & 0x80)
414 dev
->output_panic
= 1;
417 dev
->first_packet
= 0;
419 for (stream
= 0; stream
< dev
->n_streams
; stream
++, i
++) {
420 sub
= dev
->sub_capture
[stream
];
421 if (dev
->input_panic
)
425 struct snd_pcm_runtime
*rt
= sub
->runtime
;
426 char *audio_buf
= rt
->dma_area
;
427 int sz
= frames_to_bytes(rt
, rt
->buffer_size
);
428 audio_buf
[dev
->audio_in_buf_pos
[stream
]++] =
430 dev
->period_in_count
[stream
]++;
431 if (dev
->audio_in_buf_pos
[stream
] == sz
)
432 dev
->audio_in_buf_pos
[stream
] = 0;
438 static void read_in_urb_mode3(struct snd_usb_caiaqdev
*dev
,
439 const struct urb
*urb
,
440 const struct usb_iso_packet_descriptor
*iso
)
442 unsigned char *usb_buf
= urb
->transfer_buffer
+ iso
->offset
;
446 if (iso
->actual_length
% (BYTES_PER_SAMPLE_USB
* CHANNELS_PER_STREAM
))
449 for (i
= 0; i
< iso
->actual_length
;) {
450 for (stream
= 0; stream
< dev
->n_streams
; stream
++) {
451 struct snd_pcm_substream
*sub
= dev
->sub_capture
[stream
];
452 char *audio_buf
= NULL
;
455 if (sub
&& !dev
->input_panic
) {
456 struct snd_pcm_runtime
*rt
= sub
->runtime
;
457 audio_buf
= rt
->dma_area
;
458 sz
= frames_to_bytes(rt
, rt
->buffer_size
);
461 for (c
= 0; c
< CHANNELS_PER_STREAM
; c
++) {
462 /* 3 audio data bytes, followed by 1 check byte */
464 for (n
= 0; n
< BYTES_PER_SAMPLE
; n
++) {
465 audio_buf
[dev
->audio_in_buf_pos
[stream
]++] = usb_buf
[i
+n
];
467 if (dev
->audio_in_buf_pos
[stream
] == sz
)
468 dev
->audio_in_buf_pos
[stream
] = 0;
471 dev
->period_in_count
[stream
] += BYTES_PER_SAMPLE
;
474 i
+= BYTES_PER_SAMPLE
;
476 if (usb_buf
[i
] != ((stream
<< 1) | c
) &&
477 !dev
->first_packet
) {
478 if (!dev
->input_panic
)
479 printk(" EXPECTED: %02x got %02x, c %d, stream %d, i %d\n",
480 ((stream
<< 1) | c
), usb_buf
[i
], c
, stream
, i
);
481 dev
->input_panic
= 1;
489 if (dev
->first_packet
> 0)
493 static void read_in_urb(struct snd_usb_caiaqdev
*dev
,
494 const struct urb
*urb
,
495 const struct usb_iso_packet_descriptor
*iso
)
500 if (iso
->actual_length
< dev
->bpp
)
503 switch (dev
->spec
.data_alignment
) {
505 read_in_urb_mode0(dev
, urb
, iso
);
508 read_in_urb_mode2(dev
, urb
, iso
);
511 read_in_urb_mode3(dev
, urb
, iso
);
515 if ((dev
->input_panic
|| dev
->output_panic
) && !dev
->warned
) {
516 debug("streaming error detected %s %s\n",
517 dev
->input_panic
? "(input)" : "",
518 dev
->output_panic
? "(output)" : "");
523 static void fill_out_urb_mode_0(struct snd_usb_caiaqdev
*dev
,
525 const struct usb_iso_packet_descriptor
*iso
)
527 unsigned char *usb_buf
= urb
->transfer_buffer
+ iso
->offset
;
528 struct snd_pcm_substream
*sub
;
531 for (i
= 0; i
< iso
->length
;) {
532 for (stream
= 0; stream
< dev
->n_streams
; stream
++, i
++) {
533 sub
= dev
->sub_playback
[stream
];
535 struct snd_pcm_runtime
*rt
= sub
->runtime
;
536 char *audio_buf
= rt
->dma_area
;
537 int sz
= frames_to_bytes(rt
, rt
->buffer_size
);
539 audio_buf
[dev
->audio_out_buf_pos
[stream
]];
540 dev
->period_out_count
[stream
]++;
541 dev
->audio_out_buf_pos
[stream
]++;
542 if (dev
->audio_out_buf_pos
[stream
] == sz
)
543 dev
->audio_out_buf_pos
[stream
] = 0;
548 /* fill in the check bytes */
549 if (dev
->spec
.data_alignment
== 2 &&
550 i
% (dev
->n_streams
* BYTES_PER_SAMPLE_USB
) ==
551 (dev
->n_streams
* CHANNELS_PER_STREAM
))
552 for (stream
= 0; stream
< dev
->n_streams
; stream
++, i
++)
553 usb_buf
[i
] = MAKE_CHECKBYTE(dev
, stream
, i
);
557 static void fill_out_urb_mode_3(struct snd_usb_caiaqdev
*dev
,
559 const struct usb_iso_packet_descriptor
*iso
)
561 unsigned char *usb_buf
= urb
->transfer_buffer
+ iso
->offset
;
564 for (i
= 0; i
< iso
->length
;) {
565 for (stream
= 0; stream
< dev
->n_streams
; stream
++) {
566 struct snd_pcm_substream
*sub
= dev
->sub_playback
[stream
];
567 char *audio_buf
= NULL
;
571 struct snd_pcm_runtime
*rt
= sub
->runtime
;
572 audio_buf
= rt
->dma_area
;
573 sz
= frames_to_bytes(rt
, rt
->buffer_size
);
576 for (c
= 0; c
< CHANNELS_PER_STREAM
; c
++) {
577 for (n
= 0; n
< BYTES_PER_SAMPLE
; n
++) {
579 usb_buf
[i
+n
] = audio_buf
[dev
->audio_out_buf_pos
[stream
]++];
581 if (dev
->audio_out_buf_pos
[stream
] == sz
)
582 dev
->audio_out_buf_pos
[stream
] = 0;
589 dev
->period_out_count
[stream
] += BYTES_PER_SAMPLE
;
591 i
+= BYTES_PER_SAMPLE
;
593 /* fill in the check byte pattern */
594 usb_buf
[i
++] = (stream
<< 1) | c
;
600 static inline void fill_out_urb(struct snd_usb_caiaqdev
*dev
,
602 const struct usb_iso_packet_descriptor
*iso
)
604 switch (dev
->spec
.data_alignment
) {
607 fill_out_urb_mode_0(dev
, urb
, iso
);
610 fill_out_urb_mode_3(dev
, urb
, iso
);
615 static void read_completed(struct urb
*urb
)
617 struct snd_usb_caiaq_cb_info
*info
= urb
->context
;
618 struct snd_usb_caiaqdev
*dev
;
619 struct urb
*out
= NULL
;
620 int i
, frame
, len
, send_it
= 0, outframe
= 0;
623 if (urb
->status
|| !info
)
631 /* find an unused output urb that is unused */
632 for (i
= 0; i
< N_URBS
; i
++)
633 if (test_and_set_bit(i
, &dev
->outurb_active_mask
) == 0) {
634 out
= dev
->data_urbs_out
[i
];
639 log("Unable to find an output urb to use\n");
643 /* read the recently received packet and send back one which has
645 for (frame
= 0; frame
< FRAMES_PER_URB
; frame
++) {
646 if (urb
->iso_frame_desc
[frame
].status
)
649 len
= urb
->iso_frame_desc
[outframe
].actual_length
;
650 out
->iso_frame_desc
[outframe
].length
= len
;
651 out
->iso_frame_desc
[outframe
].actual_length
= 0;
652 out
->iso_frame_desc
[outframe
].offset
= offset
;
656 spin_lock(&dev
->spinlock
);
657 fill_out_urb(dev
, out
, &out
->iso_frame_desc
[outframe
]);
658 read_in_urb(dev
, urb
, &urb
->iso_frame_desc
[frame
]);
659 spin_unlock(&dev
->spinlock
);
660 check_for_elapsed_periods(dev
, dev
->sub_playback
);
661 check_for_elapsed_periods(dev
, dev
->sub_capture
);
669 out
->number_of_packets
= outframe
;
670 out
->transfer_flags
= URB_ISO_ASAP
;
671 usb_submit_urb(out
, GFP_ATOMIC
);
673 struct snd_usb_caiaq_cb_info
*oinfo
= out
->context
;
674 clear_bit(oinfo
->index
, &dev
->outurb_active_mask
);
678 /* re-submit inbound urb */
679 for (frame
= 0; frame
< FRAMES_PER_URB
; frame
++) {
680 urb
->iso_frame_desc
[frame
].offset
= BYTES_PER_FRAME
* frame
;
681 urb
->iso_frame_desc
[frame
].length
= BYTES_PER_FRAME
;
682 urb
->iso_frame_desc
[frame
].actual_length
= 0;
685 urb
->number_of_packets
= FRAMES_PER_URB
;
686 urb
->transfer_flags
= URB_ISO_ASAP
;
687 usb_submit_urb(urb
, GFP_ATOMIC
);
690 static void write_completed(struct urb
*urb
)
692 struct snd_usb_caiaq_cb_info
*info
= urb
->context
;
693 struct snd_usb_caiaqdev
*dev
= info
->dev
;
695 if (!dev
->output_running
) {
696 dev
->output_running
= 1;
697 wake_up(&dev
->prepare_wait_queue
);
700 clear_bit(info
->index
, &dev
->outurb_active_mask
);
703 static struct urb
**alloc_urbs(struct snd_usb_caiaqdev
*dev
, int dir
, int *ret
)
707 struct usb_device
*usb_dev
= dev
->chip
.dev
;
710 pipe
= (dir
== SNDRV_PCM_STREAM_PLAYBACK
) ?
711 usb_sndisocpipe(usb_dev
, ENDPOINT_PLAYBACK
) :
712 usb_rcvisocpipe(usb_dev
, ENDPOINT_CAPTURE
);
714 urbs
= kmalloc(N_URBS
* sizeof(*urbs
), GFP_KERNEL
);
716 log("unable to kmalloc() urbs, OOM!?\n");
721 for (i
= 0; i
< N_URBS
; i
++) {
722 urbs
[i
] = usb_alloc_urb(FRAMES_PER_URB
, GFP_KERNEL
);
724 log("unable to usb_alloc_urb(), OOM!?\n");
729 urbs
[i
]->transfer_buffer
=
730 kmalloc(FRAMES_PER_URB
* BYTES_PER_FRAME
, GFP_KERNEL
);
731 if (!urbs
[i
]->transfer_buffer
) {
732 log("unable to kmalloc() transfer buffer, OOM!?\n");
737 for (frame
= 0; frame
< FRAMES_PER_URB
; frame
++) {
738 struct usb_iso_packet_descriptor
*iso
=
739 &urbs
[i
]->iso_frame_desc
[frame
];
741 iso
->offset
= BYTES_PER_FRAME
* frame
;
742 iso
->length
= BYTES_PER_FRAME
;
745 urbs
[i
]->dev
= usb_dev
;
746 urbs
[i
]->pipe
= pipe
;
747 urbs
[i
]->transfer_buffer_length
= FRAMES_PER_URB
749 urbs
[i
]->context
= &dev
->data_cb_info
[i
];
750 urbs
[i
]->interval
= 1;
751 urbs
[i
]->transfer_flags
= URB_ISO_ASAP
;
752 urbs
[i
]->number_of_packets
= FRAMES_PER_URB
;
753 urbs
[i
]->complete
= (dir
== SNDRV_PCM_STREAM_CAPTURE
) ?
754 read_completed
: write_completed
;
761 static void free_urbs(struct urb
**urbs
)
768 for (i
= 0; i
< N_URBS
; i
++) {
772 usb_kill_urb(urbs
[i
]);
773 kfree(urbs
[i
]->transfer_buffer
);
774 usb_free_urb(urbs
[i
]);
780 int snd_usb_caiaq_audio_init(struct snd_usb_caiaqdev
*dev
)
784 dev
->n_audio_in
= max(dev
->spec
.num_analog_audio_in
,
785 dev
->spec
.num_digital_audio_in
) /
787 dev
->n_audio_out
= max(dev
->spec
.num_analog_audio_out
,
788 dev
->spec
.num_digital_audio_out
) /
790 dev
->n_streams
= max(dev
->n_audio_in
, dev
->n_audio_out
);
792 debug("dev->n_audio_in = %d\n", dev
->n_audio_in
);
793 debug("dev->n_audio_out = %d\n", dev
->n_audio_out
);
794 debug("dev->n_streams = %d\n", dev
->n_streams
);
796 if (dev
->n_streams
> MAX_STREAMS
) {
797 log("unable to initialize device, too many streams.\n");
801 ret
= snd_pcm_new(dev
->chip
.card
, dev
->product_name
, 0,
802 dev
->n_audio_out
, dev
->n_audio_in
, &dev
->pcm
);
805 log("snd_pcm_new() returned %d\n", ret
);
809 dev
->pcm
->private_data
= dev
;
810 strlcpy(dev
->pcm
->name
, dev
->product_name
, sizeof(dev
->pcm
->name
));
812 memset(dev
->sub_playback
, 0, sizeof(dev
->sub_playback
));
813 memset(dev
->sub_capture
, 0, sizeof(dev
->sub_capture
));
815 memcpy(&dev
->pcm_info
, &snd_usb_caiaq_pcm_hardware
,
816 sizeof(snd_usb_caiaq_pcm_hardware
));
818 /* setup samplerates */
819 dev
->samplerates
= dev
->pcm_info
.rates
;
820 switch (dev
->chip
.usb_id
) {
821 case USB_ID(USB_VID_NATIVEINSTRUMENTS
, USB_PID_AK1
):
822 case USB_ID(USB_VID_NATIVEINSTRUMENTS
, USB_PID_RIGKONTROL3
):
823 case USB_ID(USB_VID_NATIVEINSTRUMENTS
, USB_PID_SESSIONIO
):
824 case USB_ID(USB_VID_NATIVEINSTRUMENTS
, USB_PID_GUITARRIGMOBILE
):
825 dev
->samplerates
|= SNDRV_PCM_RATE_192000
;
827 case USB_ID(USB_VID_NATIVEINSTRUMENTS
, USB_PID_AUDIO2DJ
):
828 case USB_ID(USB_VID_NATIVEINSTRUMENTS
, USB_PID_AUDIO4DJ
):
829 case USB_ID(USB_VID_NATIVEINSTRUMENTS
, USB_PID_AUDIO8DJ
):
830 case USB_ID(USB_VID_NATIVEINSTRUMENTS
, USB_PID_TRAKTORAUDIO2
):
831 dev
->samplerates
|= SNDRV_PCM_RATE_88200
;
835 snd_pcm_set_ops(dev
->pcm
, SNDRV_PCM_STREAM_PLAYBACK
,
837 snd_pcm_set_ops(dev
->pcm
, SNDRV_PCM_STREAM_CAPTURE
,
840 snd_pcm_lib_preallocate_pages_for_all(dev
->pcm
,
841 SNDRV_DMA_TYPE_CONTINUOUS
,
842 snd_dma_continuous_data(GFP_KERNEL
),
843 MAX_BUFFER_SIZE
, MAX_BUFFER_SIZE
);
846 kmalloc(sizeof(struct snd_usb_caiaq_cb_info
) * N_URBS
,
849 if (!dev
->data_cb_info
)
852 dev
->outurb_active_mask
= 0;
853 BUILD_BUG_ON(N_URBS
> (sizeof(dev
->outurb_active_mask
) * 8));
855 for (i
= 0; i
< N_URBS
; i
++) {
856 dev
->data_cb_info
[i
].dev
= dev
;
857 dev
->data_cb_info
[i
].index
= i
;
860 dev
->data_urbs_in
= alloc_urbs(dev
, SNDRV_PCM_STREAM_CAPTURE
, &ret
);
862 kfree(dev
->data_cb_info
);
863 free_urbs(dev
->data_urbs_in
);
867 dev
->data_urbs_out
= alloc_urbs(dev
, SNDRV_PCM_STREAM_PLAYBACK
, &ret
);
869 kfree(dev
->data_cb_info
);
870 free_urbs(dev
->data_urbs_in
);
871 free_urbs(dev
->data_urbs_out
);
878 void snd_usb_caiaq_audio_free(struct snd_usb_caiaqdev
*dev
)
880 debug("%s(%p)\n", __func__
, dev
);
882 free_urbs(dev
->data_urbs_in
);
883 free_urbs(dev
->data_urbs_out
);
884 kfree(dev
->data_cb_info
);