]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - drivers/media/video/gspca/nw80x.c
[media] gspca - nw80x: Do some initialization at probe time
[mirror_ubuntu-artful-kernel.git] / drivers / media / video / gspca / nw80x.c
CommitLineData
ce5b2acc
JFM
1/*
2 * DivIO nw80x subdriver
3 *
4 * Copyright (C) 2011 Jean-François Moine (http://moinejf.free.fr)
5 * Copyright (C) 2003 Sylvain Munaut <tnt@246tNt.com>
6 * Kjell Claesson <keyson@users.sourceforge.net>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
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 {
c3ee142b 56 BRIDGE_NW800, /* and et31x110 */
ce5b2acc
JFM
57 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,
ce5b2acc
JFM
72 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
c3ee142b 147static const struct v4l2_pix_format cif_mode[] = {
ce5b2acc
JFM
148 {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
c3ee142b 173
ce5b2acc 174static const u8 nw800_init[] = {
bad03ff5
JFM
175 0x04, 0x05, 0x01, 0x61,
176 0x04, 0x04, 0x01, 0x01,
ce5b2acc 177 0x04, 0x06, 0x01, 0x04,
bad03ff5
JFM
178 0x04, 0x04, 0x03, 0x00, 0x00, 0x00,
179 0x05, 0x05, 0x01, 0x00,
180 0, 0, 0
181};
182static const u8 nw800_start[] = {
ce5b2acc
JFM
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
c3ee142b
JFM
336/* 06a5:d001 - nw801 - Panasonic
337 * P35u */
338static const u8 nw801_start_1[] = {
ce5b2acc
JFM
339 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};
c3ee142b 393static const u8 nw801_start_qvga[] = {
ce5b2acc
JFM
394 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};
c3ee142b 405static const u8 nw801_start_vga[] = {
ce5b2acc
JFM
406 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};
c3ee142b 416static const u8 nw801_start_2[] = {
ce5b2acc
JFM
417 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?) */
c3ee142b 445static const u8 nw802_start[] = {
ce5b2acc
JFM
446 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[] = {
ce5b2acc
JFM
528 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,
bad03ff5
JFM
533 0, 0, 0
534};
535static const u8 spacecam_start[] = {
ce5b2acc
JFM
536 0x04, 0x06, 0x01, 0x44,
537 0x00, 0x00, 0x40, 0x10, 0x43, 0x00, 0xb4, 0x01, 0x10, 0x00, 0x4f,
538 0xef, 0x0e, 0x00, 0x74, 0x01, 0x01, 0x00, 0x19,
539 0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
540 0x00, 0x01, 0x00, 0x19, 0x00, 0x3e, 0x00, 0x24,
541 0x03, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
542 0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
543 0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
544 0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
545 0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
546 0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
547 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
548 0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
549 0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
550 0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
551 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
552 0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
553 0x00, 0x80, 0x1f, 0xa0, 0x48, 0xc3, 0x02, 0x88, 0x0c, 0x68, 0x00,
554 0x00, 0x00, 0x00, 0x00, 0xa8, 0x06, 0x00, 0x08,
555 0x00, 0x32, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
556 0x00, 0x4b, 0x00, 0x7c, 0x00, 0x80, 0x00,
557 0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
558 0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
559 0x40, 0x20,
560 0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
561 0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
562 0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
563 0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
564 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
565 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
566 0x00, 0x00, 0x00,
567 0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
568 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
569 0x00, 0x00, 0x00, 0x00, 0x00,
570 0x10, 0x00, 0x40, 0x83, 0x02, 0x20, 0x00, 0x11, 0x00, 0x00, 0x00,
571 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
572 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
573 0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
574 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
575 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
576 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
577 0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
578 0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
579 0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
580 0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
581 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
582 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
583 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
584 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
585 0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
586 0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
587 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x62,
588 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
589 0x01, 0x60, 0x01, 0x00, 0x00,
590 0x04, 0x06, 0x01, 0xc0,
591 0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
592 0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
593 0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
594 0x40,
595 0x00, 0x80, 0x01, 0xa0,
596 0x10, 0x1a, 0x01, 0x00,
597 0x00, 0x91, 0x02, 0x32, 0x01,
598 0x00, 0x03, 0x02, 0x08, 0x02,
599 0x10, 0x00, 0x01, 0x83,
600 0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
601 0x20, 0x01, 0x60, 0x01,
602 0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
603 0x10, 0x0e, 0x01, 0x08,
604 0x10, 0x41, 0x11, 0x00, 0x64, 0x99, 0xc0, 0xe2, 0xf9, 0xf9, 0xf9,
605 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
606 0xf9,
607 0x10, 0x03, 0x01, 0x00,
608 0x10, 0x0f, 0x02, 0x13, 0x13,
609 0x10, 0x03, 0x01, 0x06,
610 0x10, 0x41, 0x11, 0x00, 0x64, 0x99, 0xc0, 0xe2, 0xf9, 0xf9, 0xf9,
611 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
612 0xf9,
613 0x10, 0x0b, 0x01, 0x08,
614 0x10, 0x0d, 0x01, 0x10,
615 0x10, 0x0c, 0x01, 0x1f,
616 0x04, 0x06, 0x01, 0xc3,
617 0x04, 0x05, 0x01, 0x40,
618 0x04, 0x04, 0x01, 0x40,
619 0, 0, 0
620};
c3ee142b
JFM
621/* et31x110 - pas106 - other Trust SpaceCam120 */
622static const u8 spacecam2_start[] = {
ce5b2acc
JFM
623 0x04, 0x06, 0x01, 0x44,
624 0x04, 0x06, 0x01, 0x00,
625 0x00, 0x00, 0x40, 0x14, 0x83, 0x00, 0xba, 0x01, 0x10, 0x00, 0x4f,
626 0xef, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x19,
627 0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
628 0x00, 0x01, 0x00, 0x19, 0x00, 0x06, 0x00, 0xfc,
629 0x01, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
630 0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
631 0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
632 0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
633 0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
634 0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
635 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
636 0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
637 0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
638 0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
639 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
640 0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
641 0x00, 0x80, 0x1f, 0xb8, 0x48, 0x0f, 0x04, 0x88, 0x14, 0x68, 0x00,
642 0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x03,
643 0x00, 0x24, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
644 0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
645 0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
646 0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
647 0x40, 0x20,
648 0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
649 0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0x00,
650 0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
651 0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
652 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
653 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
654 0x00, 0x00, 0x00,
655 0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
656 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
657 0x00, 0x00, 0x00, 0x00, 0x00,
658 0x10, 0x00, 0x40, 0x80, 0x02, 0x20, 0x00, 0x13, 0x00, 0x00, 0x00,
659 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
660 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
661 0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
662 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
663 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
664 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
665 0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
666 0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
667 0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
668 0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
669 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
670 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
671 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
672 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
673 0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
674 0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
675 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x62,
676 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
677 0x01, 0x60, 0x01, 0x00, 0x00,
678 0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
679 0x04, 0x04, 0x01, 0x40,
680 0x04, 0x04, 0x01, 0x00,
ce5b2acc
JFM
681 I2C0, 0x40, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x05,
682 0x00, 0x00, 0x05, 0x05,
683 I2C0, 0x40, 0x02, 0x11, 0x06,
684 I2C0, 0x40, 0x02, 0x14, 0x00,
c3ee142b 685 I2C0, 0x40, 0x02, 0x13, 0x01, /* i2c end */
ce5b2acc
JFM
686 0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
687 0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
688 0x40,
c3ee142b 689 I2C0, 0x40, 0x02, 0x02, 0x0c, /* pixel clock */
ce5b2acc 690 I2C0, 0x40, 0x02, 0x0f, 0x00,
c3ee142b 691 I2C0, 0x40, 0x02, 0x13, 0x01, /* i2c end */
ce5b2acc
JFM
692 0x10, 0x00, 0x01, 0x01,
693 0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
694 0x20, 0x01, 0x60, 0x01,
c3ee142b
JFM
695 I2C0, 0x40, 0x02, 0x05, 0x0f, /* exposure */
696 I2C0, 0x40, 0x02, 0x13, 0x01, /* i2c end */
ce5b2acc 697 I2C0, 0x40, 0x07, 0x09, 0x0b, 0x0f, 0x05, 0x05, 0x0f, 0x00,
c3ee142b 698 /* gains */
ce5b2acc 699 I2C0, 0x40, 0x03, 0x12, 0x04, 0x01,
ce5b2acc
JFM
700 0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
701 0x10, 0x0e, 0x01, 0x08,
702 0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
703 0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
704 0xf9,
705 0x10, 0x03, 0x01, 0x00,
706 0x10, 0x0f, 0x02, 0x13, 0x13,
707 0x10, 0x03, 0x01, 0x06,
708 0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
709 0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
710 0xf9,
711 0x10, 0x0b, 0x01, 0x11,
712 0x10, 0x0d, 0x01, 0x10,
713 0x10, 0x0c, 0x01, 0x14,
714 0x04, 0x06, 0x01, 0x03,
715 0x04, 0x05, 0x01, 0x61,
716 0x04, 0x04, 0x01, 0x00,
717 0, 0, 0
718};
719
720/* nw802 - Conceptronic Video Pro */
c3ee142b 721static const u8 cvideopro_start[] = {
ce5b2acc
JFM
722 0x04, 0x06, 0x01, 0x04,
723 0x00, 0x00, 0x40, 0x54, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x4c,
724 0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
725 0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
726 0x00, 0x0b, 0x00, 0x1b, 0x00, 0xc8, 0x00, 0xf4,
727 0x05, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
728 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
729 0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
730 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
731 0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
732 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
733 0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
734 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
735 0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
736 0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
737 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
738 0x00, 0x5d, 0x00, 0xc7, 0x00, 0x7e, 0x00, 0x30,
739 0x00, 0x80, 0x1f, 0x98, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
740 0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
741 0x00, 0x0c, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
742 0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
743 0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
744 0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
745 0x40, 0x20,
746 0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
747 0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
748 0x06, 0x00, 0x02, 0x09, 0x99,
749 0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
750 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
751 0x00, 0x00, 0x00, 0x00, 0x00,
752 0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
753 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
754 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
755 0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
756 0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
757 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
758 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
759 0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
760 0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
761 0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
762 0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
763 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
764 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
765 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
766 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
767 0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
768 0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
769 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x05, 0x82,
770 0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
771 0x01, 0xf0, 0x00,
772 0x02, 0x00, 0x11, 0x3c, 0x50, 0x8c, 0x3c, 0x50, 0x00, 0x00, 0x00,
773 0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xf0,
774 0x40,
775 0x10, 0x1a, 0x01, 0x03,
776 0x10, 0x00, 0x01, 0xac,
777 0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
778 0x10, 0x1b, 0x02, 0x3b, 0x01,
779 0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
780 0x10, 0x1f, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
781 0x10, 0x1d, 0x02, 0x40, 0x06,
782 0x10, 0x0e, 0x01, 0x08,
783 0x10, 0x41, 0x11, 0x00, 0x0f, 0x46, 0x62, 0x76, 0x86, 0x94, 0xa0,
784 0xab, 0xb6, 0xbf, 0xc8, 0xcf, 0xd7, 0xdc, 0xdc,
785 0xdc,
786 0x10, 0x03, 0x01, 0x00,
787 0x10, 0x0f, 0x02, 0x12, 0x12,
788 0x10, 0x03, 0x01, 0x0c,
789 0x10, 0x41, 0x11, 0x00, 0x0f, 0x46, 0x62, 0x76, 0x86, 0x94, 0xa0,
790 0xab, 0xb6, 0xbf, 0xc8, 0xcf, 0xd7, 0xdc, 0xdc,
791 0xdc,
792 0x10, 0x0b, 0x01, 0x09,
793 0x10, 0x0d, 0x01, 0x10,
794 0x10, 0x0c, 0x01, 0x2f,
795 0x04, 0x06, 0x01, 0x03,
796 0x04, 0x04, 0x01, 0x00,
797 0, 0, 0
798};
799
800/* nw802 - D-link dru-350c cam */
c3ee142b 801static const u8 dlink_start[] = {
ce5b2acc
JFM
802 0x04, 0x06, 0x01, 0x04,
803 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x92, 0x03, 0x10, 0x00, 0x4d,
ce5b2acc
JFM
804 0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
805 0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
806 0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
807 0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
808 0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
809 0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
810 0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
811 0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
812 0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
813 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
814 0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
815 0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
816 0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
817 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
818 0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
819 0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00,
820 0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
821 0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94,
ce5b2acc
JFM
822 0x00, 0x10, 0x06, 0x10, 0x00, 0x36, 0x00,
823 0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
824 0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
825 0x40, 0x20,
826 0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
827 0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
828 0x06, 0x00, 0x02, 0x09, 0x99,
829 0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
830 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
831 0x00, 0x00, 0x00, 0x00, 0x00,
832 0x10, 0x00, 0x40, 0xa1, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
833 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
834 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
835 0x00, 0x49, 0x13, 0x00, 0x00, 0xc0, 0x00, 0x14,
836 0x02, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00,
837 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
838 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
839 0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
840 0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
841 0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
842 0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
843 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
844 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
845 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
846 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
847 0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
848 0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
849 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x01, 0x82,
850 0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
851 0x01, 0xf0, 0x00,
ce5b2acc
JFM
852 0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
853 0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
854 0x40,
855 0x10, 0x1a, 0x01, 0x00,
856 0x10, 0x00, 0x01, 0xad,
857 0x00, 0x00, 0x01, 0x08,
858 0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
859 0x10, 0x1b, 0x02, 0x00, 0x00,
860 0x10, 0x11, 0x08, 0x51, 0x00, 0xf0, 0x00, 0x3d, 0x00, 0xb4, 0x00,
861 0x10, 0x1d, 0x08, 0x40, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
862 0x10, 0x0e, 0x01, 0x20,
863 0x10, 0x41, 0x11, 0x00, 0x07, 0x1e, 0x38, 0x4d, 0x60, 0x70, 0x7f,
864 0x8e, 0x9b, 0xa8, 0xb4, 0xbf, 0xca, 0xd5, 0xdf,
865 0xea,
866 0x10, 0x03, 0x01, 0x00,
867 0x10, 0x0f, 0x02, 0x11, 0x11,
868 0x10, 0x03, 0x01, 0x10,
869 0x10, 0x41, 0x11, 0x00, 0x07, 0x1e, 0x38, 0x4d, 0x60, 0x70, 0x7f,
870 0x8e, 0x9b, 0xa8, 0xb4, 0xbf, 0xca, 0xd5, 0xdf,
871 0xea,
872 0x10, 0x0b, 0x01, 0x19,
873 0x10, 0x0d, 0x01, 0x10,
874 0x10, 0x0c, 0x01, 0x1e,
875 0x04, 0x06, 0x01, 0x03,
876 0x04, 0x04, 0x01, 0x00,
877 0, 0, 0
878};
879
c3ee142b
JFM
880/* 06a5:d001 - nw801 - Sony
881 * Plustek Opticam 500U or ProLink DS3303u (Hitachi HD49322BF) */
882/*fixme: 320x240 only*/
883static const u8 ds3303_start[] = {
ce5b2acc
JFM
884 0x05, 0x06, 0x01, 0x04,
885 0x00, 0x00, 0x40, 0x16, 0x00, 0x00, 0xf9, 0x02, 0x11, 0x00, 0x0e,
886 0x01, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
887 0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
888 0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
889 0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
890 0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
891 0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
892 0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
893 0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
894 0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
895 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
896 0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
897 0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
898 0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
899 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
900 0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
901 0x00, 0x80, 0x22, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x08, 0x00,
902 0x00, 0x00, 0x00, 0x00, 0xa9, 0xa8, 0x1f, 0x00,
903 0x0d, 0x02, 0x07, 0x00, 0x01, 0x00, 0x19, 0x00,
904 0xf2, 0x00, 0x18, 0x06, 0x10, 0x06, 0x10, 0x00,
905 0x36, 0x00,
906 0x02, 0x00, 0x12, 0x03, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
907 0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0x50,
908 0x40, 0x20,
909 0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
910 0x05, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
911 0x06, 0x00, 0x02, 0x09, 0x99,
912 0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
913 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
914 0x00, 0x00, 0x00, 0x00, 0x00,
915 0x10, 0x00, 0x40, 0x2f, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
916 0x00, 0x00, 0x00, 0x10, 0x1f, 0x10, 0x08, 0x0a,
917 0x0a, 0x51, 0x00, 0xf1, 0x00, 0x3c, 0x00, 0xb4,
918 0x00, 0x01, 0x15, 0xfd, 0x07, 0x3d, 0x00, 0x00,
919 0x00, 0x00, 0x00, 0x00, 0x8c, 0x04, 0x01, 0x20,
920 0x02, 0x00, 0x03, 0x00, 0x20, 0x00, 0x00, 0x00,
921 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x03,
922 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06, 0xf7,
923 0x10, 0x40, 0x40, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80, 0x80,
924 0x00, 0x2d, 0x46, 0x58, 0x67, 0x74, 0x7f, 0x88,
925 0x94, 0x9d, 0xa6, 0xae, 0xb5, 0xbd, 0xc4, 0xcb,
926 0xd1, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54, 0x64,
927 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2, 0xe2,
928 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
929 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
930 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
931 0x10, 0x80, 0x22, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
932 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x3f, 0x01,
933 0x00, 0x00, 0xef, 0x00, 0x02, 0x0a, 0x82, 0x02,
934 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40, 0x01,
935 0xf0, 0x00,
936
937 0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
938 0x00, 0x78, 0x3f, 0x3f, 0x00, 0xf2, 0x8f, 0x81,
939 0x40,
940 0x10, 0x1a, 0x01, 0x15,
941 0x10, 0x00, 0x01, 0x2f,
942 0x10, 0x8c, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
943 0x10, 0x1b, 0x02, 0x00, 0x00,
944 0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
945 0x10, 0x26, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
946 0x10, 0x24, 0x02, 0x40, 0x06,
947 0x10, 0x0e, 0x01, 0x08,
948 0x10, 0x48, 0x11, 0x00, 0x15, 0x40, 0x67, 0x84, 0x9d, 0xb2, 0xc6,
949 0xd6, 0xe7, 0xf6, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
950 0xf9,
951 0x10, 0x03, 0x01, 0x00,
952 0x10, 0x0f, 0x02, 0x16, 0x16,
953 0x10, 0x03, 0x01, 0x0c,
954 0x10, 0x48, 0x11, 0x00, 0x15, 0x40, 0x67, 0x84, 0x9d, 0xb2, 0xc6,
955 0xd6, 0xe7, 0xf6, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
956 0xf9,
957 0x10, 0x0b, 0x01, 0x26,
958 0x10, 0x0d, 0x01, 0x10,
959 0x10, 0x0c, 0x01, 0x1c,
960 0x05, 0x06, 0x01, 0x03,
961 0x05, 0x04, 0x01, 0x00,
962 0, 0, 0
963};
964
c3ee142b
JFM
965/* 06a5:d001 - nw802 - Panasonic
966 * GP-KR651US (Philips TDA8786) */
967static const u8 kr651_start_1[] = {
ce5b2acc
JFM
968 0x04, 0x06, 0x01, 0x04,
969 0x00, 0x00, 0x40, 0x44, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x48,
970 0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
971 0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
972 0x00, 0x0b, 0x00, 0x1b, 0x00, 0xc8, 0x00, 0xf4,
973 0x05, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
974 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
975 0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
976 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
977 0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
978 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
979 0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
980 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
981 0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
982 0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
983 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
984 0x00, 0x5d, 0x00, 0xc7, 0x00, 0x7e, 0x00, 0x30,
985 0x00, 0x80, 0x1f, 0x18, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
986 0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
987 0x00, 0x0c, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
988 0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
989 0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
990 0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
991 0x40, 0x20,
992 0x03, 0x00, 0x03, 0x02, 0x00, 0x00,
993 0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
994 0x06, 0x00, 0x02, 0x09, 0x99,
995 0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
996 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
997 0x00, 0x00, 0x00, 0x00, 0x00,
998 0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
999 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
1000 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1001 0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
1002 0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
1003 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1004 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1005 0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1006 0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1007 0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1008 0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1009 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1010 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1011 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1012 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1013 0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1014 0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1015 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x05, 0x82,
1016 0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1017 0x01, 0xf0, 0x00,
1018 0, 0, 0
1019};
c3ee142b 1020static const u8 kr651_start_qvga[] = {
ce5b2acc
JFM
1021 0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
1022 0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
1023 0x40,
1024 0x10, 0x1a, 0x01, 0x03,
1025 0x10, 0x00, 0x01, 0xac,
1026 0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1027 0x10, 0x1b, 0x02, 0x00, 0x00,
1028 0x10, 0x11, 0x08, 0x29, 0x00, 0x18, 0x01, 0x1f, 0x00, 0xd2, 0x00,
1029 0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
1030 0x10, 0x1d, 0x02, 0x28, 0x01,
1031 0, 0, 0
1032};
c3ee142b 1033static const u8 kr651_start_vga[] = {
ce5b2acc
JFM
1034 0x02, 0x00, 0x11, 0x78, 0xa0, 0x8c, 0x78, 0xa0, 0x00, 0x00, 0x00,
1035 0x00, 0xf0, 0x30, 0x03, 0x01, 0x82, 0x82, 0x98,
1036 0x80,
1037 0x10, 0x1a, 0x01, 0x03,
1038 0x10, 0x00, 0x01, 0xa0,
1039 0x10, 0x85, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
ce5b2acc
JFM
1040 0x10, 0x1b, 0x02, 0x00, 0x00,
1041 0x10, 0x11, 0x08, 0x51, 0x00, 0x30, 0x02, 0x3d, 0x00, 0xa4, 0x01,
ce5b2acc
JFM
1042 0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
1043 0x10, 0x1d, 0x02, 0x68, 0x00,
1044};
c3ee142b 1045static const u8 kr651_start_2[] = {
ce5b2acc
JFM
1046 0x10, 0x0e, 0x01, 0x08,
1047 0x10, 0x41, 0x11, 0x00, 0x11, 0x3c, 0x5c, 0x74, 0x88, 0x99, 0xa8,
1048 0xb7, 0xc4, 0xd0, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
1049 0xdc,
1050 0x10, 0x03, 0x01, 0x00,
1051 0x10, 0x0f, 0x02, 0x0c, 0x0c,
1052 0x10, 0x03, 0x01, 0x0c,
1053 0x10, 0x41, 0x11, 0x00, 0x11, 0x3c, 0x5c, 0x74, 0x88, 0x99, 0xa8,
1054 0xb7, 0xc4, 0xd0, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
1055 0xdc,
1056 0x10, 0x0b, 0x01, 0x10,
1057 0x10, 0x0d, 0x01, 0x10,
1058 0x10, 0x0c, 0x01, 0x2d,
1059 0x04, 0x06, 0x01, 0x03,
1060 0x04, 0x04, 0x01, 0x00,
1061 0, 0, 0
1062};
1063
1064/* nw802 - iRez Kritter cam */
c3ee142b 1065static const u8 kritter_start[] = {
ce5b2acc
JFM
1066 0x04, 0x06, 0x01, 0x06,
1067 0x00, 0x00, 0x40, 0x44, 0x96, 0x98, 0x94, 0x03, 0x18, 0x00, 0x48,
1068 0x0f, 0x1e, 0x00, 0x0c, 0x02, 0x01, 0x00, 0x19,
1069 0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1070 0x00, 0x0b, 0x00, 0x1b, 0x00, 0x0a, 0x01, 0x28,
1071 0x07, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
1072 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1073 0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
1074 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1075 0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
1076 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1077 0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
1078 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1079 0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
1080 0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1081 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
1082 0x00, 0x5d, 0x00, 0x0e, 0x00, 0x7e, 0x00, 0x30,
1083 0x00, 0x80, 0x1f, 0x18, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
1084 0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
1085 0x00, 0x0b, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
1086 0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
1087 0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1088 0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1089 0x40, 0x20,
1090 0x03, 0x00, 0x03, 0x02, 0x00, 0x00,
1091 0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
1092 0x06, 0x00, 0x02, 0x09, 0x99,
1093 0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1094 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1095 0x00, 0x00, 0x00, 0x00, 0x00,
1096 0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
1097 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
1098 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1099 0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
1100 0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
1101 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1102 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1103 0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1104 0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1105 0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1106 0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1107 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1108 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1109 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1110 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1111 0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1112 0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1113 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x82,
1114 0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1115 0x01, 0xf0, 0x00,
1116 0x02, 0x00, 0x11, 0x3c, 0x50, 0x8c, 0x3c, 0x50, 0x00, 0x00, 0x00,
1117 0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xf0,
1118 0x40,
1119 0x10, 0x1a, 0x01, 0x03,
1120 0x10, 0x00, 0x01, 0xaf,
1121 0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1122 0x10, 0x1b, 0x02, 0x3b, 0x01,
1123 0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
1124 0x10, 0x1d, 0x06, 0xe0, 0x00, 0x0c, 0x00, 0x52, 0x00,
1125 0x10, 0x1d, 0x02, 0x00, 0x00,
1126 0x10, 0x0e, 0x01, 0x08,
1127 0x10, 0x41, 0x11, 0x00, 0x0d, 0x36, 0x4e, 0x60, 0x6f, 0x7b, 0x86,
1128 0x90, 0x98, 0xa1, 0xa9, 0xb1, 0xb7, 0xbe, 0xc4,
1129 0xcb,
1130 0x10, 0x03, 0x01, 0x00,
1131 0x10, 0x0f, 0x02, 0x0d, 0x0d,
1132 0x10, 0x03, 0x01, 0x02,
1133 0x10, 0x41, 0x11, 0x00, 0x0d, 0x36, 0x4e, 0x60, 0x6f, 0x7b, 0x86,
1134 0x90, 0x98, 0xa1, 0xa9, 0xb1, 0xb7, 0xbe, 0xc4,
1135 0xcb,
1136 0x10, 0x0b, 0x01, 0x17,
1137 0x10, 0x0d, 0x01, 0x10,
1138 0x10, 0x0c, 0x01, 0x1e,
1139 0x04, 0x06, 0x01, 0x03,
1140 0x04, 0x04, 0x01, 0x00,
1141 0, 0, 0
1142};
1143
1144/* nw802 - Mustek Wcam 300 mini */
c3ee142b 1145static const u8 mustek_start[] = {
ce5b2acc
JFM
1146 0x04, 0x06, 0x01, 0x04,
1147 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x92, 0x03, 0x10, 0x00, 0x4d,
1148 0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
1149 0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1150 0x00, 0x01, 0x00, 0x19, 0x00, 0xce, 0x00, 0xf4,
1151 0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
1152 0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
1153 0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
1154 0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
1155 0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1156 0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1157 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1158 0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1159 0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
1160 0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1161 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
1162 0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
1163 0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x3f, 0x0f, 0x88, 0x20, 0x68, 0x00,
1164 0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
1165 0x00, 0x0c, 0x02, 0x01, 0x00, 0x16, 0x00, 0x94,
1166 0x00, 0x10, 0x06, 0xfc, 0x05, 0x0c, 0x06,
1167 0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1168 0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1169 0x40, 0x20,
1170 0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
1171 0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
1172 0x06, 0x00, 0x02, 0x09, 0x99,
1173 0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1174 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1175 0x00, 0x00, 0x00, 0x00, 0x00,
1176 0x10, 0x00, 0x40, 0xa1, 0x02, 0x80, 0x00, 0x13, 0x00, 0x00, 0x00,
1177 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
1178 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1179 0x00, 0x49, 0x13, 0x00, 0x00, 0xc0, 0x00, 0x14,
1180 0x02, 0x00, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00,
1181 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1182 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1183 0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1184 0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1185 0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1186 0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1187 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1188 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1189 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1190 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1191 0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1192 0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1193 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x01, 0x82,
1194 0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1195 0x01, 0xf0, 0x00,
1196 0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
1197 0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
1198 0x40,
1199 0x10, 0x1a, 0x01, 0x00,
1200 0x10, 0x00, 0x01, 0xad,
1201 0x00, 0x00, 0x01, 0x08,
1202 0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1203 0x10, 0x1b, 0x02, 0x00, 0x00,
1204 0x10, 0x11, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1205 0x10, 0x1d, 0x08, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20,
1206 0x10, 0x0e, 0x01, 0x0f,
1207 0x10, 0x41, 0x11, 0x00, 0x0f, 0x29, 0x4a, 0x64, 0x7a, 0x8c, 0x9e,
1208 0xad, 0xba, 0xc7, 0xd3, 0xde, 0xe8, 0xf1, 0xf9,
1209 0xff,
1210 0x10, 0x0f, 0x02, 0x11, 0x11,
1211 0x10, 0x03, 0x01, 0x0c,
1212 0x10, 0x41, 0x11, 0x00, 0x0f, 0x29, 0x4a, 0x64, 0x7a, 0x8c, 0x9e,
1213 0xad, 0xba, 0xc7, 0xd3, 0xde, 0xe8, 0xf1, 0xf9,
1214 0xff,
1215 0x10, 0x0b, 0x01, 0x1c,
1216 0x10, 0x0d, 0x01, 0x1a,
1217 0x10, 0x0c, 0x01, 0x34,
1218 0x04, 0x05, 0x01, 0x61,
1219 0x04, 0x04, 0x01, 0x40,
1220 0x04, 0x06, 0x01, 0x03,
1221 0, 0, 0
1222};
1223
1224/* nw802 - Scope USB Microscope M2 (ProScope) (Hitachi HD49322BF) */
bad03ff5 1225static const u8 proscope_init[] = {
ce5b2acc
JFM
1226 0x04, 0x05, 0x01, 0x21,
1227 0x04, 0x04, 0x01, 0x01,
bad03ff5
JFM
1228 0, 0, 0
1229};
1230static const u8 proscope_start_1[] = {
ce5b2acc
JFM
1231 0x04, 0x06, 0x01, 0x04,
1232 0x00, 0x00, 0x40, 0x10, 0x01, 0x00, 0xf9, 0x02, 0x10, 0x00, 0x04,
1233 0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
1234 0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1235 0x00, 0x08, 0x00, 0x17, 0x00, 0xce, 0x00, 0xf4,
1236 0x05, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
1237 0x00, 0xce, 0x00, 0xf8, 0x03, 0x3e, 0x00, 0x86,
1238 0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
1239 0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
1240 0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0xb6,
1241 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1242 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1243 0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1244 0x00, 0xf6, 0x03, 0x34, 0x04, 0xf6, 0x03, 0x34,
1245 0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1246 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xe8,
1247 0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
1248 0x00, 0x80, 0x1f, 0xb4, 0x6f, 0x1f, 0x0f, 0x08, 0x20, 0xa8, 0x00,
1249 0x00, 0x00, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
1250 0x00, 0x0c, 0x02, 0x01, 0x00, 0x19, 0x00, 0x94,
1251 0x00, 0x10, 0x06, 0x10, 0x00, 0x36, 0x00,
1252 0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1253 0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1254 0x40, 0x20,
1255 0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
1256 0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x21, 0x00,
1257 0x06, 0x00, 0x02, 0x09, 0x99,
1258 0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1259 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1260 0x00, 0x00, 0x00, 0x00, 0x00,
1261 0x10, 0x00, 0x40, 0xad, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
1262 0x00, 0x00, 0x00, 0x10, 0x1f, 0x10, 0x08, 0x0a,
1263 0x0a, 0x51, 0x00, 0xf1, 0x00, 0x3c, 0x00, 0xb4,
1264 0x00, 0x49, 0x13, 0x00, 0x00, 0x8c, 0x04, 0x01,
1265 0x20, 0x02, 0x00, 0x03, 0x00, 0x20, 0x00, 0x00,
1266 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1267 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1268 0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1269 0x10, 0x40, 0x40, 0x80, 0x00, 0x2d, 0x46, 0x58, 0x67, 0x74, 0x7f,
1270 0x88, 0x94, 0x9d, 0xa6, 0xae, 0xb5, 0xbd, 0xc4,
1271 0xcb, 0xd1, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1272 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1273 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1274 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1275 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1276 0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1277 0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x3f,
1278 0x01, 0x00, 0x00, 0xef, 0x00, 0x09, 0x05, 0x82,
1279 0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1280 0x01, 0xf0, 0x00,
1281 0, 0, 0
1282};
c3ee142b 1283static const u8 proscope_start_qvga[] = {
ce5b2acc
JFM
1284 0x02, 0x00, 0x11, 0x3c, 0x50, 0x9e, 0x3c, 0x50, 0x00, 0x00, 0x00,
1285 0x00, 0x78, 0x3f, 0x10, 0x02, 0xf2, 0x8f, 0x78,
1286 0x40,
1287 0x10, 0x1a, 0x01, 0x06,
1288 0x00, 0x03, 0x02, 0xf9, 0x02,
1289 0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1290 0x10, 0x1b, 0x02, 0x00, 0x00,
1291 0x10, 0x11, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1292 0x10, 0x1d, 0x08, 0xc0, 0x0d, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
1293 0x10, 0x0e, 0x01, 0x10,
1294 0, 0, 0
1295};
c3ee142b 1296static const u8 proscope_start_vga[] = {
ce5b2acc
JFM
1297 0x00, 0x03, 0x02, 0xf9, 0x02,
1298 0x10, 0x85, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
1299 0x02, 0x00, 0x11, 0x78, 0xa0, 0x8c, 0x78, 0xa0, 0x00, 0x00, 0x00,
1300 0x00, 0xf0, 0x16, 0x00, 0x00, 0x82, 0x84, 0x00,
1301 0x80,
1302 0x10, 0x1a, 0x01, 0x06,
1303 0x10, 0x00, 0x01, 0xa1,
1304 0x10, 0x1b, 0x02, 0x00, 0x00,
1305 0x10, 0x1d, 0x08, 0xc0, 0x0d, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
1306 0x10, 0x11, 0x08, 0x00, 0x00, 0x7f, 0x02, 0x00, 0x00, 0xdf, 0x01,
1307 0x10, 0x0e, 0x01, 0x10,
1308 0x10, 0x41, 0x11, 0x00, 0x10, 0x51, 0x6e, 0x83, 0x93, 0xa1, 0xae,
1309 0xb9, 0xc3, 0xcc, 0xd4, 0xdd, 0xe4, 0xeb, 0xf2,
1310 0xf9,
1311 0x10, 0x03, 0x01, 0x00,
1312 0, 0, 0
1313};
c3ee142b 1314static const u8 proscope_start_2[] = {
ce5b2acc
JFM
1315 0x10, 0x0f, 0x02, 0x0c, 0x0c,
1316 0x10, 0x03, 0x01, 0x0c,
1317 0x10, 0x41, 0x11, 0x00, 0x10, 0x51, 0x6e, 0x83, 0x93, 0xa1, 0xae,
1318 0xb9, 0xc3, 0xcc, 0xd4, 0xdd, 0xe4, 0xeb, 0xf2,
1319 0xf9,
1320 0x10, 0x0b, 0x01, 0x0b,
1321 0x10, 0x0d, 0x01, 0x10,
1322 0x10, 0x0c, 0x01, 0x1b,
1323 0x04, 0x06, 0x01, 0x03,
1324 0x04, 0x05, 0x01, 0x21,
1325 0x04, 0x04, 0x01, 0x00,
1326 0, 0, 0
1327};
1328
c3ee142b
JFM
1329/* nw800 - hv7121b? (seems pas106) - Divio Chicony TwinkleCam */
1330static const u8 twinkle_start[] = {
ce5b2acc
JFM
1331 0x04, 0x06, 0x01, 0x44,
1332 0x04, 0x06, 0x01, 0x00,
1333 0x00, 0x00, 0x40, 0x14, 0x83, 0x00, 0xba, 0x01, 0x10, 0x00, 0x4f,
1334 0xef, 0x00, 0x00, 0x60, 0x00, 0x01, 0x00, 0x19,
1335 0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1336 0x00, 0x01, 0x00, 0x19, 0x00, 0x06, 0x00, 0xfc,
1337 0x01, 0x3e, 0x00, 0x86, 0x00, 0x3e, 0x00, 0x86,
1338 0x00, 0x3e, 0x00, 0x86, 0x00, 0x01, 0x00, 0x01,
1339 0x00, 0x56, 0x00, 0x9e, 0x00, 0x56, 0x00, 0x9e,
1340 0x00, 0x56, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x01,
1341 0x00, 0x40, 0x40, 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1342 0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1343 0x00, 0x6e, 0x00, 0xb6, 0x00, 0x6e, 0x00, 0x78,
1344 0x04, 0x6e, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x01,
1345 0x00, 0xca, 0x03, 0x46, 0x04, 0xca, 0x03, 0x46,
1346 0x04, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1347 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0xf0,
1348 0x00, 0x3e, 0x00, 0xaa, 0x00, 0x88, 0x00, 0x2e,
1349 0x00, 0x80, 0x1f, 0xb8, 0x48, 0x0f, 0x04, 0x88, 0x14, 0x68, 0x00,
1350 0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x00, 0x03,
1351 0x00, 0x24, 0x01, 0x01, 0x00, 0x16, 0x00, 0x04,
1352 0x00, 0x4b, 0x00, 0x76, 0x00, 0x86, 0x00,
1353 0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1354 0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1355 0x40, 0x20,
1356 0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
1357 0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0x61, 0x00,
1358 0x05, 0x00, 0x06, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00,
1359 0x06, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1360 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1361 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1362 0x00, 0x00, 0x00,
1363 0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1364 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1365 0x00, 0x00, 0x00, 0x00, 0x00,
1366 0x10, 0x00, 0x40, 0x80, 0x02, 0x20, 0x00, 0x11, 0x00, 0x00, 0x00,
1367 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x08,
1368 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1369 0x00, 0x49, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00,
1370 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
1371 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1372 0x03, 0x00, 0x00, 0x10, 0x00, 0x20, 0x10, 0x06,
1373 0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x00, 0x80,
1374 0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1375 0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1376 0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1377 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1378 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1379 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1380 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1381 0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1382 0x10, 0x80, 0x1d, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1383 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x62,
1384 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01, 0x20,
1385 0x01, 0x60, 0x01, 0x00, 0x00,
1386
1387 0x10, 0x85, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
ce5b2acc
JFM
1388 0x04, 0x04, 0x01, 0x10,
1389 0x04, 0x04, 0x01, 0x00,
1390 0x04, 0x05, 0x01, 0x61,
1391 0x04, 0x04, 0x01, 0x01,
ce5b2acc
JFM
1392 I2C0, 0x40, 0x0c, 0x02, 0x0c, 0x12, 0x07, 0x00, 0x00, 0x00, 0x00,
1393 0x00, 0x00, 0x00, 0x0a,
1394 I2C0, 0x40, 0x02, 0x11, 0x06,
1395 I2C0, 0x40, 0x02, 0x14, 0x00,
c3ee142b 1396 I2C0, 0x40, 0x02, 0x13, 0x01, /* i2c end */
ce5b2acc 1397 I2C0, 0x40, 0x02, 0x07, 0x01,
ce5b2acc 1398 0x02, 0x00, 0x11, 0x48, 0x58, 0x9e, 0x48, 0x58, 0x00, 0x00, 0x00,
ce5b2acc 1399 0x00, 0x84, 0x36, 0x05, 0x01, 0xf2, 0x86, 0x65,
ce5b2acc 1400 0x40,
ce5b2acc
JFM
1401 I2C0, 0x40, 0x02, 0x02, 0x0c,
1402 I2C0, 0x40, 0x02, 0x13, 0x01,
ce5b2acc
JFM
1403 0x10, 0x00, 0x01, 0x01,
1404 0x10, 0x8f, 0x0c, 0x62, 0x01, 0x24, 0x01, 0x62, 0x01, 0x24, 0x01,
1405 0x20, 0x01, 0x60, 0x01,
ce5b2acc
JFM
1406 I2C0, 0x40, 0x02, 0x05, 0x0f,
1407 I2C0, 0x40, 0x02, 0x13, 0x01,
1408 I2C0, 0x40, 0x08, 0x08, 0x04, 0x0b, 0x01, 0x01, 0x02, 0x00, 0x17,
1409 I2C0, 0x40, 0x03, 0x12, 0x00, 0x01,
ce5b2acc 1410 0x10, 0x11, 0x08, 0x00, 0x00, 0x5f, 0x01, 0x00, 0x00, 0x1f, 0x01,
ce5b2acc
JFM
1411 I2C0, 0x40, 0x02, 0x12, 0x00,
1412 I2C0, 0x40, 0x02, 0x0e, 0x00,
1413 I2C0, 0x40, 0x02, 0x11, 0x06,
ce5b2acc
JFM
1414 0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
1415 0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
1416 0xf9,
1417 0x10, 0x03, 0x01, 0x00,
1418 0x10, 0x0f, 0x02, 0x0c, 0x0c,
1419 0x10, 0x03, 0x01, 0x06,
1420 0x10, 0x41, 0x11, 0x00, 0x17, 0x3f, 0x69, 0x7b, 0x8c, 0x9a, 0xa7,
1421 0xb3, 0xbf, 0xc9, 0xd3, 0xdd, 0xe6, 0xef, 0xf7,
1422 0xf9,
1423 0x10, 0x0b, 0x01, 0x19,
1424 0x10, 0x0d, 0x01, 0x10,
1425 0x10, 0x0c, 0x01, 0x0d,
1426 0x04, 0x06, 0x01, 0x03,
1427 0x04, 0x05, 0x01, 0x61,
1428 0x04, 0x04, 0x01, 0x41,
1429 0, 0, 0
1430};
1431
ce5b2acc 1432/* nw802 dvc-v6 */
c3ee142b 1433static const u8 dvcv6_start[] = {
ce5b2acc
JFM
1434 0x04, 0x06, 0x01, 0x06,
1435 0x00, 0x00, 0x40, 0x54, 0x96, 0x98, 0xf9, 0x02, 0x18, 0x00, 0x4c,
1436 0x0f, 0x1f, 0x00, 0x0d, 0x02, 0x01, 0x00, 0x19,
1437 0x00, 0x01, 0x00, 0x19, 0x00, 0x01, 0x00, 0x19,
1438 0x00, 0x0b, 0x00, 0x1b, 0x00, 0xc8, 0x00, 0xf4,
1439 0x05, 0xb4, 0x00, 0xcc, 0x00, 0x01, 0x00, 0x01,
1440 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1441 0x00, 0xa2, 0x00, 0xc6, 0x00, 0x60, 0x00, 0xc6,
1442 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1443 0x00, 0x40, 0x40, 0x00, 0xae, 0x00, 0xd2, 0x00, 0xae, 0x00, 0xd2,
1444 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1445 0x00, 0xa8, 0x00, 0xc0, 0x00, 0x66, 0x00, 0xc0,
1446 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01,
1447 0x00, 0x0a, 0x00, 0x54, 0x00, 0x0a, 0x00, 0x54,
1448 0x00, 0x10, 0x00, 0x36, 0x00, 0xd2, 0x00, 0xee,
1449 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6,
1450 0x00, 0x5d, 0x00, 0xc7, 0x00, 0x7e, 0x00, 0x30,
1451 0x00, 0x80, 0x1f, 0x98, 0x43, 0x3f, 0x0d, 0x88, 0x20, 0x80, 0x3f,
1452 0x47, 0xaf, 0x00, 0x00, 0xa8, 0x08, 0x00, 0x11,
1453 0x00, 0x0c, 0x02, 0x0c, 0x00, 0x1c, 0x00, 0x94,
1454 0x00, 0x10, 0x06, 0x24, 0x00, 0x4a, 0x00,
1455 0x02, 0x00, 0x12, 0x78, 0xa0, 0x9e, 0x78, 0xa0, 0x00, 0x00, 0x00,
1456 0x00, 0xf0, 0x18, 0x0b, 0x06, 0x62, 0x82, 0xa0,
1457 0x40, 0x20,
1458 0x03, 0x00, 0x03, 0x03, 0x00, 0x00,
1459 0x04, 0x00, 0x07, 0x01, 0x10, 0x00, 0x00, 0x00, 0xff, 0x00,
1460 0x06, 0x00, 0x02, 0x09, 0x99,
1461 0x08, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1462 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1463 0x00, 0x00, 0x00, 0x00, 0x00,
1464 0x10, 0x00, 0x40, 0xa0, 0x02, 0x80, 0x00, 0x12, 0x00, 0x00, 0x00,
1465 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0x08, 0x0a,
1466 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1467 0x00, 0x49, 0x13, 0x00, 0x00, 0xe0, 0x00, 0x0c,
1468 0x00, 0x52, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
1469 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08,
1470 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x10, 0x06,
1471 0xf7, 0xee, 0x1c, 0x1c, 0xe9, 0xfc, 0x10, 0x80,
1472 0x10, 0x40, 0x40, 0x80, 0x00, 0x05, 0x35, 0x5e, 0x78, 0x8b, 0x99,
1473 0xa4, 0xae, 0xb5, 0xbc, 0xc1, 0xc6, 0xc9, 0xcc,
1474 0xcf, 0xd0, 0x00, 0x11, 0x22, 0x32, 0x43, 0x54,
1475 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3, 0xd2,
1476 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32, 0x43,
1477 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3, 0xc3,
1478 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x11, 0x22, 0x32,
1479 0x43, 0x54, 0x64, 0x74, 0x84, 0x94, 0xa4, 0xb3,
1480 0x10, 0x80, 0x1b, 0xc3, 0xd2, 0xe2, 0xf1, 0xff, 0x00, 0x00, 0x00,
1481 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x05, 0x82,
1482 0x02, 0xe4, 0x01, 0x40, 0x01, 0xf0, 0x00, 0x40,
1483 0x01, 0xf0, 0x00,
1484 0x00, 0x03, 0x02, 0x94, 0x03,
1485 0x00, 0x1d, 0x04, 0x0a, 0x01, 0x28, 0x07,
1486 0x00, 0x7b, 0x02, 0xe0, 0x00,
1487 0x10, 0x8d, 0x01, 0x00,
1488 0x00, 0x09, 0x04, 0x1e, 0x00, 0x0c, 0x02,
1489 0x00, 0x91, 0x02, 0x0b, 0x02,
1490 0x10, 0x00, 0x01, 0xaf,
1491 0x02, 0x00, 0x11, 0x3c, 0x50, 0x8f, 0x3c, 0x50, 0x00, 0x00, 0x00,
1492 0x00, 0x78, 0x3f, 0x3f, 0x06, 0xf2, 0x8f, 0xf0,
1493 0x40,
1494 0x10, 0x1a, 0x01, 0x02,
1495 0x10, 0x00, 0x01, 0xaf,
1496 0x10, 0x85, 0x08, 0x00, 0x00, 0x3f, 0x01, 0x00, 0x00, 0xef, 0x00,
1497 0x10, 0x1b, 0x02, 0x07, 0x01,
1498 0x10, 0x11, 0x08, 0x61, 0x00, 0xe0, 0x00, 0x49, 0x00, 0xa8, 0x00,
1499 0x10, 0x1f, 0x06, 0x01, 0x20, 0x02, 0xe8, 0x03, 0x00,
1500 0x10, 0x1d, 0x02, 0x40, 0x06,
1501 0x10, 0x0e, 0x01, 0x08,
1502 0x10, 0x41, 0x11, 0x00, 0x0f, 0x54, 0x6f, 0x82, 0x91, 0x9f, 0xaa,
1503 0xb4, 0xbd, 0xc5, 0xcd, 0xd5, 0xdb, 0xdc, 0xdc,
1504 0xdc,
1505 0x10, 0x03, 0x01, 0x00,
1506 0x10, 0x0f, 0x02, 0x12, 0x12,
1507 0x10, 0x03, 0x01, 0x11,
1508 0x10, 0x41, 0x11, 0x00, 0x0f, 0x54, 0x6f, 0x82, 0x91, 0x9f, 0xaa,
1509 0xb4, 0xbd, 0xc5, 0xcd, 0xd5, 0xdb, 0xdc, 0xdc,
1510 0xdc,
1511 0x10, 0x0b, 0x01, 0x16,
1512 0x10, 0x0d, 0x01, 0x10,
1513 0x10, 0x0c, 0x01, 0x1a,
1514 0x04, 0x06, 0x01, 0x03,
1515 0x04, 0x04, 0x01, 0x00,
1516};
1517
c3ee142b 1518static const u8 *webcam_start[] = {
bad03ff5
JFM
1519 [Generic800] = nw800_start,
1520 [SpaceCam] = spacecam_start,
c3ee142b
JFM
1521 [SpaceCam2] = spacecam2_start,
1522 [Cvideopro] = cvideopro_start,
1523 [Dlink350c] = dlink_start,
1524 [DS3303u] = ds3303_start,
1525 [Kr651us] = kr651_start_1,
1526 [Kritter] = kritter_start,
1527 [Mustek300] = mustek_start,
bad03ff5 1528 [Proscope] = proscope_start_1,
c3ee142b 1529 [Twinkle] = twinkle_start,
c3ee142b
JFM
1530 [DvcV6] = dvcv6_start,
1531 [P35u] = nw801_start_1,
1532 [Generic802] = nw802_start,
ce5b2acc
JFM
1533};
1534
1535/* -- write a register -- */
1536static void reg_w(struct gspca_dev *gspca_dev,
1537 u16 index,
1538 const u8 *data,
1539 int len)
1540{
1541 struct usb_device *dev = gspca_dev->dev;
1542 int ret;
1543
1544 if (gspca_dev->usb_err < 0)
1545 return;
1546 if (len == 1)
1547 PDEBUG(D_USBO, "SET 00 0000 %04x %02x", index, *data);
1548 else
1549 PDEBUG(D_USBO, "SET 00 0000 %04x %02x %02x ...",
1550 index, *data, data[1]);
1551 memcpy(gspca_dev->usb_buf, data, len);
1552 ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1553 0x00,
1554 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1555 0x00, /* value */
1556 index,
1557 gspca_dev->usb_buf,
1558 len,
1559 500);
1560 if (ret < 0) {
1561 err("reg_w err %d", ret);
1562 gspca_dev->usb_err = ret;
1563 }
1564}
1565
1566/* -- read registers in usb_buf -- */
1567static void reg_r(struct gspca_dev *gspca_dev,
1568 u16 index,
1569 int len)
1570{
1571 struct usb_device *dev = gspca_dev->dev;
1572 int ret;
1573
1574 if (gspca_dev->usb_err < 0)
1575 return;
1576 ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
1577 0x00,
1578 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1579 0x00, index,
1580 gspca_dev->usb_buf, len, 500);
1581 if (ret < 0) {
1582 err("reg_r err %d", ret);
1583 gspca_dev->usb_err = ret;
1584 return;
1585 }
1586 if (len == 1)
1587 PDEBUG(D_USBI, "GET 00 0000 %04x %02x",
1588 index, gspca_dev->usb_buf[0]);
1589 else
1590 PDEBUG(D_USBI, "GET 00 0000 %04x %02x %02x ..",
1591 index, gspca_dev->usb_buf[0],
1592 gspca_dev->usb_buf[1]);
1593}
1594
1595static void i2c_w(struct gspca_dev *gspca_dev,
1596 u8 i2c_addr,
1597 const u8 *data,
1598 int len)
1599{
1600 u8 val[2];
1601 int i;
1602
1603 reg_w(gspca_dev, 0x0600, data + 1, len - 1);
1604 reg_w(gspca_dev, 0x0600, data, len);
1605 val[0] = len;
1606 val[1] = i2c_addr;
1607 reg_w(gspca_dev, 0x0502, val, 2);
1608 val[0] = 0x01;
1609 reg_w(gspca_dev, 0x0501, val, 1);
1610 for (i = 5; --i >= 0; ) {
1611 msleep(4);
1612 reg_r(gspca_dev, 0x0505, 1);
1613 if (gspca_dev->usb_err < 0)
1614 return;
1615 if (gspca_dev->usb_buf[0] == 0)
1616 return;
1617 }
1618 gspca_dev->usb_err = -ETIME;
1619}
1620
1621static void reg_w_buf(struct gspca_dev *gspca_dev,
1622 const u8 *cmd)
1623{
1624 u16 reg;
1625 int len;
1626
1627 for (;;) {
1628 reg = *cmd++ << 8;
1629 reg += *cmd++;
1630 len = *cmd++;
1631 if (len == 0)
1632 break;
1633 if (cmd[-3] != I2C0)
1634 reg_w(gspca_dev, reg, cmd, len);
1635 else
c3ee142b 1636 i2c_w(gspca_dev, reg, cmd, len);
ce5b2acc
JFM
1637 cmd += len;
1638 }
1639}
1640
1641static int swap_6bits(int v)
1642{
1643 int r, i;
1644
1645 r = 0;
1646 for (i = 0; i < 6; i++) {
1647 r <<= 1;
1648 if (v & 1)
1649 r++;
1650 v >>= 1;
1651 }
1652 return r;
1653}
1654
1655static void setgain(struct gspca_dev *gspca_dev)
1656{
1657 struct sd *sd = (struct sd *) gspca_dev;
1658 u8 val, v[2];
1659
1660 val = sd->ctrls[GAIN].val >> 1; /* 0 - 63 -> 0 - 31 */
1661 reg_w(gspca_dev, 0x100e, &val, 1); /* AE Y gain */
1662
1663 switch (sd->webcam) {
1664 case P35u:
1665 /* Note the control goes from 0-255 not 0-127, but anything
1666 above 127 just means amplifying noise */
1667 val = sd->ctrls[GAIN].val << 1; /* 0 - 63 -> 0 - 127 */
1668 reg_w(gspca_dev, 0x1026, &val, 1);
1669 break;
1670 case Kr651us:
1671 /* 0 - 63 -> 0 - 0x37 */
1672 val = (sd->ctrls[GAIN].val * 0x37) / 63;
1673 val = swap_6bits(val);
1674 v[0] = val << 3;
1675 v[1] = val >> 5;
1676 reg_w(gspca_dev, 0x101d, v, 2); /* SIF reg0/1 (AGC) */
1677 break;
1678 }
1679}
1680
1681static void setexposure(struct gspca_dev *gspca_dev)
1682{
1683 struct sd *sd = (struct sd *) gspca_dev;
1684 u8 v[2];
1685
1686 switch (sd->webcam) {
1687 case P35u:
1688 v[0] = (sd->ctrls[EXPOSURE].val << 3) | 0x01;
1689 reg_w(gspca_dev, 0x1019, v, 1);
1690 break;
1691 case Kr651us:
1692 v[0] = sd->ctrls[EXPOSURE].val;
1693 v[1] = sd->ctrls[EXPOSURE].val >> 8;
1694 reg_w(gspca_dev, 0x101b, v, 2);
1695 break;
1696 }
1697}
1698
1699static void setautogain(struct gspca_dev *gspca_dev)
1700{
1701 struct sd *sd = (struct sd *) gspca_dev;
1702 int w, h;
1703
1704 if (gspca_dev->ctrl_dis & (1 << AUTOGAIN))
1705 return;
1706 if (!sd->ctrls[AUTOGAIN].val) {
1707 sd->ag_cnt = -1;
1708 return;
1709 }
1710 sd->ag_cnt = AG_CNT_START;
1711
1712 reg_r(gspca_dev, 0x1004, 1);
1713 if (gspca_dev->usb_buf[0] & 0x04) { /* if AE_FULL_FRM */
1714 sd->ae_res = gspca_dev->width * gspca_dev->height;
1715 } else { /* get the AE window size */
1716 reg_r(gspca_dev, 0x1011, 8);
1717 w = (gspca_dev->usb_buf[1] << 8) + gspca_dev->usb_buf[0]
1718 - (gspca_dev->usb_buf[3] << 8) - gspca_dev->usb_buf[2];
1719 h = (gspca_dev->usb_buf[5] << 8) + gspca_dev->usb_buf[4]
1720 - (gspca_dev->usb_buf[7] << 8) - gspca_dev->usb_buf[6];
1721 sd->ae_res = h * w;
1722 if (sd->ae_res == 0)
1723 sd->ae_res = gspca_dev->width * gspca_dev->height;
1724 }
1725}
1726
ce5b2acc
JFM
1727static int nw802_test_reg(struct gspca_dev *gspca_dev,
1728 u16 index,
1729 u8 value)
1730{
1731 /* write the value */
1732 reg_w(gspca_dev, index, &value, 1);
1733
1734 /* read it */
1735 reg_r(gspca_dev, index, 1);
1736
1737 return gspca_dev->usb_buf[0] == value;
1738}
1739
bad03ff5
JFM
1740/* this function is called at probe time */
1741static int sd_config(struct gspca_dev *gspca_dev,
1742 const struct usb_device_id *id)
ce5b2acc
JFM
1743{
1744 struct sd *sd = (struct sd *) gspca_dev;
1745
bad03ff5
JFM
1746 if ((unsigned) webcam >= NWEBCAMS)
1747 webcam = 0;
1748 sd->webcam = webcam;
1749 gspca_dev->cam.reverse_alts = 1;
1750 gspca_dev->cam.ctrls = sd->ctrls;
1751 sd->ag_cnt = -1;
1752
ce5b2acc
JFM
1753 /*
1754 * Autodetect sequence inspired from some log.
1755 * We try to detect what registers exist or not.
1756 * If 0x0500 does not exist => NW802
1757 * If it does, test 0x109b. If it doesn't exist,
1758 * then it's a NW801. Else, a NW800
1759 */
1760 if (!nw802_test_reg(gspca_dev, 0x0500, 0x55)) {
1761 sd->bridge = BRIDGE_NW802;
1762 if (sd->webcam == Generic800)
1763 sd->webcam = Generic802;
1764 } else if (!nw802_test_reg(gspca_dev, 0x109b, 0xaa)) {
1765 sd->bridge = BRIDGE_NW801;
1766 if (sd->webcam == Generic800)
1767 sd->webcam = P35u;
1768 }
1769 PDEBUG(D_PROBE, "Bridge nw80%d", sd->bridge);
1770
1771 if (sd->bridge == BRIDGE_NW800) {
c3ee142b
JFM
1772 gspca_dev->cam.cam_mode = cif_mode;
1773 gspca_dev->cam.nmodes = ARRAY_SIZE(cif_mode);
ce5b2acc
JFM
1774 } else {
1775 gspca_dev->cam.cam_mode = vga_mode;
1776 switch (sd->webcam) {
1777 case Generic802:
1778 case Kr651us:
1779 case Proscope:
1780 case P35u:
1781 gspca_dev->cam.nmodes = ARRAY_SIZE(vga_mode);
1782 break;
1783 default:
1784 gspca_dev->cam.nmodes = 1; /* qvga only */
1785 break;
1786 }
1787 }
1788 switch (sd->webcam) {
1789 case P35u:
c3ee142b 1790/* sd->ctrls[EXPOSURE].max = 9;
ce5b2acc
JFM
1791 * sd->ctrls[EXPOSURE].def = 1; */
1792 break;
1793 case Kr651us:
ce5b2acc
JFM
1794 sd->ctrls[EXPOSURE].max = 315;
1795 sd->ctrls[EXPOSURE].def = 150;
1796 break;
1797 default:
1798 gspca_dev->ctrl_dis = ~(1 << GAIN);
1799 break;
1800 }
bad03ff5
JFM
1801 return gspca_dev->usb_err;
1802}
ce5b2acc 1803
bad03ff5
JFM
1804/* this function is called at probe and resume time */
1805static int sd_init(struct gspca_dev *gspca_dev)
1806{
1807 struct sd *sd = (struct sd *) gspca_dev;
1808
1809 switch (sd->bridge) {
1810 case BRIDGE_NW800:
1811 switch (sd->webcam) {
1812 case SpaceCam:
1813 reg_w_buf(gspca_dev, spacecam_init);
1814 break;
1815 default:
1816 reg_w_buf(gspca_dev, nw800_init);
1817 break;
1818 }
1819 break;
1820 default:
1821 switch (sd->webcam) {
1822 case Mustek300:
1823 case P35u:
1824 case Proscope:
1825 reg_w_buf(gspca_dev, proscope_init);
1826 break;
1827 }
1828 break;
1829 }
ce5b2acc
JFM
1830 return gspca_dev->usb_err;
1831}
1832
1833/* -- start the camera -- */
1834static int sd_start(struct gspca_dev *gspca_dev)
1835{
1836 struct sd *sd = (struct sd *) gspca_dev;
1837 const u8 *cmd;
1838
c3ee142b 1839 cmd = webcam_start[sd->webcam];
ce5b2acc
JFM
1840 reg_w_buf(gspca_dev, cmd);
1841 switch (sd->webcam) {
1842 case P35u:
1843 if (gspca_dev->width == 320)
c3ee142b 1844 reg_w_buf(gspca_dev, nw801_start_qvga);
ce5b2acc 1845 else
c3ee142b
JFM
1846 reg_w_buf(gspca_dev, nw801_start_vga);
1847 reg_w_buf(gspca_dev, nw801_start_2);
ce5b2acc
JFM
1848 break;
1849 case Kr651us:
1850 if (gspca_dev->width == 320)
c3ee142b 1851 reg_w_buf(gspca_dev, kr651_start_qvga);
ce5b2acc 1852 else
c3ee142b
JFM
1853 reg_w_buf(gspca_dev, kr651_start_vga);
1854 reg_w_buf(gspca_dev, kr651_start_2);
ce5b2acc
JFM
1855 break;
1856 case Proscope:
1857 if (gspca_dev->width == 320)
c3ee142b 1858 reg_w_buf(gspca_dev, proscope_start_qvga);
ce5b2acc 1859 else
c3ee142b
JFM
1860 reg_w_buf(gspca_dev, proscope_start_vga);
1861 reg_w_buf(gspca_dev, proscope_start_2);
ce5b2acc
JFM
1862 break;
1863 }
1864
1865 setgain(gspca_dev);
1866 setexposure(gspca_dev);
1867 setautogain(gspca_dev);
1868 return gspca_dev->usb_err;
1869}
1870
1871static void sd_stopN(struct gspca_dev *gspca_dev)
1872{
1873 struct sd *sd = (struct sd *) gspca_dev;
1874 u8 value;
1875
1876 /* 'go' off */
1877 if (sd->bridge != BRIDGE_NW801) {
1878 value = 0x02;
1879 reg_w(gspca_dev, 0x0406, &value, 1);
1880 }
1881
1882 /* LED off */
1883 switch (sd->webcam) {
1884 case Cvideopro:
1885 case Kr651us:
1886 case DvcV6:
1887 case Kritter:
1888 value = 0xff;
1889 break;
1890 case Dlink350c:
1891 value = 0x21;
1892 break;
1893 case SpaceCam:
1894 case SpaceCam2:
1895 case Proscope:
1896 case Twinkle:
1897 value = 0x01;
1898 break;
1899 default:
1900 return;
1901 }
1902 reg_w(gspca_dev, 0x0404, &value, 1);
1903}
1904
1905static void sd_pkt_scan(struct gspca_dev *gspca_dev,
1906 u8 *data, /* isoc packet */
1907 int len) /* iso packet length */
1908{
1909 /*
1910 * frame header = '00 00 hh ww ss xx ff ff'
1911 * with:
1912 * - 'hh': height / 4
1913 * - 'ww': width / 4
1914 * - 'ss': frame sequence number c0..dd
1915 */
1916 if (data[0] == 0x00 && data[1] == 0x00
1917 && data[6] == 0xff && data[7] == 0xff) {
1918 gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
1919 gspca_frame_add(gspca_dev, FIRST_PACKET, data + 8, len - 8);
1920 } else {
1921 gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
1922 }
1923}
1924
1925static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val)
1926{
1927 struct sd *sd = (struct sd *) gspca_dev;
1928
1929 sd->ctrls[AUTOGAIN].val = val;
1930 if (val)
1931 gspca_dev->ctrl_inac = (1 << GAIN) | (1 << EXPOSURE);
1932 else
1933 gspca_dev->ctrl_inac = 0;
1934 if (gspca_dev->streaming)
1935 setautogain(gspca_dev);
1936 return gspca_dev->usb_err;
1937}
1938
1939static void do_autogain(struct gspca_dev *gspca_dev)
1940{
1941 struct sd *sd = (struct sd *) gspca_dev;
1942 int luma;
1943 int gain, shutter;
1944
1945 if (sd->ag_cnt < 0)
1946 return;
1947 if (--sd->ag_cnt >= 0)
1948 return;
1949 sd->ag_cnt = AG_CNT_START;
1950
1951 /* get the average luma */
1952 reg_r(gspca_dev, sd->bridge == BRIDGE_NW801 ? 0x080d : 0x080c, 4);
1953 luma = (gspca_dev->usb_buf[3] << 24) + (gspca_dev->usb_buf[2] << 16)
1954 + (gspca_dev->usb_buf[1] << 8) + gspca_dev->usb_buf[0];
1955 luma /= sd->ae_res;
1956
1957 if (sd->webcam == P35u) {
1958 u8 clock;
1959
1960 if (luma > 92 && luma < 108)
1961 return; /* fine */
1962 clock = sd->ctrls[EXPOSURE].val;
1963 gain = sd->ctrls[GAIN].val;
1964 if (luma < 100) {
1965 if (luma < 70 && clock > 0)
1966 clock--;
1967 if (gain > 98 && clock > 0)
1968 clock--;
1969 if (gain <= 50)
1970 gain += 3;
1971 } else {
1972 if (luma > 150 && clock < 9)
1973 clock++;
1974 if (gain < 12 && clock < 9)
1975 clock++;
1976 if (gain >= 5)
1977 gain -= 3;
1978 }
1979 if (gain != sd->ctrls[GAIN].val) {
1980 sd->ctrls[GAIN].val = gain;
1981 setgain(gspca_dev);
1982 }
1983 if (clock != sd->ctrls[EXPOSURE].val) {
1984 sd->ctrls[EXPOSURE].val = clock;
1985 setexposure(gspca_dev);
1986 }
1987 return;
1988 }
1989
1990 /* kr651us */
1991 if (luma > 95 && luma < 105)
1992 return; /* fine */
1993 gain = sd->ctrls[GAIN].val;
1994 shutter = sd->ctrls[EXPOSURE].val;
1995 if (luma < 100) {
1996 if (shutter > 0) {
1997 if (luma < 85 && shutter > 50)
1998 shutter -= 50;
1999 else
2000 shutter--;
2001 } else if (gain < 63) {
2002 if (luma < 85 && gain < 53)
2003 gain += 10;
2004 else
2005 gain++;
2006 }
2007 } else {
2008 if (gain > 0) {
2009 if (luma > 115 && gain > 10)
2010 gain -= 10;
2011 else
2012 gain--;
2013 } else if (shutter < 316) { /* max 0x13b */
2014 if (luma > 115 && shutter < 266)
2015 shutter += 50;
2016 else
2017 shutter++;
2018 }
2019 }
2020 if (gain != sd->ctrls[GAIN].val) {
2021 sd->ctrls[GAIN].val = gain;
2022 setgain(gspca_dev);
2023 }
2024 if (shutter != sd->ctrls[EXPOSURE].val) {
2025 sd->ctrls[EXPOSURE].val = shutter;
2026 setexposure(gspca_dev);
2027 }
2028}
2029
2030/* V4L2 controls supported by the driver */
2031static const struct ctrl sd_ctrls[NCTRLS] = {
2032[GAIN] = {
2033 {
2034 .id = V4L2_CID_GAIN,
2035 .type = V4L2_CTRL_TYPE_INTEGER,
2036 .name = "Gain",
2037 .minimum = 0,
2038 .maximum = 63,
2039 .step = 1,
2040 .default_value = 16
2041 },
2042 .set_control = setgain
2043 },
2044[EXPOSURE] = {
2045 {
2046 .id = V4L2_CID_EXPOSURE,
2047 .type = V4L2_CTRL_TYPE_INTEGER,
2048 .name = "Exposure",
2049 .minimum = 0,
2050 .maximum = 9,
2051 .step = 1,
2052 .default_value = 1
2053 },
2054 .set_control = setexposure
2055 },
2056[AUTOGAIN] = {
2057 {
2058 .id = V4L2_CID_AUTOGAIN,
2059 .type = V4L2_CTRL_TYPE_BOOLEAN,
2060 .name = "Auto Gain",
2061 .minimum = 0,
2062 .maximum = 1,
2063 .step = 1,
2064 .default_value = 1,
2065 .flags = V4L2_CTRL_FLAG_UPDATE
2066 },
2067 .set = sd_setautogain
2068 },
2069};
2070
2071/* sub-driver description */
2072static const struct sd_desc sd_desc = {
2073 .name = MODULE_NAME,
2074 .ctrls = sd_ctrls,
2075 .nctrls = ARRAY_SIZE(sd_ctrls),
2076 .config = sd_config,
2077 .init = sd_init,
2078 .start = sd_start,
2079 .stopN = sd_stopN,
2080 .pkt_scan = sd_pkt_scan,
2081 .dq_callback = do_autogain,
2082};
2083
2084/* -- module initialisation -- */
2085static const struct usb_device_id device_table[] = {
2086 {USB_DEVICE(0x046d, 0xd001)},
2087 {USB_DEVICE(0x0502, 0xd001)},
2088 {USB_DEVICE(0x052b, 0xd001)},
2089 {USB_DEVICE(0x055f, 0xd001)},
2090 {USB_DEVICE(0x06a5, 0x0000)},
2091 {USB_DEVICE(0x06a5, 0xd001)},
2092 {USB_DEVICE(0x06a5, 0xd800)},
2093 {USB_DEVICE(0x06be, 0xd001)},
2094 {USB_DEVICE(0x0728, 0xd001)},
2095 {}
2096};
2097MODULE_DEVICE_TABLE(usb, device_table);
2098
2099/* -- device connect -- */
2100static int sd_probe(struct usb_interface *intf,
2101 const struct usb_device_id *id)
2102{
2103 return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd),
2104 THIS_MODULE);
2105}
2106
2107static struct usb_driver sd_driver = {
2108 .name = MODULE_NAME,
2109 .id_table = device_table,
2110 .probe = sd_probe,
2111 .disconnect = gspca_disconnect,
2112#ifdef CONFIG_PM
2113 .suspend = gspca_suspend,
2114 .resume = gspca_resume,
2115#endif
2116};
2117
2118/* -- module insert / remove -- */
2119static int __init sd_mod_init(void)
2120{
2121 return usb_register(&sd_driver);
2122}
2123static void __exit sd_mod_exit(void)
2124{
2125 usb_deregister(&sd_driver);
2126}
2127
2128module_init(sd_mod_init);
2129module_exit(sd_mod_exit);
2130
2131module_param(webcam, int, 0644);
2132MODULE_PARM_DESC(webcam,
2133 "Webcam type\n"
2134 "0: generic\n"
2135 "1: Trust 120 SpaceCam\n"
2136 "2: other Trust 120 SpaceCam\n"
2137 "3: Conceptronic Video Pro\n"
2138 "4: D-link dru-350c\n"
2139 "5: Plustek Opticam 500U\n"
2140 "6: Panasonic GP-KR651US\n"
2141 "7: iRez Kritter\n"
2142 "8: Mustek Wcam 300 mini\n"
2143 "9: Scalar USB Microscope M2 (Proscope)\n"
2144 "10: Divio Chicony TwinkleCam\n"
94751d4b 2145 "11: DVC-V6\n");