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