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