• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/sound/usb/usx2y/

Lines Matching defs:subs

70 static int usX2Y_urb_capt_retire(struct snd_usX2Y_substream *subs)
72 struct urb *urb = subs->completed_urb;
73 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
75 int i, len, lens = 0, hwptr_done = subs->hwptr_done;
76 struct usX2Ydev *usX2Y = subs->usX2Y;
107 subs->hwptr_done = hwptr_done;
108 subs->transfer_done += lens;
110 if (subs->transfer_done >= runtime->period_size) {
111 subs->transfer_done -= runtime->period_size;
112 snd_pcm_period_elapsed(subs->pcm_substream);
126 static int usX2Y_urb_play_prepare(struct snd_usX2Y_substream *subs,
131 struct usX2Ydev *usX2Y = subs->usX2Y;
132 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
150 if (atomic_read(&subs->state) >= state_PRERUNNING)
151 if (subs->hwptr + count > runtime->buffer_size) {
156 len = runtime->buffer_size - subs->hwptr;
157 urb->transfer_buffer = subs->tmpbuf;
158 memcpy(subs->tmpbuf, runtime->dma_area +
159 subs->hwptr * usX2Y->stride, len * usX2Y->stride);
160 memcpy(subs->tmpbuf + len * usX2Y->stride,
162 subs->hwptr += count;
163 subs->hwptr -= runtime->buffer_size;
166 urb->transfer_buffer = runtime->dma_area + subs->hwptr * usX2Y->stride;
167 if ((subs->hwptr += count) >= runtime->buffer_size)
168 subs->hwptr -= runtime->buffer_size;
171 urb->transfer_buffer = subs->tmpbuf;
181 static void usX2Y_urb_play_retire(struct snd_usX2Y_substream *subs, struct urb *urb)
183 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
184 int len = urb->actual_length / subs->usX2Y->stride;
186 subs->transfer_done += len;
187 subs->hwptr_done += len;
188 if (subs->hwptr_done >= runtime->buffer_size)
189 subs->hwptr_done -= runtime->buffer_size;
190 if (subs->transfer_done >= runtime->period_size) {
191 subs->transfer_done -= runtime->period_size;
192 snd_pcm_period_elapsed(subs->pcm_substream);
196 static int usX2Y_urb_submit(struct snd_usX2Y_substream *subs, struct urb *urb, int frame)
203 urb->dev = subs->usX2Y->chip.dev; /* we need to set this at each time */
265 struct snd_usX2Y_substream *subs = usX2Y->subs[s];
266 if (subs) {
267 snd_printdd("%i %p state=%i\n", s, subs, atomic_read(&subs->state));
268 atomic_set(&subs->state, state_STOPPED);
272 struct snd_usX2Y_substream *subs = usX2Y->subs[s];
273 if (subs) {
274 if (atomic_read(&subs->state) >= state_PRERUNNING) {
275 snd_pcm_stop(subs->pcm_substream, SNDRV_PCM_STATE_XRUN);
278 struct urb *urb = subs->urb[u];
290 struct snd_usX2Y_substream *subs, struct urb *urb)
292 snd_printk(KERN_ERR "ep=%i stalled with status=%i\n", subs->endpoint, urb->status);
298 struct snd_usX2Y_substream *subs, struct urb *urb)
304 subs->endpoint, usb_pipein(urb->pipe) ? "in" : "out",
311 struct snd_usX2Y_substream *subs = urb->context;
312 struct usX2Ydev *usX2Y = subs->usX2Y;
314 if (unlikely(atomic_read(&subs->state) < state_PREPARED)) {
317 subs->endpoint, usb_pipein(urb->pipe) ? "in" : "out",
322 usX2Y_error_urb_status(usX2Y, subs, urb);
326 subs->completed_urb = urb;
328 usX2Y_error_sequence(usX2Y, subs, urb);
332 struct snd_usX2Y_substream *capsubs = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE],
333 *playbacksubs = usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK];
353 struct snd_usX2Y_substream *subs = usX2Y->subs[s];
354 if (NULL != subs)
356 struct urb * urb = subs->urb[u];
371 struct snd_usX2Y_substream *subs = urb->context;
372 struct usX2Ydev *usX2Y = subs->usX2Y;
384 static void usX2Y_subs_prepare(struct snd_usX2Y_substream *subs)
387 subs, subs->endpoint, subs->urb[0], subs->urb[1]);
389 subs->hwptr = 0;
390 subs->hwptr_done = 0;
391 subs->transfer_done = 0;
408 static void usX2Y_urbs_release(struct snd_usX2Y_substream *subs)
411 snd_printdd("usX2Y_urbs_release() %i\n", subs->endpoint);
413 usX2Y_urb_release(subs->urb + i,
414 subs != subs->usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK]);
416 kfree(subs->tmpbuf);
417 subs->tmpbuf = NULL;
422 static int usX2Y_urbs_allocate(struct snd_usX2Y_substream *subs)
426 int is_playback = subs == subs->usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK];
427 struct usb_device *dev = subs->usX2Y->chip.dev;
429 pipe = is_playback ? usb_sndisocpipe(dev, subs->endpoint) :
430 usb_rcvisocpipe(dev, subs->endpoint);
431 subs->maxpacksize = usb_maxpacket(dev, pipe, is_playback);
432 if (!subs->maxpacksize)
435 if (is_playback && NULL == subs->tmpbuf) { /* allocate a temporary buffer for playback */
436 subs->tmpbuf = kcalloc(nr_of_packs(), subs->maxpacksize, GFP_KERNEL);
437 if (NULL == subs->tmpbuf) {
444 struct urb **purb = subs->urb + i;
451 usX2Y_urbs_release(subs);
456 (*purb)->transfer_buffer = kmalloc(subs->maxpacksize * nr_of_packs(), GFP_KERNEL);
458 usX2Y_urbs_release(subs);
465 (*purb)->context = subs;
472 static void usX2Y_subs_startup(struct snd_usX2Y_substream *subs)
474 struct usX2Ydev *usX2Y = subs->usX2Y;
475 usX2Y->prepare_subs = subs;
476 subs->urb[0]->start_frame = -1;
481 static int usX2Y_urbs_start(struct snd_usX2Y_substream *subs)
484 struct usX2Ydev *usX2Y = subs->usX2Y;
486 if ((err = usX2Y_urbs_allocate(subs)) < 0)
488 subs->completed_urb = NULL;
490 struct snd_usX2Y_substream *subs = usX2Y->subs[i];
491 if (subs != NULL && atomic_read(&subs->state) >= state_PREPARED)
496 usX2Y_subs_startup(subs);
498 struct urb *urb = subs->urb[i];
502 atomic_set(&subs->state, state_STARTING3);
506 urb->iso_frame_desc[pack].offset = subs->maxpacksize * pack;
507 urb->iso_frame_desc[pack].length = subs->maxpacksize;
509 urb->transfer_buffer_length = subs->maxpacksize * nr_of_packs();
519 atomic_set(&subs->state, state_STARTING1);
525 if (atomic_read(&subs->state) != state_PREPARED)
541 struct snd_usX2Y_substream *subs = substream->runtime->private_data;
542 return subs->hwptr_done;
549 struct snd_usX2Y_substream *subs = substream->runtime->private_data;
554 if (atomic_read(&subs->state) == state_PREPARED &&
555 atomic_read(&subs->usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE]->state) >= state_PREPARED) {
556 atomic_set(&subs->state, state_PRERUNNING);
564 if (atomic_read(&subs->state) >= state_PRERUNNING)
565 atomic_set(&subs->state, state_PREPARED);
807 struct snd_usX2Y_substream *subs = runtime->private_data;
808 mutex_lock(&subs->usX2Y->prepare_mutex);
812 struct snd_usX2Y_substream *cap_subs = subs->usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE];
813 atomic_set(&subs->state, state_STOPPED);
814 usX2Y_urbs_release(subs);
823 struct snd_usX2Y_substream *playback_subs = subs->usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK];
825 atomic_set(&subs->state, state_STOPPED);
826 usX2Y_urbs_release(subs);
829 mutex_unlock(&subs->usX2Y->prepare_mutex);
840 struct snd_usX2Y_substream *subs = runtime->private_data;
841 struct usX2Ydev *usX2Y = subs->usX2Y;
842 struct snd_usX2Y_substream *capsubs = subs->usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE];
847 usX2Y_subs_prepare(subs);
857 snd_printdd("starting capture pipe for %s\n", subs == capsubs ? "self" : "playpipe");
862 if (subs != capsubs && atomic_read(&subs->state) < state_PREPARED)
863 err = usX2Y_urbs_start(subs);
893 struct snd_usX2Y_substream *subs = ((struct snd_usX2Y_substream **)
897 if (subs->usX2Y->chip_status & USX2Y_STAT_CHIP_MMAP_PCM_URBS)
901 runtime->private_data = subs;
902 subs->pcm_substream = substream;
912 struct snd_usX2Y_substream *subs = runtime->private_data;
914 subs->pcm_substream = NULL;
958 usX2Y(card)->subs + 2 * usX2Y(card)->chip.pcm_devs;