Adding header file for Omnivision 7660 sensor symbols/registers.
[microdia.git] / microdia-dev.c
blob02aac9d669accd5099e3558187044330b5dd7ded
1 /**
2 * @file microdia-dev.c
3 * @author Nicolas VIVIEN
4 * @date 2008-02-01
5 * @version v0.0.0
7 * @brief Driver for Microdia USB video camera
9 * @note Copyright (C) Nicolas VIVIEN
11 * @par Licences
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
16 * any later version.
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the Free Software
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 #include <linux/errno.h>
29 #include <linux/string.h>
30 #include <stdarg.h>
32 #include "microdia.h"
33 #include "sn9c20x.h"
34 #include "ov7670.h"
35 #include "ov965x.h"
36 #include "mt9vx11.h"
37 #include "ov7660.h"
39 int dev_microdia_init_camera(struct usb_microdia *dev)
41 return 0;
44 int dev_microdia_camera_on(struct usb_microdia *dev)
46 int ret = -1;
47 struct usb_device *udev = dev->udev;
49 ret = usb_set_interface(udev, 0, 8);
51 if (ret < 0)
52 UDIA_ERROR("usb_set_interface failed !\n");
54 return ret;
57 int dev_microdia_camera_off(struct usb_microdia *dev)
59 int ret = -1;
60 struct usb_device *udev = dev->udev;
62 ret = usb_set_interface(udev, 0, 0);
64 if (ret < 0)
65 UDIA_ERROR("usb_set_interface failed !\n");
67 return 0;
70 int dev_microdia_camera_settings(struct usb_microdia *dev)
72 dev_microdia_camera_set_contrast(dev);
73 dev_microdia_camera_set_brightness(dev);
74 dev_microdia_camera_set_gamma(dev);
75 dev_microdia_camera_set_exposure(dev);
76 dev_microdia_camera_set_hvflip(dev);
77 dev_microdia_camera_set_sharpness(dev);
78 dev_microdia_camera_set_rgb_gain(dev);
79 dev_microdia_camera_set_auto_exposure(dev);
80 dev_microdia_camera_set_auto_whitebalance(dev);
81 return 0;
84 int dev_microdia_camera_set_contrast(struct usb_microdia *dev)
86 int ret = -ENODEV;
87 if(dev && dev->set_contrast)
88 ret = dev->set_contrast(dev);
89 return ret;
92 int dev_microdia_camera_set_brightness(struct usb_microdia *dev)
94 int ret = -ENODEV;
95 if(dev && dev->set_brightness)
96 ret = dev->set_brightness(dev);
97 return ret;
100 int dev_microdia_camera_set_gamma(struct usb_microdia *dev)
102 int ret = -ENODEV;
103 if(dev && dev->set_gamma)
104 ret = dev->set_gamma(dev);
105 return ret;
108 int dev_microdia_camera_set_exposure(struct usb_microdia *dev)
110 if (dev->set_exposure != NULL) {
111 return dev->set_exposure(dev);
113 return 0;
116 int dev_microdia_camera_set_hvflip(struct usb_microdia *dev)
118 int ret = -ENODEV;
119 if(dev && dev->set_hvflip)
120 ret = dev->set_hvflip(dev);
122 return ret;
125 int dev_microdia_camera_set_sharpness(struct usb_microdia *dev)
127 int ret = -ENODEV;
128 if(dev && dev->set_sharpness)
129 ret = dev->set_sharpness(dev);
131 return ret;
134 int dev_microdia_camera_set_rgb_gain(struct usb_microdia *dev)
136 int ret = -ENODEV;
137 if (dev && dev->set_rgb_gain)
138 ret = dev->set_rgb_gain(dev);
140 return ret;
143 int dev_microdia_camera_set_auto_exposure(struct usb_microdia *dev)
145 int ret = -ENODEV;
146 if(dev && dev->set_auto_exposure)
147 ret = dev->set_auto_exposure(dev);
149 return ret;
152 int dev_microdia_camera_set_auto_whitebalance(struct usb_microdia *dev)
154 int ret = -ENODEV;
155 if(dev && dev->set_auto_whitebalance)
156 ret = dev->set_auto_whitebalance(dev);
158 return ret;
162 /**
163 * @brief From UsbSnoop-plugin-parsed.log
165 * @param dev
167 * @returns
169 int dev_microdia_initialize_device(struct usb_microdia *dev)
171 int ret = -ENODEV;
173 if(dev && dev->initialize)
174 ret = dev->initialize(dev);
176 return ret;
180 * @brief From init-physical-replug.log
182 * @param dev
184 * @returns 0
186 * @author psnel
188 * For SN9C201 with MI1300.
191 int microdia_6240_initialize(struct usb_microdia *dev)
193 int ret = 0;
194 __u8 buf;
196 UDIA_INFO("Initializing camera...\n");
198 ret = usb_microdia_control_read(dev, 0x130d, &buf, 1); // URB 5 0x81
199 UDIA_INFO("...init: read %x, ret = %d\n",buf,ret);
201 ret += usb_microdia_control_read(dev, 0x1040, &buf, 1); // URB 6 0xe4
202 UDIA_INFO("...init: read %x, ret = %d\n",buf,ret);
204 buf=0x00;
205 ret += usb_microdia_control_write(dev, 0x10c8, &buf, 1); // URB 7
206 UDIA_INFO("...init: write %x, ret = %d\n",buf,ret);
208 // Interrupt going down (URB 8)
210 buf=0x80;
211 ret += usb_microdia_control_write(dev, 0x1020, &buf, 1); // URB 9
212 UDIA_INFO("...init: write %x, ret = %d\n",buf,ret);
214 if (ret < 4){
215 UDIA_ERROR("One ore more errors occured during initialization !\n");
216 return -1;
219 return 0;
223 * @brief From start.log (14 jun 2008)
225 * @param dev
227 * @returns 0
229 * @author psnel
231 * For SN9C201 with MI1300.
234 int microdia_6240_start_stream(struct usb_microdia *dev)
236 int ret = 0;
237 int i;
238 __u16 reg;
239 __u8 buf;
240 __u8 buf24[24];
241 __u8 buf64[64];
242 __u8 buf10e1[21] = {
243 0x16, 0x00, 0x2d, 0x00, 0x08, 0x00, 0xf1, 0x0f, 0xd3, 0x0f, 0x3c, 0x00, 0x36, 0x00, 0xce, 0x0f,
244 0xfc, 0x0f, 0x00, 0x00, 0x00};
245 __u8 buf1100[64] = {
246 0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d, 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
247 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d, 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
248 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a, 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
249 0x4f, 0x54, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60, 0x64, 0x5c, 0x54, 0x64, 0x4b, 0x54, 0x58, 0x54};
251 UDIA_INFO("Starting camera data stream...\n");
253 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
254 // URB 10 <<< GETTING SELECT_INTERFACE Interface: AlternateSetting = 8
255 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
256 reg = 0x1066;
257 buf = 0x00;
258 ret = usb_microdia_control_write(dev, reg, &buf, 1);// URB 12
259 if(ret < 0) goto err;
261 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
262 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
264 reg = 0x1007;
265 buf = 0x20;
266 ret = usb_microdia_control_write(dev, reg, &buf, 1);// URB 14
267 if(ret < 0) goto err;
268 reg = 0x1006;
269 buf = 0x00;
270 ret = usb_microdia_control_write(dev, reg, &buf, 1);
271 if(ret < 0) goto err;
272 reg = 0x1000;
273 buf = 0x78;
274 ret = usb_microdia_control_write(dev, reg, &buf, 1);
275 if(ret < 0) goto err;
277 reg = 0x1001;
278 ret = usb_microdia_control_read(dev, reg, &buf, 1); // cf
279 if(ret < 0) goto err;
281 reg = 0x1001;
282 buf = 0xc7;
283 ret = usb_microdia_control_write(dev, reg, &buf, 1);
284 if(ret < 0) goto err;
285 reg = 0x1002;
286 buf = 0x18;
287 ret = usb_microdia_control_write(dev, reg, &buf, 1);
288 if(ret < 0) goto err;
290 // URB 20
291 reg = 0x1007;
292 ret = usb_microdia_control_read(dev, reg, buf24, 7); // << 20 00 ff 81 00 00 00
293 if(ret < 0) goto err;
295 reg = 0x1006;
296 buf24[0] = 0x80; buf24[1] = 0xa0;
297 ret = usb_microdia_control_write(dev, reg, buf24, 2);
298 if(ret < 0) goto err;
299 reg = 0x1061;
300 buf = 0x01;
301 ret = usb_microdia_control_write(dev, reg, &buf, 1);
302 if(ret < 0) goto err;
303 reg = 0x1020;
304 buf = 0x80;
305 ret = usb_microdia_control_write(dev, reg, &buf, 1);
306 if(ret < 0) goto err;
307 reg = 0x1067;
308 buf24[0] = 0x40; buf24[1] = 0x30; buf24[2] = 0x20; buf24[3] = 0x10;
309 buf24[4] = 0x08;
310 ret = usb_microdia_control_write(dev, reg, buf24, 5);
311 if(ret < 0) goto err;
312 reg = 0x10c0;
313 buf24[0] = 0x80; buf24[1] = 0x5d; buf24[2] = 0x00; buf24[3] = 0x00;
314 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x00;
315 buf24[8] = 0x03;
316 ret = usb_microdia_control_write(dev, reg, buf24, 9);
317 if(ret < 0) goto err;
318 reg = 0x10e0;
319 buf24[0] = 0x45; buf24[1] = 0x18; buf24[2] = 0x00; buf24[3] = 0x30;
320 buf24[4] = 0x00; buf24[5] = 0x09; buf24[6] = 0x00; buf24[7] = 0xed;
321 buf24[8] = 0x0f; buf24[9] = 0xda; buf24[10] = 0x0f; buf24[11] = 0x3a;
322 buf24[12] = 0x00; buf24[13] = 0x3a; buf24[14] = 0x00; buf24[15] = 0xd0;
323 buf24[16] = 0x0f; buf24[17] = 0xf7; buf24[18] = 0x0f; buf24[19] = 0x00;
324 buf24[20] = 0x00; buf24[21] = 0x00; buf24[22] = 0x60; buf24[23] = 0x0a;
325 ret = usb_microdia_control_write(dev, reg, buf24, 24);
326 if(ret < 0) goto err;
327 reg = 0x10f8;
328 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x00;
329 ret = usb_microdia_control_write(dev, reg, buf24, 3);
330 if(ret < 0) goto err;
331 reg = 0x10fb;
332 buf24[0] = 0x00; buf24[1] = 0xa0; buf24[2] = 0x00; buf24[3] = 0xf0;
333 buf24[4] = 0x00;
334 ret = usb_microdia_control_write(dev, reg, buf24, 5);
335 if(ret < 0) goto err;
336 reg = 0x1188;
337 buf24[0] = 0x06; buf24[1] = 0x4c; buf24[2] = 0x08;
338 ret = usb_microdia_control_write(dev, reg, buf24, 3);
339 if(ret < 0) goto err;
341 // URB 30
342 reg = 0x118b;
343 buf24[0] = 0x00; buf24[1] = 0x20; buf24[2] = 0x20; buf24[3] = 0x20;
344 buf24[4] = 0x20; buf24[5] = 0x00; buf24[6] = 0x24; buf24[7] = 0x3b;
345 buf24[8] = 0x4f; buf24[9] = 0x61; buf24[10] = 0x71; buf24[11] = 0x80;
346 buf24[12] = 0x8f; buf24[13] = 0x9d; buf24[14] = 0xab; buf24[15] = 0xb8;
348 buf24[16] = 0xc4; buf24[17] = 0xd1; buf24[18] = 0xdd; buf24[19] = 0xe9;
349 buf24[20] = 0xf4; buf24[21] = 0xff;
350 ret = usb_microdia_control_write(dev, reg, buf24, 22);
351 if(ret < 0) goto err;
353 reg = 0x11a1;
354 buf24[0] = 0x00; buf24[1] = 0x00;
355 ret = usb_microdia_control_write(dev, reg, buf24, 2);
356 if(ret < 0) goto err;
358 reg = 0x11b7;
359 buf24[0] = 0x60; buf24[1] = 0x28; buf24[2] = 0x00; buf24[3] = 0x08;
360 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x00;
361 buf24[8] = 0x00;
362 ret = usb_microdia_control_write(dev, reg, buf24, 9);
363 if(ret < 0) goto err;
365 reg = 0x11b8;
366 buf = 0x38;
367 ret = usb_microdia_control_write(dev, reg, &buf, 1);
368 if(ret < 0) goto err;
370 reg = 0x1000;
371 buf = 0x78;
372 ret = usb_microdia_control_write(dev, reg, &buf, 1);
373 if(ret < 0) goto err;
376 reg = 0x10c0;
377 // URB 35..90 -->
378 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
379 buf24[4] = 0x02; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
380 ret = usb_microdia_control_write(dev, reg, buf24, 8);
381 if(ret < 0) goto err;
383 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
384 if(ret < 0) goto err;
385 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
386 if(ret < 0) goto err;
388 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x0d; buf24[3] = 0x00;
389 buf24[4] = 0x01; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
390 ret = usb_microdia_control_write(dev, reg, buf24, 8);
391 if(ret < 0) goto err;
393 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
394 if(ret < 0) goto err;
395 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
396 if(ret < 0) goto err;
398 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x0d; buf24[3] = 0x00;
399 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
400 ret = usb_microdia_control_write(dev, reg, buf24, 8);
401 if(ret < 0) goto err;
403 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
404 if(ret < 0) goto err;
405 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
406 if(ret < 0) goto err;
408 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x01; buf24[3] = 0x00;
409 buf24[4] = 0x0e; buf24[5] = 0x00; buf24[6] = 0x14; buf24[7] = 0x10;
410 ret = usb_microdia_control_write(dev, reg, buf24, 8);
411 if(ret < 0) goto err;
413 // URB 45
414 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
415 if(ret < 0) goto err;
416 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
417 if(ret < 0) goto err;
419 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x03; buf24[3] = 0x03;
420 buf24[4] = 0xc1; buf24[5] = 0x05; buf24[6] = 0x01; buf24[7] = 0x10;
421 ret = usb_microdia_control_write(dev, reg, buf24, 8);
422 if(ret < 0) goto err;
424 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
425 if(ret < 0) goto err;
426 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
427 if(ret < 0) goto err;
429 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x05; buf24[3] = 0x00;
430 buf24[4] = 0x83; buf24[5] = 0x00; buf24[6] = 0x06; buf24[7] = 0x10;
431 ret = usb_microdia_control_write(dev, reg, buf24, 8);
432 if(ret < 0) goto err;
434 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
435 if(ret < 0) goto err;
436 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
437 if(ret < 0) goto err;
439 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x0d; buf24[3] = 0x00;
440 buf24[4] = 0x02; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
441 ret = usb_microdia_control_write(dev, reg, buf24, 8);
442 if(ret < 0) goto err;
444 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
445 if(ret < 0) goto err;
446 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
447 if(ret < 0) goto err;
449 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x09; buf24[3] = 0x00;
450 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
451 ret = usb_microdia_control_write(dev, reg, buf24, 8);
452 if(ret < 0) goto err;
454 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
455 if(ret < 0) goto err;
456 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
457 if(ret < 0) goto err;
459 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x0b; buf24[3] = 0x00;
460 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
461 ret = usb_microdia_control_write(dev, reg, buf24, 8);
462 if(ret < 0) goto err;
464 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
465 if(ret < 0) goto err;
466 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
467 if(ret < 0) goto err;
469 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x11; buf24[3] = 0x00;
470 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
471 ret = usb_microdia_control_write(dev, reg, buf24, 8);
472 if(ret < 0) goto err;
474 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
475 if(ret < 0) goto err;
476 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
477 if(ret < 0) goto err;
479 // URB 65
480 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x1e; buf24[3] = 0x80;
481 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
482 ret = usb_microdia_control_write(dev, reg, buf24, 8);
483 if(ret < 0) goto err;
485 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
486 if(ret < 0) goto err;
487 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
488 if(ret < 0) goto err;
490 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x20; buf24[3] = 0x11;
491 buf24[4] = 0x05; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
492 ret = usb_microdia_control_write(dev, reg, buf24, 8);
493 if(ret < 0) goto err;
495 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
496 if(ret < 0) goto err;
497 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
498 if(ret < 0) goto err;
500 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x2b; buf24[3] = 0x00;
501 buf24[4] = 0x08; buf24[5] = 0x00; buf24[6] = 0x10; buf24[7] = 0x10;
502 ret = usb_microdia_control_write(dev, reg, buf24, 8);
503 if(ret < 0) goto err;
505 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
506 if(ret < 0) goto err;
507 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
508 if(ret < 0) goto err;
510 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x2d; buf24[3] = 0x00;
511 buf24[4] = 0x14; buf24[5] = 0x00; buf24[6] = 0x08; buf24[7] = 0x10;
512 ret = usb_microdia_control_write(dev, reg, buf24, 8);
513 if(ret < 0) goto err;
515 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
516 if(ret < 0) goto err;
517 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
518 if(ret < 0) goto err;
520 // URB 77
521 buf24[0] = 0x90; buf24[1] = 0x5d; buf24[2] = 0x33; buf24[3] = 0x00;
522 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
523 ret = usb_microdia_control_write(dev, reg, buf24, 8);
524 if(ret < 0) goto err;
526 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 94
527 if(ret < 0) goto err;
529 // URB 79
530 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x5f; buf24[3] = 0x89;
531 buf24[4] = 0x04; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
532 ret = usb_microdia_control_write(dev, reg, buf24, 8);
533 if(ret < 0) goto err;
535 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
536 if(ret < 0) goto err;
537 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
538 if(ret < 0) goto err;
540 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x60; buf24[3] = 0x00;
541 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
542 ret = usb_microdia_control_write(dev, reg, buf24, 8);
543 if(ret < 0) goto err;
545 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
546 if(ret < 0) goto err;
547 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
548 if(ret < 0) goto err;
550 // URB 85
551 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x62; buf24[3] = 0x04;
552 buf24[4] = 0x98; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
553 ret = usb_microdia_control_write(dev, reg, buf24, 8);
554 if(ret < 0) goto err;
556 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
557 if(ret < 0) goto err;
558 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
559 if(ret < 0) goto err;
561 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x68; buf24[3] = 0x00;
562 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
563 ret = usb_microdia_control_write(dev, reg, buf24, 8);
564 if(ret < 0) goto err;
566 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
567 if(ret < 0) goto err;
568 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
569 if(ret < 0) goto err;
571 // <-- 10c0
574 // URB 91
575 reg = 0x10c1;
576 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 5d
577 if(ret < 0) goto err;
578 buf = 0x50;
579 ret = usb_microdia_control_write(dev, reg, &buf, 1);
580 if(ret < 0) goto err;
582 // URB 93..108
583 reg = 0x10c0;
584 buf24[0] = 0x90; buf24[1] = 0x50; buf24[2] = 0x00; buf24[3] = 0x00;
585 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
586 for(i=93; i<=108; i++){
587 ret = usb_microdia_control_write(dev, reg, buf24, 8);
588 if(ret < 0) goto err;
589 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 9c
590 if(ret < 0) goto err;
592 ret = usb_microdia_control_write(dev, reg, buf24, 8);
593 if(ret < 0) goto err;
594 buf24[0] = 0x92; // change only 1st value
595 // URB 110..126
596 for(i=110; i<=126; i++){
597 ret = usb_microdia_control_write(dev, reg, buf24, 8);
598 if(ret < 0) goto err;
599 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 9e
600 if(ret < 0) goto err;
604 reg = 0x10c2;
605 ret = usb_microdia_control_read(dev, reg, buf24, 5); // << ff ff ff ff ff
606 if(ret < 0) goto err;
608 reg = 0x10c1;
609 buf = 0x5d;
610 ret = usb_microdia_control_write(dev, reg, &buf, 1);
611 if(ret < 0) goto err;
613 reg = 0x10e0;
614 buf = 0x47;
615 ret = usb_microdia_control_write(dev, reg, &buf, 1);
616 if(ret < 0) goto err;
617 buf = 0x07;
618 ret = usb_microdia_control_write(dev, reg, &buf, 1);
619 if(ret < 0) goto err;
621 reg = 0x1001;
622 buf = 0xc6;
623 ret = usb_microdia_control_write(dev, reg, &buf, 1);
624 if(ret < 0) goto err;
625 buf = 0xc4;
626 ret = usb_microdia_control_write(dev, reg, &buf, 1);
627 if(ret < 0) goto err;
628 buf = 0x44;
629 ret = usb_microdia_control_write(dev, reg, &buf, 1);
630 if(ret < 0) goto err;
632 reg = 0x1189;
633 buf = 0x0c;
634 ret = usb_microdia_control_write(dev, reg, &buf, 1);
635 if(ret < 0) goto err;
637 buf = 0x00;
638 // URB 135..138
639 reg = 0x11bc;
640 ret = usb_microdia_control_write(dev, reg, &buf, 1);
641 if(ret < 0) goto err;
642 reg = 0x11bd;
643 ret = usb_microdia_control_write(dev, reg, &buf, 1);
644 if(ret < 0) goto err;
645 reg = 0x11be;
646 ret = usb_microdia_control_write(dev, reg, &buf, 1);
647 if(ret < 0) goto err;
648 reg = 0x11bf;
649 ret = usb_microdia_control_write(dev, reg, &buf, 1);
650 if(ret < 0) goto err;
653 // URB 139
654 reg = 0x10c0;
655 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x20; buf24[3] = 0x11;
656 buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
657 ret = usb_microdia_control_write(dev, reg, buf24, 8);
658 if(ret < 0) goto err;
660 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
661 if(ret < 0) goto err;
662 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
663 if(ret < 0) goto err;
666 // URB 142
667 reg = 0x1180;
668 buf24[0] = 0x02; buf24[1] = 0x00; buf24[2] = 0x02; buf24[3] = 0x00;
669 buf24[4] = 0x28; buf24[5] = 0x3c;
670 ret = usb_microdia_control_write(dev, reg, buf24, 6);
671 if(ret < 0) goto err;
673 reg = 0x10fb;
674 buf24[0] = 0x00; buf24[1] = 0xa0; buf24[2] = 0x00; buf24[3] = 0xf0;
675 buf24[4] = 0x00;
676 ret = usb_microdia_control_write(dev, reg, buf24, 5);
677 if(ret < 0) goto err;
679 reg = 0x1189;
680 buf = 0x0c;
681 ret = usb_microdia_control_write(dev, reg, &buf, 1);
682 if(ret < 0) goto err;
684 reg = 0x11a1;
685 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x6a; buf24[3] = 0x50;
686 ret = usb_microdia_control_write(dev, reg, buf24, 4);
687 if(ret < 0) goto err;
689 reg = 0x11ab;
690 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x50; buf24[3] = 0x3c;
691 ret = usb_microdia_control_write(dev, reg, buf24, 4);
692 if(ret < 0) goto err;
694 reg = 0x1000;
695 buf = 0x7c;
696 ret = usb_microdia_control_write(dev, reg, &buf, 1);
697 if(ret < 0) goto err;
699 reg = 0x1002;
700 buf = 0x1c;
701 for(i=148; i<=149; i++){
702 ret = usb_microdia_control_write(dev, reg, &buf, 1);
703 if(ret < 0) goto err;
706 // URB 150
707 reg = 0x11b8;
708 buf = 0x38;
709 ret = usb_microdia_control_write(dev, reg, &buf, 1);
710 if(ret < 0) goto err;
712 reg = 0x118a;
713 buf = 0x05;
714 ret = usb_microdia_control_write(dev, reg, &buf, 1);
715 if(ret < 0) goto err;
717 reg = 0x0395;
718 buf = 0x05;
719 ret = usb_microdia_control_write(dev, reg, &buf, 1);
720 if(ret < 0) goto err;
723 reg = 0x11b8;
724 // URB 153..163
725 buf = 0x78;
726 ret = usb_microdia_control_write(dev, reg, &buf, 1);
727 if(ret < 0) goto err;
728 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 38
729 if(ret < 0) goto err;
730 buf = 0x79;
731 ret = usb_microdia_control_write(dev, reg, &buf, 1);
732 if(ret < 0) goto err;
733 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 39
734 if(ret < 0) goto err;
735 buf = 0x7a;
736 ret = usb_microdia_control_write(dev, reg, &buf, 1);
737 if(ret < 0) goto err;
738 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 3a
739 if(ret < 0) goto err;
740 buf = 0x7b;
741 ret = usb_microdia_control_write(dev, reg, &buf, 1);
742 if(ret < 0) goto err;
743 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << bb
744 if(ret < 0) goto err;
745 buf = 0xfc;
746 ret = usb_microdia_control_write(dev, reg, &buf, 1);
747 if(ret < 0) goto err;
748 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 3c
749 if(ret < 0) goto err;
750 buf = 0x78;
751 ret = usb_microdia_control_write(dev, reg, &buf, 1);
752 if(ret < 0) goto err;
754 // <-- 0x11b8
757 reg = 0x10c0;
758 // URB 164..169
759 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x06; buf24[3] = 0x00;
760 buf24[4] = 0xf2; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
761 ret = usb_microdia_control_write(dev, reg, buf24, 8);
762 if(ret < 0) goto err;
764 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
765 if(ret < 0) goto err;
766 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
767 if(ret < 0) goto err;
769 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x05; buf24[3] = 0x00;
770 buf24[4] = 0x13; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
771 ret = usb_microdia_control_write(dev, reg, buf24, 8);
772 if(ret < 0) goto err;
774 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
775 if(ret < 0) goto err;
776 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
777 if(ret < 0) goto err;
779 // <-- 0x10c0
782 reg = 0x11ba;
783 buf = 0x0a;
784 ret = usb_microdia_control_write(dev, reg, &buf, 1);
785 if(ret < 0) goto err;
787 buf = 0x00;
788 reg = 0x118c;
789 ret = usb_microdia_control_write(dev, reg, &buf, 1);
790 if(ret < 0) goto err;
791 reg = 0x118d;
792 ret = usb_microdia_control_write(dev, reg, &buf, 1);
793 if(ret < 0) goto err;
794 reg = 0x118e;
795 ret = usb_microdia_control_write(dev, reg, &buf, 1);
796 if(ret < 0) goto err;
797 reg = 0x118f;
798 ret = usb_microdia_control_write(dev, reg, &buf, 1);
799 if(ret < 0) goto err;
801 reg = 0x118b;
802 buf = 0x0a;
803 ret = usb_microdia_control_write(dev, reg, &buf, 1);
804 if(ret < 0) goto err;
807 // URB 176
808 reg = 0x1190;
809 buf24[0] = 0x08; buf24[1] = 0x2e; buf24[2] = 0x55; buf24[3] = 0x6f;
810 buf24[4] = 0x7f; buf24[5] = 0x8d; buf24[6] = 0x9a; buf24[7] = 0xa6;
811 buf24[8] = 0xb1; buf24[9] = 0xbb; buf24[10] = 0xc5; buf24[11] = 0xce;
812 buf24[12] = 0xd7; buf24[13] = 0xdf; buf24[14] = 0xe8; buf24[15] = 0xef;
813 buf24[16] = 0xf7;
814 ret = usb_microdia_control_write(dev, reg, buf24, 17);
815 if(ret < 0) goto err;
818 reg = 0x10e1;
819 // URB 177..185
820 for(i=0; i<21; i++) // zeroes
821 buf24[i] = 0x00;
822 for(i=177; i<=184; i++){
823 ret = usb_microdia_control_write(dev, reg, buf24, 21);
824 if(ret < 0) goto err;
826 // ..URB 185
827 ret = usb_microdia_control_write(dev, reg, buf10e1, 21);
828 if(ret < 0) goto err;
831 reg = 0x10f7;
832 buf = 0x07;
833 ret = usb_microdia_control_write(dev, reg, &buf, 1);
834 if(ret < 0) goto err;
835 reg = 0x10f6;
836 buf = 0x60;
837 ret = usb_microdia_control_write(dev, reg, &buf, 1);
838 if(ret < 0) goto err;
840 // URB 188
841 reg = 0x10e1;
842 ret = usb_microdia_control_write(dev, reg, buf10e1, 21);
843 if(ret < 0) goto err;
846 reg = 0x10f8;
847 buf = 0x14;
848 ret = usb_microdia_control_write(dev, reg, &buf, 1);
849 if(ret < 0) goto err;
850 reg = 0x10fa;
851 buf = 0xff;
852 ret = usb_microdia_control_write(dev, reg, &buf, 1);
853 if(ret < 0) goto err;
854 reg = 0x10f9;
855 buf = 0x00;
856 ret = usb_microdia_control_write(dev, reg, &buf, 1);
857 if(ret < 0) goto err;
858 reg = 0x10f9;
859 ret = usb_microdia_control_write(dev, reg, &buf, 1);
860 if(ret < 0) goto err;
862 reg = 0x11ba;
863 buf = 0x0a;
864 ret = usb_microdia_control_write(dev, reg, &buf, 1);
865 if(ret < 0) goto err;
867 reg = 0x11bc;
868 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x00; buf24[3] = 0x00;
869 ret = usb_microdia_control_write(dev, reg, buf24, 4);
870 if(ret < 0) goto err;
873 // URB 195
874 reg = 0x11c0;
875 for(i=0; i<48; i++) buf64[i] = 0; // zeroes
876 ret = usb_microdia_control_write(dev, reg, buf64, 48);
877 if(ret < 0) goto err;
880 buf = 0x20;
881 // URB 196..199
882 reg = 0x118c;
883 ret = usb_microdia_control_write(dev, reg, &buf, 1);
884 if(ret < 0) goto err;
885 reg = 0x118d;
886 ret = usb_microdia_control_write(dev, reg, &buf, 1);
887 if(ret < 0) goto err;
888 reg = 0x118e;
889 ret = usb_microdia_control_write(dev, reg, &buf, 1);
890 if(ret < 0) goto err;
891 reg = 0x118f;
892 ret = usb_microdia_control_write(dev, reg, &buf, 1);
893 if(ret < 0) goto err;
896 // URB 200
897 reg = 0x10c0;
898 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x20; buf24[3] = 0x11;
899 buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
900 ret = usb_microdia_control_write(dev, reg, buf24, 8);
901 if(ret < 0) goto err;
903 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
904 if(ret < 0) goto err;
905 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
906 if(ret < 0) goto err;
909 reg = 0x1180;
910 buf = 0x02;
911 ret = usb_microdia_control_write(dev, reg, &buf, 1);
912 if(ret < 0) goto err;
915 reg = 0x10c0;
916 // URB 204..206
917 //buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x20; buf24[3] = 0x11;
918 //buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
919 ret = usb_microdia_control_write(dev, reg, buf24, 8);
920 if(ret < 0) goto err;
922 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
923 if(ret < 0) goto err;
924 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
925 if(ret < 0) goto err;
928 reg = 0x1182;
929 buf = 0x02;
930 ret = usb_microdia_control_write(dev, reg, &buf, 1);
931 if(ret < 0) goto err;
934 reg = 0x10c0;
935 // URB 208..224
936 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x09; buf24[3] = 0x03;
937 buf24[4] = 0xe8; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
938 ret = usb_microdia_control_write(dev, reg, buf24, 8);
939 if(ret < 0) goto err;
941 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
942 if(ret < 0) goto err;
943 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
944 if(ret < 0) goto err;
946 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
947 buf24[4] = 0x03; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
948 ret = usb_microdia_control_write(dev, reg, buf24, 8);
949 if(ret < 0) goto err;
951 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
952 if(ret < 0) goto err;
953 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
954 if(ret < 0) goto err;
956 // URB 214
957 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x2b; buf24[3] = 0x00;
958 buf24[4] = 0x10; buf24[5] = 0x00; buf24[6] = 0x10; buf24[7] = 0x10;
959 ret = usb_microdia_control_write(dev, reg, buf24, 8);
960 if(ret < 0) goto err;
962 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
963 if(ret < 0) goto err;
964 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
965 if(ret < 0) goto err;
967 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x2d; buf24[3] = 0x00;
968 buf24[4] = 0x10; buf24[5] = 0x00; buf24[6] = 0x10; buf24[7] = 0x10;
969 ret = usb_microdia_control_write(dev, reg, buf24, 8);
970 if(ret < 0) goto err;
972 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
973 if(ret < 0) goto err;
974 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
975 if(ret < 0) goto err;
977 buf24[0] = 0x90; buf24[1] = 0x5d; buf24[2] = 0x33; buf24[3] = 0x00;
978 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
979 ret = usb_microdia_control_write(dev, reg, buf24, 8);
980 if(ret < 0) goto err;
982 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 94
983 if(ret < 0) goto err;
985 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
986 buf24[4] = 0x02; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
987 ret = usb_microdia_control_write(dev, reg, buf24, 8);
988 if(ret < 0) goto err;
990 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
991 if(ret < 0) goto err;
992 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
993 if(ret < 0) goto err;
996 buf = 0x20;
997 // URB 225..228
998 reg = 0x118c;
999 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1000 if(ret < 0) goto err;
1001 reg = 0x118d;
1002 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1003 if(ret < 0) goto err;
1004 reg = 0x118e;
1005 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1006 if(ret < 0) goto err;
1007 reg = 0x118f;
1008 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1009 if(ret < 0) goto err;
1012 reg = 0x11a5;
1013 buf24[0] = 0x2d; buf24[1] = 0x2d; buf24[2] = 0x3a; buf24[3] = 0x05;
1014 buf24[4] = 0x04; buf24[5] = 0x3f;
1015 ret = usb_microdia_control_write(dev, reg, buf24, 6);
1016 if(ret < 0) goto err;
1017 reg = 0x11af;
1018 buf24[0] = 0x28; buf24[1] = 0xd8; buf24[2] = 0x14; buf24[3] = 0xec;
1019 ret = usb_microdia_control_write(dev, reg, buf24, 4);
1020 if(ret < 0) goto err;
1021 reg = 0x11b3;
1022 buf24[0] = 0x32; buf24[1] = 0xdd; buf24[2] = 0x2d; buf24[3] = 0xdd;
1023 ret = usb_microdia_control_write(dev, reg, buf24, 4);
1024 if(ret < 0) goto err;
1027 reg = 0x10c0;
1028 // URB 232..242
1029 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
1030 buf24[4] = 0x03; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1031 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1032 if(ret < 0) goto err;
1034 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1035 if(ret < 0) goto err;
1036 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1037 if(ret < 0) goto err;
1039 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x2c; buf24[3] = 0x00;
1040 buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x1d; buf24[7] = 0x10;
1041 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1042 if(ret < 0) goto err;
1044 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
1045 if(ret < 0) goto err;
1046 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
1047 if(ret < 0) goto err;
1049 buf24[0] = 0x90; buf24[1] = 0x5d; buf24[2] = 0x30; buf24[3] = 0x00;
1050 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1051 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1052 if(ret < 0) goto err;
1054 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 94
1055 if(ret < 0) goto err;
1057 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
1058 buf24[4] = 0x02; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1059 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1060 if(ret < 0) goto err;
1062 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1063 if(ret < 0) goto err;
1064 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1065 if(ret < 0) goto err;
1068 reg = 0x118c;
1069 buf = 0x1f;
1070 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1071 if(ret < 0) goto err;
1072 reg = 0x118d;
1073 buf = 0x20;
1074 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1075 if(ret < 0) goto err;
1076 reg = 0x118e;
1077 buf = 0x20;
1078 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1079 if(ret < 0) goto err;
1080 reg = 0x118f;
1081 buf = 0x1f;
1082 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1083 if(ret < 0) goto err;
1085 reg = 0x10e0;
1086 buf = 0x07;
1087 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1088 if(ret < 0) goto err;
1089 buf = 0x27;
1090 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1091 if(ret < 0) goto err;
1094 // URB 249 (see also 509/510)
1095 reg = 0x1100;
1096 ret = usb_microdia_control_write(dev, reg, buf1100, 64);
1097 if(ret < 0) goto err;
1099 // URB 250
1100 reg = 0x1140;
1101 // 00000000:
1102 buf64[0] = 0x0d; buf64[1] = 0x11; buf64[2] = 0x11; buf64[3] = 0x15;
1103 buf64[4] = 0x11; buf64[5] = 0x15; buf64[6] = 0x26; buf64[7] = 0x15;
1104 buf64[8] = 0x15; buf64[9] = 0x26; buf64[10] = 0x54; buf64[11] = 0x36;
1105 buf64[12] = 0x2e; buf64[13] = 0x36; buf64[14] = 0x54; buf64[15] = 0x54;
1106 // 00000010: .. 00000030: 0x54
1107 for(i=16; i<=63; i++) buf64[i] = 0x54;
1108 ret = usb_microdia_control_write(dev, reg, buf64, 64);
1109 if(ret < 0) goto err;
1112 reg = 0x10e0;
1113 buf = 0x07;
1114 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1115 if(ret < 0) goto err;
1116 buf = 0x0b;
1117 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1118 if(ret < 0) goto err;
1120 reg = 0x1189;
1121 buf = 0x0c;
1122 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1123 if(ret < 0) goto err;
1126 buf = 0x00;
1127 // URB 254..257
1128 reg = 0x11bc;
1129 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1130 if(ret < 0) goto err;
1131 reg = 0x11bd;
1132 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1133 if(ret < 0) goto err;
1134 reg = 0x11be;
1135 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1136 if(ret < 0) goto err;
1137 reg = 0x11bf;
1138 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1139 if(ret < 0) goto err;
1142 reg = 0x1180;
1143 buf24[0] = 0x02; buf24[1] = 0x00; buf24[2] = 0x02; buf24[3] = 0x00;
1144 buf24[4] = 0x28; buf24[5] = 0x3c;
1145 ret = usb_microdia_control_write(dev, reg, buf24, 6);
1146 if(ret < 0) goto err;
1148 reg = 0x10fb;
1149 buf24[0] = 0x00; buf24[1] = 0xa0; buf24[2] = 0x00; buf24[3] = 0xf0;
1150 buf24[4] = 0x00;
1151 ret = usb_microdia_control_write(dev, reg, buf24, 5);
1152 if(ret < 0) goto err;
1154 reg = 0x1189;
1155 buf = 0x0c;
1156 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1157 if(ret < 0) goto err;
1159 reg = 0x11a1;
1160 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x6a; buf24[3] = 0x50;
1161 ret = usb_microdia_control_write(dev, reg, buf24, 4);
1162 if(ret < 0) goto err;
1163 reg = 0x11ab;
1164 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x50; buf24[3] = 0x3c;
1165 ret = usb_microdia_control_write(dev, reg, buf24, 4);
1166 if(ret < 0) goto err;
1168 reg = 0x1061;
1169 buf = 0x03;
1170 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1171 if(ret < 0) goto err;
1172 reg = 0x11ba;
1173 buf = 0x0a;
1174 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1175 if(ret < 0) goto err;
1176 reg = 0x11b9;
1177 buf = 0x00;
1178 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1179 if(ret < 0) goto err;
1180 reg = 0x11ba;
1181 buf = 0x0b;
1182 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1183 if(ret < 0) goto err;
1184 reg = 0x1061;
1185 buf = 0x01;
1186 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1187 if(ret < 0) goto err;
1188 reg = 0x1000;
1189 buf = 0x7c;
1190 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1191 if(ret < 0) goto err;
1192 reg = 0x1002;
1193 buf = 0x1c;
1194 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1195 if(ret < 0) goto err;
1196 buf = 0x1c;
1197 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1198 if(ret < 0) goto err;
1199 reg = 0x11b8;
1200 buf = 0x78;
1201 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1202 if(ret < 0) goto err;
1203 reg = 0x118a;
1204 buf = 0x05;
1205 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1206 if(ret < 0) goto err;
1207 reg = 0x0395;
1208 buf = 0x05;
1209 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1210 if(ret < 0) goto err;
1213 reg = 0x11b8;
1214 // URB 274..284
1215 buf = 0x78;
1216 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1217 if(ret < 0) goto err;
1218 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 38
1219 if(ret < 0) goto err;
1220 buf = 0x79;
1221 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1222 if(ret < 0) goto err;
1223 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 39
1224 if(ret < 0) goto err;
1225 buf = 0x7a;
1226 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1227 if(ret < 0) goto err;
1228 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 3a
1229 if(ret < 0) goto err;
1230 buf = 0x7b;
1231 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1232 if(ret < 0) goto err;
1233 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << bb
1234 if(ret < 0) goto err;
1235 buf = 0xfc;
1236 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1237 if(ret < 0) goto err;
1238 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 3c
1239 if(ret < 0) goto err;
1240 buf = 0x78;
1241 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1242 if(ret < 0) goto err;
1244 // <-- 0x11b8
1247 reg = 0x10c0;
1248 // URB 285..295
1249 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x06; buf24[3] = 0x00;
1250 buf24[4] = 0xf2; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1251 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1252 if(ret < 0) goto err;
1254 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1255 if(ret < 0) goto err;
1256 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1257 if(ret < 0) goto err;
1259 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x05; buf24[3] = 0x00;
1260 buf24[4] = 0x13; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1261 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1262 if(ret < 0) goto err;
1264 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1265 if(ret < 0) goto err;
1266 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1267 if(ret < 0) goto err;
1269 buf24[0] = 0x90; buf24[1] = 0x5d; buf24[2] = 0x00; buf24[3] = 0x00;
1270 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1271 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1272 if(ret < 0) goto err;
1274 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 94
1275 if(ret < 0) goto err;
1277 buf24[0] = 0xa2; buf24[1] = 0x5d; buf24[2] = 0x00; buf24[3] = 0x00;
1278 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1279 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1280 if(ret < 0) goto err;
1282 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << a2
1283 if(ret < 0) goto err;
1284 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << a6
1285 if(ret < 0) goto err;
1287 // <-- 0x10c0
1290 // URB 296
1291 reg = 0x10c2;
1292 ret = usb_microdia_control_read(dev, reg, buf24, 5); // << 00 00 00 84 31
1293 if(ret < 0) goto err;
1296 reg = 0x1061;
1297 buf = 0x03;
1298 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1299 if(ret < 0) goto err;
1300 buf = 0x01;
1301 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1302 if(ret < 0) goto err;
1305 reg = 0x10c0;
1306 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
1307 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1308 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1309 if(ret < 0) goto err;
1311 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1312 if(ret < 0) goto err;
1313 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1314 if(ret < 0) goto err;
1317 reg = 0x1000;
1318 buf = 0x3c;
1319 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1320 if(ret < 0) goto err;
1321 reg = 0x11b8;
1322 buf = 0x68;
1323 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1324 if(ret < 0) goto err;
1325 reg = 0x1007;
1326 buf = 0xa0;
1327 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1328 if(ret < 0) goto err;
1329 reg = 0x1006;
1330 buf = 0xa0;
1331 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1332 if(ret < 0) goto err;
1334 reg = 0x1000;
1335 buf24[0] = 0x98; buf24[1] = 0xef; buf24[2] = 0x11;
1336 ret = usb_microdia_control_write(dev, reg, buf24, 3);
1337 if(ret < 0) goto err;
1339 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1340 // URB 307 <<< GETTING SELECT_INTERFACE Interface: AlternateSetting = 0
1341 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1343 reg = 0x1066;
1344 buf = 0x00;
1345 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1346 if(ret < 0) goto err;
1348 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1349 // URB 310 <<< GETTING SELECT_INTERFACE Interface: AlternateSetting = 8
1350 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1352 // URB 312
1353 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1354 if(ret < 0) goto err;
1356 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1357 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1359 // URB 314
1360 reg = 0x1007;
1361 buf = 0xa0;
1362 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1363 if(ret < 0) goto err;
1364 reg = 0x1006;
1365 buf = 0x80;
1366 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1367 if(ret < 0) goto err;
1368 reg = 0x1000;
1369 buf = 0x78;
1370 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1371 if(ret < 0) goto err;
1372 reg = 0x1001;
1373 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << ef
1374 if(ret < 0) goto err;
1375 buf = 0xc7;
1376 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1377 if(ret < 0) goto err;
1378 reg = 0x1002;
1379 buf = 0x18;
1380 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1381 if(ret < 0) goto err;
1383 // URB 320
1384 reg = 0x1007;
1385 ret = usb_microdia_control_read(dev, reg, buf24, 7); // << a0 00 ff 81 00 00 00
1386 if(ret < 0) goto err;
1387 reg = 0x1006;
1388 buf24[0] = 0x80; buf24[1] = 0xa0;
1389 ret = usb_microdia_control_write(dev, reg, buf24, 2);
1390 if(ret < 0) goto err;
1392 reg = 0x1061;
1393 buf = 0x01;
1394 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1395 if(ret < 0) goto err;
1396 reg = 0x1020;
1397 buf = 0x80;
1398 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1399 if(ret < 0) goto err;
1401 reg = 0x1067;
1402 buf24[0] = 0x40; buf24[1] = 0x30; buf24[2] = 0x20; buf24[3] = 0x10;
1403 buf24[4] = 0x08;
1404 ret = usb_microdia_control_write(dev, reg, buf24, 5);
1405 if(ret < 0) goto err;
1407 reg = 0x10c0;
1408 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
1409 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1410 buf24[8] = 0x03;
1411 ret = usb_microdia_control_write(dev, reg, buf24, 9);
1412 if(ret < 0) goto err;
1414 // URB 326
1415 reg = 0x10e0;
1416 // 00000000:
1417 buf24[0] = 0x45; buf24[1] = 0x18; buf24[2] = 0x00; buf24[3] = 0x30;
1418 buf24[4] = 0x00; buf24[5] = 0x09; buf24[6] = 0x00; buf24[7] = 0xed;
1419 buf24[8] = 0x0f; buf24[9] = 0xda; buf24[10] = 0x0f; buf24[11] = 0x3a;
1420 buf24[12] = 0x00; buf24[13] = 0x3a; buf24[14] = 0x00; buf24[15] = 0xd0;
1421 // 00000010:
1422 buf24[16] = 0x0f; buf24[17] = 0xf7; buf24[18] = 0x0f; buf24[19] = 0x10;
1423 buf24[20] = 0x00; buf24[21] = 0x00; buf24[22] = 0x60; buf24[23] = 0x0a;
1424 ret = usb_microdia_control_write(dev, reg, buf24, 24);
1425 if(ret < 0) goto err;
1427 reg = 0x10f8;
1428 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x00;
1429 ret = usb_microdia_control_write(dev, reg, buf24, 3);
1430 if(ret < 0) goto err;
1432 reg = 0x10fb;
1433 buf24[0] = 0x00; buf24[1] = 0xa0; buf24[2] = 0x00; buf24[3] = 0xf0;
1434 buf24[4] = 0x00;
1435 ret = usb_microdia_control_write(dev, reg, buf24, 5);
1436 if(ret < 0) goto err;
1438 reg = 0x1188;
1439 buf24[0] = 0x06; buf24[1] = 0x4c; buf24[2] = 0x08;
1440 ret = usb_microdia_control_write(dev, reg, buf24, 3);
1441 if(ret < 0) goto err;
1443 // URB 330
1444 reg = 0x118b;
1445 // 00000000:
1446 buf24[0] = 0x00; buf24[1] = 0x20; buf24[2] = 0x20; buf24[3] = 0x20;
1447 buf24[4] = 0x20; buf24[5] = 0x00; buf24[6] = 0x24; buf24[7] = 0x3b;
1448 buf24[8] = 0x4f; buf24[9] = 0x61; buf24[10] = 0x71; buf24[11] = 0x80;
1449 buf24[12] = 0x8f; buf24[13] = 0x9d; buf24[14] = 0xab; buf24[15] = 0xb8;
1450 // 00000010:
1451 buf24[16] = 0xc4; buf24[17] = 0xd1; buf24[18] = 0xdd; buf24[19] = 0xe9;
1452 buf24[20] = 0xf4; buf24[21] = 0xff;
1453 ret = usb_microdia_control_write(dev, reg, buf24, 22);
1454 if(ret < 0) goto err;
1456 reg = 0x11a1;
1457 buf24[0] = 0x00; buf24[1] = 0x00;
1458 ret = usb_microdia_control_write(dev, reg, buf24, 2);
1459 if(ret < 0) goto err;
1461 reg = 0x11b7;
1462 buf24[0] = 0x60; buf24[1] = 0x28; buf24[2] = 0x00; buf24[3] = 0x08;
1463 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x00;
1464 buf24[8] = 0x00;
1465 ret = usb_microdia_control_write(dev, reg, buf24, 9);
1466 if(ret < 0) goto err;
1468 reg = 0x11b8;
1469 buf = 0x38;
1470 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1471 if(ret < 0) goto err;
1472 reg = 0x1000;
1473 buf = 0x78;
1474 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1475 if(ret < 0) goto err;
1478 reg = 0x10c0;
1479 // URB 335..390
1480 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
1481 buf24[4] = 0x02; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1482 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1483 if(ret < 0) goto err;
1485 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1486 if(ret < 0) goto err;
1487 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1488 if(ret < 0) goto err;
1490 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x0d; buf24[3] = 0x00;
1491 buf24[4] = 0x01; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1492 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1493 if(ret < 0) goto err;
1495 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1496 if(ret < 0) goto err;
1497 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1498 if(ret < 0) goto err;
1500 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x0d; buf24[3] = 0x00;
1501 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1502 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1503 if(ret < 0) goto err;
1505 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1506 if(ret < 0) goto err;
1507 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1508 if(ret < 0) goto err;
1510 // ..URB 344
1511 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x01; buf24[3] = 0x00;
1512 buf24[4] = 0x0e; buf24[5] = 0x00; buf24[6] = 0x14; buf24[7] = 0x10;
1513 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1514 if(ret < 0) goto err;
1516 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
1517 if(ret < 0) goto err;
1518 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
1519 if(ret < 0) goto err;
1521 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x03; buf24[3] = 0x03;
1522 buf24[4] = 0xc1; buf24[5] = 0x05; buf24[6] = 0x01; buf24[7] = 0x10;
1523 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1524 if(ret < 0) goto err;
1526 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
1527 if(ret < 0) goto err;
1528 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
1529 if(ret < 0) goto err;
1531 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x05; buf24[3] = 0x00;
1532 buf24[4] = 0x83; buf24[5] = 0x00; buf24[6] = 0x06; buf24[7] = 0x10;
1533 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1534 if(ret < 0) goto err;
1536 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
1537 if(ret < 0) goto err;
1538 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
1539 if(ret < 0) goto err;
1541 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x0d; buf24[3] = 0x00;
1542 buf24[4] = 0x02; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1543 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1544 if(ret < 0) goto err;
1546 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1547 if(ret < 0) goto err;
1548 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1549 if(ret < 0) goto err;
1551 // ..URB 356
1552 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x09; buf24[3] = 0x00;
1553 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1554 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1555 if(ret < 0) goto err;
1557 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
1558 if(ret < 0) goto err;
1559 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
1560 if(ret < 0) goto err;
1562 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x0b; buf24[3] = 0x00;
1563 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1564 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1565 if(ret < 0) goto err;
1567 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
1568 if(ret < 0) goto err;
1569 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
1570 if(ret < 0) goto err;
1572 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x11; buf24[3] = 0x00;
1573 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1574 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1575 if(ret < 0) goto err;
1577 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1578 if(ret < 0) goto err;
1579 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1580 if(ret < 0) goto err;
1582 // ..URB 365
1583 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x1e; buf24[3] = 0x80;
1584 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1585 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1586 if(ret < 0) goto err;
1588 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1589 if(ret < 0) goto err;
1590 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1591 if(ret < 0) goto err;
1593 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x20; buf24[3] = 0x11;
1594 buf24[4] = 0x05; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1595 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1596 if(ret < 0) goto err;
1598 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1599 if(ret < 0) goto err;
1600 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1601 if(ret < 0) goto err;
1603 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x2b; buf24[3] = 0x00;
1604 buf24[4] = 0x08; buf24[5] = 0x00; buf24[6] = 0x10; buf24[7] = 0x10;
1605 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1606 if(ret < 0) goto err;
1608 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
1609 if(ret < 0) goto err;
1610 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
1611 if(ret < 0) goto err;
1613 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x2d; buf24[3] = 0x00;
1614 buf24[4] = 0x14; buf24[5] = 0x00; buf24[6] = 0x08; buf24[7] = 0x10;
1615 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1616 if(ret < 0) goto err;
1618 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
1619 if(ret < 0) goto err;
1620 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
1621 if(ret < 0) goto err;
1623 // ..URB 377
1624 buf24[0] = 0x90; buf24[1] = 0x5d; buf24[2] = 0x33; buf24[3] = 0x00;
1625 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1626 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1627 if(ret < 0) goto err;
1629 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 94
1630 if(ret < 0) goto err;
1632 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x5f; buf24[3] = 0x89;
1633 buf24[4] = 0x04; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1634 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1635 if(ret < 0) goto err;
1637 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1638 if(ret < 0) goto err;
1639 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1640 if(ret < 0) goto err;
1642 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x60; buf24[3] = 0x00;
1643 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1644 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1645 if(ret < 0) goto err;
1647 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
1648 if(ret < 0) goto err;
1649 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
1650 if(ret < 0) goto err;
1652 // ..URB 385
1653 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x62; buf24[3] = 0x04;
1654 buf24[4] = 0x98; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1655 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1656 if(ret < 0) goto err;
1658 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
1659 if(ret < 0) goto err;
1660 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
1661 if(ret < 0) goto err;
1663 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x68; buf24[3] = 0x00;
1664 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1665 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1666 if(ret < 0) goto err;
1668 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1669 if(ret < 0) goto err;
1670 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1671 if(ret < 0) goto err;
1673 // <-- 0x10c0
1676 // URB 391
1677 reg = 0x10e0;
1678 buf = 0x47;
1679 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1680 if(ret < 0) goto err;
1681 buf = 0x07;
1682 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1683 if(ret < 0) goto err;
1685 reg = 0x1001;
1686 buf = 0xc6;
1687 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1688 if(ret < 0) goto err;
1689 buf = 0xc4;
1690 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1691 if(ret < 0) goto err;
1692 buf = 0x44;
1693 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1694 if(ret < 0) goto err;
1696 reg = 0x1189;
1697 buf = 0x0c;
1698 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1699 if(ret < 0) goto err;
1702 buf = 0x00;
1703 // URB 397..400
1704 reg = 0x11bc;
1705 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1706 if(ret < 0) goto err;
1707 reg = 0x11bd;
1708 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1709 if(ret < 0) goto err;
1710 reg = 0x11be;
1711 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1712 if(ret < 0) goto err;
1713 reg = 0x11bf;
1714 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1715 if(ret < 0) goto err;
1718 // URB 401
1719 reg = 0x10c0;
1720 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x20; buf24[3] = 0x11;
1721 buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1722 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1723 if(ret < 0) goto err;
1725 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1726 if(ret < 0) goto err;
1727 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1728 if(ret < 0) goto err;
1731 reg = 0x1180;
1732 buf24[0] = 0x02; buf24[1] = 0x00; buf24[2] = 0x02; buf24[3] = 0x00;
1733 buf24[4] = 0x28; buf24[5] = 0x3c;
1734 ret = usb_microdia_control_write(dev, reg, buf24, 6);
1735 if(ret < 0) goto err;
1736 reg = 0x10fb;
1737 buf24[0] = 0x00; buf24[1] = 0xa0; buf24[2] = 0x00; buf24[3] = 0xf0;
1738 buf24[4] = 0x00;
1739 ret = usb_microdia_control_write(dev, reg, buf24, 5);
1740 if(ret < 0) goto err;
1743 reg = 0x1189;
1744 buf = 0x0c;
1745 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1746 if(ret < 0) goto err;
1748 reg = 0x11a1;
1749 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x6a; buf24[3] = 0x50;
1750 ret = usb_microdia_control_write(dev, reg, buf24, 4);
1751 if(ret < 0) goto err;
1752 reg = 0x11ab;
1753 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x50; buf24[3] = 0x3c;
1754 ret = usb_microdia_control_write(dev, reg, buf24, 4);
1755 if(ret < 0) goto err;
1757 reg = 0x1000;
1758 buf = 0x7c;
1759 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1760 if(ret < 0) goto err;
1762 reg = 0x1002;
1763 buf = 0x1c;
1764 for(i=410; i<=411; i++){
1765 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1766 if(ret < 0) goto err;
1769 reg = 0x11b8;
1770 buf = 0x38;
1771 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1772 if(ret < 0) goto err;
1773 reg = 0x118a;
1774 buf = 0x05;
1775 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1776 if(ret < 0) goto err;
1777 reg = 0x0395;
1778 buf = 0x05;
1779 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1780 if(ret < 0) goto err;
1783 reg = 0x11b8;
1784 // URB 415..425
1785 buf = 0x78;
1786 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1787 if(ret < 0) goto err;
1788 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 38
1789 if(ret < 0) goto err;
1790 buf = 0x79;
1791 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1792 if(ret < 0) goto err;
1793 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 39
1794 if(ret < 0) goto err;
1795 buf = 0x7a;
1796 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1797 if(ret < 0) goto err;
1798 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 3a
1799 if(ret < 0) goto err;
1800 buf = 0x7b;
1801 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1802 if(ret < 0) goto err;
1803 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << bb
1804 if(ret < 0) goto err;
1805 buf = 0xfc;
1806 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1807 if(ret < 0) goto err;
1808 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 3c
1809 if(ret < 0) goto err;
1810 buf = 0x78;
1811 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1812 if(ret < 0) goto err;
1814 // <-- 0x11b8
1817 reg = 0x10c0;
1818 // URB 426..431
1819 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x06; buf24[3] = 0x00;
1820 buf24[4] = 0xf2; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1821 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1822 if(ret < 0) goto err;
1824 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1825 if(ret < 0) goto err;
1826 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1827 if(ret < 0) goto err;
1829 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x05; buf24[3] = 0x00;
1830 buf24[4] = 0x13; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1831 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1832 if(ret < 0) goto err;
1834 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1835 if(ret < 0) goto err;
1836 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1837 if(ret < 0) goto err;
1839 // <-- 0x10c0
1842 reg = 0x11ba;
1843 buf = 0x0a;
1844 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1845 if(ret < 0) goto err;
1846 reg = 0x118c;
1847 buf = 0x1f;
1848 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1849 if(ret < 0) goto err;
1850 reg = 0x118d;
1851 buf = 0x20;
1852 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1853 if(ret < 0) goto err;
1854 reg = 0x118e;
1855 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1856 if(ret < 0) goto err;
1857 reg = 0x118f;
1858 buf = 0x1f;
1859 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1860 if(ret < 0) goto err;
1861 reg = 0x118b;
1862 buf = 0x0a;
1863 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1864 if(ret < 0) goto err;
1867 // URB 438
1868 reg = 0x1190;
1869 buf24[0] = 0x08; buf24[1] = 0x2e; buf24[2] = 0x55; buf24[3] = 0x6f;
1870 buf24[4] = 0x7f; buf24[5] = 0x8d; buf24[6] = 0x9a; buf24[7] = 0xa6;
1871 buf24[8] = 0xb1; buf24[9] = 0xbb; buf24[10] = 0xc5; buf24[11] = 0xce;
1872 buf24[12] = 0xd7; buf24[13] = 0xdf; buf24[14] = 0xe8; buf24[15] = 0xef;
1873 buf24[16] = 0xf7;
1874 ret = usb_microdia_control_write(dev, reg, buf24, 17);
1875 if(ret < 0) goto err;
1878 reg = 0x10e1;
1879 // URB 439..447
1880 for(i=439; i<=447; i++){
1881 ret = usb_microdia_control_write(dev, reg, buf10e1, 21);
1882 if(ret < 0) goto err;
1886 reg = 0x10f7;
1887 buf = 0x07;
1888 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1889 if(ret < 0) goto err;
1890 reg = 0x10f6;
1891 buf = 0x60;
1892 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1893 if(ret < 0) goto err;
1896 // URB 450
1897 reg = 0x10e1;
1898 ret = usb_microdia_control_write(dev, reg, buf10e1, 21);
1899 if(ret < 0) goto err;
1902 reg = 0x10f8;
1903 buf = 0x14;
1904 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1905 if(ret < 0) goto err;
1906 reg = 0x10fa;
1907 buf = 0xff;
1908 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1909 if(ret < 0) goto err;
1911 reg = 0x10f9;
1912 buf = 0x00;
1913 for(i=453; i<454; i++){
1914 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1915 if(ret < 0) goto err;
1918 reg = 0x11ba;
1919 buf = 0x0a;
1920 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1921 if(ret < 0) goto err;
1923 reg = 0x11bc;
1924 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x00; buf24[3] = 0x00;
1925 ret = usb_microdia_control_write(dev, reg, buf24, 4);
1926 if(ret < 0) goto err;
1929 // URB 457
1930 reg = 0x11c0;
1931 for(i=0; i<48; i++) buf64[i] = 0; // zeroes
1932 ret = usb_microdia_control_write(dev, reg, buf64, 48);
1933 if(ret < 0) goto err;
1936 buf = 0x20;
1937 // URB 458..461
1938 reg = 0x118c;
1939 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1940 if(ret < 0) goto err;
1941 reg = 0x118d;
1942 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1943 if(ret < 0) goto err;
1944 reg = 0x118e;
1945 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1946 if(ret < 0) goto err;
1947 reg = 0x118f;
1948 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1949 if(ret < 0) goto err;
1952 // URB 462
1953 reg = 0x10c0;
1954 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x20; buf24[3] = 0x11;
1955 buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1956 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1957 if(ret < 0) goto err;
1959 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1960 if(ret < 0) goto err;
1961 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1962 if(ret < 0) goto err;
1965 reg = 0x1180;
1966 buf = 0x02;
1967 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1968 if(ret < 0) goto err;
1971 // URB 466
1972 reg = 0x10c0;
1973 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x20; buf24[3] = 0x11;
1974 buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1975 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1976 if(ret < 0) goto err;
1978 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1979 if(ret < 0) goto err;
1980 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1981 if(ret < 0) goto err;
1984 reg = 0x1182;
1985 buf = 0x02;
1986 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1987 if(ret < 0) goto err;
1990 reg = 0x10c0;
1991 // URB 470..483
1992 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
1993 buf24[4] = 0x03; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1994 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1995 if(ret < 0) goto err;
1997 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
1998 if(ret < 0) goto err;
1999 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
2000 if(ret < 0) goto err;
2002 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x2b; buf24[3] = 0x00;
2003 buf24[4] = 0x10; buf24[5] = 0x00; buf24[6] = 0x10; buf24[7] = 0x10;
2004 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2005 if(ret < 0) goto err;
2007 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
2008 if(ret < 0) goto err;
2009 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
2010 if(ret < 0) goto err;
2012 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x2d; buf24[3] = 0x00;
2013 buf24[4] = 0x10; buf24[5] = 0x00; buf24[6] = 0x10; buf24[7] = 0x10;
2014 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2015 if(ret < 0) goto err;
2017 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d0
2018 if(ret < 0) goto err;
2019 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
2020 if(ret < 0) goto err;
2022 // ..URB 479
2023 buf24[0] = 0x90; buf24[1] = 0x5d; buf24[2] = 0x33; buf24[3] = 0x00;
2024 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2025 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2026 if(ret < 0) goto err;
2028 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 94
2029 if(ret < 0) goto err;
2031 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
2032 buf24[4] = 0x02; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2033 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2034 if(ret < 0) goto err;
2036 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
2037 if(ret < 0) goto err;
2038 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
2039 if(ret < 0) goto err;
2041 // <-- 0x10c0
2044 buf = 0x20;
2045 // URB 484..487
2046 reg = 0x118c;
2047 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2048 if(ret < 0) goto err;
2049 reg = 0x118d;
2050 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2051 if(ret < 0) goto err;
2052 reg = 0x118e;
2053 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2054 if(ret < 0) goto err;
2055 reg = 0x118f;
2056 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2057 if(ret < 0) goto err;
2060 reg = 0x11a5;
2061 buf24[0] = 0x2d; buf24[1] = 0x2d; buf24[2] = 0x3a; buf24[3] = 0x05;
2062 buf24[4] = 0x04; buf24[5] = 0x3f;
2063 ret = usb_microdia_control_write(dev, reg, buf24, 6);
2064 if(ret < 0) goto err;
2065 reg = 0x11af;
2066 buf24[0] = 0x28; buf24[1] = 0xd8; buf24[2] = 0x14; buf24[3] = 0xec;
2067 ret = usb_microdia_control_write(dev, reg, buf24, 4);
2068 if(ret < 0) goto err;
2069 reg = 0x11b3;
2070 buf24[0] = 0x32; buf24[1] = 0xdd; buf24[2] = 0x2d; buf24[3] = 0xdd;
2071 ret = usb_microdia_control_write(dev, reg, buf24, 4);
2072 if(ret < 0) goto err;
2075 reg = 0x10c0;
2076 // URB 491..502
2077 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
2078 buf24[4] = 0x03; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2079 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2080 if(ret < 0) goto err;
2082 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
2083 if(ret < 0) goto err;
2084 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
2085 if(ret < 0) goto err;
2087 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x2c; buf24[3] = 0x00;
2088 buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x1d; buf24[7] = 0x10;
2089 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2090 if(ret < 0) goto err;
2092 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 495: d0
2093 if(ret < 0) goto err;
2094 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 496: d0
2095 if(ret < 0) goto err;
2096 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
2097 if(ret < 0) goto err;
2099 buf24[0] = 0x90; buf24[1] = 0x5d; buf24[2] = 0x30; buf24[3] = 0x00;
2100 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2101 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2102 if(ret < 0) goto err;
2104 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 94
2105 if(ret < 0) goto err;
2107 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
2108 buf24[4] = 0x02; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2109 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2110 if(ret < 0) goto err;
2112 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
2113 if(ret < 0) goto err;
2114 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
2115 if(ret < 0) goto err;
2117 // <-- 0x10c0
2120 reg = 0x118c;
2121 buf = 0x1f;
2122 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2123 if(ret < 0) goto err;
2124 reg = 0x118d;
2125 buf = 0x20;
2126 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2127 if(ret < 0) goto err;
2128 reg = 0x118e;
2129 buf = 0x20;
2130 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2131 if(ret < 0) goto err;
2132 reg = 0x118f;
2133 buf = 0x1f;
2134 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2135 if(ret < 0) goto err;
2137 reg = 0x10e0;
2138 buf = 0x07;
2139 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2140 if(ret < 0) goto err;
2141 buf = 0x27;
2142 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2143 if(ret < 0) goto err;
2146 // URB 509 (see also 249/250)
2147 reg = 0x1100;
2148 ret = usb_microdia_control_write(dev, reg, buf1100, 64);
2149 if(ret < 0) goto err;
2151 // URB 510
2152 reg = 0x1140;
2153 // 00000000:
2154 buf64[0] = 0x0d; buf64[1] = 0x11; buf64[2] = 0x11; buf64[3] = 0x15;
2155 buf64[4] = 0x11; buf64[5] = 0x15; buf64[6] = 0x26; buf64[7] = 0x15;
2156 buf64[8] = 0x15; buf64[9] = 0x26; buf64[10] = 0x54; buf64[11] = 0x36;
2157 buf64[12] = 0x2e; buf64[13] = 0x36; buf64[14] = 0x54; buf64[15] = 0x54;
2158 // 00000010: .. 00000030: 0x54
2159 for(i=16; i<=63; i++) buf64[i] = 0x54;
2160 ret = usb_microdia_control_write(dev, reg, buf64, 64);
2161 if(ret < 0) goto err;
2164 reg = 0x10e0;
2165 buf = 0x07;
2166 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2167 if(ret < 0) goto err;
2168 buf = 0x0b;
2169 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2170 if(ret < 0) goto err;
2172 reg = 0x1189;
2173 buf = 0x0c;
2174 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2175 if(ret < 0) goto err;
2177 buf = 0x00;
2178 // URB 514..517
2179 reg = 0x11bc;
2180 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2181 if(ret < 0) goto err;
2182 reg = 0x11bd;
2183 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2184 if(ret < 0) goto err;
2185 reg = 0x11be;
2186 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2187 if(ret < 0) goto err;
2188 reg = 0x11bf;
2189 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2190 if(ret < 0) goto err;
2193 reg = 0x1180;
2194 buf24[0] = 0x02; buf24[1] = 0x00; buf24[2] = 0x02; buf24[3] = 0x00;
2195 buf24[4] = 0x28; buf24[5] = 0x3c;
2196 ret = usb_microdia_control_write(dev, reg, buf24, 6);
2198 reg = 0x10fb;
2199 buf24[0] = 0x00; buf24[1] = 0xa0; buf24[2] = 0x00; buf24[3] = 0xf0;
2200 buf24[4] = 0x00;
2201 ret = usb_microdia_control_write(dev, reg, buf24, 5);
2204 reg = 0x1189;
2205 buf = 0x0c;
2206 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2207 if(ret < 0) goto err;
2209 reg = 0x11a1;
2210 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x6a; buf24[3] = 0x50;
2211 ret = usb_microdia_control_write(dev, reg, buf24, 4);
2213 reg = 0x11ab;
2214 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x50; buf24[3] = 0x3c;
2215 ret = usb_microdia_control_write(dev, reg, buf24, 4);
2217 reg = 0x1061;
2218 buf = 0x03;
2219 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2220 if(ret < 0) goto err;
2221 reg = 0x11ba;
2222 buf = 0x0a;
2223 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2224 if(ret < 0) goto err;
2225 reg = 0x11b9;
2226 buf = 0x00;
2227 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2228 if(ret < 0) goto err;
2229 reg = 0x11ba;
2230 buf = 0x0b;
2231 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2232 if(ret < 0) goto err;
2233 reg = 0x1061;
2234 buf = 0x01;
2235 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2236 if(ret < 0) goto err;
2237 reg = 0x1000;
2238 buf = 0x7c;
2239 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2240 if(ret < 0) goto err;
2243 reg = 0x1002;
2244 buf = 0x1c;
2245 for(i=529; i<=530; i++){
2246 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2247 if(ret < 0) goto err;
2251 reg = 0x11b8;
2252 buf = 0x78;
2253 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2254 if(ret < 0) goto err;
2255 reg = 0x118a;
2256 buf = 0x05;
2257 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2258 if(ret < 0) goto err;
2259 reg = 0x0395;
2260 buf = 0x05;
2261 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2262 if(ret < 0) goto err;
2265 reg = 0x11b8;
2266 // URB 534..544
2267 buf = 0x78;
2268 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2269 if(ret < 0) goto err;
2270 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 38
2271 if(ret < 0) goto err;
2272 buf = 0x79;
2273 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2274 if(ret < 0) goto err;
2275 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 39
2276 if(ret < 0) goto err;
2277 buf = 0x7a;
2278 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2279 if(ret < 0) goto err;
2280 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 3a
2281 if(ret < 0) goto err;
2282 buf = 0x7b;
2283 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2284 if(ret < 0) goto err;
2285 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << bb
2286 if(ret < 0) goto err;
2287 buf = 0xfc;
2288 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2289 if(ret < 0) goto err;
2290 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 3c
2291 if(ret < 0) goto err;
2292 buf = 0x78;
2293 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2294 if(ret < 0) goto err;
2296 // <-- 0x11b8
2299 reg = 0x10c0;
2300 // URB 545..555
2301 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x06; buf24[3] = 0x00;
2302 buf24[4] = 0xf2; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2303 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2304 if(ret < 0) goto err;
2306 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
2307 if(ret < 0) goto err;
2308 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
2309 if(ret < 0) goto err;
2311 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x05; buf24[3] = 0x00;
2312 buf24[4] = 0x13; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2313 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2314 if(ret < 0) goto err;
2316 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b0
2317 if(ret < 0) goto err;
2318 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
2319 if(ret < 0) goto err;
2321 buf24[0] = 0x90; buf24[1] = 0x5d; buf24[2] = 0x00; buf24[3] = 0x00;
2322 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2323 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2324 if(ret < 0) goto err;
2326 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 94
2327 if(ret < 0) goto err;
2329 buf24[0] = 0xa2; buf24[1] = 0x5d; buf24[2] = 0x00; buf24[3] = 0x00;
2330 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2331 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2332 if(ret < 0) goto err;
2334 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << a2
2335 if(ret < 0) goto err;
2336 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << a6
2337 if(ret < 0) goto err;
2339 // <-- 0x10c0
2342 reg = 0x10c2;
2343 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x00; buf24[3] = 0x84;
2344 buf24[4] = 0x31;
2345 ret = usb_microdia_control_write(dev, reg, buf24, 5);
2346 if(ret < 0) goto err;
2348 // URB 557
2349 reg = 0x1061;
2350 buf = 0x03;
2351 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2352 if(ret < 0) goto err;
2354 // UNKNOWN -- URB_FUNCTION_RESET_PIPE:
2355 // UNKNOWN -- URB_FUNCTION_RESET_PIPE:
2356 // UNKNOWN -- URB_FUNCTION_GET_CURRENT_FRAME_NUMBER:
2357 // UNKNOWN -- URB_FUNCTION_GET_CURRENT_FRAME_NUMBER:
2358 // URB 560 >>> SENDING ISO REQUEST
2360 UDIA_INFO("...start function completed without errors.\n");
2362 return ret;
2363 err:
2364 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg, ret);
2365 return ret;
2369 * @brief From stop-close-amcap.log
2371 * @param dev
2373 * @returns 0
2375 * @author psnel
2377 * For SN9C201 with MI1300. Comments from parser-usbsnoop(updated_13Mar2008).pl output
2380 int microdia_6240_stop_stream(struct usb_microdia *dev)
2382 int ret=0;
2383 __u8 buf[8];
2385 UDIA_INFO("Stopping camera...\n");
2387 buf[0]=0x01;
2388 ret = usb_microdia_control_write(dev, 0x1061, buf, 1); // URB 25319
2389 UDIA_INFO("...stop: write %x, ret = %d\n",buf[0],ret);
2391 buf[0]=0xb0; buf[1]=0x5d; buf[2]=0x07; buf[3]=0x00;
2392 buf[4]=0x00; buf[5]=0x00; buf[6]=0x00; buf[7]=0x10;
2393 ret += usb_microdia_control_write(dev, 0x10c0, buf, 8); // URB 25320
2394 UDIA_INFO("...stop: write buf[8], ret = %d\n",ret);
2396 ret += usb_microdia_control_read(dev, 0x10c0, buf, 1); // URB 25321 << b0
2397 UDIA_INFO("...stop: read %x, ret = %d\n",buf[0],ret);
2399 ret += usb_microdia_control_read(dev, 0x10c0, buf, 1); // URB 25322 << b4
2400 UDIA_INFO("...stop: read %x, ret = %d\n",buf[0],ret);
2402 buf[0]=0x3c;
2403 ret += usb_microdia_control_write(dev, 0x1000, buf, 1); // URB 25323
2404 UDIA_INFO("...stop: write %x, ret = %d\n",buf[0],ret);
2406 buf[0]=0x68;
2407 ret += usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 25324
2408 UDIA_INFO("...stop: write %x, ret = %d\n",buf[0],ret);
2410 buf[0]=0xa0;
2411 ret += usb_microdia_control_write(dev, 0x1007, buf, 1); // URB 25325
2412 UDIA_INFO("...stop: write %x, ret = %d\n",buf[0],ret);
2414 buf[0]=0xa0;
2415 ret += usb_microdia_control_write(dev, 0x1006, buf, 1); // URB 25326
2416 UDIA_INFO("...stop: write %x, ret = %d\n",buf[0],ret);
2418 buf[0]=0x98; buf[1]=0xef; buf[2]=0x11;
2419 ret += usb_microdia_control_write(dev, 0x1000, buf, 3); // URB 25327
2420 UDIA_INFO("...stop: write buf[3], ret = %d\n",ret);
2422 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: (URB 5009)
2423 // URB 25328 <<< GETTING SELECT_INTERFACE Interface: AlternateSetting = 0
2424 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: (URB 25329)
2426 buf[0]=0x00;
2427 ret += usb_microdia_control_write(dev, 0x1066, buf, 1); // URB 25330
2428 UDIA_INFO("...stop: write %x, ret = %d\n",buf[0],ret);
2430 if(ret < 19){
2431 UDIA_ERROR("One ore more errors occured during stop sequence !\n");
2432 return -1;
2435 return 0;
2439 * @brief From init.sequence.log
2441 * @param dev
2443 * @returns 0
2445 * @author GWater
2447 * For SN9C201 with SOI968.
2448 * Tests showed this function is actually unnecessary.
2449 * Nevertheless the reads may give us valuable values we don't know about yet.
2451 int microdia_624e_initialize(struct usb_microdia *dev)
2453 __u8 buf;
2455 usb_microdia_control_read(dev, 0x130d, &buf, 1);
2456 usb_microdia_control_read(dev, 0x1040, &buf, 1);
2458 return 0;
2461 /**
2462 * @brief From UsbSnoop-plugin-parsed.log
2464 * @param dev
2466 * @returns
2468 int microdia_624f_initialize(struct usb_microdia *dev)
2470 /* Do nothing here */
2471 return 0;
2475 * @brief From UsbSnoop-plugin-parsed.log
2477 * @param dev
2479 * @returns
2481 int microdia_6260_initialize(struct usb_microdia *dev)
2483 __u8 buf;
2485 usb_microdia_control_read(dev, 0x130d, &buf, 1);
2486 usb_microdia_control_read(dev, 0x1040, &buf, 1);
2487 buf = 0x00;
2488 usb_microdia_control_write(dev, 0x10c8, &buf, 1);
2489 usb_microdia_control_read(dev, 0x100a, &buf, 1);
2490 buf = 0x04;
2491 usb_microdia_control_write(dev, 0x100a, &buf, 1);
2492 usb_microdia_control_read(dev, 0x100b, &buf, 1);
2493 buf = 0x04;
2494 usb_microdia_control_write(dev, 0x100b, &buf, 1);
2495 usb_microdia_control_read(dev, 0x1001, &buf, 1);
2496 buf = 0xc7;
2497 usb_microdia_control_write(dev, 0x1001, &buf, 1);
2498 usb_microdia_control_read(dev, 0x1040, &buf, 1);
2499 buf = 0x00;
2500 usb_microdia_control_write(dev, 0x1040, &buf, 1);
2501 usb_microdia_control_read(dev, 0x1045, &buf, 1);
2502 buf = 0x04;
2503 usb_microdia_control_write(dev, 0x1045, &buf, 1);
2504 usb_microdia_control_read(dev, 0x1046, &buf, 1);
2505 buf = 0x10;
2506 usb_microdia_control_write(dev, 0x1046, &buf, 1);
2507 buf = 0x14;
2508 usb_microdia_control_write(dev, 0x1045, &buf, 1);
2509 buf = 0x01;
2510 usb_microdia_control_write(dev, 0x1040, &buf, 1);
2511 buf = 0x80;
2512 usb_microdia_control_write(dev, 0x1020, &buf, 1);
2514 return 0;
2518 * @brief From 6 init-logs
2520 * @param dev
2522 * @returns 0 (ok) or -1 (error)
2524 * @author Comer352l
2526 * Windows driver versions: 5.5.8.12 and 5.7.23.000
2527 * Windows versions: 2000 and XP
2528 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
2530 * Comments behind read oprations contain HEX-values that appeared in the logs
2532 int microdia_6270_initialize(struct usb_microdia *dev)
2534 //int actual;
2535 int ret = 0;
2536 int retSP = 0;
2537 int retASS = 0;
2538 __u8 buf[8];
2539 __u8 buf_0395[1];
2540 __u8 buf_1000[5];
2541 __u8 buf_1060[2];
2542 __u8 buf_11b8[1];
2544 ret += usb_microdia_control_read(dev, 0x130d, buf, 1); // URB 5 0x81,0x85,0x04,0x8b,0x02,...
2546 ret += usb_microdia_control_read(dev, 0x1040, buf, 1); // URB 6 0xe4,0xc4,0xa4,0x44,...
2549 * THE OLD DRIVER 5.5.8.12 DOES AN ADDITIONAL WRITE HERE:
2550 * buf[0]=0x00;
2551 * usb_microdia_control_write(dev, 0x10c8, buf, 1);
2554 ret += usb_microdia_control_read(dev, 0x118a, buf, 1); // URB 7 0x05,0x7b,0x01,0x04,...
2556 ret += usb_microdia_control_read(dev, 0x0395, buf_0395, 1); // URB 8 0xc2,0x82,0x38,0x98,0x04,...
2557 // => this value will be rewritten to 0x118a and 0x0395 later (URBs 81+82)
2559 buf[0] = 0x05;
2560 ret += usb_microdia_control_write(dev, 0x118a, buf, 1); // URB 9
2562 ret += usb_microdia_control_write(dev, 0x0395, buf, 1); // URB 10
2564 ret += usb_microdia_control_read(dev, 0x11b8, buf_11b8, 1); // URB 11 0xa0,0x00,0x24,...
2565 // => this value will be rewritten to 0x11b8 later (URB 83)
2567 buf[0] = 0x10;
2568 ret += usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 12
2570 ret += usb_microdia_control_read(dev, 0x1000, buf_1000, 5); // URB 13 0x30 0xCF 0x00 0x03 (0x02 or 0x00)
2571 // => these values will be rewritten to 0x1000 later (URB 84)
2573 buf[0] = 0x70; buf[1] = 0x00; buf[2] = 0x18; buf[3] = 0x00; buf[4] = 0x00;
2574 ret += usb_microdia_control_write(dev, 0x1000, buf, 5); // URB 14
2576 ret += usb_microdia_control_read(dev, 0x1060, buf_1060, 2); // URB 15 0x08 0x00 (always ???)
2577 // => this value will be rewritten to 0x1060 later (URB 85)
2579 buf[0] = 0x00; buf[1] = 0x03;
2580 ret += usb_microdia_control_write(dev, 0x1060, buf, 2); // URB 16
2582 // initialize I2C registers to avoid getting no ACK at first I2C operation:
2583 ret += sn9c20x_initialize_i2c(dev, SN9C20X_I2C_2WIRE, MT9V011_I2C_SLAVE_ADDRESS);
2585 // enable I2C communication (bit 0)
2586 buf[0] = 0x21; // THE OLD DRIVER 5.5.8.12 WRITES 0x5d
2587 ret += usb_microdia_control_write(dev, 0x10c8, buf, 1); // URB 17
2589 // probe sensor model:
2590 retSP = mt9vx11_sensor_probe(dev); // substitutes URBs 18-48
2591 if ((retSP == 0) && (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS))
2592 // switch (back) to IFP address space:
2593 retASS = mt9v111_select_address_space(dev, MT9V111_ADDRESSSPACE_IFP);
2595 ret += usb_microdia_control_write(dev, 0x118a, buf_0395, 1); // URB 81 => write value read with URB 8
2597 ret += usb_microdia_control_write(dev, 0x0395, buf_0395, 1); // URB 82 => write value read with URB 8
2599 ret += usb_microdia_control_write(dev, 0x11b8, buf_11b8, 1); // URB 83 => write value read with URB 11
2601 ret += usb_microdia_control_write(dev, 0x1000, buf_1000, 5); // URB 84 => write value read with URB 13
2603 ret += usb_microdia_control_write(dev, 0x1060, buf_1060, 2); // URB 85 => write value read with URB 15; (always 08 00 ???)
2605 // USB-interrupt-message: doesn't work yet (returns error -110)
2606 //usb_interrupt_msg(dev->udev, usb_rcvintpipe(dev->udev, dev->int_in_endpointAddr), dev->int_in_buffer, dev->int_in_size, &actual, 1000); // URB 86
2609 * THE OLD DRIVER 5.5.8.12 DOES AN ADDITIONAL WRITE HERE:
2610 * wbuf[0]=0x80;
2611 * usb_microdia_control_write(dev, 0x1020, wbuf, 1);
2614 if ((retSP != 0) || (retASS != 0) || (ret < 33))
2616 if (ret < 33)
2617 UDIA_INFO("One ore more errors occured during initialization !\n");
2618 return -1;
2620 else
2621 return 0;
2624 /**
2625 * @brief From UsbSnoop-plugin-parsed.log
2627 * @param dev
2629 * @returns
2631 int microdia_627b_initialize(struct usb_microdia *dev)
2633 /*int actual;*/
2634 int ret;
2635 int retI2C;
2636 __u16 reg;
2637 __u8 buf[32];
2638 __u8 reg0395[1];
2639 __u8 reg11b8[1];
2640 __u8 reg1000[5];
2641 __u8 reg1060[2];
2643 reg = 0x130d;
2644 ret = usb_microdia_control_read(dev, reg, buf, 1); /* URB 5 */
2645 if (ret < 0)
2646 goto err;
2647 reg = 0x1040;
2648 ret = usb_microdia_control_read(dev, reg, buf, 1); /* URB 6 */
2649 if (ret < 0)
2650 goto err;
2652 reg = 0x118a;
2653 ret = usb_microdia_control_read(dev, reg, buf, 1); /* URB 7 */
2654 if (ret < 0)
2655 goto err;
2656 reg = 0x0395;
2657 ret = usb_microdia_control_read(dev, reg, reg0395, 1); /* URB 8 */
2658 if (ret < 0)
2659 goto err;
2661 reg = 0x118a;
2662 buf[0] = 0x05;
2663 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 9 */
2664 if (ret < 0)
2665 goto err;
2666 reg = 0x0395;
2667 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 10 */
2668 if (ret < 0)
2669 goto err;
2671 reg = 0x11b8;
2672 ret = usb_microdia_control_read(dev, reg, reg11b8, 1); /* URB 11 */
2673 if (ret < 0)
2674 goto err;
2676 reg = 0x11b8;
2677 buf[0] = 0x10;
2678 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 12 */
2679 if (ret < 0)
2680 goto err;
2681 reg = 0x1000;
2682 ret = usb_microdia_control_read(dev, reg, reg1000, 5); /* URB 13 */
2683 if (ret < 0)
2684 goto err;
2686 reg = 0x1000;
2687 buf[0] = 0x70; buf[1] = 0x00; buf[2] = 0x18; buf[3] = 0x00; buf[4] = 0x00;
2688 ret = usb_microdia_control_write(dev, reg, buf, 5); /* URB 14 */
2689 if (ret < 0)
2690 goto err;
2692 reg = 0x1060;
2693 ret = usb_microdia_control_read(dev, reg, reg1060, 2); /* URB 15 */
2694 if (ret < 0)
2695 goto err;
2697 reg = 0x1060;
2698 buf[0] = 0x00; buf[1] = 0x03;
2699 ret = usb_microdia_control_write(dev, reg, buf, 2); /* URB 16 */
2700 if (ret < 0)
2701 goto err;
2703 reg = 0x10c8;
2704 buf[0] = 0x21;
2705 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 17 */
2706 if (ret < 0)
2707 goto err;
2709 retI2C = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1,
2710 OV7660_CTL_PID, dev->sensor_flags, buf); /* URBs 18-29 */
2711 if (retI2C < 0) {
2712 /* 2nd try... */
2713 reg = 0x10c8;
2714 buf[0] = 0x21;
2715 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 30 */
2716 if (ret < 0)
2717 goto err;
2719 retI2C = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1,
2720 OV7660_CTL_PID, dev->sensor_flags, buf); /* URBs 31-35 */
2722 if (retI2C < 0)
2723 UDIA_ERROR("Read of sensor register 0x0a failed.");
2725 reg = 0x118a;
2726 buf[0] = 0xa6;
2727 ret = usb_microdia_control_write(dev, reg, reg0395, 1); /* URB 36 */
2728 if (ret < 0)
2729 goto err;
2730 reg = 0x0395;
2731 ret = usb_microdia_control_write(dev, reg, reg0395, 1); /* URB 37 */
2732 if (ret < 0)
2733 goto err;
2735 reg = 0x11b8;
2736 buf[0] = 0x06;
2737 ret = usb_microdia_control_write(dev, reg, reg11b8, 1); /* URB 38 */
2738 if (ret < 0)
2739 goto err;
2741 reg = 0x1000;
2742 buf[0] = 0x30; buf[1] = 0xcf; buf[2] = 0x00; buf[3] = 0x03; buf[4] = 0x02;
2743 ret = usb_microdia_control_write(dev, reg, reg1000, 5); /* URB 39 */
2744 if (ret < 0)
2745 goto err;
2747 reg = 0x1060;
2748 buf[0] = 0x08; buf[1] = 0x00;
2749 ret = usb_microdia_control_write(dev, reg, reg1060, 2); /* URB 40 */
2750 if (ret < 0)
2751 goto err;
2754 //URB 41
2755 ret = usb_interrupt_msg(dev->udev, 0x00000083, buf, 0x0000001, &actual, 1000);
2758 return ret;
2759 err:
2760 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg, ret);
2761 return ret;
2765 * @brief From init-start-stop-log (made by Víctor M. Hernández Rocamora)
2767 * @param dev
2769 * @returns 0 (ok) or -1 (error)
2771 * @author Comer352l
2773 * USB-Logger: SniffUSB 2.0
2775 * Comments behind read oprations contain HEX-values that appeared in the log
2777 int microdia_627f_initialize(struct usb_microdia *dev)
2779 __u8 buf[1];
2780 int ret = 0;
2782 ret += usb_microdia_control_read(dev, 0x130d, buf, 1); // URB 5 0x81
2784 ret += usb_microdia_control_read(dev, 0x1040, buf, 1); // URB 6 0xe4
2786 buf[0] = 0x00;
2787 ret += usb_microdia_control_write(dev, 0x10c8, buf, 1); // URB 7
2789 buf[0] = 0x80;
2790 ret += usb_microdia_control_write(dev, 0x1020, buf, 1); // URB 8
2792 ret += usb_microdia_control_read(dev, 0x1045, buf, 1); // URB 9 0x0f
2794 buf[0] = 0x1f;
2795 ret += usb_microdia_control_write(dev, 0x1045, buf, 1); // URB 10
2797 ret += usb_microdia_control_read(dev, 0x1045, buf, 1); // URB 11 0x1f
2799 buf[0] = 0x0f;
2800 ret += usb_microdia_control_write(dev, 0x1045, buf, 1); // URB 12
2802 ret += usb_microdia_control_read(dev, 0x1045, buf, 1); // URB 13 0x0f
2804 buf[0] = 0x1f;
2805 ret += usb_microdia_control_write(dev, 0x1045, buf, 1); // URB 14
2807 if (ret < 10)
2809 UDIA_INFO("One ore more errors occured during initialization !\n");
2810 return -1;
2812 return 0;
2815 /**
2816 * @brief From UsbSnoop-plugin-parsed.log
2818 * @param dev
2820 * @returns 0 (OK) or <0 (Error)
2822 * @author Vincent, Kuzja
2824 int microdia_6288_initialize(struct usb_microdia *dev)
2827 int ret;
2828 __u16 reg;
2829 __u8 buf[2];
2831 reg = 0x130d ;
2832 ret = usb_microdia_control_read(dev, reg, buf, 1);
2833 if(ret < 0) goto err;
2835 reg = 0x1040 ;
2836 ret = usb_microdia_control_read(dev, reg, buf, 1);
2837 if(ret < 0) goto err;
2839 if (ret < 0)
2840 return ret;
2841 else
2842 return 0;
2843 err:
2844 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg, ret);
2845 return ret;
2848 /**
2849 * @brief From UsbSnoop-plugin-parsed.log
2851 * @param dev
2853 * @returns 0 if all OK
2855 * Function to initialize Microdia 6128 webcam
2856 * Bridge SN9C325 + OM6802 CMOS sensor
2857 * note: comments are my observations so they could be wrong
2859 int microdia_6128_initialize(struct usb_microdia *dev)
2861 int ret = 0;
2862 __u8 buf[2];
2864 UDIA_INFO("Initializing camera...\n");
2866 buf[0] = 0x01;
2867 ret += usb_microdia_control_write(dev, 0xf1, buf, 1);
2868 ret += usb_microdia_control_read(dev, 0x00, buf, 1); // read reg 0x00 must write 0x00 in buf[0]
2869 ret += usb_microdia_control_write(dev, 0xf1, buf, 1);
2870 ret += usb_microdia_control_read(dev, 0x00, buf, 1); // get cam ID, must read 0x12
2872 if(buf[0] != 0x12){
2873 UDIA_ERROR("Microdia 6128 is not connected or working !!!\n");
2874 return -ENODEV;
2877 buf[0] = 0x29; buf[1] = 0x70; // Configure GPIO
2878 ret += usb_microdia_control_write(dev, 0x01, buf, 2);
2880 buf[0] = 0x01;
2881 ret += usb_microdia_control_write(dev, 0xf1, buf, 1); // Maybe wakeup
2883 buf[0] = 0x0e;
2884 ret += usb_microdia_control_write(dev, 0x01, buf, 1); // Command to initialize cam
2886 if(ret != 8)
2887 UDIA_DEBUG("Some read or writes were not successful in initialization !\n");
2889 /* Device is initialized and ready */
2890 UDIA_INFO("Microdia USB2.0 Camera is ready\n");
2892 return 0;
2896 int dev_microdia_start_stream(struct usb_microdia *dev)
2898 int ret = -ENODEV;
2899 if(dev && dev->start_stream)
2900 ret = dev->start_stream(dev);
2902 return ret;
2906 * @brief From start.htm
2908 * @param dev
2910 * @returns 0
2912 * @author GWater
2914 * For SN9C201 with MI1310.
2915 * This function has not been tested yet.
2917 int microdia_6242_start_stream(struct usb_microdia *dev)
2919 int i = -1;
2920 __u8 buf[48];
2922 __u8 urb10[24] = {
2923 0x01, 0x18, 0x00, 0x30, 0x00, 0x09, 0x00, 0xed,
2924 0x0f, 0xda, 0x0f, 0x3a, 0x00, 0x3a, 0x00, 0xd0,
2925 0x0f, 0xf7, 0x0f, 0x00, 0x00, 0x00, 0x60, 0x0a};
2927 __u8 urb13[11] = {
2928 0x02, 0x00, 0x02, 0x00, 0x50, 0x78, 0x00, 0x00,
2929 0x07, 0xc0, 0x0a};
2931 __u8 urb14[22] = {
2932 0x00, 0x20, 0x20, 0x20, 0x20, 0x00, 0x24, 0x3b,
2933 0x4f, 0x61, 0x71, 0x80, 0x8f, 0x9d, 0xab, 0xb8,
2934 0xc4, 0xd1, 0xdd, 0xe9, 0xf4, 0xff};
2936 __u8 urb119[17] = {
2937 0x08, 0x38, 0x58, 0x6f, 0x7f, 0x8d, 0x9a, 0xa6,
2938 0xb1, 0xbb, 0xc5, 0xce, 0xd7, 0xdf, 0xe8, 0xef,
2939 0xf7};
2941 __u8 urb120[21] = {
2942 0x16, 0x00, 0x2b, 0x00, 0x08, 0x00, 0x00, 0x00,
2943 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2944 0x00, 0x00, 0x00, 0x00, 0x00};
2946 __u8 qtable1[64] = {
2947 0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
2948 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
2949 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
2950 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
2951 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
2952 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
2953 0x4f, 0x54, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
2954 0x64, 0x5c, 0x54, 0x64, 0x4b, 0x54, 0x58, 0x54};
2956 __u8 qtable2[64] = {
2957 0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
2958 0x15, 0x26, 0x54, 0x36, 0x2e, 0x36, 0x54, 0x54,
2959 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
2960 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
2961 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
2962 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
2963 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
2964 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54};
2966 __u8 first10c0[7][3] = {
2967 {0x0d, 0x00, 0x08},
2968 {0x0d, 0x00, 0x09},
2969 {0x0d, 0x00, 0x08},
2970 {0xf0, 0x00, 0x01},
2971 {0x3a, 0x73, 0x00},
2972 {0x06, 0x30, 0x8c},
2973 {0xf0, 0x00, 0x00}};
2975 __u8 second10c0a[2][5] = {
2976 {0x01, 0x00, 0x0e, 0x00, 0x14},
2977 {0x03, 0x03, 0xc4, 0x05, 0x14}};
2978 __u8 second10c0b[3] =
2979 {0xc8, 0x00, 0x03};
2981 __u8 third10c0[4][3] = {
2982 {0x0a, 0x00, 0x01},
2983 {0x06, 0x00, 0x29},
2984 {0x05, 0x00, 0x72},
2985 {0x20, 0x00, 0x00}};
2987 __u8 fourth10c0a[3][3] = {
2988 {0x20, 0x00, 0x00},
2989 {0x09, 0x01, 0x90},
2990 {0x0d, 0x80, 0x08}};
2991 __u8 fourth10c0b[2][5] = {
2992 {0x2b, 0x01, 0x88, 0x01, 0x88},
2993 {0x2d, 0x01, 0x88, 0x01, 0x88}};
2995 __u8 fifth10c0[4][3] = {
2996 {0x0a, 0x00, 0x01},
2997 {0x06, 0x00, 0x29},
2998 {0x05, 0x00, 0x72}};
3000 // interrupt down
3002 buf[0] = 0x00;
3003 usb_microdia_control_write(dev, 0x1066, buf, 1); // URB 1
3005 // interrupt up
3007 // interrupt down
3009 buf[0] = 0x60;
3010 usb_microdia_control_write(dev, 0x1007, buf, 1);
3012 buf[0] = 0x00;
3013 usb_microdia_control_write(dev, 0x1006, buf, 1);
3015 buf[0] = 0x78;
3016 usb_microdia_control_write(dev, 0x1000, buf, 1);
3018 buf[0] = 0xc7;
3019 usb_microdia_control_write(dev, 0x1001, buf, 1);
3021 buf[0] = 0x1c;
3022 usb_microdia_control_write(dev, 0x1002, buf, 1);
3024 buf[0] = 0x01;
3025 usb_microdia_control_write(dev, 0x1061, buf, 1);
3027 buf[0] = 0x80;
3028 usb_microdia_control_write(dev, 0x1020, buf, 1);
3030 buf[0] = 0x40; buf[1] = 0x30; buf[2] = 0x20;
3031 buf[3] = 0x10; buf[4] = 0x08;
3032 usb_microdia_control_write(dev, 0x1067, buf, 5);
3034 buf[0] = 0xb0; buf[1] = dev->sensor_slave_address; buf[2] = 0x0d;
3035 buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00;
3036 buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03;
3037 usb_microdia_control_write(dev, 0x10c0, buf, 9);
3039 usb_microdia_control_write(dev, 0x10e0, urb10, 24); // URB 10
3041 buf[0] = 0x00; buf[1] = 0x00; buf[3] = 0x00;
3042 usb_microdia_control_write(dev, 0x10f8, buf, 3);
3044 buf[0] = 0x00; buf[1] = 0x40; buf[2] = 0x00;
3045 buf[3] = 0xe0; buf[4] = 0x03;
3046 usb_microdia_control_write(dev, 0x10fb, buf, 5);
3048 usb_microdia_control_write(dev, 0x1180, urb13, 11);
3050 usb_microdia_control_write(dev, 0x118b, urb14, 22);
3052 buf[0] = 0x00; buf[1] = 0x00;
3053 usb_microdia_control_write(dev, 0x11a1, buf, 2);
3055 buf[0] = 0x60; buf[1] = 0x20; buf[2] = 0x00;
3056 buf[3] = 0x08; buf[4] = 0x00; buf[5] = 0x00;
3057 buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00;
3058 usb_microdia_control_write(dev, 0x11b7, buf, 9);
3060 buf[0] = 0x30;
3061 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3063 buf[0] = 0x78;
3064 usb_microdia_control_write(dev, 0x1000, buf, 1);
3066 for (i = 0; i < 7; i++) // URB 9-48
3067 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
3068 first10c0[i][0], dev->sensor_flags, &first10c0[i][1]);
3070 buf[0] = 0x60;
3071 usb_microdia_control_write(dev, 0x1007, buf, 1);
3073 buf[0] = 0x00;
3074 usb_microdia_control_write(dev, 0x1006, buf, 1);
3076 buf[0] = 0x03;
3077 usb_microdia_control_write(dev, 0x10e0, buf, 1); // URB 50
3079 buf[0] = 0x03;
3080 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3082 buf[0] = 0xc6;
3083 usb_microdia_control_write(dev, 0x1001, buf, 1);
3085 buf[0] = 0xc4;
3086 usb_microdia_control_write(dev, 0x1001, buf, 1);
3088 buf[0] = 0x44;
3089 usb_microdia_control_write(dev, 0x1001, buf, 1);
3091 buf[0] = 0x80;
3092 usb_microdia_control_write(dev, 0x1189, buf, 1);
3094 buf[0] = 0x00;
3095 usb_microdia_control_write(dev, 0x11bc, buf, 1);
3097 buf[0] = 0x00;
3098 usb_microdia_control_write(dev, 0x11bd, buf, 1);
3100 buf[0] = 0x00;
3101 usb_microdia_control_write(dev, 0x11be, buf, 1);
3103 buf[0] = 0x00;
3104 usb_microdia_control_write(dev, 0x11bf, buf, 1);
3106 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
3107 second10c0a[0][0], dev->sensor_flags, &second10c0a[0][1]);
3109 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
3110 second10c0a[1][0], dev->sensor_flags, &second10c0a[1][1]);
3112 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0,
3113 0x09, dev->sensor_flags, NULL);
3115 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
3116 second10c0b[0], dev->sensor_flags, &second10c0b[1]);
3118 buf[0] = 0x06; buf[1] = 0x00; buf[2] = 0x02;
3119 buf[3] = 0x00; buf[4] = 0x28; buf[5] = 0x3c;
3120 usb_microdia_control_write(dev, 0x1180, buf, 6);
3122 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00;
3123 buf[3] = 0xf0; buf[4] = 0x00;
3124 usb_microdia_control_write(dev, 0x10fb, buf, 5); // URB 70
3126 buf[0] = 0x8c;
3127 usb_microdia_control_write(dev, 0x1189, buf, 1);
3129 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
3130 usb_microdia_control_write(dev, 0x11a1, buf, 4);
3132 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
3133 usb_microdia_control_write(dev, 0x11ab, buf, 4);
3135 buf[0] = 0x78;
3136 usb_microdia_control_write(dev, 0x1000, buf, 1);
3138 buf[0] = 0x18;
3139 usb_microdia_control_write(dev, 0x1002, buf, 1);
3141 buf[0] = 0x18;
3142 usb_microdia_control_write(dev, 0x1002, buf, 1);
3144 buf[0] = 0x38;
3145 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3147 buf[0] = 0x02;
3148 usb_microdia_control_write(dev, 0x118a, buf, 1);
3150 buf[0] = 0x02;
3151 usb_microdia_control_write(dev, 0x0395, buf, 1);
3153 buf[0] = 0x78;
3154 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 80
3155 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3157 buf[0] = 0xf9;
3158 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3159 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3161 buf[0] = 0xfa;
3162 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3163 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3165 buf[0] = 0x7b;
3166 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3167 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3169 buf[0] = 0x7c;
3170 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3171 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3173 buf[0] = 0x7b;
3174 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 90
3176 for (i = 0; i < 4; i++) // URB 97-106
3177 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
3178 third10c0[i][0], dev->sensor_flags, &third10c0[i][1]);
3180 buf[0] = 0x06;
3181 usb_microdia_control_write(dev, 0x1180, buf, 1);
3183 for (i = 0; i < 3; i++)
3184 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
3185 fourth10c0a[i][0], dev->sensor_flags, &fourth10c0a[i][1]);
3187 for (i = 0; i < 2; i++)
3188 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
3189 fourth10c0b[i][0], dev->sensor_flags, &fourth10c0b[i][1]);
3191 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0,
3192 0x33, dev->sensor_flags, NULL);
3194 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
3195 first10c0[0][0], dev->sensor_flags, &first10c0[0][1]);
3197 buf[0] = 0x20;
3198 usb_microdia_control_write(dev, 0x118c, buf, 1);
3200 buf[0] = 0x20;
3201 usb_microdia_control_write(dev, 0x118d, buf, 1); // URB 110
3203 buf[0] = 0x20;
3204 usb_microdia_control_write(dev, 0x118e, buf, 1);
3206 buf[0] = 0x20;
3207 usb_microdia_control_write(dev, 0x118f, buf, 1);
3209 buf[0] = 0x0a;
3210 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3212 buf[0] = 0x20;
3213 usb_microdia_control_write(dev, 0x118c, buf, 1);
3215 buf[0] = 0x20;
3216 usb_microdia_control_write(dev, 0x118d, buf, 1);
3218 buf[0] = 0x20;
3219 usb_microdia_control_write(dev, 0x118e, buf, 1);
3221 buf[0] = 0x20;
3222 usb_microdia_control_write(dev, 0x118f, buf, 1);
3224 buf[0] = 0x10;
3225 usb_microdia_control_write(dev, 0x118b, buf, 1);
3227 usb_microdia_control_write(dev, 0x1190, urb119, 17);
3229 for (i = 0; i < 9; i++) // URB 120-128
3230 usb_microdia_control_write(dev, 0x10e1, urb120, 21);
3232 buf[0] = 0x05;
3233 usb_microdia_control_write(dev, 0x10f7, buf, 1);
3235 buf[0] = 0x60;
3236 usb_microdia_control_write(dev, 0x10f6, buf, 1); // URB 130
3238 usb_microdia_control_write(dev, 0x10e1, urb120, 21);
3240 buf[0] = 0x14;
3241 usb_microdia_control_write(dev, 0x10f8, buf, 1);
3243 buf[0] = 0xff;
3244 usb_microdia_control_write(dev, 0x10fa, buf, 1);
3246 buf[0] = 0x00;
3247 usb_microdia_control_write(dev, 0x10f9, buf, 1);
3249 buf[0] = 0x00;
3250 usb_microdia_control_write(dev, 0x10f9, buf, 1);
3252 buf[0] = 0x0a;
3253 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3255 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00;
3256 usb_microdia_control_write(dev, 0x11bc, buf, 4);
3258 /* Set whole array buf to 0x00 */
3259 memset(buf, 0x00, 48);
3260 usb_microdia_control_write(dev, 0x11c0, buf, 48);
3262 buf[0] = 0x20;
3263 usb_microdia_control_write(dev, 0x118c, buf, 1);
3265 buf[0] = 0x20;
3266 usb_microdia_control_write(dev, 0x118d, buf, 1); // URB 140
3268 buf[0] = 0x20;
3269 usb_microdia_control_write(dev, 0x118e, buf, 1);
3271 buf[0] = 0x20;
3272 usb_microdia_control_write(dev, 0x118f, buf, 1);
3274 buf[0] = 0x2d; buf[1] = 0x2d; buf[2] = 0x3a;
3275 buf[3] = 0x05; buf[4] = 0x04; buf[5] = 0x3f;
3276 usb_microdia_control_write(dev, 0x11a5, buf, 6);
3278 buf[0] = 0x14; buf[1] = 0xec; buf[2] = 0x0a; buf[3] = 0xf6;
3279 usb_microdia_control_write(dev, 0x11af, buf, 4);
3281 buf[0] = 0x32; buf[1] = 0xdd; buf[2] = 0x2d; buf[3] = 0xdd;
3282 usb_microdia_control_write(dev, 0x11b3, buf, 4);
3284 buf[0] = 0x07;
3285 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3287 buf[0] = 0x01;
3288 usb_microdia_control_write(dev, 0x1061, buf, 1);
3290 buf[0] = 0x27;
3291 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3293 usb_microdia_control_write(dev, 0x1100, qtable1, 64);
3295 usb_microdia_control_write(dev, 0x1140, qtable2, 64); // URB 150
3297 buf[0] = 0x07;
3298 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3300 buf[0] = 0x03;
3301 usb_microdia_control_write(dev, 0x1061, buf, 1);
3303 buf[0] = 0x0b;
3304 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3306 buf[0] = 0x8c;
3307 usb_microdia_control_write(dev, 0x1189, buf, 1);
3309 buf[0] = 0x00;
3310 usb_microdia_control_write(dev, 0x11bc, buf, 1);
3312 buf[0] = 0x00;
3313 usb_microdia_control_write(dev, 0x11bd, buf, 1);
3315 buf[0] = 0x00;
3316 usb_microdia_control_write(dev, 0x11be, buf, 1);
3318 buf[0] = 0x00;
3319 usb_microdia_control_write(dev, 0x11bf, buf, 1);
3321 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
3322 second10c0a[0][0], dev->sensor_flags, &second10c0a[0][1]);
3324 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
3325 second10c0a[1][0], dev->sensor_flags, &second10c0a[1][1]);
3327 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0,
3328 0x09, dev->sensor_flags, NULL);
3330 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
3331 second10c0b[0], dev->sensor_flags, &second10c0b[1]);
3333 buf[0] = 0x06; buf[1] = 0x00; buf[2] = 0x02;
3334 buf[3] = 0x00; buf[4] = 0x28; buf[5] = 0x3c;
3335 usb_microdia_control_write(dev, 0x1180, buf, 6);
3337 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00;
3338 buf[3] = 0xf0; buf[4] = 0x00;
3339 usb_microdia_control_write(dev, 0x10fb, buf, 5);
3341 buf[0] = 0x8c;
3342 usb_microdia_control_write(dev, 0x1189, buf, 1);
3344 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
3345 usb_microdia_control_write(dev, 0x11a1, buf, 4); // URB 170
3347 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
3348 usb_microdia_control_write(dev, 0x11ab, buf, 4);
3350 buf[0] = 0x03;
3351 usb_microdia_control_write(dev, 0x1061, buf, 1);
3353 buf[0] = 0x0a;
3354 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3356 buf[0] = 0x00;
3357 usb_microdia_control_write(dev, 0x11b9, buf, 1);
3359 buf[0] = 0x0b;
3360 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3362 buf[0] = 0x01;
3363 usb_microdia_control_write(dev, 0x1061, buf, 1);
3365 buf[0] = 0x78;
3366 usb_microdia_control_write(dev, 0x1000, buf, 1);
3368 buf[0] = 0x18;
3369 usb_microdia_control_write(dev, 0x1002, buf, 1);
3371 buf[0] = 0x18;
3372 usb_microdia_control_write(dev, 0x1002, buf, 1);
3374 buf[0] = 0x7b;
3375 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 180
3377 buf[0] = 0x02;
3378 usb_microdia_control_write(dev, 0x118a, buf, 1);
3380 buf[0] = 0x02;
3381 usb_microdia_control_write(dev, 0x0395, buf, 1);
3383 buf[0] = 0x78;
3384 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3385 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3387 buf[0] = 0xf9;
3388 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3389 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3391 buf[0] = 0xfa;
3392 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3393 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3395 buf[0] = 0x7b;
3396 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3397 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 190
3399 buf[0] = 0x7c;
3400 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3401 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3403 buf[0] = 0x7b;
3404 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3406 for (i = 0; i < 3; i++) // URB 200-205
3407 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
3408 fifth10c0[i][0], dev->sensor_flags, &fifth10c0[i][1]);
3410 sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 2,
3411 0x00, dev->sensor_flags, buf);
3412 /* __u8 result[2] = {buf[3], buf[4]}; */
3414 buf[0] = 0x03;
3415 usb_microdia_control_write(dev, 0x1061, buf, 1);
3417 return 0;
3421 * @brief From startstream.log
3423 * @param dev
3425 * @returns 0
3427 * @author GWater
3429 * For SN9C201 with SOI968.
3430 * This is function triggers a working stream of image data and a glowing LED.
3432 int microdia_624e_start_stream(struct usb_microdia *dev)
3434 int i = -1;
3435 __u8 buf[48];
3437 __u8 urb10[24] =
3438 {0x47, 0x18, 0x00, 0x30, 0x00, 0x09, 0x00, 0xed,
3439 0x0f, 0xda, 0x0f, 0x3a, 0x00, 0x3a, 0x00, 0xd0,
3440 0x0f, 0xf7, 0x0f, 0x00, 0x00, 0x00, 0x60, 0x0a};
3442 __u8 urb14[22] =
3443 {0x00, 0x20, 0x20, 0x20, 0x20, 0x00, 0x24, 0x3b,
3444 0x4f, 0x61, 0x71, 0x80, 0x8f, 0x9d, 0xab, 0xb8,
3445 0xc4, 0xd1, 0xdd, 0xe9, 0xf4, 0xff};
3447 __u8 urb119[17] =
3448 {0x08, 0x2b, 0x59, 0x79, 0x91, 0x9e, 0xa9, 0xb3,
3449 0xbd, 0xc6, 0xce, 0xd6, 0xdd, 0xe4, 0xea, 0xf1,
3450 0xf7};
3452 __u8 urb120[21] =
3453 {0x16, 0x00, 0x2d, 0x00, 0x08, 0x00, 0xdd, 0x0f,
3454 0xbc, 0x0f, 0x68, 0x00, 0x68, 0x00, 0xa9, 0x0f,
3455 0xf0, 0x0f, 0x00, 0x00, 0x00};
3457 __u8 qtable1[64] =
3458 {0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
3459 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
3460 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
3461 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
3462 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
3463 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
3464 0x4f, 0x53, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
3465 0x64, 0x5c, 0x53, 0x64, 0x4b, 0x53, 0x58, 0x53};
3467 __u8 qtable2[64] =
3468 {0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
3469 0x15, 0x26, 0x53, 0x36, 0x2e, 0x36, 0x53, 0x53,
3470 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3471 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3472 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3473 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3474 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3475 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53};
3477 __u8 first10c0[20][2] = {
3478 {0x12, 0x80}, {0x12, 0x00}, {0x0c, 0x00}, {0x0f, 0x1f},
3479 {0x11, 0x80}, {0x38, 0x52}, {0x1e, 0x00}, {0x33, 0x08},
3480 {0x35, 0x8c}, {0x36, 0x0c}, {0x37, 0x04}, {0x45, 0x04},
3481 {0x47, 0xff}, {0x3e, 0x00}, {0x3f, 0x00}, {0x3b, 0x20},
3482 {0x3a, 0x96}, {0x3d, 0x0a}, {0x14, 0x4e}, {0x13, 0x88}};
3484 __u8 second10c0a[2] =
3485 {0x12, 0x40};
3486 __u8 second10c0b[5] =
3487 {0x17, 0x13, 0x63, 0x01, 0x79}; // length 4
3488 __u8 second10c0c[2] =
3489 {0x1b, 0x00}; // length 0
3490 __u8 second10c0d[2][2] = {
3491 {0x32, 0x24},
3492 {0x03, 0x00}};
3494 __u8 third10c0a[5][2] = {
3495 {0x11, 0x40},
3496 {0x2a, 0x10},
3497 {0x2b, 0xe0},
3498 {0x10, 0x32},
3499 {0x00, 0x00}};
3500 __u8 third10c0b[3] =
3501 {0x01, 0x80, 0x80}; // length 2
3503 __u8 read10c0[4] =
3504 {0x0a, 0x0b, 0x1c, 0x1d}; // these are four addresses
3506 // interrupt down
3508 buf[0] = 0x00;
3509 usb_microdia_control_write(dev, 0x1066, buf, 1); // URB 1
3511 // interrupt up
3513 // interrupt down
3515 buf[0] = 0x78;
3516 usb_microdia_control_write(dev, 0x1000, buf, 1);
3518 buf[0] = 0xc7;
3519 usb_microdia_control_write(dev, 0x1001, buf, 1);
3521 buf[0] = 0x1c;
3522 usb_microdia_control_write(dev, 0x1002, buf, 1);
3524 buf[0] = 0xa0; buf[1] = 0xa0;
3525 usb_microdia_control_write(dev, 0x1006, buf, 2);
3527 buf[0] = 0x01;
3528 usb_microdia_control_write(dev, 0x1061, buf, 1);
3530 buf[0] = 0x80;
3531 usb_microdia_control_write(dev, 0x1020, buf, 1);
3533 buf[0] = 0x40; buf[1] = 0x30; buf[2] = 0x20;
3534 buf[3] = 0x10; buf[4] = 0x08;
3535 usb_microdia_control_write(dev, 0x1067, buf, 5);
3537 buf[0] = 0x92; buf[1] = dev->sensor_slave_address; buf[2] = 0x00;
3538 buf[3] = 0x00; buf[4] = 0x1d; buf[5] = 0x00;
3539 buf[6] = 0xa2; buf[7] = 0x10; buf[8] = 0x03;
3540 usb_microdia_control_write(dev, 0x10c0, buf, 9);
3542 usb_microdia_control_write(dev, 0x10e0, urb10, 24); // URB 10
3544 buf[0] = 0x00; buf[1] = 0x00; buf[3] = 0x00;
3545 usb_microdia_control_write(dev, 0x10f8, buf, 3);
3547 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00;
3548 buf[3] = 0xf0; buf[4] = 0x00;
3549 usb_microdia_control_write(dev, 0x10fb, buf, 5);
3551 buf[0] = 0x8a; buf[1] = 0xcc; buf[2] = 0x08;
3552 usb_microdia_control_write(dev, 0x1188, buf, 3);
3554 usb_microdia_control_write(dev, 0x118b, urb14, 22);
3556 buf[0] = 0x00; buf[1] = 0x00;
3557 usb_microdia_control_write(dev, 0x11a1, buf, 2);
3559 buf[0] = 0x60; buf[1] = 0x20; buf[2] = 0x00;
3560 buf[3] = 0x08; buf[4] = 0x00; buf[5] = 0x40;
3561 buf[6] = 0x01; buf[7] = 0xf0; buf[8] = 0x00;
3562 usb_microdia_control_write(dev, 0x11b7, buf, 9);
3564 buf[0] = 0x30;
3565 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3567 buf[0] = 0x78;
3568 usb_microdia_control_write(dev, 0x1000, buf, 1);
3570 for (i = 0; i < 20; i++) // URB 9-48
3571 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
3572 first10c0[i][0], dev->sensor_flags, &first10c0[i][1]);
3574 buf[0] = 0x47;
3575 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3577 buf[0] = 0x07;
3578 usb_microdia_control_write(dev, 0x10e0, buf, 1); // URB 50
3580 buf[0] = 0xc6;
3581 usb_microdia_control_write(dev, 0x1001, buf, 1);
3583 buf[0] = 0xc4;
3584 usb_microdia_control_write(dev, 0x1001, buf, 1);
3586 buf[0] = 0x44;
3587 usb_microdia_control_write(dev, 0x1001, buf, 1);
3589 buf[0] = 0x8c;
3590 usb_microdia_control_write(dev, 0x1189, buf, 1);
3592 buf[0] = 0x00;
3593 usb_microdia_control_write(dev, 0x11bc, buf, 1);
3595 buf[0] = 0x00;
3596 usb_microdia_control_write(dev, 0x11bd, buf, 1);
3598 buf[0] = 0x00;
3599 usb_microdia_control_write(dev, 0x11be, buf, 1);
3601 buf[0] = 0x00;
3602 usb_microdia_control_write(dev, 0x11bf, buf, 1);
3605 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, // URB 59-60
3606 second10c0a[0], dev->sensor_flags, &second10c0a[1]);
3608 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
3609 second10c0b[0], dev->sensor_flags, &second10c0b[1]);
3611 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0,
3612 second10c0c[0], dev->sensor_flags, &second10c0c[1]);
3614 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
3615 second10c0d[0][0], dev->sensor_flags, &second10c0d[0][1]);
3617 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
3618 second10c0d[1][0], dev->sensor_flags, &second10c0d[1][1]);
3620 buf[0] = 0x3c; buf[1] = 0x00; buf[2] = 0x0b;
3621 buf[3] = 0x00; buf[4] = 0x28; buf[5] = 0x3c;
3622 usb_microdia_control_write(dev, 0x1180, buf, 6);
3624 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00;
3625 buf[3] = 0xf0; buf[4] = 0x00;
3626 usb_microdia_control_write(dev, 0x10fb, buf, 5); // URB 70
3628 buf[0] = 0x8c;
3629 usb_microdia_control_write(dev, 0x1189, buf, 1);
3631 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
3632 usb_microdia_control_write(dev, 0x11a1, buf, 4);
3634 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
3635 usb_microdia_control_write(dev, 0x11ab, buf, 4);
3637 buf[0] = 0x7c;
3638 usb_microdia_control_write(dev, 0x1000, buf, 1);
3640 buf[0] = 0x1c;
3641 usb_microdia_control_write(dev, 0x1002, buf, 1);
3643 buf[0] = 0x1c;
3644 usb_microdia_control_write(dev, 0x1002, buf, 1);
3646 buf[0] = 0x38;
3647 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3649 buf[0] = 0x05;
3650 usb_microdia_control_write(dev, 0x118a, buf, 1);
3652 buf[0] = 0x05;
3653 usb_microdia_control_write(dev, 0x0395, buf, 1);
3655 buf[0] = 0x78;
3656 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 80
3657 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3659 buf[0] = 0xf9;
3660 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3661 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3663 buf[0] = 0x7a;
3664 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3665 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3667 buf[0] = 0x7b;
3668 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3669 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3671 buf[0] = 0x7c;
3672 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3673 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3675 buf[0] = 0xfd;
3676 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 90
3677 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3679 buf[0] = 0xfe;
3680 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3681 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3683 buf[0] = 0x7f;
3684 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3685 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3687 buf[0] = 0x7a;
3688 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3690 for (i = 0; i < 5; i++) // URB 97-106
3691 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
3692 third10c0a[i][0], dev->sensor_flags, &third10c0a[i][1]);
3694 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
3695 third10c0b[0], dev->sensor_flags, &third10c0b[1]);
3697 buf[0] = 0x20;
3698 usb_microdia_control_write(dev, 0x118c, buf, 1);
3700 buf[0] = 0x20;
3701 usb_microdia_control_write(dev, 0x118d, buf, 1); // URB 110
3703 buf[0] = 0x20;
3704 usb_microdia_control_write(dev, 0x118e, buf, 1);
3706 buf[0] = 0x20;
3707 usb_microdia_control_write(dev, 0x118f, buf, 1);
3709 buf[0] = 0x0a;
3710 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3712 buf[0] = 0x20;
3713 usb_microdia_control_write(dev, 0x118c, buf, 1);
3715 buf[0] = 0x20;
3716 usb_microdia_control_write(dev, 0x118d, buf, 1);
3718 buf[0] = 0x20;
3719 usb_microdia_control_write(dev, 0x118e, buf, 1);
3721 buf[0] = 0x20;
3722 usb_microdia_control_write(dev, 0x118f, buf, 1);
3724 buf[0] = 0x0a;
3725 usb_microdia_control_write(dev, 0x118b, buf, 1);
3727 usb_microdia_control_write(dev, 0x1190, urb119, 17);
3729 for (i = 0; i < 9; i++) // URB 120-128
3730 usb_microdia_control_write(dev, 0x10e1, urb120, 21);
3733 buf[0] = 0x07;
3734 usb_microdia_control_write(dev, 0x10f7, buf, 1);
3736 buf[0] = 0x60;
3737 usb_microdia_control_write(dev, 0x10f6, buf, 1); // URB 130
3739 usb_microdia_control_write(dev, 0x10e1, urb120, 21);
3741 buf[0] = 0x14;
3742 usb_microdia_control_write(dev, 0x10f8, buf, 1);
3744 buf[0] = 0xff;
3745 usb_microdia_control_write(dev, 0x10fa, buf, 1);
3747 buf[0] = 0x00;
3748 usb_microdia_control_write(dev, 0x10f9, buf, 1);
3750 buf[0] = 0x00;
3751 usb_microdia_control_write(dev, 0x10f9, buf, 1);
3753 buf[0] = 0x0e;
3754 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3756 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00;
3757 usb_microdia_control_write(dev, 0x11bc, buf, 4);
3759 /* Set whole buf to 0x00 */
3760 memset(buf, 0, 48);
3761 usb_microdia_control_write(dev, 0x11c0, buf, 48);
3763 buf[0] = 0x20;
3764 usb_microdia_control_write(dev, 0x118c, buf, 1);
3766 buf[0] = 0x20;
3767 usb_microdia_control_write(dev, 0x118d, buf, 1); // URB 140
3769 buf[0] = 0x20;
3770 usb_microdia_control_write(dev, 0x118e, buf, 1);
3772 buf[0] = 0x20;
3773 usb_microdia_control_write(dev, 0x118f, buf, 1);
3775 buf[0] = 0x2d; buf[1] = 0x2d; buf[2] = 0x3a;
3776 buf[3] = 0x05; buf[4] = 0x04; buf[5] = 0x3f;
3777 usb_microdia_control_write(dev, 0x11a5, buf, 6);
3779 buf[0] = 0x28; buf[1] = 0xd8; buf[2] = 0x14; buf[3] = 0xec;
3780 usb_microdia_control_write(dev, 0x11af, buf, 4);
3782 buf[0] = 0x32; buf[1] = 0xdd; buf[2] = 0x2d; buf[3] = 0xdd;
3783 usb_microdia_control_write(dev, 0x11b3, buf, 4);
3785 buf[0] = 0x07;
3786 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3788 buf[0] = 0x01;
3789 usb_microdia_control_write(dev, 0x1061, buf, 1);
3791 buf[0] = 0x27;
3792 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3794 usb_microdia_control_write(dev, 0x1100, qtable1, 64);
3796 usb_microdia_control_write(dev, 0x1140, qtable2, 64); // URB 150
3798 buf[0] = 0x07;
3799 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3801 buf[0] = 0x03;
3802 usb_microdia_control_write(dev, 0x1061, buf, 1);
3804 buf[0] = 0x0b;
3805 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3807 buf[0] = 0x8c;
3808 usb_microdia_control_write(dev, 0x1189, buf, 1);
3810 buf[0] = 0x00;
3811 usb_microdia_control_write(dev, 0x11bc, buf, 1);
3813 buf[0] = 0x00;
3814 usb_microdia_control_write(dev, 0x11bd, buf, 1);
3816 buf[0] = 0x00;
3817 usb_microdia_control_write(dev, 0x11be, buf, 1);
3819 buf[0] = 0x00;
3820 usb_microdia_control_write(dev, 0x11bf, buf, 1);
3822 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, // URB 159-160
3823 second10c0b[0], dev->sensor_flags, &second10c0b[1]);
3825 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0,
3826 second10c0c[0], dev->sensor_flags, &second10c0c[1]);
3828 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
3829 second10c0d[0][0], dev->sensor_flags, &second10c0d[0][1]);
3831 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
3832 second10c0d[1][0], dev->sensor_flags, &second10c0d[1][1]);
3834 buf[0] = 0x3c; buf[1] = 0x00; buf[2] = 0x0b;
3835 buf[3] = 0x00; buf[4] = 0x28; buf[5] = 0x3c;
3836 usb_microdia_control_write(dev, 0x1180, buf, 6);
3838 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00;
3839 buf[3] = 0xf0; buf[4] = 0x00;
3840 usb_microdia_control_write(dev, 0x10fb, buf, 5);
3842 buf[0] = 0x8c;
3843 usb_microdia_control_write(dev, 0x1189, buf, 1);
3845 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
3846 usb_microdia_control_write(dev, 0x11a1, buf, 4); // URB 170
3848 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
3849 usb_microdia_control_write(dev, 0x11ab, buf, 4);
3851 buf[0] = 0x03;
3852 usb_microdia_control_write(dev, 0x1061, buf, 1);
3854 buf[0] = 0x0e;
3855 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3857 buf[0] = 0x00;
3858 usb_microdia_control_write(dev, 0x11b9, buf, 1);
3860 buf[0] = 0x0f;
3861 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3863 buf[0] = 0x01;
3864 usb_microdia_control_write(dev, 0x1061, buf, 1);
3866 buf[0] = 0x7c;
3867 usb_microdia_control_write(dev, 0x1000, buf, 1);
3869 buf[0] = 0x1c;
3870 usb_microdia_control_write(dev, 0x1002, buf, 1);
3872 buf[0] = 0x1c;
3873 usb_microdia_control_write(dev, 0x1002, buf, 1);
3875 buf[0] = 0x7a;
3876 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 180
3878 buf[0] = 0x05;
3879 usb_microdia_control_write(dev, 0x118a, buf, 1);
3881 buf[0] = 0x05;
3882 usb_microdia_control_write(dev, 0x0395, buf, 1);
3884 buf[0] = 0x78;
3885 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3886 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3888 buf[0] = 0xf9;
3889 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3890 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3892 buf[0] = 0x7a;
3893 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3894 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3896 buf[0] = 0x7b;
3897 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3898 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 190
3900 buf[0] = 0x7c;
3901 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3902 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3904 buf[0] = 0x7d;
3905 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3906 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3908 buf[0] = 0xfe;
3909 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3910 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3912 buf[0] = 0x7f;
3913 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3914 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3916 buf[0] = 0x7a;
3917 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3919 for (i = 0; i < 3; i++) // URB 200-205
3920 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
3921 third10c0a[i][0], dev->sensor_flags, &third10c0a[i][1]);
3923 for (i = 0; i < 4; i++) // URB 206-225
3924 sn9c20x_read_i2c_data(dev, dev->sensor_slave_address,
3925 1, read10c0[i], dev->sensor_flags, buf);
3927 buf[0] = 0x03;
3928 usb_microdia_control_write(dev, 0x1061, buf, 1);
3930 buf[0] = 0xa0;
3931 usb_microdia_control_write(dev, 0x1007, buf, 1);
3933 buf[0] = 0x80;
3934 usb_microdia_control_write(dev, 0x1006, buf, 1);
3936 return 0;
3939 int microdia_624f_start_stream(struct usb_microdia *dev)
3941 int ret, i;
3942 __u8 last_11b8[1];
3943 __u8 eeprom_slave_id = 0x50;
3944 __u8 eeprom_flags = SN9C20X_I2C_2WIRE;
3945 __u16 command;
3946 __u8 buf[64];
3947 __u8 unknown1[9] = { dev->sensor_flags, dev->sensor_slave_address,
3948 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
3950 buf[0] = 0x20;
3951 command = 0x1007;
3952 ret = usb_microdia_control_write(dev, command, buf, 1);
3953 if(ret < 0) goto err;
3955 buf[0] = 0x00;
3956 command = 0x1006;
3957 ret = usb_microdia_control_write(dev, command, buf, 1);
3958 if(ret < 0) goto err;
3960 buf[0] = 0x78;
3961 command = 0x1000;
3962 ret = usb_microdia_control_write(dev, command, buf, 1);
3963 if(ret < 0) goto err;
3965 buf[0] = 0xc7;
3966 command = 0x1001;
3967 ret = usb_microdia_control_write(dev, command, buf, 1);
3968 if(ret < 0) goto err;
3970 buf[0] = 0x1c;
3971 command = 0x1002;
3972 ret = usb_microdia_control_write(dev, command, buf, 1);
3973 if(ret < 0) goto err;
3975 buf[0] = 0x01;
3976 command = 0x1061;
3977 ret = usb_microdia_control_write(dev, command, buf, 1);
3978 if(ret < 0) goto err;
3980 buf[0] = 0x80;
3981 command = 0x1020;
3982 ret = usb_microdia_control_write(dev, command, buf, 1);
3983 if(ret < 0) goto err;
3985 buf[0] = 0x40; buf[1] = 0x30; buf[2] = 0x20;
3986 buf[3] = 0x10; buf[4] = 0x08;
3987 command = 0x1067;
3988 ret = usb_microdia_control_write(dev, command, buf, 5);
3989 if(ret < 0) goto err;
3991 /* this is the same register as the I2C write, not sure why
3992 * we're writing 9 bytes -- the SN9C102 docs say all writes
3993 * must be 8 bytes, but we don't have docs for SN9C20x */
3994 command = 0x10c0;
3995 ret = usb_microdia_control_write(dev, command, unknown1, 9);
3996 if(ret < 0) goto err;
3998 buf[0] = 0x44; buf[1] = 0x18; buf[2] = 0x00; buf[3] = 0x30;
3999 buf[4] = 0x00; buf[5] = 0x09; buf[6] = 0x00; buf[7] = 0xed;
4000 buf[8] = 0x0f; buf[9] = 0xda; buf[10] = 0x0f; buf[11] = 0x3a;
4001 buf[12] = 0x00; buf[13] = 0x3a; buf[14] = 0x00; buf[15] = 0xd0;
4002 buf[16] = 0x0f; buf[17] = 0xf7; buf[18] = 0x0f; buf[19] = 0x00;
4003 buf[20] = 0x00; buf[21] = 0x00; buf[22] = 0x60; buf[23] = 0x0a;
4004 command = 0x10e0;
4005 ret = usb_microdia_control_write(dev, command, buf, 24);
4006 if(ret < 0) goto err;
4008 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00;
4009 command = 0x10f8;
4010 ret = usb_microdia_control_write(dev, command, buf, 3);
4011 if(ret < 0) goto err;
4013 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00;
4014 buf[3] = 0xf0; buf[4] = 0x00;
4015 command = 0x10fb;
4016 ret = usb_microdia_control_write(dev, command, buf, 5);
4017 if(ret < 0) goto err;
4019 buf[0] = 0x87; buf[1] = 0xcc; buf[2] = 0x08;
4020 command = 0x1188;
4021 ret = usb_microdia_control_write(dev, command, buf, 3);
4022 if(ret < 0) goto err;
4024 buf[0] = 0x00; buf[1] = 0x20; buf[2] = 0x20; buf[3] = 0x20;
4025 buf[4] = 0x20; buf[5] = 0x00; buf[6] = 0x24; buf[7] = 0x3b;
4026 buf[8] = 0x4f; buf[9] = 0x61; buf[10] = 0x71; buf[11] = 0x80;
4027 buf[12] = 0x8f; buf[13] = 0x9d; buf[14] = 0xab; buf[15] = 0xb8;
4028 buf[16] = 0xc4; buf[17] = 0xd1; buf[18] = 0xdd; buf[19] = 0xe9;
4029 buf[20] = 0xf4; buf[21] = 0xff;
4030 command = 0x118b;
4031 ret = usb_microdia_control_write(dev, command, buf, 22);
4032 if(ret < 0) goto err;
4034 buf[0] = 0x00; buf[1] = 0x00;
4035 command = 0x11a1;
4036 ret = usb_microdia_control_write(dev, command, buf, 2);
4037 if(ret < 0) goto err;
4039 buf[0] = 0x60; buf[1] = 0x20; buf[2] = 0x00; buf[3] = 0x08;
4040 buf[4] = 0x00; buf[5] = 0x40; buf[6] = 0x01; buf[7] = 0xf0;
4041 buf[8] = 0x00;
4042 command = 0x11b7;
4043 ret = usb_microdia_control_write(dev, command, buf, 9);
4044 if(ret < 0) goto err;
4046 buf[0] = 0x30;
4047 command = 0x11b8;
4048 ret = usb_microdia_control_write(dev, command, buf, 1);
4049 if(ret < 0) goto err;
4051 buf[0] = 0x78;
4052 command = 0x1000;
4053 ret = usb_microdia_control_write(dev, command, buf, 1);
4054 if(ret < 0) goto err;
4056 /* reset all SCCB registers to their default values */
4057 buf[0] = OV965X_COM7_SCCB_RESET;
4058 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_COM7,
4059 dev->sensor_flags, buf);
4060 if(ret < 0) goto err;
4062 buf[0] = 0x7f; //0x7f; /* AGC setting */
4063 buf[1] = 0xe0; /* blue gain setting */
4064 buf[2] = 0x90; /* red gain setting */
4065 buf[3] = OV965X_VREF_VSTOP_LOW3(0x04) | OV965X_VREF_VSTART_LOW3(0x02);
4066 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_GAIN,
4067 dev->sensor_flags, buf);
4068 if(ret < 0) goto err;
4071 this write appears to be unnecessary since we issued
4072 the reset above and the spec says that 0x00 is the default
4073 for all 4 of the registers we're writing to here
4075 memset(buf, 0, 4);
4076 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_COM1,
4077 dev->sensor_flags, buf);
4078 if(ret < 0) goto err;
4080 /* first byte still 0, not sure why, RAVE default is 0x00 too */
4081 buf[0] = 0;
4082 buf[1] = OV965X_COM2_OUTPUT_DRIVE_CAP_2X;
4083 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, OV965X_CTL_RAVE,
4084 dev->sensor_flags, buf);
4085 if(ret < 0) goto err;
4087 buf[0] = 0x00; buf[1] = 0x00;
4088 /* not sure why we're setting bit 5 below, spec says it's reserved */
4089 buf[2] = OV965X_COM5_15FPS_48MHZ_RGB | 0x20;
4090 /* likewise, spec says 4 & 6 are reserved */
4091 buf[3] = OV965X_COM6_TIMING_RESET_ON_FMT_CHANGE | 0x50;
4092 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_COM3,
4093 dev->sensor_flags, buf);
4094 if(ret < 0) goto err;
4096 buf[0] = 0xff; /* AEC bits 2-9 */
4097 buf[1] = OV965X_CLKRC_INPUT_CLK_NO_SCALE;
4098 buf[2] = OV965X_COM7_OUTPUT_RAW_RGB;
4099 buf[3] = OV965X_COM8_FAST_AGC_AEC | OV965X_COM8_AEC_STEP_SIZE_NOLIMIT |
4100 /*OV965X_COM8_AGC_ENABLE |*/ OV965X_COM8_AEC_ENABLE | OV965X_COM8_AWB_ENABLE;
4101 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_AECH,
4102 dev->sensor_flags, buf);
4103 if(ret < 0) goto err;
4105 buf[0] = OV965X_COM9_MAX_AGC_8X | OV965X_COM9_RELAX_EXPOSURE_TIMING |
4106 OV965X_COM9_DROP_VSYNC_ON_FRAME_DROP |
4107 OV965X_COM9_DROP_FRAME_ON_BIG_AEC;
4108 buf[1] = 0x00;
4109 buf[2] = 0x07; /* hmm, spec says this is reserved */
4110 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 3, OV965X_CTL_COM9,
4111 dev->sensor_flags, buf);
4112 if(ret < 0) goto err;
4114 /* this is supposed to be reserved too */
4115 buf[0] = 0x04; buf[1] = 0x00;
4116 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, OV965X_CTL_MVFP,
4117 dev->sensor_flags, buf);
4118 if(ret < 0) goto err;
4120 buf[0] = 0x78; /* this is the default! */
4121 buf[1] = 0x68; /* this is the default! */
4122 buf[2] = 0xd4; /* this is the default! */
4123 buf[3] = 0x80; /* this is the default! */
4124 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_AEW,
4125 dev->sensor_flags, buf);
4126 if(ret < 0) goto err;
4128 buf[0] = OV965X_BIAS_SUBTRACT;
4129 buf[1] = OV965X_Gr_COM_BYPASS_ANALOG_BLC | OV965X_Gr_COM_BYPASS_REGULATOR;
4130 buf[2] = 0x00; buf[3] = 0x00;
4131 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_GbBIAS,
4132 dev->sensor_flags, buf);
4133 if(ret < 0) goto err;
4135 buf[0] = OV965X_BIAS_SUBTRACT;
4136 buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00;
4137 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_RBIAS,
4138 dev->sensor_flags, buf);
4139 if(ret < 0) goto err;
4141 buf[0] = 0x08; /* HSYNC rising edge start */
4142 buf[1] = 0x30; /* HSYNC rising edge end */
4143 buf[2] = OV965X_HREF_EDGE_OFT_TO_DATA_OUT(2) | OV965X_HREF_HSTART_LOW3(6)
4144 | OV965X_HREF_HSTOP_LOW3(4);
4145 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 3, OV965X_CTL_HSYST,
4146 dev->sensor_flags, buf);
4147 if(ret < 0) goto err;
4149 /* the docs say all 4 of these bytes are reserved */
4150 buf[0] = 0xe2; buf[1] = 0xbf; buf[2] = 0x81; buf[3] = 0xf9;
4151 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_CHLF,
4152 dev->sensor_flags, buf);
4153 if(ret < 0) goto err;
4155 /* the docs say these 2 bytes are reserved */
4156 buf[0] = 0x00; buf[1] = 0x93;
4157 buf[2] = 0x50; /* bits 4 and 6 are supposedly reserved */
4158 buf[3] = OV965X_TSLB_OUTPUT_SEQ_UYVY | OV965X_TSLB_DIGITAL_BLC_ENABLE;
4159 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_ADC,
4160 dev->sensor_flags, buf);
4161 if(ret < 0) goto err;
4163 buf[0] = OV965X_COM11_MANUAL_BANDING_FILTER;
4164 buf[1] = 0x73; /* these bits all reserved */
4165 buf[2] = OV965X_COM13_ENABLE_COLOR_MATRIX | OV965X_COM13_DELAY_Y_CHANNEL
4166 | OV965X_COM13_OUTPUT_DELAY(1);
4167 buf[3] = OV965X_COM14_YUV_EDGE_ENHANCE
4168 | OV965X_COM14_EDGE_ENHANCE_FACTOR_DBL
4169 | 0x0b; /* these last bits supposedly reserved */
4170 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_COM11,
4171 dev->sensor_flags, buf);
4172 if(ret < 0) goto err;
4174 buf[0] = OV965X_EDGE_EDGE_ENHANCE_LOW4(8)
4175 | OV965X_EDGE_EDGE_ENHANCE_FACTOR(8);
4176 buf[1] = OV965X_COM15_OUTPUT_RANGE_O0_TO_FF | 0x01; /* bit reserved */
4177 buf[2] = 0x00; buf[3] = 0x08; /* this bit supposedly reserved */
4178 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_EDGE,
4179 dev->sensor_flags, buf);
4180 if(ret < 0) goto err;
4182 buf[0] = 0x00;
4183 /* OV9653 control register 0x43 is reserved, according to the docs */
4184 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0x43,
4185 dev->sensor_flags, buf); // 'Dummy'-write
4186 if(ret < 0) goto err;
4188 buf[0] = 0x80; buf[1] = 0x80; buf[2] = 0x40; buf[3] = 0x00;
4189 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_MANU,
4190 dev->sensor_flags, buf);
4191 if(ret < 0) goto err;
4193 buf[0] = 0x0a;
4194 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_DBLV,
4195 dev->sensor_flags, buf);
4196 if(ret < 0) goto err;
4198 buf[0] = 0x06; buf[1] = 0x20; buf[2] = 0x00; buf[3] = 0x00;
4199 /* OV9653 control register 0x8b is reserved, according to the docs */
4200 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x8b,
4201 dev->sensor_flags, buf);
4202 if(ret < 0) goto err;
4204 buf[0] = 0xdf;
4205 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_DBLC1,
4206 dev->sensor_flags, buf);
4207 if(ret < 0) goto err;
4209 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x88; buf[3] = 0x88;
4210 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_DM_LNL,
4211 dev->sensor_flags, buf);
4212 if(ret < 0) goto err;
4214 buf[0] = 0x04;
4215 /* control reg 0x96 reserved, according to docs */
4216 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, 0x96,
4217 dev->sensor_flags, buf);
4218 if(ret < 0) goto err;
4220 buf[0] = 0x80;
4221 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_COM26,
4222 dev->sensor_flags, buf);
4223 if(ret < 0) goto err;
4225 buf[0] = 0x80; buf[1] = 0xb8; buf[2] = 0x92; buf[3] = 0x0a;
4226 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_ACOM2,
4227 dev->sensor_flags, buf);
4228 if(ret < 0) goto err;
4230 /* reserved, according to docs */
4231 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0xac,
4232 dev->sensor_flags, NULL);
4233 if(ret < 0) goto err;
4235 buf[0] = 0x1b; buf[1] = 0xbb; buf[2] = 0x05; buf[3] = 0x7d;
4236 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_HSTART,
4237 dev->sensor_flags, buf);
4238 if(ret < 0) goto err;
4240 buf[0] = 0x00;
4241 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_PSHIFT,
4242 dev->sensor_flags, buf);
4243 if(ret < 0) goto err;
4245 /* now for some reason it switches to these two reads and
4246 * then back to the long init sequence */
4247 command = 0x10c1;
4248 ret = usb_microdia_control_read(dev, command, buf, 1); /* reads 30 */
4249 if(ret < 0) goto err;
4250 //msg("Should read 0x30, read: %x", buf[0]);
4252 command = 0x10c1;
4253 buf[0] = eeprom_slave_id;
4254 ret = usb_microdia_control_write(dev, command, buf, 1);
4255 if(ret < 0) goto err;
4257 // TRY TO READ FROM EEPROM:
4258 ret = sn9c20x_read_i2c_data(dev, eeprom_slave_id, 1, 0x00, eeprom_flags, buf);
4259 if (ret < 0)
4261 UDIA_INFO("No EEPROM found\n");
4263 else
4265 UDIA_INFO("Read from EEPROM successful\n");
4266 /* returns 0xff -- don't know what we're supposed to do w/ that info */
4267 //msg("Read from eeprom, should read 0xff, read: %x", buf[0]);
4270 command = 0x10c1;
4271 buf[0] = dev->sensor_slave_address;
4272 ret = usb_microdia_control_write(dev, command, buf, 1);
4273 if(ret < 0) goto err;
4275 command = 0x10e0;
4276 buf[0] = 0x47;
4277 ret = usb_microdia_control_write(dev, command, buf, 1);
4278 if(ret < 0) goto err;
4280 command = 0x10e0;
4281 buf[0] = 0x07;
4282 ret = usb_microdia_control_write(dev, command, buf, 1);
4283 if(ret < 0) goto err;
4285 command = 0x1001;
4286 buf[0] = 0xc6;
4287 ret = usb_microdia_control_write(dev, command, buf, 1);
4288 if(ret < 0) goto err;
4290 command = 0x1001;
4291 buf[0] = 0xc4;
4292 ret = usb_microdia_control_write(dev, command, buf, 1);
4293 if(ret < 0) goto err;
4295 command = 0x1001;
4296 buf[0] = 0x44;
4297 ret = usb_microdia_control_write(dev, command, buf, 1);
4298 if(ret < 0) goto err;
4300 command = 0x1189;
4301 buf[0] = 0x8c;
4302 ret = usb_microdia_control_write(dev, command, buf, 1);
4303 if(ret < 0) goto err;
4305 command = 0x11bc;
4306 buf[0] = 0x40;
4307 ret = usb_microdia_control_write(dev, command, buf, 1);
4308 if (ret < 0) goto err;
4310 command = 0x11bd;
4311 buf[0] = 0x01;
4312 ret = usb_microdia_control_write(dev, command, buf, 1);
4313 if (ret < 0) goto err;
4315 command = 0x11be;
4316 buf[0] = 0xf0;
4317 ret = usb_microdia_control_write(dev, command, buf, 1);
4318 if (ret < 0) goto err;
4320 command = 0x11bf;
4321 buf[0] = 0x00;
4322 ret = usb_microdia_control_write(dev, command, buf, 1);
4323 if (ret < 0) goto err;
4325 buf[0] = 0x45;
4326 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_COM7,
4327 dev->sensor_flags, buf);
4328 if(ret < 0) goto err;
4330 buf[0] = 0x36;
4331 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_VREF,
4332 dev->sensor_flags, buf);
4333 if(ret < 0) goto err;
4335 buf[0] = 0x24; buf[1] = 0xc5; buf[2] = 0x00; buf[3] = 0x3c;
4336 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_HSTART,
4337 dev->sensor_flags, buf);
4338 if(ret < 0) goto err;
4340 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, OV965X_CTL_PSHIFT,
4341 dev->sensor_flags, NULL);
4342 if(ret < 0) goto err;
4344 buf[0] = 0x84;
4345 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_HREF,
4346 dev->sensor_flags, buf);
4347 if(ret < 0) goto err;
4349 command = 0x1180;
4350 buf[0] = 0x02; buf[1] = 0x00; buf[2] = 0x07; buf[3] = 0x00;
4351 buf[4] = 0x28; buf[5] = 0x3c;
4352 ret = usb_microdia_control_write(dev, command, buf, 6);
4353 if(ret < 0) goto err;
4355 command = 0x10fb;
4356 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0;
4357 buf[4] = 0x00;
4358 ret = usb_microdia_control_write(dev, command, buf, 5);
4359 if(ret < 0) goto err;
4361 command = 0x1189;
4362 buf[0] = 0x8c;
4363 ret = usb_microdia_control_write(dev, command, buf, 1);
4364 if(ret < 0) goto err;
4366 command = 0x11a1;
4367 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
4368 ret = usb_microdia_control_write(dev, command, buf, 4);
4369 if(ret < 0) goto err;
4371 command = 0x11ab;
4372 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
4373 ret = usb_microdia_control_write(dev, command, buf, 4);
4374 if(ret < 0) goto err;
4376 command = 0x1000;
4377 buf[0] = 0x78;
4378 ret = usb_microdia_control_write(dev, command, buf, 1);
4379 if(ret < 0) goto err;
4381 command = 0x1002;
4382 buf[0] = 0x18;
4383 ret = usb_microdia_control_write(dev, command, buf, 1);
4384 if(ret < 0) goto err;
4386 command = 0x1002;
4387 buf[0] = 0x18;
4388 ret = usb_microdia_control_write(dev, command, buf, 1);
4389 if(ret < 0) goto err;
4391 /* urb 297 */
4392 command = 0x11b8;
4393 buf[0] = 0x38;
4394 ret = usb_microdia_control_write(dev, command, buf, 1);
4395 if(ret < 0) goto err;
4397 command = 0x118a;
4398 buf[0] = 0x04;
4399 ret = usb_microdia_control_write(dev, command, buf, 1);
4400 if(ret < 0) goto err;
4402 command = 0x0395;
4403 buf[0] = 0x04;
4404 ret = usb_microdia_control_write(dev, command, buf, 1);
4405 if(ret < 0) goto err;
4407 command = 0x11b8;
4408 buf[0] = 0x78;
4409 ret = usb_microdia_control_write(dev, command, buf, 1);
4410 if(ret < 0) goto err;
4411 ret = usb_microdia_control_read(dev, command, buf, 1); // 0x38
4412 if(ret < 0) goto err;
4413 if (buf[0] == 0x38)
4414 buf[0] = 0x79;
4415 else if (buf[0] == 0xb8)
4416 buf[0] = 0xf9;
4417 ret = usb_microdia_control_write(dev, command, buf, 1);
4418 if(ret < 0) goto err;
4419 ret = usb_microdia_control_read(dev, command, buf, 1); // 0x39
4420 if(ret < 0) goto err;
4421 if (buf[0] == 0x39)
4422 buf[0] = 0x7a;
4423 else if (buf[0] == 0xb9)
4424 buf[0] = 0xfa;
4425 ret = usb_microdia_control_write(dev, command, buf, 1);
4426 if(ret < 0) goto err;
4427 ret = usb_microdia_control_read(dev, command, buf, 1); // 0x3a
4428 if(ret < 0) goto err;
4429 if (buf[0] == 0x3a)
4430 buf[0] = 0x7b;
4431 else if (buf[0] == 0xba)
4432 buf[0] = 0xfb;
4433 ret = usb_microdia_control_write(dev, command, buf, 1);
4434 if(ret < 0) goto err;
4435 ret = usb_microdia_control_read(dev, command, buf, 1); // 0x3b
4436 if(ret < 0) goto err;
4437 if (buf[0] == 0x3b)
4438 buf[0] = 0x7c;
4439 else if (buf[0] == 0xbb)
4440 buf[0] = 0xfc;
4441 ret = usb_microdia_control_write(dev, command, buf, 1);
4442 if(ret < 0) goto err;
4443 ret = usb_microdia_control_read(dev, command, buf, 1); // 0x3c
4444 if(ret < 0) goto err;
4445 last_11b8[0] = buf[0];
4446 buf[0] = last_11b8[0] & 0xf0; // 0xf0 or 0x70
4447 buf[0] = buf[0] | 0x0a; // => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 5 READS/WRITES
4448 ret = usb_microdia_control_write(dev, command, buf, 1);
4449 if(ret < 0) goto err;
4451 buf[0] = 0x80;
4452 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_CLKRC,
4453 dev->sensor_flags, buf);
4454 if(ret < 0) goto err;
4456 /* urb 331 */
4457 buf[0] = 0x00;
4458 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_EXHCH,
4459 dev->sensor_flags, buf);
4460 if(ret < 0) goto err;
4462 buf[0] = 0x00;
4463 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_EXHCL,
4464 dev->sensor_flags, buf);
4465 if(ret < 0) goto err;
4467 buf[0] = 0x00;
4468 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_DM_LNL,
4469 dev->sensor_flags, buf);
4470 if(ret < 0) goto err;
4472 /* urb 347 */
4473 buf[0] = 0x00;
4474 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_DM_LNH,
4475 dev->sensor_flags, buf);
4476 if(ret < 0) goto err;
4478 buf[0] = 0x04;
4479 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_MVFP,
4480 dev->sensor_flags, buf);
4481 if(ret < 0) goto err;
4483 /* is it really necessary to do this same write again?; 627f does this, too */
4484 buf[0] = 0x04;
4485 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_MVFP,
4486 dev->sensor_flags, buf);
4487 if(ret < 0) goto err;
4489 /* urb 365 */
4490 command = 0x1182;
4491 buf[0] = 0x07;
4492 ret = usb_microdia_control_write(dev, command, buf, 1);
4493 if(ret < 0) goto err;
4495 buf[0] = 0x7c;
4496 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_AECH,
4497 dev->sensor_flags, buf);
4498 if(ret < 0) goto err;
4500 buf[0] = 0x03;
4501 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_COM1,
4502 dev->sensor_flags, buf);
4503 if(ret < 0) goto err;
4505 /* urb 379 */
4506 buf[0] = 0x00;
4507 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_AECHM,
4508 dev->sensor_flags, buf);
4509 if(ret < 0) goto err;
4511 buf[0] = 0x00;
4512 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_ADVFL,
4513 dev->sensor_flags, buf);
4514 if(ret < 0) goto err;
4516 /* urb 391 */
4517 buf[0] = 0x00;
4518 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_ADVFH,
4519 dev->sensor_flags, buf);
4520 if(ret < 0) goto err;
4522 /* urb 397 */
4523 buf[0] = 0x00;
4524 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_GAIN,
4525 dev->sensor_flags, buf);
4526 if(ret < 0) goto err;
4528 /* urb 403 */
4529 buf[0] = 0x78; /*buf[1] = 0x78;*/
4530 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_BLUE,
4531 dev->sensor_flags, buf);
4532 if(ret < 0) goto err;
4533 /* urb 409 */
4534 buf[0] = 0x78;
4535 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_RED,
4536 dev->sensor_flags, buf);
4537 if(ret < 0) goto err;
4538 // 627f does the last two writes at once (2 byte write to OV965X_CTL_BLUE)
4540 command = 0x118c;
4541 buf[0] = 0x20;
4542 ret = usb_microdia_control_write(dev, command, buf, 1);
4543 if(ret < 0) goto err;
4545 command = 0x118d;
4546 buf[0] = 0x20;
4547 ret = usb_microdia_control_write(dev, command, buf, 1);
4548 if(ret < 0) goto err;
4550 command = 0x118e;
4551 buf[0] = 0x20;
4552 ret = usb_microdia_control_write(dev, command, buf, 1);
4553 if(ret < 0) goto err;
4555 command = 0x118f;
4556 buf[0] = 0x20;
4557 ret = usb_microdia_control_write(dev, command, buf, 1);
4558 if(ret < 0) goto err;
4560 /* urb 423 */
4561 command = 0x11ba;
4562 buf[0] = 0x0a;
4563 ret = usb_microdia_control_write(dev, command, buf, 1);
4564 if(ret < 0) goto err;
4566 command = 0x118c;
4567 buf[0] = 0x20;
4568 ret = usb_microdia_control_write(dev, command, buf, 1);
4569 if(ret < 0) goto err;
4571 /* urb 427 */
4572 buf[0] = 0x20;
4573 command = 0x118d;
4574 ret = usb_microdia_control_write(dev, command, buf, 1);
4575 if(ret < 0) goto err;
4577 buf[0] = 0x20;
4578 command = 0x118e;
4579 ret = usb_microdia_control_write(dev, command, buf, 1);
4580 if(ret < 0) goto err;
4582 buf[0] = 0x20;
4583 command = 0x118f;
4584 ret = usb_microdia_control_write(dev, command, buf, 1);
4585 if(ret < 0) goto err;
4587 if (dev->webcam_model == CAMERA_MODEL(USB_0C45_VID, USB_627F_PID))
4588 buf[0] = 0x0e;
4589 else // 624f
4590 buf[0] = 0x00;
4591 command = 0x118b;
4592 ret = usb_microdia_control_write(dev, command, buf, 1);
4593 if(ret < 0) goto err;
4595 /* urb 435 */
4596 /* Gamma control? */
4597 command = 0x1190;
4598 if (dev->webcam_model == CAMERA_MODEL(USB_0C45_VID, USB_627F_PID))
4600 buf[0] = 0x08; buf[1] = 0x23; buf[2] = 0x37; buf[3] = 0x48;
4601 buf[4] = 0x59; buf[5] = 0x68; buf[6] = 0x77; buf[7] = 0x85;
4602 buf[8] = 0x93; buf[9] = 0xa1; buf[10] = 0xae; buf[11] = 0xba;
4603 buf[12] = 0xc7; buf[13] = 0xd3; buf[14] = 0xe0; buf[15] = 0xeb;
4604 buf[16] = 0xf7;
4606 else // 624f
4608 /*buf[0] = 0x0a; buf[1] = 0x37; buf[2] = 0x58; buf[3] = 0x70;
4609 buf[4] = 0x81; buf[5] = 0x8f; buf[6] = 0x9c; buf[7] = 0xa9;
4610 buf[8] = 0xb5; buf[9] = 0xbe; buf[10] = 0xc8; buf[11] = 0xd1;
4611 buf[12] = 0xda; buf[13] = 0xe2; buf[14] = 0xec; buf[15] = 0xf0;
4612 buf[16] = 0xf5;*/
4614 /* Old one */
4615 buf[0] = 0x00; buf[1] = 0x2a; buf[2] = 0x42; buf[3] = 0x56;
4616 buf[4] = 0x67; buf[5] = 0x78; buf[6] = 0x87; buf[7] = 0x95;
4617 buf[8] = 0xa2; buf[9] = 0xaf; buf[10] = 0xbc; buf[11] = 0xc8;
4618 buf[12] = 0xd4; buf[13] = 0xdf; buf[14] = 0xea; buf[15] = 0xf5;
4619 buf[16] = 0xff;
4621 ret = usb_microdia_control_write(dev, command, buf, 17);
4622 if(ret < 0) goto err;
4624 if (dev->webcam_model == CAMERA_MODEL(USB_0C45_VID, USB_627F_PID))
4626 buf[0] = 0xf3; buf[1] = 0x0f; buf[2] = 0xf3; buf[3] = 0x0f;
4627 buf[4] = 0x0f; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00;
4628 buf[8] = 0x00; buf[9] = 0x00; buf[10] = 0x00; buf[11] = 0x00;
4629 buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00; buf[15] = 0x00;
4630 buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x0c; buf[19] = 0x00;
4631 buf[20] = 0x00;
4633 else // 624f
4634 memset(buf, 0, 21);
4635 command = 0x10e1;
4636 for(i = 0; i < 8; i++)
4637 ret = usb_microdia_control_write(dev, command, buf, 21);
4639 if (dev->webcam_model == CAMERA_MODEL(USB_0C45_VID, USB_627F_PID))
4641 buf[0] = 0x0f; buf[1] = 0x00; buf[2] = 0x15; buf[3] = 0x00;
4642 buf[4] = 0x1a; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00;
4643 buf[8] = 0x00; buf[9] = 0x00; buf[10] = 0x00; buf[11] = 0x00;
4644 buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00; buf[15] = 0x00;
4645 buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x0c; buf[19] = 0x00;
4646 buf[20] = 0x00;
4648 else // 624f
4650 /* urb 453 */
4651 buf[0] = 0x15; buf[2] = 0x29;
4653 ret = usb_microdia_control_write(dev, command, buf, 21);
4654 if (ret < 0) goto err;
4656 command = 0x10f7;
4657 buf[0] = 0x05;
4658 ret = usb_microdia_control_write(dev, command, buf, 1);
4659 if(ret < 0) goto err;
4661 command = 0x10f6; // picture sharpness
4662 if (dev->webcam_model == CAMERA_MODEL(USB_0C45_VID, USB_627F_PID))
4663 buf[0] = 0x80;
4664 else // 624f
4665 buf[0] = 0x00; // 624f-log: 0xc0 !
4666 ret = usb_microdia_control_write(dev, command, buf, 1);
4667 if(ret < 0) goto err;
4669 /* urb 459 */
4670 command = 0x10e1;
4671 if (dev->webcam_model == CAMERA_MODEL(USB_0C45_VID, USB_627F_PID))
4673 buf[0] = 0x0f; buf[1] = 0x00; buf[2] = 0x15; buf[3] = 0x00;
4674 buf[4] = 0x1a; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00;
4675 buf[8] = 0x00; buf[9] = 0x00; buf[10] = 0x00; buf[11] = 0x00;
4676 buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00; buf[15] = 0x00;
4677 buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x0c; buf[19] = 0x00;
4678 buf[20] = 0x00;
4680 else // 624f
4682 memset(buf, 0, 21);
4683 buf[0] = 0x15; buf[2] = 0x29; buf [4] = 0x08;
4685 ret = usb_microdia_control_write(dev, command, buf, 21);
4686 if(ret < 0) goto err;
4688 command = 0x10f8;
4689 buf[0] = 0x14;
4690 ret = usb_microdia_control_write(dev, command, buf, 1);
4691 if(ret < 0) goto err;
4693 /* urb 463 */
4694 command = 0x10fa;
4695 buf[0] = 0xff;
4696 ret = usb_microdia_control_write(dev, command, buf, 1);
4697 if(ret < 0) goto err;
4699 command = 0x10f9;
4700 buf[0] = 0x00;
4701 ret = usb_microdia_control_write(dev, command, buf, 1);
4702 if(ret < 0) goto err;
4704 /* urb 467 */
4705 command = 0x10f9;
4706 buf[0] = 0x00;
4707 ret = usb_microdia_control_write(dev, command, buf, 1);
4708 if(ret < 0) goto err;
4710 command = 0x11ba;
4711 buf[0] = 0x0e;
4712 ret = usb_microdia_control_write(dev, command, buf, 1);
4713 if(ret < 0) goto err;
4715 //memset(buf, 0, 4);
4716 command = 0x11bc;
4717 buf[0] = 0x80; buf[1] = 0x02; buf[2] = 0xe0; buf[3] = 0x01;
4718 ret = usb_microdia_control_write(dev, command, buf, 4);
4719 if(ret < 0) goto err;
4721 command = 0x11c0;
4722 if (dev->webcam_model == CAMERA_MODEL(USB_0C45_VID, USB_627F_PID))
4724 buf[0] = 0x19; buf[1] = 0x31; buf[2] = 0x44; buf[3] = 0x50;
4725 buf[4] = 0x52; buf[5] = 0x56; buf[6] = 0x5b; buf[7] = 0x61;
4726 buf[8] = 0x65; buf[9] = 0x6a; buf[10] = 0x6c; buf[11] = 0x6e;
4727 buf[12] = 0x70; buf[13] = 0x72; buf[14] = 0x74; buf[15] = 0x76;
4728 buf[16] = 0x1a; buf[17] = 0x31; buf[18] = 0x44; buf[19] = 0x51;
4729 buf[20] = 0x54; buf[21] = 0x57; buf[22] = 0x5c; buf[23] = 0x61;
4730 buf[24] = 0x66; buf[25] = 0x6b; buf[26] = 0x6d; buf[27] = 0x6f;
4731 buf[28] = 0x71; buf[29] = 0x73; buf[30] = 0x75; buf[31] = 0x76;
4732 buf[32] = 0x1b; buf[33] = 0x32; buf[34] = 0x44; buf[35] = 0x50;
4733 buf[36] = 0x50; buf[37] = 0x54; buf[38] = 0x59; buf[39] = 0x5e;
4734 buf[40] = 0x63; buf[41] = 0x67; buf[42] = 0x6a; buf[43] = 0x6c;
4735 buf[44] = 0x6e; buf[45] = 0x70; buf[46] = 0x72; buf[47] = 0x73;
4737 else // 624f
4739 buf[0] = 0x10; buf[1] = 0x21; buf[2] = 0x34; buf[3] = 0x40;
4740 buf[4] =0x47; buf[5] = 0x4F; buf[6] = 0x57; buf[7] = 0x5F;
4741 buf[8] = 0x64; buf[9] = 0x68; buf[10] = 0x6D; buf[11] = 0x73;
4742 buf[12] = 0x79; buf[13] = 0x80; buf[14] = 0x89; buf[15] = 0x97;
4743 buf[16] = 0x0D; buf[17] = 0x1C; buf[18] = 0x2A; buf[19] = 0x33;
4744 buf[20] = 0x38; buf[21] = 0x3D; buf[22] = 0x44; buf[23] = 0x4A;
4745 buf[24] = 0x4E; buf[25] = 0x52; buf[26] = 0x56; buf[27] = 0x5B;
4746 buf[28] = 0x61; buf[29] = 0x68; buf[30] = 0x6F; buf[31] = 0x7A;
4747 buf[32] = 0x0D; buf[33] = 0x1A; buf[34] = 0x2A; buf[35] = 0x31;
4748 buf[36] = 0x36; buf[37] = 0x3B; buf[38] = 0x41; buf[39] = 0x47;
4749 buf[40] = 0x4A; buf[41] = 0x4E; buf[42] = 0x53; buf[43] = 0x58;
4750 buf[44] = 0x5D; buf[45] = 0x64; buf[46] = 0x6B; buf[47] = 0x76;
4752 ret = usb_microdia_control_write(dev, command, buf, 48);
4754 command = 0x118c;
4755 buf[0] = 0x20;
4756 ret = usb_microdia_control_write(dev, command, buf, 1);
4757 if(ret < 0) goto err;
4759 /* urb 477 */
4760 command = 0x118d;
4761 buf[0] = 0x20;
4762 ret = usb_microdia_control_write(dev, command, buf, 1);
4763 if(ret < 0) goto err;
4765 command = 0x118e;
4766 buf[0] = 0x20;
4767 ret = usb_microdia_control_write(dev, command, buf, 1);
4768 if(ret < 0) goto err;
4770 command = 0x118f;
4771 buf[0] = 0x20;
4772 ret = usb_microdia_control_write(dev, command, buf, 1);
4773 if(ret < 0) goto err;
4775 /* urb 483 */
4776 command = 0x11a5;
4777 buf[0] = 0x2d; buf[1] = 0x2d; buf[2] = 0x3a; buf[3] = 0x05;
4778 buf[4] = 0x04; buf[5] = 0x3f;
4779 ret = usb_microdia_control_write(dev, command, buf, 6);
4780 if(ret < 0) goto err;
4782 /* urb 485 */
4783 command = 0x11af;
4784 buf[0] = 0x28; buf[1] = 0xd8; buf[2] = 0x14; buf[3] = 0xec;
4785 ret = usb_microdia_control_write(dev, command, buf, 4);
4786 if(ret < 0) goto err;
4788 command = 0x11b3;
4789 buf[0] = 0x32; buf[1] = 0xdd; buf[2] = 0x32; buf[3] = 0xdd;
4790 ret = usb_microdia_control_write(dev, command, buf, 4);
4791 if(ret < 0) goto err;
4793 /* urb 489 */
4794 command = 0x10e0;
4795 buf[0] = 0x07;
4796 ret = usb_microdia_control_write(dev, command, buf, 1);
4797 if(ret < 0) goto err;
4799 command = 0x1061;
4800 buf[0] = 0x01;
4801 ret = usb_microdia_control_write(dev, command, buf, 1);
4802 if(ret < 0) goto err;
4804 command = 0x10e0;
4805 buf[0] = 0x27;
4806 ret = usb_microdia_control_write(dev, command, buf, 1);
4807 if(ret < 0) goto err;
4810 //////////////////////////////////////////////////////////////////////
4811 /* urb 495 */
4812 command = 0x1100;
4813 buf[0] = 0x0d; buf[1] = 0x08; buf[2] = 0x08; buf[3] = 0x0d;
4814 buf[4] = 0x08; buf[5] = 0x08; buf[6] = 0x0d; buf[7] = 0x0d;
4815 buf[8] = 0x0d; buf[9] = 0x0d; buf[10] = 0x11; buf[11] = 0x0d;
4816 buf[12] = 0x0d; buf[13] = 0x11; buf[14] = 0x15; buf[15] = 0x21;
4817 buf[16] = 0x15; buf[17] = 0x15; buf[18] = 0x11; buf[19] = 0x11;
4818 buf[20] = 0x15; buf[21] = 0x2a; buf[22] = 0x1d; buf[23] = 0x1d;
4819 buf[24] = 0x19; buf[25] = 0x21; buf[26] = 0x32; buf[27] = 0x2a;
4820 buf[28] = 0x32; buf[29] = 0x32; buf[30] = 0x2e; buf[31] = 0x2a;
4821 buf[32] = 0x2e; buf[33] = 0x2e; buf[34] = 0x36; buf[35] = 0x3a;
4822 buf[36] = 0x4b; buf[37] = 0x43; buf[38] = 0x36; buf[39] = 0x3a;
4823 buf[40] = 0x47; buf[41] = 0x3a; buf[42] = 0x2e; buf[43] = 0x2e;
4824 buf[44] = 0x43; buf[45] = 0x5c; buf[46] = 0x43; buf[47] = 0x47;
4825 buf[48] = 0x4f; buf[49] = 0x54; buf[50] = 0x58; buf[51] = 0x58;
4826 buf[52] = 0x58; buf[53] = 0x32; buf[54] = 0x3f; buf[55] = 0x60;
4827 buf[56] = 0x64; buf[57] = 0x5c; buf[58] = 0x54; buf[59] = 0x64;
4828 buf[60] = 0x4b; buf[61] = 0x54; buf[62] = 0x58; buf[63] = 0x54;
4829 ret = usb_microdia_control_write(dev, command, buf, 64);
4830 if(ret < 0) goto err;
4832 command = 0x1140;
4833 buf[0] = 0x0d; buf[1] = 0x11; buf[2] = 0x11; buf[3] = 0x15;
4834 buf[4] = 0x11; buf[5] = 0x15; buf[6] = 0x26; buf[7] = 0x15;
4835 buf[8] = 0x15; buf[9] = 0x26; buf[10] = 0x54; buf[11] = 0x36;
4836 buf[12] = 0x2e; buf[13] = 0x36; buf[14] = 0x54; buf[15] = 0x54;
4837 buf[16] = 0x54; buf[17] = 0x54; buf[18] = 0x54; buf[19] = 0x54;
4838 buf[20] = 0x54; buf[21] = 0x54; buf[22] = 0x54; buf[23] = 0x54;
4839 buf[24] = 0x54; buf[25] = 0x54; buf[26] = 0x54; buf[27] = 0x54;
4840 buf[28] = 0x54; buf[29] = 0x54; buf[30] = 0x54; buf[31] = 0x54;
4841 buf[32] = 0x54; buf[33] = 0x54; buf[34] = 0x54; buf[35] = 0x54;
4842 buf[36] = 0x54; buf[37] = 0x54; buf[38] = 0x54; buf[39] = 0x54;
4843 buf[40] = 0x54; buf[41] = 0x54; buf[42] = 0x54; buf[43] = 0x54;
4844 buf[44] = 0x54; buf[45] = 0x54; buf[46] = 0x54; buf[47] = 0x54;
4845 buf[48] = 0x54; buf[49] = 0x54; buf[50] = 0x54; buf[51] = 0x54;
4846 buf[52] = 0x54; buf[53] = 0x54; buf[54] = 0x54; buf[55] = 0x54;
4847 buf[56] = 0x54; buf[57] = 0x54; buf[58] = 0x54; buf[59] = 0x54;
4848 buf[60] = 0x54; buf[61] = 0x54; buf[62] = 0x54; buf[63] = 0x54;
4849 ret = usb_microdia_control_write(dev, command, buf, 64);
4850 if(ret < 0) goto err;
4852 /* urb 499 */
4853 command = 0x10e0;
4854 buf[0] = 0x07;
4855 ret = usb_microdia_control_write(dev, command, buf, 1);
4856 if(ret < 0) goto err;
4858 command = 0x1061;
4859 buf[0] = 0x03;
4860 ret = usb_microdia_control_write(dev, command, buf, 1);
4861 if(ret < 0) goto err;
4863 /* urb 503 */
4864 command = 0x10e0;
4865 buf[0] = 0x0b;
4866 ret = usb_microdia_control_write(dev, command, buf, 1);
4867 if(ret < 0) goto err;
4869 command = 0x1189;
4870 buf[0] = 0x8c;
4871 ret = usb_microdia_control_write(dev, command, buf, 1);
4872 if(ret < 0) goto err;
4874 buf[0] = 0x40;
4875 command = 0x11bc;
4876 ret = usb_microdia_control_write(dev, command, buf, 1);
4877 if(ret < 0) goto err;
4879 buf[0] = 0x01;
4880 command = 0x11bd;
4881 ret = usb_microdia_control_write(dev, command, buf, 1);
4882 if(ret < 0) goto err;
4884 buf[0] = 0xf0;
4885 command = 0x11be;
4886 ret = usb_microdia_control_write(dev, command, buf, 1);
4887 if(ret < 0) goto err;
4889 buf[0] = 0x00;
4890 command = 0x11bf;
4891 ret = usb_microdia_control_write(dev, command, buf, 1);
4892 if(ret < 0) goto err;
4894 /* urb 515 */
4895 command = 0x1180;
4896 buf[0] = 0x02; buf[1] = 0x00; buf[2] = 0x07; buf[3] = 0x00;
4897 buf[4] = 0x28; buf[5] = 0x3c;
4898 ret = usb_microdia_control_write(dev, command, buf, 6);
4899 if(ret < 0) goto err;
4901 command = 0x10fb;
4902 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0;
4903 buf[4] = 0x00;
4904 ret = usb_microdia_control_write(dev, command, buf, 5);
4905 if(ret < 0) goto err;
4907 command = 0x1189;
4908 buf[0] = 0x8c;
4909 ret = usb_microdia_control_write(dev, command, buf, 1);
4910 if(ret < 0) goto err;
4912 command = 0x11a1;
4913 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
4914 ret = usb_microdia_control_write(dev, command, buf, 4);
4915 if(ret < 0) goto err;
4917 /* 523 */
4918 command = 0x11ab;
4919 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
4920 ret = usb_microdia_control_write(dev, command, buf, 4);
4921 if(ret < 0) goto err;
4923 command = 0x1061;
4924 buf[0] = 0x03;
4925 ret = usb_microdia_control_write(dev, command, buf, 1);
4926 if(ret < 0) goto err;
4928 command = 0x11ba;
4929 buf[0] = 0x0e;
4930 ret = usb_microdia_control_write(dev, command, buf, 1);
4931 if(ret < 0) goto err;
4933 command = 0x11b9;
4934 buf[0] = 0x00;
4935 ret = usb_microdia_control_write(dev, command, buf, 1);
4936 if(ret < 0) goto err;
4938 command = 0x11ba;
4939 buf[0] = 0x0f;
4940 ret = usb_microdia_control_write(dev, command, buf, 1);
4941 if(ret < 0) goto err;
4943 command = 0x1061;
4944 buf[0] = 0x01;
4945 ret = usb_microdia_control_write(dev, command, buf, 1);
4946 if(ret < 0) goto err;
4948 command = 0x1000;
4949 buf[0] = 0x78;
4950 ret = usb_microdia_control_write(dev, command, buf, 1);
4951 if(ret < 0) goto err;
4953 command = 0x1002;
4954 buf[0] = 0x18;
4955 ret = usb_microdia_control_write(dev, command, buf, 1);
4956 if(ret < 0) goto err;
4958 /* urb 539 */
4959 command = 0x1002;
4960 buf[0] = 0x18;
4961 ret = usb_microdia_control_write(dev, command, buf, 1);
4962 if(ret < 0) goto err;
4964 command = 0x11b8;
4965 buf[0] = 0x7a;
4966 ret = usb_microdia_control_write(dev, command, buf, 1);
4967 if(ret < 0) goto err;
4969 command = 0x118a;
4970 buf[0] = 0x04;
4971 ret = usb_microdia_control_write(dev, command, buf, 1);
4972 if(ret < 0) goto err;
4974 /* urb 545 */
4975 command = 0x0395;
4976 buf[0] = 0x04;
4977 ret = usb_microdia_control_write(dev, command, buf, 1);
4978 if(ret < 0) goto err;
4980 command = 0x11b8;
4981 if (last_11b8[0] == 0x3c)
4982 buf[0] = 0x78;
4983 else if (last_11b8[0] == 0xbc)
4984 buf[0] = 0xf8;
4985 ret = usb_microdia_control_write(dev, command, buf, 1);
4986 if(ret < 0) goto err;
4987 ret = usb_microdia_control_read(dev, command, buf, 1); // 624f: 0xb8 627f: 0x38
4988 if(ret < 0) goto err;
4989 if (buf[0] == 0x38)
4990 buf[0] = 0x79;
4991 else if (buf[0] == 0xb8)
4992 buf[0] = 0xf9;
4993 ret = usb_microdia_control_write(dev, command, buf, 1);
4994 if(ret < 0) goto err;
4995 ret = usb_microdia_control_read(dev, command, buf, 1); // 624f: 0xb9 627f: 0x39
4996 if(ret < 0) goto err;
4997 if (buf[0] == 0x39)
4998 buf[0] = 0x7a;
4999 else if (buf[0] == 0xb9)
5000 buf[0] = 0xfa;
5001 ret = usb_microdia_control_write(dev, command, buf, 1);
5002 if(ret < 0) goto err;
5003 ret = usb_microdia_control_read(dev, command, buf, 1); // 0x3a
5004 if(ret < 0) goto err;
5005 if (buf[0] == 0x3a)
5006 buf[0] = 0x7b;
5007 else if (buf[0] == 0xba)
5008 buf[0] = 0xfb;
5009 ret = usb_microdia_control_write(dev, command, buf, 1);
5010 if(ret < 0) goto err;
5011 ret = usb_microdia_control_read(dev, command, buf, 1); // 624f: 0x3b 627f: 0xbb
5012 if(ret < 0) goto err;
5013 if (buf[0] == 0x3b)
5014 buf[0] = 0x7c;
5015 else if (buf[0] == 0xbb)
5016 buf[0] = 0xfc;
5017 ret = usb_microdia_control_write(dev, command, buf, 1);
5018 if(ret < 0) goto err;
5019 ret = usb_microdia_control_read(dev, command, buf, 1); // 624f: 0x3c 627f: 0xbc
5020 if(ret < 0) goto err;
5021 buf[0] = buf[0] & 0xf0; // 0xf0 or 0x70
5022 if (dev->webcam_model == CAMERA_MODEL(USB_0C45_VID, USB_627F_PID))
5023 buf[0] = buf[0] | 0x09; // THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 5 READS/WRITES
5024 else // 624f
5025 buf[0] = buf[0] | 0x08; // THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 5 READS/WRITES
5026 ret = usb_microdia_control_write(dev, command, buf, 1);
5027 if(ret < 0) goto err;
5029 buf[0] = 0x80;
5030 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_CLKRC,
5031 dev->sensor_flags, buf);
5032 if(ret < 0) goto err;
5034 buf[0] = 0x00;
5035 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_EXHCH,
5036 dev->sensor_flags, buf);
5037 if(ret < 0) goto err;
5039 /* urb 581 */
5040 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_EXHCL,
5041 dev->sensor_flags, buf);
5042 if(ret < 0) goto err;
5044 /* urb 587 */
5045 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_DM_LNL,
5046 dev->sensor_flags, buf);
5047 if(ret < 0) goto err;
5049 /* urb 593 */
5050 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_DM_LNH,
5051 dev->sensor_flags, buf);
5052 if(ret < 0) goto err;
5054 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_PID,
5055 dev->sensor_flags, buf);
5056 /* returns 96, no idea what we're supposed to do with it */
5057 if(ret < 0) goto err;
5058 //msg("sensor pid, should be 0x96: %x", buf[0]);
5060 /* urb 609 */
5061 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_VER,
5062 dev->sensor_flags, buf);
5063 /* returns 52, no idea what we're supposed to do with it */
5064 if(ret < 0) goto err;
5065 //msg("sensor ver, should be 0x52: %x", buf[0]);
5067 /* urb 619 */
5068 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_MIDH,
5069 dev->sensor_flags, buf);
5070 /* returns 7f, no idea what we're supposed to do with it */
5071 if(ret < 0) goto err;
5072 //msg("sensor midh, should be 0x7f: %x", buf[0]);
5074 /* urb 629 */
5075 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_MIDL,
5076 dev->sensor_flags, buf);
5077 /* returns a2, no idea what we're supposed to do with it */
5078 if(ret < 0) goto err;
5079 //msg("sensor midl, should be 0xa2: %x", buf[0]);
5081 command = 0x1061;
5082 buf[0] = 0x03;
5083 ret = usb_microdia_control_write(dev, command, buf, 1);
5084 if(ret < 0) goto err;
5085 //////////////////////////////////////////////////////////////////////////////////
5086 //STREAM STARTED!
5087 //////////////////////////////////////////////////////////////////////////////////
5089 /* --- ADJUSTMENTS OF SHARPNESS, COLORS, CONTRAST, BRIGHTNESS ---
5090 * SHOULD BE REMOVED (writes to 0x10e1 and 0x10f6 are done again afterwards by dev_microdia_camera_settings() )
5091 * => NOT done by device 627f
5092 * => NOT in the 624f-log from 15-feb-08 at files.zenum.net
5095 command = 0x10f6;
5096 buf[0] = 0x80;
5097 ret = usb_microdia_control_write(dev, command, buf, 1);
5098 if(ret < 0) goto err;
5100 command = 0x10e1;
5101 buf[0] = 0x15; buf[1] = 0x00; buf[2] = 0x29; buf[3] = 0x00;
5102 buf[4] = 0x08; buf[5] = 0x00; buf[6] = 0xF7; buf[7] = 0x0F;
5103 buf[8] = 0xC2; buf[9] = 0x0F; buf[10] = 0x47; buf[11] = 0x00;
5104 buf[12] = 0x36; buf[13] = 0x00; buf[14] = 0xDD ; buf[15] = 0x0F;
5105 buf[16] = 0xEE; buf[17] = 0x0F; buf[18] = 0x00; buf[19] = 0x00;
5106 buf[20] = 0x00;
5107 ret = usb_microdia_control_write(dev, command, buf, 21);
5108 if(ret < 0) goto err;
5110 buf[0] = 0x7d; buf[1] = 0x00;
5111 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1, 0x2d,
5112 dev->sensor_flags, buf);
5114 buf[0] = 0x0f;
5115 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1, 0x00,
5116 dev->sensor_flags, buf);
5118 // urb 679
5119 command = 0x10e1;
5120 buf[0] = 0x15; buf[1] = 0x00; buf[2] = 0x29; buf[3] = 0x00;
5121 buf[4] = 0x08; buf[5] = 0x00; buf[6] = 0xF7; buf[7] = 0x0F;
5122 buf[8] = 0xC2; buf[9] = 0x0F; buf[10] = 0x47; buf[11] = 0x00;
5123 buf[12] = 0x36; buf[13] = 0x00; buf[14] = 0xDD ; buf[15] = 0x0F;
5124 buf[16] = 0xEE; buf[17] = 0x0F; buf[18] = 0x00; buf[19] = 0x00;
5125 buf[20] = 0x00;
5126 ret = usb_microdia_control_write(dev, command, buf, 21);
5127 if(ret < 0) goto err;
5129 // These 2 regs controls brightness of image
5130 // (night mode or something like that)
5132 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 2, 0x2d,
5133 dev->sensor_flags, buf);
5134 //msg("Old brightness value: %x %x", buf[0], buf[1]);
5135 buf[0] = 0x00; buf[1] = 0x04;
5136 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x2d,
5137 dev->sensor_flags, buf);
5139 // urb 743
5140 command = 0x10f6;
5141 buf[0] = 0x74;
5142 ret = usb_microdia_control_write(dev, command, buf, 1);
5144 // urb 745
5145 command = 0x10e1;
5146 buf[0] = 0x15; buf[1] = 0x00; buf[2] = 0x29; buf[3] = 0x00;
5147 buf[4] = 0x08; buf[5] = 0x00; buf[6] = 0xF7; buf[7] = 0x0F;
5148 buf[8] = 0xC2; buf[9] = 0x0F; buf[10] = 0x47; buf[11] = 0x00;
5149 buf[12] = 0x36; buf[13] = 0x00; buf[14] = 0xdd ; buf[15] = 0x0F;
5150 buf[16] = 0xEE; buf[17] = 0x0F; buf[18] = 0x00; buf[19] = 0x00;
5151 buf[20] = 0x00;
5152 ret = usb_microdia_control_write(dev, command, buf, 21);
5153 if(ret < 0) goto err;
5154 return ret;
5156 buf[0] = 0xe8;
5157 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, 0x01,
5158 dev->sensor_flags, buf);
5159 // THIS WRITE WILL NEVER BE DONE, because function returned before
5161 return 0;
5163 err:
5164 UDIA_ERROR("start stream: command %x failed (%d)!\n", command, ret);
5165 return ret;
5168 int microdia_6260_start_stream(struct usb_microdia *dev)
5170 int ret;
5171 __u8 buf[32];
5173 ret = usb_microdia_control_read(dev, 0x1045, buf, 1);
5174 buf[0] = 0x1f;
5175 ret = usb_microdia_control_write(dev, 0x1045, buf, 1);
5176 buf[0] = 0x00;
5177 ret = usb_microdia_control_write(dev, 0x1066, buf, 1);
5178 buf[0] = 0x20;
5179 ret = usb_microdia_control_write(dev, 0x1007, buf, 1);
5180 buf[0] = 0x00;
5181 ret = usb_microdia_control_write(dev, 0x1006, buf, 1);
5182 buf[0] = 0x78;
5183 ret = usb_microdia_control_write(dev, 0x1000, buf, 1);
5184 buf[0] = 0xc7;
5185 ret = usb_microdia_control_write(dev, 0x1001, buf, 1);
5186 buf[0] = 0x18;
5187 ret = usb_microdia_control_write(dev, 0x1002, buf, 1);
5188 buf[0] = 0x01;
5189 ret = usb_microdia_control_write(dev, 0x1061, buf, 1);
5190 buf[0] = 0x80;
5191 ret = usb_microdia_control_write(dev, 0x1020, buf, 1);
5192 buf[0] = 0x40;
5193 buf[1] = 0x30;
5194 buf[2] = 0x20;
5195 buf[3] = 0x10;
5196 buf[4] = 0x08;
5197 ret = usb_microdia_control_write(dev, 0x1067, buf, 5);
5198 buf[0] = 0x80;
5199 buf[1] = 0x21;
5200 buf[2] = 0x00;
5201 buf[3] = 0x00;
5202 buf[4] = 0x00;
5203 buf[5] = 0x00;
5204 buf[6] = 0x00;
5205 buf[7] = 0x00;
5206 buf[8] = 0x03;
5207 ret = usb_microdia_control_write(dev, 0x10c0, buf, 9);
5208 buf[0] = 0x45;
5209 buf[1] = 0x18;
5210 buf[2] = 0x00;
5211 buf[3] = 0x30;
5212 buf[4] = 0x00;
5213 buf[5] = 0x09;
5214 buf[6] = 0x00;
5215 buf[7] = 0xed;
5216 buf[8] = 0x0f;
5217 buf[9] = 0xda;
5218 buf[10] = 0x0f;
5219 buf[11] = 0x3a;
5220 buf[12] = 0x00;
5221 buf[13] = 0x3a;
5222 buf[14] = 0x00;
5223 buf[15] = 0xd0;
5224 buf[16] = 0x0f;
5225 buf[17] = 0xf7;
5226 buf[18] = 0x0f;
5227 buf[19] = 0x00;
5228 buf[20] = 0x00;
5229 buf[21] = 0x00;
5230 buf[22] = 0x60;
5231 buf[23] = 0x0a;
5232 ret = usb_microdia_control_write(dev, 0x10e0, buf, 24);
5233 buf[0] = 0x00;
5234 buf[1] = 0x00;
5235 buf[2] = 0x00;
5236 ret = usb_microdia_control_write(dev, 0x10f8, buf, 3);
5237 buf[0] = 0x00;
5238 buf[1] = 0xa0;
5239 buf[2] = 0x00;
5240 buf[3] = 0xf0;
5241 buf[4] = 0x00;
5242 ret = usb_microdia_control_write(dev, 0x10fb, buf, 5);
5243 buf[0] = 0x8a;
5244 buf[1] = 0x8c;
5245 buf[2] = 0x08;
5246 ret = usb_microdia_control_write(dev, 0x1188, buf, 3);
5247 buf[0] = 0x00;
5248 buf[1] = 0x20;
5249 buf[2] = 0x20;
5250 buf[3] = 0x20;
5251 buf[4] = 0x20;
5252 buf[5] = 0x00;
5253 buf[6] = 0x24;
5254 buf[7] = 0x3b;
5255 buf[8] = 0x4f;
5256 buf[9] = 0x61;
5257 buf[10] = 0x71;
5258 buf[11] = 0x80;
5259 buf[12] = 0x8f;
5260 buf[13] = 0x9d;
5261 buf[14] = 0xab;
5262 buf[15] = 0xb8;
5263 buf[16] = 0xc4;
5264 buf[17] = 0xd1;
5265 buf[18] = 0xdd;
5266 buf[19] = 0xe9;
5267 buf[20] = 0xf4;
5268 buf[21] = 0xff;
5269 ret = usb_microdia_control_write(dev, 0x118b, buf, 22);
5270 buf[0] = 0x00;
5271 buf[1] = 0x00;
5272 ret = usb_microdia_control_write(dev, 0x11a1, buf, 2);
5273 buf[0] = 0x60;
5274 buf[1] = 0x28;
5275 buf[2] = 0x00;
5276 buf[3] = 0x00;
5277 buf[4] = 0x00;
5278 buf[5] = 0x40;
5279 buf[6] = 0x01;
5280 buf[7] = 0xf0;
5281 buf[8] = 0x00;
5282 ret = usb_microdia_control_write(dev, 0x11b7, buf, 9);
5283 buf[0] = 0x78;
5284 ret = usb_microdia_control_write(dev, 0x1000, buf, 1);
5285 buf[0] = 0x38;
5286 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5288 ret = ov7670_initialise(dev);
5290 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1, 0x3b, dev->sensor_flags, buf);
5291 ret = usb_microdia_control_read(dev, 0x10c1, buf, 1);
5292 buf[0] = 0x50;
5293 ret = usb_microdia_control_write(dev, 0x10c1, buf, 1);
5295 // TRY TO READ FROM EEPROM:
5296 ret = sn9c20x_read_i2c_data(dev, 0x50, 1, 0x00, dev->sensor_flags, buf);
5297 if (ret < 0)
5299 UDIA_INFO("No EEPROM found\n");
5301 else
5303 UDIA_INFO("Read from EEPROM successful\n");
5306 buf[0] = 0x21;
5307 ret = usb_microdia_control_write(dev, 0x10c1, buf, 1);
5308 buf[0] = 0x45;
5309 ret = usb_microdia_control_write(dev, 0x10e0, buf, 1);
5310 buf[0] = 0xc6;
5311 ret = usb_microdia_control_write(dev, 0x1001, buf, 1);
5312 buf[0] = 0xc4;
5313 ret = usb_microdia_control_write(dev, 0x1001, buf, 1);
5314 buf[0] = 0x00;
5315 buf[1] = 0x00;
5316 buf[2] = 0x01;
5317 buf[3] = 0x00;
5318 buf[4] = 0x50;
5319 buf[5] = 0x3c;
5320 ret = usb_microdia_control_write(dev, 0x1180, buf, 6);
5321 buf[0] = 0x00;
5322 buf[1] = 0x40;
5323 buf[2] = 0x00;
5324 buf[3] = 0xf0;
5325 buf[4] = 0x01;
5326 ret = usb_microdia_control_write(dev, 0x10fb, buf, 5);
5327 buf[0] = 0x80;
5328 ret = usb_microdia_control_write(dev, 0x1189, buf, 1);
5329 buf[0] = 0x00;
5330 buf[1] = 0x00;
5331 buf[2] = 0xd5;
5332 buf[3] = 0x50;
5333 ret = usb_microdia_control_write(dev, 0x11a1, buf, 4);
5334 buf[0] = 0x00;
5335 buf[1] = 0x00;
5336 buf[2] = 0xa0;
5337 buf[3] = 0x3c;
5338 ret = usb_microdia_control_write(dev, 0x11ab, buf, 4);
5339 buf[0] = 0x78;
5340 ret = usb_microdia_control_write(dev, 0x1000, buf, 1);
5341 buf[0] = 0x10;
5342 ret = usb_microdia_control_write(dev, 0x1002, buf, 1);
5343 buf[0] = 0x00;
5344 ret = usb_microdia_control_write(dev, 0x1002, buf, 1);
5345 buf[0] = 0x38;
5346 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5347 buf[0] = 0x04;
5348 ret = usb_microdia_control_write(dev, 0x118a, buf, 1);
5349 buf[0] = 0x04;
5350 ret = usb_microdia_control_write(dev, 0x0395, buf, 1);
5351 buf[0] = 0x78;
5352 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5353 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5354 buf[0] = 0xf9;
5355 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5356 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5357 buf[0] = 0xfa;
5358 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5359 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5360 buf[0] = 0x7b;
5361 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5362 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5363 buf[0] = 0x7c;
5364 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5365 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5366 buf[0] = 0x7d;
5367 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5368 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5369 buf[0] = 0x7b;
5370 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5372 * OV7670 Intialise Part 2
5374 buf[0] = 0x00;
5375 buf[1] = 0x00;
5376 buf[2] = 0x01;
5377 buf[3] = 0x00;
5378 buf[4] = 0x50;
5379 buf[5] = 0x3c;
5380 ret = usb_microdia_control_write(dev, 0x1180, buf, 6);
5381 buf[0] = 0x00;
5382 buf[1] = 0x40;
5383 buf[2] = 0x00;
5384 buf[3] = 0xf0;
5385 buf[4] = 0x01;
5386 ret = usb_microdia_control_write(dev, 0x10fb, buf, 5);
5387 buf[0] = 0x80;
5388 ret = usb_microdia_control_write(dev, 0x1189, buf, 1);
5389 buf[0] = 0x00;
5390 buf[1] = 0x00;
5391 buf[2] = 0xd5;
5392 buf[3] = 0x50;
5393 ret = usb_microdia_control_write(dev, 0x11a1, buf, 4);
5394 buf[0] = 0x00;
5395 buf[1] = 0x00;
5396 buf[2] = 0xa0;
5397 buf[3] = 0x3c;
5398 ret = usb_microdia_control_write(dev, 0x11ab, buf, 4);
5399 buf[0] = 0x03;
5400 ret = usb_microdia_control_write(dev, 0x1061, buf, 1);
5401 buf[0] = 0x01;
5402 ret = usb_microdia_control_write(dev, 0x1061, buf, 1);
5403 buf[0] = 0x78;
5404 ret = usb_microdia_control_write(dev, 0x1000, buf, 1);
5405 buf[0] = 0x00;
5406 ret = usb_microdia_control_write(dev, 0x1002, buf, 1);
5407 buf[0] = 0x00;
5408 ret = usb_microdia_control_write(dev, 0x1002, buf, 1);
5409 buf[0] = 0x7b;
5410 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5411 buf[0] = 0x04;
5412 ret = usb_microdia_control_write(dev, 0x118a, buf, 1);
5413 buf[0] = 0x04;
5414 ret = usb_microdia_control_write(dev, 0x0395, buf, 1);
5415 buf[0] = 0x78;
5416 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5417 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5418 buf[0] = 0x79;
5419 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5420 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5421 buf[0] = 0x7a;
5422 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5423 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5424 buf[0] = 0x7b;
5425 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5426 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5427 buf[0] = 0x7c;
5428 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5429 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5430 buf[0] = 0x7d;
5431 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5432 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5433 buf[0] = 0xfa;
5434 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5436 * OV7670 Initialisation Part 3 Goes Here
5438 buf[0] = 0x03;
5439 ret = usb_microdia_control_write(dev, 0x1061, buf, 1);
5440 buf[0] = 0x00;
5441 buf[1] = 0x00;
5442 buf[2] = 0x00;
5443 buf[3] = 0x00;
5444 buf[4] = 0x00;
5445 buf[5] = 0x00;
5446 buf[6] = 0x00;
5447 buf[7] = 0x00;
5448 buf[8] = 0x00;
5449 buf[9] = 0x00;
5450 buf[10] = 0x00;
5451 buf[11] = 0x00;
5452 buf[12] = 0x00;
5453 buf[13] = 0x00;
5454 buf[14] = 0x00;
5455 buf[15] = 0x00;
5456 buf[16] = 0x00;
5457 buf[17] = 0x00;
5458 buf[18] = 0x0a;
5459 buf[19] = 0x00;
5460 buf[20] = 0x00;
5461 ret = usb_microdia_control_write(dev, 0x10e1, buf, 21);
5462 buf[0] = 0x00;
5463 buf[1] = 0x00;
5464 buf[2] = 0x00;
5465 buf[3] = 0x00;
5466 buf[4] = 0x00;
5467 buf[5] = 0x00;
5468 buf[6] = 0x00;
5469 buf[7] = 0x00;
5470 buf[8] = 0x00;
5471 buf[9] = 0x00;
5472 buf[10] = 0x00;
5473 buf[11] = 0x00;
5474 buf[12] = 0x00;
5475 buf[13] = 0x00;
5476 buf[14] = 0x00;
5477 buf[15] = 0x00;
5478 buf[16] = 0x00;
5479 buf[17] = 0x00;
5480 buf[18] = 0x0a;
5481 buf[19] = 0x00;
5482 buf[20] = 0x00;
5483 ret = usb_microdia_control_write(dev, 0x10e1, buf, 21);
5484 buf[0] = 0x00;
5485 buf[1] = 0x00;
5486 buf[2] = 0x00;
5487 buf[3] = 0x00;
5488 buf[4] = 0x00;
5489 buf[5] = 0x00;
5490 buf[6] = 0x00;
5491 buf[7] = 0x00;
5492 buf[8] = 0x00;
5493 buf[9] = 0x00;
5494 buf[10] = 0x00;
5495 buf[11] = 0x00;
5496 buf[12] = 0x00;
5497 buf[13] = 0x00;
5498 buf[14] = 0x00;
5499 buf[15] = 0x00;
5500 buf[16] = 0x00;
5501 buf[17] = 0x00;
5502 buf[18] = 0x0a;
5503 buf[19] = 0x00;
5504 buf[20] = 0x00;
5505 ret = usb_microdia_control_write(dev, 0x10e1, buf, 21);
5506 buf[0] = 0x00;
5507 buf[1] = 0x00;
5508 buf[2] = 0x00;
5509 buf[3] = 0x00;
5510 buf[4] = 0x00;
5511 buf[5] = 0x00;
5512 buf[6] = 0x00;
5513 buf[7] = 0x00;
5514 buf[8] = 0x00;
5515 buf[9] = 0x00;
5516 buf[10] = 0x00;
5517 buf[11] = 0x00;
5518 buf[12] = 0x00;
5519 buf[13] = 0x00;
5520 buf[14] = 0x00;
5521 buf[15] = 0x00;
5522 buf[16] = 0x00;
5523 buf[17] = 0x00;
5524 buf[18] = 0x0a;
5525 buf[19] = 0x00;
5526 buf[20] = 0x00;
5527 ret = usb_microdia_control_write(dev, 0x10e1, buf, 21);
5529 return ret;
5533 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
5535 * @param dev
5537 * @returns 0 (ok) or -1 (error)
5539 * @author Comer352l
5541 * Windows driver versions: 5.7.23.000
5542 * Windows versions: 2000 and XP
5543 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
5544 * All logs were made using AMCAP with 640x480, RGB24
5546 int microdia_6270_start_stream(struct usb_microdia *dev)
5548 __u8 buf[64];
5549 __u8 last_11b8[1];
5550 int k;
5551 int retI2C;
5553 // Check if sensor slave address is valid:
5554 if ((dev->sensor_slave_address != MT9V111_I2C_SLAVE_ADDRESS) && (dev->sensor_slave_address != MT9V011_I2C_SLAVE_ADDRESS))
5556 UDIA_INFO("microdia_6270_start_stream(): Invalid sensor slave address !\n");
5557 return -1;
5560 // <= INTERRUPT COMING BACK (URB 1953)
5561 // SWITCH TO ALTERNATE SETTINGS 8 (URB 1954) // NOT IN ALEX'S LOG
5562 // => INTERRUPT GOING DOWN (URB 1955)
5564 buf[0] = 0x00;
5565 usb_microdia_control_write(dev, 0x1066, buf, 1); // URB 1956
5567 // <= INTERRUPT COMING BACK (URB 1955)
5568 // => INTERRUPT GOING DOWN (URB 1957)
5570 buf[0] = 0x78;
5571 usb_microdia_control_write(dev, 0x1000, buf, 1); // URB 1958
5572 buf[0] = 0xc7;
5573 usb_microdia_control_write(dev, 0x1001, buf, 1); // URB 1959
5574 buf[0] = 0x18;
5575 usb_microdia_control_write(dev, 0x1002, buf, 1); // URB 1960
5576 buf[0] = 0x01;
5577 usb_microdia_control_write(dev, 0x1061, buf, 1); // URB 1961
5578 buf[0] = 0x80;
5579 usb_microdia_control_write(dev, 0x1020, buf, 1); // URB 1962
5580 buf[0] = 0x40; buf[1] = 0x30; buf[2] = 0x20; buf[3] = 0x10; buf[4] = 0x08;
5581 usb_microdia_control_write(dev, 0x1067, buf, 5); // URB 1963
5583 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5584 // STRANGE I2C MESSAGE:
5585 // - 9 bytes
5586 // - byte 8 = 0x00 at first start + first cycle
5587 // - procedure not complete: no wait/check for ack/error, no readout of 0x10c2
5588 // - dummy writes at first cycle and read at second cycle, but there are many I2C messages in the meantime, so this should not work
5590 // AT FIRST START + FIRST CYCLE:
5591 buf[0] = 0x80; buf[1] = dev->sensor_slave_address; buf[2] = 0x00; buf[3] = 0x00;
5592 buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x03;
5593 // AT ALL FURTHER STARTS + FIRST CYCLE:
5594 //MT9V111: I2C MESSAGE => IFP Register 0x33: Auto exposure
5595 //buf[0] = 0x90; buf[1] = dev->sensor_slave_address; buf[2] = 0x33; buf[3] = 0x00;
5596 //buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03;
5597 //MT9V011: ?????????????????????????
5598 //buf[0] = 0x90; buf[1] = dev->sensor_slave_address; buf[2] = 0x07; buf[3] = 0x00;
5599 //buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03;
5600 // ALWAYS AT 2nd AND FURTHER CYCLES:
5601 //MT9V111:
5602 //buf[0] = 0xa2; buf[1] = 0x5c; buf[2] = 0x00; buf[3] = 0x36;
5603 //buf[4] = 0x00; buf[5] = 0x82; buf[6] = 0x3a; buf[7] = 0x10; buf[8] = 0x03;
5604 // => buf[3] to buf[6] simply contain bytes read with URB 2215
5605 //MT9V011:
5606 //buf[0] = 0xb0; buf[1] = 0x5d; buf[2] = 0x07; buf[3] = 0x00;
5607 //buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03;
5608 usb_microdia_control_write(dev, 0x10c0, buf, 9); // URB 1964
5609 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5611 buf[0] = 0x45; buf[1] = 0x18; buf[2] = 0x00; buf[3] = 0x30;
5612 buf[4] = 0x00; buf[5] = 0x09; buf[6] = 0x00; buf[7] = 0xed;
5613 buf[8] = 0x0f; buf[9] = 0xda; buf[10] = 0x0f; buf[11] = 0x3a;
5614 buf[12] = 0x00; buf[13] = 0x3a; buf[14] = 0x00; buf[15] = 0xd0;
5615 buf[16] = 0x0f; buf[17] = 0xf7; buf[18] = 0x0f; buf[19] = 0x00;
5616 buf[20] = 0x00; buf[21] = 0x00; buf[22] = 0x60; buf[23] = 0x0a;
5617 usb_microdia_control_write(dev, 0x10e0, buf, 24); // URB 1965
5618 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00;
5619 usb_microdia_control_write(dev, 0x10f8, buf, 3); // URB 1966
5620 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0; buf[4] = 0x00;
5621 usb_microdia_control_write(dev, 0x10fb, buf, 5); // URB 1967
5622 buf[0] = 0x06; buf[1] = 0x0c; buf[2] = 0x08;
5623 usb_microdia_control_write(dev, 0x1188, buf, 3); // URB 1968
5624 buf[0] = 0x00; buf[1] = 0x20; buf[2] = 0x20; buf[3] = 0x20;
5625 buf[4] = 0x20; buf[5] = 0x00; buf[6] = 0x24; buf[7] = 0x3b;
5626 buf[8] = 0x4f; buf[9] = 0x61; buf[10] = 0x71; buf[11] = 0x80;
5627 buf[12] = 0x8f; buf[13] = 0x9d; buf[14] = 0xab; buf[15] = 0xb8;
5628 buf[16] = 0xc4; buf[17] = 0xd1; buf[18] = 0xdd; buf[19] = 0xe9;
5629 buf[20] = 0xf4; buf[21] = 0xff;
5630 usb_microdia_control_write(dev, 0x118b, buf, 22); // URB 1969
5631 buf[0] = 0x00; buf[1] = 0x00;
5632 usb_microdia_control_write(dev, 0x11a1, buf, 2); // URB 1970
5633 buf[0] = 0x60; buf[1] = 0x28; buf[2] = 0x00; buf[3] = 0x08;
5634 buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00;
5635 buf[8] = 0x00;
5636 usb_microdia_control_write(dev, 0x11b7, buf, 9); // URB 1971
5637 buf[0] = 0x38;
5638 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 1972
5639 buf[0] = 0x78;
5640 usb_microdia_control_write(dev, 0x1000, buf, 1); // URB 1973
5642 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5643 // I2C MESSAGES
5644 retI2C = 0;
5645 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
5647 // Write to IFP register 0x0d: Color Correction Register 8
5648 buf[0] = 0x00; buf[1] = 0x01;
5649 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x0d, dev->sensor_flags, buf); // URBs 1974-1976
5650 // Write to IFP register 0x0d: Color Correction Register 8
5651 buf[0] = 0x00; buf[1] = 0x00; // ???
5652 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x0d, dev->sensor_flags, buf); // URBs 1977-1979
5653 // Writes to IFP registers 0x01: Register Address Space Selection
5654 // 0x02: Color Correction Register 1
5655 buf[0] = 0x00; buf[1] = 0x01; // select IFP address space
5656 buf[2] = 0x00; buf[3] = 0x16; // ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00
5657 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x01, dev->sensor_flags, buf); // URBs 1980-1982
5658 // Writes to IFP registers 0x03: Color Correction Register 3
5659 // 0x04: Color Correction Register 4
5660 buf[0] = 0x01; buf[1] = 0xe1; // ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00
5661 buf[2] = 0x02; buf[3] = 0x81; // ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00
5662 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x03, dev->sensor_flags, buf); // URBs 1983-1985
5663 // Writes to IFP registers 0x05: Aperture Correction (Sharpening)
5664 // 0x06: Operating Mode Control
5665 buf[0] = 0x00; buf[1] = 0x04; // 100% sharpening, no automatic sharpness reduction at low light // AT FIRST START + FIRST CYCLE: 0x00 0x00: no sharpening
5666 buf[2] = 0x00; buf[3] = 0x00; // stop AWB at the current values, no on-the-fly defect correction, no auto exposure, + RESREVED option
5667 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x05, dev->sensor_flags, buf); // URBs 1986-1988
5668 // Writes to IFP registers 0x07: Image Flow Processor Soft Reset
5669 // 0x08: Output Format Control
5670 buf[0] = 0x30; buf[1] = 0x02; // reset // AT FIRST START + FIRST CYCLE: 0x00 0x00
5671 buf[2] = 0x04; buf[3] = 0x80; // bypass entire image processing, raw 8+2 Bayer data output directly
5672 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x07, dev->sensor_flags, buf); // URBs 1989-1991
5673 // "Dummy" write to IFP Register 0x11: Color Correction Register 12
5674 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0x11, dev->sensor_flags, NULL); // URBs 1992-1993
5675 // Write to register 0x01: Register address space selection
5676 // Write to sensor register 0x02: Column Start
5677 buf[0] = 0x00; buf[1] = 0x04; // select sensor address space
5678 buf[2] = 0x00; buf[3] = 0x16; // start with column 22
5679 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x01, dev->sensor_flags, buf); // URBs 1994-1996
5680 // Writes to sensor registers 0x03: Window Height
5681 // 0x04: Window Width
5682 buf[0] = 0x01; buf[1] = 0xe6; // 486
5683 buf[2] = 0x02; buf[3] = 0x86; // 646
5684 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x03, dev->sensor_flags, buf); // URBs 1997-1999
5685 // Writes to sensor registers 0x05: Horizontal Blanking
5686 // 0x06: Vertical Blanking
5687 buf[0] = 0x00; buf[1] = 0x04; // 4 columns (pixel clocks) // AT FIRST START + FIRST CYCLE: 0x00 0x00
5688 buf[2] = 0x00; buf[3] = 0x00; // 0 rows
5689 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x05, dev->sensor_flags, buf); // URBs 2000-2002
5690 // Writes to sensor registers 0x07: Output Control
5691 // 0x08: Row Start
5692 buf[0] = 0x30; buf[1] = 0x02; // normal operation + chip enable + RESERVED options
5693 buf[2] = 0x00; buf[3] = 0x08; // row 8
5694 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x07, dev->sensor_flags, buf); // URBs 2003-2005
5695 // "Dummy" write to sensor Register 0x11: UNDOCUMENTED
5696 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0x11, dev->sensor_flags, NULL); // URBs 2006-2007
5697 // Writes to sensor registers 0x0c: Shutter Delay
5698 // 0x0d: Reset (Soft) (from MT9V011 datasheet)
5699 buf[0] = 0x00; buf[1] = 0x00; // 0 master clocks
5700 buf[2] = 0x00; buf[3] = 0x00; // return to normal operation
5701 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x0c, dev->sensor_flags, buf); // URBs 2008-2010
5702 // Writes to sensor registers 0x0e: UNDOCUMENTED
5703 // 0x0f: UNDOCUMENTED
5704 buf[0] = 0x00; buf[1] = 0x00;
5705 buf[2] = 0x00; buf[3] = 0x00;
5706 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x0e, dev->sensor_flags, buf); // URBs 2011-2013
5707 // Writes to sensor registers 0x10: UNDOCUMENTED
5708 // 0x11: UNDOCUMENTED
5709 buf[0] = 0x00; buf[1] = 0x00;
5710 buf[2] = 0x00; buf[3] = 0x00;
5711 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x10, dev->sensor_flags, buf); // URBs 2014-2016
5712 // Writes to sensor registers 0x12: 2X Zoom Col Start => 0x1e bit 0 must be set to activate zoom
5713 // 0x13: 2X Zoom Row Start => 0x1e bit 0 must be set to activate zoom
5714 buf[0] = 0x00; buf[1] = 0xb0; // column 176
5715 buf[2] = 0x00; buf[3] = 0x7c; // row 124
5716 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x12, dev->sensor_flags, buf); // URBs 2017-2018
5717 // Writes to sensor registers 0x14: UNDOCUMENTED
5718 // 0x15: UNDOCUMENTED
5719 buf[0] = 0x00; buf[1] = 0x00;
5720 buf[2] = 0x00; buf[3] = 0x00;
5721 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x14, dev->sensor_flags, buf); // URBs 2019-2021
5722 // Writes to sensor registers 0x16: UNDOCUMENTED
5723 // 0x17: UNDOCUMENTED
5724 buf[0] = 0x00; buf[1] = 0x00;
5725 buf[2] = 0x00; buf[3] = 0x00;
5726 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x16, dev->sensor_flags, buf); // URBs 2022-2024
5727 // Writes to sensor registers 0x18: UNDOCUMENTED
5728 // 0x19: UNDOCUMENTED
5729 buf[0] = 0x00; buf[1] = 0x00;
5730 buf[2] = 0x00; buf[3] = 0x00;
5731 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x18, dev->sensor_flags, buf); // URBs 2025-2027
5732 // Writes to sensor registers 0x1a: UNDOCUMENTED
5733 // 0x1b: UNDOCUMENTED
5734 buf[0] = 0x00; buf[1] = 0x00;
5735 buf[2] = 0x00; buf[3] = 0x00;
5736 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x1a, dev->sensor_flags, buf); // URBs 2028-2030
5737 // Writes to sensor registers 0x1c: UNDOCUMENTED
5738 // 0x1d: UNDOCUMENTED
5739 buf[0] = 0x00; buf[1] = 0x00;
5740 buf[2] = 0x00; buf[3] = 0x00;
5741 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x1c, dev->sensor_flags, buf); // URBs 2031-2033
5742 // Write to sensor register 0x30: RESERVED
5743 buf[0] = 0x00; buf[1] = 0x00;
5744 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x30, dev->sensor_flags, buf); // URBs 2034-2036
5745 // Write to sensor register 0x20: Read Mode
5746 buf[0] = 0x00; buf[1] = 0x00; // normal readout
5747 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x20, dev->sensor_flags, buf); // URBs 2037-2039
5748 // Writes to sensor registers 0x30: RESERVED
5749 // 0x31: RESERVED
5750 buf[0] = 0x00; buf[1] = 0x05;
5751 buf[2] = 0x00; buf[3] = 0x00;
5752 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x30, dev->sensor_flags, buf); // URBs 2040-2042
5753 // "Dummy" write to sensor Register 0x34: RESERVED
5754 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0x34, dev->sensor_flags, NULL); // URBs 2043-2044
5756 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
5758 // Write to sensor register 0x07: Output Control
5759 buf[0] = 0x00; buf[1] = 0x02; // chip enable, normal operation
5760 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x07, dev->sensor_flags, buf);
5761 // Write to sensor register 0x0d: Soft Reset
5762 buf[0] = 0x00; buf[1] = 0x01; // reset
5763 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x0d, dev->sensor_flags, buf);
5764 // Write to sensor register 0x0d: Soft Reset
5765 buf[0] = 0x00; buf[1] = 0x00; // resume operation
5766 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x0d, dev->sensor_flags, buf);
5767 // Writes to sensor registers 0x01: Row start
5768 // 0x02: Column Start
5769 buf[0] = 0x00; buf[1] = 0x08; // start with row 8
5770 buf[2] = 0x00; buf[3] = 0x16; // start with column 22
5771 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x01, dev->sensor_flags, buf);
5772 // Writes to sensor registers 0x03: Window Height
5773 // 0x04: Window Width
5774 buf[0] = 0x01; buf[1] = 0xe1; // 481
5775 buf[2] = 0x02; buf[3] = 0x81; // 641
5776 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x03, dev->sensor_flags, buf);
5777 // Writes to sensor registers 0x05: Horizontal Blanking
5778 // 0x06: Vertical Blanking
5779 buf[0] = 0x00; buf[1] = 0x83; // 131 columns (pixel clocks)
5780 buf[2] = 0x00; buf[3] = 0x06; // 6 rows
5781 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x05, dev->sensor_flags, buf);
5782 // Write to sensor register 0x0d: Soft Reset
5783 buf[0] = 0x00; buf[1] = 0x02; // UNKNOWN
5784 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x0d, dev->sensor_flags, buf);
5785 // Writes to sensor registers 0x0a: Pixel Clock Speed
5786 // 0x0b: Frame Restart
5787 buf[0] = 0x00; buf[1] = 0x00; // default
5788 buf[2] = 0x00; buf[3] = 0x00; // (has no effect/no restart)
5789 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x0a, dev->sensor_flags, buf);
5790 // Writes to sensor registers 0x0c: Shutter Delay
5791 // 0x0d: Soft Reset
5792 buf[0] = 0x00; buf[1] = 0x00; // 0 master clocks
5793 buf[2] = 0x00; buf[3] = 0x00; // resume operation
5794 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x0c, dev->sensor_flags, buf);
5795 // Writes to sensor registers 0x0e: UNDOCUMENTED
5796 // 0x0f: UNDOCUMENTED
5797 buf[0] = 0x00; buf[1] = 0x00;
5798 buf[2] = 0x00; buf[3] = 0x00;
5799 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x0e, dev->sensor_flags, buf);
5800 // Writes to sensor registers 0x10: UNDOCUMENTED
5801 // 0x11: UNDOCUMENTED
5802 buf[0] = 0x00; buf[1] = 0x00;
5803 buf[2] = 0x00; buf[3] = 0x00;
5804 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x10, dev->sensor_flags, buf);
5805 // Writes to sensor registers 0x12: 2X Zoom Column Start (from MT9V111 datasheet)
5806 // 0x13: 2X Zoom Row Start (from MT9V111 datasheet)
5807 buf[0] = 0x00; buf[1] = 0x00; // column 0 => bit0 of reg 0x1e must be set to activate zoom
5808 buf[2] = 0x00; buf[3] = 0x00; // row 0 => bit0 of reg 0x1e must be set to activate zoom
5809 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x12, dev->sensor_flags, buf);
5810 // Writes to sensor registers 0x14: UNDOCUMENTED
5811 // 0x15: UNDOCUMENTED
5812 buf[0] = 0x00; buf[1] = 0x00;
5813 buf[2] = 0x00; buf[3] = 0x00;
5814 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x14, dev->sensor_flags, buf);
5815 // Writes to sensor registers 0x16: UNDOCUMENTED
5816 // 0x17: UNDOCUMENTED
5817 buf[0] = 0x00; buf[1] = 0x00;
5818 buf[2] = 0x00; buf[3] = 0x00;
5819 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x16, dev->sensor_flags, buf);
5820 // Writes to sensor registers 0x18: UNDOCUMENTED
5821 // 0x19: UNDOCUMENTED
5822 buf[0] = 0x00; buf[1] = 0x00;
5823 buf[2] = 0x00; buf[3] = 0x00;
5824 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x18, dev->sensor_flags, buf);
5825 // Writes to sensor registers 0x1a: UNDOCUMENTED
5826 // 0x1b: UNDOCUMENTED
5827 buf[0] = 0x00; buf[1] = 0x00;
5828 buf[2] = 0x00; buf[3] = 0x00;
5829 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x1a, dev->sensor_flags, buf);
5830 // Writes to sensor registers 0x1c: UNDOCUMENTED
5831 // 0x1d: UNDOCUMENTED
5832 buf[0] = 0x00; buf[1] = 0x00;
5833 buf[2] = 0x00; buf[3] = 0x00;
5834 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x1c, dev->sensor_flags, buf);
5835 // Write to sensor register 0x32: RESERVED
5836 buf[0] = 0x00; buf[1] = 0x00;
5837 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x32, dev->sensor_flags, buf);
5838 // Writes to sensor registers 0x20: Read Mode
5839 // 0x21: RESERVED
5840 buf[0] = 0x11; buf[1] = 0x01; // output all frames (including bad frames) + UNDOCUMENTED
5841 buf[2] = 0x00; buf[3] = 0x00;
5842 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x20, dev->sensor_flags, buf);
5843 // Writes to sensor registers 0x22: RESERVED
5844 // 0x23: UNDOCUMENTED
5845 buf[0] = 0x00; buf[1] = 0x00;
5846 buf[2] = 0x00; buf[3] = 0x00;
5847 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x22, dev->sensor_flags, buf);
5848 // Writes to sensor registers 0x24: UNDOCUMENTED
5849 // 0x25: UNDOCUMENTED
5850 buf[0] = 0x00; buf[1] = 0x00;
5851 buf[2] = 0x00; buf[3] = 0x00;
5852 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x24, dev->sensor_flags, buf);
5853 // Writes to sensor registers 0x26: UNDOCUMENTED
5854 // 0x27: RESERVED
5855 buf[0] = 0x00; buf[1] = 0x00;
5856 buf[2] = 0x00; buf[3] = 0x24;
5857 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x26, dev->sensor_flags, buf);
5858 // "Dummy" write to sensor Register 0x30: RESERVED
5859 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0x30, dev->sensor_flags, NULL);
5860 // Writes to sensor registers 0x2f: RESERVED
5861 // 0x30: RESERVED
5862 buf[0] = 0xf7; buf[1] = 0xb0;
5863 buf[2] = 0x00; buf[3] = 0x05;
5864 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x2f, dev->sensor_flags, buf);
5865 // Writes to sensor registers 0x31: RESERVED
5866 // 0x32: RESERVED
5867 buf[0] = 0x00; buf[1] = 0x00;
5868 buf[2] = 0x00; buf[3] = 0x00;
5869 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x31, dev->sensor_flags, buf);
5870 // Writes to sensor registers 0x33: RESERVED
5871 // 0x34: RESERVED
5872 buf[0] = 0x00; buf[1] = 0x00;
5873 buf[2] = 0x01; buf[3] = 0x00;
5874 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x33, dev->sensor_flags, buf);
5875 // "Dummy" write to sensor Register 0x3b: RESERVED
5876 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0x3b, dev->sensor_flags, NULL);
5877 // Write to sensor register 0x3d: RESERVED
5878 buf[0] = 0x06; buf[1] = 0x8f;
5879 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x3d, dev->sensor_flags, buf);
5880 // Writes to sensor registers 0x40: RESERVED
5881 // 0x41: RESERVED
5882 buf[0] = 0x01; buf[1] = 0xe0;
5883 buf[2] = 0x00; buf[3] = 0xd1;
5884 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x40, dev->sensor_flags, buf);
5885 // Write to sensor register 0x44: UNDOCUMENTED
5886 buf[0] = 0x00; buf[1] = 0x82;
5887 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x44, dev->sensor_flags, buf);
5888 // Writes to sensor registers 0x5a: RESERVED
5889 // 0x5b: RESERVED
5890 buf[0] = 0x00; buf[1] = 0x00;
5891 buf[2] = 0x00; buf[3] = 0x00;
5892 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x5a, dev->sensor_flags, buf);
5893 // Writes to sensor registers 0x5c: RESERVED
5894 // 0x5d: RESERVED
5895 buf[0] = 0x00; buf[1] = 0x00;
5896 buf[2] = 0x00; buf[3] = 0x00;
5897 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x5c, dev->sensor_flags, buf);
5898 // Writes to sensor registers 0x5e: RESERVED
5899 // 0x5f: RESERVED
5900 buf[0] = 0x00; buf[1] = 0x00;
5901 buf[2] = 0xa3; buf[3] = 0x1d;
5902 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x5e, dev->sensor_flags, buf);
5903 // "Dummy" write to sensor Register 0x68: UNDOCUMENTED
5904 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0x68, dev->sensor_flags, NULL);
5905 // Write to sensor register 0x62: RESERVED
5906 buf[0] = 0x06; buf[1] = 0x11;
5907 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x62, dev->sensor_flags, buf);
5909 if (retI2C < 0)
5911 UDIA_INFO("1 or more errors occured in I2C-message-block 1 !\n");
5912 return -1;
5914 // END OF I2C MESSAGES
5915 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5917 if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
5919 buf[0] = 0x40;
5920 usb_microdia_control_write(dev, 0x1007, buf, 8);
5921 buf[0] = 0x40;
5922 usb_microdia_control_write(dev, 0x1006, buf, 8);
5926 // *** TEMPORARY SWITCH TO SLAVE ADDRESS 0x50, I2C READ ATTEMPT:
5927 // - WE CURRENTLY KNOW NO 6270 CAM THAT IS SUCCESSFULLY READ HERE
5928 // - IF READ FAILS, THIS IS NEVER DONE AGAIN (IN NEXT CYCLE OR FURTHER STARTS)
5929 usb_microdia_control_read(dev, 0x10c1, buf, 1); // returns 0x5c
5930 buf[0] = 0x50;
5931 usb_microdia_control_write(dev, 0x10c1, buf, 1);
5932 retI2C = sn9c20x_read_i2c_data(dev, 0x50, 1, 0x00, SN9C20X_I2C_2WIRE, buf);
5933 if (retI2C >= 0)
5934 UDIA_INFO("Read of address 0x00 from slave 0x50 successful:\n=> Please report this to microdia@googlegroups.com (http://groups.google.com/group/microdia) !\n");
5935 buf[0] = 0x5c;
5936 usb_microdia_control_write(dev, 0x10c1, buf, 1);
5939 buf[0] = 0x47; // ALEX: 0x44
5940 usb_microdia_control_write(dev, 0x10e0, buf, 1); // URB 2045
5941 buf[0] = 0x47; // ALEX: 0x04
5942 usb_microdia_control_write(dev, 0x10e0, buf, 1); // URB 2046
5943 buf[0] = 0xc6;
5944 usb_microdia_control_write(dev, 0x1001, buf, 1); // URB 2047
5945 buf[0] = 0xc4;
5946 usb_microdia_control_write(dev, 0x1001, buf, 1); // URB 2048
5947 buf[0] = 0x84; // ALEX: 0xc0
5948 usb_microdia_control_write(dev, 0x1001, buf, 1); // URB 2049
5949 /* ALEX:
5950 buf[0] = 0x40;
5951 usb_microdia_control_write(dev, 0x1001, buf, 1);
5954 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
5956 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5957 // I2C MESSAGES
5958 retI2C = 0;
5959 // Writes to sensor registers 0x02: Column Start
5960 // 0x03: Window Height
5961 buf[0] = 0x00; buf[1] = 0x16; // coulmn 22
5962 buf[2] = 0x01; buf[3] = 0xe1; // 481
5963 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x02, dev->sensor_flags, buf); // URBs 2050-2052
5964 // Writes to sensor registers 0x04: Window Width
5965 // 0x05: Horizontal Blanking
5966 buf[0] = 0x02; buf[1] = 0x81; // 641
5967 buf[2] = 0x00; buf[3] = 0x04; // 4 columns (pixel clocks) // AT FIRST START + FIRST CYCLE: 0x00 0x00
5968 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x04, dev->sensor_flags, buf); // URBs 2053-2055
5969 // Writes to sensor registers 0x06: Vertical Blanking
5970 // 0x07: Output Control
5971 buf[0] = 0x00; buf[1] = 0x00; // 0 rows
5972 buf[2] = 0x30; buf[3] = 0x02; // normal operation + chip enable + RESERVED options
5973 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x06, dev->sensor_flags, buf); // URBs 2056-2058
5974 // Write to sensor register 0x0e: UNDOCUMENTED
5975 buf[0] = 0x00; buf[1] = 0x08;
5976 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x0e, dev->sensor_flags, buf); // URBs 2059-2061
5977 if (retI2C < 0)
5979 UDIA_INFO("1 or more errors occured in I2C-message-block 2 !\n");
5980 return -1;
5982 // END OF I2C MESSAGES
5983 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5986 buf[0] = 0x02; buf[1] = 0x00; buf[2] = 0x02; buf[3] = 0x00;
5987 buf[4] = 0x28; buf[5] = 0x3c;
5988 usb_microdia_control_write(dev, 0x1180, buf, 6); // URB 2062
5989 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0; buf[4] = 0x00;
5990 usb_microdia_control_write(dev, 0x10fb, buf, 5); // URB 2063
5991 buf[0] = 0x0c;
5992 usb_microdia_control_write(dev, 0x1189, buf, 1); // URB 2064
5993 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
5994 usb_microdia_control_write(dev, 0x11a1, buf, 4); // URB 2065
5995 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
5996 usb_microdia_control_write(dev, 0x11ab, buf, 4); // URB 2066
5997 buf[0] = 0x78; // ALEX: 0x7c
5998 usb_microdia_control_write(dev, 0x1000, buf, 1); // URB 2067
5999 buf[0] = 0x18; // ALEX: 0x1c
6000 usb_microdia_control_write(dev, 0x1002, buf, 1); // URB 2068
6001 buf[0] = 0x18; // ALEX: 0x1c
6002 usb_microdia_control_write(dev, 0x1002, buf, 1); // URB 2069
6003 buf[0] = 0x38;
6004 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2070
6005 buf[0] = 0x04;
6006 usb_microdia_control_write(dev, 0x118a, buf, 1); // URB 2071
6007 buf[0] = 0x04;
6008 usb_microdia_control_write(dev, 0x0395, buf, 1); // URB 2072
6010 buf[0] = 0x78;
6011 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2073
6012 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2074 // 0x38
6013 if (buf[0] == 0x38)
6014 buf[0] = 0x79;
6015 else if (buf[0] == 0xb8)
6016 buf[0] = 0xf9;
6017 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2075
6018 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2076 // 0xb9
6019 if (buf[0] == 0x39)
6020 buf[0] = 0x7a;
6021 else if (buf[0] == 0xb9)
6022 buf[0] = 0xfa;
6023 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2077
6024 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2078
6025 if (buf[0] == 0x3a)
6026 buf[0] = 0x7b;
6027 else if (buf[0] == 0xba)
6028 buf[0] = 0xfb;
6029 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2079
6030 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2080 // 0x3b
6031 if (buf[0] == 0x3b)
6032 buf[0] = 0x7c;
6033 else if (buf[0] == 0xbb)
6034 buf[0] = 0xfc;
6035 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2081
6036 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2082 // 0x3c
6037 if (buf[0] == 0x3c)
6038 buf[0] = 0x7d;
6039 else if (buf[0] == 0xbc)
6040 buf[0] = 0xfd;
6041 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2083
6042 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2084 // 0x3d
6043 last_11b8[0] = buf[0];
6044 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6046 if (buf[0] == 0x3d)
6047 buf[0] = 0x7e;
6048 else if (buf[0] == 0xbd)
6049 buf[0] = 0xfe;
6050 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2085
6051 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2086
6052 if (buf[0] == 0x3e)
6053 buf[0] = 0x7f;
6054 else if (buf[0] == 0xbe)
6055 buf[0] = 0xff;
6056 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2087
6057 usb_microdia_control_read(dev, 0x11b8, last_11b8, 1); // URB 2088
6059 buf[0] = last_11b8[0] & 0xf0; // 0xf0 or 0x70
6060 buf[0] = buf[0] | 0x0d; // 0x0c => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 8 READS/WRITES
6061 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2089
6064 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6065 // I2C MESSAGES
6066 retI2C = 0;
6067 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6069 // Write to sensor register 0x06: Vertical Blanking
6070 buf[0] = 0x00; buf[1] = 0x2d; // 45 rows
6071 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x06, dev->sensor_flags, buf); // URBs 2090-2092
6072 // Write to sensor register 0x05: Horizontal Blanking
6073 buf[0] = 0x00; buf[1] = 0x04; // 4 columns (pixel clocks)
6074 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x05, dev->sensor_flags, buf); // URBs 2093-2095
6075 // Write to sensor register 0x20: Read Mode
6076 buf[0] = 0x00; buf[1] = 0x00; // normal readout
6077 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x20, dev->sensor_flags, buf); // URBs 2096-2098
6079 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6081 // Write to sensor register 0x0a: Pixel Clock Speed
6082 buf[0] = 0x00; buf[1] = 0x00; // default
6083 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x0a, dev->sensor_flags, buf);
6084 // Write to sensor register 0x06: Vertical Blanking
6085 buf[0] = 0x00; buf[1] = 0x29; // 41 rows
6086 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x06, dev->sensor_flags, buf);
6087 // Write to sensor register 0x05: Horizontal Blanking
6088 buf[0] = 0x00; buf[1] = 0x09; // 9 columns (pixel clocks)
6089 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x05, dev->sensor_flags, buf);
6090 // Write to sensor register 0x20: Read Mode
6091 buf[0] = 0x11; buf[1] = 0x01; // output all frames (including bad ones) + UNKNOWN
6092 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x20, dev->sensor_flags, buf);
6094 if (retI2C < 0)
6096 UDIA_INFO("1 or more errors occured in I2C-message-block 3 !\n");
6097 return -1;
6099 // END OF I2C MESSAGES
6100 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6103 buf[0] = 0x02;
6104 usb_microdia_control_write(dev, 0x1180, buf, 1); // URB 2099
6106 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6107 // I2C MESSAGE
6108 retI2C = 0;
6109 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6111 // Write to sensor register 0x20: Read Mode
6112 buf[0] = 0x00; buf[1] = 0x00; // normal readout
6113 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x20, dev->sensor_flags, buf); // URBs 2100-2102
6115 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6117 // Write to sensor register 0x20: Read Mode
6118 buf[0] = 0x11; buf[1] = 0x01; // output all frames (including bad ones) + UNKNOWN
6119 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x20, dev->sensor_flags, buf);
6121 if (retI2C < 0)
6123 UDIA_INFO("1 or more errors occured in I2C-message-block 4 !\n");
6124 return -1;
6126 // END OF I2C MESSAGES
6127 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6130 buf[0] = 0x02;
6131 usb_microdia_control_write(dev, 0x1182, buf, 1); // URB 2103
6134 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6135 // I2C MESSAGES
6136 retI2C = 0;
6137 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6139 // Write to sensor register 0x09: Shutter Width
6140 buf[0] = 0x00; buf[1] = 0x64; // integration of 100 rows
6141 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x09, dev->sensor_flags, buf); // URBs 2104-2106
6142 // Write to sensor register 0x2b: Green 1 Gain
6143 // 0x2c: Blue Gain
6144 buf[0] = 0x00; buf[1] = 0xa0; // 32*0.03125*2 = 2
6145 buf[2] = 0x00; buf[3] = 0xa0; // 32*0.03125*2 = 2
6146 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x2b, dev->sensor_flags, buf); // URBs 2107-2109
6147 // Write to sensor register 0x2d: Red Gain
6148 // 0x2e: Green 2 Gain
6149 buf[0] = 0x00; buf[1] = 0xa0; // 32*0.03125*2 = 2
6150 buf[2] = 0x00; buf[3] = 0xa0; // 32*0.03125*2 = 2
6151 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x2d, dev->sensor_flags, buf); // URBs 2110-2112
6152 // "Dummy" write to sensor Register 0x33: RESERVED
6153 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0x33, dev->sensor_flags, NULL); // URBs 2113-2114
6155 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6157 // Write to sensor register 0x09: Shutter Width
6158 buf[0] = 0x00; buf[1] = 0x64; // integration of 100 rows
6159 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x09, dev->sensor_flags, buf);
6160 // Write to sensor register 0x07: Output Control
6161 buf[0] = 0x00; buf[1] = 0x03; // dont update changes until bit0=0, chip enable, normal operation
6162 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x07, dev->sensor_flags, buf);
6163 // Write to sensor register 0x2b: Green 1 Gain
6164 // 0x2c: Blue Gain
6165 buf[0] = 0x00; buf[1] = 0x33; // 51*0.03125*1 = 1.59375
6166 buf[2] = 0x00; buf[3] = 0xa0; // 32*0.03125*2 = 2
6167 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x2b, dev->sensor_flags, buf);
6168 // Write to sensor register 0x2d: Red Gain
6169 // 0x2e: Green 2 Gain
6170 buf[0] = 0x00; buf[1] = 0xa0; // 32*0.03125*2 = 2
6171 buf[2] = 0x00; buf[3] = 0x33; // 51*0.03125*1 = 1.59375
6172 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x2d, dev->sensor_flags, buf);
6173 // "Dummy" write to sensor Register 0x33: RESERVED
6174 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0x33, dev->sensor_flags, NULL);
6175 // Write to sensor register 0x07: Output Control
6176 buf[0] = 0x00; buf[1] = 0x02; // chip enable, normal operation
6177 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x07, dev->sensor_flags, buf);
6179 if (retI2C < 0)
6181 UDIA_INFO("1 or more errors occured in I2C-message-block 5 !\n");
6182 return -1;
6184 // END OF I2C MESSAGES
6185 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6188 buf[0] = 0x20;
6189 usb_microdia_control_write(dev, 0x118c, buf, 1); // URB 2115
6190 buf[0] = 0x20;
6191 usb_microdia_control_write(dev, 0x118d, buf, 1); // URB 2116
6192 buf[0] = 0x20;
6193 usb_microdia_control_write(dev, 0x118e, buf, 1); // URB 2117
6194 buf[0] = 0x20;
6195 usb_microdia_control_write(dev, 0x118f, buf, 1); // URB 2118
6196 buf[0] = 0x0a;
6197 usb_microdia_control_write(dev, 0x11ba, buf, 1); // URB 2119
6198 buf[0] = 0x20;
6199 usb_microdia_control_write(dev, 0x118c, buf, 1); // URB 2120
6200 buf[0] = 0x20;
6201 usb_microdia_control_write(dev, 0x118d, buf, 1); // URB 2121
6202 buf[0] = 0x20;
6203 usb_microdia_control_write(dev, 0x118e, buf, 1); // URB 2122
6204 buf[0] = 0x20;
6205 usb_microdia_control_write(dev, 0x118f, buf, 1); // URB 2123
6207 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6209 buf[0] = 0x14;
6211 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6213 buf[0] = 0x0a;
6215 usb_microdia_control_write(dev, 0x118b, buf, 1); // URB 2124
6218 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6220 buf[0] = 0x0a; buf[1] = 0x36; buf[2] = 0x56; buf[3] = 0x6e;
6221 buf[4] = 0x7f; buf[5] = 0x8d; buf[6] = 0x9b; buf[7] = 0xa8;
6222 buf[8] = 0xb4; buf[9] = 0xbd; buf[10] = 0xc7; buf[11] = 0xd0;
6223 buf[12] = 0xd9; buf[13] = 0xe2; buf[14] = 0xec; buf[15] = 0xf0;
6224 buf[16] = 0xf5;
6226 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6228 buf[0] = 0x08; buf[1] = 0x35; buf[2] = 0x5a; buf[3] = 0x6d;
6229 buf[4] = 0x7d; buf[5] = 0x8b; buf[6] = 0x97; buf[7] = 0xa3;
6230 buf[8] = 0xad; buf[9] = 0xb7; buf[10] = 0xc1; buf[11] = 0xca;
6231 buf[12] = 0xd3; buf[13] = 0xdb; buf[14] = 0xe3; buf[15] = 0xeb;
6232 buf[16] = 0xf2;
6234 usb_microdia_control_write(dev, 0x1190, buf, 17); // URB 2125
6236 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6238 buf[0] = 0x16; buf[1] = 0x00; buf[2] = 0x2b; buf[3] = 0x00;
6239 buf[4] = 0x08; buf[5] = 0x00; buf[6] = 0xf6; buf[7] = 0x0f;
6240 buf[8] = 0xd2; buf[9] = 0x0f; buf[10] = 0x38; buf[11] = 0x00;
6241 buf[12] = 0x34; buf[13] = 0x00; buf[14] = 0xcf; buf[15] = 0x0f;
6242 buf[16] = 0xfd; buf[17] = 0x0f; buf[18] = 0x00; buf[19] = 0x00;
6243 buf[20] = 0x00;
6245 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6247 buf[0] = 0x16; buf[1] = 0x00; buf[2] = 0x2b; buf[3] = 0x00;
6248 buf[4] = 0x08; buf[5] = 0x00; buf[6] = 0xf0; buf[7] = 0x0f;
6249 buf[8] = 0xd0; buf[9] = 0x0f; buf[10] = 0x41; buf[11] = 0x00;
6250 buf[12] = 0x38; buf[13] = 0x00; buf[14] = 0xc7; buf[15] = 0x0f;
6251 buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00;
6252 buf[20] = 0x00;
6254 for (k=0; k<9; k++) // AT FIRST START + FIRST CYCLE: first 8 writes 21 bytes 0x00
6256 usb_microdia_control_write(dev, 0x10e1, buf, 21); // URB 2126 - 2134
6259 buf[0] = 0x07;
6260 usb_microdia_control_write(dev, 0x10f7, buf, 1); // URB 2135
6261 buf[0] = 0x18; // ALEX: 0x00
6262 usb_microdia_control_write(dev, 0x10f6, buf, 1); // URB 2136
6264 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6266 buf[0] = 0x16; buf[1] = 0x00; buf[2] = 0x2b; buf[3] = 0x00;
6267 buf[4] = 0x08; buf[5] = 0x00; buf[6] = 0xf6; buf[7] = 0x0f;
6268 buf[8] = 0xd2; buf[9] = 0x0f; buf[10] = 0x38; buf[11] = 0x00;
6269 buf[12] = 0x34; buf[13] = 0x00; buf[14] = 0xcf; buf[15] = 0x0f;
6270 buf[16] = 0xfd; buf[17] = 0x0f; buf[18] = 0x00; buf[19] = 0x00;
6271 buf[20] = 0x00;
6273 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6275 buf[0] = 0x16; buf[1] = 0x00; buf[2] = 0x2b; buf[3] = 0x00;
6276 buf[4] = 0x08; buf[5] = 0x00; buf[6] = 0xf0; buf[7] = 0x0f;
6277 buf[8] = 0xd0; buf[9] = 0x0f; buf[10] = 0x41; buf[11] = 0x00;
6278 buf[12] = 0x38; buf[13] = 0x00; buf[14] = 0xc7; buf[15] = 0x0f;
6279 buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00;
6280 buf[20] = 0x00;
6282 usb_microdia_control_write(dev, 0x10e1, buf, 21); // URB 2137
6284 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6286 buf[0] = 0x01;
6288 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6290 buf[0] = 0x14;
6292 usb_microdia_control_write(dev, 0x10f8, buf, 1); // URB 2138
6294 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6296 buf[0] = 0x0a;
6298 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6300 buf[0] = 0xff;
6302 usb_microdia_control_write(dev, 0x10fa, buf, 1); // URB 2139
6304 buf[0] = 0x00;
6305 usb_microdia_control_write(dev, 0x10f9, buf, 1); // URB 2140
6306 buf[0] = 0x00;
6307 usb_microdia_control_write(dev, 0x10f9, buf, 1); // URB 2141
6308 buf[0] = 0x0a;
6309 usb_microdia_control_write(dev, 0x11ba, buf, 1); // URB 2142
6310 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00;
6311 usb_microdia_control_write(dev, 0x11bc, buf, 4); // URB 2143
6312 for (k=0; k<48; k++) buf[k] = 0x00;
6313 usb_microdia_control_write(dev, 0x11c0, buf, 48); // URB 2144
6314 buf[0] = 0x20;
6315 usb_microdia_control_write(dev, 0x118c, buf, 1); // URB 2145
6316 buf[0] = 0x20;
6317 usb_microdia_control_write(dev, 0x118d, buf, 1); // URB 2146
6318 buf[0] = 0x20;
6319 usb_microdia_control_write(dev, 0x118e, buf, 1); // URB 2147
6320 buf[0] = 0x20;
6321 usb_microdia_control_write(dev, 0x118f, buf, 1); // URB 2148
6322 buf[0] = 0x2d; buf[1] = 0x2d; buf[2] = 0x3a; buf[3] = 0x05;
6323 buf[4] = 0x04; buf[5] = 0x3f;
6324 usb_microdia_control_write(dev, 0x11a5, buf, 6); // URB 2149
6326 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6328 buf[0] = 0x14; buf[1] = 0xec; buf[2] = 0x0a; buf[3] = 0xf6;
6330 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6332 buf[0] = 0x28; buf[1] = 0xd8; buf[2] = 0x14; buf[3] = 0xec;
6334 usb_microdia_control_write(dev, 0x11af, buf, 4); // URB 2150
6336 buf[0] = 0x32; buf[1] = 0xdd; buf[2] = 0x2d; buf[3] = 0xdd;
6337 usb_microdia_control_write(dev, 0x11b3, buf, 4); // URB 2151
6338 buf[0] = 0x47; // ALEX: 0x04
6339 usb_microdia_control_write(dev, 0x10e0, buf, 1); // URB 2152
6340 buf[0] = 0x01;
6341 usb_microdia_control_write(dev, 0x1061, buf, 1); // URB 2153
6342 buf[0] = 0x67; // ALEX: 0x24
6343 usb_microdia_control_write(dev, 0x10e0, buf, 1); // URB 2154
6344 buf[0] = 0x0d; buf[1] = 0x08; buf[2] = 0x08; buf[3] = 0x0d;
6345 buf[4] = 0x08; buf[5] = 0x08; buf[6] = 0x0d; buf[7] = 0x0d;
6346 buf[8] = 0x0d; buf[9] = 0x0d; buf[10] = 0x11; buf[11] = 0x0d;
6347 buf[12] = 0x0d; buf[13] = 0x11; buf[14] = 0x15; buf[15] = 0x21;
6348 buf[16] = 0x15; buf[17] = 0x15; buf[18] = 0x11; buf[19] = 0x11;
6349 buf[20] = 0x15; buf[21] = 0x2a; buf[22] = 0x1d; buf[23] = 0x1d;
6350 buf[24] = 0x19; buf[25] = 0x21; buf[26] = 0x32; buf[27] = 0x2a;
6351 buf[28] = 0x32; buf[29] = 0x32; buf[30] = 0x2e; buf[31] = 0x2a;
6352 buf[32] = 0x2e; buf[33] = 0x2e; buf[34] = 0x36; buf[35] = 0x3a;
6353 buf[36] = 0x4b; buf[37] = 0x43; buf[38] = 0x36; buf[39] = 0x3a;
6354 buf[40] = 0x47; buf[41] = 0x3a; buf[42] = 0x2e; buf[43] = 0x2e;
6355 buf[44] = 0x43; buf[45] = 0x5c; buf[46] = 0x43; buf[47] = 0x47;
6356 buf[48]= 0x4f; buf[49] = 0x53; buf[50] = 0x58; buf[51] = 0x58;
6357 buf[52] = 0x58; buf[53] = 0x32; buf[54] = 0x3f; buf[55] = 0x60;
6358 buf[56] = 0x64; buf[57] = 0x5c; buf[58] = 0x53; buf[59] = 0x64;
6359 buf[60] = 0x4b; buf[61] = 0x53; buf[62] = 0x58; buf[63] = 0x53;
6360 usb_microdia_control_write(dev, 0x1100, buf, 64); // URB 2155
6361 buf[0] = 0x0d; buf[1] = 0x11; buf[2] = 0x11; buf[3] = 0x15;
6362 buf[4] = 0x11; buf[5] = 0x15; buf[6] = 0x26; buf[7] = 0x15;
6363 buf[8] = 0x15; buf[9] = 0x26; buf[10] = 0x53; buf[11] = 0x36;
6364 buf[12] = 0x2e; buf[13] = 0x36; buf[14] = 0x53; buf[15] = 0x53;
6365 buf[16] = 0x53; buf[17] = 0x53; buf[18] = 0x53; buf[19] = 0x53;
6366 buf[20] = 0x53; buf[21] = 0x53; buf[22] = 0x53; buf[23] = 0x53;
6367 buf[24] = 0x53; buf[25] = 0x53; buf[26] = 0x53; buf[27] = 0x53;
6368 buf[28] = 0x53; buf[29] = 0x53; buf[30] = 0x53; buf[31] = 0x53;
6369 buf[32] = 0x53; buf[33] = 0x53; buf[34] = 0x53; buf[35] = 0x53;
6370 buf[36] = 0x53; buf[37] = 0x53; buf[38] = 0x53; buf[39] = 0x53;
6371 buf[40] = 0x53; buf[41] = 0x53; buf[42] = 0x53; buf[43] = 0x53;
6372 buf[44] = 0x53; buf[45] = 0x53; buf[46] = 0x53; buf[47] = 0x53;
6373 buf[48] = 0x53; buf[49] = 0x53; buf[50] = 0x53; buf[51] = 0x53;
6374 buf[52] = 0x53; buf[53] = 0x53; buf[54] = 0x53; buf[55] = 0x53;
6375 buf[56] = 0x53; buf[57] = 0x53; buf[58] = 0x53; buf[59] = 0x53;
6376 buf[60] = 0x53; buf[61] = 0x53; buf[62] = 0x53; buf[63] = 0x53;
6377 usb_microdia_control_write(dev, 0x1140, buf, 64); // URB 2156
6378 buf[0] = 0x47; // ALEX: 0x04
6379 usb_microdia_control_write(dev, 0x10e0, buf, 1); // URB 2157
6380 buf[0] = 0x03;
6381 usb_microdia_control_write(dev, 0x1061, buf, 1); // URB 2158
6382 buf[0] = 0x4b; // ALEX: 0x08
6383 usb_microdia_control_write(dev, 0x10e0, buf, 1); // URB 2159
6385 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6387 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6388 // I2C MESSAGES
6389 retI2C = 0;
6390 // Writes to sensor registers 0x02: Column Start
6391 // 0x03: Window Hight
6392 buf[0] = 0x00; buf[1] = 0x16; // coulmn 22
6393 buf[2] = 0x01; buf[3] = 0xe1; // 481
6394 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x02, dev->sensor_flags, buf); // URBs 2160-2162
6395 // Writes to sensor registers 0x04: Window Width
6396 // 0x05: Horizontal Blanking
6397 buf[0] = 0x02; buf[1] = 0x81; // 641
6398 buf[2] = 0x00; buf[3] = 0x04; // 4 columns (pixel clocks)
6399 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x04, dev->sensor_flags, buf); // URBs 2163-2165
6400 // Writes to sensor registers 0x06: Vertical Blanking
6401 // 0x07: Output Control
6402 buf[0] = 0x00; buf[1] = 0x2d; // 45 rows
6403 buf[2] = 0x30; buf[3] = 0x02; // RESERVED options
6404 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x06, dev->sensor_flags, buf); // URBs 2166-2167
6405 // Writes to sensor register 0x0e: UNDOCUMENTED
6406 buf[0] = 0x00; buf[1] = 0x08;
6407 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x0e, dev->sensor_flags, buf); // URBs 2168-2170
6408 if (retI2C < 0)
6410 UDIA_INFO("1 or more errors occured in I2C-message-block 6 !\n");
6411 return -1;
6413 // END OF I2C MESSAGES
6414 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6416 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6418 buf[0] = 0x40;
6419 usb_microdia_control_write(dev, 0x1007, buf, 1);
6420 buf[0] = 0x40;
6421 usb_microdia_control_write(dev, 0x1006, buf, 1);
6425 buf[0] = 0x02; buf[1] = 0x00; buf[2] = 0x02; buf[3] = 0x00;
6426 buf[4] = 0x28; buf[5] = 0x3c;
6427 usb_microdia_control_write(dev, 0x1180, buf, 6); // URB 2171
6428 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0; buf[4] = 0x00;
6429 usb_microdia_control_write(dev, 0x10fb, buf, 5); // URB 2172
6430 buf[0] = 0x0c;
6431 usb_microdia_control_write(dev, 0x1189, buf, 1); // URB 2173
6432 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
6433 usb_microdia_control_write(dev, 0x11a1, buf, 4); // URB 2174
6434 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
6435 usb_microdia_control_write(dev, 0x11ab, buf, 4); // URB 2175
6436 buf[0] = 0x03;
6437 usb_microdia_control_write(dev, 0x1061, buf, 1); // URB 2176
6438 buf[0] = 0x0a;
6439 usb_microdia_control_write(dev, 0x11ba, buf, 1); // URB 2177
6440 buf[0] = 0x00;
6441 usb_microdia_control_write(dev, 0x11b9, buf, 1); // URB 2178
6442 buf[0] = 0x0b;
6443 usb_microdia_control_write(dev, 0x11ba, buf, 1); // URB 2179
6444 buf[0] = 0x01;
6445 usb_microdia_control_write(dev, 0x1061, buf, 1); // URB 2180
6446 buf[0] = 0x78; // ALEX: 0x7c
6447 usb_microdia_control_write(dev, 0x1000, buf, 1); // URB 2181
6448 buf[0] = 0x18; // ALEX: 0x1c
6449 usb_microdia_control_write(dev, 0x1002, buf, 1); // URB 2182
6450 buf[0] = 0x18; // ALEX: 0x1c
6451 usb_microdia_control_write(dev, 0x1002, buf, 1); // URB 2183
6452 buf[0] = 0x7d; // ALEX: 0xfc
6453 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2184
6454 buf[0] = 0x04;
6455 usb_microdia_control_write(dev, 0x118a, buf, 1); // URB 2185
6456 buf[0] = 0x04;
6457 usb_microdia_control_write(dev, 0x0395, buf, 1); // URB 2186
6459 if ((last_11b8[0] == 0x3d) || (last_11b8[0] == 0x3f))
6460 buf[0] = 0x78;
6461 else if ((last_11b8[0] == 0xbd) || (last_11b8[0] == 0xbf))
6462 buf[0] = 0xf8;
6463 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2187
6464 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2188 // 0x38
6465 if (buf[0] == 0x38)
6466 buf[0] = 0x79;
6467 else if (buf[0] == 0xb8)
6468 buf[0] = 0xf9;
6469 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2189
6470 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2190 // 0xb9
6471 if (buf[0] == 0x39)
6472 buf[0] = 0x7a;
6473 else if (buf[0] == 0xb9)
6474 buf[0] = 0xfa;
6475 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2191
6476 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2192 // 0xba
6477 if (buf[0] == 0x3a)
6478 buf[0] = 0x7b;
6479 else if (buf[0] == 0xba)
6480 buf[0] = 0xfb;
6481 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2193
6482 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2194 // 0x3b
6483 if (buf[0] == 0x3b)
6484 buf[0] = 0x7c;
6485 else if (buf[0] == 0xbb)
6486 buf[0] = 0xfc;
6487 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2195
6488 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2196 // 0x3c
6489 if (buf[0] == 0x3c)
6490 buf[0] = 0x7d;
6491 else if (buf[0] == 0xbc)
6492 buf[0] = 0xfd;
6493 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2197
6494 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2198 // 0x3d
6495 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6497 if (buf[0] == 0x3d)
6498 buf[0] = 0x7e;
6499 else if (buf[0] == 0xbd)
6500 buf[0] = 0xfe;
6501 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2199
6502 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2200
6503 if (buf[0] == 0x3e)
6504 buf[0] = 0x7f;
6505 else if (buf[0] == 0xbe)
6506 buf[0] = 0xff;
6507 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2201
6508 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2202
6510 buf[0] = buf[0] & 0xf0; // 0xf0 or 0x70
6511 buf[0] = buf[0] | 0x0d; // 0x0c => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 8 READS/WRITES
6512 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2089
6514 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6515 // I2C MESSAGES
6516 retI2C = 0;
6517 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6519 // Write to sensor register 0x06: Vertical Blanking
6520 buf[0] = 0x00; buf[1] = 0x2d; // 45 rows
6521 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x06, dev->sensor_flags, buf); // URBs 2204-2206
6522 // Write to sensor register 0x05: Horizontal Blanking
6523 buf[0] = 0x00; buf[1] = 0x04; // 4 columns (pixel clocks)
6524 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x05, dev->sensor_flags, buf); // URBs 2207-2209
6525 // Read of sensor register 0x36: Chip Version (mirror of reg0xff)
6526 retI2C += sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 2, 0x36, dev->sensor_flags, buf); // URBs 2211-2215 // 0x82 0x3a
6528 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6530 // Write to sensor register 0x0a: Pixel Clock Speed
6531 buf[0] = 0x00; buf[1] = 0x00; // default
6532 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x06, dev->sensor_flags, buf);
6533 // Write to sensor register 0x06: Vertical Blanking
6534 buf[0] = 0x00; buf[1] = 0x29; // 41 rows
6535 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x06, dev->sensor_flags, buf);
6536 // Write to sensor register 0x05: Horizontal Blanking
6537 buf[0] = 0x00; buf[1] = 0x09; // 9 columns (pixel clocks)
6538 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x05, dev->sensor_flags, buf);
6539 // Read of sensor register 0x00: Chip Version (=reg0xff)
6540 retI2C += sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 2, 0x00, dev->sensor_flags, buf); // 0x82 0x43
6542 if (retI2C < 0)
6544 UDIA_INFO("1 or more errors occured in I2C-message-block 7 !\n");
6545 return -1;
6547 // END OF I2C MESSAGES
6548 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6551 buf[0] = 0x03;
6552 usb_microdia_control_write(dev, 0x1061, buf, 1); // URB 2216
6555 /*** NOW DRIVER DOES STOP-SEQUENCE
6556 - WITHOUT WRITES TO 0x1007 AND 0x1006 (URBs 3544-3550) => MT9V111
6557 - WRITING 0x40 INSTEAD OF 0x60 TO 0x1007 AND 0x1006 => MT9V011
6558 ***/
6559 /*** 2nd, 3rd, ... CYCLE: ALL MESSAGES (URBs 1953 - URBs 2216) ARE REPEATED ***/
6560 /*** ----- WE DON'T DO THIS, IT SEEMS TO BE UNNECESSARY ----- ***/
6562 // Setup IFP registers for AE and AWB (new, not in the logs):
6563 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6565 mt9v111_setup_autoexposure(dev);
6566 mt9v111_setup_autowhitebalance(dev);
6567 mt9v111_set_autocorrections(dev, 1);
6570 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6572 buf[0] = 0x20;
6574 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6576 buf[0] = 0x60;
6578 usb_microdia_control_write(dev, 0x1007, buf, 1); // URB 2489
6579 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6581 buf[0] = 0x00;
6583 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6585 buf[0] = 0x40;
6587 usb_microdia_control_write(dev, 0x1006, buf, 1); // URB 2490
6588 // => These two writes seem to cause the cam to start sending isochronus USB messages
6590 return 0;
6593 int microdia_627b_start_stream(struct usb_microdia *dev)
6595 int ret;
6596 /* int actual; */
6597 __u16 reg;
6598 __u8 buf[64];
6600 buf[0] = 0x00; /** Will have to be set for every single interrupt. */
6602 ret = usb_interrupt_msg(dev->udev, 0x00000083, buf, 0x0000001, &actual, 1000); // URB 43
6605 reg = 0x1066;
6606 buf[0] = 0x00;
6607 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 44 */
6608 if (ret < 0)
6609 goto err;
6612 //ret = usb_set_interface(dev->udev, 0, 8);
6613 //if(ret < 0) goto err;
6615 //buf[0] = 0x00; // Will have to be set for every single interrupt
6616 //ret = usb_interrupt_msg(dev->udev, 0x00000083, buf, 0x0000001, &actual, 1000); // URB 45
6619 reg = 0x1000;
6620 buf[0] = 0x78;
6621 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 46 */
6622 if (ret < 0)
6623 goto err;
6625 reg = 0x1001;
6626 buf[0] = 0xc7;
6627 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 47 */
6628 if (ret < 0)
6629 goto err;
6631 reg = 0x1002;
6632 buf[0] = 0x18;
6633 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 48 */
6634 if (ret < 0)
6635 goto err;
6637 reg = 0x1061;
6638 buf[0] = 0x01;
6639 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 49 */
6640 if (ret < 0)
6641 goto err;
6643 reg = 0x1020;
6644 buf[0] = 0x80;
6645 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 50 */
6646 if (ret < 0)
6647 goto err;
6649 reg = 0x1067;
6650 buf[0] = 0x40; buf[1] = 0x30; buf[2] = 0x20; buf[3] = 0x10; buf[4] = 0x08;
6651 ret = usb_microdia_control_write(dev, reg, buf, 5); /* URB 51 */
6652 if (ret < 0)
6653 goto err;
6655 reg = 0x10c0;
6656 buf[0] = 0x80; buf[1] = 0x21; buf[2] = 0x00; buf[3] = 0x00;
6657 buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00;
6658 buf[8] = 0x03;
6659 ret = usb_microdia_control_write(dev, reg, buf, 9); /* URB 52 */
6660 if (ret < 0)
6661 goto err;
6663 /* transferbufferlength is 18, but data is 24 bytes long, what to do ? */
6664 reg = 0x10e0;
6665 buf[0] = 0x45; buf[1] = 0x18; buf[2] = 0x00; buf[3] = 0x30; buf[4] = 0x00;
6666 buf[5] = 0x09; buf[6] = 0x00; buf[7] = 0xed; buf[8] = 0x0f; buf[9] = 0xda;
6667 buf[10] = 0x0f; buf[11] = 0x3a; buf[12] = 0x00; buf[13] = 0x3a; buf[14] = 0x00;
6668 buf[15] = 0xd0; buf[16] = 0x0f; buf[17] = 0xf7; buf[18] = 0x0f; buf[19] = 0x00;
6669 buf[20] = 0x00; buf[21] = 0x00; buf[22] = 0x60; buf[23] = 0x0a;
6670 ret = usb_microdia_control_write(dev, reg, buf, 24); /* URB 53 */
6671 if (ret < 0)
6672 goto err;
6674 reg = 0x10f8;
6675 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00;
6676 ret = usb_microdia_control_write(dev, reg, buf, 3); /* URB 54 */
6677 if (ret < 0)
6678 goto err;
6680 reg = 0x10fb;
6681 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0; buf[4] = 0x00;
6682 ret = usb_microdia_control_write(dev, reg, buf, 5); /* URB 55 */
6683 if (ret < 0)
6684 goto err;
6686 reg = 0x1188;
6687 buf[0] = 0x86; buf[1] = 0x8c; buf[2] = 0x08;
6688 ret = usb_microdia_control_write(dev, reg, buf, 3); /* URB 56 */
6689 if (ret < 0)
6690 goto err;
6692 reg = 0x118b;
6693 buf[0] = 0x00; buf[1] = 0x20; buf[2] = 0x20; buf[3] = 0x20; buf[4] = 0x20;
6694 buf[5] = 0x00; buf[6] = 0x24; buf[7] = 0x3b; buf[8] = 0x4f; buf[9] = 0x61;
6695 buf[10] = 0x71; buf[11] = 0x80; buf[12] = 0x8f; buf[13] = 0x9d; buf[14] = 0xab;
6696 buf[15] = 0xb8; buf[16] = 0xc4; buf[17] = 0xd1; buf[18] = 0xdd; buf[19] = 0xe9;
6697 buf[20] = 0xf4; buf[21] = 0xff;
6698 ret = usb_microdia_control_write(dev, reg, buf, 22); /* URB 57 */
6699 if (ret < 0)
6700 goto err;
6702 reg = 0x11a1;
6703 buf[0] = 0x00; buf[1] = 0x00;
6704 ret = usb_microdia_control_write(dev, reg, buf, 2); /* URB 58 */
6705 if (ret < 0)
6706 goto err;
6708 reg = 0x11b7;
6709 buf[0] = 0x60; buf[1] = 0x28; buf[2] = 0x00; buf[3] = 0x08; buf[4] = 0x00;
6710 buf[5] = 0x40; buf[6] = 0x01; buf[7] = 0xf0; buf[8] = 0x00;
6711 ret = usb_microdia_control_write(dev, reg, buf, 9); /* URB 59 */
6712 if (ret < 0)
6713 goto err;
6715 reg = 0x11b8;
6716 buf[0] = 0x38;
6717 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 60 */
6718 if (ret < 0)
6719 goto err;
6721 reg = 0x1000;
6722 buf[0] = 0x78;
6723 ret = usb_microdia_control_write(dev, reg, buf, 1);
6724 if (ret < 0)
6725 goto err;
6727 buf[0] = 0x80;
6728 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6729 OV7660_CTL_COM7, dev->sensor_flags, buf);
6730 if (ret < 0)
6731 goto errI2C;
6733 buf[0] = 0x01; buf[1] = 0x74; buf[2] = 0x92; buf[3] = 0x00;
6734 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6735 OV7660_CTL_GAIN, dev->sensor_flags, buf);
6736 if (ret < 0)
6737 goto errI2C;
6739 buf[0] = 0x00; buf[1] = 0x7d; buf[2] = 0x62; buf[3] = 0x00;
6740 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6741 OV7660_CTL_COM1, dev->sensor_flags, buf);
6742 if (ret < 0)
6743 goto errI2C;
6745 buf[0] = 0x83; buf[1] = 0x01;
6746 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
6747 OV7660_CTL_RAVE, dev->sensor_flags, buf);
6748 if (ret < 0)
6749 goto errI2C;
6751 buf[0] = 0x00; buf[1] = 0x08; buf[2] = 0x04; buf[3] = 0x62;
6752 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6753 OV7660_CTL_COM3, dev->sensor_flags, buf);
6754 if (ret < 0)
6755 goto errI2C;
6757 buf[0] = 0x00; buf[1] = 0x40; buf[2] = 0x05; buf[3] = 0xf8;
6758 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6759 OV7660_CTL_AECH, dev->sensor_flags, buf);
6760 if (ret < 0)
6761 goto errI2C;
6763 buf[0] = 0x2e; buf[1] = 0x00; buf[2] = 0x02;
6764 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 3,
6765 OV7660_CTL_COM9, dev->sensor_flags, buf);
6766 if (ret < 0)
6767 goto errI2C;
6769 buf[0] = 0x10; buf[1] = 0x60; buf[2] = 0x02; buf[3] = 0x7b;
6770 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6771 OV7660_CTL_HSTART, dev->sensor_flags, buf);
6772 if (ret < 0)
6773 goto errI2C;
6775 buf[0] = 0x06;
6776 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6777 OV7660_CTL_PSHFT, dev->sensor_flags, buf);
6778 if (ret < 0)
6779 goto errI2C;
6781 buf[0] = 0x01; buf[1] = 0x0e;
6782 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
6783 OV7660_CTL_MVFP, dev->sensor_flags, buf);
6784 if (ret < 0)
6785 goto errI2C;
6787 buf[0] = 0x07; buf[1] = 0x07; buf[2] = 0x07; buf[3] = 0x07;
6788 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6789 OV7660_CTL_BOS, dev->sensor_flags, buf);
6790 if (ret < 0)
6791 goto errI2C;
6793 buf[0] = 0x68; buf[1] = 0x58; buf[2] = 0xd4; buf[3] = 0x80;
6794 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6795 OV7660_CTL_AEW, dev->sensor_flags, buf);
6796 if (ret < 0)
6797 goto errI2C;
6799 buf[0] = 0x80; buf[1] = 0x3c; buf[2] = 0x00; buf[3] = 0x00;
6800 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6801 OV7660_CTL_GbBIAS, dev->sensor_flags, buf);
6802 if (ret < 0)
6803 goto errI2C;
6805 buf[0] = 0x80; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x62;
6806 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6807 OV7660_CTL_RBIAS, dev->sensor_flags, buf);
6808 if (ret < 0)
6809 goto errI2C;
6811 buf[0] = 0x08; buf[1] = 0x30; buf[2] = 0xb4;
6812 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 3,
6813 OV7660_CTL_HSYST, dev->sensor_flags, buf);
6814 if (ret < 0)
6815 goto errI2C;
6817 buf[0] = 0x00; buf[1] = 0x07; buf[2] = 0x84; buf[3] = 0x00;
6818 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6819 OV7660_CTL_CHLF, dev->sensor_flags, buf);
6820 if (ret < 0)
6821 goto errI2C;
6823 buf[0] = 0x0c; buf[1] = 0x02; buf[2] = 0x43; buf[3] = 0x00;
6824 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6825 OV7660_CTL_ADC, dev->sensor_flags, buf);
6826 if (ret < 0)
6827 goto errI2C;
6829 buf[0] = 0x02; buf[1] = 0x6c; buf[2] = 0x19; buf[3] = 0x0e;
6830 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6831 OV7660_CTL_COM11, dev->sensor_flags, buf);
6832 if (ret < 0)
6833 goto errI2C;
6835 buf[0] = 0x41; buf[1] = 0xc1; buf[2] = 0x22; buf[3] = 0x08;
6836 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6837 OV7660_CTL_EDGE, dev->sensor_flags, buf);
6838 if (ret < 0)
6839 goto errI2C;
6841 /* "Dummy" write */
6842 reg = 0x43; /* RSVD 0x43 is Reserved */
6843 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0,
6844 reg, dev->sensor_flags, NULL);
6845 if (ret < 0)
6846 goto errI2C;
6848 reg = 0x43; /* RSVD 0x43 is Reserved */
6849 buf[0] = 0xf0; buf[1] = 0x10; buf[2] = 0x78; buf[3] = 0xa8;
6850 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, reg,
6851 dev->sensor_flags, buf);
6852 if (ret < 0)
6853 goto errI2C;
6855 reg = 0x47; /* RSVD 0x47 is Reserved */
6856 buf[0] = 0x60; buf[1] = 0x80; buf[2] = 0x00; buf[3] = 0x00;
6857 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, reg,
6858 dev->sensor_flags, buf);
6859 if (ret < 0)
6860 goto errI2C;
6862 reg = 0x4b; /* RSVD 0x4b is Reserved */
6863 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00;
6864 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, reg,
6865 dev->sensor_flags, buf);
6866 if (ret < 0)
6867 goto errI2C;
6869 /* "Dummy" write */
6870 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0,
6871 OV7660_CTL_MTX1, dev->sensor_flags, NULL);
6872 if (ret < 0)
6873 goto errI2C;
6875 reg = 0x59; /* RSVD 0x59 is Reserved */
6876 buf[0] = 0xba; buf[1] = 0x9a; buf[2] = 0x22; buf[3] = 0xb9;
6877 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6878 reg, dev->sensor_flags, buf);
6879 if (ret < 0)
6880 goto errI2C;
6882 reg = 0x5d; /* RSVD 0x5d is Reserved */
6883 buf[0] = 0x9b; buf[1] = 0x10; buf[2] = 0xf0; buf[3] = 0x05;
6884 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6885 reg, dev->sensor_flags, buf);
6886 if (ret < 0)
6887 goto errI2C;
6889 reg = 0x61; /* RSVD 0x61 is Reserved */
6890 buf[0] = 0x60;
6891 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6892 reg, dev->sensor_flags, buf);
6893 if (ret < 0)
6894 goto errI2C;
6896 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x30;
6897 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6898 OV7660_CTL_LCC1, dev->sensor_flags, buf);
6899 if (ret < 0)
6900 goto errI2C;
6902 buf[0] = 0x00;
6903 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6904 OV7660_CTL_LCC5, dev->sensor_flags, buf);
6905 if (ret < 0)
6906 goto errI2C;
6908 buf[0] = 0x80; buf[1] = 0x7a; buf[2] = 0x90; buf[3] = 0x80;
6909 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6910 OV7660_CTL_MANU, dev->sensor_flags, buf);
6911 if (ret < 0)
6912 goto errI2C;
6914 buf[0] = 0x0a;
6915 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6916 OV7660_CTL_DBLV, dev->sensor_flags, buf);
6917 if (ret < 0)
6918 goto errI2C;
6920 reg = 0x8b; /* RSVD 0x8b is Reserved */
6921 buf[0] = 0x99; buf[1] = 0x99; buf[2] = 0xcf;
6922 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 3, reg,
6923 dev->sensor_flags, buf);
6924 if (ret < 0)
6925 goto errI2C;
6927 buf[0] = 0x00; buf[1] = 0x00;
6928 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
6929 OV7660_CTL_DM_LNL, dev->sensor_flags, buf);
6930 if (ret < 0)
6931 goto errI2C;
6933 reg = 0x1007;
6934 buf[0] = 0x40;
6935 ret = usb_microdia_control_write(dev, reg, buf, 1);
6936 if (ret < 0)
6937 goto err;
6939 reg = 0x1006;
6940 buf[0] = 0x00;
6941 ret = usb_microdia_control_write(dev, reg, buf, 1);
6942 if (ret < 0)
6943 goto err;
6945 reg = 0x10c1;
6946 ret = usb_microdia_control_read(dev, reg, buf, 1);
6947 if (ret < 0)
6948 goto err;
6950 reg = 0x10c1;
6951 buf[0] = 0x50;
6952 ret = usb_microdia_control_write(dev, reg, buf, 1);
6953 if (ret < 0)
6954 goto err;
6956 /* TRY TO READ FROM EEPROM: */
6957 reg = 0x00;
6958 ret = sn9c20x_read_i2c_data(dev, 0x50, 1, reg, SN9C20X_I2C_2WIRE, buf);
6959 if (ret < 0)
6960 UDIA_INFO("No EEPROM found\n");
6961 else
6962 UDIA_INFO("Read from EEPROM successful\n");
6964 reg = 0x10c1;
6965 buf[0] = 0x21;
6966 ret = usb_microdia_control_write(dev, reg, buf, 1);
6967 if (ret < 0)
6968 goto err;
6970 reg = 0x10e0;
6971 buf[0] = 0x47;
6972 ret = usb_microdia_control_write(dev, reg, buf, 1);
6973 if (ret < 0)
6974 goto err;
6976 reg = 0x10e0;
6977 buf[0] = 0x47;
6978 ret = usb_microdia_control_write(dev, reg, buf, 1);
6979 if (ret < 0)
6980 goto err;
6982 reg = 0x1001;
6983 buf[0] = 0xc6;
6984 ret = usb_microdia_control_write(dev, reg, buf, 1);
6985 if (ret < 0)
6986 goto err;
6988 reg = 0x1001;
6989 buf[0] = 0xc4;
6990 ret = usb_microdia_control_write(dev, reg, buf, 1);
6991 if (ret < 0)
6992 goto err;
6994 reg = 0x1001;
6995 buf[0] = 0x84;
6996 ret = usb_microdia_control_write(dev, reg, buf, 1);
6997 if (ret < 0)
6998 goto err;
7000 buf[0] = 0x08;
7001 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7002 OV7660_CTL_VREF, dev->sensor_flags, buf);
7003 if (ret < 0)
7004 goto errI2C;
7006 buf[0] = 0x10; buf[1] = 0x61; buf[2] = 0x02; buf[3] = 0x7a;
7007 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
7008 OV7660_CTL_HSTART, dev->sensor_flags, buf);
7009 if (ret < 0)
7010 goto errI2C;
7012 /* "Dummy" write: */
7013 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0,
7014 OV7660_CTL_PSHFT, dev->sensor_flags, NULL);
7015 if (ret < 0)
7016 goto errI2C;
7018 buf[0] = 0x84;
7019 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7020 OV7660_CTL_HREF, dev->sensor_flags, buf);
7021 if (ret < 0)
7022 goto errI2C;
7024 buf[0] = 0x84;
7025 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7026 OV7660_CTL_HREF, dev->sensor_flags, buf);
7027 if (ret < 0)
7028 goto errI2C;
7030 buf[0] = 0x84;
7031 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7032 OV7660_CTL_HREF, dev->sensor_flags, buf);
7033 if (ret < 0)
7034 goto errI2C;
7036 buf[0] = 0x84;
7037 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7038 OV7660_CTL_HREF, dev->sensor_flags, buf);
7039 if (ret < 0)
7040 goto errI2C;
7042 buf[0] = 0x84;
7043 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7044 OV7660_CTL_HREF, dev->sensor_flags, buf);
7045 if (ret < 0)
7046 goto errI2C;
7048 reg = 0x1180;
7049 buf[0] = 0x01; buf[1] = 0x00; buf[2] = 0x01; buf[3] = 0x00; buf[4] = 0x28;
7050 buf[5] = 0x3c;
7051 ret = usb_microdia_control_write(dev, reg, buf, 6);
7052 if (ret < 0)
7053 goto err;
7055 reg = 0x10fb;
7056 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0; buf[4] = 0x00;
7057 ret = usb_microdia_control_write(dev, reg, buf, 5);
7058 if (ret < 0)
7059 goto err;
7061 reg = 0x1189;
7062 buf[0] = 0x8c;
7063 ret = usb_microdia_control_write(dev, reg, buf, 1);
7064 if (ret < 0)
7065 goto err;
7067 reg = 0x11a1;
7068 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
7069 ret = usb_microdia_control_write(dev, reg, buf, 4);
7070 if (ret < 0)
7071 goto err;
7073 reg = 0x11ab;
7074 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
7075 ret = usb_microdia_control_write(dev, reg, buf, 4);
7076 if (ret < 0)
7077 goto err;
7079 reg = 0x1000;
7080 buf[0] = 0x78;
7081 ret = usb_microdia_control_write(dev, reg, buf, 1);
7082 if (ret < 0)
7083 goto err;
7085 reg = 0x1002;
7086 buf[0] = 0x18;
7087 ret = usb_microdia_control_write(dev, reg, buf, 1);
7088 if (ret < 0)
7089 goto err;
7091 reg = 0x1002;
7092 buf[0] = 0x18;
7093 ret = usb_microdia_control_write(dev, reg, buf, 1);
7094 if (ret < 0)
7095 goto err;
7097 reg = 0x11b8;
7098 buf[0] = 0x38;
7099 ret = usb_microdia_control_write(dev, reg, buf, 1);
7100 if (ret < 0)
7101 goto err;
7103 reg = 0x118a;
7104 buf[0] = 0x04;
7105 ret = usb_microdia_control_write(dev, reg, buf, 1);
7106 if (ret < 0)
7107 goto err;
7109 reg = 0x0395;
7110 buf[0] = 0x04;
7111 ret = usb_microdia_control_write(dev, reg, buf, 1);
7112 if (ret < 0)
7113 goto err;
7115 reg = 0x11b8;
7116 buf[0] = 0x78;
7117 ret = usb_microdia_control_write(dev, reg, buf, 1);
7118 if (ret < 0)
7119 goto err;
7120 ret = usb_microdia_control_read(dev, reg, buf, 1);
7121 if (ret < 0)
7122 goto err;
7124 reg = 0x11b8;
7125 buf[0] = 0xf9;
7126 ret = usb_microdia_control_write(dev, reg, buf, 1);
7127 if (ret < 0)
7128 goto err;
7129 ret = usb_microdia_control_read(dev, reg, buf, 1);
7130 if (ret < 0)
7131 goto err;
7133 reg = 0x11b8;
7134 buf[0] = 0xfa;
7135 ret = usb_microdia_control_write(dev, reg, buf, 1);
7136 if (ret < 0)
7137 goto err;
7138 ret = usb_microdia_control_read(dev, reg, buf, 1);
7139 if (ret < 0)
7140 goto err;
7142 reg = 0x11b8;
7143 buf[0] = 0x7b;
7144 ret = usb_microdia_control_write(dev, reg, buf, 1);
7145 if (ret < 0)
7146 goto err;
7147 ret = usb_microdia_control_read(dev, reg, buf, 1);
7148 if (ret < 0)
7149 goto err;
7151 reg = 0x11b8;
7152 buf[0] = 0x7c;
7153 ret = usb_microdia_control_write(dev, reg, buf, 1);
7154 if (ret < 0)
7155 goto err;
7156 ret = usb_microdia_control_read(dev, reg, buf, 1);
7157 if (ret < 0)
7158 goto err;
7160 reg = 0x11b8;
7161 buf[0] = 0x7d;
7162 ret = usb_microdia_control_write(dev, reg, buf, 1);
7163 if (ret < 0)
7164 goto err;
7165 ret = usb_microdia_control_read(dev, reg, buf, 1);
7166 if (ret < 0)
7167 goto err;
7169 reg = 0x11b8;
7170 buf[0] = 0x7b;
7171 ret = usb_microdia_control_write(dev, reg, buf, 1);
7172 if (ret < 0)
7173 goto err;
7176 //ret = usb_microdia_control_read(dev, reg, buf, 1);
7177 //if(ret < 0) goto err;
7180 buf[0] = 0x40;
7181 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7182 OV7660_CTL_CLKRC, dev->sensor_flags, buf);
7183 if (ret < 0)
7184 goto errI2C;
7186 buf[0] = 0x00;
7187 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7188 OV7660_CTL_EXHCH, dev->sensor_flags, buf);
7189 if (ret < 0)
7190 goto errI2C;
7192 buf[0] = 0x00;
7193 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7194 OV7660_CTL_EXHCL, dev->sensor_flags, buf);
7195 if (ret < 0)
7196 goto errI2C;
7198 buf[0] = 0x00;
7199 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7200 OV7660_CTL_DM_LNL, dev->sensor_flags, buf);
7201 if (ret < 0)
7202 goto errI2C;
7204 buf[0] = 0x00;
7205 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7206 OV7660_CTL_DM_LNH, dev->sensor_flags, buf);
7207 if (ret < 0)
7208 goto errI2C;
7210 buf[0] = 0x01;
7211 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7212 OV7660_CTL_MVFP, dev->sensor_flags, buf);
7213 if (ret < 0)
7214 goto errI2C;
7216 buf[0] = 0x01;
7217 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7218 OV7660_CTL_MVFP, dev->sensor_flags, buf);
7219 if (ret < 0)
7220 goto errI2C;
7222 buf[0] = 0x08;
7223 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7224 OV7660_CTL_VREF, dev->sensor_flags, buf);
7225 if (ret < 0)
7226 goto errI2C;
7228 buf[0] = 0x00;
7229 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7230 OV7660_CTL_VREF, dev->sensor_flags, buf);
7231 if (ret < 0)
7232 goto errI2C;
7234 buf[0] = 0x7f;
7235 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7236 OV7660_CTL_AECH, dev->sensor_flags, buf);
7237 if (ret < 0)
7238 goto errI2C;
7240 buf[0] = 0x00;
7241 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7242 OV7660_CTL_COM1, dev->sensor_flags, buf);
7243 if (ret < 0)
7244 goto errI2C;
7246 buf[0] = 0x00;
7247 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7248 OV7660_CTL_ADVFL, dev->sensor_flags, buf);
7249 if (ret < 0)
7250 goto errI2C;
7252 buf[0] = 0x00;
7253 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7254 OV7660_CTL_ADVFH, dev->sensor_flags, buf);
7255 if (ret < 0)
7256 goto errI2C;
7258 buf[0] = 0x00;
7259 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7260 OV7660_CTL_GAIN, dev->sensor_flags, buf);
7261 if (ret < 0)
7262 goto errI2C;
7264 buf[0] = 0x78; buf[1] = 0x78;
7265 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
7266 OV7660_CTL_BLUE, dev->sensor_flags, buf);
7267 if (ret < 0)
7268 goto errI2C;
7270 reg = 0x118c;
7271 buf[0] = 0x20;
7272 ret = usb_microdia_control_write(dev, reg, buf, 1);
7273 if (ret < 0)
7274 goto err;
7276 reg = 0x118d;
7277 buf[0] = 0x20;
7278 ret = usb_microdia_control_write(dev, reg, buf, 1);
7279 if (ret < 0)
7280 goto err;
7282 reg = 0x118e;
7283 buf[0] = 0x20;
7284 ret = usb_microdia_control_write(dev, reg, buf, 1);
7285 if (ret < 0)
7286 goto err;
7288 reg = 0x118f;
7289 buf[0] = 0x20;
7290 ret = usb_microdia_control_write(dev, reg, buf, 1);
7291 if (ret < 0)
7292 goto err;
7294 reg = 0x11ba;
7295 buf[0] = 0x0a;
7296 ret = usb_microdia_control_write(dev, reg, buf, 1);
7297 if (ret < 0)
7298 goto err;
7300 reg = 0x118c;
7301 buf[0] = 0x20;
7302 ret = usb_microdia_control_write(dev, reg, buf, 1);
7303 if (ret < 0)
7304 goto err;
7306 reg = 0x118d;
7307 buf[0] = 0x20;
7308 ret = usb_microdia_control_write(dev, reg, buf, 1);
7309 if (ret < 0)
7310 goto err;
7312 reg = 0x118e;
7313 buf[0] = 0x20;
7314 ret = usb_microdia_control_write(dev, reg, buf, 1);
7315 if (ret < 0)
7316 goto err;
7318 reg = 0x118f;
7319 buf[0] = 0x20;
7320 ret = usb_microdia_control_write(dev, reg, buf, 1);
7321 if (ret < 0)
7322 goto err;
7324 reg = 0x118b;
7325 buf[0] = 0x0c;
7326 ret = usb_microdia_control_write(dev, reg, buf, 1);
7327 if (ret < 0)
7328 goto err;
7330 reg = 0x1190;
7331 buf[0] = 0x00; buf[1] = 0x33; buf[2] = 0x53; buf[3] = 0x6b; buf[4] = 0x7c;
7332 buf[5] = 0x8b; buf[6] = 0x99; buf[7] = 0xa6; buf[8] = 0xb2; buf[9] = 0xbd;
7333 buf[10] = 0xc8; buf[11] = 0xd2; buf[12] = 0xdc; buf[13] = 0xe5; buf[14] = 0xee;
7334 buf[15] = 0xf7; buf[16] = 0xff;
7335 ret = usb_microdia_control_write(dev, reg, buf, 17);
7336 if (ret < 0)
7337 goto err;
7338 /* transferbufferlength was only 11 ? */
7340 reg = 0x10e1;
7341 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00;
7342 buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00;
7343 buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00;
7344 buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0xee; buf[19] = 0x00;
7345 buf[20] = 0x00;
7346 ret = usb_microdia_control_write(dev, reg, buf, 21);
7347 if (ret < 0)
7348 goto err;
7349 /* transferbufferlength was only 15 ? */
7351 reg = 0x10e1;
7352 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00;
7353 buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00;
7354 buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00;
7355 buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0xee; buf[19] = 0x00;
7356 buf[20] = 0x00;
7357 ret = usb_microdia_control_write(dev, reg, buf, 21);
7358 if (ret < 0)
7359 goto err;
7360 /* transferbufferlength was only 15 ? */
7362 reg = 0x10e1;
7363 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00;
7364 buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00;
7365 buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00;
7366 buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0xee; buf[19] = 0x00;
7367 buf[20] = 0x00;
7368 ret = usb_microdia_control_write(dev, reg, buf, 21);
7369 if (ret < 0)
7370 goto err;
7371 /* transferbufferlength was only 15 ? */
7373 reg = 0x10e1;
7374 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00;
7375 buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00;
7376 buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00;
7377 buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0xee; buf[19] = 0x00;
7378 buf[20] = 0x00;
7379 ret = usb_microdia_control_write(dev, reg, buf, 21);
7380 if (ret < 0)
7381 goto err;
7382 /* transferbufferlength was only 15 ? */
7384 reg = 0x10e1;
7385 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00;
7386 buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00;
7387 buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00;
7388 buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0xee; buf[19] = 0x00;
7389 buf[20] = 0x00;
7390 ret = usb_microdia_control_write(dev, reg, buf, 21);
7391 if (ret < 0)
7392 goto err;
7393 /* transferbufferlength was only 15 ? */
7395 reg = 0x10e1;
7396 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00;
7397 buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00;
7398 buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00;
7399 buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0xee; buf[19] = 0x00;
7400 buf[20] = 0x00;
7401 ret = usb_microdia_control_write(dev, reg, buf, 21);
7402 if (ret < 0)
7403 goto err;
7404 /* transferbufferlength was only 15 ? */
7406 reg = 0x10e1;
7407 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00;
7408 buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00;
7409 buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00;
7410 buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0xee; buf[19] = 0x00;
7411 buf[20] = 0x00;
7412 ret = usb_microdia_control_write(dev, reg, buf, 21);
7413 if (ret < 0)
7414 goto err;
7415 /* transferbufferlength was only 15 ? */
7417 reg = 0x10e1;
7418 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00;
7419 buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00;
7420 buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00;
7421 buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0xee; buf[19] = 0x00;
7422 buf[20] = 0x00;
7423 ret = usb_microdia_control_write(dev, reg, buf, 21);
7424 if (ret < 0)
7425 goto err;
7426 /* transferbufferlength was only 15 ? */
7428 reg = 0x10e1;
7429 buf[0] = 0x15; buf[1] = 0x00; buf[2] = 0x29; buf[3] = 0x00; buf[4] = 0x08;
7430 buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00;
7431 buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00;
7432 buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0xee; buf[19] = 0x00;
7433 buf[20] = 0x00;
7434 ret = usb_microdia_control_write(dev, reg, buf, 21);
7435 if (ret < 0)
7436 goto err;
7437 /* transferbufferlength was only 15 ? */
7439 reg = 0x10f7;
7440 buf[0] = 0x05;
7441 ret = usb_microdia_control_write(dev, reg, buf, 1);
7442 if (ret < 0)
7443 goto err;
7445 reg = 0x10f6;
7446 buf[0] = 0x1b;
7447 ret = usb_microdia_control_write(dev, reg, buf, 1);
7448 if (ret < 0)
7449 goto err;
7451 reg = 0x10e1;
7452 buf[0] = 0x15; buf[1] = 0x00; buf[2] = 0x29; buf[3] = 0x00; buf[4] = 0x08;
7453 buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00;
7454 buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00;
7455 buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0xee; buf[19] = 0x00;
7456 buf[20] = 0x00;
7457 ret = usb_microdia_control_write(dev, reg, buf, 21);
7458 if (ret < 0)
7459 goto err;
7460 /* transferbufferlength was only 15 ? */
7462 reg = 0x10f8;
7463 buf[0] = 0x14;
7464 ret = usb_microdia_control_write(dev, reg, buf, 1);
7465 if (ret < 0)
7466 goto err;
7468 reg = 0x10fa;
7469 buf[0] = 0xff;
7470 ret = usb_microdia_control_write(dev, reg, buf, 1);
7471 if (ret < 0)
7472 goto err;
7474 reg = 0x10f9;
7475 buf[0] = 0x00;
7476 ret = usb_microdia_control_write(dev, reg, buf, 1);
7477 if (ret < 0)
7478 goto err;
7480 reg = 0x10f9;
7481 buf[0] = 0x00;
7482 ret = usb_microdia_control_write(dev, reg, buf, 1);
7483 if (ret < 0)
7484 goto err;
7486 reg = 0x11ba;
7487 buf[0] = 0x0a;
7488 ret = usb_microdia_control_write(dev, reg, buf, 1);
7489 if (ret < 0)
7490 goto err;
7492 reg = 0x11bc;
7493 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00;
7494 ret = usb_microdia_control_write(dev, reg, buf, 4);
7495 if (ret < 0)
7496 goto err;
7498 reg = 0x11c0;
7499 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00;
7500 buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00;
7501 buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00;
7502 buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00;
7503 buf[20] = 0x00; buf[21] = 0x00; buf[22] = 0x00; buf[23] = 0x00; buf[24] = 0x00;
7504 buf[25] = 0x00; buf[26] = 0x00; buf[27] = 0x00; buf[28] = 0x00; buf[29] = 0x00;
7505 buf[30] = 0x00; buf[31] = 0x00; buf[32] = 0x00;
7506 ret = usb_microdia_control_write(dev, reg, buf, 33);
7507 if (ret < 0)
7508 goto err;
7509 /* transferbufferlength was only 30 ? */
7511 reg = 0x118c;
7512 buf[0] = 0x20;
7513 ret = usb_microdia_control_write(dev, reg, buf, 1);
7514 if (ret < 0)
7515 goto err;
7517 reg = 0x118d;
7518 buf[0] = 0x20;
7519 ret = usb_microdia_control_write(dev, reg, buf, 1);
7520 if (ret < 0)
7521 goto err;
7523 reg = 0x118e;
7524 buf[0] = 0x20;
7525 ret = usb_microdia_control_write(dev, reg, buf, 1);
7526 if (ret < 0)
7527 goto err;
7529 reg = 0x118f;
7530 buf[0] = 0x20;
7531 ret = usb_microdia_control_write(dev, reg, buf, 1);
7532 if (ret < 0)
7533 goto err;
7535 reg = 0x11a5;
7536 buf[0] = 0x2d; buf[1] = 0x2d; buf[2] = 0x3a; buf[3] = 0x05; buf[4] = 0x04;
7537 buf[5] = 0x3f;
7538 ret = usb_microdia_control_write(dev, reg, buf, 6);
7539 if (ret < 0)
7540 goto err;
7542 reg = 0x11af;
7543 buf[0] = 0x28; buf[1] = 0xd8; buf[2] = 0x14; buf[3] = 0xec;
7544 ret = usb_microdia_control_write(dev, reg, buf, 4);
7545 if (ret < 0)
7546 goto err;
7548 reg = 0x11b3;
7549 buf[0] = 0x32; buf[1] = 0xdd; buf[2] = 0x32; buf[3] = 0xdd;
7550 ret = usb_microdia_control_write(dev, reg, buf, 4);
7551 if (ret < 0)
7552 goto err;
7554 reg = 0x10e0;
7555 buf[0] = 0x47;
7556 ret = usb_microdia_control_write(dev, reg, buf, 1);
7557 if (ret < 0)
7558 goto err;
7560 reg = 0x1061;
7561 buf[0] = 0x01;
7562 ret = usb_microdia_control_write(dev, reg, buf, 1);
7563 if (ret < 0)
7564 goto err;
7566 reg = 0x10e0;
7567 buf[0] = 0x67;
7568 ret = usb_microdia_control_write(dev, reg, buf, 1);
7569 if (ret < 0)
7570 goto err;
7572 reg = 0x1100;
7573 buf[0] = 0x0d; buf[1] = 0x08; buf[2] = 0x08; buf[3] = 0x0d; buf[4] = 0x08;
7574 buf[5] = 0x08; buf[6] = 0x0d; buf[7] = 0x0d; buf[8] = 0x0d; buf[9] = 0x0d;
7575 buf[10] = 0x11; buf[11] = 0x0d; buf[12] = 0x0d; buf[13] = 0x11; buf[14] = 0x15;
7576 buf[15] = 0x21; buf[16] = 0x15; buf[17] = 0x15; buf[18] = 0x11; buf[19] = 0x11;
7577 buf[20] = 0x15; buf[21] = 0x2a; buf[22] = 0x1d; buf[23] = 0x1d; buf[24] = 0x19;
7578 buf[25] = 0x21; buf[26] = 0x32; buf[27] = 0x2a; buf[28] = 0x32; buf[29] = 0x32;
7579 buf[30] = 0x2e; buf[31] = 0x2a; buf[32] = 0x2e; buf[33] = 0x2e; buf[34] = 0x36;
7580 buf[35] = 0x3a; buf[36] = 0x4b; buf[37] = 0x43; buf[38] = 0x36; buf[39] = 0x3a;
7581 buf[40] = 0x47; buf[41] = 0x3a; buf[42] = 0x2e; buf[43] = 0x2e; buf[44] = 0x43;
7582 buf[45] = 0x5c; buf[46] = 0x43; buf[47] = 0x47; buf[48] = 0x4f; buf[49] = 0x53;
7583 buf[50] = 0x58; buf[51] = 0x58; buf[52] = 0x58; buf[53] = 0x32; buf[54] = 0x3f;
7584 buf[55] = 0x60; buf[56] = 0x64; buf[57] = 0x5c; buf[58] = 0x53; buf[59] = 0x64;
7585 buf[60] = 0x4b; buf[61] = 0x53; buf[62] = 0x58; buf[63] = 0x53;
7586 ret = usb_microdia_control_write(dev, reg, buf, 64);
7587 if (ret < 0)
7588 goto err;
7589 /* transferbufferlength is only 40 ? */
7591 reg = 0x1140;
7592 buf[0] = 0x0d; buf[1] = 0x11; buf[2] = 0x11; buf[3] = 0x15; buf[4] = 0x11;
7593 buf[5] = 0x15; buf[6] = 0x26; buf[7] = 0x15; buf[8] = 0x15; buf[9] = 0x26;
7594 buf[10] = 0x53; buf[11] = 0x36; buf[12] = 0x2e; buf[13] = 0x36; buf[14] = 0x53;
7595 buf[15] = 0x53; buf[16] = 0x53; buf[17] = 0x53; buf[18] = 0x53; buf[19] = 0x53;
7596 buf[20] = 0x53; buf[21] = 0x53; buf[22] = 0x53; buf[23] = 0x53; buf[24] = 0x53;
7597 buf[25] = 0x53; buf[26] = 0x53; buf[27] = 0x53; buf[28] = 0x53; buf[29] = 0x53;
7598 buf[30] = 0x53; buf[31] = 0x53; buf[32] = 0x53; buf[33] = 0x53; buf[34] = 0x53;
7599 buf[35] = 0x53; buf[36] = 0x53; buf[37] = 0x53; buf[38] = 0x53; buf[39] = 0x53;
7600 buf[40] = 0x53; buf[41] = 0x53; buf[42] = 0x53; buf[43] = 0x53; buf[44] = 0x53;
7601 buf[45] = 0x53; buf[46] = 0x53; buf[47] = 0x53; buf[48] = 0x53; buf[49] = 0x53;
7602 buf[50] = 0x53; buf[51] = 0x53; buf[52] = 0x53; buf[53] = 0x53; buf[54] = 0x53;
7603 buf[55] = 0x53; buf[56] = 0x53; buf[57] = 0x53; buf[58] = 0x53; buf[59] = 0x53;
7604 buf[60] = 0x53; buf[61] = 0x53; buf[62] = 0x53; buf[63] = 0x53;
7605 ret = usb_microdia_control_write(dev, reg, buf, 64);
7606 if (ret < 0)
7607 goto err;
7608 /* transferbufferlength is only 40 ? */
7610 reg = 0x10e0;
7611 buf[0] = 0x47;
7612 ret = usb_microdia_control_write(dev, reg, buf, 1);
7613 if (ret < 0)
7614 goto err;
7616 reg = 0x1061;
7617 buf[0] = 0x03;
7618 ret = usb_microdia_control_write(dev, reg, buf, 1);
7619 if (ret < 0)
7620 goto err;
7622 reg = 0x10e0;
7623 buf[0] = 0x4b;
7624 ret = usb_microdia_control_write(dev, reg, buf, 1);
7625 if (ret < 0)
7626 goto err;
7628 buf[0] = 0x08;
7629 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7630 OV7660_CTL_VREF, dev->sensor_flags, buf);
7631 if (ret < 0)
7632 goto errI2C;
7634 reg = 0x1180;
7635 buf[0] = 0x01; buf[1] = 0x00; buf[2] = 0x01; buf[3] = 0x00; buf[4] = 0x28;
7636 buf[5] = 0x3c;
7637 ret = usb_microdia_control_write(dev, reg, buf, 6);
7638 if (ret < 0)
7639 goto err;
7641 reg = 0x10fb;
7642 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0; buf[4] = 0x00;
7643 ret = usb_microdia_control_write(dev, reg, buf, 5);
7644 if (ret < 0)
7645 goto err;
7647 reg = 0x1189;
7648 buf[0] = 0x8c;
7649 ret = usb_microdia_control_write(dev, reg, buf, 1);
7650 if (ret < 0)
7651 goto err;
7653 reg = 0x11a1;
7654 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
7655 ret = usb_microdia_control_write(dev, reg, buf, 4);
7656 if (ret < 0)
7657 goto err;
7659 reg = 0x11ab;
7660 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
7661 ret = usb_microdia_control_write(dev, reg, buf, 4);
7662 if (ret < 0)
7663 goto err;
7665 reg = 0x1061;
7666 buf[0] = 0x03;
7667 ret = usb_microdia_control_write(dev, reg, buf, 1);
7668 if (ret < 0)
7669 goto err;
7671 reg = 0x11ba;
7672 buf[0] = 0x0a;
7673 ret = usb_microdia_control_write(dev, reg, buf, 1);
7674 if (ret < 0)
7675 goto err;
7677 reg = 0x11b9;
7678 buf[0] = 0x00;
7679 ret = usb_microdia_control_write(dev, reg, buf, 1);
7680 if (ret < 0)
7681 goto err;
7683 reg = 0x11ba;
7684 buf[0] = 0x0b;
7685 ret = usb_microdia_control_write(dev, reg, buf, 1);
7686 if (ret < 0)
7687 goto err;
7689 reg = 0x1061;
7690 buf[0] = 0x01;
7691 ret = usb_microdia_control_write(dev, reg, buf, 1);
7692 if (ret < 0)
7693 goto err;
7695 reg = 0x1000;
7696 buf[0] = 0x78;
7697 ret = usb_microdia_control_write(dev, reg, buf, 1);
7698 if (ret < 0)
7699 goto err;
7701 reg = 0x1002;
7702 buf[0] = 0x18;
7703 ret = usb_microdia_control_write(dev, reg, buf, 1);
7704 if (ret < 0)
7705 goto err;
7707 reg = 0x1002;
7708 buf[0] = 0x18;
7709 ret = usb_microdia_control_write(dev, reg, buf, 1);
7710 if (ret < 0)
7711 goto err;
7713 reg = 0x11b8;
7714 buf[0] = 0x7b;
7715 ret = usb_microdia_control_write(dev, reg, buf, 1);
7716 if (ret < 0)
7717 goto err;
7719 reg = 0x118a;
7720 buf[0] = 0x04;
7721 ret = usb_microdia_control_write(dev, reg, buf, 1);
7722 if (ret < 0)
7723 goto err;
7725 reg = 0x0395;
7726 buf[0] = 0x04;
7727 ret = usb_microdia_control_write(dev, reg, buf, 1);
7728 if (ret < 0)
7729 goto err;
7731 reg = 0x11b8;
7732 buf[0] = 0x78;
7733 ret = usb_microdia_control_write(dev, reg, buf, 1);
7734 if (ret < 0)
7735 goto err;
7736 ret = usb_microdia_control_read(dev, reg, buf, 1);
7737 if (ret < 0)
7738 goto err;
7740 reg = 0x11b8;
7741 buf[0] = 0xf9;
7742 ret = usb_microdia_control_write(dev, reg, buf, 1);
7743 if (ret < 0)
7744 goto err;
7745 ret = usb_microdia_control_read(dev, reg, buf, 1);
7746 if (ret < 0)
7747 goto err;
7749 reg = 0x11b8;
7750 buf[0] = 0xfa;
7751 ret = usb_microdia_control_write(dev, reg, buf, 1);
7752 if (ret < 0)
7753 goto err;
7754 ret = usb_microdia_control_read(dev, reg, buf, 1);
7755 if (ret < 0)
7756 goto err;
7758 reg = 0x11b8;
7759 buf[0] = 0x7b;
7760 ret = usb_microdia_control_write(dev, reg, buf, 1);
7761 if (ret < 0)
7762 goto err;
7763 ret = usb_microdia_control_read(dev, reg, buf, 1);
7764 if (ret < 0)
7765 goto err;
7767 reg = 0x11b8;
7768 buf[0] = 0x7c;
7769 ret = usb_microdia_control_write(dev, reg, buf, 1);
7770 if (ret < 0)
7771 goto err;
7772 ret = usb_microdia_control_read(dev, reg, buf, 1);
7773 if (ret < 0)
7774 goto err;
7776 reg = 0x11b8;
7777 buf[0] = 0x7d;
7778 ret = usb_microdia_control_write(dev, reg, buf, 1);
7779 if (ret < 0)
7780 goto err;
7781 ret = usb_microdia_control_read(dev, reg, buf, 1);
7782 if (ret < 0)
7783 goto err;
7785 reg = 0x11b8;
7786 buf[0] = 0x7b;
7787 ret = usb_microdia_control_write(dev, reg, buf, 1);
7788 if (ret < 0)
7789 goto err;
7791 buf[0] = 0x40;
7792 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7793 OV7660_CTL_CLKRC, dev->sensor_flags, buf);
7794 if (ret < 0)
7795 goto errI2C;
7797 buf[0] = 0x00;
7798 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7799 OV7660_CTL_EXHCH, dev->sensor_flags, buf);
7800 if (ret < 0)
7801 goto errI2C;
7803 buf[0] = 0x00;
7804 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7805 OV7660_CTL_EXHCL, dev->sensor_flags, buf);
7806 if (ret < 0)
7807 goto errI2C;
7809 buf[0] = 0x00;
7810 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7811 OV7660_CTL_DM_LNL, dev->sensor_flags, buf);
7812 if (ret < 0)
7813 goto errI2C;
7815 buf[0] = 0x00;
7816 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7817 OV7660_CTL_DM_LNH, dev->sensor_flags, buf);
7818 if (ret < 0)
7819 goto errI2C;
7821 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1,
7822 OV7660_CTL_PID, dev->sensor_flags, buf);
7823 if (ret < 0)
7824 goto errI2C;
7826 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1,
7827 OV7660_CTL_VER, dev->sensor_flags, buf);
7828 if (ret < 0)
7829 goto errI2C;
7831 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1,
7832 OV7660_CTL_MIDH, dev->sensor_flags, buf);
7833 if (ret < 0)
7834 goto errI2C;
7836 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1,
7837 OV7660_CTL_MIDL, dev->sensor_flags, buf);
7838 if (ret < 0)
7839 goto errI2C;
7841 reg = 0x1061;
7842 buf[0] = 0x03;
7843 ret = usb_microdia_control_write(dev, reg, buf, 1);
7844 if (ret < 0)
7845 goto err;
7847 reg = 0x1007;
7848 buf[0] = 0x60;
7849 ret = usb_microdia_control_write(dev, reg, buf, 1);
7850 if (ret < 0)
7851 goto err;
7853 reg = 0x1006;
7854 buf[0] = 0x00;
7855 ret = usb_microdia_control_write(dev, reg, buf, 1);
7856 if (ret < 0)
7857 goto err;
7859 reg = 0x1007;
7860 buf[0] = 0x60;
7861 ret = usb_microdia_control_write(dev, reg, buf, 1);
7862 if (ret < 0)
7863 goto err;
7865 reg = 0x1006;
7866 buf[0] = 0x00;
7867 ret = usb_microdia_control_write(dev, reg, buf, 1);
7868 if (ret < 0)
7869 goto err;
7871 reg = 0x10e1;
7872 buf[0] = 0x15; buf[1] = 0x00; buf[2] = 0x29; buf[3] = 0x00; buf[4] = 0x08;
7873 buf[5] = 0x00; buf[6] = 0xf9; buf[7] = 0x0f; buf[8] = 0xc4; buf[9] = 0x0f;
7874 buf[10] = 0x44; buf[11] = 0x00; buf[12] = 0x3f; buf[13] = 0x00; buf[14] = 0xd8;
7875 buf[15] = 0x0f; buf[16] = 0xe9; buf[17] = 0x0f; buf[18] = 0xeb; buf[19] = 0x00;
7876 buf[20] = 0x00;
7877 ret = usb_microdia_control_write(dev, reg, buf, 21);
7878 if (ret < 0)
7879 goto err;
7880 /* transferbufferlength is only 15 ? */
7882 buf[0] = 0x7f;
7883 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7884 OV7660_CTL_AECH, dev->sensor_flags, buf);
7885 if (ret < 0)
7886 goto errI2C;
7888 buf[0] = 0x01;
7889 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7890 OV7660_CTL_COM1, dev->sensor_flags, buf);
7891 if (ret < 0)
7892 goto errI2C;
7894 reg = 0x10e1;
7895 buf[0] = 0x15; buf[1] = 0x00; buf[2] = 0x29; buf[3] = 0x00; buf[4] = 0x08;
7896 buf[5] = 0x00; buf[6] = 0xf9; buf[7] = 0x0f; buf[8] = 0xc4; buf[9] = 0x0f;
7897 buf[10] = 0x44; buf[11] = 0x00; buf[12] = 0x3f; buf[13] = 0x00; buf[14] = 0xd8;
7898 buf[15] = 0x0f; buf[16] = 0xe9; buf[17] = 0x0f; buf[18] = 0xeb; buf[19] = 0x00;
7899 buf[20] = 0x00;
7900 ret = usb_microdia_control_write(dev, reg, buf, 21);
7901 if (ret < 0)
7902 goto err;
7903 /* transferbufferlength is only 15 ? */
7905 buf[0] = 0x13;
7906 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7907 OV7660_CTL_GAIN, dev->sensor_flags, buf);
7908 if (ret < 0)
7909 goto errI2C;
7911 reg = 0x10e1;
7912 buf[0] = 0x15; buf[1] = 0x00; buf[2] = 0x29; buf[3] = 0x00; buf[4] = 0x08;
7913 buf[5] = 0x00; buf[6] = 0xf9; buf[7] = 0x0f; buf[8] = 0xc4; buf[9] = 0x0f;
7914 buf[10] = 0x44; buf[11] = 0x00; buf[12] = 0x3f; buf[13] = 0x00; buf[14] = 0xd8;
7915 buf[15] = 0x0f; buf[16] = 0xe9; buf[17] = 0x0f; buf[18] = 0xeb; buf[19] = 0x00;
7916 buf[20] = 0x00;
7917 ret = usb_microdia_control_write(dev, reg, buf, 21);
7918 if (ret < 0)
7919 goto err;
7920 /* transferbufferlength is only 15 ? */
7922 buf[0] = 0x00; buf[1] = 0x01;
7923 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
7924 OV7660_CTL_ADVFL, dev->sensor_flags, buf);
7925 if (ret < 0)
7926 goto errI2C;
7928 buf[0] = 0x1e;
7929 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7930 OV7660_CTL_GAIN, dev->sensor_flags, buf);
7931 if (ret < 0)
7932 goto errI2C;
7934 buf[0] = 0x50; buf[1] = 0x60;
7935 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
7936 OV7660_CTL_BLUE, dev->sensor_flags, buf);
7937 if (ret < 0)
7938 goto errI2C;
7940 reg = 0x118c;
7941 buf[0] = 0x1e;
7942 ret = usb_microdia_control_write(dev, reg, buf, 1);
7943 if (ret < 0)
7944 goto err;
7946 reg = 0x118d;
7947 buf[0] = 0x20;
7948 ret = usb_microdia_control_write(dev, reg, buf, 1);
7949 if (ret < 0)
7950 goto err;
7952 reg = 0x118e;
7953 buf[0] = 0x20;
7954 ret = usb_microdia_control_write(dev, reg, buf, 1);
7955 if (ret < 0)
7956 goto err;
7958 reg = 0x118f;
7959 buf[0] = 0x21;
7960 ret = usb_microdia_control_write(dev, reg, buf, 1);
7961 if (ret < 0)
7962 goto err;
7964 buf[0] = 0xfc; buf[1] = 0x04;
7965 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
7966 OV7660_CTL_ADVFL, dev->sensor_flags, buf);
7967 if (ret < 0)
7968 goto errI2C;
7970 reg = 0x10e1;
7971 buf[0] = 0x15; buf[1] = 0x00; buf[2] = 0x29; buf[3] = 0x00; buf[4] = 0x08;
7972 buf[5] = 0x00; buf[6] = 0xf9; buf[7] = 0x0f; buf[8] = 0xc8; buf[9] = 0x0f;
7973 buf[10] = 0x3f; buf[11] = 0x00; buf[12] = 0x3b; buf[13] = 0x00; buf[14] = 0xdb;
7974 buf[15] = 0x0f; buf[16] = 0xeb; buf[17] = 0x0f; buf[18] = 0xeb; buf[19] = 0x00;
7975 buf[20] = 0x00;
7976 ret = usb_microdia_control_write(dev, reg, buf, 21);
7977 if (ret < 0)
7978 goto err;
7979 /* transferbufferlength is only 15 ? */
7981 buf[0] = 0x1f; buf[1] = 0x00;
7982 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
7983 OV7660_CTL_GAIN, dev->sensor_flags, buf);
7984 if (ret < 0)
7985 goto errI2C;
7987 buf[0] = 0x48; buf[1] = 0x58;
7988 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
7989 OV7660_CTL_BLUE, dev->sensor_flags, buf);
7990 if (ret < 0)
7991 goto errI2C;
7993 reg = 0x118c;
7994 buf[0] = 0x20;
7995 ret = usb_microdia_control_write(dev, reg, buf, 1);
7996 if (ret < 0)
7997 goto err;
7999 reg = 0x118d;
8000 buf[0] = 0x20;
8001 ret = usb_microdia_control_write(dev, reg, buf, 1);
8002 if (ret < 0)
8003 goto err;
8005 reg = 0x118e;
8006 buf[0] = 0x20;
8007 ret = usb_microdia_control_write(dev, reg, buf, 1);
8008 if (ret < 0)
8009 goto err;
8011 reg = 0x118f;
8012 buf[0] = 0x1f;
8013 ret = usb_microdia_control_write(dev, reg, buf, 1);
8014 if (ret < 0)
8015 goto err;
8017 buf[0] = 0xf6; buf[1] = 0x0b;
8018 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
8019 OV7660_CTL_ADVFL, dev->sensor_flags, buf);
8020 if (ret < 0)
8021 goto errI2C;
8023 reg = 0x10e1;
8024 buf[0] = 0x15; buf[1] = 0x00; buf[2] = 0x29; buf[3] = 0x00; buf[4] = 0x08;
8025 buf[5] = 0x00; buf[6] = 0xfc; buf[7] = 0x0f; buf[8] = 0xdc; buf[9] = 0x0f;
8026 buf[10] = 0x29; buf[11] = 0x00; buf[12] = 0x26; buf[13] = 0x00; buf[14] = 0xe8;
8027 buf[15] = 0x0f; buf[16] = 0xf3; buf[17] = 0x0f; buf[18] = 0xeb; buf[19] = 0x00;
8028 buf[20] = 0x00;
8029 ret = usb_microdia_control_write(dev, reg, buf, 21);
8030 if (ret < 0)
8031 goto err;
8032 /* transferbufferlength is only 15 ? */
8034 reg = 0x118c;
8035 buf[0] = 0x21;
8036 ret = usb_microdia_control_write(dev, reg, buf, 1);
8037 if (ret < 0)
8038 goto err;
8040 reg = 0x118d;
8041 buf[0] = 0x20;
8042 ret = usb_microdia_control_write(dev, reg, buf, 1);
8043 if (ret < 0)
8044 goto err;
8046 reg = 0x118e;
8047 buf[0] = 0x20;
8048 ret = usb_microdia_control_write(dev, reg, buf, 1);
8049 if (ret < 0)
8050 goto err;
8052 reg = 0x118f;
8053 buf[0] = 0x21;
8054 ret = usb_microdia_control_write(dev, reg, buf, 1);
8055 if (ret < 0)
8056 goto err;
8058 reg = 0x1006;
8059 buf[0] = 0x40;
8060 ret = usb_microdia_control_write(dev, reg, buf, 1);
8061 if (ret < 0)
8062 goto err;
8064 buf[0] = 0x50; buf[1] = 0x60;
8065 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
8066 OV7660_CTL_BLUE, dev->sensor_flags, buf);
8067 if (ret < 0)
8068 goto errI2C;
8070 reg = 0x118c;
8071 buf[0] = 0x1f;
8072 ret = usb_microdia_control_write(dev, reg, buf, 1);
8073 if (ret < 0)
8074 goto err;
8076 reg = 0x118d;
8077 buf[0] = 0x20;
8078 ret = usb_microdia_control_write(dev, reg, buf, 1);
8079 if (ret < 0)
8080 goto err;
8082 reg = 0x118e;
8083 buf[0] = 0x20;
8084 ret = usb_microdia_control_write(dev, reg, buf, 1);
8085 if (ret < 0)
8086 goto err;
8088 reg = 0x118f;
8089 buf[0] = 0x20;
8090 ret = usb_microdia_control_write(dev, reg, buf, 1);
8091 if (ret < 0)
8092 goto err;
8094 return ret;
8095 err:
8096 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg, ret);
8097 return ret;
8099 errI2C:
8100 UDIA_ERROR("r/w in sensor register %x failed (%d)!\n", reg, ret);
8101 return ret;
8105 /**
8106 * @brief From UsbSnoop-plugin-parsed.log
8108 * @param dev
8110 * @returns 0 (OK) or <0 (Error)
8112 * @author Vincent, Kuzja
8114 int microdia_6288_start_stream(struct usb_microdia *dev)
8116 int ret;
8117 __u16 reg;
8118 __u8 buf[64];
8122 reg = 0x1066 ;
8123 buf[0] = 0x00;
8124 ret = usb_microdia_control_write(dev, reg, buf, 1);
8125 if(ret < 0) goto err;
8127 reg = 0x1000 ;
8128 buf[0] = 0x78;
8129 ret = usb_microdia_control_write(dev, reg, buf, 1);
8130 if(ret < 0) goto err;
8132 reg = 0x1001 ;
8133 buf[0] = 0xc7;
8134 ret = usb_microdia_control_write(dev, reg, buf, 1);
8135 if(ret < 0) goto err;
8137 reg = 0x1002 ;
8138 buf[0] = 0x1c;
8139 ret = usb_microdia_control_write(dev, reg, buf, 1);
8140 if(ret < 0) goto err;
8142 reg = 0x1061 ;
8143 buf[0] = 0x01;
8144 ret = usb_microdia_control_write(dev, reg, buf, 1);
8145 if(ret < 0) goto err;
8147 reg = 0x1020 ;
8148 buf[0] = 0x80;
8149 ret = usb_microdia_control_write(dev, reg, buf, 1);
8150 if(ret < 0) goto err;
8152 reg = 0x1067 ;
8153 buf[0] = 0x40; buf[1] = 0x30; buf[2] = 0x20; buf[3] = 0x10; buf[4] = 0x08;
8154 ret = usb_microdia_control_write(dev, reg, buf, 5);
8155 if(ret < 0) goto err;
8157 reg = 0x10c0 ;
8158 buf[0] = 0x80; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x03;
8159 ret = usb_microdia_control_write(dev, reg, buf, 9);
8160 if(ret < 0) goto err;
8162 reg = 0x10e0 ;
8163 buf[0] = 0x44; buf[1] = 0x18; buf[2] = 0x00; buf[3] = 0x30; buf[4] = 0x00; buf[5] = 0x09; buf[6] = 0x00; buf[7] = 0xed; buf[8] = 0x0f; buf[9] = 0xda; buf[10] = 0x0f; buf[11] = 0x3a; buf[12] = 0x00; buf[13] = 0x3a; buf[14] = 0x00; buf[15] = 0xd0; buf[16] = 0x0f; buf[17] = 0xf7; buf[18] = 0x0f; buf[19] = 0x00; buf[20] = 0x00; buf[21] = 0x00; buf[22] = 0x60; buf[23] = 0x0a;
8164 ret = usb_microdia_control_write(dev, reg, buf, 24);
8165 if(ret < 0) goto err;
8167 reg = 0x10f8 ;
8168 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00;
8169 ret = usb_microdia_control_write(dev, reg, buf, 3);
8170 if(ret < 0) goto err;
8172 reg = 0x10fb ;
8173 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0; buf[4] = 0x00;
8174 ret = usb_microdia_control_write(dev, reg, buf, 5);
8175 if(ret < 0) goto err;
8177 reg = 0x1188 ;
8178 buf[0] = 0x86; buf[1] = 0xcc; buf[2] = 0x08;
8179 ret = usb_microdia_control_write(dev, reg, buf, 3);
8180 if(ret < 0) goto err;
8182 reg = 0x118b ;
8183 buf[0] = 0x00; buf[1] = 0x20; buf[2] = 0x20; buf[3] = 0x20; buf[4] = 0x20; buf[5] = 0x00; buf[6] = 0x24; buf[7] = 0x3b; buf[8] = 0x4f; buf[9] = 0x61; buf[10] = 0x71; buf[11] = 0x80; buf[12] = 0x8f; buf[13] = 0x9d; buf[14] = 0xab; buf[15] = 0xb8; buf[16] = 0xc4; buf[17] = 0xd1; buf[18] = 0xdd; buf[19] = 0xe9; buf[20] = 0xf4; buf[21] = 0xff;
8184 ret = usb_microdia_control_write(dev, reg, buf, 22);
8185 if(ret < 0) goto err;
8187 reg = 0x11a1 ;
8188 buf[0] = 0x00; buf[1] = 0x00;
8189 ret = usb_microdia_control_write(dev, reg, buf, 2);
8190 if(ret < 0) goto err;
8192 reg = 0x11b7 ;
8193 buf[0] = 0x60; buf[1] = 0x20; buf[2] = 0x00; buf[3] = 0x08; buf[4] = 0x00; buf[5] = 0x40; buf[6] = 0x01; buf[7] = 0xf0; buf[8] = 0x00;
8194 ret = usb_microdia_control_write(dev, reg, buf, 9);
8195 if(ret < 0) goto err;
8197 reg = 0x11b8 ;
8198 buf[0] = 0x30;
8199 ret = usb_microdia_control_write(dev, reg, buf, 1);
8200 if(ret < 0) goto err;
8202 reg = 0x1000 ;
8203 buf[0] = 0x78;
8204 ret = usb_microdia_control_write(dev, reg, buf, 1);
8205 if(ret < 0) goto err;
8207 reg = 0x10c0 ;
8208 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x12; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8209 ret = usb_microdia_control_write(dev, reg, buf, 8);
8210 if(ret < 0) goto err;
8212 reg = 0x10c0 ;
8213 ret = usb_microdia_control_read(dev, reg, buf, 1);
8214 if(ret < 0) goto err;
8216 reg = 0x10c0 ;
8217 ret = usb_microdia_control_read(dev, reg, buf, 1);
8218 if(ret < 0) goto err;
8220 reg = 0x10c0 ;
8221 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x12; buf[3] = 0x01; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8222 ret = usb_microdia_control_write(dev, reg, buf, 8);
8223 if(ret < 0) goto err;
8225 reg = 0x10c0 ;
8226 ret = usb_microdia_control_read(dev, reg, buf, 1);
8227 if(ret < 0) goto err;
8229 reg = 0x10c0 ;
8230 ret = usb_microdia_control_read(dev, reg, buf, 1);
8231 if(ret < 0) goto err;
8233 reg = 0x10c0 ;
8234 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x0d; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8235 ret = usb_microdia_control_write(dev, reg, buf, 8);
8236 if(ret < 0) goto err;
8238 reg = 0x10c0 ;
8239 ret = usb_microdia_control_read(dev, reg, buf, 1);
8240 if(ret < 0) goto err;
8242 reg = 0x10c0 ;
8243 ret = usb_microdia_control_read(dev, reg, buf, 1);
8244 if(ret < 0) goto err;
8246 reg = 0x10c0 ;
8247 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x0e; buf[3] = 0x61; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8248 ret = usb_microdia_control_write(dev, reg, buf, 8);
8249 if(ret < 0) goto err;
8251 reg = 0x10c0 ;
8252 ret = usb_microdia_control_read(dev, reg, buf, 1);
8253 if(ret < 0) goto err;
8255 reg = 0x10c0 ;
8256 ret = usb_microdia_control_read(dev, reg, buf, 1);
8257 if(ret < 0) goto err;
8259 reg = 0x10c0 ;
8260 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x11; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8261 ret = usb_microdia_control_write(dev, reg, buf, 8);
8262 if(ret < 0) goto err;
8264 reg = 0x10c0 ;
8265 ret = usb_microdia_control_read(dev, reg, buf, 1);
8266 if(ret < 0) goto err;
8268 reg = 0x10c0 ;
8269 ret = usb_microdia_control_read(dev, reg, buf, 1);
8270 if(ret < 0) goto err;
8272 reg = 0x10c0 ;
8273 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x13; buf[3] = 0xb8; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8274 ret = usb_microdia_control_write(dev, reg, buf, 8);
8275 if(ret < 0) goto err;
8277 reg = 0x10c0 ;
8278 ret = usb_microdia_control_read(dev, reg, buf, 1);
8279 if(ret < 0) goto err;
8281 reg = 0x10c0 ;
8282 ret = usb_microdia_control_read(dev, reg, buf, 1);
8283 if(ret < 0) goto err;
8285 reg = 0x10c0 ;
8286 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x14; buf[3] = 0x3e; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8287 ret = usb_microdia_control_write(dev, reg, buf, 8);
8288 if(ret < 0) goto err;
8290 reg = 0x10c0 ;
8291 ret = usb_microdia_control_read(dev, reg, buf, 1);
8292 if(ret < 0) goto err;
8294 reg = 0x10c0 ;
8295 ret = usb_microdia_control_read(dev, reg, buf, 1);
8296 if(ret < 0) goto err;
8298 reg = 0x10c0 ;
8299 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x16; buf[3] = 0x24; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8300 ret = usb_microdia_control_write(dev, reg, buf, 8);
8301 if(ret < 0) goto err;
8303 reg = 0x10c0 ;
8304 ret = usb_microdia_control_read(dev, reg, buf, 1);
8305 if(ret < 0) goto err;
8307 reg = 0x10c0 ;
8308 ret = usb_microdia_control_read(dev, reg, buf, 1);
8309 if(ret < 0) goto err;
8311 reg = 0x10c0 ;
8312 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x1e; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8313 ret = usb_microdia_control_write(dev, reg, buf, 8);
8314 if(ret < 0) goto err;
8316 reg = 0x10c0 ;
8317 ret = usb_microdia_control_read(dev, reg, buf, 1);
8318 if(ret < 0) goto err;
8320 reg = 0x10c0 ;
8321 ret = usb_microdia_control_read(dev, reg, buf, 1);
8322 if(ret < 0) goto err;
8324 reg = 0x10c0 ;
8325 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x1e; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8326 ret = usb_microdia_control_write(dev, reg, buf, 8);
8327 if(ret < 0) goto err;
8329 reg = 0x10c0 ;
8330 ret = usb_microdia_control_read(dev, reg, buf, 1);
8331 if(ret < 0) goto err;
8333 reg = 0x10c0 ;
8334 ret = usb_microdia_control_read(dev, reg, buf, 1);
8335 if(ret < 0) goto err;
8337 reg = 0x10c0 ;
8338 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x1e; buf[3] = 0x04; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8339 ret = usb_microdia_control_write(dev, reg, buf, 8);
8340 if(ret < 0) goto err;
8342 reg = 0x10c0 ;
8343 ret = usb_microdia_control_read(dev, reg, buf, 1);
8344 if(ret < 0) goto err;
8346 reg = 0x10c0 ;
8347 ret = usb_microdia_control_read(dev, reg, buf, 1);
8348 if(ret < 0) goto err;
8350 reg = 0x10c0 ;
8351 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x27; buf[3] = 0x08; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8352 ret = usb_microdia_control_write(dev, reg, buf, 8);
8353 if(ret < 0) goto err;
8355 reg = 0x10c0 ;
8356 ret = usb_microdia_control_read(dev, reg, buf, 1);
8357 if(ret < 0) goto err;
8359 reg = 0x10c0 ;
8360 ret = usb_microdia_control_read(dev, reg, buf, 1);
8361 if(ret < 0) goto err;
8363 reg = 0x10c0 ;
8364 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x28; buf[3] = 0x08; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8365 ret = usb_microdia_control_write(dev, reg, buf, 8);
8366 if(ret < 0) goto err;
8368 reg = 0x10c0 ;
8369 ret = usb_microdia_control_read(dev, reg, buf, 1);
8370 if(ret < 0) goto err;
8372 reg = 0x10c0 ;
8373 ret = usb_microdia_control_read(dev, reg, buf, 1);
8374 if(ret < 0) goto err;
8376 reg = 0x10c0 ;
8377 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x29; buf[3] = 0x15; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8378 ret = usb_microdia_control_write(dev, reg, buf, 8);
8379 if(ret < 0) goto err;
8381 reg = 0x10c0 ;
8382 ret = usb_microdia_control_read(dev, reg, buf, 1);
8383 if(ret < 0) goto err;
8385 reg = 0x10c0 ;
8386 ret = usb_microdia_control_read(dev, reg, buf, 1);
8387 if(ret < 0) goto err;
8389 reg = 0x10c0 ;
8390 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x2c; buf[3] = 0x08; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8391 ret = usb_microdia_control_write(dev, reg, buf, 8);
8392 if(ret < 0) goto err;
8394 reg = 0x10c0 ;
8395 ret = usb_microdia_control_read(dev, reg, buf, 1);
8396 if(ret < 0) goto err;
8398 reg = 0x10c0 ;
8399 ret = usb_microdia_control_read(dev, reg, buf, 1);
8400 if(ret < 0) goto err;
8402 reg = 0x10c0 ;
8403 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x32; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8404 ret = usb_microdia_control_write(dev, reg, buf, 8);
8405 if(ret < 0) goto err;
8407 reg = 0x10c0 ;
8408 ret = usb_microdia_control_read(dev, reg, buf, 1);
8409 if(ret < 0) goto err;
8411 reg = 0x10c0 ;
8412 ret = usb_microdia_control_read(dev, reg, buf, 1);
8413 if(ret < 0) goto err;
8415 reg = 0x10c0 ;
8416 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x34; buf[3] = 0x3d; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8417 ret = usb_microdia_control_write(dev, reg, buf, 8);
8418 if(ret < 0) goto err;
8420 reg = 0x10c0 ;
8421 ret = usb_microdia_control_read(dev, reg, buf, 1);
8422 if(ret < 0) goto err;
8424 reg = 0x10c0 ;
8425 ret = usb_microdia_control_read(dev, reg, buf, 1);
8426 if(ret < 0) goto err;
8428 reg = 0x10c0 ;
8429 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x35; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8430 ret = usb_microdia_control_write(dev, reg, buf, 8);
8431 if(ret < 0) goto err;
8433 reg = 0x10c0 ;
8434 ret = usb_microdia_control_read(dev, reg, buf, 1);
8435 if(ret < 0) goto err;
8437 reg = 0x10c0 ;
8438 ret = usb_microdia_control_read(dev, reg, buf, 1);
8439 if(ret < 0) goto err;
8441 reg = 0x10c0 ;
8442 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x36; buf[3] = 0xf8; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8443 ret = usb_microdia_control_write(dev, reg, buf, 8);
8444 if(ret < 0) goto err;
8446 reg = 0x10c0 ;
8447 ret = usb_microdia_control_read(dev, reg, buf, 1);
8448 if(ret < 0) goto err;
8450 reg = 0x10c0 ;
8451 ret = usb_microdia_control_read(dev, reg, buf, 1);
8452 if(ret < 0) goto err;
8454 reg = 0x10c0 ;
8455 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x38; buf[3] = 0x12; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8456 ret = usb_microdia_control_write(dev, reg, buf, 8);
8457 if(ret < 0) goto err;
8459 reg = 0x10c0 ;
8460 ret = usb_microdia_control_read(dev, reg, buf, 1);
8461 if(ret < 0) goto err;
8463 reg = 0x10c0 ;
8464 ret = usb_microdia_control_read(dev, reg, buf, 1);
8465 if(ret < 0) goto err;
8467 reg = 0x10c0 ;
8468 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x39; buf[3] = 0x57; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8469 ret = usb_microdia_control_write(dev, reg, buf, 8);
8470 if(ret < 0) goto err;
8472 reg = 0x10c0 ;
8473 ret = usb_microdia_control_read(dev, reg, buf, 1);
8474 if(ret < 0) goto err;
8476 reg = 0x10c0 ;
8477 ret = usb_microdia_control_read(dev, reg, buf, 1);
8478 if(ret < 0) goto err;
8480 reg = 0x10c0 ;
8481 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x3a; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8482 ret = usb_microdia_control_write(dev, reg, buf, 8);
8483 if(ret < 0) goto err;
8485 reg = 0x10c0 ;
8486 ret = usb_microdia_control_read(dev, reg, buf, 1);
8487 if(ret < 0) goto err;
8489 reg = 0x10c0 ;
8490 ret = usb_microdia_control_read(dev, reg, buf, 1);
8491 if(ret < 0) goto err;
8493 reg = 0x10c0 ;
8494 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x3b; buf[3] = 0xcc; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8495 ret = usb_microdia_control_write(dev, reg, buf, 8);
8496 if(ret < 0) goto err;
8498 reg = 0x10c0 ;
8499 ret = usb_microdia_control_read(dev, reg, buf, 1);
8500 if(ret < 0) goto err;
8502 reg = 0x10c0 ;
8503 ret = usb_microdia_control_read(dev, reg, buf, 1);
8504 if(ret < 0) goto err;
8506 reg = 0x10c0 ;
8507 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x3c; buf[3] = 0x0c; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8508 ret = usb_microdia_control_write(dev, reg, buf, 8);
8509 if(ret < 0) goto err;
8511 reg = 0x10c0 ;
8512 ret = usb_microdia_control_read(dev, reg, buf, 1);
8513 if(ret < 0) goto err;
8515 reg = 0x10c0 ;
8516 ret = usb_microdia_control_read(dev, reg, buf, 1);
8517 if(ret < 0) goto err;
8519 reg = 0x10c0 ;
8520 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x3d; buf[3] = 0x19; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8521 ret = usb_microdia_control_write(dev, reg, buf, 8);
8522 if(ret < 0) goto err;
8524 reg = 0x10c0 ;
8525 ret = usb_microdia_control_read(dev, reg, buf, 1);
8526 if(ret < 0) goto err;
8528 reg = 0x10c0 ;
8529 ret = usb_microdia_control_read(dev, reg, buf, 1);
8530 if(ret < 0) goto err;
8532 reg = 0x10c0 ;
8533 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x3e; buf[3] = 0x0c; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8534 ret = usb_microdia_control_write(dev, reg, buf, 8);
8535 if(ret < 0) goto err;
8537 reg = 0x10c0 ;
8538 ret = usb_microdia_control_read(dev, reg, buf, 1);
8539 if(ret < 0) goto err;
8541 reg = 0x10c0 ;
8542 ret = usb_microdia_control_read(dev, reg, buf, 1);
8543 if(ret < 0) goto err;
8545 reg = 0x10c0 ;
8546 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x3f; buf[3] = 0x01; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8547 ret = usb_microdia_control_write(dev, reg, buf, 8);
8548 if(ret < 0) goto err;
8550 reg = 0x10c0 ;
8551 ret = usb_microdia_control_read(dev, reg, buf, 1);
8552 if(ret < 0) goto err;
8554 reg = 0x10c0 ;
8555 ret = usb_microdia_control_read(dev, reg, buf, 1);
8556 if(ret < 0) goto err;
8558 reg = 0x10c0 ;
8559 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x41; buf[3] = 0x40; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8560 ret = usb_microdia_control_write(dev, reg, buf, 8);
8561 if(ret < 0) goto err;
8563 reg = 0x10c0 ;
8564 ret = usb_microdia_control_read(dev, reg, buf, 1);
8565 if(ret < 0) goto err;
8567 reg = 0x10c0 ;
8568 ret = usb_microdia_control_read(dev, reg, buf, 1);
8569 if(ret < 0) goto err;
8571 reg = 0x10c0 ;
8572 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x42; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8573 ret = usb_microdia_control_write(dev, reg, buf, 8);
8574 if(ret < 0) goto err;
8576 reg = 0x10c0 ;
8577 ret = usb_microdia_control_read(dev, reg, buf, 1);
8578 if(ret < 0) goto err;
8580 reg = 0x10c0 ;
8581 ret = usb_microdia_control_read(dev, reg, buf, 1);
8582 if(ret < 0) goto err;
8584 reg = 0x10c0 ;
8585 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x45; buf[3] = 0x46; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8586 ret = usb_microdia_control_write(dev, reg, buf, 8);
8587 if(ret < 0) goto err;
8589 reg = 0x10c0 ;
8590 ret = usb_microdia_control_read(dev, reg, buf, 1);
8591 if(ret < 0) goto err;
8593 reg = 0x10c0 ;
8594 ret = usb_microdia_control_read(dev, reg, buf, 1);
8595 if(ret < 0) goto err;
8597 reg = 0x10c0 ;
8598 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x46; buf[3] = 0x62; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8599 ret = usb_microdia_control_write(dev, reg, buf, 8);
8600 if(ret < 0) goto err;
8602 reg = 0x10c0 ;
8603 ret = usb_microdia_control_read(dev, reg, buf, 1);
8604 if(ret < 0) goto err;
8606 reg = 0x10c0 ;
8607 ret = usb_microdia_control_read(dev, reg, buf, 1);
8608 if(ret < 0) goto err;
8610 reg = 0x10c0 ;
8611 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x47; buf[3] = 0x2a; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8612 ret = usb_microdia_control_write(dev, reg, buf, 8);
8613 if(ret < 0) goto err;
8615 reg = 0x10c0 ;
8616 ret = usb_microdia_control_read(dev, reg, buf, 1);
8617 if(ret < 0) goto err;
8619 reg = 0x10c0 ;
8620 ret = usb_microdia_control_read(dev, reg, buf, 1);
8621 if(ret < 0) goto err;
8623 reg = 0x10c0 ;
8624 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x48; buf[3] = 0x3c; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8625 ret = usb_microdia_control_write(dev, reg, buf, 8);
8626 if(ret < 0) goto err;
8628 reg = 0x10c0 ;
8629 ret = usb_microdia_control_read(dev, reg, buf, 1);
8630 if(ret < 0) goto err;
8632 reg = 0x10c0 ;
8633 ret = usb_microdia_control_read(dev, reg, buf, 1);
8634 if(ret < 0) goto err;
8636 reg = 0x10c0 ;
8637 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x4a; buf[3] = 0xf0; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8638 ret = usb_microdia_control_write(dev, reg, buf, 8);
8639 if(ret < 0) goto err;
8641 reg = 0x10c0 ;
8642 ret = usb_microdia_control_read(dev, reg, buf, 1);
8643 if(ret < 0) goto err;
8645 reg = 0x10c0 ;
8646 ret = usb_microdia_control_read(dev, reg, buf, 1);
8647 if(ret < 0) goto err;
8649 reg = 0x10c0 ;
8650 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x4b; buf[3] = 0xdc; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8651 ret = usb_microdia_control_write(dev, reg, buf, 8);
8652 if(ret < 0) goto err;
8654 reg = 0x10c0 ;
8655 ret = usb_microdia_control_read(dev, reg, buf, 1);
8656 if(ret < 0) goto err;
8658 reg = 0x10c0 ;
8659 ret = usb_microdia_control_read(dev, reg, buf, 1);
8660 if(ret < 0) goto err;
8662 reg = 0x10c0 ;
8663 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x4c; buf[3] = 0xdc; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8664 ret = usb_microdia_control_write(dev, reg, buf, 8);
8665 if(ret < 0) goto err;
8667 reg = 0x10c0 ;
8668 ret = usb_microdia_control_read(dev, reg, buf, 1);
8669 if(ret < 0) goto err;
8671 reg = 0x10c0 ;
8672 ret = usb_microdia_control_read(dev, reg, buf, 1);
8673 if(ret < 0) goto err;
8675 reg = 0x10c0 ;
8676 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x4d; buf[3] = 0xdc; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8677 ret = usb_microdia_control_write(dev, reg, buf, 8);
8678 if(ret < 0) goto err;
8680 reg = 0x10c0 ;
8681 ret = usb_microdia_control_read(dev, reg, buf, 1);
8682 if(ret < 0) goto err;
8684 reg = 0x10c0 ;
8685 ret = usb_microdia_control_read(dev, reg, buf, 1);
8686 if(ret < 0) goto err;
8688 reg = 0x10c0 ;
8689 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x4e; buf[3] = 0xdc; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8690 ret = usb_microdia_control_write(dev, reg, buf, 8);
8691 if(ret < 0) goto err;
8693 reg = 0x10c0 ;
8694 ret = usb_microdia_control_read(dev, reg, buf, 1);
8695 if(ret < 0) goto err;
8697 reg = 0x10c0 ;
8698 ret = usb_microdia_control_read(dev, reg, buf, 1);
8699 if(ret < 0) goto err;
8701 reg = 0x10c0 ;
8702 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x69; buf[3] = 0x02; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8703 ret = usb_microdia_control_write(dev, reg, buf, 8);
8704 if(ret < 0) goto err;
8706 reg = 0x10c0 ;
8707 ret = usb_microdia_control_read(dev, reg, buf, 1);
8708 if(ret < 0) goto err;
8710 reg = 0x10c0 ;
8711 ret = usb_microdia_control_read(dev, reg, buf, 1);
8712 if(ret < 0) goto err;
8714 reg = 0x10c0 ;
8715 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x6c; buf[3] = 0x04; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8716 ret = usb_microdia_control_write(dev, reg, buf, 8);
8717 if(ret < 0) goto err;
8719 reg = 0x10c0 ;
8720 ret = usb_microdia_control_read(dev, reg, buf, 1);
8721 if(ret < 0) goto err;
8723 reg = 0x10c0 ;
8724 ret = usb_microdia_control_read(dev, reg, buf, 1);
8725 if(ret < 0) goto err;
8727 reg = 0x10c0 ;
8728 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x6f; buf[3] = 0x9e; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8729 ret = usb_microdia_control_write(dev, reg, buf, 8);
8730 if(ret < 0) goto err;
8732 reg = 0x10c0 ;
8733 ret = usb_microdia_control_read(dev, reg, buf, 1);
8734 if(ret < 0) goto err;
8736 reg = 0x10c0 ;
8737 ret = usb_microdia_control_read(dev, reg, buf, 1);
8738 if(ret < 0) goto err;
8740 reg = 0x10c0 ;
8741 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x70; buf[3] = 0x05; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8742 ret = usb_microdia_control_write(dev, reg, buf, 8);
8743 if(ret < 0) goto err;
8745 reg = 0x10c0 ;
8746 ret = usb_microdia_control_read(dev, reg, buf, 1);
8747 if(ret < 0) goto err;
8749 reg = 0x10c0 ;
8750 ret = usb_microdia_control_read(dev, reg, buf, 1);
8751 if(ret < 0) goto err;
8753 reg = 0x10c0 ;
8754 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x71; buf[3] = 0x78; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8755 ret = usb_microdia_control_write(dev, reg, buf, 8);
8756 if(ret < 0) goto err;
8758 reg = 0x10c0 ;
8759 ret = usb_microdia_control_read(dev, reg, buf, 1);
8760 if(ret < 0) goto err;
8762 reg = 0x10c0 ;
8763 ret = usb_microdia_control_read(dev, reg, buf, 1);
8764 if(ret < 0) goto err;
8766 reg = 0x10c0 ;
8767 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x77; buf[3] = 0x02; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8768 ret = usb_microdia_control_write(dev, reg, buf, 8);
8769 if(ret < 0) goto err;
8771 reg = 0x10c0 ;
8772 ret = usb_microdia_control_read(dev, reg, buf, 1);
8773 if(ret < 0) goto err;
8775 reg = 0x10c0 ;
8776 ret = usb_microdia_control_read(dev, reg, buf, 1);
8777 if(ret < 0) goto err;
8779 reg = 0x10c0 ;
8780 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x8a; buf[3] = 0x23; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8781 ret = usb_microdia_control_write(dev, reg, buf, 8);
8782 if(ret < 0) goto err;
8784 reg = 0x10c0 ;
8785 ret = usb_microdia_control_read(dev, reg, buf, 1);
8786 if(ret < 0) goto err;
8788 reg = 0x10c0 ;
8789 ret = usb_microdia_control_read(dev, reg, buf, 1);
8790 if(ret < 0) goto err;
8792 reg = 0x10c0 ;
8793 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x8c; buf[3] = 0x0d; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8794 ret = usb_microdia_control_write(dev, reg, buf, 8);
8795 if(ret < 0) goto err;
8797 reg = 0x10c0 ;
8798 ret = usb_microdia_control_read(dev, reg, buf, 1);
8799 if(ret < 0) goto err;
8801 reg = 0x10c0 ;
8802 ret = usb_microdia_control_read(dev, reg, buf, 1);
8803 if(ret < 0) goto err;
8805 reg = 0x10c0 ;
8806 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x90; buf[3] = 0x7e; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8807 ret = usb_microdia_control_write(dev, reg, buf, 8);
8808 if(ret < 0) goto err;
8810 reg = 0x10c0 ;
8811 ret = usb_microdia_control_read(dev, reg, buf, 1);
8812 if(ret < 0) goto err;
8814 reg = 0x10c0 ;
8815 ret = usb_microdia_control_read(dev, reg, buf, 1);
8816 if(ret < 0) goto err;
8818 reg = 0x10c0 ;
8819 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x91; buf[3] = 0x7c; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8820 ret = usb_microdia_control_write(dev, reg, buf, 8);
8821 if(ret < 0) goto err;
8823 reg = 0x10c0 ;
8824 ret = usb_microdia_control_read(dev, reg, buf, 1);
8825 if(ret < 0) goto err;
8827 reg = 0x10c0 ;
8828 ret = usb_microdia_control_read(dev, reg, buf, 1);
8829 if(ret < 0) goto err;
8831 reg = 0x10c0 ;
8832 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x9f; buf[3] = 0x6e; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8833 ret = usb_microdia_control_write(dev, reg, buf, 8);
8834 if(ret < 0) goto err;
8836 reg = 0x10c0 ;
8837 ret = usb_microdia_control_read(dev, reg, buf, 1);
8838 if(ret < 0) goto err;
8840 reg = 0x10c0 ;
8841 ret = usb_microdia_control_read(dev, reg, buf, 1);
8842 if(ret < 0) goto err;
8844 reg = 0x10c0 ;
8845 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xa0; buf[3] = 0x6e; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8846 ret = usb_microdia_control_write(dev, reg, buf, 8);
8847 if(ret < 0) goto err;
8849 reg = 0x10c0 ;
8850 ret = usb_microdia_control_read(dev, reg, buf, 1);
8851 if(ret < 0) goto err;
8853 reg = 0x10c0 ;
8854 ret = usb_microdia_control_read(dev, reg, buf, 1);
8855 if(ret < 0) goto err;
8857 reg = 0x10c0 ;
8858 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xa4; buf[3] = 0x50; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8859 ret = usb_microdia_control_write(dev, reg, buf, 8);
8860 if(ret < 0) goto err;
8862 reg = 0x10c0 ;
8863 ret = usb_microdia_control_read(dev, reg, buf, 1);
8864 if(ret < 0) goto err;
8866 reg = 0x10c0 ;
8867 ret = usb_microdia_control_read(dev, reg, buf, 1);
8868 if(ret < 0) goto err;
8870 reg = 0x10c0 ;
8871 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xa5; buf[3] = 0x68; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8872 ret = usb_microdia_control_write(dev, reg, buf, 8);
8873 if(ret < 0) goto err;
8875 reg = 0x10c0 ;
8876 ret = usb_microdia_control_read(dev, reg, buf, 1);
8877 if(ret < 0) goto err;
8879 reg = 0x10c0 ;
8880 ret = usb_microdia_control_read(dev, reg, buf, 1);
8881 if(ret < 0) goto err;
8883 reg = 0x10c0 ;
8884 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xa6; buf[3] = 0x60; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8885 ret = usb_microdia_control_write(dev, reg, buf, 8);
8886 if(ret < 0) goto err;
8888 reg = 0x10c0 ;
8889 ret = usb_microdia_control_read(dev, reg, buf, 1);
8890 if(ret < 0) goto err;
8892 reg = 0x10c0 ;
8893 ret = usb_microdia_control_read(dev, reg, buf, 1);
8894 if(ret < 0) goto err;
8896 reg = 0x10c0 ;
8897 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xa8; buf[3] = 0xc1; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8898 ret = usb_microdia_control_write(dev, reg, buf, 8);
8899 if(ret < 0) goto err;
8901 reg = 0x10c0 ;
8902 ret = usb_microdia_control_read(dev, reg, buf, 1);
8903 if(ret < 0) goto err;
8905 reg = 0x10c0 ;
8906 ret = usb_microdia_control_read(dev, reg, buf, 1);
8907 if(ret < 0) goto err;
8909 reg = 0x10c0 ;
8910 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xa9; buf[3] = 0xfa; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8911 ret = usb_microdia_control_write(dev, reg, buf, 8);
8912 if(ret < 0) goto err;
8914 reg = 0x10c0 ;
8915 ret = usb_microdia_control_read(dev, reg, buf, 1);
8916 if(ret < 0) goto err;
8918 reg = 0x10c0 ;
8919 ret = usb_microdia_control_read(dev, reg, buf, 1);
8920 if(ret < 0) goto err;
8922 reg = 0x10c0 ;
8923 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xaa; buf[3] = 0x92; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8924 ret = usb_microdia_control_write(dev, reg, buf, 8);
8925 if(ret < 0) goto err;
8927 reg = 0x10c0 ;
8928 ret = usb_microdia_control_read(dev, reg, buf, 1);
8929 if(ret < 0) goto err;
8931 reg = 0x10c0 ;
8932 ret = usb_microdia_control_read(dev, reg, buf, 1);
8933 if(ret < 0) goto err;
8935 reg = 0x10c0 ;
8936 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xab; buf[3] = 0x04; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8937 ret = usb_microdia_control_write(dev, reg, buf, 8);
8938 if(ret < 0) goto err;
8940 reg = 0x10c0 ;
8941 ret = usb_microdia_control_read(dev, reg, buf, 1);
8942 if(ret < 0) goto err;
8944 reg = 0x10c0 ;
8945 ret = usb_microdia_control_read(dev, reg, buf, 1);
8946 if(ret < 0) goto err;
8948 reg = 0x10c0 ;
8949 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xac; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8950 ret = usb_microdia_control_write(dev, reg, buf, 8);
8951 if(ret < 0) goto err;
8953 reg = 0x10c0 ;
8954 ret = usb_microdia_control_read(dev, reg, buf, 1);
8955 if(ret < 0) goto err;
8957 reg = 0x10c0 ;
8958 ret = usb_microdia_control_read(dev, reg, buf, 1);
8959 if(ret < 0) goto err;
8961 reg = 0x10c0 ;
8962 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xad; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8963 ret = usb_microdia_control_write(dev, reg, buf, 8);
8964 if(ret < 0) goto err;
8966 reg = 0x10c0 ;
8967 ret = usb_microdia_control_read(dev, reg, buf, 1);
8968 if(ret < 0) goto err;
8970 reg = 0x10c0 ;
8971 ret = usb_microdia_control_read(dev, reg, buf, 1);
8972 if(ret < 0) goto err;
8974 reg = 0x10c0 ;
8975 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xae; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8976 ret = usb_microdia_control_write(dev, reg, buf, 8);
8977 if(ret < 0) goto err;
8979 reg = 0x10c0 ;
8980 ret = usb_microdia_control_read(dev, reg, buf, 1);
8981 if(ret < 0) goto err;
8983 reg = 0x10c0 ;
8984 ret = usb_microdia_control_read(dev, reg, buf, 1);
8985 if(ret < 0) goto err;
8987 reg = 0x10c0 ;
8988 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xaf; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8989 ret = usb_microdia_control_write(dev, reg, buf, 8);
8990 if(ret < 0) goto err;
8992 reg = 0x10c0 ;
8993 ret = usb_microdia_control_read(dev, reg, buf, 1);
8994 if(ret < 0) goto err;
8996 reg = 0x10c0 ;
8997 ret = usb_microdia_control_read(dev, reg, buf, 1);
8998 if(ret < 0) goto err;
9000 reg = 0x10c0 ;
9001 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xb2; buf[3] = 0xf2; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9002 ret = usb_microdia_control_write(dev, reg, buf, 8);
9003 if(ret < 0) goto err;
9005 reg = 0x10c0 ;
9006 ret = usb_microdia_control_read(dev, reg, buf, 1);
9007 if(ret < 0) goto err;
9009 reg = 0x10c0 ;
9010 ret = usb_microdia_control_read(dev, reg, buf, 1);
9011 if(ret < 0) goto err;
9013 reg = 0x10c0 ;
9014 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xb3; buf[3] = 0x20; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9015 ret = usb_microdia_control_write(dev, reg, buf, 8);
9016 if(ret < 0) goto err;
9018 reg = 0x10c0 ;
9019 ret = usb_microdia_control_read(dev, reg, buf, 1);
9020 if(ret < 0) goto err;
9022 reg = 0x10c0 ;
9023 ret = usb_microdia_control_read(dev, reg, buf, 1);
9024 if(ret < 0) goto err;
9026 reg = 0x10c0 ;
9027 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xb4; buf[3] = 0x20; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9028 ret = usb_microdia_control_write(dev, reg, buf, 8);
9029 if(ret < 0) goto err;
9031 reg = 0x10c0 ;
9032 ret = usb_microdia_control_read(dev, reg, buf, 1);
9033 if(ret < 0) goto err;
9035 reg = 0x10c0 ;
9036 ret = usb_microdia_control_read(dev, reg, buf, 1);
9037 if(ret < 0) goto err;
9039 reg = 0x10c0 ;
9040 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xb5; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9041 ret = usb_microdia_control_write(dev, reg, buf, 8);
9042 if(ret < 0) goto err;
9044 reg = 0x10c0 ;
9045 ret = usb_microdia_control_read(dev, reg, buf, 1);
9046 if(ret < 0) goto err;
9048 reg = 0x10c0 ;
9049 ret = usb_microdia_control_read(dev, reg, buf, 1);
9050 if(ret < 0) goto err;
9052 reg = 0x10c0 ;
9053 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xb6; buf[3] = 0xaf; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9054 ret = usb_microdia_control_write(dev, reg, buf, 8);
9055 if(ret < 0) goto err;
9057 reg = 0x10c0 ;
9058 ret = usb_microdia_control_read(dev, reg, buf, 1);
9059 if(ret < 0) goto err;
9061 reg = 0x10c0 ;
9062 ret = usb_microdia_control_read(dev, reg, buf, 1);
9063 if(ret < 0) goto err;
9065 reg = 0x10c0 ;
9066 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xbb; buf[3] = 0xae; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9067 ret = usb_microdia_control_write(dev, reg, buf, 8);
9068 if(ret < 0) goto err;
9070 reg = 0x10c0 ;
9071 ret = usb_microdia_control_read(dev, reg, buf, 1);
9072 if(ret < 0) goto err;
9074 reg = 0x10c0 ;
9075 ret = usb_microdia_control_read(dev, reg, buf, 1);
9076 if(ret < 0) goto err;
9078 reg = 0x10c0 ;
9079 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xbc; buf[3] = 0x44; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9080 ret = usb_microdia_control_write(dev, reg, buf, 8);
9081 if(ret < 0) goto err;
9083 reg = 0x10c0 ;
9084 ret = usb_microdia_control_read(dev, reg, buf, 1);
9085 if(ret < 0) goto err;
9087 reg = 0x10c0 ;
9088 ret = usb_microdia_control_read(dev, reg, buf, 1);
9089 if(ret < 0) goto err;
9091 reg = 0x10c0 ;
9092 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xbd; buf[3] = 0x44; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9093 ret = usb_microdia_control_write(dev, reg, buf, 8);
9094 if(ret < 0) goto err;
9096 reg = 0x10c0 ;
9097 ret = usb_microdia_control_read(dev, reg, buf, 1);
9098 if(ret < 0) goto err;
9100 reg = 0x10c0 ;
9101 ret = usb_microdia_control_read(dev, reg, buf, 1);
9102 if(ret < 0) goto err;
9104 reg = 0x10c0 ;
9105 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xbe; buf[3] = 0x3b; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9106 ret = usb_microdia_control_write(dev, reg, buf, 8);
9107 if(ret < 0) goto err;
9109 reg = 0x10c0 ;
9110 ret = usb_microdia_control_read(dev, reg, buf, 1);
9111 if(ret < 0) goto err;
9113 reg = 0x10c0 ;
9114 ret = usb_microdia_control_read(dev, reg, buf, 1);
9115 if(ret < 0) goto err;
9117 reg = 0x10c0 ;
9118 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xbf; buf[3] = 0x3a; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9119 ret = usb_microdia_control_write(dev, reg, buf, 8);
9120 if(ret < 0) goto err;
9122 reg = 0x10c0 ;
9123 ret = usb_microdia_control_read(dev, reg, buf, 1);
9124 if(ret < 0) goto err;
9126 reg = 0x10c0 ;
9127 ret = usb_microdia_control_read(dev, reg, buf, 1);
9128 if(ret < 0) goto err;
9130 reg = 0x10c0 ;
9131 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xc0; buf[3] = 0xe2; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9132 ret = usb_microdia_control_write(dev, reg, buf, 8);
9133 if(ret < 0) goto err;
9135 reg = 0x10c0 ;
9136 ret = usb_microdia_control_read(dev, reg, buf, 1);
9137 if(ret < 0) goto err;
9139 reg = 0x10c0 ;
9140 ret = usb_microdia_control_read(dev, reg, buf, 1);
9141 if(ret < 0) goto err;
9143 reg = 0x10c0 ;
9144 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xc1; buf[3] = 0xc8; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9145 ret = usb_microdia_control_write(dev, reg, buf, 8);
9146 if(ret < 0) goto err;
9148 reg = 0x10c0 ;
9149 ret = usb_microdia_control_read(dev, reg, buf, 1);
9150 if(ret < 0) goto err;
9152 reg = 0x10c0 ;
9153 ret = usb_microdia_control_read(dev, reg, buf, 1);
9154 if(ret < 0) goto err;
9156 reg = 0x10c0 ;
9157 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xc2; buf[3] = 0x01; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9158 ret = usb_microdia_control_write(dev, reg, buf, 8);
9159 if(ret < 0) goto err;
9161 reg = 0x10c0 ;
9162 ret = usb_microdia_control_read(dev, reg, buf, 1);
9163 if(ret < 0) goto err;
9165 reg = 0x10c0 ;
9166 ret = usb_microdia_control_read(dev, reg, buf, 1);
9167 if(ret < 0) goto err;
9169 reg = 0x10c0 ;
9170 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xc4; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9171 ret = usb_microdia_control_write(dev, reg, buf, 8);
9172 if(ret < 0) goto err;
9174 reg = 0x10c0 ;
9175 ret = usb_microdia_control_read(dev, reg, buf, 1);
9176 if(ret < 0) goto err;
9178 reg = 0x10c0 ;
9179 ret = usb_microdia_control_read(dev, reg, buf, 1);
9180 if(ret < 0) goto err;
9182 reg = 0x10c0 ;
9183 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xc6; buf[3] = 0x85; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9184 ret = usb_microdia_control_write(dev, reg, buf, 8);
9185 if(ret < 0) goto err;
9187 reg = 0x10c0 ;
9188 ret = usb_microdia_control_read(dev, reg, buf, 1);
9189 if(ret < 0) goto err;
9191 reg = 0x10c0 ;
9192 ret = usb_microdia_control_read(dev, reg, buf, 1);
9193 if(ret < 0) goto err;
9195 reg = 0x10c0 ;
9196 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xc7; buf[3] = 0x81; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9197 ret = usb_microdia_control_write(dev, reg, buf, 8);
9198 if(ret < 0) goto err;
9200 reg = 0x10c0 ;
9201 ret = usb_microdia_control_read(dev, reg, buf, 1);
9202 if(ret < 0) goto err;
9204 reg = 0x10c0 ;
9205 ret = usb_microdia_control_read(dev, reg, buf, 1);
9206 if(ret < 0) goto err;
9208 reg = 0x10c0 ;
9209 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xc9; buf[3] = 0xe0; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9210 ret = usb_microdia_control_write(dev, reg, buf, 8);
9211 if(ret < 0) goto err;
9213 reg = 0x10c0 ;
9214 ret = usb_microdia_control_read(dev, reg, buf, 1);
9215 if(ret < 0) goto err;
9217 reg = 0x10c0 ;
9218 ret = usb_microdia_control_read(dev, reg, buf, 1);
9219 if(ret < 0) goto err;
9221 reg = 0x10c0 ;
9222 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xca; buf[3] = 0xe8; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9223 ret = usb_microdia_control_write(dev, reg, buf, 8);
9224 if(ret < 0) goto err;
9226 reg = 0x10c0 ;
9227 ret = usb_microdia_control_read(dev, reg, buf, 1);
9228 if(ret < 0) goto err;
9230 reg = 0x10c0 ;
9231 ret = usb_microdia_control_read(dev, reg, buf, 1);
9232 if(ret < 0) goto err;
9234 reg = 0x10c0 ;
9235 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xcc; buf[3] = 0xd8; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9236 ret = usb_microdia_control_write(dev, reg, buf, 8);
9237 if(ret < 0) goto err;
9239 reg = 0x10c0 ;
9240 ret = usb_microdia_control_read(dev, reg, buf, 1);
9241 if(ret < 0) goto err;
9243 reg = 0x10c0 ;
9244 ret = usb_microdia_control_read(dev, reg, buf, 1);
9245 if(ret < 0) goto err;
9247 reg = 0x10c0 ;
9248 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xcd; buf[3] = 0x93; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9249 ret = usb_microdia_control_write(dev, reg, buf, 8);
9250 if(ret < 0) goto err;
9252 reg = 0x10c0 ;
9253 ret = usb_microdia_control_read(dev, reg, buf, 1);
9254 if(ret < 0) goto err;
9256 reg = 0x10c0 ;
9257 ret = usb_microdia_control_read(dev, reg, buf, 1);
9258 if(ret < 0) goto err;
9260 reg = 0x10c1 ;
9261 ret = usb_microdia_control_read(dev, reg, buf, 1);
9262 if(ret < 0) goto err;
9264 reg = 0x10c1 ;
9265 buf[0] = 0x50;
9266 ret = usb_microdia_control_write(dev, reg, buf, 1);
9267 if(ret < 0) goto err;
9269 reg = 0x10c0 ;
9270 buf[0] = 0x90; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9271 ret = usb_microdia_control_write(dev, reg, buf, 8);
9272 if(ret < 0) goto err;
9274 reg = 0x10c0 ;
9275 ret = usb_microdia_control_read(dev, reg, buf, 1);
9276 if(ret < 0) goto err;
9278 reg = 0x10c0 ;
9279 buf[0] = 0x90; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9280 ret = usb_microdia_control_write(dev, reg, buf, 8);
9281 if(ret < 0) goto err;
9283 reg = 0x10c0 ;
9284 ret = usb_microdia_control_read(dev, reg, buf, 1);
9285 if(ret < 0) goto err;
9287 reg = 0x10c0 ;
9288 buf[0] = 0x90; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9289 ret = usb_microdia_control_write(dev, reg, buf, 8);
9290 if(ret < 0) goto err;
9292 reg = 0x10c0 ;
9293 ret = usb_microdia_control_read(dev, reg, buf, 1);
9294 if(ret < 0) goto err;
9296 reg = 0x10c0 ;
9297 buf[0] = 0x90; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9298 ret = usb_microdia_control_write(dev, reg, buf, 8);
9299 if(ret < 0) goto err;
9301 reg = 0x10c0 ;
9302 ret = usb_microdia_control_read(dev, reg, buf, 1);
9303 if(ret < 0) goto err;
9305 reg = 0x10c0 ;
9306 buf[0] = 0x90; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9307 ret = usb_microdia_control_write(dev, reg, buf, 8);
9308 if(ret < 0) goto err;
9310 reg = 0x10c0 ;
9311 ret = usb_microdia_control_read(dev, reg, buf, 1);
9312 if(ret < 0) goto err;
9314 reg = 0x10c0 ;
9315 buf[0] = 0x90; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9316 ret = usb_microdia_control_write(dev, reg, buf, 8);
9317 if(ret < 0) goto err;
9319 reg = 0x10c0 ;
9320 ret = usb_microdia_control_read(dev, reg, buf, 1);
9321 if(ret < 0) goto err;
9323 reg = 0x10c0 ;
9324 buf[0] = 0x90; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9325 ret = usb_microdia_control_write(dev, reg, buf, 8);
9326 if(ret < 0) goto err;
9328 reg = 0x10c0 ;
9329 ret = usb_microdia_control_read(dev, reg, buf, 1);
9330 if(ret < 0) goto err;
9332 reg = 0x10c0 ;
9333 buf[0] = 0x90; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9334 ret = usb_microdia_control_write(dev, reg, buf, 8);
9335 if(ret < 0) goto err;
9337 reg = 0x10c0 ;
9338 ret = usb_microdia_control_read(dev, reg, buf, 1);
9339 if(ret < 0) goto err;
9341 reg = 0x10c0 ;
9342 buf[0] = 0x90; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9343 ret = usb_microdia_control_write(dev, reg, buf, 8);
9344 if(ret < 0) goto err;
9346 reg = 0x10c0 ;
9347 buf[0] = 0x92; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9348 ret = usb_microdia_control_write(dev, reg, buf, 8);
9349 if(ret < 0) goto err;
9351 reg = 0x10c0 ;
9352 ret = usb_microdia_control_read(dev, reg, buf, 1);
9353 if(ret < 0) goto err;
9355 reg = 0x10c0 ;
9356 buf[0] = 0x92; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9357 ret = usb_microdia_control_write(dev, reg, buf, 8);
9358 if(ret < 0) goto err;
9360 reg = 0x10c0 ;
9361 ret = usb_microdia_control_read(dev, reg, buf, 1);
9362 if(ret < 0) goto err;
9364 reg = 0x10c0 ;
9365 buf[0] = 0x92; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9366 ret = usb_microdia_control_write(dev, reg, buf, 8);
9367 if(ret < 0) goto err;
9369 reg = 0x10c0 ;
9370 ret = usb_microdia_control_read(dev, reg, buf, 1);
9371 if(ret < 0) goto err;
9373 reg = 0x10c0 ;
9374 buf[0] = 0x92; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9375 ret = usb_microdia_control_write(dev, reg, buf, 8);
9376 if(ret < 0) goto err;
9378 reg = 0x10c0 ;
9379 ret = usb_microdia_control_read(dev, reg, buf, 1);
9380 if(ret < 0) goto err;
9382 reg = 0x10c0 ;
9383 buf[0] = 0x92; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9384 ret = usb_microdia_control_write(dev, reg, buf, 8);
9385 if(ret < 0) goto err;
9387 reg = 0x10c0 ;
9388 ret = usb_microdia_control_read(dev, reg, buf, 1);
9389 if(ret < 0) goto err;
9391 reg = 0x10c0 ;
9392 buf[0] = 0x92; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9393 ret = usb_microdia_control_write(dev, reg, buf, 8);
9394 if(ret < 0) goto err;
9396 reg = 0x10c0 ;
9397 ret = usb_microdia_control_read(dev, reg, buf, 1);
9398 if(ret < 0) goto err;
9400 reg = 0x10c0 ;
9401 buf[0] = 0x92; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9402 ret = usb_microdia_control_write(dev, reg, buf, 8);
9403 if(ret < 0) goto err;
9405 reg = 0x10c0 ;
9406 ret = usb_microdia_control_read(dev, reg, buf, 1);
9407 if(ret < 0) goto err;
9409 reg = 0x10c0 ;
9410 buf[0] = 0x92; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9411 ret = usb_microdia_control_write(dev, reg, buf, 8);
9412 if(ret < 0) goto err;
9414 reg = 0x10c0 ;
9415 ret = usb_microdia_control_read(dev, reg, buf, 1);
9416 if(ret < 0) goto err;
9418 reg = 0x10c0 ;
9419 buf[0] = 0x92; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9420 ret = usb_microdia_control_write(dev, reg, buf, 8);
9421 if(ret < 0) goto err;
9423 reg = 0x10c2 ;
9424 ret = usb_microdia_control_read(dev, reg, buf, 5);
9425 if(ret < 0) goto err;
9427 reg = 0x10c1 ;
9428 buf[0] = 0x30;
9429 ret = usb_microdia_control_write(dev, reg, buf, 1);
9430 if(ret < 0) goto err;
9432 reg = 0x10e0 ;
9433 buf[0] = 0x47;
9434 ret = usb_microdia_control_write(dev, reg, buf, 1);
9435 if(ret < 0) goto err;
9437 reg = 0x10e0 ;
9438 buf[0] = 0x47;
9439 ret = usb_microdia_control_write(dev, reg, buf, 1);
9440 if(ret < 0) goto err;
9442 reg = 0x1001 ;
9443 buf[0] = 0xc6;
9444 ret = usb_microdia_control_write(dev, reg, buf, 1);
9445 if(ret < 0) goto err;
9447 reg = 0x1001 ;
9448 buf[0] = 0xc4;
9449 ret = usb_microdia_control_write(dev, reg, buf, 1);
9450 if(ret < 0) goto err;
9452 reg = 0x1001 ;
9453 buf[0] = 0x84;
9454 ret = usb_microdia_control_write(dev, reg, buf, 1);
9455 if(ret < 0) goto err;
9457 reg = 0x1189 ;
9458 buf[0] = 0xcc;
9459 ret = usb_microdia_control_write(dev, reg, buf, 1);
9460 if(ret < 0) goto err;
9462 reg = 0x11bc ;
9463 buf[0] = 0x00;
9464 ret = usb_microdia_control_write(dev, reg, buf, 1);
9465 if(ret < 0) goto err;
9467 reg = 0x11bd ;
9468 buf[0] = 0x00;
9469 ret = usb_microdia_control_write(dev, reg, buf, 1);
9470 if(ret < 0) goto err;
9472 reg = 0x11be ;
9473 buf[0] = 0x00;
9474 ret = usb_microdia_control_write(dev, reg, buf, 1);
9475 if(ret < 0) goto err;
9477 reg = 0x11bf ;
9478 buf[0] = 0x00;
9479 ret = usb_microdia_control_write(dev, reg, buf, 1);
9480 if(ret < 0) goto err;
9482 reg = 0x10c0 ;
9483 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x03; buf[3] = 0x14; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9484 ret = usb_microdia_control_write(dev, reg, buf, 8);
9485 if(ret < 0) goto err;
9487 reg = 0x10c0 ;
9488 ret = usb_microdia_control_read(dev, reg, buf, 1);
9489 if(ret < 0) goto err;
9491 reg = 0x10c0 ;
9492 ret = usb_microdia_control_read(dev, reg, buf, 1);
9493 if(ret < 0) goto err;
9495 reg = 0x10c0 ;
9496 buf[0] = 0xd0; buf[1] = 0x30; buf[2] = 0x17; buf[3] = 0x1b; buf[4] = 0xbc; buf[5] = 0x01; buf[6] = 0x7a; buf[7] = 0x10;
9497 ret = usb_microdia_control_write(dev, reg, buf, 8);
9498 if(ret < 0) goto err;
9500 reg = 0x10c0 ;
9501 ret = usb_microdia_control_read(dev, reg, buf, 1);
9502 if(ret < 0) goto err;
9504 reg = 0x10c0 ;
9505 ret = usb_microdia_control_read(dev, reg, buf, 1);
9506 if(ret < 0) goto err;
9508 reg = 0x10c0 ;
9509 buf[0] = 0x90; buf[1] = 0x30; buf[2] = 0x1b; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9510 ret = usb_microdia_control_write(dev, reg, buf, 8);
9511 if(ret < 0) goto err;
9513 reg = 0x10c0 ;
9514 ret = usb_microdia_control_read(dev, reg, buf, 1);
9515 if(ret < 0) goto err;
9517 reg = 0x10c0 ;
9518 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x32; buf[3] = 0x82; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9519 ret = usb_microdia_control_write(dev, reg, buf, 8);
9520 if(ret < 0) goto err;
9522 reg = 0x10c0 ;
9523 ret = usb_microdia_control_read(dev, reg, buf, 1);
9524 if(ret < 0) goto err;
9526 reg = 0x10c0 ;
9527 ret = usb_microdia_control_read(dev, reg, buf, 1);
9528 if(ret < 0) goto err;
9530 reg = 0x1180 ;
9531 buf[0] = 0x05; buf[1] = 0x00; buf[2] = 0x01; buf[3] = 0x00; buf[4] = 0x50; buf[5] = 0x78;
9532 ret = usb_microdia_control_write(dev, reg, buf, 6);
9533 if(ret < 0) goto err;
9535 reg = 0x10fb ;
9536 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0; buf[4] = 0x00;
9537 ret = usb_microdia_control_write(dev, reg, buf, 5);
9538 if(ret < 0) goto err;
9540 reg = 0x1189 ;
9541 buf[0] = 0xdc;
9542 ret = usb_microdia_control_write(dev, reg, buf, 1);
9543 if(ret < 0) goto err;
9545 reg = 0x1189 ;
9546 buf[0] = 0xd0;
9547 ret = usb_microdia_control_write(dev, reg, buf, 1);
9548 if(ret < 0) goto err;
9550 reg = 0x11a1 ;
9551 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0xd5; buf[3] = 0xa0;
9552 ret = usb_microdia_control_write(dev, reg, buf, 4);
9553 if(ret < 0) goto err;
9555 reg = 0x11ab ;
9556 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0xa0; buf[3] = 0x78;
9557 ret = usb_microdia_control_write(dev, reg, buf, 4);
9558 if(ret < 0) goto err;
9560 reg = 0x1000 ;
9561 buf[0] = 0x78;
9562 ret = usb_microdia_control_write(dev, reg, buf, 1);
9563 if(ret < 0) goto err;
9565 reg = 0x1002 ;
9566 buf[0] = 0x18;
9567 ret = usb_microdia_control_write(dev, reg, buf, 1);
9568 if(ret < 0) goto err;
9570 reg = 0x1002 ;
9571 buf[0] = 0x08;
9572 ret = usb_microdia_control_write(dev, reg, buf, 1);
9573 if(ret < 0) goto err;
9575 reg = 0x11b8 ;
9576 buf[0] = 0x38;
9577 ret = usb_microdia_control_write(dev, reg, buf, 1);
9578 if(ret < 0) goto err;
9580 reg = 0x118a ;
9581 buf[0] = 0x02;
9582 ret = usb_microdia_control_write(dev, reg, buf, 1);
9583 if(ret < 0) goto err;
9585 reg = 0x0395 ;
9586 buf[0] = 0x02;
9587 ret = usb_microdia_control_write(dev, reg, buf, 1);
9588 if(ret < 0) goto err;
9590 reg = 0x11b8 ;
9591 buf[0] = 0x78;
9592 ret = usb_microdia_control_write(dev, reg, buf, 1);
9593 if(ret < 0) goto err;
9595 reg = 0x11b8 ;
9596 ret = usb_microdia_control_read(dev, reg, buf, 1);
9597 if(ret < 0) goto err;
9599 reg = 0x11b8 ;
9600 buf[0] = 0xf9;
9601 ret = usb_microdia_control_write(dev, reg, buf, 1);
9602 if(ret < 0) goto err;
9604 reg = 0x11b8 ;
9605 ret = usb_microdia_control_read(dev, reg, buf, 1);
9606 if(ret < 0) goto err;
9608 reg = 0x11b8 ;
9609 buf[0] = 0x7a;
9610 ret = usb_microdia_control_write(dev, reg, buf, 1);
9611 if(ret < 0) goto err;
9613 reg = 0x11b8 ;
9614 ret = usb_microdia_control_read(dev, reg, buf, 1);
9615 if(ret < 0) goto err;
9617 reg = 0x11b8 ;
9618 buf[0] = 0x7b;
9619 ret = usb_microdia_control_write(dev, reg, buf, 1);
9620 if(ret < 0) goto err;
9622 reg = 0x11b8 ;
9623 ret = usb_microdia_control_read(dev, reg, buf, 1);
9624 if(ret < 0) goto err;
9626 reg = 0x11b8 ;
9627 buf[0] = 0x7c;
9628 ret = usb_microdia_control_write(dev, reg, buf, 1);
9629 if(ret < 0) goto err;
9631 reg = 0x11b8 ;
9632 ret = usb_microdia_control_read(dev, reg, buf, 1);
9633 if(ret < 0) goto err;
9635 reg = 0x11b8 ;
9636 buf[0] = 0xfd;
9637 ret = usb_microdia_control_write(dev, reg, buf, 1);
9638 if(ret < 0) goto err;
9640 reg = 0x11b8 ;
9641 ret = usb_microdia_control_read(dev, reg, buf, 1);
9642 if(ret < 0) goto err;
9644 reg = 0x11b8 ;
9645 buf[0] = 0xfa;
9646 ret = usb_microdia_control_write(dev, reg, buf, 1);
9647 if(ret < 0) goto err;
9649 reg = 0x10c0 ;
9650 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x11; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9651 ret = usb_microdia_control_write(dev, reg, buf, 8);
9652 if(ret < 0) goto err;
9654 reg = 0x10c0 ;
9655 ret = usb_microdia_control_read(dev, reg, buf, 1);
9656 if(ret < 0) goto err;
9658 reg = 0x10c0 ;
9659 ret = usb_microdia_control_read(dev, reg, buf, 1);
9660 if(ret < 0) goto err;
9662 reg = 0x10c0 ;
9663 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x2a; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9664 ret = usb_microdia_control_write(dev, reg, buf, 8);
9665 if(ret < 0) goto err;
9667 reg = 0x10c0 ;
9668 ret = usb_microdia_control_read(dev, reg, buf, 1);
9669 if(ret < 0) goto err;
9671 reg = 0x10c0 ;
9672 ret = usb_microdia_control_read(dev, reg, buf, 1);
9673 if(ret < 0) goto err;
9675 reg = 0x10c0 ;
9676 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x2b; buf[3] = 0x06; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9677 ret = usb_microdia_control_write(dev, reg, buf, 8);
9678 if(ret < 0) goto err;
9680 reg = 0x10c0 ;
9681 ret = usb_microdia_control_read(dev, reg, buf, 1);
9682 if(ret < 0) goto err;
9684 reg = 0x10c0 ;
9685 ret = usb_microdia_control_read(dev, reg, buf, 1);
9686 if(ret < 0) goto err;
9688 reg = 0x10c0 ;
9689 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x92; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9690 ret = usb_microdia_control_write(dev, reg, buf, 8);
9691 if(ret < 0) goto err;
9693 reg = 0x10c0 ;
9694 ret = usb_microdia_control_read(dev, reg, buf, 1);
9695 if(ret < 0) goto err;
9697 reg = 0x10c0 ;
9698 ret = usb_microdia_control_read(dev, reg, buf, 1);
9699 if(ret < 0) goto err;
9701 reg = 0x10c0 ;
9702 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x93; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9703 ret = usb_microdia_control_write(dev, reg, buf, 8);
9704 if(ret < 0) goto err;
9706 reg = 0x10c0 ;
9707 ret = usb_microdia_control_read(dev, reg, buf, 1);
9708 if(ret < 0) goto err;
9710 reg = 0x10c0 ;
9711 ret = usb_microdia_control_read(dev, reg, buf, 1);
9712 if(ret < 0) goto err;
9714 reg = 0x10c0 ;
9715 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x1e; buf[3] = 0x04; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9716 ret = usb_microdia_control_write(dev, reg, buf, 8);
9717 if(ret < 0) goto err;
9719 reg = 0x10c0 ;
9720 ret = usb_microdia_control_read(dev, reg, buf, 1);
9721 if(ret < 0) goto err;
9723 reg = 0x10c0 ;
9724 ret = usb_microdia_control_read(dev, reg, buf, 1);
9725 if(ret < 0) goto err;
9727 reg = 0x10c0 ;
9728 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x1e; buf[3] = 0x04; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9729 ret = usb_microdia_control_write(dev, reg, buf, 8);
9730 if(ret < 0) goto err;
9732 reg = 0x10c0 ;
9733 ret = usb_microdia_control_read(dev, reg, buf, 1);
9734 if(ret < 0) goto err;
9736 reg = 0x10c0 ;
9737 ret = usb_microdia_control_read(dev, reg, buf, 1);
9738 if(ret < 0) goto err;
9740 reg = 0x1182 ;
9741 buf[0] = 0x01;
9742 ret = usb_microdia_control_write(dev, reg, buf, 1);
9743 if(ret < 0) goto err;
9745 reg = 0x10c0 ;
9746 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x10; buf[3] = 0x7d; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9747 ret = usb_microdia_control_write(dev, reg, buf, 8);
9748 if(ret < 0) goto err;
9750 reg = 0x10c0 ;
9751 ret = usb_microdia_control_read(dev, reg, buf, 1);
9752 if(ret < 0) goto err;
9754 reg = 0x10c0 ;
9755 ret = usb_microdia_control_read(dev, reg, buf, 1);
9756 if(ret < 0) goto err;
9758 reg = 0x10c0 ;
9759 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x04; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9760 ret = usb_microdia_control_write(dev, reg, buf, 8);
9761 if(ret < 0) goto err;
9763 reg = 0x10c0 ;
9764 ret = usb_microdia_control_read(dev, reg, buf, 1);
9765 if(ret < 0) goto err;
9767 reg = 0x10c0 ;
9768 ret = usb_microdia_control_read(dev, reg, buf, 1);
9769 if(ret < 0) goto err;
9771 reg = 0x10c0 ;
9772 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xa1; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9773 ret = usb_microdia_control_write(dev, reg, buf, 8);
9774 if(ret < 0) goto err;
9776 reg = 0x10c0 ;
9777 ret = usb_microdia_control_read(dev, reg, buf, 1);
9778 if(ret < 0) goto err;
9780 reg = 0x10c0 ;
9781 ret = usb_microdia_control_read(dev, reg, buf, 1);
9782 if(ret < 0) goto err;
9784 reg = 0x10c0 ;
9785 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x2d; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9786 ret = usb_microdia_control_write(dev, reg, buf, 8);
9787 if(ret < 0) goto err;
9789 reg = 0x10c0 ;
9790 ret = usb_microdia_control_read(dev, reg, buf, 1);
9791 if(ret < 0) goto err;
9793 reg = 0x10c0 ;
9794 ret = usb_microdia_control_read(dev, reg, buf, 1);
9795 if(ret < 0) goto err;
9797 reg = 0x10c0 ;
9798 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x2e; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9799 ret = usb_microdia_control_write(dev, reg, buf, 8);
9800 if(ret < 0) goto err;
9802 reg = 0x10c0 ;
9803 ret = usb_microdia_control_read(dev, reg, buf, 1);
9804 if(ret < 0) goto err;
9806 reg = 0x10c0 ;
9807 ret = usb_microdia_control_read(dev, reg, buf, 1);
9808 if(ret < 0) goto err;
9810 reg = 0x10c0 ;
9811 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9812 ret = usb_microdia_control_write(dev, reg, buf, 8);
9813 if(ret < 0) goto err;
9815 reg = 0x10c0 ;
9816 ret = usb_microdia_control_read(dev, reg, buf, 1);
9817 if(ret < 0) goto err;
9819 reg = 0x10c0 ;
9820 ret = usb_microdia_control_read(dev, reg, buf, 1);
9821 if(ret < 0) goto err;
9823 reg = 0x10c0 ;
9824 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x01; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9825 ret = usb_microdia_control_write(dev, reg, buf, 8);
9826 if(ret < 0) goto err;
9828 reg = 0x10c0 ;
9829 ret = usb_microdia_control_read(dev, reg, buf, 1);
9830 if(ret < 0) goto err;
9832 reg = 0x10c0 ;
9833 ret = usb_microdia_control_read(dev, reg, buf, 1);
9834 if(ret < 0) goto err;
9836 reg = 0x10c0 ;
9837 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x02; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9838 ret = usb_microdia_control_write(dev, reg, buf, 8);
9839 if(ret < 0) goto err;
9841 reg = 0x10c0 ;
9842 ret = usb_microdia_control_read(dev, reg, buf, 1);
9843 if(ret < 0) goto err;
9845 reg = 0x10c0 ;
9846 ret = usb_microdia_control_read(dev, reg, buf, 1);
9847 if(ret < 0) goto err;
9849 reg = 0x118c ;
9850 buf[0] = 0x20;
9851 ret = usb_microdia_control_write(dev, reg, buf, 1);
9852 if(ret < 0) goto err;
9854 reg = 0x118d ;
9855 buf[0] = 0x20;
9856 ret = usb_microdia_control_write(dev, reg, buf, 1);
9857 if(ret < 0) goto err;
9859 reg = 0x118e ;
9860 buf[0] = 0x20;
9861 ret = usb_microdia_control_write(dev, reg, buf, 1);
9862 if(ret < 0) goto err;
9864 reg = 0x118f ;
9865 buf[0] = 0x20;
9866 ret = usb_microdia_control_write(dev, reg, buf, 1);
9867 if(ret < 0) goto err;
9869 reg = 0x11ba ;
9870 buf[0] = 0x0a;
9871 ret = usb_microdia_control_write(dev, reg, buf, 1);
9872 if(ret < 0) goto err;
9874 reg = 0x118c ;
9875 buf[0] = 0x20;
9876 ret = usb_microdia_control_write(dev, reg, buf, 1);
9877 if(ret < 0) goto err;
9879 reg = 0x118d ;
9880 buf[0] = 0x20;
9881 ret = usb_microdia_control_write(dev, reg, buf, 1);
9882 if(ret < 0) goto err;
9884 reg = 0x118e ;
9885 buf[0] = 0x20;
9886 ret = usb_microdia_control_write(dev, reg, buf, 1);
9887 if(ret < 0) goto err;
9889 reg = 0x118f ;
9890 buf[0] = 0x20;
9891 ret = usb_microdia_control_write(dev, reg, buf, 1);
9892 if(ret < 0) goto err;
9894 reg = 0x118b ;
9895 buf[0] = 0x10;
9896 ret = usb_microdia_control_write(dev, reg, buf, 1);
9897 if(ret < 0) goto err;
9899 reg = 0x1190 ;
9900 buf[0] = 0x08; buf[1] = 0x2f; buf[2] = 0x46; buf[3] = 0x58; buf[4] = 0x69; buf[5] = 0x78; buf[6] = 0x86; buf[7] = 0x94; buf[8] = 0xa0; buf[9] = 0xac; buf[10] = 0xb8; buf[11] = 0xc3; buf[12] = 0xce; buf[13] = 0xd9; buf[14] = 0xe3; buf[15] = 0xed; buf[16] = 0xf7;
9901 ret = usb_microdia_control_write(dev, reg, buf, 17);
9902 if(ret < 0) goto err;
9904 reg = 0x10e1 ;
9905 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00; buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00; buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00; buf[20] = 0x00;
9906 ret = usb_microdia_control_write(dev, reg, buf, 21);
9907 if(ret < 0) goto err;
9909 reg = 0x10e1 ;
9910 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00; buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00; buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00; buf[20] = 0x00;
9911 ret = usb_microdia_control_write(dev, reg, buf, 21);
9912 if(ret < 0) goto err;
9914 reg = 0x10e1 ;
9915 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00; buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00; buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00; buf[20] = 0x00;
9916 ret = usb_microdia_control_write(dev, reg, buf, 21);
9917 if(ret < 0) goto err;
9919 reg = 0x10e1 ;
9920 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00; buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00; buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00; buf[20] = 0x00;
9921 ret = usb_microdia_control_write(dev, reg, buf, 21);
9922 if(ret < 0) goto err;
9924 reg = 0x10e1 ;
9925 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00; buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00; buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00; buf[20] = 0x00;
9926 ret = usb_microdia_control_write(dev, reg, buf, 21);
9927 if(ret < 0) goto err;
9929 reg = 0x10e1 ;
9930 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00; buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00; buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00; buf[20] = 0x00;
9931 ret = usb_microdia_control_write(dev, reg, buf, 21);
9932 if(ret < 0) goto err;
9934 reg = 0x10e1 ;
9935 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00; buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00; buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00; buf[20] = 0x00;
9936 ret = usb_microdia_control_write(dev, reg, buf, 21);
9937 if(ret < 0) goto err;
9939 reg = 0x10e1 ;
9940 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00; buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00; buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00; buf[20] = 0x00;
9941 ret = usb_microdia_control_write(dev, reg, buf, 21);
9942 if(ret < 0) goto err;
9944 reg = 0x10e1 ;
9945 buf[0] = 0x16; buf[1] = 0x00; buf[2] = 0x2d; buf[3] = 0x00; buf[4] = 0x08; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00; buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00; buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00; buf[20] = 0x00;
9946 ret = usb_microdia_control_write(dev, reg, buf, 21);
9947 if(ret < 0) goto err;
9949 reg = 0x10f7 ;
9950 buf[0] = 0x05;
9951 ret = usb_microdia_control_write(dev, reg, buf, 1);
9952 if(ret < 0) goto err;
9954 reg = 0x10f6 ;
9955 buf[0] = 0x20;
9956 ret = usb_microdia_control_write(dev, reg, buf, 1);
9957 if(ret < 0) goto err;
9959 reg = 0x10e1 ;
9960 buf[0] = 0x16; buf[1] = 0x00; buf[2] = 0x2d; buf[3] = 0x00; buf[4] = 0x08; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00; buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00; buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00; buf[20] = 0x00;
9961 ret = usb_microdia_control_write(dev, reg, buf, 21);
9962 if(ret < 0) goto err;
9964 reg = 0x10f8 ;
9965 buf[0] = 0x14;
9966 ret = usb_microdia_control_write(dev, reg, buf, 1);
9967 if(ret < 0) goto err;
9969 reg = 0x10fa ;
9970 buf[0] = 0xff;
9971 ret = usb_microdia_control_write(dev, reg, buf, 1);
9972 if(ret < 0) goto err;
9974 reg = 0x10f9 ;
9975 buf[0] = 0x00;
9976 ret = usb_microdia_control_write(dev, reg, buf, 1);
9977 if(ret < 0) goto err;
9979 reg = 0x10f9 ;
9980 buf[0] = 0x00;
9981 ret = usb_microdia_control_write(dev, reg, buf, 1);
9982 if(ret < 0) goto err;
9984 reg = 0x11ba ;
9985 buf[0] = 0x0a;
9986 ret = usb_microdia_control_write(dev, reg, buf, 1);
9987 if(ret < 0) goto err;
9989 reg = 0x11bc ;
9990 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00;
9991 ret = usb_microdia_control_write(dev, reg, buf, 4);
9992 if(ret < 0) goto err;
9994 reg = 0x11c0 ;
9995 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00; buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00; buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00; buf[20] = 0x00; buf[21] = 0x00; buf[22] = 0x00; buf[23] = 0x00; buf[24] = 0x00; buf[25] = 0x00; buf[26] = 0x00; buf[27] = 0x00; buf[28] = 0x00; buf[29] = 0x00; buf[30] = 0x00; buf[31] = 0x00; buf[32] = 0x00; buf[33] = 0x00; buf[34] = 0x00; buf[35] = 0x00; buf[36] = 0x00; buf[37] = 0x00; buf[38] = 0x00; buf[39] = 0x00; buf[40] = 0x00; buf[41] = 0x00; buf[42] = 0x00; buf[43] = 0x00; buf[44] = 0x00; buf[45] = 0x00; buf[46] = 0x00; buf[47] = 0x00;
9996 ret = usb_microdia_control_write(dev, reg, buf, 48);
9997 if(ret < 0) goto err;
9999 reg = 0x118c ;
10000 buf[0] = 0x20;
10001 ret = usb_microdia_control_write(dev, reg, buf, 1);
10002 if(ret < 0) goto err;
10004 reg = 0x118d ;
10005 buf[0] = 0x20;
10006 ret = usb_microdia_control_write(dev, reg, buf, 1);
10007 if(ret < 0) goto err;
10009 reg = 0x118e ;
10010 buf[0] = 0x20;
10011 ret = usb_microdia_control_write(dev, reg, buf, 1);
10012 if(ret < 0) goto err;
10014 reg = 0x118f ;
10015 buf[0] = 0x20;
10016 ret = usb_microdia_control_write(dev, reg, buf, 1);
10017 if(ret < 0) goto err;
10019 reg = 0x11a5 ;
10020 buf[0] = 0x2d; buf[1] = 0x2d; buf[2] = 0x3a; buf[3] = 0x05; buf[4] = 0x04; buf[5] = 0x3f;
10021 ret = usb_microdia_control_write(dev, reg, buf, 6);
10022 if(ret < 0) goto err;
10024 reg = 0x11af ;
10025 buf[0] = 0x28; buf[1] = 0xd8; buf[2] = 0x14; buf[3] = 0xec;
10026 ret = usb_microdia_control_write(dev, reg, buf, 4);
10027 if(ret < 0) goto err;
10029 reg = 0x11b3 ;
10030 buf[0] = 0x32; buf[1] = 0xdd; buf[2] = 0x32; buf[3] = 0xdd;
10031 ret = usb_microdia_control_write(dev, reg, buf, 4);
10032 if(ret < 0) goto err;
10034 reg = 0x10e0 ;
10035 buf[0] = 0x47;
10036 ret = usb_microdia_control_write(dev, reg, buf, 1);
10037 if(ret < 0) goto err;
10039 reg = 0x1061 ;
10040 buf[0] = 0x01;
10041 ret = usb_microdia_control_write(dev, reg, buf, 1);
10042 if(ret < 0) goto err;
10044 reg = 0x10e0 ;
10045 buf[0] = 0x67;
10046 ret = usb_microdia_control_write(dev, reg, buf, 1);
10047 if(ret < 0) goto err;
10049 reg = 0x1100 ;
10050 buf[0] = 0x0d; buf[1] = 0x08; buf[2] = 0x08; buf[3] = 0x0d; buf[4] = 0x08; buf[5] = 0x08; buf[6] = 0x0d; buf[7] = 0x0d; buf[8] = 0x0d; buf[9] = 0x0d; buf[10] = 0x11; buf[11] = 0x0d; buf[12] = 0x0d; buf[13] = 0x11; buf[14] = 0x15; buf[15] = 0x21; buf[16] = 0x15; buf[17] = 0x15; buf[18] = 0x11; buf[19] = 0x11; buf[20] = 0x15; buf[21] = 0x2a; buf[22] = 0x1d; buf[23] = 0x1d; buf[24] = 0x19; buf[25] = 0x21; buf[26] = 0x32; buf[27] = 0x2a; buf[28] = 0x32; buf[29] = 0x32; buf[30] = 0x2e; buf[31] = 0x2a; buf[32] = 0x2e; buf[33] = 0x2e; buf[34] = 0x36; buf[35] = 0x3a; buf[36] = 0x4b; buf[37] = 0x43; buf[38] = 0x36; buf[39] = 0x3a; buf[40] = 0x47; buf[41] = 0x3a; buf[42] = 0x2e; buf[43] = 0x2e; buf[44] = 0x43; buf[45] = 0x5c; buf[46] = 0x43; buf[47] = 0x47; buf[48] = 0x4f; buf[49] = 0x53; buf[50] = 0x58; buf[51] = 0x58; buf[52] = 0x58; buf[53] = 0x32; buf[54] = 0x3f; buf[55] = 0x60; buf[56] = 0x64; buf[57] = 0x5c; buf[58] = 0x53; buf[59] = 0x64; buf[60] = 0x4b; buf[61] = 0x53; buf[62] = 0x58; buf[63] = 0x53;
10051 ret = usb_microdia_control_write(dev, reg, buf, 64);
10052 if(ret < 0) goto err;
10054 reg = 0x1140 ;
10055 buf[0] = 0x0d; buf[1] = 0x11; buf[2] = 0x11; buf[3] = 0x15; buf[4] = 0x11; buf[5] = 0x15; buf[6] = 0x26; buf[7] = 0x15; buf[8] = 0x15; buf[9] = 0x26; buf[10] = 0x53; buf[11] = 0x36; buf[12] = 0x2e; buf[13] = 0x36; buf[14] = 0x53; buf[15] = 0x53; buf[16] = 0x53; buf[17] = 0x53; buf[18] = 0x53; buf[19] = 0x53; buf[20] = 0x53; buf[21] = 0x53; buf[22] = 0x53; buf[23] = 0x53; buf[24] = 0x53; buf[25] = 0x53; buf[26] = 0x53; buf[27] = 0x53; buf[28] = 0x53; buf[29] = 0x53; buf[30] = 0x53; buf[31] = 0x53; buf[32] = 0x53; buf[33] = 0x53; buf[34] = 0x53; buf[35] = 0x53; buf[36] = 0x53; buf[37] = 0x53; buf[38] = 0x53; buf[39] = 0x53; buf[40] = 0x53; buf[41] = 0x53; buf[42] = 0x53; buf[43] = 0x53; buf[44] = 0x53; buf[45] = 0x53; buf[46] = 0x53; buf[47] = 0x53; buf[48] = 0x53; buf[49] = 0x53; buf[50] = 0x53; buf[51] = 0x53; buf[52] = 0x53; buf[53] = 0x53; buf[54] = 0x53; buf[55] = 0x53; buf[56] = 0x53; buf[57] = 0x53; buf[58] = 0x53; buf[59] = 0x53; buf[60] = 0x53; buf[61] = 0x53; buf[62] = 0x53; buf[63] = 0x53;
10056 ret = usb_microdia_control_write(dev, reg, buf, 64);
10057 if(ret < 0) goto err;
10059 reg = 0x10e0 ;
10060 buf[0] = 0x47;
10061 ret = usb_microdia_control_write(dev, reg, buf, 1);
10062 if(ret < 0) goto err;
10064 reg = 0x1061 ;
10065 buf[0] = 0x03;
10066 ret = usb_microdia_control_write(dev, reg, buf, 1);
10067 if(ret < 0) goto err;
10069 reg = 0x10e0 ;
10070 buf[0] = 0x4b;
10071 ret = usb_microdia_control_write(dev, reg, buf, 1);
10072 if(ret < 0) goto err;
10074 reg = 0x1189 ;
10075 buf[0] = 0xd0;
10076 ret = usb_microdia_control_write(dev, reg, buf, 1);
10077 if(ret < 0) goto err;
10079 reg = 0x11bc ;
10080 buf[0] = 0x00;
10081 ret = usb_microdia_control_write(dev, reg, buf, 1);
10082 if(ret < 0) goto err;
10084 reg = 0x11bd ;
10085 buf[0] = 0x00;
10086 ret = usb_microdia_control_write(dev, reg, buf, 1);
10087 if(ret < 0) goto err;
10089 reg = 0x11be ;
10090 buf[0] = 0x00;
10091 ret = usb_microdia_control_write(dev, reg, buf, 1);
10092 if(ret < 0) goto err;
10094 reg = 0x11bf ;
10095 buf[0] = 0x00;
10096 ret = usb_microdia_control_write(dev, reg, buf, 1);
10097 if(ret < 0) goto err;
10099 reg = 0x10c0 ;
10100 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x03; buf[3] = 0x14; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10101 ret = usb_microdia_control_write(dev, reg, buf, 8);
10102 if(ret < 0) goto err;
10104 reg = 0x10c0 ;
10105 ret = usb_microdia_control_read(dev, reg, buf, 1);
10106 if(ret < 0) goto err;
10108 reg = 0x10c0 ;
10109 ret = usb_microdia_control_read(dev, reg, buf, 1);
10110 if(ret < 0) goto err;
10112 reg = 0x10c0 ;
10113 buf[0] = 0xd0; buf[1] = 0x30; buf[2] = 0x17; buf[3] = 0x1b; buf[4] = 0xbc; buf[5] = 0x01; buf[6] = 0x7a; buf[7] = 0x10;
10114 ret = usb_microdia_control_write(dev, reg, buf, 8);
10115 if(ret < 0) goto err;
10117 reg = 0x10c0 ;
10118 ret = usb_microdia_control_read(dev, reg, buf, 1);
10119 if(ret < 0) goto err;
10121 reg = 0x10c0 ;
10122 ret = usb_microdia_control_read(dev, reg, buf, 1);
10123 if(ret < 0) goto err;
10125 reg = 0x10c0 ;
10126 buf[0] = 0x90; buf[1] = 0x30; buf[2] = 0x1b; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10127 ret = usb_microdia_control_write(dev, reg, buf, 8);
10128 if(ret < 0) goto err;
10130 reg = 0x10c0 ;
10131 ret = usb_microdia_control_read(dev, reg, buf, 1);
10132 if(ret < 0) goto err;
10134 reg = 0x10c0 ;
10135 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x32; buf[3] = 0x82; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10136 ret = usb_microdia_control_write(dev, reg, buf, 8);
10137 if(ret < 0) goto err;
10139 reg = 0x10c0 ;
10140 ret = usb_microdia_control_read(dev, reg, buf, 1);
10141 if(ret < 0) goto err;
10143 reg = 0x10c0 ;
10144 ret = usb_microdia_control_read(dev, reg, buf, 1);
10145 if(ret < 0) goto err;
10147 reg = 0x1180 ;
10148 buf[0] = 0x05; buf[1] = 0x00; buf[2] = 0x01; buf[3] = 0x00; buf[4] = 0x50; buf[5] = 0x78;
10149 ret = usb_microdia_control_write(dev, reg, buf, 6);
10150 if(ret < 0) goto err;
10152 reg = 0x10fb ;
10153 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0; buf[4] = 0x00;
10154 ret = usb_microdia_control_write(dev, reg, buf, 5);
10155 if(ret < 0) goto err;
10157 reg = 0x1189 ;
10158 buf[0] = 0xd0;
10159 ret = usb_microdia_control_write(dev, reg, buf, 1);
10160 if(ret < 0) goto err;
10162 reg = 0x11a1 ;
10163 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0xd5; buf[3] = 0xa0;
10164 ret = usb_microdia_control_write(dev, reg, buf, 4);
10165 if(ret < 0) goto err;
10167 reg = 0x11ab ;
10168 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0xa0; buf[3] = 0x78;
10169 ret = usb_microdia_control_write(dev, reg, buf, 4);
10170 if(ret < 0) goto err;
10172 reg = 0x1061 ;
10173 buf[0] = 0x03;
10174 ret = usb_microdia_control_write(dev, reg, buf, 1);
10175 if(ret < 0) goto err;
10177 reg = 0x11ba ;
10178 buf[0] = 0x0a;
10179 ret = usb_microdia_control_write(dev, reg, buf, 1);
10180 if(ret < 0) goto err;
10182 reg = 0x11b9 ;
10183 buf[0] = 0x00;
10184 ret = usb_microdia_control_write(dev, reg, buf, 1);
10185 if(ret < 0) goto err;
10187 reg = 0x11ba ;
10188 buf[0] = 0x0b;
10189 ret = usb_microdia_control_write(dev, reg, buf, 1);
10190 if(ret < 0) goto err;
10192 reg = 0x1061 ;
10193 buf[0] = 0x01;
10194 ret = usb_microdia_control_write(dev, reg, buf, 1);
10195 if(ret < 0) goto err;
10197 reg = 0x1000 ;
10198 buf[0] = 0x78;
10199 ret = usb_microdia_control_write(dev, reg, buf, 1);
10200 if(ret < 0) goto err;
10202 reg = 0x1002 ;
10203 buf[0] = 0x08;
10204 ret = usb_microdia_control_write(dev, reg, buf, 1);
10205 if(ret < 0) goto err;
10207 reg = 0x1002 ;
10208 buf[0] = 0x08;
10209 ret = usb_microdia_control_write(dev, reg, buf, 1);
10210 if(ret < 0) goto err;
10212 reg = 0x11b8 ;
10213 buf[0] = 0xfa;
10214 ret = usb_microdia_control_write(dev, reg, buf, 1);
10215 if(ret < 0) goto err;
10217 reg = 0x118a ;
10218 buf[0] = 0x02;
10219 ret = usb_microdia_control_write(dev, reg, buf, 1);
10220 if(ret < 0) goto err;
10222 reg = 0x0395 ;
10223 buf[0] = 0x02;
10224 ret = usb_microdia_control_write(dev, reg, buf, 1);
10225 if(ret < 0) goto err;
10227 reg = 0x11b8 ;
10228 buf[0] = 0xf8;
10229 ret = usb_microdia_control_write(dev, reg, buf, 1);
10230 if(ret < 0) goto err;
10232 reg = 0x11b8 ;
10233 ret = usb_microdia_control_read(dev, reg, buf, 1);
10234 if(ret < 0) goto err;
10236 reg = 0x11b8 ;
10237 buf[0] = 0xf9;
10238 ret = usb_microdia_control_write(dev, reg, buf, 1);
10239 if(ret < 0) goto err;
10241 reg = 0x11b8 ;
10242 ret = usb_microdia_control_read(dev, reg, buf, 1);
10243 if(ret < 0) goto err;
10245 reg = 0x11b8 ;
10246 buf[0] = 0x7a;
10247 ret = usb_microdia_control_write(dev, reg, buf, 1);
10248 if(ret < 0) goto err;
10250 reg = 0x11b8 ;
10251 ret = usb_microdia_control_read(dev, reg, buf, 1);
10252 if(ret < 0) goto err;
10254 reg = 0x11b8 ;
10255 buf[0] = 0x7b;
10256 ret = usb_microdia_control_write(dev, reg, buf, 1);
10257 if(ret < 0) goto err;
10259 reg = 0x11b8 ;
10260 ret = usb_microdia_control_read(dev, reg, buf, 1);
10261 if(ret < 0) goto err;
10263 reg = 0x11b8 ;
10264 buf[0] = 0x7c;
10265 ret = usb_microdia_control_write(dev, reg, buf, 1);
10266 if(ret < 0) goto err;
10268 reg = 0x11b8 ;
10269 ret = usb_microdia_control_read(dev, reg, buf, 1);
10270 if(ret < 0) goto err;
10272 reg = 0x11b8 ;
10273 buf[0] = 0xfd;
10274 ret = usb_microdia_control_write(dev, reg, buf, 1);
10275 if(ret < 0) goto err;
10277 reg = 0x11b8 ;
10278 ret = usb_microdia_control_read(dev, reg, buf, 1);
10279 if(ret < 0) goto err;
10281 reg = 0x11b8 ;
10282 buf[0] = 0xfa;
10283 ret = usb_microdia_control_write(dev, reg, buf, 1);
10284 if(ret < 0) goto err;
10286 reg = 0x10c0 ;
10287 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x11; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10288 ret = usb_microdia_control_write(dev, reg, buf, 8);
10289 if(ret < 0) goto err;
10291 reg = 0x10c0 ;
10292 ret = usb_microdia_control_read(dev, reg, buf, 1);
10293 if(ret < 0) goto err;
10295 reg = 0x10c0 ;
10296 ret = usb_microdia_control_read(dev, reg, buf, 1);
10297 if(ret < 0) goto err;
10299 reg = 0x10c0 ;
10300 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x2a; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10301 ret = usb_microdia_control_write(dev, reg, buf, 8);
10302 if(ret < 0) goto err;
10304 reg = 0x10c0 ;
10305 ret = usb_microdia_control_read(dev, reg, buf, 1);
10306 if(ret < 0) goto err;
10308 reg = 0x10c0 ;
10309 ret = usb_microdia_control_read(dev, reg, buf, 1);
10310 if(ret < 0) goto err;
10312 reg = 0x10c0 ;
10313 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x2b; buf[3] = 0x70; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10314 ret = usb_microdia_control_write(dev, reg, buf, 8);
10315 if(ret < 0) goto err;
10317 reg = 0x10c0 ;
10318 ret = usb_microdia_control_read(dev, reg, buf, 1);
10319 if(ret < 0) goto err;
10321 reg = 0x10c0 ;
10322 ret = usb_microdia_control_read(dev, reg, buf, 1);
10323 if(ret < 0) goto err;
10325 reg = 0x10c0 ;
10326 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x92; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10327 ret = usb_microdia_control_write(dev, reg, buf, 8);
10328 if(ret < 0) goto err;
10330 reg = 0x10c0 ;
10331 ret = usb_microdia_control_read(dev, reg, buf, 1);
10332 if(ret < 0) goto err;
10334 reg = 0x10c0 ;
10335 ret = usb_microdia_control_read(dev, reg, buf, 1);
10336 if(ret < 0) goto err;
10338 reg = 0x10c0 ;
10339 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x93; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10340 ret = usb_microdia_control_write(dev, reg, buf, 8);
10341 if(ret < 0) goto err;
10343 reg = 0x10c0 ;
10344 ret = usb_microdia_control_read(dev, reg, buf, 1);
10345 if(ret < 0) goto err;
10347 reg = 0x10c0 ;
10348 ret = usb_microdia_control_read(dev, reg, buf, 1);
10349 if(ret < 0) goto err;
10351 reg = 0x10c0 ;
10352 buf[0] = 0x90; buf[1] = 0x30; buf[2] = 0x0a; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10353 ret = usb_microdia_control_write(dev, reg, buf, 8);
10354 if(ret < 0) goto err;
10356 reg = 0x10c0 ;
10357 ret = usb_microdia_control_read(dev, reg, buf, 1);
10358 if(ret < 0) goto err;
10360 reg = 0x10c0 ;
10361 buf[0] = 0x92; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10362 ret = usb_microdia_control_write(dev, reg, buf, 8);
10363 if(ret < 0) goto err;
10365 reg = 0x10c0 ;
10366 ret = usb_microdia_control_read(dev, reg, buf, 1);
10367 if(ret < 0) goto err;
10369 reg = 0x10c2 ;
10370 ret = usb_microdia_control_read(dev, reg, buf, 5);
10371 if(ret < 0) goto err;
10373 reg = 0x10c0 ;
10374 buf[0] = 0x90; buf[1] = 0x30; buf[2] = 0x0b; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10375 ret = usb_microdia_control_write(dev, reg, buf, 8);
10376 if(ret < 0) goto err;
10378 reg = 0x10c0 ;
10379 ret = usb_microdia_control_read(dev, reg, buf, 1);
10380 if(ret < 0) goto err;
10382 reg = 0x10c0 ;
10383 buf[0] = 0x92; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10384 ret = usb_microdia_control_write(dev, reg, buf, 8);
10385 if(ret < 0) goto err;
10387 reg = 0x10c0 ;
10388 ret = usb_microdia_control_read(dev, reg, buf, 1);
10389 if(ret < 0) goto err;
10391 reg = 0x10c2 ;
10392 ret = usb_microdia_control_read(dev, reg, buf, 5);
10393 if(ret < 0) goto err;
10395 reg = 0x10c0 ;
10396 buf[0] = 0x90; buf[1] = 0x30; buf[2] = 0x1c; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10397 ret = usb_microdia_control_write(dev, reg, buf, 8);
10398 if(ret < 0) goto err;
10400 reg = 0x10c0 ;
10401 ret = usb_microdia_control_read(dev, reg, buf, 1);
10402 if(ret < 0) goto err;
10404 reg = 0x10c0 ;
10405 buf[0] = 0x92; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10406 ret = usb_microdia_control_write(dev, reg, buf, 8);
10407 if(ret < 0) goto err;
10409 reg = 0x10c0 ;
10410 ret = usb_microdia_control_read(dev, reg, buf, 1);
10411 if(ret < 0) goto err;
10413 reg = 0x10c2 ;
10414 ret = usb_microdia_control_read(dev, reg, buf, 5);
10415 if(ret < 0) goto err;
10417 reg = 0x10c0 ;
10418 buf[0] = 0x90; buf[1] = 0x30; buf[2] = 0x1d; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10419 ret = usb_microdia_control_write(dev, reg, buf, 8);
10420 if(ret < 0) goto err;
10422 reg = 0x10c0 ;
10423 ret = usb_microdia_control_read(dev, reg, buf, 1);
10424 if(ret < 0) goto err;
10426 reg = 0x10c0 ;
10427 buf[0] = 0x92; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10428 ret = usb_microdia_control_write(dev, reg, buf, 8);
10429 if(ret < 0) goto err;
10431 reg = 0x10c0 ;
10432 ret = usb_microdia_control_read(dev, reg, buf, 1);
10433 if(ret < 0) goto err;
10435 reg = 0x10c2 ;
10436 ret = usb_microdia_control_read(dev, reg, buf, 5);
10437 if(ret < 0) goto err;
10439 reg = 0x1061 ;
10440 buf[0] = 0x03;
10441 ret = usb_microdia_control_write(dev, reg, buf, 1);
10442 if(ret < 0) goto err;
10444 reg = 0x1007 ;
10445 buf[0] = 0x20;
10446 ret = usb_microdia_control_write(dev, reg, buf, 1);
10447 if(ret < 0) goto err;
10449 reg = 0x1006 ;
10450 buf[0] = 0x00;
10451 ret = usb_microdia_control_write(dev, reg, buf, 1);
10452 if(ret < 0) goto err;
10454 reg = 0x10e1 ;
10455 buf[0] = 0x16; buf[1] = 0x00; buf[2] = 0x2d; buf[3] = 0x00; buf[4] = 0x08; buf[5] = 0x00; buf[6] = 0xdd; buf[7] = 0x0f; buf[8] = 0xcc; buf[9] = 0x0f; buf[10] = 0x58; buf[11] = 0x00; buf[12] = 0x4b; buf[13] = 0x00; buf[14] = 0xb5; buf[15] = 0x0f; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00; buf[20] = 0x00;
10456 ret = usb_microdia_control_write(dev, reg, buf, 21);
10457 if(ret < 0) goto err;
10459 reg = 0x10c0 ;
10460 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xa1; buf[3] = 0x01; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10461 ret = usb_microdia_control_write(dev, reg, buf, 8);
10462 if(ret < 0) goto err;
10464 reg = 0x10c0 ;
10465 ret = usb_microdia_control_read(dev, reg, buf, 1);
10466 if(ret < 0) goto err;
10468 reg = 0x10c0 ;
10469 ret = usb_microdia_control_read(dev, reg, buf, 1);
10470 if(ret < 0) goto err;
10472 reg = 0x10c0 ;
10473 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x10; buf[3] = 0x06; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10474 ret = usb_microdia_control_write(dev, reg, buf, 8);
10475 if(ret < 0) goto err;
10477 reg = 0x10c0 ;
10478 ret = usb_microdia_control_read(dev, reg, buf, 1);
10479 if(ret < 0) goto err;
10481 reg = 0x10c0 ;
10482 ret = usb_microdia_control_read(dev, reg, buf, 1);
10483 if(ret < 0) goto err;
10485 reg = 0x10c0 ;
10486 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x04; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10487 ret = usb_microdia_control_write(dev, reg, buf, 8);
10488 if(ret < 0) goto err;
10490 reg = 0x10c0 ;
10491 ret = usb_microdia_control_read(dev, reg, buf, 1);
10492 if(ret < 0) goto err;
10494 reg = 0x10c0 ;
10495 ret = usb_microdia_control_read(dev, reg, buf, 1);
10496 if(ret < 0) goto err;
10498 reg = 0x10c0 ;
10499 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x2d; buf[3] = 0x36; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10500 ret = usb_microdia_control_write(dev, reg, buf, 8);
10501 if(ret < 0) goto err;
10503 reg = 0x10c0 ;
10504 ret = usb_microdia_control_read(dev, reg, buf, 1);
10505 if(ret < 0) goto err;
10507 reg = 0x10c0 ;
10508 ret = usb_microdia_control_read(dev, reg, buf, 1);
10509 if(ret < 0) goto err;
10511 reg = 0x10c0 ;
10512 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x2e; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10513 ret = usb_microdia_control_write(dev, reg, buf, 8);
10514 if(ret < 0) goto err;
10516 reg = 0x10c0 ;
10517 ret = usb_microdia_control_read(dev, reg, buf, 1);
10518 if(ret < 0) goto err;
10520 reg = 0x10c0 ;
10521 ret = usb_microdia_control_read(dev, reg, buf, 1);
10522 if(ret < 0) goto err;
10524 reg = 0x10e1 ;
10525 buf[0] = 0x16; buf[1] = 0x00; buf[2] = 0x2d; buf[3] = 0x00; buf[4] = 0x08; buf[5] = 0x00; buf[6] = 0xdd; buf[7] = 0x0f; buf[8] = 0xcc; buf[9] = 0x0f; buf[10] = 0x58; buf[11] = 0x00; buf[12] = 0x4b; buf[13] = 0x00; buf[14] = 0xb5; buf[15] = 0x0f; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00; buf[20] = 0x00;
10526 ret = usb_microdia_control_write(dev, reg, buf, 21);
10527 if(ret < 0) goto err;
10529 reg = 0x10c0 ;
10530 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x01; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x15;
10531 ret = usb_microdia_control_write(dev, reg, buf, 8);
10532 if(ret < 0) goto err;
10534 reg = 0x10c0 ;
10535 ret = usb_microdia_control_read(dev, reg, buf, 1);
10536 if(ret < 0) goto err;
10538 reg = 0x10c0 ;
10539 ret = usb_microdia_control_read(dev, reg, buf, 1);
10540 if(ret < 0) goto err;
10542 reg = 0x10e1 ;
10543 buf[0] = 0x16; buf[1] = 0x00; buf[2] = 0x2d; buf[3] = 0x00; buf[4] = 0x08; buf[5] = 0x00; buf[6] = 0xdd; buf[7] = 0x0f; buf[8] = 0xcc; buf[9] = 0x0f; buf[10] = 0x58; buf[11] = 0x00; buf[12] = 0x4b; buf[13] = 0x00; buf[14] = 0xb5; buf[15] = 0x0f; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00; buf[20] = 0x00;
10544 ret = usb_microdia_control_write(dev, reg, buf, 21);
10545 if(ret < 0) goto err;
10547 reg = 0x10c0 ;
10548 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x06; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x15;
10549 ret = usb_microdia_control_write(dev, reg, buf, 8);
10550 if(ret < 0) goto err;
10552 reg = 0x10c0 ;
10553 ret = usb_microdia_control_read(dev, reg, buf, 1);
10554 if(ret < 0) goto err;
10556 reg = 0x10c0 ;
10557 ret = usb_microdia_control_read(dev, reg, buf, 1);
10558 if(ret < 0) goto err;
10560 reg = 0x10c0 ;
10561 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x01; buf[3] = 0x94; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10562 ret = usb_microdia_control_write(dev, reg, buf, 8);
10563 if(ret < 0) goto err;
10565 reg = 0x10c0 ;
10566 ret = usb_microdia_control_read(dev, reg, buf, 1);
10567 if(ret < 0) goto err;
10569 reg = 0x10c0 ;
10570 ret = usb_microdia_control_read(dev, reg, buf, 1);
10571 if(ret < 0) goto err;
10573 reg = 0x10c0 ;
10574 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x02; buf[3] = 0x8d; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10575 ret = usb_microdia_control_write(dev, reg, buf, 8);
10576 if(ret < 0) goto err;
10578 reg = 0x10c0 ;
10579 ret = usb_microdia_control_read(dev, reg, buf, 1);
10580 if(ret < 0) goto err;
10582 reg = 0x10c0 ;
10583 ret = usb_microdia_control_read(dev, reg, buf, 1);
10584 if(ret < 0) goto err;
10586 reg = 0x118c ;
10587 buf[0] = 0x20;
10588 ret = usb_microdia_control_write(dev, reg, buf, 1);
10589 if(ret < 0) goto err;
10591 reg = 0x118d ;
10592 buf[0] = 0x20;
10593 ret = usb_microdia_control_write(dev, reg, buf, 1);
10594 if(ret < 0) goto err;
10596 reg = 0x118e ;
10597 buf[0] = 0x20;
10598 ret = usb_microdia_control_write(dev, reg, buf, 1);
10599 if(ret < 0) goto err;
10601 reg = 0x118f ;
10602 buf[0] = 0x20;
10603 ret = usb_microdia_control_write(dev, reg, buf, 1);
10604 if(ret < 0) goto err;
10606 reg = 0x10c0 ;
10607 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x09; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x15;
10608 ret = usb_microdia_control_write(dev, reg, buf, 8);
10609 if(ret < 0) goto err;
10611 reg = 0x10c0 ;
10612 ret = usb_microdia_control_read(dev, reg, buf, 1);
10613 if(ret < 0) goto err;
10615 reg = 0x10c0 ;
10616 ret = usb_microdia_control_read(dev, reg, buf, 1);
10617 if(ret < 0) goto err;
10619 reg = 0x10c0 ;
10620 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x01; buf[3] = 0x95; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10621 ret = usb_microdia_control_write(dev, reg, buf, 8);
10622 if(ret < 0) goto err;
10624 reg = 0x10c0 ;
10625 ret = usb_microdia_control_read(dev, reg, buf, 1);
10626 if(ret < 0) goto err;
10628 reg = 0x10c0 ;
10629 ret = usb_microdia_control_read(dev, reg, buf, 1);
10630 if(ret < 0) goto err;
10632 reg = 0x10c0 ;
10633 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x02; buf[3] = 0x85; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10634 ret = usb_microdia_control_write(dev, reg, buf, 8);
10635 if(ret < 0) goto err;
10637 reg = 0x10c0 ;
10638 ret = usb_microdia_control_read(dev, reg, buf, 1);
10639 if(ret < 0) goto err;
10641 reg = 0x10c0 ;
10642 ret = usb_microdia_control_read(dev, reg, buf, 1);
10643 if(ret < 0) goto err;
10645 reg = 0x118c ;
10646 buf[0] = 0x20;
10647 ret = usb_microdia_control_write(dev, reg, buf, 1);
10648 if(ret < 0) goto err;
10650 reg = 0x118d ;
10651 buf[0] = 0x20;
10652 ret = usb_microdia_control_write(dev, reg, buf, 1);
10653 if(ret < 0) goto err;
10655 reg = 0x118e ;
10656 buf[0] = 0x20;
10657 ret = usb_microdia_control_write(dev, reg, buf, 1);
10658 if(ret < 0) goto err;
10660 reg = 0x118f ;
10661 buf[0] = 0x20;
10662 ret = usb_microdia_control_write(dev, reg, buf, 1);
10663 if(ret < 0) goto err;
10665 reg = 0x10c0 ;
10666 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x0c; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x15;
10667 ret = usb_microdia_control_write(dev, reg, buf, 8);
10668 if(ret < 0) goto err;
10670 reg = 0x10c0 ;
10671 ret = usb_microdia_control_read(dev, reg, buf, 1);
10672 if(ret < 0) goto err;
10674 reg = 0x10c0 ;
10675 ret = usb_microdia_control_read(dev, reg, buf, 1);
10676 if(ret < 0) goto err;
10678 reg = 0x10c0 ;
10679 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x01; buf[3] = 0x96; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10680 ret = usb_microdia_control_write(dev, reg, buf, 8);
10681 if(ret < 0) goto err;
10683 reg = 0x10c0 ;
10684 ret = usb_microdia_control_read(dev, reg, buf, 1);
10685 if(ret < 0) goto err;
10687 reg = 0x10c0 ;
10688 ret = usb_microdia_control_read(dev, reg, buf, 1);
10689 if(ret < 0) goto err;
10691 reg = 0x10c0 ;
10692 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x02; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10693 ret = usb_microdia_control_write(dev, reg, buf, 8);
10694 if(ret < 0) goto err;
10696 reg = 0x10c0 ;
10697 ret = usb_microdia_control_read(dev, reg, buf, 1);
10698 if(ret < 0) goto err;
10700 reg = 0x10c0 ;
10701 ret = usb_microdia_control_read(dev, reg, buf, 1);
10702 if(ret < 0) goto err;
10704 reg = 0x118c ;
10705 buf[0] = 0x20;
10706 ret = usb_microdia_control_write(dev, reg, buf, 1);
10707 if(ret < 0) goto err;
10709 reg = 0x118d ;
10710 buf[0] = 0x20;
10711 ret = usb_microdia_control_write(dev, reg, buf, 1);
10712 if(ret < 0) goto err;
10714 reg = 0x118e ;
10715 buf[0] = 0x20;
10716 ret = usb_microdia_control_write(dev, reg, buf, 1);
10717 if(ret < 0) goto err;
10719 reg = 0x118f ;
10720 buf[0] = 0x20;
10721 ret = usb_microdia_control_write(dev, reg, buf, 1);
10722 if(ret < 0) goto err;
10724 reg = 0x10c0 ;
10725 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x02; buf[3] = 0x7c; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10726 ret = usb_microdia_control_write(dev, reg, buf, 8);
10727 if(ret < 0) goto err;
10729 reg = 0x10c0 ;
10730 ret = usb_microdia_control_read(dev, reg, buf, 1);
10731 if(ret < 0) goto err;
10733 reg = 0x10c0 ;
10734 ret = usb_microdia_control_read(dev, reg, buf, 1);
10735 if(ret < 0) goto err;
10737 reg = 0x118c ;
10738 buf[0] = 0x20;
10739 ret = usb_microdia_control_write(dev, reg, buf, 1);
10740 if(ret < 0) goto err;
10742 reg = 0x118d ;
10743 buf[0] = 0x20;
10744 ret = usb_microdia_control_write(dev, reg, buf, 1);
10745 if(ret < 0) goto err;
10747 reg = 0x118e ;
10748 buf[0] = 0x20;
10749 ret = usb_microdia_control_write(dev, reg, buf, 1);
10750 if(ret < 0) goto err;
10752 reg = 0x118f ;
10753 buf[0] = 0x20;
10754 ret = usb_microdia_control_write(dev, reg, buf, 1);
10755 if(ret < 0) goto err;
10757 reg = 0x1007 ;
10758 buf[0] = 0x20;
10759 ret = usb_microdia_control_write(dev, reg, buf, 1);
10760 if(ret < 0) goto err;
10762 reg = 0x1006 ;
10763 buf[0] = 0x20;
10764 ret = usb_microdia_control_write(dev, reg, buf, 1);
10765 if(ret < 0) goto err;
10770 /* END OF MICRODIA 6288 START STREAM */
10772 return 0;
10773 err:
10774 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg, ret);
10775 return ret;
10778 /**
10779 * @brief From UsbSnoop-plugin-parsed.log
10781 * @param dev
10783 * @returns 0 if all OK
10785 * this function starts video stream Microdia 6128 webcam
10786 * Bridge SN9C325 + OM6802 CMOS sensor
10787 * note: comments are my observations so they could be wrong
10789 int microdia_6128_start_stream(struct usb_microdia *dev)
10791 int i;
10792 int ret = 0;
10793 __u8 buf[8];
10795 __u8 data_15[] = {
10796 0x00, 0x1a, 0x34, 0x27, 0x20, 0xa0, 0x34, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00
10799 __u8 data_17[] = {
10800 0x08, 0x22, 0x44, 0x63, 0x7d, 0x92, 0xa3, 0xaf, 0xbc, 0xc4, 0xcd, 0xd5, 0xdc, 0xe1, 0xe8, 0xef,
10801 0xf7
10804 __u8 data_21[] = {
10805 0x15, 0x00, 0x2b, 0x00, 0x08, 0x00, 0xeb, 0x0f, 0xd7, 0x0f, 0x43, 0x00, 0x3d, 0x00, 0xca, 0x0f,
10806 0xf7, 0x0f, 0x0c, 0x00, 0x00
10809 __u8 qtable_1[] = {
10810 0x06, 0x04, 0x04, 0x06, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0x06, 0x08, 0x0a, 0x10,
10811 0x0a, 0x0a, 0x08, 0x08, 0x0a, 0x13, 0x0e, 0x0e, 0x0c, 0x10, 0x17, 0x13, 0x17, 0x17, 0x15, 0x13,
10812 0x15, 0x15, 0x19, 0x1b, 0x23, 0x1f, 0x19, 0x1b, 0x21, 0x1b, 0x15, 0x15, 0x1f, 0x2b, 0x1f, 0x21,
10813 0x25, 0x27, 0x29, 0x29, 0x29, 0x17, 0x1d, 0x2d, 0x2f, 0x2b, 0x27, 0x2f, 0x23, 0x27, 0x29, 0x27
10817 __u8 qtable_2[] = {
10818 0x06, 0x08, 0x08, 0x0a, 0x08, 0x0a, 0x12, 0x0a, 0x0a, 0x12, 0x27, 0x19, 0x15, 0x19, 0x27, 0x27,
10819 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
10820 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
10821 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
10824 __u8 om6802_sensor[][8] = {
10825 {0xa0, dev->sensor_slave_address, 0xd6, 0x02, 0x00, 0x00, 0x00, 0x10},
10826 {0xa0, dev->sensor_slave_address, 0xae, 0xe2, 0x00, 0x00, 0x00, 0x10},
10827 {0xa0, dev->sensor_slave_address, 0xdf, 0x6d, 0x00, 0x00, 0x00, 0x10}, // Enter factory mode
10828 {0xa0, dev->sensor_slave_address, 0xdd, 0x18, 0x00, 0x00, 0x00, 0x10}, // RGB, uyvy1,Raw RGB, n/1/2, n/clp
10829 {0xa0, dev->sensor_slave_address, 0x5a, 0xc0, 0x00, 0x00, 0x00, 0x10},
10830 {0xa0, dev->sensor_slave_address, 0xfb, 0x11, 0x00, 0x00, 0x00, 0x10},
10831 {0xa0, dev->sensor_slave_address, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x10},
10832 {0xa0, dev->sensor_slave_address, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x10},
10833 {0xa0, dev->sensor_slave_address, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x10},
10834 {0xa0, dev->sensor_slave_address, 0xfb, 0xee, 0x00, 0x00, 0x00, 0x10},
10835 {0xa0, dev->sensor_slave_address, 0x5d, 0x80, 0x00, 0x00, 0x00, 0x10},
10836 {0xa0, dev->sensor_slave_address, 0x71, 0x84, 0x00, 0x00, 0x00, 0x10},
10837 {0xa0, dev->sensor_slave_address, 0x72, 0x00, 0x00, 0x00, 0x00, 0x10},
10838 {0xa0, dev->sensor_slave_address, 0x68, 0x80, 0x00, 0x00, 0x00, 0x10},
10839 {0xa0, dev->sensor_slave_address, 0x69, 0x00, 0x00, 0x00, 0x00, 0x10},
10840 {0xa0, dev->sensor_slave_address, 0x71, 0x18, 0x00, 0x00, 0x00, 0x10},
10841 {0xa0, dev->sensor_slave_address, 0x72, 0x04, 0x00, 0x00, 0x00, 0x10},
10842 {0xa0, dev->sensor_slave_address, 0x68, 0xde, 0x00, 0x00, 0x00, 0x10},
10843 {0xa0, dev->sensor_slave_address, 0x69, 0x00, 0x00, 0x00, 0x00, 0x10}, // 18
10844 {0xa0, dev->sensor_slave_address, 0x68, 0x80, 0x00, 0x00, 0x00, 0x10},
10845 {0xa0, dev->sensor_slave_address, 0x69, 0x00, 0x00, 0x00, 0x00, 0x10},
10846 {0, 0, 0, 0, 0, 0, 0, 0} // Terminating string
10849 buf[0] = 0x00;
10850 ret += usb_microdia_control_write(dev, 0xf1, buf, 1); // Reset cam
10852 buf[0] = 0x23;
10853 ret += usb_microdia_control_write(dev, 0x01, buf, 1); // Sensor off, video off, clk 12MHz
10855 ret += usb_microdia_control_read(dev, 0x00, buf, 1); // Check if cam is working, must write 0x12 in buf[0]
10857 if(buf[0] != 0x12){
10858 UDIA_ERROR("Microdia 6128 webcam not connected or working !!!\n");
10859 return -ENODEV;
10862 ret += usb_microdia_control_read(dev, 0x01, buf, 1); // Must read 23
10864 if(buf[0] != 0x23){
10865 UDIA_ERROR("Microdia 6128 webcam is not initialized !!!\n");
10866 return -ENODEV;
10869 buf[0] = 0x23; buf[1] = 0x72;
10870 ret += usb_microdia_control_write(dev, 0x01, buf, 2); // Configure GPIO
10872 buf[0] = 0x34; buf[1] = 0x27; buf[2] = 0x20; buf[3] = 0xa0; buf[4] = 0x34;
10873 ret += usb_microdia_control_write(dev, 0x05, buf, 5);
10875 buf[0] = 0x44; buf[1] = 0x45; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00;
10876 ret += usb_microdia_control_write(dev, 0x17, buf, 5);
10878 buf[0] = 0x08; buf[1] = 0x40; buf[2] = 0x20; buf[3] = 0x00; buf[4] = 0x00;
10879 ret += usb_microdia_control_write(dev, 0x9a, buf, 5);
10881 buf[0] = 0x60; buf[1] = 0x00; buf[2] = 0x00;
10882 ret += usb_microdia_control_write(dev, 0xd4, buf, 3);
10883 ret += usb_microdia_control_write(dev, 0x03, data_15, 15);
10885 buf[0] = 0x73;
10886 ret += usb_microdia_control_write(dev, 0x02, buf, 1);
10888 buf[0] = 0x64;
10889 ret += usb_microdia_control_write(dev, 0x17, buf, 1);
10891 buf[0] = 0x22; buf[1] = 0x62;
10892 ret += usb_microdia_control_write(dev, 0x01, &buf[0], 1);
10893 ret += usb_microdia_control_write(dev, 0x01, &buf[1], 1);
10895 buf[0] = 0x64;
10896 ret += usb_microdia_control_write(dev, 0x17, buf, 1);
10897 ret += usb_microdia_control_write(dev, 0x17, buf, 1);
10899 buf[0] = 0x42; // Sensor on, clk 24MHz, video off
10900 ret += usb_microdia_control_write(dev, 0x01, buf, 1);
10901 ret += usb_microdia_control_write(dev, 0x01, buf, 1);
10903 // Sensor stuff
10904 for (i = 0; i < 2; i++){
10905 ret += usb_microdia_control_write(dev, 0x08, om6802_sensor[i], 8);
10906 msleep(1);
10909 buf[0] = 0x71;
10910 ret += usb_microdia_control_write(dev, 0x02, buf, 1);
10912 // Sensor stuff
10913 for (i = 2; i < 11; i++){
10914 ret += usb_microdia_control_write(dev, 0x08, om6802_sensor[i], 8);
10915 msleep(1);
10918 buf[0] = 0x71;
10919 ret += usb_microdia_control_write(dev, 0x02, buf, 1);
10920 ret += usb_microdia_control_write(dev, 0x02, buf, 1); // URB 1780
10922 buf[0] = 0x28;
10923 ret += usb_microdia_control_write(dev, 0x15, buf, 1);
10925 buf[0] = 0x1e;
10926 ret += usb_microdia_control_write(dev, 0x16, buf, 1);
10928 buf[0] = 0x51;
10929 ret += usb_microdia_control_write(dev, 0x12, buf, 1);
10931 buf[0] = 0x01;
10932 ret += usb_microdia_control_write(dev, 0x13, buf, 1);
10934 buf[0] = 0x45;
10935 ret += usb_microdia_control_write(dev, 0x18, buf, 1);
10937 buf[0] = 0x6a;
10938 ret += usb_microdia_control_write(dev, 0xd2, buf, 1);
10940 buf[0] = 0x50;
10941 ret += usb_microdia_control_write(dev, 0xd3, buf, 1);
10943 buf[0] = 0x00;
10944 ret += usb_microdia_control_write(dev, 0xc6, buf, 1);
10945 ret += usb_microdia_control_write(dev, 0xc7, buf, 1);
10947 buf[0] = 0x50;
10948 ret += usb_microdia_control_write(dev, 0xc8, buf, 1);
10950 buf[0] = 0x3c;
10951 ret += usb_microdia_control_write(dev, 0xc9, buf, 1);
10953 buf[0] = 0x45;
10954 ret += usb_microdia_control_write(dev, 0x18, buf, 1);
10956 buf[0] = 0x64;
10957 ret += usb_microdia_control_write(dev, 0x17, buf, 1);
10959 buf[0] = 0x20;
10960 ret += usb_microdia_control_write(dev, 0x05, buf, 1);
10961 ret += usb_microdia_control_write(dev, 0x07, buf, 1);
10962 ret += usb_microdia_control_write(dev, 0x06, buf, 1);
10964 buf[0] = 0x00;
10965 ret += usb_microdia_control_write(dev, 0x14, buf, 1);
10967 ret += usb_microdia_control_write(dev, 0x20, data_17, 17);
10968 ret += usb_microdia_control_write(dev, 0x20, data_17, 17);
10970 for (i = 0; i < 8; ++i) // writing the same buffer 8 times, why ??
10971 ret += usb_microdia_control_write(dev, 0x84, data_21, 21);
10973 data_21[0] = 0x16; data_21[10] = 40; data_21[12] = 0x3f;
10974 ret += usb_microdia_control_write(dev, 0x84, data_21, 21);
10976 buf[0] = 0x08;
10977 ret += usb_microdia_control_write(dev, 0x9a, buf, 1);
10979 buf[0] = 0x10;
10980 ret += usb_microdia_control_write(dev, 0x99, buf, 1);
10982 ret += usb_microdia_control_write(dev, 0x84, data_21, 21); // URB 1811
10984 buf[0] = 0x20;
10985 ret += usb_microdia_control_write(dev, 0x05, buf, 1);
10986 ret += usb_microdia_control_write(dev, 0x07, buf, 1);
10987 ret += usb_microdia_control_write(dev, 0x06, buf, 1);
10989 // Sensor Stuff
10990 for (i = 11; i < 15; i++){
10991 ret += usb_microdia_control_write(dev, 0x08, om6802_sensor[i], 8);
10992 msleep(1);
10995 buf[0] = 0x34;
10996 ret += usb_microdia_control_write(dev, 0x05, buf, 1);
10997 buf[0] = 0x27;
10998 ret += usb_microdia_control_write(dev, 0x06, buf, 1);
11000 buf[0] = buf[1] = 0x2d; buf[2] = 0x3a; buf[3] = 0x05; buf[4] = 0x04; buf[5] = 0x3f;
11001 ret += usb_microdia_control_write(dev, 0xc0, buf, 6);
11003 buf[0] = 0x28; buf[1] = 0xd8; buf[2] = 0x14; buf[3] = 0xec;
11004 ret += usb_microdia_control_write(dev, 0xca, buf, 4);
11006 buf[0] = 0x1e; buf[1] = 0xdd; buf[2] = 0x2d; buf[3] = 0xe7;
11007 ret += usb_microdia_control_write(dev, 0xce, buf, 4);
11009 buf[0] = 0x42;
11010 ret += usb_microdia_control_write(dev, 0x01, buf, 1);
11012 buf[0] = 0x64;
11013 ret += usb_microdia_control_write(dev, 0x17, buf, 1);
11015 // Sensor Stuff
11016 for (i = 15; i < 19; i++){
11017 ret += usb_microdia_control_write(dev, 0x08, om6802_sensor[i], 8);
11018 msleep(1);
11021 buf[0] = 0x28;
11022 ret += usb_microdia_control_write(dev, 0x05, buf, 1);
11024 buf[0] = 0x54;
11025 ret += usb_microdia_control_write(dev, 0x06, buf, 1);
11027 // This changes the mode (VGA = 0 , CIF = 1)
11028 // buf = 0x40 | 0x05 | (mode << 4) 45 or 55
11029 buf[0] = 0x45;
11030 ret += usb_microdia_control_write(dev, 0x18, buf, 1);
11032 // This is the Q table
11033 ret += usb_microdia_control_write(dev, 0x0100, qtable_1, 64); // first time
11034 ret += usb_microdia_control_write(dev, 0x0140, qtable_2, 64); // second time
11036 // mode: VGA = 0, CIF = 1
11037 // buf = 0x05 | (mode << 4) 05 or 15
11038 buf[0] = 0x05;
11039 ret += usb_microdia_control_write(dev, 0x18, buf, 1);
11041 buf[0] = 0x71;
11042 ret += usb_microdia_control_write(dev, 0x02, buf, 1);
11043 ret += usb_microdia_control_write(dev, 0x02, buf, 1);
11045 buf[0] = 0x42; // Sensor on, Video disabled, clk 24MHz
11046 ret += usb_microdia_control_write(dev, 0x01, buf, 1);
11048 buf[0] = 0x64;
11049 ret += usb_microdia_control_write(dev, 0x17, buf, 1);
11051 // Command to start streaming
11052 // Sensor on, clk 24MHz, video enabled
11053 buf[0] = 0x46;
11054 ret += usb_microdia_control_write(dev, 0x01, buf, 1);
11056 // When the device reads 46 from reg 0x01 it means that
11057 // camera is streaming
11058 ret += usb_microdia_control_read(dev, 0x01, buf, 1); // Must read 0x46
11060 if (ret != 624)
11061 UDIA_DEBUG("Some read or write were not successful in Start Stream\n");
11063 return 0;
11067 int dev_microdia_stop_stream(struct usb_microdia *dev)
11069 int ret = -ENODEV;
11070 if(dev && dev->stop_stream)
11071 ret = dev->stop_stream(dev);
11073 return ret;
11077 * @brief From stop.htm
11079 * @param dev
11081 * @returns 0
11083 * @author GWater
11085 * For SN9C201 with MI1310.
11086 * This function has not been tested yet.
11088 int microdia_6242_stop_stream(struct usb_microdia *dev)
11090 __u8 buf[3];
11092 __u8 only10c0[3] = {0x0d, 0x00, 0x00};
11094 buf[0] = 0x01;
11095 usb_microdia_control_write(dev, 0x1061, buf, 1);
11097 buf[0] = 0x60;
11098 usb_microdia_control_write(dev, 0x1007, buf, 1);
11100 buf[0] = 0x00;
11101 usb_microdia_control_write(dev, 0x1006, buf, 1);
11103 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
11104 only10c0[0], dev->sensor_flags, &only10c0[1]);
11106 buf[0] = 0x38;
11107 usb_microdia_control_write(dev, 0x1000, buf, 1);
11109 buf[0] = 0x6b;
11110 usb_microdia_control_write(dev, 0x11b8, buf, 1);
11112 buf[0] = 0x60;
11113 usb_microdia_control_write(dev, 0x1007, buf, 1);
11115 buf[0] = 0x20;
11116 usb_microdia_control_write(dev, 0x1006, buf, 1);
11119 buf[0] = 0x98; buf[1] = 0xe7; buf[2] = 0x11;
11120 usb_microdia_control_write(dev, 0x1000, buf, 3);
11123 * After the select alternate setting 0 is actually another transfer:
11124 * buf[0] = 0x00;
11125 * usb_microdia_control_write(dev, 0x1066, buf, 1);
11128 return 0;
11131 /**
11132 * @brief From stopstream.log
11134 * @param dev
11136 * @returns 0
11138 * @author GWater
11140 * For SN9C201 with SOI968.
11141 * I don't whether the function really stops the stream.
11142 * Nevertheless the LED on the webcam now stops glowing.
11143 * The function is very similar to "microdia_624f_stop_stream".
11145 int microdia_624e_stop_stream(struct usb_microdia *dev)
11147 __u8 buf[3];
11149 buf[0] = 0x01;
11150 usb_microdia_control_write(dev, 0x1061, buf, 1);
11152 /* Next two writes added because it works better.
11153 * The LED stops glowing and I think the stream does too.
11154 * 0x20 = 0b00100000 which is the minimal of what the other stopstreams have in common.
11156 buf[0] = 0x20;
11157 usb_microdia_control_write(dev, 0x1007, buf, 1);
11159 buf[0] = 0x20;
11160 usb_microdia_control_write(dev, 0x1006, buf, 1);
11162 buf[0] = 0x3c;
11163 usb_microdia_control_write(dev, 0x1000, buf, 1);
11165 buf[0] = 0x6a;
11166 usb_microdia_control_write(dev, 0x11b8, buf, 1);
11168 buf[0] = 0x38; buf[1] = 0xe7; buf[2] = 0x11;
11169 usb_microdia_control_write(dev, 0x1000, buf, 3);
11171 usb_microdia_control_read(dev, 0x1066, buf, 1);
11173 return 0;
11176 int microdia_624f_stop_stream(struct usb_microdia *dev)
11178 int ret;
11179 __u16 command;
11180 __u8 buf[3];
11182 buf[0] = 0x02;
11183 command = 0x1066;
11184 ret = usb_microdia_control_write(dev, command, buf, 1);
11185 if(ret < 0) goto err;
11187 buf[0] = 0x01;
11188 command = 0x1061;
11189 ret = usb_microdia_control_write(dev, command, buf, 1);
11190 if(ret < 0) goto err;
11192 buf[0] = 0x38;
11193 command = 0x1000;
11194 ret = usb_microdia_control_write(dev, command, buf, 1);
11195 if(ret < 0) goto err;
11197 buf[0] = 0x6a;
11198 command = 0x11b8;
11199 ret = usb_microdia_control_write(dev, command, buf, 1);
11200 if(ret < 0) goto err;
11202 buf[0] = 0x20;
11203 command = 0x1007;
11204 ret = usb_microdia_control_write(dev, command, buf, 1);
11205 if(ret < 0) goto err;
11207 buf[0] = 0x20;
11208 command = 0x1006;
11209 ret = usb_microdia_control_write(dev, command, buf, 1);
11210 if(ret < 0) goto err;
11212 buf[0] = 0x98;
11213 buf[1] = 0xe7;
11214 buf[2] = 0x11;
11215 command = 0x1000;
11216 ret = usb_microdia_control_write(dev, command, buf, 3);
11217 if(ret < 0) goto err;
11219 command = 0x1045;
11220 ret = usb_microdia_control_read(dev, command, buf, 1);
11221 if(ret < 0) goto err;
11223 buf[0] = 0x0f;
11224 ret = usb_microdia_control_write(dev, command, buf, 1);
11225 if(ret < 0) goto err;
11227 return ret;
11229 err:
11230 UDIA_ERROR("command %x failed (%d)!\n", command, ret);
11231 return ret;
11234 int microdia_6260_stop_stream(struct usb_microdia *dev)
11236 int ret;
11237 __u8 buf[32];
11239 buf[0] = 0x01;
11240 ret = usb_microdia_control_write(dev, 0x1061, buf, 1);
11241 buf[0] = 0x38;
11242 ret = usb_microdia_control_write(dev, 0x1000, buf, 1);
11243 buf[0] = 0x6b;
11244 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
11245 buf[0] = 0x20;
11246 ret = usb_microdia_control_write(dev, 0x1007, buf, 1);
11247 buf[0] = 0x20;
11248 ret = usb_microdia_control_write(dev, 0x1006, buf, 1);
11249 buf[0] = 0x98;
11250 buf[1] = 0xe7;
11251 buf[2] = 0x11;
11252 ret = usb_microdia_control_write(dev, 0x1000, buf, 3);
11253 buf[0] = 0x00;
11254 ret = usb_microdia_control_write(dev, 0x1066, buf, 1);
11255 ret = usb_microdia_control_read(dev, 0x1045, buf, 1);
11256 buf[0] = 0x0f;
11257 ret = usb_microdia_control_write(dev, 0x1045, buf, 1);
11258 buf[0] = 0x00;
11259 ret = usb_microdia_control_write(dev, 0x10c8, buf, 1);
11260 buf[0] = 0x80;
11261 ret = usb_microdia_control_write(dev, 0x1020, buf, 1);
11263 return ret;
11267 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
11269 * @param dev
11271 * @returns 0 (ok) or -1 (error)
11273 * @author Comer352l
11275 * Windows driver version: 5.7.23.000
11276 * Windows versions: 2000 and XP
11277 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
11278 * All logs were made using AMCAP with 640x480, RGB24
11280 int microdia_6270_stop_stream(struct usb_microdia *dev)
11282 int ret = 0;
11283 int retI2C = 0;
11284 __u8 buf[3];
11286 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
11288 buf[0] = 0x20;
11289 ret += usb_microdia_control_write(dev, 0x1007, buf, 1); // URB 3541
11290 buf[0] = 0x20;
11291 ret += usb_microdia_control_write(dev, 0x1006, buf, 1); // URB 3542
11292 // => These two writes seem to cause the cam to stop sending isochronus USB messages
11294 buf[0] = 0x01;
11295 ret += usb_microdia_control_write(dev, 0x1061, buf, 1); // URB 3544
11296 if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
11298 buf[0] = 0x60;
11299 ret += usb_microdia_control_write(dev, 0x1007, buf, 1); // URB 3541
11300 buf[0] = 0x60;
11301 ret += usb_microdia_control_write(dev, 0x1006, buf, 1); // URB 3542
11303 if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
11305 // Write to sensor register 0x07: Output Control
11306 buf[0] = 0x00; buf[1] = 0x00; // stop sensor readout, normal operation
11307 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x07, dev->sensor_flags, buf);
11309 buf[0] = 0x38; // ALEX: 0x3c
11310 ret += usb_microdia_control_write(dev, 0x1000, buf, 1); // URB 3545
11311 buf[0] = 0x6d; // ALEX: 0xec; FRANK: also 0x6c
11312 ret += usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 3546
11313 buf[0] = 0x38; buf[1] = 0xe7; buf[2] = 0x11;
11314 ret += usb_microdia_control_write(dev, 0x1000, buf, 3); // URB 3547
11316 // INTERRUPT COMMING BACK (URB 2227)
11317 // SELECT ALTERNATE SETTINGS (URB 3548)
11318 // INTERRUPT GOING DOWN (URB 3549)
11320 buf[0] = 0x00;
11321 ret += usb_microdia_control_write(dev, 0x1066, buf, 1); // URB 3550
11323 if (ret < 9)
11325 UDIA_INFO("One ore more errors occured while stopping stream !\n");
11326 return -1;
11328 else
11329 return 0;
11332 int microdia_627b_stop_stream(struct usb_microdia *dev)
11334 int ret = 0;
11335 __u16 reg;
11336 __u8 buf[3];
11338 reg = 0x1007;
11339 buf[0] = 0x60;
11340 ret = usb_microdia_control_write(dev, reg, buf, 1);
11341 if (ret < 0)
11342 goto err;
11344 reg = 0x1006;
11345 buf[0] = 0x20;
11346 ret = usb_microdia_control_write(dev, reg, buf, 1);
11347 if (ret < 0)
11348 goto err;
11351 //reg = 0x1007;
11352 //buf[0] = 0x60;
11353 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11354 //if(ret < 0) goto err;
11356 //reg = 0x1006;
11357 //buf[0] = 0x20;
11358 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11359 //if(ret < 0) goto err;
11362 reg = 0x1061;
11363 buf[0] = 0x01;
11364 ret = usb_microdia_control_write(dev, reg, buf, 1);
11365 if (ret < 0)
11366 goto err;
11369 //reg = 0x1007;
11370 //buf[0] = 0x60;
11371 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11372 //if(ret < 0) goto err;
11374 //reg = 0x1006;
11375 //buf[0] = 0x20;
11376 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11377 //if(ret < 0) goto err;
11380 reg = 0x1000;
11381 buf[0] = 0x38;
11382 ret = usb_microdia_control_write(dev, reg, buf, 1);
11383 if (ret < 0)
11384 goto err;
11386 reg = 0x11b8;
11387 buf[0] = 0x6b;
11388 ret = usb_microdia_control_write(dev, reg, buf, 1);
11389 if (ret < 0)
11390 goto err;
11392 reg = 0x1000;
11393 buf[0] = 0x38; buf[1] = 0xe7; buf[2] = 0x11;
11394 ret = usb_microdia_control_write(dev, reg, buf, 3);
11395 if (ret < 0)
11396 goto err;
11398 reg = 0x1066;
11399 buf[0] = 0x00;
11400 ret = usb_microdia_control_write(dev, reg, buf, 1);
11401 if (ret < 0)
11402 goto err;
11404 return ret;
11405 err:
11406 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg, ret);
11407 return ret;
11410 /**
11411 * @brief From UsbSnoop-plugin-parsed.log
11413 * @param dev
11415 * @returns 0 (OK) or <0 (Error)
11417 * @author Vincent, Kuzja
11419 int microdia_6288_stop_stream(struct usb_microdia *dev)
11421 int ret = 0;
11422 __u16 reg;
11423 __u8 buf[8];
11425 reg = 0x1061 ;
11426 buf[0] = 0x01;
11427 ret = usb_microdia_control_write(dev, reg, buf, 1);
11428 if(ret < 0) goto err;
11430 reg = 0x1000 ;
11431 buf[0] = 0x38;
11432 ret = usb_microdia_control_write(dev, reg, buf, 1);
11433 if(ret < 0) goto err;
11435 reg = 0x11b8 ;
11436 buf[0] = 0xe9;
11437 ret = usb_microdia_control_write(dev, reg, buf, 1);
11438 if(ret < 0) goto err;
11440 reg = 0x1007 ;
11441 buf[0] = 0x20;
11442 ret = usb_microdia_control_write(dev, reg, buf, 1);
11443 if(ret < 0) goto err;
11445 reg = 0x1006 ;
11446 buf[0] = 0x20;
11447 ret = usb_microdia_control_write(dev, reg, buf, 1);
11448 if(ret < 0) goto err;
11450 reg = 0x1000 ;
11451 buf[0] = 0x98; buf[1] = 0xe7; buf[2] = 0x11;
11452 ret = usb_microdia_control_write(dev, reg, buf, 3);
11453 if(ret < 0) goto err;
11455 reg = 0x1066 ;
11456 buf[0] = 0x00;
11457 ret = usb_microdia_control_write(dev, reg, buf, 1);
11458 if(ret < 0) goto err;
11460 return 0;
11461 err:
11462 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg, ret);
11463 return ret;
11466 /**
11467 * @brief From UsbSnoop-plugin-parsed.log
11469 * @param dev
11471 * @returns 0 if all OK
11473 * This function stops the video stream for microdia 6128
11474 * Bridge SN9C325 + OM6802 CMOS sensor
11475 * note: comments are my observations so they could be wrong
11477 int microdia_6128_stop_stream(struct usb_microdia *dev)
11479 int ret = 0;
11480 __u8 data;
11482 ret += usb_microdia_control_read(dev, 0x00, &data, 1);
11484 // Stop stream command
11485 data = 0x00;
11486 ret += usb_microdia_control_write(dev, 0x01, &data, 1);
11488 data = 0x00;
11489 ret += usb_microdia_control_write(dev, 0xf1, &data, 1);
11491 data = 0x01;
11492 ret += usb_microdia_control_write(dev, 0xf1, &data, 1);
11494 if(ret != 4)
11495 UDIA_DEBUG("Some read or write were not successful in Stop Stream\n");
11497 return 0;
11502 int microdia_624f_set_exposure(struct usb_microdia *dev)
11504 int ret = 0;
11505 __u8 v1 = (dev->vsettings.exposure >> 4) & 0xff;
11506 __u8 v2 = dev->vsettings.exposure >> 12;
11508 ret |= sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, 0x2d,
11509 dev->sensor_flags, &v1);
11511 ret |= sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, 0x2e,
11512 dev->sensor_flags, &v2);
11514 return ret;
11517 int microdia_624f_flip_detect(struct usb_microdia *dev)
11519 int ret = 0;
11520 __u8 val;
11522 ret = usb_microdia_control_read(dev, 0x1009, &val, 1);
11523 if (ret < 0) return -EAGAIN;
11524 if (val & 0x01) {
11525 dev->vsettings.vflip = 1;
11527 else {
11528 dev->vsettings.vflip = 0;
11531 return ret;
11534 int microdia_6260_flip_detect(struct usb_microdia *dev)
11536 const __u8 flip_bit = 0x01;
11537 int ret = 0;
11538 __u8 val;
11539 static __u8 flip_reg = flip_bit;
11540 __u8 vflip;
11542 ret = usb_microdia_control_read(dev, 0x1009, &val, 1);
11543 if (ret < 0)
11544 return -EAGAIN;
11545 if (flip_reg != (val & flip_bit)) {
11546 if (val & flip_bit)
11547 vflip = 0;
11548 else
11549 vflip = 1;
11550 ret = ov7670_auto_flip(dev, vflip);
11551 flip_reg = (val & flip_bit);
11554 return ret;