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

source code of linux/drivers/media/usb/gspca/nw80x.c