]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - sound/usb/usx2y/usbusx2yaudio.c
Fix nfsd truncation of readdir results
[linux-2.6-omap-h63xx.git] / sound / usb / usx2y / usbusx2yaudio.c
index f6bd0dee563ce3a7f7b242315e1f766ae26988c2..9a608fa85155c530019efcc56d8ca86cfb0195fa 100644 (file)
@@ -31,7 +31,6 @@
  */
 
 
-#include <sound/driver.h>
 #include <linux/interrupt.h>
 #include <linux/usb.h>
 #include <sound/core.h>
@@ -306,7 +305,7 @@ static void usX2Y_error_sequence(struct usX2Ydev *usX2Y,
        usX2Y_clients_stop(usX2Y);
 }
 
-static void i_usX2Y_urb_complete(struct urb *urb, struct pt_regs *regs)
+static void i_usX2Y_urb_complete(struct urb *urb)
 {
        struct snd_usX2Y_substream *subs = urb->context;
        struct usX2Ydev *usX2Y = subs->usX2Y;
@@ -322,7 +321,7 @@ static void i_usX2Y_urb_complete(struct urb *urb, struct pt_regs *regs)
                usX2Y_error_urb_status(usX2Y, subs, urb);
                return;
        }
-       if (likely((0xFFFF & urb->start_frame) == usX2Y->wait_iso_frame))
+       if (likely((urb->start_frame & 0xFFFF) == (usX2Y->wait_iso_frame & 0xFFFF)))
                subs->completed_urb = urb;
        else {
                usX2Y_error_sequence(usX2Y, subs, urb);
@@ -335,13 +334,9 @@ static void i_usX2Y_urb_complete(struct urb *urb, struct pt_regs *regs)
                    atomic_read(&capsubs->state) >= state_PREPARED &&
                    (playbacksubs->completed_urb ||
                     atomic_read(&playbacksubs->state) < state_PREPARED)) {
-                       if (!usX2Y_usbframe_complete(capsubs, playbacksubs, urb->start_frame)) {
-                               if (nr_of_packs() <= urb->start_frame &&
-                                   urb->start_frame <= (2 * nr_of_packs() - 1))        // uhci and ohci
-                                       usX2Y->wait_iso_frame = urb->start_frame - nr_of_packs();
-                               else
-                                       usX2Y->wait_iso_frame +=  nr_of_packs();
-                       } else {
+                       if (!usX2Y_usbframe_complete(capsubs, playbacksubs, urb->start_frame))
+                               usX2Y->wait_iso_frame += nr_of_packs();
+                       else {
                                snd_printdd("\n");
                                usX2Y_clients_stop(usX2Y);
                        }
@@ -350,7 +345,7 @@ static void i_usX2Y_urb_complete(struct urb *urb, struct pt_regs *regs)
 }
 
 static void usX2Y_urbs_set_complete(struct usX2Ydev * usX2Y,
-                                   void (*complete)(struct urb *, struct pt_regs *))
+                                   void (*complete)(struct urb *))
 {
        int s, u;
        for (s = 0; s < 4; s++) {
@@ -370,7 +365,7 @@ static void usX2Y_subs_startup_finish(struct usX2Ydev * usX2Y)
        usX2Y->prepare_subs = NULL;
 }
 
-static void i_usX2Y_subs_startup(struct urb *urb, struct pt_regs *regs)
+static void i_usX2Y_subs_startup(struct urb *urb)
 {
        struct snd_usX2Y_substream *subs = urb->context;
        struct usX2Ydev *usX2Y = subs->usX2Y;
@@ -382,7 +377,7 @@ static void i_usX2Y_subs_startup(struct urb *urb, struct pt_regs *regs)
                        wake_up(&usX2Y->prepare_wait_queue);
                }
 
-       i_usX2Y_urb_complete(urb, regs);
+       i_usX2Y_urb_complete(urb);
 }
 
 static void usX2Y_subs_prepare(struct snd_usX2Y_substream *subs)
@@ -495,7 +490,6 @@ static int usX2Y_urbs_start(struct snd_usX2Y_substream *subs)
                if (subs != NULL && atomic_read(&subs->state) >= state_PREPARED)
                        goto start;
        }
-       usX2Y->wait_iso_frame = -1;
 
  start:
        usX2Y_subs_startup(subs);
@@ -516,10 +510,9 @@ static int usX2Y_urbs_start(struct snd_usX2Y_substream *subs)
                                snd_printk (KERN_ERR "cannot submit datapipe for urb %d, err = %d\n", i, err);
                                err = -EPIPE;
                                goto cleanup;
-                       } else {
-                               if (0 > usX2Y->wait_iso_frame)
+                       } else
+                               if (i == 0)
                                        usX2Y->wait_iso_frame = urb->start_frame;
-                       }
                        urb->transfer_flags = 0;
                } else {
                        atomic_set(&subs->state, state_STARTING1);
@@ -663,7 +656,7 @@ static struct s_c2 SetRate48000[] =
 };
 #define NOOF_SETRATE_URBS ARRAY_SIZE(SetRate48000)
 
-static void i_usX2Y_04Int(struct urb *urb, struct pt_regs *regs)
+static void i_usX2Y_04Int(struct urb *urb)
 {
        struct usX2Ydev *usX2Y = urb->context;
        
@@ -941,10 +934,9 @@ static struct snd_pcm_ops snd_usX2Y_pcm_ops =
  */
 static void usX2Y_audio_stream_free(struct snd_usX2Y_substream **usX2Y_substream)
 {
-       if (NULL != usX2Y_substream[SNDRV_PCM_STREAM_PLAYBACK]) {
-               kfree(usX2Y_substream[SNDRV_PCM_STREAM_PLAYBACK]);
-               usX2Y_substream[SNDRV_PCM_STREAM_PLAYBACK] = NULL;
-       }
+       kfree(usX2Y_substream[SNDRV_PCM_STREAM_PLAYBACK]);
+       usX2Y_substream[SNDRV_PCM_STREAM_PLAYBACK] = NULL;
+
        kfree(usX2Y_substream[SNDRV_PCM_STREAM_CAPTURE]);
        usX2Y_substream[SNDRV_PCM_STREAM_CAPTURE] = NULL;
 }