Lines Matching refs:subs

50 static int usX2Y_usbpcm_urb_capt_retire(struct snd_usX2Y_substream *subs)  in usX2Y_usbpcm_urb_capt_retire()  argument
52 struct urb *urb = subs->completed_urb; in usX2Y_usbpcm_urb_capt_retire()
53 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; in usX2Y_usbpcm_urb_capt_retire()
54 int i, lens = 0, hwptr_done = subs->hwptr_done; in usX2Y_usbpcm_urb_capt_retire()
55 struct usX2Ydev *usX2Y = subs->usX2Y; in usX2Y_usbpcm_urb_capt_retire()
72 subs->hwptr_done = hwptr_done; in usX2Y_usbpcm_urb_capt_retire()
73 subs->transfer_done += lens; in usX2Y_usbpcm_urb_capt_retire()
75 if (subs->transfer_done >= runtime->period_size) { in usX2Y_usbpcm_urb_capt_retire()
76 subs->transfer_done -= runtime->period_size; in usX2Y_usbpcm_urb_capt_retire()
77 snd_pcm_period_elapsed(subs->pcm_substream); in usX2Y_usbpcm_urb_capt_retire()
98 static int usX2Y_hwdep_urb_play_prepare(struct snd_usX2Y_substream *subs, in usX2Y_hwdep_urb_play_prepare() argument
102 struct usX2Ydev *usX2Y = subs->usX2Y; in usX2Y_hwdep_urb_play_prepare()
104 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; in usX2Y_hwdep_urb_play_prepare()
125 if (atomic_read(&subs->state) != state_RUNNING) in usX2Y_hwdep_urb_play_prepare()
137 static inline void usX2Y_usbpcm_urb_capt_iso_advance(struct snd_usX2Y_substream *subs, in usX2Y_usbpcm_urb_capt_iso_advance() argument
143 if (NULL != subs) { in usX2Y_usbpcm_urb_capt_iso_advance()
144 struct snd_usX2Y_hwdep_pcm_shm *shm = subs->usX2Y->hwdep_pcm_shm; in usX2Y_usbpcm_urb_capt_iso_advance()
220 struct snd_usX2Y_substream *subs = urb->context; in i_usX2Y_usbpcm_urb_complete() local
221 struct usX2Ydev *usX2Y = subs->usX2Y; in i_usX2Y_usbpcm_urb_complete()
224 if (unlikely(atomic_read(&subs->state) < state_PREPARED)) { in i_usX2Y_usbpcm_urb_complete()
227 subs->endpoint, usb_pipein(urb->pipe) ? "in" : "out", in i_usX2Y_usbpcm_urb_complete()
232 usX2Y_error_urb_status(usX2Y, subs, urb); in i_usX2Y_usbpcm_urb_complete()
236 subs->completed_urb = urb; in i_usX2Y_usbpcm_urb_complete()
237 capsubs = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE]; in i_usX2Y_usbpcm_urb_complete()
238 capsubs2 = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE + 2]; in i_usX2Y_usbpcm_urb_complete()
239 playbacksubs = usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK]; in i_usX2Y_usbpcm_urb_complete()
263 static void usX2Y_usbpcm_urbs_release(struct snd_usX2Y_substream *subs) in usX2Y_usbpcm_urbs_release() argument
266 snd_printdd("snd_usX2Y_urbs_release() %i\n", subs->endpoint); in usX2Y_usbpcm_urbs_release()
268 usX2Y_hwdep_urb_release(subs->urb + i); in usX2Y_usbpcm_urbs_release()
279 struct snd_usX2Y_substream *subs = urb->context; in i_usX2Y_usbpcm_subs_startup() local
280 struct usX2Ydev *usX2Y = subs->usX2Y; in i_usX2Y_usbpcm_subs_startup()
285 if (prepare_subs == usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE]) { in i_usX2Y_usbpcm_subs_startup()
286 struct snd_usX2Y_substream *cap_subs2 = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE + 2]; in i_usX2Y_usbpcm_subs_startup()
300 static int usX2Y_usbpcm_urbs_allocate(struct snd_usX2Y_substream *subs) in usX2Y_usbpcm_urbs_allocate() argument
304 int is_playback = subs == subs->usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK]; in usX2Y_usbpcm_urbs_allocate()
305 struct usb_device *dev = subs->usX2Y->dev; in usX2Y_usbpcm_urbs_allocate()
307 pipe = is_playback ? usb_sndisocpipe(dev, subs->endpoint) : in usX2Y_usbpcm_urbs_allocate()
308 usb_rcvisocpipe(dev, subs->endpoint); in usX2Y_usbpcm_urbs_allocate()
309 subs->maxpacksize = usb_maxpacket(dev, pipe, is_playback); in usX2Y_usbpcm_urbs_allocate()
310 if (!subs->maxpacksize) in usX2Y_usbpcm_urbs_allocate()
315 struct urb **purb = subs->urb + i; in usX2Y_usbpcm_urbs_allocate()
322 usX2Y_usbpcm_urbs_release(subs); in usX2Y_usbpcm_urbs_allocate()
326 subs->usX2Y->hwdep_pcm_shm->playback : ( in usX2Y_usbpcm_urbs_allocate()
327 subs->endpoint == 0x8 ? in usX2Y_usbpcm_urbs_allocate()
328 subs->usX2Y->hwdep_pcm_shm->capture0x8 : in usX2Y_usbpcm_urbs_allocate()
329 subs->usX2Y->hwdep_pcm_shm->capture0xA); in usX2Y_usbpcm_urbs_allocate()
334 (*purb)->context = subs; in usX2Y_usbpcm_urbs_allocate()
347 struct snd_usX2Y_substream *subs = runtime->private_data, in snd_usX2Y_usbpcm_hw_free() local
348 *cap_subs2 = subs->usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE + 2]; in snd_usX2Y_usbpcm_hw_free()
349 mutex_lock(&subs->usX2Y->pcm_mutex); in snd_usX2Y_usbpcm_hw_free()
353 struct snd_usX2Y_substream *cap_subs = subs->usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE]; in snd_usX2Y_usbpcm_hw_free()
354 atomic_set(&subs->state, state_STOPPED); in snd_usX2Y_usbpcm_hw_free()
355 usX2Y_usbpcm_urbs_release(subs); in snd_usX2Y_usbpcm_hw_free()
368 struct snd_usX2Y_substream *playback_subs = subs->usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK]; in snd_usX2Y_usbpcm_hw_free()
370 atomic_set(&subs->state, state_STOPPED); in snd_usX2Y_usbpcm_hw_free()
373 usX2Y_usbpcm_urbs_release(subs); in snd_usX2Y_usbpcm_hw_free()
378 mutex_unlock(&subs->usX2Y->pcm_mutex); in snd_usX2Y_usbpcm_hw_free()
382 static void usX2Y_usbpcm_subs_startup(struct snd_usX2Y_substream *subs) in usX2Y_usbpcm_subs_startup() argument
384 struct usX2Ydev * usX2Y = subs->usX2Y; in usX2Y_usbpcm_subs_startup()
385 usX2Y->prepare_subs = subs; in usX2Y_usbpcm_subs_startup()
386 subs->urb[0]->start_frame = -1; in usX2Y_usbpcm_subs_startup()
391 static int usX2Y_usbpcm_urbs_start(struct snd_usX2Y_substream *subs) in usX2Y_usbpcm_urbs_start() argument
394 stream = subs->pcm_substream->stream; in usX2Y_usbpcm_urbs_start()
395 struct usX2Ydev *usX2Y = subs->usX2Y; in usX2Y_usbpcm_urbs_start()
403 struct snd_usX2Y_substream *subs = usX2Y->subs[stream + p]; in usX2Y_usbpcm_urbs_start() local
404 if (subs != NULL) { in usX2Y_usbpcm_urbs_start()
405 if ((err = usX2Y_usbpcm_urbs_allocate(subs)) < 0) in usX2Y_usbpcm_urbs_start()
407 subs->completed_urb = NULL; in usX2Y_usbpcm_urbs_start()
412 struct snd_usX2Y_substream *subs = usX2Y->subs[p]; in usX2Y_usbpcm_urbs_start() local
413 if (subs != NULL && atomic_read(&subs->state) >= state_PREPARED) in usX2Y_usbpcm_urbs_start()
418 usX2Y_usbpcm_subs_startup(subs); in usX2Y_usbpcm_urbs_start()
421 struct snd_usX2Y_substream *subs = usX2Y->subs[stream + p]; in usX2Y_usbpcm_urbs_start() local
422 if (subs != NULL) { in usX2Y_usbpcm_urbs_start()
423 struct urb *urb = subs->urb[u]; in usX2Y_usbpcm_urbs_start()
427 atomic_set(&subs->state, state_STARTING3); in usX2Y_usbpcm_urbs_start()
430 urb->iso_frame_desc[pack].offset = subs->maxpacksize * (pack + u * nr_of_packs()); in usX2Y_usbpcm_urbs_start()
431 urb->iso_frame_desc[pack].length = subs->maxpacksize; in usX2Y_usbpcm_urbs_start()
433 urb->transfer_buffer_length = subs->maxpacksize * nr_of_packs(); in usX2Y_usbpcm_urbs_start()
445 atomic_set(&subs->state, state_STARTING1); in usX2Y_usbpcm_urbs_start()
453 if (atomic_read(&subs->state) != state_PREPARED) in usX2Y_usbpcm_urbs_start()
472 struct snd_usX2Y_substream *subs = runtime->private_data; in snd_usX2Y_usbpcm_prepare() local
473 struct usX2Ydev *usX2Y = subs->usX2Y; in snd_usX2Y_usbpcm_prepare()
474 struct snd_usX2Y_substream *capsubs = subs->usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE]; in snd_usX2Y_usbpcm_prepare()
487 usX2Y_subs_prepare(subs); in snd_usX2Y_usbpcm_prepare()
497 snd_printdd("starting capture pipe for %s\n", subs == capsubs ? in snd_usX2Y_usbpcm_prepare()
503 if (subs != capsubs) { in snd_usX2Y_usbpcm_prepare()
505 if (atomic_read(&subs->state) < state_PREPARED) { in snd_usX2Y_usbpcm_prepare()
517 if (0 > (err = usX2Y_usbpcm_urbs_start(subs))) in snd_usX2Y_usbpcm_prepare()
554 struct snd_usX2Y_substream *subs = ((struct snd_usX2Y_substream **) in snd_usX2Y_usbpcm_open() local
558 if (!(subs->usX2Y->chip_status & USX2Y_STAT_CHIP_MMAP_PCM_URBS)) in snd_usX2Y_usbpcm_open()
562 (subs->usX2Y->subs[3] ? snd_usX2Y_4c : snd_usX2Y_2c); in snd_usX2Y_usbpcm_open()
563 runtime->private_data = subs; in snd_usX2Y_usbpcm_open()
564 subs->pcm_substream = substream; in snd_usX2Y_usbpcm_open()
573 struct snd_usX2Y_substream *subs = runtime->private_data; in snd_usX2Y_usbpcm_close() local
575 subs->pcm_substream = NULL; in snd_usX2Y_usbpcm_close()
598 struct snd_usX2Y_substream *subs = dev->subs[i]; in usX2Y_pcms_busy_check() local
599 if (subs && subs->pcm_substream && in usX2Y_pcms_busy_check()
600 SUBSTREAM_BUSY(subs->pcm_substream)) in usX2Y_pcms_busy_check()
724 pcm->private_data = usX2Y(card)->subs; in usX2Y_hwdep_pcm_new()