1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 */ 4 5 #include <linux/init.h> 6 #include <linux/slab.h> 7 #include <linux/bitrev.h> 8 #include <linux/ratelimit.h> 9 #include <linux/usb.h> 10 #include <linux/usb/audio.h> 11 #include <linux/usb/audio-v2.h> 12 13 #include <sound/core.h> 14 #include <sound/pcm.h> 15 #include <sound/pcm_params.h> 16 17 #include "usbaudio.h" 18 #include "card.h" 19 #include "quirks.h" 20 #include "endpoint.h" 21 #include "helper.h" 22 #include "pcm.h" 23 #include "clock.h" 24 #include "power.h" 25 #include "media.h" 26 #include "implicit.h" 27 28 #define SUBSTREAM_FLAG_DATA_EP_STARTED 0 29 #define SUBSTREAM_FLAG_SYNC_EP_STARTED 1 30 31 /* return the estimated delay based on USB frame counters */ 32 static snd_pcm_uframes_t snd_usb_pcm_delay(struct snd_usb_substream *subs, 33 struct snd_pcm_runtime *runtime) 34 { 35 unsigned int current_frame_number; 36 unsigned int frame_diff; 37 int est_delay; 38 int queued; 39 40 if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK) { 41 queued = bytes_to_frames(runtime, subs->inflight_bytes); 42 if (!queued) 43 return 0; 44 } else if (!subs->running) { 45 return 0; 46 } 47 48 current_frame_number = usb_get_current_frame_number(subs->dev); 49 /* 50 * HCD implementations use different widths, use lower 8 bits. 51 * The delay will be managed up to 256ms, which is more than 52 * enough 53 */ 54 frame_diff = (current_frame_number - subs->last_frame_number) & 0xff; 55 56 /* Approximation based on number of samples per USB frame (ms), 57 some truncation for 44.1 but the estimate is good enough */ 58 est_delay = frame_diff * runtime->rate / 1000; 59 60 if (subs->direction == SNDRV_PCM_STREAM_PLAYBACK) { 61 est_delay = queued - est_delay; 62 if (est_delay < 0) 63 est_delay = 0; 64 } 65 66 return est_delay; 67 } 68 69 /* 70 * return the current pcm pointer. just based on the hwptr_done value. 71 */ 72 static snd_pcm_uframes_t snd_usb_pcm_pointer(struct snd_pcm_substream *substream) 73 { 74 struct snd_pcm_runtime *runtime = substream->runtime; 75 struct snd_usb_substream *subs = runtime->private_data; 76 unsigned int hwptr_done; 77 78 if (atomic_read(&subs->stream->chip->shutdown)) 79 return SNDRV_PCM_POS_XRUN; 80 spin_lock(&subs->lock); 81 hwptr_done = subs->hwptr_done; 82 runtime->delay = snd_usb_pcm_delay(subs, runtime); 83 spin_unlock(&subs->lock); 84 return bytes_to_frames(runtime, hwptr_done); 85 } 86 87 /* 88 * find a matching audio format 89 */ 90 static const struct audioformat * 91 find_format(struct list_head *fmt_list_head, snd_pcm_format_t format, 92 unsigned int rate, unsigned int channels, bool strict_match, 93 struct snd_usb_substream *subs) 94 { 95 const struct audioformat *fp; 96 const struct audioformat *found = NULL; 97 int cur_attr = 0, attr; 98 99 list_for_each_entry(fp, fmt_list_head, list) { 100 if (strict_match) { 101 if (!(fp->formats & pcm_format_to_bits(format))) 102 continue; 103 if (fp->channels != channels) 104 continue; 105 } 106 if (rate < fp->rate_min || rate > fp->rate_max) 107 continue; 108 if (!(fp->rates & SNDRV_PCM_RATE_CONTINUOUS)) { 109 unsigned int i; 110 for (i = 0; i < fp->nr_rates; i++) 111 if (fp->rate_table[i] == rate) 112 break; 113 if (i >= fp->nr_rates) 114 continue; 115 } 116 attr = fp->ep_attr & USB_ENDPOINT_SYNCTYPE; 117 if (!found) { 118 found = fp; 119 cur_attr = attr; 120 continue; 121 } 122 /* avoid async out and adaptive in if the other method 123 * supports the same format. 124 * this is a workaround for the case like 125 * M-audio audiophile USB. 126 */ 127 if (subs && attr != cur_attr) { 128 if ((attr == USB_ENDPOINT_SYNC_ASYNC && 129 subs->direction == SNDRV_PCM_STREAM_PLAYBACK) || 130 (attr == USB_ENDPOINT_SYNC_ADAPTIVE && 131 subs->direction == SNDRV_PCM_STREAM_CAPTURE)) 132 continue; 133 if ((cur_attr == USB_ENDPOINT_SYNC_ASYNC && 134 subs->direction == SNDRV_PCM_STREAM_PLAYBACK) || 135 (cur_attr == USB_ENDPOINT_SYNC_ADAPTIVE && 136 subs->direction == SNDRV_PCM_STREAM_CAPTURE)) { 137 found = fp; 138 cur_attr = attr; 139 continue; 140 } 141 } 142 /* find the format with the largest max. packet size */ 143 if (fp->maxpacksize > found->maxpacksize) { 144 found = fp; 145 cur_attr = attr; 146 } 147 } 148 return found; 149 } 150 151 static const struct audioformat * 152 find_substream_format(struct snd_usb_substream *subs, 153 const struct snd_pcm_hw_params *params) 154 { 155 return find_format(&subs->fmt_list, params_format(params), 156 params_rate(params), params_channels(params), 157 true, subs); 158 } 159 160 static int init_pitch_v1(struct snd_usb_audio *chip, int ep) 161 { 162 struct usb_device *dev = chip->dev; 163 unsigned char data[1]; 164 int err; 165 166 data[0] = 1; 167 err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), UAC_SET_CUR, 168 USB_TYPE_CLASS|USB_RECIP_ENDPOINT|USB_DIR_OUT, 169 UAC_EP_CS_ATTR_PITCH_CONTROL << 8, ep, 170 data, sizeof(data)); 171 return err; 172 } 173 174 static int init_pitch_v2(struct snd_usb_audio *chip, int ep) 175 { 176 struct usb_device *dev = chip->dev; 177 unsigned char data[1]; 178 int err; 179 180 data[0] = 1; 181 err = snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), UAC2_CS_CUR, 182 USB_TYPE_CLASS | USB_RECIP_ENDPOINT | USB_DIR_OUT, 183 UAC2_EP_CS_PITCH << 8, 0, 184 data, sizeof(data)); 185 return err; 186 } 187 188 /* 189 * initialize the pitch control and sample rate 190 */ 191 int snd_usb_init_pitch(struct snd_usb_audio *chip, 192 const struct audioformat *fmt) 193 { 194 int err; 195 196 /* if endpoint doesn't have pitch control, bail out */ 197 if (!(fmt->attributes & UAC_EP_CS_ATTR_PITCH_CONTROL)) 198 return 0; 199 200 usb_audio_dbg(chip, "enable PITCH for EP 0x%x\n", fmt->endpoint); 201 202 switch (fmt->protocol) { 203 case UAC_VERSION_1: 204 err = init_pitch_v1(chip, fmt->endpoint); 205 break; 206 case UAC_VERSION_2: 207 err = init_pitch_v2(chip, fmt->endpoint); 208 break; 209 default: 210 return 0; 211 } 212 213 if (err < 0) { 214 usb_audio_err(chip, "failed to enable PITCH for EP 0x%x\n", 215 fmt->endpoint); 216 return err; 217 } 218 219 return 0; 220 } 221 222 static bool stop_endpoints(struct snd_usb_substream *subs, bool keep_pending) 223 { 224 bool stopped = 0; 225 226 if (test_and_clear_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags)) { 227 snd_usb_endpoint_stop(subs->sync_endpoint, keep_pending); 228 stopped = true; 229 } 230 if (test_and_clear_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags)) { 231 snd_usb_endpoint_stop(subs->data_endpoint, keep_pending); 232 stopped = true; 233 } 234 return stopped; 235 } 236 237 static int start_endpoints(struct snd_usb_substream *subs) 238 { 239 int err; 240 241 if (!subs->data_endpoint) 242 return -EINVAL; 243 244 if (!test_and_set_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags)) { 245 err = snd_usb_endpoint_start(subs->data_endpoint); 246 if (err < 0) { 247 clear_bit(SUBSTREAM_FLAG_DATA_EP_STARTED, &subs->flags); 248 goto error; 249 } 250 } 251 252 if (subs->sync_endpoint && 253 !test_and_set_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags)) { 254 err = snd_usb_endpoint_start(subs->sync_endpoint); 255 if (err < 0) { 256 clear_bit(SUBSTREAM_FLAG_SYNC_EP_STARTED, &subs->flags); 257 goto error; 258 } 259 } 260 261 return 0; 262 263 error: 264 stop_endpoints(subs, false); 265 return err; 266 } 267 268 static void sync_pending_stops(struct snd_usb_substream *subs) 269 { 270 snd_usb_endpoint_sync_pending_stop(subs->sync_endpoint); 271 snd_usb_endpoint_sync_pending_stop(subs->data_endpoint); 272 } 273 274 /* PCM sync_stop callback */ 275 static int snd_usb_pcm_sync_stop(struct snd_pcm_substream *substream) 276 { 277 struct snd_usb_substream *subs = substream->runtime->private_data; 278 279 sync_pending_stops(subs); 280 return 0; 281 } 282 283 /* Set up sync endpoint */ 284 int snd_usb_audioformat_set_sync_ep(struct snd_usb_audio *chip, 285 struct audioformat *fmt) 286 { 287 struct usb_device *dev = chip->dev; 288 struct usb_host_interface *alts; 289 struct usb_interface_descriptor *altsd; 290 unsigned int ep, attr, sync_attr; 291 bool is_playback; 292 int err; 293 294 if (fmt->sync_ep) 295 return 0; /* already set up */ 296 297 alts = snd_usb_get_host_interface(chip, fmt->iface, fmt->altsetting); 298 if (!alts) 299 return 0; 300 altsd = get_iface_desc(alts); 301 302 err = snd_usb_parse_implicit_fb_quirk(chip, fmt, alts); 303 if (err > 0) 304 return 0; /* matched */ 305 306 /* 307 * Generic sync EP handling 308 */ 309 310 if (fmt->ep_idx > 0 || altsd->bNumEndpoints < 2) 311 return 0; 312 313 is_playback = !(get_endpoint(alts, 0)->bEndpointAddress & USB_DIR_IN); 314 attr = fmt->ep_attr & USB_ENDPOINT_SYNCTYPE; 315 if ((is_playback && (attr == USB_ENDPOINT_SYNC_SYNC || 316 attr == USB_ENDPOINT_SYNC_ADAPTIVE)) || 317 (!is_playback && attr != USB_ENDPOINT_SYNC_ADAPTIVE)) 318 return 0; 319 320 sync_attr = get_endpoint(alts, 1)->bmAttributes; 321 322 /* 323 * In case of illegal SYNC_NONE for OUT endpoint, we keep going to see 324 * if we don't find a sync endpoint, as on M-Audio Transit. In case of 325 * error fall back to SYNC mode and don't create sync endpoint 326 */ 327 328 /* check sync-pipe endpoint */ 329 /* ... and check descriptor size before accessing bSynchAddress 330 because there is a version of the SB Audigy 2 NX firmware lacking 331 the audio fields in the endpoint descriptors */ 332 if ((sync_attr & USB_ENDPOINT_XFERTYPE_MASK) != USB_ENDPOINT_XFER_ISOC || 333 (get_endpoint(alts, 1)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE && 334 get_endpoint(alts, 1)->bSynchAddress != 0)) { 335 dev_err(&dev->dev, 336 "%d:%d : invalid sync pipe. bmAttributes %02x, bLength %d, bSynchAddress %02x\n", 337 fmt->iface, fmt->altsetting, 338 get_endpoint(alts, 1)->bmAttributes, 339 get_endpoint(alts, 1)->bLength, 340 get_endpoint(alts, 1)->bSynchAddress); 341 if (is_playback && attr == USB_ENDPOINT_SYNC_NONE) 342 return 0; 343 return -EINVAL; 344 } 345 ep = get_endpoint(alts, 1)->bEndpointAddress; 346 if (get_endpoint(alts, 0)->bLength >= USB_DT_ENDPOINT_AUDIO_SIZE && 347 get_endpoint(alts, 0)->bSynchAddress != 0 && 348 ((is_playback && ep != (unsigned int)(get_endpoint(alts, 0)->bSynchAddress | USB_DIR_IN)) || 349 (!is_playback && ep != (unsigned int)(get_endpoint(alts, 0)->bSynchAddress & ~USB_DIR_IN)))) { 350 dev_err(&dev->dev, 351 "%d:%d : invalid sync pipe. is_playback %d, ep %02x, bSynchAddress %02x\n", 352 fmt->iface, fmt->altsetting, 353 is_playback, ep, get_endpoint(alts, 0)->bSynchAddress); 354 if (is_playback && attr == USB_ENDPOINT_SYNC_NONE) 355 return 0; 356 return -EINVAL; 357 } 358 359 fmt->sync_ep = ep; 360 fmt->sync_iface = altsd->bInterfaceNumber; 361 fmt->sync_altsetting = altsd->bAlternateSetting; 362 fmt->sync_ep_idx = 1; 363 if ((sync_attr & USB_ENDPOINT_USAGE_MASK) == USB_ENDPOINT_USAGE_IMPLICIT_FB) 364 fmt->implicit_fb = 1; 365 366 dev_dbg(&dev->dev, "%d:%d: found sync_ep=0x%x, iface=%d, alt=%d, implicit_fb=%d\n", 367 fmt->iface, fmt->altsetting, fmt->sync_ep, fmt->sync_iface, 368 fmt->sync_altsetting, fmt->implicit_fb); 369 370 return 0; 371 } 372 373 static int snd_usb_pcm_change_state(struct snd_usb_substream *subs, int state) 374 { 375 int ret; 376 377 if (!subs->str_pd) 378 return 0; 379 380 ret = snd_usb_power_domain_set(subs->stream->chip, subs->str_pd, state); 381 if (ret < 0) { 382 dev_err(&subs->dev->dev, 383 "Cannot change Power Domain ID: %d to state: %d. Err: %d\n", 384 subs->str_pd->pd_id, state, ret); 385 return ret; 386 } 387 388 return 0; 389 } 390 391 int snd_usb_pcm_suspend(struct snd_usb_stream *as) 392 { 393 int ret; 394 395 ret = snd_usb_pcm_change_state(&as->substream[0], UAC3_PD_STATE_D2); 396 if (ret < 0) 397 return ret; 398 399 ret = snd_usb_pcm_change_state(&as->substream[1], UAC3_PD_STATE_D2); 400 if (ret < 0) 401 return ret; 402 403 return 0; 404 } 405 406 int snd_usb_pcm_resume(struct snd_usb_stream *as) 407 { 408 int ret; 409 410 ret = snd_usb_pcm_change_state(&as->substream[0], UAC3_PD_STATE_D1); 411 if (ret < 0) 412 return ret; 413 414 ret = snd_usb_pcm_change_state(&as->substream[1], UAC3_PD_STATE_D1); 415 if (ret < 0) 416 return ret; 417 418 return 0; 419 } 420 421 static void close_endpoints(struct snd_usb_audio *chip, 422 struct snd_usb_substream *subs) 423 { 424 if (subs->data_endpoint) { 425 snd_usb_endpoint_set_sync(chip, subs->data_endpoint, NULL); 426 snd_usb_endpoint_close(chip, subs->data_endpoint); 427 subs->data_endpoint = NULL; 428 } 429 430 if (subs->sync_endpoint) { 431 snd_usb_endpoint_close(chip, subs->sync_endpoint); 432 subs->sync_endpoint = NULL; 433 } 434 } 435 436 /* 437 * hw_params callback 438 * 439 * allocate a buffer and set the given audio format. 440 * 441 * so far we use a physically linear buffer although packetize transfer 442 * doesn't need a continuous area. 443 * if sg buffer is supported on the later version of alsa, we'll follow 444 * that. 445 */ 446 static int snd_usb_hw_params(struct snd_pcm_substream *substream, 447 struct snd_pcm_hw_params *hw_params) 448 { 449 struct snd_usb_substream *subs = substream->runtime->private_data; 450 struct snd_usb_audio *chip = subs->stream->chip; 451 const struct audioformat *fmt; 452 const struct audioformat *sync_fmt; 453 int ret; 454 455 ret = snd_media_start_pipeline(subs); 456 if (ret) 457 return ret; 458 459 fmt = find_substream_format(subs, hw_params); 460 if (!fmt) { 461 usb_audio_dbg(chip, 462 "cannot find format: format=%s, rate=%d, channels=%d\n", 463 snd_pcm_format_name(params_format(hw_params)), 464 params_rate(hw_params), params_channels(hw_params)); 465 ret = -EINVAL; 466 goto stop_pipeline; 467 } 468 469 if (fmt->implicit_fb) { 470 sync_fmt = snd_usb_find_implicit_fb_sync_format(chip, fmt, 471 hw_params, 472 !substream->stream); 473 if (!sync_fmt) { 474 usb_audio_dbg(chip, 475 "cannot find sync format: ep=0x%x, iface=%d:%d, format=%s, rate=%d, channels=%d\n", 476 fmt->sync_ep, fmt->sync_iface, 477 fmt->sync_altsetting, 478 snd_pcm_format_name(params_format(hw_params)), 479 params_rate(hw_params), params_channels(hw_params)); 480 ret = -EINVAL; 481 goto stop_pipeline; 482 } 483 } else { 484 sync_fmt = fmt; 485 } 486 487 ret = snd_usb_lock_shutdown(chip); 488 if (ret < 0) 489 goto stop_pipeline; 490 491 ret = snd_usb_pcm_change_state(subs, UAC3_PD_STATE_D0); 492 if (ret < 0) 493 goto unlock; 494 495 if (subs->data_endpoint) { 496 if (snd_usb_endpoint_compatible(chip, subs->data_endpoint, 497 fmt, hw_params)) 498 goto unlock; 499 close_endpoints(chip, subs); 500 } 501 502 subs->data_endpoint = snd_usb_endpoint_open(chip, fmt, hw_params, false); 503 if (!subs->data_endpoint) { 504 ret = -EINVAL; 505 goto unlock; 506 } 507 508 if (fmt->sync_ep) { 509 subs->sync_endpoint = snd_usb_endpoint_open(chip, sync_fmt, 510 hw_params, 511 fmt == sync_fmt); 512 if (!subs->sync_endpoint) { 513 ret = -EINVAL; 514 goto unlock; 515 } 516 517 snd_usb_endpoint_set_sync(chip, subs->data_endpoint, 518 subs->sync_endpoint); 519 } 520 521 mutex_lock(&chip->mutex); 522 subs->cur_audiofmt = fmt; 523 mutex_unlock(&chip->mutex); 524 525 if (!subs->data_endpoint->need_setup) 526 goto unlock; 527 528 if (subs->sync_endpoint) { 529 ret = snd_usb_endpoint_set_params(chip, subs->sync_endpoint); 530 if (ret < 0) 531 goto unlock; 532 } 533 534 ret = snd_usb_endpoint_set_params(chip, subs->data_endpoint); 535 536 unlock: 537 if (ret < 0) 538 close_endpoints(chip, subs); 539 540 snd_usb_unlock_shutdown(chip); 541 stop_pipeline: 542 if (ret < 0) 543 snd_media_stop_pipeline(subs); 544 545 return ret; 546 } 547 548 /* 549 * hw_free callback 550 * 551 * reset the audio format and release the buffer 552 */ 553 static int snd_usb_hw_free(struct snd_pcm_substream *substream) 554 { 555 struct snd_usb_substream *subs = substream->runtime->private_data; 556 struct snd_usb_audio *chip = subs->stream->chip; 557 558 snd_media_stop_pipeline(subs); 559 mutex_lock(&chip->mutex); 560 subs->cur_audiofmt = NULL; 561 mutex_unlock(&chip->mutex); 562 if (!snd_usb_lock_shutdown(chip)) { 563 if (stop_endpoints(subs, false)) 564 sync_pending_stops(subs); 565 close_endpoints(chip, subs); 566 snd_usb_unlock_shutdown(chip); 567 } 568 569 return 0; 570 } 571 572 /* free-wheeling mode? (e.g. dmix) */ 573 static int in_free_wheeling_mode(struct snd_pcm_runtime *runtime) 574 { 575 return runtime->stop_threshold > runtime->buffer_size; 576 } 577 578 /* check whether early start is needed for playback stream */ 579 static int lowlatency_playback_available(struct snd_pcm_runtime *runtime, 580 struct snd_usb_substream *subs) 581 { 582 struct snd_usb_audio *chip = subs->stream->chip; 583 584 if (subs->direction == SNDRV_PCM_STREAM_CAPTURE) 585 return false; 586 /* disabled via module option? */ 587 if (!chip->lowlatency) 588 return false; 589 if (in_free_wheeling_mode(runtime)) 590 return false; 591 /* implicit feedback mode has own operation mode */ 592 if (snd_usb_endpoint_implicit_feedback_sink(subs->data_endpoint)) 593 return false; 594 return true; 595 } 596 597 /* 598 * prepare callback 599 * 600 * only a few subtle things... 601 */ 602 static int snd_usb_pcm_prepare(struct snd_pcm_substream *substream) 603 { 604 struct snd_pcm_runtime *runtime = substream->runtime; 605 struct snd_usb_substream *subs = runtime->private_data; 606 struct snd_usb_audio *chip = subs->stream->chip; 607 int ret; 608 609 ret = snd_usb_lock_shutdown(chip); 610 if (ret < 0) 611 return ret; 612 if (snd_BUG_ON(!subs->data_endpoint)) { 613 ret = -EIO; 614 goto unlock; 615 } 616 617 if (subs->sync_endpoint) { 618 ret = snd_usb_endpoint_prepare(chip, subs->sync_endpoint); 619 if (ret < 0) 620 goto unlock; 621 } 622 623 ret = snd_usb_endpoint_prepare(chip, subs->data_endpoint); 624 if (ret < 0) 625 goto unlock; 626 else if (ret > 0) 627 snd_usb_set_format_quirk(subs, subs->cur_audiofmt); 628 ret = 0; 629 630 /* reset the pointer */ 631 subs->buffer_bytes = frames_to_bytes(runtime, runtime->buffer_size); 632 subs->inflight_bytes = 0; 633 subs->hwptr_done = 0; 634 subs->transfer_done = 0; 635 subs->last_frame_number = 0; 636 subs->period_elapsed_pending = 0; 637 runtime->delay = 0; 638 639 subs->lowlatency_playback = lowlatency_playback_available(runtime, subs); 640 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK && 641 !subs->lowlatency_playback) 642 ret = start_endpoints(subs); 643 644 unlock: 645 snd_usb_unlock_shutdown(chip); 646 return ret; 647 } 648 649 /* 650 * h/w constraints 651 */ 652 653 #ifdef HW_CONST_DEBUG 654 #define hwc_debug(fmt, args...) pr_debug(fmt, ##args) 655 #else 656 #define hwc_debug(fmt, args...) do { } while(0) 657 #endif 658 659 static const struct snd_pcm_hardware snd_usb_hardware = 660 { 661 .info = SNDRV_PCM_INFO_MMAP | 662 SNDRV_PCM_INFO_MMAP_VALID | 663 SNDRV_PCM_INFO_BATCH | 664 SNDRV_PCM_INFO_INTERLEAVED | 665 SNDRV_PCM_INFO_BLOCK_TRANSFER | 666 SNDRV_PCM_INFO_PAUSE, 667 .channels_min = 1, 668 .channels_max = 256, 669 .buffer_bytes_max = INT_MAX, /* limited by BUFFER_TIME later */ 670 .period_bytes_min = 64, 671 .period_bytes_max = INT_MAX, /* limited by PERIOD_TIME later */ 672 .periods_min = 2, 673 .periods_max = 1024, 674 }; 675 676 static int hw_check_valid_format(struct snd_usb_substream *subs, 677 struct snd_pcm_hw_params *params, 678 const struct audioformat *fp) 679 { 680 struct snd_interval *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE); 681 struct snd_interval *ct = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); 682 struct snd_mask *fmts = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT); 683 struct snd_interval *pt = hw_param_interval(params, SNDRV_PCM_HW_PARAM_PERIOD_TIME); 684 struct snd_mask check_fmts; 685 unsigned int ptime; 686 687 /* check the format */ 688 snd_mask_none(&check_fmts); 689 check_fmts.bits[0] = (u32)fp->formats; 690 check_fmts.bits[1] = (u32)(fp->formats >> 32); 691 snd_mask_intersect(&check_fmts, fmts); 692 if (snd_mask_empty(&check_fmts)) { 693 hwc_debug(" > check: no supported format 0x%llx\n", fp->formats); 694 return 0; 695 } 696 /* check the channels */ 697 if (fp->channels < ct->min || fp->channels > ct->max) { 698 hwc_debug(" > check: no valid channels %d (%d/%d)\n", fp->channels, ct->min, ct->max); 699 return 0; 700 } 701 /* check the rate is within the range */ 702 if (fp->rate_min > it->max || (fp->rate_min == it->max && it->openmax)) { 703 hwc_debug(" > check: rate_min %d > max %d\n", fp->rate_min, it->max); 704 return 0; 705 } 706 if (fp->rate_max < it->min || (fp->rate_max == it->min && it->openmin)) { 707 hwc_debug(" > check: rate_max %d < min %d\n", fp->rate_max, it->min); 708 return 0; 709 } 710 /* check whether the period time is >= the data packet interval */ 711 if (subs->speed != USB_SPEED_FULL) { 712 ptime = 125 * (1 << fp->datainterval); 713 if (ptime > pt->max || (ptime == pt->max && pt->openmax)) { 714 hwc_debug(" > check: ptime %u > max %u\n", ptime, pt->max); 715 return 0; 716 } 717 } 718 return 1; 719 } 720 721 static int apply_hw_params_minmax(struct snd_interval *it, unsigned int rmin, 722 unsigned int rmax) 723 { 724 int changed; 725 726 if (rmin > rmax) { 727 hwc_debug(" --> get empty\n"); 728 it->empty = 1; 729 return -EINVAL; 730 } 731 732 changed = 0; 733 if (it->min < rmin) { 734 it->min = rmin; 735 it->openmin = 0; 736 changed = 1; 737 } 738 if (it->max > rmax) { 739 it->max = rmax; 740 it->openmax = 0; 741 changed = 1; 742 } 743 if (snd_interval_checkempty(it)) { 744 it->empty = 1; 745 return -EINVAL; 746 } 747 hwc_debug(" --> (%d, %d) (changed = %d)\n", it->min, it->max, changed); 748 return changed; 749 } 750 751 static int hw_rule_rate(struct snd_pcm_hw_params *params, 752 struct snd_pcm_hw_rule *rule) 753 { 754 struct snd_usb_substream *subs = rule->private; 755 struct snd_usb_audio *chip = subs->stream->chip; 756 const struct audioformat *fp; 757 struct snd_interval *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE); 758 unsigned int rmin, rmax, r; 759 int i; 760 761 hwc_debug("hw_rule_rate: (%d,%d)\n", it->min, it->max); 762 rmin = UINT_MAX; 763 rmax = 0; 764 list_for_each_entry(fp, &subs->fmt_list, list) { 765 if (!hw_check_valid_format(subs, params, fp)) 766 continue; 767 r = snd_usb_endpoint_get_clock_rate(chip, fp->clock); 768 if (r > 0) { 769 if (!snd_interval_test(it, r)) 770 continue; 771 rmin = min(rmin, r); 772 rmax = max(rmax, r); 773 continue; 774 } 775 if (fp->rate_table && fp->nr_rates) { 776 for (i = 0; i < fp->nr_rates; i++) { 777 r = fp->rate_table[i]; 778 if (!snd_interval_test(it, r)) 779 continue; 780 rmin = min(rmin, r); 781 rmax = max(rmax, r); 782 } 783 } else { 784 rmin = min(rmin, fp->rate_min); 785 rmax = max(rmax, fp->rate_max); 786 } 787 } 788 789 return apply_hw_params_minmax(it, rmin, rmax); 790 } 791 792 793 static int hw_rule_channels(struct snd_pcm_hw_params *params, 794 struct snd_pcm_hw_rule *rule) 795 { 796 struct snd_usb_substream *subs = rule->private; 797 const struct audioformat *fp; 798 struct snd_interval *it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); 799 unsigned int rmin, rmax; 800 801 hwc_debug("hw_rule_channels: (%d,%d)\n", it->min, it->max); 802 rmin = UINT_MAX; 803 rmax = 0; 804 list_for_each_entry(fp, &subs->fmt_list, list) { 805 if (!hw_check_valid_format(subs, params, fp)) 806 continue; 807 rmin = min(rmin, fp->channels); 808 rmax = max(rmax, fp->channels); 809 } 810 811 return apply_hw_params_minmax(it, rmin, rmax); 812 } 813 814 static int apply_hw_params_format_bits(struct snd_mask *fmt, u64 fbits) 815 { 816 u32 oldbits[2]; 817 int changed; 818 819 oldbits[0] = fmt->bits[0]; 820 oldbits[1] = fmt->bits[1]; 821 fmt->bits[0] &= (u32)fbits; 822 fmt->bits[1] &= (u32)(fbits >> 32); 823 if (!fmt->bits[0] && !fmt->bits[1]) { 824 hwc_debug(" --> get empty\n"); 825 return -EINVAL; 826 } 827 changed = (oldbits[0] != fmt->bits[0] || oldbits[1] != fmt->bits[1]); 828 hwc_debug(" --> %x:%x (changed = %d)\n", fmt->bits[0], fmt->bits[1], changed); 829 return changed; 830 } 831 832 static int hw_rule_format(struct snd_pcm_hw_params *params, 833 struct snd_pcm_hw_rule *rule) 834 { 835 struct snd_usb_substream *subs = rule->private; 836 const struct audioformat *fp; 837 struct snd_mask *fmt = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT); 838 u64 fbits; 839 840 hwc_debug("hw_rule_format: %x:%x\n", fmt->bits[0], fmt->bits[1]); 841 fbits = 0; 842 list_for_each_entry(fp, &subs->fmt_list, list) { 843 if (!hw_check_valid_format(subs, params, fp)) 844 continue; 845 fbits |= fp->formats; 846 } 847 return apply_hw_params_format_bits(fmt, fbits); 848 } 849 850 static int hw_rule_period_time(struct snd_pcm_hw_params *params, 851 struct snd_pcm_hw_rule *rule) 852 { 853 struct snd_usb_substream *subs = rule->private; 854 const struct audioformat *fp; 855 struct snd_interval *it; 856 unsigned char min_datainterval; 857 unsigned int pmin; 858 859 it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_PERIOD_TIME); 860 hwc_debug("hw_rule_period_time: (%u,%u)\n", it->min, it->max); 861 min_datainterval = 0xff; 862 list_for_each_entry(fp, &subs->fmt_list, list) { 863 if (!hw_check_valid_format(subs, params, fp)) 864 continue; 865 min_datainterval = min(min_datainterval, fp->datainterval); 866 } 867 if (min_datainterval == 0xff) { 868 hwc_debug(" --> get empty\n"); 869 it->empty = 1; 870 return -EINVAL; 871 } 872 pmin = 125 * (1 << min_datainterval); 873 874 return apply_hw_params_minmax(it, pmin, UINT_MAX); 875 } 876 877 /* get the EP or the sync EP for implicit fb when it's already set up */ 878 static const struct snd_usb_endpoint * 879 get_sync_ep_from_substream(struct snd_usb_substream *subs) 880 { 881 struct snd_usb_audio *chip = subs->stream->chip; 882 const struct audioformat *fp; 883 const struct snd_usb_endpoint *ep; 884 885 list_for_each_entry(fp, &subs->fmt_list, list) { 886 ep = snd_usb_get_endpoint(chip, fp->endpoint); 887 if (ep && ep->cur_audiofmt) { 888 /* if EP is already opened solely for this substream, 889 * we still allow us to change the parameter; otherwise 890 * this substream has to follow the existing parameter 891 */ 892 if (ep->cur_audiofmt != subs->cur_audiofmt || ep->opened > 1) 893 return ep; 894 } 895 if (!fp->implicit_fb) 896 continue; 897 /* for the implicit fb, check the sync ep as well */ 898 ep = snd_usb_get_endpoint(chip, fp->sync_ep); 899 if (ep && ep->cur_audiofmt) 900 return ep; 901 } 902 return NULL; 903 } 904 905 /* additional hw constraints for implicit feedback mode */ 906 static int hw_rule_format_implicit_fb(struct snd_pcm_hw_params *params, 907 struct snd_pcm_hw_rule *rule) 908 { 909 struct snd_usb_substream *subs = rule->private; 910 const struct snd_usb_endpoint *ep; 911 struct snd_mask *fmt = hw_param_mask(params, SNDRV_PCM_HW_PARAM_FORMAT); 912 913 ep = get_sync_ep_from_substream(subs); 914 if (!ep) 915 return 0; 916 917 hwc_debug("applying %s\n", __func__); 918 return apply_hw_params_format_bits(fmt, pcm_format_to_bits(ep->cur_format)); 919 } 920 921 static int hw_rule_rate_implicit_fb(struct snd_pcm_hw_params *params, 922 struct snd_pcm_hw_rule *rule) 923 { 924 struct snd_usb_substream *subs = rule->private; 925 const struct snd_usb_endpoint *ep; 926 struct snd_interval *it; 927 928 ep = get_sync_ep_from_substream(subs); 929 if (!ep) 930 return 0; 931 932 hwc_debug("applying %s\n", __func__); 933 it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE); 934 return apply_hw_params_minmax(it, ep->cur_rate, ep->cur_rate); 935 } 936 937 static int hw_rule_period_size_implicit_fb(struct snd_pcm_hw_params *params, 938 struct snd_pcm_hw_rule *rule) 939 { 940 struct snd_usb_substream *subs = rule->private; 941 const struct snd_usb_endpoint *ep; 942 struct snd_interval *it; 943 944 ep = get_sync_ep_from_substream(subs); 945 if (!ep) 946 return 0; 947 948 hwc_debug("applying %s\n", __func__); 949 it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_PERIOD_SIZE); 950 return apply_hw_params_minmax(it, ep->cur_period_frames, 951 ep->cur_period_frames); 952 } 953 954 static int hw_rule_periods_implicit_fb(struct snd_pcm_hw_params *params, 955 struct snd_pcm_hw_rule *rule) 956 { 957 struct snd_usb_substream *subs = rule->private; 958 const struct snd_usb_endpoint *ep; 959 struct snd_interval *it; 960 961 ep = get_sync_ep_from_substream(subs); 962 if (!ep) 963 return 0; 964 965 hwc_debug("applying %s\n", __func__); 966 it = hw_param_interval(params, SNDRV_PCM_HW_PARAM_PERIODS); 967 return apply_hw_params_minmax(it, ep->cur_buffer_periods, 968 ep->cur_buffer_periods); 969 } 970 971 /* 972 * set up the runtime hardware information. 973 */ 974 975 static int setup_hw_info(struct snd_pcm_runtime *runtime, struct snd_usb_substream *subs) 976 { 977 const struct audioformat *fp; 978 unsigned int pt, ptmin; 979 int param_period_time_if_needed = -1; 980 int err; 981 982 runtime->hw.formats = subs->formats; 983 984 runtime->hw.rate_min = 0x7fffffff; 985 runtime->hw.rate_max = 0; 986 runtime->hw.channels_min = 256; 987 runtime->hw.channels_max = 0; 988 runtime->hw.rates = 0; 989 ptmin = UINT_MAX; 990 /* check min/max rates and channels */ 991 list_for_each_entry(fp, &subs->fmt_list, list) { 992 runtime->hw.rates |= fp->rates; 993 if (runtime->hw.rate_min > fp->rate_min) 994 runtime->hw.rate_min = fp->rate_min; 995 if (runtime->hw.rate_max < fp->rate_max) 996 runtime->hw.rate_max = fp->rate_max; 997 if (runtime->hw.channels_min > fp->channels) 998 runtime->hw.channels_min = fp->channels; 999 if (runtime->hw.channels_max < fp->channels) 1000 runtime->hw.channels_max = fp->channels; 1001 if (fp->fmt_type == UAC_FORMAT_TYPE_II && fp->frame_size > 0) { 1002 /* FIXME: there might be more than one audio formats... */ 1003 runtime->hw.period_bytes_min = runtime->hw.period_bytes_max = 1004 fp->frame_size; 1005 } 1006 pt = 125 * (1 << fp->datainterval); 1007 ptmin = min(ptmin, pt); 1008 } 1009 1010 param_period_time_if_needed = SNDRV_PCM_HW_PARAM_PERIOD_TIME; 1011 if (subs->speed == USB_SPEED_FULL) 1012 /* full speed devices have fixed data packet interval */ 1013 ptmin = 1000; 1014 if (ptmin == 1000) 1015 /* if period time doesn't go below 1 ms, no rules needed */ 1016 param_period_time_if_needed = -1; 1017 1018 err = snd_pcm_hw_constraint_minmax(runtime, 1019 SNDRV_PCM_HW_PARAM_PERIOD_TIME, 1020 ptmin, UINT_MAX); 1021 if (err < 0) 1022 return err; 1023 1024 err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, 1025 hw_rule_rate, subs, 1026 SNDRV_PCM_HW_PARAM_RATE, 1027 SNDRV_PCM_HW_PARAM_FORMAT, 1028 SNDRV_PCM_HW_PARAM_CHANNELS, 1029 param_period_time_if_needed, 1030 -1); 1031 if (err < 0) 1032 return err; 1033 1034 err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, 1035 hw_rule_channels, subs, 1036 SNDRV_PCM_HW_PARAM_CHANNELS, 1037 SNDRV_PCM_HW_PARAM_FORMAT, 1038 SNDRV_PCM_HW_PARAM_RATE, 1039 param_period_time_if_needed, 1040 -1); 1041 if (err < 0) 1042 return err; 1043 err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_FORMAT, 1044 hw_rule_format, subs, 1045 SNDRV_PCM_HW_PARAM_FORMAT, 1046 SNDRV_PCM_HW_PARAM_RATE, 1047 SNDRV_PCM_HW_PARAM_CHANNELS, 1048 param_period_time_if_needed, 1049 -1); 1050 if (err < 0) 1051 return err; 1052 if (param_period_time_if_needed >= 0) { 1053 err = snd_pcm_hw_rule_add(runtime, 0, 1054 SNDRV_PCM_HW_PARAM_PERIOD_TIME, 1055 hw_rule_period_time, subs, 1056 SNDRV_PCM_HW_PARAM_FORMAT, 1057 SNDRV_PCM_HW_PARAM_CHANNELS, 1058 SNDRV_PCM_HW_PARAM_RATE, 1059 -1); 1060 if (err < 0) 1061 return err; 1062 } 1063 1064 /* set max period and buffer sizes for 1 and 2 seconds, respectively */ 1065 err = snd_pcm_hw_constraint_minmax(runtime, 1066 SNDRV_PCM_HW_PARAM_PERIOD_TIME, 1067 0, 1000000); 1068 if (err < 0) 1069 return err; 1070 err = snd_pcm_hw_constraint_minmax(runtime, 1071 SNDRV_PCM_HW_PARAM_BUFFER_TIME, 1072 0, 2000000); 1073 if (err < 0) 1074 return err; 1075 1076 /* additional hw constraints for implicit fb */ 1077 err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_FORMAT, 1078 hw_rule_format_implicit_fb, subs, 1079 SNDRV_PCM_HW_PARAM_FORMAT, -1); 1080 if (err < 0) 1081 return err; 1082 err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, 1083 hw_rule_rate_implicit_fb, subs, 1084 SNDRV_PCM_HW_PARAM_RATE, -1); 1085 if (err < 0) 1086 return err; 1087 err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_SIZE, 1088 hw_rule_period_size_implicit_fb, subs, 1089 SNDRV_PCM_HW_PARAM_PERIOD_SIZE, -1); 1090 if (err < 0) 1091 return err; 1092 err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_PERIODS, 1093 hw_rule_periods_implicit_fb, subs, 1094 SNDRV_PCM_HW_PARAM_PERIODS, -1); 1095 if (err < 0) 1096 return err; 1097 1098 list_for_each_entry(fp, &subs->fmt_list, list) { 1099 if (fp->implicit_fb) { 1100 runtime->hw.info |= SNDRV_PCM_INFO_JOINT_DUPLEX; 1101 break; 1102 } 1103 } 1104 1105 return 0; 1106 } 1107 1108 static int snd_usb_pcm_open(struct snd_pcm_substream *substream) 1109 { 1110 int direction = substream->stream; 1111 struct snd_usb_stream *as = snd_pcm_substream_chip(substream); 1112 struct snd_pcm_runtime *runtime = substream->runtime; 1113 struct snd_usb_substream *subs = &as->substream[direction]; 1114 int ret; 1115 1116 runtime->hw = snd_usb_hardware; 1117 /* need an explicit sync to catch applptr update in low-latency mode */ 1118 if (direction == SNDRV_PCM_STREAM_PLAYBACK && 1119 as->chip->lowlatency) 1120 runtime->hw.info |= SNDRV_PCM_INFO_SYNC_APPLPTR; 1121 runtime->private_data = subs; 1122 subs->pcm_substream = substream; 1123 /* runtime PM is also done there */ 1124 1125 /* initialize DSD/DOP context */ 1126 subs->dsd_dop.byte_idx = 0; 1127 subs->dsd_dop.channel = 0; 1128 subs->dsd_dop.marker = 1; 1129 1130 ret = setup_hw_info(runtime, subs); 1131 if (ret < 0) 1132 return ret; 1133 ret = snd_usb_autoresume(subs->stream->chip); 1134 if (ret < 0) 1135 return ret; 1136 ret = snd_media_stream_init(subs, as->pcm, direction); 1137 if (ret < 0) 1138 snd_usb_autosuspend(subs->stream->chip); 1139 return ret; 1140 } 1141 1142 static int snd_usb_pcm_close(struct snd_pcm_substream *substream) 1143 { 1144 int direction = substream->stream; 1145 struct snd_usb_stream *as = snd_pcm_substream_chip(substream); 1146 struct snd_usb_substream *subs = &as->substream[direction]; 1147 int ret; 1148 1149 snd_media_stop_pipeline(subs); 1150 1151 if (!snd_usb_lock_shutdown(subs->stream->chip)) { 1152 ret = snd_usb_pcm_change_state(subs, UAC3_PD_STATE_D1); 1153 snd_usb_unlock_shutdown(subs->stream->chip); 1154 if (ret < 0) 1155 return ret; 1156 } 1157 1158 subs->pcm_substream = NULL; 1159 snd_usb_autosuspend(subs->stream->chip); 1160 1161 return 0; 1162 } 1163 1164 /* Since a URB can handle only a single linear buffer, we must use double 1165 * buffering when the data to be transferred overflows the buffer boundary. 1166 * To avoid inconsistencies when updating hwptr_done, we use double buffering 1167 * for all URBs. 1168 */ 1169 static void retire_capture_urb(struct snd_usb_substream *subs, 1170 struct urb *urb) 1171 { 1172 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; 1173 unsigned int stride, frames, bytes, oldptr; 1174 int i, period_elapsed = 0; 1175 unsigned long flags; 1176 unsigned char *cp; 1177 int current_frame_number; 1178 1179 /* read frame number here, update pointer in critical section */ 1180 current_frame_number = usb_get_current_frame_number(subs->dev); 1181 1182 stride = runtime->frame_bits >> 3; 1183 1184 for (i = 0; i < urb->number_of_packets; i++) { 1185 cp = (unsigned char *)urb->transfer_buffer + urb->iso_frame_desc[i].offset + subs->pkt_offset_adj; 1186 if (urb->iso_frame_desc[i].status && printk_ratelimit()) { 1187 dev_dbg(&subs->dev->dev, "frame %d active: %d\n", 1188 i, urb->iso_frame_desc[i].status); 1189 // continue; 1190 } 1191 bytes = urb->iso_frame_desc[i].actual_length; 1192 if (subs->stream_offset_adj > 0) { 1193 unsigned int adj = min(subs->stream_offset_adj, bytes); 1194 cp += adj; 1195 bytes -= adj; 1196 subs->stream_offset_adj -= adj; 1197 } 1198 frames = bytes / stride; 1199 if (!subs->txfr_quirk) 1200 bytes = frames * stride; 1201 if (bytes % (runtime->sample_bits >> 3) != 0) { 1202 int oldbytes = bytes; 1203 bytes = frames * stride; 1204 dev_warn_ratelimited(&subs->dev->dev, 1205 "Corrected urb data len. %d->%d\n", 1206 oldbytes, bytes); 1207 } 1208 /* update the current pointer */ 1209 spin_lock_irqsave(&subs->lock, flags); 1210 oldptr = subs->hwptr_done; 1211 subs->hwptr_done += bytes; 1212 if (subs->hwptr_done >= subs->buffer_bytes) 1213 subs->hwptr_done -= subs->buffer_bytes; 1214 frames = (bytes + (oldptr % stride)) / stride; 1215 subs->transfer_done += frames; 1216 if (subs->transfer_done >= runtime->period_size) { 1217 subs->transfer_done -= runtime->period_size; 1218 period_elapsed = 1; 1219 } 1220 1221 /* realign last_frame_number */ 1222 subs->last_frame_number = current_frame_number; 1223 1224 spin_unlock_irqrestore(&subs->lock, flags); 1225 /* copy a data chunk */ 1226 if (oldptr + bytes > subs->buffer_bytes) { 1227 unsigned int bytes1 = subs->buffer_bytes - oldptr; 1228 1229 memcpy(runtime->dma_area + oldptr, cp, bytes1); 1230 memcpy(runtime->dma_area, cp + bytes1, bytes - bytes1); 1231 } else { 1232 memcpy(runtime->dma_area + oldptr, cp, bytes); 1233 } 1234 } 1235 1236 if (period_elapsed) 1237 snd_pcm_period_elapsed(subs->pcm_substream); 1238 } 1239 1240 static void urb_ctx_queue_advance(struct snd_usb_substream *subs, 1241 struct urb *urb, unsigned int bytes) 1242 { 1243 struct snd_urb_ctx *ctx = urb->context; 1244 1245 ctx->queued += bytes; 1246 subs->inflight_bytes += bytes; 1247 subs->hwptr_done += bytes; 1248 if (subs->hwptr_done >= subs->buffer_bytes) 1249 subs->hwptr_done -= subs->buffer_bytes; 1250 } 1251 1252 static inline void fill_playback_urb_dsd_dop(struct snd_usb_substream *subs, 1253 struct urb *urb, unsigned int bytes) 1254 { 1255 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; 1256 unsigned int dst_idx = 0; 1257 unsigned int src_idx = subs->hwptr_done; 1258 unsigned int wrap = subs->buffer_bytes; 1259 u8 *dst = urb->transfer_buffer; 1260 u8 *src = runtime->dma_area; 1261 static const u8 marker[] = { 0x05, 0xfa }; 1262 unsigned int queued = 0; 1263 1264 /* 1265 * The DSP DOP format defines a way to transport DSD samples over 1266 * normal PCM data endpoints. It requires stuffing of marker bytes 1267 * (0x05 and 0xfa, alternating per sample frame), and then expects 1268 * 2 additional bytes of actual payload. The whole frame is stored 1269 * LSB. 1270 * 1271 * Hence, for a stereo transport, the buffer layout looks like this, 1272 * where L refers to left channel samples and R to right. 1273 * 1274 * L1 L2 0x05 R1 R2 0x05 L3 L4 0xfa R3 R4 0xfa 1275 * L5 L6 0x05 R5 R6 0x05 L7 L8 0xfa R7 R8 0xfa 1276 * ..... 1277 * 1278 */ 1279 1280 while (bytes--) { 1281 if (++subs->dsd_dop.byte_idx == 3) { 1282 /* frame boundary? */ 1283 dst[dst_idx++] = marker[subs->dsd_dop.marker]; 1284 src_idx += 2; 1285 subs->dsd_dop.byte_idx = 0; 1286 1287 if (++subs->dsd_dop.channel % runtime->channels == 0) { 1288 /* alternate the marker */ 1289 subs->dsd_dop.marker++; 1290 subs->dsd_dop.marker %= ARRAY_SIZE(marker); 1291 subs->dsd_dop.channel = 0; 1292 } 1293 } else { 1294 /* stuff the DSD payload */ 1295 int idx = (src_idx + subs->dsd_dop.byte_idx - 1) % wrap; 1296 1297 if (subs->cur_audiofmt->dsd_bitrev) 1298 dst[dst_idx++] = bitrev8(src[idx]); 1299 else 1300 dst[dst_idx++] = src[idx]; 1301 queued++; 1302 } 1303 } 1304 1305 urb_ctx_queue_advance(subs, urb, queued); 1306 } 1307 1308 /* copy bit-reversed bytes onto transfer buffer */ 1309 static void fill_playback_urb_dsd_bitrev(struct snd_usb_substream *subs, 1310 struct urb *urb, unsigned int bytes) 1311 { 1312 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; 1313 const u8 *src = runtime->dma_area; 1314 u8 *buf = urb->transfer_buffer; 1315 int i, ofs = subs->hwptr_done; 1316 1317 for (i = 0; i < bytes; i++) { 1318 *buf++ = bitrev8(src[ofs]); 1319 if (++ofs >= subs->buffer_bytes) 1320 ofs = 0; 1321 } 1322 1323 urb_ctx_queue_advance(subs, urb, bytes); 1324 } 1325 1326 static void copy_to_urb(struct snd_usb_substream *subs, struct urb *urb, 1327 int offset, int stride, unsigned int bytes) 1328 { 1329 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; 1330 1331 if (subs->hwptr_done + bytes > subs->buffer_bytes) { 1332 /* err, the transferred area goes over buffer boundary. */ 1333 unsigned int bytes1 = subs->buffer_bytes - subs->hwptr_done; 1334 1335 memcpy(urb->transfer_buffer + offset, 1336 runtime->dma_area + subs->hwptr_done, bytes1); 1337 memcpy(urb->transfer_buffer + offset + bytes1, 1338 runtime->dma_area, bytes - bytes1); 1339 } else { 1340 memcpy(urb->transfer_buffer + offset, 1341 runtime->dma_area + subs->hwptr_done, bytes); 1342 } 1343 1344 urb_ctx_queue_advance(subs, urb, bytes); 1345 } 1346 1347 static unsigned int copy_to_urb_quirk(struct snd_usb_substream *subs, 1348 struct urb *urb, int stride, 1349 unsigned int bytes) 1350 { 1351 __le32 packet_length; 1352 int i; 1353 1354 /* Put __le32 length descriptor at start of each packet. */ 1355 for (i = 0; i < urb->number_of_packets; i++) { 1356 unsigned int length = urb->iso_frame_desc[i].length; 1357 unsigned int offset = urb->iso_frame_desc[i].offset; 1358 1359 packet_length = cpu_to_le32(length); 1360 offset += i * sizeof(packet_length); 1361 urb->iso_frame_desc[i].offset = offset; 1362 urb->iso_frame_desc[i].length += sizeof(packet_length); 1363 memcpy(urb->transfer_buffer + offset, 1364 &packet_length, sizeof(packet_length)); 1365 copy_to_urb(subs, urb, offset + sizeof(packet_length), 1366 stride, length); 1367 } 1368 /* Adjust transfer size accordingly. */ 1369 bytes += urb->number_of_packets * sizeof(packet_length); 1370 return bytes; 1371 } 1372 1373 static int prepare_playback_urb(struct snd_usb_substream *subs, 1374 struct urb *urb, 1375 bool in_stream_lock) 1376 { 1377 struct snd_pcm_runtime *runtime = subs->pcm_substream->runtime; 1378 struct snd_usb_endpoint *ep = subs->data_endpoint; 1379 struct snd_urb_ctx *ctx = urb->context; 1380 unsigned int frames, bytes; 1381 int counts; 1382 unsigned int transfer_done, frame_limit, avail = 0; 1383 int i, stride, period_elapsed = 0; 1384 unsigned long flags; 1385 int err = 0; 1386 1387 stride = ep->stride; 1388 1389 frames = 0; 1390 ctx->queued = 0; 1391 urb->number_of_packets = 0; 1392 1393 spin_lock_irqsave(&subs->lock, flags); 1394 frame_limit = subs->frame_limit + ep->max_urb_frames; 1395 transfer_done = subs->transfer_done; 1396 1397 if (subs->lowlatency_playback && 1398 runtime->state != SNDRV_PCM_STATE_DRAINING) { 1399 unsigned int hwptr = subs->hwptr_done / stride; 1400 1401 /* calculate the byte offset-in-buffer of the appl_ptr */ 1402 avail = (runtime->control->appl_ptr - runtime->hw_ptr_base) 1403 % runtime->buffer_size; 1404 if (avail <= hwptr) 1405 avail += runtime->buffer_size; 1406 avail -= hwptr; 1407 } 1408 1409 for (i = 0; i < ctx->packets; i++) { 1410 counts = snd_usb_endpoint_next_packet_size(ep, ctx, i, avail); 1411 if (counts < 0) 1412 break; 1413 /* set up descriptor */ 1414 urb->iso_frame_desc[i].offset = frames * stride; 1415 urb->iso_frame_desc[i].length = counts * stride; 1416 frames += counts; 1417 avail -= counts; 1418 urb->number_of_packets++; 1419 transfer_done += counts; 1420 if (transfer_done >= runtime->period_size) { 1421 transfer_done -= runtime->period_size; 1422 frame_limit = 0; 1423 period_elapsed = 1; 1424 if (subs->fmt_type == UAC_FORMAT_TYPE_II) { 1425 if (transfer_done > 0) { 1426 /* FIXME: fill-max mode is not 1427 * supported yet */ 1428 frames -= transfer_done; 1429 counts -= transfer_done; 1430 urb->iso_frame_desc[i].length = 1431 counts * stride; 1432 transfer_done = 0; 1433 } 1434 i++; 1435 if (i < ctx->packets) { 1436 /* add a transfer delimiter */ 1437 urb->iso_frame_desc[i].offset = 1438 frames * stride; 1439 urb->iso_frame_desc[i].length = 0; 1440 urb->number_of_packets++; 1441 } 1442 break; 1443 } 1444 } 1445 /* finish at the period boundary or after enough frames */ 1446 if ((period_elapsed || transfer_done >= frame_limit) && 1447 !snd_usb_endpoint_implicit_feedback_sink(ep)) 1448 break; 1449 } 1450 1451 if (!frames) { 1452 err = -EAGAIN; 1453 goto unlock; 1454 } 1455 1456 bytes = frames * stride; 1457 subs->transfer_done = transfer_done; 1458 subs->frame_limit = frame_limit; 1459 if (unlikely(ep->cur_format == SNDRV_PCM_FORMAT_DSD_U16_LE && 1460 subs->cur_audiofmt->dsd_dop)) { 1461 fill_playback_urb_dsd_dop(subs, urb, bytes); 1462 } else if (unlikely(ep->cur_format == SNDRV_PCM_FORMAT_DSD_U8 && 1463 subs->cur_audiofmt->dsd_bitrev)) { 1464 fill_playback_urb_dsd_bitrev(subs, urb, bytes); 1465 } else { 1466 /* usual PCM */ 1467 if (!subs->tx_length_quirk) 1468 copy_to_urb(subs, urb, 0, stride, bytes); 1469 else 1470 bytes = copy_to_urb_quirk(subs, urb, stride, bytes); 1471 /* bytes is now amount of outgoing data */ 1472 } 1473 1474 subs->last_frame_number = usb_get_current_frame_number(subs->dev); 1475 1476 if (subs->trigger_tstamp_pending_update) { 1477 /* this is the first actual URB submitted, 1478 * update trigger timestamp to reflect actual start time 1479 */ 1480 snd_pcm_gettime(runtime, &runtime->trigger_tstamp); 1481 subs->trigger_tstamp_pending_update = false; 1482 } 1483 1484 if (period_elapsed && !subs->running && subs->lowlatency_playback) { 1485 subs->period_elapsed_pending = 1; 1486 period_elapsed = 0; 1487 } 1488 1489 unlock: 1490 spin_unlock_irqrestore(&subs->lock, flags); 1491 if (err < 0) 1492 return err; 1493 urb->transfer_buffer_length = bytes; 1494 if (period_elapsed) { 1495 if (in_stream_lock) 1496 snd_pcm_period_elapsed_under_stream_lock(subs->pcm_substream); 1497 else 1498 snd_pcm_period_elapsed(subs->pcm_substream); 1499 } 1500 return 0; 1501 } 1502 1503 /* 1504 * process after playback data complete 1505 * - decrease the delay count again 1506 */ 1507 static void retire_playback_urb(struct snd_usb_substream *subs, 1508 struct urb *urb) 1509 { 1510 unsigned long flags; 1511 struct snd_urb_ctx *ctx = urb->context; 1512 bool period_elapsed = false; 1513 1514 spin_lock_irqsave(&subs->lock, flags); 1515 if (ctx->queued) { 1516 if (subs->inflight_bytes >= ctx->queued) 1517 subs->inflight_bytes -= ctx->queued; 1518 else 1519 subs->inflight_bytes = 0; 1520 } 1521 1522 subs->last_frame_number = usb_get_current_frame_number(subs->dev); 1523 if (subs->running) { 1524 period_elapsed = subs->period_elapsed_pending; 1525 subs->period_elapsed_pending = 0; 1526 } 1527 spin_unlock_irqrestore(&subs->lock, flags); 1528 if (period_elapsed) 1529 snd_pcm_period_elapsed(subs->pcm_substream); 1530 } 1531 1532 /* PCM ack callback for the playback stream; 1533 * this plays a role only when the stream is running in low-latency mode. 1534 */ 1535 static int snd_usb_pcm_playback_ack(struct snd_pcm_substream *substream) 1536 { 1537 struct snd_usb_substream *subs = substream->runtime->private_data; 1538 struct snd_usb_endpoint *ep; 1539 1540 if (!subs->lowlatency_playback || !subs->running) 1541 return 0; 1542 ep = subs->data_endpoint; 1543 if (!ep) 1544 return 0; 1545 /* When no more in-flight URBs available, try to process the pending 1546 * outputs here 1547 */ 1548 if (!ep->active_mask) 1549 snd_usb_queue_pending_output_urbs(ep, true); 1550 return 0; 1551 } 1552 1553 static int snd_usb_substream_playback_trigger(struct snd_pcm_substream *substream, 1554 int cmd) 1555 { 1556 struct snd_usb_substream *subs = substream->runtime->private_data; 1557 int err; 1558 1559 switch (cmd) { 1560 case SNDRV_PCM_TRIGGER_START: 1561 subs->trigger_tstamp_pending_update = true; 1562 fallthrough; 1563 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: 1564 snd_usb_endpoint_set_callback(subs->data_endpoint, 1565 prepare_playback_urb, 1566 retire_playback_urb, 1567 subs); 1568 if (subs->lowlatency_playback && 1569 cmd == SNDRV_PCM_TRIGGER_START) { 1570 if (in_free_wheeling_mode(substream->runtime)) 1571 subs->lowlatency_playback = false; 1572 err = start_endpoints(subs); 1573 if (err < 0) { 1574 snd_usb_endpoint_set_callback(subs->data_endpoint, 1575 NULL, NULL, NULL); 1576 return err; 1577 } 1578 } 1579 subs->running = 1; 1580 dev_dbg(&subs->dev->dev, "%d:%d Start Playback PCM\n", 1581 subs->cur_audiofmt->iface, 1582 subs->cur_audiofmt->altsetting); 1583 return 0; 1584 case SNDRV_PCM_TRIGGER_SUSPEND: 1585 case SNDRV_PCM_TRIGGER_STOP: 1586 stop_endpoints(subs, substream->runtime->state == SNDRV_PCM_STATE_DRAINING); 1587 snd_usb_endpoint_set_callback(subs->data_endpoint, 1588 NULL, NULL, NULL); 1589 subs->running = 0; 1590 dev_dbg(&subs->dev->dev, "%d:%d Stop Playback PCM\n", 1591 subs->cur_audiofmt->iface, 1592 subs->cur_audiofmt->altsetting); 1593 return 0; 1594 case SNDRV_PCM_TRIGGER_PAUSE_PUSH: 1595 /* keep retire_data_urb for delay calculation */ 1596 snd_usb_endpoint_set_callback(subs->data_endpoint, 1597 NULL, 1598 retire_playback_urb, 1599 subs); 1600 subs->running = 0; 1601 dev_dbg(&subs->dev->dev, "%d:%d Pause Playback PCM\n", 1602 subs->cur_audiofmt->iface, 1603 subs->cur_audiofmt->altsetting); 1604 return 0; 1605 } 1606 1607 return -EINVAL; 1608 } 1609 1610 static int snd_usb_substream_capture_trigger(struct snd_pcm_substream *substream, 1611 int cmd) 1612 { 1613 int err; 1614 struct snd_usb_substream *subs = substream->runtime->private_data; 1615 1616 switch (cmd) { 1617 case SNDRV_PCM_TRIGGER_START: 1618 err = start_endpoints(subs); 1619 if (err < 0) 1620 return err; 1621 fallthrough; 1622 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: 1623 snd_usb_endpoint_set_callback(subs->data_endpoint, 1624 NULL, retire_capture_urb, 1625 subs); 1626 subs->last_frame_number = usb_get_current_frame_number(subs->dev); 1627 subs->running = 1; 1628 dev_dbg(&subs->dev->dev, "%d:%d Start Capture PCM\n", 1629 subs->cur_audiofmt->iface, 1630 subs->cur_audiofmt->altsetting); 1631 return 0; 1632 case SNDRV_PCM_TRIGGER_SUSPEND: 1633 case SNDRV_PCM_TRIGGER_STOP: 1634 stop_endpoints(subs, false); 1635 fallthrough; 1636 case SNDRV_PCM_TRIGGER_PAUSE_PUSH: 1637 snd_usb_endpoint_set_callback(subs->data_endpoint, 1638 NULL, NULL, NULL); 1639 subs->running = 0; 1640 dev_dbg(&subs->dev->dev, "%d:%d Stop Capture PCM\n", 1641 subs->cur_audiofmt->iface, 1642 subs->cur_audiofmt->altsetting); 1643 return 0; 1644 } 1645 1646 return -EINVAL; 1647 } 1648 1649 static const struct snd_pcm_ops snd_usb_playback_ops = { 1650 .open = snd_usb_pcm_open, 1651 .close = snd_usb_pcm_close, 1652 .hw_params = snd_usb_hw_params, 1653 .hw_free = snd_usb_hw_free, 1654 .prepare = snd_usb_pcm_prepare, 1655 .trigger = snd_usb_substream_playback_trigger, 1656 .sync_stop = snd_usb_pcm_sync_stop, 1657 .pointer = snd_usb_pcm_pointer, 1658 .ack = snd_usb_pcm_playback_ack, 1659 }; 1660 1661 static const struct snd_pcm_ops snd_usb_capture_ops = { 1662 .open = snd_usb_pcm_open, 1663 .close = snd_usb_pcm_close, 1664 .hw_params = snd_usb_hw_params, 1665 .hw_free = snd_usb_hw_free, 1666 .prepare = snd_usb_pcm_prepare, 1667 .trigger = snd_usb_substream_capture_trigger, 1668 .sync_stop = snd_usb_pcm_sync_stop, 1669 .pointer = snd_usb_pcm_pointer, 1670 }; 1671 1672 void snd_usb_set_pcm_ops(struct snd_pcm *pcm, int stream) 1673 { 1674 const struct snd_pcm_ops *ops; 1675 1676 ops = stream == SNDRV_PCM_STREAM_PLAYBACK ? 1677 &snd_usb_playback_ops : &snd_usb_capture_ops; 1678 snd_pcm_set_ops(pcm, stream, ops); 1679 } 1680 1681 void snd_usb_preallocate_buffer(struct snd_usb_substream *subs) 1682 { 1683 struct snd_pcm *pcm = subs->stream->pcm; 1684 struct snd_pcm_substream *s = pcm->streams[subs->direction].substream; 1685 struct device *dev = subs->dev->bus->sysdev; 1686 1687 if (snd_usb_use_vmalloc) 1688 snd_pcm_set_managed_buffer(s, SNDRV_DMA_TYPE_VMALLOC, 1689 NULL, 0, 0); 1690 else 1691 snd_pcm_set_managed_buffer(s, SNDRV_DMA_TYPE_DEV_SG, 1692 dev, 64*1024, 512*1024); 1693 } 1694