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