Lines Matching refs:ep

77 		usb_free_coherent(u->ep->chip->dev, u->buffer_size,  in release_urb_ctx()
117 int snd_usb_endpoint_implicit_feedback_sink(struct snd_usb_endpoint *ep) in snd_usb_endpoint_implicit_feedback_sink() argument
119 return ep->sync_master && in snd_usb_endpoint_implicit_feedback_sink()
120 ep->sync_master->type == SND_USB_ENDPOINT_TYPE_DATA && in snd_usb_endpoint_implicit_feedback_sink()
121 ep->type == SND_USB_ENDPOINT_TYPE_DATA && in snd_usb_endpoint_implicit_feedback_sink()
122 usb_pipeout(ep->pipe); in snd_usb_endpoint_implicit_feedback_sink()
132 int snd_usb_endpoint_slave_next_packet_size(struct snd_usb_endpoint *ep) in snd_usb_endpoint_slave_next_packet_size() argument
137 if (ep->fill_max) in snd_usb_endpoint_slave_next_packet_size()
138 return ep->maxframesize; in snd_usb_endpoint_slave_next_packet_size()
140 spin_lock_irqsave(&ep->lock, flags); in snd_usb_endpoint_slave_next_packet_size()
141 ep->phase = (ep->phase & 0xffff) in snd_usb_endpoint_slave_next_packet_size()
142 + (ep->freqm << ep->datainterval); in snd_usb_endpoint_slave_next_packet_size()
143 ret = min(ep->phase >> 16, ep->maxframesize); in snd_usb_endpoint_slave_next_packet_size()
144 spin_unlock_irqrestore(&ep->lock, flags); in snd_usb_endpoint_slave_next_packet_size()
154 int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep) in snd_usb_endpoint_next_packet_size() argument
158 if (ep->fill_max) in snd_usb_endpoint_next_packet_size()
159 return ep->maxframesize; in snd_usb_endpoint_next_packet_size()
161 ep->sample_accum += ep->sample_rem; in snd_usb_endpoint_next_packet_size()
162 if (ep->sample_accum >= ep->pps) { in snd_usb_endpoint_next_packet_size()
163 ep->sample_accum -= ep->pps; in snd_usb_endpoint_next_packet_size()
164 ret = ep->packsize[1]; in snd_usb_endpoint_next_packet_size()
166 ret = ep->packsize[0]; in snd_usb_endpoint_next_packet_size()
172 static void retire_outbound_urb(struct snd_usb_endpoint *ep, in retire_outbound_urb() argument
175 if (ep->retire_data_urb) in retire_outbound_urb()
176 ep->retire_data_urb(ep->data_subs, urb_ctx->urb); in retire_outbound_urb()
179 static void retire_inbound_urb(struct snd_usb_endpoint *ep, in retire_inbound_urb() argument
184 if (unlikely(ep->skip_packets > 0)) { in retire_inbound_urb()
185 ep->skip_packets--; in retire_inbound_urb()
189 if (ep->sync_slave) in retire_inbound_urb()
190 snd_usb_handle_sync_urb(ep->sync_slave, ep, urb); in retire_inbound_urb()
192 if (ep->retire_data_urb) in retire_inbound_urb()
193 ep->retire_data_urb(ep->data_subs, urb); in retire_inbound_urb()
196 static void prepare_silent_urb(struct snd_usb_endpoint *ep, in prepare_silent_urb() argument
206 if (ep->chip->tx_length_quirk) in prepare_silent_urb()
216 else if (ep->sync_master) in prepare_silent_urb()
217 counts = snd_usb_endpoint_slave_next_packet_size(ep); in prepare_silent_urb()
219 counts = snd_usb_endpoint_next_packet_size(ep); in prepare_silent_urb()
221 length = counts * ep->stride; /* number of silent bytes */ in prepare_silent_urb()
222 offset = offs * ep->stride + extra * i; in prepare_silent_urb()
231 ep->silence_value, length); in prepare_silent_urb()
236 urb->transfer_buffer_length = offs * ep->stride + ctx->packets * extra; in prepare_silent_urb()
242 static void prepare_outbound_urb(struct snd_usb_endpoint *ep, in prepare_outbound_urb() argument
248 urb->dev = ep->chip->dev; /* we need to set this at each time */ in prepare_outbound_urb()
250 switch (ep->type) { in prepare_outbound_urb()
252 if (ep->prepare_data_urb) { in prepare_outbound_urb()
253 ep->prepare_data_urb(ep->data_subs, urb); in prepare_outbound_urb()
256 prepare_silent_urb(ep, ctx); in prepare_outbound_urb()
261 if (snd_usb_get_speed(ep->chip->dev) >= USB_SPEED_HIGH) { in prepare_outbound_urb()
268 cp[0] = ep->freqn; in prepare_outbound_urb()
269 cp[1] = ep->freqn >> 8; in prepare_outbound_urb()
270 cp[2] = ep->freqn >> 16; in prepare_outbound_urb()
271 cp[3] = ep->freqn >> 24; in prepare_outbound_urb()
279 cp[0] = ep->freqn >> 2; in prepare_outbound_urb()
280 cp[1] = ep->freqn >> 10; in prepare_outbound_urb()
281 cp[2] = ep->freqn >> 18; in prepare_outbound_urb()
291 static inline void prepare_inbound_urb(struct snd_usb_endpoint *ep, in prepare_inbound_urb() argument
297 urb->dev = ep->chip->dev; /* we need to set this at each time */ in prepare_inbound_urb()
299 switch (ep->type) { in prepare_inbound_urb()
304 urb->iso_frame_desc[i].length = ep->curpacksize; in prepare_inbound_urb()
305 offs += ep->curpacksize; in prepare_inbound_urb()
313 urb->iso_frame_desc[0].length = min(4u, ep->syncmaxsize); in prepare_inbound_urb()
333 static void queue_pending_output_urbs(struct snd_usb_endpoint *ep) in queue_pending_output_urbs() argument
335 while (test_bit(EP_FLAG_RUNNING, &ep->flags)) { in queue_pending_output_urbs()
342 spin_lock_irqsave(&ep->lock, flags); in queue_pending_output_urbs()
343 if (ep->next_packet_read_pos != ep->next_packet_write_pos) { in queue_pending_output_urbs()
344 packet = ep->next_packet + ep->next_packet_read_pos; in queue_pending_output_urbs()
345 ep->next_packet_read_pos++; in queue_pending_output_urbs()
346 ep->next_packet_read_pos %= MAX_URBS; in queue_pending_output_urbs()
349 if (!list_empty(&ep->ready_playback_urbs)) { in queue_pending_output_urbs()
350 ctx = list_first_entry(&ep->ready_playback_urbs, in queue_pending_output_urbs()
355 spin_unlock_irqrestore(&ep->lock, flags); in queue_pending_output_urbs()
365 prepare_outbound_urb(ep, ctx); in queue_pending_output_urbs()
369 usb_audio_err(ep->chip, in queue_pending_output_urbs()
373 set_bit(ctx->index, &ep->active_mask); in queue_pending_output_urbs()
383 struct snd_usb_endpoint *ep = ctx->ep; in snd_complete_urb() local
394 if (unlikely(atomic_read(&ep->chip->shutdown))) in snd_complete_urb()
397 if (unlikely(!test_bit(EP_FLAG_RUNNING, &ep->flags))) in snd_complete_urb()
400 if (usb_pipeout(ep->pipe)) { in snd_complete_urb()
401 retire_outbound_urb(ep, ctx); in snd_complete_urb()
403 if (unlikely(!test_bit(EP_FLAG_RUNNING, &ep->flags))) in snd_complete_urb()
406 if (snd_usb_endpoint_implicit_feedback_sink(ep)) { in snd_complete_urb()
407 spin_lock_irqsave(&ep->lock, flags); in snd_complete_urb()
408 list_add_tail(&ctx->ready_list, &ep->ready_playback_urbs); in snd_complete_urb()
409 spin_unlock_irqrestore(&ep->lock, flags); in snd_complete_urb()
410 queue_pending_output_urbs(ep); in snd_complete_urb()
415 prepare_outbound_urb(ep, ctx); in snd_complete_urb()
417 if (unlikely(!test_bit(EP_FLAG_RUNNING, &ep->flags))) in snd_complete_urb()
420 retire_inbound_urb(ep, ctx); in snd_complete_urb()
422 if (unlikely(!test_bit(EP_FLAG_RUNNING, &ep->flags))) in snd_complete_urb()
425 prepare_inbound_urb(ep, ctx); in snd_complete_urb()
432 usb_audio_err(ep->chip, "cannot submit urb (err = %d)\n", err); in snd_complete_urb()
433 if (ep->data_subs && ep->data_subs->pcm_substream) { in snd_complete_urb()
434 substream = ep->data_subs->pcm_substream; in snd_complete_urb()
439 clear_bit(ctx->index, &ep->active_mask); in snd_complete_urb()
465 struct snd_usb_endpoint *ep; in snd_usb_add_endpoint() local
473 list_for_each_entry(ep, &chip->ep_list, list) { in snd_usb_add_endpoint()
474 if (ep->ep_num == ep_num && in snd_usb_add_endpoint()
475 ep->iface == alts->desc.bInterfaceNumber && in snd_usb_add_endpoint()
476 ep->altsetting == alts->desc.bAlternateSetting) { in snd_usb_add_endpoint()
477 usb_audio_dbg(ep->chip, in snd_usb_add_endpoint()
479 ep_num, ep->iface, ep->altsetting, ep); in snd_usb_add_endpoint()
489 ep = kzalloc(sizeof(*ep), GFP_KERNEL); in snd_usb_add_endpoint()
490 if (!ep) in snd_usb_add_endpoint()
493 ep->chip = chip; in snd_usb_add_endpoint()
494 spin_lock_init(&ep->lock); in snd_usb_add_endpoint()
495 ep->type = type; in snd_usb_add_endpoint()
496 ep->ep_num = ep_num; in snd_usb_add_endpoint()
497 ep->iface = alts->desc.bInterfaceNumber; in snd_usb_add_endpoint()
498 ep->altsetting = alts->desc.bAlternateSetting; in snd_usb_add_endpoint()
499 INIT_LIST_HEAD(&ep->ready_playback_urbs); in snd_usb_add_endpoint()
503 ep->pipe = usb_sndisocpipe(chip->dev, ep_num); in snd_usb_add_endpoint()
505 ep->pipe = usb_rcvisocpipe(chip->dev, ep_num); in snd_usb_add_endpoint()
511 ep->syncinterval = get_endpoint(alts, 1)->bRefresh; in snd_usb_add_endpoint()
513 ep->syncinterval = 1; in snd_usb_add_endpoint()
516 ep->syncinterval = get_endpoint(alts, 1)->bInterval - 1; in snd_usb_add_endpoint()
518 ep->syncinterval = 3; in snd_usb_add_endpoint()
520 ep->syncmaxsize = le16_to_cpu(get_endpoint(alts, 1)->wMaxPacketSize); in snd_usb_add_endpoint()
523 list_add_tail(&ep->list, &chip->ep_list); in snd_usb_add_endpoint()
525 ep->is_implicit_feedback = 0; in snd_usb_add_endpoint()
530 return ep; in snd_usb_add_endpoint()
536 static int wait_clear_urbs(struct snd_usb_endpoint *ep) in wait_clear_urbs() argument
542 alive = bitmap_weight(&ep->active_mask, ep->nurbs); in wait_clear_urbs()
550 usb_audio_err(ep->chip, in wait_clear_urbs()
552 alive, ep->ep_num); in wait_clear_urbs()
553 clear_bit(EP_FLAG_STOPPING, &ep->flags); in wait_clear_urbs()
555 ep->data_subs = NULL; in wait_clear_urbs()
556 ep->sync_slave = NULL; in wait_clear_urbs()
557 ep->retire_data_urb = NULL; in wait_clear_urbs()
558 ep->prepare_data_urb = NULL; in wait_clear_urbs()
566 void snd_usb_endpoint_sync_pending_stop(struct snd_usb_endpoint *ep) in snd_usb_endpoint_sync_pending_stop() argument
568 if (ep && test_bit(EP_FLAG_STOPPING, &ep->flags)) in snd_usb_endpoint_sync_pending_stop()
569 wait_clear_urbs(ep); in snd_usb_endpoint_sync_pending_stop()
575 static int deactivate_urbs(struct snd_usb_endpoint *ep, bool force) in deactivate_urbs() argument
579 if (!force && atomic_read(&ep->chip->shutdown)) /* to be sure... */ in deactivate_urbs()
582 clear_bit(EP_FLAG_RUNNING, &ep->flags); in deactivate_urbs()
584 INIT_LIST_HEAD(&ep->ready_playback_urbs); in deactivate_urbs()
585 ep->next_packet_read_pos = 0; in deactivate_urbs()
586 ep->next_packet_write_pos = 0; in deactivate_urbs()
588 for (i = 0; i < ep->nurbs; i++) { in deactivate_urbs()
589 if (test_bit(i, &ep->active_mask)) { in deactivate_urbs()
590 if (!test_and_set_bit(i, &ep->unlink_mask)) { in deactivate_urbs()
591 struct urb *u = ep->urb[i].urb; in deactivate_urbs()
603 static void release_urbs(struct snd_usb_endpoint *ep, int force) in release_urbs() argument
608 ep->retire_data_urb = NULL; in release_urbs()
609 ep->prepare_data_urb = NULL; in release_urbs()
612 deactivate_urbs(ep, force); in release_urbs()
613 wait_clear_urbs(ep); in release_urbs()
615 for (i = 0; i < ep->nurbs; i++) in release_urbs()
616 release_urb_ctx(&ep->urb[i]); in release_urbs()
618 usb_free_coherent(ep->chip->dev, SYNC_URBS * 4, in release_urbs()
619 ep->syncbuf, ep->sync_dma); in release_urbs()
621 ep->syncbuf = NULL; in release_urbs()
622 ep->nurbs = 0; in release_urbs()
628 static bool check_ep_params(struct snd_usb_endpoint *ep, in check_ep_params() argument
641 int tx_length_quirk = (ep->chip->tx_length_quirk && in check_ep_params()
642 usb_pipeout(ep->pipe)); in check_ep_params()
654 ret = ret && (ep->datainterval == fmt->datainterval); in check_ep_params()
655 ret = ret && (ep->stride == frame_bits >> 3); in check_ep_params()
659 ret = ret && (ep->silence_value == 0x80); in check_ep_params()
666 ret = ret && (ep->silence_value == 0x69); in check_ep_params()
669 ret = ret && (ep->silence_value == 0); in check_ep_params()
673 ret = ret && (ep->freqmax == ep->freqn + (ep->freqn >> 1)); in check_ep_params()
689 maxsize = (((ep->freqmax << ep->datainterval) + 0xffff) >> 16) * in check_ep_params()
694 if (ep->maxpacksize && ep->maxpacksize < maxsize) { in check_ep_params()
696 unsigned int data_maxsize = maxsize = ep->maxpacksize; in check_ep_params()
701 ret = ret && (ep->freqmax == (data_maxsize / (frame_bits >> 3)) in check_ep_params()
702 << (16 - ep->datainterval)); in check_ep_params()
705 if (ep->fill_max) in check_ep_params()
706 ret = ret && (ep->curpacksize == ep->maxpacksize); in check_ep_params()
708 ret = ret && (ep->curpacksize == maxsize); in check_ep_params()
710 if (snd_usb_get_speed(ep->chip->dev) != USB_SPEED_FULL) { in check_ep_params()
711 packs_per_ms = 8 >> ep->datainterval; in check_ep_params()
717 if (sync_ep && !snd_usb_endpoint_implicit_feedback_sink(ep)) in check_ep_params()
720 max_packs_per_urb = max(1u, max_packs_per_urb >> ep->datainterval); in check_ep_params()
730 if (usb_pipein(ep->pipe) || in check_ep_params()
731 snd_usb_endpoint_implicit_feedback_sink(ep)) { in check_ep_params()
740 if (snd_usb_get_speed(ep->chip->dev) == USB_SPEED_WIRELESS) { in check_ep_params()
741 int interval = ep->datainterval; in check_ep_params()
752 ret = ret && (ep->nurbs == MAX_URBS); in check_ep_params()
762 minsize = (ep->freqn >> (16 - ep->datainterval)) * in check_ep_params()
779 ret = ret && (ep->max_urb_frames == in check_ep_params()
785 ret = ret && (ep->nurbs == min(max_urbs, in check_ep_params()
789 ret = ret && (ep->datainterval == fmt->datainterval); in check_ep_params()
790 ret = ret && (ep->maxpacksize == fmt->maxpacksize); in check_ep_params()
792 (ep->fill_max == !!(fmt->attributes & UAC_EP_CS_ATTR_FILL_MAX)); in check_ep_params()
800 static int data_ep_set_params(struct snd_usb_endpoint *ep, in data_ep_set_params() argument
813 int tx_length_quirk = (ep->chip->tx_length_quirk && in data_ep_set_params()
814 usb_pipeout(ep->pipe)); in data_ep_set_params()
825 ep->datainterval = fmt->datainterval; in data_ep_set_params()
826 ep->stride = frame_bits >> 3; in data_ep_set_params()
830 ep->silence_value = 0x80; in data_ep_set_params()
837 ep->silence_value = 0x69; in data_ep_set_params()
840 ep->silence_value = 0; in data_ep_set_params()
844 ep->freqmax = ep->freqn + (ep->freqn >> 1); in data_ep_set_params()
860 maxsize = (((ep->freqmax << ep->datainterval) + 0xffff) >> 16) * in data_ep_set_params()
865 if (ep->maxpacksize && ep->maxpacksize < maxsize) { in data_ep_set_params()
867 unsigned int data_maxsize = maxsize = ep->maxpacksize; in data_ep_set_params()
872 ep->freqmax = (data_maxsize / (frame_bits >> 3)) in data_ep_set_params()
873 << (16 - ep->datainterval); in data_ep_set_params()
876 if (ep->fill_max) in data_ep_set_params()
877 ep->curpacksize = ep->maxpacksize; in data_ep_set_params()
879 ep->curpacksize = maxsize; in data_ep_set_params()
881 if (snd_usb_get_speed(ep->chip->dev) != USB_SPEED_FULL) { in data_ep_set_params()
882 packs_per_ms = 8 >> ep->datainterval; in data_ep_set_params()
888 if (sync_ep && !snd_usb_endpoint_implicit_feedback_sink(ep)) in data_ep_set_params()
891 max_packs_per_urb = max(1u, max_packs_per_urb >> ep->datainterval); in data_ep_set_params()
901 if (usb_pipein(ep->pipe) || in data_ep_set_params()
902 snd_usb_endpoint_implicit_feedback_sink(ep)) { in data_ep_set_params()
911 if (snd_usb_get_speed(ep->chip->dev) == USB_SPEED_WIRELESS) { in data_ep_set_params()
912 int interval = ep->datainterval; in data_ep_set_params()
922 ep->nurbs = MAX_URBS; in data_ep_set_params()
932 minsize = (ep->freqn >> (16 - ep->datainterval)) * in data_ep_set_params()
949 ep->max_urb_frames = DIV_ROUND_UP(frames_per_period, in data_ep_set_params()
955 ep->nurbs = min(max_urbs, urbs_per_period * periods_per_buffer); in data_ep_set_params()
959 for (i = 0; i < ep->nurbs; i++) { in data_ep_set_params()
960 struct snd_urb_ctx *u = &ep->urb[i]; in data_ep_set_params()
962 u->ep = ep; in data_ep_set_params()
973 usb_alloc_coherent(ep->chip->dev, u->buffer_size, in data_ep_set_params()
977 u->urb->pipe = ep->pipe; in data_ep_set_params()
979 u->urb->interval = 1 << ep->datainterval; in data_ep_set_params()
988 release_urbs(ep, 0); in data_ep_set_params()
995 static int sync_ep_set_params(struct snd_usb_endpoint *ep) in sync_ep_set_params() argument
999 ep->syncbuf = usb_alloc_coherent(ep->chip->dev, SYNC_URBS * 4, in sync_ep_set_params()
1000 GFP_KERNEL, &ep->sync_dma); in sync_ep_set_params()
1001 if (!ep->syncbuf) in sync_ep_set_params()
1005 struct snd_urb_ctx *u = &ep->urb[i]; in sync_ep_set_params()
1007 u->ep = ep; in sync_ep_set_params()
1012 u->urb->transfer_buffer = ep->syncbuf + i * 4; in sync_ep_set_params()
1013 u->urb->transfer_dma = ep->sync_dma + i * 4; in sync_ep_set_params()
1015 u->urb->pipe = ep->pipe; in sync_ep_set_params()
1018 u->urb->interval = 1 << ep->syncinterval; in sync_ep_set_params()
1023 ep->nurbs = SYNC_URBS; in sync_ep_set_params()
1028 release_urbs(ep, 0); in sync_ep_set_params()
1049 int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep, in snd_usb_endpoint_set_params() argument
1061 if (ep->use_count != 0) { in snd_usb_endpoint_set_params()
1062 bool check = ep->is_implicit_feedback && in snd_usb_endpoint_set_params()
1063 check_ep_params(ep, pcm_format, in snd_usb_endpoint_set_params()
1069 usb_audio_warn(ep->chip, in snd_usb_endpoint_set_params()
1071 ep->ep_num); in snd_usb_endpoint_set_params()
1075 usb_audio_dbg(ep->chip, in snd_usb_endpoint_set_params()
1077 ep->ep_num); in snd_usb_endpoint_set_params()
1082 release_urbs(ep, 0); in snd_usb_endpoint_set_params()
1084 ep->datainterval = fmt->datainterval; in snd_usb_endpoint_set_params()
1085 ep->maxpacksize = fmt->maxpacksize; in snd_usb_endpoint_set_params()
1086 ep->fill_max = !!(fmt->attributes & UAC_EP_CS_ATTR_FILL_MAX); in snd_usb_endpoint_set_params()
1088 if (snd_usb_get_speed(ep->chip->dev) == USB_SPEED_FULL) { in snd_usb_endpoint_set_params()
1089 ep->freqn = get_usb_full_speed_rate(rate); in snd_usb_endpoint_set_params()
1090 ep->pps = 1000 >> ep->datainterval; in snd_usb_endpoint_set_params()
1092 ep->freqn = get_usb_high_speed_rate(rate); in snd_usb_endpoint_set_params()
1093 ep->pps = 8000 >> ep->datainterval; in snd_usb_endpoint_set_params()
1096 ep->sample_rem = rate % ep->pps; in snd_usb_endpoint_set_params()
1097 ep->packsize[0] = rate / ep->pps; in snd_usb_endpoint_set_params()
1098 ep->packsize[1] = (rate + (ep->pps - 1)) / ep->pps; in snd_usb_endpoint_set_params()
1101 ep->freqm = ep->freqn; in snd_usb_endpoint_set_params()
1102 ep->freqshift = INT_MIN; in snd_usb_endpoint_set_params()
1104 ep->phase = 0; in snd_usb_endpoint_set_params()
1106 switch (ep->type) { in snd_usb_endpoint_set_params()
1108 err = data_ep_set_params(ep, pcm_format, channels, in snd_usb_endpoint_set_params()
1113 err = sync_ep_set_params(ep); in snd_usb_endpoint_set_params()
1119 usb_audio_dbg(ep->chip, in snd_usb_endpoint_set_params()
1121 ep->ep_num, ep->type, ep->nurbs, err); in snd_usb_endpoint_set_params()
1139 int snd_usb_endpoint_start(struct snd_usb_endpoint *ep) in snd_usb_endpoint_start() argument
1144 if (atomic_read(&ep->chip->shutdown)) in snd_usb_endpoint_start()
1148 if (++ep->use_count != 1) in snd_usb_endpoint_start()
1152 deactivate_urbs(ep, false); in snd_usb_endpoint_start()
1154 ep->active_mask = 0; in snd_usb_endpoint_start()
1155 ep->unlink_mask = 0; in snd_usb_endpoint_start()
1156 ep->phase = 0; in snd_usb_endpoint_start()
1157 ep->sample_accum = 0; in snd_usb_endpoint_start()
1159 snd_usb_endpoint_start_quirk(ep); in snd_usb_endpoint_start()
1168 set_bit(EP_FLAG_RUNNING, &ep->flags); in snd_usb_endpoint_start()
1170 if (snd_usb_endpoint_implicit_feedback_sink(ep)) { in snd_usb_endpoint_start()
1171 for (i = 0; i < ep->nurbs; i++) { in snd_usb_endpoint_start()
1172 struct snd_urb_ctx *ctx = ep->urb + i; in snd_usb_endpoint_start()
1173 list_add_tail(&ctx->ready_list, &ep->ready_playback_urbs); in snd_usb_endpoint_start()
1179 for (i = 0; i < ep->nurbs; i++) { in snd_usb_endpoint_start()
1180 struct urb *urb = ep->urb[i].urb; in snd_usb_endpoint_start()
1185 if (usb_pipeout(ep->pipe)) { in snd_usb_endpoint_start()
1186 prepare_outbound_urb(ep, urb->context); in snd_usb_endpoint_start()
1188 prepare_inbound_urb(ep, urb->context); in snd_usb_endpoint_start()
1193 usb_audio_err(ep->chip, in snd_usb_endpoint_start()
1198 set_bit(i, &ep->active_mask); in snd_usb_endpoint_start()
1204 clear_bit(EP_FLAG_RUNNING, &ep->flags); in snd_usb_endpoint_start()
1205 ep->use_count--; in snd_usb_endpoint_start()
1206 deactivate_urbs(ep, false); in snd_usb_endpoint_start()
1224 void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep) in snd_usb_endpoint_stop() argument
1226 if (!ep) in snd_usb_endpoint_stop()
1229 if (snd_BUG_ON(ep->use_count == 0)) in snd_usb_endpoint_stop()
1232 if (--ep->use_count == 0) { in snd_usb_endpoint_stop()
1233 deactivate_urbs(ep, false); in snd_usb_endpoint_stop()
1234 set_bit(EP_FLAG_STOPPING, &ep->flags); in snd_usb_endpoint_stop()
1248 void snd_usb_endpoint_deactivate(struct snd_usb_endpoint *ep) in snd_usb_endpoint_deactivate() argument
1250 if (!ep) in snd_usb_endpoint_deactivate()
1253 if (ep->use_count != 0) in snd_usb_endpoint_deactivate()
1256 deactivate_urbs(ep, true); in snd_usb_endpoint_deactivate()
1257 wait_clear_urbs(ep); in snd_usb_endpoint_deactivate()
1268 void snd_usb_endpoint_release(struct snd_usb_endpoint *ep) in snd_usb_endpoint_release() argument
1270 release_urbs(ep, 1); in snd_usb_endpoint_release()
1280 void snd_usb_endpoint_free(struct snd_usb_endpoint *ep) in snd_usb_endpoint_free() argument
1282 kfree(ep); in snd_usb_endpoint_free()
1295 void snd_usb_handle_sync_urb(struct snd_usb_endpoint *ep, in snd_usb_handle_sync_urb() argument
1303 snd_BUG_ON(ep == sender); in snd_usb_handle_sync_urb()
1311 if (snd_usb_endpoint_implicit_feedback_sink(ep) && in snd_usb_handle_sync_urb()
1312 ep->use_count != 0) { in snd_usb_handle_sync_urb()
1333 spin_lock_irqsave(&ep->lock, flags); in snd_usb_handle_sync_urb()
1334 out_packet = ep->next_packet + ep->next_packet_write_pos; in snd_usb_handle_sync_urb()
1355 ep->next_packet_write_pos++; in snd_usb_handle_sync_urb()
1356 ep->next_packet_write_pos %= MAX_URBS; in snd_usb_handle_sync_urb()
1357 spin_unlock_irqrestore(&ep->lock, flags); in snd_usb_handle_sync_urb()
1358 queue_pending_output_urbs(ep); in snd_usb_handle_sync_urb()
1397 if (f < ep->freqn - 0x8000) in snd_usb_handle_sync_urb()
1399 else if (f > ep->freqn + 0x8000) in snd_usb_handle_sync_urb()
1401 } else if (unlikely(ep->freqshift == INT_MIN)) { in snd_usb_handle_sync_urb()
1409 while (f < ep->freqn - ep->freqn / 4) { in snd_usb_handle_sync_urb()
1413 while (f > ep->freqn + ep->freqn / 2) { in snd_usb_handle_sync_urb()
1417 ep->freqshift = shift; in snd_usb_handle_sync_urb()
1418 } else if (ep->freqshift >= 0) in snd_usb_handle_sync_urb()
1419 f <<= ep->freqshift; in snd_usb_handle_sync_urb()
1421 f >>= -ep->freqshift; in snd_usb_handle_sync_urb()
1423 if (likely(f >= ep->freqn - ep->freqn / 8 && f <= ep->freqmax)) { in snd_usb_handle_sync_urb()
1428 spin_lock_irqsave(&ep->lock, flags); in snd_usb_handle_sync_urb()
1429 ep->freqm = f; in snd_usb_handle_sync_urb()
1430 spin_unlock_irqrestore(&ep->lock, flags); in snd_usb_handle_sync_urb()
1436 ep->freqshift = INT_MIN; in snd_usb_handle_sync_urb()