• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/sound/usb/

Lines Matching refs:subs

41 	struct snd_usb_substream *subs;
44 subs = (struct snd_usb_substream *)substream->runtime->private_data;
45 spin_lock(&subs->lock);
46 hwptr_done = subs->hwptr_done;
47 spin_unlock(&subs->lock);
54 static struct audioformat *find_format(struct snd_usb_substream *subs, unsigned int format,
61 list_for_each(p, &subs->fmt_list) {
86 subs->direction == SNDRV_PCM_STREAM_PLAYBACK) ||
88 subs->direction == SNDRV_PCM_STREAM_CAPTURE))
91 subs->direction == SNDRV_PCM_STREAM_PLAYBACK) ||
93 subs->direction == SNDRV_PCM_STREAM_CAPTURE)) {
182 static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt)
184 struct usb_device *dev = subs->dev;
189 int is_playback = subs->direction == SNDRV_PCM_STREAM_PLAYBACK;
200 if (fmt == subs->cur_audiofmt)
204 if (subs->interface >= 0 && subs->interface != fmt->iface) {
205 if (usb_set_interface(subs->dev, subs->interface, 0) < 0) {
210 subs->interface = -1;
211 subs->altset_idx = 0;
215 if (subs->interface != fmt->iface || subs->altset_idx != fmt->altset_idx) {
222 subs->interface = fmt->iface;
223 subs->altset_idx = fmt->altset_idx;
229 subs->datapipe = usb_sndisocpipe(dev, ep);
231 subs->datapipe = usb_rcvisocpipe(dev, ep);
232 subs->datainterval = fmt->datainterval;
233 subs->syncpipe = subs->syncinterval = 0;
234 subs->maxpacksize = fmt->maxpacksize;
235 subs->fill_max = 0;
267 subs->syncpipe = usb_rcvisocpipe(dev, ep);
269 subs->syncpipe = usb_sndisocpipe(dev, ep);
273 subs->syncinterval = get_endpoint(alts, 1)->bRefresh;
274 else if (snd_usb_get_speed(subs->dev) == USB_SPEED_FULL)
275 subs->syncinterval = 1;
278 subs->syncinterval = get_endpoint(alts, 1)->bInterval - 1;
280 subs->syncinterval = 3;
285 subs->fill_max = 1;
287 if ((err = snd_usb_init_pitch(subs->stream->chip, subs->interface, alts, fmt)) < 0)
290 subs->cur_audiofmt = fmt;
292 snd_usb_set_format_quirk(subs, fmt);
311 struct snd_usb_substream *subs = substream->runtime->private_data;
324 fmt = find_format(subs, format, rate, channels);
331 changed = subs->cur_audiofmt != fmt ||
332 subs->period_bytes != params_period_bytes(hw_params) ||
333 subs->cur_rate != rate;
334 if ((ret = set_format(subs, fmt)) < 0)
337 if (subs->cur_rate != rate) {
340 iface = usb_ifnum_to_if(subs->dev, fmt->iface);
342 ret = snd_usb_init_sample_rate(subs->stream->chip, subs->interface, alts, fmt, rate);
345 subs->cur_rate = rate;
350 snd_usb_release_substream_urbs(subs, 0);
352 ret = snd_usb_init_substream_urbs(subs, params_period_bytes(hw_params),
368 struct snd_usb_substream *subs = substream->runtime->private_data;
370 subs->cur_audiofmt = NULL;
371 subs->cur_rate = 0;
372 subs->period_bytes = 0;
373 if (!subs->stream->chip->shutdown)
374 snd_usb_release_substream_urbs(subs, 0);
386 struct snd_usb_substream *subs = runtime->private_data;
388 if (! subs->cur_audiofmt) {
394 subs->maxframesize = bytes_to_frames(runtime, subs->maxpacksize);
395 subs->curframesize = bytes_to_frames(runtime, subs->curpacksize);
398 subs->hwptr_done = 0;
399 subs->transfer_done = 0;
400 subs->phase = 0;
403 return snd_usb_substream_prepare(subs, runtime);
421 static int hw_check_valid_format(struct snd_usb_substream *subs,
456 if (snd_usb_get_speed(subs->dev) == USB_SPEED_HIGH) {
469 struct snd_usb_substream *subs = rule->private;
478 list_for_each(p, &subs->fmt_list) {
481 if (!hw_check_valid_format(subs, params, fp))
523 struct snd_usb_substream *subs = rule->private;
532 list_for_each(p, &subs->fmt_list) {
535 if (!hw_check_valid_format(subs, params, fp))
576 struct snd_usb_substream *subs = rule->private;
585 list_for_each(p, &subs->fmt_list) {
588 if (!hw_check_valid_format(subs, params, fp))
609 struct snd_usb_substream *subs = rule->private;
619 list_for_each_entry(fp, &subs->fmt_list, list) {
620 if (!hw_check_valid_format(subs, params, fp))
648 struct snd_usb_substream *subs)
654 list_for_each_entry(fp, &subs->fmt_list, list) {
664 subs->rate_list.count = count;
665 subs->rate_list.list = kmalloc(sizeof(int) * count, GFP_KERNEL);
666 subs->rate_list.mask = 0;
668 list_for_each_entry(fp, &subs->fmt_list, list) {
671 subs->rate_list.list[count++] = fp->rate_table[i];
674 &subs->rate_list);
686 static int setup_hw_info(struct snd_pcm_runtime *runtime, struct snd_usb_substream *subs)
693 runtime->hw.formats = subs->formats;
702 list_for_each(p, &subs->fmt_list) {
723 if (snd_usb_get_speed(subs->dev) != USB_SPEED_HIGH)
733 hw_rule_rate, subs,
740 hw_rule_channels, subs,
747 hw_rule_format, subs,
756 hw_rule_period_time, subs,
764 if ((err = snd_usb_pcm_check_knot(runtime, subs)) < 0)
773 struct snd_usb_substream *subs = &as->substream[direction];
775 subs->interface = -1;
776 subs->altset_idx = 0;
778 runtime->private_data = subs;
779 subs->pcm_substream = substream;
780 return setup_hw_info(runtime, subs);
786 struct snd_usb_substream *subs = &as->substream[direction];
788 if (!as->chip->shutdown && subs->interface >= 0) {
789 usb_set_interface(subs->dev, subs->interface, 0);
790 subs->interface = -1;
792 subs->pcm_substream = NULL;