Merge branch 'for-linus' into for-next
To merge HD-audio fixes back to 3.7 development line
This commit is contained in:
@@ -142,7 +142,7 @@ int snd_usb_endpoint_implict_feedback_sink(struct snd_usb_endpoint *ep)
|
||||
*
|
||||
* For implicit feedback, next_packet_size() is unused.
|
||||
*/
|
||||
static int next_packet_size(struct snd_usb_endpoint *ep)
|
||||
int snd_usb_endpoint_next_packet_size(struct snd_usb_endpoint *ep)
|
||||
{
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
@@ -183,15 +183,6 @@ static void retire_inbound_urb(struct snd_usb_endpoint *ep,
|
||||
ep->retire_data_urb(ep->data_subs, urb);
|
||||
}
|
||||
|
||||
static void prepare_outbound_urb_sizes(struct snd_usb_endpoint *ep,
|
||||
struct snd_urb_ctx *ctx)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ctx->packets; ++i)
|
||||
ctx->packet_size[i] = next_packet_size(ep);
|
||||
}
|
||||
|
||||
/*
|
||||
* Prepare a PLAYBACK urb for submission to the bus.
|
||||
*/
|
||||
@@ -376,7 +367,6 @@ static void snd_complete_urb(struct urb *urb)
|
||||
goto exit_clear;
|
||||
}
|
||||
|
||||
prepare_outbound_urb_sizes(ep, ctx);
|
||||
prepare_outbound_urb(ep, ctx);
|
||||
} else {
|
||||
retire_inbound_urb(ep, ctx);
|
||||
@@ -805,7 +795,9 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,
|
||||
/**
|
||||
* snd_usb_endpoint_start: start an snd_usb_endpoint
|
||||
*
|
||||
* @ep: the endpoint to start
|
||||
* @ep: the endpoint to start
|
||||
* @can_sleep: flag indicating whether the operation is executed in
|
||||
* non-atomic context
|
||||
*
|
||||
* A call to this function will increment the use count of the endpoint.
|
||||
* In case it is not already running, the URBs for this endpoint will be
|
||||
@@ -815,7 +807,7 @@ int snd_usb_endpoint_set_params(struct snd_usb_endpoint *ep,
|
||||
*
|
||||
* Returns an error if the URB submission failed, 0 in all other cases.
|
||||
*/
|
||||
int snd_usb_endpoint_start(struct snd_usb_endpoint *ep)
|
||||
int snd_usb_endpoint_start(struct snd_usb_endpoint *ep, int can_sleep)
|
||||
{
|
||||
int err;
|
||||
unsigned int i;
|
||||
@@ -827,6 +819,11 @@ int snd_usb_endpoint_start(struct snd_usb_endpoint *ep)
|
||||
if (++ep->use_count != 1)
|
||||
return 0;
|
||||
|
||||
/* just to be sure */
|
||||
deactivate_urbs(ep, 0, can_sleep);
|
||||
if (can_sleep)
|
||||
wait_clear_urbs(ep);
|
||||
|
||||
ep->active_mask = 0;
|
||||
ep->unlink_mask = 0;
|
||||
ep->phase = 0;
|
||||
@@ -858,7 +855,6 @@ int snd_usb_endpoint_start(struct snd_usb_endpoint *ep)
|
||||
goto __error;
|
||||
|
||||
if (usb_pipeout(ep->pipe)) {
|
||||
prepare_outbound_urb_sizes(ep, urb->context);
|
||||
prepare_outbound_urb(ep, urb->context);
|
||||
} else {
|
||||
prepare_inbound_urb(ep, urb->context);
|
||||
|
Reference in New Issue
Block a user