~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise

« back to all changes in this revision

Viewing changes to drivers/media/video/gspca/nw80x.c

  • Committer: Bazaar Package Importer
  • Author(s): Paolo Pisati
  • Date: 2011-06-29 15:23:51 UTC
  • mfrom: (26.1.1 natty-proposed)
  • Revision ID: james.westby@ubuntu.com-20110629152351-xs96tm303d95rpbk
Tags: 3.0.0-1200.2
* Rebased against 3.0.0-6.7
* BSP from TI based on 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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");