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