aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRicard Wanderlof <ricard.wanderlof@axis.com>2015-10-19 02:52:51 -0400
committerTakashi Iwai <tiwai@suse.de>2015-10-19 06:38:08 -0400
commit5cf310e976659caeaae350258940b73daaa0d478 (patch)
treeb18dc4f1cb3a6acf74630ee84e68e009dc3e0e85
parent4c4e4391b833e6297e0a6bc43db023a8c55d6835 (diff)
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>
-rw-r--r--sound/usb/endpoint.c46
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,
183 ep->retire_data_urb(ep->data_subs, urb); 183 ep->retire_data_urb(ep->data_subs, urb);
184} 184}
185 185
186static void prepare_silent_urb(struct snd_usb_endpoint *ep,
187 struct snd_urb_ctx *ctx)
188{
189 struct urb *urb = ctx->urb;
190 unsigned int offs = 0;
191 int i;
192
193 for (i = 0; i < ctx->packets; ++i) {
194 int counts;
195
196 if (ctx->packet_size[i])
197 counts = ctx->packet_size[i];
198 else
199 counts = snd_usb_endpoint_next_packet_size(ep);
200
201 urb->iso_frame_desc[i].offset = offs * ep->stride;
202 urb->iso_frame_desc[i].length = counts * ep->stride;
203 offs += counts;
204 }
205
206 urb->number_of_packets = ctx->packets;
207 urb->transfer_buffer_length = offs * ep->stride;
208 memset(urb->transfer_buffer, ep->silence_value,
209 offs * ep->stride);
210}
211
186/* 212/*
187 * Prepare a PLAYBACK urb for submission to the bus. 213 * Prepare a PLAYBACK urb for submission to the bus.
188 */ 214 */
189static void prepare_outbound_urb(struct snd_usb_endpoint *ep, 215static void prepare_outbound_urb(struct snd_usb_endpoint *ep,
190 struct snd_urb_ctx *ctx) 216 struct snd_urb_ctx *ctx)
191{ 217{
192 int i;
193 struct urb *urb = ctx->urb; 218 struct urb *urb = ctx->urb;
194 unsigned char *cp = urb->transfer_buffer; 219 unsigned char *cp = urb->transfer_buffer;
195 220
@@ -201,24 +226,7 @@ static void prepare_outbound_urb(struct snd_usb_endpoint *ep,
201 ep->prepare_data_urb(ep->data_subs, urb); 226 ep->prepare_data_urb(ep->data_subs, urb);
202 } else { 227 } else {
203 /* no data provider, so send silence */ 228 /* no data provider, so send silence */
204 unsigned int offs = 0; 229 prepare_silent_urb(ep, ctx);
205 for (i = 0; i < ctx->packets; ++i) {
206 int counts;
207
208 if (ctx->packet_size[i])
209 counts = ctx->packet_size[i];
210 else
211 counts = snd_usb_endpoint_next_packet_size(ep);
212
213 urb->iso_frame_desc[i].offset = offs * ep->stride;
214 urb->iso_frame_desc[i].length = counts * ep->stride;
215 offs += counts;
216 }
217
218 urb->number_of_packets = ctx->packets;
219 urb->transfer_buffer_length = offs * ep->stride;
220 memset(urb->transfer_buffer, ep->silence_value,
221 offs * ep->stride);
222 } 230 }
223 break; 231 break;
224 232