xref: /openbmc/linux/drivers/media/usb/gspca/nw80x.c (revision bbecb07f)
1 /*
2  * DivIO nw80x subdriver
3  *
4  * Copyright (C) 2011 Jean-François Moine (http://moinejf.free.fr)
5  * Copyright (C) 2003 Sylvain Munaut <tnt@246tNt.com>
6  *			Kjell Claesson <keyson@users.sourceforge.net>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  */
18 
19 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
20 
21 #define MODULE_NAME "nw80x"
22 
23 #include "gspca.h"
24 
25 MODULE_AUTHOR("Jean-Francois Moine <http://moinejf.free.fr>");
26 MODULE_DESCRIPTION("NW80x USB Camera Driver");
27 MODULE_LICENSE("GPL");
28 
29 static int webcam;
30 
31 /* specific webcam descriptor */
32 struct sd {
33 	struct gspca_dev gspca_dev;	/* !! must be the first item */
34 
35 	u32 ae_res;
36 	s8 ag_cnt;
37 #define AG_CNT_START 13
38 	u8 exp_too_low_cnt;
39 	u8 exp_too_high_cnt;
40 
41 	u8 bridge;
42 	u8 webcam;
43 };
44 
45 enum bridges {
46 	BRIDGE_NW800,	/* and et31x110 */
47 	BRIDGE_NW801,
48 	BRIDGE_NW802,
49 };
50 enum webcams {
51 	Generic800,
52 	SpaceCam,	/* Trust 120 SpaceCam */
53 	SpaceCam2,	/* other Trust 120 SpaceCam */
54 	Cvideopro,	/* Conceptronic Video Pro */
55 	Dlink350c,
56 	DS3303u,
57 	Kr651us,
58 	Kritter,
59 	Mustek300,
60 	Proscope,
61 	Twinkle,
62 	DvcV6,
63 	P35u,
64 	Generic802,
65 	NWEBCAMS	/* number of webcams */
66 };
67 
68 static const u8 webcam_chip[NWEBCAMS] = {
69 	[Generic800]	= BRIDGE_NW800,	/* 06a5:0000
70 					 * Typhoon Webcam 100 USB */
71 
72 	[SpaceCam]	= BRIDGE_NW800,	/* 06a5:d800
73 				* Trust SpaceCam120 or SpaceCam100 PORTABLE */
74 
75 	[SpaceCam2]	= BRIDGE_NW800,	/* 06a5:d800 - pas106
76 			* other Trust SpaceCam120 or SpaceCam100 PORTABLE */
77 
78 	[Cvideopro]	= BRIDGE_NW802,	/* 06a5:d001
79 			* Conceptronic Video Pro 'CVIDEOPRO USB Webcam CCD' */
80 
81 	[Dlink350c]	= BRIDGE_NW802,	/* 06a5:d001
82 					 * D-Link NetQam Pro 250plus */
83 
84 	[DS3303u]	= BRIDGE_NW801,	/* 06a5:d001
85 				* Plustek Opticam 500U or ProLink DS3303u */
86 
87 	[Kr651us]	= BRIDGE_NW802,	/* 06a5:d001
88 					 * Panasonic GP-KR651US */
89 
90 	[Kritter]	= BRIDGE_NW802,	/* 06a5:d001
91 					 * iRez Kritter cam */
92 
93 	[Mustek300]	= BRIDGE_NW802,	/* 055f:d001
94 					 * Mustek Wcam 300 mini */
95 
96 	[Proscope]	= BRIDGE_NW802,	/* 06a5:d001
97 					 * Scalar USB Microscope (ProScope) */
98 
99 	[Twinkle]	= BRIDGE_NW800,	/* 06a5:d800 - hv7121b? (seems pas106)
100 					 * Divio Chicony TwinkleCam
101 					 * DSB-C110 */
102 
103 	[DvcV6]		= BRIDGE_NW802,	/* 0502:d001
104 					 * DVC V6 */
105 
106 	[P35u]		= BRIDGE_NW801,	/* 052b:d001, 06a5:d001 and 06be:d001
107 					 * EZCam Pro p35u */
108 
109 	[Generic802]	= BRIDGE_NW802,
110 };
111 /*
112  * other webcams:
113  *	- nw801 046d:d001
114  *		Logitech QuickCam Pro (dark focus ring)
115  *	- nw801 0728:d001
116  *		AVerMedia Camguard
117  *	- nw??? 06a5:d001
118  *		D-Link NetQam Pro 250plus
119  *	- nw800 065a:d800
120  *		Showcam NGS webcam
121  *	- nw??? ????:????
122  *		Sceptre svc300
123  */
124 
125 /*
126  * registers
127  *    nw800/et31x110	  nw801		  nw802
128  *	0000..009e	0000..00a1	0000..009e
129  *	0200..0211	   id		   id
130  *	0300..0302	   id		   id
131  *	0400..0406	  (inex)	0400..0406
132  *	0500..0505	0500..0506	  (inex)
133  *	0600..061a	0600..0601	0600..0601
134  *	0800..0814	   id		   id
135  *	1000..109c	1000..10a1	1000..109a
136  */
137 
138 /* resolutions
139  *	nw800: 320x240, 352x288
140  *	nw801/802: 320x240, 640x480
141  */
142 static const struct v4l2_pix_format cif_mode[] = {
143 	{320, 240, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
144 		.bytesperline = 320,
145 		.sizeimage = 320 * 240 * 4 / 8,
146 		.colorspace = V4L2_COLORSPACE_JPEG},
147 	{352, 288, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
148 		.bytesperline = 352,
149 		.sizeimage = 352 * 288 * 4 / 8,
150 		.colorspace = V4L2_COLORSPACE_JPEG}
151 };
152 static const struct v4l2_pix_format vga_mode[] = {
153 	{320, 240, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
154 		.bytesperline = 320,
155 		.sizeimage = 320 * 240 * 4 / 8,
156 		.colorspace = V4L2_COLORSPACE_JPEG},
157 	{640, 480, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
158 		.bytesperline = 640,
159 		.sizeimage = 640 * 480 * 3 / 8,
160 		.colorspace = V4L2_COLORSPACE_JPEG},
161 };
162 
163 /*
164  * The sequences below contain:
165  *	- 1st and 2nd bytes: either
166  *		- register number (BE)
167  *		- I2C0 + i2c address
168  *	- 3rd byte: data length (=0 for end of sequence)
169  *	- n bytes: data
170  */
171 #define I2C0 0xff
172 
173 static const u8 nw800_init[] = {
174 	0x04, 0x05, 0x01, 0x61,
175 	0x04, 0x04, 0x01, 0x01,
176 	0x04, 0x06, 0x01, 0x04,
177 	0x04, 0x04, 0x03, 0x00, 0x00, 0x00,
178 	0x05, 0x05, 0x01, 0x00,
179 	0, 0, 0
180 };
181 static const u8 nw800_start[] = {
182 	0x04, 0x06, 0x01, 0xc0,
183 	0x00, 0x00, 0x40, 0x10, 0x43, 0x00, 0xb4, 0x01, 0x10, 0x00, 0x4f,
184 			  0xef, 0x0e, 0x00, 0x74, 0x01, 0x01, 0x00, 0x19,
185 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
186 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x3e, 0x00, 0x24,
187 			  0x03, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
188 			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
189 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
190 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
191 	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
192 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
193 			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
194 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
195 			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
196 			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
197 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
198 			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
199 	0x00, 0x80, 0x1f, 0xa0, 0x48, 0xc3, 0x02, 0x88, 0x0c, 0x68, 0x00,
200 			  0x00, 0x00, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x08,
201 			  0x00, 0x32, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
202 			  0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
203 	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
204 			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
205 			  0x40, 0x20,
206 	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
207 	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0xc0,
208 	0x05, 0x00, 0x06, 0xe8, 0x00, 0x00, 0x00, 0x20, 0x20,
209 	0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
210 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
211 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
212 			  0x00, 0x00, 0x00,
213 	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
214 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
215 			  0x00, 0x00, 0x00, 0x00, 0x00,
216 	0x10, 0x00, 0x40, 0x83, 0x02, 0x20, 0x00, 0x13, 0x00, 0x00, 0x00,
217 			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
218 			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
219 			  0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
220 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
221 			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
222 			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
223 			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
224 	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
225 			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
226 			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
227 			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
228 			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
229 			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
230 			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
231 			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
232 	0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
233 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x62,
234 			  0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
235 			  0x01, 0x60, 0x01, 0x00, 0x00,
236 
237 	0x04, 0x04, 0x01, 0xff,
238 	0x04, 0x06, 0x01, 0xc4,
239 
240 	0x04, 0x06, 0x01, 0xc0,
241 	0x00, 0x00, 0x40, 0x10, 0x43, 0x00, 0xb4, 0x01, 0x10, 0x00, 0x4f,
242 			  0xef, 0x0e, 0x00, 0x74, 0x01, 0x01, 0x00, 0x19,
243 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
244 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x3e, 0x00, 0x24,
245 			  0x03, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
246 			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
247 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
248 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
249 	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
250 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
251 			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
252 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
253 			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
254 			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
255 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
256 			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
257 	0x00, 0x80, 0x1f, 0xa0, 0x48, 0xc3, 0x02, 0x88, 0x0c, 0x68, 0x00,
258 			  0x00, 0x00, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x08,
259 			  0x00, 0x32, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
260 			  0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
261 	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
262 			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
263 			  0x40, 0x20,
264 	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
265 	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0xc0,
266 	0x05, 0x00, 0x06, 0xe8, 0x00, 0x00, 0x00, 0x20, 0x20,
267 	0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
268 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
269 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
270 			  0x00, 0x00, 0x00,
271 	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
272 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
273 			  0x00, 0x00, 0x00, 0x00, 0x00,
274 	0x10, 0x00, 0x40, 0x83, 0x02, 0x20, 0x00, 0x13, 0x00, 0x00, 0x00,
275 			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
276 			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
277 			  0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
278 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
279 			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
280 			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
281 			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
282 	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
283 			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
284 			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
285 			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
286 			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
287 			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
288 			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
289 			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
290 	0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
291 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x62,
292 			  0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
293 			  0x01, 0x60, 0x01, 0x00, 0x00,
294 
295 	0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
296 			  0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
297 			  0x40,
298 	0x00, 0x80, 0x01, 0xa0,
299 	0x10, 0x1a, 0x01, 0x00,
300 	0x00, 0x91, 0x02, 0x6c, 0x01,
301 	0x00, 0x03, 0x02, 0xc8, 0x01,
302 	0x10, 0x1a, 0x01, 0x00,
303 	0x10, 0x00, 0x01, 0x83,
304 	0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
305 			  0x20, 0x01, 0x60, 0x01,
306 	0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
307 	0x10, 0x1b, 0x02, 0x69, 0x00,
308 	0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
309 	0x05, 0x02, 0x01, 0x02,
310 	0x06, 0x00, 0x02, 0x04, 0xd9,
311 	0x05, 0x05, 0x01, 0x20,
312 	0x05, 0x05, 0x01, 0x21,
313 	0x10, 0x0e, 0x01, 0x08,
314 	0x10, 0x41, 0x11, 0x00, 0x08, 0x21, 0x3d, 0x52, 0x63, 0x75, 0x83,
315 			  0x91, 0x9e, 0xaa, 0xb6, 0xc1, 0xcc, 0xd6, 0xe0,
316 			  0xea,
317 	0x10, 0x03, 0x01, 0x00,
318 	0x10, 0x0f, 0x02, 0x13, 0x13,
319 	0x10, 0x03, 0x01, 0x14,
320 	0x10, 0x41, 0x11, 0x00, 0x08, 0x21, 0x3d, 0x52, 0x63, 0x75, 0x83,
321 			  0x91, 0x9e, 0xaa, 0xb6, 0xc1, 0xcc, 0xd6, 0xe0,
322 			  0xea,
323 	0x10, 0x0b, 0x01, 0x14,
324 	0x10, 0x0d, 0x01, 0x20,
325 	0x10, 0x0c, 0x01, 0x34,
326 	0x04, 0x06, 0x01, 0xc3,
327 	0x04, 0x04, 0x01, 0x00,
328 	0x05, 0x02, 0x01, 0x02,
329 	0x06, 0x00, 0x02, 0x00, 0x48,
330 	0x05, 0x05, 0x01, 0x20,
331 	0x05, 0x05, 0x01, 0x21,
332 	0, 0, 0
333 };
334 
335 /* 06a5:d001 - nw801 - Panasonic
336  *		P35u */
337 static const u8 nw801_start_1[] = {
338 	0x05, 0x06, 0x01, 0x04,
339 	0x00, 0x00, 0x40, 0x0e, 0x00, 0x00, 0xf9, 0x02, 0x11, 0x00, 0x0e,
340 			  0x01, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
341 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
342 			  0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
343 			  0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
344 			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
345 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
346 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
347 	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
348 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
349 			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
350 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
351 			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
352 			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
353 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
354 			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
355 	0x00, 0x80, 0x22, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x08, 0x00,
356 			  0x00, 0x00, 0x00, 0x00, 0x69, 0xa8, 0x1f, 0x00,
357 			  0x0d, 0x02, 0x07, 0x00, 0x01, 0x00, 0x19, 0x00,
358 			  0xf2, 0x00, 0x18, 0x06, 0x10, 0x06, 0x10, 0x00,
359 			  0x36, 0x00,
360 	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
361 			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
362 			  0x40, 0x20,
363 	0x03, 0x00, 0x03, 0x00, 0x00, 0x00,
364 	0x05, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
365 	0x06, 0x00, 0x02, 0x09, 0x99,
366 	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
367 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
368 			  0x00, 0x00, 0x00, 0x00, 0x00,
369 	0x10, 0x00, 0x40, 0x22, 0x02, 0x80, 0x00, 0x1e, 0x00, 0x00, 0x00,
370 			  0x00, 0x00, 0x00, 0x0a, 0x15, 0x08, 0x08, 0x0a,
371 			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
372 			  0x00, 0x01, 0x35, 0xfd, 0x07, 0x3d, 0x00, 0x00,
373 			  0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x14, 0x02,
374 			  0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,
375 			  0x40, 0x00, 0x00, 0x00, 0x40, 0x20, 0x10, 0x06,
376 			  0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06, 0xf7,
377 	0x10, 0x40, 0x40, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80, 0x80,
378 			  0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99, 0xa4,
379 			  0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc, 0xcf,
380 			  0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54, 0x64,
381 			  0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2, 0xe2,
382 			  0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
383 			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
384 			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
385 	0x10, 0x80, 0x22, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
386 			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00, 0x00,
387 			  0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x82, 0x02,
388 			  0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40, 0x01,
389 			  0xf0, 0x00,
390 	0, 0, 0,
391 };
392 static const u8 nw801_start_qvga[] = {
393 	0x02, 0x00, 0x10, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
394 			  0x00, 0x78, 0x18, 0x0b, 0x06, 0xa2, 0x86, 0x78,
395 	0x02, 0x0f, 0x01, 0x6b,
396 	0x10, 0x1a, 0x01, 0x15,
397 	0x00, 0x00, 0x01, 0x1e,
398 	0x10, 0x00, 0x01, 0x2f,
399 	0x10, 0x8c, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
400 	0x10, 0x11, 0x08, 0x29, 0x00, 0x18, 0x01, 0x1f, 0x00, 0xd2, 0x00,
401 							/* AE window */
402 	0, 0, 0,
403 };
404 static const u8 nw801_start_vga[] = {
405 	0x02, 0x00, 0x10, 0x78, 0xa0, 0x97, 0x78, 0xa0, 0x00, 0x00, 0x00,
406 			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xf0,
407 	0x02, 0x0f, 0x01, 0xd5,
408 	0x10, 0x1a, 0x01, 0x15,
409 	0x00, 0x00, 0x01, 0x0e,
410 	0x10, 0x00, 0x01, 0x22,
411 	0x10, 0x8c, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
412 	0x10, 0x11, 0x08, 0x51, 0x00, 0x30, 0x02, 0x3d, 0x00, 0xa4, 0x01,
413 	0, 0, 0,
414 };
415 static const u8 nw801_start_2[] = {
416 	0x10, 0x04, 0x01, 0x1a,
417 	0x10, 0x19, 0x01, 0x09,				/* clock */
418 	0x10, 0x24, 0x06, 0xc0, 0x00, 0x3f, 0x02, 0x00, 0x01,
419 							 /* .. gain .. */
420 	0x00, 0x03, 0x02, 0x92, 0x03,
421 	0x00, 0x1d, 0x04, 0xf2, 0x00, 0x24, 0x07,
422 	0x00, 0x7b, 0x01, 0xcf,
423 	0x10, 0x94, 0x01, 0x07,
424 	0x05, 0x05, 0x01, 0x01,
425 	0x05, 0x04, 0x01, 0x01,
426 	0x10, 0x0e, 0x01, 0x08,
427 	0x10, 0x48, 0x11, 0x00, 0x37, 0x55, 0x6b, 0x7d, 0x8d, 0x9b, 0xa8,
428 			  0xb4, 0xbf, 0xca, 0xd4, 0xdd, 0xe6, 0xef, 0xf0,
429 			  0xf0,
430 	0x10, 0x03, 0x01, 0x00,
431 	0x10, 0x0f, 0x02, 0x0c, 0x0c,
432 	0x10, 0x03, 0x01, 0x08,
433 	0x10, 0x48, 0x11, 0x00, 0x37, 0x55, 0x6b, 0x7d, 0x8d, 0x9b, 0xa8,
434 			  0xb4, 0xbf, 0xca, 0xd4, 0xdd, 0xe6, 0xef, 0xf0,
435 			  0xf0,
436 	0x10, 0x0b, 0x01, 0x0b,
437 	0x10, 0x0d, 0x01, 0x0b,
438 	0x10, 0x0c, 0x01, 0x1f,
439 	0x05, 0x06, 0x01, 0x03,
440 	0, 0, 0
441 };
442 
443 /* nw802 (sharp IR3Y38M?) */
444 static const u8 nw802_start[] = {
445 	0x04, 0x06, 0x01, 0x04,
446 	0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0xf9, 0x02, 0x10, 0x00, 0x4d,
447 			  0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
448 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
449 			  0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
450 			  0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
451 			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
452 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
453 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
454 	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
455 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
456 			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
457 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
458 			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
459 			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
460 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
461 			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
462 	0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00,
463 			  0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
464 			  0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94,
465 			  0x00, 0x10, 0x06, 0x08, 0x00, 0x18, 0x00,
466 	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
467 			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
468 			  0x40, 0x20,
469 	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
470 	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
471 	0x06, 0x00, 0x02, 0x09, 0x99,
472 	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
473 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
474 			  0x00, 0x00, 0x00, 0x00, 0x00,
475 	0x10, 0x00, 0x40, 0xa1, 0x02, 0x80, 0x00, 0x1d, 0x00, 0x00, 0x00,
476 			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
477 			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
478 			  0x00, 0x49, 0x13, 0xff, 0x01, 0xc0, 0x00, 0x14,
479 			  0x02, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00,
480 			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
481 			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
482 			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
483 	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
484 			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
485 			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
486 			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
487 			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
488 			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
489 			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
490 			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
491 	0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
492 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x05, 0x82,
493 			  0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
494 			  0x01, 0xf0, 0x00,
495 	0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
496 			  0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
497 			  0x40,
498 	0x10, 0x1a, 0x01, 0x00,
499 	0x10, 0x00, 0x01, 0xad,
500 	0x00, 0x00, 0x01, 0x08,
501 	0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
502 	0x10, 0x1b, 0x02, 0x00, 0x00,
503 	0x10, 0x11, 0x08, 0x51, 0x00, 0xf0, 0x00, 0x3d, 0x00, 0xb4, 0x00,
504 	0x10, 0x1d, 0x08, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0xa0,
505 	0x10, 0x0e, 0x01, 0x27,
506 	0x10, 0x41, 0x11, 0x00, 0x0e, 0x35, 0x4f, 0x62, 0x71, 0x7f, 0x8b,
507 			  0x96, 0xa0, 0xa9, 0xb2, 0xbb, 0xc3, 0xca, 0xd2,
508 			  0xd8,
509 	0x10, 0x03, 0x01, 0x00,
510 	0x10, 0x0f, 0x02, 0x14, 0x14,
511 	0x10, 0x03, 0x01, 0x0c,
512 	0x10, 0x41, 0x11, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54, 0x64, 0x74,
513 			  0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2, 0xe2, 0xf1,
514 			  0xff,
515 /*			  0x00, 0x0e, 0x35, 0x4f, 0x62, 0x71, 0x7f, 0x8b,
516  *			  0x96, 0xa0, 0xa9, 0xb2, 0xbb, 0xc3, 0xca, 0xd2,
517  *			  0xd8,	*/
518 	0x10, 0x0b, 0x01, 0x10,
519 	0x10, 0x0d, 0x01, 0x11,
520 	0x10, 0x0c, 0x01, 0x1c,
521 	0x04, 0x06, 0x01, 0x03,
522 	0x04, 0x04, 0x01, 0x00,
523 	0, 0, 0
524 };
525 /* et31x110 - Trust 120 SpaceCam */
526 static const u8 spacecam_init[] = {
527 	0x04, 0x05, 0x01, 0x01,
528 	0x04, 0x04, 0x01, 0x01,
529 	0x04, 0x06, 0x01, 0x04,
530 	0x04, 0x04, 0x03, 0x00, 0x00, 0x00,
531 	0x05, 0x05, 0x01, 0x00,
532 	0, 0, 0
533 };
534 static const u8 spacecam_start[] = {
535 	0x04, 0x06, 0x01, 0x44,
536 	0x00, 0x00, 0x40, 0x10, 0x43, 0x00, 0xb4, 0x01, 0x10, 0x00, 0x4f,
537 			  0xef, 0x0e, 0x00, 0x74, 0x01, 0x01, 0x00, 0x19,
538 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
539 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x3e, 0x00, 0x24,
540 			  0x03, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
541 			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
542 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
543 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
544 	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
545 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
546 			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
547 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
548 			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
549 			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
550 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
551 			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
552 	0x00, 0x80, 0x1f, 0xa0, 0x48, 0xc3, 0x02, 0x88, 0x0c, 0x68, 0x00,
553 			  0x00, 0x00, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x08,
554 			  0x00, 0x32, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
555 			  0x00, 0x4b, 0x00, 0x7c, 0x00, 0x80, 0x00,
556 	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
557 			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
558 			  0x40, 0x20,
559 	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
560 	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
561 	0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
562 	0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
563 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
564 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
565 			  0x00, 0x00, 0x00,
566 	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
567 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
568 			  0x00, 0x00, 0x00, 0x00, 0x00,
569 	0x10, 0x00, 0x40, 0x83, 0x02, 0x20, 0x00, 0x11, 0x00, 0x00, 0x00,
570 			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
571 			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
572 			  0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
573 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
574 			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
575 			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
576 			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
577 	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
578 			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
579 			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
580 			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
581 			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
582 			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
583 			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
584 			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
585 	0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
586 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x62,
587 			  0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
588 			  0x01, 0x60, 0x01, 0x00, 0x00,
589 	0x04, 0x06, 0x01, 0xc0,
590 	0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
591 	0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
592 			  0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
593 			  0x40,
594 	0x00, 0x80, 0x01, 0xa0,
595 	0x10, 0x1a, 0x01, 0x00,
596 	0x00, 0x91, 0x02, 0x32, 0x01,
597 	0x00, 0x03, 0x02, 0x08, 0x02,
598 	0x10, 0x00, 0x01, 0x83,
599 	0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
600 			  0x20, 0x01, 0x60, 0x01,
601 	0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
602 	0x10, 0x0e, 0x01, 0x08,
603 	0x10, 0x41, 0x11, 0x00, 0x64, 0x99, 0xc0, 0xe2, 0xf9, 0xf9, 0xf9,
604 			  0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
605 			  0xf9,
606 	0x10, 0x03, 0x01, 0x00,
607 	0x10, 0x0f, 0x02, 0x13, 0x13,
608 	0x10, 0x03, 0x01, 0x06,
609 	0x10, 0x41, 0x11, 0x00, 0x64, 0x99, 0xc0, 0xe2, 0xf9, 0xf9, 0xf9,
610 			  0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
611 			  0xf9,
612 	0x10, 0x0b, 0x01, 0x08,
613 	0x10, 0x0d, 0x01, 0x10,
614 	0x10, 0x0c, 0x01, 0x1f,
615 	0x04, 0x06, 0x01, 0xc3,
616 	0x04, 0x05, 0x01, 0x40,
617 	0x04, 0x04, 0x01, 0x40,
618 	0, 0, 0
619 };
620 /* et31x110 - pas106 - other Trust SpaceCam120 */
621 static const u8 spacecam2_start[] = {
622 	0x04, 0x06, 0x01, 0x44,
623 	0x04, 0x06, 0x01, 0x00,
624 	0x00, 0x00, 0x40, 0x14, 0x83, 0x00, 0xba, 0x01, 0x10, 0x00, 0x4f,
625 			  0xef, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x19,
626 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
627 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x06, 0x00, 0xfc,
628 			  0x01, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
629 			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
630 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
631 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
632 	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
633 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
634 			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
635 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
636 			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
637 			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
638 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
639 			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
640 	0x00, 0x80, 0x1f, 0xb8, 0x48, 0x0f, 0x04, 0x88, 0x14, 0x68, 0x00,
641 			  0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x03,
642 			  0x00, 0x24, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
643 			  0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
644 	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
645 			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
646 			  0x40, 0x20,
647 	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
648 	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0x00,
649 	0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
650 	0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
651 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
652 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
653 			  0x00, 0x00, 0x00,
654 	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
655 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
656 			  0x00, 0x00, 0x00, 0x00, 0x00,
657 	0x10, 0x00, 0x40, 0x80, 0x02, 0x20, 0x00, 0x13, 0x00, 0x00, 0x00,
658 			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
659 			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
660 			  0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
661 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
662 			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
663 			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
664 			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
665 	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
666 			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
667 			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
668 			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
669 			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
670 			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
671 			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
672 			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
673 	0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
674 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x62,
675 			  0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
676 			  0x01, 0x60, 0x01, 0x00, 0x00,
677 	0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
678 	0x04, 0x04, 0x01, 0x40,
679 	0x04, 0x04, 0x01, 0x00,
680 	I2C0, 0x40, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x05,
681 			  0x00, 0x00, 0x05, 0x05,
682 	I2C0, 0x40, 0x02, 0x11, 0x06,
683 	I2C0, 0x40, 0x02, 0x14, 0x00,
684 	I2C0, 0x40, 0x02, 0x13, 0x01,		/* i2c end */
685 	0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
686 			  0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
687 			  0x40,
688 	I2C0, 0x40, 0x02, 0x02, 0x0c,		/* pixel clock */
689 	I2C0, 0x40, 0x02, 0x0f, 0x00,
690 	I2C0, 0x40, 0x02, 0x13, 0x01,		/* i2c end */
691 	0x10, 0x00, 0x01, 0x01,
692 	0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
693 			  0x20, 0x01, 0x60, 0x01,
694 	I2C0, 0x40, 0x02, 0x05, 0x0f,		/* exposure */
695 	I2C0, 0x40, 0x02, 0x13, 0x01,		/* i2c end */
696 	I2C0, 0x40, 0x07, 0x09, 0x0b, 0x0f, 0x05, 0x05, 0x0f, 0x00,
697 						/* gains */
698 	I2C0, 0x40, 0x03, 0x12, 0x04, 0x01,
699 	0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
700 	0x10, 0x0e, 0x01, 0x08,
701 	0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
702 			  0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
703 			  0xf9,
704 	0x10, 0x03, 0x01, 0x00,
705 	0x10, 0x0f, 0x02, 0x13, 0x13,
706 	0x10, 0x03, 0x01, 0x06,
707 	0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
708 			  0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
709 			  0xf9,
710 	0x10, 0x0b, 0x01, 0x11,
711 	0x10, 0x0d, 0x01, 0x10,
712 	0x10, 0x0c, 0x01, 0x14,
713 	0x04, 0x06, 0x01, 0x03,
714 	0x04, 0x05, 0x01, 0x61,
715 	0x04, 0x04, 0x01, 0x00,
716 	0, 0, 0
717 };
718 
719 /* nw802 - Conceptronic Video Pro */
720 static const u8 cvideopro_start[] = {
721 	0x04, 0x06, 0x01, 0x04,
722 	0x00, 0x00, 0x40, 0x54, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x4c,
723 			  0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
724 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
725 			  0x00, 0x0b, 0x00, 0x1b, 0x00, 0xc8, 0x00, 0xf4,
726 			  0x05, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
727 			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
728 			  0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
729 			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
730 	0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
731 			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
732 			  0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
733 			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
734 			  0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
735 			  0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
736 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
737 			  0x00, 0x5d, 0x00, 0xc7, 0x00, 0x7e, 0x00, 0x30,
738 	0x00, 0x80, 0x1f, 0x98, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
739 			  0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
740 			  0x00, 0x0c, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
741 			  0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
742 	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
743 			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
744 			  0x40, 0x20,
745 	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
746 	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
747 	0x06, 0x00, 0x02, 0x09, 0x99,
748 	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
749 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
750 			  0x00, 0x00, 0x00, 0x00, 0x00,
751 	0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
752 			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
753 			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
754 			  0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
755 			  0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
756 			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
757 			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
758 			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
759 	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
760 			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
761 			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
762 			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
763 			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
764 			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
765 			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
766 			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
767 	0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
768 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x05, 0x82,
769 			  0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
770 			  0x01, 0xf0, 0x00,
771 	0x02, 0x00, 0x11, 0x3c, 0x50, 0x8c, 0x3c, 0x50, 0x00, 0x00, 0x00,
772 			  0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xf0,
773 			  0x40,
774 	0x10, 0x1a, 0x01, 0x03,
775 	0x10, 0x00, 0x01, 0xac,
776 	0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
777 	0x10, 0x1b, 0x02, 0x3b, 0x01,
778 	0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
779 	0x10, 0x1f, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
780 	0x10, 0x1d, 0x02, 0x40, 0x06,
781 	0x10, 0x0e, 0x01, 0x08,
782 	0x10, 0x41, 0x11, 0x00, 0x0f, 0x46, 0x62, 0x76, 0x86, 0x94, 0xa0,
783 			  0xab, 0xb6, 0xbf, 0xc8, 0xcf, 0xd7, 0xdc, 0xdc,
784 			  0xdc,
785 	0x10, 0x03, 0x01, 0x00,
786 	0x10, 0x0f, 0x02, 0x12, 0x12,
787 	0x10, 0x03, 0x01, 0x0c,
788 	0x10, 0x41, 0x11, 0x00, 0x0f, 0x46, 0x62, 0x76, 0x86, 0x94, 0xa0,
789 			  0xab, 0xb6, 0xbf, 0xc8, 0xcf, 0xd7, 0xdc, 0xdc,
790 			  0xdc,
791 	0x10, 0x0b, 0x01, 0x09,
792 	0x10, 0x0d, 0x01, 0x10,
793 	0x10, 0x0c, 0x01, 0x2f,
794 	0x04, 0x06, 0x01, 0x03,
795 	0x04, 0x04, 0x01, 0x00,
796 	0, 0, 0
797 };
798 
799 /* nw802 - D-link dru-350c cam */
800 static const u8 dlink_start[] = {
801 	0x04, 0x06, 0x01, 0x04,
802 	0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x92, 0x03, 0x10, 0x00, 0x4d,
803 			  0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
804 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
805 			  0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
806 			  0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
807 			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
808 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
809 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
810 	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
811 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
812 			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
813 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
814 			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
815 			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
816 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
817 			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
818 	0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00,
819 			  0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
820 			  0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94,
821 			  0x00, 0x10, 0x06, 0x10, 0x00, 0x36, 0x00,
822 	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
823 			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
824 			  0x40, 0x20,
825 	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
826 	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
827 	0x06, 0x00, 0x02, 0x09, 0x99,
828 	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
829 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
830 			  0x00, 0x00, 0x00, 0x00, 0x00,
831 	0x10, 0x00, 0x40, 0xa1, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
832 			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
833 			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
834 			  0x00, 0x49, 0x13, 0x00, 0x00, 0xc0, 0x00, 0x14,
835 			  0x02, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00,
836 			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
837 			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
838 			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
839 	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
840 			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
841 			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
842 			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
843 			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
844 			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
845 			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
846 			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
847 	0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
848 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x82,
849 			  0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
850 			  0x01, 0xf0, 0x00,
851 	0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
852 			  0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
853 			  0x40,
854 	0x10, 0x1a, 0x01, 0x00,
855 	0x10, 0x00, 0x01, 0xad,
856 	0x00, 0x00, 0x01, 0x08,
857 	0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
858 	0x10, 0x1b, 0x02, 0x00, 0x00,
859 	0x10, 0x11, 0x08, 0x51, 0x00, 0xf0, 0x00, 0x3d, 0x00, 0xb4, 0x00,
860 	0x10, 0x1d, 0x08, 0x40, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
861 	0x10, 0x0e, 0x01, 0x20,
862 	0x10, 0x41, 0x11, 0x00, 0x07, 0x1e, 0x38, 0x4d, 0x60, 0x70, 0x7f,
863 			  0x8e, 0x9b, 0xa8, 0xb4, 0xbf, 0xca, 0xd5, 0xdf,
864 			  0xea,
865 	0x10, 0x03, 0x01, 0x00,
866 	0x10, 0x0f, 0x02, 0x11, 0x11,
867 	0x10, 0x03, 0x01, 0x10,
868 	0x10, 0x41, 0x11, 0x00, 0x07, 0x1e, 0x38, 0x4d, 0x60, 0x70, 0x7f,
869 			  0x8e, 0x9b, 0xa8, 0xb4, 0xbf, 0xca, 0xd5, 0xdf,
870 			  0xea,
871 	0x10, 0x0b, 0x01, 0x19,
872 	0x10, 0x0d, 0x01, 0x10,
873 	0x10, 0x0c, 0x01, 0x1e,
874 	0x04, 0x06, 0x01, 0x03,
875 	0x04, 0x04, 0x01, 0x00,
876 	0, 0, 0
877 };
878 
879 /* 06a5:d001 - nw801 - Sony
880  *		Plustek Opticam 500U or ProLink DS3303u (Hitachi HD49322BF) */
881 /*fixme: 320x240 only*/
882 static const u8 ds3303_start[] = {
883 	0x05, 0x06, 0x01, 0x04,
884 	0x00, 0x00, 0x40, 0x16, 0x00, 0x00, 0xf9, 0x02, 0x11, 0x00, 0x0e,
885 			  0x01, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
886 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
887 			  0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
888 			  0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
889 			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
890 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
891 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
892 	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
893 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
894 			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
895 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
896 			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
897 			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
898 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
899 			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
900 	0x00, 0x80, 0x22, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x08, 0x00,
901 			  0x00, 0x00, 0x00, 0x00, 0xa9, 0xa8, 0x1f, 0x00,
902 			  0x0d, 0x02, 0x07, 0x00, 0x01, 0x00, 0x19, 0x00,
903 			  0xf2, 0x00, 0x18, 0x06, 0x10, 0x06, 0x10, 0x00,
904 			  0x36, 0x00,
905 	0x02, 0x00, 0x12, 0x03, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
906 			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0x50,
907 			  0x40, 0x20,
908 	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
909 	0x05, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
910 	0x06, 0x00, 0x02, 0x09, 0x99,
911 	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
912 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
913 			  0x00, 0x00, 0x00, 0x00, 0x00,
914 	0x10, 0x00, 0x40, 0x2f, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
915 			  0x00, 0x00, 0x00, 0x10, 0x1f, 0x10, 0x08, 0x0a,
916 			  0x0a, 0x51, 0x00, 0xf1, 0x00, 0x3c, 0x00, 0xb4,
917 			  0x00, 0x01, 0x15, 0xfd, 0x07, 0x3d, 0x00, 0x00,
918 			  0x00, 0x00, 0x00, 0x00, 0x8c, 0x04, 0x01, 0x20,
919 			  0x02, 0x00, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00,
920 			  0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x03,
921 			  0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06, 0xf7,
922 	0x10, 0x40, 0x40, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80, 0x80,
923 			  0x00, 0x2d, 0x46, 0x58, 0x67, 0x74, 0x7f, 0x88,
924 			  0x94, 0x9d, 0xa6, 0xae, 0xb5, 0xbd, 0xc4, 0xcb,
925 			  0xd1, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54, 0x64,
926 			  0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2, 0xe2,
927 			  0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
928 			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
929 			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
930 	0x10, 0x80, 0x22, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
931 			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x3f, 0x01,
932 			  0x00, 0x00, 0xef, 0x00, 0x02, 0x0a, 0x82, 0x02,
933 			  0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40, 0x01,
934 			  0xf0, 0x00,
935 
936 	0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
937 			  0x00, 0x78, 0x3f, 0x3f, 0x00, 0xf2, 0x8f, 0x81,
938 			  0x40,
939 	0x10, 0x1a, 0x01, 0x15,
940 	0x10, 0x00, 0x01, 0x2f,
941 	0x10, 0x8c, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
942 	0x10, 0x1b, 0x02, 0x00, 0x00,
943 	0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
944 	0x10, 0x26, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
945 	0x10, 0x24, 0x02, 0x40, 0x06,
946 	0x10, 0x0e, 0x01, 0x08,
947 	0x10, 0x48, 0x11, 0x00, 0x15, 0x40, 0x67, 0x84, 0x9d, 0xb2, 0xc6,
948 			  0xd6, 0xe7, 0xf6, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
949 			  0xf9,
950 	0x10, 0x03, 0x01, 0x00,
951 	0x10, 0x0f, 0x02, 0x16, 0x16,
952 	0x10, 0x03, 0x01, 0x0c,
953 	0x10, 0x48, 0x11, 0x00, 0x15, 0x40, 0x67, 0x84, 0x9d, 0xb2, 0xc6,
954 			  0xd6, 0xe7, 0xf6, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
955 			  0xf9,
956 	0x10, 0x0b, 0x01, 0x26,
957 	0x10, 0x0d, 0x01, 0x10,
958 	0x10, 0x0c, 0x01, 0x1c,
959 	0x05, 0x06, 0x01, 0x03,
960 	0x05, 0x04, 0x01, 0x00,
961 	0, 0, 0
962 };
963 
964 /* 06a5:d001 - nw802 - Panasonic
965  *		GP-KR651US (Philips TDA8786) */
966 static const u8 kr651_start_1[] = {
967 	0x04, 0x06, 0x01, 0x04,
968 	0x00, 0x00, 0x40, 0x44, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x48,
969 			  0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
970 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
971 			  0x00, 0x0b, 0x00, 0x1b, 0x00, 0xc8, 0x00, 0xf4,
972 			  0x05, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
973 			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
974 			  0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
975 			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
976 	0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
977 			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
978 			  0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
979 			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
980 			  0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
981 			  0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
982 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
983 			  0x00, 0x5d, 0x00, 0xc7, 0x00, 0x7e, 0x00, 0x30,
984 	0x00, 0x80, 0x1f, 0x18, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
985 			  0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
986 			  0x00, 0x0c, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
987 			  0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
988 	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
989 			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
990 			  0x40, 0x20,
991 	0x03, 0x00, 0x03, 0x02, 0x00, 0x00,
992 	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
993 	0x06, 0x00, 0x02, 0x09, 0x99,
994 	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
995 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
996 			  0x00, 0x00, 0x00, 0x00, 0x00,
997 	0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
998 			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
999 			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1000 			  0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
1001 			  0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
1002 			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1003 			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1004 			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1005 	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1006 			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1007 			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1008 			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1009 			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1010 			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1011 			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1012 			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1013 	0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1014 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x05, 0x82,
1015 			  0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1016 			  0x01, 0xf0, 0x00,
1017 	0, 0, 0
1018 };
1019 static const u8 kr651_start_qvga[] = {
1020 	0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
1021 			  0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
1022 			  0x40,
1023 	0x10, 0x1a, 0x01, 0x03,
1024 	0x10, 0x00, 0x01, 0xac,
1025 	0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1026 	0x10, 0x1b, 0x02, 0x00, 0x00,
1027 	0x10, 0x11, 0x08, 0x29, 0x00, 0x18, 0x01, 0x1f, 0x00, 0xd2, 0x00,
1028 	0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
1029 	0x10, 0x1d, 0x02, 0x28, 0x01,
1030 	0, 0, 0
1031 };
1032 static const u8 kr651_start_vga[] = {
1033 	0x02, 0x00, 0x11, 0x78, 0xa0, 0x8c, 0x78, 0xa0, 0x00, 0x00, 0x00,
1034 			  0x00, 0xf0, 0x30, 0x03, 0x01, 0x82, 0x82, 0x98,
1035 			  0x80,
1036 	0x10, 0x1a, 0x01, 0x03,
1037 	0x10, 0x00, 0x01, 0xa0,
1038 	0x10, 0x85, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
1039 	0x10, 0x1b, 0x02, 0x00, 0x00,
1040 	0x10, 0x11, 0x08, 0x51, 0x00, 0x30, 0x02, 0x3d, 0x00, 0xa4, 0x01,
1041 	0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
1042 	0x10, 0x1d, 0x02, 0x68, 0x00,
1043 };
1044 static const u8 kr651_start_2[] = {
1045 	0x10, 0x0e, 0x01, 0x08,
1046 	0x10, 0x41, 0x11, 0x00, 0x11, 0x3c, 0x5c, 0x74, 0x88, 0x99, 0xa8,
1047 			  0xb7, 0xc4, 0xd0, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
1048 			  0xdc,
1049 	0x10, 0x03, 0x01, 0x00,
1050 	0x10, 0x0f, 0x02, 0x0c, 0x0c,
1051 	0x10, 0x03, 0x01, 0x0c,
1052 	0x10, 0x41, 0x11, 0x00, 0x11, 0x3c, 0x5c, 0x74, 0x88, 0x99, 0xa8,
1053 			  0xb7, 0xc4, 0xd0, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
1054 			  0xdc,
1055 	0x10, 0x0b, 0x01, 0x10,
1056 	0x10, 0x0d, 0x01, 0x10,
1057 	0x10, 0x0c, 0x01, 0x2d,
1058 	0x04, 0x06, 0x01, 0x03,
1059 	0x04, 0x04, 0x01, 0x00,
1060 	0, 0, 0
1061 };
1062 
1063 /* nw802 - iRez Kritter cam */
1064 static const u8 kritter_start[] = {
1065 	0x04, 0x06, 0x01, 0x06,
1066 	0x00, 0x00, 0x40, 0x44, 0x96, 0x98, 0x94, 0x03, 0x18, 0x00, 0x48,
1067 			  0x0f, 0x1e, 0x00, 0x0c, 0x02, 0x01, 0x00, 0x19,
1068 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1069 			  0x00, 0x0b, 0x00, 0x1b, 0x00, 0x0a, 0x01, 0x28,
1070 			  0x07, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
1071 			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1072 			  0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
1073 			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1074 	0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
1075 			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1076 			  0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
1077 			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1078 			  0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
1079 			  0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1080 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
1081 			  0x00, 0x5d, 0x00, 0x0e, 0x00, 0x7e, 0x00, 0x30,
1082 	0x00, 0x80, 0x1f, 0x18, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
1083 			  0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
1084 			  0x00, 0x0b, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
1085 			  0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
1086 	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1087 			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1088 			  0x40, 0x20,
1089 	0x03, 0x00, 0x03, 0x02, 0x00, 0x00,
1090 	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
1091 	0x06, 0x00, 0x02, 0x09, 0x99,
1092 	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1093 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1094 			  0x00, 0x00, 0x00, 0x00, 0x00,
1095 	0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
1096 			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
1097 			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1098 			  0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
1099 			  0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
1100 			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1101 			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1102 			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1103 	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1104 			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1105 			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1106 			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1107 			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1108 			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1109 			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1110 			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1111 	0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1112 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x82,
1113 			  0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1114 			  0x01, 0xf0, 0x00,
1115 	0x02, 0x00, 0x11, 0x3c, 0x50, 0x8c, 0x3c, 0x50, 0x00, 0x00, 0x00,
1116 			  0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xf0,
1117 			  0x40,
1118 	0x10, 0x1a, 0x01, 0x03,
1119 	0x10, 0x00, 0x01, 0xaf,
1120 	0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1121 	0x10, 0x1b, 0x02, 0x3b, 0x01,
1122 	0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
1123 	0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
1124 	0x10, 0x1d, 0x02, 0x00, 0x00,
1125 	0x10, 0x0e, 0x01, 0x08,
1126 	0x10, 0x41, 0x11, 0x00, 0x0d, 0x36, 0x4e, 0x60, 0x6f, 0x7b, 0x86,
1127 			  0x90, 0x98, 0xa1, 0xa9, 0xb1, 0xb7, 0xbe, 0xc4,
1128 			  0xcb,
1129 	0x10, 0x03, 0x01, 0x00,
1130 	0x10, 0x0f, 0x02, 0x0d, 0x0d,
1131 	0x10, 0x03, 0x01, 0x02,
1132 	0x10, 0x41, 0x11, 0x00, 0x0d, 0x36, 0x4e, 0x60, 0x6f, 0x7b, 0x86,
1133 			  0x90, 0x98, 0xa1, 0xa9, 0xb1, 0xb7, 0xbe, 0xc4,
1134 			  0xcb,
1135 	0x10, 0x0b, 0x01, 0x17,
1136 	0x10, 0x0d, 0x01, 0x10,
1137 	0x10, 0x0c, 0x01, 0x1e,
1138 	0x04, 0x06, 0x01, 0x03,
1139 	0x04, 0x04, 0x01, 0x00,
1140 	0, 0, 0
1141 };
1142 
1143 /* nw802 - Mustek Wcam 300 mini */
1144 static const u8 mustek_start[] = {
1145 	0x04, 0x06, 0x01, 0x04,
1146 	0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x92, 0x03, 0x10, 0x00, 0x4d,
1147 			  0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
1148 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1149 			  0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
1150 			  0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
1151 			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
1152 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
1153 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
1154 	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1155 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1156 			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1157 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1158 			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
1159 			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1160 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
1161 			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
1162 	0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00,
1163 			  0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
1164 			  0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94,
1165 			  0x00, 0x10, 0x06, 0xfc, 0x05, 0x0c, 0x06,
1166 	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1167 			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1168 			  0x40, 0x20,
1169 	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
1170 	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
1171 	0x06, 0x00, 0x02, 0x09, 0x99,
1172 	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1173 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1174 			  0x00, 0x00, 0x00, 0x00, 0x00,
1175 	0x10, 0x00, 0x40, 0xa1, 0x02, 0x80, 0x00, 0x13, 0x00, 0x00, 0x00,
1176 			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
1177 			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1178 			  0x00, 0x49, 0x13, 0x00, 0x00, 0xc0, 0x00, 0x14,
1179 			  0x02, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00,
1180 			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1181 			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1182 			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1183 	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1184 			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1185 			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1186 			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1187 			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1188 			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1189 			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1190 			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1191 	0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1192 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x01, 0x82,
1193 			  0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1194 			  0x01, 0xf0, 0x00,
1195 	0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
1196 			  0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
1197 			  0x40,
1198 	0x10, 0x1a, 0x01, 0x00,
1199 	0x10, 0x00, 0x01, 0xad,
1200 	0x00, 0x00, 0x01, 0x08,
1201 	0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1202 	0x10, 0x1b, 0x02, 0x00, 0x00,
1203 	0x10, 0x11, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1204 	0x10, 0x1d, 0x08, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1205 	0x10, 0x0e, 0x01, 0x0f,
1206 	0x10, 0x41, 0x11, 0x00, 0x0f, 0x29, 0x4a, 0x64, 0x7a, 0x8c, 0x9e,
1207 			  0xad, 0xba, 0xc7, 0xd3, 0xde, 0xe8, 0xf1, 0xf9,
1208 			  0xff,
1209 	0x10, 0x0f, 0x02, 0x11, 0x11,
1210 	0x10, 0x03, 0x01, 0x0c,
1211 	0x10, 0x41, 0x11, 0x00, 0x0f, 0x29, 0x4a, 0x64, 0x7a, 0x8c, 0x9e,
1212 			  0xad, 0xba, 0xc7, 0xd3, 0xde, 0xe8, 0xf1, 0xf9,
1213 			  0xff,
1214 	0x10, 0x0b, 0x01, 0x1c,
1215 	0x10, 0x0d, 0x01, 0x1a,
1216 	0x10, 0x0c, 0x01, 0x34,
1217 	0x04, 0x05, 0x01, 0x61,
1218 	0x04, 0x04, 0x01, 0x40,
1219 	0x04, 0x06, 0x01, 0x03,
1220 	0, 0, 0
1221 };
1222 
1223 /* nw802 - Scope USB Microscope M2 (ProScope) (Hitachi HD49322BF) */
1224 static const u8 proscope_init[] = {
1225 	0x04, 0x05, 0x01, 0x21,
1226 	0x04, 0x04, 0x01, 0x01,
1227 	0, 0, 0
1228 };
1229 static const u8 proscope_start_1[] = {
1230 	0x04, 0x06, 0x01, 0x04,
1231 	0x00, 0x00, 0x40, 0x10, 0x01, 0x00, 0xf9, 0x02, 0x10, 0x00, 0x04,
1232 			  0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
1233 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1234 			  0x00, 0x08, 0x00, 0x17, 0x00, 0xce, 0x00, 0xf4,
1235 			  0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
1236 			  0x00, 0xce, 0x00, 0xf8, 0x03, 0x3e, 0x00, 0x86,
1237 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
1238 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
1239 	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0xb6,
1240 			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1241 			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1242 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1243 			  0x00, 0xf6, 0x03, 0x34, 0x04, 0xf6, 0x03, 0x34,
1244 			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1245 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xe8,
1246 			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
1247 	0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x1f, 0x0f, 0x08, 0x20, 0xa8, 0x00,
1248 			  0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
1249 			  0x00, 0x0c, 0x02, 0x01, 0x00, 0x19, 0x00, 0x94,
1250 			  0x00, 0x10, 0x06, 0x10, 0x00, 0x36, 0x00,
1251 	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1252 			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1253 			  0x40, 0x20,
1254 	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
1255 	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
1256 	0x06, 0x00, 0x02, 0x09, 0x99,
1257 	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1258 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1259 			  0x00, 0x00, 0x00, 0x00, 0x00,
1260 	0x10, 0x00, 0x40, 0xad, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
1261 			  0x00, 0x00, 0x00, 0x10, 0x1f, 0x10, 0x08, 0x0a,
1262 			  0x0a, 0x51, 0x00, 0xf1, 0x00, 0x3c, 0x00, 0xb4,
1263 			  0x00, 0x49, 0x13, 0x00, 0x00, 0x8c, 0x04, 0x01,
1264 			  0x20, 0x02, 0x00, 0x03, 0x00, 0x20, 0x00, 0x00,
1265 			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1266 			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1267 			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1268 	0x10, 0x40, 0x40, 0x80, 0x00, 0x2d, 0x46, 0x58, 0x67, 0x74, 0x7f,
1269 			  0x88, 0x94, 0x9d, 0xa6, 0xae, 0xb5, 0xbd, 0xc4,
1270 			  0xcb, 0xd1, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1271 			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1272 			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1273 			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1274 			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1275 			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1276 	0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x3f,
1277 			  0x01, 0x00, 0x00, 0xef, 0x00, 0x09, 0x05, 0x82,
1278 			  0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1279 			  0x01, 0xf0, 0x00,
1280 	0, 0, 0
1281 };
1282 static const u8 proscope_start_qvga[] = {
1283 	0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
1284 			  0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
1285 			  0x40,
1286 	0x10, 0x1a, 0x01, 0x06,
1287 	0x00, 0x03, 0x02, 0xf9, 0x02,
1288 	0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1289 	0x10, 0x1b, 0x02, 0x00, 0x00,
1290 	0x10, 0x11, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1291 	0x10, 0x1d, 0x08, 0xc0, 0x0d, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
1292 	0x10, 0x0e, 0x01, 0x10,
1293 	0, 0, 0
1294 };
1295 static const u8 proscope_start_vga[] = {
1296 	0x00, 0x03, 0x02, 0xf9, 0x02,
1297 	0x10, 0x85, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
1298 	0x02, 0x00, 0x11, 0x78, 0xa0, 0x8c, 0x78, 0xa0, 0x00, 0x00, 0x00,
1299 			  0x00, 0xf0, 0x16, 0x00, 0x00, 0x82, 0x84, 0x00,
1300 			  0x80,
1301 	0x10, 0x1a, 0x01, 0x06,
1302 	0x10, 0x00, 0x01, 0xa1,
1303 	0x10, 0x1b, 0x02, 0x00, 0x00,
1304 	0x10, 0x1d, 0x08, 0xc0, 0x0d, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
1305 	0x10, 0x11, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
1306 	0x10, 0x0e, 0x01, 0x10,
1307 	0x10, 0x41, 0x11, 0x00, 0x10, 0x51, 0x6e, 0x83, 0x93, 0xa1, 0xae,
1308 			  0xb9, 0xc3, 0xcc, 0xd4, 0xdd, 0xe4, 0xeb, 0xf2,
1309 			  0xf9,
1310 	0x10, 0x03, 0x01, 0x00,
1311 	0, 0, 0
1312 };
1313 static const u8 proscope_start_2[] = {
1314 	0x10, 0x0f, 0x02, 0x0c, 0x0c,
1315 	0x10, 0x03, 0x01, 0x0c,
1316 	0x10, 0x41, 0x11, 0x00, 0x10, 0x51, 0x6e, 0x83, 0x93, 0xa1, 0xae,
1317 			  0xb9, 0xc3, 0xcc, 0xd4, 0xdd, 0xe4, 0xeb, 0xf2,
1318 			  0xf9,
1319 	0x10, 0x0b, 0x01, 0x0b,
1320 	0x10, 0x0d, 0x01, 0x10,
1321 	0x10, 0x0c, 0x01, 0x1b,
1322 	0x04, 0x06, 0x01, 0x03,
1323 	0x04, 0x05, 0x01, 0x21,
1324 	0x04, 0x04, 0x01, 0x00,
1325 	0, 0, 0
1326 };
1327 
1328 /* nw800 - hv7121b? (seems pas106) - Divio Chicony TwinkleCam */
1329 static const u8 twinkle_start[] = {
1330 	0x04, 0x06, 0x01, 0x44,
1331 	0x04, 0x06, 0x01, 0x00,
1332 	0x00, 0x00, 0x40, 0x14, 0x83, 0x00, 0xba, 0x01, 0x10, 0x00, 0x4f,
1333 			  0xef, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x19,
1334 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1335 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x06, 0x00, 0xfc,
1336 			  0x01, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
1337 			  0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
1338 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
1339 			  0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
1340 	0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1341 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1342 			  0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1343 			  0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1344 			  0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
1345 			  0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1346 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
1347 			  0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
1348 	0x00, 0x80, 0x1f, 0xb8, 0x48, 0x0f, 0x04, 0x88, 0x14, 0x68, 0x00,
1349 			  0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x03,
1350 			  0x00, 0x24, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
1351 			  0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
1352 	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1353 			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1354 			  0x40, 0x20,
1355 	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
1356 	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0x00,
1357 	0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
1358 	0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1359 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1360 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1361 			  0x00, 0x00, 0x00,
1362 	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1363 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1364 			  0x00, 0x00, 0x00, 0x00, 0x00,
1365 	0x10, 0x00, 0x40, 0x80, 0x02, 0x20, 0x00, 0x11, 0x00, 0x00, 0x00,
1366 			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x08,
1367 			  0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1368 			  0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
1369 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
1370 			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1371 			  0x03, 0x00, 0x00, 0x10, 0x00, 0x20, 0x10, 0x06,
1372 			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x00, 0x80,
1373 	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1374 			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1375 			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1376 			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1377 			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1378 			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1379 			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1380 			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1381 	0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1382 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x62,
1383 			  0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
1384 			  0x01, 0x60, 0x01, 0x00, 0x00,
1385 
1386 	0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
1387 	0x04, 0x04, 0x01, 0x10,
1388 	0x04, 0x04, 0x01, 0x00,
1389 	0x04, 0x05, 0x01, 0x61,
1390 	0x04, 0x04, 0x01, 0x01,
1391 	I2C0, 0x40, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x00,
1392 			  0x00, 0x00, 0x00, 0x0a,
1393 	I2C0, 0x40, 0x02, 0x11, 0x06,
1394 	I2C0, 0x40, 0x02, 0x14, 0x00,
1395 	I2C0, 0x40, 0x02, 0x13, 0x01,		/* i2c end */
1396 	I2C0, 0x40, 0x02, 0x07, 0x01,
1397 	0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
1398 			  0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
1399 			  0x40,
1400 	I2C0, 0x40, 0x02, 0x02, 0x0c,
1401 	I2C0, 0x40, 0x02, 0x13, 0x01,
1402 	0x10, 0x00, 0x01, 0x01,
1403 	0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
1404 			  0x20, 0x01, 0x60, 0x01,
1405 	I2C0, 0x40, 0x02, 0x05, 0x0f,
1406 	I2C0, 0x40, 0x02, 0x13, 0x01,
1407 	I2C0, 0x40, 0x08, 0x08, 0x04, 0x0b, 0x01, 0x01, 0x02, 0x00, 0x17,
1408 	I2C0, 0x40, 0x03, 0x12, 0x00, 0x01,
1409 	0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
1410 	I2C0, 0x40, 0x02, 0x12, 0x00,
1411 	I2C0, 0x40, 0x02, 0x0e, 0x00,
1412 	I2C0, 0x40, 0x02, 0x11, 0x06,
1413 	0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
1414 			  0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
1415 			  0xf9,
1416 	0x10, 0x03, 0x01, 0x00,
1417 	0x10, 0x0f, 0x02, 0x0c, 0x0c,
1418 	0x10, 0x03, 0x01, 0x06,
1419 	0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
1420 			  0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
1421 			  0xf9,
1422 	0x10, 0x0b, 0x01, 0x19,
1423 	0x10, 0x0d, 0x01, 0x10,
1424 	0x10, 0x0c, 0x01, 0x0d,
1425 	0x04, 0x06, 0x01, 0x03,
1426 	0x04, 0x05, 0x01, 0x61,
1427 	0x04, 0x04, 0x01, 0x41,
1428 	0, 0, 0
1429 };
1430 
1431 /* nw802 dvc-v6 */
1432 static const u8 dvcv6_start[] = {
1433 	0x04, 0x06, 0x01, 0x06,
1434 	0x00, 0x00, 0x40, 0x54, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x4c,
1435 			  0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
1436 			  0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1437 			  0x00, 0x0b, 0x00, 0x1b, 0x00, 0xc8, 0x00, 0xf4,
1438 			  0x05, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
1439 			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1440 			  0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
1441 			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1442 	0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
1443 			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1444 			  0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
1445 			  0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1446 			  0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
1447 			  0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1448 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
1449 			  0x00, 0x5d, 0x00, 0xc7, 0x00, 0x7e, 0x00, 0x30,
1450 	0x00, 0x80, 0x1f, 0x98, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
1451 			  0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
1452 			  0x00, 0x0c, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
1453 			  0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
1454 	0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1455 			  0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1456 			  0x40, 0x20,
1457 	0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
1458 	0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
1459 	0x06, 0x00, 0x02, 0x09, 0x99,
1460 	0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1461 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1462 			  0x00, 0x00, 0x00, 0x00, 0x00,
1463 	0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
1464 			  0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
1465 			  0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1466 			  0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
1467 			  0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
1468 			  0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1469 			  0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1470 			  0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1471 	0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1472 			  0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1473 			  0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1474 			  0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1475 			  0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1476 			  0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1477 			  0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1478 			  0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1479 	0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1480 			  0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x05, 0x82,
1481 			  0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1482 			  0x01, 0xf0, 0x00,
1483 	0x00, 0x03, 0x02, 0x94, 0x03,
1484 	0x00, 0x1d, 0x04, 0x0a, 0x01, 0x28, 0x07,
1485 	0x00, 0x7b, 0x02, 0xe0, 0x00,
1486 	0x10, 0x8d, 0x01, 0x00,
1487 	0x00, 0x09, 0x04, 0x1e, 0x00, 0x0c, 0x02,
1488 	0x00, 0x91, 0x02, 0x0b, 0x02,
1489 	0x10, 0x00, 0x01, 0xaf,
1490 	0x02, 0x00, 0x11, 0x3c, 0x50, 0x8f, 0x3c, 0x50, 0x00, 0x00, 0x00,
1491 			  0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xf0,
1492 			  0x40,
1493 	0x10, 0x1a, 0x01, 0x02,
1494 	0x10, 0x00, 0x01, 0xaf,
1495 	0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1496 	0x10, 0x1b, 0x02, 0x07, 0x01,
1497 	0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
1498 	0x10, 0x1f, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
1499 	0x10, 0x1d, 0x02, 0x40, 0x06,
1500 	0x10, 0x0e, 0x01, 0x08,
1501 	0x10, 0x41, 0x11, 0x00, 0x0f, 0x54, 0x6f, 0x82, 0x91, 0x9f, 0xaa,
1502 			  0xb4, 0xbd, 0xc5, 0xcd, 0xd5, 0xdb, 0xdc, 0xdc,
1503 			  0xdc,
1504 	0x10, 0x03, 0x01, 0x00,
1505 	0x10, 0x0f, 0x02, 0x12, 0x12,
1506 	0x10, 0x03, 0x01, 0x11,
1507 	0x10, 0x41, 0x11, 0x00, 0x0f, 0x54, 0x6f, 0x82, 0x91, 0x9f, 0xaa,
1508 			  0xb4, 0xbd, 0xc5, 0xcd, 0xd5, 0xdb, 0xdc, 0xdc,
1509 			  0xdc,
1510 	0x10, 0x0b, 0x01, 0x16,
1511 	0x10, 0x0d, 0x01, 0x10,
1512 	0x10, 0x0c, 0x01, 0x1a,
1513 	0x04, 0x06, 0x01, 0x03,
1514 	0x04, 0x04, 0x01, 0x00,
1515 };
1516 
1517 static const u8 *webcam_start[] = {
1518 	[Generic800] = nw800_start,
1519 	[SpaceCam] = spacecam_start,
1520 	[SpaceCam2] = spacecam2_start,
1521 	[Cvideopro] = cvideopro_start,
1522 	[Dlink350c] = dlink_start,
1523 	[DS3303u] = ds3303_start,
1524 	[Kr651us] = kr651_start_1,
1525 	[Kritter] = kritter_start,
1526 	[Mustek300] = mustek_start,
1527 	[Proscope] = proscope_start_1,
1528 	[Twinkle] = twinkle_start,
1529 	[DvcV6] = dvcv6_start,
1530 	[P35u] = nw801_start_1,
1531 	[Generic802] = nw802_start,
1532 };
1533 
1534 /* -- write a register -- */
1535 static void reg_w(struct gspca_dev *gspca_dev,
1536 			u16 index,
1537 			const u8 *data,
1538 			int len)
1539 {
1540 	struct usb_device *dev = gspca_dev->dev;
1541 	int ret;
1542 
1543 	if (gspca_dev->usb_err < 0)
1544 		return;
1545 	if (len == 1)
1546 		PDEBUG(D_USBO, "SET 00 0000 %04x %02x", index, *data);
1547 	else
1548 		PDEBUG(D_USBO, "SET 00 0000 %04x %02x %02x ...",
1549 				index, *data, data[1]);
1550 	memcpy(gspca_dev->usb_buf, data, len);
1551 	ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1552 			0x00,
1553 			USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1554 			0x00,		/* value */
1555 			index,
1556 			gspca_dev->usb_buf,
1557 			len,
1558 			500);
1559 	if (ret < 0) {
1560 		pr_err("reg_w err %d\n", ret);
1561 		gspca_dev->usb_err = ret;
1562 	}
1563 }
1564 
1565 /* -- read registers in usb_buf -- */
1566 static void reg_r(struct gspca_dev *gspca_dev,
1567 			u16 index,
1568 			int len)
1569 {
1570 	struct usb_device *dev = gspca_dev->dev;
1571 	int ret;
1572 
1573 	if (gspca_dev->usb_err < 0)
1574 		return;
1575 	ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
1576 			0x00,
1577 			USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1578 			0x00, index,
1579 			gspca_dev->usb_buf, len, 500);
1580 	if (ret < 0) {
1581 		pr_err("reg_r err %d\n", ret);
1582 		gspca_dev->usb_err = ret;
1583 		return;
1584 	}
1585 	if (len == 1)
1586 		PDEBUG(D_USBI, "GET 00 0000 %04x %02x",
1587 				index, gspca_dev->usb_buf[0]);
1588 	else
1589 		PDEBUG(D_USBI, "GET 00 0000 %04x %02x %02x ..",
1590 				index, gspca_dev->usb_buf[0],
1591 				gspca_dev->usb_buf[1]);
1592 }
1593 
1594 static void i2c_w(struct gspca_dev *gspca_dev,
1595 			u8 i2c_addr,
1596 			const u8 *data,
1597 			int len)
1598 {
1599 	u8 val[2];
1600 	int i;
1601 
1602 	reg_w(gspca_dev, 0x0600, data + 1, len - 1);
1603 	reg_w(gspca_dev, 0x0600, data, len);
1604 	val[0] = len;
1605 	val[1] = i2c_addr;
1606 	reg_w(gspca_dev, 0x0502, val, 2);
1607 	val[0] = 0x01;
1608 	reg_w(gspca_dev, 0x0501, val, 1);
1609 	for (i = 5; --i >= 0; ) {
1610 		msleep(4);
1611 		reg_r(gspca_dev, 0x0505, 1);
1612 		if (gspca_dev->usb_err < 0)
1613 			return;
1614 		if (gspca_dev->usb_buf[0] == 0)
1615 			return;
1616 	}
1617 	gspca_dev->usb_err = -ETIME;
1618 }
1619 
1620 static void reg_w_buf(struct gspca_dev *gspca_dev,
1621 			const u8 *cmd)
1622 {
1623 	u16 reg;
1624 	int len;
1625 
1626 	for (;;) {
1627 		reg = *cmd++ << 8;
1628 		reg += *cmd++;
1629 		len = *cmd++;
1630 		if (len == 0)
1631 			break;
1632 		if (cmd[-3] != I2C0)
1633 			reg_w(gspca_dev, reg, cmd, len);
1634 		else
1635 			i2c_w(gspca_dev, reg, cmd, len);
1636 		cmd += len;
1637 	}
1638 }
1639 
1640 static int swap_bits(int v)
1641 {
1642 	int r, i;
1643 
1644 	r = 0;
1645 	for (i = 0; i < 8; i++) {
1646 		r <<= 1;
1647 		if (v & 1)
1648 			r++;
1649 		v >>= 1;
1650 	}
1651 	return r;
1652 }
1653 
1654 static void setgain(struct gspca_dev *gspca_dev, u8 val)
1655 {
1656 	struct sd *sd = (struct sd *) gspca_dev;
1657 	u8 v[2];
1658 
1659 	switch (sd->webcam) {
1660 	case P35u:
1661 		reg_w(gspca_dev, 0x1026, &val, 1);
1662 		break;
1663 	case Kr651us:
1664 		/* 0 - 253 */
1665 		val = swap_bits(val);
1666 		v[0] = val << 3;
1667 		v[1] = val >> 5;
1668 		reg_w(gspca_dev, 0x101d, v, 2);	/* SIF reg0/1 (AGC) */
1669 		break;
1670 	}
1671 }
1672 
1673 static void setexposure(struct gspca_dev *gspca_dev, s32 val)
1674 {
1675 	struct sd *sd = (struct sd *) gspca_dev;
1676 	u8 v[2];
1677 
1678 	switch (sd->webcam) {
1679 	case P35u:
1680 		v[0] = ((9 - val) << 3) | 0x01;
1681 		reg_w(gspca_dev, 0x1019, v, 1);
1682 		break;
1683 	case Cvideopro:
1684 	case DvcV6:
1685 	case Kritter:
1686 	case Kr651us:
1687 		v[0] = val;
1688 		v[1] = val >> 8;
1689 		reg_w(gspca_dev, 0x101b, v, 2);
1690 		break;
1691 	}
1692 }
1693 
1694 static void setautogain(struct gspca_dev *gspca_dev, s32 val)
1695 {
1696 	struct sd *sd = (struct sd *) gspca_dev;
1697 	int w, h;
1698 
1699 	if (!val) {
1700 		sd->ag_cnt = -1;
1701 		return;
1702 	}
1703 	sd->ag_cnt = AG_CNT_START;
1704 
1705 	reg_r(gspca_dev, 0x1004, 1);
1706 	if (gspca_dev->usb_buf[0] & 0x04) {	/* if AE_FULL_FRM */
1707 		sd->ae_res = gspca_dev->pixfmt.width * gspca_dev->pixfmt.height;
1708 	} else {				/* get the AE window size */
1709 		reg_r(gspca_dev, 0x1011, 8);
1710 		w = (gspca_dev->usb_buf[1] << 8) + gspca_dev->usb_buf[0]
1711 		  - (gspca_dev->usb_buf[3] << 8) - gspca_dev->usb_buf[2];
1712 		h = (gspca_dev->usb_buf[5] << 8) + gspca_dev->usb_buf[4]
1713 		  - (gspca_dev->usb_buf[7] << 8) - gspca_dev->usb_buf[6];
1714 		sd->ae_res = h * w;
1715 		if (sd->ae_res == 0)
1716 			sd->ae_res = gspca_dev->pixfmt.width *
1717 					gspca_dev->pixfmt.height;
1718 	}
1719 }
1720 
1721 static int nw802_test_reg(struct gspca_dev *gspca_dev,
1722 			u16 index,
1723 			u8 value)
1724 {
1725 	/* write the value */
1726 	reg_w(gspca_dev, index, &value, 1);
1727 
1728 	/* read it */
1729 	reg_r(gspca_dev, index, 1);
1730 
1731 	return gspca_dev->usb_buf[0] == value;
1732 }
1733 
1734 /* this function is called at probe time */
1735 static int sd_config(struct gspca_dev *gspca_dev,
1736 			const struct usb_device_id *id)
1737 {
1738 	struct sd *sd = (struct sd *) gspca_dev;
1739 
1740 	if ((unsigned) webcam >= NWEBCAMS)
1741 		webcam = 0;
1742 	sd->webcam = webcam;
1743 	gspca_dev->cam.needs_full_bandwidth = 1;
1744 	sd->ag_cnt = -1;
1745 
1746 	/*
1747 	 * Autodetect sequence inspired from some log.
1748 	 * We try to detect what registers exist or not.
1749 	 * If 0x0500 does not exist => NW802
1750 	 * If it does, test 0x109b. If it doesn't exist,
1751 	 * then it's a NW801. Else, a NW800
1752 	 * If a et31x110 (nw800 and 06a5:d800)
1753 	 *	get the sensor ID
1754 	 */
1755 	if (!nw802_test_reg(gspca_dev, 0x0500, 0x55)) {
1756 		sd->bridge = BRIDGE_NW802;
1757 		if (sd->webcam == Generic800)
1758 			sd->webcam = Generic802;
1759 	} else if (!nw802_test_reg(gspca_dev, 0x109b, 0xaa)) {
1760 		sd->bridge = BRIDGE_NW801;
1761 		if (sd->webcam == Generic800)
1762 			sd->webcam = P35u;
1763 	} else if (id->idVendor == 0x06a5 && id->idProduct == 0xd800) {
1764 		reg_r(gspca_dev, 0x0403, 1);		/* GPIO */
1765 		PDEBUG(D_PROBE, "et31x110 sensor type %02x",
1766 				gspca_dev->usb_buf[0]);
1767 		switch (gspca_dev->usb_buf[0] >> 1) {
1768 		case 0x00:				/* ?? */
1769 			if (sd->webcam == Generic800)
1770 				sd->webcam = SpaceCam;
1771 			break;
1772 		case 0x01:				/* Hynix? */
1773 			if (sd->webcam == Generic800)
1774 				sd->webcam = Twinkle;
1775 			break;
1776 		case 0x0a:				/* Pixart */
1777 			if (sd->webcam == Generic800)
1778 				sd->webcam = SpaceCam2;
1779 			break;
1780 		}
1781 	}
1782 	if (webcam_chip[sd->webcam] != sd->bridge) {
1783 		pr_err("Bad webcam type %d for NW80%d\n",
1784 		       sd->webcam, sd->bridge);
1785 		gspca_dev->usb_err = -ENODEV;
1786 		return gspca_dev->usb_err;
1787 	}
1788 	PDEBUG(D_PROBE, "Bridge nw80%d - type: %d", sd->bridge, sd->webcam);
1789 
1790 	if (sd->bridge == BRIDGE_NW800) {
1791 		switch (sd->webcam) {
1792 		case DS3303u:
1793 			gspca_dev->cam.cam_mode = cif_mode;	/* qvga */
1794 			break;
1795 		default:
1796 			gspca_dev->cam.cam_mode = &cif_mode[1];	/* cif */
1797 			break;
1798 		}
1799 		gspca_dev->cam.nmodes = 1;
1800 	} else {
1801 		gspca_dev->cam.cam_mode = vga_mode;
1802 		switch (sd->webcam) {
1803 		case Kr651us:
1804 		case Proscope:
1805 		case P35u:
1806 			gspca_dev->cam.nmodes = ARRAY_SIZE(vga_mode);
1807 			break;
1808 		default:
1809 			gspca_dev->cam.nmodes = 1;	/* qvga only */
1810 			break;
1811 		}
1812 	}
1813 
1814 	return gspca_dev->usb_err;
1815 }
1816 
1817 /* this function is called at probe and resume time */
1818 static int sd_init(struct gspca_dev *gspca_dev)
1819 {
1820 	struct sd *sd = (struct sd *) gspca_dev;
1821 
1822 	switch (sd->bridge) {
1823 	case BRIDGE_NW800:
1824 		switch (sd->webcam) {
1825 		case SpaceCam:
1826 			reg_w_buf(gspca_dev, spacecam_init);
1827 			break;
1828 		default:
1829 			reg_w_buf(gspca_dev, nw800_init);
1830 			break;
1831 		}
1832 		break;
1833 	default:
1834 		switch (sd->webcam) {
1835 		case Mustek300:
1836 		case P35u:
1837 		case Proscope:
1838 			reg_w_buf(gspca_dev, proscope_init);
1839 			break;
1840 		}
1841 		break;
1842 	}
1843 	return gspca_dev->usb_err;
1844 }
1845 
1846 /* -- start the camera -- */
1847 static int sd_start(struct gspca_dev *gspca_dev)
1848 {
1849 	struct sd *sd = (struct sd *) gspca_dev;
1850 	const u8 *cmd;
1851 
1852 	cmd = webcam_start[sd->webcam];
1853 	reg_w_buf(gspca_dev, cmd);
1854 	switch (sd->webcam) {
1855 	case P35u:
1856 		if (gspca_dev->pixfmt.width == 320)
1857 			reg_w_buf(gspca_dev, nw801_start_qvga);
1858 		else
1859 			reg_w_buf(gspca_dev, nw801_start_vga);
1860 		reg_w_buf(gspca_dev, nw801_start_2);
1861 		break;
1862 	case Kr651us:
1863 		if (gspca_dev->pixfmt.width == 320)
1864 			reg_w_buf(gspca_dev, kr651_start_qvga);
1865 		else
1866 			reg_w_buf(gspca_dev, kr651_start_vga);
1867 		reg_w_buf(gspca_dev, kr651_start_2);
1868 		break;
1869 	case Proscope:
1870 		if (gspca_dev->pixfmt.width == 320)
1871 			reg_w_buf(gspca_dev, proscope_start_qvga);
1872 		else
1873 			reg_w_buf(gspca_dev, proscope_start_vga);
1874 		reg_w_buf(gspca_dev, proscope_start_2);
1875 		break;
1876 	}
1877 
1878 	sd->exp_too_high_cnt = 0;
1879 	sd->exp_too_low_cnt = 0;
1880 	return gspca_dev->usb_err;
1881 }
1882 
1883 static void sd_stopN(struct gspca_dev *gspca_dev)
1884 {
1885 	struct sd *sd = (struct sd *) gspca_dev;
1886 	u8 value;
1887 
1888 	/* 'go' off */
1889 	if (sd->bridge != BRIDGE_NW801) {
1890 		value = 0x02;
1891 		reg_w(gspca_dev, 0x0406, &value, 1);
1892 	}
1893 
1894 	/* LED off */
1895 	switch (sd->webcam) {
1896 	case Cvideopro:
1897 	case Kr651us:
1898 	case DvcV6:
1899 	case Kritter:
1900 		value = 0xff;
1901 		break;
1902 	case Dlink350c:
1903 		value = 0x21;
1904 		break;
1905 	case SpaceCam:
1906 	case SpaceCam2:
1907 	case Proscope:
1908 	case Twinkle:
1909 		value = 0x01;
1910 		break;
1911 	default:
1912 		return;
1913 	}
1914 	reg_w(gspca_dev, 0x0404, &value, 1);
1915 }
1916 
1917 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
1918 			u8 *data,			/* isoc packet */
1919 			int len)			/* iso packet length */
1920 {
1921 	/*
1922 	 * frame header = '00 00 hh ww ss xx ff ff'
1923 	 * with:
1924 	 *	- 'hh': height / 4
1925 	 *	- 'ww': width / 4
1926 	 *	- 'ss': frame sequence number c0..dd
1927 	 */
1928 	if (data[0] == 0x00 && data[1] == 0x00
1929 	 && data[6] == 0xff && data[7] == 0xff) {
1930 		gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
1931 		gspca_frame_add(gspca_dev, FIRST_PACKET, data + 8, len - 8);
1932 	} else {
1933 		gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
1934 	}
1935 }
1936 
1937 static void do_autogain(struct gspca_dev *gspca_dev)
1938 {
1939 	struct sd *sd = (struct sd *) gspca_dev;
1940 	int luma;
1941 
1942 	if (sd->ag_cnt < 0)
1943 		return;
1944 	if (--sd->ag_cnt >= 0)
1945 		return;
1946 	sd->ag_cnt = AG_CNT_START;
1947 
1948 	/* get the average luma */
1949 	reg_r(gspca_dev, sd->bridge == BRIDGE_NW801 ? 0x080d : 0x080c, 4);
1950 	luma = (gspca_dev->usb_buf[3] << 24) + (gspca_dev->usb_buf[2] << 16)
1951 		+ (gspca_dev->usb_buf[1] << 8) + gspca_dev->usb_buf[0];
1952 	luma /= sd->ae_res;
1953 
1954 	switch (sd->webcam) {
1955 	case P35u:
1956 		gspca_coarse_grained_expo_autogain(gspca_dev, luma, 100, 5);
1957 		break;
1958 	default:
1959 		gspca_expo_autogain(gspca_dev, luma, 100, 5, 230, 0);
1960 		break;
1961 	}
1962 }
1963 
1964 
1965 static int sd_s_ctrl(struct v4l2_ctrl *ctrl)
1966 {
1967 	struct gspca_dev *gspca_dev =
1968 		container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
1969 
1970 	gspca_dev->usb_err = 0;
1971 
1972 	if (!gspca_dev->streaming)
1973 		return 0;
1974 
1975 	switch (ctrl->id) {
1976 	/* autogain/gain/exposure control cluster */
1977 	case V4L2_CID_AUTOGAIN:
1978 		if (ctrl->is_new)
1979 			setautogain(gspca_dev, ctrl->val);
1980 		if (!ctrl->val) {
1981 			if (gspca_dev->gain->is_new)
1982 				setgain(gspca_dev, gspca_dev->gain->val);
1983 			if (gspca_dev->exposure->is_new)
1984 				setexposure(gspca_dev,
1985 					    gspca_dev->exposure->val);
1986 		}
1987 		break;
1988 	/* Some webcams only have exposure, so handle that separately from the
1989 	   autogain/gain/exposure cluster in the previous case. */
1990 	case V4L2_CID_EXPOSURE:
1991 		setexposure(gspca_dev, gspca_dev->exposure->val);
1992 		break;
1993 	}
1994 	return gspca_dev->usb_err;
1995 }
1996 
1997 static const struct v4l2_ctrl_ops sd_ctrl_ops = {
1998 	.s_ctrl = sd_s_ctrl,
1999 };
2000 
2001 static int sd_init_controls(struct gspca_dev *gspca_dev)
2002 {
2003 	struct sd *sd = (struct sd *)gspca_dev;
2004 	struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
2005 
2006 	gspca_dev->vdev.ctrl_handler = hdl;
2007 	v4l2_ctrl_handler_init(hdl, 3);
2008 	switch (sd->webcam) {
2009 	case P35u:
2010 		gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2011 			V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
2012 		/* For P35u choose coarse expo auto gain function gain minimum,
2013 		 * to avoid a large settings jump the first auto adjustment */
2014 		gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2015 			V4L2_CID_GAIN, 0, 127, 1, 127 / 5 * 2);
2016 		gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2017 			V4L2_CID_EXPOSURE, 0, 9, 1, 9);
2018 		break;
2019 	case Kr651us:
2020 		gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2021 			V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
2022 		gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2023 			V4L2_CID_GAIN, 0, 253, 1, 128);
2024 		/* fall through */
2025 	case Cvideopro:
2026 	case DvcV6:
2027 	case Kritter:
2028 		gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2029 			V4L2_CID_EXPOSURE, 0, 315, 1, 150);
2030 		break;
2031 	default:
2032 		break;
2033 	}
2034 
2035 	if (hdl->error) {
2036 		pr_err("Could not initialize controls\n");
2037 		return hdl->error;
2038 	}
2039 	if (gspca_dev->autogain)
2040 		v4l2_ctrl_auto_cluster(3, &gspca_dev->autogain, 0, false);
2041 	return 0;
2042 }
2043 
2044 /* sub-driver description */
2045 static const struct sd_desc sd_desc = {
2046 	.name = MODULE_NAME,
2047 	.config = sd_config,
2048 	.init = sd_init,
2049 	.init_controls = sd_init_controls,
2050 	.start = sd_start,
2051 	.stopN = sd_stopN,
2052 	.pkt_scan = sd_pkt_scan,
2053 	.dq_callback = do_autogain,
2054 };
2055 
2056 /* -- module initialisation -- */
2057 static const struct usb_device_id device_table[] = {
2058 	{USB_DEVICE(0x046d, 0xd001)},
2059 	{USB_DEVICE(0x0502, 0xd001)},
2060 	{USB_DEVICE(0x052b, 0xd001)},
2061 	{USB_DEVICE(0x055f, 0xd001)},
2062 	{USB_DEVICE(0x06a5, 0x0000)},
2063 	{USB_DEVICE(0x06a5, 0xd001)},
2064 	{USB_DEVICE(0x06a5, 0xd800)},
2065 	{USB_DEVICE(0x06be, 0xd001)},
2066 	{USB_DEVICE(0x0728, 0xd001)},
2067 	{}
2068 };
2069 MODULE_DEVICE_TABLE(usb, device_table);
2070 
2071 /* -- device connect -- */
2072 static int sd_probe(struct usb_interface *intf,
2073 			const struct usb_device_id *id)
2074 {
2075 	return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd),
2076 				THIS_MODULE);
2077 }
2078 
2079 static struct usb_driver sd_driver = {
2080 	.name = MODULE_NAME,
2081 	.id_table = device_table,
2082 	.probe = sd_probe,
2083 	.disconnect = gspca_disconnect,
2084 #ifdef CONFIG_PM
2085 	.suspend = gspca_suspend,
2086 	.resume = gspca_resume,
2087 	.reset_resume = gspca_resume,
2088 #endif
2089 };
2090 
2091 module_usb_driver(sd_driver);
2092 
2093 module_param(webcam, int, 0644);
2094 MODULE_PARM_DESC(webcam,
2095 	"Webcam type\n"
2096 	"0: generic\n"
2097 	"1: Trust 120 SpaceCam\n"
2098 	"2: other Trust 120 SpaceCam\n"
2099 	"3: Conceptronic Video Pro\n"
2100 	"4: D-link dru-350c\n"
2101 	"5: Plustek Opticam 500U\n"
2102 	"6: Panasonic GP-KR651US\n"
2103 	"7: iRez Kritter\n"
2104 	"8: Mustek Wcam 300 mini\n"
2105 	"9: Scalar USB Microscope M2 (Proscope)\n"
2106 	"10: Divio Chicony TwinkleCam\n"
2107 	"11: DVC-V6\n");
2108