V4L/DVB (9545): gspca: Add a flag for empty ISOC packets.
authorJean-Francois Moine <moinejf@free.fr>
Thu, 23 Oct 2008 10:29:51 +0000 (07:29 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 29 Dec 2008 19:53:29 +0000 (17:53 -0200)
- This flag is needed by some subdrivers as tv8532 for start
  of frame detection.

Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/gspca/gspca.c
drivers/media/video/gspca/gspca.h

index afddb18024a8f20156c04a595d51089c2d4b2830..8a528c97aae0b65c8d5e04cfbb0efcf9fea5792e 100644 (file)
@@ -150,8 +150,11 @@ static void fill_frame(struct gspca_dev *gspca_dev,
 
                /* check the packet status and length */
                len = urb->iso_frame_desc[i].actual_length;
-               if (len == 0)
+               if (len == 0) {
+                       if (gspca_dev->empty_packet == 0)
+                               gspca_dev->empty_packet = 1;
                        continue;
+               }
                st = urb->iso_frame_desc[i].status;
                if (st) {
                        PDEBUG(D_ERR,
@@ -1858,6 +1861,7 @@ int gspca_dev_probe(struct usb_interface *intf,
        gspca_dev->nbalt = intf->num_altsetting;
        gspca_dev->sd_desc = sd_desc;
        gspca_dev->nbufread = 2;
+       gspca_dev->empty_packet = -1;   /* don't check the empty packets */
 
        /* configure the subdriver and initialize the USB device */
        ret = gspca_dev->sd_desc->config(gspca_dev, id);
index 2ae1ad7c1483ea8d235f0c9396cbb4f75c3ea632..50913caf1872e38fbcdc4b232380e13a43f354bb 100644 (file)
@@ -142,22 +142,21 @@ struct gspca_dev {
        char fr_q;                              /* next frame to queue */
        char fr_o;                              /* next frame to dequeue */
        signed char fr_queue[GSPCA_MAX_FRAMES]; /* frame queue */
-       char last_packet_type;
+       __u8 last_packet_type;
+       __s8 empty_packet;              /* if (-1) don't check empty packets */
+       __u8 streaming;
 
-       __u8 iface;                     /* USB interface number */
-       __u8 alt;                       /* USB alternate setting */
        __u8 curr_mode;                 /* current camera mode */
        __u32 pixfmt;                   /* current mode parameters */
        __u16 width;
        __u16 height;
+       __u32 sequence;                 /* frame sequence number */
 
        atomic_t nevent;                /* number of frames done */
        wait_queue_head_t wq;           /* wait queue */
        struct mutex usb_lock;          /* usb exchange protection */
        struct mutex read_lock;         /* read protection */
        struct mutex queue_lock;        /* ISOC queue protection */
-       __u32 sequence;                 /* frame sequence number */
-       char streaming;
 #ifdef CONFIG_PM
        char frozen;                    /* suspend - resume */
 #endif
@@ -166,6 +165,8 @@ struct gspca_dev {
        char nbufread;                  /* number of buffers for read() */
        char nurbs;                     /* number of allocated URBs */
        char memory;                    /* memory type (V4L2_MEMORY_xxx) */
+       __u8 iface;                     /* USB interface number */
+       __u8 alt;                       /* USB alternate setting */
        __u8 nbalt;                     /* number of USB alternate settings */
 };