diff options
Diffstat (limited to 'linux/drivers/media/video/gspca')
22 files changed, 1661 insertions, 1795 deletions
diff --git a/linux/drivers/media/video/gspca/conex.c b/linux/drivers/media/video/gspca/conex.c index b0294c927..b5481017d 100644 --- a/linux/drivers/media/video/gspca/conex.c +++ b/linux/drivers/media/video/gspca/conex.c @@ -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, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>"); MODULE_DESCRIPTION("GSPCA USB Conexant Camera Driver"); @@ -52,7 +52,6 @@ static int sd_setcolors(struct gspca_dev *gspca_dev, __s32 val); static int sd_getcolors(struct gspca_dev *gspca_dev, __s32 *val); static struct ctrl sd_ctrls[] = { -#define SD_BRIGHTNESS 0 { { .id = V4L2_CID_BRIGHTNESS, @@ -61,12 +60,12 @@ static struct ctrl sd_ctrls[] = { .minimum = 0, .maximum = 255, .step = 1, - .default_value = 0xd4, +#define BRIGHTNESS_DEF 0xd4 + .default_value = BRIGHTNESS_DEF, }, .set = sd_setbrightness, .get = sd_getbrightness, }, -#define SD_CONTRAST 1 { { .id = V4L2_CID_CONTRAST, @@ -75,12 +74,12 @@ static struct ctrl sd_ctrls[] = { .minimum = 0x0a, .maximum = 0x1f, .step = 1, - .default_value = 0x0c, +#define CONTRAST_DEF 0x0c + .default_value = CONTRAST_DEF, }, .set = sd_setcontrast, .get = sd_getcontrast, }, -#define SD_COLOR 2 { { .id = V4L2_CID_SATURATION, @@ -89,18 +88,35 @@ static struct ctrl sd_ctrls[] = { .minimum = 0, .maximum = 7, .step = 1, - .default_value = 3, +#define COLOR_DEF 3 + .default_value = COLOR_DEF, }, .set = sd_setcolors, .get = sd_getcolors, }, }; -static struct cam_mode vga_mode[] = { - {V4L2_PIX_FMT_JPEG, 176, 144, 3}, - {V4L2_PIX_FMT_JPEG, 320, 240, 2}, - {V4L2_PIX_FMT_JPEG, 352, 288, 1}, - {V4L2_PIX_FMT_JPEG, 640, 480, 0}, +static struct v4l2_pix_format vga_mode[] = { + {176, 144, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 176, + .sizeimage = 176 * 144 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 3}, + {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 320, + .sizeimage = 320 * 240 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 2}, + {352, 288, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 352, + .sizeimage = 352 * 288 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 1}, + {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 640, + .sizeimage = 640 * 480 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 0}, }; static void reg_r(struct usb_device *dev, @@ -114,21 +130,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] = { @@ -221,7 +245,7 @@ static void cx11646_fw(struct gspca_dev*gspca_dev) reg_w(gspca_dev->dev, 0x006a, &val, 1); } -static __u8 cxsensor[] = { +static const __u8 cxsensor[] = { 0x88, 0x12, 0x70, 0x01, 0x88, 0x0d, 0x02, 0x01, 0x88, 0x0f, 0x00, 0x01, @@ -236,24 +260,24 @@ static __u8 cxsensor[] = { 0x00 }; -static __u8 reg20[] = { 0x10, 0x42, 0x81, 0x19, 0xd3, 0xff, 0xa7, 0xff }; -static __u8 reg28[] = { 0x87, 0x00, 0x87, 0x00, 0x8f, 0xff, 0xea, 0xff }; -static __u8 reg10[] = { 0xb1, 0xb1 }; -static __u8 reg71a[] = { 0x08, 0x18, 0x0a, 0x1e }; /* 640 */ -static __u8 reg71b[] = { 0x04, 0x0c, 0x05, 0x0f }; +static const __u8 reg20[] = { 0x10, 0x42, 0x81, 0x19, 0xd3, 0xff, 0xa7, 0xff }; +static const __u8 reg28[] = { 0x87, 0x00, 0x87, 0x00, 0x8f, 0xff, 0xea, 0xff }; +static const __u8 reg10[] = { 0xb1, 0xb1 }; +static const __u8 reg71a[] = { 0x08, 0x18, 0x0a, 0x1e }; /* 640 */ +static const __u8 reg71b[] = { 0x04, 0x0c, 0x05, 0x0f }; /* 352{0x04,0x0a,0x06,0x12}; //352{0x05,0x0e,0x06,0x11}; //352 */ -static __u8 reg71c[] = { 0x02, 0x07, 0x03, 0x09 }; +static const __u8 reg71c[] = { 0x02, 0x07, 0x03, 0x09 }; /* 320{0x04,0x0c,0x05,0x0f}; //320 */ -static __u8 reg71d[] = { 0x02, 0x07, 0x03, 0x09 }; /* 176 */ -static __u8 reg7b[] = { 0x00, 0xff, 0x00, 0xff, 0x00, 0xff }; +static const __u8 reg71d[] = { 0x02, 0x07, 0x03, 0x09 }; /* 176 */ +static const __u8 reg7b[] = { 0x00, 0xff, 0x00, 0xff, 0x00, 0xff }; static void cx_sensor(struct gspca_dev*gspca_dev) { - __u8 val = 0; + __u8 val; int i = 0; __u8 bufread[] = { 0, 0, 0, 0, 0, 0, 0, 0 }; - int length = 0; - __u8 *ptsensor = cxsensor; + int length; + const __u8 *ptsensor = cxsensor; reg_w(gspca_dev->dev, 0x0020, reg20, 8); reg_w(gspca_dev->dev, 0x0028, reg28, 8); @@ -261,7 +285,7 @@ static void cx_sensor(struct gspca_dev*gspca_dev) val = 0x03; reg_w(gspca_dev->dev, 0x0092, &val, 1); - switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode) { + switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) { case 0: reg_w(gspca_dev->dev, 0x0071, reg71a, 4); break; @@ -269,7 +293,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: @@ -297,7 +321,7 @@ static void cx_sensor(struct gspca_dev*gspca_dev) reg_r(gspca_dev->dev, 0x00e7, bufread, 8); } -static __u8 cx_inits_176[] = { +static const __u8 cx_inits_176[] = { 0x33, 0x81, 0xB0, 0x00, 0x90, 0x00, 0x0A, 0x03, /* 176x144 */ 0x00, 0x03, 0x03, 0x03, 0x1B, 0x05, 0x30, 0x03, 0x65, 0x15, 0x18, 0x25, 0x03, 0x25, 0x08, 0x30, @@ -306,7 +330,7 @@ static __u8 cx_inits_176[] = { 0xF7, 0xFF, 0x88, 0xFF, 0x66, 0x02, 0x28, 0x02, 0x1E, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static __u8 cx_inits_320[] = { +static const __u8 cx_inits_320[] = { 0x7f, 0x7f, 0x40, 0x01, 0xf0, 0x00, 0x02, 0x01, 0x00, 0x01, 0x01, 0x01, 0x10, 0x00, 0x02, 0x01, 0x65, 0x45, 0xfa, 0x4c, 0x2c, 0xdf, 0xb9, 0x81, @@ -315,7 +339,7 @@ static __u8 cx_inits_320[] = { 0xf5, 0xff, 0x6d, 0xff, 0xf6, 0x01, 0x43, 0x02, 0xd3, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static __u8 cx_inits_352[] = { +static const __u8 cx_inits_352[] = { 0x2e, 0x7c, 0x60, 0x01, 0x20, 0x01, 0x05, 0x03, 0x00, 0x06, 0x03, 0x06, 0x1b, 0x10, 0x05, 0x3b, 0x30, 0x25, 0x18, 0x25, 0x08, 0x30, 0x03, 0x25, @@ -324,7 +348,7 @@ static __u8 cx_inits_352[] = { 0xf5, 0xff, 0x6b, 0xff, 0xee, 0x01, 0x43, 0x02, 0xe4, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static __u8 cx_inits_640[] = { +static const __u8 cx_inits_640[] = { 0x7e, 0x7e, 0x80, 0x02, 0xe0, 0x01, 0x01, 0x01, 0x00, 0x02, 0x01, 0x02, 0x10, 0x30, 0x01, 0x01, 0x65, 0x45, 0xf7, 0x52, 0x2c, 0xdf, 0xb9, 0x81, @@ -336,13 +360,13 @@ static __u8 cx_inits_640[] = { static int cx11646_initsize(struct gspca_dev *gspca_dev) { - __u8 *cxinit; + const __u8 *cxinit; __u8 val; static const __u8 reg12[] = { 0x08, 0x05, 0x07, 0x04, 0x24 }; static const __u8 reg17[] = { 0x0a, 0x00, 0xf2, 0x01, 0x0f, 0x00, 0x97, 0x02 }; - switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode) { + switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) { case 0: cxinit = cx_inits_640; break; @@ -388,7 +412,7 @@ static int cx11646_initsize(struct gspca_dev *gspca_dev) return val; } -static __u8 cx_jpeg_init[][8] = { +static const __u8 cx_jpeg_init[][8] = { {0xff, 0xd8, 0xff, 0xdb, 0x00, 0x84, 0x00, 0x15}, /* 1 */ {0x0f, 0x10, 0x12, 0x10, 0x0d, 0x15, 0x12, 0x11}, {0x12, 0x18, 0x16, 0x15, 0x19, 0x20, 0x35, 0x22}, @@ -471,7 +495,7 @@ static __u8 cx_jpeg_init[][8] = { }; -static __u8 cxjpeg_640[][8] = { +static const __u8 cxjpeg_640[][8] = { {0xff, 0xd8, 0xff, 0xdb, 0x00, 0x84, 0x00, 0x10}, /* 1 */ {0x0b, 0x0c, 0x0e, 0x0c, 0x0a, 0x10, 0x0e, 0x0d}, {0x0e, 0x12, 0x11, 0x10, 0x13, 0x18, 0x28, 0x1a}, @@ -500,7 +524,7 @@ static __u8 cxjpeg_640[][8] = { {0x00, 0x01, 0x11, 0x02, 0x11, 0x00, 0x3F, 0x00}, {0xFF, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} /* 27 */ }; -static __u8 cxjpeg_352[][8] = { +static const __u8 cxjpeg_352[][8] = { {0xff, 0xd8, 0xff, 0xdb, 0x00, 0x84, 0x00, 0x0d}, {0x09, 0x09, 0x0b, 0x09, 0x08, 0x0D, 0x0b, 0x0a}, {0x0b, 0x0e, 0x0d, 0x0d, 0x0f, 0x13, 0x1f, 0x14}, @@ -529,7 +553,7 @@ static __u8 cxjpeg_352[][8] = { {0x00, 0x01, 0x11, 0x02, 0x11, 0x00, 0x3F, 0x00}, {0xFF, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} }; -static __u8 cxjpeg_320[][8] = { +static const __u8 cxjpeg_320[][8] = { {0xff, 0xd8, 0xff, 0xdb, 0x00, 0x84, 0x00, 0x05}, {0x03, 0x04, 0x04, 0x04, 0x03, 0x05, 0x04, 0x04}, {0x04, 0x05, 0x05, 0x05, 0x06, 0x07, 0x0c, 0x08}, @@ -558,7 +582,7 @@ static __u8 cxjpeg_320[][8] = { {0x00, 0x01, 0x11, 0x02, 0x11, 0x00, 0x3F, 0x00}, {0xFF, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} /* 27 */ }; -static __u8 cxjpeg_176[][8] = { +static const __u8 cxjpeg_176[][8] = { {0xff, 0xd8, 0xff, 0xdb, 0x00, 0x84, 0x00, 0x0d}, {0x09, 0x09, 0x0B, 0x09, 0x08, 0x0D, 0x0B, 0x0A}, {0x0B, 0x0E, 0x0D, 0x0D, 0x0F, 0x13, 0x1F, 0x14}, @@ -587,7 +611,8 @@ static __u8 cxjpeg_176[][8] = { {0x00, 0x01, 0x11, 0x02, 0x11, 0x00, 0x3F, 0x00}, {0xFF, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} }; -static __u8 cxjpeg_qtable[][8] = { /* 640 take with the zcx30x part */ +/* 640 take with the zcx30x part */ +static const __u8 cxjpeg_qtable[][8] = { {0xff, 0xd8, 0xff, 0xdb, 0x00, 0x84, 0x00, 0x08}, {0x06, 0x06, 0x07, 0x06, 0x05, 0x08, 0x07, 0x07}, {0x07, 0x09, 0x09, 0x08, 0x0a, 0x0c, 0x14, 0x0a}, @@ -633,22 +658,23 @@ static void cx11646_jpegInit(struct gspca_dev*gspca_dev) reg_w(gspca_dev->dev, 0x0055, &val, 1); } -static __u8 reg12[] = { 0x0a, 0x05, 0x07, 0x04, 0x19 }; -static __u8 regE5_8[] = { 0x88, 0x00, 0xd4, 0x01, 0x88, 0x01, 0x01, 0x01 }; -static __u8 regE5a[] = { 0x88, 0x0a, 0x0c, 0x01 }; -static __u8 regE5b[] = { 0x88, 0x0b, 0x12, 0x01 }; -static __u8 regE5c[] = { 0x88, 0x05, 0x01, 0x01 }; -static __u8 reg51[] = { 0x77, 0x03 }; -static __u8 reg70 = 0x03; +static const __u8 reg12[] = { 0x0a, 0x05, 0x07, 0x04, 0x19 }; +static const __u8 regE5_8[] = + { 0x88, 0x00, 0xd4, 0x01, 0x88, 0x01, 0x01, 0x01 }; +static const __u8 regE5a[] = { 0x88, 0x0a, 0x0c, 0x01 }; +static const __u8 regE5b[] = { 0x88, 0x0b, 0x12, 0x01 }; +static const __u8 regE5c[] = { 0x88, 0x05, 0x01, 0x01 }; +static const __u8 reg51[] = { 0x77, 0x03 }; +static const __u8 reg70 = 0x03; static void cx11646_jpeg(struct gspca_dev*gspca_dev) { __u8 val; int i; - int length = 8; - __u8 Reg55 = 0x14; - __u8 bufread[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; - int retry = 50; + int length; + __u8 Reg55; + __u8 bufread[8]; + int retry; val = 0x01; reg_w(gspca_dev->dev, 0x00c0, &val, 1); @@ -657,13 +683,13 @@ static void cx11646_jpeg(struct gspca_dev*gspca_dev) val = 0x00; reg_w(gspca_dev->dev, 0x00c0, &val, 1); reg_r(gspca_dev->dev, 0x0001, &val, 1); - switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode) { + length = 8; + switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) { case 0: 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; @@ -671,8 +697,7 @@ 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_352[i], length); + reg_w(gspca_dev->dev, 0x0008, cxjpeg_352[i], length); } Reg55 = 0x16; break; @@ -681,8 +706,7 @@ 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; @@ -690,8 +714,7 @@ 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_176[i], length); + reg_w(gspca_dev->dev, 0x0008, cxjpeg_176[i], length); } Reg55 = 0x0B; break; @@ -715,6 +738,7 @@ static void cx11646_jpeg(struct gspca_dev*gspca_dev) val = 0x00; reg_w(gspca_dev->dev, 0x0000, &val, 1); /* wait for completion */ + retry = 50; while (retry--) { reg_r(gspca_dev->dev, 0x0002, &val, 1); /* 0x07 until 0x00 */ @@ -731,8 +755,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 */ @@ -793,8 +816,8 @@ static void cx11646_init1(struct gspca_dev *gspca_dev) reg_w(gspca_dev->dev, 0x003f, &val, 1); val = 0x40; reg_w(gspca_dev->dev, 0x003d, &val, 1); -/* val= 0x60; */ -/* reg_w(gspca_dev->dev,0x00,0x00,0x003d,&val,1); */ +/* val= 0x60; */ +/* reg_w(gspca_dev->dev, 0x00, 0x00, 0x003d, &val, 1); */ reg_r(gspca_dev->dev, 0x0099, &val, 1); /* ->0x07 */ while (cx_sensor_init[i][0]) { @@ -824,10 +847,10 @@ static int sd_config(struct gspca_dev *gspca_dev, cam->cam_mode = vga_mode; cam->nmodes = sizeof vga_mode / sizeof vga_mode[0]; - sd->qindex = 0; /* set the quantization table */ - sd->brightness = sd_ctrls[SD_BRIGHTNESS].qctrl.default_value; - sd->contrast = sd_ctrls[SD_CONTRAST].qctrl.default_value; - sd->colors = sd_ctrls[SD_COLOR].qctrl.default_value; + sd->qindex = 0; /* set the quantization */ + sd->brightness = BRIGHTNESS_DEF; + sd->contrast = CONTRAST_DEF; + sd->colors = COLOR_DEF; return 0; } @@ -866,7 +889,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; @@ -888,7 +911,7 @@ static void sd_close(struct gspca_dev *gspca_dev) static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, /* target */ - unsigned char *data, /* isoc packet */ + __u8 *data, /* isoc packet */ int len) /* iso packet length */ { if (data[0] == 0xff && data[1] == 0xd8) { @@ -911,21 +934,22 @@ static void setbrightness(struct gspca_dev*gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; __u8 regE5cbx[] = { 0x88, 0x00, 0xd4, 0x01, 0x88, 0x01, 0x01, 0x01 }; - __u8 reg51c[] = { 0x77, 0x03 }; + __u8 reg51c[2]; __u8 bright; __u8 colors; __u8 val; __u8 bufread[8]; bright = sd->brightness; - colors = sd->colors; regE5cbx[2] = bright; - reg51c[1] = colors; reg_w(gspca_dev->dev, 0x00e5, regE5cbx, 8); reg_r(gspca_dev->dev, 0x00e8, bufread, 8); reg_w(gspca_dev->dev, 0x00e5, regE5c, 4); reg_r(gspca_dev->dev, 0x00e8, &val, 1); /* 0x00 */ + colors = sd->colors; + reg51c[0] = 0x77; + reg51c[1] = colors; reg_w(gspca_dev->dev, 0x0051, reg51c, 2); reg_w(gspca_dev->dev, 0x0010, reg10, 2); reg_w(gspca_dev->dev, 0x0070, ®70, 1); @@ -935,14 +959,15 @@ static void setcontrast(struct gspca_dev*gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; __u8 regE5acx[] = { 0x88, 0x0a, 0x0c, 0x01 }; /* seem MSB */ - /* __u8 regE5bcx[]={0x88,0x0b,0x12,0x01}; // LSB */ - __u8 reg51c[] = { 0x77, 0x03 }; +/* __u8 regE5bcx[] = { 0x88, 0x0b, 0x12, 0x01}; * LSB */ + __u8 reg51c[2]; __u8 val; - reg51c[1] = sd->colors; regE5acx[2] = sd->contrast; reg_w(gspca_dev->dev, 0x00e5, regE5acx, 4); reg_r(gspca_dev->dev, 0x00e8, &val, 1); /* 0x00 */ + reg51c[0] = 0x77; + reg51c[1] = sd->colors; reg_w(gspca_dev->dev, 0x0051, reg51c, 2); reg_w(gspca_dev->dev, 0x0010, reg10, 2); reg_w(gspca_dev->dev, 0x0070, ®70, 1); diff --git a/linux/drivers/media/video/gspca/etoms.c b/linux/drivers/media/video/gspca/etoms.c index f3320584a..fe34ee8d6 100644 --- a/linux/drivers/media/video/gspca/etoms.c +++ b/linux/drivers/media/video/gspca/etoms.c @@ -22,8 +22,8 @@ #include "gspca.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, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>"); MODULE_DESCRIPTION("Etoms USB Camera Driver"); @@ -56,7 +56,6 @@ static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val); static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val); static struct ctrl sd_ctrls[] = { -#define SD_BRIGHTNESS 0 { { .id = V4L2_CID_BRIGHTNESS, @@ -65,12 +64,12 @@ static struct ctrl sd_ctrls[] = { .minimum = 1, .maximum = 127, .step = 1, - .default_value = 63, +#define BRIGHTNESS_DEF 63 + .default_value = BRIGHTNESS_DEF, }, .set = sd_setbrightness, .get = sd_getbrightness, }, -#define SD_CONTRAST 1 { { .id = V4L2_CID_CONTRAST, @@ -79,12 +78,12 @@ static struct ctrl sd_ctrls[] = { .minimum = 0, .maximum = 255, .step = 1, - .default_value = 127, +#define CONTRAST_DEF 127 + .default_value = CONTRAST_DEF, }, .set = sd_setcontrast, .get = sd_getcontrast, }, -#define SD_COLOR 2 { { .id = V4L2_CID_SATURATION, @@ -93,12 +92,12 @@ static struct ctrl sd_ctrls[] = { .minimum = 0, .maximum = 15, .step = 1, - .default_value = 7, +#define COLOR_DEF 7 + .default_value = COLOR_DEF, }, .set = sd_setcolors, .get = sd_getcolors, }, -#define SD_AUTOGAIN 3 { { .id = V4L2_CID_AUTOGAIN, @@ -107,21 +106,38 @@ static struct ctrl sd_ctrls[] = { .minimum = 0, .maximum = 1, .step = 1, - .default_value = 1, +#define AUTOGAIN_DEF 1 + .default_value = AUTOGAIN_DEF, }, .set = sd_setautogain, .get = sd_getautogain, }, }; -static struct cam_mode vga_mode[] = { - {V4L2_PIX_FMT_SBGGR8, 320, 240, 1}, -/* {V4L2_PIX_FMT_SBGGR8, 640, 480, 0}, */ +static struct v4l2_pix_format vga_mode[] = { + {320, 240, V4L2_PIX_FMT_SBGGR8, V4L2_FIELD_NONE, + .bytesperline = 320, + .sizeimage = 320 * 240, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 1}, +/* {640, 480, V4L2_PIX_FMT_SBGGR8, V4L2_FIELD_NONE, + .bytesperline = 640, + .sizeimage = 640 * 480, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 0}, */ }; -static struct cam_mode sif_mode[] = { - {V4L2_PIX_FMT_SBGGR8, 176, 144, 1}, - {V4L2_PIX_FMT_SBGGR8, 352, 288, 0}, +static struct v4l2_pix_format sif_mode[] = { + {176, 144, V4L2_PIX_FMT_SBGGR8, V4L2_FIELD_NONE, + .bytesperline = 176, + .sizeimage = 176 * 144, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 1}, + {352, 288, V4L2_PIX_FMT_SBGGR8, V4L2_FIELD_NONE, + .bytesperline = 352, + .sizeimage = 352 * 288, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 0}, }; #define ETOMS_ALT_SIZE_1000 12 @@ -205,15 +221,15 @@ static struct cam_mode sif_mode[] = { #define PAS106_REG0e 0x0e /* global gain [4..0](default 0x0e) */ #define PAS106_REG13 0x13 /* end i2c write */ -static __u8 GainRGBG[] = { 0x80, 0x80, 0x80, 0x80, 0x00, 0x00 }; +static const __u8 GainRGBG[] = { 0x80, 0x80, 0x80, 0x80, 0x00, 0x00 }; -static __u8 I2c2[] = { 0x08, 0x08, 0x08, 0x08, 0x0d }; +static const __u8 I2c2[] = { 0x08, 0x08, 0x08, 0x08, 0x0d }; -static __u8 I2c3[] = { 0x12, 0x05 }; +static const __u8 I2c3[] = { 0x12, 0x05 }; -static __u8 I2c4[] = { 0x41, 0x08 }; +static const __u8 I2c4[] = { 0x41, 0x08 }; -static void Et_RegRead(struct usb_device *dev, +static void reg_r(struct usb_device *dev, __u16 index, __u8 *buffer, int len) { usb_control_msg(dev, @@ -223,61 +239,71 @@ static void Et_RegRead(struct usb_device *dev, 0, index, buffer, len, 500); } -static void Et_RegWrite(struct usb_device *dev, - __u16 index, __u8 *buffer, __u16 len) +static void reg_w_val(struct usb_device *dev, + __u16 index, __u8 val) { + __u8 data; + + data = val; usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 0, USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, - 0, index, buffer, len, 500); + 0, index, &data, 1, 500); } -static int Et_i2cwrite(struct usb_device *dev, __u8 reg, __u8 *buffer, - __u16 length, __u8 mode) +static void reg_w(struct usb_device *dev, + __u16 index, const __u8 *buffer, __u16 len) { -/* buffer should be [D0..D7] */ - int i, j; - __u8 base = 0x40; /* sensor base for the pas106 */ - __u8 ptchcount = 0; - - ptchcount = (((length & 0x07) << 4) | (mode & 0x03)); -/* set the base address */ - Et_RegWrite(dev, ET_I2C_BASE, &base, 1); -/* set count and prefetch */ - Et_RegWrite(dev, ET_I2C_COUNT, &ptchcount, 1); -/* set the register base */ - Et_RegWrite(dev, ET_I2C_REG, ®, 1); - j = length - 1; - for (i = 0; i < length; i++) { - Et_RegWrite(dev, (ET_I2C_DATA0 + j), &buffer[j], 1); - j--; - } + __u8 tmpbuf[8]; + + memcpy(tmpbuf, buffer, len); + usb_control_msg(dev, + usb_sndctrlpipe(dev, 0), + 0, + USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, + 0, index, tmpbuf, len, 500); +} + +static int Et_i2cwrite(struct usb_device *dev, __u8 reg, + const __u8 *buffer, + __u16 len, __u8 mode) +{ + /* buffer should be [D0..D7] */ + __u8 ptchcount; + + /* set the base address */ + reg_w_val(dev, ET_I2C_BASE, 0x40); /* sensor base for the pas106 */ + /* set count and prefetch */ + ptchcount = ((len & 0x07) << 4) | (mode & 0x03); + reg_w_val(dev, ET_I2C_COUNT, ptchcount); + /* set the register base */ + reg_w_val(dev, ET_I2C_REG, reg); + while (--len >= 0) + reg_w_val(dev, ET_I2C_DATA0 + len, buffer[len]); return 0; } -static int Et_i2cread(struct usb_device *dev, __u8 reg, __u8 *buffer, - __u16 length, __u8 mode) +static int Et_i2cread(struct usb_device *dev, __u8 reg, + __u8 *buffer, + __u16 length, __u8 mode) { -/* buffer should be [D0..D7] */ + /* buffer should be [D0..D7] */ int i, j; - __u8 base = 0x40; /* sensor base for the pas106 */ __u8 ptchcount; - __u8 prefetch = 0x02; - - ptchcount = (((length & 0x07) << 4) | (mode & 0x03)); -/* set the base address */ - Et_RegWrite(dev, ET_I2C_BASE, &base, 1); -/* set count and prefetch */ - Et_RegWrite(dev, ET_I2C_COUNT, &ptchcount, 1); -/* set the register base */ - Et_RegWrite(dev, ET_I2C_REG, ®, 1); - Et_RegWrite(dev, ET_I2C_PREFETCH, &prefetch, 1); - prefetch = 0x00; - Et_RegWrite(dev, ET_I2C_PREFETCH, &prefetch, 1); + + /* set the base address */ + reg_w_val(dev, ET_I2C_BASE, 0x40); /* sensor base for the pas106 */ + /* set count and prefetch */ + ptchcount = ((length & 0x07) << 4) | (mode & 0x03); + reg_w_val(dev, ET_I2C_COUNT, ptchcount); + /* set the register base */ + reg_w_val(dev, ET_I2C_REG, reg); + reg_w_val(dev, ET_I2C_PREFETCH, 0x02); /* prefetch */ + reg_w_val(dev, ET_I2C_PREFETCH, 0); j = length - 1; for (i = 0; i < length; i++) { - Et_RegRead(dev, (ET_I2C_DATA0 + j), &buffer[j], 1); + reg_r(dev, (ET_I2C_DATA0 + j), &buffer[j], 1); j--; } return 0; @@ -289,229 +315,146 @@ static int Et_WaitStatus(struct usb_device *dev) int retry = 10; while (retry--) { - Et_RegRead(dev, ET_ClCK, &bytereceived, 1); + reg_r(dev, ET_ClCK, &bytereceived, 1); if (bytereceived != 0) return 1; } return 0; } -static int Et_videoOff(struct usb_device *dev) +static int et_video(struct usb_device *dev, int on) { int err; - __u8 stopvideo = 0; - Et_RegWrite(dev, ET_GPIO_OUT, &stopvideo, 1); + reg_w_val(dev, ET_GPIO_OUT, on + ? 0x10 /* startvideo - set Bit5 */ + : 0); /* stopvideo */ err = Et_WaitStatus(dev); if (!err) - PDEBUG(D_ERR, "timeout Et_waitStatus VideoON"); - return err; -} - -static int Et_videoOn(struct usb_device *dev) -{ - int err; - __u8 startvideo = 0x10; /* set Bit5 */ - - Et_RegWrite(dev, ET_GPIO_OUT, &startvideo, 1); - err = Et_WaitStatus(dev); - if (!err) - PDEBUG(D_ERR, "timeout Et_waitStatus VideoOFF"); + PDEBUG(D_ERR, "timeout video on/off"); return err; } static void Et_init2(struct gspca_dev *gspca_dev) { struct usb_device *dev = gspca_dev->dev; - __u8 value = 0x00; - __u8 received = 0x00; - __u8 FormLine[] = { 0x84, 0x03, 0x14, 0xf4, 0x01, 0x05 }; + __u8 value; + __u8 received; + static const __u8 FormLine[] = { 0x84, 0x03, 0x14, 0xf4, 0x01, 0x05 }; PDEBUG(D_STREAM, "Open Init2 ET"); - value = 0x2f; - Et_RegWrite(dev, ET_GPIO_DIR_CTRL, &value, 1); - value = 0x10; - Et_RegWrite(dev, ET_GPIO_OUT, &value, 1); - Et_RegRead(dev, ET_GPIO_IN, &received, 1); - value = 0x14; /* 0x14 // 0x16 enabled pattern */ - Et_RegWrite(dev, ET_ClCK, &value, 1); - value = 0x1b; - Et_RegWrite(dev, ET_CTRL, &value, 1); + reg_w_val(dev, ET_GPIO_DIR_CTRL, 0x2f); + reg_w_val(dev, ET_GPIO_OUT, 0x10); + reg_r(dev, ET_GPIO_IN, &received, 1); + reg_w_val(dev, ET_ClCK, 0x14); /* 0x14 // 0x16 enabled pattern */ + reg_w_val(dev, ET_CTRL, 0x1b); /* compression et subsampling */ - if (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode) + if (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) value = ET_COMP_VAL1; /* 320 */ else value = ET_COMP_VAL0; /* 640 */ - Et_RegWrite(dev, ET_COMP, &value, 1); - value = 0x1f; - Et_RegWrite(dev, ET_MAXQt, &value, 1); - value = 0x04; - Et_RegWrite(dev, ET_MINQt, &value, 1); + reg_w_val(dev, ET_COMP, value); + reg_w_val(dev, ET_MAXQt, 0x1f); + reg_w_val(dev, ET_MINQt, 0x04); /* undocumented registers */ - value = 0xff; - Et_RegWrite(dev, ET_REG1d, &value, 1); - value = 0xff; - Et_RegWrite(dev, ET_REG1e, &value, 1); - value = 0xff; - Et_RegWrite(dev, ET_REG1f, &value, 1); - value = 0x35; - Et_RegWrite(dev, ET_REG20, &value, 1); - value = 0x01; - Et_RegWrite(dev, ET_REG21, &value, 1); - value = 0x00; - Et_RegWrite(dev, ET_REG22, &value, 1); - value = 0xff; - Et_RegWrite(dev, ET_REG23, &value, 1); - value = 0xff; - Et_RegWrite(dev, ET_REG24, &value, 1); - value = 0x0f; - Et_RegWrite(dev, ET_REG25, &value, 1); + reg_w_val(dev, ET_REG1d, 0xff); + reg_w_val(dev, ET_REG1e, 0xff); + reg_w_val(dev, ET_REG1f, 0xff); + reg_w_val(dev, ET_REG20, 0x35); + reg_w_val(dev, ET_REG21, 0x01); + reg_w_val(dev, ET_REG22, 0x00); + reg_w_val(dev, ET_REG23, 0xff); + reg_w_val(dev, ET_REG24, 0xff); + reg_w_val(dev, ET_REG25, 0x0f); /* colors setting */ - value = 0x11; - Et_RegWrite(dev, 0x30, &value, 1); /* 0x30 */ - value = 0x40; - Et_RegWrite(dev, 0x31, &value, 1); - value = 0x00; - Et_RegWrite(dev, 0x32, &value, 1); - value = 0x00; - Et_RegWrite(dev, ET_O_RED, &value, 1); /* 0x34 */ - value = 0x00; - Et_RegWrite(dev, ET_O_GREEN1, &value, 1); - value = 0x00; - Et_RegWrite(dev, ET_O_BLUE, &value, 1); - value = 0x00; - Et_RegWrite(dev, ET_O_GREEN2, &value, 1); + reg_w_val(dev, 0x30, 0x11); /* 0x30 */ + reg_w_val(dev, 0x31, 0x40); + reg_w_val(dev, 0x32, 0x00); + reg_w_val(dev, ET_O_RED, 0x00); /* 0x34 */ + reg_w_val(dev, ET_O_GREEN1, 0x00); + reg_w_val(dev, ET_O_BLUE, 0x00); + reg_w_val(dev, ET_O_GREEN2, 0x00); /*************/ - value = 0x80; - Et_RegWrite(dev, ET_G_RED, &value, 1); /* 0x4d */ - value = 0x80; - Et_RegWrite(dev, ET_G_GREEN1, &value, 1); - value = 0x80; - Et_RegWrite(dev, ET_G_BLUE, &value, 1); - value = 0x80; - Et_RegWrite(dev, ET_G_GREEN2, &value, 1); - value = 0x00; - Et_RegWrite(dev, ET_G_GR_H, &value, 1); - value = 0x00; - Et_RegWrite(dev, ET_G_GB_H, &value, 1); /* 0x52 */ + reg_w_val(dev, ET_G_RED, 0x80); /* 0x4d */ + reg_w_val(dev, ET_G_GREEN1, 0x80); + reg_w_val(dev, ET_G_BLUE, 0x80); + reg_w_val(dev, ET_G_GREEN2, 0x80); + reg_w_val(dev, ET_G_GR_H, 0x00); + reg_w_val(dev, ET_G_GB_H, 0x00); /* 0x52 */ /* Window control registers */ - - value = 0x80; /* use cmc_out */ - Et_RegWrite(dev, 0x61, &value, 1); - - value = 0x02; - Et_RegWrite(dev, 0x62, &value, 1); - value = 0x03; - Et_RegWrite(dev, 0x63, &value, 1); - value = 0x14; - Et_RegWrite(dev, 0x64, &value, 1); - value = 0x0e; - Et_RegWrite(dev, 0x65, &value, 1); - value = 0x02; - Et_RegWrite(dev, 0x66, &value, 1); - value = 0x02; - Et_RegWrite(dev, 0x67, &value, 1); + reg_w_val(dev, 0x61, 0x80); /* use cmc_out */ + reg_w_val(dev, 0x62, 0x02); + reg_w_val(dev, 0x63, 0x03); + reg_w_val(dev, 0x64, 0x14); + reg_w_val(dev, 0x65, 0x0e); + reg_w_val(dev, 0x66, 0x02); + reg_w_val(dev, 0x67, 0x02); /**************************************/ - value = 0x8f; - Et_RegWrite(dev, ET_SYNCHRO, &value, 1); /* 0x68 */ - value = 0x69; /* 0x6a //0x69 */ - Et_RegWrite(dev, ET_STARTX, &value, 1); - value = 0x0d; /* 0x0d //0x0c */ - Et_RegWrite(dev, ET_STARTY, &value, 1); - value = 0x80; - Et_RegWrite(dev, ET_WIDTH_LOW, &value, 1); - value = 0xe0; - Et_RegWrite(dev, ET_HEIGTH_LOW, &value, 1); - value = 0x60; - Et_RegWrite(dev, ET_W_H_HEIGTH, &value, 1); /* 6d */ - value = 0x86; - Et_RegWrite(dev, ET_REG6e, &value, 1); - value = 0x01; - Et_RegWrite(dev, ET_REG6f, &value, 1); - value = 0x26; - Et_RegWrite(dev, ET_REG70, &value, 1); - value = 0x7a; - Et_RegWrite(dev, ET_REG71, &value, 1); - value = 0x01; - Et_RegWrite(dev, ET_REG72, &value, 1); + reg_w_val(dev, ET_SYNCHRO, 0x8f); /* 0x68 */ + reg_w_val(dev, ET_STARTX, 0x69); /* 0x6a //0x69 */ + reg_w_val(dev, ET_STARTY, 0x0d); /* 0x0d //0x0c */ + reg_w_val(dev, ET_WIDTH_LOW, 0x80); + reg_w_val(dev, ET_HEIGTH_LOW, 0xe0); + reg_w_val(dev, ET_W_H_HEIGTH, 0x60); /* 6d */ + reg_w_val(dev, ET_REG6e, 0x86); + reg_w_val(dev, ET_REG6f, 0x01); + reg_w_val(dev, ET_REG70, 0x26); + reg_w_val(dev, ET_REG71, 0x7a); + reg_w_val(dev, ET_REG72, 0x01); /* Clock Pattern registers ***************** */ - value = 0x00; - Et_RegWrite(dev, ET_REG73, &value, 1); - value = 0x18; /* 0x28 */ - Et_RegWrite(dev, ET_REG74, &value, 1); - value = 0x0f; /* 0x01 */ - Et_RegWrite(dev, ET_REG75, &value, 1); + reg_w_val(dev, ET_REG73, 0x00); + reg_w_val(dev, ET_REG74, 0x18); /* 0x28 */ + reg_w_val(dev, ET_REG75, 0x0f); /* 0x01 */ /**********************************************/ - value = 0x20; - Et_RegWrite(dev, 0x8a, &value, 1); - value = 0x0f; - Et_RegWrite(dev, 0x8d, &value, 1); - value = 0x08; - Et_RegWrite(dev, 0x8e, &value, 1); + reg_w_val(dev, 0x8a, 0x20); + reg_w_val(dev, 0x8d, 0x0f); + reg_w_val(dev, 0x8e, 0x08); /**************************************/ - value = 0x08; - Et_RegWrite(dev, 0x03, &value, 1); - value = 0x03; - Et_RegWrite(dev, ET_PXL_CLK, &value, 1); - value = 0xff; - Et_RegWrite(dev, 0x81, &value, 1); - value = 0x00; - Et_RegWrite(dev, 0x80, &value, 1); - value = 0xff; - Et_RegWrite(dev, 0x81, &value, 1); - value = 0x20; - Et_RegWrite(dev, 0x80, &value, 1); - value = 0x01; - Et_RegWrite(dev, 0x03, &value, 1); - value = 0x00; - Et_RegWrite(dev, 0x03, &value, 1); - value = 0x08; - Et_RegWrite(dev, 0x03, &value, 1); + reg_w_val(dev, 0x03, 0x08); + reg_w_val(dev, ET_PXL_CLK, 0x03); + reg_w_val(dev, 0x81, 0xff); + reg_w_val(dev, 0x80, 0x00); + reg_w_val(dev, 0x81, 0xff); + reg_w_val(dev, 0x80, 0x20); + reg_w_val(dev, 0x03, 0x01); + reg_w_val(dev, 0x03, 0x00); + reg_w_val(dev, 0x03, 0x08); /********************************************/ - /* Et_RegRead(dev,0x0,ET_I2C_BASE,&received,1); +/* reg_r(dev, ET_I2C_BASE, &received, 1); always 0x40 as the pas106 ??? */ /* set the sensor */ - if (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode) { - value = 0x04; /* 320 */ - Et_RegWrite(dev, ET_PXL_CLK, &value, 1); - /* now set by fifo the FormatLine setting */ - Et_RegWrite(dev, 0x62, FormLine, 6); - } else { /* 640 */ - /* setting PixelClock - 0x03 mean 24/(3+1) = 6 Mhz - 0x05 -> 24/(5+1) = 4 Mhz - 0x0b -> 24/(11+1) = 2 Mhz - 0x17 -> 24/(23+1) = 1 Mhz - */ - value = 0x1e; /* 0x17 */ - Et_RegWrite(dev, ET_PXL_CLK, &value, 1); - /* now set by fifo the FormatLine setting */ - Et_RegWrite(dev, 0x62, FormLine, 6); - } + if (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) + value = 0x04; /* 320 */ + else /* 640 */ + value = 0x1e; /* 0x17 * setting PixelClock + * 0x03 mean 24/(3+1) = 6 Mhz + * 0x05 -> 24/(5+1) = 4 Mhz + * 0x0b -> 24/(11+1) = 2 Mhz + * 0x17 -> 24/(23+1) = 1 Mhz + */ + reg_w_val(dev, ET_PXL_CLK, value); + /* now set by fifo the FormatLine setting */ + reg_w(dev, 0x62, FormLine, 6); /* set exposure times [ 0..0x78] 0->longvalue 0x78->shortvalue */ - value = 0x47; /* 0x47; */ - Et_RegWrite(dev, 0x81, &value, 1); - value = 0x40; /* 0x40; */ - Et_RegWrite(dev, 0x80, &value, 1); + reg_w_val(dev, 0x81, 0x47); /* 0x47; */ + reg_w_val(dev, 0x80, 0x40); /* 0x40; */ /* Pedro change */ /* Brightness change Brith+ decrease value */ /* Brigth- increase value */ /* original value = 0x70; */ - value = 0x30; /* 0x20; */ - Et_RegWrite(dev, 0x81, &value, 1); /* set brightness */ - value = 0x20; /* 0x20; */ - Et_RegWrite(dev, 0x80, &value, 1); + reg_w_val(dev, 0x81, 0x30); /* 0x20; - set brightness */ + reg_w_val(dev, 0x80, 0x20); /* 0x20; */ } static void setcolors(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; struct usb_device *dev = gspca_dev->dev; - static __u8 I2cc[] = { 0x05, 0x02, 0x02, 0x05, 0x0d }; + __u8 I2cc[] = { 0x05, 0x02, 0x02, 0x05, 0x0d }; __u8 i2cflags = 0x01; /* __u8 green = 0; */ __u8 colors = sd->colors; @@ -522,7 +465,7 @@ static void setcolors(struct gspca_dev *gspca_dev) /* I2cc[1] = I2cc[2] = green; */ if (sd->sensor == SENSOR_PAS106) { Et_i2cwrite(dev, PAS106_REG13, &i2cflags, 1, 3); - Et_i2cwrite(dev, PAS106_REG9, I2cc, sizeof(I2cc), 1); + Et_i2cwrite(dev, PAS106_REG9, I2cc, sizeof I2cc, 1); } /* PDEBUG(D_CONF , "Etoms red %d blue %d green %d", I2cc[3], I2cc[0], green); */ @@ -531,11 +474,11 @@ static void setcolors(struct gspca_dev *gspca_dev) static void getcolors(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; - /* __u8 valblue = 0; */ +/* __u8 valblue; */ __u8 valred; if (sd->sensor == SENSOR_PAS106) { - /* Et_i2cread(gspca_dev->dev,PAS106_REG9,&valblue,1,1); */ +/* Et_i2cread(gspca_dev->dev, PAS106_REG9, &valblue, 1, 1); */ Et_i2cread(gspca_dev->dev, PAS106_REG9 + 3, &valred, 1, 1); sd->colors = valred & 0x0f; } @@ -544,126 +487,87 @@ static void getcolors(struct gspca_dev *gspca_dev) static void Et_init1(struct gspca_dev *gspca_dev) { struct usb_device *dev = gspca_dev->dev; - __u8 value = 0x00; - __u8 received = 0x00; -/* __u8 I2c0 [] ={0x0a,0x12,0x05,0x22,0xac,0x00,0x01,0x00}; */ + __u8 value; + __u8 received; +/* __u8 I2c0 [] = {0x0a, 0x12, 0x05, 0x22, 0xac, 0x00, 0x01, 0x00}; */ __u8 I2c0[] = { 0x0a, 0x12, 0x05, 0x6d, 0xcd, 0x00, 0x01, 0x00 }; /* try 1/120 0x6d 0xcd 0x40 */ -/* __u8 I2c0 [] ={0x0a,0x12,0x05,0xfe,0xfe,0xc0,0x01,0x00}; +/* __u8 I2c0 [] = {0x0a, 0x12, 0x05, 0xfe, 0xfe, 0xc0, 0x01, 0x00}; * 1/60000 hmm ?? */ PDEBUG(D_STREAM, "Open Init1 ET"); - value = 7; - Et_RegWrite(dev, ET_GPIO_DIR_CTRL, &value, 1); - Et_RegRead(dev, ET_GPIO_IN, &received, 1); - value = 1; - Et_RegWrite(dev, ET_RESET_ALL, &value, 1); - value = 0; - Et_RegWrite(dev, ET_RESET_ALL, &value, 1); - value = 0x10; - Et_RegWrite(dev, ET_ClCK, &value, 1); - value = 0x19; - Et_RegWrite(dev, ET_CTRL, &value, 1); + reg_w_val(dev, ET_GPIO_DIR_CTRL, 7); + reg_r(dev, ET_GPIO_IN, &received, 1); + reg_w_val(dev, ET_RESET_ALL, 1); + reg_w_val(dev, ET_RESET_ALL, 0); + reg_w_val(dev, ET_ClCK, 0x10); + reg_w_val(dev, ET_CTRL, 0x19); /* compression et subsampling */ - if (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode) + if (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) value = ET_COMP_VAL1; else value = ET_COMP_VAL0; - PDEBUG(D_STREAM, "Open mode %d Compression %d", - gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode, + gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv, value); - Et_RegWrite(dev, ET_COMP, &value, 1); - value = 0x1d; - Et_RegWrite(dev, ET_MAXQt, &value, 1); - value = 0x02; - Et_RegWrite(dev, ET_MINQt, &value, 1); + reg_w_val(dev, ET_COMP, value); + reg_w_val(dev, ET_MAXQt, 0x1d); + reg_w_val(dev, ET_MINQt, 0x02); /* undocumented registers */ - value = 0xff; - Et_RegWrite(dev, ET_REG1d, &value, 1); - value = 0xff; - Et_RegWrite(dev, ET_REG1e, &value, 1); - value = 0xff; - Et_RegWrite(dev, ET_REG1f, &value, 1); - value = 0x35; - Et_RegWrite(dev, ET_REG20, &value, 1); - value = 0x01; - Et_RegWrite(dev, ET_REG21, &value, 1); - value = 0x00; - Et_RegWrite(dev, ET_REG22, &value, 1); - value = 0xf7; - Et_RegWrite(dev, ET_REG23, &value, 1); - value = 0xff; - Et_RegWrite(dev, ET_REG24, &value, 1); - value = 0x07; - Et_RegWrite(dev, ET_REG25, &value, 1); + reg_w_val(dev, ET_REG1d, 0xff); + reg_w_val(dev, ET_REG1e, 0xff); + reg_w_val(dev, ET_REG1f, 0xff); + reg_w_val(dev, ET_REG20, 0x35); + reg_w_val(dev, ET_REG21, 0x01); + reg_w_val(dev, ET_REG22, 0x00); + reg_w_val(dev, ET_REG23, 0xf7); + reg_w_val(dev, ET_REG24, 0xff); + reg_w_val(dev, ET_REG25, 0x07); /* colors setting */ - value = 0x80; - Et_RegWrite(dev, ET_G_RED, &value, 1); - value = 0x80; - Et_RegWrite(dev, ET_G_GREEN1, &value, 1); - value = 0x80; - Et_RegWrite(dev, ET_G_BLUE, &value, 1); - value = 0x80; - Et_RegWrite(dev, ET_G_GREEN2, &value, 1); - value = 0x00; - Et_RegWrite(dev, ET_G_GR_H, &value, 1); - value = 0x00; - Et_RegWrite(dev, ET_G_GB_H, &value, 1); + reg_w_val(dev, ET_G_RED, 0x80); + reg_w_val(dev, ET_G_GREEN1, 0x80); + reg_w_val(dev, ET_G_BLUE, 0x80); + reg_w_val(dev, ET_G_GREEN2, 0x80); + reg_w_val(dev, ET_G_GR_H, 0x00); + reg_w_val(dev, ET_G_GB_H, 0x00); /* Window control registers */ - value = 0xf0; - Et_RegWrite(dev, ET_SYNCHRO, &value, 1); - value = 0x56; /* 0x56 */ - Et_RegWrite(dev, ET_STARTX, &value, 1); - value = 0x05; /* 0x04 */ - Et_RegWrite(dev, ET_STARTY, &value, 1); - value = 0x60; - Et_RegWrite(dev, ET_WIDTH_LOW, &value, 1); - value = 0x20; - Et_RegWrite(dev, ET_HEIGTH_LOW, &value, 1); - value = 0x50; - Et_RegWrite(dev, ET_W_H_HEIGTH, &value, 1); - value = 0x86; - Et_RegWrite(dev, ET_REG6e, &value, 1); - value = 0x01; - Et_RegWrite(dev, ET_REG6f, &value, 1); - value = 0x86; - Et_RegWrite(dev, ET_REG70, &value, 1); - value = 0x14; - Et_RegWrite(dev, ET_REG71, &value, 1); - value = 0x00; - Et_RegWrite(dev, ET_REG72, &value, 1); + reg_w_val(dev, ET_SYNCHRO, 0xf0); + reg_w_val(dev, ET_STARTX, 0x56); /* 0x56 */ + reg_w_val(dev, ET_STARTY, 0x05); /* 0x04 */ + reg_w_val(dev, ET_WIDTH_LOW, 0x60); + reg_w_val(dev, ET_HEIGTH_LOW, 0x20); + reg_w_val(dev, ET_W_H_HEIGTH, 0x50); + reg_w_val(dev, ET_REG6e, 0x86); + reg_w_val(dev, ET_REG6f, 0x01); + reg_w_val(dev, ET_REG70, 0x86); + reg_w_val(dev, ET_REG71, 0x14); + reg_w_val(dev, ET_REG72, 0x00); /* Clock Pattern registers */ - value = 0x00; - Et_RegWrite(dev, ET_REG73, &value, 1); - value = 0x00; - Et_RegWrite(dev, ET_REG74, &value, 1); - value = 0x0a; - Et_RegWrite(dev, ET_REG75, &value, 1); - value = 0x04; - Et_RegWrite(dev, ET_I2C_CLK, &value, 1); - value = 0x01; - Et_RegWrite(dev, ET_PXL_CLK, &value, 1); + reg_w_val(dev, ET_REG73, 0x00); + reg_w_val(dev, ET_REG74, 0x00); + reg_w_val(dev, ET_REG75, 0x0a); + reg_w_val(dev, ET_I2C_CLK, 0x04); + reg_w_val(dev, ET_PXL_CLK, 0x01); /* set the sensor */ - if (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode) { + if (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) { I2c0[0] = 0x06; - Et_i2cwrite(dev, PAS106_REG2, I2c0, sizeof(I2c0), 1); - Et_i2cwrite(dev, PAS106_REG9, I2c2, sizeof(I2c2), 1); + Et_i2cwrite(dev, PAS106_REG2, I2c0, sizeof I2c0, 1); + Et_i2cwrite(dev, PAS106_REG9, I2c2, sizeof I2c2, 1); value = 0x06; Et_i2cwrite(dev, PAS106_REG2, &value, 1, 1); - Et_i2cwrite(dev, PAS106_REG3, I2c3, sizeof(I2c3), 1); + Et_i2cwrite(dev, PAS106_REG3, I2c3, sizeof I2c3, 1); /* value = 0x1f; */ value = 0x04; Et_i2cwrite(dev, PAS106_REG0e, &value, 1, 1); } else { I2c0[0] = 0x0a; - Et_i2cwrite(dev, PAS106_REG2, I2c0, sizeof(I2c0), 1); - Et_i2cwrite(dev, PAS106_REG9, I2c2, sizeof(I2c2), 1); + Et_i2cwrite(dev, PAS106_REG2, I2c0, sizeof I2c0, 1); + Et_i2cwrite(dev, PAS106_REG9, I2c2, sizeof I2c2, 1); value = 0x0a; Et_i2cwrite(dev, PAS106_REG2, &value, 1, 1); - Et_i2cwrite(dev, PAS106_REG3, I2c3, sizeof(I2c3), 1); + Et_i2cwrite(dev, PAS106_REG3, I2c3, sizeof I2c3, 1); value = 0x04; /* value = 0x10; */ Et_i2cwrite(dev, PAS106_REG0e, &value, 1, 1); @@ -679,7 +583,7 @@ static void Et_init1(struct gspca_dev *gspca_dev) /* magnetude and sign bit for DAC */ Et_i2cwrite(dev, PAS106_REG7, I2c4, sizeof I2c4, 1); /* now set by fifo the whole colors setting */ - Et_RegWrite(dev, ET_G_RED, GainRGBG, 6); + reg_w(dev, ET_G_RED, GainRGBG, 6); getcolors(gspca_dev); setcolors(gspca_dev); } @@ -717,10 +621,10 @@ static int sd_config(struct gspca_dev *gspca_dev, cam->cam_mode = vga_mode; cam->nmodes = sizeof vga_mode / sizeof vga_mode[0]; } - sd->brightness = sd_ctrls[SD_BRIGHTNESS].qctrl.default_value; - sd->contrast = sd_ctrls[SD_CONTRAST].qctrl.default_value; - sd->colors = sd_ctrls[SD_COLOR].qctrl.default_value; - sd->autogain = sd_ctrls[SD_AUTOGAIN].qctrl.default_value; + sd->brightness = BRIGHTNESS_DEF; + sd->contrast = CONTRAST_DEF; + sd->colors = COLOR_DEF; + sd->autogain = AUTOGAIN_DEF; return 0; } @@ -729,18 +633,13 @@ static int sd_open(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; struct usb_device *dev = gspca_dev->dev; - int err; - __u8 value; - PDEBUG(D_STREAM, "Initialize ET1"); if (sd->sensor == SENSOR_PAS106) Et_init1(gspca_dev); else Et_init2(gspca_dev); - value = 0x08; - Et_RegWrite(dev, ET_RESET_ALL, &value, 1); - err = Et_videoOff(dev); - PDEBUG(D_STREAM, "Et_Init_VideoOff %d", err); + reg_w_val(dev, ET_RESET_ALL, 0x08); + et_video(dev, 0); /* video off */ return 0; } @@ -749,27 +648,19 @@ static void sd_start(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; struct usb_device *dev = gspca_dev->dev; - int err; - __u8 value; if (sd->sensor == SENSOR_PAS106) Et_init1(gspca_dev); else Et_init2(gspca_dev); - value = 0x08; - Et_RegWrite(dev, ET_RESET_ALL, &value, 1); - err = Et_videoOn(dev); - PDEBUG(D_STREAM, "Et_VideoOn %d", err); + reg_w_val(dev, ET_RESET_ALL, 0x08); + et_video(dev, 1); /* video on */ } static void sd_stopN(struct gspca_dev *gspca_dev) { - int err; - - err = Et_videoOff(gspca_dev->dev); - PDEBUG(D_STREAM, "Et_VideoOff %d", err); - + et_video(gspca_dev->dev, 0); /* video off */ } static void sd_stop0(struct gspca_dev *gspca_dev) @@ -787,7 +678,7 @@ static void setbrightness(struct gspca_dev *gspca_dev) __u8 brightness = sd->brightness; for (i = 0; i < 4; i++) - Et_RegWrite(gspca_dev->dev, (ET_O_RED + i), &brightness, 1); + reg_w_val(gspca_dev->dev, (ET_O_RED + i), brightness); } static void getbrightness(struct gspca_dev *gspca_dev) @@ -795,10 +686,10 @@ static void getbrightness(struct gspca_dev *gspca_dev) struct sd *sd = (struct sd *) gspca_dev; int i; int brightness = 0; - __u8 value = 0; + __u8 value; for (i = 0; i < 4; i++) { - Et_RegRead(gspca_dev->dev, (ET_O_RED + i), &value, 1); + reg_r(gspca_dev->dev, (ET_O_RED + i), &value, 1); brightness += value; } sd->brightness = brightness >> 3; @@ -811,7 +702,7 @@ static void setcontrast(struct gspca_dev *gspca_dev) __u8 contrast = sd->contrast; memset(RGBG, contrast, sizeof RGBG - 2); - Et_RegWrite(gspca_dev->dev, ET_G_RED, RGBG, 6); + reg_w(gspca_dev->dev, ET_G_RED, RGBG, 6); } static void getcontrast(struct gspca_dev *gspca_dev) @@ -822,7 +713,7 @@ static void getcontrast(struct gspca_dev *gspca_dev) __u8 value = 0; for (i = 0; i < 4; i++) { - Et_RegRead(gspca_dev->dev, (ET_G_RED + i), &value, 1); + reg_r(gspca_dev->dev, (ET_G_RED + i), &value, 1); contrast += value; } sd->contrast = contrast >> 2; @@ -876,7 +767,7 @@ static void setautogain(struct gspca_dev *gspca_dev) __u8 r, g, b; Gbright = Et_getgainG(gspca_dev); - Et_RegRead(dev, ET_LUMA_CENTER, GRBG, 4); + reg_r(dev, ET_LUMA_CENTER, GRBG, 4); g = (GRBG[0] + GRBG[3]) >> 1; r = GRBG[1]; b = GRBG[2]; @@ -898,7 +789,7 @@ static void setautogain(struct gspca_dev *gspca_dev) static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, /* target */ - unsigned char *data, /* isoc packet */ + __u8 *data, /* isoc packet */ int len) /* iso packet length */ { struct sd *sd; diff --git a/linux/drivers/media/video/gspca/gspca.c b/linux/drivers/media/video/gspca/gspca.c index 3fecf3dbb..5a0d60cb6 100644 --- a/linux/drivers/media/video/gspca/gspca.c +++ b/linux/drivers/media/video/gspca/gspca.c @@ -43,14 +43,12 @@ MODULE_AUTHOR("Jean-Francois Moine <http://moinejf.free.fr>"); MODULE_DESCRIPTION("GSPCA USB Camera Driver"); MODULE_LICENSE("GPL"); -#define DRIVER_VERSION_NUMBER KERNEL_VERSION(2, 1, 2) -static const char version[] = "2.1.2"; +#define DRIVER_VERSION_NUMBER KERNEL_VERSION(2, 1, 5) +static const char version[] = "2.1.5"; static int video_nr = -1; -static int comp_fac = 30; /* Buffer size ratio when compressed in % */ - -#ifdef VIDEO_ADV_DEBUG +#ifdef CONFIG_VIDEO_ADV_DEBUG int gspca_debug = D_ERR | D_PROBE; EXPORT_SYMBOL(gspca_debug); @@ -253,7 +251,7 @@ static void isoc_transfer(struct gspca_dev *gspca_dev) struct gspca_frame *gspca_frame_add(struct gspca_dev *gspca_dev, int packet_type, struct gspca_frame *frame, - __u8 *data, + const __u8 *data, int len) { int i, j; @@ -327,6 +325,7 @@ static int gspca_is_compressed(__u32 format) case V4L2_PIX_FMT_MJPEG: case V4L2_PIX_FMT_JPEG: case V4L2_PIX_FMT_SPCA561: + case V4L2_PIX_FMT_PAC207: return 1; } return 0; @@ -339,7 +338,7 @@ static void *rvmalloc(unsigned long size) /* size = PAGE_ALIGN(size); (already done) */ mem = vmalloc_32(size); - if (mem != 0) { + if (mem != NULL) { memset(mem, 0, size); adr = (unsigned long) mem; while ((long) size > 0) { @@ -366,48 +365,6 @@ static void rvfree(void *mem, unsigned long size) vfree(mem); } -static __u32 get_v4l2_depth(__u32 pixfmt) -{ - switch (pixfmt) { -/* case V4L2_PIX_FMT_BGR32: - case V4L2_PIX_FMT_RGB32: - return 32; */ - case V4L2_PIX_FMT_RGB24: /* 'RGB3' */ - case V4L2_PIX_FMT_BGR24: - return 24; -/* case V4L2_PIX_FMT_RGB565: * 'RGBP' */ - case V4L2_PIX_FMT_YUYV: /* 'YUYV' packed 4.2.2 */ - case V4L2_PIX_FMT_YYUV: /* 'YYUV' */ - return 16; - case V4L2_PIX_FMT_YUV420: /* 'YU12' planar 4.2.0 */ - case V4L2_PIX_FMT_SPCA501: /* 'S501' YUYV per line */ - return 12; - case V4L2_PIX_FMT_MJPEG: - case V4L2_PIX_FMT_JPEG: - case V4L2_PIX_FMT_SBGGR8: /* 'BA81' Bayer */ - case V4L2_PIX_FMT_SN9C10X: /* 'S910' SN9C10x compression */ - case V4L2_PIX_FMT_SPCA561: /* 'S561' compressed BGGR bayer */ - return 8; - } - PDEBUG(D_ERR|D_CONF, "Unknown pixel format %c%c%c%c", - pixfmt & 0xff, - (pixfmt >> 8) & 0xff, - (pixfmt >> 16) & 0xff, - pixfmt >> 24); - return 24; -} - -static int gspca_get_buff_size(struct gspca_dev *gspca_dev) -{ - unsigned int size; - - size = gspca_dev->width * gspca_dev->height - * get_v4l2_depth(gspca_dev->pixfmt) / 8; - if (!size) - return -ENOMEM; - return size; -} - static int frame_alloc(struct gspca_dev *gspca_dev, unsigned int count) { @@ -415,18 +372,14 @@ static int frame_alloc(struct gspca_dev *gspca_dev, unsigned int frsz; int i; - frsz = gspca_get_buff_size(gspca_dev); - if (frsz < 0) - return frsz; + i = gspca_dev->curr_mode; + frsz = gspca_dev->cam.cam_mode[i].sizeimage; PDEBUG(D_STREAM, "frame alloc frsz: %d", frsz); - if (count > GSPCA_MAX_FRAMES) - count = GSPCA_MAX_FRAMES; - /* if compressed (JPEG), reduce the buffer size */ - if (gspca_is_compressed(gspca_dev->pixfmt)) - frsz = (frsz * comp_fac) / 100 + 600; /* (+ JPEG header sz) */ frsz = PAGE_ALIGN(frsz); PDEBUG(D_STREAM, "new fr_sz: %d", frsz); gspca_dev->frsz = frsz; + if (count > GSPCA_MAX_FRAMES) + count = GSPCA_MAX_FRAMES; if (gspca_dev->memory == V4L2_MEMORY_MMAP) { gspca_dev->frbuf = rvmalloc(frsz * count); if (!gspca_dev->frbuf) { @@ -462,7 +415,7 @@ static void frame_free(struct gspca_dev *gspca_dev) int i; PDEBUG(D_STREAM, "frame free"); - if (gspca_dev->frbuf != 0) { + if (gspca_dev->frbuf != NULL) { rvfree(gspca_dev->frbuf, gspca_dev->nframes * gspca_dev->frsz); gspca_dev->frbuf = NULL; @@ -485,7 +438,7 @@ static void destroy_urbs(struct gspca_dev *gspca_dev) gspca_dev->urb[i] = NULL; usb_kill_urb(urb); - if (urb->transfer_buffer != 0) + if (urb->transfer_buffer != NULL) usb_buffer_free(gspca_dev->dev, urb->transfer_buffer_length, urb->transfer_buffer, @@ -709,7 +662,7 @@ static void gspca_set_default_mode(struct gspca_dev *gspca_dev) gspca_dev->curr_mode = i; gspca_dev->width = gspca_dev->cam.cam_mode[i].width; gspca_dev->height = gspca_dev->cam.cam_mode[i].height; - gspca_dev->pixfmt = gspca_dev->cam.cam_mode[i].pixfmt; + gspca_dev->pixfmt = gspca_dev->cam.cam_mode[i].pixelformat; } static int wxh_to_mode(struct gspca_dev *gspca_dev, @@ -737,11 +690,13 @@ static int gspca_get_mode(struct gspca_dev *gspca_dev, modeU = modeD = mode; while ((modeU < gspca_dev->cam.nmodes) || modeD >= 0) { if (--modeD >= 0) { - if (gspca_dev->cam.cam_mode[modeD].pixfmt == pixfmt) + if (gspca_dev->cam.cam_mode[modeD].pixelformat + == pixfmt) return modeD; } if (++modeU < gspca_dev->cam.nmodes) { - if (gspca_dev->cam.cam_mode[modeU].pixfmt == pixfmt) + if (gspca_dev->cam.cam_mode[modeU].pixelformat + == pixfmt) return modeU; } } @@ -759,7 +714,7 @@ static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv, index = 0; j = 0; for (i = gspca_dev->cam.nmodes; --i >= 0; ) { - fmt_tb[index] = gspca_dev->cam.cam_mode[i].pixfmt; + fmt_tb[index] = gspca_dev->cam.cam_mode[i].pixelformat; j = 0; for (;;) { if (fmt_tb[j] == fmt_tb[index]) @@ -793,27 +748,20 @@ static int vidioc_g_fmt_vid_cap(struct file *file, void *priv, struct v4l2_format *fmt) { struct gspca_dev *gspca_dev = priv; + int mode; if (fmt->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) return -EINVAL; - fmt->fmt.pix.width = gspca_dev->width; - fmt->fmt.pix.height = gspca_dev->height; - fmt->fmt.pix.pixelformat = gspca_dev->pixfmt; - fmt->fmt.pix.field = V4L2_FIELD_NONE; - fmt->fmt.pix.bytesperline = get_v4l2_depth(fmt->fmt.pix.pixelformat) - * fmt->fmt.pix.width / 8; - fmt->fmt.pix.sizeimage = fmt->fmt.pix.bytesperline - * fmt->fmt.pix.height; -/* (should be in the subdriver) */ - fmt->fmt.pix.colorspace = V4L2_COLORSPACE_SRGB; - fmt->fmt.pix.priv = 0; + mode = gspca_dev->curr_mode; + memcpy(&fmt->fmt.pix, &gspca_dev->cam.cam_mode[mode], + sizeof fmt->fmt.pix); return 0; } static int try_fmt_vid_cap(struct gspca_dev *gspca_dev, struct v4l2_format *fmt) { - int w, h, mode, mode2, frsz; + int w, h, mode, mode2; if (fmt->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) return -EINVAL; @@ -823,7 +771,7 @@ static int try_fmt_vid_cap(struct gspca_dev *gspca_dev, /* (luvcview problem) */ if (fmt->fmt.pix.pixelformat == V4L2_PIX_FMT_MJPEG) fmt->fmt.pix.pixelformat = V4L2_PIX_FMT_JPEG; -#ifdef VIDEO_ADV_DEBUG +#ifdef CONFIG_VIDEO_ADV_DEBUG if (gspca_debug & D_CONF) PDEBUG_MODE("try fmt cap", fmt->fmt.pix.pixelformat, w, h); #endif @@ -831,36 +779,19 @@ static int try_fmt_vid_cap(struct gspca_dev *gspca_dev, mode = wxh_to_mode(gspca_dev, w, h); /* OK if right palette */ - if (gspca_dev->cam.cam_mode[mode].pixfmt != fmt->fmt.pix.pixelformat) { + if (gspca_dev->cam.cam_mode[mode].pixelformat + != fmt->fmt.pix.pixelformat) { /* else, search the closest mode with the same pixel format */ mode2 = gspca_get_mode(gspca_dev, mode, fmt->fmt.pix.pixelformat); - if (mode2 >= 0) { + if (mode2 >= 0) mode = mode2; - } else { - - /* no chance, return this mode */ - fmt->fmt.pix.pixelformat = - gspca_dev->cam.cam_mode[mode].pixfmt; -#ifdef VIDEO_ADV_DEBUG - if (gspca_debug & D_CONF) { - PDEBUG_MODE("new format", - fmt->fmt.pix.pixelformat, - gspca_dev->cam.cam_mode[mode].width, - gspca_dev->cam.cam_mode[mode].height); - } -#endif - } +/* else + ; * no chance, return this mode */ } - fmt->fmt.pix.width = gspca_dev->cam.cam_mode[mode].width; - fmt->fmt.pix.height = gspca_dev->cam.cam_mode[mode].height; - fmt->fmt.pix.bytesperline = get_v4l2_depth(fmt->fmt.pix.pixelformat) - * fmt->fmt.pix.width / 8; - frsz = fmt->fmt.pix.bytesperline * fmt->fmt.pix.height; - if (gspca_is_compressed(fmt->fmt.pix.pixelformat)) - frsz = (frsz * comp_fac) / 100; - fmt->fmt.pix.sizeimage = frsz; + memcpy(&fmt->fmt.pix, &gspca_dev->cam.cam_mode[mode], + sizeof fmt->fmt.pix); return mode; /* used when s_fmt */ } @@ -883,16 +814,6 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv, struct gspca_dev *gspca_dev = priv; int ret; -#ifdef CONFIG_VIDEO_V4L1_COMPAT - /* if v4l1 got JPEG */ - if (fmt->fmt.pix.pixelformat == 0 - && gspca_dev->streaming) { - fmt->fmt.pix.width = gspca_dev->width; - fmt->fmt.pix.height = gspca_dev->height; - fmt->fmt.pix.pixelformat = gspca_dev->pixfmt; - return 0; - } -#endif if (mutex_lock_interruptible(&gspca_dev->queue_lock)) return -ERESTARTSYS; @@ -958,7 +879,7 @@ static int dev_open(struct inode *inode, struct file *file) } gspca_dev->users++; file->private_data = gspca_dev; -#ifdef VIDEO_ADV_DEBUG +#ifdef CONFIG_VIDEO_ADV_DEBUG /* activate the v4l2 debug */ if (gspca_debug & D_V4L2) gspca_dev->vdev.debug |= 3; @@ -991,7 +912,7 @@ static int dev_close(struct inode *inode, struct file *file) gspca_dev->sd_desc->close(gspca_dev); mutex_unlock(&gspca_dev->usb_lock); frame_free(gspca_dev); - gspca_dev->capt_file = 0; + gspca_dev->capt_file = NULL; gspca_dev->memory = GSPCA_MEMORY_NO; } file->private_data = NULL; @@ -1059,7 +980,7 @@ static int vidioc_s_ctrl(struct file *file, void *priv, struct v4l2_control *ctrl) { struct gspca_dev *gspca_dev = priv; - struct ctrl *ctrls; + const struct ctrl *ctrls; int i, ret; for (i = 0, ctrls = gspca_dev->sd_desc->ctrls; @@ -1085,7 +1006,7 @@ static int vidioc_g_ctrl(struct file *file, void *priv, { struct gspca_dev *gspca_dev = priv; - struct ctrl *ctrls; + const struct ctrl *ctrls; int i, ret; for (i = 0, ctrls = gspca_dev->sd_desc->ctrls; @@ -1165,7 +1086,7 @@ static int vidioc_reqbufs(struct file *file, void *priv, } /* only one file may do capture */ - if ((gspca_dev->capt_file != 0 && gspca_dev->capt_file != file) + if ((gspca_dev->capt_file != NULL && gspca_dev->capt_file != file) || gspca_dev->streaming) { ret = -EBUSY; goto out; @@ -1173,7 +1094,7 @@ static int vidioc_reqbufs(struct file *file, void *priv, if (rb->count == 0) { /* unrequest? */ frame_free(gspca_dev); - gspca_dev->capt_file = 0; + gspca_dev->capt_file = NULL; } else { gspca_dev->memory = rb->memory; ret = frame_alloc(gspca_dev, rb->count); @@ -1231,7 +1152,7 @@ static int vidioc_streamon(struct file *file, void *priv, if (ret < 0) goto out; } -#ifdef VIDEO_ADV_DEBUG +#ifdef CONFIG_VIDEO_ADV_DEBUG if (gspca_debug & D_STREAM) { PDEBUG_MODE("stream on OK", gspca_dev->pixfmt, @@ -1382,7 +1303,7 @@ static int vidiocgmbuf(struct file *file, void *priv, static int dev_mmap(struct file *file, struct vm_area_struct *vma) { struct gspca_dev *gspca_dev = file->private_data; - struct gspca_frame *frame = 0; + struct gspca_frame *frame; struct page *page; unsigned long addr, start, size; int i, ret; @@ -1405,6 +1326,7 @@ static int dev_mmap(struct file *file, struct vm_area_struct *vma) goto out; } + frame = NULL; for (i = 0; i < gspca_dev->nframes; ++i) { if (gspca_dev->frame[i].v4l2_buf.memory != V4L2_MEMORY_MMAP) { PDEBUG(D_STREAM, "mmap bad memory type"); @@ -1416,7 +1338,7 @@ static int dev_mmap(struct file *file, struct vm_area_struct *vma) break; } } - if (frame == 0) { + if (frame == NULL) { PDEBUG(D_STREAM, "mmap no frame buffer found"); ret = -EINVAL; goto out; @@ -1986,13 +1908,10 @@ static void __exit gspca_exit(void) module_init(gspca_init); module_exit(gspca_exit); -#ifdef VIDEO_ADV_DEBUG +#ifdef CONFIG_VIDEO_ADV_DEBUG module_param_named(debug, gspca_debug, int, 0644); MODULE_PARM_DESC(debug, "Debug (bit) 0x01:error 0x02:probe 0x04:config" " 0x08:stream 0x10:frame 0x20:packet 0x40:USBin 0x80:USBout" " 0x0100: v4l2"); #endif -module_param(comp_fac, int, 0644); -MODULE_PARM_DESC(comp_fac, - "Buffer size ratio when compressed in percent"); diff --git a/linux/drivers/media/video/gspca/gspca.h b/linux/drivers/media/video/gspca/gspca.h index 1581fa808..945f1ab4c 100644 --- a/linux/drivers/media/video/gspca/gspca.h +++ b/linux/drivers/media/video/gspca/gspca.h @@ -9,26 +9,7 @@ #include <media/v4l2-common.h> #include <linux/mutex.h> -/* values in 2.6.27 */ -#ifndef V4L2_PIX_FMT_SPCA501 -#define V4L2_PIX_FMT_SPCA501 v4l2_fourcc('S', '5', '0', '1') -#endif -#ifndef V4L2_PIX_FMT_SPCA561 -#define V4L2_PIX_FMT_SPCA561 v4l2_fourcc('S', '5', '6', '1') -#endif - -/* values in 2.6.26 */ -#ifndef V4L2_CID_POWER_LINE_FREQUENCY -#define V4L2_CID_POWER_LINE_FREQUENCY (V4L2_CID_BASE+24) -#endif -#ifndef V4L2_CID_WHITE_BALANCE_TEMPERATURE -#define V4L2_CID_WHITE_BALANCE_TEMPERATURE (V4L2_CID_BASE + 26) -#endif -#ifndef V4L2_CID_SHARPNESS -#define V4L2_CID_SHARPNESS (V4L2_CID_BASE+27) -#endif - -#ifdef VIDEO_ADV_DEBUG +#ifdef CONFIG_VIDEO_ADV_DEBUG /* GSPCA our debug messages */ extern int gspca_debug; #define PDEBUG(level, fmt, args...) \ @@ -71,16 +52,9 @@ extern int gspca_debug; #define ISO_MAX_SIZE 0x8000 /* max size of one URB buffer (32 Kb) */ /* device information - set at probe time */ -struct cam_mode { - __u32 pixfmt; - short width; - short height; - short mode; /* subdriver value */ - short reserved; /* subdriver value */ -}; struct cam { char *dev_name; - struct cam_mode *cam_mode; /* size nmodes */ + struct v4l2_pix_format *cam_mode; /* size nmodes */ char nmodes; __u8 epaddr; }; @@ -110,9 +84,9 @@ struct ctrl { /* subdriver description */ struct sd_desc { /* information */ - char *name; /* sub-driver name */ + const char *name; /* sub-driver name */ /* controls */ - struct ctrl *ctrls; + const struct ctrl *ctrls; int nctrls; /* operations */ cam_cf_op config; /* called on probe */ @@ -121,8 +95,9 @@ struct sd_desc { cam_v_op stopN; /* called on stream off - main alt */ cam_v_op stop0; /* called on stream off - alt 0 */ cam_v_op close; /* called on close */ - cam_v_op dq_callback; /* called when a frame has been dequeued */ cam_pkt_op pkt_scan; +/* optional operations */ + cam_v_op dq_callback; /* called when a frame has been dequeued */ cam_jpg_op get_jcomp; cam_jpg_op set_jcomp; cam_qmnu_op querymenu; @@ -195,6 +170,6 @@ void gspca_disconnect(struct usb_interface *intf); struct gspca_frame *gspca_frame_add(struct gspca_dev *gspca_dev, int packet_type, struct gspca_frame *frame, - __u8 *data, + const __u8 *data, int len); #endif /* GSPCAV2_H */ diff --git a/linux/drivers/media/video/gspca/mars.c b/linux/drivers/media/video/gspca/mars.c index d8cd2148f..23f3dba80 100644 --- a/linux/drivers/media/video/gspca/mars.c +++ b/linux/drivers/media/video/gspca/mars.c @@ -24,8 +24,8 @@ #include "gspca.h" #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, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>"); MODULE_DESCRIPTION("GSPCA/Mars USB Camera Driver"); @@ -42,9 +42,17 @@ struct sd { static struct ctrl sd_ctrls[] = { }; -static struct cam_mode vga_mode[] = { - {V4L2_PIX_FMT_JPEG, 320, 240, 2}, - {V4L2_PIX_FMT_JPEG, 640, 480, 1}, +static struct v4l2_pix_format vga_mode[] = { + {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 320, + .sizeimage = 320 * 240 * 3 / 8 + 589, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 2}, + {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 640, + .sizeimage = 640 * 480 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 1}, }; /* MI Register table //elvis */ @@ -79,49 +87,35 @@ enum { }; static int pcam_reg_write(struct usb_device *dev, - __u16 index, unsigned char *value, int length) + __u16 index, __u8 *value, int len) { int rc; rc = usb_control_msg(dev, usb_sndbulkpipe(dev, 4), 0x12, -/* ?? 0xc8 = USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_??? !? */ +/* ?? 0xc8 = USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_??? !? */ 0xc8, 0, /* value */ - index, value, length, 500); - PDEBUG(D_USBO, "reg write: 0x%02X , result = 0x%x", index, rc); - + index, value, len, 500); if (rc < 0) - PDEBUG(D_ERR, "reg write: error %d", rc); + PDEBUG(D_ERR, "reg write [%02x] error %d", index, rc); return rc; } -static void MISensor_BulkWrite(struct usb_device *dev, unsigned short *pch, - char Address) +static void MISensor_BulkWrite(struct usb_device *dev, + unsigned short *pch, + char Address) { - int result; - unsigned char data[6]; + __u8 data[6]; data[0] = 0x1f; - data[1] = 0; + data[1] = 0; /* control byte */ data[2] = Address; data[3] = *pch >> 8; /* high byte */ data[4] = *pch; /* low byte */ - data[5] = 0; - - result = usb_control_msg(dev, - usb_sndbulkpipe(dev, 4), - 0x12, -/* ?? 0xc8 = USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_??? !? */ - 0xc8, - 0, /* value */ - Address, /* index */ - data, 5, 500); - PDEBUG(D_USBO, "bulk write 0x%02x = 0x%04x", Address, *pch); - if (result < 0) - PDEBUG(D_ERR, "reg write: error %d", result); + pcam_reg_write(dev, Address, data, 5); } /* this function is called at probe time */ @@ -154,7 +148,8 @@ static void sd_start(struct gspca_dev *gspca_dev) __u16 MI_buf[242]; int h_size, v_size; int intpipe; - /* struct usb_device *dev = pcam->dev; */ +/* struct usb_device *dev = pcam->dev; */ + memset(data, 0, sizeof data); memset(MI_buf, 0, sizeof MI_buf); @@ -167,7 +162,7 @@ static void sd_start(struct gspca_dev *gspca_dev) data[0] = 0x01; /* address */ data[1] = 0x01; - err_code = pcam_reg_write(dev, data[0], data, 0x02); + err_code = pcam_reg_write(dev, data[0], data, 2); if (err_code < 0) return; @@ -193,14 +188,14 @@ static void sd_start(struct gspca_dev *gspca_dev) data[10] = 0x5d; /* reg 9, I2C device address * [for PAS5101 (0x40)] [for MI (0x5d)] */ - err_code = pcam_reg_write(dev, data[0], data, 0x0b); + err_code = pcam_reg_write(dev, data[0], data, 11); if (err_code < 0) return; data[0] = 0x23; /* address */ data[1] = 0x09; /* reg 35, append frame header */ - err_code = pcam_reg_write(dev, data[0], data, 0x02); + err_code = pcam_reg_write(dev, data[0], data, 2); if (err_code < 0) { PDEBUG(D_ERR, "Register write failed"); return; @@ -213,7 +208,7 @@ static void sd_start(struct gspca_dev *gspca_dev) /* else */ data[1] = 50; /* 50 reg 60, pc-cam frame size * (unit: 4KB) 200KB */ - err_code = pcam_reg_write(dev, data[0], data, 0x02); + err_code = pcam_reg_write(dev, data[0], data, 2); if (err_code < 0) return; @@ -255,13 +250,13 @@ static void sd_start(struct gspca_dev *gspca_dev) /* auto dark-gain */ data[0] = 0x5e; /* address */ - err_code = pcam_reg_write(dev, data[0], data, 0x06); + err_code = pcam_reg_write(dev, data[0], data, 6); if (err_code < 0) return; data[0] = 0x67; data[1] = 0x13; /* reg 103, first pixel B, disable sharpness */ - err_code = pcam_reg_write(dev, data[0], data, 0x02); + err_code = pcam_reg_write(dev, data[0], data, 2); if (err_code < 0) return; @@ -340,7 +335,7 @@ static void sd_start(struct gspca_dev *gspca_dev) data[0] = 0x00; data[1] = 0x4d; /* ISOC transfering enable... */ - pcam_reg_write(dev, data[0], data, 0x02); + pcam_reg_write(dev, data[0], data, 2); } static void sd_stopN(struct gspca_dev *gspca_dev) @@ -365,7 +360,7 @@ static void sd_close(struct gspca_dev *gspca_dev) static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, /* target */ - unsigned char *data, /* isoc packet */ + __u8 *data, /* isoc packet */ int len) /* iso packet length */ { struct sd *sd = (struct sd *) gspca_dev; @@ -403,7 +398,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, } /* sub-driver description */ -static struct sd_desc sd_desc = { +static const struct sd_desc sd_desc = { .name = MODULE_NAME, .ctrls = sd_ctrls, .nctrls = ARRAY_SIZE(sd_ctrls), @@ -418,7 +413,7 @@ static struct sd_desc sd_desc = { /* -- module initialisation -- */ #define DVNM(name) .driver_info = (kernel_ulong_t) name -static __devinitdata struct usb_device_id device_table[] = { +static const __devinitdata struct usb_device_id device_table[] = { {USB_DEVICE(0x093a, 0x050f), DVNM("Mars-Semi Pc-Camera")}, {} }; diff --git a/linux/drivers/media/video/gspca/ov519.c b/linux/drivers/media/video/gspca/ov519.c index b6564d18b..402b3ed12 100644 --- a/linux/drivers/media/video/gspca/ov519.c +++ b/linux/drivers/media/video/gspca/ov519.c @@ -24,8 +24,8 @@ #include "gspca.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, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Jean-Francois Moine <http://moinejf.free.fr>"); MODULE_DESCRIPTION("OV519 USB Camera Driver"); @@ -126,13 +126,29 @@ static struct ctrl sd_ctrls[] = { }, }; -static struct cam_mode vga_mode[] = { - {V4L2_PIX_FMT_JPEG, 320, 240}, - {V4L2_PIX_FMT_JPEG, 640, 480}, +static struct v4l2_pix_format vga_mode[] = { + {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 320, + .sizeimage = 320 * 240 * 3 / 8 + 589, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 1}, + {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 640, + .sizeimage = 640 * 480 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 0}, }; -static struct cam_mode sif_mode[] = { - {V4L2_PIX_FMT_JPEG, 176, 144}, - {V4L2_PIX_FMT_JPEG, 352, 288}, +static struct v4l2_pix_format sif_mode[] = { + {176, 144, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 176, + .sizeimage = 176 * 144 * 3 / 8 + 589, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 1}, + {352, 288, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 352, + .sizeimage = 352 * 288 * 3 / 8 + 589, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 0}, }; /* OV519 Camera interface register numbers */ @@ -266,15 +282,15 @@ static unsigned char ov7670_abs_to_sm(unsigned char v) static int reg_w(struct sd *sd, __u16 index, __u8 value) { int ret; - __u8 buf[4]; + __u8 data; - buf[0] = value; + data = value; ret = usb_control_msg(sd->gspca_dev.dev, usb_sndctrlpipe(sd->gspca_dev.dev, 0), 1, /* REQ_IO (ov518/519) */ USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 0, index, - &buf[0], 1, 500); + &data, 1, 500); if (ret < 0) PDEBUG(D_ERR, "Write reg [%02x] %02x failed", index, value); return ret; @@ -285,16 +301,16 @@ static int reg_w(struct sd *sd, __u16 index, __u8 value) static int reg_r(struct sd *sd, __u16 index) { int ret; - __u8 buf[4]; + __u8 data; ret = usb_control_msg(sd->gspca_dev.dev, usb_rcvctrlpipe(sd->gspca_dev.dev, 0), 1, /* REQ_IO */ USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, - 0, index, &buf[0], 1, 500); + 0, index, &data, 1, 500); if (ret >= 0) - ret = buf[0]; + ret = data; else PDEBUG(D_ERR, "Read reg [0x%02x] failed", index); return ret; @@ -302,7 +318,7 @@ static int reg_r(struct sd *sd, __u16 index) /* Read 8 values from a OV519 register */ static int reg_r8(struct sd *sd, - __u16 index) + __u16 index) { int ret; __u8 buf[8]; @@ -528,7 +544,7 @@ struct ov_i2c_regvals { }; static int write_regvals(struct sd *sd, - struct ov_regvals *regvals, + const struct ov_regvals *regvals, int n) { int rc; @@ -543,7 +559,7 @@ static int write_regvals(struct sd *sd, } static int write_i2c_regvals(struct sd *sd, - struct ov_i2c_regvals *regvals, + const struct ov_i2c_regvals *regvals, int n) { int rc; @@ -569,7 +585,7 @@ static int write_i2c_regvals(struct sd *sd, static int ov8xx0_configure(struct sd *sd) { int rc; - static struct ov_i2c_regvals norm_8610[] = { + static const struct ov_i2c_regvals norm_8610[] = { { 0x12, 0x80 }, { 0x00, 0x00 }, { 0x01, 0x80 }, @@ -707,7 +723,7 @@ static int ov7xx0_configure(struct sd *sd) * 0x05 (old driver setting): very overexposed, too much * contrast */ - static struct ov_i2c_regvals norm_7610[] = { + static const struct ov_i2c_regvals norm_7610[] = { { 0x10, 0xff }, { 0x16, 0x06 }, { 0x28, 0x24 }, @@ -737,7 +753,7 @@ static int ov7xx0_configure(struct sd *sd) { 0x0d, 0x24 }, }; - static struct ov_i2c_regvals norm_7620[] = { + static const struct ov_i2c_regvals norm_7620[] = { { 0x00, 0x00 }, /* gain */ { 0x01, 0x80 }, /* blue gain */ { 0x02, 0x80 }, /* red gain */ @@ -804,14 +820,14 @@ static int ov7xx0_configure(struct sd *sd) }; /* 7640 and 7648. The defaults should be OK for most registers. */ - static struct ov_i2c_regvals norm_7640[] = { + static const struct ov_i2c_regvals norm_7640[] = { { 0x12, 0x80 }, { 0x12, 0x14 }, }; /* 7670. Defaults taken from OmniVision provided data, * as provided by Jonathan Corbet of OLPC */ - static struct ov_i2c_regvals norm_7670[] = { + static const struct ov_i2c_regvals norm_7670[] = { { OV7670_REG_COM7, OV7670_COM7_RESET }, { OV7670_REG_TSLB, 0x04 }, /* OV */ { OV7670_REG_COM7, OV7670_COM7_FMT_VGA }, /* VGA */ @@ -1075,7 +1091,7 @@ static int ov7xx0_configure(struct sd *sd) static int ov6xx0_configure(struct sd *sd) { int rc; - static struct ov_i2c_regvals norm_6x20[] = { + static const struct ov_i2c_regvals norm_6x20[] = { { 0x12, 0x80 }, /* reset */ { 0x11, 0x01 }, { 0x03, 0x60 }, @@ -1118,7 +1134,7 @@ static int ov6xx0_configure(struct sd *sd) /* Toggle 0x12[2] off and on here? */ }; - static struct ov_i2c_regvals norm_6x30[] = { + static const struct ov_i2c_regvals norm_6x30[] = { { 0x12, 0x80 }, /* Reset */ { 0x00, 0x1f }, /* Gain */ { 0x01, 0x99 }, /* Blue gain */ @@ -1284,7 +1300,7 @@ static int sd_config(struct gspca_dev *gspca_dev, struct cam *cam; /* (from ov519_configure) */ - static struct ov_regvals init_519[] = { + static const struct ov_regvals init_519[] = { { 0x5a, 0x6d }, /* EnableSystem */ /* jfm trace usbsnoop3-1.txt */ /* jfm 53 = fb */ @@ -1302,8 +1318,7 @@ static int sd_config(struct gspca_dev *gspca_dev, /* windows reads 0x55 at this point*/ }; - if (write_regvals(sd, init_519, - sizeof init_519 / sizeof init_519[0])) + if (write_regvals(sd, init_519, ARRAY_SIZE(init_519))) goto error; /* jfm: not seen in windows trace */ if (ov519_init_compression(sd)) @@ -1389,7 +1404,7 @@ static int sd_open(struct gspca_dev *gspca_dev) static int ov519_mode_init_regs(struct sd *sd, int width, int height) { - static struct ov_regvals mode_init_519_ov7670[] = { + static const struct ov_regvals mode_init_519_ov7670[] = { { 0x5d, 0x03 }, /* Turn off suspend mode */ { 0x53, 0x9f }, /* was 9b in 1.65-1.08 */ { 0x54, 0x0f }, /* bit2 (jpeg enable) */ @@ -1412,7 +1427,7 @@ static int ov519_mode_init_regs(struct sd *sd, /* windows reads 0x55 at this point, why? */ }; - static struct ov_regvals mode_init_519[] = { + static const struct ov_regvals mode_init_519[] = { { 0x5d, 0x03 }, /* Turn off suspend mode */ { 0x53, 0x9f }, /* was 9b in 1.65-1.08 */ { 0x54, 0x0f }, /* bit2 (jpeg enable) */ @@ -1448,12 +1463,11 @@ static int ov519_mode_init_regs(struct sd *sd, /******** Set the mode ********/ if (sd->sensor != SEN_OV7670) { if (write_regvals(sd, mode_init_519, - sizeof mode_init_519 / sizeof mode_init_519[0])) + ARRAY_SIZE(mode_init_519))) return -EIO; } else { if (write_regvals(sd, mode_init_519_ov7670, - sizeof mode_init_519_ov7670 - / sizeof mode_init_519_ov7670[0])) + ARRAY_SIZE(mode_init_519_ov7670))) return -EIO; } @@ -1936,7 +1950,7 @@ static void sd_close(struct gspca_dev *gspca_dev) static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, /* target */ - unsigned char *data, /* isoc packet */ + __u8 *data, /* isoc packet */ int len) /* iso packet length */ { /* Header of ov519 is 16 bytes: @@ -2035,7 +2049,7 @@ static void setcontrast(struct gspca_dev *gspca_dev) case SEN_OV6630: i2c_w_mask(sd, OV7610_REG_CNT, val >> 4, 0x0f); case SEN_OV8610: { - static __u8 ctab[] = { + static const __u8 ctab[] = { 0x03, 0x09, 0x0b, 0x0f, 0x53, 0x6f, 0x35, 0x7f }; @@ -2044,7 +2058,7 @@ static void setcontrast(struct gspca_dev *gspca_dev) break; } case SEN_OV7620: { - static __u8 ctab[] = { + static const __u8 ctab[] = { 0x01, 0x05, 0x09, 0x11, 0x15, 0x35, 0x37, 0x57, 0x5b, 0xa5, 0xa7, 0xc7, 0xc9, 0xcf, 0xef, 0xff }; @@ -2157,7 +2171,7 @@ static int sd_getcolors(struct gspca_dev *gspca_dev, __s32 *val) } /* sub-driver description */ -static struct sd_desc sd_desc = { +static const struct sd_desc sd_desc = { .name = MODULE_NAME, .ctrls = sd_ctrls, .nctrls = ARRAY_SIZE(sd_ctrls), @@ -2172,7 +2186,7 @@ static struct sd_desc sd_desc = { /* -- module initialisation -- */ #define DVNM(name) .driver_info = (kernel_ulong_t) name -static __devinitdata struct usb_device_id device_table[] = { +static const __devinitdata struct usb_device_id device_table[] = { {USB_DEVICE(0x041e, 0x4052), DVNM("Creative Live! VISTA IM")}, {USB_DEVICE(0x041e, 0x405f), DVNM("Creative Live! VISTA VF0330")}, {USB_DEVICE(0x041e, 0x4060), DVNM("Creative Live! VISTA VF0350")}, diff --git a/linux/drivers/media/video/gspca/pac207.c b/linux/drivers/media/video/gspca/pac207.c index 84986684c..4f197c1f4 100644 --- a/linux/drivers/media/video/gspca/pac207.c +++ b/linux/drivers/media/video/gspca/pac207.c @@ -27,8 +27,8 @@ #include "gspca.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, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Hans de Goede <j.w.r.degoede@hhs.nl>"); MODULE_DESCRIPTION("Pixart PAC207"); @@ -40,9 +40,17 @@ MODULE_LICENSE("GPL"); #define PAC207_BRIGHTNESS_MAX 255 #define PAC207_BRIGHTNESS_DEFAULT 4 /* power on default: 4 */ -#define PAC207_EXPOSURE_MIN 4 +/* An exposure value of 4 also works (3 does not) but then we need to lower + the compression balance setting when in 352x288 mode, otherwise the usb + bandwidth is not enough and packets get dropped resulting in corrupt + frames. The problem with this is that when the compression balance gets + lowered below 0x80, the pac207 starts using a different compression + algorithm for some lines, these lines get prefixed with a 0x2dd2 prefix + and currently we do not know how to decompress these lines, so for now + we use a minimum exposure value of 5 */ +#define PAC207_EXPOSURE_MIN 5 #define PAC207_EXPOSURE_MAX 26 -#define PAC207_EXPOSURE_DEFAULT 4 /* power on default: 3 ?? */ +#define PAC207_EXPOSURE_DEFAULT 5 /* power on default: 3 ?? */ #define PAC207_EXPOSURE_KNEE 11 /* 4 = 30 fps, 11 = 8, 15 = 6 */ #define PAC207_GAIN_MIN 0 @@ -58,34 +66,10 @@ MODULE_LICENSE("GPL"); before doing any other adjustments */ #define PAC207_AUTOGAIN_IGNORE_FRAMES 3 -enum pac207_line_state { - LINE_HEADER1, - LINE_HEADER2, - LINE_UNCOMPRESSED, - LINE_COMPRESSED, -}; - -struct pac207_decoder_state { - /* generic state */ - u16 line_read; - u16 line_marker; - u8 line_state; - u8 header_read; - /* compression state */ - u16 processed_bytes; - u8 remaining_bits; - s8 no_remaining_bits; - u8 get_abs; - u8 discard_byte; - u8 line_decode_buf[352]; -}; - /* specific webcam descriptor */ struct sd { struct gspca_dev gspca_dev; /* !! must be the first item */ - struct pac207_decoder_state decoder_state; - u8 mode; u8 brightness; @@ -94,6 +78,7 @@ struct sd { u8 gain; u8 sof_read; + u8 header_read; u8 autogain_ignore_frames; atomic_t avg_lum; @@ -172,9 +157,20 @@ static struct ctrl sd_ctrls[] = { }, }; -static struct cam_mode sif_mode[] = { - {V4L2_PIX_FMT_SBGGR8, 176, 144, 1}, - {V4L2_PIX_FMT_SBGGR8, 352, 288, 0}, +static struct v4l2_pix_format sif_mode[] = { + {176, 144, V4L2_PIX_FMT_PAC207, V4L2_FIELD_NONE, + .bytesperline = 176, + .sizeimage = (176 + 2) * 144, + /* uncompressed, add 2 bytes / line for line header */ + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 1}, + {352, 288, V4L2_PIX_FMT_PAC207, V4L2_FIELD_NONE, + .bytesperline = 352, + /* compressed, but only when needed (not compressed + when the framerate is low) */ + .sizeimage = (352 + 2) * 288, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 0}, }; static const __u8 pac207_sensor_init[][8] = { @@ -361,70 +357,6 @@ static void sd_close(struct gspca_dev *gspca_dev) { } -/* -- convert pixart frames to Bayer -- */ -/* Sonix decompressor struct B.S.(2004) */ -static struct { - u8 is_abs; - u8 len; - s8 val; -} table[256]; - -void init_pixart_decoder(void) -{ - int i, is_abs, val, len; - - for (i = 0; i < 256; i++) { - is_abs = 0; - val = 0; - len = 0; - if ((i & 0xC0) == 0) { - /* code 00 */ - val = 0; - len = 2; - } else if ((i & 0xC0) == 0x40) { - /* code 01 */ - val = -5; - len = 2; - } else if ((i & 0xC0) == 0x80) { - /* code 10 */ - val = 5; - len = 2; - } else if ((i & 0xF0) == 0xC0) { - /* code 1100 */ - val = -10; - len = 4; - } else if ((i & 0xF0) == 0xD0) { - /* code 1101 */ - val = 10; - len = 4; - } else if ((i & 0xF8) == 0xE0) { - /* code 11100 */ - val = -15; - len = 5; - } else if ((i & 0xF8) == 0xE8) { - /* code 11101 */ - val = 15; - len = 5; - } else if ((i & 0xFC) == 0xF0) { - /* code 111100 */ - val = -20; - len = 6; - } else if ((i & 0xFC) == 0xF4) { - /* code 111101 */ - val = 20; - len = 6; - } else if ((i & 0xF8) == 0xF8) { - /* code 11111xxxxxx */ - is_abs = 1; - val = 0; - len = 5; - } - table[i].is_abs = is_abs; - table[i].val = val; - table[i].len = len; - } -} - /* auto gain and exposure algorithm based on the knee algorithm described here: * <http://ytse.tricolour.net/docs/LowLightOptimization.html> */ static void pac207_do_auto_gain(struct gspca_dev *gspca_dev) @@ -517,245 +449,52 @@ static unsigned char *pac207_find_sof(struct gspca_dev *gspca_dev, return NULL; } -static int pac207_decompress_row(struct gspca_dev *gspca_dev, - struct gspca_frame *f, - __u8 *cdata, - int len) +static void sd_pkt_scan(struct gspca_dev *gspca_dev, + struct gspca_frame *frame, + __u8 *data, + int len) { struct sd *sd = (struct sd *) gspca_dev; - struct pac207_decoder_state *decoder_state = &sd->decoder_state; - unsigned char *outp = decoder_state->line_decode_buf + - decoder_state->line_read; - int val, bitlen, bitpos = -decoder_state->no_remaining_bits; - u8 code; - - /* first two pixels are stored as raw 8-bit */ - while (decoder_state->line_read < 2) { - *outp++ = *cdata++; - decoder_state->line_read++; - len--; - if (len == 0) - return 0; - } - - while (decoder_state->line_read < gspca_dev->width) { - if (bitpos < 0) { - code = decoder_state->remaining_bits << (8 + bitpos) | - cdata[0] >> -bitpos; - } else { - u8 *addr = cdata + bitpos / 8; - code = addr[0] << (bitpos & 7) | - addr[1] >> (8 - (bitpos & 7)); - } - - bitlen = decoder_state->get_abs ? - 6 : table[code].len; - - /* Stop decompressing if we're out of input data */ - if ((bitpos + bitlen) > (len * 8)) - break; - - if (decoder_state->get_abs) { - *outp++ = code & 0xFC; - decoder_state->line_read++; - decoder_state->get_abs = 0; - } else { - if (table[code].is_abs) { - decoder_state->get_abs = 1; - } else { - /* relative to left pixel */ - val = outp[-2] + - table[code].val; - if (val > 0xff) - val = 0xff; - else if (val < 0) - val = 0; - *outp++ = val; - decoder_state->line_read++; - } - } - bitpos += bitlen; - } - - if (decoder_state->line_read == gspca_dev->width) { - int compressed_line_len; - - gspca_frame_add(gspca_dev, INTER_PACKET, f, - decoder_state->line_decode_buf, - gspca_dev->width); + unsigned char *sof; - /* completely decompressed line, round pos to nearest word */ - compressed_line_len = ((decoder_state->processed_bytes * 8 + - bitpos + 15) / 16) * 2; + sof = pac207_find_sof(gspca_dev, data, len); + if (sof) { + int n; - len -= compressed_line_len - decoder_state->processed_bytes; - if (len < 0) { - decoder_state->discard_byte = 1; - len = 0; - } - } else { - decoder_state->processed_bytes += len; - decoder_state->remaining_bits = cdata[bitpos/8]; - decoder_state->no_remaining_bits = (8 - bitpos) & 7; - len = 0; + /* finish decoding current frame */ + n = sof - data; + if (n > sizeof pac207_sof_marker) + n -= sizeof pac207_sof_marker; + 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; + data = sof; } + if (sd->header_read < 11) { + int needed; - return len; -} - -static void pac207_decode_line_init(struct gspca_dev *gspca_dev) -{ - struct sd *sd = (struct sd *) gspca_dev; - struct pac207_decoder_state *decoder_state = &sd->decoder_state; - - decoder_state->line_read = 0; - decoder_state->line_state = LINE_HEADER1; - decoder_state->processed_bytes = 0; - decoder_state->no_remaining_bits = 0; - decoder_state->get_abs = 0; -} - -static void pac207_decode_frame_init(struct gspca_dev *gspca_dev) -{ - struct sd *sd = (struct sd *) gspca_dev; - struct pac207_decoder_state *decoder_state = &sd->decoder_state; - - decoder_state->header_read = 0; - decoder_state->discard_byte = 0; - - pac207_decode_line_init(gspca_dev); -} - -static int pac207_decode_frame_data(struct gspca_dev *gspca_dev, - struct gspca_frame *f, unsigned char *data, int len) -{ - struct sd *sd = (struct sd *) gspca_dev; - struct pac207_decoder_state *decoder_state = &sd->decoder_state; - int needed = 0; - - /* first 11 bytes after sof marker: frame header */ - if (decoder_state->header_read < 11) { /* get average lumination from frame header (byte 5) */ - if (decoder_state->header_read < 5) { - needed = 5 - decoder_state->header_read; + if (sd->header_read < 5) { + needed = 5 - sd->header_read; if (len >= needed) - atomic_set(&sd->avg_lum, data[needed-1]); + atomic_set(&sd->avg_lum, data[needed - 1]); } /* skip the rest of the header */ - needed = 11 - decoder_state->header_read; + needed = 11 - sd->header_read; if (len <= needed) { - decoder_state->header_read += len; - return 0; + sd->header_read += len; + return; } data += needed; len -= needed; - decoder_state->header_read = 11; + sd->header_read = 11; } - while (len) { - if (decoder_state->discard_byte) { - data++; - len--; - decoder_state->discard_byte = 0; - continue; - } - - switch (decoder_state->line_state) { - case LINE_HEADER1: - decoder_state->line_marker = data[0] << 8; - decoder_state->line_state = LINE_HEADER2; - needed = 1; - break; - case LINE_HEADER2: - decoder_state->line_marker |= data[0]; - switch (decoder_state->line_marker) { - case 0x0ff0: - decoder_state->line_state = LINE_UNCOMPRESSED; - break; - case 0x1ee1: - decoder_state->line_state = LINE_COMPRESSED; - break; - default: - PDEBUG(D_STREAM, - "Error unknown line-header %04X", - (int) decoder_state->line_marker); - gspca_dev->last_packet_type = DISCARD_PACKET; - return 0; - } - needed = 1; - break; - case LINE_UNCOMPRESSED: - needed = gspca_dev->width - decoder_state->line_read; - if (needed > len) - needed = len; - gspca_frame_add(gspca_dev, INTER_PACKET, f, data, - needed); - decoder_state->line_read += needed; - break; - case LINE_COMPRESSED: - needed = len - - pac207_decompress_row(gspca_dev, f, data, len); - break; - } - - data += needed; - len -= needed; - - if (decoder_state->line_read == gspca_dev->width) { - if ((f->data_end - f->data) == - (gspca_dev->width * gspca_dev->height)) { - /* eureka we've got a frame */ - return 1; - } - pac207_decode_line_init(gspca_dev); - } - } - - return 0; -} - -static void sd_pkt_scan(struct gspca_dev *gspca_dev, - struct gspca_frame *frame, - unsigned char *data, - int len) -{ - unsigned char *sof; - int n; - - sof = pac207_find_sof(gspca_dev, data, len); - - if (sof) { - /* finish decoding current frame */ - if (gspca_dev->last_packet_type == INTER_PACKET) { - n = sof - data; - if (n > sizeof(pac207_sof_marker)) - n -= sizeof(pac207_sof_marker); - else - n = 0; - n = pac207_decode_frame_data(gspca_dev, frame, - data, n); - if (n) - frame = gspca_frame_add(gspca_dev, - LAST_PACKET, - frame, - NULL, - 0); - else - PDEBUG(D_STREAM, "Incomplete frame"); - } - pac207_decode_frame_init(gspca_dev); - gspca_frame_add(gspca_dev, FIRST_PACKET, frame, NULL, 0); - len -= sof - data; - data = sof; - } - - if (gspca_dev->last_packet_type == DISCARD_PACKET) - return; - - n = pac207_decode_frame_data(gspca_dev, frame, data, len); - if (n) - frame = gspca_frame_add(gspca_dev, LAST_PACKET, - frame, NULL, 0); + gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len); } static void setbrightness(struct gspca_dev *gspca_dev) @@ -879,7 +618,7 @@ static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val) } /* sub-driver description */ -static struct sd_desc sd_desc = { +static const struct sd_desc sd_desc = { .name = MODULE_NAME, .ctrls = sd_ctrls, .nctrls = ARRAY_SIZE(sd_ctrls), @@ -895,7 +634,7 @@ static struct sd_desc sd_desc = { /* -- module initialisation -- */ #define DVNM(name) .driver_info = (kernel_ulong_t) name -static __devinitdata struct usb_device_id device_table[] = { +static const __devinitdata struct usb_device_id device_table[] = { {USB_DEVICE(0x041e, 0x4028), DVNM("Creative Webcam Vista Plus")}, {USB_DEVICE(0x093a, 0x2460), DVNM("Q-Tec Webcam 100")}, {USB_DEVICE(0x093a, 0x2463), DVNM("Philips spc200nc pac207")}, @@ -927,7 +666,6 @@ static struct usb_driver sd_driver = { /* -- module insert / remove -- */ static int __init sd_mod_init(void) { - init_pixart_decoder(); if (usb_register(&sd_driver) < 0) return -1; PDEBUG(D_PROBE, "v%s registered", version); diff --git a/linux/drivers/media/video/gspca/pac7311.c b/linux/drivers/media/video/gspca/pac7311.c index 793d39ab9..5519c2f70 100644 --- a/linux/drivers/media/video/gspca/pac7311.c +++ b/linux/drivers/media/video/gspca/pac7311.c @@ -23,8 +23,8 @@ #include "gspca.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, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Thomas Kaiser thomas@kaiser-linux.li"); MODULE_DESCRIPTION("Pixart PAC7311"); @@ -37,7 +37,6 @@ struct sd { int avg_lum; unsigned char brightness; -#define BRIGHTNESS_MAX 0x20 unsigned char contrast; unsigned char colors; unsigned char autogain; @@ -58,21 +57,21 @@ static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val); static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val); static struct ctrl sd_ctrls[] = { -#define SD_BRIGHTNESS 0 { { .id = V4L2_CID_BRIGHTNESS, .type = V4L2_CTRL_TYPE_INTEGER, .name = "Brightness", .minimum = 0, +#define BRIGHTNESS_MAX 0x20 .maximum = BRIGHTNESS_MAX, .step = 1, - .default_value = 0x10, +#define BRIGHTNESS_DEF 0x10 + .default_value = BRIGHTNESS_DEF, }, .set = sd_setbrightness, .get = sd_getbrightness, }, -#define SD_CONTRAST 1 { { .id = V4L2_CID_CONTRAST, @@ -81,12 +80,12 @@ static struct ctrl sd_ctrls[] = { .minimum = 0, .maximum = 255, .step = 1, - .default_value = 127, +#define CONTRAST_DEF 127 + .default_value = CONTRAST_DEF, }, .set = sd_setcontrast, .get = sd_getcontrast, }, -#define SD_COLOR 2 { { .id = V4L2_CID_SATURATION, @@ -95,12 +94,12 @@ static struct ctrl sd_ctrls[] = { .minimum = 0, .maximum = 255, .step = 1, - .default_value = 127, +#define COLOR_DEF 127 + .default_value = COLOR_DEF, }, .set = sd_setcolors, .get = sd_getcolors, }, -#define SD_AUTOGAIN 3 { { .id = V4L2_CID_AUTOGAIN, @@ -109,22 +108,35 @@ static struct ctrl sd_ctrls[] = { .minimum = 0, .maximum = 1, .step = 1, - .default_value = 1, +#define AUTOGAIN_DEF 1 + .default_value = AUTOGAIN_DEF, }, .set = sd_setautogain, .get = sd_getautogain, }, }; -static struct cam_mode vga_mode[] = { - {V4L2_PIX_FMT_JPEG, 160, 120, 2}, - {V4L2_PIX_FMT_JPEG, 320, 240, 1}, - {V4L2_PIX_FMT_JPEG, 640, 480, 0}, +static struct v4l2_pix_format vga_mode[] = { + {160, 120, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 160, + .sizeimage = 160 * 120 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 2}, + {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 320, + .sizeimage = 320 * 240 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 1}, + {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 640, + .sizeimage = 640 * 480 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 0}, }; #define PAC7311_JPEG_HEADER_SIZE (sizeof pac7311_jpeg_header) /* (594) */ -const unsigned char pac7311_jpeg_header[] = { +static const __u8 pac7311_jpeg_header[] = { 0xff, 0xd8, 0xff, 0xe0, 0x00, 0x03, 0x20, 0xff, 0xc0, 0x00, 0x11, 0x08, @@ -195,16 +207,18 @@ const unsigned char pac7311_jpeg_header[] = { }; static void reg_w(struct usb_device *dev, - __u16 req, - __u16 value, - __u16 index, - __u8 *buffer, __u16 length) + __u16 index, + const char *buffer, __u16 len) { + __u8 tmpbuf[8]; + + memcpy(tmpbuf, buffer, len); usb_control_msg(dev, usb_sndctrlpipe(dev, 0), - req, + 1, /* request */ USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, - value, index, buffer, length, + 0, /* value */ + index, tmpbuf, len, 500); } @@ -227,7 +241,12 @@ static void pac7311_reg_write(struct usb_device *dev, __u8 buf; buf = value; - reg_w(dev, 0x00, value, index, &buf, 1); + usb_control_msg(dev, + usb_sndctrlpipe(dev, 0), + 0, /* request */ + USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, + value, index, &buf, 1, + 500); } /* this function is called at probe time */ @@ -256,10 +275,10 @@ static int sd_config(struct gspca_dev *gspca_dev, cam->cam_mode = vga_mode; cam->nmodes = ARRAY_SIZE(vga_mode); - sd->brightness = sd_ctrls[SD_BRIGHTNESS].qctrl.default_value; - sd->contrast = sd_ctrls[SD_CONTRAST].qctrl.default_value; - sd->colors = sd_ctrls[SD_COLOR].qctrl.default_value; - sd->autogain = sd_ctrls[SD_AUTOGAIN].qctrl.default_value; + sd->brightness = BRIGHTNESS_DEF; + sd->contrast = CONTRAST_DEF; + sd->colors = COLOR_DEF; + sd->autogain = AUTOGAIN_DEF; return 0; } @@ -271,7 +290,7 @@ static void setbrightness(struct gspca_dev *gspca_dev) /*jfm: inverted?*/ brightness = BRIGHTNESS_MAX - sd->brightness; pac7311_reg_write(gspca_dev->dev, 0xff, 0x04); - /* pac7311_reg_write(gspca_dev->dev, 0x0e, 0x00); */ +/* pac7311_reg_write(gspca_dev->dev, 0x0e, 0x00); */ pac7311_reg_write(gspca_dev->dev, 0x0f, brightness); /* load registers to sensor (Bit 0, auto clear) */ pac7311_reg_write(gspca_dev->dev, 0x11, 0x01); @@ -313,26 +332,26 @@ static void sd_start(struct gspca_dev *gspca_dev) struct sd *sd = (struct sd *) gspca_dev; pac7311_reg_write(dev, 0xff, 0x01); - reg_w(dev, 0x01, 0, 0x0002, "\x48\x0a\x40\x08\x00\x00\x08\x00", 8); - reg_w(dev, 0x01, 0, 0x000a, "\x06\xff\x11\xff\x5a\x30\x90\x4c", 8); - reg_w(dev, 0x01, 0, 0x0012, "\x00\x07\x00\x0a\x10\x00\xa0\x10", 8); - reg_w(dev, 0x01, 0, 0x001a, "\x02\x00\x00\x00\x00\x0b\x01\x00", 8); - reg_w(dev, 0x01, 0, 0x0022, "\x00\x00\x00\x00\x00\x00\x00\x00", 8); - reg_w(dev, 0x01, 0, 0x002a, "\x00\x00\x00", 3); - reg_w(dev, 0x01, 0, 0x003e, "\x00\x00\x78\x52\x4a\x52\x78\x6e", 8); - reg_w(dev, 0x01, 0, 0x0046, "\x48\x46\x48\x6e\x5f\x49\x42\x49", 8); - reg_w(dev, 0x01, 0, 0x004e, "\x5f\x5f\x49\x42\x49\x5f\x6e\x48", 8); - reg_w(dev, 0x01, 0, 0x0056, "\x46\x48\x6e\x78\x52\x4a\x52\x78", 8); - reg_w(dev, 0x01, 0, 0x005e, "\x00\x00\x09\x1b\x34\x49\x5c\x9b", 8); - reg_w(dev, 0x01, 0, 0x0066, "\xd0\xff", 2); - reg_w(dev, 0x01, 0, 0x0078, "\x44\x00\xf2\x01\x01\x80", 6); - reg_w(dev, 0x01, 0, 0x007f, "\x2a\x1c\x00\xc8\x02\x58\x03\x84", 8); - reg_w(dev, 0x01, 0, 0x0087, "\x12\x00\x1a\x04\x08\x0c\x10\x14", 8); - reg_w(dev, 0x01, 0, 0x008f, "\x18\x20", 2); - reg_w(dev, 0x01, 0, 0x0096, "\x01\x08\x04", 3); - reg_w(dev, 0x01, 0, 0x00a0, "\x44\x44\x44\x04", 4); - reg_w(dev, 0x01, 0, 0x00f0, "\x01\x00\x00\x00\x22\x00\x20\x00", 8); - reg_w(dev, 0x01, 0, 0x00f8, "\x3f\x00\x0a\x01\x00", 5); + reg_w(dev, 0x0002, "\x48\x0a\x40\x08\x00\x00\x08\x00", 8); + reg_w(dev, 0x000a, "\x06\xff\x11\xff\x5a\x30\x90\x4c", 8); + reg_w(dev, 0x0012, "\x00\x07\x00\x0a\x10\x00\xa0\x10", 8); + reg_w(dev, 0x001a, "\x02\x00\x00\x00\x00\x0b\x01\x00", 8); + reg_w(dev, 0x0022, "\x00\x00\x00\x00\x00\x00\x00\x00", 8); + reg_w(dev, 0x002a, "\x00\x00\x00", 3); + reg_w(dev, 0x003e, "\x00\x00\x78\x52\x4a\x52\x78\x6e", 8); + reg_w(dev, 0x0046, "\x48\x46\x48\x6e\x5f\x49\x42\x49", 8); + reg_w(dev, 0x004e, "\x5f\x5f\x49\x42\x49\x5f\x6e\x48", 8); + reg_w(dev, 0x0056, "\x46\x48\x6e\x78\x52\x4a\x52\x78", 8); + reg_w(dev, 0x005e, "\x00\x00\x09\x1b\x34\x49\x5c\x9b", 8); + reg_w(dev, 0x0066, "\xd0\xff", 2); + reg_w(dev, 0x0078, "\x44\x00\xf2\x01\x01\x80", 6); + reg_w(dev, 0x007f, "\x2a\x1c\x00\xc8\x02\x58\x03\x84", 8); + reg_w(dev, 0x0087, "\x12\x00\x1a\x04\x08\x0c\x10\x14", 8); + reg_w(dev, 0x008f, "\x18\x20", 2); + reg_w(dev, 0x0096, "\x01\x08\x04", 3); + reg_w(dev, 0x00a0, "\x44\x44\x44\x04", 4); + reg_w(dev, 0x00f0, "\x01\x00\x00\x00\x22\x00\x20\x00", 8); + reg_w(dev, 0x00f8, "\x3f\x00\x0a\x01\x00", 5); pac7311_reg_write(dev, 0xff, 0x04); pac7311_reg_write(dev, 0x02, 0x04); @@ -386,7 +405,7 @@ static void sd_start(struct gspca_dev *gspca_dev) setcolors(gspca_dev); /* set correct resolution */ - switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode) { + switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) { case 2: /* 160x120 */ pac7311_reg_write(dev, 0xff, 0x04); pac7311_reg_write(dev, 0x02, 0x03); @@ -495,7 +514,7 @@ static void setautogain(struct gspca_dev *gspca_dev, int luma) static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, /* target */ - unsigned char *data, /* isoc packet */ + __u8 *data, /* isoc packet */ int len) /* iso packet length */ { struct sd *sd = (struct sd *) gspca_dev; diff --git a/linux/drivers/media/video/gspca/sonixb.c b/linux/drivers/media/video/gspca/sonixb.c index c8dac5f7b..3272593c5 100644 --- a/linux/drivers/media/video/gspca/sonixb.c +++ b/linux/drivers/media/video/gspca/sonixb.c @@ -24,8 +24,8 @@ #include "gspca.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, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>"); MODULE_DESCRIPTION("GSPCA/SN9C102 USB Camera Driver"); @@ -38,6 +38,7 @@ struct sd { unsigned char brightness; unsigned char contrast; + unsigned char fr_h_sz; /* size of frame header */ char sensor; /* Type of image sensor chip */ #define SENSOR_HV7131R 0 #define SENSOR_OV6650 1 @@ -95,15 +96,34 @@ static struct ctrl sd_ctrls[] = { }, }; -/* fixme: should have V4L2_PIX_FMT_SN9C10X */ -static struct cam_mode vga_mode[] = { - {V4L2_PIX_FMT_SN9C10X, 160, 120, 2}, - {V4L2_PIX_FMT_SN9C10X, 320, 240, 1}, - {V4L2_PIX_FMT_SN9C10X, 640, 480, 0}, +static struct v4l2_pix_format vga_mode[] = { + {160, 120, V4L2_PIX_FMT_SN9C10X, V4L2_FIELD_NONE, + .bytesperline = 160, + .sizeimage = 160 * 120, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 2}, + {320, 240, V4L2_PIX_FMT_SN9C10X, V4L2_FIELD_NONE, + .bytesperline = 320, + .sizeimage = 320 * 240, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 1}, + {640, 480, V4L2_PIX_FMT_SN9C10X, V4L2_FIELD_NONE, + .bytesperline = 640, + .sizeimage = 640 * 480, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 0}, }; -static struct cam_mode sif_mode[] = { - {V4L2_PIX_FMT_SN9C10X, 176, 144, 1}, - {V4L2_PIX_FMT_SN9C10X, 352, 288, 0}, +static struct v4l2_pix_format sif_mode[] = { + {176, 144, V4L2_PIX_FMT_SN9C10X, V4L2_FIELD_NONE, + .bytesperline = 176, + .sizeimage = 176 * 144, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 1}, + {352, 288, V4L2_PIX_FMT_SN9C10X, V4L2_FIELD_NONE, + .bytesperline = 352, + .sizeimage = 352 * 288, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 0}, }; static const __u8 probe_ov7630[] = {0x08, 0x44}; @@ -342,15 +362,24 @@ static void reg_r(struct usb_device *dev, static void reg_w(struct usb_device *dev, __u16 value, const __u8 *buffer, - __u16 len) + int len) { + __u8 tmpbuf[32]; + +#ifdef CONFIG_VIDEO_ADV_DEBUG + if (len > sizeof tmpbuf) { + PDEBUG(D_ERR|D_PACK, "reg_w: buffer overflow"); + return; + } +#endif + memcpy(tmpbuf, buffer, len); usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 0x08, /* request */ USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, value, 0, /* index */ - (__u8 *) buffer, len, + tmpbuf, len, 500); } @@ -490,6 +519,7 @@ static int sd_config(struct gspca_dev *gspca_dev, __u16 product; int sif = 0; + sd->fr_h_sz = 12; /* default size of the frame header */ /* vendor = id->idVendor; */ product = id->idProduct; /* switch (vendor) { */ @@ -518,6 +548,7 @@ static int sd_config(struct gspca_dev *gspca_dev, break; case 0x60b0: /* SN9C103 */ sd->sensor = SENSOR_OV7630_3; + sd->fr_h_sz = 18; /* size of frame header */ break; case 0x6024: /* SN9C102 */ case 0x6025: /* SN9C102 */ @@ -531,6 +562,7 @@ static int sd_config(struct gspca_dev *gspca_dev, break; case 0x60af: /* SN9C103 */ sd->sensor = SENSOR_PAS202; + sd->fr_h_sz = 18; /* size of frame header (?) */ break; } /* break; */ @@ -591,7 +623,7 @@ static void sd_start(struct gspca_dev *gspca_dev) __u8 reg01, reg17; __u8 reg17_19[3]; - mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode; + mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; switch (sd->sensor) { case SENSOR_HV7131R: sn9c10x = initHv7131; @@ -755,22 +787,22 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, unsigned char *data, /* isoc packet */ int len) /* iso packet length */ { - int p; + struct sd *sd; + int i; if (len > 6 && len < 24) { - for (p = 0; p < len - 6; p++) { - if (data[0 + p] == 0xff - && data[1 + p] == 0xff - && data[2 + p] == 0x00 - && data[3 + p] == 0xc4 - && data[4 + p] == 0xc4 - && data[5 + p] == 0x96) { /* start of frame */ - frame = gspca_frame_add(gspca_dev, - LAST_PACKET, - frame, - data, 0); - data += 12; - len -= 12; + for (i = 0; i < len - 6; i++) { + if (data[0 + i] == 0xff + && data[1 + i] == 0xff + && data[2 + i] == 0x00 + && data[3 + i] == 0xc4 + && data[4 + i] == 0xc4 + && data[5 + i] == 0x96) { /* start of frame */ + frame = gspca_frame_add(gspca_dev, LAST_PACKET, + frame, data, 0); + sd = (struct sd *) gspca_dev; + data += i + sd->fr_h_sz; + len -= i + sd->fr_h_sz; gspca_frame_add(gspca_dev, FIRST_PACKET, frame, data, len); return; diff --git a/linux/drivers/media/video/gspca/sonixj.c b/linux/drivers/media/video/gspca/sonixj.c index 849f69e65..debbef092 100644 --- a/linux/drivers/media/video/gspca/sonixj.c +++ b/linux/drivers/media/video/gspca/sonixj.c @@ -24,8 +24,8 @@ #include "gspca.h" #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, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>"); MODULE_DESCRIPTION("GSPCA/SONIX JPEG USB Camera Driver"); @@ -74,7 +74,6 @@ static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val); static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val); static struct ctrl sd_ctrls[] = { -#define SD_BRIGHTNESS 0 { { .id = V4L2_CID_BRIGHTNESS, @@ -83,12 +82,12 @@ static struct ctrl sd_ctrls[] = { .minimum = 0, .maximum = 0xffff, .step = 1, - .default_value = 0x7fff, +#define BRIGHTNESS_DEF 0x7fff + .default_value = BRIGHTNESS_DEF, }, .set = sd_setbrightness, .get = sd_getbrightness, }, -#define SD_CONTRAST 1 { { .id = V4L2_CID_CONTRAST, @@ -97,12 +96,12 @@ static struct ctrl sd_ctrls[] = { .minimum = 0, .maximum = 127, .step = 1, - .default_value = 63, +#define CONTRAST_DEF 63 + .default_value = CONTRAST_DEF, }, .set = sd_setcontrast, .get = sd_getcontrast, }, -#define SD_COLOR 2 { { .id = V4L2_CID_SATURATION, @@ -111,12 +110,12 @@ static struct ctrl sd_ctrls[] = { .minimum = 0, .maximum = 255, .step = 1, - .default_value = 127, +#define COLOR_DEF 127 + .default_value = COLOR_DEF, }, .set = sd_setcolors, .get = sd_getcolors, }, -#define SD_AUTOGAIN 3 { { .id = V4L2_CID_AUTOGAIN, @@ -125,21 +124,34 @@ static struct ctrl sd_ctrls[] = { .minimum = 0, .maximum = 1, .step = 1, - .default_value = 1, +#define AUTOGAIN_DEF 1 + .default_value = AUTOGAIN_DEF, }, .set = sd_setautogain, .get = sd_getautogain, }, }; -static struct cam_mode vga_mode[] = { - {V4L2_PIX_FMT_JPEG, 160, 120, 2}, - {V4L2_PIX_FMT_JPEG, 320, 240, 1}, - {V4L2_PIX_FMT_JPEG, 640, 480, 0}, +static struct v4l2_pix_format vga_mode[] = { + {160, 120, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 160, + .sizeimage = 160 * 120 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 2}, + {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 320, + .sizeimage = 320 * 240 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 1}, + {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 640, + .sizeimage = 640 * 480 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 0}, }; /*Data from sn9c102p+hv71331r */ -static __u8 sn_hv7131[] = { +static const __u8 sn_hv7131[] = { 0x00, 0x03, 0x64, 0x00, 0x1A, 0x20, 0x20, 0x20, 0xA1, 0x11, /* reg0 reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 reg9 */ 0x02, 0x09, 0x00, 0x00, 0x00, 0x10, 0x03, 0x00, /* 00 */ @@ -150,7 +162,7 @@ static __u8 sn_hv7131[] = { /* reg1c reg1d reg1e reg1f reg20 reg21 reg22 reg23 */ }; -static __u8 sn_mi0360[] = { +static const __u8 sn_mi0360[] = { 0x00, 0x61, 0x44, 0x00, 0x1a, 0x20, 0x20, 0x20, 0xb1, 0x5d, /* reg0 reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 reg9 */ 0x07, 0x00, 0x00, 0x00, 0x00, 0x10, 0x03, 0x00, @@ -161,7 +173,7 @@ static __u8 sn_mi0360[] = { /* reg1c reg1d reg1e reg1f reg20 reg21 reg22 reg23 */ }; -static __u8 sn_mo4000[] = { +static const __u8 sn_mo4000[] = { 0x12, 0x23, 0x60, 0x00, 0x1A, 0x00, 0x20, 0x18, 0x81, /* reg0 reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 */ 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, @@ -174,13 +186,13 @@ static __u8 sn_mo4000[] = { 0xd3, 0xdf, 0xea, 0xf5 }; -static __u8 sn_ov7648[] = { +static const __u8 sn_ov7648[] = { 0x00, 0x21, 0x62, 0x00, 0x1a, 0x20, 0x20, 0x20, 0xA1, 0x6E, 0x18, 0x65, 0x00, 0x00, 0x00, 0x10, 0x03, 0x00, 0x00, 0x06, 0x06, 0x28, 0x1E, 0x82, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static __u8 sn_ov7660[] = { +static const __u8 sn_ov7660[] = { # if 1 /*jfm: from win trace */ /* reg0 reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 */ 0x00, 0x61, 0x40, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x81, @@ -203,7 +215,7 @@ static __u8 sn_ov7660[] = { }; /* sequence specific to the sensors - !! index = SENSOR_xxx */ -static __u8 *sn_tb[] = { +static const __u8 *sn_tb[] = { sn_hv7131, sn_mi0360, sn_mo4000, @@ -211,28 +223,28 @@ static __u8 *sn_tb[] = { sn_ov7660 }; -static __u8 regsn20[] = { +static const __u8 regsn20[] = { 0x00, 0x2d, 0x46, 0x5a, 0x6c, 0x7c, 0x8b, 0x99, 0xa6, 0xb2, 0xbf, 0xca, 0xd5, 0xe0, 0xeb, 0xf5, 0xff }; -static __u8 regsn20_sn9c325[] = { +static const __u8 regsn20_sn9c325[] = { 0x0a, 0x3a, 0x56, 0x6c, 0x7e, 0x8d, 0x9a, 0xa4, 0xaf, 0xbb, 0xc5, 0xcd, 0xd5, 0xde, 0xe8, 0xed, 0xf5 }; -static __u8 reg84[] = { +static const __u8 reg84[] = { 0x14, 0x00, 0x27, 0x00, 0x07, 0x00, 0xe5, 0x0f, 0xe4, 0x0f, 0x38, 0x00, 0x3e, 0x00, 0xc3, 0x0f, /* 0x00, 0x00, 0x00, 0x00, 0x00 */ 0xf7, 0x0f, 0x0a, 0x00, 0x00 }; -static __u8 reg84_sn9c325[] = { +static const __u8 reg84_sn9c325[] = { 0x14, 0x00, 0x27, 0x00, 0x07, 0x00, 0xe4, 0x0f, 0xd3, 0x0f, 0x4b, 0x00, 0x48, 0x00, 0xc0, 0x0f, 0xf8, 0x0f, 0x00, 0x00, 0x00 }; -static __u8 hv7131r_sensor_init[][8] = { +static const __u8 hv7131r_sensor_init[][8] = { {0xC1, 0x11, 0x01, 0x08, 0x01, 0x00, 0x00, 0x10}, {0xB1, 0x11, 0x34, 0x17, 0x7F, 0x00, 0x00, 0x10}, {0xD1, 0x11, 0x40, 0xFF, 0x7F, 0x7F, 0x7F, 0x10}, @@ -261,9 +273,9 @@ static __u8 hv7131r_sensor_init[][8] = { {0xA1, 0x11, 0x21, 0xD0, 0x00, 0x00, 0x00, 0x10}, {0xA1, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x10}, {0xA1, 0x11, 0x23, 0x10, 0x00, 0x00, 0x00, 0x10}, - {0, 0, 0, 0, 0, 0, 0, 0} + {} }; -static __u8 mi0360_sensor_init[][8] = { +static const __u8 mi0360_sensor_init[][8] = { {0xB1, 0x5D, 0x07, 0x00, 0x02, 0x00, 0x00, 0x10}, {0xB1, 0x5D, 0x0D, 0x00, 0x01, 0x00, 0x00, 0x10}, {0xB1, 0x5D, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x10}, @@ -315,9 +327,9 @@ static __u8 mi0360_sensor_init[][8] = { /* {0xB1, 0x5D, 0x35, 0x00, 0x20, 0x00, 0x00, 0x10}, * gain */ {0xB1, 0x5D, 0x07, 0x00, 0x03, 0x00, 0x00, 0x10}, /* update */ {0xB1, 0x5D, 0x07, 0x00, 0x02, 0x00, 0x00, 0x10}, /* sensor on */ - {0, 0, 0, 0, 0, 0, 0, 0} + {} }; -static __u8 mo4000_sensor_init[][8] = { +static const __u8 mo4000_sensor_init[][8] = { {0xa1, 0x21, 0x01, 0x02, 0x00, 0x00, 0x00, 0x10}, {0xa1, 0x21, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10}, {0xa1, 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, 0x10}, @@ -338,9 +350,9 @@ static __u8 mo4000_sensor_init[][8] = { {0xa1, 0x21, 0x10, 0x20, 0x00, 0x00, 0x00, 0x10}, {0xa1, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10}, {0xa1, 0x21, 0x11, 0x38, 0x00, 0x00, 0x00, 0x10}, - {0, 0, 0, 0, 0, 0, 0, 0} + {} }; -static __u8 ov7660_sensor_init[][8] = { +static const __u8 ov7660_sensor_init[][8] = { {0xa1, 0x21, 0x12, 0x80, 0x00, 0x00, 0x00, 0x10}, /* reset SCCB */ {0xa1, 0x21, 0x12, 0x05, 0x00, 0x00, 0x00, 0x10}, /* Outformat ?? rawRGB */ @@ -431,12 +443,12 @@ static __u8 ov7660_sensor_init[][8] = { {0xa1, 0x21, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x10}, {0xa1, 0x21, 0x2b, 0xc3, 0x00, 0x00, 0x00, 0x10}, /* here may start the isoc exchanges */ - {0, 0, 0, 0, 0, 0, 0, 0} + {} }; /* reg0x04 reg0x07 reg 0x10 */ /* expo = (COM1 & 0x02) | (AECHH & 0x2f <<10) [ (AECh << 2) */ -static __u8 ov7648_sensor_init[][8] = { +static const __u8 ov7648_sensor_init[][8] = { {0xC1, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00}, {0xC1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00}, {0xC1, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00}, @@ -489,10 +501,10 @@ static __u8 ov7648_sensor_init[][8] = { {0xA1, 0x6E, 0x07, 0x66, 0x00, 0x00, 0x00, 0x10}, /* B.. */ {0xC1, 0x6E, 0x1A, 0x03, 0x65, 0x90, 0x00, 0x10}, /* Bright/Witen....*/ /* {0xC1, 0x6E, 0x16, 0x45, 0x40, 0x60, 0x00, 0x10}, * Bright/Witene */ - {0, 0, 0, 0, 0, 0, 0, 0} + {} }; -static __u8 qtable4[] = { +static const __u8 qtable4[] = { 0x06, 0x04, 0x04, 0x06, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0x06, 0x08, 0x0A, 0x11, 0x0A, 0x0A, 0x08, 0x08, 0x0A, 0x15, 0x0F, 0x0F, 0x0C, 0x11, 0x19, 0x15, @@ -526,21 +538,39 @@ static void reg_r(struct usb_device *dev, static void reg_w(struct usb_device *dev, __u16 value, - __u8 *buffer, + const __u8 *buffer, int len) { - usb_control_msg(dev, - usb_sndctrlpipe(dev, 0), - 0x08, - USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, - value, 0, - buffer, len, - 500); + if (len < 16) { + __u8 tmpbuf[16]; + + memcpy(tmpbuf, buffer, len); + usb_control_msg(dev, + usb_sndctrlpipe(dev, 0), + 0x08, + USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, + value, 0, + tmpbuf, len, + 500); + } else { + __u8 *tmpbuf; + + tmpbuf = kmalloc(len, GFP_KERNEL); + memcpy(tmpbuf, buffer, len); + usb_control_msg(dev, + usb_sndctrlpipe(dev, 0), + 0x08, + USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, + value, 0, + tmpbuf, len, + 500); + kfree(tmpbuf); + } } /* write 2 bytes */ static void i2c_w2(struct gspca_dev *gspca_dev, - __u8 *buffer) + const __u8 *buffer) { struct sd *sd = (struct sd *) gspca_dev; struct usb_device *dev = gspca_dev->dev; @@ -559,7 +589,7 @@ static void i2c_w2(struct gspca_dev *gspca_dev, } /* write 8 bytes */ -static void i2c_w8(struct usb_device *dev, __u8 *buffer) +static void i2c_w8(struct usb_device *dev, const __u8 *buffer) { reg_w(dev, 0x08, buffer, 8); msleep(1); @@ -567,7 +597,7 @@ static void i2c_w8(struct usb_device *dev, __u8 *buffer) /* read 5 bytes */ static void i2c_r5(struct gspca_dev *gspca_dev, __u8 reg, - __u8 *buffer) + __u8 *buffer) { struct sd *sd = (struct sd *) gspca_dev; struct usb_device *dev = gspca_dev->dev; @@ -593,7 +623,7 @@ static int probesensor(struct gspca_dev *gspca_dev) struct sd *sd = (struct sd *) gspca_dev; struct usb_device *dev = gspca_dev->dev; __u8 reg02; - static __u8 datasend[] = { 2, 0 }; + static const __u8 datasend[] = { 2, 0 }; /* reg val1 val2 val3 val4 */ __u8 datarecd[6]; @@ -620,18 +650,18 @@ static int probesensor(struct gspca_dev *gspca_dev) } static int configure_gpio(struct gspca_dev *gspca_dev, - __u8 *sn9c1xx) + const __u8 *sn9c1xx) { struct sd *sd = (struct sd *) gspca_dev; struct usb_device *dev = gspca_dev->dev; __u8 data; __u8 regF1; - __u8 *reg9a; - static __u8 reg9a_def[] = + const __u8 *reg9a; + static const __u8 reg9a_def[] = {0x08, 0x40, 0x20, 0x10, 0x00, 0x04}; - static __u8 reg9a_sn9c120[] = /* from win trace */ + static const __u8 reg9a_sn9c120[] = /* from win trace */ {0x00, 0x40, 0x38, 0x30, 0x00, 0x20}; - static __u8 reg9a_sn9c325[] = + static const __u8 reg9a_sn9c325[] = {0x0a, 0x40, 0x38, 0x30, 0x00, 0x20}; @@ -699,7 +729,7 @@ static void hv7131R_InitSensor(struct gspca_dev *gspca_dev) { int i = 0; struct usb_device *dev = gspca_dev->dev; - static __u8 SetSensorClk[] = /* 0x08 Mclk */ + static const __u8 SetSensorClk[] = /* 0x08 Mclk */ { 0xa1, 0x11, 0x01, 0x18, 0x00, 0x00, 0x00, 0x10 }; while (hv7131r_sensor_init[i][0]) { @@ -973,11 +1003,12 @@ static int sd_config(struct gspca_dev *gspca_dev, cam->epaddr = 0x01; cam->cam_mode = vga_mode; cam->nmodes = ARRAY_SIZE(vga_mode); + sd->qindex = 4; /* set the quantization table */ - sd->brightness = sd_ctrls[SD_BRIGHTNESS].qctrl.default_value; - sd->contrast = sd_ctrls[SD_CONTRAST].qctrl.default_value; - sd->colors = sd_ctrls[SD_COLOR].qctrl.default_value; - sd->autogain = sd_ctrls[SD_AUTOGAIN].qctrl.default_value; + sd->brightness = BRIGHTNESS_DEF; + sd->contrast = CONTRAST_DEF; + sd->colors = COLOR_DEF; + sd->autogain = AUTOGAIN_DEF; return 0; } @@ -986,7 +1017,7 @@ static int sd_open(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; struct usb_device *dev = gspca_dev->dev; -/* __u8 *sn9c1xx; */ +/* const __u8 *sn9c1xx; */ __u8 regF1; __u8 regGpio[] = { 0x29, 0x74 }; @@ -1043,11 +1074,11 @@ static unsigned int setexposure(struct gspca_dev *gspca_dev, unsigned int expo) { struct sd *sd = (struct sd *) gspca_dev; - static __u8 doit[] = /* update sensor */ + static const __u8 doit[] = /* update sensor */ { 0xb1, 0x5d, 0x07, 0x00, 0x03, 0x00, 0x00, 0x10 }; - static __u8 sensorgo[] = /* sensor on */ + static const __u8 sensorgo[] = /* sensor on */ { 0xb1, 0x5d, 0x07, 0x00, 0x02, 0x00, 0x00, 0x10 }; - static __u8 gainMo[] = + static const __u8 gainMo[] = { 0xa1, 0x21, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1d }; switch (sd->sensor) { @@ -1171,14 +1202,15 @@ static void sd_start(struct gspca_dev *gspca_dev) __u8 data; __u8 reg1; __u8 reg17; - __u8 *sn9c1xx; + const __u8 *sn9c1xx; int mode; - static __u8 DC29[] = { 0x6a, 0x50, 0x00, 0x00, 0x50, 0x3c }; - static __u8 C0[] = { 0x2d, 0x2d, 0x3a, 0x05, 0x04, 0x3f }; - static __u8 CA[] = { 0x28, 0xd8, 0x14, 0xec }; - static __u8 CA_sn9c120[] = { 0x14, 0xec, 0x0a, 0xf6 }; /* SN9C120 */ - static __u8 CE[] = { 0x32, 0xdd, 0x2d, 0xdd }; /* MI0360 */ - static __u8 CE_sn9c325[] = + static const __u8 DC29[] = { 0x6a, 0x50, 0x00, 0x00, 0x50, 0x3c }; + static const __u8 C0[] = { 0x2d, 0x2d, 0x3a, 0x05, 0x04, 0x3f }; + static const __u8 CA[] = { 0x28, 0xd8, 0x14, 0xec }; + static const __u8 CA_sn9c120[] = + { 0x14, 0xec, 0x0a, 0xf6 }; /* SN9C120 */ + static const __u8 CE[] = { 0x32, 0xdd, 0x2d, 0xdd }; /* MI0360 */ + static const __u8 CE_sn9c325[] = { 0x32, 0xdd, 0x32, 0xdd }; /* OV7648 - SN9C325 */ sn9c1xx = sn_tb[(int) sd->sensor]; @@ -1228,7 +1260,7 @@ static void sd_start(struct gspca_dev *gspca_dev) reg_w(dev, 0x99, &data, 1); } - mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode; + mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; reg1 = 0x02; reg17 = 0x61; switch (sd->sensor) { @@ -1323,13 +1355,13 @@ static void sd_stopN(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; struct usb_device *dev = gspca_dev->dev; - static __u8 stophv7131[] = + static const __u8 stophv7131[] = { 0xa1, 0x11, 0x02, 0x09, 0x00, 0x00, 0x00, 0x10 }; - static __u8 stopmi0360[] = + static const __u8 stopmi0360[] = { 0xb1, 0x5d, 0x07, 0x00, 0x00, 0x00, 0x00, 0x10 }; __u8 regF1; __u8 data; - __u8 *sn9c1xx; + const __u8 *sn9c1xx; data = 0x0b; switch (sd->sensor) { @@ -1404,7 +1436,7 @@ static void setautogain(struct gspca_dev *gspca_dev) static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, /* target */ - unsigned char *data, /* isoc packet */ + __u8 *data, /* isoc packet */ int len) /* iso packet length */ { struct sd *sd = (struct sd *) gspca_dev; @@ -1579,7 +1611,7 @@ static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val) } /* sub-driver description */ -static struct sd_desc sd_desc = { +static const struct sd_desc sd_desc = { .name = MODULE_NAME, .ctrls = sd_ctrls, .nctrls = ARRAY_SIZE(sd_ctrls), @@ -1594,7 +1626,7 @@ static struct sd_desc sd_desc = { /* -- module initialisation -- */ #define DVNM(name) .driver_info = (kernel_ulong_t) name -static __devinitdata struct usb_device_id device_table[] = { +static const __devinitdata struct usb_device_id device_table[] = { {USB_DEVICE(0x0458, 0x7025), DVNM("Genius Eye 311Q")}, {USB_DEVICE(0x045e, 0x00f5), DVNM("MicroSoft VX3000")}, {USB_DEVICE(0x045e, 0x00f7), DVNM("MicroSoft VX1000")}, diff --git a/linux/drivers/media/video/gspca/spca500.c b/linux/drivers/media/video/gspca/spca500.c index d35bfabf8..1860fc7f5 100644 --- a/linux/drivers/media/video/gspca/spca500.c +++ b/linux/drivers/media/video/gspca/spca500.c @@ -24,8 +24,8 @@ #include "gspca.h" #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, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>"); MODULE_DESCRIPTION("GSPCA/SPCA500 USB Camera Driver"); @@ -35,7 +35,7 @@ MODULE_LICENSE("GPL"); struct sd { struct gspca_dev gspca_dev; /* !! must be the first item */ - unsigned char packet[ISO_MAX_SIZE + 128]; + __u8 packet[ISO_MAX_SIZE + 128]; /* !! no more than 128 ff in an ISO packet */ unsigned char brightness; @@ -70,58 +70,74 @@ static int sd_setcolors(struct gspca_dev *gspca_dev, __s32 val); static int sd_getcolors(struct gspca_dev *gspca_dev, __s32 *val); static struct ctrl sd_ctrls[] = { -#define SD_BRIGHTNESS 0 { { .id = V4L2_CID_BRIGHTNESS, .type = V4L2_CTRL_TYPE_INTEGER, .name = "Brightness", .minimum = 0, - .maximum = 0xff, + .maximum = 255, .step = 1, - .default_value = 0x7f, +#define BRIGHTNESS_DEF 127 + .default_value = BRIGHTNESS_DEF, }, .set = sd_setbrightness, .get = sd_getbrightness, }, -#define SD_CONTRAST 1 { { .id = V4L2_CID_CONTRAST, .type = V4L2_CTRL_TYPE_INTEGER, .name = "Contrast", .minimum = 0, - .maximum = 255, + .maximum = 63, .step = 1, - .default_value = 127, +#define CONTRAST_DEF 31 + .default_value = CONTRAST_DEF, }, .set = sd_setcontrast, .get = sd_getcontrast, }, -#define SD_COLOR 2 { { .id = V4L2_CID_SATURATION, .type = V4L2_CTRL_TYPE_INTEGER, .name = "Color", .minimum = 0, - .maximum = 255, + .maximum = 63, .step = 1, - .default_value = 127, +#define COLOR_DEF 31 + .default_value = COLOR_DEF, }, .set = sd_setcolors, .get = sd_getcolors, }, }; -static struct cam_mode vga_mode[] = { - {V4L2_PIX_FMT_JPEG, 320, 240, 1}, - {V4L2_PIX_FMT_JPEG, 640, 480, 0}, +static struct v4l2_pix_format vga_mode[] = { + {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 320, + .sizeimage = 320 * 240 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 1}, + {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 640, + .sizeimage = 640 * 480 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 0}, }; -static struct cam_mode sif_mode[] = { - {V4L2_PIX_FMT_JPEG, 176, 144, 1}, - {V4L2_PIX_FMT_JPEG, 352, 288, 0}, +static struct v4l2_pix_format sif_mode[] = { + {176, 144, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 176, + .sizeimage = 176 * 144 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 1}, + {352, 288, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 352, + .sizeimage = 352 * 288 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 0}, }; /* Frame packet header offsets for the spca500 */ @@ -139,7 +155,7 @@ static struct cam_mode sif_mode[] = { #define SPCA500_OFFSET_DATA 16 #if 0 -static __u16 spca500_read_stats[][3] = { +static const __u16 spca500_read_stats[][3] = { {0x0c, 0x0000, 0x0000}, {0x30, 0x03fd, 0x0001}, /* possible values for following call: 0x01b3, 0x01e6, 0x01f7, 0x0218 */ @@ -152,11 +168,11 @@ static __u16 spca500_read_stats[][3] = { {0x30, 0x0001, 0x0006}, {0x30, 0x0080, 0x0007}, {0x30, 0x0004, 0x0000}, - {0, 0, 0} + {} }; #endif -static __u16 spca500_visual_defaults[][3] = { +static const __u16 spca500_visual_defaults[][3] = { {0x00, 0x0003, 0x816b}, /* SSI not active sync with vsync, * hue (H byte) = 0, * saturation/hue enable, @@ -178,10 +194,9 @@ static __u16 spca500_visual_defaults[][3] = { {0x00, 0x0001, 0x8202}, /* clock rate compensation = 1/25 sec/frame */ {0x0c, 0x0004, 0x0000}, /* set interface */ - - {0, 0, 0} + {} }; -static __u16 Clicksmart510_defaults[][3] = { +static const __u16 Clicksmart510_defaults[][3] = { {0x00, 0x00, 0x8211}, {0x00, 0x01, 0x82c0}, {0x00, 0x10, 0x82cb}, @@ -310,7 +325,7 @@ static __u16 Clicksmart510_defaults[][3] = { {} }; -static unsigned char qtable_creative_pccam[2][64] = { +static const __u8 qtable_creative_pccam[2][64] = { { /* Q-table Y-components */ 0x05, 0x03, 0x03, 0x05, 0x07, 0x0c, 0x0f, 0x12, 0x04, 0x04, 0x04, 0x06, 0x08, 0x11, 0x12, 0x11, @@ -331,7 +346,7 @@ static unsigned char qtable_creative_pccam[2][64] = { 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e} }; -static unsigned char qtable_kodak_ez200[2][64] = { +static const __u8 qtable_kodak_ez200[2][64] = { { /* Q-table Y-components */ 0x02, 0x01, 0x01, 0x02, 0x02, 0x04, 0x05, 0x06, 0x01, 0x01, 0x01, 0x02, 0x03, 0x06, 0x06, 0x06, @@ -352,7 +367,7 @@ static unsigned char qtable_kodak_ez200[2][64] = { 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a} }; -static unsigned char qtable_pocketdv[2][64] = { +static const __u8 qtable_pocketdv[2][64] = { { /* Q-table Y-components start registers 0x8800 */ 0x06, 0x04, 0x04, 0x06, 0x0a, 0x10, 0x14, 0x18, 0x05, 0x05, 0x06, 0x08, 0x0a, 0x17, 0x18, 0x16, @@ -374,7 +389,7 @@ static unsigned char qtable_pocketdv[2][64] = { 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28} }; -static void spca5xxRegRead(struct usb_device *dev, +static void reg_r(struct usb_device *dev, __u16 index, __u8 *buffer, __u16 length) { @@ -386,25 +401,24 @@ static void spca5xxRegRead(struct usb_device *dev, index, buffer, length, 500); } -static int reg_write(struct usb_device *dev, +static int reg_w(struct usb_device *dev, __u16 req, __u16 index, __u16 value) { int ret; + PDEBUG(D_USBO, "reg write: [0x%02x] = 0x%02x", index, value); ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), req, - USB_TYPE_VENDOR | USB_RECIP_DEVICE, + USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, value, index, NULL, 0, 500); - PDEBUG(D_USBO, "reg write: [0x%02x] = 0x%02x, 0x%x", - index, value, ret); if (ret < 0) PDEBUG(D_ERR, "reg write: error %d", ret); return ret; } /* returns: negative is error, pos or zero is data */ -static int reg_read(struct usb_device *dev, +static int reg_r_12(struct usb_device *dev, __u16 req, /* bRequest */ __u16 index, /* wIndex */ __u16 length) /* wLength (1 or 2 only) */ @@ -422,7 +436,7 @@ static int reg_read(struct usb_device *dev, buf, length, 500); /* timeout */ if (ret < 0) { - PDEBUG(D_ERR, "reg_read err %d", ret); + PDEBUG(D_ERR, "reg_r_12 err %d", ret); return -1; } return (buf[1] << 8) + buf[0]; @@ -433,13 +447,13 @@ static int reg_read(struct usb_device *dev, * a reg_read call. * Returns: negative is error or timeout, zero is success. */ -static int reg_readwait(struct usb_device *dev, +static int reg_r_wait(struct usb_device *dev, __u16 reg, __u16 index, __u16 value) { int ret, cnt = 20; while (--cnt > 0) { - ret = reg_read(dev, reg, index, 1); + ret = reg_r_12(dev, reg, index, 1); if (ret == value) return 0; msleep(50); @@ -448,13 +462,13 @@ static int reg_readwait(struct usb_device *dev, } static int write_vector(struct gspca_dev *gspca_dev, - __u16 data[][3]) + const __u16 data[][3]) { struct usb_device *dev = gspca_dev->dev; int ret, i = 0; while (data[i][0] != 0 || data[i][1] != 0 || data[i][2] != 0) { - ret = reg_write(dev, data[i][0], data[i][2], data[i][1]); + ret = reg_w(dev, data[i][0], data[i][2], data[i][1]); if (ret < 0) return ret; i++; @@ -466,21 +480,21 @@ static int spca50x_setup_qtable(struct gspca_dev *gspca_dev, unsigned int request, unsigned int ybase, unsigned int cbase, - unsigned char qtable[2][64]) + const __u8 qtable[2][64]) { struct usb_device *dev = gspca_dev->dev; int i, err; /* loop over y components */ for (i = 0; i < 64; i++) { - err = reg_write(dev, request, ybase + i, qtable[0][i]); + err = reg_w(dev, request, ybase + i, qtable[0][i]); if (err < 0) return err; } /* loop over c components */ for (i = 0; i < 64; i++) { - err = reg_write(dev, request, cbase + i, qtable[1][i]); + err = reg_w(dev, request, cbase + i, qtable[1][i]); if (err < 0) return err; } @@ -491,8 +505,8 @@ static void spca500_ping310(struct gspca_dev *gspca_dev) { __u8 Data[2]; - spca5xxRegRead(gspca_dev->dev, 0x0d04, Data, 2); - PDEBUG(D_PACK, "ClickSmart310 ping 0x0d04 0x%02x 0x%02x", + reg_r(gspca_dev->dev, 0x0d04, Data, 2); + PDEBUG(D_STREAM, "ClickSmart310 ping 0x0d04 0x%02x 0x%02x", Data[0], Data[1]); } @@ -500,26 +514,26 @@ static void spca500_clksmart310_init(struct gspca_dev *gspca_dev) { __u8 Data[2]; - spca5xxRegRead(gspca_dev->dev, 0x0d05, Data, 2); - PDEBUG(D_PACK, "ClickSmart310 init 0x0d05 0x%02x 0x%02x", Data[0], - Data[1]); - reg_write(gspca_dev->dev, 0x00, 0x8167, 0x5a); + reg_r(gspca_dev->dev, 0x0d05, Data, 2); + PDEBUG(D_STREAM, "ClickSmart310 init 0x0d05 0x%02x 0x%02x", + Data[0], Data[1]); + reg_w(gspca_dev->dev, 0x00, 0x8167, 0x5a); spca500_ping310(gspca_dev); - reg_write(gspca_dev->dev, 0x00, 0x8168, 0x22); - reg_write(gspca_dev->dev, 0x00, 0x816a, 0xc0); - reg_write(gspca_dev->dev, 0x00, 0x816b, 0x0b); - reg_write(gspca_dev->dev, 0x00, 0x8169, 0x25); - reg_write(gspca_dev->dev, 0x00, 0x8157, 0x5b); - reg_write(gspca_dev->dev, 0x00, 0x8158, 0x5b); - reg_write(gspca_dev->dev, 0x00, 0x813f, 0x03); - reg_write(gspca_dev->dev, 0x00, 0x8151, 0x4a); - reg_write(gspca_dev->dev, 0x00, 0x8153, 0x78); - reg_write(gspca_dev->dev, 0x00, 0x0d01, 0x04); + reg_w(gspca_dev->dev, 0x00, 0x8168, 0x22); + reg_w(gspca_dev->dev, 0x00, 0x816a, 0xc0); + reg_w(gspca_dev->dev, 0x00, 0x816b, 0x0b); + reg_w(gspca_dev->dev, 0x00, 0x8169, 0x25); + reg_w(gspca_dev->dev, 0x00, 0x8157, 0x5b); + reg_w(gspca_dev->dev, 0x00, 0x8158, 0x5b); + reg_w(gspca_dev->dev, 0x00, 0x813f, 0x03); + reg_w(gspca_dev->dev, 0x00, 0x8151, 0x4a); + reg_w(gspca_dev->dev, 0x00, 0x8153, 0x78); + reg_w(gspca_dev->dev, 0x00, 0x0d01, 0x04); /* 00 for adjust shutter */ - reg_write(gspca_dev->dev, 0x00, 0x0d02, 0x01); - reg_write(gspca_dev->dev, 0x00, 0x8169, 0x25); - reg_write(gspca_dev->dev, 0x00, 0x0d01, 0x02); + reg_w(gspca_dev->dev, 0x00, 0x0d02, 0x01); + reg_w(gspca_dev->dev, 0x00, 0x8169, 0x25); + reg_w(gspca_dev->dev, 0x00, 0x0d01, 0x02); } static void spca500_setmode(struct gspca_dev *gspca_dev, @@ -528,14 +542,14 @@ static void spca500_setmode(struct gspca_dev *gspca_dev, int mode; /* set x multiplier */ - reg_write(gspca_dev->dev, 0, 0x8001, xmult); + reg_w(gspca_dev->dev, 0, 0x8001, xmult); /* set y multiplier */ - reg_write(gspca_dev->dev, 0, 0x8002, ymult); + reg_w(gspca_dev->dev, 0, 0x8002, ymult); /* use compressed mode, VGA, with mode specific subsample */ - mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode; - reg_write(gspca_dev->dev, 0, 0x8003, mode << 4); + mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; + reg_w(gspca_dev->dev, 0, 0x8003, mode << 4); } static int spca500_full_reset(struct gspca_dev *gspca_dev) @@ -543,20 +557,20 @@ static int spca500_full_reset(struct gspca_dev *gspca_dev) int err; /* send the reset command */ - err = reg_write(gspca_dev->dev, 0xe0, 0x0001, 0x0000); + err = reg_w(gspca_dev->dev, 0xe0, 0x0001, 0x0000); if (err < 0) return err; /* wait for the reset to complete */ - err = reg_readwait(gspca_dev->dev, 0x06, 0x0000, 0x0000); + err = reg_r_wait(gspca_dev->dev, 0x06, 0x0000, 0x0000); if (err < 0) return err; - err = reg_write(gspca_dev->dev, 0xe0, 0x0000, 0x0000); + err = reg_w(gspca_dev->dev, 0xe0, 0x0000, 0x0000); if (err < 0) return err; - err = reg_readwait(gspca_dev->dev, 0x06, 0, 0); + err = reg_r_wait(gspca_dev->dev, 0x06, 0, 0); if (err < 0) { - PDEBUG(D_ERR, "reg_readwait() failed"); + PDEBUG(D_ERR, "reg_r_wait() failed"); return err; } /* all ok */ @@ -579,7 +593,7 @@ static int spca500_synch310(struct gspca_dev *gspca_dev) } spca500_ping310(gspca_dev); - spca5xxRegRead(gspca_dev->dev, 0x0d00, &Data, 1); + reg_r(gspca_dev->dev, 0x0d00, &Data, 1); /* need alt setting here */ PDEBUG(D_PACK, "ClickSmart310 sync alt: %d", gspca_dev->alt); @@ -603,12 +617,12 @@ static void spca500_reinit(struct gspca_dev *gspca_dev) /* some unknow command from Aiptek pocket dv and family300 */ - reg_write(gspca_dev->dev, 0x00, 0x0d01, 0x01); - reg_write(gspca_dev->dev, 0x00, 0x0d03, 0x00); - reg_write(gspca_dev->dev, 0x00, 0x0d02, 0x01); + reg_w(gspca_dev->dev, 0x00, 0x0d01, 0x01); + reg_w(gspca_dev->dev, 0x00, 0x0d03, 0x00); + reg_w(gspca_dev->dev, 0x00, 0x0d02, 0x01); /* enable drop packet */ - reg_write(gspca_dev->dev, 0x00, 0x850a, 0x0001); + reg_w(gspca_dev->dev, 0x00, 0x850a, 0x0001); err = spca50x_setup_qtable(gspca_dev, 0x00, 0x8800, 0x8840, qtable_pocketdv); @@ -616,22 +630,22 @@ static void spca500_reinit(struct gspca_dev *gspca_dev) PDEBUG(D_ERR|D_STREAM, "spca50x_setup_qtable failed on init"); /* set qtable index */ - reg_write(gspca_dev->dev, 0x00, 0x8880, 2); + reg_w(gspca_dev->dev, 0x00, 0x8880, 2); /* family cam Quicksmart stuff */ - reg_write(gspca_dev->dev, 0x00, 0x800a, 0x00); + reg_w(gspca_dev->dev, 0x00, 0x800a, 0x00); /* Set agc transfer: synced inbetween frames */ - reg_write(gspca_dev->dev, 0x00, 0x820f, 0x01); + reg_w(gspca_dev->dev, 0x00, 0x820f, 0x01); /* Init SDRAM - needed for SDRAM access */ - reg_write(gspca_dev->dev, 0x00, 0x870a, 0x04); + reg_w(gspca_dev->dev, 0x00, 0x870a, 0x04); /*Start init sequence or stream */ - reg_write(gspca_dev->dev, 0, 0x8003, 0x00); + reg_w(gspca_dev->dev, 0, 0x8003, 0x00); /* switch to video camera mode */ - reg_write(gspca_dev->dev, 0x00, 0x8000, 0x0004); + reg_w(gspca_dev->dev, 0x00, 0x8000, 0x0004); msleep(2000); - if (reg_readwait(gspca_dev->dev, 0, 0x8000, 0x44) != 0) - spca5xxRegRead(gspca_dev->dev, 0x816b, &Data, 1); - reg_write(gspca_dev->dev, 0x00, 0x816b, Data); + if (reg_r_wait(gspca_dev->dev, 0, 0x8000, 0x44) != 0) + reg_r(gspca_dev->dev, 0x816b, &Data, 1); + reg_w(gspca_dev->dev, 0x00, 0x816b, Data); } /* this function is called at probe time */ @@ -751,9 +765,9 @@ static int sd_config(struct gspca_dev *gspca_dev, cam->nmodes = sizeof sif_mode / sizeof sif_mode[0]; } sd->qindex = 5; - sd->brightness = sd_ctrls[SD_BRIGHTNESS].qctrl.default_value; - sd->contrast = sd_ctrls[SD_CONTRAST].qctrl.default_value; - sd->colors = sd_ctrls[SD_COLOR].qctrl.default_value; + sd->brightness = BRIGHTNESS_DEF; + sd->contrast = CONTRAST_DEF; + sd->colors = COLOR_DEF; return 0; } @@ -788,7 +802,7 @@ static void sd_start(struct gspca_dev *gspca_dev) } /* is there a sensor here ? */ - spca5xxRegRead(gspca_dev->dev, 0x8a04, &Data, 1); + reg_r(gspca_dev->dev, 0x8a04, &Data, 1); PDEBUG(D_STREAM, "Spca500 Sensor Address 0x%02X", Data); PDEBUG(D_STREAM, "Spca500 curr_mode: %d Xmult: 0x%02X, Ymult: 0x%02X", gspca_dev->curr_mode, xmult, ymult); @@ -799,33 +813,33 @@ static void sd_start(struct gspca_dev *gspca_dev) spca500_setmode(gspca_dev, xmult, ymult); /* enable drop packet */ - reg_write(gspca_dev->dev, 0x00, 0x850a, 0x0001); - reg_write(gspca_dev->dev, 0x00, 0x8880, 3); + reg_w(gspca_dev->dev, 0x00, 0x850a, 0x0001); + reg_w(gspca_dev->dev, 0x00, 0x8880, 3); err = spca50x_setup_qtable(gspca_dev, 0x00, 0x8800, 0x8840, qtable_creative_pccam); if (err < 0) PDEBUG(D_ERR, "spca50x_setup_qtable failed"); /* Init SDRAM - needed for SDRAM access */ - reg_write(gspca_dev->dev, 0x00, 0x870a, 0x04); + reg_w(gspca_dev->dev, 0x00, 0x870a, 0x04); /* switch to video camera mode */ - reg_write(gspca_dev->dev, 0x00, 0x8000, 0x0004); + reg_w(gspca_dev->dev, 0x00, 0x8000, 0x0004); msleep(500); - if (reg_readwait(gspca_dev->dev, 0, 0x8000, 0x44) != 0) - PDEBUG(D_ERR, "reg_readwait() failed"); + if (reg_r_wait(gspca_dev->dev, 0, 0x8000, 0x44) != 0) + PDEBUG(D_ERR, "reg_r_wait() failed"); - spca5xxRegRead(gspca_dev->dev, 0x816b, &Data, 1); - reg_write(gspca_dev->dev, 0x00, 0x816b, Data); + reg_r(gspca_dev->dev, 0x816b, &Data, 1); + reg_w(gspca_dev->dev, 0x00, 0x816b, Data); spca500_synch310(gspca_dev); write_vector(gspca_dev, spca500_visual_defaults); spca500_setmode(gspca_dev, xmult, ymult); /* enable drop packet */ - reg_write(gspca_dev->dev, 0x00, 0x850a, 0x0001); + reg_w(gspca_dev->dev, 0x00, 0x850a, 0x0001); PDEBUG(D_ERR, "failed to enable drop packet"); - reg_write(gspca_dev->dev, 0x00, 0x8880, 3); + reg_w(gspca_dev->dev, 0x00, 0x8880, 3); err = spca50x_setup_qtable(gspca_dev, 0x00, 0x8800, 0x8840, qtable_creative_pccam); @@ -833,16 +847,16 @@ static void sd_start(struct gspca_dev *gspca_dev) PDEBUG(D_ERR, "spca50x_setup_qtable failed"); /* Init SDRAM - needed for SDRAM access */ - reg_write(gspca_dev->dev, 0x00, 0x870a, 0x04); + reg_w(gspca_dev->dev, 0x00, 0x870a, 0x04); /* switch to video camera mode */ - reg_write(gspca_dev->dev, 0x00, 0x8000, 0x0004); + reg_w(gspca_dev->dev, 0x00, 0x8000, 0x0004); - if (reg_readwait(gspca_dev->dev, 0, 0x8000, 0x44) != 0) - PDEBUG(D_ERR, "reg_readwait() failed"); + if (reg_r_wait(gspca_dev->dev, 0, 0x8000, 0x44) != 0) + PDEBUG(D_ERR, "reg_r_wait() failed"); - spca5xxRegRead(gspca_dev->dev, 0x816b, &Data, 1); - reg_write(gspca_dev->dev, 0x00, 0x816b, Data); + reg_r(gspca_dev->dev, 0x816b, &Data, 1); + reg_w(gspca_dev->dev, 0x00, 0x816b, Data); break; case CreativePCCam300: /* Creative PC-CAM 300 640x480 CCD */ case IntelPocketPCCamera: /* FIXME: Temporary fix for @@ -855,10 +869,10 @@ static void sd_start(struct gspca_dev *gspca_dev) PDEBUG(D_ERR, "spca500_full_reset failed"); /* enable drop packet */ - err = reg_write(gspca_dev->dev, 0x00, 0x850a, 0x0001); + err = reg_w(gspca_dev->dev, 0x00, 0x850a, 0x0001); if (err < 0) PDEBUG(D_ERR, "failed to enable drop packet"); - reg_write(gspca_dev->dev, 0x00, 0x8880, 3); + reg_w(gspca_dev->dev, 0x00, 0x8880, 3); err = spca50x_setup_qtable(gspca_dev, 0x00, 0x8800, 0x8840, qtable_creative_pccam); @@ -866,18 +880,18 @@ static void sd_start(struct gspca_dev *gspca_dev) PDEBUG(D_ERR, "spca50x_setup_qtable failed"); spca500_setmode(gspca_dev, xmult, ymult); - reg_write(gspca_dev->dev, 0x20, 0x0001, 0x0004); + reg_w(gspca_dev->dev, 0x20, 0x0001, 0x0004); /* switch to video camera mode */ - reg_write(gspca_dev->dev, 0x00, 0x8000, 0x0004); + reg_w(gspca_dev->dev, 0x00, 0x8000, 0x0004); - if (reg_readwait(gspca_dev->dev, 0, 0x8000, 0x44) != 0) - PDEBUG(D_ERR, "reg_readwait() failed"); + if (reg_r_wait(gspca_dev->dev, 0, 0x8000, 0x44) != 0) + PDEBUG(D_ERR, "reg_r_wait() failed"); - spca5xxRegRead(gspca_dev->dev, 0x816b, &Data, 1); - reg_write(gspca_dev->dev, 0x00, 0x816b, Data); + reg_r(gspca_dev->dev, 0x816b, &Data, 1); + reg_w(gspca_dev->dev, 0x00, 0x816b, Data); - /* write_vector(gspca_dev, spca500_visual_defaults); */ +/* write_vector(gspca_dev, spca500_visual_defaults); */ break; case KodakEZ200: /* Kodak EZ200 */ @@ -886,8 +900,8 @@ static void sd_start(struct gspca_dev *gspca_dev) if (err < 0) PDEBUG(D_ERR, "spca500_full_reset failed"); /* enable drop packet */ - reg_write(gspca_dev->dev, 0x00, 0x850a, 0x0001); - reg_write(gspca_dev->dev, 0x00, 0x8880, 0); + reg_w(gspca_dev->dev, 0x00, 0x850a, 0x0001); + reg_w(gspca_dev->dev, 0x00, 0x8880, 0); err = spca50x_setup_qtable(gspca_dev, 0x00, 0x8800, 0x8840, qtable_kodak_ez200); @@ -895,18 +909,18 @@ static void sd_start(struct gspca_dev *gspca_dev) PDEBUG(D_ERR, "spca50x_setup_qtable failed"); spca500_setmode(gspca_dev, xmult, ymult); - reg_write(gspca_dev->dev, 0x20, 0x0001, 0x0004); + reg_w(gspca_dev->dev, 0x20, 0x0001, 0x0004); /* switch to video camera mode */ - reg_write(gspca_dev->dev, 0x00, 0x8000, 0x0004); + reg_w(gspca_dev->dev, 0x00, 0x8000, 0x0004); - if (reg_readwait(gspca_dev->dev, 0, 0x8000, 0x44) != 0) - PDEBUG(D_ERR, "reg_readwait() failed"); + if (reg_r_wait(gspca_dev->dev, 0, 0x8000, 0x44) != 0) + PDEBUG(D_ERR, "reg_r_wait() failed"); - spca5xxRegRead(gspca_dev->dev, 0x816b, &Data, 1); - reg_write(gspca_dev->dev, 0x00, 0x816b, Data); + reg_r(gspca_dev->dev, 0x816b, &Data, 1); + reg_w(gspca_dev->dev, 0x00, 0x816b, Data); - /* write_vector(gspca_dev, spca500_visual_defaults); */ +/* write_vector(gspca_dev, spca500_visual_defaults); */ break; case BenqDC1016: @@ -919,56 +933,56 @@ static void sd_start(struct gspca_dev *gspca_dev) case ToptroIndus: case AgfaCl20: spca500_reinit(gspca_dev); - reg_write(gspca_dev->dev, 0x00, 0x0d01, 0x01); + reg_w(gspca_dev->dev, 0x00, 0x0d01, 0x01); /* enable drop packet */ - reg_write(gspca_dev->dev, 0x00, 0x850a, 0x0001); + reg_w(gspca_dev->dev, 0x00, 0x850a, 0x0001); err = spca50x_setup_qtable(gspca_dev, 0x00, 0x8800, 0x8840, qtable_pocketdv); if (err < 0) PDEBUG(D_ERR, "spca50x_setup_qtable failed"); - reg_write(gspca_dev->dev, 0x00, 0x8880, 2); + reg_w(gspca_dev->dev, 0x00, 0x8880, 2); /* familycam Quicksmart pocketDV stuff */ - reg_write(gspca_dev->dev, 0x00, 0x800a, 0x00); + reg_w(gspca_dev->dev, 0x00, 0x800a, 0x00); /* Set agc transfer: synced inbetween frames */ - reg_write(gspca_dev->dev, 0x00, 0x820f, 0x01); + reg_w(gspca_dev->dev, 0x00, 0x820f, 0x01); /* Init SDRAM - needed for SDRAM access */ - reg_write(gspca_dev->dev, 0x00, 0x870a, 0x04); + reg_w(gspca_dev->dev, 0x00, 0x870a, 0x04); spca500_setmode(gspca_dev, xmult, ymult); /* switch to video camera mode */ - reg_write(gspca_dev->dev, 0x00, 0x8000, 0x0004); + reg_w(gspca_dev->dev, 0x00, 0x8000, 0x0004); - reg_readwait(gspca_dev->dev, 0, 0x8000, 0x44); + reg_r_wait(gspca_dev->dev, 0, 0x8000, 0x44); - spca5xxRegRead(gspca_dev->dev, 0x816b, &Data, 1); - reg_write(gspca_dev->dev, 0x00, 0x816b, Data); + reg_r(gspca_dev->dev, 0x816b, &Data, 1); + reg_w(gspca_dev->dev, 0x00, 0x816b, Data); break; case LogitechTraveler: case LogitechClickSmart510: - reg_write(gspca_dev->dev, 0x02, 0x00, 0x00); + reg_w(gspca_dev->dev, 0x02, 0x00, 0x00); /* enable drop packet */ - reg_write(gspca_dev->dev, 0x00, 0x850a, 0x0001); + reg_w(gspca_dev->dev, 0x00, 0x850a, 0x0001); err = spca50x_setup_qtable(gspca_dev, 0x00, 0x8800, 0x8840, qtable_creative_pccam); if (err < 0) PDEBUG(D_ERR, "spca50x_setup_qtable failed"); - reg_write(gspca_dev->dev, 0x00, 0x8880, 3); - reg_write(gspca_dev->dev, 0x00, 0x800a, 0x00); + reg_w(gspca_dev->dev, 0x00, 0x8880, 3); + reg_w(gspca_dev->dev, 0x00, 0x800a, 0x00); /* Init SDRAM - needed for SDRAM access */ - reg_write(gspca_dev->dev, 0x00, 0x870a, 0x04); + reg_w(gspca_dev->dev, 0x00, 0x870a, 0x04); spca500_setmode(gspca_dev, xmult, ymult); /* switch to video camera mode */ - reg_write(gspca_dev->dev, 0x00, 0x8000, 0x0004); - reg_readwait(gspca_dev->dev, 0, 0x8000, 0x44); + reg_w(gspca_dev->dev, 0x00, 0x8000, 0x0004); + reg_r_wait(gspca_dev->dev, 0, 0x8000, 0x44); - spca5xxRegRead(gspca_dev->dev, 0x816b, &Data, 1); - reg_write(gspca_dev->dev, 0x00, 0x816b, Data); + reg_r(gspca_dev->dev, 0x816b, &Data, 1); + reg_w(gspca_dev->dev, 0x00, 0x816b, Data); write_vector(gspca_dev, Clicksmart510_defaults); break; } @@ -976,13 +990,13 @@ static void sd_start(struct gspca_dev *gspca_dev) static void sd_stopN(struct gspca_dev *gspca_dev) { - __u8 data = 0; + __u8 data; - reg_write(gspca_dev->dev, 0, 0x8003, 0x00); + reg_w(gspca_dev->dev, 0, 0x8003, 0x00); /* switch to video camera mode */ - reg_write(gspca_dev->dev, 0x00, 0x8000, 0x0004); - spca5xxRegRead(gspca_dev->dev, 0x8000, &data, 1); + reg_w(gspca_dev->dev, 0x00, 0x8000, 0x0004); + reg_r(gspca_dev->dev, 0x8000, &data, 1); PDEBUG(D_STREAM, "stop SPCA500 done reg8000: 0x%2x", data); } @@ -996,13 +1010,13 @@ static void sd_close(struct gspca_dev *gspca_dev) static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, /* target */ - unsigned char *data, /* isoc packet */ + __u8 *data, /* isoc packet */ int len) /* iso packet length */ { struct sd *sd = (struct sd *) gspca_dev; int i; - unsigned char *s, *d; - static unsigned char ffd9[] = {0xff, 0xd9}; + __u8 *s, *d; + static __u8 ffd9[] = {0xff, 0xd9}; /* frames are jpeg 4.1.1 without 0xff escape */ if (data[0] == 0xff) { @@ -1014,9 +1028,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, ffd9, 2); /* put the JPEG header in the new frame */ - jpeg_put_header(gspca_dev, frame, - ((struct sd *) gspca_dev)->qindex, - 0x22); + jpeg_put_header(gspca_dev, frame, sd->qindex, 0x22); data += SPCA500_OFFSET_DATA; len -= SPCA500_OFFSET_DATA; @@ -1048,43 +1060,52 @@ static void setbrightness(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; - reg_write(gspca_dev->dev, 0x00, 0x8167, + reg_w(gspca_dev->dev, 0x00, 0x8167, (__u8) (sd->brightness - 128)); } static void getbrightness(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; + int ret; - sd->brightness = reg_read(gspca_dev->dev, 0x00, 0x8167, 1) + 128; + ret = reg_r_12(gspca_dev->dev, 0x00, 0x8167, 1); + if (ret >= 0) + sd->brightness = ret + 128; } static void setcontrast(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; - reg_write(gspca_dev->dev, 0x00, 0x8168, sd->contrast >> 2); + reg_w(gspca_dev->dev, 0x00, 0x8168, sd->contrast); } static void getcontrast(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; + int ret; - sd->contrast = reg_read(gspca_dev->dev, 0x0, 0x8168, 1) << 2; + ret = reg_r_12(gspca_dev->dev, 0x0, 0x8168, 1); + if (ret >= 0) + sd->contrast = ret; } static void setcolors(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; - reg_write(gspca_dev->dev, 0x00, 0x8169, sd->colors >> 2); + reg_w(gspca_dev->dev, 0x00, 0x8169, sd->colors); } static void getcolors(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; + int ret; - sd->colors = reg_read(gspca_dev->dev, 0x0, 0x8169, 1) << 2; + ret = reg_r_12(gspca_dev->dev, 0x0, 0x8169, 1); + if (ret >= 0) + sd->colors = ret; } static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) @@ -1148,7 +1169,7 @@ static int sd_getcolors(struct gspca_dev *gspca_dev, __s32 *val) static struct sd_desc sd_desc = { .name = MODULE_NAME, .ctrls = sd_ctrls, - .nctrls = sizeof sd_ctrls / sizeof sd_ctrls[0], + .nctrls = ARRAY_SIZE(sd_ctrls), .config = sd_config, .open = sd_open, .start = sd_start, @@ -1160,7 +1181,7 @@ static struct sd_desc sd_desc = { /* -- module initialisation -- */ #define DVNM(name) .driver_info = (kernel_ulong_t) name -static __devinitdata struct usb_device_id device_table[] = { +static const __devinitdata struct usb_device_id device_table[] = { {USB_DEVICE(0x040a, 0x0300), DVNM("Kodak EZ200")}, {USB_DEVICE(0x041e, 0x400a), DVNM("Creative PC-CAM 300")}, {USB_DEVICE(0x046d, 0x0890), DVNM("Logitech QuickCam traveler")}, diff --git a/linux/drivers/media/video/gspca/spca501.c b/linux/drivers/media/video/gspca/spca501.c index f4f5254c5..762e8ae97 100644 --- a/linux/drivers/media/video/gspca/spca501.c +++ b/linux/drivers/media/video/gspca/spca501.c @@ -23,8 +23,8 @@ #include "gspca.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, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>"); MODULE_DESCRIPTION("GSPCA/SPCA501 USB Camera Driver"); @@ -101,10 +101,22 @@ static struct ctrl sd_ctrls[] = { }, }; -static struct cam_mode vga_mode[] = { - {V4L2_PIX_FMT_SPCA501, 160, 120, 2}, - {V4L2_PIX_FMT_SPCA501, 320, 240, 1}, - {V4L2_PIX_FMT_SPCA501, 640, 480, 0}, +static struct v4l2_pix_format vga_mode[] = { + {160, 120, V4L2_PIX_FMT_SPCA501, V4L2_FIELD_NONE, + .bytesperline = 160, + .sizeimage = 160 * 120 * 3 / 8, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 2}, + {320, 240, V4L2_PIX_FMT_SPCA501, V4L2_FIELD_NONE, + .bytesperline = 320, + .sizeimage = 320 * 240 * 3 / 8, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 1}, + {640, 480, V4L2_PIX_FMT_SPCA501, V4L2_FIELD_NONE, + .bytesperline = 640, + .sizeimage = 640 * 480 * 3 / 8, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 0}, }; #define SPCA50X_REG_USB 0x2 /* spca505 501 */ @@ -151,7 +163,7 @@ static struct cam_mode vga_mode[] = { #define SPCA501_A33 0x10 /* Data for video camera initialization before capturing */ -static __u16 spca501_open_data[][3] = { +static const __u16 spca501_open_data[][3] = { /* bmRequest,value,index */ {0x2, 0x50, 0x00}, /* C/S enable soft reset */ @@ -257,7 +269,7 @@ static __u16 spca501_open_data[][3] = { */ /* Data for chip initialization (set default values) */ -static __u16 spca501_init_data[][3] = { +static const __u16 spca501_init_data[][3] = { /* Set all the values to powerup defaults */ /* bmRequest,value,index */ {0x0, 0xAA, 0x00}, @@ -544,7 +556,7 @@ static __u16 spca501_init_data[][3] = { * Capture and decoding by Colin Peart. * This is is for the 3com HomeConnect Lite which is spca501a based. */ -static __u16 spca501_3com_open_data[][3] = { +static const __u16 spca501_3com_open_data[][3] = { /* bmRequest,value,index */ {0x2, 0x0050, 0x0000}, /* C/S Enable TG soft reset, timing mode=010 */ {0x2, 0x0043, 0x0000}, /* C/S Disable TG soft reset, timing mode=010 */ @@ -639,7 +651,7 @@ static __u16 spca501_3com_open_data[][3] = { * 2) Understand why some values seem to appear more than once * 3) Write a small comment for each line of the following arrays. */ -static __u16 spca501c_arowana_open_data[][3] = { +static const __u16 spca501c_arowana_open_data[][3] = { /* bmRequest,value,index */ {0x02, 0x0007, 0x0005}, {0x02, 0xa048, 0x0000}, @@ -661,7 +673,7 @@ static __u16 spca501c_arowana_open_data[][3] = { {} }; -static __u16 spca501c_arowana_init_data[][3] = { +static const __u16 spca501c_arowana_init_data[][3] = { /* bmRequest,value,index */ {0x02, 0x0007, 0x0005}, {0x02, 0xa048, 0x0000}, @@ -1595,7 +1607,7 @@ static __u16 spca501c_arowana_init_data[][3] = { /* Unknow camera from Ori Usbid 0x0000:0x0000 */ /* Based on snoops from Ori Cohen */ -static __u16 spca501c_mysterious_open_data[][3] = { +static const __u16 spca501c_mysterious_open_data[][3] = { {0x02, 0x000f, 0x0005}, {0x02, 0xa048, 0x0000}, {0x05, 0x0022, 0x0004}, @@ -1646,7 +1658,7 @@ static __u16 spca501c_mysterious_open_data[][3] = { }; /* Based on snoops from Ori Cohen */ -static __u16 spca501c_mysterious_init_data[][3] = { +static const __u16 spca501c_mysterious_init_data[][3] = { /* Part 3 */ /* TG registers */ /* {0x00, 0x0000, 0x0000}, */ @@ -1839,7 +1851,7 @@ static int reg_read(struct usb_device *dev, } static int write_vector(struct gspca_dev *gspca_dev, - __u16 data[][3]) + const __u16 data[][3]) { struct usb_device *dev = gspca_dev->dev; int ret, i = 0; @@ -1893,7 +1905,7 @@ static void getcontrast(struct gspca_dev *gspca_dev) 0x00, 0x00, 1) & 0xff) << 8; - spca50x->contrast = byte | (reg_read(gspca_dev->dev, + ss->contrast = byte | (reg_read(gspca_dev->dev, 0x00, 0x01, 1) & 0xff); @@ -2012,7 +2024,6 @@ static int sd_open(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; - PDEBUG(D_STREAM, "SPCA501 init"); switch (sd->subtype) { case ThreeComHomeConnectLite: /* Special handling for 3com data */ @@ -2041,7 +2052,7 @@ static void sd_start(struct gspca_dev *gspca_dev) int mode; /* memorize the wanted pixel format */ - mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode; + mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; /* Enable ISO packet machine CTRL reg=2, * index=1 bitmask=0x2 (bit ordinal 1) */ @@ -2061,7 +2072,7 @@ static void sd_start(struct gspca_dev *gspca_dev) reg_write(dev, SPCA501_REG_CTLRL, 0x01, 0x02); /* HDG atleast the Intel CreateAndShare needs to have one of its - * brightness / contrast / color set otherwise it assumes wath seems + * brightness / contrast / color set otherwise it assumes what seems * max contrast. Note that strange enough setting any of these is * enough to fix the max contrast problem, to be sure we set all 3 */ setbrightness(gspca_dev); @@ -2170,7 +2181,7 @@ static int sd_getcolors(struct gspca_dev *gspca_dev, __s32 *val) } /* sub-driver description */ -static struct sd_desc sd_desc = { +static const struct sd_desc sd_desc = { .name = MODULE_NAME, .ctrls = sd_ctrls, .nctrls = ARRAY_SIZE(sd_ctrls), @@ -2185,7 +2196,7 @@ static struct sd_desc sd_desc = { /* -- module initialisation -- */ #define DVNM(name) .driver_info = (kernel_ulong_t) name -static __devinitdata struct usb_device_id device_table[] = { +static const __devinitdata struct usb_device_id device_table[] = { {USB_DEVICE(0x040a, 0x0002), DVNM("Kodak DVC-325")}, {USB_DEVICE(0x0497, 0xc001), DVNM("Smile International")}, {USB_DEVICE(0x0506, 0x00df), DVNM("3Com HomeConnect Lite")}, diff --git a/linux/drivers/media/video/gspca/spca505.c b/linux/drivers/media/video/gspca/spca505.c index 840785cec..cecbc4362 100644 --- a/linux/drivers/media/video/gspca/spca505.c +++ b/linux/drivers/media/video/gspca/spca505.c @@ -23,8 +23,8 @@ #include "gspca.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, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>"); MODULE_DESCRIPTION("GSPCA/SPCA505 USB Camera Driver"); @@ -66,12 +66,32 @@ static struct ctrl sd_ctrls[] = { }, }; -static struct cam_mode vga_mode[] = { - {V4L2_PIX_FMT_YUYV, 160, 120, 5}, - {V4L2_PIX_FMT_YUYV, 176, 144, 4}, - {V4L2_PIX_FMT_YUYV, 320, 240, 2}, - {V4L2_PIX_FMT_YUYV, 352, 288, 1}, - {V4L2_PIX_FMT_YUYV, 640, 480, 0}, +static struct v4l2_pix_format vga_mode[] = { + {160, 120, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, + .bytesperline = 160 * 2, + .sizeimage = 160 * 120 * 2, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 5}, + {176, 144, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, + .bytesperline = 176 * 2, + .sizeimage = 176 * 144 * 2, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 4}, + {320, 240, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, + .bytesperline = 320 * 2, + .sizeimage = 320 * 240 * 2, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 2}, + {352, 288, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, + .bytesperline = 352 * 2, + .sizeimage = 352 * 288 * 2, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 1}, + {640, 480, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, + .bytesperline = 640 * 2, + .sizeimage = 640 * 480 * 2, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 0}, }; #define SPCA50X_OFFSET_DATA 10 @@ -91,7 +111,7 @@ static struct cam_mode vga_mode[] = { /* * Data to initialize a SPCA505. Common to the CCD and external modes */ -static __u16 spca505_init_data[][3] = { +static const __u16 spca505_init_data[][3] = { /* line bmRequest,value,index */ /* 1819 */ {SPCA50X_REG_GLOBAL, SPCA50X_GMISC3_SAA7113RST, SPCA50X_GLOBAL_MISC3}, @@ -130,7 +150,7 @@ static __u16 spca505_init_data[][3] = { /* * Data to initialize the camera using the internal CCD */ -static __u16 spca505_open_data_ccd[][3] = { +static const __u16 spca505_open_data_ccd[][3] = { /* line bmRequest,value,index */ /* Internal CCD data set */ /* 1891 */ {0x3, 0x04, 0x01}, @@ -312,7 +332,7 @@ static __u16 spca505_open_data_ccd[][3] = { /* * Data to initialize the camera in external video mode */ -static __u16 spca505_open_data_ext[][3] = { +static const __u16 spca505_open_data_ext[][3] = { /* line bmRequest,value,index */ /* External video input dataset */ /* 0808 */ {0x3, 0x04, 0x01}, @@ -350,7 +370,7 @@ static __u16 spca505_open_data_ext[][3] = { /* * Additional data needed to initialze the camera in external mode */ -static __u16 spca505_open_data2[][3] = { +static const __u16 spca505_open_data2[][3] = { /* line bmRequest,value,index */ /* 1384 */ {0x3, 0x68, 0x03}, /* 1385 */ {0x3, 0x10, 0x01}, @@ -388,7 +408,7 @@ static __u16 spca505_open_data2[][3] = { /* * Data to initialize a SPCA505. Common to the CCD and external modes */ -static __u16 spca505b_init_data[][3] = { +static const __u16 spca505b_init_data[][3] = { /* start */ {0x02, 0x00, 0x00}, /* init */ {0x02, 0x00, 0x01}, @@ -452,7 +472,7 @@ static __u16 spca505b_init_data[][3] = { /* * Data to initialize the camera using the internal CCD */ -static __u16 spca505b_open_data_ccd[][3] = { +static const __u16 spca505b_open_data_ccd[][3] = { /* {0x02,0x00,0x00}, */ {0x03, 0x04, 0x01}, /* rst */ @@ -648,7 +668,7 @@ static int reg_read(struct usb_device *dev, __u16 length) /* wLength (1 or 2 only) */ { int ret; - unsigned char buf[4]; + __u8 buf[4]; buf[1] = 0; ret = usb_control_msg(dev, @@ -668,7 +688,7 @@ static int reg_read(struct usb_device *dev, } static int write_vector(struct gspca_dev *gspca_dev, - __u16 data[][3]) + const __u16 data[][3]) { struct usb_device *dev = gspca_dev->dev; int ret, i = 0; @@ -777,7 +797,7 @@ static void sd_start(struct gspca_dev *gspca_dev) * only once after loading module */ /* stopping usb registers Tomasz change */ reg_write(dev, 0x02, 0x0, 0x0); - switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode) { + switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) { case 0: reg_write(dev, 0x04, 0x00, 0x00); reg_write(dev, 0x04, 0x06, 0x10); @@ -870,7 +890,7 @@ static void yyuv_decode(unsigned char *out, static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, /* target */ - unsigned char *data, /* isoc packet */ + __u8 *data, /* isoc packet */ int len) /* iso packet length */ { struct sd *sd = (struct sd *) gspca_dev; @@ -947,7 +967,7 @@ static int sd_getbrightness(struct gspca_dev *gspca_dev, __s32 *val) } /* sub-driver description */ -static struct sd_desc sd_desc = { +static const struct sd_desc sd_desc = { .name = MODULE_NAME, .ctrls = sd_ctrls, .nctrls = ARRAY_SIZE(sd_ctrls), @@ -962,7 +982,7 @@ static struct sd_desc sd_desc = { /* -- module initialisation -- */ #define DVNM(name) .driver_info = (kernel_ulong_t) name -static __devinitdata struct usb_device_id device_table[] = { +static const __devinitdata struct usb_device_id device_table[] = { {USB_DEVICE(0x041e, 0x401d), DVNM("Creative Webcam NX ULTRA")}, {USB_DEVICE(0x0733, 0x0430), DVNM("Intel PC Camera Pro")}, {} diff --git a/linux/drivers/media/video/gspca/spca506.c b/linux/drivers/media/video/gspca/spca506.c index 614fb3ad7..2d249b00b 100644 --- a/linux/drivers/media/video/gspca/spca506.c +++ b/linux/drivers/media/video/gspca/spca506.c @@ -25,8 +25,8 @@ #include "gspca.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, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>"); MODULE_DESCRIPTION("GSPCA/SPCA506 USB Camera Driver"); @@ -34,11 +34,11 @@ MODULE_LICENSE("GPL"); /* specific webcam descriptor */ struct sd { - struct gspca_dev gspca_dev; /* !! must be the first item */ + struct gspca_dev gspca_dev; /* !! must be the first item */ int buflen; - unsigned char tmpbuf[640 * 480 * 3]; /* YYUV per line */ - unsigned char tmpbuf2[640 * 480 * 2]; /* YUYV */ + __u8 tmpbuf[640 * 480 * 3]; /* YYUV per line */ + __u8 tmpbuf2[640 * 480 * 2]; /* YUYV */ unsigned char brightness; unsigned char contrast; @@ -117,12 +117,32 @@ static struct ctrl sd_ctrls[] = { }, }; -static struct cam_mode vga_mode[] = { - {V4L2_PIX_FMT_YUYV, 160, 120, 5}, - {V4L2_PIX_FMT_YUYV, 176, 144, 4}, - {V4L2_PIX_FMT_YUYV, 320, 240, 2}, - {V4L2_PIX_FMT_YUYV, 352, 288, 1}, - {V4L2_PIX_FMT_YUYV, 640, 480, 0}, +static struct v4l2_pix_format vga_mode[] = { + {160, 120, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, + .bytesperline = 160 * 2, + .sizeimage = 160 * 120 * 2, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 5}, + {176, 144, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, + .bytesperline = 176 * 2, + .sizeimage = 176 * 144 * 2, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 4}, + {320, 240, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, + .bytesperline = 320 * 2, + .sizeimage = 320 * 240 * 2, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 2}, + {352, 288, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, + .bytesperline = 352 * 2, + .sizeimage = 352 * 288 * 2, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 1}, + {640, 480, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, + .bytesperline = 640 * 2, + .sizeimage = 640 * 480 * 2, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 0}, }; #define SPCA50X_OFFSET_DATA 10 @@ -169,7 +189,7 @@ static void spca506_WriteI2c(struct gspca_dev *gspca_dev, __u16 valeur, __u16 reg) { int retry = 60; - unsigned char Data[2]; + __u8 Data[2]; reg_w(gspca_dev->dev, 0x07, reg, 0x0001); reg_w(gspca_dev->dev, 0x07, valeur, 0x0000); @@ -183,8 +203,8 @@ static void spca506_WriteI2c(struct gspca_dev *gspca_dev, __u16 valeur, static int spca506_ReadI2c(struct gspca_dev *gspca_dev, __u16 reg) { int retry = 60; - unsigned char Data[2]; - unsigned char value; + __u8 Data[2]; + __u8 value; reg_w(gspca_dev->dev, 0x07, SAA7113_I2C_BASE_WRITE, 0x0004); reg_w(gspca_dev->dev, 0x07, reg, 0x0001); @@ -513,7 +533,7 @@ static void sd_start(struct gspca_dev *gspca_dev) reg_w(dev, 0x05, 0x00, 0x0004); reg_w(dev, 0x03, 0x10, 0x0001); reg_w(dev, 0x03, 0x78, 0x0000); - switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode) { + switch (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) { case 0: spca506_Setsize(gspca_dev, 0, 0x10, 0x10); break; @@ -593,7 +613,7 @@ static void yyuv_decode(unsigned char *out, static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, /* target */ - unsigned char *data, /* isoc packet */ + __u8 *data, /* isoc packet */ int len) /* iso packet length */ { struct sd *sd = (struct sd *) gspca_dev; diff --git a/linux/drivers/media/video/gspca/spca508.c b/linux/drivers/media/video/gspca/spca508.c index 0b8190ef6..a70d51117 100644 --- a/linux/drivers/media/video/gspca/spca508.c +++ b/linux/drivers/media/video/gspca/spca508.c @@ -22,8 +22,8 @@ #include "gspca.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, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>"); MODULE_DESCRIPTION("GSPCA/SPCA508 USB Camera Driver"); @@ -53,27 +53,43 @@ static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val); static int sd_getbrightness(struct gspca_dev *gspca_dev, __s32 *val); static struct ctrl sd_ctrls[] = { -#define SD_BRIGHTNESS 0 { { .id = V4L2_CID_BRIGHTNESS, .type = V4L2_CTRL_TYPE_INTEGER, .name = "Brightness", .minimum = 0, - .maximum = 0xff, + .maximum = 255, .step = 1, - .default_value = 0x80, +#define BRIGHTNESS_DEF 128 + .default_value = BRIGHTNESS_DEF, }, .set = sd_setbrightness, .get = sd_getbrightness, }, }; -static struct cam_mode sif_mode[] = { - {V4L2_PIX_FMT_YUYV, 160, 120, 3}, - {V4L2_PIX_FMT_YUYV, 176, 144, 2}, - {V4L2_PIX_FMT_YUYV, 320, 240, 1}, - {V4L2_PIX_FMT_YUYV, 352, 288, 0}, +static struct v4l2_pix_format sif_mode[] = { + {160, 120, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, + .bytesperline = 160 * 2, + .sizeimage = 160 * 120 * 2, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 3}, + {176, 144, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, + .bytesperline = 176 * 2, + .sizeimage = 176 * 144 * 2, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 2}, + {320, 240, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, + .bytesperline = 320 * 2, + .sizeimage = 320 * 240 * 2, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 1}, + {352, 288, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, + .bytesperline = 352 * 2, + .sizeimage = 352 * 288 * 2, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 0}, }; /* Frame packet header offsets for the spca508 */ @@ -92,7 +108,7 @@ static struct cam_mode sif_mode[] = { * Initialization data: this is the first set-up data written to the * device (before the open data). */ -static __u16 spca508_init_data[][3] = +static const __u16 spca508_init_data[][3] = #define IGN(x) /* nothing */ { /* line URB value, index */ @@ -604,23 +620,23 @@ static __u16 spca508_init_data[][3] = /* Video drop enable, ISO streaming disable */ /* 53252 2165 */ /* UNKNOWN DIRECTION (URB_FUNCTION_SELECT_INTERFACE: (ALT=0) ) */ - {0, 0} + {} }; #if 0 /* * Data to initialize the camera using the internal CCD */ -static __u16 spca508_open_data[][3] = { +static const __u16 spca508_open_data[][3] = { /* line bmRequest,value,index */ - {0, 0} + {} }; #endif /* * Initialization data for Intel EasyPC Camera CS110 */ -static __u16 spca508cs110_init_data[][3] = { +static const __u16 spca508cs110_init_data[][3] = { {0x0000, 0x870b}, /* Reset CTL3 */ {0x0003, 0x8111}, /* Soft Reset compression, memory, TG & CDSP */ {0x0000, 0x8111}, /* Normal operation on reset */ @@ -704,7 +720,7 @@ static __u16 spca508cs110_init_data[][3] = { {} }; -static __u16 spca508_sightcam_init_data[][3] = { +static const __u16 spca508_sightcam_init_data[][3] = { /* This line seems to setup the frame/canvas */ /*368 */ {0x000f, 0x8402}, @@ -784,11 +800,10 @@ static __u16 spca508_sightcam_init_data[][3] = { /*542 */ {0x0040, 0x8652}, /*543 */ {0x004c, 0x8653}, /*544 */ {0x0040, 0x8654}, - - {0, 0} + {} }; -static __u16 spca508_sightcam2_init_data[][3] = { +static const __u16 spca508_sightcam2_init_data[][3] = { #if 1 /* 35 */ {0x0020, 0x8112}, @@ -1137,7 +1152,7 @@ static __u16 spca508_sightcam2_init_data[][3] = { /* * Initialization data for Creative Webcam Vista */ -static __u16 spca508_vista_init_data[][3] = { +static const __u16 spca508_vista_init_data[][3] = { {0x0008, 0x8200}, /* Clear register */ {0x0000, 0x870b}, /* Reset CTL3 */ {0x0020, 0x8112}, /* Video Drop packet enable */ @@ -1479,7 +1494,7 @@ static int reg_read(struct usb_device *dev, } static int write_vector(struct gspca_dev *gspca_dev, - __u16 data[][3]) + const __u16 data[][3]) { struct usb_device *dev = gspca_dev->dev; int ret, i = 0; @@ -1507,6 +1522,13 @@ static int sd_config(struct gspca_dev *gspca_dev, vendor = id->idVendor; product = id->idProduct; switch (vendor) { + case 0x0130: /* Clone webcam */ +/* switch (product) { */ +/* case 0x0130: */ + sd->subtype = HamaUSBSightcam; /* same as Hama 0010 */ +/* break; */ +/* } */ + break; case 0x041e: /* Creative cameras */ /* switch (product) { */ /* case 0x4018: */ @@ -1547,30 +1569,27 @@ static int sd_config(struct gspca_dev *gspca_dev, break; } - /* Read from global register the USB product and vendor IDs, just to */ - /* prove that we can communicate with the device. This works, which */ - /* confirms at we are communicating properly and that the device */ - /* is a 508. */ + /* Read from global register the USB product and vendor IDs, just to + * prove that we can communicate with the device. This works, which + * confirms at we are communicating properly and that the device + * is a 508. */ data1 = reg_read(dev, 0x8104); data2 = reg_read(dev, 0x8105); - PDEBUG(D_PROBE, - "Read from GLOBAL: USB Vendor ID 0x%02x%02x", data2, data1); + PDEBUG(D_PROBE, "Webcam Vendor ID: 0x%02x%02x", data2, data1); data1 = reg_read(dev, 0x8106); data2 = reg_read(dev, 0x8107); - PDEBUG(D_PROBE, - "Read from GLOBAL: USB Product ID 0x%02x%02x", data2, data1); + PDEBUG(D_PROBE, "Webcam Product ID: 0x%02x%02x", data2, data1); data1 = reg_read(dev, 0x8621); - PDEBUG(D_PROBE, - "Read from GLOBAL: Window 1 average luminance %d", data1); + PDEBUG(D_PROBE, "Window 1 average luminance: %d", data1); cam = &gspca_dev->cam; cam->dev_name = (char *) id->driver_info; cam->epaddr = 0x01; cam->cam_mode = sif_mode; - cam->nmodes = sizeof sif_mode / sizeof sif_mode[0]; - sd->brightness = sd_ctrls[SD_BRIGHTNESS].qctrl.default_value; + cam->nmodes = ARRAY_SIZE(sif_mode); + sd->brightness = BRIGHTNESS_DEF; switch (sd->subtype) { case ViewQuestVQ110: @@ -1610,7 +1629,7 @@ static void sd_start(struct gspca_dev *gspca_dev) { int mode; - mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode; + mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; reg_write(gspca_dev->dev, 0x8500, mode); switch (mode) { case 0: @@ -1675,7 +1694,7 @@ static void yuvy_decode(unsigned char *out, static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, /* target */ - unsigned char *data, /* isoc packet */ + __u8 *data, /* isoc packet */ int len) /* iso packet length */ { struct sd *sd = (struct sd *) gspca_dev; @@ -1719,7 +1738,7 @@ static void setbrightness(struct gspca_dev *gspca_dev) struct sd *sd = (struct sd *) gspca_dev; __u8 brightness = sd->brightness; -/* MX seem contrast */ + /* MX seem contrast */ reg_write(gspca_dev->dev, 0x8651, brightness); reg_write(gspca_dev->dev, 0x8652, brightness); reg_write(gspca_dev->dev, 0x8653, brightness); @@ -1753,7 +1772,7 @@ static int sd_getbrightness(struct gspca_dev *gspca_dev, __s32 *val) } /* sub-driver description */ -static struct sd_desc sd_desc = { +static const struct sd_desc sd_desc = { .name = MODULE_NAME, .ctrls = sd_ctrls, .nctrls = ARRAY_SIZE(sd_ctrls), @@ -1768,7 +1787,8 @@ static struct sd_desc sd_desc = { /* -- module initialisation -- */ #define DVNM(name) .driver_info = (kernel_ulong_t) name -static __devinitdata struct usb_device_id device_table[] = { +static const __devinitdata struct usb_device_id device_table[] = { + {USB_DEVICE(0x0130, 0x0130), DVNM("Clone Digital Webcam 11043")}, {USB_DEVICE(0x041e, 0x4018), DVNM("Creative Webcam Vista (PD1100)")}, {USB_DEVICE(0x0461, 0x0815), DVNM("Micro Innovation IC200")}, {USB_DEVICE(0x0733, 0x0110), DVNM("ViewQuest VQ110")}, diff --git a/linux/drivers/media/video/gspca/spca561.c b/linux/drivers/media/video/gspca/spca561.c index a94e62701..f0770ee59 100644 --- a/linux/drivers/media/video/gspca/spca561.c +++ b/linux/drivers/media/video/gspca/spca561.c @@ -24,8 +24,8 @@ #include "gspca.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, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>"); MODULE_DESCRIPTION("GSPCA/SPCA561 USB Camera Driver"); @@ -97,11 +97,27 @@ static struct ctrl sd_ctrls[] = { }, }; -static struct cam_mode sif_mode[] = { - {V4L2_PIX_FMT_SPCA561, 160, 120, 3}, - {V4L2_PIX_FMT_SPCA561, 176, 144, 2}, - {V4L2_PIX_FMT_SPCA561, 320, 240, 1}, - {V4L2_PIX_FMT_SPCA561, 352, 288, 0}, +static struct v4l2_pix_format sif_mode[] = { + {160, 120, V4L2_PIX_FMT_SGBRG8, V4L2_FIELD_NONE, + .bytesperline = 160, + .sizeimage = 160 * 120, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 3}, + {176, 144, V4L2_PIX_FMT_SGBRG8, V4L2_FIELD_NONE, + .bytesperline = 176, + .sizeimage = 176 * 144, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 2}, + {320, 240, V4L2_PIX_FMT_SPCA561, V4L2_FIELD_NONE, + .bytesperline = 320, + .sizeimage = 320 * 240 * 4 / 8, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 1}, + {352, 288, V4L2_PIX_FMT_SPCA561, V4L2_FIELD_NONE, + .bytesperline = 352, + .sizeimage = 352 * 288 * 4 / 8, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 0}, }; /* @@ -148,7 +164,8 @@ static void reg_w_val(struct usb_device *dev, __u16 index, __u16 value) PDEBUG(D_ERR, "reg write: error %d", ret); } -static void write_vector(struct gspca_dev *gspca_dev, __u16 data[][2]) +static void write_vector(struct gspca_dev *gspca_dev, + const __u16 data[][2]) { struct usb_device *dev = gspca_dev->dev; int i; @@ -171,13 +188,16 @@ static void reg_r(struct usb_device *dev, } static void reg_w_buf(struct usb_device *dev, - __u16 index, __u8 *buffer, __u16 length) + __u16 index, const __u8 *buffer, __u16 len) { + __u8 tmpbuf[8]; + + memcpy(tmpbuf, buffer, len); usb_control_msg(dev, usb_sndctrlpipe(dev, 0), 0, /* request */ USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 0, /* value */ - index, buffer, length, 500); + index, tmpbuf, len, 500); } static void i2c_init(struct gspca_dev *gspca_dev, __u8 mode) @@ -227,7 +247,7 @@ static int i2c_read(struct gspca_dev *gspca_dev, __u16 reg, __u8 mode) return ((int) value << 8) | vallsb; } -static __u16 spca561_init_data[][2] = { +static const __u16 spca561_init_data[][2] = { {0x0000, 0x8114}, /* Software GPIO output data */ {0x0001, 0x8114}, /* Software GPIO output data */ {0x0000, 0x8112}, /* Some kind of reset */ @@ -437,7 +457,7 @@ static void sensor_reset(struct gspca_dev *gspca_dev) } /******************** QC Express etch2 stuff ********************/ -static __u16 Pb100_1map8300[][2] = { +static const __u16 Pb100_1map8300[][2] = { /* reg, value */ {0x8320, 0x3304}, @@ -452,14 +472,14 @@ static __u16 Pb100_1map8300[][2] = { {0x8302, 0x000e}, {} }; -static __u16 Pb100_2map8300[][2] = { +static const __u16 Pb100_2map8300[][2] = { /* reg, value */ {0x8339, 0x0000}, {0x8307, 0x00aa}, {} }; -static __u16 spca561_161rev12A_data1[][2] = { +static const __u16 spca561_161rev12A_data1[][2] = { {0x21, 0x8118}, {0x01, 0x8114}, {0x00, 0x8112}, @@ -467,7 +487,7 @@ static __u16 spca561_161rev12A_data1[][2] = { {0x04, 0x8802}, /* windows uses 08 */ {} }; -static __u16 spca561_161rev12A_data2[][2] = { +static const __u16 spca561_161rev12A_data2[][2] = { {0x21, 0x8118}, {0x10, 0x8500}, {0x07, 0x8601}, @@ -513,7 +533,7 @@ static __u16 spca561_161rev12A_data2[][2] = { }; static void sensor_mapwrite(struct gspca_dev *gspca_dev, - __u16 sensormap[][2]) + const __u16 sensormap[][2]) { int i = 0; __u8 usbval[2]; @@ -651,7 +671,7 @@ static void sd_start(struct gspca_dev *gspca_dev) __u8 Reg8307[] = { 0xaa, 0x00 }; int mode; - mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode; + mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; switch (sd->chip_revision) { case Rev072A: switch (mode) { @@ -808,7 +828,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, gspca_frame_add(gspca_dev, FIRST_PACKET, frame, data, len); } else { - /*fixme: which format?*/ + /* raw bayer (with a header, which we skip) */ data += 20; len -= 20; gspca_frame_add(gspca_dev, FIRST_PACKET, @@ -956,7 +976,7 @@ static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val) } /* sub-driver description */ -static struct sd_desc sd_desc = { +static const struct sd_desc sd_desc = { .name = MODULE_NAME, .ctrls = sd_ctrls, .nctrls = ARRAY_SIZE(sd_ctrls), @@ -971,7 +991,7 @@ static struct sd_desc sd_desc = { /* -- module initialisation -- */ #define DVNM(name) .driver_info = (kernel_ulong_t) name -static __devinitdata struct usb_device_id device_table[] = { +static const __devinitdata struct usb_device_id device_table[] = { {USB_DEVICE(0x041e, 0x401a), DVNM("Creative Webcam Vista (PD1100)")}, {USB_DEVICE(0x041e, 0x403b), DVNM("Creative Webcam Vista (VF0010)")}, {USB_DEVICE(0x0458, 0x7004), DVNM("Genius VideoCAM Express V2")}, diff --git a/linux/drivers/media/video/gspca/stk014.c b/linux/drivers/media/video/gspca/stk014.c index 6832fe0f3..d676cd16a 100644 --- a/linux/drivers/media/video/gspca/stk014.c +++ b/linux/drivers/media/video/gspca/stk014.c @@ -23,8 +23,8 @@ #include "gspca.h" #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, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Jean-Francois Moine <http://moinejf.free.fr>"); MODULE_DESCRIPTION("Syntek DV4000 (STK014) USB Camera Driver"); @@ -54,7 +54,6 @@ static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 val); static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val); static struct ctrl sd_ctrls[] = { -#define SD_BRIGHTNESS 0 { { .id = V4L2_CID_BRIGHTNESS, @@ -63,12 +62,12 @@ static struct ctrl sd_ctrls[] = { .minimum = 0, .maximum = 255, .step = 1, - .default_value = 127, +#define BRIGHTNESS_DEF 127 + .default_value = BRIGHTNESS_DEF, }, .set = sd_setbrightness, .get = sd_getbrightness, }, -#define SD_CONTRAST 1 { { .id = V4L2_CID_CONTRAST, @@ -77,26 +76,26 @@ static struct ctrl sd_ctrls[] = { .minimum = 0, .maximum = 255, .step = 1, - .default_value = 127, +#define CONTRAST_DEF 127 + .default_value = CONTRAST_DEF, }, .set = sd_setcontrast, .get = sd_getcontrast, }, -#define SD_COLOR 2 { { .id = V4L2_CID_SATURATION, .type = V4L2_CTRL_TYPE_INTEGER, - .name = "Saturation", + .name = "Color", .minimum = 0, .maximum = 255, .step = 1, - .default_value = 127, +#define COLOR_DEF 127 + .default_value = COLOR_DEF, }, .set = sd_setcolors, .get = sd_getcolors, }, -#define SD_FREQ 3 { { .id = V4L2_CID_POWER_LINE_FREQUENCY, @@ -105,16 +104,25 @@ static struct ctrl sd_ctrls[] = { .minimum = 1, .maximum = 2, /* 0: 0, 1: 50Hz, 2:60Hz */ .step = 1, - .default_value = 1, +#define FREQ_DEF 1 + .default_value = FREQ_DEF, }, .set = sd_setfreq, .get = sd_getfreq, }, }; -static struct cam_mode vga_mode[] = { - {V4L2_PIX_FMT_JPEG, 320, 240}, - {V4L2_PIX_FMT_JPEG, 640, 480}, +static struct v4l2_pix_format vga_mode[] = { + {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 320, + .sizeimage = 320 * 240 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 1}, + {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 640, + .sizeimage = 640 * 480 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 0}, }; /* -- read a register -- */ @@ -296,10 +304,10 @@ static int sd_config(struct gspca_dev *gspca_dev, cam->epaddr = 0x02; gspca_dev->cam.cam_mode = vga_mode; gspca_dev->cam.nmodes = sizeof vga_mode / sizeof vga_mode[0]; - sd->brightness = sd_ctrls[SD_BRIGHTNESS].qctrl.default_value; - sd->contrast = sd_ctrls[SD_CONTRAST].qctrl.default_value; - sd->colors = sd_ctrls[SD_COLOR].qctrl.default_value; - sd->lightfreq = sd_ctrls[SD_FREQ].qctrl.default_value; + sd->brightness = BRIGHTNESS_DEF; + sd->contrast = CONTRAST_DEF; + sd->colors = COLOR_DEF; + sd->lightfreq = FREQ_DEF; return 0; } @@ -408,7 +416,7 @@ static void sd_close(struct gspca_dev *gspca_dev) static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, /* target */ - unsigned char *data, /* isoc packet */ + __u8 *data, /* isoc packet */ int len) /* iso packet length */ { static unsigned char ffd9[] = {0xff, 0xd9}; @@ -518,10 +526,10 @@ static int sd_querymenu(struct gspca_dev *gspca_dev, case V4L2_CID_POWER_LINE_FREQUENCY: switch (menu->index) { case 1: /* V4L2_CID_POWER_LINE_FREQUENCY_50HZ */ - strcpy(menu->name, "50 Hz"); + strcpy((char *) menu->name, "50 Hz"); return 0; case 2: /* V4L2_CID_POWER_LINE_FREQUENCY_60HZ */ - strcpy(menu->name, "60 Hz"); + strcpy((char *) menu->name, "60 Hz"); return 0; } break; diff --git a/linux/drivers/media/video/gspca/sunplus.c b/linux/drivers/media/video/gspca/sunplus.c index fff75a914..6e02726ee 100644 --- a/linux/drivers/media/video/gspca/sunplus.c +++ b/linux/drivers/media/video/gspca/sunplus.c @@ -24,8 +24,8 @@ #include "gspca.h" #include "jpeg.h" -#define DRIVER_VERSION_NUMBER KERNEL_VERSION(2, 1, 1) -static const char version[] = "2.1.1"; +#define DRIVER_VERSION_NUMBER KERNEL_VERSION(2, 1, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>"); MODULE_DESCRIPTION("GSPCA/SPCA5xx USB Camera Driver"); @@ -35,7 +35,7 @@ MODULE_LICENSE("GPL"); struct sd { struct gspca_dev gspca_dev; /* !! must be the first item */ - unsigned char packet[ISO_MAX_SIZE + 128]; + __u8 packet[ISO_MAX_SIZE + 128]; /* !! no more than 128 ff in an ISO packet */ unsigned char brightness; @@ -126,21 +126,53 @@ static struct ctrl sd_ctrls[] = { }, }; -static struct cam_mode vga_mode[] = { - {V4L2_PIX_FMT_JPEG, 320, 240, 2}, - {V4L2_PIX_FMT_JPEG, 640, 480, 1}, +static struct v4l2_pix_format vga_mode[] = { + {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 320, + .sizeimage = 320 * 240 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 2}, + {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 640, + .sizeimage = 640 * 480 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 1}, }; -static struct cam_mode custom_mode[] = { - {V4L2_PIX_FMT_JPEG, 320, 240, 2}, - {V4L2_PIX_FMT_JPEG, 464, 480, 1}, +static struct v4l2_pix_format custom_mode[] = { + {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 320, + .sizeimage = 320 * 240 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 2}, + {464, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 464, + .sizeimage = 464 * 480 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 1}, }; -static struct cam_mode vga_mode2[] = { - {V4L2_PIX_FMT_JPEG, 176, 144, 4}, - {V4L2_PIX_FMT_JPEG, 320, 240, 3}, - {V4L2_PIX_FMT_JPEG, 352, 288, 2}, - {V4L2_PIX_FMT_JPEG, 640, 480, 1}, +static struct v4l2_pix_format vga_mode2[] = { + {176, 144, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 176, + .sizeimage = 176 * 144 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 4}, + {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 320, + .sizeimage = 320 * 240 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 3}, + {352, 288, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 352, + .sizeimage = 352 * 288 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 2}, + {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 640, + .sizeimage = 640 * 480 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 1}, }; #define SPCA50X_OFFSET_DATA 10 @@ -156,7 +188,7 @@ static struct cam_mode vga_mode2[] = { #define SPCA536_OFFSET_FRAMSEQ 1 /* Initialisation data for the Creative PC-CAM 600 */ -static __u16 spca504_pccam600_init_data[][3] = { +static const __u16 spca504_pccam600_init_data[][3] = { /* {0xa0, 0x0000, 0x0503}, * capture mode */ {0x00, 0x0000, 0x2000}, {0x00, 0x0013, 0x2301}, @@ -193,7 +225,7 @@ static __u16 spca504_pccam600_init_data[][3] = { /* Creative PC-CAM 600 specific open data, sent before using the * generic initialisation data from spca504_open_data. */ -static __u16 spca504_pccam600_open_data[][3] = { +static const __u16 spca504_pccam600_open_data[][3] = { {0x00, 0x0001, 0x2501}, {0x20, 0x0500, 0x0001}, /* snapshot mode */ {0x00, 0x0003, 0x2880}, @@ -202,7 +234,7 @@ static __u16 spca504_pccam600_open_data[][3] = { }; /* Initialisation data for the logitech clicksmart 420 */ -static __u16 spca504A_clicksmart420_init_data[][3] = { +static const __u16 spca504A_clicksmart420_init_data[][3] = { /* {0xa0, 0x0000, 0x0503}, * capture mode */ {0x00, 0x0000, 0x2000}, {0x00, 0x0013, 0x2301}, @@ -257,7 +289,7 @@ static __u16 spca504A_clicksmart420_init_data[][3] = { }; /* clicksmart 420 open data ? */ -static __u16 spca504A_clicksmart420_open_data[][3] = { +static const __u16 spca504A_clicksmart420_open_data[][3] = { {0x00, 0x0001, 0x2501}, {0x20, 0x0502, 0x0000}, {0x06, 0x0000, 0x0000}, @@ -404,7 +436,7 @@ static __u16 spca504A_clicksmart420_open_data[][3] = { {} }; -static unsigned char qtable_creative_pccam[2][64] = { +static const __u8 qtable_creative_pccam[2][64] = { { /* Q-table Y-components */ 0x05, 0x03, 0x03, 0x05, 0x07, 0x0c, 0x0f, 0x12, 0x04, 0x04, 0x04, 0x06, 0x08, 0x11, 0x12, 0x11, @@ -429,7 +461,7 @@ static unsigned char qtable_creative_pccam[2][64] = { * except for one byte. Possibly a typo? * NWG: 18/05/2003. */ -static unsigned char qtable_spca504_default[2][64] = { +static const __u8 qtable_spca504_default[2][64] = { { /* Q-table Y-components */ 0x05, 0x03, 0x03, 0x05, 0x07, 0x0c, 0x0f, 0x12, 0x04, 0x04, 0x04, 0x06, 0x08, 0x11, 0x12, 0x11, @@ -487,7 +519,7 @@ static int reg_write(struct usb_device *dev, ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), req, - USB_TYPE_VENDOR | USB_RECIP_DEVICE, + USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, value, index, NULL, 0, 500); PDEBUG(D_PACK, "reg write: 0x%02x,0x%02x:0x%02x, 0x%x", req, index, value, ret); @@ -543,7 +575,7 @@ static int reg_read(struct usb_device *dev, } static int write_vector(struct gspca_dev *gspca_dev, - __u16 data[][3]) + const __u16 data[][3]) { struct usb_device *dev = gspca_dev->dev; int ret, i = 0; @@ -565,7 +597,7 @@ static int spca50x_setup_qtable(struct gspca_dev *gspca_dev, unsigned int request, unsigned int ybase, unsigned int cbase, - unsigned char qtable[2][64]) + const __u8 qtable[2][64]) { struct usb_device *dev = gspca_dev->dev; int i, err; @@ -686,7 +718,7 @@ static void spca504B_SetSizeType(struct gspca_dev *gspca_dev) __u8 Type; int rc; - Size = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode; + Size = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; Type = 0; switch (sd->bridge) { case BRIDGE_SPCA533: @@ -1273,7 +1305,7 @@ static void sd_close(struct gspca_dev *gspca_dev) static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, /* target */ - unsigned char *data, /* isoc packet */ + __u8 *data, /* isoc packet */ int len) /* iso packet length */ { struct sd *sd = (struct sd *) gspca_dev; @@ -1561,7 +1593,7 @@ static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val) } /* sub-driver description */ -static struct sd_desc sd_desc = { +static const struct sd_desc sd_desc = { .name = MODULE_NAME, .ctrls = sd_ctrls, .nctrls = ARRAY_SIZE(sd_ctrls), @@ -1576,7 +1608,7 @@ static struct sd_desc sd_desc = { /* -- module initialisation -- */ #define DVNM(name) .driver_info = (kernel_ulong_t) name -static __devinitdata struct usb_device_id device_table[] = { +static const __devinitdata struct usb_device_id device_table[] = { {USB_DEVICE(0x041e, 0x400b), DVNM("Creative PC-CAM 600")}, {USB_DEVICE(0x041e, 0x4012), DVNM("PC-Cam350")}, {USB_DEVICE(0x041e, 0x4013), DVNM("Creative Pccam750")}, diff --git a/linux/drivers/media/video/gspca/t613.c b/linux/drivers/media/video/gspca/t613.c index 6393b96fd..78ee480e2 100644 --- a/linux/drivers/media/video/gspca/t613.c +++ b/linux/drivers/media/video/gspca/t613.c @@ -26,13 +26,8 @@ #define MODULE_NAME "t613" #include "gspca.h" -#define DRIVER_VERSION_NUMBER KERNEL_VERSION(2, 1, 0) -static const char version[] = "2.1.0"; - -struct control_menu_info { - int value; - char name[32]; -}; +#define DRIVER_VERSION_NUMBER KERNEL_VERSION(2, 1, 5) +static const char version[] = "2.1.5"; #define MAX_GAMMA 0x10 /* 0 to 15 */ @@ -227,32 +222,49 @@ static struct ctrl sd_ctrls[] = { }, }; -static struct control_menu_info effects_control[] = { - {0, "Normal"}, - {1, "Emboss"}, /* disabled */ - {2, "Monochrome"}, - {3, "Sepia"}, - {4, "Sketch"}, - {5, "Sun Effect"}, /* disabled */ - {6, "Negative"}, +static char *effects_control[] = { + "Normal", + "Emboss", /* disabled */ + "Monochrome", + "Sepia", + "Sketch", + "Sun Effect", /* disabled */ + "Negative", }; -#define NUM_EFFECTS_CONTROL \ - (sizeof(effects_control)/sizeof(effects_control[0])) - -static struct cam_mode vga_mode_t16[] = { - {V4L2_PIX_FMT_JPEG, 160, 120, 4}, - {V4L2_PIX_FMT_JPEG, 176, 144, 3}, - {V4L2_PIX_FMT_JPEG, 320, 240, 2}, - {V4L2_PIX_FMT_JPEG, 352, 288, 1}, - {V4L2_PIX_FMT_JPEG, 640, 480, 0}, +static struct v4l2_pix_format vga_mode_t16[] = { + {160, 120, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 160, + .sizeimage = 160 * 120 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 4}, + {176, 144, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 176, + .sizeimage = 176 * 144 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 3}, + {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 320, + .sizeimage = 320 * 240 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 2}, + {352, 288, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 352, + .sizeimage = 352 * 288 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 1}, + {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 640, + .sizeimage = 640 * 480 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 0}, }; #define T16_OFFSET_DATA 631 #define MAX_EFFECTS 7 /* easily done by soft, this table could be removed, * i keep it here just in case */ -unsigned char effects_table[MAX_EFFECTS][6] = { +static const __u8 effects_table[MAX_EFFECTS][6] = { {0xa8, 0xe8, 0xc6, 0xd2, 0xc0, 0x00}, /* Normal */ {0xa8, 0xc8, 0xc6, 0x52, 0xc0, 0x04}, /* Repujar */ {0xa8, 0xe8, 0xc6, 0xd2, 0xc0, 0x20}, /* Monochrome */ @@ -262,7 +274,7 @@ unsigned char effects_table[MAX_EFFECTS][6] = { {0xa8, 0xc8, 0xc6, 0xd2, 0xc0, 0x40}, /* Negative */ }; -unsigned char gamma_table[MAX_GAMMA][34] = { +static const __u8 gamma_table[MAX_GAMMA][34] = { {0x90, 0x00, 0x91, 0x3e, 0x92, 0x69, 0x93, 0x85, 0x94, 0x95, 0x95, 0xa1, 0x96, 0xae, 0x97, 0xb9, 0x98, 0xc2, 0x99, 0xcb, 0x9a, 0xd4, 0x9b, 0xdb, @@ -345,7 +357,7 @@ unsigned char gamma_table[MAX_GAMMA][34] = { 0xA0, 0xFF} }; -static __u8 tas5130a_sensor_init[][8] = { +static const __u8 tas5130a_sensor_init[][8] = { {0x62, 0x08, 0x63, 0x70, 0x64, 0x1d, 0x60, 0x09}, {0x62, 0x20, 0x63, 0x01, 0x64, 0x02, 0x60, 0x09}, {0x62, 0x07, 0x63, 0x03, 0x64, 0x00, 0x60, 0x09}, @@ -366,13 +378,41 @@ static void t16RegRead(struct usb_device *dev, static void t16RegWrite(struct usb_device *dev, __u16 value, - __u16 index, __u8 *buffer, __u16 length) + __u16 index, + const __u8 *buffer, __u16 len) { - usb_control_msg(dev, - usb_sndctrlpipe(dev, 0), - 0, /* request */ - USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, - value, index, buffer, length, 500); + if (buffer == NULL) { + usb_control_msg(dev, + usb_sndctrlpipe(dev, 0), + 0, + USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, + value, index, + NULL, 0, 500); + return; + } + if (len < 16) { + __u8 tmpbuf[16]; + + memcpy(tmpbuf, buffer, len); + usb_control_msg(dev, + usb_sndctrlpipe(dev, 0), + 0, + USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, + value, index, + tmpbuf, len, 500); + } else { + __u8 *tmpbuf; + + tmpbuf = kmalloc(len, GFP_KERNEL); + memcpy(tmpbuf, buffer, len); + usb_control_msg(dev, + usb_sndctrlpipe(dev, 0), + 0, + USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, + value, index, + tmpbuf, len, 500); + kfree(tmpbuf); + } } /* this function is called at probe time */ @@ -425,18 +465,18 @@ static int init_default_parameters(struct gspca_dev *gspca_dev) int i = 0; __u8 test_byte; - static unsigned char read_indexs[] = + static const __u8 read_indexs[] = { 0x06, 0x07, 0x0a, 0x0b, 0x66, 0x80, 0x81, 0x8e, 0x8f, 0xa5, 0xa6, 0xa8, 0xbb, 0xbc, 0xc6, 0x00, 0x00 }; - static unsigned char n1[6] = + static const __u8 n1[6] = {0x08, 0x03, 0x09, 0x03, 0x12, 0x04}; - static unsigned char n2[2] = + static const __u8 n2[2] = {0x08, 0x00}; - static unsigned char nset[6] = + static const __u8 nset[6] = { 0x61, 0x68, 0x62, 0xff, 0x60, 0x07 }; - static unsigned char n3[6] = + static const __u8 n3[6] = {0x61, 0x68, 0x65, 0x0a, 0x60, 0x04}; - static unsigned char n4[0x46] = + static const __u8 n4[0x46] = {0x09, 0x01, 0x12, 0x04, 0x66, 0x8a, 0x80, 0x3c, 0x81, 0x22, 0x84, 0x50, 0x8a, 0x78, 0x8b, 0x68, 0x8c, 0x88, 0x8e, 0x33, 0x8f, 0x24, 0xaa, 0xb1, @@ -447,7 +487,7 @@ static int init_default_parameters(struct gspca_dev *gspca_dev) 0x87, 0x40, 0x89, 0x2b, 0x8d, 0xff, 0x83, 0x40, 0xac, 0x84, 0xad, 0x86, 0xaf, 0x46}; #if 0 - static unsigned char nset1[50] = { + static const __u8 nset1[50] = { 0x80, 0x3c, 0x81, 0x68, 0x83, 0xa0, 0x84, 0x20, 0x8a, 0x5c, 0x8b, 0x4c, 0x8c, 0x88, 0x8e, 0xb4, 0x8f, 0x24, 0xa1, 0xb1, 0xa2, 0x30, 0xa5, 0x18, 0xa6, 0x4a, @@ -457,40 +497,40 @@ static int init_default_parameters(struct gspca_dev *gspca_dev) 0xc6, 0xd2 }; #endif - static unsigned char nset4[18] = { + static const __u8 nset4[18] = { 0xe0, 0x60, 0xe1, 0xa8, 0xe2, 0xe0, 0xe3, 0x60, 0xe4, 0xa8, 0xe5, 0xe0, 0xe6, 0x60, 0xe7, 0xa8, 0xe8, 0xe0 }; /* ojo puede ser 0xe6 en vez de 0xe9 */ - static unsigned char nset2[20] = { + static const __u8 nset2[20] = { 0xd0, 0xbb, 0xd1, 0x28, 0xd2, 0x10, 0xd3, 0x10, 0xd4, 0xbb, 0xd5, 0x28, 0xd6, 0x1e, 0xd7, 0x27, 0xd8, 0xc8, 0xd9, 0xfc }; - static unsigned char missing[8] = + static const __u8 missing[8] = { 0x87, 0x20, 0x88, 0x20, 0x89, 0x20, 0x80, 0x38 }; - static unsigned char nset3[18] = { + static const __u8 nset3[18] = { 0xc7, 0x60, 0xc8, 0xa8, 0xc9, 0xe0, 0xca, 0x60, 0xcb, 0xa8, 0xcc, 0xe0, 0xcd, 0x60, 0xce, 0xa8, 0xcf, 0xe0 }; - static unsigned char nset5[4] = + static const __u8 nset5[4] = { 0x8f, 0x24, 0xc3, 0x00 }; /* bright */ - static unsigned char nset6[34] = { + static const __u8 nset6[34] = { 0x90, 0x00, 0x91, 0x1c, 0x92, 0x30, 0x93, 0x43, 0x94, 0x54, 0x95, 0x65, 0x96, 0x75, 0x97, 0x84, 0x98, 0x93, 0x99, 0xa1, 0x9a, 0xb0, 0x9b, 0xbd, 0x9c, 0xca, 0x9d, 0xd8, 0x9e, 0xe5, 0x9f, 0xf2, 0xa0, 0xff }; /* Gamma */ - static unsigned char nset7[4] = + static const __u8 nset7[4] = { 0x66, 0xca, 0xa8, 0xf8 }; /* 50/60 Hz */ - static unsigned char nset9[4] = + static const __u8 nset9[4] = { 0x0b, 0x04, 0x0a, 0x78 }; - static unsigned char nset8[6] = + static const __u8 nset8[6] = { 0xa8, 0xf0, 0xc6, 0x88, 0xc0, 0x00 }; - static unsigned char nset10[6] = + static const __u8 nset10[6] = { 0x0c, 0x03, 0xab, 0x10, 0x81, 0x20 }; t16RegWrite(dev, 0x01, 0x0000, n1, 0x06); @@ -508,31 +548,31 @@ static int init_default_parameters(struct gspca_dev *gspca_dev) t16RegWrite(dev, 0x01, 0x0000, n3, 0x06); t16RegWrite(dev, 0x01, 0x0000, n4, 0x46); t16RegRead(dev, 0x0080, &test_byte, 1); - t16RegWrite(dev, 0x00, 0x2c80, 0x00, 0x0); + t16RegWrite(dev, 0x00, 0x2c80, NULL, 0); t16RegWrite(dev, 0x01, 0x0000, nset2, 0x14); t16RegWrite(dev, 0x01, 0x0000, nset3, 0x12); t16RegWrite(dev, 0x01, 0x0000, nset4, 0x12); - t16RegWrite(dev, 0x00, 0x3880, 0x00, 0x0); - t16RegWrite(dev, 0x00, 0x3880, 0x00, 0x0); - t16RegWrite(dev, 0x00, 0x338e, 0x00, 0x0); - t16RegWrite(dev, 0x01, 00, nset5, 0x04); - t16RegWrite(dev, 0x00, 0x00a9, 0x00, 0x0); - t16RegWrite(dev, 0x01, 00, nset6, 0x22); - t16RegWrite(dev, 0x00, 0x86bb, 0x00, 0x0); - t16RegWrite(dev, 0x00, 0x4aa6, 0x00, 0x0); - - t16RegWrite(dev, 0x01, 00, missing, 0x08); - - t16RegWrite(dev, 0x00, 0x2087, 0x00, 0x0); - t16RegWrite(dev, 0x00, 0x2088, 0x00, 0x0); - t16RegWrite(dev, 0x00, 0x2089, 0x00, 0x0); - - t16RegWrite(dev, 0x01, 00, nset7, 0x4); - t16RegWrite(dev, 0x01, 00, nset10, 0x06); - t16RegWrite(dev, 0x01, 00, nset8, 0x06); - t16RegWrite(dev, 0x01, 00, nset9, 0x04); - - t16RegWrite(dev, 0x00, 0x2880, 0x00, 0x0); + t16RegWrite(dev, 0x00, 0x3880, NULL, 0); + t16RegWrite(dev, 0x00, 0x3880, NULL, 0); + t16RegWrite(dev, 0x00, 0x338e, NULL, 0); + t16RegWrite(dev, 0x01, 0x0000, nset5, 0x04); + t16RegWrite(dev, 0x00, 0x00a9, NULL, 0); + t16RegWrite(dev, 0x01, 0x0000, nset6, 0x22); + t16RegWrite(dev, 0x00, 0x86bb, NULL, 0); + t16RegWrite(dev, 0x00, 0x4aa6, NULL, 0); + + t16RegWrite(dev, 0x01, 0x0000, missing, 0x08); + + t16RegWrite(dev, 0x00, 0x2087, NULL, 0); + t16RegWrite(dev, 0x00, 0x2088, NULL, 0); + t16RegWrite(dev, 0x00, 0x2089, NULL, 0); + + t16RegWrite(dev, 0x01, 0x0000, nset7, 0x04); + t16RegWrite(dev, 0x01, 0x0000, nset10, 0x06); + t16RegWrite(dev, 0x01, 0x0000, nset8, 0x06); + t16RegWrite(dev, 0x01, 0x0000, nset9, 0x04); + + t16RegWrite(dev, 0x00, 0x2880, NULL, 0); t16RegWrite(dev, 0x01, 0x0000, nset2, 0x14); t16RegWrite(dev, 0x01, 0x0000, nset3, 0x12); t16RegWrite(dev, 0x01, 0x0000, nset4, 0x12); @@ -545,7 +585,7 @@ static void setbrightness(struct gspca_dev *gspca_dev) struct sd *sd = (struct sd *) gspca_dev; struct usb_device *dev = gspca_dev->dev; unsigned int brightness; - unsigned char set6[4] = { 0x8f, 0x26, 0xc3, 0x80 }; + __u8 set6[4] = { 0x8f, 0x26, 0xc3, 0x80 }; brightness = sd->brightness; if (brightness < 7) { @@ -563,7 +603,7 @@ static void setflip(struct gspca_dev *gspca_dev) struct sd *sd = (struct sd *) gspca_dev; struct usb_device *dev = gspca_dev->dev; - unsigned char flipcmd[8] = + __u8 flipcmd[8] = { 0x62, 0x07, 0x63, 0x03, 0x64, 0x00, 0x60, 0x09 }; if (sd->mirror == 1) @@ -585,9 +625,9 @@ static void seteffect(struct gspca_dev *gspca_dev) } if (sd->effect == 1 || sd->effect == 4) - t16RegWrite(dev, 0x00, 0x4aa6, 0x00, 0x00); + t16RegWrite(dev, 0x00, 0x4aa6, NULL, 0); else - t16RegWrite(dev, 0x00, 0xfaa6, 0x00, 0x00); + t16RegWrite(dev, 0x00, 0xfaa6, NULL, 0); } static void setwhitebalance(struct gspca_dev *gspca_dev) @@ -595,7 +635,7 @@ static void setwhitebalance(struct gspca_dev *gspca_dev) struct sd *sd = (struct sd *) gspca_dev; struct usb_device *dev = gspca_dev->dev; - unsigned char white_balance[8] = + __u8 white_balance[8] = { 0x87, 0x20, 0x88, 0x20, 0x89, 0x20, 0x80, 0x38 }; if (sd->whitebalance == 1) @@ -628,18 +668,17 @@ static void setcontrast(struct gspca_dev *gspca_dev) else reg_to_write = (0x00a9 + ((contrast - 7) * 0x200)); - t16RegWrite(dev, 0x00, reg_to_write, 0x00, 0); - + t16RegWrite(dev, 0x00, reg_to_write, NULL, 0); } static void setcolors(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; struct usb_device *dev = gspca_dev->dev; - __u16 reg_to_write = 0x00; + __u16 reg_to_write; reg_to_write = 0xc0bb + sd->colors * 0x100; - t16RegWrite(dev, 0x00, reg_to_write, 0x00, 0); + t16RegWrite(dev, 0x00, reg_to_write, NULL, 0); } static void setgamma(struct gspca_dev *gspca_dev) @@ -658,11 +697,11 @@ static void setsharpness(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; struct usb_device *dev = gspca_dev->dev; - __u16 reg_to_write = 0x00; + __u16 reg_to_write; reg_to_write = 0x0aa6 + 0x1000 * sd->sharpness; - t16RegWrite(dev, 0x00, reg_to_write, 0x00, 0x00); + t16RegWrite(dev, 0x00, reg_to_write, NULL, 0); } static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) @@ -678,6 +717,7 @@ static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val) static int sd_getbrightness(struct gspca_dev *gspca_dev, __s32 *val) { struct sd *sd = (struct sd *) gspca_dev; + *val = sd->brightness; return *val; } @@ -700,7 +740,6 @@ static int sd_getwhitebalance(struct gspca_dev *gspca_dev, __s32 *val) return *val; } - static int sd_setflip(struct gspca_dev *gspca_dev, __s32 val) { struct sd *sd = (struct sd *) gspca_dev; @@ -834,9 +873,9 @@ static int sd_setlowlight(struct gspca_dev *gspca_dev, __s32 val) sd->autogain = val; if (val != 0) - t16RegWrite(dev, 0x00, 0xf48e, 0x00, 0); + t16RegWrite(dev, 0x00, 0xf48e, NULL, 0); else - t16RegWrite(dev, 0x00, 0xb48e, 0x00, 0); + t16RegWrite(dev, 0x00, 0xb48e, NULL, 0); return 0; } @@ -854,14 +893,14 @@ static void sd_start(struct gspca_dev *gspca_dev) int mode; __u8 test_byte; - static __u8 t1[] = { 0x66, 0x00, 0xa8, 0xe8 }; + static const __u8 t1[] = { 0x66, 0x00, 0xa8, 0xe8 }; __u8 t2[] = { 0x07, 0x00, 0x0d, 0x60, 0x0e, 0x80 }; - static __u8 t3[] = + static const __u8 t3[] = { 0xb3, 0x07, 0xb4, 0x00, 0xb5, 0x88, 0xb6, 0x02, 0xb7, 0x06, 0xb8, 0x00, 0xb9, 0xe7, 0xba, 0x01 }; - static __u8 t4[] = { 0x0b, 0x04, 0x0a, 0x40 }; + static const __u8 t4[] = { 0x0b, 0x04, 0x0a, 0x40 }; - mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode]. mode; + mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode]. priv; switch (mode) { case 1: /* 352x288 */ t2[1] = 0x40; @@ -883,16 +922,16 @@ static void sd_start(struct gspca_dev *gspca_dev) t16RegWrite(dev, 0x01, 0x0000, tas5130a_sensor_init[1], 0x8); t16RegWrite(dev, 0x01, 0x0000, tas5130a_sensor_init[2], 0x8); t16RegWrite(dev, 0x01, 0x0000, tas5130a_sensor_init[3], 0x8); - t16RegWrite(dev, 0x00, 0x3c80, 0x00, 0x00); + t16RegWrite(dev, 0x00, 0x3c80, NULL, 0); /* just in case and to keep sync with logs (for mine) */ t16RegWrite(dev, 0x01, 0x0000, tas5130a_sensor_init[3], 0x8); - t16RegWrite(dev, 0x00, 0x3c80, 0x00, 0x00); + t16RegWrite(dev, 0x00, 0x3c80, NULL, 0); /* just in case and to keep sync with logs (for mine) */ t16RegWrite(dev, 0x01, 0x0000, t1, 4); t16RegWrite(dev, 0x01, 0x0000, t2, 6); - t16RegRead(dev, 0x0012, &test_byte, 0x1); + t16RegRead(dev, 0x0012, &test_byte, 0x01); t16RegWrite(dev, 0x01, 0x0000, t3, 0x10); - t16RegWrite(dev, 0x00, 0x0013, 0x00, 0x00); + t16RegWrite(dev, 0x00, 0x0013, NULL, 0); t16RegWrite(dev, 0x01, 0x0000, t4, 0x4); /* restart on each start, just in case, sometimes regs goes wrong * when using controls from app */ @@ -919,11 +958,11 @@ static void sd_close(struct gspca_dev *gspca_dev) static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, /* target */ - unsigned char *data, /* isoc packet */ + __u8 *data, /* isoc packet */ int len) /* iso packet length */ { int sof = 0; - static unsigned char ffd9[] = { 0xff, 0xd9 }; + static __u8 ffd9[] = { 0xff, 0xd9 }; if (data[0] == 0x5a) { /* Control Packet, after this came the header again, @@ -962,27 +1001,26 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, static int sd_querymenu(struct gspca_dev *gspca_dev, struct v4l2_querymenu *menu) { - memset(menu->name, 0, sizeof menu->name); - switch (menu->id) { case V4L2_CID_POWER_LINE_FREQUENCY: switch (menu->index) { case 1: /* V4L2_CID_POWER_LINE_FREQUENCY_50HZ */ - strcpy(menu->name, "50 Hz"); + strcpy((char *) menu->name, "50 Hz"); return 0; case 2: /* V4L2_CID_POWER_LINE_FREQUENCY_60HZ */ - strcpy(menu->name, "60 Hz"); + strcpy((char *) menu->name, "60 Hz"); return 0; } break; case V4L2_CID_EFFECTS: - if (menu->index < 0 || menu->index >= NUM_EFFECTS_CONTROL) - return -EINVAL; - strncpy((char *) menu->name, - effects_control[menu->index].name, 32); + if ((unsigned) menu->index < ARRAY_SIZE(effects_control)) { + strncpy((char *) menu->name, + effects_control[menu->index], 32); + return 0; + } break; } - return 0; + return -EINVAL; } /* this function is called at open time */ @@ -993,7 +1031,7 @@ static int sd_open(struct gspca_dev *gspca_dev) } /* sub-driver description */ -static struct sd_desc sd_desc = { +static const struct sd_desc sd_desc = { .name = MODULE_NAME, .ctrls = sd_ctrls, .nctrls = ARRAY_SIZE(sd_ctrls), @@ -1009,11 +1047,10 @@ static struct sd_desc sd_desc = { /* -- module initialisation -- */ #define DVNM(name) .driver_info = (kernel_ulong_t) name -static __devinitdata struct usb_device_id device_table[] = { +static const __devinitdata struct usb_device_id device_table[] = { {USB_DEVICE(0x17a1, 0x0128), DVNM("XPX Webcam")}, {} }; - MODULE_DEVICE_TABLE(usb, device_table); /* -- device connect -- */ diff --git a/linux/drivers/media/video/gspca/tv8532.c b/linux/drivers/media/video/gspca/tv8532.c index 9af2a51bb..b9837841c 100644 --- a/linux/drivers/media/video/gspca/tv8532.c +++ b/linux/drivers/media/video/gspca/tv8532.c @@ -22,8 +22,8 @@ #include "gspca.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, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>"); MODULE_DESCRIPTION("TV8532 USB Camera Driver"); @@ -81,9 +81,17 @@ static struct ctrl sd_ctrls[] = { }, }; -static struct cam_mode sif_mode[] = { - {V4L2_PIX_FMT_SBGGR8, 176, 144, 1}, - {V4L2_PIX_FMT_SBGGR8, 352, 288, 0}, +static struct v4l2_pix_format sif_mode[] = { + {176, 144, V4L2_PIX_FMT_SBGGR8, V4L2_FIELD_NONE, + .bytesperline = 176, + .sizeimage = 176 * 144, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 1}, + {352, 288, V4L2_PIX_FMT_SBGGR8, V4L2_FIELD_NONE, + .bytesperline = 352, + .sizeimage = 352 * 288, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 0}, }; /* @@ -152,7 +160,7 @@ static struct cam_mode sif_mode[] = { #define TV8532_AD_ROWBEGIN_L 0x14 #define TV8532_AD_ROWBEGIN_H 0x15 -static __u32 tv_8532_eeprom_data[] = { +static const __u32 tv_8532_eeprom_data[] = { /* add dataL dataM dataH */ 0x00010001, 0x01018011, 0x02050014, 0x0305001c, 0x040d001e, 0x0505001f, 0x06050519, 0x0705011b, @@ -192,8 +200,7 @@ static void tv_8532WriteEEprom(struct gspca_dev *gspca_dev) datacmd = 0xb0;; reg_w(dev, TV8532_GPIO, &datacmd, 1); datacmd = TV8532_CMD_EEprom_Open; - reg_w(dev, TV8532_CTRL, &datacmd, - 1); + reg_w(dev, TV8532_CTRL, &datacmd, 1); /* msleep(1); */ while (tv_8532_eeprom_data[i]) { reg = (tv_8532_eeprom_data[i] & 0xff000000) >> 24; @@ -244,7 +251,7 @@ static int sd_config(struct gspca_dev *gspca_dev, static void tv_8532ReadRegisters(struct gspca_dev *gspca_dev) { struct usb_device *dev = gspca_dev->dev; - __u8 data = 0; + __u8 data; /* __u16 vid, pid; */ reg_r(dev, 0x0001, &data); @@ -276,7 +283,7 @@ static void tv_8532ReadRegisters(struct gspca_dev *gspca_dev) static void tv_8532_setReg(struct gspca_dev *gspca_dev) { struct usb_device *dev = gspca_dev->dev; - __u8 data = 0; + __u8 data; __u8 value[2] = { 0, 0 }; data = ADCBEGINL; @@ -321,7 +328,7 @@ static void tv_8532_setReg(struct gspca_dev *gspca_dev) static void tv_8532_PollReg(struct gspca_dev *gspca_dev) { struct usb_device *dev = gspca_dev->dev; - __u8 data = 0; + __u8 data; int i; /* strange polling from tgc */ @@ -339,9 +346,9 @@ static void tv_8532_PollReg(struct gspca_dev *gspca_dev) static int sd_open(struct gspca_dev *gspca_dev) { struct usb_device *dev = gspca_dev->dev; - __u8 data = 0; - __u8 dataStart = 0; - __u8 value[2] = { 0, 0 }; + __u8 data; + __u8 dataStart; + __u8 value[2]; data = 0x32; reg_w(dev, TV8532_AD_SLOPE, &data, 1); @@ -390,8 +397,7 @@ static int sd_open(struct gspca_dev *gspca_dev) tv_8532_setReg(gspca_dev); /*************************************************/ data = 0x0b; - reg_w(dev, TV8532_GPIO_OE, &data, - 1); + reg_w(dev, TV8532_GPIO_OE, &data, 1); /*************************************************/ tv_8532_setReg(gspca_dev); /*************************************************/ @@ -417,8 +423,7 @@ static void setbrightness(struct gspca_dev *gspca_dev) static void sd_start(struct gspca_dev *gspca_dev) { struct usb_device *dev = gspca_dev->dev; - __u8 data = 0; - __u8 dataStart = 0; + __u8 data; __u8 value[2]; data = 0x32; @@ -443,7 +448,7 @@ static void sd_start(struct gspca_dev *gspca_dev) /************************************************/ data = TESTCOMP; /* 0x72 compressed mode */ reg_w(dev, TV8532_QUANT_COMP, &data, 1); /* 0x28 */ - if (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode) { + if (gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv) { /* 176x144 */ data = QCIFLINE; /* 0x84; // CIF | 4 packet */ reg_w(dev, TV8532_MODE_PACKET, &data, 1); /* 0x29 */ @@ -459,8 +464,8 @@ static void sd_start(struct gspca_dev *gspca_dev) reg_w(dev, TV8532_POINT_L, &data, 1); /* 0x2d */ data = TESTPTH; /* 0x04; */ reg_w(dev, TV8532_POINT_H, &data, 1); /* 0x2e */ - dataStart = TESTPTBL; /* 0x04; */ - reg_w(dev, TV8532_POINTB_L, &dataStart, 1); /* 0x2f */ + data = TESTPTBL; /* 0x04; */ + reg_w(dev, TV8532_POINTB_L, &data, 1); /* 0x2f */ data = TESTPTBH; /* 0x04; */ reg_w(dev, TV8532_POINTB_H, &data, 1); /* 0x30 */ data = TV8532_CMD_UPDATE; @@ -611,7 +616,7 @@ static void sd_pkt_scan(struct gspca_dev *gspca_dev, static void setcontrast(struct gspca_dev *gspca_dev) { #if 0 - __u8 value[2] = { 0xfc, 0x01 }; + __u8 value[2]; __u8 data; value[0] = (gspca_dev->contrast) & 0xff; @@ -662,7 +667,7 @@ static int sd_getcontrast(struct gspca_dev *gspca_dev, __s32 *val) } /* sub-driver description */ -static struct sd_desc sd_desc = { +static const struct sd_desc sd_desc = { .name = MODULE_NAME, .ctrls = sd_ctrls, .nctrls = ARRAY_SIZE(sd_ctrls), @@ -677,7 +682,7 @@ static struct sd_desc sd_desc = { /* -- module initialisation -- */ #define DVNM(name) .driver_info = (kernel_ulong_t) name -static __devinitdata struct usb_device_id device_table[] = { +static const __devinitdata struct usb_device_id device_table[] = { {USB_DEVICE(0x046d, 0x0920), DVNM("QC Express")}, {USB_DEVICE(0x046d, 0x0921), DVNM("Labtec Webcam")}, {USB_DEVICE(0x0545, 0x808b), DVNM("Veo Stingray")}, diff --git a/linux/drivers/media/video/gspca/vc032x.c b/linux/drivers/media/video/gspca/vc032x.c index 762869ff7..ad46273cd 100644 --- a/linux/drivers/media/video/gspca/vc032x.c +++ b/linux/drivers/media/video/gspca/vc032x.c @@ -24,8 +24,8 @@ #include "gspca.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, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>"); MODULE_DESCRIPTION("GSPCA/VC032X USB Camera Driver"); @@ -88,25 +88,41 @@ static struct ctrl sd_ctrls[] = { }, }; -static struct cam_mode vc0321_mode[] = { - {V4L2_PIX_FMT_YUYV, 320, 240, 1}, - {V4L2_PIX_FMT_YUYV, 640, 480, 0}, +static struct v4l2_pix_format vc0321_mode[] = { + {320, 240, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, + .bytesperline = 320 * 2, + .sizeimage = 320 * 240 * 2, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 1}, + {640, 480, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, + .bytesperline = 640 * 2, + .sizeimage = 640 * 480 * 2, + .colorspace = V4L2_COLORSPACE_SRGB, + .priv = 0}, }; -static struct cam_mode vc0323_mode[] = { - {V4L2_PIX_FMT_JPEG, 320, 240, 1}, - {V4L2_PIX_FMT_JPEG, 640, 480, 0}, +static struct v4l2_pix_format vc0323_mode[] = { + {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 320, + .sizeimage = 320 * 240 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 1}, + {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 640, + .sizeimage = 640 * 480 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 0}, }; #if 0 -static __u8 mi1310soc_gamma[17] = { +static const __u8 mi1310soc_gamma[17] = { 0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8, 0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff }; -static __u8 mi1310soc_matrix[9] = { +static const __u8 mi1310soc_matrix[9] = { 0x56, 0xf0, 0xf6, 0xf3, 0x57, 0xf6, 0xf3, 0xef, 0x58 }; #endif -static __u8 mi1310_socinitVGA_JPG[][4] = { +static const __u8 mi1310_socinitVGA_JPG[][4] = { {0xb0, 0x03, 0x19, 0xcc}, {0xb0, 0x04, 0x02, 0xcc}, {0xb3, 0x00, 0x64, 0xcc}, @@ -258,7 +274,7 @@ static __u8 mi1310_socinitVGA_JPG[][4] = { {0x03, 0x03, 0xc0, 0xbb}, {}, }; -static __u8 mi1310_socinitQVGA_JPG[][4] = { +static const __u8 mi1310_socinitQVGA_JPG[][4] = { {0xb0, 0x03, 0x19, 0xcc}, {0xb0, 0x04, 0x02, 0xcc}, {0xb3, 0x00, 0x64, 0xcc}, {0xb3, 0x00, 0x65, 0xcc}, {0xb3, 0x05, 0x00, 0xcc}, {0xb3, 0x06, 0x00, 0xcc}, @@ -332,14 +348,14 @@ static __u8 mi1310_socinitQVGA_JPG[][4] = { {}, }; -static __u8 mi1320_gamma[17] = { +static const __u8 mi1320_gamma[17] = { 0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8, 0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff }; -static __u8 mi1320_matrix[9] = { +static const __u8 mi1320_matrix[9] = { 0x54, 0xda, 0x06, 0xf1, 0x50, 0xf4, 0xf7, 0xea, 0x52 }; -static __u8 mi1320_initVGA_data[][4] = { +static const __u8 mi1320_initVGA_data[][4] = { {0xb3, 0x01, 0x01, 0xcc}, {0x00, 0x00, 0x33, 0xdd}, {0xb0, 0x03, 0x19, 0xcc}, {0x00, 0x00, 0x33, 0xdd}, {0xb0, 0x04, 0x02, 0xcc}, {0x00, 0x00, 0x33, 0xdd}, @@ -418,7 +434,7 @@ static __u8 mi1320_initVGA_data[][4] = { {0xb3, 0x5c, 0x01, 0xcc}, {0xb3, 0x01, 0x41, 0xcc}, {} }; -static __u8 mi1320_initQVGA_data[][4] = { +static const __u8 mi1320_initQVGA_data[][4] = { {0xb3, 0x01, 0x01, 0xcc}, {0x00, 0x00, 0x33, 0xdd}, {0xb0, 0x03, 0x19, 0xcc}, {0x00, 0x00, 0x33, 0xdd}, {0xb0, 0x04, 0x02, 0xcc}, {0x00, 0x00, 0x33, 0xdd}, @@ -487,15 +503,15 @@ static __u8 mi1320_initQVGA_data[][4] = { {} }; -static __u8 po3130_gamma[17] = { +static const __u8 po3130_gamma[17] = { 0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8, 0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff }; -static __u8 po3130_matrix[9] = { +static const __u8 po3130_matrix[9] = { 0x5f, 0xec, 0xf5, 0xf1, 0x5a, 0xf5, 0xf1, 0xec, 0x63 }; -static __u8 po3130_initVGA_data[][4] = { +static const __u8 po3130_initVGA_data[][4] = { {0xb0, 0x4d, 0x00, 0xcc}, {0xb3, 0x01, 0x01, 0xcc}, {0x00, 0x00, 0x50, 0xdd}, {0xb0, 0x03, 0x01, 0xcc}, {0xb3, 0x00, 0x04, 0xcc}, {0xb3, 0x00, 0x24, 0xcc}, @@ -578,7 +594,7 @@ static __u8 po3130_initVGA_data[][4] = { {0xb3, 0x5c, 0x00, 0xcc}, {0xb3, 0x01, 0x41, 0xcc}, {} }; -static __u8 po3130_rundata[][4] = { +static const __u8 po3130_rundata[][4] = { {0x00, 0x47, 0x45, 0xaa}, {0x00, 0x48, 0x9b, 0xaa}, {0x00, 0x49, 0x3a, 0xaa}, {0x00, 0x4a, 0x01, 0xaa}, {0x00, 0x44, 0x40, 0xaa}, @@ -593,7 +609,7 @@ static __u8 po3130_rundata[][4] = { {} }; -static __u8 po3130_initQVGA_data[][4] = { +static const __u8 po3130_initQVGA_data[][4] = { {0xb0, 0x4d, 0x00, 0xcc}, {0xb3, 0x01, 0x01, 0xcc}, {0x00, 0x00, 0x50, 0xdd}, {0xb0, 0x03, 0x09, 0xcc}, {0xb3, 0x00, 0x04, 0xcc}, {0xb3, 0x00, 0x24, 0xcc}, @@ -679,16 +695,16 @@ static __u8 po3130_initQVGA_data[][4] = { {} }; -static __u8 hv7131r_gamma[17] = { +static const __u8 hv7131r_gamma[17] = { /* 0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8, * 0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff */ 0x04, 0x1a, 0x36, 0x55, 0x6f, 0x87, 0x9d, 0xb0, 0xc1, 0xcf, 0xda, 0xe4, 0xec, 0xf3, 0xf8, 0xfd, 0xff }; -static __u8 hv7131r_matrix[9] = { +static const __u8 hv7131r_matrix[9] = { 0x5f, 0xec, 0xf5, 0xf1, 0x5a, 0xf5, 0xf1, 0xec, 0x63 }; -static __u8 hv7131r_initVGA_data[][4] = { +static const __u8 hv7131r_initVGA_data[][4] = { {0xb0, 0x4d, 0x00, 0xcc}, {0xb3, 0x01, 0x01, 0xcc}, {0x00, 0x00, 0x50, 0xdd}, {0xb0, 0x03, 0x01, 0xcc}, {0xb3, 0x00, 0x24, 0xcc}, @@ -731,7 +747,7 @@ static __u8 hv7131r_initVGA_data[][4] = { {} }; -static __u8 hv7131r_initQVGA_data[][4] = { +static const __u8 hv7131r_initQVGA_data[][4] = { {0xb0, 0x4d, 0x00, 0xcc}, {0xb3, 0x01, 0x01, 0xcc}, {0x00, 0x00, 0x50, 0xdd}, {0xb0, 0x03, 0x01, 0xcc}, {0xb3, 0x00, 0x24, 0xcc}, @@ -786,14 +802,14 @@ static __u8 hv7131r_initQVGA_data[][4] = { {} }; -static __u8 ov7660_gamma[17] = { +static const __u8 ov7660_gamma[17] = { 0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8, 0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff }; -static __u8 ov7660_matrix[9] = { +static const __u8 ov7660_matrix[9] = { 0x5a, 0xf0, 0xf6, 0xf3, 0x57, 0xf6, 0xf3, 0xef, 0x62 }; -static __u8 ov7660_initVGA_data[][4] = { +static const __u8 ov7660_initVGA_data[][4] = { {0xb0, 0x4d, 0x00, 0xcc}, {0xb3, 0x01, 0x01, 0xcc}, {0x00, 0x00, 0x50, 0xdd}, {0xb0, 0x03, 0x01, 0xcc}, @@ -851,7 +867,7 @@ static __u8 ov7660_initVGA_data[][4] = { {0x00, 0x29, 0x3c, 0xaa}, {0xb3, 0x01, 0x45, 0xcc}, {} }; -static __u8 ov7660_initQVGA_data[][4] = { +static const __u8 ov7660_initQVGA_data[][4] = { {0xb0, 0x4d, 0x00, 0xcc}, {0xb3, 0x01, 0x01, 0xcc}, {0x00, 0x00, 0x50, 0xdd}, {0xb0, 0x03, 0x01, 0xcc}, {0xb3, 0x00, 0x21, 0xcc}, {0xb3, 0x00, 0x26, 0xcc}, @@ -920,26 +936,26 @@ static __u8 ov7660_initQVGA_data[][4] = { {0x00, 0x00, 0x00, 0x00} }; -static __u8 ov7660_50HZ[][4] = { +static const __u8 ov7660_50HZ[][4] = { {0x00, 0x3b, 0x08, 0xaa}, {0x00, 0x9d, 0x40, 0xaa}, {0x00, 0x13, 0xa7, 0xaa}, {0x00, 0x00, 0x00, 0x00} }; -static __u8 ov7660_60HZ[][4] = { +static const __u8 ov7660_60HZ[][4] = { {0x00, 0x3b, 0x00, 0xaa}, {0x00, 0x9e, 0x40, 0xaa}, {0x00, 0x13, 0xa7, 0xaa}, {} }; -static __u8 ov7660_NoFliker[][4] = { +static const __u8 ov7660_NoFliker[][4] = { {0x00, 0x13, 0x87, 0xaa}, {} }; -static __u8 ov7670_initVGA_JPG[][4] = { +static const __u8 ov7670_initVGA_JPG[][4] = { {0xb3, 0x01, 0x05, 0xcc}, {0x00, 0x00, 0x30, 0xdd}, {0xb0, 0x03, 0x19, 0xcc}, {0x00, 0x00, 0x10, 0xdd}, @@ -1067,7 +1083,7 @@ static __u8 ov7670_initVGA_JPG[][4] = { {}, }; -static __u8 ov7670_initQVGA_JPG[][4] = { +static const __u8 ov7670_initQVGA_JPG[][4] = { {0xb3, 0x01, 0x05, 0xcc}, {0x00, 0x00, 0x30, 0xdd}, {0xb0, 0x03, 0x19, 0xcc}, {0x00, 0x00, 0x10, 0xdd}, {0xb0, 0x04, 0x02, 0xcc}, {0x00, 0x00, 0x10, 0xdd}, @@ -1199,7 +1215,7 @@ static __u8 ov7670_initQVGA_JPG[][4] = { {}, }; #if 0 -static __u8 ov7670_initQVGA_JPG[][4] = { +static const __u8 ov7670_initQVGA_JPG[][4] = { {0xb3, 0x00, 0x00, 0xcc}, {0xb0, 0x16, 0x0d, 0xcc}, {0x00, 0x00, 0x50, 0xdd}, {0xb0, 0x16, 0x00, 0xcc}, @@ -1380,7 +1396,7 @@ struct sensor_info { __u8 op; }; -static struct sensor_info sensor_info_data[] = { +static const struct sensor_info sensor_info_data[] = { /* sensorId, I2cAdd, IdAdd, VpId, m1, m2, op */ {SENSOR_HV7131R, 0x80 | 0x11, 0x00, 0x0209, 0x24, 0x25, 0x01}, {SENSOR_OV7660, 0x80 | 0x21, 0x0a, 0x7660, 0x26, 0x26, 0x05}, @@ -1462,7 +1478,7 @@ static int vc032x_probe_sensor(struct gspca_dev *gspca_dev) int i; __u8 data; __u16 value; - struct sensor_info *ptsensor_info; + const struct sensor_info *ptsensor_info; reg_r(dev, 0xa1, 0xbfcf, &data, 1); PDEBUG(D_PROBE, "check sensor header %d", data); @@ -1489,7 +1505,7 @@ static int vc032x_probe_sensor(struct gspca_dev *gspca_dev) } static __u8 i2c_write(struct usb_device *dev, - __u8 reg, __u8 *val, __u8 size) + __u8 reg, const __u8 *val, __u8 size) { __u8 retbyte; @@ -1521,7 +1537,7 @@ static __u8 i2c_write(struct usb_device *dev, } static void put_tab_to_reg(struct gspca_dev *gspca_dev, - __u8 *tab, __u8 tabsize, __u16 addr) + const __u8 *tab, __u8 tabsize, __u16 addr) { int j; __u16 ad = addr; @@ -1531,7 +1547,7 @@ static void put_tab_to_reg(struct gspca_dev *gspca_dev, } static void usb_exchange(struct gspca_dev *gspca_dev, - __u8 data[][4]) + const __u8 data[][4]) { struct usb_device *dev = gspca_dev->dev; int i = 0; @@ -1708,7 +1724,7 @@ static void setautogain(struct gspca_dev *gspca_dev) static void setlightfreq(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; - static __u8 (*ov7660_freq_tb[3])[4] = + static const __u8 (*ov7660_freq_tb[3])[4] = {ov7660_NoFliker, ov7660_50HZ, ov7660_60HZ}; if (sd->sensor != SENSOR_OV7660) @@ -1720,8 +1736,8 @@ static void sd_start(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; /* __u8 tmp2; */ - __u8 *GammaT = NULL; - __u8 *MatrixT = NULL; + const __u8 *GammaT = NULL; + const __u8 *MatrixT = NULL; int mode; /* Assume start use the good resolution from gspca_dev->mode */ @@ -1732,7 +1748,7 @@ static void sd_start(struct gspca_dev *gspca_dev) reg_w(gspca_dev->dev, 0xa0, 0xff, 0xbfef); } - mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode; + mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; switch (sd->sensor) { case SENSOR_HV7131R: GammaT = hv7131r_gamma; @@ -1870,7 +1886,7 @@ static void sd_close(struct gspca_dev *gspca_dev) static void sd_pkt_scan(struct gspca_dev *gspca_dev, struct gspca_frame *frame, /* target */ - unsigned char *data, /* isoc packet */ + __u8 *data, /* isoc packet */ int len) /* iso pkt length */ { struct sd *sd = (struct sd *) gspca_dev; @@ -1936,13 +1952,13 @@ static int sd_querymenu(struct gspca_dev *gspca_dev, case V4L2_CID_POWER_LINE_FREQUENCY: switch (menu->index) { case 0: /* V4L2_CID_POWER_LINE_FREQUENCY_DISABLED */ - strcpy(menu->name, "NoFliker"); + strcpy((char *) menu->name, "NoFliker"); return 0; case 1: /* V4L2_CID_POWER_LINE_FREQUENCY_50HZ */ - strcpy(menu->name, "50 Hz"); + strcpy((char *) menu->name, "50 Hz"); return 0; case 2: /* V4L2_CID_POWER_LINE_FREQUENCY_60HZ */ - strcpy(menu->name, "60 Hz"); + strcpy((char *) menu->name, "60 Hz"); return 0; } break; @@ -1951,7 +1967,7 @@ static int sd_querymenu(struct gspca_dev *gspca_dev, } /* sub-driver description */ -static struct sd_desc sd_desc = { +static const struct sd_desc sd_desc = { .name = MODULE_NAME, .ctrls = sd_ctrls, .nctrls = ARRAY_SIZE(sd_ctrls), @@ -1967,7 +1983,7 @@ static struct sd_desc sd_desc = { /* -- module initialisation -- */ #define DVNM(name) .driver_info = (kernel_ulong_t) name -static __devinitdata struct usb_device_id device_table[] = { +static const __devinitdata struct usb_device_id device_table[] = { {USB_DEVICE(0x046d, 0x0892), DVNM("Logitech Orbicam")}, {USB_DEVICE(0x046d, 0x0896), DVNM("Logitech Orbicam")}, {USB_DEVICE(0x0ac8, 0x0321), DVNM("Vimicro generic vc0321")}, diff --git a/linux/drivers/media/video/gspca/zc3xx.c b/linux/drivers/media/video/gspca/zc3xx.c index f8a49a493..72ae1e006 100644 --- a/linux/drivers/media/video/gspca/zc3xx.c +++ b/linux/drivers/media/video/gspca/zc3xx.c @@ -24,8 +24,8 @@ #include "gspca.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, 5) +static const char version[] = "2.1.5"; MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>, " "Serge A. Suchkov <Serge.A.S@tochka.ru>"); @@ -173,14 +173,30 @@ static struct ctrl sd_ctrls[] = { }, }; -static struct cam_mode vga_mode[] = { - {V4L2_PIX_FMT_JPEG, 320, 240, 1}, - {V4L2_PIX_FMT_JPEG, 640, 480, 0}, +static struct v4l2_pix_format vga_mode[] = { + {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 320, + .sizeimage = 320 * 240 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 1}, + {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 640, + .sizeimage = 640 * 480 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 0}, }; -static struct cam_mode sif_mode[] = { - {V4L2_PIX_FMT_JPEG, 176, 144, 1}, - {V4L2_PIX_FMT_JPEG, 352, 288, 0}, +static struct v4l2_pix_format sif_mode[] = { + {176, 144, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 176, + .sizeimage = 176 * 144 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 1}, + {352, 288, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, + .bytesperline = 352, + .sizeimage = 352 * 288 * 3 / 8 + 590, + .colorspace = V4L2_COLORSPACE_JPEG, + .priv = 0}, }; /* usb exchanges */ @@ -190,7 +206,7 @@ struct usb_action { __u16 idx; }; -static struct usb_action cs2102_Initial[] = { +static const struct usb_action cs2102_Initial[] = { {0xa1, 0x01, 0x0008}, {0xa1, 0x01, 0x0008}, {0xa0, 0x01, 0x0000}, @@ -320,7 +336,7 @@ static struct usb_action cs2102_Initial[] = { {} }; -static struct usb_action cs2102_InitialScale[] = { +static const struct usb_action cs2102_InitialScale[] = { {0xa1, 0x01, 0x0008}, {0xa1, 0x01, 0x0008}, {0xa0, 0x01, 0x0000}, @@ -449,7 +465,7 @@ static struct usb_action cs2102_InitialScale[] = { {0xa0, 0x40, 0x0118}, {} }; -static struct usb_action cs2102_50HZ[] = { +static const struct usb_action cs2102_50HZ[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0x0f, 0x008c}, /* 00,0f,8c,aa */ {0xaa, 0x03, 0x0005}, /* 00,03,05,aa */ @@ -474,7 +490,7 @@ static struct usb_action cs2102_50HZ[] = { {0xa0, 0xd0, 0x001f}, /* 00,1f,d0,cc */ {} }; -static struct usb_action cs2102_50HZScale[] = { +static const struct usb_action cs2102_50HZScale[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0x0f, 0x0093}, /* 00,0f,93,aa */ {0xaa, 0x03, 0x0005}, /* 00,03,05,aa */ @@ -499,7 +515,7 @@ static struct usb_action cs2102_50HZScale[] = { {0xa0, 0xd0, 0x001f}, /* 00,1f,d0,cc */ {} }; -static struct usb_action cs2102_60HZ[] = { +static const struct usb_action cs2102_60HZ[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0x0f, 0x005d}, /* 00,0f,5d,aa */ {0xaa, 0x03, 0x0005}, /* 00,03,05,aa */ @@ -524,7 +540,7 @@ static struct usb_action cs2102_60HZ[] = { {0xa0, 0xd0, 0x00c8}, /* 00,c8,d0,cc */ {} }; -static struct usb_action cs2102_60HZScale[] = { +static const struct usb_action cs2102_60HZScale[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0x0f, 0x00b7}, /* 00,0f,b7,aa */ {0xaa, 0x03, 0x0005}, /* 00,03,05,aa */ @@ -549,7 +565,7 @@ static struct usb_action cs2102_60HZScale[] = { {0xa0, 0xe8, 0x001f}, /* 00,1f,e8,cc */ {} }; -static struct usb_action cs2102_NoFliker[] = { +static const struct usb_action cs2102_NoFliker[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0x0f, 0x0059}, /* 00,0f,59,aa */ {0xaa, 0x03, 0x0005}, /* 00,03,05,aa */ @@ -574,7 +590,7 @@ static struct usb_action cs2102_NoFliker[] = { {0xa0, 0xc8, 0x001f}, /* 00,1f,c8,cc */ {} }; -static struct usb_action cs2102_NoFlikerScale[] = { +static const struct usb_action cs2102_NoFlikerScale[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0x0f, 0x0059}, /* 00,0f,59,aa */ {0xaa, 0x03, 0x0005}, /* 00,03,05,aa */ @@ -601,7 +617,7 @@ static struct usb_action cs2102_NoFlikerScale[] = { }; /* CS2102_KOCOM */ -static struct usb_action cs2102K_Initial[] = { +static const struct usb_action cs2102K_Initial[] = { {0xa0, 0x11, 0x0002}, {0xa0, 0x03, 0x0008}, {0xa0, 0x08, 0x0010}, @@ -860,7 +876,7 @@ static struct usb_action cs2102K_Initial[] = { {} }; -static struct usb_action cs2102K_InitialScale[] = { +static const struct usb_action cs2102K_InitialScale[] = { {0xa0, 0x11, 0x0002}, {0xa0, 0x00, 0x0002}, {0xa0, 0x03, 0x0008}, @@ -1437,7 +1453,7 @@ static struct usb_action cs2102K_InitialScale[] = { {} }; -static struct usb_action gc0305_Initial[] = { /* 640x480 */ +static const struct usb_action gc0305_Initial[] = { /* 640x480 */ {0xa0, 0x01, 0x0000}, /* 00,00,01,cc */ {0xa0, 0x03, 0x0008}, /* 00,08,03,cc */ {0xa0, 0x01, 0x0010}, /* 00,10,01,cc */ @@ -1501,7 +1517,7 @@ static struct usb_action gc0305_Initial[] = { /* 640x480 */ {0xa0, 0x03, 0x0113}, /* 01,13,03,cc */ {} }; -static struct usb_action gc0305_InitialScale[] = { /* 320x240 */ +static const struct usb_action gc0305_InitialScale[] = { /* 320x240 */ {0xa0, 0x01, 0x0000}, /* 00,00,01,cc */ {0xa0, 0x03, 0x0008}, /* 00,08,03,cc */ {0xa0, 0x01, 0x0010}, /* 00,10,01,cc */ @@ -1564,7 +1580,7 @@ static struct usb_action gc0305_InitialScale[] = { /* 320x240 */ {0xa0, 0x03, 0x0113}, /* 01,13,03,cc */ {} }; -static struct usb_action gc0305_50HZ[] = { +static const struct usb_action gc0305_50HZ[] = { {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ {0xaa, 0x83, 0x0002}, /* 00,83,02,aa */ {0xaa, 0x84, 0x0038}, /* 00,84,38,aa */ /* win: 00,84,ec */ @@ -1587,7 +1603,7 @@ static struct usb_action gc0305_50HZ[] = { /* {0xa0, 0x85, 0x018d}, * 01,8d,85,cc * * if 640x480 */ {} }; -static struct usb_action gc0305_60HZ[] = { +static const struct usb_action gc0305_60HZ[] = { {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */ {0xaa, 0x84, 0x00ec}, /* 00,84,ec,aa */ @@ -1611,7 +1627,7 @@ static struct usb_action gc0305_60HZ[] = { {} }; -static struct usb_action gc0305_NoFliker[] = { +static const struct usb_action gc0305_NoFliker[] = { {0xa0, 0x0c, 0x0100}, /* 01,00,0c,cc */ {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */ @@ -1635,7 +1651,7 @@ static struct usb_action gc0305_NoFliker[] = { }; /* play poker with registers at your own risk !! */ -static struct usb_action hdcs2020xx_Initial[] = { +static const struct usb_action hdcs2020xx_Initial[] = { {0xa0, 0x01, 0x0000}, {0xa0, 0x03, 0x0008}, {0xa0, 0x0e, 0x0010}, @@ -1780,7 +1796,7 @@ static struct usb_action hdcs2020xx_Initial[] = { {} }; -static struct usb_action hdcs2020xx_InitialScale[] = { +static const struct usb_action hdcs2020xx_InitialScale[] = { {0xa0, 0x01, 0x0000}, {0xa0, 0x03, 0x0008}, {0xa0, 0x0e, 0x0010}, @@ -1922,7 +1938,7 @@ static struct usb_action hdcs2020xx_InitialScale[] = { /* {0xa0, 0x18, 0x00fe}, */ {} }; -static struct usb_action hdcs2020xb_Initial[] = { +static const struct usb_action hdcs2020xb_Initial[] = { {0xa0, 0x01, 0x0000}, {0xa0, 0x11, 0x0002}, {0xa0, 0x03, 0x0008}, /* qtable 0x05 */ @@ -2054,7 +2070,7 @@ static struct usb_action hdcs2020xb_Initial[] = { {0xa0, 0x40, 0x0118}, {} }; -static struct usb_action hdcs2020xb_InitialScale[] = { +static const struct usb_action hdcs2020xb_InitialScale[] = { {0xa0, 0x01, 0x0000}, {0xa0, 0x00, 0x0002}, {0xa0, 0x03, 0x0008}, @@ -2182,7 +2198,7 @@ static struct usb_action hdcs2020xb_InitialScale[] = { {0xa0, 0x40, 0x0118}, {} }; -static struct usb_action hdcs2020b_50HZ[] = { +static const struct usb_action hdcs2020b_50HZ[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0x13, 0x0018}, /* 00,13,18,aa */ {0xaa, 0x14, 0x0001}, /* 00,14,01,aa */ @@ -2203,7 +2219,7 @@ static struct usb_action hdcs2020b_50HZ[] = { {0xa0, 0x2f, 0x001f}, /* 00,1f,2f,cc */ {} }; -static struct usb_action hdcs2020b_60HZ[] = { +static const struct usb_action hdcs2020b_60HZ[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0x13, 0x0031}, /* 00,13,31,aa */ {0xaa, 0x14, 0x0001}, /* 00,14,01,aa */ @@ -2224,7 +2240,7 @@ static struct usb_action hdcs2020b_60HZ[] = { {0xa0, 0x2c, 0x001f}, /* 00,1f,2c,cc */ {} }; -static struct usb_action hdcs2020b_NoFliker[] = { +static const struct usb_action hdcs2020b_NoFliker[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0x13, 0x0010}, /* 00,13,10,aa */ {0xaa, 0x14, 0x0001}, /* 00,14,01,aa */ @@ -2246,7 +2262,7 @@ static struct usb_action hdcs2020b_NoFliker[] = { {} }; -static struct usb_action hv7131bxx_Initial[] = { +static const struct usb_action hv7131bxx_Initial[] = { {0xa0, 0x01, 0x0000}, {0xa0, 0x10, 0x0002}, {0xa0, 0x00, 0x0010}, @@ -2354,7 +2370,7 @@ static struct usb_action hv7131bxx_Initial[] = { {} }; -static struct usb_action hv7131bxx_InitialScale[] = { +static const struct usb_action hv7131bxx_InitialScale[] = { {0xa0, 0x01, 0x0000}, {0xa0, 0x00, 0x0002}, {0xa0, 0x00, 0x0010}, @@ -2460,7 +2476,7 @@ static struct usb_action hv7131bxx_InitialScale[] = { {} }; -static struct usb_action hv7131cxx_Initial[] = { +static const struct usb_action hv7131cxx_Initial[] = { {0xa0, 0x01, 0x0000}, {0xa0, 0x10, 0x0002}, {0xa0, 0x01, 0x0010}, @@ -2554,7 +2570,7 @@ static struct usb_action hv7131cxx_Initial[] = { {} }; -static struct usb_action hv7131cxx_InitialScale[] = { +static const struct usb_action hv7131cxx_InitialScale[] = { {0xa0, 0x01, 0x0000}, {0xa0, 0x00, 0x0002}, /* diff */ @@ -2655,7 +2671,7 @@ static struct usb_action hv7131cxx_InitialScale[] = { {} }; -static struct usb_action icm105axx_Initial[] = { +static const struct usb_action icm105axx_Initial[] = { {0xa0, 0x01, 0x0000}, {0xa0, 0x10, 0x0002}, {0xa0, 0x03, 0x0008}, @@ -2832,7 +2848,7 @@ static struct usb_action icm105axx_Initial[] = { {} }; -static struct usb_action icm105axx_InitialScale[] = { +static const struct usb_action icm105axx_InitialScale[] = { {0xa0, 0x01, 0x0000}, {0xa0, 0x00, 0x0002}, {0xa0, 0x03, 0x0008}, @@ -3011,7 +3027,7 @@ static struct usb_action icm105axx_InitialScale[] = { {0xa0, 0x40, 0x0118}, {} }; -static struct usb_action icm105a_50HZ[] = { +static const struct usb_action icm105a_50HZ[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ {0xaa, 0x0c, 0x0020}, /* 00,0c,20,aa */ @@ -3042,7 +3058,7 @@ static struct usb_action icm105a_50HZ[] = { {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */ {} }; -static struct usb_action icm105a_50HZScale[] = { +static const struct usb_action icm105a_50HZScale[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ {0xaa, 0x0c, 0x008c}, /* 00,0c,8c,aa */ @@ -3075,7 +3091,7 @@ static struct usb_action icm105a_50HZScale[] = { {0xa0, 0xc0, 0x01a8}, /* 01,a8,c0,cc */ {} }; -static struct usb_action icm105a_60HZ[] = { +static const struct usb_action icm105a_60HZ[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ {0xaa, 0x0c, 0x0004}, /* 00,0c,04,aa */ @@ -3106,7 +3122,7 @@ static struct usb_action icm105a_60HZ[] = { {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */ {} }; -static struct usb_action icm105a_60HZScale[] = { +static const struct usb_action icm105a_60HZScale[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ {0xaa, 0x0c, 0x0008}, /* 00,0c,08,aa */ @@ -3139,7 +3155,7 @@ static struct usb_action icm105a_60HZScale[] = { {0xa0, 0xc0, 0x01a8}, /* 01,a8,c0,cc */ {} }; -static struct usb_action icm105a_NoFliker[] = { +static const struct usb_action icm105a_NoFliker[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ {0xaa, 0x0c, 0x0004}, /* 00,0c,04,aa */ @@ -3170,7 +3186,7 @@ static struct usb_action icm105a_NoFliker[] = { {0xa0, 0xff, 0x0020}, /* 00,20,ff,cc */ {} }; -static struct usb_action icm105a_NoFlikerScale[] = { +static const struct usb_action icm105a_NoFlikerScale[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ {0xaa, 0x0c, 0x0004}, /* 00,0c,04,aa */ @@ -3204,7 +3220,7 @@ static struct usb_action icm105a_NoFlikerScale[] = { {} }; -static struct usb_action MC501CB_InitialScale[] = { +static const struct usb_action MC501CB_InitialScale[] = { {0xa0, 0x01, 0x0000}, /* 00,00,01,cc */ {0xa0, 0x00, 0x0002}, /* 00,02,00,cc */ {0xa0, 0x01, 0x0010}, /* 00,10,01,cc */ @@ -3324,7 +3340,7 @@ static struct usb_action MC501CB_InitialScale[] = { {} }; -static struct usb_action MC501CB_Initial[] = { /* 320x240 */ +static const struct usb_action MC501CB_Initial[] = { /* 320x240 */ {0xa0, 0x01, 0x0000}, /* 00,00,01,cc */ {0xa0, 0x10, 0x0002}, /* 00,02,10,cc */ {0xa0, 0x01, 0x0010}, /* 00,10,01,cc */ @@ -3443,7 +3459,7 @@ static struct usb_action MC501CB_Initial[] = { /* 320x240 */ {} }; -static struct usb_action MC501CB_50HZ[] = { +static const struct usb_action MC501CB_50HZ[] = { {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ {0xaa, 0x36, 0x001d}, /* 00,36,1D,aa */ @@ -3460,7 +3476,7 @@ static struct usb_action MC501CB_50HZ[] = { {} }; -static struct usb_action MC501CB_50HZScale[] = { +static const struct usb_action MC501CB_50HZScale[] = { {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ {0xaa, 0x36, 0x003a}, /* 00,36,3A,aa */ @@ -3477,7 +3493,7 @@ static struct usb_action MC501CB_50HZScale[] = { {} }; -static struct usb_action MC501CB_60HZ[] = { +static const struct usb_action MC501CB_60HZ[] = { {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ {0xaa, 0x36, 0x0018}, /* 00,36,18,aa */ @@ -3494,7 +3510,7 @@ static struct usb_action MC501CB_60HZ[] = { {} }; -static struct usb_action MC501CB_60HZScale[] = { +static const struct usb_action MC501CB_60HZScale[] = { {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ {0xaa, 0x36, 0x0030}, /* 00,36,30,aa */ @@ -3511,7 +3527,7 @@ static struct usb_action MC501CB_60HZScale[] = { {} }; -static struct usb_action MC501CB_NoFliker[] = { +static const struct usb_action MC501CB_NoFliker[] = { {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ {0xaa, 0x36, 0x0018}, /* 00,36,18,aa */ @@ -3528,7 +3544,7 @@ static struct usb_action MC501CB_NoFliker[] = { {} }; -static struct usb_action MC501CB_NoFlikerScale[] = { +static const struct usb_action MC501CB_NoFlikerScale[] = { {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ {0xaa, 0x36, 0x0030}, /* 00,36,30,aa */ @@ -3541,7 +3557,7 @@ static struct usb_action MC501CB_NoFlikerScale[] = { }; /* from zs211.inf - HKR,%OV7620%,Initial - 640x480 */ -static struct usb_action OV7620_mode0[] = { +static const struct usb_action OV7620_mode0[] = { {0xa0, 0x01, 0x0000}, /* 00,00,01,cc */ {0xa0, 0x40, 0x0002}, /* 00,02,40,cc */ #if 1 /*jfm*/ @@ -3616,7 +3632,7 @@ static struct usb_action OV7620_mode0[] = { }; /* from zs211.inf - HKR,%OV7620%,InitialScale - 320x240 */ -static struct usb_action OV7620_mode1[] = { +static const struct usb_action OV7620_mode1[] = { {0xa0, 0x01, 0x0000}, /* 00,00,01,cc */ {0xa0, 0x50, 0x0002}, /* 00,02,50,cc */ {0xa0, 0x03, 0x0008}, /* 00,08,00,cc */ /* mx change? */ @@ -3687,7 +3703,7 @@ static struct usb_action OV7620_mode1[] = { }; /* from zs211.inf - HKR,%OV7620%\AE,50HZ */ -static struct usb_action OV7620_50HZ[] = { +static const struct usb_action OV7620_50HZ[] = { {0xaa, 0x13, 0x00a3}, /* 00,13,a3,aa */ {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */ {0xaa, 0x2b, 0x0096}, /* 00,2b,96,aa */ @@ -3706,7 +3722,7 @@ static struct usb_action OV7620_50HZ[] = { }; /* from zs211.inf - HKR,%OV7620%\AE,60HZ */ -static struct usb_action OV7620_60HZ[] = { +static const struct usb_action OV7620_60HZ[] = { {0xaa, 0x13, 0x00a3}, /* 00,13,a3,aa */ /* (bug in zs211.inf) */ {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */ {0xaa, 0x2b, 0x0000}, /* 00,2b,00,aa */ @@ -3728,7 +3744,7 @@ static struct usb_action OV7620_60HZ[] = { }; /* from zs211.inf - HKR,%OV7620%\AE,NoFliker */ -static struct usb_action OV7620_NoFliker[] = { +static const struct usb_action OV7620_NoFliker[] = { {0xaa, 0x13, 0x00a3}, /* 00,13,a3,aa */ /* (bug in zs211.inf) */ {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */ {0xaa, 0x2b, 0x0000}, /* 00,2b,00,aa */ @@ -3747,7 +3763,7 @@ static struct usb_action OV7620_NoFliker[] = { {} }; -static struct usb_action ov7630c_Initial[] = { +static const struct usb_action ov7630c_Initial[] = { {0xa0, 0x01, 0x0000}, {0xa0, 0x10, 0x0002}, {0xa0, 0x01, 0x0000}, @@ -3904,7 +3920,7 @@ static struct usb_action ov7630c_Initial[] = { {} }; -static struct usb_action ov7630c_InitialScale[] = { +static const struct usb_action ov7630c_InitialScale[] = { {0xa0, 0x01, 0x0000}, {0xa0, 0x00, 0x0002}, {0xa0, 0x03, 0x0008}, @@ -4061,7 +4077,7 @@ static struct usb_action ov7630c_InitialScale[] = { {} }; -static struct usb_action pas106b_Initial_com[] = { +static const struct usb_action pas106b_Initial_com[] = { /* Sream and Sensor specific */ {0xa1, 0x01, 0x0010}, /* CMOSSensorSelect */ /* System */ @@ -4075,7 +4091,7 @@ static struct usb_action pas106b_Initial_com[] = { {} }; -static struct usb_action pas106b_Initial[] = { /* 176x144 */ +static const struct usb_action pas106b_Initial[] = { /* 176x144 */ /* JPEG control */ {0xa0, 0x03, 0x0008}, /* ClockSetting */ /* Sream and Sensor specific */ @@ -4193,7 +4209,7 @@ static struct usb_action pas106b_Initial[] = { /* 176x144 */ {} }; -static struct usb_action pas106b_InitialScale[] = { /* 352x288 */ +static const struct usb_action pas106b_InitialScale[] = { /* 352x288 */ /* JPEG control */ {0xa0, 0x03, 0x0008}, /* ClockSetting */ /* Sream and Sensor specific */ @@ -4316,7 +4332,7 @@ static struct usb_action pas106b_InitialScale[] = { /* 352x288 */ {0xa0, 0xff, 0x0018}, /* Frame adjust */ {} }; -static struct usb_action pas106b_50HZ[] = { +static const struct usb_action pas106b_50HZ[] = { {0xa0, 0x00, 0x0190}, /* 01,90,00,cc */ {0xa0, 0x06, 0x0191}, /* 01,91,06,cc */ {0xa0, 0x54, 0x0192}, /* 01,92,54,cc */ @@ -4332,7 +4348,7 @@ static struct usb_action pas106b_50HZ[] = { {0xa0, 0x04, 0x01a9}, /* 01,a9,04,cc */ {} }; -static struct usb_action pas106b_60HZ[] = { +static const struct usb_action pas106b_60HZ[] = { {0xa0, 0x00, 0x0190}, /* 01,90,00,cc */ {0xa0, 0x06, 0x0191}, /* 01,91,06,cc */ {0xa0, 0x2e, 0x0192}, /* 01,92,2e,cc */ @@ -4348,7 +4364,7 @@ static struct usb_action pas106b_60HZ[] = { {0xa0, 0x04, 0x01a9}, /* 01,a9,04,cc */ {} }; -static struct usb_action pas106b_NoFliker[] = { +static const struct usb_action pas106b_NoFliker[] = { {0xa0, 0x00, 0x0190}, /* 01,90,00,cc */ {0xa0, 0x06, 0x0191}, /* 01,91,06,cc */ {0xa0, 0x50, 0x0192}, /* 01,92,50,cc */ @@ -4365,7 +4381,7 @@ static struct usb_action pas106b_NoFliker[] = { {} }; -static struct usb_action pb03303x_Initial[] = { +static const struct usb_action pb03303x_Initial[] = { {0xa0, 0x01, 0x0000}, {0xa0, 0x03, 0x0008}, {0xa0, 0x0a, 0x0010}, @@ -4511,7 +4527,7 @@ static struct usb_action pb03303x_Initial[] = { {} }; -static struct usb_action pb03303x_InitialScale[] = { +static const struct usb_action pb03303x_InitialScale[] = { {0xa0, 0x01, 0x0000}, {0xa0, 0x03, 0x0008}, {0xa0, 0x0a, 0x0010}, @@ -4659,7 +4675,7 @@ static struct usb_action pb03303x_InitialScale[] = { {0xa0, 0x42, 0x0180}, {} }; -static struct usb_action pb0330xx_Initial[] = { +static const struct usb_action pb0330xx_Initial[] = { {0xa1, 0x01, 0x0008}, {0xa1, 0x01, 0x0008}, {0xa0, 0x01, 0x0000}, @@ -4774,7 +4790,7 @@ static struct usb_action pb0330xx_Initial[] = { {} }; -static struct usb_action pb0330xx_InitialScale[] = { +static const struct usb_action pb0330xx_InitialScale[] = { {0xa1, 0x01, 0x0008}, {0xa1, 0x01, 0x0008}, {0xa0, 0x01, 0x0000}, @@ -4887,7 +4903,7 @@ static struct usb_action pb0330xx_InitialScale[] = { /* {0xa0, 0x00, 0x0007}, */ {} }; -static struct usb_action pb0330_50HZ[] = { +static const struct usb_action pb0330_50HZ[] = { {0xa0, 0x00, 0x0190}, /* 01,90,00,cc */ {0xa0, 0x07, 0x0191}, /* 01,91,07,cc */ {0xa0, 0xee, 0x0192}, /* 01,92,ee,cc */ @@ -4903,7 +4919,7 @@ static struct usb_action pb0330_50HZ[] = { {0xa0, 0xc8, 0x001f}, /* 00,1f,c8,cc */ {} }; -static struct usb_action pb0330_50HZScale[] = { +static const struct usb_action pb0330_50HZScale[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xa0, 0x00, 0x0190}, /* 01,90,00,cc */ {0xa0, 0x07, 0x0191}, /* 01,91,07,cc */ @@ -4920,7 +4936,7 @@ static struct usb_action pb0330_50HZScale[] = { {0xa0, 0xf8, 0x001f}, /* 00,1f,f8,cc */ {} }; -static struct usb_action pb0330_60HZ[] = { +static const struct usb_action pb0330_60HZ[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xa0, 0x00, 0x0190}, /* 01,90,00,cc */ {0xa0, 0x07, 0x0191}, /* 01,91,07,cc */ @@ -4937,7 +4953,7 @@ static struct usb_action pb0330_60HZ[] = { {0xa0, 0x90, 0x001f}, /* 00,1f,90,cc */ {} }; -static struct usb_action pb0330_60HZScale[] = { +static const struct usb_action pb0330_60HZScale[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xa0, 0x00, 0x0190}, /* 01,90,00,cc */ {0xa0, 0x07, 0x0191}, /* 01,91,07,cc */ @@ -4954,7 +4970,7 @@ static struct usb_action pb0330_60HZScale[] = { {0xa0, 0x90, 0x001f}, /* 00,1f,90,cc */ {} }; -static struct usb_action pb0330_NoFliker[] = { +static const struct usb_action pb0330_NoFliker[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xa0, 0x00, 0x0190}, /* 01,90,00,cc */ {0xa0, 0x07, 0x0191}, /* 01,91,07,cc */ @@ -4971,7 +4987,7 @@ static struct usb_action pb0330_NoFliker[] = { {0xa0, 0x90, 0x001f}, /* 00,1f,90,cc */ {} }; -static struct usb_action pb0330_NoFlikerScale[] = { +static const struct usb_action pb0330_NoFlikerScale[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xa0, 0x00, 0x0190}, /* 01,90,00,cc */ {0xa0, 0x07, 0x0191}, /* 01,91,07,cc */ @@ -4990,7 +5006,7 @@ static struct usb_action pb0330_NoFlikerScale[] = { }; /* from oem9.inf - HKR,%PO2030%,Initial - 640x480 - (close to CS2102) */ -static struct usb_action PO2030_mode0[] = { +static const struct usb_action PO2030_mode0[] = { {0xa0, 0x01, 0x0000}, /* 00,00,01,cc */ {0xa0, 0x04, 0x0002}, /* 00,02,04,cc */ {0xa0, 0x01, 0x0010}, /* 00,10,01,cc */ @@ -5067,7 +5083,7 @@ static struct usb_action PO2030_mode0[] = { }; /* from oem9.inf - HKR,%PO2030%,InitialScale - 320x240 */ -static struct usb_action PO2030_mode1[] = { +static const struct usb_action PO2030_mode1[] = { {0xa0, 0x01, 0x0000}, /* 00,00,01,cc */ {0xa0, 0x10, 0x0002}, /* 00,02,10,cc */ {0xa0, 0x01, 0x0010}, /* 00,10,01,cc */ @@ -5143,7 +5159,7 @@ static struct usb_action PO2030_mode1[] = { {} }; -static struct usb_action PO2030_50HZ[] = { +static const struct usb_action PO2030_50HZ[] = { {0xaa, 0x8d, 0x0008}, /* 00,8d,08,aa */ {0xaa, 0x1a, 0x0001}, /* 00,1a,01,aa */ {0xaa, 0x1b, 0x000a}, /* 00,1b,0a,aa */ @@ -5165,7 +5181,7 @@ static struct usb_action PO2030_50HZ[] = { {} }; -static struct usb_action PO2030_60HZ[] = { +static const struct usb_action PO2030_60HZ[] = { {0xaa, 0x8d, 0x0008}, /* 00,8d,08,aa */ {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa */ {0xaa, 0x1b, 0x00de}, /* 00,1b,de,aa */ @@ -5187,7 +5203,7 @@ static struct usb_action PO2030_60HZ[] = { {} }; -static struct usb_action PO2030_NoFliker[] = { +static const struct usb_action PO2030_NoFliker[] = { {0xa0, 0x02, 0x0180}, /* 01,80,02,cc */ {0xaa, 0x8d, 0x000d}, /* 00,8d,0d,aa */ {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa */ @@ -5199,7 +5215,7 @@ static struct usb_action PO2030_NoFliker[] = { }; /* TEST */ -static struct usb_action tas5130CK_Initial[] = { +static const struct usb_action tas5130CK_Initial[] = { {0xa0, 0x01, 0x0000}, {0xa0, 0x01, 0x003b}, {0xa0, 0x0e, 0x003a}, @@ -5402,7 +5418,7 @@ static struct usb_action tas5130CK_Initial[] = { {} }; -static struct usb_action tas5130CK_InitialScale[] = { +static const struct usb_action tas5130CK_InitialScale[] = { {0xa0, 0x01, 0x0000}, {0xa0, 0x01, 0x003b}, {0xa0, 0x0e, 0x003a}, @@ -5610,7 +5626,7 @@ static struct usb_action tas5130CK_InitialScale[] = { {} }; -static struct usb_action tas5130cxx_Initial[] = { +static const struct usb_action tas5130cxx_Initial[] = { {0xa0, 0x01, 0x0000}, {0xa0, 0x50, 0x0002}, {0xa0, 0x03, 0x0008}, @@ -5699,7 +5715,7 @@ static struct usb_action tas5130cxx_Initial[] = { {0xa0, 0x42, 0x0180}, {} }; -static struct usb_action tas5130cxx_InitialScale[] = { +static const struct usb_action tas5130cxx_InitialScale[] = { {0xa0, 0x01, 0x0000}, {0xa0, 0x01, 0x0000}, {0xa0, 0x40, 0x0002}, @@ -5789,7 +5805,7 @@ static struct usb_action tas5130cxx_InitialScale[] = { {0xa0, 0x42, 0x0180}, {} }; -static struct usb_action tas5130cxx_50HZ[] = { +static const struct usb_action tas5130cxx_50HZ[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ {0xaa, 0xa4, 0x0063}, /* 00,a4,63,aa */ @@ -5812,7 +5828,7 @@ static struct usb_action tas5130cxx_50HZ[] = { {0xa0, 0x03, 0x009f}, /* 00,9f,03,cc */ {} }; -static struct usb_action tas5130cxx_50HZScale[] = { +static const struct usb_action tas5130cxx_50HZScale[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ {0xaa, 0xa4, 0x0077}, /* 00,a4,77,aa */ @@ -5835,7 +5851,7 @@ static struct usb_action tas5130cxx_50HZScale[] = { {0xa0, 0x03, 0x009f}, /* 00,9f,03,cc */ {} }; -static struct usb_action tas5130cxx_60HZ[] = { +static const struct usb_action tas5130cxx_60HZ[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ {0xaa, 0xa4, 0x0036}, /* 00,a4,36,aa */ @@ -5858,7 +5874,7 @@ static struct usb_action tas5130cxx_60HZ[] = { {0xa0, 0x03, 0x009f}, /* 00,9f,03,cc */ {} }; -static struct usb_action tas5130cxx_60HZScale[] = { +static const struct usb_action tas5130cxx_60HZScale[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ {0xaa, 0xa4, 0x0077}, /* 00,a4,77,aa */ @@ -5881,7 +5897,7 @@ static struct usb_action tas5130cxx_60HZScale[] = { {0xa0, 0x03, 0x009f}, /* 00,9f,03,cc */ {} }; -static struct usb_action tas5130cxx_NoFliker[] = { +static const struct usb_action tas5130cxx_NoFliker[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ {0xaa, 0xa4, 0x0040}, /* 00,a4,40,aa */ @@ -5905,7 +5921,7 @@ static struct usb_action tas5130cxx_NoFliker[] = { {} }; -static struct usb_action tas5130cxx_NoFlikerScale[] = { +static const struct usb_action tas5130cxx_NoFlikerScale[] = { {0xa0, 0x00, 0x0019}, /* 00,19,00,cc */ {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ {0xaa, 0xa4, 0x0090}, /* 00,a4,90,aa */ @@ -5929,7 +5945,7 @@ static struct usb_action tas5130cxx_NoFlikerScale[] = { {} }; -static struct usb_action tas5130c_vf0250_Initial[] = { +static const struct usb_action tas5130c_vf0250_Initial[] = { {0xa0, 0x01, 0x0000}, /* 00,00,01,cc, */ {0xa0, 0x02, 0x0008}, /* 00,08,02,cc, */ {0xa0, 0x01, 0x0010}, /* 00,10,01,cc, */ @@ -5993,7 +6009,7 @@ static struct usb_action tas5130c_vf0250_Initial[] = { {} }; -static struct usb_action tas5130c_vf0250_InitialScale[] = { +static const struct usb_action tas5130c_vf0250_InitialScale[] = { {0xa0, 0x01, 0x0000}, /* 00,00,01,cc, */ {0xa0, 0x02, 0x0008}, /* 00,08,02,cc, */ {0xa0, 0x01, 0x0010}, /* 00,10,01,cc, */ @@ -6057,7 +6073,7 @@ static struct usb_action tas5130c_vf0250_InitialScale[] = { {} }; /* "50HZ" light frequency banding filter */ -static struct usb_action tas5130c_vf0250_50HZ[] = { +static const struct usb_action tas5130c_vf0250_50HZ[] = { {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ {0xaa, 0x83, 0x0001}, /* 00,83,01,aa */ {0xaa, 0x84, 0x00aa}, /* 00,84,aa,aa */ @@ -6082,7 +6098,7 @@ static struct usb_action tas5130c_vf0250_50HZ[] = { }; /* "50HZScale" light frequency banding filter */ -static struct usb_action tas5130c_vf0250_50HZScale[] = { +static const struct usb_action tas5130c_vf0250_50HZScale[] = { {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ {0xaa, 0x83, 0x0003}, /* 00,83,03,aa */ {0xaa, 0x84, 0x0054}, /* 00,84,54,aa */ @@ -6107,7 +6123,7 @@ static struct usb_action tas5130c_vf0250_50HZScale[] = { }; /* "60HZ" light frequency banding filter */ -static struct usb_action tas5130c_vf0250_60HZ[] = { +static const struct usb_action tas5130c_vf0250_60HZ[] = { {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ {0xaa, 0x83, 0x0001}, /* 00,83,01,aa */ {0xaa, 0x84, 0x0062}, /* 00,84,62,aa */ @@ -6132,7 +6148,7 @@ static struct usb_action tas5130c_vf0250_60HZ[] = { }; /* "60HZScale" light frequency banding ilter */ -static struct usb_action tas5130c_vf0250_60HZScale[] = { +static const struct usb_action tas5130c_vf0250_60HZScale[] = { {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ {0xaa, 0x83, 0x0002}, /* 00,83,02,aa */ {0xaa, 0x84, 0x00c4}, /* 00,84,c4,aa */ @@ -6157,7 +6173,7 @@ static struct usb_action tas5130c_vf0250_60HZScale[] = { }; /* "NoFliker" light frequency banding flter */ -static struct usb_action tas5130c_vf0250_NoFliker[] = { +static const struct usb_action tas5130c_vf0250_NoFliker[] = { {0xa0, 0x0c, 0x0100}, /* 01,00,0c,cc, */ {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */ @@ -6180,7 +6196,7 @@ static struct usb_action tas5130c_vf0250_NoFliker[] = { }; /* "NoFlikerScale" light frequency banding filter */ -static struct usb_action tas5130c_vf0250_NoFlikerScale[] = { +static const struct usb_action tas5130c_vf0250_NoFlikerScale[] = { {0xa0, 0x0c, 0x0100}, /* 01,00,0c,cc, */ {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */ @@ -6276,7 +6292,7 @@ static __u8 i2c_write(struct usb_device *dev, } static void usb_exchange(struct usb_device *dev, - struct usb_action *action) + const struct usb_action *action) { __u8 buffread; @@ -6308,12 +6324,12 @@ static void setmatrix(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; int i; - __u8 *matrix; - static __u8 gc0305_matrix[9] = + const __u8 *matrix; + static const __u8 gc0305_matrix[9] = {0x50, 0xf8, 0xf8, 0xf8, 0x50, 0xf8, 0xf8, 0xf8, 0x50}; - static __u8 ov7620_matrix[9] = + static const __u8 ov7620_matrix[9] = {0x58, 0xf4, 0xf4, 0xf4, 0x58, 0xf4, 0xf4, 0xf4, 0x58}; - static __u8 po2030_matrix[9] = + static const __u8 po2030_matrix[9] = {0x60, 0xf0, 0xf0, 0xf0, 0x60, 0xf0, 0xf0, 0xf0, 0x60}; switch (sd->sensor) { @@ -6365,7 +6381,7 @@ static void setsharpness(struct gspca_dev *gspca_dev) struct usb_device *dev = gspca_dev->dev; int sharpness; __u8 retbyte; - static __u8 sharpness_tb[][2] = { + static const __u8 sharpness_tb[][2] = { {0x02, 0x03}, {0x04, 0x07}, {0x08, 0x0f}, @@ -6384,59 +6400,59 @@ static void setcontrast(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; struct usb_device *dev = gspca_dev->dev; - __u8 *Tgamma, *Tgradient; + const __u8 *Tgamma, *Tgradient; int g, i, k; - static __u8 kgamma_tb[16] = /* delta for contrast */ + static const __u8 kgamma_tb[16] = /* delta for contrast */ {0x15, 0x0d, 0x0a, 0x09, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08}; - static __u8 kgrad_tb[16] = + static const __u8 kgrad_tb[16] = {0x1b, 0x06, 0x03, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x04}; - static __u8 Tgamma_1[16] = + static const __u8 Tgamma_1[16] = {0x00, 0x00, 0x03, 0x0d, 0x1b, 0x2e, 0x45, 0x5f, 0x79, 0x93, 0xab, 0xc1, 0xd4, 0xe5, 0xf3, 0xff}; - static __u8 Tgradient_1[16] = + static const __u8 Tgradient_1[16] = {0x00, 0x01, 0x05, 0x0b, 0x10, 0x15, 0x18, 0x1a, 0x1a, 0x18, 0x16, 0x14, 0x12, 0x0f, 0x0d, 0x06}; - static __u8 Tgamma_2[16] = + static const __u8 Tgamma_2[16] = {0x01, 0x0c, 0x1f, 0x3a, 0x53, 0x6d, 0x85, 0x9c, 0xb0, 0xc2, 0xd1, 0xde, 0xe9, 0xf2, 0xf9, 0xff}; - static __u8 Tgradient_2[16] = + static const __u8 Tgradient_2[16] = {0x05, 0x0f, 0x16, 0x1a, 0x19, 0x19, 0x17, 0x15, 0x12, 0x10, 0x0e, 0x0b, 0x09, 0x08, 0x06, 0x03}; - static __u8 Tgamma_3[16] = + static const __u8 Tgamma_3[16] = {0x04, 0x16, 0x30, 0x4e, 0x68, 0x81, 0x98, 0xac, 0xbe, 0xcd, 0xda, 0xe4, 0xed, 0xf5, 0xfb, 0xff}; - static __u8 Tgradient_3[16] = + static const __u8 Tgradient_3[16] = {0x0c, 0x16, 0x1b, 0x1c, 0x19, 0x18, 0x15, 0x12, 0x10, 0x0d, 0x0b, 0x09, 0x08, 0x06, 0x05, 0x03}; - static __u8 Tgamma_4[16] = + static const __u8 Tgamma_4[16] = {0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8, 0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff}; - static __u8 Tgradient_4[16] = + static const __u8 Tgradient_4[16] = {0x26, 0x22, 0x20, 0x1c, 0x16, 0x13, 0x10, 0x0d, 0x0b, 0x09, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02}; - static __u8 Tgamma_5[16] = + static const __u8 Tgamma_5[16] = {0x20, 0x4b, 0x6e, 0x8d, 0xa3, 0xb5, 0xc5, 0xd2, 0xdc, 0xe5, 0xec, 0xf2, 0xf6, 0xfa, 0xfd, 0xff}; - static __u8 Tgradient_5[16] = + static const __u8 Tgradient_5[16] = {0x37, 0x26, 0x20, 0x1a, 0x14, 0x10, 0x0e, 0x0b, 0x09, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x02}; - static __u8 Tgamma_6[16] = /* ?? was gamma 5 */ + static const __u8 Tgamma_6[16] = /* ?? was gamma 5 */ {0x24, 0x44, 0x64, 0x84, 0x9d, 0xb2, 0xc4, 0xd3, 0xe0, 0xeb, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff}; - static __u8 Tgradient_6[16] = + static const __u8 Tgradient_6[16] = {0x18, 0x20, 0x20, 0x1c, 0x16, 0x13, 0x10, 0x0e, 0x0b, 0x09, 0x07, 0x00, 0x00, 0x00, 0x00, 0x01}; - static __u8 *gamma_tb[] = { - 0, Tgamma_1, Tgamma_2, + static const __u8 *gamma_tb[] = { + NULL, Tgamma_1, Tgamma_2, Tgamma_3, Tgamma_4, Tgamma_5, Tgamma_6 }; - static __u8 *gradient_tb[] = { - 0, Tgradient_1, Tgradient_2, + static const __u8 *gradient_tb[] = { + NULL, Tgradient_1, Tgradient_2, Tgradient_3, Tgradient_4, Tgradient_5, Tgradient_6 }; -#ifdef VIDEO_ADV_DEBUG +#ifdef CONFIG_VIDEO_ADV_DEBUG __u8 v[16]; #endif @@ -6454,7 +6470,7 @@ static void setcontrast(struct gspca_dev *gspca_dev) else if (g <= 0) g = 1; reg_w(dev, g, 0x0120 + i); /* gamma */ -#ifdef VIDEO_ADV_DEBUG +#ifdef CONFIG_VIDEO_ADV_DEBUG if (gspca_debug & D_CONF) v[i] = g; #endif @@ -6474,7 +6490,7 @@ static void setcontrast(struct gspca_dev *gspca_dev) g = 1; } reg_w(dev, g, 0x0130 + i); /* gradient */ -#ifdef VIDEO_ADV_DEBUG +#ifdef CONFIG_VIDEO_ADV_DEBUG if (gspca_debug & D_CONF) v[i] = g; #endif @@ -6533,8 +6549,8 @@ static int setlightfreq(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; int i, mode; - struct usb_action *zc3_freq; - static struct usb_action *freq_tb[SENSOR_MAX][6] = { + const struct usb_action *zc3_freq; + static const struct usb_action *freq_tb[SENSOR_MAX][6] = { /* SENSOR_CS2102 0 */ {cs2102_NoFliker, cs2102_NoFlikerScale, cs2102_50HZ, cs2102_50HZScale, @@ -6548,21 +6564,21 @@ static int setlightfreq(struct gspca_dev *gspca_dev) gc0305_50HZ, gc0305_50HZ, gc0305_60HZ, gc0305_60HZ}, /* SENSOR_HDCS2020 3 */ - {0, 0, - 0, 0, - 0, 0}, + {NULL, NULL, + NULL, NULL, + NULL, NULL}, /* SENSOR_HDCS2020b 4 */ {hdcs2020b_NoFliker, hdcs2020b_NoFliker, hdcs2020b_50HZ, hdcs2020b_50HZ, hdcs2020b_60HZ, hdcs2020b_60HZ}, /* SENSOR_HV7131B 5 */ - {0, 0, - 0, 0, - 0, 0}, + {NULL, NULL, + NULL, NULL, + NULL, NULL}, /* SENSOR_HV7131C 6 */ - {0, 0, - 0, 0, - 0, 0}, + {NULL, NULL, + NULL, NULL, + NULL, NULL}, /* SENSOR_ICM105A 7 */ {icm105a_NoFliker, icm105a_NoFlikerScale, icm105a_50HZ, icm105a_50HZScale, @@ -6576,9 +6592,9 @@ static int setlightfreq(struct gspca_dev *gspca_dev) OV7620_50HZ, OV7620_50HZ, OV7620_60HZ, OV7620_60HZ}, /* SENSOR_OV7630C 10 */ - {0, 0, - 0, 0, - 0, 0}, + {NULL, NULL, + NULL, NULL, + NULL, NULL}, /* SENSOR_PAS106 11 */ {pas106b_NoFliker, pas106b_NoFliker, pas106b_50HZ, pas106b_50HZ, @@ -6606,11 +6622,11 @@ static int setlightfreq(struct gspca_dev *gspca_dev) }; i = sd->lightfreq * 2; - mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode; + mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; if (!mode) i++; /* 640x480 */ zc3_freq = freq_tb[(int) sd->sensor][i]; - if (zc3_freq != 0) { + if (zc3_freq != NULL) { usb_exchange(gspca_dev->dev, zc3_freq); switch (sd->sensor) { case SENSOR_GC0305: @@ -6956,7 +6972,7 @@ static int sd_config(struct gspca_dev *gspca_dev, int sensor; __u8 bsensor; int vga = 1; /* 1: vga, 0: sif */ - static __u8 gamma[SENSOR_MAX] = { + static const __u8 gamma[SENSOR_MAX] = { 5, /* SENSOR_CS2102 0 */ 5, /* SENSOR_CS2102K 1 */ 4, /* SENSOR_GC0305 2 */ @@ -7149,10 +7165,10 @@ static void sd_start(struct gspca_dev *gspca_dev) { struct sd *sd = (struct sd *) gspca_dev; struct usb_device *dev = gspca_dev->dev; - struct usb_action *zc3_init; + const struct usb_action *zc3_init; int mode; __u8 retbyte; - static struct usb_action *init_tb[SENSOR_MAX][2] = { + static const struct usb_action *init_tb[SENSOR_MAX][2] = { {cs2102_InitialScale, cs2102_Initial}, /* 0 */ {cs2102K_InitialScale, cs2102K_Initial}, /* 1 */ {gc0305_Initial, gc0305_InitialScale}, /* 2 */ @@ -7174,7 +7190,7 @@ static void sd_start(struct gspca_dev *gspca_dev) /* 16 */ }; - mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].mode; + mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; zc3_init = init_tb[(int) sd->sensor][mode]; switch (sd->sensor) { case SENSOR_HV7131B: @@ -7463,13 +7479,13 @@ static int sd_querymenu(struct gspca_dev *gspca_dev, case V4L2_CID_POWER_LINE_FREQUENCY: switch (menu->index) { case 0: /* V4L2_CID_POWER_LINE_FREQUENCY_DISABLED */ - strcpy(menu->name, "NoFliker"); + strcpy((char *) menu->name, "NoFliker"); return 0; case 1: /* V4L2_CID_POWER_LINE_FREQUENCY_50HZ */ - strcpy(menu->name, "50 Hz"); + strcpy((char *) menu->name, "50 Hz"); return 0; case 2: /* V4L2_CID_POWER_LINE_FREQUENCY_60HZ */ - strcpy(menu->name, "60 Hz"); + strcpy((char *) menu->name, "60 Hz"); return 0; } break; @@ -7477,7 +7493,7 @@ static int sd_querymenu(struct gspca_dev *gspca_dev, return -EINVAL; } -static struct sd_desc sd_desc = { +static const struct sd_desc sd_desc = { .name = MODULE_NAME, .ctrls = sd_ctrls, .nctrls = sizeof sd_ctrls / sizeof sd_ctrls[0], @@ -7492,7 +7508,7 @@ static struct sd_desc sd_desc = { }; #define DVNM(name) .driver_info = (kernel_ulong_t) name -static __devinitdata struct usb_device_id device_table[] = { +static const __devinitdata struct usb_device_id device_table[] = { {USB_DEVICE(0x041e, 0x041e), DVNM("Creative WebCam Live!")}, {USB_DEVICE(0x041e, 0x4017), DVNM("Creative Webcam Mobile PD1090")}, {USB_DEVICE(0x041e, 0x401c), DVNM("Creative NX")}, |