SN9C10x driver bugfix.

Changes:
@ Calculate correct image size in urb_complete()

Signed-off-by: Luca Risolia <[EMAIL PROTECTED]>

Greg, please apply to your kernel tree.
---

diff -uprN -X dontdiff a/drivers/usb/media/sn9c102_core.c 
b/drivers/usb/media/sn9c102_core.c
--- a/drivers/usb/media/sn9c102_core.c  2005-01-23 09:26:48.000000000 +0100
+++ b/drivers/usb/media/sn9c102_core.c  2005-01-23 09:20:36.000000000 +0100
@@ -499,6 +499,7 @@ static void sn9c102_urb_complete(struct 
 {
        struct sn9c102_device* cam = urb->context;
        struct sn9c102_frame_t** f;
+       size_t imagesize;
        unsigned long lock_flags;
        u8 i;
        int err = 0;
@@ -531,6 +532,10 @@ static void sn9c102_urb_complete(struct 
                (*f) = list_entry(cam->inqueue.next, struct sn9c102_frame_t,
                                  frame);
 
+       imagesize = (cam->sensor->pix_format.width *
+                    cam->sensor->pix_format.height *
+                    cam->sensor->pix_format.priv) / 8;
+
        for (i = 0; i < urb->number_of_packets; i++) {
                unsigned int img, len, status;
                void *pos, *sof, *eof;
@@ -565,11 +570,10 @@ end_of_frame:
                                if (eof)
                                        img = (eof > pos) ? eof - pos - 1 : 0;
 
-                               if ((*f)->buf.bytesused+img>(*f)->buf.length) {
+                               if ((*f)->buf.bytesused+img > imagesize) {
                                        u32 b = (*f)->buf.bytesused + img -
-                                               (*f)->buf.length;
-                                       img = (*f)->buf.length - 
-                                             (*f)->buf.bytesused;
+                                               imagesize;
+                                       img = imagesize - (*f)->buf.bytesused;
                                        DBG(3, "Expected EOF not found: "
                                               "video frame cut")
                                        if (eof)
@@ -585,7 +589,7 @@ end_of_frame:
 
                                (*f)->buf.bytesused += img;
 
-                               if ((*f)->buf.bytesused == (*f)->buf.length ||
+                               if ((*f)->buf.bytesused == imagesize ||
                                    (cam->sensor->pix_format.pixelformat ==
                                                V4L2_PIX_FMT_SN9C10X && eof)) {
                                        u32 b = (*f)->buf.bytesused;
diff -uprN -X dontdiff a/drivers/usb/media/sn9c102.h 
b/drivers/usb/media/sn9c102.h
--- a/drivers/usb/media/sn9c102.h       2005-01-23 09:26:48.000000000 +0100
+++ b/drivers/usb/media/sn9c102.h       2005-01-23 09:20:59.000000000 +0100
@@ -56,8 +56,8 @@
 #define SN9C102_MODULE_AUTHOR   "(C) 2004-2005 Luca Risolia"
 #define SN9C102_AUTHOR_EMAIL    "<[EMAIL PROTECTED]>"
 #define SN9C102_MODULE_LICENSE  "GPL"
-#define SN9C102_MODULE_VERSION  "1:1.23"
-#define SN9C102_MODULE_VERSION_CODE  KERNEL_VERSION(1, 0, 23)
+#define SN9C102_MODULE_VERSION  "1:1.24"
+#define SN9C102_MODULE_VERSION_CODE  KERNEL_VERSION(1, 0, 24)
 
 enum sn9c102_bridge {
        BRIDGE_SN9C101 = 0x01,

Attachment: pgpcqneCAdb2m.pgp
Description: PGP signature

Reply via email to