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