diff options
author | Ricard Wanderlof <ricard.wanderlof@axis.com> | 2015-10-19 02:52:51 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2015-10-19 06:38:08 -0400 |
commit | 5cf310e976659caeaae350258940b73daaa0d478 (patch) | |
tree | b18dc4f1cb3a6acf74630ee84e68e009dc3e0e85 | |
parent | 4c4e4391b833e6297e0a6bc43db023a8c55d6835 (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.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, | |||
183 | ep->retire_data_urb(ep->data_subs, urb); | 183 | ep->retire_data_urb(ep->data_subs, urb); |
184 | } | 184 | } |
185 | 185 | ||
186 | static 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 | */ |
189 | static void prepare_outbound_urb(struct snd_usb_endpoint *ep, | 215 | static 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 | ||