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