Lines Matching refs:subs

49 static int usx2y_usbpcm_urb_capt_retire(struct snd_usx2y_substream *subs)
51 struct urb *urb = subs->completed_urb;
52 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
53 int i, lens = 0, hwptr_done = subs->hwptr_done;
54 struct usx2ydev *usx2y = subs->usx2y;
76 subs->hwptr_done = hwptr_done;
77 subs->transfer_done += lens;
79 if (subs->transfer_done >= runtime->period_size) {
80 subs->transfer_done -= runtime->period_size;
81 snd_pcm_period_elapsed(subs->pcm_substream);
102 static int usx2y_hwdep_urb_play_prepare(struct snd_usx2y_substream *subs,
106 struct usx2ydev *usx2y = subs->usx2y;
108 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
129 if (atomic_read(&subs->state) != STATE_RUNNING)
140 static void usx2y_usbpcm_urb_capt_iso_advance(struct snd_usx2y_substream *subs,
149 if (subs) {
150 shm = subs->usx2y->hwdep_pcm_shm;
232 struct snd_usx2y_substream *subs = urb->context;
233 struct usx2ydev *usx2y = subs->usx2y;
236 if (unlikely(atomic_read(&subs->state) < STATE_PREPARED)) {
239 subs->endpoint, usb_pipein(urb->pipe) ? "in" : "out",
244 usx2y_error_urb_status(usx2y, subs, urb);
248 subs->completed_urb = urb;
249 capsubs = usx2y->subs[SNDRV_PCM_STREAM_CAPTURE];
250 capsubs2 = usx2y->subs[SNDRV_PCM_STREAM_CAPTURE + 2];
251 playbacksubs = usx2y->subs[SNDRV_PCM_STREAM_PLAYBACK];
274 static void usx2y_usbpcm_urbs_release(struct snd_usx2y_substream *subs)
278 snd_printdd("snd_usx2y_urbs_release() %i\n", subs->endpoint);
280 usx2y_hwdep_urb_release(subs->urb + i);
291 struct snd_usx2y_substream *subs = urb->context;
292 struct usx2ydev *usx2y = subs->usx2y;
299 if (prepare_subs == usx2y->subs[SNDRV_PCM_STREAM_CAPTURE]) {
300 cap_subs2 = usx2y->subs[SNDRV_PCM_STREAM_CAPTURE + 2];
314 static int usx2y_usbpcm_urbs_allocate(struct snd_usx2y_substream *subs)
318 int is_playback = subs == subs->usx2y->subs[SNDRV_PCM_STREAM_PLAYBACK];
319 struct usb_device *dev = subs->usx2y->dev;
322 pipe = is_playback ? usb_sndisocpipe(dev, subs->endpoint) :
323 usb_rcvisocpipe(dev, subs->endpoint);
324 subs->maxpacksize = usb_maxpacket(dev, pipe);
325 if (!subs->maxpacksize)
330 purb = subs->urb + i;
337 usx2y_usbpcm_urbs_release(subs);
341 subs->usx2y->hwdep_pcm_shm->playback : (
342 subs->endpoint == 0x8 ?
343 subs->usx2y->hwdep_pcm_shm->capture0x8 :
344 subs->usx2y->hwdep_pcm_shm->capture0xA);
349 (*purb)->context = subs;
362 struct snd_usx2y_substream *subs = runtime->private_data;
367 mutex_lock(&subs->usx2y->pcm_mutex);
370 cap_subs2 = subs->usx2y->subs[SNDRV_PCM_STREAM_CAPTURE + 2];
372 cap_subs = subs->usx2y->subs[SNDRV_PCM_STREAM_CAPTURE];
373 atomic_set(&subs->state, STATE_STOPPED);
374 usx2y_usbpcm_urbs_release(subs);
386 playback_subs = subs->usx2y->subs[SNDRV_PCM_STREAM_PLAYBACK];
388 atomic_set(&subs->state, STATE_STOPPED);
391 usx2y_usbpcm_urbs_release(subs);
396 mutex_unlock(&subs->usx2y->pcm_mutex);
400 static void usx2y_usbpcm_subs_startup(struct snd_usx2y_substream *subs)
402 struct usx2ydev *usx2y = subs->usx2y;
404 usx2y->prepare_subs = subs;
405 subs->urb[0]->start_frame = -1;
410 static int usx2y_usbpcm_urbs_start(struct snd_usx2y_substream *subs)
412 int p, u, err, stream = subs->pcm_substream->stream;
413 struct usx2ydev *usx2y = subs->usx2y;
423 struct snd_usx2y_substream *subs = usx2y->subs[stream + p];
424 if (subs) {
425 err = usx2y_usbpcm_urbs_allocate(subs);
428 subs->completed_urb = NULL;
433 struct snd_usx2y_substream *subs = usx2y->subs[p];
435 if (subs && atomic_read(&subs->state) >= STATE_PREPARED)
440 usx2y_usbpcm_subs_startup(subs);
443 struct snd_usx2y_substream *subs = usx2y->subs[stream + p];
445 if (!subs)
447 urb = subs->urb[u];
450 atomic_set(&subs->state, STATE_STARTING3);
453 urb->iso_frame_desc[pack].offset = subs->maxpacksize * (pack + u * nr_of_packs());
454 urb->iso_frame_desc[pack].length = subs->maxpacksize;
456 urb->transfer_buffer_length = subs->maxpacksize * nr_of_packs();
469 atomic_set(&subs->state, STATE_STARTING1);
476 if (atomic_read(&subs->state) != STATE_PREPARED)
498 struct snd_usx2y_substream *subs = runtime->private_data;
499 struct usx2ydev *usx2y = subs->usx2y;
500 struct snd_usx2y_substream *capsubs = subs->usx2y->subs[SNDRV_PCM_STREAM_CAPTURE];
517 usx2y_subs_prepare(subs);
531 snd_printdd("starting capture pipe for %s\n", subs == capsubs ?
538 if (subs != capsubs) {
540 if (atomic_read(&subs->state) < STATE_PREPARED) {
551 err = usx2y_usbpcm_urbs_start(subs);
587 struct snd_usx2y_substream *subs =
592 if (!(subs->usx2y->chip_status & USX2Y_STAT_CHIP_MMAP_PCM_URBS))
598 runtime->hw = (subs->usx2y->subs[3] ? snd_usx2y_4c : snd_usx2y_2c);
599 runtime->private_data = subs;
600 subs->pcm_substream = substream;
608 struct snd_usx2y_substream *subs = runtime->private_data;
610 subs->pcm_substream = NULL;
627 struct snd_usx2y_substream *subs;
631 subs = dev->subs[i];
632 if (subs && subs->pcm_substream &&
633 SUBSTREAM_BUSY(subs->pcm_substream))
752 pcm->private_data = usx2y(card)->subs;