]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/media/video/gspca/gspca.c
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mjg59/platf...
[net-next-2.6.git] / drivers / media / video / gspca / gspca.c
index d951b0f0e05319afa85daf80550a73cd348997a5..78abc1c1f9d52766704af26c0ec3769cd08f9198 100644 (file)
@@ -55,7 +55,7 @@ MODULE_AUTHOR("Jean-François Moine <http://moinejf.free.fr>");
 MODULE_DESCRIPTION("GSPCA USB Camera Driver");
 MODULE_LICENSE("GPL");
 
-#define DRIVER_VERSION_NUMBER  KERNEL_VERSION(2, 9, 0)
+#define DRIVER_VERSION_NUMBER  KERNEL_VERSION(2, 10, 0)
 
 #ifdef GSPCA_DEBUG
 int gspca_debug = D_ERR | D_PROBE;
@@ -223,6 +223,7 @@ static int alloc_and_submit_int_urb(struct gspca_dev *gspca_dev,
                usb_rcvintpipe(dev, ep->bEndpointAddress),
                buffer, buffer_len,
                int_irq, (void *)gspca_dev, interval);
+       urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
        gspca_dev->int_urb = urb;
        ret = usb_submit_urb(urb, GFP_KERNEL);
        if (ret < 0) {
@@ -440,10 +441,15 @@ void gspca_frame_add(struct gspca_dev *gspca_dev,
                frame->v4l2_buf.sequence = ++gspca_dev->sequence;
                gspca_dev->image = frame->data;
                gspca_dev->image_len = 0;
-       } else if (gspca_dev->last_packet_type == DISCARD_PACKET) {
-               if (packet_type == LAST_PACKET)
-                       gspca_dev->last_packet_type = packet_type;
-               return;
+       } else {
+               switch (gspca_dev->last_packet_type) {
+               case DISCARD_PACKET:
+                       if (packet_type == LAST_PACKET)
+                               gspca_dev->last_packet_type = packet_type;
+                       return;
+               case LAST_PACKET:
+                       return;
+               }
        }
 
        /* append the packet to the frame buffer */
@@ -454,6 +460,12 @@ void gspca_frame_add(struct gspca_dev *gspca_dev,
                                gspca_dev->frsz);
                        packet_type = DISCARD_PACKET;
                } else {
+/* !! image is NULL only when last pkt is LAST or DISCARD
+                       if (gspca_dev->image == NULL) {
+                               err("gspca_frame_add() image == NULL");
+                               return;
+                       }
+ */
                        memcpy(gspca_dev->image + gspca_dev->image_len,
                                data, len);
                        gspca_dev->image_len += len;