Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / media / usb / gspca / nw80x.c
1 /*
2  * DivIO nw80x subdriver
3  *
4  * Copyright (C) 2011 Jean-François Moine (http://moinejf.free.fr)
5  * Copyright (C) 2003 Sylvain Munaut <tnt@246tNt.com>
6  *                      Kjell Claesson <keyson@users.sourceforge.net>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21  */
22
23 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
24
25 #define MODULE_NAME "nw80x"
26
27 #include "gspca.h"
28
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
39         u32 ae_res;
40         s8 ag_cnt;
41 #define AG_CNT_START 13
42         u8 exp_too_low_cnt;
43         u8 exp_too_high_cnt;
44
45         u8 bridge;
46         u8 webcam;
47 };
48
49 enum bridges {
50         BRIDGE_NW800,   /* and et31x110 */
51         BRIDGE_NW801,
52         BRIDGE_NW802,
53 };
54 enum webcams {
55         Generic800,
56         SpaceCam,       /* Trust 120 SpaceCam */
57         SpaceCam2,      /* other Trust 120 SpaceCam */
58         Cvideopro,      /* Conceptronic Video Pro */
59         Dlink350c,
60         DS3303u,
61         Kr651us,
62         Kritter,
63         Mustek300,
64         Proscope,
65         Twinkle,
66         DvcV6,
67         P35u,
68         Generic802,
69         NWEBCAMS        /* number of webcams */
70 };
71
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
113         [Generic802]    = BRIDGE_NW802,
114 };
115 /*
116  * other webcams:
117  *      - nw801 046d:d001
118  *              Logitech QuickCam Pro (dark focus ring)
119  *      - nw801 0728:d001
120  *              AVerMedia Camguard
121  *      - nw??? 06a5:d001
122  *              D-Link NetQam Pro 250plus
123  *      - nw800 065a:d800
124  *              Showcam NGS webcam
125  *      - nw??? ????:????
126  *              Sceptre svc300
127  */
128
129 /*
130  * registers
131  *    nw800/et31x110      nw801           nw802
132  *      0000..009e      0000..00a1      0000..009e
133  *      0200..0211         id              id
134  *      0300..0302         id              id
135  *      0400..0406        (inex)        0400..0406
136  *      0500..0505      0500..0506        (inex)
137  *      0600..061a      0600..0601      0600..0601
138  *      0800..0814         id              id
139  *      1000..109c      1000..10a1      1000..109a
140  */
141
142 /* resolutions
143  *      nw800: 320x240, 352x288
144  *      nw801/802: 320x240, 640x480
145  */
146 static const struct v4l2_pix_format cif_mode[] = {
147         {320, 240, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
148                 .bytesperline = 320,
149                 .sizeimage = 320 * 240 * 4 / 8,
150                 .colorspace = V4L2_COLORSPACE_JPEG},
151         {352, 288, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
152                 .bytesperline = 352,
153                 .sizeimage = 352 * 288 * 4 / 8,
154                 .colorspace = V4L2_COLORSPACE_JPEG}
155 };
156 static const struct v4l2_pix_format vga_mode[] = {
157         {320, 240, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
158                 .bytesperline = 320,
159                 .sizeimage = 320 * 240 * 4 / 8,
160                 .colorspace = V4L2_COLORSPACE_JPEG},
161         {640, 480, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
162                 .bytesperline = 640,
163                 .sizeimage = 640 * 480 * 3 / 8,
164                 .colorspace = V4L2_COLORSPACE_JPEG},
165 };
166
167 /*
168  * The sequences below contain:
169  *      - 1st and 2nd bytes: either
170  *              - register number (BE)
171  *              - I2C0 + i2c address
172  *      - 3rd byte: data length (=0 for end of sequence)
173  *      - n bytes: data
174  */
175 #define I2C0 0xff
176
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,
1557                         USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1558                         0x00,           /* value */
1559                         index,
1560                         gspca_dev->usb_buf,
1561                         len,
1562                         500);
1563         if (ret < 0) {
1564                 pr_err("reg_w err %d\n", ret);
1565                 gspca_dev->usb_err = ret;
1566         }
1567 }
1568
1569 /* -- read registers in usb_buf -- */
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,
1581                         USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1582                         0x00, index,
1583                         gspca_dev->usb_buf, len, 500);
1584         if (ret < 0) {
1585                 pr_err("reg_r err %d\n", ret);
1586                 gspca_dev->usb_err = ret;
1587                 return;
1588         }
1589         if (len == 1)
1590                 PDEBUG(D_USBI, "GET 00 0000 %04x %02x",
1591                                 index, gspca_dev->usb_buf[0]);
1592         else
1593                 PDEBUG(D_USBI, "GET 00 0000 %04x %02x %02x ..",
1594                                 index, gspca_dev->usb_buf[0],
1595                                 gspca_dev->usb_buf[1]);
1596 }
1597
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->pixfmt.width * gspca_dev->pixfmt.height;
1712         } else {                                /* get the AE window size */
1713                 reg_r(gspca_dev, 0x1011, 8);
1714                 w = (gspca_dev->usb_buf[1] << 8) + gspca_dev->usb_buf[0]
1715                   - (gspca_dev->usb_buf[3] << 8) - gspca_dev->usb_buf[2];
1716                 h = (gspca_dev->usb_buf[5] << 8) + gspca_dev->usb_buf[4]
1717                   - (gspca_dev->usb_buf[7] << 8) - gspca_dev->usb_buf[6];
1718                 sd->ae_res = h * w;
1719                 if (sd->ae_res == 0)
1720                         sd->ae_res = gspca_dev->pixfmt.width *
1721                                         gspca_dev->pixfmt.height;
1722         }
1723 }
1724
1725 static int nw802_test_reg(struct gspca_dev *gspca_dev,
1726                         u16 index,
1727                         u8 value)
1728 {
1729         /* write the value */
1730         reg_w(gspca_dev, index, &value, 1);
1731
1732         /* read it */
1733         reg_r(gspca_dev, index, 1);
1734
1735         return gspca_dev->usb_buf[0] == value;
1736 }
1737
1738 /* this function is called at probe time */
1739 static int sd_config(struct gspca_dev *gspca_dev,
1740                         const struct usb_device_id *id)
1741 {
1742         struct sd *sd = (struct sd *) gspca_dev;
1743
1744         if ((unsigned) webcam >= NWEBCAMS)
1745                 webcam = 0;
1746         sd->webcam = webcam;
1747         gspca_dev->cam.needs_full_bandwidth = 1;
1748         sd->ag_cnt = -1;
1749
1750         /*
1751          * Autodetect sequence inspired from some log.
1752          * We try to detect what registers exist or not.
1753          * If 0x0500 does not exist => NW802
1754          * If it does, test 0x109b. If it doesn't exist,
1755          * then it's a NW801. Else, a NW800
1756          * If a et31x110 (nw800 and 06a5:d800)
1757          *      get the sensor ID
1758          */
1759         if (!nw802_test_reg(gspca_dev, 0x0500, 0x55)) {
1760                 sd->bridge = BRIDGE_NW802;
1761                 if (sd->webcam == Generic800)
1762                         sd->webcam = Generic802;
1763         } else if (!nw802_test_reg(gspca_dev, 0x109b, 0xaa)) {
1764                 sd->bridge = BRIDGE_NW801;
1765                 if (sd->webcam == Generic800)
1766                         sd->webcam = P35u;
1767         } else if (id->idVendor == 0x06a5 && id->idProduct == 0xd800) {
1768                 reg_r(gspca_dev, 0x0403, 1);            /* GPIO */
1769                 PDEBUG(D_PROBE, "et31x110 sensor type %02x",
1770                                 gspca_dev->usb_buf[0]);
1771                 switch (gspca_dev->usb_buf[0] >> 1) {
1772                 case 0x00:                              /* ?? */
1773                         if (sd->webcam == Generic800)
1774                                 sd->webcam = SpaceCam;
1775                         break;
1776                 case 0x01:                              /* Hynix? */
1777                         if (sd->webcam == Generic800)
1778                                 sd->webcam = Twinkle;
1779                         break;
1780                 case 0x0a:                              /* Pixart */
1781                         if (sd->webcam == Generic800)
1782                                 sd->webcam = SpaceCam2;
1783                         break;
1784                 }
1785         }
1786         if (webcam_chip[sd->webcam] != sd->bridge) {
1787                 pr_err("Bad webcam type %d for NW80%d\n",
1788                        sd->webcam, sd->bridge);
1789                 gspca_dev->usb_err = -ENODEV;
1790                 return gspca_dev->usb_err;
1791         }
1792         PDEBUG(D_PROBE, "Bridge nw80%d - type: %d", sd->bridge, sd->webcam);
1793
1794         if (sd->bridge == BRIDGE_NW800) {
1795                 switch (sd->webcam) {
1796                 case DS3303u:
1797                         gspca_dev->cam.cam_mode = cif_mode;     /* qvga */
1798                         break;
1799                 default:
1800                         gspca_dev->cam.cam_mode = &cif_mode[1]; /* cif */
1801                         break;
1802                 }
1803                 gspca_dev->cam.nmodes = 1;
1804         } else {
1805                 gspca_dev->cam.cam_mode = vga_mode;
1806                 switch (sd->webcam) {
1807                 case Kr651us:
1808                 case Proscope:
1809                 case P35u:
1810                         gspca_dev->cam.nmodes = ARRAY_SIZE(vga_mode);
1811                         break;
1812                 default:
1813                         gspca_dev->cam.nmodes = 1;      /* qvga only */
1814                         break;
1815                 }
1816         }
1817
1818         return gspca_dev->usb_err;
1819 }
1820
1821 /* this function is called at probe and resume time */
1822 static int sd_init(struct gspca_dev *gspca_dev)
1823 {
1824         struct sd *sd = (struct sd *) gspca_dev;
1825
1826         switch (sd->bridge) {
1827         case BRIDGE_NW800:
1828                 switch (sd->webcam) {
1829                 case SpaceCam:
1830                         reg_w_buf(gspca_dev, spacecam_init);
1831                         break;
1832                 default:
1833                         reg_w_buf(gspca_dev, nw800_init);
1834                         break;
1835                 }
1836                 break;
1837         default:
1838                 switch (sd->webcam) {
1839                 case Mustek300:
1840                 case P35u:
1841                 case Proscope:
1842                         reg_w_buf(gspca_dev, proscope_init);
1843                         break;
1844                 }
1845                 break;
1846         }
1847         return gspca_dev->usb_err;
1848 }
1849
1850 /* -- start the camera -- */
1851 static int sd_start(struct gspca_dev *gspca_dev)
1852 {
1853         struct sd *sd = (struct sd *) gspca_dev;
1854         const u8 *cmd;
1855
1856         cmd = webcam_start[sd->webcam];
1857         reg_w_buf(gspca_dev, cmd);
1858         switch (sd->webcam) {
1859         case P35u:
1860                 if (gspca_dev->pixfmt.width == 320)
1861                         reg_w_buf(gspca_dev, nw801_start_qvga);
1862                 else
1863                         reg_w_buf(gspca_dev, nw801_start_vga);
1864                 reg_w_buf(gspca_dev, nw801_start_2);
1865                 break;
1866         case Kr651us:
1867                 if (gspca_dev->pixfmt.width == 320)
1868                         reg_w_buf(gspca_dev, kr651_start_qvga);
1869                 else
1870                         reg_w_buf(gspca_dev, kr651_start_vga);
1871                 reg_w_buf(gspca_dev, kr651_start_2);
1872                 break;
1873         case Proscope:
1874                 if (gspca_dev->pixfmt.width == 320)
1875                         reg_w_buf(gspca_dev, proscope_start_qvga);
1876                 else
1877                         reg_w_buf(gspca_dev, proscope_start_vga);
1878                 reg_w_buf(gspca_dev, proscope_start_2);
1879                 break;
1880         }
1881
1882         sd->exp_too_high_cnt = 0;
1883         sd->exp_too_low_cnt = 0;
1884         return gspca_dev->usb_err;
1885 }
1886
1887 static void sd_stopN(struct gspca_dev *gspca_dev)
1888 {
1889         struct sd *sd = (struct sd *) gspca_dev;
1890         u8 value;
1891
1892         /* 'go' off */
1893         if (sd->bridge != BRIDGE_NW801) {
1894                 value = 0x02;
1895                 reg_w(gspca_dev, 0x0406, &value, 1);
1896         }
1897
1898         /* LED off */
1899         switch (sd->webcam) {
1900         case Cvideopro:
1901         case Kr651us:
1902         case DvcV6:
1903         case Kritter:
1904                 value = 0xff;
1905                 break;
1906         case Dlink350c:
1907                 value = 0x21;
1908                 break;
1909         case SpaceCam:
1910         case SpaceCam2:
1911         case Proscope:
1912         case Twinkle:
1913                 value = 0x01;
1914                 break;
1915         default:
1916                 return;
1917         }
1918         reg_w(gspca_dev, 0x0404, &value, 1);
1919 }
1920
1921 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
1922                         u8 *data,                       /* isoc packet */
1923                         int len)                        /* iso packet length */
1924 {
1925         /*
1926          * frame header = '00 00 hh ww ss xx ff ff'
1927          * with:
1928          *      - 'hh': height / 4
1929          *      - 'ww': width / 4
1930          *      - 'ss': frame sequence number c0..dd
1931          */
1932         if (data[0] == 0x00 && data[1] == 0x00
1933          && data[6] == 0xff && data[7] == 0xff) {
1934                 gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
1935                 gspca_frame_add(gspca_dev, FIRST_PACKET, data + 8, len - 8);
1936         } else {
1937                 gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
1938         }
1939 }
1940
1941 static void do_autogain(struct gspca_dev *gspca_dev)
1942 {
1943         struct sd *sd = (struct sd *) gspca_dev;
1944         int luma;
1945
1946         if (sd->ag_cnt < 0)
1947                 return;
1948         if (--sd->ag_cnt >= 0)
1949                 return;
1950         sd->ag_cnt = AG_CNT_START;
1951
1952         /* get the average luma */
1953         reg_r(gspca_dev, sd->bridge == BRIDGE_NW801 ? 0x080d : 0x080c, 4);
1954         luma = (gspca_dev->usb_buf[3] << 24) + (gspca_dev->usb_buf[2] << 16)
1955                 + (gspca_dev->usb_buf[1] << 8) + gspca_dev->usb_buf[0];
1956         luma /= sd->ae_res;
1957
1958         switch (sd->webcam) {
1959         case P35u:
1960                 gspca_coarse_grained_expo_autogain(gspca_dev, luma, 100, 5);
1961                 break;
1962         default:
1963                 gspca_expo_autogain(gspca_dev, luma, 100, 5, 230, 0);
1964                 break;
1965         }
1966 }
1967
1968
1969 static int sd_s_ctrl(struct v4l2_ctrl *ctrl)
1970 {
1971         struct gspca_dev *gspca_dev =
1972                 container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
1973
1974         gspca_dev->usb_err = 0;
1975
1976         if (!gspca_dev->streaming)
1977                 return 0;
1978
1979         switch (ctrl->id) {
1980         /* autogain/gain/exposure control cluster */
1981         case V4L2_CID_AUTOGAIN:
1982                 if (ctrl->is_new)
1983                         setautogain(gspca_dev, ctrl->val);
1984                 if (!ctrl->val) {
1985                         if (gspca_dev->gain->is_new)
1986                                 setgain(gspca_dev, gspca_dev->gain->val);
1987                         if (gspca_dev->exposure->is_new)
1988                                 setexposure(gspca_dev,
1989                                             gspca_dev->exposure->val);
1990                 }
1991                 break;
1992         /* Some webcams only have exposure, so handle that separately from the
1993            autogain/gain/exposure cluster in the previous case. */
1994         case V4L2_CID_EXPOSURE:
1995                 setexposure(gspca_dev, gspca_dev->exposure->val);
1996                 break;
1997         }
1998         return gspca_dev->usb_err;
1999 }
2000
2001 static const struct v4l2_ctrl_ops sd_ctrl_ops = {
2002         .s_ctrl = sd_s_ctrl,
2003 };
2004
2005 static int sd_init_controls(struct gspca_dev *gspca_dev)
2006 {
2007         struct sd *sd = (struct sd *)gspca_dev;
2008         struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
2009
2010         gspca_dev->vdev.ctrl_handler = hdl;
2011         v4l2_ctrl_handler_init(hdl, 3);
2012         switch (sd->webcam) {
2013         case P35u:
2014                 gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2015                         V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
2016                 /* For P35u choose coarse expo auto gain function gain minimum,
2017                  * to avoid a large settings jump the first auto adjustment */
2018                 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2019                         V4L2_CID_GAIN, 0, 127, 1, 127 / 5 * 2);
2020                 gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2021                         V4L2_CID_EXPOSURE, 0, 9, 1, 9);
2022                 break;
2023         case Kr651us:
2024                 gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2025                         V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
2026                 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2027                         V4L2_CID_GAIN, 0, 253, 1, 128);
2028                 /* fall through */
2029         case Cvideopro:
2030         case DvcV6:
2031         case Kritter:
2032                 gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2033                         V4L2_CID_EXPOSURE, 0, 315, 1, 150);
2034                 break;
2035         default:
2036                 break;
2037         }
2038
2039         if (hdl->error) {
2040                 pr_err("Could not initialize controls\n");
2041                 return hdl->error;
2042         }
2043         if (gspca_dev->autogain)
2044                 v4l2_ctrl_auto_cluster(3, &gspca_dev->autogain, 0, false);
2045         return 0;
2046 }
2047
2048 /* sub-driver description */
2049 static const struct sd_desc sd_desc = {
2050         .name = MODULE_NAME,
2051         .config = sd_config,
2052         .init = sd_init,
2053         .init_controls = sd_init_controls,
2054         .start = sd_start,
2055         .stopN = sd_stopN,
2056         .pkt_scan = sd_pkt_scan,
2057         .dq_callback = do_autogain,
2058 };
2059
2060 /* -- module initialisation -- */
2061 static const struct usb_device_id device_table[] = {
2062         {USB_DEVICE(0x046d, 0xd001)},
2063         {USB_DEVICE(0x0502, 0xd001)},
2064         {USB_DEVICE(0x052b, 0xd001)},
2065         {USB_DEVICE(0x055f, 0xd001)},
2066         {USB_DEVICE(0x06a5, 0x0000)},
2067         {USB_DEVICE(0x06a5, 0xd001)},
2068         {USB_DEVICE(0x06a5, 0xd800)},
2069         {USB_DEVICE(0x06be, 0xd001)},
2070         {USB_DEVICE(0x0728, 0xd001)},
2071         {}
2072 };
2073 MODULE_DEVICE_TABLE(usb, device_table);
2074
2075 /* -- device connect -- */
2076 static int sd_probe(struct usb_interface *intf,
2077                         const struct usb_device_id *id)
2078 {
2079         return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd),
2080                                 THIS_MODULE);
2081 }
2082
2083 static struct usb_driver sd_driver = {
2084         .name = MODULE_NAME,
2085         .id_table = device_table,
2086         .probe = sd_probe,
2087         .disconnect = gspca_disconnect,
2088 #ifdef CONFIG_PM
2089         .suspend = gspca_suspend,
2090         .resume = gspca_resume,
2091         .reset_resume = gspca_resume,
2092 #endif
2093 };
2094
2095 module_usb_driver(sd_driver);
2096
2097 module_param(webcam, int, 0644);
2098 MODULE_PARM_DESC(webcam,
2099         "Webcam type\n"
2100         "0: generic\n"
2101         "1: Trust 120 SpaceCam\n"
2102         "2: other Trust 120 SpaceCam\n"
2103         "3: Conceptronic Video Pro\n"
2104         "4: D-link dru-350c\n"
2105         "5: Plustek Opticam 500U\n"
2106         "6: Panasonic GP-KR651US\n"
2107         "7: iRez Kritter\n"
2108         "8: Mustek Wcam 300 mini\n"
2109         "9: Scalar USB Microscope M2 (Proscope)\n"
2110         "10: Divio Chicony TwinkleCam\n"
2111         "11: DVC-V6\n");