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