On Thursday 05 March 2009 20:34:27 kilgota@xxxxxxxxxxxxxxxxxxxxxx wrote: > Signed-off-by: Theodore Kilgore <kilgota@xxxxxxxxxx> > ---------------------------------------------------------------------- > --- mr97310a.c.old 2009-02-23 23:59:07.000000000 -0600 > +++ mr97310a.c 2009-03-05 19:14:13.000000000 -0600 > @@ -29,9 +29,7 @@ MODULE_LICENSE("GPL"); > /* specific webcam descriptor */ > struct sd { > struct gspca_dev gspca_dev; /* !! must be the first item */ > - > u8 sof_read; > - u8 header_read; > }; > > /* V4L2 controls supported by the driver */ > @@ -100,12 +98,9 @@ static int sd_init(struct gspca_dev *gsp > > static int sd_start(struct gspca_dev *gspca_dev) > { > - struct sd *sd = (struct sd *) gspca_dev; > __u8 *data = gspca_dev->usb_buf; > int err_code; > > - sd->sof_read = 0; > - Good catch, I didn't realize this was kzalloc'd. > /* Note: register descriptions guessed from MR97113A driver */ > > data[0] = 0x01; > @@ -285,40 +280,29 @@ static void sd_pkt_scan(struct gspca_dev > __u8 *data, /* isoc packet */ > int len) /* iso packet length */ > { > - struct sd *sd = (struct sd *) gspca_dev; > unsigned char *sof; > > sof = pac_find_sof(gspca_dev, data, len); > if (sof) { > int n; > - > + int marker_len = sizeof pac_sof_marker; The value doesn't change; there's no need to use a variable for this. > /* finish decoding current frame */ > n = sof - data; > - if (n > sizeof pac_sof_marker) > - n -= sizeof pac_sof_marker; > + if (n > marker_len) > + n -= marker_len; > else > n = 0; > frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, > data, n); > - sd->header_read = 0; > - gspca_frame_add(gspca_dev, FIRST_PACKET, frame, NULL, 0); > - len -= sof - data; > + /* Start next frame. */ > + gspca_frame_add(gspca_dev, FIRST_PACKET, frame, > + pac_sof_marker, marker_len); > + len -= n; > + len -= marker_len; > + if (len < 0) > + len = 0; len -= sof - data; is a shorter way to find the remaining length. > data = sof; > } > - if (sd->header_read < 7) { > - int needed; > - > - /* skip the rest of the header */ > - needed = 7 - sd->header_read; > - if (len <= needed) { > - sd->header_read += len; > - return; > - } > - data += needed; > - len -= needed; > - sd->header_read = 7; > - } > - > gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); > } > > @@ -337,6 +321,7 @@ static const struct sd_desc sd_desc = { > /* -- module initialisation -- */ > static const __devinitdata struct usb_device_id device_table[] = { > {USB_DEVICE(0x08ca, 0x0111)}, > + {USB_DEVICE(0x093a, 0x010f)}, This change is unrelated; maybe it should be in a different patch? Don't forget to update Documentation/video4linux/gspca.txt with the new camera. -Kyle -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html