This is a note to let you know that I've just added the patch titled

    ALSA: USB: adjust for changed 3.8 USB API

to the 3.8-stable tree which can be found at:
    
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     alsa-usb-adjust-for-changed-3.8-usb-api.patch
and it can be found in the queue-3.8 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <[email protected]> know about it.


>From c75c5ab575af7db707689cdbb5a5c458e9a034bb Mon Sep 17 00:00:00 2001
From: Clemens Ladisch <[email protected]>
Date: Sat, 27 Apr 2013 12:10:32 +0200
Subject: ALSA: USB: adjust for changed 3.8 USB API

From: Clemens Ladisch <[email protected]>

commit c75c5ab575af7db707689cdbb5a5c458e9a034bb upstream.

The recent changes in the USB API ("implement new semantics for
URB_ISO_ASAP") made the former meaning of the URB_ISO_ASAP flag the
default, and changed this flag to mean that URBs can be delayed.
This is not the behaviour wanted by any of the audio drivers because
it leads to discontinuous playback with very small period sizes.
Therefore, our URBs need to be submitted without this flag.

Reported-by: Joe Rayhawk <[email protected]>
Signed-off-by: Clemens Ladisch <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>

---
 sound/usb/6fire/pcm.c           |    1 -
 sound/usb/caiaq/audio.c         |    3 ---
 sound/usb/endpoint.c            |    5 ++---
 sound/usb/misc/ua101.c          |    3 +--
 sound/usb/usx2y/usb_stream.c    |    1 -
 sound/usb/usx2y/usbusx2yaudio.c |    1 -
 sound/usb/usx2y/usx2yhwdeppcm.c |    1 -
 7 files changed, 3 insertions(+), 12 deletions(-)

--- a/sound/usb/6fire/pcm.c
+++ b/sound/usb/6fire/pcm.c
@@ -575,7 +575,6 @@ static void usb6fire_pcm_init_urb(struct
        urb->instance.pipe = in ? usb_rcvisocpipe(chip->dev, ep)
                        : usb_sndisocpipe(chip->dev, ep);
        urb->instance.interval = 1;
-       urb->instance.transfer_flags = URB_ISO_ASAP;
        urb->instance.complete = handler;
        urb->instance.context = urb;
        urb->instance.number_of_packets = PCM_N_PACKETS_PER_URB;
--- a/sound/usb/caiaq/audio.c
+++ b/sound/usb/caiaq/audio.c
@@ -670,7 +670,6 @@ static void read_completed(struct urb *u
 
        if (send_it) {
                out->number_of_packets = outframe;
-               out->transfer_flags = URB_ISO_ASAP;
                usb_submit_urb(out, GFP_ATOMIC);
        } else {
                struct snd_usb_caiaq_cb_info *oinfo = out->context;
@@ -686,7 +685,6 @@ requeue:
        }
 
        urb->number_of_packets = FRAMES_PER_URB;
-       urb->transfer_flags = URB_ISO_ASAP;
        usb_submit_urb(urb, GFP_ATOMIC);
 }
 
@@ -751,7 +749,6 @@ static struct urb **alloc_urbs(struct sn
                                                * BYTES_PER_FRAME;
                urbs[i]->context = &dev->data_cb_info[i];
                urbs[i]->interval = 1;
-               urbs[i]->transfer_flags = URB_ISO_ASAP;
                urbs[i]->number_of_packets = FRAMES_PER_URB;
                urbs[i]->complete = (dir == SNDRV_PCM_STREAM_CAPTURE) ?
                                        read_completed : write_completed;
--- a/sound/usb/endpoint.c
+++ b/sound/usb/endpoint.c
@@ -677,7 +677,7 @@ static int data_ep_set_params(struct snd
                if (!u->urb->transfer_buffer)
                        goto out_of_memory;
                u->urb->pipe = ep->pipe;
-               u->urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
+               u->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
                u->urb->interval = 1 << ep->datainterval;
                u->urb->context = u;
                u->urb->complete = snd_complete_urb;
@@ -716,8 +716,7 @@ static int sync_ep_set_params(struct snd
                u->urb->transfer_dma = ep->sync_dma + i * 4;
                u->urb->transfer_buffer_length = 4;
                u->urb->pipe = ep->pipe;
-               u->urb->transfer_flags = URB_ISO_ASAP |
-                                        URB_NO_TRANSFER_DMA_MAP;
+               u->urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
                u->urb->number_of_packets = 1;
                u->urb->interval = 1 << ep->syncinterval;
                u->urb->context = u;
--- a/sound/usb/misc/ua101.c
+++ b/sound/usb/misc/ua101.c
@@ -1120,8 +1120,7 @@ static int alloc_stream_urbs(struct ua10
                        usb_init_urb(&urb->urb);
                        urb->urb.dev = ua->dev;
                        urb->urb.pipe = stream->usb_pipe;
-                       urb->urb.transfer_flags = URB_ISO_ASAP |
-                                       URB_NO_TRANSFER_DMA_MAP;
+                       urb->urb.transfer_flags = URB_NO_TRANSFER_DMA_MAP;
                        urb->urb.transfer_buffer = addr;
                        urb->urb.transfer_dma = dma;
                        urb->urb.transfer_buffer_length = max_packet_size;
--- a/sound/usb/usx2y/usb_stream.c
+++ b/sound/usb/usx2y/usb_stream.c
@@ -69,7 +69,6 @@ static void init_pipe_urbs(struct usb_st
             ++u, transfer += transfer_length) {
                struct urb *urb = urbs[u];
                struct usb_iso_packet_descriptor *desc;
-               urb->transfer_flags = URB_ISO_ASAP;
                urb->transfer_buffer = transfer;
                urb->dev = dev;
                urb->pipe = pipe;
--- a/sound/usb/usx2y/usbusx2yaudio.c
+++ b/sound/usb/usx2y/usbusx2yaudio.c
@@ -503,7 +503,6 @@ static int usX2Y_urbs_start(struct snd_u
                        if (0 == i)
                                atomic_set(&subs->state, state_STARTING3);
                        urb->dev = usX2Y->dev;
-                       urb->transfer_flags = URB_ISO_ASAP;
                        for (pack = 0; pack < nr_of_packs(); pack++) {
                                urb->iso_frame_desc[pack].offset = 
subs->maxpacksize * pack;
                                urb->iso_frame_desc[pack].length = 
subs->maxpacksize;
--- a/sound/usb/usx2y/usx2yhwdeppcm.c
+++ b/sound/usb/usx2y/usx2yhwdeppcm.c
@@ -443,7 +443,6 @@ static int usX2Y_usbpcm_urbs_start(struc
                                        if (0 == u)
                                                atomic_set(&subs->state, 
state_STARTING3);
                                        urb->dev = usX2Y->dev;
-                                       urb->transfer_flags = URB_ISO_ASAP;
                                        for (pack = 0; pack < nr_of_packs(); 
pack++) {
                                                
urb->iso_frame_desc[pack].offset = subs->maxpacksize * (pack + u * 
nr_of_packs());
                                                
urb->iso_frame_desc[pack].length = subs->maxpacksize;


Patches currently in stable-queue which might be from [email protected] are

queue-3.8/alsa-usb-audio-disable-autopm-for-midi-devices.patch
queue-3.8/alsa-usb-adjust-for-changed-3.8-usb-api.patch
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to