Re: [PULL] http://linuxtv.org/hg/~jfrancois/v4l-dvb/

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Em Sat, 2 May 2009 08:50:59 +0200
Jean-Francois Moine <moinejf@xxxxxxx> escreveu:

> Hi Mauro,
> 
> Please pull from http://linuxtv.org/hg/~jfrancois/v4l-dvb
> 
> for the following 3 changesets:
> 

> 02/03: gspca - tp6800: New subdriver with webcam 06a2:0003.
> http://linuxtv.org/hg/~jfrancois/v4l-dvb?cmd=changeset;node=c3ae07c7c476

This changeset has some troubles. In order to allow others to see and review,
I've copied the changeset bellow.

There are some coding style issues that checkpatch didn't catch. The main one
is the usage of a flow control instruction (goto) inside a macro. This
obfuscates the source code, making life harder for reviewers. I'm c/c the
checkpatch maintainer for him to see if it would be possible to add some rules
to improve checkpatch.pl to catch this and some indentation troubles present on
this code.

Also, the driver is defining a private control for something that is already
supported by V4L2 ioctls.

The other two changesets are OK.

Well, let's take a look at issues with patch 02/03:

> From: Anders Blomdell <anders.blomdell@xxxxxxxxxxxxxx>
> 
> Priority: normal
> 
> Signed-off-by: Anders Blomdell <anders.blomdell@xxxxxxxxxxxxxx>
> Signed-off-by: Jean-Francois Moine <moinejf@xxxxxxx>
> 
> --- a/linux/Documentation/video4linux/gspca.txt	Tue Apr 07 10:30:31 2009 +0200
> +++ b/linux/Documentation/video4linux/gspca.txt	Thu Apr 16 09:04:16 2009 +0200
> @@ -171,6 +171,7 @@ stk014		05e1:0893	Syntek DV4000
>  stk014		05e1:0893	Syntek DV4000
>  spca561		060b:a001	Maxell Compact Pc PM3
>  zc3xx		0698:2003	CTX M730V built in
> +tp6800          06a2:0003       Topro TP6800 / CmoX CX0342 webcam
>  spca500		06bd:0404	Agfa CL20
>  spca500		06be:0800	Optimedia
>  sunplus		06d6:0031	Trust 610 LCD PowerC@m Zoom
> --- a/linux/drivers/media/video/gspca/Kconfig	Tue Apr 07 10:30:31 2009 +0200
> +++ b/linux/drivers/media/video/gspca/Kconfig	Thu Apr 16 09:04:16 2009 +0200
> @@ -222,6 +222,16 @@ config USB_GSPCA_T613
>  	  To compile this driver as a module, choose M here: the
>  	  module will be called gspca_t613.
>  
> +config USB_GSPCA_TP6800
> +	tristate "Topro TP6800 / CmoX CX0342 webcam"
> +	depends on VIDEO_V4L2 && USB_GSPCA
> +	help
> +	  Say Y here if you want support for cameras based on the Topro
> +	  TP6800 / Cmox CX0342 chipsets.
> +
> +	  To compile this driver as a module, choose M here: the
> +	  module will be called gspca_tp6800.
> +
>  config USB_GSPCA_TV8532
>  	tristate "TV8532 USB Camera Driver"
>  	depends on VIDEO_V4L2 && USB_GSPCA
> --- a/linux/drivers/media/video/gspca/Makefile	Tue Apr 07 10:30:31 2009 +0200
> +++ b/linux/drivers/media/video/gspca/Makefile	Thu Apr 16 09:04:16 2009 +0200
> @@ -21,6 +21,7 @@ obj-$(CONFIG_USB_GSPCA_SUNPLUS)  += gspc
>  obj-$(CONFIG_USB_GSPCA_SUNPLUS)  += gspca_sunplus.o
>  obj-$(CONFIG_USB_GSPCA_STK014)   += gspca_stk014.o
>  obj-$(CONFIG_USB_GSPCA_T613)     += gspca_t613.o
> +obj-$(CONFIG_USB_GSPCA_TP6800)   += gspca_tp6800.o
>  obj-$(CONFIG_USB_GSPCA_TV8532)   += gspca_tv8532.o
>  obj-$(CONFIG_USB_GSPCA_VC032X)   += gspca_vc032x.o
>  obj-$(CONFIG_USB_GSPCA_ZC3XX)    += gspca_zc3xx.o
> @@ -48,6 +49,7 @@ gspca_stk014-objs   := stk014.o
>  gspca_stk014-objs   := stk014.o
>  gspca_sunplus-objs  := sunplus.o
>  gspca_t613-objs     := t613.o
> +gspca_tp6800-objs   := tp6800.o
>  gspca_tv8532-objs   := tv8532.o
>  gspca_vc032x-objs   := vc032x.o
>  gspca_zc3xx-objs    := zc3xx.o
> --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
> +++ b/linux/drivers/media/video/gspca/tp6800.c	Thu Apr 16 09:04:16 2009 +0200
> @@ -0,0 +1,1812 @@
> +/* -*- linux-c -*-

Please, don't add emacs or any other editor meta-tags. See Chapter 18 of
Documentation/CodingStyle.

> +enum resolution {
> +	size_320x240, size_640x480
> +};

Enum and define constants should be captalized. See Chapter 12 of
Documentation/CodingStyle.

> +
> +static const __u8 SOI[] = {
> +	/* Start of image */
> +	0xff, 0xd8
> +};
> +
> +static const __u8 SOF0[19] = {
> +	/* Start of frame 0 */
> +	0xff, 0xc0, 0x00, 0x11,
> +	0x08,
> +	0x01, 0xe0,
> +	0x02, 0x80,
> +	0x03,
> +	0x01, 0x21, 0x00,
> +	0x02, 0x11, 0x01,
> +	0x03, 0x11, 0x01,
> +};
> +
> +static const __u8 DHT[] = {
> +	/* Define Huffman table (thanks to Thomas Kaiser) */
> +	0xff, 0xc4, 0x01, 0x5e,
> +	0x00, 0x00, 0x02, 0x03,
> +	0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
> +	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02,
> +	0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10,
> +	0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04,
> +	0x07, 0x05, 0x04, 0x06, 0x01, 0x00, 0x00, 0x57,
> +	0x01, 0x02, 0x03, 0x00, 0x11, 0x04, 0x12, 0x21,
> +	0x31, 0x13, 0x41, 0x51, 0x61, 0x05, 0x22, 0x32,
> +	0x14, 0x71, 0x81, 0x91, 0x15, 0x23, 0x42, 0x52,
> +	0x62, 0xa1, 0xb1, 0x06, 0x33, 0x72, 0xc1, 0xd1,
> +	0x24, 0x43, 0x53, 0x82, 0x16, 0x34, 0x92, 0xa2,
> +	0xe1, 0xf1, 0xf0, 0x07, 0x08, 0x17, 0x18, 0x25,
> +	0x26, 0x27, 0x28, 0x35, 0x36, 0x37, 0x38, 0x44,
> +	0x45, 0x46, 0x47, 0x48, 0x54, 0x55, 0x56, 0x57,
> +	0x58, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x73,
> +	0x74, 0x75, 0x76, 0x77, 0x78, 0x83, 0x84, 0x85,
> +	0x86, 0x87, 0x88, 0x93, 0x94, 0x95, 0x96, 0x97,
> +	0x98, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xb2,
> +	0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xc2, 0xc3,
> +	0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xd2, 0xd3, 0xd4,
> +	0xd5, 0xd6, 0xd7, 0xd8, 0xe2, 0xe3, 0xe4, 0xe5,
> +	0xe6, 0xe7, 0xe8, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6,
> +	0xf7, 0xf8, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
> +	0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
> +	0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04,
> +	0x05, 0x06, 0x07, 0x08, 0x09, 0x11, 0x00, 0x02,
> +	0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05,
> +	0x04, 0x06, 0x01, 0x00, 0x00, 0x57, 0x00, 0x01,
> +	0x11, 0x02, 0x21, 0x03, 0x12, 0x31, 0x41, 0x13,
> +	0x22, 0x51, 0x61, 0x04, 0x32, 0x71, 0x05, 0x14,
> +	0x23, 0x42, 0x33, 0x52, 0x81, 0x91, 0xa1, 0xb1,
> +	0xf0, 0x06, 0x15, 0xc1, 0xd1, 0xe1, 0x24, 0x43,
> +	0x62, 0xf1, 0x16, 0x25, 0x34, 0x53, 0x72, 0x82,
> +	0x92, 0x07, 0x08, 0x17, 0x18, 0x26, 0x27, 0x28,
> +	0x35, 0x36, 0x37, 0x38, 0x44, 0x45, 0x46, 0x47,
> +	0x48, 0x54, 0x55, 0x56, 0x57, 0x58, 0x63, 0x64,
> +	0x65, 0x66, 0x67, 0x68, 0x73, 0x74, 0x75, 0x76,
> +	0x77, 0x78, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
> +	0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0xa2, 0xa3,
> +	0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xb2, 0xb3, 0xb4,
> +	0xb5, 0xb6, 0xb7, 0xb8, 0xc2, 0xc3, 0xc4, 0xc5,
> +	0xc6, 0xc7, 0xc8, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
> +	0xd7, 0xd8, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
> +	0xe8, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
> +};
> +
> +static const __u8 DQT[17][134] = {
> +	/* Define quantization table (thanks to Thomas Kaiser) */
> +	{			/* Quality 0 */
> +	 0xff, 0xdb, 0x00, 0x84,

Indentation is wrong here. Instead of a simple space, you should be adding a
tab (see Chapter 1). It should be something like this:

static foo[a][b] = {
	{
		data1, data2,
	}, {
		data3, data4,
	}
};

> +	 0x00,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x01,
> +	 0x04, 0x04, 0x04, 0x06, 0x05, 0x06, 0x0b, 0x06,
> +	 0x06, 0x0b, 0x18, 0x10, 0x0e, 0x10, 0x18, 0x18,
> +	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
> +	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
> +	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
> +	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
> +	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
> +	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
> +	 },
> +	{			/* Quality 1 */
> +	 0xff, 0xdb, 0x00, 0x84,
> +	 0x00,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x09, 0x09, 0x09, 0x09, 0x09,
> +	 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
> +	 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
> +	 0x01,
> +	 0x08, 0x09, 0x09, 0x0c, 0x0a, 0x0c, 0x17, 0x0d,
> +	 0x0d, 0x17, 0x31, 0x21, 0x1c, 0x21, 0x31, 0x31,
> +	 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
> +	 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
> +	 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
> +	 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
> +	 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
> +	 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
> +	 },
> +	{			/* Quality 2 */
> +	 0xff, 0xdb, 0x00, 0x84,
> +	 0x00,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x06, 0x06, 0x06, 0x04, 0x04, 0x04,
> +	 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
> +	 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
> +	 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
> +	 0x06, 0x06, 0x06, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
> +	 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
> +	 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
> +	 0x01,
> +	 0x0c, 0x0d, 0x0d, 0x12, 0x0f, 0x12, 0x23, 0x13,
> +	 0x13, 0x23, 0x4a, 0x31, 0x2a, 0x31, 0x4a, 0x4a,
> +	 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
> +	 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
> +	 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
> +	 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
> +	 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
> +	 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
> +	 },
> +	{			/* Quality 3 */
> +	 0xff, 0xdb, 0x00, 0x84,
> +	 0x00,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04,
> +	 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
> +	 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
> +	 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
> +	 0x08, 0x08, 0x08, 0x13, 0x13, 0x13, 0x13, 0x13,
> +	 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
> +	 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
> +	 0x01,
> +	 0x11, 0x12, 0x12, 0x18, 0x15, 0x18, 0x2f, 0x1a,
> +	 0x1a, 0x2f, 0x63, 0x42, 0x38, 0x42, 0x63, 0x63,
> +	 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
> +	 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
> +	 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
> +	 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
> +	 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
> +	 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
> +	 },
> +	{			/* Quality 4 */
> +	 0xff, 0xdb, 0x00, 0x84,
> +	 0x00,
> +	 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
> +	 0x05, 0x05, 0x0a, 0x0a, 0x0a, 0x05, 0x05, 0x05,
> +	 0x05, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
> +	 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
> +	 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
> +	 0x0a, 0x0a, 0x0a, 0x17, 0x17, 0x17, 0x17, 0x17,
> +	 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
> +	 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
> +	 0x01,
> +	 0x11, 0x16, 0x16, 0x1e, 0x1a, 0x1e, 0x3a, 0x20,
> +	 0x20, 0x3a, 0x7b, 0x52, 0x46, 0x52, 0x7b, 0x7b,
> +	 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
> +	 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
> +	 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
> +	 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
> +	 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
> +	 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
> +	 },
> +	{			/* Quality 5 */
> +	 0xff, 0xdb, 0x00, 0x84,
> +	 0x00,
> +	 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
> +	 0x06, 0x06, 0x0c, 0x0c, 0x0c, 0x06, 0x06, 0x06,
> +	 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
> +	 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
> +	 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
> +	 0x0c, 0x0c, 0x0c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
> +	 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
> +	 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
> +	 0x01,
> +	 0x11, 0x1b, 0x1b, 0x24, 0x1f, 0x24, 0x46, 0x27,
> +	 0x27, 0x46, 0x94, 0x63, 0x54, 0x63, 0x94, 0x94,
> +	 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
> +	 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
> +	 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
> +	 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
> +	 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
> +	 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
> +	 },
> +	{			/* Quality 6 */
> +	 0xff, 0xdb, 0x00, 0x84,
> +	 0x00,
> +	 0x05, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
> +	 0x07, 0x07, 0x0e, 0x0e, 0x0e, 0x07, 0x07, 0x07,
> +	 0x07, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
> +	 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
> +	 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
> +	 0x0e, 0x0e, 0x0e, 0x21, 0x21, 0x21, 0x21, 0x21,
> +	 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
> +	 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
> +	 0x01,
> +	 0x15, 0x1f, 0x1f, 0x2a, 0x24, 0x2a, 0x52, 0x2d,
> +	 0x2d, 0x52, 0xad, 0x73, 0x62, 0x73, 0xad, 0xad,
> +	 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
> +	 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
> +	 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
> +	 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
> +	 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
> +	 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
> +	 },
> +	{			/* Quality 7 */
> +	 0xff, 0xdb, 0x00, 0x84,
> +	 0x00,
> +	 0x05, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
> +	 0x08, 0x08, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08,
> +	 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
> +	 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
> +	 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
> +	 0x10, 0x10, 0x10, 0x26, 0x26, 0x26, 0x26, 0x26,
> +	 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,
> +	 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,
> +	 0x01,
> +	 0x15, 0x24, 0x24, 0x30, 0x2a, 0x30, 0x5e, 0x34,
> +	 0x34, 0x5e, 0xc6, 0x84, 0x70, 0x84, 0xc6, 0xc6,
> +	 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
> +	 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
> +	 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
> +	 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
> +	 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
> +	 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
> +	 },
> +	{			/* Quality 8 */
> +	 0xff, 0xdb, 0x00, 0x84,
> +	 0x00,
> +	 0x06, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
> +	 0x0a, 0x0a, 0x14, 0x14, 0x14, 0x0a, 0x0a, 0x0a,
> +	 0x0a, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
> +	 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
> +	 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
> +	 0x14, 0x14, 0x14, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f,
> +	 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f,
> +	 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f,
> +	 0x01,
> +	 0x19, 0x2d, 0x2d, 0x3c, 0x34, 0x3c, 0x75, 0x41,
> +	 0x41, 0x75, 0xf7, 0xa5, 0x8c, 0xa5, 0xf7, 0xf7,
> +	 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
> +	 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
> +	 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
> +	 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
> +	 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
> +	 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
> +	 },
> +	{			/* Quality 9 */
> +	 0xff, 0xdb, 0x00, 0x84,
> +	 0x00,
> +	 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
> +	 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x0c,
> +	 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
> +	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
> +	 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
> +	 0x18, 0x18, 0x18, 0x39, 0x39, 0x39, 0x39, 0x39,
> +	 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39,
> +	 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39,
> +	 0x01,
> +	 0x19, 0x36, 0x36, 0x48, 0x3f, 0x48, 0x8d, 0x4e,
> +	 0x4e, 0x8d, 0xff, 0xc6, 0xa8, 0xc6, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 },
> +	{			/* Quality 10 */
> +	 0xff, 0xdb, 0x00, 0x84,
> +	 0x00,
> +	 0x07, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
> +	 0x0e, 0x0e, 0x1c, 0x1c, 0x1c, 0x0e, 0x0e, 0x0e,
> +	 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
> +	 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
> +	 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
> +	 0x1c, 0x1c, 0x1c, 0x42, 0x42, 0x42, 0x42, 0x42,
> +	 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
> +	 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
> +	 0x01,
> +	 0x1d, 0x3f, 0x3f, 0x54, 0x49, 0x54, 0xa4, 0x5b,
> +	 0x5b, 0xa4, 0xff, 0xe7, 0xc4, 0xe7, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 },
> +	{			/* Quality 11 */
> +	 0xff, 0xdb, 0x00, 0x84,
> +	 0x00,
> +	 0x07, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
> +	 0x10, 0x10, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10,
> +	 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
> +	 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
> +	 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
> +	 0x20, 0x20, 0x20, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
> +	 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
> +	 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
> +	 0x01,
> +	 0x1d, 0x48, 0x48, 0x60, 0x54, 0x60, 0xbc, 0x68,
> +	 0x68, 0xbc, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 },
> +	{			/* Quality 12 */
> +	 0xff, 0xdb, 0x00, 0x84,
> +	 0x00,
> +	 0x08, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
> +	 0x14, 0x14, 0x28, 0x28, 0x28, 0x14, 0x14, 0x14,
> +	 0x14, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
> +	 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
> +	 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
> +	 0x28, 0x28, 0x28, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
> +	 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
> +	 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
> +	 0x01,
> +	 0x22, 0x5a, 0x5a, 0x78, 0x69, 0x78, 0xeb, 0x82,
> +	 0x82, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 },
> +	{			/* Quality 13 */
> +	 0xff, 0xdb, 0x00, 0x84,
> +	 0x00,
> +	 0x08, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
> +	 0x18, 0x18, 0x30, 0x30, 0x30, 0x18, 0x18, 0x18,
> +	 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
> +	 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
> +	 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
> +	 0x30, 0x30, 0x30, 0x72, 0x72, 0x72, 0x72, 0x72,
> +	 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72,
> +	 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72,
> +	 0x01,
> +	 0x22, 0x6c, 0x6c, 0x90, 0x7e, 0x90, 0xff, 0x9c,
> +	 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 },
> +	{			/* Quality 14 */
> +	 0xff, 0xdb, 0x00, 0x84,
> +	 0x00,
> +	 0x0a, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
> +	 0x1c, 0x1c, 0x38, 0x38, 0x38, 0x1c, 0x1c, 0x1c,
> +	 0x1c, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
> +	 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
> +	 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
> +	 0x38, 0x38, 0x38, 0x85, 0x85, 0x85, 0x85, 0x85,
> +	 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
> +	 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
> +	 0x01,
> +	 0x2a, 0x7e, 0x7e, 0xa8, 0x93, 0xa8, 0xff, 0xb6,
> +	 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 },
> +	{			/* Quality 15 */
> +	 0xff, 0xdb, 0x00, 0x84,
> +	 0x00,
> +	 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
> +	 0x20, 0x20, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20,
> +	 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
> +	 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
> +	 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
> +	 0x40, 0x40, 0x40, 0x98, 0x98, 0x98, 0x98, 0x98,
> +	 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
> +	 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
> +	 0x01,
> +	 0x2a, 0x90, 0x90, 0xc0, 0xa8, 0xc0, 0xff, 0xd0,
> +	 0xd0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
> +	 },
> +	{			/* Quality 16-31 */
> +	 0xff, 0xdb, 0x00, 0x84,
> +	 0x00,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x01,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
> +	 }
> +};
> +
> +static const __u8 SOS[] = {
> +	/* SOS (start of scan) */
> +	0xff, 0xda, 0x00, 0x0c,
> +	0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00,
> +};
> +
> +struct sd {
> +	struct gspca_dev gspca_dev;	/* !! must be the first item */
> +
> +	unsigned char quality;
> +	unsigned int framerate;
> +	unsigned int rgain;
> +	unsigned int grgain;
> +	unsigned int gbgain;
> +	unsigned int bgain;
> +};
> +
> +static const struct v4l2_pix_format vga_mode[] = {
> +	{
> +		320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
> +		.bytesperline = 320,
> +		.sizeimage = 320 * 240 + 590,
> +		.colorspace = V4L2_COLORSPACE_JPEG,
> +		.priv = size_320x240
> +	},
> +	{
> +		640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
> +		.bytesperline = 640,
> +		.sizeimage = 640 * 480 + 590,
> +		.colorspace = V4L2_COLORSPACE_JPEG,
> +		.priv = size_640x480},
> +};
> +
> +#define BULK_OUT_SIZE		0x20
> +
> +static int reg_w(struct gspca_dev *gspca_dev, __u8 index, __u8 value)
> +{
> +	struct usb_device *dev = gspca_dev->dev;
> +	int res;
> +
> +	res = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
> +			      0x0e,
> +			      (USB_DIR_OUT | USB_TYPE_VENDOR |
> +			       USB_RECIP_INTERFACE), value, index, NULL, 0,
> +			      500);
> +	/* printk("%x = write(%x, %x)\n", res, index, value); */
> +	return res;
> +}
> +
> +#define REG_W(dev, index, value)					\
> +	do {								\
> +		res = reg_w(dev, index, value);				\
> +		if (res < 0) {						\
> +			PDEBUG(D_PROBE, "reg_w failure %s:%d:%d",	\
> +			       __FILE__, __LINE__, res);		\
> +			goto out;					\
> +		}							\
> +	} while (0);

Huh? Are you doing a goto to something undefined (or defined elsewhere)? Don't
do that! Your code will be hard to understand if you're doing such tricks.
Also, Chapter 12 of CodingStyle says that it is really a bad idea to to add
instructions that affects flow control inside macros.

> +
> +static int reg_r(struct gspca_dev *gspca_dev, __u8 index, __u8 *value)
> +{
> +	struct usb_device *dev = gspca_dev->dev;
> +	int res;
> +
> +	res = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), 0x0d,
> +			      (USB_DIR_IN | USB_TYPE_VENDOR |
> +			       USB_RECIP_INTERFACE), 0, index, value, 1, 500);
> +	/* printk("%x = read(%x, %x)\n", res, index, *value); */
> +	return res == 1 ? 0 : res;
> +}
> +
> +#define REG_R(dev, index, value)					\
> +	do {								\
> +		res = reg_r(dev, index, value);				\
> +		if (res < 0) {						\
> +			PDEBUG(D_PROBE, "reg_r failure %s:%d:%d",	\
> +			       __FILE__, __LINE__, res);		\
> +			goto out;					\
> +		}							\
> +	} while (0);
> +
> +static int cx0342_w(struct gspca_dev *gspca_dev, __u8 index, __u8 value)
> +{
> +	int res = 0;
> +
> +	REG_W(gspca_dev, TP6800_SIF_ADDR_S, 0x20);
> +	REG_W(gspca_dev, TP6800_SIF_ADDR_S2, index);
> +	REG_W(gspca_dev, TP6800_SIF_TX_DATA, value);
> +	REG_W(gspca_dev, TP6800_SIF_CONTROL, 0x01);
> +out:
> +	return res;
> +}

Why are you declaring "out:" label here? It is not used (well, it shouldn't be
used, since flow controls inside macros are forbidden).

Please remove it and convert to a code that won't do such tricks. I suggest you
to create a function that receives a block of register/values and do a for,
returning -EINVAL if an error is found. Then, all you need to to is to call the
function and return its error.

> +
> +#define CX0342_W(dev, index, value)					\
> +	do {								\
> +		res = cx0342_w(dev, index, value);			\
> +		if (res < 0) {						\
> +			PDEBUG(D_PROBE, "cx0342_w failure %s:%d:%d",	\
> +			       __FILE__, __LINE__, res);		\
> +			goto out;					\
> +		}							\
> +	} while (0);
> +

The same obfuscated goto inside a macro. Please, don't do it.

> +
> +static int bulk_w(struct gspca_dev *gspca_dev,
> +		  __u8 tag,
> +		  const __u8 *data,
> +		  int length)
> +
> +{
> +	struct usb_device *dev = gspca_dev->dev;
> +	int res = 0;
> +	__u8 buf[BULK_OUT_SIZE];
> +	int start, count, actual_count;
> +
> +	count = 0;
> +	for (start = 0; start < length;) {
> +		int i;
> +
> +		buf[0] = tag;
> +		for (i = 0;
> +		     ((i < BULK_OUT_SIZE - 1) && (start + i < length)); i++) {
> +			buf[i + 1] = data[start + i];
> +			count = i + 2;
> +		}
> +		res = usb_bulk_msg(dev,
> +				   usb_sndbulkpipe(dev, 3),
> +				   buf, count, &actual_count, 500);
> +		if (res < 0 || count != actual_count) {
> +			PDEBUG(D_ERR, "bulk write error tag=%2.2x %d",
> +			       tag, res);
> +			goto out;
> +		}
> +		start = start + count - 1;
> +	}
> +out:
> +	return res;
> +}
> +
> +#define BULK_W(dev, tag, data, length)					\
> +	do {								\
> +		res = bulk_w(dev, tag, data, length);			\
> +		if (res < 0) {						\
> +			PDEBUG(D_PROBE, "bulk_w failure %s:%d:%d",	\
> +			       __FILE__, __LINE__, res);		\
> +			goto out;					\
> +		}							\
> +	} while (0);
> +

The same obfuscated goto inside a macro. Please, don't do it.

> +
> +static const __u8 quality_map[17] = {
> +	15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 16
> +};
> +
> +static int write_quality(struct gspca_dev *gspca_dev)
> +{
> +	int res = 0;
> +	struct sd *sd = (struct sd *)gspca_dev;
> +
> +	if (0 <= sd->quality && sd->quality <= 16)
> +		REG_W(gspca_dev, TP6800_QUALITY, quality_map[sd->quality]);
> +out:

Again. Please remove goto labels where the goto instruction doesn't exist.

> +	return res;
> +}
> +
> +static const __u8 color_gain[18] = {
> +	0x4c, 0x00, 0xa9, 0x00, 0x31, 0x00,
> +	0xb6, 0x03, 0x6c, 0x03, 0xe0, 0x00,
> +	0xdf, 0x00, 0x46, 0x03, 0xdc, 0x03
> +};
> +
> +static const __u8 gamma[3][1024] = {
> +	{
> +	 0x00, 0x01, 0x02, 0x05, 0x07, 0x08, 0x0a, 0x0c,
> +	 0x0d, 0x0e, 0x10, 0x12, 0x14, 0x15, 0x16, 0x17,
> +	 0x18, 0x1a, 0x1b, 0x1c, 0x1e, 0x1f, 0x20, 0x22,
> +	 0x23, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2b, 0x2c,
> +	 0x2d, 0x2d, 0x2f, 0x30, 0x31, 0x33, 0x34, 0x34,
> +	 0x35, 0x37, 0x38, 0x38, 0x39, 0x3a, 0x3b, 0x3b,
> +	 0x3c, 0x3d, 0x3f, 0x3f, 0x40, 0x42, 0x42, 0x43,
> +	 0x44, 0x44, 0x45, 0x47, 0x47, 0x48, 0x49, 0x49,
> +	 0x4a, 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4f, 0x4f,
> +	 0x50, 0x50, 0x52, 0x53, 0x53, 0x54, 0x54, 0x55,
> +	 0x55, 0x56, 0x56, 0x58, 0x58, 0x59, 0x5a, 0x5a,
> +	 0x5b, 0x5b, 0x5c, 0x5c, 0x5e, 0x5e, 0x5f, 0x5f,
> +	 0x60, 0x60, 0x61, 0x61, 0x62, 0x62, 0x63, 0x63,
> +	 0x65, 0x65, 0x65, 0x66, 0x66, 0x67, 0x67, 0x68,
> +	 0x68, 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6c, 0x6c,
> +	 0x6d, 0x6d, 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x70,
> +	 0x70, 0x70, 0x71, 0x71, 0x73, 0x73, 0x73, 0x74,
> +	 0x74, 0x75, 0x75, 0x75, 0x77, 0x77, 0x78, 0x78,
> +	 0x78, 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7b, 0x7b,
> +	 0x7b, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7f, 0x7f,
> +	 0x7f, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82,
> +	 0x82, 0x82, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85,
> +	 0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x89, 0x89,
> +	 0x89, 0x8a, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8d,
> +	 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f,
> +	 0x8f, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
> +	 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93, 0x94,
> +	 0x94, 0x94, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97,
> +	 0x97, 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99,
> +	 0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b,
> +	 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e,
> +	 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0, 0xa1,
> +	 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa2, 0xa3,
> +	 0xa3, 0xa3, 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5,
> +	 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8,
> +	 0xa8, 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
> +	 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xad,
> +	 0xad, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae,
> +	 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb0,
> +	 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2,
> +	 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4, 0xb4,
> +	 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7,
> +	 0xb7, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8,
> +	 0xb8, 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba,
> +	 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd,
> +	 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe,
> +	 0xbe, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0,
> +	 0xc0, 0xc0, 0xc0, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3,
> +	 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4,
> +	 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6,
> +	 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7,
> +	 0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
> +	 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
> +	 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd,
> +	 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce, 0xce,
> +	 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0,
> +	 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1,
> +	 0xd1, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4,
> +	 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6,
> +	 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8,
> +	 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
> +	 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
> +	 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd,
> +	 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde,
> +	 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0,
> +	 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1,
> +	 0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
> +	 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4,
> +	 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5,
> +	 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
> +	 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8,
> +	 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9,
> +	 0xe9, 0xe9, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
> +	 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed, 0xed,
> +	 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee,
> +	 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
> +	 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1,
> +	 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
> +	 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5,
> +	 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
> +	 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
> +	 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9,
> +	 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfa,
> +	 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
> +	 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 },

Indentation is wrong.

> +	{
> +	 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x05,
> +	 0x07, 0x08, 0x09, 0x0a, 0x0d, 0x0e, 0x10, 0x11,
> +	 0x12, 0x14, 0x15, 0x16, 0x16, 0x17, 0x18, 0x1a,
> +	 0x1b, 0x1c, 0x1e, 0x1f, 0x20, 0x20, 0x22, 0x23,
> +	 0x25, 0x26, 0x26, 0x27, 0x28, 0x29, 0x29, 0x2b,
> +	 0x2c, 0x2d, 0x2d, 0x2f, 0x30, 0x30, 0x31, 0x33,
> +	 0x33, 0x34, 0x35, 0x35, 0x37, 0x38, 0x38, 0x39,
> +	 0x3a, 0x3a, 0x3b, 0x3b, 0x3c, 0x3d, 0x3d, 0x3f,
> +	 0x3f, 0x40, 0x42, 0x42, 0x43, 0x43, 0x44, 0x44,
> +	 0x45, 0x45, 0x47, 0x47, 0x48, 0x48, 0x49, 0x4a,
> +	 0x4a, 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4d, 0x4d,
> +	 0x4f, 0x4f, 0x50, 0x50, 0x52, 0x52, 0x53, 0x53,
> +	 0x54, 0x54, 0x55, 0x55, 0x56, 0x56, 0x56, 0x58,
> +	 0x58, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b,
> +	 0x5c, 0x5c, 0x5c, 0x5e, 0x5e, 0x5f, 0x5f, 0x5f,
> +	 0x60, 0x60, 0x61, 0x61, 0x61, 0x62, 0x62, 0x63,
> +	 0x63, 0x63, 0x65, 0x65, 0x65, 0x66, 0x66, 0x67,
> +	 0x67, 0x67, 0x68, 0x68, 0x68, 0x69, 0x69, 0x69,
> +	 0x6a, 0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d,
> +	 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70,
> +	 0x70, 0x71, 0x71, 0x71, 0x73, 0x73, 0x73, 0x73,
> +	 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x77, 0x77,
> +	 0x77, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79, 0x79,
> +	 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7b, 0x7c,
> +	 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7d, 0x7f, 0x7f,
> +	 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81,
> +	 0x82, 0x82, 0x82, 0x82, 0x84, 0x84, 0x84, 0x84,
> +	 0x85, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86, 0x88,
> +	 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x89, 0x8a,
> +	 0x8a, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8b, 0x8d,
> +	 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8e, 0x8f,
> +	 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x90, 0x91,
> +	 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92, 0x92,
> +	 0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x94,
> +	 0x94, 0x96, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97,
> +	 0x97, 0x98, 0x98, 0x98, 0x98, 0x98, 0x99, 0x99,
> +	 0x99, 0x99, 0x99, 0x9a, 0x9a, 0x9a, 0x9a, 0x9b,
> +	 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9c,
> +	 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e,
> +	 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa1,
> +	 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa2,
> +	 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
> +	 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
> +	 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8,
> +	 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
> +	 0xab, 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac,
> +	 0xac, 0xac, 0xad, 0xad, 0xad, 0xad, 0xad, 0xae,
> +	 0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xaf,
> +	 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb1,
> +	 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2,
> +	 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
> +	 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6,
> +	 0xb6, 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
> +	 0xb7, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb9,
> +	 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xba,
> +	 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
> +	 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe,
> +	 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xbf,
> +	 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
> +	 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3,
> +	 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4,
> +	 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5,
> +	 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7,
> +	 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9,
> +	 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca,
> +	 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc,
> +	 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd,
> +	 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce,
> +	 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
> +	 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1,
> +	 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3,
> +	 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4,
> +	 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
> +	 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8,
> +	 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9,
> +	 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda,
> +	 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
> +	 0xdb, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
> +	 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf,
> +	 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0,
> +	 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
> +	 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
> +	 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4,
> +	 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
> +	 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6,
> +	 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
> +	 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9,
> +	 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
> +	 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
> +	 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
> +	 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xef,
> +	 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0,
> +	 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
> +	 0xf1, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4,
> +	 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5,
> +	 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6,
> +	 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
> +	 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9,
> +	 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa,
> +	 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 },
> +	{
> +	 0x00, 0x00, 0x00, 0x01, 0x02, 0x05, 0x07, 0x08,
> +	 0x09, 0x0a, 0x0c, 0x0e, 0x10, 0x11, 0x12, 0x14,
> +	 0x15, 0x16, 0x17, 0x18, 0x1a, 0x1b, 0x1c, 0x1e,
> +	 0x1f, 0x20, 0x20, 0x22, 0x23, 0x25, 0x26, 0x27,
> +	 0x28, 0x28, 0x29, 0x2b, 0x2c, 0x2d, 0x2d, 0x2f,
> +	 0x30, 0x31, 0x31, 0x33, 0x34, 0x35, 0x35, 0x37,
> +	 0x38, 0x38, 0x39, 0x3a, 0x3a, 0x3b, 0x3c, 0x3c,
> +	 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x42, 0x43, 0x43,
> +	 0x44, 0x44, 0x45, 0x47, 0x47, 0x48, 0x48, 0x49,
> +	 0x4a, 0x4a, 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4d,
> +	 0x4f, 0x4f, 0x50, 0x50, 0x52, 0x52, 0x53, 0x53,
> +	 0x54, 0x54, 0x55, 0x55, 0x56, 0x56, 0x58, 0x58,
> +	 0x59, 0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c,
> +	 0x5c, 0x5e, 0x5e, 0x5f, 0x5f, 0x60, 0x60, 0x61,
> +	 0x61, 0x61, 0x62, 0x62, 0x63, 0x63, 0x65, 0x65,
> +	 0x65, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68, 0x68,
> +	 0x69, 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6c, 0x6c,
> +	 0x6d, 0x6d, 0x6d, 0x6e, 0x6e, 0x6e, 0x6f, 0x6f,
> +	 0x70, 0x70, 0x70, 0x71, 0x71, 0x71, 0x73, 0x73,
> +	 0x73, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x77,
> +	 0x77, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79, 0x7a,
> +	 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c,
> +	 0x7c, 0x7d, 0x7d, 0x7d, 0x7f, 0x7f, 0x7f, 0x80,
> +	 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x82, 0x82,
> +	 0x82, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85,
> +	 0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89,
> +	 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b, 0x8b,
> +	 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e,
> +	 0x8e, 0x8f, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90,
> +	 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92, 0x92,
> +	 0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x94,
> +	 0x96, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97, 0x97,
> +	 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x99,
> +	 0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b,
> +	 0x9b, 0x9c, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d,
> +	 0x9d, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0,
> +	 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2,
> +	 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4,
> +	 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5,
> +	 0xa5, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8,
> +	 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
> +	 0xab, 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac,
> +	 0xad, 0xad, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae,
> +	 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0,
> +	 0xb0, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1,
> +	 0xb1, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3,
> +	 0xb3, 0xb3, 0xb3, 0xb4, 0xb3, 0xb4, 0xb4, 0xb4,
> +	 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
> +	 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
> +	 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba,
> +	 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
> +	 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe,
> +	 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
> +	 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2,
> +	 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3,
> +	 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5,
> +	 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6,
> +	 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
> +	 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
> +	 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb,
> +	 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
> +	 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce,
> +	 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
> +	 0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
> +	 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3,
> +	 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4,
> +	 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
> +	 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8,
> +	 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9,
> +	 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
> +	 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd,
> +	 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
> +	 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
> +	 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
> +	 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
> +	 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3,
> +	 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
> +	 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6,
> +	 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7,
> +	 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
> +	 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
> +	 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec,
> +	 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed, 0xed,
> +	 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee,
> +	 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
> +	 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1,
> +	 0xf1, 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3, 0xf3,
> +	 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4,
> +	 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6,
> +	 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7,
> +	 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8,
> +	 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
> +	 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
> +	 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
> +	 }
> +};
> +
> +static int program_timing_registers(struct gspca_dev *gspca_dev)
> +{
> +	int res = 0;
> +
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_0_1_L_irst, 0x20);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_0_2_L_irst, 0x24);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_0_2_H_irst, 0x00);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_0_3_L_irst, 0x2f);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_0_3_H_irst, 0x00);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_1_0_L_itx, 0x02);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_1_0_H_itx, 0x00);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_1_1_L_itx, 0x20);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_1_1_H_itx, 0x00);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_1_2_L_itx, 0xe4);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_1_2_H_itx, 0x00);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_1_3_L_itx, 0xee);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_1_3_H_itx, 0x00);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_2_0_L_iwl, 0x30);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_2_0_H_iwl, 0x00);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_3_0_L_ensp, 0x34);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_3_1_L_ensp, 0xe2);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_3_1_H_ensp, 0x00);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_3_2_L_ensp, 0xf6);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_3_2_H_ensp, 0x00);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_3_3_L_ensp, 0xf4);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_3_3_H_ensp, 0x02);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_4_0_L_sela, 0x26);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_4_0_H_sela, 0x00);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_4_1_L_sela, 0xe2);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_4_1_H_sela, 0x00);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_5_0_L_intla, 0x26);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_5_1_L_intla, 0x29);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_5_2_L_intla, 0xf0);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_5_2_H_intla, 0x00);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_5_3_L_intla, 0xf3);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_5_3_H_intla, 0x00);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_6_0_L_xa_sel_pos, 0x24);
> +	CX0342_W(gspca_dev, CX0342_CHANNEL_7_1_L_cds_pos, 0x02);
> +	CX0342_W(gspca_dev, CX0342_TIMING_EN, 0x01);
> +out:

Idem.

> +	return res;
> +
> +}
> +
> +static int set_resolution(struct gspca_dev *gspca_dev,
> +			  enum resolution resolution)
> +{
> +	int res = 0;
> +
> +	if (resolution == size_320x240) {
> +		/* size_320x240 */
> +		REG_W(gspca_dev, TP6800_ENDP_1_CTL, 0x00);
> +		REG_W(gspca_dev, TP6800_FRAME_RATE, 0x06);
> +		msleep(100);
> +		CX0342_W(gspca_dev, CX0342_AUTO_ADC_CALIB, 0x01);
> +		msleep(100);
> +		REG_W(gspca_dev, TP6800_ENDP_1_CTL, 0x03);
> +		REG_W(gspca_dev, TP6800_FORMAT, 0x01);
> +		REG_W(gspca_dev, TP6800_DEMOSAIC_CFG, 0x0d);
> +		CX0342_W(gspca_dev, CX0342_EXPO_LINE_L, 0x37);
> +		CX0342_W(gspca_dev, CX0342_EXPO_LINE_H, 0x01);
> +		CX0342_W(gspca_dev, CX0342_SYS_CTRL_0, 0x01);
> +	} else {
> +		/* size_640x480 */
> +		REG_W(gspca_dev, TP6800_ENDP_1_CTL, 0x00);
> +		REG_W(gspca_dev, TP6800_FRAME_RATE, 0x05);
> +		msleep(100);
> +		CX0342_W(gspca_dev, CX0342_AUTO_ADC_CALIB, 0x01);
> +		msleep(100);
> +		REG_W(gspca_dev, TP6800_ENDP_1_CTL, 0x03);
> +		REG_W(gspca_dev, TP6800_FORMAT, 0x00);
> +		REG_W(gspca_dev, TP6800_DEMOSAIC_CFG, 0x09);
> +		CX0342_W(gspca_dev, CX0342_EXPO_LINE_L, 0xcf);
> +		CX0342_W(gspca_dev, CX0342_EXPO_LINE_H, 0x00);
> +		CX0342_W(gspca_dev, CX0342_SYS_CTRL_0, 0x01);
> +	}
> +	BULK_W(gspca_dev, 0x03, color_gain, 18);
> +	REG_W(gspca_dev, TP6800_ENDP_1_CTL, 0x00);
> +	msleep(200);
> +	BULK_W(gspca_dev, 0x00, gamma[0], 1024);
> +	BULK_W(gspca_dev, 0x01, gamma[1], 1024);
> +	BULK_W(gspca_dev, 0x02, gamma[2], 1024);
> +	msleep(200);
> +	REG_W(gspca_dev, TP6800_ENDP_1_CTL, 0x03);
> +	res = write_quality(gspca_dev);
> +out:

Idem.

> +	return res;
> +}
> +
> +static const char *framerate_menu[7] = {
> +	"2.5 frames/s",
> +	"5 frames/s",
> +	"7 frames/s",
> +	"10 frames/s",
> +	"15 frames/s",
> +	"20 frames/s",
> +	"30 frames/s"
> +};
> +
> +static int sd_querymenu(struct gspca_dev *gspca_dev,
> +			struct v4l2_querymenu *menu)
> +{
> +	switch (menu->id) {
> +	case V4L2_CID_PRIVATE_BASE + 1:{
> +			if (0 <= menu->index && menu->index <= 6) {
> +				strcpy(menu->name, framerate_menu[menu->index]);
> +				return 0;
> +			}
> +		}
> +		break;
> +	}

Another CodingStyle issue here: why are you enclosing the case condition with
'{' ? You shouldn't be doing this. You don't need any var inside that block.

Also, the hole idea of creating a private control for changing the frame rate
is wrong. There are standard ioctls that are meant to specify the frame rate.
The proper way is to implement VIDIOC_G_PARM and VIDIOC_S_PARM. If you need to
enumerate the supported formats, you should use VIDIOC_ENUM_FRAMEINTERVALS.

> +	return -EINVAL;
> +}
> +
> +static int sd_setquality(struct gspca_dev *gspca_dev, __s32 val)
> +{
> +	int res = 0;
> +	struct sd *sd = (struct sd *)gspca_dev;
> +
> +	sd->quality = val;
> +	res = write_quality(gspca_dev);
> +	return res;
> +}
> +
> +static int sd_getquality(struct gspca_dev *gspca_dev, __s32 *val)
> +{
> +	struct sd *sd = (struct sd *)gspca_dev;
> +
> +	*val = sd->quality;
> +	return 0;
> +}
> +
> +static int sd_setframerate(struct gspca_dev *gspca_dev, __s32 val)
> +{
> +	int res = 0;
> +	struct sd *sd = (struct sd *)gspca_dev;
> +
> +	if (val == 6) {
> +		if (vga_mode[gspca_dev->curr_mode].priv == size_320x240) {
> +			REG_W(gspca_dev, TP6800_FRAME_RATE, 0x06);
> +		} else {
> +			/* Full clockrate does not seem to work here*/
> +			REG_W(gspca_dev, TP6800_FRAME_RATE, 0x05);
> +		}
> +	} else if (0 <= val && val <= 6) {
> +		REG_W(gspca_dev, TP6800_FRAME_RATE, val);
> +	}
> +	CX0342_W(gspca_dev, CX0342_AUTO_ADC_CALIB, 0x01);
> +	sd->framerate = val;
> +out:

Idem.

> +	return res;
> +}
> +
> +static int sd_getframerate(struct gspca_dev *gspca_dev, __s32 *val)
> +{
> +	struct sd *sd = (struct sd *)gspca_dev;
> +
> +	*val = sd->framerate;
> +	return 0;
> +}
> +
> +static int sd_setrgain(struct gspca_dev *gspca_dev, __s32 val)
> +{
> +	int res = 0;
> +	struct sd *sd = (struct sd *)gspca_dev;
> +
> +	sd->rgain = val;
> +	CX0342_W(gspca_dev, CX0342_RAW_RGAIN_H, (sd->rgain >> 8) & 0x0f);
> +	CX0342_W(gspca_dev, CX0342_RAW_RGAIN_L, sd->rgain & 0xff);
> +	CX0342_W(gspca_dev, CX0342_SYS_CTRL_0, 0x80);
> +out:

Idem.

> +	return res;
> +}
> +
> +static int sd_getrgain(struct gspca_dev *gspca_dev, __s32 *val)
> +{
> +	struct sd *sd = (struct sd *)gspca_dev;
> +
> +	*val = sd->rgain;
> +	return 0;
> +}
> +
> +static int sd_setgrgain(struct gspca_dev *gspca_dev, __s32 val)
> +{
> +	int res = 0;
> +	struct sd *sd = (struct sd *)gspca_dev;
> +
> +	sd->grgain = val;
> +	CX0342_W(gspca_dev, CX0342_RAW_GRGAIN_H, (sd->grgain >> 8) & 0x0f);
> +	CX0342_W(gspca_dev, CX0342_RAW_GRGAIN_L, sd->grgain & 0xff);
> +	CX0342_W(gspca_dev, CX0342_SYS_CTRL_0, 0x80);
> +out:

Idem.

> +	return res;
> +}
> +
> +static int sd_getgrgain(struct gspca_dev *gspca_dev, __s32 *val)
> +{
> +	struct sd *sd = (struct sd *)gspca_dev;
> +
> +	*val = sd->grgain;
> +	return 0;
> +}
> +
> +static int sd_setgbgain(struct gspca_dev *gspca_dev, __s32 val)
> +{
> +	int res = 0;
> +	struct sd *sd = (struct sd *)gspca_dev;
> +
> +	sd->gbgain = val;
> +	CX0342_W(gspca_dev, CX0342_RAW_GBGAIN_H, (sd->gbgain >> 8) & 0x0f);
> +	CX0342_W(gspca_dev, CX0342_RAW_GBGAIN_L, sd->gbgain & 0xff);
> +	CX0342_W(gspca_dev, CX0342_SYS_CTRL_0, 0x80);
> +out:

Idem.

> +	return res;
> +}
> +
> +static int sd_getgbgain(struct gspca_dev *gspca_dev, __s32 *val)
> +{
> +	struct sd *sd = (struct sd *)gspca_dev;
> +
> +	*val = sd->gbgain;
> +	return 0;
> +}
> +
> +static int sd_setbgain(struct gspca_dev *gspca_dev, __s32 val)
> +{
> +	int res = 0;
> +	struct sd *sd = (struct sd *)gspca_dev;
> +
> +	sd->bgain = val;
> +	CX0342_W(gspca_dev, CX0342_RAW_BGAIN_H, (sd->bgain >> 8) & 0x0f);
> +	CX0342_W(gspca_dev, CX0342_RAW_BGAIN_L, sd->bgain & 0xff);
> +	CX0342_W(gspca_dev, CX0342_SYS_CTRL_0, 0x80);
> +out:

Idem.

> +	return res;
> +}
> +
> +static int sd_getbgain(struct gspca_dev *gspca_dev, __s32 *val)
> +{
> +	struct sd *sd = (struct sd *)gspca_dev;
> +
> +	*val = sd->bgain;
> +	return 0;
> +}
> +
> +static struct ctrl sd_ctrls[] = {
> +	{
> +	 {
> +	  .id = V4L2_CID_PRIVATE_BASE,
> +	  .type = V4L2_CTRL_TYPE_INTEGER,
> +	  .name = "JPEG quality",
> +	  .minimum = 0,
> +	  .maximum = 16,
> +	  .step = 1,
> +#define QUALITY_DEF 14
> +	  .default_value = QUALITY_DEF,
> +	  },
> +	 .set = sd_setquality,
> +	 .get = sd_getquality,
> +	 },
> +	{
> +	 {
> +	  .id = V4L2_CID_PRIVATE_BASE + 1,
> +	  /* VLC cant select with this: .type	 = V4L2_CTRL_TYPE_MENU, */
> +	  .type = V4L2_CTRL_TYPE_INTEGER,
> +	  .name = "Framerate",
> +	  .minimum = 0,
> +	  .maximum = 6,		/* 2.5, 5, 7.5, 10, 15, 20, 30 */
> +	  .step = 1,
> +#define FRAMERATE_DEF 6
> +	  .default_value = FRAMERATE_DEF,
> +	  },
> +	 .set = sd_setframerate,
> +	 .get = sd_getframerate,
> +	 },
> +	{
> +	 {
> +	  .id = V4L2_CID_PRIVATE_BASE + 2,
> +	  .type = V4L2_CTRL_TYPE_INTEGER,
> +	  .name = "R_gain",
> +	  .minimum = 0,
> +	  .maximum = 4095,
> +	  .step = 1,
> +#define RGAIN_DEF 256
> +	  .default_value = RGAIN_DEF,
> +	  },
> +	 .set = sd_setrgain,
> +	 .get = sd_getrgain,
> +	 },
> +	{
> +	 {
> +	  .id = V4L2_CID_PRIVATE_BASE + 3,
> +	  .type = V4L2_CTRL_TYPE_INTEGER,
> +	  .name = "GR_gain",
> +	  .minimum = 0,
> +	  .maximum = 4095,
> +	  .step = 1,
> +#define GRGAIN_DEF 256
> +	  .default_value = GRGAIN_DEF,
> +	  },
> +	 .set = sd_setgrgain,
> +	 .get = sd_getgrgain,
> +	 },
> +	{
> +	 {
> +	  .id = V4L2_CID_PRIVATE_BASE + 4,
> +	  .type = V4L2_CTRL_TYPE_INTEGER,
> +	  .name = "GB_gain",
> +	  .minimum = 0,
> +	  .maximum = 4095,
> +	  .step = 1,
> +#define GBGAIN_DEF 256
> +	  .default_value = GBGAIN_DEF,
> +	  },
> +	 .set = sd_setgbgain,
> +	 .get = sd_getgbgain,
> +	 },
> +	{
> +	 {
> +	  .id = V4L2_CID_PRIVATE_BASE + 5,
> +	  .type = V4L2_CTRL_TYPE_INTEGER,
> +	  .name = "B_gain",
> +	  .minimum = 0,
> +	  .maximum = 4095,
> +	  .step = 1,
> +#define BGAIN_DEF 256
> +	  .default_value = BGAIN_DEF,
> +	  },
> +	 .set = sd_setbgain,
> +	 .get = sd_getbgain,
> +	 }
> +};

Indentation is completely broken on the above table. I'm wandering why
checkpatch.pl didn't catch this.

> +
> +/* this function is called at probe time */
> +static int sd_config(struct gspca_dev *gspca_dev,
> +		     const struct usb_device_id *id)
> +{
> +	struct sd *sd = (struct sd *)gspca_dev;
> +
> +	gspca_dev->cam.cam_mode = vga_mode;
> +	gspca_dev->cam.nmodes = ARRAY_SIZE(vga_mode);
> +	sd->quality = QUALITY_DEF;
> +	sd->framerate = FRAMERATE_DEF;
> +	sd->rgain = RGAIN_DEF;
> +	sd->grgain = GRGAIN_DEF;
> +	sd->gbgain = GBGAIN_DEF;
> +	sd->bgain = BGAIN_DEF;
> +	return 0;
> +}
> +
> +/* this function is called at probe and resume time */
> +static int sd_init(struct gspca_dev *gspca_dev)
> +{
> +	/* check if the device responds */
> +	return 0;
> +}
> +
> +/* -- start the camera -- */
> +static int sd_start(struct gspca_dev *gspca_dev)
> +{
> +	int res = 0;
> +	__u8 value;
> +
> +	REG_W(gspca_dev, TP6800_SIF_TYPE, 0x01);
> +	REG_W(gspca_dev, TP6800_SIF_CONTROL, 0x01);
> +	REG_W(gspca_dev, TP6800_GPIO_IO, 0x9f);
> +	REG_R(gspca_dev, TP6800_GPIO_DATA, &value);
> +	/* Does value returned signify sensor? */
> +	REG_W(gspca_dev, TP6800_GPIO_IO, 0x9f);
> +	REG_W(gspca_dev, TP6800_GPIO_DATA, 0x00);
> +	REG_W(gspca_dev, TP6800_GPIO_PD, 0x40);
> +	REG_W(gspca_dev, TP6800_SIF_TYPE, 0x00);
> +	REG_W(gspca_dev, TP6800_REG_50, 0x00);
> +	REG_W(gspca_dev, TP6800_REG_51, 0x00);
> +	REG_W(gspca_dev, TP6800_REG_52, 0xff);
> +	REG_W(gspca_dev, TP6800_REG_53, 0x03);
> +	REG_W(gspca_dev, TP6800_DARK_CFG, 0x07);
> +	REG_W(gspca_dev, TP6800_EDGE_THRLD, 0x40);
> +	REG_W(gspca_dev, TP6800_BLK_THRLD, 0x40);
> +	REG_W(gspca_dev, TP6800_TIMING_CFG, 0x17);
> +	REG_W(gspca_dev, TP6800_SENSOR_CFG, 0x18);
> +	REG_W(gspca_dev, TP6800_FRONT_DARK_ST, 0x00);
> +	REG_W(gspca_dev, TP6800_FRONT_DARK_END, 0x00);
> +	REG_W(gspca_dev, TP6800_REAR_DARK_ST_L, 0x00);
> +	REG_W(gspca_dev, TP6800_REAR_DARK_ST_H, 0x00);
> +	REG_W(gspca_dev, TP6800_REAR_DARK_END_L, 0x00);
> +	REG_W(gspca_dev, TP6800_REAR_DARK_END_H, 0x00);
> +	REG_W(gspca_dev, TP6800_HORIZ_DARK_LINE_L, 0x00);
> +	REG_W(gspca_dev, TP6800_HORIZ_DARK_LINE_H, 0x00);
> +	REG_W(gspca_dev, TP6800_ENDP_1_CTL, 0x03);
> +	REG_W(gspca_dev, TP6800_PIXEL_START, 0x0b);
> +	REG_W(gspca_dev, TP6800_PIXEL_END_L, 0x8a);
> +	REG_W(gspca_dev, TP6800_PIXEL_END_H, 0x02);
> +	REG_W(gspca_dev, TP6800_LINE_START, 0x0e);
> +	REG_W(gspca_dev, TP6800_LINE_END_L, 0xf4);
> +	REG_W(gspca_dev, TP6800_LINE_END_H, 0x01);
> +	REG_W(gspca_dev, TP6800_FORMAT, 0x00);
> +	CX0342_W(gspca_dev, CX0342_OUTPUT_CTRL, 0x07);
> +	CX0342_W(gspca_dev, CX0342_BYPASS_MODE, 0x58);
> +	CX0342_W(gspca_dev, CX0342_GPXLTHD_L, 0x16);
> +	CX0342_W(gspca_dev, CX0342_RBPXLTHD_L, 0x16);
> +	CX0342_W(gspca_dev, CX0342_PLANETHD_L, 0xc0);
> +	CX0342_W(gspca_dev, CX0342_PLANETHD_H, 0x03);
> +	CX0342_W(gspca_dev, CX0342_RB_GAP_L, 0xff);
> +	CX0342_W(gspca_dev, CX0342_RB_GAP_H, 0x07);
> +	CX0342_W(gspca_dev, CX0342_G_GAP_L, 0xff);
> +	CX0342_W(gspca_dev, CX0342_G_GAP_H, 0x07);
> +	CX0342_W(gspca_dev, CX0342_RST_OVERFLOW_L, 0x5c);
> +	CX0342_W(gspca_dev, CX0342_RST_OVERFLOW_H, 0x01);
> +	CX0342_W(gspca_dev, CX0342_DATA_OVERFLOW_L, 0xfc);
> +	CX0342_W(gspca_dev, CX0342_DATA_OVERFLOW_H, 0x03);
> +	CX0342_W(gspca_dev, CX0342_DATA_UNDERFLOW_L, 0x00);
> +	CX0342_W(gspca_dev, CX0342_DATA_UNDERFLOW_H, 0x00);
> +	CX0342_W(gspca_dev, CX0342_SYS_CTRL_0, 0x40);
> +	CX0342_W(gspca_dev, CX0342_GLOBAL_GAIN, 0x01);
> +	CX0342_W(gspca_dev, CX0342_CLOCK_GEN, 0x00);
> +	CX0342_W(gspca_dev, CX0342_SYS_CTRL_0, 0x02);
> +	CX0342_W(gspca_dev, CX0342_IDLE_CTRL, 0x05);
> +	CX0342_W(gspca_dev, CX0342_ADCGN, 0x00);
> +	CX0342_W(gspca_dev, CX0342_ADC_CTL, 0x00);
> +	CX0342_W(gspca_dev, CX0342_LVRST_BLBIAS, 0x01);
> +	CX0342_W(gspca_dev, CX0342_VTHSEL, 0x0b);
> +	CX0342_W(gspca_dev, CX0342_RAMP_RIV, 0x0b);
> +	CX0342_W(gspca_dev, CX0342_LDOSEL, 0x07);
> +	CX0342_W(gspca_dev, CX0342_SPV_VALUE_L, 0x40);
> +	CX0342_W(gspca_dev, CX0342_SPV_VALUE_H, 0x02);
> +	res = program_timing_registers(gspca_dev);
> +	if (res < 0)
> +		goto out;
> +	REG_W(gspca_dev, TP6800_EDGE_THRLD, 0x10);
> +	REG_W(gspca_dev, TP6800_DARK_CFG, 0x00);
> +	CX0342_W(gspca_dev, CX0342_EXPO_LINE_H, 0x00);
> +	CX0342_W(gspca_dev, CX0342_SYS_CTRL_0, 0x01);
> +	CX0342_W(gspca_dev, CX0342_RAW_GRGAIN_L, 0x00);
> +	CX0342_W(gspca_dev, CX0342_RAW_GRGAIN_H, 0x01);
> +	CX0342_W(gspca_dev, CX0342_RAW_GBGAIN_L, 0x00);
> +	CX0342_W(gspca_dev, CX0342_RAW_GBGAIN_H, 0x01);
> +	CX0342_W(gspca_dev, CX0342_RAW_RGAIN_L, 0x00);
> +	CX0342_W(gspca_dev, CX0342_RAW_RGAIN_H, 0x01);
> +	CX0342_W(gspca_dev, CX0342_RAW_BGAIN_L, 0x00);
> +	CX0342_W(gspca_dev, CX0342_RAW_BGAIN_H, 0x01);
> +	CX0342_W(gspca_dev, CX0342_SYS_CTRL_0, 0x80);
> +	res = set_resolution(gspca_dev, vga_mode[gspca_dev->curr_mode].priv);
> +out:

Idem.

> +	return res;
> +}
> +
> +static void sd_stopN(struct gspca_dev *gspca_dev)
> +{
> +}
> +
> +static void sd_pkt_scan(struct gspca_dev *gspca_dev,
> +			struct gspca_frame *frame,
> +			__u8 *data,
> +			int len)
> +{
> +
> +	if (len && data[0] == 0x55) {
> +		frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame, data, 0);
> +		if (len < 8 ||
> +		    data[1] != 0xff || data[2] != 0xd8 ||
> +		    data[3] != 0xff || data[4] != 0xfe) {
> +			/* Have only seen this with corrupt frames */
> +			gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
> +					data, 0);
> +			gspca_dev->last_packet_type = DISCARD_PACKET;
> +		} else {
> +			int quality;
> +			int width;
> +			int height;
> +			__u8 sof0[19];
> +
> +			width = data[5] * 16;
> +			height = data[6] * 8;
> +			quality = data[7];
> +			if (quality > 16)
> +				quality = 16;
> +			memcpy(sof0, SOF0, sizeof(sof0));
> +			sof0[5] = height / 256;
> +			sof0[6] = height % 256;
> +			sof0[7] = width / 256;
> +			sof0[8] = width % 256;
> +			gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
> +					SOI, sizeof(SOI));
> +			gspca_frame_add(gspca_dev, INTER_PACKET, frame,
> +					sof0, sizeof(sof0));
> +			gspca_frame_add(gspca_dev, INTER_PACKET, frame,
> +					DHT, sizeof(DHT));
> +			gspca_frame_add(gspca_dev, INTER_PACKET, frame,
> +					DQT[quality], sizeof(DQT[quality]));
> +			gspca_frame_add(gspca_dev, INTER_PACKET, frame,
> +					SOS, sizeof(SOS));
> +			gspca_frame_add(gspca_dev, INTER_PACKET, frame,
> +					data + 8, len - 8);
> +		}
> +	} else if (len && data[0] == 0xaa) {
> +		gspca_dev->last_packet_type = DISCARD_PACKET;
> +	} else if (len && data[0] == 0xcc) {
> +		gspca_frame_add(gspca_dev, INTER_PACKET, frame,
> +				data + 1, len - 1);
> +	}
> +}
> +
> +static const struct sd_desc sd_desc = {
> +	.name = MODULE_NAME,
> +	.ctrls = sd_ctrls,
> +	.nctrls = ARRAY_SIZE(sd_ctrls),
> +	.config = sd_config,
> +	.init = sd_init,
> +	.start = sd_start,
> +	.stopN = sd_stopN,
> +	.pkt_scan = sd_pkt_scan,
> +	.querymenu = sd_querymenu,
> +
> +};
> +
> +static const __devinitdata struct usb_device_id device_table[] = {
> +	{USB_DEVICE(0x06a2, 0x0003)},
> +	{}			/* Terminating entry */
> +};
> +
> +MODULE_DEVICE_TABLE(usb, device_table);
> +
> +static int sd_probe(struct usb_interface *interface,
> +		    const struct usb_device_id *id)
> +{
> +	return gspca_dev_probe(interface, id, &sd_desc, sizeof(struct sd),
> +			       THIS_MODULE);
> +}
> +
> +static struct usb_driver tp6800_driver = {
> +	.name = MODULE_NAME,
> +	.id_table = device_table,
> +	.probe = sd_probe,
> +	.disconnect = gspca_disconnect,
> +#ifdef CONFIG_PM
> +	.suspend = gspca_suspend,
> +	.resume = gspca_resume,
> +#endif
> +};
> +
> +/* Module loading and unloading */
> +
> +static int __init tp6800_init(void)
> +{
> +	int result;
> +
> +	result = usb_register(&tp6800_driver);
> +	if (result < 0)
> +		return result;
> +	PDEBUG(D_PROBE, "registered (compiled %s %s)", __DATE__, __TIME__);
> +	return 0;
> +}
> +
> +static void __exit tp6800_exit(void)
> +{
> +	usb_deregister(&tp6800_driver);
> +	PDEBUG(D_PROBE, "deregistered");
> +}
> +
> +module_init(tp6800_init);
> +module_exit(tp6800_exit);
> 





Cheers,
Mauro
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux