Lines Matching refs:subs
50 static int usx2y_usbpcm_urb_capt_retire(struct snd_usx2y_substream *subs)
52 struct urb *urb = subs->completed_urb;
53 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
54 int i, lens = 0, hwptr_done = subs->hwptr_done;
55 struct usx2ydev *usx2y = subs->usx2y;
72 subs->hwptr_done = hwptr_done;
73 subs->transfer_done += lens;
75 if (subs->transfer_done >= runtime->period_size) {
76 subs->transfer_done -= runtime->period_size;
77 snd_pcm_period_elapsed(subs->pcm_substream);
98 static int usx2y_hwdep_urb_play_prepare(struct snd_usx2y_substream *subs,
102 struct usx2ydev *usx2y = subs->usx2y;
104 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
125 if (atomic_read(&subs->state) != STATE_RUNNING)
137 static inline void usx2y_usbpcm_urb_capt_iso_advance(struct snd_usx2y_substream *subs,
143 if (NULL != subs) {
144 struct snd_usx2y_hwdep_pcm_shm *shm = subs->usx2y->hwdep_pcm_shm;
220 struct snd_usx2y_substream *subs = urb->context;
221 struct usx2ydev *usx2y = subs->usx2y;
224 if (unlikely(atomic_read(&subs->state) < STATE_PREPARED)) {
227 subs->endpoint, usb_pipein(urb->pipe) ? "in" : "out",
232 usx2y_error_urb_status(usx2y, subs, urb);
236 subs->completed_urb = urb;
237 capsubs = usx2y->subs[SNDRV_PCM_STREAM_CAPTURE];
238 capsubs2 = usx2y->subs[SNDRV_PCM_STREAM_CAPTURE + 2];
239 playbacksubs = usx2y->subs[SNDRV_PCM_STREAM_PLAYBACK];
263 static void usx2y_usbpcm_urbs_release(struct snd_usx2y_substream *subs)
266 snd_printdd("snd_usx2y_urbs_release() %i\n", subs->endpoint);
268 usx2y_hwdep_urb_release(subs->urb + i);
279 struct snd_usx2y_substream *subs = urb->context;
280 struct usx2ydev *usx2y = subs->usx2y;
285 if (prepare_subs == usx2y->subs[SNDRV_PCM_STREAM_CAPTURE]) {
286 struct snd_usx2y_substream *cap_subs2 = usx2y->subs[SNDRV_PCM_STREAM_CAPTURE + 2];
300 static int usx2y_usbpcm_urbs_allocate(struct snd_usx2y_substream *subs)
304 int is_playback = subs == subs->usx2y->subs[SNDRV_PCM_STREAM_PLAYBACK];
305 struct usb_device *dev = subs->usx2y->dev;
307 pipe = is_playback ? usb_sndisocpipe(dev, subs->endpoint) :
308 usb_rcvisocpipe(dev, subs->endpoint);
309 subs->maxpacksize = usb_maxpacket(dev, pipe, is_playback);
310 if (!subs->maxpacksize)
315 struct urb **purb = subs->urb + i;
322 usx2y_usbpcm_urbs_release(subs);
326 subs->usx2y->hwdep_pcm_shm->playback : (
327 subs->endpoint == 0x8 ?
328 subs->usx2y->hwdep_pcm_shm->capture0x8 :
329 subs->usx2y->hwdep_pcm_shm->capture0xA);
334 (*purb)->context = subs;
347 struct snd_usx2y_substream *subs = runtime->private_data,
348 *cap_subs2 = subs->usx2y->subs[SNDRV_PCM_STREAM_CAPTURE + 2];
349 mutex_lock(&subs->usx2y->pcm_mutex);
353 struct snd_usx2y_substream *cap_subs = subs->usx2y->subs[SNDRV_PCM_STREAM_CAPTURE];
354 atomic_set(&subs->state, STATE_STOPPED);
355 usx2y_usbpcm_urbs_release(subs);
368 struct snd_usx2y_substream *playback_subs = subs->usx2y->subs[SNDRV_PCM_STREAM_PLAYBACK];
370 atomic_set(&subs->state, STATE_STOPPED);
373 usx2y_usbpcm_urbs_release(subs);
378 mutex_unlock(&subs->usx2y->pcm_mutex);
382 static void usx2y_usbpcm_subs_startup(struct snd_usx2y_substream *subs)
384 struct usx2ydev * usx2y = subs->usx2y;
385 usx2y->prepare_subs = subs;
386 subs->urb[0]->start_frame = -1;
391 static int usx2y_usbpcm_urbs_start(struct snd_usx2y_substream *subs)
394 stream = subs->pcm_substream->stream;
395 struct usx2ydev *usx2y = subs->usx2y;
403 struct snd_usx2y_substream *subs = usx2y->subs[stream + p];
404 if (subs != NULL) {
405 if ((err = usx2y_usbpcm_urbs_allocate(subs)) < 0)
407 subs->completed_urb = NULL;
412 struct snd_usx2y_substream *subs = usx2y->subs[p];
413 if (subs != NULL && atomic_read(&subs->state) >= STATE_PREPARED)
418 usx2y_usbpcm_subs_startup(subs);
421 struct snd_usx2y_substream *subs = usx2y->subs[stream + p];
422 if (subs != NULL) {
423 struct urb *urb = subs->urb[u];
427 atomic_set(&subs->state, STATE_STARTING3);
430 urb->iso_frame_desc[pack].offset = subs->maxpacksize * (pack + u * nr_of_packs());
431 urb->iso_frame_desc[pack].length = subs->maxpacksize;
433 urb->transfer_buffer_length = subs->maxpacksize * nr_of_packs();
445 atomic_set(&subs->state, STATE_STARTING1);
453 if (atomic_read(&subs->state) != STATE_PREPARED)
472 struct snd_usx2y_substream *subs = runtime->private_data;
473 struct usx2ydev *usx2y = subs->usx2y;
474 struct snd_usx2y_substream *capsubs = subs->usx2y->subs[SNDRV_PCM_STREAM_CAPTURE];
487 usx2y_subs_prepare(subs);
497 snd_printdd("starting capture pipe for %s\n", subs == capsubs ?
503 if (subs != capsubs) {
505 if (atomic_read(&subs->state) < STATE_PREPARED) {
517 if (0 > (err = usx2y_usbpcm_urbs_start(subs)))
554 struct snd_usx2y_substream *subs = ((struct snd_usx2y_substream **)
558 if (!(subs->usx2y->chip_status & USX2Y_STAT_CHIP_MMAP_PCM_URBS))
562 (subs->usx2y->subs[3] ? snd_usx2y_4c : snd_usx2y_2c);
563 runtime->private_data = subs;
564 subs->pcm_substream = substream;
573 struct snd_usx2y_substream *subs = runtime->private_data;
575 subs->pcm_substream = NULL;
598 struct snd_usx2y_substream *subs = dev->subs[i];
599 if (subs && subs->pcm_substream &&
600 SUBSTREAM_BUSY(subs->pcm_substream))
724 pcm->private_data = usx2y(card)->subs;