diff options
author | Ricard Wanderlof <ricard.wanderlof@axis.com> | 2015-10-19 08:52:51 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2015-10-19 12:38:08 +0200 |
commit | 5cf310e976659caeaae350258940b73daaa0d478 (patch) | |
tree | b18dc4f1cb3a6acf74630ee84e68e009dc3e0e85 /sound/usb | |
parent | ALSA: USB-audio: Also move out hwptr_done wrap from prepare_playback_urb() (diff) | |
download | linux-5cf310e976659caeaae350258940b73daaa0d478.tar.xz linux-5cf310e976659caeaae350258940b73daaa0d478.zip |
ALSA: USB-audio: Break out creation of silent urbs from prepare_outbound_urb()
Refactoring in preparation for adding Zoom R16/24 quirk.
No functional change.
Signed-off-by: Ricard Wanderlof <ricardw@axis.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/usb')
-rw-r--r-- | sound/usb/endpoint.c | 46 |
1 files changed, 27 insertions, 19 deletions
diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c index a77d9c812dc6..825a06ce83a9 100644 --- a/sound/usb/endpoint.c +++ b/sound/usb/endpoint.c @@ -183,13 +183,38 @@ static void retire_inbound_urb(struct snd_usb_endpoint *ep, ep->retire_data_urb(ep->data_subs, urb); } +static void prepare_silent_urb(struct snd_usb_endpoint *ep, + struct snd_urb_ctx *ctx) +{ + struct urb *urb = ctx->urb; + unsigned int offs = 0; + int i; + + for (i = 0; i < ctx->packets; ++i) { + int counts; + + if (ctx->packet_size[i]) + counts = ctx->packet_size[i]; + else + counts = snd_usb_endpoint_next_packet_size(ep); + + urb->iso_frame_desc[i].offset = offs * ep->stride; + urb->iso_frame_desc[i].length = counts * ep->stride; + offs += counts; + } + + urb->number_of_packets = ctx->packets; + urb->transfer_buffer_length = offs * ep->stride; + memset(urb->transfer_buffer, ep->silence_value, + offs * ep->stride); +} + /* * Prepare a PLAYBACK urb for submission to the bus. */ static void prepare_outbound_urb(struct snd_usb_endpoint *ep, struct snd_urb_ctx *ctx) { - int i; struct urb *urb = ctx->urb; unsigned char *cp = urb->transfer_buffer; @@ -201,24 +226,7 @@ static void prepare_outbound_urb(struct snd_usb_endpoint *ep, ep->prepare_data_urb(ep->data_subs, urb); } else { /* no data provider, so send silence */ - unsigned int offs = 0; - for (i = 0; i < ctx->packets; ++i) { - int counts; - - if (ctx->packet_size[i]) - counts = ctx->packet_size[i]; - else - counts = snd_usb_endpoint_next_packet_size(ep); - - urb->iso_frame_desc[i].offset = offs * ep->stride; - urb->iso_frame_desc[i].length = counts * ep->stride; - offs += counts; - } - - urb->number_of_packets = ctx->packets; - urb->transfer_buffer_length = offs * ep->stride; - memset(urb->transfer_buffer, ep->silence_value, - offs * ep->stride); + prepare_silent_urb(ep, ctx); } break; |