Skip to content

Commit

Permalink
V4L/DVB (8193): gspca: Input buffer may be changed on reg write.
Browse files Browse the repository at this point in the history
Done for conex, etoms, pac7311, sonixj, t613 and tv8532.
Code cleanup for some other subdrivers.

Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
  • Loading branch information
Jean-Francois Moine authored and Mauro Carvalho Chehab committed Jul 20, 2008
1 parent 0d2a722 commit bf7f0b9
Show file tree
Hide file tree
Showing 10 changed files with 257 additions and 243 deletions.
41 changes: 22 additions & 19 deletions drivers/media/video/gspca/conex.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
#define CONEX_CAM 1 /* special JPEG header */
#include "jpeg.h"

#define DRIVER_VERSION_NUMBER KERNEL_VERSION(2, 1, 0)
static const char version[] = "2.1.0";
#define DRIVER_VERSION_NUMBER KERNEL_VERSION(2, 1, 3)
static const char version[] = "2.1.3";

MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>");
MODULE_DESCRIPTION("GSPCA USB Conexant Camera Driver");
Expand Down Expand Up @@ -114,21 +114,29 @@ static void reg_r(struct usb_device *dev,
0,
index, buffer, length,
500);
PDEBUG(D_USBI, "reg read i:%02x -> %02x", index, *buffer);
PDEBUG(D_USBI, "reg read [%02x] -> %02x ..", index, *buffer);
}

static void reg_w(struct usb_device *dev,
__u16 index,
const __u8 *buffer, __u16 length)
const __u8 *buffer, __u16 len)
{
PDEBUG(D_USBO, "reg write i:%02x = %02x", index, *buffer);
__u8 tmpbuf[8];

#ifdef CONFIG_VIDEO_ADV_DEBUG
if (len > sizeof tmpbuf) {
PDEBUG(D_ERR|D_PACK, "reg_w: buffer overflow");
return;
}
PDEBUG(D_USBO, "reg write [%02x] = %02x..", index, *buffer);
#endif
memcpy(tmpbuf, buffer, len);
usb_control_msg(dev,
usb_sndctrlpipe(dev, 0),
0,
USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
0,
index, (__u8 *) buffer, length,
500);
index, tmpbuf, len, 500);
}

static const __u8 cx_sensor_init[][4] = {
Expand Down Expand Up @@ -269,7 +277,7 @@ static void cx_sensor(struct gspca_dev*gspca_dev)
reg_w(gspca_dev->dev, 0x0071, reg71b, 4);
break;
default:
/* case 2: */
/* case 2: */
reg_w(gspca_dev->dev, 0x0071, reg71c, 4);
break;
case 3:
Expand Down Expand Up @@ -662,17 +670,15 @@ static void cx11646_jpeg(struct gspca_dev*gspca_dev)
for (i = 0; i < 27; i++) {
if (i == 26)
length = 2;
reg_w(gspca_dev->dev, 0x0008,
cxjpeg_640[i], length);
reg_w(gspca_dev->dev, 0x0008, cxjpeg_640[i], length);
}
Reg55 = 0x28;
break;
case 1:
for (i = 0; i < 27; i++) {
if (i == 26)
length = 2;
reg_w(gspca_dev->dev, 0x0008,
cxjpeg_352[i], length);
reg_w(gspca_dev->dev, 0x0008, cxjpeg_352[i], length);
}
Reg55 = 0x16;
break;
Expand All @@ -681,17 +687,15 @@ static void cx11646_jpeg(struct gspca_dev*gspca_dev)
for (i = 0; i < 27; i++) {
if (i == 26)
length = 2;
reg_w(gspca_dev->dev, 0x0008,
cxjpeg_320[i], length);
reg_w(gspca_dev->dev, 0x0008, cxjpeg_320[i], length);
}
Reg55 = 0x14;
break;
case 3:
for (i = 0; i < 27; i++) {
if (i == 26)
length = 2;
reg_w(gspca_dev->dev, 0x0008,
cxjpeg_176[i], length);
reg_w(gspca_dev->dev, 0x0008, cxjpeg_176[i], length);
}
Reg55 = 0x0B;
break;
Expand Down Expand Up @@ -731,8 +735,7 @@ static void cx11646_jpeg(struct gspca_dev*gspca_dev)
for (i = 0; i < 18; i++) {
if (i == 17)
length = 2;
reg_w(gspca_dev->dev, 0x0008,
cxjpeg_qtable[i], length);
reg_w(gspca_dev->dev, 0x0008, cxjpeg_qtable[i], length);

}
reg_r(gspca_dev->dev, 0x0002, &val, 1); /* 0x00 */
Expand Down Expand Up @@ -866,7 +869,7 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
reg_w(gspca_dev->dev, 0x0053, &val, 1);

while (retry--) {
/* reg_r (gspca_dev->dev,0x00,0x00,0x0002,&val,1);*/
/* reg_r(gspca_dev->dev, 0x0002, &val, 1);*/
reg_r(gspca_dev->dev, 0x0053, &val, 1);
if (val == 0)
break;
Expand Down
Loading

0 comments on commit bf7f0b9

Please sign in to comment.