The patch number 8934 was added via Mauro Carvalho Chehab <[EMAIL PROTECTED]> to http://linuxtv.org/hg/v4l-dvb master development tree.
Kernel patches in this development tree may be modified to be backward compatible with older kernels. Compatibility modifications will be removed before inclusion into the mainstream Kernel If anyone has any objections, please let us know by sending a message to: [EMAIL PROTECTED] ------ From: Mauro Carvalho Chehab <[EMAIL PROTECTED]> merge: http://linuxtv.org/hg/~jfrancois/gspca/ Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]> --- linux/Documentation/video4linux/gspca.txt | 2 linux/drivers/media/video/gspca/gspca.c | 25 +++++----- linux/drivers/media/video/gspca/pac207.c | 1 linux/drivers/media/video/gspca/sonixj.c | 51 +++++++++++++++++++++- linux/drivers/media/video/gspca/zc3xx.c | 4 - 5 files changed, 67 insertions(+), 16 deletions(-) diff -r ed5ea7c1bc82 -r e3f4b17fead0 linux/Documentation/video4linux/gspca.txt --- a/linux/Documentation/video4linux/gspca.txt Mon Sep 08 07:54:27 2008 -0300 +++ b/linux/Documentation/video4linux/gspca.txt Wed Sep 10 23:34:19 2008 -0300 @@ -42,6 +42,7 @@ zc3xx 0458:700c Genius VideoCam V3 zc3xx 0458:700c Genius VideoCam V3 zc3xx 0458:700f Genius VideoCam Web V2 sonixj 0458:7025 Genius Eye 311Q +sonixj 0458:702e Genius Slim 310 NB sonixj 045e:00f5 MicroSoft VX3000 sonixj 045e:00f7 MicroSoft VX1000 ov519 045e:028c Micro$oft xbox cam @@ -181,6 +182,7 @@ pac207 093a:2470 Genius GF112 pac207 093a:2470 Genius GF112 pac207 093a:2471 Genius VideoCam ge111 pac207 093a:2472 Genius VideoCam ge110 +pac207 093a:2476 Genius e-Messenger 112 pac7311 093a:2600 PAC7311 Typhoon pac7311 093a:2601 Philips SPC 610 NC pac7311 093a:2603 PAC7312 diff -r ed5ea7c1bc82 -r e3f4b17fead0 linux/drivers/media/video/gspca/gspca.c --- a/linux/drivers/media/video/gspca/gspca.c Mon Sep 08 07:54:27 2008 -0300 +++ b/linux/drivers/media/video/gspca/gspca.c Wed Sep 10 23:34:19 2008 -0300 @@ -47,7 +47,7 @@ MODULE_DESCRIPTION("GSPCA USB Camera Dri MODULE_DESCRIPTION("GSPCA USB Camera Driver"); MODULE_LICENSE("GPL"); -#define DRIVER_VERSION_NUMBER KERNEL_VERSION(2, 2, 0) +#define DRIVER_VERSION_NUMBER KERNEL_VERSION(2, 3, 0) static int video_nr = -1; @@ -195,7 +195,7 @@ static void bulk_irq(struct urb *urb { struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context; struct gspca_frame *frame; - int j, ret; + int j; PDEBUG(D_PACK, "bulk irq"); if (!gspca_dev->streaming) @@ -222,11 +222,6 @@ static void bulk_irq(struct urb *urb urb->transfer_buffer, urb->actual_length); } - /* resubmit the URB */ - urb->status = 0; - ret = usb_submit_urb(urb, GFP_ATOMIC); - if (ret < 0) - PDEBUG(D_ERR|D_PACK, "usb_submit_urb() ret %d", ret); } /* @@ -512,20 +507,20 @@ static int create_urbs(struct gspca_dev PDEBUG(D_STREAM, "isoc %d pkts size %d = bsize:%d", npkt, psize, bsize); + nurbs = DEF_NURBS; } else { npkt = 0; bsize = psize; PDEBUG(D_STREAM, "bulk bsize:%d", bsize); - } - - nurbs = DEF_NURBS; + nurbs = 1; + } + gspca_dev->nurbs = nurbs; for (n = 0; n < nurbs; n++) { urb = usb_alloc_urb(npkt, GFP_KERNEL); if (!urb) { err("usb_alloc_urb failed"); - for (i = 0; i < n; i++) - usb_free_urb(gspca_dev->urb[i]); + destroy_urbs(gspca_dev); return -ENOMEM; } urb->transfer_buffer = usb_buffer_alloc(gspca_dev->dev, @@ -535,8 +530,8 @@ static int create_urbs(struct gspca_dev if (urb->transfer_buffer == NULL) { usb_free_urb(urb); + err("usb_buffer_urb failed"); destroy_urbs(gspca_dev); - err("usb_buffer_urb failed"); return -ENOMEM; } gspca_dev->urb[n] = urb; @@ -593,6 +588,10 @@ static int gspca_init_transfer(struct gs gspca_dev->sd_desc->start(gspca_dev); gspca_dev->streaming = 1; atomic_set(&gspca_dev->nevent, 0); + + /* start the bulk transfer is done by the subdriver */ + if (gspca_dev->bulk) + break; /* submit the URBs */ for (n = 0; n < gspca_dev->nurbs; n++) { diff -r ed5ea7c1bc82 -r e3f4b17fead0 linux/drivers/media/video/gspca/pac207.c --- a/linux/drivers/media/video/gspca/pac207.c Mon Sep 08 07:54:27 2008 -0300 +++ b/linux/drivers/media/video/gspca/pac207.c Wed Sep 10 23:34:19 2008 -0300 @@ -534,6 +534,7 @@ static const __devinitdata struct usb_de {USB_DEVICE(0x093a, 0x2470)}, {USB_DEVICE(0x093a, 0x2471)}, {USB_DEVICE(0x093a, 0x2472)}, + {USB_DEVICE(0x093a, 0x2476)}, {USB_DEVICE(0x2001, 0xf115)}, {} }; diff -r ed5ea7c1bc82 -r e3f4b17fead0 linux/drivers/media/video/gspca/sonixj.c --- a/linux/drivers/media/video/gspca/sonixj.c Mon Sep 08 07:54:27 2008 -0300 +++ b/linux/drivers/media/video/gspca/sonixj.c Wed Sep 10 23:34:19 2008 -0300 @@ -39,6 +39,7 @@ struct sd { unsigned char contrast; unsigned char colors; unsigned char autogain; + __u8 vflip; /* ov7630 only */ signed char ag_cnt; #define AG_CNT_START 13 @@ -70,6 +71,8 @@ static int sd_getcolors(struct gspca_dev static int sd_getcolors(struct gspca_dev *gspca_dev, __s32 *val); static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val); static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val); +static int sd_setvflip(struct gspca_dev *gspca_dev, __s32 val); +static int sd_getvflip(struct gspca_dev *gspca_dev, __s32 *val); static struct ctrl sd_ctrls[] = { { @@ -131,6 +134,22 @@ static struct ctrl sd_ctrls[] = { .set = sd_setautogain, .get = sd_getautogain, }, +/* ov7630 only */ +#define VFLIP_IDX 4 + { + { + .id = V4L2_CID_VFLIP, + .type = V4L2_CTRL_TYPE_BOOLEAN, + .name = "Vflip", + .minimum = 0, + .maximum = 1, + .step = 1, +#define VFLIP_DEF 0 + .default_value = VFLIP_DEF, + }, + .set = sd_setvflip, + .get = sd_getvflip, + }, }; static struct v4l2_pix_format vga_mode[] = { @@ -450,7 +469,8 @@ static const __u8 ov7630_sensor_init[][8 {0xa1, 0x21, 0x12, 0x48, 0x00, 0x00, 0x00, 0x10}, {0xa1, 0x21, 0x12, 0x48, 0x00, 0x00, 0x00, 0x10}, /*fixme: + 0x12, 0x04*/ - {0xa1, 0x21, 0x75, 0x82, 0x00, 0x00, 0x00, 0x10}, +/* {0xa1, 0x21, 0x75, 0x82, 0x00, 0x00, 0x00, 0x10}, * COMN + * set by setvflip */ {0xa1, 0x21, 0x10, 0x32, 0x00, 0x00, 0x00, 0x10}, {0xa1, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10}, {0xb1, 0x21, 0x01, 0x80, 0x80, 0x00, 0x00, 0x10}, @@ -972,6 +992,8 @@ static int sd_config(struct gspca_dev *g gspca_dev->ctrl_dis = (1 << AUTOGAIN_IDX); break; } + if (sd->sensor != SENSOR_OV7630) + gspca_dev->ctrl_dis |= (1 << VFLIP_IDX); return 0; } @@ -1198,6 +1220,14 @@ static void setautogain(struct gspca_dev sd->ag_cnt = AG_CNT_START; else sd->ag_cnt = -1; +} + +static void setvflip(struct sd *sd) +{ + if (sd->sensor != SENSOR_OV7630) + return; + i2c_w1(&sd->gspca_dev, 0x75, /* COMN */ + sd->vflip ? 0x82 : 0x02); } /* -- start the camera -- */ @@ -1298,6 +1328,7 @@ static void sd_start(struct gspca_dev *g break; case SENSOR_OV7630: ov7630_InitSensor(gspca_dev); + setvflip(sd); reg17 = 0xe2; reg1 = 0x44; break; @@ -1586,6 +1617,23 @@ static int sd_getautogain(struct gspca_d return 0; } +static int sd_setvflip(struct gspca_dev *gspca_dev, __s32 val) +{ + struct sd *sd = (struct sd *) gspca_dev; + + sd->vflip = val; + setvflip(sd); + return 0; +} + +static int sd_getvflip(struct gspca_dev *gspca_dev, __s32 *val) +{ + struct sd *sd = (struct sd *) gspca_dev; + + *val = sd->vflip; + return 0; +} + /* sub-driver description */ static const struct sd_desc sd_desc = { .name = MODULE_NAME, @@ -1607,6 +1655,7 @@ static const __devinitdata struct usb_de static const __devinitdata struct usb_device_id device_table[] = { #if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE {USB_DEVICE(0x0458, 0x7025), BSI(SN9C120, MI0360, 0x5d)}, + {USB_DEVICE(0x0458, 0x702e), BSI(SN9C120, OV7660, 0x21)}, {USB_DEVICE(0x045e, 0x00f5), BSI(SN9C105, OV7660, 0x21)}, {USB_DEVICE(0x045e, 0x00f7), BSI(SN9C105, OV7660, 0x21)}, {USB_DEVICE(0x0471, 0x0327), BSI(SN9C105, MI0360, 0x5d)}, diff -r ed5ea7c1bc82 -r e3f4b17fead0 linux/drivers/media/video/gspca/zc3xx.c --- a/linux/drivers/media/video/gspca/zc3xx.c Mon Sep 08 07:54:27 2008 -0300 +++ b/linux/drivers/media/video/gspca/zc3xx.c Wed Sep 10 23:34:19 2008 -0300 @@ -6581,8 +6581,8 @@ static int setlightfreq(struct gspca_dev cs2102_60HZ, cs2102_60HZScale}, /* SENSOR_CS2102K 1 */ {cs2102_NoFliker, cs2102_NoFlikerScale, - cs2102_50HZ, cs2102_50HZScale, - cs2102_60HZ, cs2102_60HZScale}, + NULL, NULL, /* currently disabled */ + NULL, NULL}, /* SENSOR_GC0305 2 */ {gc0305_NoFliker, gc0305_NoFliker, gc0305_50HZ, gc0305_50HZ, --- Patch is available at: http://linuxtv.org/hg/v4l-dvb/rev/e3f4b17fead05999d37502ea96c16614a2a2a930 _______________________________________________ linuxtv-commits mailing list linuxtv-commits@linuxtv.org http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits