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