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