Lines Matching refs:usx2y

28 #include "usx2y.h"
65 struct usx2ydev *usx2y = subs->usx2y;
75 len = urb->iso_frame_desc[i].actual_length / usx2y->stride;
84 blen = cnt * usx2y->stride;
85 memcpy(runtime->dma_area + hwptr_done * usx2y->stride, cp, blen);
86 memcpy(runtime->dma_area, cp + blen, len * usx2y->stride - blen);
88 memcpy(runtime->dma_area + hwptr_done * usx2y->stride, cp,
89 len * usx2y->stride);
121 struct usx2ydev *usx2y = subs->usx2y;
128 counts = cap_urb->iso_frame_desc[pack].actual_length / usx2y->stride;
149 subs->hwptr * usx2y->stride, len * usx2y->stride);
150 memcpy(subs->tmpbuf + len * usx2y->stride,
151 runtime->dma_area, (count - len) * usx2y->stride);
156 urb->transfer_buffer = runtime->dma_area + subs->hwptr * usx2y->stride;
164 urb->transfer_buffer_length = count * usx2y->stride;
176 int len = urb->actual_length / subs->usx2y->stride;
196 urb->dev = subs->usx2y->dev; /* we need to set this at each time */
258 static void usx2y_clients_stop(struct usx2ydev *usx2y)
265 subs = usx2y->subs[s];
272 subs = usx2y->subs[s];
284 usx2y->prepare_subs = NULL;
285 wake_up(&usx2y->prepare_wait_queue);
288 static void usx2y_error_urb_status(struct usx2ydev *usx2y,
293 usx2y_clients_stop(usx2y);
299 struct usx2ydev *usx2y = subs->usx2y;
304 usb_get_current_frame_number(usx2y->dev),
310 usx2y_error_urb_status(usx2y, subs, urb);
316 capsubs = usx2y->subs[SNDRV_PCM_STREAM_CAPTURE];
317 playbacksubs = usx2y->subs[SNDRV_PCM_STREAM_PLAYBACK];
324 usx2y->wait_iso_frame += nr_of_packs();
327 usx2y_clients_stop(usx2y);
332 static void usx2y_urbs_set_complete(struct usx2ydev *usx2y,
340 subs = usx2y->subs[s];
351 static void usx2y_subs_startup_finish(struct usx2ydev *usx2y)
353 usx2y_urbs_set_complete(usx2y, i_usx2y_urb_complete);
354 usx2y->prepare_subs = NULL;
360 struct usx2ydev *usx2y = subs->usx2y;
361 struct snd_usx2y_substream *prepare_subs = usx2y->prepare_subs;
365 usx2y_subs_startup_finish(usx2y);
367 wake_up(&usx2y->prepare_wait_queue);
405 subs != subs->usx2y->subs[SNDRV_PCM_STREAM_PLAYBACK]);
418 int is_playback = subs == subs->usx2y->subs[SNDRV_PCM_STREAM_PLAYBACK];
419 struct usb_device *dev = subs->usx2y->dev;
467 struct usx2ydev *usx2y = subs->usx2y;
469 usx2y->prepare_subs = subs;
472 usx2y_urbs_set_complete(usx2y, i_usx2y_subs_startup);
478 struct usx2ydev *usx2y = subs->usx2y;
487 struct snd_usx2y_substream *subs = usx2y->subs[i];
500 urb->dev = usx2y->dev;
513 usx2y->wait_iso_frame = urb->start_frame;
522 wait_event(usx2y->prepare_wait_queue, !usx2y->prepare_subs);
528 usx2y_subs_startup_finish(usx2y);
529 usx2y_clients_stop(usx2y); // something is completely wrong > stop everything
555 atomic_read(&subs->usx2y->subs[SNDRV_PCM_STREAM_CAPTURE]->state) >= STATE_PREPARED) {
661 struct usx2ydev *usx2y = urb->context;
665 if (!--usx2y->us04->len)
666 wake_up(&usx2y->in04_wait_queue);
669 static int usx2y_rate_set(struct usx2ydev *usx2y, int rate)
677 if (usx2y->rate != rate) {
699 usb_fill_bulk_urb(us->urb[i], usx2y->dev, usb_sndbulkpipe(usx2y->dev, 4),
700 usbdata + i, 2, i_usx2y_04int, usx2y);
706 usx2y->us04 = us;
707 wait_event_timeout(usx2y->in04_wait_queue, !us->len, HZ);
708 usx2y->us04 = NULL;
725 usx2y->us04 = NULL;
729 usx2y->rate = rate;
736 static int usx2y_format_set(struct usx2ydev *usx2y, snd_pcm_format_t format)
743 usx2y->stride = 6;
746 usx2y->stride = 4;
748 list_for_each(p, &usx2y->midi_list) {
751 usb_kill_urb(usx2y->in04_urb);
752 err = usb_set_interface(usx2y->dev, 0, alternate);
757 usx2y->in04_urb->dev = usx2y->dev;
758 err = usb_submit_urb(usx2y->in04_urb, GFP_KERNEL);
759 list_for_each(p, &usx2y->midi_list) {
762 usx2y->format = format;
763 usx2y->rate = 0;
775 struct usx2ydev *dev = usx2y(card);
780 mutex_lock(&usx2y(card)->pcm_mutex);
782 /* all pcm substreams off one usx2y have to operate at the same
803 mutex_unlock(&usx2y(card)->pcm_mutex);
816 mutex_lock(&subs->usx2y->pcm_mutex);
820 cap_subs = subs->usx2y->subs[SNDRV_PCM_STREAM_CAPTURE];
830 playback_subs = subs->usx2y->subs[SNDRV_PCM_STREAM_PLAYBACK];
836 mutex_unlock(&subs->usx2y->pcm_mutex);
849 struct usx2ydev *usx2y = subs->usx2y;
850 struct snd_usx2y_substream *capsubs = subs->usx2y->subs[SNDRV_PCM_STREAM_CAPTURE];
855 mutex_lock(&usx2y->pcm_mutex);
860 if (usx2y->format != runtime->format) {
861 err = usx2y_format_set(usx2y, runtime->format);
865 if (usx2y->rate != runtime->rate) {
866 err = usx2y_rate_set(usx2y, runtime->rate);
880 mutex_unlock(&usx2y->pcm_mutex);
910 if (subs->usx2y->chip_status & USX2Y_STAT_CHIP_MMAP_PCM_URBS)
966 usx2y(card)->subs + 2 * usx2y(card)->pcm_devs;
974 usx2y_substream[i]->usx2y = usx2y(card);
981 err = snd_pcm_new(card, NAME_ALLCAPS" Audio", usx2y(card)->pcm_devs,
997 sprintf(pcm->name, NAME_ALLCAPS" Audio #%d", usx2y(card)->pcm_devs);
1010 usx2y(card)->pcm_devs++;
1025 if (le16_to_cpu(usx2y(card)->dev->descriptor.idProduct) == USB_ID_US428) {
1030 if (le16_to_cpu(usx2y(card)->dev->descriptor.idProduct) != USB_ID_US122)
1031 err = usx2y_rate_set(usx2y(card), 44100); // Lets us428 recognize output-volume settings, disturbs us122.