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,
pgpcqneCAdb2m.pgp
Description: PGP signature
