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