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