Lines Matching refs:subs

62 static int usX2Y_usbpcm_urb_capt_retire(struct snd_usX2Y_substream *subs)  in usX2Y_usbpcm_urb_capt_retire()  argument
64 struct urb *urb = subs->completed_urb; in usX2Y_usbpcm_urb_capt_retire()
65 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; in usX2Y_usbpcm_urb_capt_retire()
66 int i, lens = 0, hwptr_done = subs->hwptr_done; in usX2Y_usbpcm_urb_capt_retire()
67 struct usX2Ydev *usX2Y = subs->usX2Y; in usX2Y_usbpcm_urb_capt_retire()
84 subs->hwptr_done = hwptr_done; in usX2Y_usbpcm_urb_capt_retire()
85 subs->transfer_done += lens; in usX2Y_usbpcm_urb_capt_retire()
87 if (subs->transfer_done >= runtime->period_size) { in usX2Y_usbpcm_urb_capt_retire()
88 subs->transfer_done -= runtime->period_size; in usX2Y_usbpcm_urb_capt_retire()
89 snd_pcm_period_elapsed(subs->pcm_substream); in usX2Y_usbpcm_urb_capt_retire()
110 static int usX2Y_hwdep_urb_play_prepare(struct snd_usX2Y_substream *subs, in usX2Y_hwdep_urb_play_prepare() argument
114 struct usX2Ydev *usX2Y = subs->usX2Y; in usX2Y_hwdep_urb_play_prepare()
116 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; in usX2Y_hwdep_urb_play_prepare()
137 if (atomic_read(&subs->state) != state_RUNNING) in usX2Y_hwdep_urb_play_prepare()
149 static inline void usX2Y_usbpcm_urb_capt_iso_advance(struct snd_usX2Y_substream *subs, in usX2Y_usbpcm_urb_capt_iso_advance() argument
155 if (NULL != subs) { in usX2Y_usbpcm_urb_capt_iso_advance()
156 struct snd_usX2Y_hwdep_pcm_shm *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()
275 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()
297 if (prepare_subs == usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE]) { in i_usX2Y_usbpcm_subs_startup()
298 struct snd_usX2Y_substream *cap_subs2 = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE + 2]; in i_usX2Y_usbpcm_subs_startup()
312 static int usX2Y_usbpcm_urbs_allocate(struct snd_usX2Y_substream *subs) in usX2Y_usbpcm_urbs_allocate() argument
316 int is_playback = subs == subs->usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK]; in usX2Y_usbpcm_urbs_allocate()
317 struct usb_device *dev = subs->usX2Y->dev; in usX2Y_usbpcm_urbs_allocate()
319 pipe = is_playback ? usb_sndisocpipe(dev, subs->endpoint) : in usX2Y_usbpcm_urbs_allocate()
320 usb_rcvisocpipe(dev, subs->endpoint); in usX2Y_usbpcm_urbs_allocate()
321 subs->maxpacksize = usb_maxpacket(dev, pipe, is_playback); in usX2Y_usbpcm_urbs_allocate()
322 if (!subs->maxpacksize) in usX2Y_usbpcm_urbs_allocate()
327 struct urb **purb = subs->urb + i; in usX2Y_usbpcm_urbs_allocate()
334 usX2Y_usbpcm_urbs_release(subs); in usX2Y_usbpcm_urbs_allocate()
338 subs->usX2Y->hwdep_pcm_shm->playback : ( in usX2Y_usbpcm_urbs_allocate()
339 subs->endpoint == 0x8 ? in usX2Y_usbpcm_urbs_allocate()
340 subs->usX2Y->hwdep_pcm_shm->capture0x8 : in usX2Y_usbpcm_urbs_allocate()
341 subs->usX2Y->hwdep_pcm_shm->capture0xA); in usX2Y_usbpcm_urbs_allocate()
346 (*purb)->context = subs; in usX2Y_usbpcm_urbs_allocate()
359 struct snd_usX2Y_substream *subs = runtime->private_data, in snd_usX2Y_usbpcm_hw_free() local
360 *cap_subs2 = subs->usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE + 2]; in snd_usX2Y_usbpcm_hw_free()
361 mutex_lock(&subs->usX2Y->pcm_mutex); in snd_usX2Y_usbpcm_hw_free()
365 struct snd_usX2Y_substream *cap_subs = subs->usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE]; in snd_usX2Y_usbpcm_hw_free()
366 atomic_set(&subs->state, state_STOPPED); in snd_usX2Y_usbpcm_hw_free()
367 usX2Y_usbpcm_urbs_release(subs); in snd_usX2Y_usbpcm_hw_free()
380 struct snd_usX2Y_substream *playback_subs = subs->usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK]; in snd_usX2Y_usbpcm_hw_free()
382 atomic_set(&subs->state, state_STOPPED); in snd_usX2Y_usbpcm_hw_free()
385 usX2Y_usbpcm_urbs_release(subs); in snd_usX2Y_usbpcm_hw_free()
390 mutex_unlock(&subs->usX2Y->pcm_mutex); in snd_usX2Y_usbpcm_hw_free()
394 static void usX2Y_usbpcm_subs_startup(struct snd_usX2Y_substream *subs) in usX2Y_usbpcm_subs_startup() argument
396 struct usX2Ydev * usX2Y = subs->usX2Y; in usX2Y_usbpcm_subs_startup()
397 usX2Y->prepare_subs = subs; in usX2Y_usbpcm_subs_startup()
398 subs->urb[0]->start_frame = -1; in usX2Y_usbpcm_subs_startup()
403 static int usX2Y_usbpcm_urbs_start(struct snd_usX2Y_substream *subs) in usX2Y_usbpcm_urbs_start() argument
406 stream = subs->pcm_substream->stream; in usX2Y_usbpcm_urbs_start()
407 struct usX2Ydev *usX2Y = subs->usX2Y; in usX2Y_usbpcm_urbs_start()
415 struct snd_usX2Y_substream *subs = usX2Y->subs[stream + p]; in usX2Y_usbpcm_urbs_start() local
416 if (subs != NULL) { in usX2Y_usbpcm_urbs_start()
417 if ((err = usX2Y_usbpcm_urbs_allocate(subs)) < 0) in usX2Y_usbpcm_urbs_start()
419 subs->completed_urb = NULL; in usX2Y_usbpcm_urbs_start()
424 struct snd_usX2Y_substream *subs = usX2Y->subs[p]; in usX2Y_usbpcm_urbs_start() local
425 if (subs != NULL && atomic_read(&subs->state) >= state_PREPARED) in usX2Y_usbpcm_urbs_start()
430 usX2Y_usbpcm_subs_startup(subs); in usX2Y_usbpcm_urbs_start()
433 struct snd_usX2Y_substream *subs = usX2Y->subs[stream + p]; in usX2Y_usbpcm_urbs_start() local
434 if (subs != NULL) { in usX2Y_usbpcm_urbs_start()
435 struct urb *urb = subs->urb[u]; in usX2Y_usbpcm_urbs_start()
439 atomic_set(&subs->state, state_STARTING3); in usX2Y_usbpcm_urbs_start()
442 urb->iso_frame_desc[pack].offset = subs->maxpacksize * (pack + u * nr_of_packs()); in usX2Y_usbpcm_urbs_start()
443 urb->iso_frame_desc[pack].length = subs->maxpacksize; in usX2Y_usbpcm_urbs_start()
445 urb->transfer_buffer_length = subs->maxpacksize * nr_of_packs(); in usX2Y_usbpcm_urbs_start()
457 atomic_set(&subs->state, state_STARTING1); in usX2Y_usbpcm_urbs_start()
465 if (atomic_read(&subs->state) != state_PREPARED) in usX2Y_usbpcm_urbs_start()
484 struct snd_usX2Y_substream *subs = runtime->private_data; in snd_usX2Y_usbpcm_prepare() local
485 struct usX2Ydev *usX2Y = subs->usX2Y; in snd_usX2Y_usbpcm_prepare()
486 struct snd_usX2Y_substream *capsubs = subs->usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE]; in snd_usX2Y_usbpcm_prepare()
497 usX2Y_subs_prepare(subs); in snd_usX2Y_usbpcm_prepare()
507 snd_printdd("starting capture pipe for %s\n", subs == capsubs ? in snd_usX2Y_usbpcm_prepare()
513 if (subs != capsubs) { in snd_usX2Y_usbpcm_prepare()
515 if (atomic_read(&subs->state) < state_PREPARED) { in snd_usX2Y_usbpcm_prepare()
527 if (0 > (err = usX2Y_usbpcm_urbs_start(subs))) in snd_usX2Y_usbpcm_prepare()
564 struct snd_usX2Y_substream *subs = ((struct snd_usX2Y_substream **) in snd_usX2Y_usbpcm_open() local
568 if (!(subs->usX2Y->chip_status & USX2Y_STAT_CHIP_MMAP_PCM_URBS)) in snd_usX2Y_usbpcm_open()
572 (subs->usX2Y->subs[3] ? snd_usX2Y_4c : snd_usX2Y_2c); in snd_usX2Y_usbpcm_open()
573 runtime->private_data = subs; in snd_usX2Y_usbpcm_open()
574 subs->pcm_substream = substream; in snd_usX2Y_usbpcm_open()
583 struct snd_usX2Y_substream *subs = runtime->private_data; in snd_usX2Y_usbpcm_close() local
585 subs->pcm_substream = NULL; in snd_usX2Y_usbpcm_close()
609 struct snd_usX2Y_substream *subs = dev->subs[i]; in usX2Y_pcms_busy_check() local
610 if (subs && subs->pcm_substream && in usX2Y_pcms_busy_check()
611 SUBSTREAM_BUSY(subs->pcm_substream)) in usX2Y_pcms_busy_check()
736 pcm->private_data = usX2Y(card)->subs; in usX2Y_hwdep_pcm_new()