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