blob: 59649704beba10f7d3ef68049999543a326c4df9 [file] [log] [blame]
Thomas Gleixnerfd9871f2019-05-19 15:51:54 +02001// SPDX-License-Identifier: GPL-2.0-or-later
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03002/*
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>
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03008 */
9
Joe Perches133a9fe2011-08-21 19:56:57 -030010#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
11
Jean-François Moinece5b2ac2011-03-14 08:49:28 -030012#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
Jean-François Moinece5b2ac2011-03-14 08:49:28 -030022/* specific webcam descriptor */
23struct sd {
24 struct gspca_dev gspca_dev; /* !! must be the first item */
25
Jean-François Moinece5b2ac2011-03-14 08:49:28 -030026 u32 ae_res;
27 s8 ag_cnt;
28#define AG_CNT_START 13
Jean-François Moinef12b44f2011-03-22 05:53:21 -030029 u8 exp_too_low_cnt;
30 u8 exp_too_high_cnt;
Jean-François Moinece5b2ac2011-03-14 08:49:28 -030031
32 u8 bridge;
33 u8 webcam;
34};
35
36enum bridges {
Jean-François Moinec3ee1422011-03-22 05:16:11 -030037 BRIDGE_NW800, /* and et31x110 */
Jean-François Moinece5b2ac2011-03-14 08:49:28 -030038 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,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -030053 DvcV6,
54 P35u,
55 Generic802,
56 NWEBCAMS /* number of webcams */
57};
58
Jean-François Moineee32ffb2011-03-22 05:58:19 -030059static 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};
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300102/*
Jean-François Moineee32ffb2011-03-22 05:58:19 -0300103 * 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 */
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300115
Jean-François Moineee32ffb2011-03-22 05:58:19 -0300116/*
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 */
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300128
Jean-François Moineee32ffb2011-03-22 05:58:19 -0300129/* resolutions
130 * nw800: 320x240, 352x288
131 * nw801/802: 320x240, 640x480
132 */
Jean-François Moinec3ee1422011-03-22 05:16:11 -0300133static const struct v4l2_pix_format cif_mode[] = {
Jean-François Moine15250712011-03-22 06:04:09 -0300134 {320, 240, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE,
135 .bytesperline = 320,
136 .sizeimage = 320 * 240 * 4 / 8,
137 .colorspace = V4L2_COLORSPACE_JPEG},
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300138 {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
Jean-François Moinec3ee1422011-03-22 05:16:11 -0300163
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300164static const u8 nw800_init[] = {
Jean-François Moinebad03ff2011-03-22 05:46:24 -0300165 0x04, 0x05, 0x01, 0x61,
166 0x04, 0x04, 0x01, 0x01,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300167 0x04, 0x06, 0x01, 0x04,
Jean-François Moinebad03ff2011-03-22 05:46:24 -0300168 0x04, 0x04, 0x03, 0x00, 0x00, 0x00,
169 0x05, 0x05, 0x01, 0x00,
170 0, 0, 0
171};
172static const u8 nw800_start[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300173 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
Jean-François Moinec3ee1422011-03-22 05:16:11 -0300326/* 06a5:d001 - nw801 - Panasonic
327 * P35u */
328static const u8 nw801_start_1[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300329 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};
Jean-François Moinec3ee1422011-03-22 05:16:11 -0300383static const u8 nw801_start_qvga[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300384 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};
Jean-François Moinec3ee1422011-03-22 05:16:11 -0300395static const u8 nw801_start_vga[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300396 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};
Jean-François Moinec3ee1422011-03-22 05:16:11 -0300406static const u8 nw801_start_2[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300407 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?) */
Jean-François Moinec3ee1422011-03-22 05:16:11 -0300435static const u8 nw802_start[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300436 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[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300518 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,
Jean-François Moinebad03ff2011-03-22 05:46:24 -0300523 0, 0, 0
524};
525static const u8 spacecam_start[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300526 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};
Jean-François Moinec3ee1422011-03-22 05:16:11 -0300611/* et31x110 - pas106 - other Trust SpaceCam120 */
612static const u8 spacecam2_start[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300613 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,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300671 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,
Jean-François Moinec3ee1422011-03-22 05:16:11 -0300675 I2C0, 0x40, 0x02, 0x13, 0x01, /* i2c end */
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300676 0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
677 0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
678 0x40,
Jean-François Moinec3ee1422011-03-22 05:16:11 -0300679 I2C0, 0x40, 0x02, 0x02, 0x0c, /* pixel clock */
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300680 I2C0, 0x40, 0x02, 0x0f, 0x00,
Jean-François Moinec3ee1422011-03-22 05:16:11 -0300681 I2C0, 0x40, 0x02, 0x13, 0x01, /* i2c end */
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300682 0x10, 0x00, 0x01, 0x01,
683 0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
684 0x20, 0x01, 0x60, 0x01,
Jean-François Moinec3ee1422011-03-22 05:16:11 -0300685 I2C0, 0x40, 0x02, 0x05, 0x0f, /* exposure */
686 I2C0, 0x40, 0x02, 0x13, 0x01, /* i2c end */
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300687 I2C0, 0x40, 0x07, 0x09, 0x0b, 0x0f, 0x05, 0x05, 0x0f, 0x00,
Jean-François Moinec3ee1422011-03-22 05:16:11 -0300688 /* gains */
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300689 I2C0, 0x40, 0x03, 0x12, 0x04, 0x01,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300690 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 */
Jean-François Moinec3ee1422011-03-22 05:16:11 -0300711static const u8 cvideopro_start[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300712 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 */
Jean-François Moinec3ee1422011-03-22 05:16:11 -0300791static const u8 dlink_start[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300792 0x04, 0x06, 0x01, 0x04,
793 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x92, 0x03, 0x10, 0x00, 0x4d,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300794 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,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300812 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,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300842 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
Jean-François Moinec3ee1422011-03-22 05:16:11 -0300870/* 06a5:d001 - nw801 - Sony
871 * Plustek Opticam 500U or ProLink DS3303u (Hitachi HD49322BF) */
872/*fixme: 320x240 only*/
873static const u8 ds3303_start[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300874 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
Jean-François Moinec3ee1422011-03-22 05:16:11 -0300955/* 06a5:d001 - nw802 - Panasonic
956 * GP-KR651US (Philips TDA8786) */
957static const u8 kr651_start_1[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -0300958 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};
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001010static const u8 kr651_start_qvga[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001011 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};
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001023static const u8 kr651_start_vga[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001024 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,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001030 0x10, 0x1b, 0x02, 0x00, 0x00,
1031 0x10, 0x11, 0x08, 0x51, 0x00, 0x30, 0x02, 0x3d, 0x00, 0xa4, 0x01,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001032 0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
1033 0x10, 0x1d, 0x02, 0x68, 0x00,
1034};
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001035static const u8 kr651_start_2[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001036 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 */
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001055static const u8 kritter_start[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001056 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 */
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001135static const u8 mustek_start[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001136 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) */
Jean-François Moinebad03ff2011-03-22 05:46:24 -03001215static const u8 proscope_init[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001216 0x04, 0x05, 0x01, 0x21,
1217 0x04, 0x04, 0x01, 0x01,
Jean-François Moinebad03ff2011-03-22 05:46:24 -03001218 0, 0, 0
1219};
1220static const u8 proscope_start_1[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001221 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};
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001273static const u8 proscope_start_qvga[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001274 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};
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001286static const u8 proscope_start_vga[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001287 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};
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001304static const u8 proscope_start_2[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001305 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
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001319/* nw800 - hv7121b? (seems pas106) - Divio Chicony TwinkleCam */
1320static const u8 twinkle_start[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001321 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,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001378 0x04, 0x04, 0x01, 0x10,
1379 0x04, 0x04, 0x01, 0x00,
1380 0x04, 0x05, 0x01, 0x61,
1381 0x04, 0x04, 0x01, 0x01,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001382 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,
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001386 I2C0, 0x40, 0x02, 0x13, 0x01, /* i2c end */
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001387 I2C0, 0x40, 0x02, 0x07, 0x01,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001388 0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001389 0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001390 0x40,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001391 I2C0, 0x40, 0x02, 0x02, 0x0c,
1392 I2C0, 0x40, 0x02, 0x13, 0x01,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001393 0x10, 0x00, 0x01, 0x01,
1394 0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
1395 0x20, 0x01, 0x60, 0x01,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001396 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,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001400 0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001401 I2C0, 0x40, 0x02, 0x12, 0x00,
1402 I2C0, 0x40, 0x02, 0x0e, 0x00,
1403 I2C0, 0x40, 0x02, 0x11, 0x06,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001404 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
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001422/* nw802 dvc-v6 */
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001423static const u8 dvcv6_start[] = {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001424 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
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001508static const u8 *webcam_start[] = {
Jean-François Moinebad03ff2011-03-22 05:46:24 -03001509 [Generic800] = nw800_start,
1510 [SpaceCam] = spacecam_start,
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001511 [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,
Jean-François Moinebad03ff2011-03-22 05:46:24 -03001518 [Proscope] = proscope_start_1,
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001519 [Twinkle] = twinkle_start,
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001520 [DvcV6] = dvcv6_start,
1521 [P35u] = nw801_start_1,
1522 [Generic802] = nw802_start,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001523};
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)
Joe Perches37d5efb2017-09-22 15:20:33 -04001537 gspca_dbg(gspca_dev, D_USBO, "SET 00 0000 %04x %02x\n",
1538 index, *data);
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001539 else
Joe Perches37d5efb2017-09-22 15:20:33 -04001540 gspca_dbg(gspca_dev, D_USBO, "SET 00 0000 %04x %02x %02x ...\n",
1541 index, *data, data[1]);
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001542 memcpy(gspca_dev->usb_buf, data, len);
1543 ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1544 0x00,
1545 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1546 0x00, /* value */
1547 index,
1548 gspca_dev->usb_buf,
1549 len,
1550 500);
1551 if (ret < 0) {
Joe Perches133a9fe2011-08-21 19:56:57 -03001552 pr_err("reg_w err %d\n", ret);
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001553 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 0x00,
1569 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1570 0x00, index,
1571 gspca_dev->usb_buf, len, 500);
1572 if (ret < 0) {
Joe Perches133a9fe2011-08-21 19:56:57 -03001573 pr_err("reg_r err %d\n", ret);
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001574 gspca_dev->usb_err = ret;
1575 return;
1576 }
1577 if (len == 1)
Joe Perches37d5efb2017-09-22 15:20:33 -04001578 gspca_dbg(gspca_dev, D_USBI, "GET 00 0000 %04x %02x\n",
1579 index, gspca_dev->usb_buf[0]);
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001580 else
Joe Perches37d5efb2017-09-22 15:20:33 -04001581 gspca_dbg(gspca_dev, D_USBI, "GET 00 0000 %04x %02x %02x ..\n",
1582 index, gspca_dev->usb_buf[0],
1583 gspca_dev->usb_buf[1]);
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001584}
1585
1586static void i2c_w(struct gspca_dev *gspca_dev,
1587 u8 i2c_addr,
1588 const u8 *data,
1589 int len)
1590{
1591 u8 val[2];
1592 int i;
1593
1594 reg_w(gspca_dev, 0x0600, data + 1, len - 1);
1595 reg_w(gspca_dev, 0x0600, data, len);
1596 val[0] = len;
1597 val[1] = i2c_addr;
1598 reg_w(gspca_dev, 0x0502, val, 2);
1599 val[0] = 0x01;
1600 reg_w(gspca_dev, 0x0501, val, 1);
1601 for (i = 5; --i >= 0; ) {
1602 msleep(4);
1603 reg_r(gspca_dev, 0x0505, 1);
1604 if (gspca_dev->usb_err < 0)
1605 return;
1606 if (gspca_dev->usb_buf[0] == 0)
1607 return;
1608 }
1609 gspca_dev->usb_err = -ETIME;
1610}
1611
1612static void reg_w_buf(struct gspca_dev *gspca_dev,
1613 const u8 *cmd)
1614{
1615 u16 reg;
1616 int len;
1617
1618 for (;;) {
1619 reg = *cmd++ << 8;
1620 reg += *cmd++;
1621 len = *cmd++;
1622 if (len == 0)
1623 break;
1624 if (cmd[-3] != I2C0)
1625 reg_w(gspca_dev, reg, cmd, len);
1626 else
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001627 i2c_w(gspca_dev, reg, cmd, len);
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001628 cmd += len;
1629 }
1630}
1631
Jean-François Moinef12b44f2011-03-22 05:53:21 -03001632static int swap_bits(int v)
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001633{
1634 int r, i;
1635
1636 r = 0;
Jean-François Moinef12b44f2011-03-22 05:53:21 -03001637 for (i = 0; i < 8; i++) {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001638 r <<= 1;
1639 if (v & 1)
1640 r++;
1641 v >>= 1;
1642 }
1643 return r;
1644}
1645
Hans Verkuila17dd1e2012-05-16 04:48:28 -03001646static void setgain(struct gspca_dev *gspca_dev, u8 val)
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001647{
1648 struct sd *sd = (struct sd *) gspca_dev;
Hans Verkuila17dd1e2012-05-16 04:48:28 -03001649 u8 v[2];
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001650
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001651 switch (sd->webcam) {
1652 case P35u:
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001653 reg_w(gspca_dev, 0x1026, &val, 1);
1654 break;
1655 case Kr651us:
Jean-François Moinef12b44f2011-03-22 05:53:21 -03001656 /* 0 - 253 */
1657 val = swap_bits(val);
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001658 v[0] = val << 3;
1659 v[1] = val >> 5;
1660 reg_w(gspca_dev, 0x101d, v, 2); /* SIF reg0/1 (AGC) */
1661 break;
1662 }
1663}
1664
Hans Verkuila17dd1e2012-05-16 04:48:28 -03001665static void setexposure(struct gspca_dev *gspca_dev, s32 val)
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001666{
1667 struct sd *sd = (struct sd *) gspca_dev;
1668 u8 v[2];
1669
1670 switch (sd->webcam) {
1671 case P35u:
Jean-François Moinef12b44f2011-03-22 05:53:21 -03001672 v[0] = ((9 - val) << 3) | 0x01;
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001673 reg_w(gspca_dev, 0x1019, v, 1);
1674 break;
Jean-François Moine8e3c08b2011-03-22 06:09:49 -03001675 case Cvideopro:
1676 case DvcV6:
1677 case Kritter:
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001678 case Kr651us:
Jean-François Moinef12b44f2011-03-22 05:53:21 -03001679 v[0] = val;
1680 v[1] = val >> 8;
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001681 reg_w(gspca_dev, 0x101b, v, 2);
1682 break;
1683 }
1684}
1685
Hans Verkuila17dd1e2012-05-16 04:48:28 -03001686static void setautogain(struct gspca_dev *gspca_dev, s32 val)
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001687{
1688 struct sd *sd = (struct sd *) gspca_dev;
1689 int w, h;
1690
Hans Verkuila17dd1e2012-05-16 04:48:28 -03001691 if (!val) {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001692 sd->ag_cnt = -1;
1693 return;
1694 }
1695 sd->ag_cnt = AG_CNT_START;
1696
1697 reg_r(gspca_dev, 0x1004, 1);
1698 if (gspca_dev->usb_buf[0] & 0x04) { /* if AE_FULL_FRM */
Ondrej Zary1966bc22013-08-30 17:54:23 -03001699 sd->ae_res = gspca_dev->pixfmt.width * gspca_dev->pixfmt.height;
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001700 } else { /* get the AE window size */
1701 reg_r(gspca_dev, 0x1011, 8);
1702 w = (gspca_dev->usb_buf[1] << 8) + gspca_dev->usb_buf[0]
1703 - (gspca_dev->usb_buf[3] << 8) - gspca_dev->usb_buf[2];
1704 h = (gspca_dev->usb_buf[5] << 8) + gspca_dev->usb_buf[4]
1705 - (gspca_dev->usb_buf[7] << 8) - gspca_dev->usb_buf[6];
1706 sd->ae_res = h * w;
1707 if (sd->ae_res == 0)
Ondrej Zary1966bc22013-08-30 17:54:23 -03001708 sd->ae_res = gspca_dev->pixfmt.width *
1709 gspca_dev->pixfmt.height;
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001710 }
1711}
1712
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001713static int nw802_test_reg(struct gspca_dev *gspca_dev,
1714 u16 index,
1715 u8 value)
1716{
1717 /* write the value */
1718 reg_w(gspca_dev, index, &value, 1);
1719
1720 /* read it */
1721 reg_r(gspca_dev, index, 1);
1722
1723 return gspca_dev->usb_buf[0] == value;
1724}
1725
Jean-François Moinebad03ff2011-03-22 05:46:24 -03001726/* this function is called at probe time */
1727static int sd_config(struct gspca_dev *gspca_dev,
1728 const struct usb_device_id *id)
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001729{
1730 struct sd *sd = (struct sd *) gspca_dev;
1731
Jean-François Moinebad03ff2011-03-22 05:46:24 -03001732 if ((unsigned) webcam >= NWEBCAMS)
1733 webcam = 0;
1734 sd->webcam = webcam;
Hans de Goedeeb3fb7c2012-01-01 16:35:01 -03001735 gspca_dev->cam.needs_full_bandwidth = 1;
Jean-François Moinebad03ff2011-03-22 05:46:24 -03001736 sd->ag_cnt = -1;
1737
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001738 /*
1739 * Autodetect sequence inspired from some log.
1740 * We try to detect what registers exist or not.
1741 * If 0x0500 does not exist => NW802
1742 * If it does, test 0x109b. If it doesn't exist,
1743 * then it's a NW801. Else, a NW800
Jean-François Moine088fc392011-03-22 06:07:40 -03001744 * If a et31x110 (nw800 and 06a5:d800)
1745 * get the sensor ID
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001746 */
1747 if (!nw802_test_reg(gspca_dev, 0x0500, 0x55)) {
1748 sd->bridge = BRIDGE_NW802;
1749 if (sd->webcam == Generic800)
1750 sd->webcam = Generic802;
1751 } else if (!nw802_test_reg(gspca_dev, 0x109b, 0xaa)) {
1752 sd->bridge = BRIDGE_NW801;
1753 if (sd->webcam == Generic800)
1754 sd->webcam = P35u;
Jean-François Moine088fc392011-03-22 06:07:40 -03001755 } else if (id->idVendor == 0x06a5 && id->idProduct == 0xd800) {
1756 reg_r(gspca_dev, 0x0403, 1); /* GPIO */
Joe Perches37d5efb2017-09-22 15:20:33 -04001757 gspca_dbg(gspca_dev, D_PROBE, "et31x110 sensor type %02x\n",
1758 gspca_dev->usb_buf[0]);
Jean-François Moine088fc392011-03-22 06:07:40 -03001759 switch (gspca_dev->usb_buf[0] >> 1) {
1760 case 0x00: /* ?? */
1761 if (sd->webcam == Generic800)
1762 sd->webcam = SpaceCam;
1763 break;
1764 case 0x01: /* Hynix? */
1765 if (sd->webcam == Generic800)
1766 sd->webcam = Twinkle;
1767 break;
1768 case 0x0a: /* Pixart */
1769 if (sd->webcam == Generic800)
1770 sd->webcam = SpaceCam2;
1771 break;
1772 }
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001773 }
Jean-François Moineee32ffb2011-03-22 05:58:19 -03001774 if (webcam_chip[sd->webcam] != sd->bridge) {
Joe Perches133a9fe2011-08-21 19:56:57 -03001775 pr_err("Bad webcam type %d for NW80%d\n",
1776 sd->webcam, sd->bridge);
Jean-François Moineee32ffb2011-03-22 05:58:19 -03001777 gspca_dev->usb_err = -ENODEV;
1778 return gspca_dev->usb_err;
1779 }
Joe Perches37d5efb2017-09-22 15:20:33 -04001780 gspca_dbg(gspca_dev, D_PROBE, "Bridge nw80%d - type: %d\n",
1781 sd->bridge, sd->webcam);
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001782
1783 if (sd->bridge == BRIDGE_NW800) {
Jean-François Moine15250712011-03-22 06:04:09 -03001784 switch (sd->webcam) {
1785 case DS3303u:
1786 gspca_dev->cam.cam_mode = cif_mode; /* qvga */
1787 break;
1788 default:
1789 gspca_dev->cam.cam_mode = &cif_mode[1]; /* cif */
1790 break;
1791 }
1792 gspca_dev->cam.nmodes = 1;
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001793 } else {
1794 gspca_dev->cam.cam_mode = vga_mode;
1795 switch (sd->webcam) {
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001796 case Kr651us:
1797 case Proscope:
1798 case P35u:
1799 gspca_dev->cam.nmodes = ARRAY_SIZE(vga_mode);
1800 break;
1801 default:
1802 gspca_dev->cam.nmodes = 1; /* qvga only */
1803 break;
1804 }
1805 }
Jean-François Moinef12b44f2011-03-22 05:53:21 -03001806
Jean-François Moinebad03ff2011-03-22 05:46:24 -03001807 return gspca_dev->usb_err;
1808}
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001809
Jean-François Moinebad03ff2011-03-22 05:46:24 -03001810/* this function is called at probe and resume time */
1811static int sd_init(struct gspca_dev *gspca_dev)
1812{
1813 struct sd *sd = (struct sd *) gspca_dev;
1814
1815 switch (sd->bridge) {
1816 case BRIDGE_NW800:
1817 switch (sd->webcam) {
1818 case SpaceCam:
1819 reg_w_buf(gspca_dev, spacecam_init);
1820 break;
1821 default:
1822 reg_w_buf(gspca_dev, nw800_init);
1823 break;
1824 }
1825 break;
1826 default:
1827 switch (sd->webcam) {
1828 case Mustek300:
1829 case P35u:
1830 case Proscope:
1831 reg_w_buf(gspca_dev, proscope_init);
1832 break;
1833 }
1834 break;
1835 }
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001836 return gspca_dev->usb_err;
1837}
1838
1839/* -- start the camera -- */
1840static int sd_start(struct gspca_dev *gspca_dev)
1841{
1842 struct sd *sd = (struct sd *) gspca_dev;
1843 const u8 *cmd;
1844
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001845 cmd = webcam_start[sd->webcam];
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001846 reg_w_buf(gspca_dev, cmd);
1847 switch (sd->webcam) {
1848 case P35u:
Ondrej Zary1966bc22013-08-30 17:54:23 -03001849 if (gspca_dev->pixfmt.width == 320)
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001850 reg_w_buf(gspca_dev, nw801_start_qvga);
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001851 else
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001852 reg_w_buf(gspca_dev, nw801_start_vga);
1853 reg_w_buf(gspca_dev, nw801_start_2);
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001854 break;
1855 case Kr651us:
Ondrej Zary1966bc22013-08-30 17:54:23 -03001856 if (gspca_dev->pixfmt.width == 320)
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001857 reg_w_buf(gspca_dev, kr651_start_qvga);
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001858 else
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001859 reg_w_buf(gspca_dev, kr651_start_vga);
1860 reg_w_buf(gspca_dev, kr651_start_2);
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001861 break;
1862 case Proscope:
Ondrej Zary1966bc22013-08-30 17:54:23 -03001863 if (gspca_dev->pixfmt.width == 320)
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001864 reg_w_buf(gspca_dev, proscope_start_qvga);
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001865 else
Jean-François Moinec3ee1422011-03-22 05:16:11 -03001866 reg_w_buf(gspca_dev, proscope_start_vga);
1867 reg_w_buf(gspca_dev, proscope_start_2);
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001868 break;
1869 }
1870
Jean-François Moinef12b44f2011-03-22 05:53:21 -03001871 sd->exp_too_high_cnt = 0;
1872 sd->exp_too_low_cnt = 0;
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001873 return gspca_dev->usb_err;
1874}
1875
1876static void sd_stopN(struct gspca_dev *gspca_dev)
1877{
1878 struct sd *sd = (struct sd *) gspca_dev;
1879 u8 value;
1880
1881 /* 'go' off */
1882 if (sd->bridge != BRIDGE_NW801) {
1883 value = 0x02;
1884 reg_w(gspca_dev, 0x0406, &value, 1);
1885 }
1886
1887 /* LED off */
1888 switch (sd->webcam) {
1889 case Cvideopro:
1890 case Kr651us:
1891 case DvcV6:
1892 case Kritter:
1893 value = 0xff;
1894 break;
1895 case Dlink350c:
1896 value = 0x21;
1897 break;
1898 case SpaceCam:
1899 case SpaceCam2:
1900 case Proscope:
1901 case Twinkle:
1902 value = 0x01;
1903 break;
1904 default:
1905 return;
1906 }
1907 reg_w(gspca_dev, 0x0404, &value, 1);
1908}
1909
1910static void sd_pkt_scan(struct gspca_dev *gspca_dev,
1911 u8 *data, /* isoc packet */
1912 int len) /* iso packet length */
1913{
1914 /*
1915 * frame header = '00 00 hh ww ss xx ff ff'
1916 * with:
1917 * - 'hh': height / 4
1918 * - 'ww': width / 4
1919 * - 'ss': frame sequence number c0..dd
1920 */
1921 if (data[0] == 0x00 && data[1] == 0x00
1922 && data[6] == 0xff && data[7] == 0xff) {
1923 gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
1924 gspca_frame_add(gspca_dev, FIRST_PACKET, data + 8, len - 8);
1925 } else {
1926 gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
1927 }
1928}
1929
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001930static void do_autogain(struct gspca_dev *gspca_dev)
1931{
1932 struct sd *sd = (struct sd *) gspca_dev;
1933 int luma;
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001934
1935 if (sd->ag_cnt < 0)
1936 return;
1937 if (--sd->ag_cnt >= 0)
1938 return;
1939 sd->ag_cnt = AG_CNT_START;
1940
1941 /* get the average luma */
1942 reg_r(gspca_dev, sd->bridge == BRIDGE_NW801 ? 0x080d : 0x080c, 4);
1943 luma = (gspca_dev->usb_buf[3] << 24) + (gspca_dev->usb_buf[2] << 16)
1944 + (gspca_dev->usb_buf[1] << 8) + gspca_dev->usb_buf[0];
1945 luma /= sd->ae_res;
1946
Jean-François Moinef12b44f2011-03-22 05:53:21 -03001947 switch (sd->webcam) {
1948 case P35u:
Hans Verkuila17dd1e2012-05-16 04:48:28 -03001949 gspca_coarse_grained_expo_autogain(gspca_dev, luma, 100, 5);
Jean-François Moinef12b44f2011-03-22 05:53:21 -03001950 break;
1951 default:
Hans Verkuila17dd1e2012-05-16 04:48:28 -03001952 gspca_expo_autogain(gspca_dev, luma, 100, 5, 230, 0);
Jean-François Moinef12b44f2011-03-22 05:53:21 -03001953 break;
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001954 }
1955}
1956
Hans Verkuila17dd1e2012-05-16 04:48:28 -03001957
1958static int sd_s_ctrl(struct v4l2_ctrl *ctrl)
1959{
1960 struct gspca_dev *gspca_dev =
1961 container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
1962
1963 gspca_dev->usb_err = 0;
1964
1965 if (!gspca_dev->streaming)
1966 return 0;
1967
1968 switch (ctrl->id) {
1969 /* autogain/gain/exposure control cluster */
1970 case V4L2_CID_AUTOGAIN:
1971 if (ctrl->is_new)
1972 setautogain(gspca_dev, ctrl->val);
1973 if (!ctrl->val) {
1974 if (gspca_dev->gain->is_new)
1975 setgain(gspca_dev, gspca_dev->gain->val);
1976 if (gspca_dev->exposure->is_new)
1977 setexposure(gspca_dev,
1978 gspca_dev->exposure->val);
1979 }
1980 break;
1981 /* Some webcams only have exposure, so handle that separately from the
1982 autogain/gain/exposure cluster in the previous case. */
1983 case V4L2_CID_EXPOSURE:
1984 setexposure(gspca_dev, gspca_dev->exposure->val);
1985 break;
1986 }
1987 return gspca_dev->usb_err;
1988}
1989
1990static const struct v4l2_ctrl_ops sd_ctrl_ops = {
1991 .s_ctrl = sd_s_ctrl,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03001992};
1993
Hans Verkuila17dd1e2012-05-16 04:48:28 -03001994static int sd_init_controls(struct gspca_dev *gspca_dev)
1995{
1996 struct sd *sd = (struct sd *)gspca_dev;
1997 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
1998
1999 gspca_dev->vdev.ctrl_handler = hdl;
2000 v4l2_ctrl_handler_init(hdl, 3);
2001 switch (sd->webcam) {
2002 case P35u:
2003 gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2004 V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
2005 /* For P35u choose coarse expo auto gain function gain minimum,
2006 * to avoid a large settings jump the first auto adjustment */
2007 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2008 V4L2_CID_GAIN, 0, 127, 1, 127 / 5 * 2);
2009 gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2010 V4L2_CID_EXPOSURE, 0, 9, 1, 9);
2011 break;
2012 case Kr651us:
2013 gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2014 V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
2015 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2016 V4L2_CID_GAIN, 0, 253, 1, 128);
2017 /* fall through */
2018 case Cvideopro:
2019 case DvcV6:
2020 case Kritter:
2021 gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
2022 V4L2_CID_EXPOSURE, 0, 315, 1, 150);
2023 break;
2024 default:
2025 break;
2026 }
2027
2028 if (hdl->error) {
2029 pr_err("Could not initialize controls\n");
2030 return hdl->error;
2031 }
2032 if (gspca_dev->autogain)
2033 v4l2_ctrl_auto_cluster(3, &gspca_dev->autogain, 0, false);
2034 return 0;
2035}
2036
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03002037/* sub-driver description */
2038static const struct sd_desc sd_desc = {
2039 .name = MODULE_NAME,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03002040 .config = sd_config,
2041 .init = sd_init,
Hans Verkuila17dd1e2012-05-16 04:48:28 -03002042 .init_controls = sd_init_controls,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03002043 .start = sd_start,
2044 .stopN = sd_stopN,
2045 .pkt_scan = sd_pkt_scan,
2046 .dq_callback = do_autogain,
2047};
2048
2049/* -- module initialisation -- */
2050static const struct usb_device_id device_table[] = {
2051 {USB_DEVICE(0x046d, 0xd001)},
2052 {USB_DEVICE(0x0502, 0xd001)},
2053 {USB_DEVICE(0x052b, 0xd001)},
2054 {USB_DEVICE(0x055f, 0xd001)},
2055 {USB_DEVICE(0x06a5, 0x0000)},
2056 {USB_DEVICE(0x06a5, 0xd001)},
2057 {USB_DEVICE(0x06a5, 0xd800)},
2058 {USB_DEVICE(0x06be, 0xd001)},
2059 {USB_DEVICE(0x0728, 0xd001)},
2060 {}
2061};
2062MODULE_DEVICE_TABLE(usb, device_table);
2063
2064/* -- device connect -- */
2065static int sd_probe(struct usb_interface *intf,
2066 const struct usb_device_id *id)
2067{
2068 return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd),
2069 THIS_MODULE);
2070}
2071
2072static struct usb_driver sd_driver = {
2073 .name = MODULE_NAME,
2074 .id_table = device_table,
2075 .probe = sd_probe,
2076 .disconnect = gspca_disconnect,
2077#ifdef CONFIG_PM
2078 .suspend = gspca_suspend,
2079 .resume = gspca_resume,
Hans de Goede8bb58962012-06-30 06:44:47 -03002080 .reset_resume = gspca_resume,
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03002081#endif
2082};
2083
Greg Kroah-Hartmanecb3b2b2011-11-18 09:46:12 -08002084module_usb_driver(sd_driver);
Jean-François Moinece5b2ac2011-03-14 08:49:28 -03002085
2086module_param(webcam, int, 0644);
2087MODULE_PARM_DESC(webcam,
2088 "Webcam type\n"
2089 "0: generic\n"
2090 "1: Trust 120 SpaceCam\n"
2091 "2: other Trust 120 SpaceCam\n"
2092 "3: Conceptronic Video Pro\n"
2093 "4: D-link dru-350c\n"
2094 "5: Plustek Opticam 500U\n"
2095 "6: Panasonic GP-KR651US\n"
2096 "7: iRez Kritter\n"
2097 "8: Mustek Wcam 300 mini\n"
2098 "9: Scalar USB Microscope M2 (Proscope)\n"
2099 "10: Divio Chicony TwinkleCam\n"
Jean-François Moine94751d42011-03-22 05:37:18 -03002100 "11: DVC-V6\n");