Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
pcm.c
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation; either version 2 of the License, or
5  * (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software
14  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15  */
16 
17 #include <linux/init.h>
18 #include <linux/slab.h>
19 #include <linux/ratelimit.h>
20 #include <linux/usb.h>
21 #include <linux/usb/audio.h>
22 #include <linux/usb/audio-v2.h>
23 
24 #include <sound/core.h>
25 #include <sound/pcm.h>
26 #include <sound/pcm_params.h>
27 
28 #include "usbaudio.h"
29 #include "card.h"
30 #include "quirks.h"
31 #include "debug.h"
32 #include "endpoint.h"
33 #include "helper.h"
34 #include "pcm.h"
35 #include "clock.h"
36 #include "power.h"
37 
38 #define SUBSTREAM_FLAG_DATA_EP_STARTED 0
39 #define SUBSTREAM_FLAG_SYNC_EP_STARTED 1
40 
41 /* return the estimated delay based on USB frame counters */
43  unsigned int rate)
44 {
45  int current_frame_number;
46  int frame_diff;
47  int est_delay;
48 
49  current_frame_number = usb_get_current_frame_number(subs->dev);
50  /*
51  * HCD implementations use different widths, use lower 8 bits.
52  * The delay will be managed up to 256ms, which is more than
53  * enough
54  */
55  frame_diff = (current_frame_number - subs->last_frame_number) & 0xff;
56 
57  /* Approximation based on number of samples per USB frame (ms),
58  some truncation for 44.1 but the estimate is good enough */
59  est_delay = subs->last_delay - (frame_diff * rate / 1000);
60  if (est_delay < 0)
61  est_delay = 0;
62  return est_delay;
63 }
64 
65 /*
66  * return the current pcm pointer. just based on the hwptr_done value.
67  */
68 static snd_pcm_uframes_t snd_usb_pcm_pointer(struct snd_pcm_substream *substream)
69 {
70  struct snd_usb_substream *subs;
71  unsigned int hwptr_done;
72 
73  subs = (struct snd_usb_substream *)substream->runtime->private_data;
74  if (subs->stream->chip->shutdown)
75  return SNDRV_PCM_POS_XRUN;
76  spin_lock(&subs->lock);
77  hwptr_done = subs->hwptr_done;
78  substream->runtime->delay = snd_usb_pcm_delay(subs,
79  substream->runtime->rate);
80  spin_unlock(&subs->lock);
81  return hwptr_done / (substream->runtime->frame_bits >> 3);
82 }
83 
84 /*
85  * find a matching audio format
86  */
87 static struct audioformat *find_format(struct snd_usb_substream *subs)
88 {
89  struct list_head *p;
90  struct audioformat *found = NULL;
91  int cur_attr = 0, attr;
92 
93  list_for_each(p, &subs->fmt_list) {
94  struct audioformat *fp;
95  fp = list_entry(p, struct audioformat, list);
96  if (!(fp->formats & (1uLL << subs->pcm_format)))
97  continue;
98  if (fp->channels != subs->channels)
99  continue;
100  if (subs->cur_rate < fp->rate_min ||
101  subs->cur_rate > fp->rate_max)
102  continue;
103  if (! (fp->rates & SNDRV_PCM_RATE_CONTINUOUS)) {
104  unsigned int i;
105  for (i = 0; i < fp->nr_rates; i++)
106  if (fp->rate_table[i] == subs->cur_rate)
107  break;
108  if (i >= fp->nr_rates)
109  continue;
110  }
112  if (! found) {
113  found = fp;
114  cur_attr = attr;
115  continue;
116  }
117  /* avoid async out and adaptive in if the other method
118  * supports the same format.
119  * this is a workaround for the case like
120  * M-audio audiophile USB.
121  */
122  if (attr != cur_attr) {
123  if ((attr == USB_ENDPOINT_SYNC_ASYNC &&
127  continue;
128  if ((cur_attr == USB_ENDPOINT_SYNC_ASYNC &&
130  (cur_attr == USB_ENDPOINT_SYNC_ADAPTIVE &&
132  found = fp;
133  cur_attr = attr;
134  continue;
135  }
136  }
137  /* find the format with the largest max. packet size */
138  if (fp->maxpacksize > found->maxpacksize) {
139  found = fp;
140  cur_attr = attr;
141  }
142  }
143  return found;
144 }
145 
146 static int init_pitch_v1(struct snd_usb_audio *chip, int iface,
147  struct usb_host_interface *alts,
148  struct audioformat *fmt)
149 {
150  struct usb_device *dev = chip->dev;
151  unsigned int ep;
152  unsigned char data[1];
153  int err;
154 
155  ep = get_endpoint(alts, 0)->bEndpointAddress;
156 
157  data[0] = 1;
158  if ((err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), UAC_SET_CUR,
161  data, sizeof(data))) < 0) {
162  snd_printk(KERN_ERR "%d:%d:%d: cannot set enable PITCH\n",
163  dev->devnum, iface, ep);
164  return err;
165  }
166 
167  return 0;
168 }
169 
170 static int init_pitch_v2(struct snd_usb_audio *chip, int iface,
171  struct usb_host_interface *alts,
172  struct audioformat *fmt)
173 {
174  struct usb_device *dev = chip->dev;
175  unsigned char data[1];
176  unsigned int ep;
177  int err;
178 
179  ep = get_endpoint(alts, 0)->bEndpointAddress;
180 
181  data[0] = 1;
182  if ((err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), UAC2_CS_CUR,
184  UAC2_EP_CS_PITCH << 8, 0,
185  data, sizeof(data))) < 0) {
186  snd_printk(KERN_ERR "%d:%d:%d: cannot set enable PITCH (v2)\n",
187  dev->devnum, iface, fmt->altsetting);
188  return err;
189  }
190 
191  return 0;
192 }
193 
194 /*
195  * initialize the pitch control and sample rate
196  */
197 int snd_usb_init_pitch(struct snd_usb_audio *chip, int iface,
198  struct usb_host_interface *alts,
199  struct audioformat *fmt)
200 {
201  struct usb_interface_descriptor *altsd = get_iface_desc(alts);
202 
203  /* if endpoint doesn't have pitch control, bail out */
205  return 0;
206 
207  switch (altsd->bInterfaceProtocol) {
208  case UAC_VERSION_1:
209  default:
210  return init_pitch_v1(chip, iface, alts, fmt);
211 
212  case UAC_VERSION_2:
213  return init_pitch_v2(chip, iface, alts, fmt);
214  }
215 }
216 
217 static int start_endpoints(struct snd_usb_substream *subs, int can_sleep)
218 {
219  int err;
220 
221  if (!subs->data_endpoint)
222  return -EINVAL;
223 
225  struct snd_usb_endpoint *ep = subs->data_endpoint;
226 
227  snd_printdd(KERN_DEBUG "Starting data EP @%p\n", ep);
228 
229  ep->data_subs = subs;
230  err = snd_usb_endpoint_start(ep, can_sleep);
231  if (err < 0) {
233  return err;
234  }
235  }
236 
237  if (subs->sync_endpoint &&
239  struct snd_usb_endpoint *ep = subs->sync_endpoint;
240 
241  if (subs->data_endpoint->iface != subs->sync_endpoint->iface ||
242  subs->data_endpoint->alt_idx != subs->sync_endpoint->alt_idx) {
243  err = usb_set_interface(subs->dev,
244  subs->sync_endpoint->iface,
245  subs->sync_endpoint->alt_idx);
246  if (err < 0) {
248  "%d:%d:%d: cannot set interface (%d)\n",
249  subs->dev->devnum,
250  subs->sync_endpoint->iface,
251  subs->sync_endpoint->alt_idx, err);
252  return -EIO;
253  }
254  }
255 
256  snd_printdd(KERN_DEBUG "Starting sync EP @%p\n", ep);
257 
258  ep->sync_slave = subs->data_endpoint;
259  err = snd_usb_endpoint_start(ep, can_sleep);
260  if (err < 0) {
262  return err;
263  }
264  }
265 
266  return 0;
267 }
268 
269 static void stop_endpoints(struct snd_usb_substream *subs,
270  int force, int can_sleep, int wait)
271 {
274  force, can_sleep, wait);
275 
278  force, can_sleep, wait);
279 }
280 
281 static int deactivate_endpoints(struct snd_usb_substream *subs)
282 {
283  int reta, retb;
284 
287 
288  if (reta < 0)
289  return reta;
290 
291  if (retb < 0)
292  return retb;
293 
294  return 0;
295 }
296 
297 /*
298  * find a matching format and set up the interface
299  */
300 static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt)
301 {
302  struct usb_device *dev = subs->dev;
303  struct usb_host_interface *alts;
304  struct usb_interface_descriptor *altsd;
305  struct usb_interface *iface;
306  unsigned int ep, attr;
307  int is_playback = subs->direction == SNDRV_PCM_STREAM_PLAYBACK;
308  int err, implicit_fb = 0;
309 
310  iface = usb_ifnum_to_if(dev, fmt->iface);
311  if (WARN_ON(!iface))
312  return -EINVAL;
313  alts = &iface->altsetting[fmt->altset_idx];
314  altsd = get_iface_desc(alts);
315  if (WARN_ON(altsd->bAlternateSetting != fmt->altsetting))
316  return -EINVAL;
317 
318  if (fmt == subs->cur_audiofmt)
319  return 0;
320 
321  /* close the old interface */
322  if (subs->interface >= 0 && subs->interface != fmt->iface) {
323  err = usb_set_interface(subs->dev, subs->interface, 0);
324  if (err < 0) {
325  snd_printk(KERN_ERR "%d:%d:%d: return to setting 0 failed (%d)\n",
326  dev->devnum, fmt->iface, fmt->altsetting, err);
327  return -EIO;
328  }
329  subs->interface = -1;
330  subs->altset_idx = 0;
331  }
332 
333  /* set interface */
334  if (subs->interface != fmt->iface ||
335  subs->altset_idx != fmt->altset_idx) {
336  err = usb_set_interface(dev, fmt->iface, fmt->altsetting);
337  if (err < 0) {
338  snd_printk(KERN_ERR "%d:%d:%d: usb_set_interface failed (%d)\n",
339  dev->devnum, fmt->iface, fmt->altsetting, err);
340  return -EIO;
341  }
342  snd_printdd(KERN_INFO "setting usb interface %d:%d\n",
343  fmt->iface, fmt->altsetting);
344  subs->interface = fmt->iface;
345  subs->altset_idx = fmt->altset_idx;
346  }
347 
348  subs->data_endpoint = snd_usb_add_endpoint(subs->stream->chip,
349  alts, fmt->endpoint, subs->direction,
351  if (!subs->data_endpoint)
352  return -EINVAL;
353 
354  /* we need a sync pipe in async OUT or adaptive IN mode */
355  /* check the number of EP, since some devices have broken
356  * descriptors which fool us. if it has only one EP,
357  * assume it as adaptive-out or sync-in.
358  */
359  attr = fmt->ep_attr & USB_ENDPOINT_SYNCTYPE;
360 
361  switch (subs->stream->chip->usb_id) {
362  case USB_ID(0x0763, 0x2080): /* M-Audio FastTrack Ultra */
363  case USB_ID(0x0763, 0x2081):
364  if (is_playback) {
365  implicit_fb = 1;
366  ep = 0x81;
367  iface = usb_ifnum_to_if(dev, 2);
368 
369  if (!iface || iface->num_altsetting == 0)
370  return -EINVAL;
371 
372  alts = &iface->altsetting[1];
373  goto add_sync_ep;
374  }
375  }
376 
377  if (((is_playback && attr == USB_ENDPOINT_SYNC_ASYNC) ||
378  (!is_playback && attr == USB_ENDPOINT_SYNC_ADAPTIVE)) &&
379  altsd->bNumEndpoints >= 2) {
380  /* check sync-pipe endpoint */
381  /* ... and check descriptor size before accessing bSynchAddress
382  because there is a version of the SB Audigy 2 NX firmware lacking
383  the audio fields in the endpoint descriptors */
384  if ((get_endpoint(alts, 1)->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) != 0x01 ||
386  get_endpoint(alts, 1)->bSynchAddress != 0 &&
387  !implicit_fb)) {
388  snd_printk(KERN_ERR "%d:%d:%d : invalid sync pipe. bmAttributes %02x, bLength %d, bSynchAddress %02x\n",
389  dev->devnum, fmt->iface, fmt->altsetting,
390  get_endpoint(alts, 1)->bmAttributes,
391  get_endpoint(alts, 1)->bLength,
392  get_endpoint(alts, 1)->bSynchAddress);
393  return -EINVAL;
394  }
395  ep = get_endpoint(alts, 1)->bEndpointAddress;
396  if (!implicit_fb &&
398  (( is_playback && ep != (unsigned int)(get_endpoint(alts, 0)->bSynchAddress | USB_DIR_IN)) ||
399  (!is_playback && ep != (unsigned int)(get_endpoint(alts, 0)->bSynchAddress & ~USB_DIR_IN)))) {
400  snd_printk(KERN_ERR "%d:%d:%d : invalid sync pipe. is_playback %d, ep %02x, bSynchAddress %02x\n",
401  dev->devnum, fmt->iface, fmt->altsetting,
402  is_playback, ep, get_endpoint(alts, 0)->bSynchAddress);
403  return -EINVAL;
404  }
405 
406  implicit_fb = (get_endpoint(alts, 1)->bmAttributes & USB_ENDPOINT_USAGE_MASK)
408 
409 add_sync_ep:
410  subs->sync_endpoint = snd_usb_add_endpoint(subs->stream->chip,
411  alts, ep, !subs->direction,
412  implicit_fb ?
415  if (!subs->sync_endpoint)
416  return -EINVAL;
417 
418  subs->data_endpoint->sync_master = subs->sync_endpoint;
419  }
420 
421  if ((err = snd_usb_init_pitch(subs->stream->chip, fmt->iface, alts, fmt)) < 0)
422  return err;
423 
424  subs->cur_audiofmt = fmt;
425 
426  snd_usb_set_format_quirk(subs, fmt);
427 
428 #if 0
430  "setting done: format = %d, rate = %d..%d, channels = %d\n",
431  fmt->format, fmt->rate_min, fmt->rate_max, fmt->channels);
433  " datapipe = 0x%0x, syncpipe = 0x%0x\n",
434  subs->datapipe, subs->syncpipe);
435 #endif
436 
437  return 0;
438 }
439 
440 /*
441  * configure endpoint params
442  *
443  * called during initial setup and upon resume
444  */
445 static int configure_endpoint(struct snd_usb_substream *subs)
446 {
447  int ret;
448 
449  /* format changed */
450  stop_endpoints(subs, 0, 0, 0);
452  subs->pcm_format,
453  subs->channels,
454  subs->period_bytes,
455  subs->cur_rate,
456  subs->cur_audiofmt,
457  subs->sync_endpoint);
458  if (ret < 0)
459  return ret;
460 
461  if (subs->sync_endpoint)
463  subs->pcm_format,
464  subs->channels,
465  subs->period_bytes,
466  subs->cur_rate,
467  subs->cur_audiofmt,
468  NULL);
469  return ret;
470 }
471 
472 /*
473  * hw_params callback
474  *
475  * allocate a buffer and set the given audio format.
476  *
477  * so far we use a physically linear buffer although packetize transfer
478  * doesn't need a continuous area.
479  * if sg buffer is supported on the later version of alsa, we'll follow
480  * that.
481  */
482 static int snd_usb_hw_params(struct snd_pcm_substream *substream,
483  struct snd_pcm_hw_params *hw_params)
484 {
485  struct snd_usb_substream *subs = substream->runtime->private_data;
486  struct audioformat *fmt;
487  int ret;
488 
489  ret = snd_pcm_lib_alloc_vmalloc_buffer(substream,
490  params_buffer_bytes(hw_params));
491  if (ret < 0)
492  return ret;
493 
494  subs->pcm_format = params_format(hw_params);
495  subs->period_bytes = params_period_bytes(hw_params);
496  subs->channels = params_channels(hw_params);
497  subs->cur_rate = params_rate(hw_params);
498 
499  fmt = find_format(subs);
500  if (!fmt) {
501  snd_printd(KERN_DEBUG "cannot set format: format = %#x, rate = %d, channels = %d\n",
502  subs->pcm_format, subs->cur_rate, subs->channels);
503  return -EINVAL;
504  }
505 
506  down_read(&subs->stream->chip->shutdown_rwsem);
507  if (subs->stream->chip->shutdown)
508  ret = -ENODEV;
509  else
510  ret = set_format(subs, fmt);
511  up_read(&subs->stream->chip->shutdown_rwsem);
512  if (ret < 0)
513  return ret;
514 
515  subs->interface = fmt->iface;
516  subs->altset_idx = fmt->altset_idx;
517  subs->need_setup_ep = true;
518 
519  return 0;
520 }
521 
522 /*
523  * hw_free callback
524  *
525  * reset the audio format and release the buffer
526  */
527 static int snd_usb_hw_free(struct snd_pcm_substream *substream)
528 {
529  struct snd_usb_substream *subs = substream->runtime->private_data;
530 
531  subs->cur_audiofmt = NULL;
532  subs->cur_rate = 0;
533  subs->period_bytes = 0;
534  down_read(&subs->stream->chip->shutdown_rwsem);
535  if (!subs->stream->chip->shutdown) {
536  stop_endpoints(subs, 0, 1, 1);
537  deactivate_endpoints(subs);
538  }
539  up_read(&subs->stream->chip->shutdown_rwsem);
540  return snd_pcm_lib_free_vmalloc_buffer(substream);
541 }
542 
543 /*
544  * prepare callback
545  *
546  * only a few subtle things...
547  */
548 static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream)
549 {
550  struct snd_pcm_runtime *runtime = substream->runtime;
551  struct snd_usb_substream *subs = runtime->private_data;
552  struct usb_host_interface *alts;
553  struct usb_interface *iface;
554  int ret;
555 
556  if (! subs->cur_audiofmt) {
557  snd_printk(KERN_ERR "usbaudio: no format is specified!\n");
558  return -ENXIO;
559  }
560 
561  down_read(&subs->stream->chip->shutdown_rwsem);
562  if (subs->stream->chip->shutdown) {
563  ret = -ENODEV;
564  goto unlock;
565  }
566  if (snd_BUG_ON(!subs->data_endpoint)) {
567  ret = -EIO;
568  goto unlock;
569  }
570 
573 
574  ret = set_format(subs, subs->cur_audiofmt);
575  if (ret < 0)
576  goto unlock;
577 
578  iface = usb_ifnum_to_if(subs->dev, subs->cur_audiofmt->iface);
579  alts = &iface->altsetting[subs->cur_audiofmt->altset_idx];
580  ret = snd_usb_init_sample_rate(subs->stream->chip,
581  subs->cur_audiofmt->iface,
582  alts,
583  subs->cur_audiofmt,
584  subs->cur_rate);
585  if (ret < 0)
586  goto unlock;
587 
588  if (subs->need_setup_ep) {
589  ret = configure_endpoint(subs);
590  if (ret < 0)
591  goto unlock;
592  subs->need_setup_ep = false;
593  }
594 
595  /* some unit conversions in runtime */
596  subs->data_endpoint->maxframesize =
597  bytes_to_frames(runtime, subs->data_endpoint->maxpacksize);
598  subs->data_endpoint->curframesize =
599  bytes_to_frames(runtime, subs->data_endpoint->curpacksize);
600 
601  /* reset the pointer */
602  subs->hwptr_done = 0;
603  subs->transfer_done = 0;
604  subs->last_delay = 0;
605  subs->last_frame_number = 0;
606  runtime->delay = 0;
607 
608  /* for playback, submit the URBs now; otherwise, the first hwptr_done
609  * updates for all URBs would happen at the same time when starting */
611  ret = start_endpoints(subs, 1);
612 
613  unlock:
614  up_read(&subs->stream->chip->shutdown_rwsem);
615  return ret;
616 }
617 
618 static struct snd_pcm_hardware snd_usb_hardware =
619 {
620  .info = SNDRV_PCM_INFO_MMAP |
626  .buffer_bytes_max = 1024 * 1024,
627  .period_bytes_min = 64,
628  .period_bytes_max = 512 * 1024,
629  .periods_min = 2,
630  .periods_max = 1024,
631 };
632 
633 static int hw_check_valid_format(struct snd_usb_substream *subs,
634  struct snd_pcm_hw_params *params,
635  struct audioformat *fp)
636 {
637  struct snd_interval *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
638  struct snd_interval *ct = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
639  struct snd_mask *fmts = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
640  struct snd_interval *pt = hw_param_interval(params, SNDRV_PCM_HW_PARAM_PERIOD_TIME);
641  struct snd_mask check_fmts;
642  unsigned int ptime;
643 
644  /* check the format */
645  snd_mask_none(&check_fmts);
646  check_fmts.bits[0] = (u32)fp->formats;
647  check_fmts.bits[1] = (u32)(fp->formats >> 32);
648  snd_mask_intersect(&check_fmts, fmts);
649  if (snd_mask_empty(&check_fmts)) {
650  hwc_debug(" > check: no supported format %d\n", fp->format);
651  return 0;
652  }
653  /* check the channels */
654  if (fp->channels < ct->min || fp->channels > ct->max) {
655  hwc_debug(" > check: no valid channels %d (%d/%d)\n", fp->channels, ct->min, ct->max);
656  return 0;
657  }
658  /* check the rate is within the range */
659  if (fp->rate_min > it->max || (fp->rate_min == it->max && it->openmax)) {
660  hwc_debug(" > check: rate_min %d > max %d\n", fp->rate_min, it->max);
661  return 0;
662  }
663  if (fp->rate_max < it->min || (fp->rate_max == it->min && it->openmin)) {
664  hwc_debug(" > check: rate_max %d < min %d\n", fp->rate_max, it->min);
665  return 0;
666  }
667  /* check whether the period time is >= the data packet interval */
668  if (subs->speed != USB_SPEED_FULL) {
669  ptime = 125 * (1 << fp->datainterval);
670  if (ptime > pt->max || (ptime == pt->max && pt->openmax)) {
671  hwc_debug(" > check: ptime %u > max %u\n", ptime, pt->max);
672  return 0;
673  }
674  }
675  return 1;
676 }
677 
678 static int hw_rule_rate(struct snd_pcm_hw_params *params,
679  struct snd_pcm_hw_rule *rule)
680 {
681  struct snd_usb_substream *subs = rule->private;
682  struct list_head *p;
683  struct snd_interval *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
684  unsigned int rmin, rmax;
685  int changed;
686 
687  hwc_debug("hw_rule_rate: (%d,%d)\n", it->min, it->max);
688  changed = 0;
689  rmin = rmax = 0;
690  list_for_each(p, &subs->fmt_list) {
691  struct audioformat *fp;
692  fp = list_entry(p, struct audioformat, list);
693  if (!hw_check_valid_format(subs, params, fp))
694  continue;
695  if (changed++) {
696  if (rmin > fp->rate_min)
697  rmin = fp->rate_min;
698  if (rmax < fp->rate_max)
699  rmax = fp->rate_max;
700  } else {
701  rmin = fp->rate_min;
702  rmax = fp->rate_max;
703  }
704  }
705 
706  if (!changed) {
707  hwc_debug(" --> get empty\n");
708  it->empty = 1;
709  return -EINVAL;
710  }
711 
712  changed = 0;
713  if (it->min < rmin) {
714  it->min = rmin;
715  it->openmin = 0;
716  changed = 1;
717  }
718  if (it->max > rmax) {
719  it->max = rmax;
720  it->openmax = 0;
721  changed = 1;
722  }
723  if (snd_interval_checkempty(it)) {
724  it->empty = 1;
725  return -EINVAL;
726  }
727  hwc_debug(" --> (%d, %d) (changed = %d)\n", it->min, it->max, changed);
728  return changed;
729 }
730 
731 
732 static int hw_rule_channels(struct snd_pcm_hw_params *params,
733  struct snd_pcm_hw_rule *rule)
734 {
735  struct snd_usb_substream *subs = rule->private;
736  struct list_head *p;
737  struct snd_interval *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
738  unsigned int rmin, rmax;
739  int changed;
740 
741  hwc_debug("hw_rule_channels: (%d,%d)\n", it->min, it->max);
742  changed = 0;
743  rmin = rmax = 0;
744  list_for_each(p, &subs->fmt_list) {
745  struct audioformat *fp;
746  fp = list_entry(p, struct audioformat, list);
747  if (!hw_check_valid_format(subs, params, fp))
748  continue;
749  if (changed++) {
750  if (rmin > fp->channels)
751  rmin = fp->channels;
752  if (rmax < fp->channels)
753  rmax = fp->channels;
754  } else {
755  rmin = fp->channels;
756  rmax = fp->channels;
757  }
758  }
759 
760  if (!changed) {
761  hwc_debug(" --> get empty\n");
762  it->empty = 1;
763  return -EINVAL;
764  }
765 
766  changed = 0;
767  if (it->min < rmin) {
768  it->min = rmin;
769  it->openmin = 0;
770  changed = 1;
771  }
772  if (it->max > rmax) {
773  it->max = rmax;
774  it->openmax = 0;
775  changed = 1;
776  }
777  if (snd_interval_checkempty(it)) {
778  it->empty = 1;
779  return -EINVAL;
780  }
781  hwc_debug(" --> (%d, %d) (changed = %d)\n", it->min, it->max, changed);
782  return changed;
783 }
784 
785 static int hw_rule_format(struct snd_pcm_hw_params *params,
786  struct snd_pcm_hw_rule *rule)
787 {
788  struct snd_usb_substream *subs = rule->private;
789  struct list_head *p;
790  struct snd_mask *fmt = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT);
791  u64 fbits;
792  u32 oldbits[2];
793  int changed;
794 
795  hwc_debug("hw_rule_format: %x:%x\n", fmt->bits[0], fmt->bits[1]);
796  fbits = 0;
797  list_for_each(p, &subs->fmt_list) {
798  struct audioformat *fp;
799  fp = list_entry(p, struct audioformat, list);
800  if (!hw_check_valid_format(subs, params, fp))
801  continue;
802  fbits |= fp->formats;
803  }
804 
805  oldbits[0] = fmt->bits[0];
806  oldbits[1] = fmt->bits[1];
807  fmt->bits[0] &= (u32)fbits;
808  fmt->bits[1] &= (u32)(fbits >> 32);
809  if (!fmt->bits[0] && !fmt->bits[1]) {
810  hwc_debug(" --> get empty\n");
811  return -EINVAL;
812  }
813  changed = (oldbits[0] != fmt->bits[0] || oldbits[1] != fmt->bits[1]);
814  hwc_debug(" --> %x:%x (changed = %d)\n", fmt->bits[0], fmt->bits[1], changed);
815  return changed;
816 }
817 
818 static int hw_rule_period_time(struct snd_pcm_hw_params *params,
819  struct snd_pcm_hw_rule *rule)
820 {
821  struct snd_usb_substream *subs = rule->private;
822  struct audioformat *fp;
823  struct snd_interval *it;
824  unsigned char min_datainterval;
825  unsigned int pmin;
826  int changed;
827 
828  it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_PERIOD_TIME);
829  hwc_debug("hw_rule_period_time: (%u,%u)\n", it->min, it->max);
830  min_datainterval = 0xff;
831  list_for_each_entry(fp, &subs->fmt_list, list) {
832  if (!hw_check_valid_format(subs, params, fp))
833  continue;
834  min_datainterval = min(min_datainterval, fp->datainterval);
835  }
836  if (min_datainterval == 0xff) {
837  hwc_debug(" --> get empty\n");
838  it->empty = 1;
839  return -EINVAL;
840  }
841  pmin = 125 * (1 << min_datainterval);
842  changed = 0;
843  if (it->min < pmin) {
844  it->min = pmin;
845  it->openmin = 0;
846  changed = 1;
847  }
848  if (snd_interval_checkempty(it)) {
849  it->empty = 1;
850  return -EINVAL;
851  }
852  hwc_debug(" --> (%u,%u) (changed = %d)\n", it->min, it->max, changed);
853  return changed;
854 }
855 
856 /*
857  * If the device supports unusual bit rates, does the request meet these?
858  */
859 static int snd_usb_pcm_check_knot(struct snd_pcm_runtime *runtime,
860  struct snd_usb_substream *subs)
861 {
862  struct audioformat *fp;
863  int *rate_list;
864  int count = 0, needs_knot = 0;
865  int err;
866 
867  kfree(subs->rate_list.list);
868  subs->rate_list.list = NULL;
869 
870  list_for_each_entry(fp, &subs->fmt_list, list) {
872  return 0;
873  count += fp->nr_rates;
874  if (fp->rates & SNDRV_PCM_RATE_KNOT)
875  needs_knot = 1;
876  }
877  if (!needs_knot)
878  return 0;
879 
880  subs->rate_list.list = rate_list =
881  kmalloc(sizeof(int) * count, GFP_KERNEL);
882  if (!subs->rate_list.list)
883  return -ENOMEM;
884  subs->rate_list.count = count;
885  subs->rate_list.mask = 0;
886  count = 0;
887  list_for_each_entry(fp, &subs->fmt_list, list) {
888  int i;
889  for (i = 0; i < fp->nr_rates; i++)
890  rate_list[count++] = fp->rate_table[i];
891  }
893  &subs->rate_list);
894  if (err < 0)
895  return err;
896 
897  return 0;
898 }
899 
900 
901 /*
902  * set up the runtime hardware information.
903  */
904 
905 static int setup_hw_info(struct snd_pcm_runtime *runtime, struct snd_usb_substream *subs)
906 {
907  struct list_head *p;
908  unsigned int pt, ptmin;
909  int param_period_time_if_needed;
910  int err;
911 
912  runtime->hw.formats = subs->formats;
913 
914  runtime->hw.rate_min = 0x7fffffff;
915  runtime->hw.rate_max = 0;
916  runtime->hw.channels_min = 256;
917  runtime->hw.channels_max = 0;
918  runtime->hw.rates = 0;
919  ptmin = UINT_MAX;
920  /* check min/max rates and channels */
921  list_for_each(p, &subs->fmt_list) {
922  struct audioformat *fp;
923  fp = list_entry(p, struct audioformat, list);
924  runtime->hw.rates |= fp->rates;
925  if (runtime->hw.rate_min > fp->rate_min)
926  runtime->hw.rate_min = fp->rate_min;
927  if (runtime->hw.rate_max < fp->rate_max)
928  runtime->hw.rate_max = fp->rate_max;
929  if (runtime->hw.channels_min > fp->channels)
930  runtime->hw.channels_min = fp->channels;
931  if (runtime->hw.channels_max < fp->channels)
932  runtime->hw.channels_max = fp->channels;
933  if (fp->fmt_type == UAC_FORMAT_TYPE_II && fp->frame_size > 0) {
934  /* FIXME: there might be more than one audio formats... */
935  runtime->hw.period_bytes_min = runtime->hw.period_bytes_max =
936  fp->frame_size;
937  }
938  pt = 125 * (1 << fp->datainterval);
939  ptmin = min(ptmin, pt);
940  }
941  err = snd_usb_autoresume(subs->stream->chip);
942  if (err < 0)
943  return err;
944 
945  param_period_time_if_needed = SNDRV_PCM_HW_PARAM_PERIOD_TIME;
946  if (subs->speed == USB_SPEED_FULL)
947  /* full speed devices have fixed data packet interval */
948  ptmin = 1000;
949  if (ptmin == 1000)
950  /* if period time doesn't go below 1 ms, no rules needed */
951  param_period_time_if_needed = -1;
953  ptmin, UINT_MAX);
954 
955  if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
956  hw_rule_rate, subs,
959  param_period_time_if_needed,
960  -1)) < 0)
961  goto rep_err;
962  if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS,
963  hw_rule_channels, subs,
966  param_period_time_if_needed,
967  -1)) < 0)
968  goto rep_err;
969  if ((err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_FORMAT,
970  hw_rule_format, subs,
973  param_period_time_if_needed,
974  -1)) < 0)
975  goto rep_err;
976  if (param_period_time_if_needed >= 0) {
977  err = snd_pcm_hw_rule_add(runtime, 0,
979  hw_rule_period_time, subs,
983  -1);
984  if (err < 0)
985  goto rep_err;
986  }
987  if ((err = snd_usb_pcm_check_knot(runtime, subs)) < 0)
988  goto rep_err;
989  return 0;
990 
991 rep_err:
992  snd_usb_autosuspend(subs->stream->chip);
993  return err;
994 }
995 
996 static int snd_usb_pcm_open(struct snd_pcm_substream *substream, int direction)
997 {
998  struct snd_usb_stream *as = snd_pcm_substream_chip(substream);
999  struct snd_pcm_runtime *runtime = substream->runtime;
1000  struct snd_usb_substream *subs = &as->substream[direction];
1001 
1002  subs->interface = -1;
1003  subs->altset_idx = 0;
1004  runtime->hw = snd_usb_hardware;
1005  runtime->private_data = subs;
1006  subs->pcm_substream = substream;
1007  /* runtime PM is also done there */
1008  return setup_hw_info(runtime, subs);
1009 }
1010 
1011 static int snd_usb_pcm_close(struct snd_pcm_substream *substream, int direction)
1012 {
1013  struct snd_usb_stream *as = snd_pcm_substream_chip(substream);
1014  struct snd_usb_substream *subs = &as->substream[direction];
1015 
1016  stop_endpoints(subs, 0, 0, 0);
1017 
1018  if (!as->chip->shutdown && subs->interface >= 0) {
1019  usb_set_interface(subs->dev, subs->interface, 0);
1020  subs->interface = -1;
1021  }
1022 
1023  subs->pcm_substream = NULL;
1024  snd_usb_autosuspend(subs->stream->chip);
1025 
1026  return 0;
1027 }
1028 
1029 /* Since a URB can handle only a single linear buffer, we must use double
1030  * buffering when the data to be transferred overflows the buffer boundary.
1031  * To avoid inconsistencies when updating hwptr_done, we use double buffering
1032  * for all URBs.
1033  */
1034 static void retire_capture_urb(struct snd_usb_substream *subs,
1035  struct urb *urb)
1036 {
1037  struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
1038  unsigned int stride, frames, bytes, oldptr;
1039  int i, period_elapsed = 0;
1040  unsigned long flags;
1041  unsigned char *cp;
1042 
1043  stride = runtime->frame_bits >> 3;
1044 
1045  for (i = 0; i < urb->number_of_packets; i++) {
1046  cp = (unsigned char *)urb->transfer_buffer + urb->iso_frame_desc[i].offset;
1047  if (urb->iso_frame_desc[i].status && printk_ratelimit()) {
1048  snd_printdd(KERN_ERR "frame %d active: %d\n", i, urb->iso_frame_desc[i].status);
1049  // continue;
1050  }
1051  bytes = urb->iso_frame_desc[i].actual_length;
1052  frames = bytes / stride;
1053  if (!subs->txfr_quirk)
1054  bytes = frames * stride;
1055  if (bytes % (runtime->sample_bits >> 3) != 0) {
1056 #ifdef CONFIG_SND_DEBUG_VERBOSE
1057  int oldbytes = bytes;
1058 #endif
1059  bytes = frames * stride;
1060  snd_printdd(KERN_ERR "Corrected urb data len. %d->%d\n",
1061  oldbytes, bytes);
1062  }
1063  /* update the current pointer */
1064  spin_lock_irqsave(&subs->lock, flags);
1065  oldptr = subs->hwptr_done;
1066  subs->hwptr_done += bytes;
1067  if (subs->hwptr_done >= runtime->buffer_size * stride)
1068  subs->hwptr_done -= runtime->buffer_size * stride;
1069  frames = (bytes + (oldptr % stride)) / stride;
1070  subs->transfer_done += frames;
1071  if (subs->transfer_done >= runtime->period_size) {
1072  subs->transfer_done -= runtime->period_size;
1073  period_elapsed = 1;
1074  }
1075  spin_unlock_irqrestore(&subs->lock, flags);
1076  /* copy a data chunk */
1077  if (oldptr + bytes > runtime->buffer_size * stride) {
1078  unsigned int bytes1 =
1079  runtime->buffer_size * stride - oldptr;
1080  memcpy(runtime->dma_area + oldptr, cp, bytes1);
1081  memcpy(runtime->dma_area, cp + bytes1, bytes - bytes1);
1082  } else {
1083  memcpy(runtime->dma_area + oldptr, cp, bytes);
1084  }
1085  }
1086 
1087  if (period_elapsed)
1089 }
1090 
1091 static void prepare_playback_urb(struct snd_usb_substream *subs,
1092  struct urb *urb)
1093 {
1094  struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
1095  struct snd_usb_endpoint *ep = subs->data_endpoint;
1096  struct snd_urb_ctx *ctx = urb->context;
1097  unsigned int counts, frames, bytes;
1098  int i, stride, period_elapsed = 0;
1099  unsigned long flags;
1100 
1101  stride = runtime->frame_bits >> 3;
1102 
1103  frames = 0;
1104  urb->number_of_packets = 0;
1105  spin_lock_irqsave(&subs->lock, flags);
1106  for (i = 0; i < ctx->packets; i++) {
1107  if (ctx->packet_size[i])
1108  counts = ctx->packet_size[i];
1109  else
1110  counts = snd_usb_endpoint_next_packet_size(ep);
1111 
1112  /* set up descriptor */
1113  urb->iso_frame_desc[i].offset = frames * stride;
1114  urb->iso_frame_desc[i].length = counts * stride;
1115  frames += counts;
1116  urb->number_of_packets++;
1117  subs->transfer_done += counts;
1118  if (subs->transfer_done >= runtime->period_size) {
1119  subs->transfer_done -= runtime->period_size;
1120  period_elapsed = 1;
1121  if (subs->fmt_type == UAC_FORMAT_TYPE_II) {
1122  if (subs->transfer_done > 0) {
1123  /* FIXME: fill-max mode is not
1124  * supported yet */
1125  frames -= subs->transfer_done;
1126  counts -= subs->transfer_done;
1127  urb->iso_frame_desc[i].length =
1128  counts * stride;
1129  subs->transfer_done = 0;
1130  }
1131  i++;
1132  if (i < ctx->packets) {
1133  /* add a transfer delimiter */
1134  urb->iso_frame_desc[i].offset =
1135  frames * stride;
1136  urb->iso_frame_desc[i].length = 0;
1137  urb->number_of_packets++;
1138  }
1139  break;
1140  }
1141  }
1142  if (period_elapsed &&
1143  !snd_usb_endpoint_implict_feedback_sink(subs->data_endpoint)) /* finish at the period boundary */
1144  break;
1145  }
1146  bytes = frames * stride;
1147  if (subs->hwptr_done + bytes > runtime->buffer_size * stride) {
1148  /* err, the transferred area goes over buffer boundary. */
1149  unsigned int bytes1 =
1150  runtime->buffer_size * stride - subs->hwptr_done;
1151  memcpy(urb->transfer_buffer,
1152  runtime->dma_area + subs->hwptr_done, bytes1);
1153  memcpy(urb->transfer_buffer + bytes1,
1154  runtime->dma_area, bytes - bytes1);
1155  } else {
1156  memcpy(urb->transfer_buffer,
1157  runtime->dma_area + subs->hwptr_done, bytes);
1158  }
1159  subs->hwptr_done += bytes;
1160  if (subs->hwptr_done >= runtime->buffer_size * stride)
1161  subs->hwptr_done -= runtime->buffer_size * stride;
1162 
1163  /* update delay with exact number of samples queued */
1164  runtime->delay = subs->last_delay;
1165  runtime->delay += frames;
1166  subs->last_delay = runtime->delay;
1167 
1168  /* realign last_frame_number */
1170  subs->last_frame_number &= 0xFF; /* keep 8 LSBs */
1171 
1172  spin_unlock_irqrestore(&subs->lock, flags);
1173  urb->transfer_buffer_length = bytes;
1174  if (period_elapsed)
1176 }
1177 
1178 /*
1179  * process after playback data complete
1180  * - decrease the delay count again
1181  */
1182 static void retire_playback_urb(struct snd_usb_substream *subs,
1183  struct urb *urb)
1184 {
1185  unsigned long flags;
1186  struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime;
1187  int stride = runtime->frame_bits >> 3;
1188  int processed = urb->transfer_buffer_length / stride;
1189  int est_delay;
1190 
1191  /* ignore the delay accounting when procssed=0 is given, i.e.
1192  * silent payloads are procssed before handling the actual data
1193  */
1194  if (!processed)
1195  return;
1196 
1197  spin_lock_irqsave(&subs->lock, flags);
1198  est_delay = snd_usb_pcm_delay(subs, runtime->rate);
1199  /* update delay with exact number of samples played */
1200  if (processed > subs->last_delay)
1201  subs->last_delay = 0;
1202  else
1203  subs->last_delay -= processed;
1204  runtime->delay = subs->last_delay;
1205 
1206  /*
1207  * Report when delay estimate is off by more than 2ms.
1208  * The error should be lower than 2ms since the estimate relies
1209  * on two reads of a counter updated every ms.
1210  */
1211  if (abs(est_delay - subs->last_delay) * 1000 > runtime->rate * 2)
1212  snd_printk(KERN_DEBUG "delay: estimated %d, actual %d\n",
1213  est_delay, subs->last_delay);
1214 
1215  spin_unlock_irqrestore(&subs->lock, flags);
1216 }
1217 
1218 static int snd_usb_playback_open(struct snd_pcm_substream *substream)
1219 {
1220  return snd_usb_pcm_open(substream, SNDRV_PCM_STREAM_PLAYBACK);
1221 }
1222 
1223 static int snd_usb_playback_close(struct snd_pcm_substream *substream)
1224 {
1225  return snd_usb_pcm_close(substream, SNDRV_PCM_STREAM_PLAYBACK);
1226 }
1227 
1228 static int snd_usb_capture_open(struct snd_pcm_substream *substream)
1229 {
1230  return snd_usb_pcm_open(substream, SNDRV_PCM_STREAM_CAPTURE);
1231 }
1232 
1233 static int snd_usb_capture_close(struct snd_pcm_substream *substream)
1234 {
1235  return snd_usb_pcm_close(substream, SNDRV_PCM_STREAM_CAPTURE);
1236 }
1237 
1238 static int snd_usb_substream_playback_trigger(struct snd_pcm_substream *substream,
1239  int cmd)
1240 {
1241  struct snd_usb_substream *subs = substream->runtime->private_data;
1242 
1243  switch (cmd) {
1246  subs->data_endpoint->prepare_data_urb = prepare_playback_urb;
1247  subs->data_endpoint->retire_data_urb = retire_playback_urb;
1248  subs->running = 1;
1249  return 0;
1251  stop_endpoints(subs, 0, 0, 0);
1252  subs->running = 0;
1253  return 0;
1255  subs->data_endpoint->prepare_data_urb = NULL;
1256  subs->data_endpoint->retire_data_urb = NULL;
1257  subs->running = 0;
1258  return 0;
1259  }
1260 
1261  return -EINVAL;
1262 }
1263 
1264 static int snd_usb_substream_capture_trigger(struct snd_pcm_substream *substream,
1265  int cmd)
1266 {
1267  int err;
1268  struct snd_usb_substream *subs = substream->runtime->private_data;
1269 
1270  switch (cmd) {
1272  err = start_endpoints(subs, 0);
1273  if (err < 0)
1274  return err;
1275 
1276  subs->data_endpoint->retire_data_urb = retire_capture_urb;
1277  subs->running = 1;
1278  return 0;
1280  stop_endpoints(subs, 0, 0, 0);
1281  subs->running = 0;
1282  return 0;
1284  subs->data_endpoint->retire_data_urb = NULL;
1285  subs->running = 0;
1286  return 0;
1288  subs->data_endpoint->retire_data_urb = retire_capture_urb;
1289  subs->running = 1;
1290  return 0;
1291  }
1292 
1293  return -EINVAL;
1294 }
1295 
1296 static struct snd_pcm_ops snd_usb_playback_ops = {
1297  .open = snd_usb_playback_open,
1298  .close = snd_usb_playback_close,
1299  .ioctl = snd_pcm_lib_ioctl,
1300  .hw_params = snd_usb_hw_params,
1301  .hw_free = snd_usb_hw_free,
1302  .prepare = snd_usb_pcm_prepare,
1303  .trigger = snd_usb_substream_playback_trigger,
1304  .pointer = snd_usb_pcm_pointer,
1306  .mmap = snd_pcm_lib_mmap_vmalloc,
1307 };
1308 
1309 static struct snd_pcm_ops snd_usb_capture_ops = {
1310  .open = snd_usb_capture_open,
1311  .close = snd_usb_capture_close,
1312  .ioctl = snd_pcm_lib_ioctl,
1313  .hw_params = snd_usb_hw_params,
1314  .hw_free = snd_usb_hw_free,
1315  .prepare = snd_usb_pcm_prepare,
1316  .trigger = snd_usb_substream_capture_trigger,
1317  .pointer = snd_usb_pcm_pointer,
1319  .mmap = snd_pcm_lib_mmap_vmalloc,
1320 };
1321 
1322 void snd_usb_set_pcm_ops(struct snd_pcm *pcm, int stream)
1323 {
1324  snd_pcm_set_ops(pcm, stream,
1325  stream == SNDRV_PCM_STREAM_PLAYBACK ?
1326  &snd_usb_playback_ops : &snd_usb_capture_ops);
1327 }