3 * @author Nicolas VIVIEN
7 * @brief Driver for Microdia USB video camera
9 * @note Copyright (C) Nicolas VIVIEN
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
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>
39 int dev_microdia_init_camera(struct usb_microdia
*dev
)
44 int dev_microdia_camera_on(struct usb_microdia
*dev
)
47 struct usb_device
*udev
= dev
->udev
;
49 ret
= usb_set_interface(udev
, 0, 8);
52 UDIA_ERROR("usb_set_interface failed !\n");
57 int dev_microdia_camera_off(struct usb_microdia
*dev
)
60 struct usb_device
*udev
= dev
->udev
;
62 ret
= usb_set_interface(udev
, 0, 0);
65 UDIA_ERROR("usb_set_interface failed !\n");
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
);
84 int dev_microdia_camera_set_contrast(struct usb_microdia
*dev
)
87 if(dev
&& dev
->set_contrast
)
88 ret
= dev
->set_contrast(dev
);
92 int dev_microdia_camera_set_brightness(struct usb_microdia
*dev
)
95 if(dev
&& dev
->set_brightness
)
96 ret
= dev
->set_brightness(dev
);
100 int dev_microdia_camera_set_gamma(struct usb_microdia
*dev
)
103 if(dev
&& dev
->set_gamma
)
104 ret
= dev
->set_gamma(dev
);
108 int dev_microdia_camera_set_exposure(struct usb_microdia
*dev
)
110 if (dev
->set_exposure
!= NULL
) {
111 return dev
->set_exposure(dev
);
116 int dev_microdia_camera_set_hvflip(struct usb_microdia
*dev
)
119 if(dev
&& dev
->set_hvflip
)
120 ret
= dev
->set_hvflip(dev
);
125 int dev_microdia_camera_set_sharpness(struct usb_microdia
*dev
)
128 if(dev
&& dev
->set_sharpness
)
129 ret
= dev
->set_sharpness(dev
);
134 int dev_microdia_camera_set_rgb_gain(struct usb_microdia
*dev
)
137 if (dev
&& dev
->set_rgb_gain
)
138 ret
= dev
->set_rgb_gain(dev
);
143 int dev_microdia_camera_set_auto_exposure(struct usb_microdia
*dev
)
146 if(dev
&& dev
->set_auto_exposure
)
147 ret
= dev
->set_auto_exposure(dev
);
152 int dev_microdia_camera_set_auto_whitebalance(struct usb_microdia
*dev
)
155 if(dev
&& dev
->set_auto_whitebalance
)
156 ret
= dev
->set_auto_whitebalance(dev
);
163 * @brief From UsbSnoop-plugin-parsed.log
169 int dev_microdia_initialize_device(struct usb_microdia
*dev
)
173 if(dev
&& dev
->initialize
)
174 ret
= dev
->initialize(dev
);
180 * @brief From init-physical-replug.log
188 * For SN9C201 with MI1300.
191 int microdia_6240_initialize(struct usb_microdia
*dev
)
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
);
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)
211 ret
+= usb_microdia_control_write(dev
, 0x1020, &buf
, 1); // URB 9
212 UDIA_INFO("...init: write %x, ret = %d\n",buf
,ret
);
215 UDIA_ERROR("One ore more errors occured during initialization !\n");
223 * @brief From start.log (14 jun 2008)
231 * For SN9C201 with MI1300.
234 int microdia_6240_start_stream(struct usb_microdia
*dev
)
243 0x16, 0x00, 0x2d, 0x00, 0x08, 0x00, 0xf1, 0x0f, 0xd3, 0x0f, 0x3c, 0x00, 0x36, 0x00, 0xce, 0x0f,
244 0xfc, 0x0f, 0x00, 0x00, 0x00};
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:
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:
266 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);// URB 14
267 if(ret
< 0) goto err
;
270 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
271 if(ret
< 0) goto err
;
274 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
275 if(ret
< 0) goto err
;
278 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // cf
279 if(ret
< 0) goto err
;
283 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
284 if(ret
< 0) goto err
;
287 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
288 if(ret
< 0) goto err
;
292 ret
= usb_microdia_control_read(dev
, reg
, buf24
, 7); // << 20 00 ff 81 00 00 00
293 if(ret
< 0) goto err
;
296 buf24
[0] = 0x80; buf24
[1] = 0xa0;
297 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 2);
298 if(ret
< 0) goto err
;
301 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
302 if(ret
< 0) goto err
;
305 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
306 if(ret
< 0) goto err
;
308 buf24
[0] = 0x40; buf24
[1] = 0x30; buf24
[2] = 0x20; buf24
[3] = 0x10;
310 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
311 if(ret
< 0) goto err
;
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;
316 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 9);
317 if(ret
< 0) goto err
;
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
;
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
;
332 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
334 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
335 if(ret
< 0) goto err
;
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
;
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
;
354 buf24
[0] = 0x00; buf24
[1] = 0x00;
355 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 2);
356 if(ret
< 0) goto err
;
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;
362 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 9);
363 if(ret
< 0) goto err
;
367 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
368 if(ret
< 0) goto err
;
372 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
373 if(ret
< 0) goto err
;
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
;
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
;
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
;
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
;
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
;
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
;
576 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 5d
577 if(ret
< 0) goto err
;
579 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
580 if(ret
< 0) goto err
;
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
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
;
605 ret
= usb_microdia_control_read(dev
, reg
, buf24
, 5); // << ff ff ff ff ff
606 if(ret
< 0) goto err
;
610 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
611 if(ret
< 0) goto err
;
615 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
616 if(ret
< 0) goto err
;
618 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
619 if(ret
< 0) goto err
;
623 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
624 if(ret
< 0) goto err
;
626 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
627 if(ret
< 0) goto err
;
629 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
630 if(ret
< 0) goto err
;
634 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
635 if(ret
< 0) goto err
;
640 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
641 if(ret
< 0) goto err
;
643 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
644 if(ret
< 0) goto err
;
646 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
647 if(ret
< 0) goto err
;
649 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
650 if(ret
< 0) goto err
;
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
;
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
;
674 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
676 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
677 if(ret
< 0) goto err
;
681 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
682 if(ret
< 0) goto err
;
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
;
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
;
696 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
697 if(ret
< 0) goto err
;
701 for(i
=148; i
<=149; i
++){
702 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
703 if(ret
< 0) goto err
;
709 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
710 if(ret
< 0) goto err
;
714 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
715 if(ret
< 0) goto err
;
719 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
720 if(ret
< 0) goto err
;
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
;
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
;
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
;
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
;
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
;
751 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
752 if(ret
< 0) goto err
;
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
;
784 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
785 if(ret
< 0) goto err
;
789 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
790 if(ret
< 0) goto err
;
792 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
793 if(ret
< 0) goto err
;
795 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
796 if(ret
< 0) goto err
;
798 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
799 if(ret
< 0) goto err
;
803 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
804 if(ret
< 0) goto err
;
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;
814 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 17);
815 if(ret
< 0) goto err
;
820 for(i
=0; i
<21; i
++) // zeroes
822 for(i
=177; i
<=184; i
++){
823 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 21);
824 if(ret
< 0) goto err
;
827 ret
= usb_microdia_control_write(dev
, reg
, buf10e1
, 21);
828 if(ret
< 0) goto err
;
833 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
834 if(ret
< 0) goto err
;
837 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
838 if(ret
< 0) goto err
;
842 ret
= usb_microdia_control_write(dev
, reg
, buf10e1
, 21);
843 if(ret
< 0) goto err
;
848 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
849 if(ret
< 0) goto err
;
852 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
853 if(ret
< 0) goto err
;
856 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
857 if(ret
< 0) goto err
;
859 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
860 if(ret
< 0) goto err
;
864 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
865 if(ret
< 0) goto err
;
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
;
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
;
883 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
884 if(ret
< 0) goto err
;
886 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
887 if(ret
< 0) goto err
;
889 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
890 if(ret
< 0) goto err
;
892 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
893 if(ret
< 0) goto err
;
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
;
911 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
912 if(ret
< 0) goto err
;
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
;
930 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
931 if(ret
< 0) goto err
;
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
;
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
;
999 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1000 if(ret
< 0) goto err
;
1002 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1003 if(ret
< 0) goto err
;
1005 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1006 if(ret
< 0) goto err
;
1008 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1009 if(ret
< 0) goto err
;
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
;
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
;
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
;
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
;
1070 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1071 if(ret
< 0) goto err
;
1074 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1075 if(ret
< 0) goto err
;
1078 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1079 if(ret
< 0) goto err
;
1082 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1083 if(ret
< 0) goto err
;
1087 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1088 if(ret
< 0) goto err
;
1090 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1091 if(ret
< 0) goto err
;
1094 // URB 249 (see also 509/510)
1096 ret
= usb_microdia_control_write(dev
, reg
, buf1100
, 64);
1097 if(ret
< 0) goto err
;
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
;
1114 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1115 if(ret
< 0) goto err
;
1117 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1118 if(ret
< 0) goto err
;
1122 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1123 if(ret
< 0) goto err
;
1129 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1130 if(ret
< 0) goto err
;
1132 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1133 if(ret
< 0) goto err
;
1135 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1136 if(ret
< 0) goto err
;
1138 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1139 if(ret
< 0) goto err
;
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
;
1149 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
1151 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
1152 if(ret
< 0) goto err
;
1156 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1157 if(ret
< 0) goto err
;
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
;
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
;
1170 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1171 if(ret
< 0) goto err
;
1174 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1175 if(ret
< 0) goto err
;
1178 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1179 if(ret
< 0) goto err
;
1182 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1183 if(ret
< 0) goto err
;
1186 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1187 if(ret
< 0) goto err
;
1190 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1191 if(ret
< 0) goto err
;
1194 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1195 if(ret
< 0) goto err
;
1197 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1198 if(ret
< 0) goto err
;
1201 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1202 if(ret
< 0) goto err
;
1205 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1206 if(ret
< 0) goto err
;
1209 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1210 if(ret
< 0) goto err
;
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
;
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
;
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
;
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
;
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
;
1241 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1242 if(ret
< 0) goto err
;
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
;
1292 ret
= usb_microdia_control_read(dev
, reg
, buf24
, 5); // << 00 00 00 84 31
1293 if(ret
< 0) goto err
;
1298 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1299 if(ret
< 0) goto err
;
1301 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1302 if(ret
< 0) goto err
;
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
;
1319 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1320 if(ret
< 0) goto err
;
1323 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1324 if(ret
< 0) goto err
;
1327 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1328 if(ret
< 0) goto err
;
1331 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1332 if(ret
< 0) goto err
;
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:
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:
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:
1362 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1363 if(ret
< 0) goto err
;
1366 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1367 if(ret
< 0) goto err
;
1370 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1371 if(ret
< 0) goto err
;
1373 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << ef
1374 if(ret
< 0) goto err
;
1376 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1377 if(ret
< 0) goto err
;
1380 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1381 if(ret
< 0) goto err
;
1385 ret
= usb_microdia_control_read(dev
, reg
, buf24
, 7); // << a0 00 ff 81 00 00 00
1386 if(ret
< 0) goto err
;
1388 buf24
[0] = 0x80; buf24
[1] = 0xa0;
1389 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 2);
1390 if(ret
< 0) goto err
;
1394 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1395 if(ret
< 0) goto err
;
1398 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1399 if(ret
< 0) goto err
;
1402 buf24
[0] = 0x40; buf24
[1] = 0x30; buf24
[2] = 0x20; buf24
[3] = 0x10;
1404 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
1405 if(ret
< 0) goto err
;
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;
1411 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 9);
1412 if(ret
< 0) goto err
;
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;
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
;
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
;
1433 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
1435 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
1436 if(ret
< 0) goto err
;
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
;
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;
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
;
1457 buf24
[0] = 0x00; buf24
[1] = 0x00;
1458 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 2);
1459 if(ret
< 0) goto err
;
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;
1465 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 9);
1466 if(ret
< 0) goto err
;
1470 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1471 if(ret
< 0) goto err
;
1474 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1475 if(ret
< 0) goto err
;
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
;
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
;
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
;
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
;
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
;
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
;
1679 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1680 if(ret
< 0) goto err
;
1682 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1683 if(ret
< 0) goto err
;
1687 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1688 if(ret
< 0) goto err
;
1690 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1691 if(ret
< 0) goto err
;
1693 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1694 if(ret
< 0) goto err
;
1698 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1699 if(ret
< 0) goto err
;
1705 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1706 if(ret
< 0) goto err
;
1708 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1709 if(ret
< 0) goto err
;
1711 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1712 if(ret
< 0) goto err
;
1714 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1715 if(ret
< 0) goto err
;
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
;
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
;
1737 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
1739 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
1740 if(ret
< 0) goto err
;
1745 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1746 if(ret
< 0) goto err
;
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
;
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
;
1759 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1760 if(ret
< 0) goto err
;
1764 for(i
=410; i
<=411; i
++){
1765 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1766 if(ret
< 0) goto err
;
1771 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1772 if(ret
< 0) goto err
;
1775 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1776 if(ret
< 0) goto err
;
1779 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1780 if(ret
< 0) goto err
;
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
;
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
;
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
;
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
;
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
;
1811 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1812 if(ret
< 0) goto err
;
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
;
1844 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1845 if(ret
< 0) goto err
;
1848 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1849 if(ret
< 0) goto err
;
1852 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1853 if(ret
< 0) goto err
;
1855 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1856 if(ret
< 0) goto err
;
1859 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1860 if(ret
< 0) goto err
;
1863 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1864 if(ret
< 0) goto err
;
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;
1874 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 17);
1875 if(ret
< 0) goto err
;
1880 for(i
=439; i
<=447; i
++){
1881 ret
= usb_microdia_control_write(dev
, reg
, buf10e1
, 21);
1882 if(ret
< 0) goto err
;
1888 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1889 if(ret
< 0) goto err
;
1892 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1893 if(ret
< 0) goto err
;
1898 ret
= usb_microdia_control_write(dev
, reg
, buf10e1
, 21);
1899 if(ret
< 0) goto err
;
1904 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1905 if(ret
< 0) goto err
;
1908 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1909 if(ret
< 0) goto err
;
1913 for(i
=453; i
<454; i
++){
1914 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1915 if(ret
< 0) goto err
;
1920 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1921 if(ret
< 0) goto err
;
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
;
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
;
1939 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1940 if(ret
< 0) goto err
;
1942 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1943 if(ret
< 0) goto err
;
1945 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1946 if(ret
< 0) goto err
;
1948 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1949 if(ret
< 0) goto err
;
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
;
1967 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1968 if(ret
< 0) goto err
;
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
;
1986 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1987 if(ret
< 0) goto err
;
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
;
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
;
2047 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2048 if(ret
< 0) goto err
;
2050 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2051 if(ret
< 0) goto err
;
2053 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2054 if(ret
< 0) goto err
;
2056 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2057 if(ret
< 0) goto err
;
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
;
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
;
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
;
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
;
2122 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2123 if(ret
< 0) goto err
;
2126 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2127 if(ret
< 0) goto err
;
2130 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2131 if(ret
< 0) goto err
;
2134 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2135 if(ret
< 0) goto err
;
2139 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2140 if(ret
< 0) goto err
;
2142 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2143 if(ret
< 0) goto err
;
2146 // URB 509 (see also 249/250)
2148 ret
= usb_microdia_control_write(dev
, reg
, buf1100
, 64);
2149 if(ret
< 0) goto err
;
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
;
2166 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2167 if(ret
< 0) goto err
;
2169 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2170 if(ret
< 0) goto err
;
2174 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2175 if(ret
< 0) goto err
;
2180 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2181 if(ret
< 0) goto err
;
2183 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2184 if(ret
< 0) goto err
;
2186 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2187 if(ret
< 0) goto err
;
2189 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2190 if(ret
< 0) goto err
;
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);
2199 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
2201 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
2206 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2207 if(ret
< 0) goto err
;
2210 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x6a; buf24
[3] = 0x50;
2211 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
2214 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x50; buf24
[3] = 0x3c;
2215 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
2219 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2220 if(ret
< 0) goto err
;
2223 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2224 if(ret
< 0) goto err
;
2227 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2228 if(ret
< 0) goto err
;
2231 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2232 if(ret
< 0) goto err
;
2235 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2236 if(ret
< 0) goto err
;
2239 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2240 if(ret
< 0) goto err
;
2245 for(i
=529; i
<=530; i
++){
2246 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2247 if(ret
< 0) goto err
;
2253 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2254 if(ret
< 0) goto err
;
2257 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2258 if(ret
< 0) goto err
;
2261 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2262 if(ret
< 0) goto err
;
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
;
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
;
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
;
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
;
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
;
2293 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2294 if(ret
< 0) goto err
;
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
;
2343 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x00; buf24
[3] = 0x84;
2345 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
2346 if(ret
< 0) goto err
;
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");
2364 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg
, ret
);
2369 * @brief From stop-close-amcap.log
2377 * For SN9C201 with MI1300. Comments from parser-usbsnoop(updated_13Mar2008).pl output
2380 int microdia_6240_stop_stream(struct usb_microdia
*dev
)
2385 UDIA_INFO("Stopping camera...\n");
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
);
2403 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 1); // URB 25323
2404 UDIA_INFO("...stop: write %x, ret = %d\n",buf
[0],ret
);
2407 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 25324
2408 UDIA_INFO("...stop: write %x, ret = %d\n",buf
[0],ret
);
2411 ret
+= usb_microdia_control_write(dev
, 0x1007, buf
, 1); // URB 25325
2412 UDIA_INFO("...stop: write %x, ret = %d\n",buf
[0],ret
);
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)
2427 ret
+= usb_microdia_control_write(dev
, 0x1066, buf
, 1); // URB 25330
2428 UDIA_INFO("...stop: write %x, ret = %d\n",buf
[0],ret
);
2431 UDIA_ERROR("One ore more errors occured during stop sequence !\n");
2439 * @brief From init.sequence.log
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
)
2455 usb_microdia_control_read(dev
, 0x130d, &buf
, 1);
2456 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
2462 * @brief From UsbSnoop-plugin-parsed.log
2468 int microdia_624f_initialize(struct usb_microdia
*dev
)
2470 /* Do nothing here */
2475 * @brief From UsbSnoop-plugin-parsed.log
2481 int microdia_6260_initialize(struct usb_microdia
*dev
)
2485 usb_microdia_control_read(dev
, 0x130d, &buf
, 1);
2486 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
2488 usb_microdia_control_write(dev
, 0x10c8, &buf
, 1);
2489 usb_microdia_control_read(dev
, 0x100a, &buf
, 1);
2491 usb_microdia_control_write(dev
, 0x100a, &buf
, 1);
2492 usb_microdia_control_read(dev
, 0x100b, &buf
, 1);
2494 usb_microdia_control_write(dev
, 0x100b, &buf
, 1);
2495 usb_microdia_control_read(dev
, 0x1001, &buf
, 1);
2497 usb_microdia_control_write(dev
, 0x1001, &buf
, 1);
2498 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
2500 usb_microdia_control_write(dev
, 0x1040, &buf
, 1);
2501 usb_microdia_control_read(dev
, 0x1045, &buf
, 1);
2503 usb_microdia_control_write(dev
, 0x1045, &buf
, 1);
2504 usb_microdia_control_read(dev
, 0x1046, &buf
, 1);
2506 usb_microdia_control_write(dev
, 0x1046, &buf
, 1);
2508 usb_microdia_control_write(dev
, 0x1045, &buf
, 1);
2510 usb_microdia_control_write(dev
, 0x1040, &buf
, 1);
2512 usb_microdia_control_write(dev
, 0x1020, &buf
, 1);
2518 * @brief From 6 init-logs
2522 * @returns 0 (ok) or -1 (error)
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
)
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:
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)
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)
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:
2611 * usb_microdia_control_write(dev, 0x1020, wbuf, 1);
2614 if ((retSP
!= 0) || (retASS
!= 0) || (ret
< 33))
2617 UDIA_INFO("One ore more errors occured during initialization !\n");
2625 * @brief From UsbSnoop-plugin-parsed.log
2631 int microdia_627b_initialize(struct usb_microdia
*dev
)
2644 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1); /* URB 5 */
2648 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1); /* URB 6 */
2653 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1); /* URB 7 */
2657 ret
= usb_microdia_control_read(dev
, reg
, reg0395
, 1); /* URB 8 */
2663 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 9 */
2667 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 10 */
2672 ret
= usb_microdia_control_read(dev
, reg
, reg11b8
, 1); /* URB 11 */
2678 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 12 */
2682 ret
= usb_microdia_control_read(dev
, reg
, reg1000
, 5); /* URB 13 */
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 */
2693 ret
= usb_microdia_control_read(dev
, reg
, reg1060
, 2); /* URB 15 */
2698 buf
[0] = 0x00; buf
[1] = 0x03;
2699 ret
= usb_microdia_control_write(dev
, reg
, buf
, 2); /* URB 16 */
2705 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 17 */
2709 retI2C
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
2710 OV7660_CTL_PID
, dev
->sensor_flags
, buf
); /* URBs 18-29 */
2715 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 30 */
2719 retI2C
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
2720 OV7660_CTL_PID
, dev
->sensor_flags
, buf
); /* URBs 31-35 */
2723 UDIA_ERROR("Read of sensor register 0x0a failed.");
2727 ret
= usb_microdia_control_write(dev
, reg
, reg0395
, 1); /* URB 36 */
2731 ret
= usb_microdia_control_write(dev
, reg
, reg0395
, 1); /* URB 37 */
2737 ret
= usb_microdia_control_write(dev
, reg
, reg11b8
, 1); /* URB 38 */
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 */
2748 buf
[0] = 0x08; buf
[1] = 0x00;
2749 ret
= usb_microdia_control_write(dev
, reg
, reg1060
, 2); /* URB 40 */
2755 ret = usb_interrupt_msg(dev->udev, 0x00000083, buf, 0x0000001, &actual, 1000);
2760 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg
, ret
);
2765 * @brief From init-start-stop-log (made by VÃctor M. Hernández Rocamora)
2769 * @returns 0 (ok) or -1 (error)
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
)
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
2787 ret
+= usb_microdia_control_write(dev
, 0x10c8, buf
, 1); // URB 7
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
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
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
2805 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); // URB 14
2809 UDIA_INFO("One ore more errors occured during initialization !\n");
2816 * @brief From UsbSnoop-plugin-parsed.log
2820 * @returns 0 (OK) or <0 (Error)
2822 * @author Vincent, Kuzja
2824 int microdia_6288_initialize(struct usb_microdia
*dev
)
2832 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
2833 if(ret
< 0) goto err
;
2836 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
2837 if(ret
< 0) goto err
;
2844 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
2849 * @brief From UsbSnoop-plugin-parsed.log
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
)
2864 UDIA_INFO("Initializing camera...\n");
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
2873 UDIA_ERROR("Microdia 6128 is not connected or working !!!\n");
2877 buf
[0] = 0x29; buf
[1] = 0x70; // Configure GPIO
2878 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 2);
2881 ret
+= usb_microdia_control_write(dev
, 0xf1, buf
, 1); // Maybe wakeup
2884 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1); // Command to initialize cam
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");
2896 int dev_microdia_start_stream(struct usb_microdia
*dev
)
2899 if(dev
&& dev
->start_stream
)
2900 ret
= dev
->start_stream(dev
);
2906 * @brief From start.htm
2914 * For SN9C201 with MI1310.
2915 * This function has not been tested yet.
2917 int microdia_6242_start_stream(struct usb_microdia
*dev
)
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};
2928 0x02, 0x00, 0x02, 0x00, 0x50, 0x78, 0x00, 0x00,
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};
2937 0x08, 0x38, 0x58, 0x6f, 0x7f, 0x8d, 0x9a, 0xa6,
2938 0xb1, 0xbb, 0xc5, 0xce, 0xd7, 0xdf, 0xe8, 0xef,
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] = {
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] =
2981 __u8 third10c0
[4][3] = {
2985 {0x20, 0x00, 0x00}};
2987 __u8 fourth10c0a
[3][3] = {
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] = {
2998 {0x05, 0x00, 0x72}};
3003 usb_microdia_control_write(dev
, 0x1066, buf
, 1); // URB 1
3010 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
3013 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
3016 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3019 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3022 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3025 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
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);
3061 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
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]);
3071 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
3074 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
3077 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); // URB 50
3080 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3083 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3086 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3089 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3092 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3095 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
3098 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
3101 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
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
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);
3136 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3139 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3142 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3145 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3148 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
3151 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
3154 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 80
3155 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3158 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3159 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3162 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3163 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3166 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3167 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3170 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3171 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
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]);
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]);
3198 usb_microdia_control_write(dev
, 0x118c, buf
, 1);
3201 usb_microdia_control_write(dev
, 0x118d, buf
, 1); // URB 110
3204 usb_microdia_control_write(dev
, 0x118e, buf
, 1);
3207 usb_microdia_control_write(dev
, 0x118f, buf
, 1);
3210 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3213 usb_microdia_control_write(dev
, 0x118c, buf
, 1);
3216 usb_microdia_control_write(dev
, 0x118d, buf
, 1);
3219 usb_microdia_control_write(dev
, 0x118e, buf
, 1);
3222 usb_microdia_control_write(dev
, 0x118f, buf
, 1);
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);
3233 usb_microdia_control_write(dev
, 0x10f7, buf
, 1);
3236 usb_microdia_control_write(dev
, 0x10f6, buf
, 1); // URB 130
3238 usb_microdia_control_write(dev
, 0x10e1, urb120
, 21);
3241 usb_microdia_control_write(dev
, 0x10f8, buf
, 1);
3244 usb_microdia_control_write(dev
, 0x10fa, buf
, 1);
3247 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
3250 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
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);
3263 usb_microdia_control_write(dev
, 0x118c, buf
, 1);
3266 usb_microdia_control_write(dev
, 0x118d, buf
, 1); // URB 140
3269 usb_microdia_control_write(dev
, 0x118e, buf
, 1);
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);
3285 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3288 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
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
3298 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3301 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3304 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3307 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3310 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
3313 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
3316 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
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);
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);
3351 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3354 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3357 usb_microdia_control_write(dev
, 0x11b9, buf
, 1);
3360 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3363 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3366 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3369 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3372 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3375 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 180
3378 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
3381 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
3384 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3385 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3388 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3389 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3392 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3393 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3396 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3397 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 190
3400 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3401 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
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]}; */
3415 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3421 * @brief From startstream.log
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
)
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};
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};
3448 {0x08, 0x2b, 0x59, 0x79, 0x91, 0x9e, 0xa9, 0xb3,
3449 0xbd, 0xc6, 0xce, 0xd6, 0xdd, 0xe4, 0xea, 0xf1,
3453 {0x16, 0x00, 0x2d, 0x00, 0x08, 0x00, 0xdd, 0x0f,
3454 0xbc, 0x0f, 0x68, 0x00, 0x68, 0x00, 0xa9, 0x0f,
3455 0xf0, 0x0f, 0x00, 0x00, 0x00};
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};
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] =
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] = {
3494 __u8 third10c0a
[5][2] = {
3500 __u8 third10c0b
[3] =
3501 {0x01, 0x80, 0x80}; // length 2
3504 {0x0a, 0x0b, 0x1c, 0x1d}; // these are four addresses
3509 usb_microdia_control_write(dev
, 0x1066, buf
, 1); // URB 1
3516 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3519 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
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);
3528 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
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);
3565 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
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]);
3575 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3578 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); // URB 50
3581 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3584 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3587 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3590 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3593 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
3596 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
3599 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
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
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);
3638 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3641 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3644 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3647 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3650 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
3653 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
3656 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 80
3657 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3660 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3661 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3664 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3665 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3668 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3669 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3672 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3673 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3676 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 90
3677 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3680 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3681 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3684 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3685 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
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]);
3698 usb_microdia_control_write(dev
, 0x118c, buf
, 1);
3701 usb_microdia_control_write(dev
, 0x118d, buf
, 1); // URB 110
3704 usb_microdia_control_write(dev
, 0x118e, buf
, 1);
3707 usb_microdia_control_write(dev
, 0x118f, buf
, 1);
3710 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3713 usb_microdia_control_write(dev
, 0x118c, buf
, 1);
3716 usb_microdia_control_write(dev
, 0x118d, buf
, 1);
3719 usb_microdia_control_write(dev
, 0x118e, buf
, 1);
3722 usb_microdia_control_write(dev
, 0x118f, buf
, 1);
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);
3734 usb_microdia_control_write(dev
, 0x10f7, buf
, 1);
3737 usb_microdia_control_write(dev
, 0x10f6, buf
, 1); // URB 130
3739 usb_microdia_control_write(dev
, 0x10e1, urb120
, 21);
3742 usb_microdia_control_write(dev
, 0x10f8, buf
, 1);
3745 usb_microdia_control_write(dev
, 0x10fa, buf
, 1);
3748 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
3751 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
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 */
3761 usb_microdia_control_write(dev
, 0x11c0, buf
, 48);
3764 usb_microdia_control_write(dev
, 0x118c, buf
, 1);
3767 usb_microdia_control_write(dev
, 0x118d, buf
, 1); // URB 140
3770 usb_microdia_control_write(dev
, 0x118e, buf
, 1);
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);
3786 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3789 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
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
3799 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3802 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3805 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3808 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3811 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
3814 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
3817 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
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);
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);
3852 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3855 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3858 usb_microdia_control_write(dev
, 0x11b9, buf
, 1);
3861 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3864 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3867 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3870 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3873 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3876 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 180
3879 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
3882 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
3885 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3886 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3889 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3890 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3893 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3894 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3897 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3898 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 190
3901 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3902 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3905 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3906 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3909 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3910 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3913 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3914 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
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
);
3928 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3931 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
3934 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
3939 int microdia_624f_start_stream(struct usb_microdia
*dev
)
3943 __u8 eeprom_slave_id
= 0x50;
3944 __u8 eeprom_flags
= SN9C20X_I2C_2WIRE
;
3947 __u8 unknown1
[9] = { dev
->sensor_flags
, dev
->sensor_slave_address
,
3948 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
3952 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3953 if(ret
< 0) goto err
;
3957 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3958 if(ret
< 0) goto err
;
3962 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3963 if(ret
< 0) goto err
;
3967 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3968 if(ret
< 0) goto err
;
3972 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3973 if(ret
< 0) goto err
;
3977 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3978 if(ret
< 0) goto err
;
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;
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 */
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;
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;
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;
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;
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;
4031 ret
= usb_microdia_control_write(dev
, command
, buf
, 22);
4032 if(ret
< 0) goto err
;
4034 buf
[0] = 0x00; buf
[1] = 0x00;
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;
4043 ret
= usb_microdia_control_write(dev
, command
, buf
, 9);
4044 if(ret
< 0) goto err
;
4048 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4049 if(ret
< 0) goto err
;
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
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 */
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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 */
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]);
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
);
4261 UDIA_INFO("No EEPROM found\n");
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]);
4271 buf
[0] = dev
->sensor_slave_address
;
4272 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4273 if(ret
< 0) goto err
;
4277 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4278 if(ret
< 0) goto err
;
4282 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4283 if(ret
< 0) goto err
;
4287 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4288 if(ret
< 0) goto err
;
4292 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4293 if(ret
< 0) goto err
;
4297 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4298 if(ret
< 0) goto err
;
4302 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4303 if(ret
< 0) goto err
;
4307 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4308 if (ret
< 0) goto err
;
4312 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4313 if (ret
< 0) goto err
;
4317 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4318 if (ret
< 0) goto err
;
4322 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4323 if (ret
< 0) goto err
;
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
;
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
;
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
;
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
;
4356 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0;
4358 ret
= usb_microdia_control_write(dev
, command
, buf
, 5);
4359 if(ret
< 0) goto err
;
4363 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4364 if(ret
< 0) goto err
;
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
;
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
;
4378 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4379 if(ret
< 0) goto err
;
4383 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4384 if(ret
< 0) goto err
;
4388 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4389 if(ret
< 0) goto err
;
4394 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4395 if(ret
< 0) goto err
;
4399 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4400 if(ret
< 0) goto err
;
4404 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4405 if(ret
< 0) goto err
;
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
;
4415 else if (buf
[0] == 0xb8)
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
;
4423 else if (buf
[0] == 0xb9)
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
;
4431 else if (buf
[0] == 0xba)
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
;
4439 else if (buf
[0] == 0xbb)
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
;
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
;
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
;
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
;
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
;
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
;
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 */
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
;
4492 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4493 if(ret
< 0) goto err
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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)
4542 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4543 if(ret
< 0) goto err
;
4547 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4548 if(ret
< 0) goto err
;
4552 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4553 if(ret
< 0) goto err
;
4557 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4558 if(ret
< 0) goto err
;
4563 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4564 if(ret
< 0) goto err
;
4568 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4569 if(ret
< 0) goto err
;
4574 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4575 if(ret
< 0) goto err
;
4579 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4580 if(ret
< 0) goto err
;
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
))
4592 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4593 if(ret
< 0) goto err
;
4596 /* Gamma control? */
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;
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;
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;
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;
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;
4651 buf
[0] = 0x15; buf
[2] = 0x29;
4653 ret
= usb_microdia_control_write(dev
, command
, buf
, 21);
4654 if (ret
< 0) goto err
;
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
))
4665 buf
[0] = 0x00; // 624f-log: 0xc0 !
4666 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4667 if(ret
< 0) goto err
;
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;
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
;
4690 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4691 if(ret
< 0) goto err
;
4696 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4697 if(ret
< 0) goto err
;
4701 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4702 if(ret
< 0) goto err
;
4707 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4708 if(ret
< 0) goto err
;
4712 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4713 if(ret
< 0) goto err
;
4715 //memset(buf, 0, 4);
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
;
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;
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);
4756 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4757 if(ret
< 0) goto err
;
4762 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4763 if(ret
< 0) goto err
;
4767 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4768 if(ret
< 0) goto err
;
4772 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4773 if(ret
< 0) goto err
;
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
;
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
;
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
;
4796 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4797 if(ret
< 0) goto err
;
4801 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4802 if(ret
< 0) goto err
;
4806 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4807 if(ret
< 0) goto err
;
4810 //////////////////////////////////////////////////////////////////////
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
;
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
;
4855 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4856 if(ret
< 0) goto err
;
4860 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4861 if(ret
< 0) goto err
;
4866 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4867 if(ret
< 0) goto err
;
4871 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4872 if(ret
< 0) goto err
;
4876 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4877 if(ret
< 0) goto err
;
4881 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4882 if(ret
< 0) goto err
;
4886 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4887 if(ret
< 0) goto err
;
4891 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4892 if(ret
< 0) goto err
;
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
;
4902 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0;
4904 ret
= usb_microdia_control_write(dev
, command
, buf
, 5);
4905 if(ret
< 0) goto err
;
4909 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4910 if(ret
< 0) goto err
;
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
;
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
;
4925 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4926 if(ret
< 0) goto err
;
4930 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4931 if(ret
< 0) goto err
;
4935 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4936 if(ret
< 0) goto err
;
4940 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4941 if(ret
< 0) goto err
;
4945 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4946 if(ret
< 0) goto err
;
4950 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4951 if(ret
< 0) goto err
;
4955 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4956 if(ret
< 0) goto err
;
4961 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4962 if(ret
< 0) goto err
;
4966 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4967 if(ret
< 0) goto err
;
4971 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4972 if(ret
< 0) goto err
;
4977 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4978 if(ret
< 0) goto err
;
4981 if (last_11b8
[0] == 0x3c)
4983 else if (last_11b8
[0] == 0xbc)
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
;
4991 else if (buf
[0] == 0xb8)
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
;
4999 else if (buf
[0] == 0xb9)
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
;
5007 else if (buf
[0] == 0xba)
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
;
5015 else if (buf
[0] == 0xbb)
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
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
;
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
;
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
;
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
;
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
;
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]);
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]);
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]);
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]);
5083 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
5084 if(ret
< 0) goto err
;
5085 //////////////////////////////////////////////////////////////////////////////////
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
5097 ret = usb_microdia_control_write(dev, command, buf, 1);
5098 if(ret < 0) goto err;
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;
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);
5115 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1, 0x00,
5116 dev->sensor_flags, buf);
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;
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);
5142 ret = usb_microdia_control_write(dev, command, buf, 1);
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;
5152 ret = usb_microdia_control_write(dev, command, buf, 21);
5153 if(ret < 0) goto err;
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
5164 UDIA_ERROR("start stream: command %x failed (%d)!\n", command
, ret
);
5168 int microdia_6260_start_stream(struct usb_microdia
*dev
)
5173 ret
= usb_microdia_control_read(dev
, 0x1045, buf
, 1);
5175 ret
= usb_microdia_control_write(dev
, 0x1045, buf
, 1);
5177 ret
= usb_microdia_control_write(dev
, 0x1066, buf
, 1);
5179 ret
= usb_microdia_control_write(dev
, 0x1007, buf
, 1);
5181 ret
= usb_microdia_control_write(dev
, 0x1006, buf
, 1);
5183 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
5185 ret
= usb_microdia_control_write(dev
, 0x1001, buf
, 1);
5187 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5189 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
5191 ret
= usb_microdia_control_write(dev
, 0x1020, buf
, 1);
5197 ret
= usb_microdia_control_write(dev
, 0x1067, buf
, 5);
5207 ret
= usb_microdia_control_write(dev
, 0x10c0, buf
, 9);
5232 ret
= usb_microdia_control_write(dev
, 0x10e0, buf
, 24);
5236 ret
= usb_microdia_control_write(dev
, 0x10f8, buf
, 3);
5242 ret
= usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
5246 ret
= usb_microdia_control_write(dev
, 0x1188, buf
, 3);
5269 ret
= usb_microdia_control_write(dev
, 0x118b, buf
, 22);
5272 ret
= usb_microdia_control_write(dev
, 0x11a1, buf
, 2);
5282 ret
= usb_microdia_control_write(dev
, 0x11b7, buf
, 9);
5284 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
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);
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
);
5299 UDIA_INFO("No EEPROM found\n");
5303 UDIA_INFO("Read from EEPROM successful\n");
5307 ret
= usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
5309 ret
= usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
5311 ret
= usb_microdia_control_write(dev
, 0x1001, buf
, 1);
5313 ret
= usb_microdia_control_write(dev
, 0x1001, buf
, 1);
5320 ret
= usb_microdia_control_write(dev
, 0x1180, buf
, 6);
5326 ret
= usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
5328 ret
= usb_microdia_control_write(dev
, 0x1189, buf
, 1);
5333 ret
= usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
5338 ret
= usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
5340 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
5342 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5344 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5346 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5348 ret
= usb_microdia_control_write(dev
, 0x118a, buf
, 1);
5350 ret
= usb_microdia_control_write(dev
, 0x0395, buf
, 1);
5352 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5353 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5355 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5356 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5358 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5359 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5361 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5362 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5364 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5365 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5367 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5368 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5370 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5372 * OV7670 Intialise Part 2
5380 ret
= usb_microdia_control_write(dev
, 0x1180, buf
, 6);
5386 ret
= usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
5388 ret
= usb_microdia_control_write(dev
, 0x1189, buf
, 1);
5393 ret
= usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
5398 ret
= usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
5400 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
5402 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
5404 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
5406 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5408 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5410 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5412 ret
= usb_microdia_control_write(dev
, 0x118a, buf
, 1);
5414 ret
= usb_microdia_control_write(dev
, 0x0395, buf
, 1);
5416 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5417 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5419 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5420 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5422 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5423 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5425 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5426 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5428 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5429 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5431 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5432 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5434 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5436 * OV7670 Initialisation Part 3 Goes Here
5439 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
5461 ret
= usb_microdia_control_write(dev
, 0x10e1, buf
, 21);
5483 ret
= usb_microdia_control_write(dev
, 0x10e1, buf
, 21);
5505 ret
= usb_microdia_control_write(dev
, 0x10e1, buf
, 21);
5527 ret
= usb_microdia_control_write(dev
, 0x10e1, buf
, 21);
5533 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
5537 * @returns 0 (ok) or -1 (error)
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
)
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");
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)
5565 usb_microdia_control_write(dev
, 0x1066, buf
, 1); // URB 1956
5567 // <= INTERRUPT COMING BACK (URB 1955)
5568 // => INTERRUPT GOING DOWN (URB 1957)
5571 usb_microdia_control_write(dev
, 0x1000, buf
, 1); // URB 1958
5573 usb_microdia_control_write(dev
, 0x1001, buf
, 1); // URB 1959
5575 usb_microdia_control_write(dev
, 0x1002, buf
, 1); // URB 1960
5577 usb_microdia_control_write(dev
, 0x1061, buf
, 1); // URB 1961
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:
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:
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
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;
5636 usb_microdia_control_write(dev
, 0x11b7, buf
, 9); // URB 1971
5638 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 1972
5640 usb_microdia_control_write(dev
, 0x1000, buf
, 1); // URB 1973
5642 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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
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
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
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
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
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
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
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
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
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
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
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
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
);
5911 UDIA_INFO("1 or more errors occured in I2C-message-block 1 !\n");
5914 // END OF I2C MESSAGES
5915 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5917 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
5920 usb_microdia_control_write(dev
, 0x1007, buf
, 8);
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
5931 usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
5932 retI2C
= sn9c20x_read_i2c_data(dev
, 0x50, 1, 0x00, SN9C20X_I2C_2WIRE
, buf
);
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");
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
5944 usb_microdia_control_write(dev
, 0x1001, buf
, 1); // URB 2047
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
5951 usb_microdia_control_write(dev, 0x1001, buf, 1);
5954 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
5956 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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
5979 UDIA_INFO("1 or more errors occured in I2C-message-block 2 !\n");
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
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
6004 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2070
6006 usb_microdia_control_write(dev
, 0x118a, buf
, 1); // URB 2071
6008 usb_microdia_control_write(dev
, 0x0395, buf
, 1); // URB 2072
6011 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2073
6012 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2074 // 0x38
6015 else if (buf
[0] == 0xb8)
6017 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2075
6018 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2076 // 0xb9
6021 else if (buf
[0] == 0xb9)
6023 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2077
6024 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2078
6027 else if (buf
[0] == 0xba)
6029 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2079
6030 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2080 // 0x3b
6033 else if (buf
[0] == 0xbb)
6035 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2081
6036 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2082 // 0x3c
6039 else if (buf
[0] == 0xbc)
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
)
6048 else if (buf
[0] == 0xbd)
6050 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2085
6051 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2086
6054 else if (buf
[0] == 0xbe)
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 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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
);
6096 UDIA_INFO("1 or more errors occured in I2C-message-block 3 !\n");
6099 // END OF I2C MESSAGES
6100 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6104 usb_microdia_control_write(dev
, 0x1180, buf
, 1); // URB 2099
6106 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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
);
6123 UDIA_INFO("1 or more errors occured in I2C-message-block 4 !\n");
6126 // END OF I2C MESSAGES
6127 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6131 usb_microdia_control_write(dev
, 0x1182, buf
, 1); // URB 2103
6134 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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
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
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
);
6181 UDIA_INFO("1 or more errors occured in I2C-message-block 5 !\n");
6184 // END OF I2C MESSAGES
6185 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6189 usb_microdia_control_write(dev
, 0x118c, buf
, 1); // URB 2115
6191 usb_microdia_control_write(dev
, 0x118d, buf
, 1); // URB 2116
6193 usb_microdia_control_write(dev
, 0x118e, buf
, 1); // URB 2117
6195 usb_microdia_control_write(dev
, 0x118f, buf
, 1); // URB 2118
6197 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); // URB 2119
6199 usb_microdia_control_write(dev
, 0x118c, buf
, 1); // URB 2120
6201 usb_microdia_control_write(dev
, 0x118d, buf
, 1); // URB 2121
6203 usb_microdia_control_write(dev
, 0x118e, buf
, 1); // URB 2122
6205 usb_microdia_control_write(dev
, 0x118f, buf
, 1); // URB 2123
6207 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6211 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
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;
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;
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;
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;
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
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;
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;
6282 usb_microdia_control_write(dev
, 0x10e1, buf
, 21); // URB 2137
6284 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6288 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6292 usb_microdia_control_write(dev
, 0x10f8, buf
, 1); // URB 2138
6294 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6298 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6302 usb_microdia_control_write(dev
, 0x10fa, buf
, 1); // URB 2139
6305 usb_microdia_control_write(dev
, 0x10f9, buf
, 1); // URB 2140
6307 usb_microdia_control_write(dev
, 0x10f9, buf
, 1); // URB 2141
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
6315 usb_microdia_control_write(dev
, 0x118c, buf
, 1); // URB 2145
6317 usb_microdia_control_write(dev
, 0x118d, buf
, 1); // URB 2146
6319 usb_microdia_control_write(dev
, 0x118e, buf
, 1); // URB 2147
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
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
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 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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
6410 UDIA_INFO("1 or more errors occured in I2C-message-block 6 !\n");
6413 // END OF I2C MESSAGES
6414 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6416 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6419 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
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
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
6437 usb_microdia_control_write(dev
, 0x1061, buf
, 1); // URB 2176
6439 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); // URB 2177
6441 usb_microdia_control_write(dev
, 0x11b9, buf
, 1); // URB 2178
6443 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); // URB 2179
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
6455 usb_microdia_control_write(dev
, 0x118a, buf
, 1); // URB 2185
6457 usb_microdia_control_write(dev
, 0x0395, buf
, 1); // URB 2186
6459 if ((last_11b8
[0] == 0x3d) || (last_11b8
[0] == 0x3f))
6461 else if ((last_11b8
[0] == 0xbd) || (last_11b8
[0] == 0xbf))
6463 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2187
6464 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2188 // 0x38
6467 else if (buf
[0] == 0xb8)
6469 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2189
6470 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2190 // 0xb9
6473 else if (buf
[0] == 0xb9)
6475 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2191
6476 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2192 // 0xba
6479 else if (buf
[0] == 0xba)
6481 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2193
6482 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2194 // 0x3b
6485 else if (buf
[0] == 0xbb)
6487 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2195
6488 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2196 // 0x3c
6491 else if (buf
[0] == 0xbc)
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
)
6499 else if (buf
[0] == 0xbd)
6501 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2199
6502 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2200
6505 else if (buf
[0] == 0xbe)
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 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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
6544 UDIA_INFO("1 or more errors occured in I2C-message-block 7 !\n");
6547 // END OF I2C MESSAGES
6548 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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
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
)
6574 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6578 usb_microdia_control_write(dev
, 0x1007, buf
, 1); // URB 2489
6579 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6583 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
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
6593 int microdia_627b_start_stream(struct usb_microdia
*dev
)
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
6607 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 44 */
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
6621 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 46 */
6627 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 47 */
6633 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 48 */
6639 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 49 */
6645 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 50 */
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 */
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;
6659 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9); /* URB 52 */
6663 /* transferbufferlength is 18, but data is 24 bytes long, what to do ? */
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 */
6675 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
6676 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3); /* URB 54 */
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 */
6687 buf
[0] = 0x86; buf
[1] = 0x8c; buf
[2] = 0x08;
6688 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3); /* URB 56 */
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 */
6703 buf
[0] = 0x00; buf
[1] = 0x00;
6704 ret
= usb_microdia_control_write(dev
, reg
, buf
, 2); /* URB 58 */
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 */
6717 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 60 */
6723 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6728 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6729 OV7660_CTL_COM7
, dev
->sensor_flags
, buf
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
6776 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6777 OV7660_CTL_PSHFT
, dev
->sensor_flags
, buf
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
6870 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
6871 OV7660_CTL_MTX1
, dev
->sensor_flags
, NULL
);
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
);
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
);
6889 reg
= 0x61; /* RSVD 0x61 is Reserved */
6891 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6892 reg
, dev
->sensor_flags
, buf
);
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
);
6903 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6904 OV7660_CTL_LCC5
, dev
->sensor_flags
, buf
);
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
);
6915 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6916 OV7660_CTL_DBLV
, dev
->sensor_flags
, buf
);
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
);
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
);
6935 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6941 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6946 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6952 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6956 /* TRY TO READ FROM EEPROM: */
6958 ret
= sn9c20x_read_i2c_data(dev
, 0x50, 1, reg
, SN9C20X_I2C_2WIRE
, buf
);
6960 UDIA_INFO("No EEPROM found\n");
6962 UDIA_INFO("Read from EEPROM successful\n");
6966 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6972 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6978 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6984 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6990 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6996 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7001 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7002 OV7660_CTL_VREF
, dev
->sensor_flags
, buf
);
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
);
7012 /* "Dummy" write: */
7013 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
7014 OV7660_CTL_PSHFT
, dev
->sensor_flags
, NULL
);
7019 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7020 OV7660_CTL_HREF
, dev
->sensor_flags
, buf
);
7025 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7026 OV7660_CTL_HREF
, dev
->sensor_flags
, buf
);
7031 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7032 OV7660_CTL_HREF
, dev
->sensor_flags
, buf
);
7037 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7038 OV7660_CTL_HREF
, dev
->sensor_flags
, buf
);
7043 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7044 OV7660_CTL_HREF
, dev
->sensor_flags
, buf
);
7049 buf
[0] = 0x01; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00; buf
[4] = 0x28;
7051 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
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);
7063 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7068 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
7069 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
7074 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
7075 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
7081 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7087 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7093 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7099 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7105 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7111 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7117 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7120 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7126 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7129 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7135 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7138 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7144 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7147 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7153 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7156 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7162 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7165 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7171 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7176 //ret = usb_microdia_control_read(dev, reg, buf, 1);
7177 //if(ret < 0) goto err;
7181 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7182 OV7660_CTL_CLKRC
, dev
->sensor_flags
, buf
);
7187 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7188 OV7660_CTL_EXHCH
, dev
->sensor_flags
, buf
);
7193 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7194 OV7660_CTL_EXHCL
, dev
->sensor_flags
, buf
);
7199 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7200 OV7660_CTL_DM_LNL
, dev
->sensor_flags
, buf
);
7205 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7206 OV7660_CTL_DM_LNH
, dev
->sensor_flags
, buf
);
7211 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7212 OV7660_CTL_MVFP
, dev
->sensor_flags
, buf
);
7217 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7218 OV7660_CTL_MVFP
, dev
->sensor_flags
, buf
);
7223 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7224 OV7660_CTL_VREF
, dev
->sensor_flags
, buf
);
7229 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7230 OV7660_CTL_VREF
, dev
->sensor_flags
, buf
);
7235 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7236 OV7660_CTL_AECH
, dev
->sensor_flags
, buf
);
7241 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7242 OV7660_CTL_COM1
, dev
->sensor_flags
, buf
);
7247 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7248 OV7660_CTL_ADVFL
, dev
->sensor_flags
, buf
);
7253 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7254 OV7660_CTL_ADVFH
, dev
->sensor_flags
, buf
);
7259 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7260 OV7660_CTL_GAIN
, dev
->sensor_flags
, buf
);
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
);
7272 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7278 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7284 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7290 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7296 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7302 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7308 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7314 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7320 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7326 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
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);
7338 /* transferbufferlength was only 11 ? */
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;
7346 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7349 /* transferbufferlength was only 15 ? */
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;
7357 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7360 /* transferbufferlength was only 15 ? */
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;
7368 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7371 /* transferbufferlength was only 15 ? */
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;
7379 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7382 /* transferbufferlength was only 15 ? */
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;
7390 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7393 /* transferbufferlength was only 15 ? */
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;
7401 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7404 /* transferbufferlength was only 15 ? */
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;
7412 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7415 /* transferbufferlength was only 15 ? */
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;
7423 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7426 /* transferbufferlength was only 15 ? */
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;
7434 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7437 /* transferbufferlength was only 15 ? */
7441 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7447 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
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;
7457 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7460 /* transferbufferlength was only 15 ? */
7464 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7470 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7476 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7482 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7488 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7493 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
7494 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
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);
7509 /* transferbufferlength was only 30 ? */
7513 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7519 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7525 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7531 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7536 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05; buf
[4] = 0x04;
7538 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
7543 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
7544 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
7549 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x32; buf
[3] = 0xdd;
7550 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
7556 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7562 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7568 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
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);
7589 /* transferbufferlength is only 40 ? */
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);
7608 /* transferbufferlength is only 40 ? */
7612 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7618 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7624 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7629 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7630 OV7660_CTL_VREF
, dev
->sensor_flags
, buf
);
7635 buf
[0] = 0x01; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00; buf
[4] = 0x28;
7637 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
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);
7649 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7654 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
7655 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
7660 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
7661 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
7667 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7673 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7679 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7685 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7691 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7697 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7703 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7709 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7715 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7721 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7727 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7733 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7736 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7742 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7745 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7751 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7754 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7760 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7763 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7769 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7772 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7778 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7781 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7787 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7792 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7793 OV7660_CTL_CLKRC
, dev
->sensor_flags
, buf
);
7798 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7799 OV7660_CTL_EXHCH
, dev
->sensor_flags
, buf
);
7804 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7805 OV7660_CTL_EXHCL
, dev
->sensor_flags
, buf
);
7810 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7811 OV7660_CTL_DM_LNL
, dev
->sensor_flags
, buf
);
7816 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7817 OV7660_CTL_DM_LNH
, dev
->sensor_flags
, buf
);
7821 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7822 OV7660_CTL_PID
, dev
->sensor_flags
, buf
);
7826 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7827 OV7660_CTL_VER
, dev
->sensor_flags
, buf
);
7831 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7832 OV7660_CTL_MIDH
, dev
->sensor_flags
, buf
);
7836 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7837 OV7660_CTL_MIDL
, dev
->sensor_flags
, buf
);
7843 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7849 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7855 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7861 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7867 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
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;
7877 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7880 /* transferbufferlength is only 15 ? */
7883 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7884 OV7660_CTL_AECH
, dev
->sensor_flags
, buf
);
7889 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7890 OV7660_CTL_COM1
, dev
->sensor_flags
, buf
);
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;
7900 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7903 /* transferbufferlength is only 15 ? */
7906 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7907 OV7660_CTL_GAIN
, dev
->sensor_flags
, buf
);
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;
7917 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
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
);
7929 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7930 OV7660_CTL_GAIN
, dev
->sensor_flags
, buf
);
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
);
7942 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7948 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7954 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7960 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
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
);
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;
7976 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
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
);
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
);
7995 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8001 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8007 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8013 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
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
);
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;
8029 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
8032 /* transferbufferlength is only 15 ? */
8036 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8042 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8048 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8054 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8060 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
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
);
8072 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8078 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8084 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8090 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8096 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg
, ret
);
8100 UDIA_ERROR("r/w in sensor register %x failed (%d)!\n", reg
, ret
);
8106 * @brief From UsbSnoop-plugin-parsed.log
8110 * @returns 0 (OK) or <0 (Error)
8112 * @author Vincent, Kuzja
8114 int microdia_6288_start_stream(struct usb_microdia
*dev
)
8124 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8125 if(ret
< 0) goto err
;
8129 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8130 if(ret
< 0) goto err
;
8134 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8135 if(ret
< 0) goto err
;
8139 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8140 if(ret
< 0) goto err
;
8144 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8145 if(ret
< 0) goto err
;
8149 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8150 if(ret
< 0) goto err
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
8188 buf
[0] = 0x00; buf
[1] = 0x00;
8189 ret
= usb_microdia_control_write(dev
, reg
, buf
, 2);
8190 if(ret
< 0) goto err
;
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
;
8199 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8200 if(ret
< 0) goto err
;
8204 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8205 if(ret
< 0) goto err
;
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
;
8213 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8214 if(ret
< 0) goto err
;
8217 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8218 if(ret
< 0) goto err
;
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
;
8226 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8227 if(ret
< 0) goto err
;
8230 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8231 if(ret
< 0) goto err
;
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
;
8239 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8240 if(ret
< 0) goto err
;
8243 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8244 if(ret
< 0) goto err
;
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
;
8252 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8253 if(ret
< 0) goto err
;
8256 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8257 if(ret
< 0) goto err
;
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
;
8265 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8266 if(ret
< 0) goto err
;
8269 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8270 if(ret
< 0) goto err
;
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
;
8278 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8279 if(ret
< 0) goto err
;
8282 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8283 if(ret
< 0) goto err
;
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
;
8291 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8292 if(ret
< 0) goto err
;
8295 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8296 if(ret
< 0) goto err
;
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
;
8304 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8305 if(ret
< 0) goto err
;
8308 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8309 if(ret
< 0) goto err
;
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
;
8317 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8318 if(ret
< 0) goto err
;
8321 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8322 if(ret
< 0) goto err
;
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
;
8330 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8331 if(ret
< 0) goto err
;
8334 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8335 if(ret
< 0) goto err
;
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
;
8343 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8344 if(ret
< 0) goto err
;
8347 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8348 if(ret
< 0) goto err
;
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
;
8356 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8357 if(ret
< 0) goto err
;
8360 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8361 if(ret
< 0) goto err
;
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
;
8369 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8370 if(ret
< 0) goto err
;
8373 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8374 if(ret
< 0) goto err
;
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
;
8382 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8383 if(ret
< 0) goto err
;
8386 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8387 if(ret
< 0) goto err
;
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
;
8395 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8396 if(ret
< 0) goto err
;
8399 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8400 if(ret
< 0) goto err
;
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
;
8408 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8409 if(ret
< 0) goto err
;
8412 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8413 if(ret
< 0) goto err
;
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
;
8421 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8422 if(ret
< 0) goto err
;
8425 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8426 if(ret
< 0) goto err
;
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
;
8434 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8435 if(ret
< 0) goto err
;
8438 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8439 if(ret
< 0) goto err
;
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
;
8447 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8448 if(ret
< 0) goto err
;
8451 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8452 if(ret
< 0) goto err
;
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
;
8460 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8461 if(ret
< 0) goto err
;
8464 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8465 if(ret
< 0) goto err
;
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
;
8473 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8474 if(ret
< 0) goto err
;
8477 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8478 if(ret
< 0) goto err
;
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
;
8486 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8487 if(ret
< 0) goto err
;
8490 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8491 if(ret
< 0) goto err
;
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
;
8499 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8500 if(ret
< 0) goto err
;
8503 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8504 if(ret
< 0) goto err
;
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
;
8512 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8513 if(ret
< 0) goto err
;
8516 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8517 if(ret
< 0) goto err
;
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
;
8525 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8526 if(ret
< 0) goto err
;
8529 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8530 if(ret
< 0) goto err
;
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
;
8538 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8539 if(ret
< 0) goto err
;
8542 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8543 if(ret
< 0) goto err
;
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
;
8551 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8552 if(ret
< 0) goto err
;
8555 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8556 if(ret
< 0) goto err
;
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
;
8564 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8565 if(ret
< 0) goto err
;
8568 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8569 if(ret
< 0) goto err
;
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
;
8577 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8578 if(ret
< 0) goto err
;
8581 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8582 if(ret
< 0) goto err
;
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
;
8590 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8591 if(ret
< 0) goto err
;
8594 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8595 if(ret
< 0) goto err
;
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
;
8603 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8604 if(ret
< 0) goto err
;
8607 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8608 if(ret
< 0) goto err
;
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
;
8616 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8617 if(ret
< 0) goto err
;
8620 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8621 if(ret
< 0) goto err
;
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
;
8629 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8630 if(ret
< 0) goto err
;
8633 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8634 if(ret
< 0) goto err
;
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
;
8642 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8643 if(ret
< 0) goto err
;
8646 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8647 if(ret
< 0) goto err
;
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
;
8655 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8656 if(ret
< 0) goto err
;
8659 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8660 if(ret
< 0) goto err
;
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
;
8668 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8669 if(ret
< 0) goto err
;
8672 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8673 if(ret
< 0) goto err
;
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
;
8681 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8682 if(ret
< 0) goto err
;
8685 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8686 if(ret
< 0) goto err
;
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
;
8694 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8695 if(ret
< 0) goto err
;
8698 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8699 if(ret
< 0) goto err
;
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
;
8707 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8708 if(ret
< 0) goto err
;
8711 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8712 if(ret
< 0) goto err
;
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
;
8720 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8721 if(ret
< 0) goto err
;
8724 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8725 if(ret
< 0) goto err
;
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
;
8733 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8734 if(ret
< 0) goto err
;
8737 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8738 if(ret
< 0) goto err
;
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
;
8746 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8747 if(ret
< 0) goto err
;
8750 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8751 if(ret
< 0) goto err
;
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
;
8759 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8760 if(ret
< 0) goto err
;
8763 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8764 if(ret
< 0) goto err
;
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
;
8772 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8773 if(ret
< 0) goto err
;
8776 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8777 if(ret
< 0) goto err
;
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
;
8785 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8786 if(ret
< 0) goto err
;
8789 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8790 if(ret
< 0) goto err
;
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
;
8798 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8799 if(ret
< 0) goto err
;
8802 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8803 if(ret
< 0) goto err
;
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
;
8811 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8812 if(ret
< 0) goto err
;
8815 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8816 if(ret
< 0) goto err
;
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
;
8824 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8825 if(ret
< 0) goto err
;
8828 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8829 if(ret
< 0) goto err
;
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
;
8837 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8838 if(ret
< 0) goto err
;
8841 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8842 if(ret
< 0) goto err
;
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
;
8850 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8851 if(ret
< 0) goto err
;
8854 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8855 if(ret
< 0) goto err
;
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
;
8863 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8864 if(ret
< 0) goto err
;
8867 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8868 if(ret
< 0) goto err
;
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
;
8876 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8877 if(ret
< 0) goto err
;
8880 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8881 if(ret
< 0) goto err
;
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
;
8889 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8890 if(ret
< 0) goto err
;
8893 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8894 if(ret
< 0) goto err
;
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
;
8902 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8903 if(ret
< 0) goto err
;
8906 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8907 if(ret
< 0) goto err
;
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
;
8915 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8916 if(ret
< 0) goto err
;
8919 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8920 if(ret
< 0) goto err
;
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
;
8928 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8929 if(ret
< 0) goto err
;
8932 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8933 if(ret
< 0) goto err
;
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
;
8941 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8942 if(ret
< 0) goto err
;
8945 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8946 if(ret
< 0) goto err
;
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
;
8954 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8955 if(ret
< 0) goto err
;
8958 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8959 if(ret
< 0) goto err
;
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
;
8967 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8968 if(ret
< 0) goto err
;
8971 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8972 if(ret
< 0) goto err
;
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
;
8980 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8981 if(ret
< 0) goto err
;
8984 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8985 if(ret
< 0) goto err
;
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
;
8993 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8994 if(ret
< 0) goto err
;
8997 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8998 if(ret
< 0) goto err
;
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
;
9006 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9007 if(ret
< 0) goto err
;
9010 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9011 if(ret
< 0) goto err
;
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
;
9019 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9020 if(ret
< 0) goto err
;
9023 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9024 if(ret
< 0) goto err
;
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
;
9032 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9033 if(ret
< 0) goto err
;
9036 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9037 if(ret
< 0) goto err
;
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
;
9045 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9046 if(ret
< 0) goto err
;
9049 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9050 if(ret
< 0) goto err
;
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
;
9058 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9059 if(ret
< 0) goto err
;
9062 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9063 if(ret
< 0) goto err
;
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
;
9071 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9072 if(ret
< 0) goto err
;
9075 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9076 if(ret
< 0) goto err
;
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
;
9084 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9085 if(ret
< 0) goto err
;
9088 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9089 if(ret
< 0) goto err
;
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
;
9097 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9098 if(ret
< 0) goto err
;
9101 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9102 if(ret
< 0) goto err
;
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
;
9110 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9111 if(ret
< 0) goto err
;
9114 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9115 if(ret
< 0) goto err
;
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
;
9123 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9124 if(ret
< 0) goto err
;
9127 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9128 if(ret
< 0) goto err
;
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
;
9136 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9137 if(ret
< 0) goto err
;
9140 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9141 if(ret
< 0) goto err
;
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
;
9149 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9150 if(ret
< 0) goto err
;
9153 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9154 if(ret
< 0) goto err
;
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
;
9162 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9163 if(ret
< 0) goto err
;
9166 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9167 if(ret
< 0) goto err
;
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
;
9175 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9176 if(ret
< 0) goto err
;
9179 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9180 if(ret
< 0) goto err
;
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
;
9188 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9189 if(ret
< 0) goto err
;
9192 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9193 if(ret
< 0) goto err
;
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
;
9201 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9202 if(ret
< 0) goto err
;
9205 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9206 if(ret
< 0) goto err
;
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
;
9214 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9215 if(ret
< 0) goto err
;
9218 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9219 if(ret
< 0) goto err
;
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
;
9227 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9228 if(ret
< 0) goto err
;
9231 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9232 if(ret
< 0) goto err
;
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
;
9240 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9241 if(ret
< 0) goto err
;
9244 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9245 if(ret
< 0) goto err
;
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
;
9253 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9254 if(ret
< 0) goto err
;
9257 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9258 if(ret
< 0) goto err
;
9261 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9262 if(ret
< 0) goto err
;
9266 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9267 if(ret
< 0) goto err
;
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
;
9275 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9276 if(ret
< 0) goto err
;
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
;
9284 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9285 if(ret
< 0) goto err
;
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
;
9293 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9294 if(ret
< 0) goto err
;
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
;
9302 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9303 if(ret
< 0) goto err
;
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
;
9311 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9312 if(ret
< 0) goto err
;
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
;
9320 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9321 if(ret
< 0) goto err
;
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
;
9329 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9330 if(ret
< 0) goto err
;
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
;
9338 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9339 if(ret
< 0) goto err
;
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
;
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
;
9352 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9353 if(ret
< 0) goto err
;
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
;
9361 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9362 if(ret
< 0) goto err
;
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
;
9370 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9371 if(ret
< 0) goto err
;
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
;
9379 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9380 if(ret
< 0) goto err
;
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
;
9388 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9389 if(ret
< 0) goto err
;
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
;
9397 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9398 if(ret
< 0) goto err
;
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
;
9406 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9407 if(ret
< 0) goto err
;
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
;
9415 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9416 if(ret
< 0) goto err
;
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
;
9424 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
9425 if(ret
< 0) goto err
;
9429 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9430 if(ret
< 0) goto err
;
9434 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9435 if(ret
< 0) goto err
;
9439 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9440 if(ret
< 0) goto err
;
9444 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9445 if(ret
< 0) goto err
;
9449 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9450 if(ret
< 0) goto err
;
9454 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9455 if(ret
< 0) goto err
;
9459 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9460 if(ret
< 0) goto err
;
9464 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9465 if(ret
< 0) goto err
;
9469 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9470 if(ret
< 0) goto err
;
9474 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9475 if(ret
< 0) goto err
;
9479 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9480 if(ret
< 0) goto err
;
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
;
9488 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9489 if(ret
< 0) goto err
;
9492 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9493 if(ret
< 0) goto err
;
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
;
9501 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9502 if(ret
< 0) goto err
;
9505 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9506 if(ret
< 0) goto err
;
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
;
9514 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9515 if(ret
< 0) goto err
;
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
;
9523 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9524 if(ret
< 0) goto err
;
9527 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9528 if(ret
< 0) goto err
;
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
;
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
;
9542 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9543 if(ret
< 0) goto err
;
9547 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9548 if(ret
< 0) goto err
;
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
;
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
;
9562 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9563 if(ret
< 0) goto err
;
9567 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9568 if(ret
< 0) goto err
;
9572 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9573 if(ret
< 0) goto err
;
9577 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9578 if(ret
< 0) goto err
;
9582 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9583 if(ret
< 0) goto err
;
9587 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9588 if(ret
< 0) goto err
;
9592 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9593 if(ret
< 0) goto err
;
9596 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9597 if(ret
< 0) goto err
;
9601 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9602 if(ret
< 0) goto err
;
9605 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9606 if(ret
< 0) goto err
;
9610 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9611 if(ret
< 0) goto err
;
9614 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9615 if(ret
< 0) goto err
;
9619 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9620 if(ret
< 0) goto err
;
9623 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9624 if(ret
< 0) goto err
;
9628 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9629 if(ret
< 0) goto err
;
9632 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9633 if(ret
< 0) goto err
;
9637 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9638 if(ret
< 0) goto err
;
9641 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9642 if(ret
< 0) goto err
;
9646 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9647 if(ret
< 0) goto err
;
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
;
9655 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9656 if(ret
< 0) goto err
;
9659 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9660 if(ret
< 0) goto err
;
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
;
9668 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9669 if(ret
< 0) goto err
;
9672 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9673 if(ret
< 0) goto err
;
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
;
9681 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9682 if(ret
< 0) goto err
;
9685 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9686 if(ret
< 0) goto err
;
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
;
9694 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9695 if(ret
< 0) goto err
;
9698 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9699 if(ret
< 0) goto err
;
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
;
9707 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9708 if(ret
< 0) goto err
;
9711 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9712 if(ret
< 0) goto err
;
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
;
9720 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9721 if(ret
< 0) goto err
;
9724 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9725 if(ret
< 0) goto err
;
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
;
9733 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9734 if(ret
< 0) goto err
;
9737 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9738 if(ret
< 0) goto err
;
9742 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9743 if(ret
< 0) goto err
;
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
;
9751 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9752 if(ret
< 0) goto err
;
9755 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9756 if(ret
< 0) goto err
;
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
;
9764 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9765 if(ret
< 0) goto err
;
9768 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9769 if(ret
< 0) goto err
;
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
;
9777 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9778 if(ret
< 0) goto err
;
9781 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9782 if(ret
< 0) goto err
;
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
;
9790 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9791 if(ret
< 0) goto err
;
9794 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9795 if(ret
< 0) goto err
;
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
;
9803 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9804 if(ret
< 0) goto err
;
9807 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9808 if(ret
< 0) goto err
;
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
;
9816 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9817 if(ret
< 0) goto err
;
9820 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9821 if(ret
< 0) goto err
;
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
;
9829 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9830 if(ret
< 0) goto err
;
9833 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9834 if(ret
< 0) goto err
;
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
;
9842 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9843 if(ret
< 0) goto err
;
9846 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9847 if(ret
< 0) goto err
;
9851 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9852 if(ret
< 0) goto err
;
9856 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9857 if(ret
< 0) goto err
;
9861 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9862 if(ret
< 0) goto err
;
9866 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9867 if(ret
< 0) goto err
;
9871 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9872 if(ret
< 0) goto err
;
9876 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9877 if(ret
< 0) goto err
;
9881 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9882 if(ret
< 0) goto err
;
9886 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9887 if(ret
< 0) goto err
;
9891 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9892 if(ret
< 0) goto err
;
9896 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9897 if(ret
< 0) goto err
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
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
;
9951 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9952 if(ret
< 0) goto err
;
9956 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9957 if(ret
< 0) goto err
;
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
;
9966 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9967 if(ret
< 0) goto err
;
9971 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9972 if(ret
< 0) goto err
;
9976 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9977 if(ret
< 0) goto err
;
9981 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9982 if(ret
< 0) goto err
;
9986 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9987 if(ret
< 0) goto err
;
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
;
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
;
10001 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10002 if(ret
< 0) goto err
;
10006 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10007 if(ret
< 0) goto err
;
10011 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10012 if(ret
< 0) goto err
;
10016 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10017 if(ret
< 0) goto err
;
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
;
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
;
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
;
10036 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10037 if(ret
< 0) goto err
;
10041 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10042 if(ret
< 0) goto err
;
10046 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10047 if(ret
< 0) goto err
;
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
;
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
;
10061 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10062 if(ret
< 0) goto err
;
10066 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10067 if(ret
< 0) goto err
;
10071 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10072 if(ret
< 0) goto err
;
10076 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10077 if(ret
< 0) goto err
;
10081 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10082 if(ret
< 0) goto err
;
10086 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10087 if(ret
< 0) goto err
;
10091 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10092 if(ret
< 0) goto err
;
10096 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10097 if(ret
< 0) goto err
;
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
;
10105 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10106 if(ret
< 0) goto err
;
10109 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10110 if(ret
< 0) goto err
;
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
;
10118 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10119 if(ret
< 0) goto err
;
10122 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10123 if(ret
< 0) goto err
;
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
;
10131 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10132 if(ret
< 0) goto err
;
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
;
10140 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10141 if(ret
< 0) goto err
;
10144 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10145 if(ret
< 0) goto err
;
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
;
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
;
10159 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10160 if(ret
< 0) goto err
;
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
;
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
;
10174 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10175 if(ret
< 0) goto err
;
10179 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10180 if(ret
< 0) goto err
;
10184 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10185 if(ret
< 0) goto err
;
10189 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10190 if(ret
< 0) goto err
;
10194 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10195 if(ret
< 0) goto err
;
10199 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10200 if(ret
< 0) goto err
;
10204 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10205 if(ret
< 0) goto err
;
10209 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10210 if(ret
< 0) goto err
;
10214 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10215 if(ret
< 0) goto err
;
10219 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10220 if(ret
< 0) goto err
;
10224 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10225 if(ret
< 0) goto err
;
10229 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10230 if(ret
< 0) goto err
;
10233 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10234 if(ret
< 0) goto err
;
10238 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10239 if(ret
< 0) goto err
;
10242 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10243 if(ret
< 0) goto err
;
10247 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10248 if(ret
< 0) goto err
;
10251 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10252 if(ret
< 0) goto err
;
10256 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10257 if(ret
< 0) goto err
;
10260 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10261 if(ret
< 0) goto err
;
10265 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10266 if(ret
< 0) goto err
;
10269 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10270 if(ret
< 0) goto err
;
10274 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10275 if(ret
< 0) goto err
;
10278 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10279 if(ret
< 0) goto err
;
10283 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10284 if(ret
< 0) goto err
;
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
;
10292 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10293 if(ret
< 0) goto err
;
10296 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10297 if(ret
< 0) goto err
;
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
;
10305 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10306 if(ret
< 0) goto err
;
10309 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10310 if(ret
< 0) goto err
;
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
;
10318 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10319 if(ret
< 0) goto err
;
10322 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10323 if(ret
< 0) goto err
;
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
;
10331 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10332 if(ret
< 0) goto err
;
10335 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10336 if(ret
< 0) goto err
;
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
;
10344 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10345 if(ret
< 0) goto err
;
10348 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10349 if(ret
< 0) goto err
;
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
;
10357 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10358 if(ret
< 0) goto err
;
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
;
10366 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10367 if(ret
< 0) goto err
;
10370 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
10371 if(ret
< 0) goto err
;
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
;
10379 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10380 if(ret
< 0) goto err
;
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
;
10388 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10389 if(ret
< 0) goto err
;
10392 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
10393 if(ret
< 0) goto err
;
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
;
10401 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10402 if(ret
< 0) goto err
;
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
;
10410 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10411 if(ret
< 0) goto err
;
10414 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
10415 if(ret
< 0) goto err
;
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
;
10423 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10424 if(ret
< 0) goto err
;
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
;
10432 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10433 if(ret
< 0) goto err
;
10436 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
10437 if(ret
< 0) goto err
;
10441 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10442 if(ret
< 0) goto err
;
10446 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10447 if(ret
< 0) goto err
;
10451 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10452 if(ret
< 0) goto err
;
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
;
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
;
10465 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10466 if(ret
< 0) goto err
;
10469 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10470 if(ret
< 0) goto err
;
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
;
10478 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10479 if(ret
< 0) goto err
;
10482 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10483 if(ret
< 0) goto err
;
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
;
10491 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10492 if(ret
< 0) goto err
;
10495 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10496 if(ret
< 0) goto err
;
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
;
10504 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10505 if(ret
< 0) goto err
;
10508 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10509 if(ret
< 0) goto err
;
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
;
10517 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10518 if(ret
< 0) goto err
;
10521 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10522 if(ret
< 0) goto err
;
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
;
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
;
10535 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10536 if(ret
< 0) goto err
;
10539 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10540 if(ret
< 0) goto err
;
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
;
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
;
10553 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10554 if(ret
< 0) goto err
;
10557 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10558 if(ret
< 0) goto err
;
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
;
10566 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10567 if(ret
< 0) goto err
;
10570 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10571 if(ret
< 0) goto err
;
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
;
10579 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10580 if(ret
< 0) goto err
;
10583 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10584 if(ret
< 0) goto err
;
10588 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10589 if(ret
< 0) goto err
;
10593 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10594 if(ret
< 0) goto err
;
10598 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10599 if(ret
< 0) goto err
;
10603 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10604 if(ret
< 0) goto err
;
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
;
10612 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10613 if(ret
< 0) goto err
;
10616 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10617 if(ret
< 0) goto err
;
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
;
10625 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10626 if(ret
< 0) goto err
;
10629 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10630 if(ret
< 0) goto err
;
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
;
10638 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10639 if(ret
< 0) goto err
;
10642 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10643 if(ret
< 0) goto err
;
10647 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10648 if(ret
< 0) goto err
;
10652 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10653 if(ret
< 0) goto err
;
10657 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10658 if(ret
< 0) goto err
;
10662 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10663 if(ret
< 0) goto err
;
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
;
10671 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10672 if(ret
< 0) goto err
;
10675 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10676 if(ret
< 0) goto err
;
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
;
10684 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10685 if(ret
< 0) goto err
;
10688 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10689 if(ret
< 0) goto err
;
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
;
10697 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10698 if(ret
< 0) goto err
;
10701 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10702 if(ret
< 0) goto err
;
10706 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10707 if(ret
< 0) goto err
;
10711 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10712 if(ret
< 0) goto err
;
10716 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10717 if(ret
< 0) goto err
;
10721 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10722 if(ret
< 0) goto err
;
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
;
10730 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10731 if(ret
< 0) goto err
;
10734 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10735 if(ret
< 0) goto err
;
10739 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10740 if(ret
< 0) goto err
;
10744 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10745 if(ret
< 0) goto err
;
10749 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10750 if(ret
< 0) goto err
;
10754 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10755 if(ret
< 0) goto err
;
10759 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10760 if(ret
< 0) goto err
;
10764 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10765 if(ret
< 0) goto err
;
10770 /* END OF MICRODIA 6288 START STREAM */
10774 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
10779 * @brief From UsbSnoop-plugin-parsed.log
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
)
10796 0x00, 0x1a, 0x34, 0x27, 0x20, 0xa0, 0x34, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00
10800 0x08, 0x22, 0x44, 0x63, 0x7d, 0x92, 0xa3, 0xaf, 0xbc, 0xc4, 0xcd, 0xd5, 0xdc, 0xe1, 0xe8, 0xef,
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
10850 ret
+= usb_microdia_control_write(dev
, 0xf1, buf
, 1); // Reset cam
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");
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");
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);
10886 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1);
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);
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);
10904 for (i
= 0; i
< 2; i
++){
10905 ret
+= usb_microdia_control_write(dev
, 0x08, om6802_sensor
[i
], 8);
10910 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1);
10913 for (i
= 2; i
< 11; i
++){
10914 ret
+= usb_microdia_control_write(dev
, 0x08, om6802_sensor
[i
], 8);
10919 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1);
10920 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1); // URB 1780
10923 ret
+= usb_microdia_control_write(dev
, 0x15, buf
, 1);
10926 ret
+= usb_microdia_control_write(dev
, 0x16, buf
, 1);
10929 ret
+= usb_microdia_control_write(dev
, 0x12, buf
, 1);
10932 ret
+= usb_microdia_control_write(dev
, 0x13, buf
, 1);
10935 ret
+= usb_microdia_control_write(dev
, 0x18, buf
, 1);
10938 ret
+= usb_microdia_control_write(dev
, 0xd2, buf
, 1);
10941 ret
+= usb_microdia_control_write(dev
, 0xd3, buf
, 1);
10944 ret
+= usb_microdia_control_write(dev
, 0xc6, buf
, 1);
10945 ret
+= usb_microdia_control_write(dev
, 0xc7, buf
, 1);
10948 ret
+= usb_microdia_control_write(dev
, 0xc8, buf
, 1);
10951 ret
+= usb_microdia_control_write(dev
, 0xc9, buf
, 1);
10954 ret
+= usb_microdia_control_write(dev
, 0x18, buf
, 1);
10957 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
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);
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);
10977 ret
+= usb_microdia_control_write(dev
, 0x9a, buf
, 1);
10980 ret
+= usb_microdia_control_write(dev
, 0x99, buf
, 1);
10982 ret
+= usb_microdia_control_write(dev
, 0x84, data_21
, 21); // URB 1811
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);
10990 for (i
= 11; i
< 15; i
++){
10991 ret
+= usb_microdia_control_write(dev
, 0x08, om6802_sensor
[i
], 8);
10996 ret
+= usb_microdia_control_write(dev
, 0x05, buf
, 1);
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);
11010 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1);
11013 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
11016 for (i
= 15; i
< 19; i
++){
11017 ret
+= usb_microdia_control_write(dev
, 0x08, om6802_sensor
[i
], 8);
11022 ret
+= usb_microdia_control_write(dev
, 0x05, buf
, 1);
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
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
11039 ret
+= usb_microdia_control_write(dev
, 0x18, buf
, 1);
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);
11049 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
11051 // Command to start streaming
11052 // Sensor on, clk 24MHz, video enabled
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
11061 UDIA_DEBUG("Some read or write were not successful in Start Stream\n");
11067 int dev_microdia_stop_stream(struct usb_microdia
*dev
)
11070 if(dev
&& dev
->stop_stream
)
11071 ret
= dev
->stop_stream(dev
);
11077 * @brief From stop.htm
11085 * For SN9C201 with MI1310.
11086 * This function has not been tested yet.
11088 int microdia_6242_stop_stream(struct usb_microdia
*dev
)
11092 __u8 only10c0
[3] = {0x0d, 0x00, 0x00};
11095 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
11098 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
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]);
11107 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
11110 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
11113 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
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:
11125 * usb_microdia_control_write(dev, 0x1066, buf, 1);
11132 * @brief From stopstream.log
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
)
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.
11157 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
11160 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
11163 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
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);
11176 int microdia_624f_stop_stream(struct usb_microdia
*dev
)
11184 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
11185 if(ret
< 0) goto err
;
11189 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
11190 if(ret
< 0) goto err
;
11194 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
11195 if(ret
< 0) goto err
;
11199 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
11200 if(ret
< 0) goto err
;
11204 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
11205 if(ret
< 0) goto err
;
11209 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
11210 if(ret
< 0) goto err
;
11216 ret
= usb_microdia_control_write(dev
, command
, buf
, 3);
11217 if(ret
< 0) goto err
;
11220 ret
= usb_microdia_control_read(dev
, command
, buf
, 1);
11221 if(ret
< 0) goto err
;
11224 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
11225 if(ret
< 0) goto err
;
11230 UDIA_ERROR("command %x failed (%d)!\n", command
, ret
);
11234 int microdia_6260_stop_stream(struct usb_microdia
*dev
)
11240 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
11242 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
11244 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
11246 ret
= usb_microdia_control_write(dev
, 0x1007, buf
, 1);
11248 ret
= usb_microdia_control_write(dev
, 0x1006, buf
, 1);
11252 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 3);
11254 ret
= usb_microdia_control_write(dev
, 0x1066, buf
, 1);
11255 ret
= usb_microdia_control_read(dev
, 0x1045, buf
, 1);
11257 ret
= usb_microdia_control_write(dev
, 0x1045, buf
, 1);
11259 ret
= usb_microdia_control_write(dev
, 0x10c8, buf
, 1);
11261 ret
= usb_microdia_control_write(dev
, 0x1020, buf
, 1);
11267 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
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
)
11286 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
11289 ret
+= usb_microdia_control_write(dev
, 0x1007, buf
, 1); // URB 3541
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
11295 ret
+= usb_microdia_control_write(dev
, 0x1061, buf
, 1); // URB 3544
11296 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
11299 ret
+= usb_microdia_control_write(dev
, 0x1007, buf
, 1); // URB 3541
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)
11321 ret
+= usb_microdia_control_write(dev
, 0x1066, buf
, 1); // URB 3550
11325 UDIA_INFO("One ore more errors occured while stopping stream !\n");
11332 int microdia_627b_stop_stream(struct usb_microdia
*dev
)
11340 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11346 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11353 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11354 //if(ret < 0) goto err;
11358 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11359 //if(ret < 0) goto err;
11364 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11371 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11372 //if(ret < 0) goto err;
11376 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11377 //if(ret < 0) goto err;
11382 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11388 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11393 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
11394 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
11400 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11406 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
11411 * @brief From UsbSnoop-plugin-parsed.log
11415 * @returns 0 (OK) or <0 (Error)
11417 * @author Vincent, Kuzja
11419 int microdia_6288_stop_stream(struct usb_microdia
*dev
)
11427 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11428 if(ret
< 0) goto err
;
11432 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11433 if(ret
< 0) goto err
;
11437 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11438 if(ret
< 0) goto err
;
11442 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11443 if(ret
< 0) goto err
;
11447 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11448 if(ret
< 0) goto err
;
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
;
11457 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11458 if(ret
< 0) goto err
;
11462 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
11467 * @brief From UsbSnoop-plugin-parsed.log
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
)
11482 ret
+= usb_microdia_control_read(dev
, 0x00, &data
, 1);
11484 // Stop stream command
11486 ret
+= usb_microdia_control_write(dev
, 0x01, &data
, 1);
11489 ret
+= usb_microdia_control_write(dev
, 0xf1, &data
, 1);
11492 ret
+= usb_microdia_control_write(dev
, 0xf1, &data
, 1);
11495 UDIA_DEBUG("Some read or write were not successful in Stop Stream\n");
11502 int microdia_624f_set_exposure(struct usb_microdia
*dev
)
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
);
11517 int microdia_624f_flip_detect(struct usb_microdia
*dev
)
11522 ret
= usb_microdia_control_read(dev
, 0x1009, &val
, 1);
11523 if (ret
< 0) return -EAGAIN
;
11525 dev
->vsettings
.vflip
= 1;
11528 dev
->vsettings
.vflip
= 0;
11534 int microdia_6260_flip_detect(struct usb_microdia
*dev
)
11536 const __u8 flip_bit
= 0x01;
11539 static __u8 flip_reg
= flip_bit
;
11542 ret
= usb_microdia_control_read(dev
, 0x1009, &val
, 1);
11545 if (flip_reg
!= (val
& flip_bit
)) {
11546 if (val
& flip_bit
)
11550 ret
= ov7670_auto_flip(dev
, vflip
);
11551 flip_reg
= (val
& flip_bit
);