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 or 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
)
242 __u8 buf1100
[64] = { 0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
243 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
244 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
245 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
246 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
247 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
248 0x4f, 0x54, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
249 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 */
262 /* UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: */
263 /* UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: */
267 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 14 */
272 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
277 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
282 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* cf */
288 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
293 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
298 ret
= usb_microdia_control_read(dev
, reg
, buf24
, 7); /* URB 20 << 20 00 ff 81 00 00 00 */
303 buf24
[0] = 0x80; buf24
[1] = 0xa0;
304 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 2);
309 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
314 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
318 buf24
[0] = 0x40; buf24
[1] = 0x30; buf24
[2] = 0x20; buf24
[3] = 0x10;
320 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
324 buf24
[0] = 0x80; buf24
[1] = 0x5d; buf24
[2] = 0x00; buf24
[3] = 0x00;
325 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x00;
327 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 9);
332 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
337 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
341 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x00;
342 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 3);
346 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
348 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
352 buf24
[0] = 0x06; buf24
[1] = 0x4c; buf24
[2] = 0x08;
353 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 3);
358 buf24
[0] = 0x00; buf24
[1] = 0x20; buf24
[2] = 0x20; buf24
[3] = 0x20;
359 buf24
[4] = 0x20; buf24
[5] = 0x00; buf24
[6] = 0x24; buf24
[7] = 0x3b;
360 buf24
[8] = 0x4f; buf24
[9] = 0x61; buf24
[10] = 0x71; buf24
[11] = 0x80;
361 buf24
[12] = 0x8f; buf24
[13] = 0x9d; buf24
[14] = 0xab; buf24
[15] = 0xb8;
363 buf24
[16] = 0xc4; buf24
[17] = 0xd1; buf24
[18] = 0xdd; buf24
[19] = 0xe9;
364 buf24
[20] = 0xf4; buf24
[21] = 0xff;
365 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 22); /* URB 30 */
370 buf24
[0] = 0x00; buf24
[1] = 0x00;
371 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 2);
376 buf24
[0] = 0x60; buf24
[1] = 0x28; buf24
[2] = 0x00; buf24
[3] = 0x08;
377 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x00;
379 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 9);
385 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
391 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
396 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
397 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
398 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 35..90 --> */
402 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b0 */
405 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b4 */
409 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x0d; buf24
[3] = 0x00;
410 buf24
[4] = 0x01; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
411 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
415 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b0 */
418 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b4 */
422 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x0d; buf24
[3] = 0x00;
423 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
424 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
428 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b0 */
431 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b4 */
435 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x01; buf24
[3] = 0x00;
436 buf24
[4] = 0x0e; buf24
[5] = 0x00; buf24
[6] = 0x14; buf24
[7] = 0x10;
437 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
441 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // URB 45 << d0 */
444 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
448 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x03; buf24
[3] = 0x03;
449 buf24
[4] = 0xc1; buf24
[5] = 0x05; buf24
[6] = 0x01; buf24
[7] = 0x10;
450 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
454 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
457 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
461 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x05; buf24
[3] = 0x00;
462 buf24
[4] = 0x83; buf24
[5] = 0x00; buf24
[6] = 0x06; buf24
[7] = 0x10;
463 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
467 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
470 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
474 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x0d; buf24
[3] = 0x00;
475 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
476 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
480 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
483 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
487 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x09; buf24
[3] = 0x00;
488 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
489 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
493 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
496 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
500 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x0b; buf24
[3] = 0x00;
501 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
502 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
506 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
509 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
513 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x11; buf24
[3] = 0x00;
514 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
515 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
519 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
522 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
526 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x1e; buf24
[3] = 0x80;
527 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
528 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 65 */
532 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
535 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
539 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
540 buf24
[4] = 0x05; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
541 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
545 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
548 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
552 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2b; buf24
[3] = 0x00;
553 buf24
[4] = 0x08; buf24
[5] = 0x00; buf24
[6] = 0x10; buf24
[7] = 0x10;
554 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
558 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
561 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
565 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2d; buf24
[3] = 0x00;
566 buf24
[4] = 0x14; buf24
[5] = 0x00; buf24
[6] = 0x08; buf24
[7] = 0x10;
567 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
571 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
574 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
578 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x33; buf24
[3] = 0x00;
579 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
580 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 77 */
584 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 94 */
588 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x5f; buf24
[3] = 0x89;
589 buf24
[4] = 0x04; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
590 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 79 */
594 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
595 if(ret
< 0) goto err
;
596 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
600 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x60; buf24
[3] = 0x00;
601 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
602 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
606 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
609 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
613 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x62; buf24
[3] = 0x04;
614 buf24
[4] = 0x98; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
615 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 85 */
619 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
622 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
626 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x68; buf24
[3] = 0x00;
627 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
628 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
632 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
635 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
640 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* URB 91 // << 5d*/
644 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
649 buf24
[0] = 0x90; buf24
[1] = 0x50; buf24
[2] = 0x00; buf24
[3] = 0x00;
650 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
651 for(i
=93; i
<=108; i
++){
652 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 93..108 */
655 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 9c */
659 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
663 buf24
[0] = 0x92; /* // change only 1st value */
664 for(i
=110; i
<=126; i
++){
665 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 110..126 */
668 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 9e */
674 ret
= usb_microdia_control_read(dev
, reg
, buf24
, 5); /* // << ff ff ff ff ff */
680 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
686 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
690 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
696 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
700 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
704 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
710 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
716 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 135..138 */
720 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
724 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
728 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
733 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
734 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
735 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 139 */
739 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
742 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
747 buf24
[0] = 0x02; buf24
[1] = 0x00; buf24
[2] = 0x02; buf24
[3] = 0x00;
748 buf24
[4] = 0x28; buf24
[5] = 0x3c;
749 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 6); /* URB 142 */
754 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
756 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
762 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
767 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x6a; buf24
[3] = 0x50;
768 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
773 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x50; buf24
[3] = 0x3c;
774 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
780 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
786 for(i
=148; i
<=149; i
++){
787 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
794 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 150 */
800 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
806 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
812 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 153..163 */
815 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 38 */
819 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
822 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 39 */
826 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
829 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 3a */
833 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
836 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << bb */
840 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
843 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 3c */
847 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
852 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x06; buf24
[3] = 0x00;
853 buf24
[4] = 0xf2; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
854 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 164..169 */
858 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
861 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
865 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x05; buf24
[3] = 0x00;
866 buf24
[4] = 0x13; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
867 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
871 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
874 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
880 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
886 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
892 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
898 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
903 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
908 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
912 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
918 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
923 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x00; buf24
[3] = 0x00;
924 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
929 for (i
= 0; i
< 48; i
++)
930 buf64
[i
] = 0; /* // zeroes */
931 ret
= usb_microdia_control_write(dev
, reg
, buf64
, 48); /* URB 195 */
936 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
937 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
938 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 200 */
942 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
945 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
951 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
957 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x20; buf24[3] = 0x11;
958 buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
960 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 204..206 */
964 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b0 */
967 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
973 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
978 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x09; buf24
[3] = 0x03;
979 buf24
[4] = 0xe8; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
980 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 208..224 */
984 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
987 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
991 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
992 buf24
[4] = 0x03; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
993 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
997 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1000 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1004 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2b; buf24
[3] = 0x00;
1005 buf24
[4] = 0x10; buf24
[5] = 0x00; buf24
[6] = 0x10; buf24
[7] = 0x10;
1006 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 214 */
1010 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1013 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1017 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2d; buf24
[3] = 0x00;
1018 buf24
[4] = 0x10; buf24
[5] = 0x00; buf24
[6] = 0x10; buf24
[7] = 0x10;
1019 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1023 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1026 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1030 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x33; buf24
[3] = 0x00;
1031 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1032 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1033 if(ret
< 0) goto err
;
1035 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 94 */
1039 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
1040 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1041 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1045 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1048 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1053 buf24
[0] = 0x2d; buf24
[1] = 0x2d; buf24
[2] = 0x3a; buf24
[3] = 0x05;
1054 buf24
[4] = 0x04; buf24
[5] = 0x3f;
1055 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 6);
1059 buf24
[0] = 0x28; buf24
[1] = 0xd8; buf24
[2] = 0x14; buf24
[3] = 0xec;
1060 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1064 buf24
[0] = 0x32; buf24
[1] = 0xdd; buf24
[2] = 0x2d; buf24
[3] = 0xdd;
1065 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1070 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
1071 buf24
[4] = 0x03; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1072 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 232..242 */
1076 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1079 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1083 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2c; buf24
[3] = 0x00;
1084 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x1d; buf24
[7] = 0x10;
1085 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1089 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1092 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1096 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x30; buf24
[3] = 0x00;
1097 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1098 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1102 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 94 */
1106 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
1107 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1108 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1112 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1115 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1121 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1125 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1130 ret
= usb_microdia_control_write(dev
, reg
, buf1100
, 64); /* URB 249 (see also 509/510) */
1134 reg
= 0x1140; /* 00000000: */
1135 buf64
[0] = 0x0d; buf64
[1] = 0x11; buf64
[2] = 0x11; buf64
[3] = 0x15;
1136 buf64
[4] = 0x11; buf64
[5] = 0x15; buf64
[6] = 0x26; buf64
[7] = 0x15;
1137 buf64
[8] = 0x15; buf64
[9] = 0x26; buf64
[10] = 0x54; buf64
[11] = 0x36;
1138 buf64
[12] = 0x2e; buf64
[13] = 0x36; buf64
[14] = 0x54; buf64
[15] = 0x54; /* 00000010: .. 00000030: 0x54 */
1139 for(i
=16; i
<=63; i
++) buf64
[i
] = 0x54;
1140 ret
= usb_microdia_control_write(dev
, reg
, buf64
, 64); /* URB 250 */
1146 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1150 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1156 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1162 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 254..257 */
1166 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1170 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1174 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1179 buf24
[0] = 0x02; buf24
[1] = 0x00; buf24
[2] = 0x02; buf24
[3] = 0x00;
1180 buf24
[4] = 0x28; buf24
[5] = 0x3c;
1181 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 6);
1186 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
1188 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
1194 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1199 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x6a; buf24
[3] = 0x50;
1200 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1204 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x50; buf24
[3] = 0x3c;
1205 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1211 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1216 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1221 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1226 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1231 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1236 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1241 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1245 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1250 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1255 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1260 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1267 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 274..284 */
1270 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 38 */
1274 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1277 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 39 */
1281 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1284 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 3a */
1288 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1291 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << bb */
1295 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1298 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 3c */
1302 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1307 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x06; buf24
[3] = 0x00;
1308 buf24
[4] = 0xf2; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1309 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 285..295 */
1313 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1316 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1320 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x05; buf24
[3] = 0x00;
1321 buf24
[4] = 0x13; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1322 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1326 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1329 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1333 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x00; buf24
[3] = 0x00;
1334 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1335 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1339 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 94 */
1343 buf24
[0] = 0xa2; buf24
[1] = 0x5d; buf24
[2] = 0x00; buf24
[3] = 0x00;
1344 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1345 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1349 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << a2 */
1352 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << a6 */
1357 ret
= usb_microdia_control_read(dev
, reg
, buf24
, 5); /* URB 296 // << 00 00 00 84 31 */
1363 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1367 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1372 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
1373 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1374 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1378 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1381 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1387 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1392 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1397 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1402 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1407 buf24
[0] = 0x98; buf24
[1] = 0xef; buf24
[2] = 0x11;
1408 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 3);
1412 /* UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1413 // URB 307 <<< GETTING SELECT_INTERFACE Interface: AlternateSetting = 0
1414 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1419 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1423 /* UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1424 // URB 310 <<< GETTING SELECT_INTERFACE Interface: AlternateSetting = 8
1425 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1427 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 312 */
1431 /* UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1432 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1437 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 314 */
1442 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1447 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1451 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << ef */
1455 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1460 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1465 ret
= usb_microdia_control_read(dev
, reg
, buf24
, 7); /* URB 320 // << a0 00 ff 81 00 00 00 */
1469 buf24
[0] = 0x80; buf24
[1] = 0xa0;
1470 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 2);
1476 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1481 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1486 buf24
[0] = 0x40; buf24
[1] = 0x30; buf24
[2] = 0x20; buf24
[3] = 0x10;
1488 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
1493 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
1494 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1496 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 9);
1503 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1508 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1513 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x00;
1514 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 3);
1519 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
1521 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
1526 buf24
[0] = 0x06; buf24
[1] = 0x4c; buf24
[2] = 0x08;
1527 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 3);
1533 buf24
[0] = 0x00; buf24
[1] = 0x20; buf24
[2] = 0x20; buf24
[3] = 0x20;
1534 buf24
[4] = 0x20; buf24
[5] = 0x00; buf24
[6] = 0x24; buf24
[7] = 0x3b;
1535 buf24
[8] = 0x4f; buf24
[9] = 0x61; buf24
[10] = 0x71; buf24
[11] = 0x80;
1536 buf24
[12] = 0x8f; buf24
[13] = 0x9d; buf24
[14] = 0xab; buf24
[15] = 0xb8;
1538 buf24
[16] = 0xc4; buf24
[17] = 0xd1; buf24
[18] = 0xdd; buf24
[19] = 0xe9;
1539 buf24
[20] = 0xf4; buf24
[21] = 0xff;
1540 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 22); /* URB 330 */
1545 buf24
[0] = 0x00; buf24
[1] = 0x00;
1546 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 2);
1551 buf24
[0] = 0x60; buf24
[1] = 0x28; buf24
[2] = 0x00; buf24
[3] = 0x08;
1552 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x00;
1554 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 9);
1560 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1565 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1570 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
1571 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1572 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 335..390 */
1576 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1579 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1583 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x0d; buf24
[3] = 0x00;
1584 buf24
[4] = 0x01; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1585 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1589 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1592 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1596 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x0d; buf24
[3] = 0x00;
1597 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1598 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1602 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1605 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1609 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x01; buf24
[3] = 0x00;
1610 buf24
[4] = 0x0e; buf24
[5] = 0x00; buf24
[6] = 0x14; buf24
[7] = 0x10;
1611 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 344 */
1615 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1618 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1622 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x03; buf24
[3] = 0x03;
1623 buf24
[4] = 0xc1; buf24
[5] = 0x05; buf24
[6] = 0x01; buf24
[7] = 0x10;
1624 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1628 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1631 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1635 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x05; buf24
[3] = 0x00;
1636 buf24
[4] = 0x83; buf24
[5] = 0x00; buf24
[6] = 0x06; buf24
[7] = 0x10;
1637 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1641 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1644 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1648 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x0d; buf24
[3] = 0x00;
1649 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1650 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1654 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1657 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1661 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x09; buf24
[3] = 0x00;
1662 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1663 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 356 */
1667 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1668 if(ret
< 0) goto err
;
1669 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1673 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x0b; buf24
[3] = 0x00;
1674 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1675 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1679 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1682 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1686 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x11; buf24
[3] = 0x00;
1687 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1688 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1692 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1695 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1699 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x1e; buf24
[3] = 0x80;
1700 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1701 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 365 */
1705 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1708 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1712 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
1713 buf24
[4] = 0x05; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1714 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1718 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1721 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1725 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2b; buf24
[3] = 0x00;
1726 buf24
[4] = 0x08; buf24
[5] = 0x00; buf24
[6] = 0x10; buf24
[7] = 0x10;
1727 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1731 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1734 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1738 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2d; buf24
[3] = 0x00;
1739 buf24
[4] = 0x14; buf24
[5] = 0x00; buf24
[6] = 0x08; buf24
[7] = 0x10;
1740 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1744 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1747 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1751 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x33; buf24
[3] = 0x00;
1752 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1753 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 377 */
1757 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 94 */
1761 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x5f; buf24
[3] = 0x89;
1762 buf24
[4] = 0x04; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1763 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1767 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1770 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1774 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x60; buf24
[3] = 0x00;
1775 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1776 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1780 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1783 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
1787 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x62; buf24
[3] = 0x04;
1788 buf24
[4] = 0x98; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1789 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 385 */
1793 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1796 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1800 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x68; buf24
[3] = 0x00;
1801 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1802 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1806 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1809 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1815 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 391 */
1819 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1825 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1829 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1833 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1839 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1845 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 397..400 */
1849 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1853 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1857 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1862 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
1863 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1864 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 401 */
1868 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1871 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1876 buf24
[0] = 0x02; buf24
[1] = 0x00; buf24
[2] = 0x02; buf24
[3] = 0x00;
1877 buf24
[4] = 0x28; buf24
[5] = 0x3c;
1878 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 6);
1882 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
1884 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
1890 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1895 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x6a; buf24
[3] = 0x50;
1896 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1900 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x50; buf24
[3] = 0x3c;
1901 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1907 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1913 for(i
=410; i
<=411; i
++){
1914 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1921 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1926 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1931 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1937 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 415..425 */
1940 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 38 */
1944 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1947 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 39 */
1951 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1954 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 3a */
1958 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1961 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << bb */
1965 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1968 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 3c */
1972 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1978 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x06; buf24
[3] = 0x00;
1979 buf24
[4] = 0xf2; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1980 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 426..431 */
1984 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1987 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1991 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x05; buf24
[3] = 0x00;
1992 buf24
[4] = 0x13; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1993 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1997 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
2000 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
2006 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2012 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2018 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2024 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2029 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2035 for(i
=453; i
<454; i
++){
2036 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2043 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2048 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x00; buf24
[3] = 0x00;
2049 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
2054 for (i
= 0; i
< 48; i
++)
2055 buf64
[i
] = 0; /* // zeroes */
2056 ret
= usb_microdia_control_write(dev
, reg
, buf64
, 48); /* URB 457 */
2061 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
2062 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2063 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 462 */
2067 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
2070 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
2076 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2081 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
2082 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2083 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 466 */
2087 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
2090 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
2096 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2101 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
2102 buf24
[4] = 0x03; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2103 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 470..483 */
2107 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
2110 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
2114 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2b; buf24
[3] = 0x00;
2115 buf24
[4] = 0x10; buf24
[5] = 0x00; buf24
[6] = 0x10; buf24
[7] = 0x10;
2116 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2120 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
2123 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
2127 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2d; buf24
[3] = 0x00;
2128 buf24
[4] = 0x10; buf24
[5] = 0x00; buf24
[6] = 0x10; buf24
[7] = 0x10;
2129 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2133 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
2136 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
2140 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x33; buf24
[3] = 0x00;
2141 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2142 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 479 */
2146 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 94 */
2150 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
2151 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2152 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2156 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
2159 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
2164 buf24
[0] = 0x2d; buf24
[1] = 0x2d; buf24
[2] = 0x3a; buf24
[3] = 0x05;
2165 buf24
[4] = 0x04; buf24
[5] = 0x3f;
2166 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 6);
2170 buf24
[0] = 0x28; buf24
[1] = 0xd8; buf24
[2] = 0x14; buf24
[3] = 0xec;
2171 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
2175 buf24
[0] = 0x32; buf24
[1] = 0xdd; buf24
[2] = 0x2d; buf24
[3] = 0xdd;
2176 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
2181 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
2182 buf24
[4] = 0x03; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2183 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 491..502 */
2187 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
2190 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
2194 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2c; buf24
[3] = 0x00;
2195 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x1d; buf24
[7] = 0x10;
2196 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2200 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 495: d0 */
2203 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 496: d0 */
2206 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
2210 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x30; buf24
[3] = 0x00;
2211 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2212 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2216 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 94 */
2220 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
2221 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2222 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2226 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
2229 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
2235 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2239 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2244 ret
= usb_microdia_control_write(dev
, reg
, buf1100
, 64); /* URB 509 (see also 249/250) */
2250 buf64
[0] = 0x0d; buf64
[1] = 0x11; buf64
[2] = 0x11; buf64
[3] = 0x15;
2251 buf64
[4] = 0x11; buf64
[5] = 0x15; buf64
[6] = 0x26; buf64
[7] = 0x15;
2252 buf64
[8] = 0x15; buf64
[9] = 0x26; buf64
[10] = 0x54; buf64
[11] = 0x36;
2253 buf64
[12] = 0x2e; buf64
[13] = 0x36; buf64
[14] = 0x54; buf64
[15] = 0x54;
2254 /* // 00000010: .. 00000030: 0x54 */
2255 for(i
=16; i
<=63; i
++) buf64
[i
] = 0x54;
2256 ret
= usb_microdia_control_write(dev
, reg
, buf64
, 64); /* URB 510 */
2262 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2266 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2272 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2278 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 514..517 */
2282 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2286 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2290 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2295 buf24
[0] = 0x02; buf24
[1] = 0x00; buf24
[2] = 0x02; buf24
[3] = 0x00;
2296 buf24
[4] = 0x28; buf24
[5] = 0x3c;
2297 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 6);
2300 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
2302 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
2306 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2311 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x6a; buf24
[3] = 0x50;
2312 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
2315 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x50; buf24
[3] = 0x3c;
2316 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
2320 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2325 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2330 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2335 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2340 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2345 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2351 for(i
=529; i
<=530; i
++){
2352 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2359 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2364 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2369 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2375 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 534..544 */
2378 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 38 */
2382 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2385 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 39 */
2389 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2392 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 3a */
2396 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2399 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << bb */
2403 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2406 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 3c */
2410 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2415 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x06; buf24
[3] = 0x00;
2416 buf24
[4] = 0xf2; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2417 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 545..555 */
2421 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
2424 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
2428 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x05; buf24
[3] = 0x00;
2429 buf24
[4] = 0x13; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2430 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2434 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
2437 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
2441 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x00; buf24
[3] = 0x00;
2442 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2443 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2447 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 94 */
2451 buf24
[0] = 0xa2; buf24
[1] = 0x5d; buf24
[2] = 0x00; buf24
[3] = 0x00;
2452 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2453 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2457 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << a2 */
2460 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << a6 */
2465 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x00; buf24
[3] = 0x84;
2467 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
2473 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 557 */
2477 /* UNKNOWN -- URB_FUNCTION_RESET_PIPE:
2478 // UNKNOWN -- URB_FUNCTION_RESET_PIPE:
2479 // UNKNOWN -- URB_FUNCTION_GET_CURRENT_FRAME_NUMBER:
2480 // UNKNOWN -- URB_FUNCTION_GET_CURRENT_FRAME_NUMBER:
2481 // URB 560 >>> SENDING ISO REQUEST
2483 UDIA_INFO("...start function completed without errors.\n");
2486 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg
, ret
);
2491 * @brief From stop-close-amcap.log
2499 * For SN9C201 with MI1300. Comments from parser-usbsnoop(updated_13Mar2008).pl output
2502 int microdia_6240_stop_stream(struct usb_microdia
*dev
)
2507 UDIA_INFO("Stopping camera...\n");
2510 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 25319 */
2511 UDIA_INFO("...stop: write %x, ret = %d\n",buf
[0],ret
);
2513 buf
[0]=0xb0; buf
[1]=0x5d; buf
[2]=0x07; buf
[3]=0x00;
2514 buf
[4]=0x00; buf
[5]=0x00; buf
[6]=0x00; buf
[7]=0x10;
2515 ret
+= usb_microdia_control_write(dev
, 0x10c0, buf
, 8); /* URB 25320 */
2516 UDIA_INFO("...stop: write buf[8], ret = %d\n",ret
);
2518 ret
+= usb_microdia_control_read(dev
, 0x10c0, buf
, 1); /* URB 25321 << b0 */
2519 UDIA_INFO("...stop: read %x, ret = %d\n",buf
[0],ret
);
2521 ret
+= usb_microdia_control_read(dev
, 0x10c0, buf
, 1); /* URB 25322 << b4 */
2522 UDIA_INFO("...stop: read %x, ret = %d\n",buf
[0],ret
);
2525 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 25323 */
2526 UDIA_INFO("...stop: write %x, ret = %d\n",buf
[0],ret
);
2529 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 25324 */
2530 UDIA_INFO("...stop: write %x, ret = %d\n",buf
[0],ret
);
2533 ret
+= usb_microdia_control_write(dev
, 0x1007, buf
, 1); /* URB 25325 */
2534 UDIA_INFO("...stop: write %x, ret = %d\n",buf
[0],ret
);
2537 ret
+= usb_microdia_control_write(dev
, 0x1006, buf
, 1); /* URB 25326 */
2538 UDIA_INFO("...stop: write %x, ret = %d\n",buf
[0],ret
);
2540 buf
[0]=0x98; buf
[1]=0xef; buf
[2]=0x11;
2541 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 3); /* URB 25327 */
2542 UDIA_INFO("...stop: write buf[3], ret = %d\n",ret
);
2544 /* UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: (URB 5009)
2545 // URB 25328 <<< GETTING SELECT_INTERFACE Interface: AlternateSetting = 0
2546 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: (URB 25329)
2550 ret
+= usb_microdia_control_write(dev
, 0x1066, buf
, 1); /* URB 25330 */
2551 UDIA_INFO("...stop: write %x, ret = %d\n",buf
[0],ret
);
2554 UDIA_ERROR("One ore more errors occured during stop sequence !\n");
2562 * @brief From init.sequence.log
2570 * For SN9C201 with SOI968.
2571 * Tests showed this function is actually unnecessary.
2572 * Nevertheless the reads may give us valuable values we don't know about yet.
2574 int microdia_624e_initialize(struct usb_microdia
*dev
)
2578 usb_microdia_control_read(dev
, 0x130d, &buf
, 1);
2579 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
2585 * @brief From UsbSnoop-plugin-parsed.log
2591 int microdia_624f_initialize(struct usb_microdia
*dev
)
2593 /* Do nothing here */
2598 * @brief From UsbSnoop-plugin-parsed.log
2604 int microdia_6260_initialize(struct usb_microdia
*dev
)
2608 usb_microdia_control_read(dev
, 0x130d, &buf
, 1);
2609 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
2611 usb_microdia_control_write(dev
, 0x10c8, &buf
, 1);
2612 usb_microdia_control_read(dev
, 0x100a, &buf
, 1);
2614 usb_microdia_control_write(dev
, 0x100a, &buf
, 1);
2615 usb_microdia_control_read(dev
, 0x100b, &buf
, 1);
2617 usb_microdia_control_write(dev
, 0x100b, &buf
, 1);
2618 usb_microdia_control_read(dev
, 0x1001, &buf
, 1);
2620 usb_microdia_control_write(dev
, 0x1001, &buf
, 1);
2621 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
2623 usb_microdia_control_write(dev
, 0x1040, &buf
, 1);
2624 usb_microdia_control_read(dev
, 0x1045, &buf
, 1);
2626 usb_microdia_control_write(dev
, 0x1045, &buf
, 1);
2627 usb_microdia_control_read(dev
, 0x1046, &buf
, 1);
2629 usb_microdia_control_write(dev
, 0x1046, &buf
, 1);
2631 usb_microdia_control_write(dev
, 0x1045, &buf
, 1);
2633 usb_microdia_control_write(dev
, 0x1040, &buf
, 1);
2635 usb_microdia_control_write(dev
, 0x1020, &buf
, 1);
2641 * @brief From 6 init-logs
2645 * @returns 0 (ok) or -1 (error)
2649 * Windows driver versions: 5.5.8.12 and 5.7.23.000
2650 * Windows versions: 2000 and XP
2651 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
2653 * Comments behind read oprations contain HEX-values that appeared in the logs
2655 int microdia_6270_initialize(struct usb_microdia
*dev
)
2667 ret
+= usb_microdia_control_read(dev
, 0x130d, buf
, 1); /* URB 5 0x81,0x85,0x04,0x8b,0x02,... */
2669 ret
+= usb_microdia_control_read(dev
, 0x1040, buf
, 1); /* URB 6 0xe4,0xc4,0xa4,0x44,... */
2672 * THE OLD DRIVER 5.5.8.12 DOES AN ADDITIONAL WRITE HERE:
2674 * usb_microdia_control_write(dev, 0x10c8, buf, 1);
2677 ret
+= usb_microdia_control_read(dev
, 0x118a, buf
, 1); /* URB 7 0x05,0x7b,0x01,0x04,... */
2679 ret
+= usb_microdia_control_read(dev
, 0x0395, buf_0395
, 1); /* URB 8 0xc2,0x82,0x38,0x98,0x04,... */
2680 /* => this value will be rewritten to 0x118a and 0x0395 later (URBs 81+82) */
2683 ret
+= usb_microdia_control_write(dev
, 0x118a, buf
, 1); /* URB 9 */
2685 ret
+= usb_microdia_control_write(dev
, 0x0395, buf
, 1); /* URB 10 */
2687 ret
+= usb_microdia_control_read(dev
, 0x11b8, buf_11b8
, 1); /* URB 11 0xa0,0x00,0x24,... */
2688 /* => this value will be rewritten to 0x11b8 later (URB 83) */
2691 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 12 */
2693 ret
+= usb_microdia_control_read(dev
, 0x1000, buf_1000
, 5); /* URB 13 0x30 0xCF 0x00 0x03 (0x02 or 0x00) */
2694 /* => these values will be rewritten to 0x1000 later (URB 84) */
2696 buf
[0] = 0x70; buf
[1] = 0x00; buf
[2] = 0x18; buf
[3] = 0x00; buf
[4] = 0x00;
2697 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 5); /* URB 14 */
2699 ret
+= usb_microdia_control_read(dev
, 0x1060, buf_1060
, 2); /* URB 15 0x08 0x00 (always ???) */
2700 /* => this value will be rewritten to 0x1060 later (URB 85) */
2702 buf
[0] = 0x00; buf
[1] = 0x03;
2703 ret
+= usb_microdia_control_write(dev
, 0x1060, buf
, 2); /* URB 16 */
2705 /* initialize I2C registers to avoid getting no ACK at first I2C operation: */
2706 ret
+= sn9c20x_initialize_i2c(dev
, SN9C20X_I2C_2WIRE
, MT9V011_I2C_SLAVE_ADDRESS
);
2708 /* enable I2C communication (bit 0) */
2709 buf
[0] = 0x21; /* THE OLD DRIVER 5.5.8.12 WRITES 0x5d */
2710 ret
+= usb_microdia_control_write(dev
, 0x10c8, buf
, 1); /* URB 17 */
2712 /* probe sensor model: */
2713 retSP
= mt9vx11_sensor_probe(dev
); /* substitutes URBs 18-48 */
2714 if ((retSP
== 0) && (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
))
2715 /* switch (back) to IFP address space: */
2716 retASS
= mt9v111_select_address_space(dev
, MT9V111_ADDRESSSPACE_IFP
);
2718 ret
+= usb_microdia_control_write(dev
, 0x118a, buf_0395
, 1); /* URB 81 => write value read with URB 8 */
2720 ret
+= usb_microdia_control_write(dev
, 0x0395, buf_0395
, 1); /* URB 82 => write value read with URB 8 */
2722 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf_11b8
, 1); /* URB 83 => write value read with URB 11 */
2724 ret
+= usb_microdia_control_write(dev
, 0x1000, buf_1000
, 5); /* URB 84 => write value read with URB 13 */
2726 ret
+= usb_microdia_control_write(dev
, 0x1060, buf_1060
, 2); /* URB 85 => write value read with URB 15; (always 08 00 ???) */
2728 /* USB-interrupt-message: doesn't work yet (returns error -110) */
2729 /* 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 */
2732 * THE OLD DRIVER 5.5.8.12 DOES AN ADDITIONAL WRITE HERE:
2734 * usb_microdia_control_write(dev, 0x1020, wbuf, 1);
2737 if ((retSP
!= 0) || (retASS
!= 0) || (ret
< 33)) {
2739 UDIA_INFO("One ore more errors occured during initialization !\n");
2748 * @brief From UsbSnoop-plugin-parsed.log
2754 int microdia_627b_initialize(struct usb_microdia
*dev
)
2767 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1); /* URB 5 */
2771 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1); /* URB 6 */
2776 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1); /* URB 7 */
2780 ret
= usb_microdia_control_read(dev
, reg
, reg0395
, 1); /* URB 8 */
2786 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 9 */
2790 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 10 */
2795 ret
= usb_microdia_control_read(dev
, reg
, reg11b8
, 1); /* URB 11 */
2801 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 12 */
2805 ret
= usb_microdia_control_read(dev
, reg
, reg1000
, 5); /* URB 13 */
2810 buf
[0] = 0x70; buf
[1] = 0x00; buf
[2] = 0x18; buf
[3] = 0x00; buf
[4] = 0x00;
2811 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5); /* URB 14 */
2816 ret
= usb_microdia_control_read(dev
, reg
, reg1060
, 2); /* URB 15 */
2821 buf
[0] = 0x00; buf
[1] = 0x03;
2822 ret
= usb_microdia_control_write(dev
, reg
, buf
, 2); /* URB 16 */
2828 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 17 */
2832 retI2C
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
2833 OV7660_CTL_PID
, dev
->sensor_flags
, buf
); /* URBs 18-29 */
2838 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 30 */
2842 retI2C
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
2843 OV7660_CTL_PID
, dev
->sensor_flags
, buf
); /* URBs 31-35 */
2846 UDIA_ERROR("Read of sensor register 0x0a failed.");
2850 ret
= usb_microdia_control_write(dev
, reg
, reg0395
, 1); /* URB 36 */
2854 ret
= usb_microdia_control_write(dev
, reg
, reg0395
, 1); /* URB 37 */
2860 ret
= usb_microdia_control_write(dev
, reg
, reg11b8
, 1); /* URB 38 */
2865 buf
[0] = 0x30; buf
[1] = 0xcf; buf
[2] = 0x00; buf
[3] = 0x03; buf
[4] = 0x02;
2866 ret
= usb_microdia_control_write(dev
, reg
, reg1000
, 5); /* URB 39 */
2871 buf
[0] = 0x08; buf
[1] = 0x00;
2872 ret
= usb_microdia_control_write(dev
, reg
, reg1060
, 2); /* URB 40 */
2878 ret = usb_interrupt_msg(dev->udev, 0x00000083, buf, 0x0000001, &actual, 1000);
2883 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg
, ret
);
2888 * @brief From init-start-stop-log (made by VÃctor M. Hernández Rocamora)
2892 * @returns 0 (ok) or -1 (error)
2896 * USB-Logger: SniffUSB 2.0
2898 * Comments behind read oprations contain HEX-values that appeared in the log
2900 int microdia_627f_initialize(struct usb_microdia
*dev
)
2905 ret
+= usb_microdia_control_read(dev
, 0x130d, buf
, 1); // URB 5 0x81
2907 ret
+= usb_microdia_control_read(dev
, 0x1040, buf
, 1); // URB 6 0xe4
2910 ret
+= usb_microdia_control_write(dev
, 0x10c8, buf
, 1); // URB 7
2913 ret
+= usb_microdia_control_write(dev
, 0x1020, buf
, 1); // URB 8
2915 ret
+= usb_microdia_control_read(dev
, 0x1045, buf
, 1); // URB 9 0x0f
2918 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); // URB 10
2920 ret
+= usb_microdia_control_read(dev
, 0x1045, buf
, 1); // URB 11 0x1f
2923 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); // URB 12
2925 ret
+= usb_microdia_control_read(dev
, 0x1045, buf
, 1); // URB 13 0x0f
2928 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); // URB 14
2932 UDIA_INFO("One ore more errors occured during initialization !\n");
2939 * @brief From UsbSnoop-plugin-parsed.log
2943 * @returns 0 (OK) or <0 (Error)
2945 * @author Vincent, Kuzja
2947 int microdia_6288_initialize(struct usb_microdia
*dev
)
2955 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
2960 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
2969 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
2974 * @brief From UsbSnoop-plugin-parsed.log
2978 * @returns 0 if all OK
2980 * Function to initialize Microdia 6128 webcam
2981 * Bridge SN9C325 + OM6802 CMOS sensor
2982 * note: comments are my observations so they could be wrong
2984 int microdia_6128_initialize(struct usb_microdia
*dev
)
2989 UDIA_INFO("Initializing camera...\n");
2992 ret
+= usb_microdia_control_write(dev
, 0xf1, buf
, 1);
2993 ret
+= usb_microdia_control_read(dev
, 0x00, buf
, 1); // read reg 0x00 must write 0x00 in buf[0]
2994 ret
+= usb_microdia_control_write(dev
, 0xf1, buf
, 1);
2995 ret
+= usb_microdia_control_read(dev
, 0x00, buf
, 1); // get cam ID, must read 0x12
2998 UDIA_ERROR("Microdia 6128 is not connected or working !!!\n");
3002 buf
[0] = 0x29; buf
[1] = 0x70; // Configure GPIO
3003 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 2);
3006 ret
+= usb_microdia_control_write(dev
, 0xf1, buf
, 1); // Maybe wakeup
3009 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1); // Command to initialize cam
3012 UDIA_DEBUG("Some read or writes were not successful in initialization !\n");
3014 /* Device is initialized and ready */
3015 UDIA_INFO("Microdia USB2.0 Camera is ready\n");
3021 int dev_microdia_start_stream(struct usb_microdia
*dev
)
3024 if(dev
&& dev
->start_stream
)
3025 ret
= dev
->start_stream(dev
);
3031 * @brief From start.htm
3039 * For SN9C201 with MI1310.
3040 * This function has not been tested yet.
3042 int microdia_6242_start_stream(struct usb_microdia
*dev
)
3048 0x01, 0x18, 0x00, 0x30, 0x00, 0x09, 0x00, 0xed,
3049 0x0f, 0xda, 0x0f, 0x3a, 0x00, 0x3a, 0x00, 0xd0,
3050 0x0f, 0xf7, 0x0f, 0x00, 0x00, 0x00, 0x60, 0x0a};
3053 0x02, 0x00, 0x02, 0x00, 0x50, 0x78, 0x00, 0x00,
3057 0x00, 0x20, 0x20, 0x20, 0x20, 0x00, 0x24, 0x3b,
3058 0x4f, 0x61, 0x71, 0x80, 0x8f, 0x9d, 0xab, 0xb8,
3059 0xc4, 0xd1, 0xdd, 0xe9, 0xf4, 0xff};
3061 __u8 qtable1
[64] = {
3062 0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
3063 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
3064 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
3065 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
3066 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
3067 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
3068 0x4f, 0x54, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
3069 0x64, 0x5c, 0x54, 0x64, 0x4b, 0x54, 0x58, 0x54};
3071 __u8 qtable2
[64] = {
3072 0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
3073 0x15, 0x26, 0x54, 0x36, 0x2e, 0x36, 0x54, 0x54,
3074 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
3075 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
3076 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
3077 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
3078 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
3079 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54};
3081 __u8 first10c0
[7][3] = {
3091 __u8 second10c0a
[2][5] = {
3092 {0x01, 0x00, 0x0e, 0x00, 0x14},
3093 {0x03, 0x03, 0xc4, 0x05, 0x14}
3096 __u8 second10c0b
[3] =
3099 __u8 third10c0
[4][3] = {
3106 __u8 fourth10c0a
[3][3] = {
3112 __u8 fourth10c0b
[2][5] = {
3113 {0x2b, 0x01, 0x88, 0x01, 0x88},
3114 {0x2d, 0x01, 0x88, 0x01, 0x88}
3117 __u8 fifth10c0
[4][3] = {
3123 /* interrupt down */
3126 usb_microdia_control_write(dev
, 0x1066, buf
, 1); /* URB 1 */
3129 /* interrupt down */
3132 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
3135 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
3138 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3141 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3144 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3147 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3150 usb_microdia_control_write(dev
, 0x1020, buf
, 1);
3152 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20;
3153 buf
[3] = 0x10; buf
[4] = 0x08;
3154 usb_microdia_control_write(dev
, 0x1067, buf
, 5);
3156 buf
[0] = 0xb0; buf
[1] = dev
->sensor_slave_address
; buf
[2] = 0x0d;
3157 buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00;
3158 buf
[6] = 0x00; buf
[7] = 0x10; buf
[8] = 0x03;
3159 usb_microdia_control_write(dev
, 0x10c0, buf
, 9);
3161 usb_microdia_control_write(dev
, 0x10e0, urb10
, 24); /* URB 10 */
3163 buf
[0] = 0x00; buf
[1] = 0x00; buf
[3] = 0x00;
3164 usb_microdia_control_write(dev
, 0x10f8, buf
, 3);
3166 buf
[0] = 0x00; buf
[1] = 0x40; buf
[2] = 0x00;
3167 buf
[3] = 0xe0; buf
[4] = 0x03;
3168 usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
3170 usb_microdia_control_write(dev
, 0x1180, urb13
, 11);
3172 usb_microdia_control_write(dev
, 0x118b, urb14
, 22);
3174 buf
[0] = 0x00; buf
[1] = 0x00;
3175 usb_microdia_control_write(dev
, 0x11a1, buf
, 2);
3177 buf
[0] = 0x60; buf
[1] = 0x20; buf
[2] = 0x00;
3178 buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00;
3179 buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00;
3180 usb_microdia_control_write(dev
, 0x11b7, buf
, 9);
3183 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3186 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3188 for (i
= 0; i
< 7; i
++)
3189 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3190 first10c0
[i
][0], dev
->sensor_flags
, &first10c0
[i
][1]); /* URB 9-48 */
3193 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
3196 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
3199 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 50 */
3202 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3205 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3208 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3211 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3214 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3217 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
3220 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
3223 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
3226 usb_microdia_control_write(dev
, 0x11bf, buf
, 1);
3228 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3229 second10c0a
[0][0], dev
->sensor_flags
, &second10c0a
[0][1]);
3231 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3232 second10c0a
[1][0], dev
->sensor_flags
, &second10c0a
[1][1]);
3234 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
3235 0x09, dev
->sensor_flags
, NULL
);
3237 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3238 second10c0b
[0], dev
->sensor_flags
, &second10c0b
[1]);
3240 buf
[0] = 0x06; buf
[1] = 0x00; buf
[2] = 0x02;
3241 buf
[3] = 0x00; buf
[4] = 0x28; buf
[5] = 0x3c;
3242 usb_microdia_control_write(dev
, 0x1180, buf
, 6);
3244 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
3245 buf
[3] = 0xf0; buf
[4] = 0x00;
3246 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); /* URB 70 */
3249 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3251 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
3252 usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
3254 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
3255 usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
3258 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3261 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3264 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3267 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3270 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
3273 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
3276 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 80 */
3277 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3280 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3281 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3284 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3285 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3288 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3289 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3292 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3293 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3296 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 90 */
3298 for (i
= 0; i
< 4; i
++)
3299 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3300 third10c0
[i
][0], dev
->sensor_flags
, &third10c0
[i
][1]); /* URB 97-106 */
3303 usb_microdia_control_write(dev
, 0x1180, buf
, 1);
3305 for (i
= 0; i
< 3; i
++)
3306 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3307 fourth10c0a
[i
][0], dev
->sensor_flags
, &fourth10c0a
[i
][1]);
3309 for (i
= 0; i
< 2; i
++)
3310 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3311 fourth10c0b
[i
][0], dev
->sensor_flags
, &fourth10c0b
[i
][1]);
3313 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
3314 0x33, dev
->sensor_flags
, NULL
);
3316 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3317 first10c0
[0][0], dev
->sensor_flags
, &first10c0
[0][1]);
3320 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3323 usb_microdia_control_write(dev
, 0x118b, buf
, 1);
3326 usb_microdia_control_write(dev
, 0x10f7, buf
, 1);
3329 usb_microdia_control_write(dev
, 0x10f8, buf
, 1);
3332 usb_microdia_control_write(dev
, 0x10fa, buf
, 1);
3335 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
3338 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
3341 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3343 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
3344 usb_microdia_control_write(dev
, 0x11bc, buf
, 4);
3346 /* Set whole array buf to 0x00 */
3347 memset(buf
, 0x00, 48);
3348 usb_microdia_control_write(dev
, 0x11c0, buf
, 48);
3350 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a;
3351 buf
[3] = 0x05; buf
[4] = 0x04; buf
[5] = 0x3f;
3352 usb_microdia_control_write(dev
, 0x11a5, buf
, 6);
3354 buf
[0] = 0x14; buf
[1] = 0xec; buf
[2] = 0x0a; buf
[3] = 0xf6;
3355 usb_microdia_control_write(dev
, 0x11af, buf
, 4);
3357 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x2d; buf
[3] = 0xdd;
3358 usb_microdia_control_write(dev
, 0x11b3, buf
, 4);
3361 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3364 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3367 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3369 usb_microdia_control_write(dev
, 0x1100, qtable1
, 64);
3371 usb_microdia_control_write(dev
, 0x1140, qtable2
, 64); /* URB 150 */
3374 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3377 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3380 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3383 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3386 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
3389 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
3392 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
3395 usb_microdia_control_write(dev
, 0x11bf, buf
, 1);
3397 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3398 second10c0a
[0][0], dev
->sensor_flags
, &second10c0a
[0][1]);
3400 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3401 second10c0a
[1][0], dev
->sensor_flags
, &second10c0a
[1][1]);
3403 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
3404 0x09, dev
->sensor_flags
, NULL
);
3406 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3407 second10c0b
[0], dev
->sensor_flags
, &second10c0b
[1]);
3409 buf
[0] = 0x06; buf
[1] = 0x00; buf
[2] = 0x02;
3410 buf
[3] = 0x00; buf
[4] = 0x28; buf
[5] = 0x3c;
3411 usb_microdia_control_write(dev
, 0x1180, buf
, 6);
3413 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
3414 buf
[3] = 0xf0; buf
[4] = 0x00;
3415 usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
3418 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3420 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
3421 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); /* URB 170 */
3423 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
3424 usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
3427 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3430 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3433 usb_microdia_control_write(dev
, 0x11b9, buf
, 1);
3436 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3439 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3442 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3445 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3448 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3451 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 180 */
3454 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
3457 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
3460 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3461 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3464 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3465 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3468 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3469 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3472 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3473 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 190 */
3476 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3477 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3480 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3482 for (i
= 0; i
< 3; i
++)
3483 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3484 fifth10c0
[i
][0], dev
->sensor_flags
, &fifth10c0
[i
][1]); /* URB 200-205 */
3486 sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3487 0x00, dev
->sensor_flags
, buf
);
3488 /* __u8 result[2] = {buf[3], buf[4]}; */
3491 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3498 * @brief From startstream.log
3506 * For SN9C201 with SOI968.
3507 * This is function triggers a working stream of image data and a glowing LED.
3509 int microdia_624e_start_stream(struct usb_microdia
*dev
)
3515 {0x47, 0x18, 0x00, 0x30, 0x00, 0x09, 0x00, 0xed,
3516 0x0f, 0xda, 0x0f, 0x3a, 0x00, 0x3a, 0x00, 0xd0,
3517 0x0f, 0xf7, 0x0f, 0x00, 0x00, 0x00, 0x60, 0x0a};
3520 {0x00, 0x20, 0x20, 0x20, 0x20, 0x00, 0x24, 0x3b,
3521 0x4f, 0x61, 0x71, 0x80, 0x8f, 0x9d, 0xab, 0xb8,
3522 0xc4, 0xd1, 0xdd, 0xe9, 0xf4, 0xff};
3525 {0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
3526 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
3527 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
3528 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
3529 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
3530 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
3531 0x4f, 0x53, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
3532 0x64, 0x5c, 0x53, 0x64, 0x4b, 0x53, 0x58, 0x53};
3535 {0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
3536 0x15, 0x26, 0x53, 0x36, 0x2e, 0x36, 0x53, 0x53,
3537 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3538 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3539 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3540 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3541 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3542 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53};
3544 __u8 first10c0
[20][2] = {
3545 {0x12, 0x80}, {0x12, 0x00}, {0x0c, 0x00}, {0x0f, 0x1f},
3546 {0x11, 0x80}, {0x38, 0x52}, {0x1e, 0x00}, {0x33, 0x08},
3547 {0x35, 0x8c}, {0x36, 0x0c}, {0x37, 0x04}, {0x45, 0x04},
3548 {0x47, 0xff}, {0x3e, 0x00}, {0x3f, 0x00}, {0x3b, 0x20},
3549 {0x3a, 0x96}, {0x3d, 0x0a}, {0x14, 0x4e}, {0x13, 0x88} };
3551 __u8 second10c0a
[2] =
3553 __u8 second10c0b
[5] =
3554 {0x17, 0x13, 0x63, 0x01, 0x79}; /* 4 bytes */
3555 __u8 second10c0c
[2] =
3556 {0x1b, 0x00}; /* 0 bytes */
3557 __u8 second10c0d
[2][2] = {
3561 __u8 third10c0a
[5][2] = {
3567 __u8 third10c0b
[3] =
3568 {0x01, 0x80, 0x80}; /* 2 bytes */
3571 {0x0a, 0x0b, 0x1c, 0x1d}; /* these are four addresses */
3573 /* interrupt down */
3576 usb_microdia_control_write(dev
, 0x1066, buf
, 1);
3578 /* interrupt up and down */
3581 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3584 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3587 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3589 buf
[0] = 0xa0; buf
[1] = 0xa0;
3590 usb_microdia_control_write(dev
, 0x1006, buf
, 2);
3593 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3596 usb_microdia_control_write(dev
, 0x1020, buf
, 1);
3598 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20;
3599 buf
[3] = 0x10; buf
[4] = 0x08;
3600 usb_microdia_control_write(dev
, 0x1067, buf
, 5);
3602 buf
[0] = 0x92; buf
[1] = dev
->sensor_slave_address
; buf
[2] = 0x00;
3603 buf
[3] = 0x00; buf
[4] = 0x1d; buf
[5] = 0x00;
3604 buf
[6] = 0xa2; buf
[7] = 0x10; buf
[8] = 0x03;
3605 usb_microdia_control_write(dev
, 0x10c0, buf
, 9);
3607 usb_microdia_control_write(dev
, 0x10e0, urb10
, 24);
3609 buf
[0] = 0x00; buf
[1] = 0x00; buf
[3] = 0x00;
3610 usb_microdia_control_write(dev
, 0x10f8, buf
, 3);
3612 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
3613 buf
[3] = 0xf0; buf
[4] = 0x00;
3614 usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
3616 buf
[0] = 0x8a; buf
[1] = 0xcc; buf
[2] = 0x08;
3617 usb_microdia_control_write(dev
, 0x1188, buf
, 3);
3619 usb_microdia_control_write(dev
, 0x118b, urb14
, 22);
3621 buf
[0] = 0x00; buf
[1] = 0x00;
3622 usb_microdia_control_write(dev
, 0x11a1, buf
, 2);
3624 buf
[0] = 0x60; buf
[1] = 0x20; buf
[2] = 0x00;
3625 buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x40;
3626 buf
[6] = 0x01; buf
[7] = 0xf0; buf
[8] = 0x00;
3627 usb_microdia_control_write(dev
, 0x11b7, buf
, 9);
3630 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3633 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3635 for (i
= 0; i
< 20; i
++)
3636 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3637 first10c0
[i
][0], dev
->sensor_flags
, &first10c0
[i
][1]);
3640 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3643 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3646 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3649 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3652 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3655 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3658 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
3661 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
3664 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
3667 usb_microdia_control_write(dev
, 0x11bf, buf
, 1);
3670 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3671 second10c0a
[0], dev
->sensor_flags
, &second10c0a
[1]);
3673 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3674 second10c0b
[0], dev
->sensor_flags
, &second10c0b
[1]);
3676 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
3677 second10c0c
[0], dev
->sensor_flags
, &second10c0c
[1]);
3679 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3680 second10c0d
[0][0], dev
->sensor_flags
, &second10c0d
[0][1]);
3682 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3683 second10c0d
[1][0], dev
->sensor_flags
, &second10c0d
[1][1]);
3685 buf
[0] = 0x3c; buf
[1] = 0x00; buf
[2] = 0x0b;
3686 buf
[3] = 0x00; buf
[4] = 0x28; buf
[5] = 0x3c;
3687 usb_microdia_control_write(dev
, 0x1180, buf
, 6);
3689 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
3690 buf
[3] = 0xf0; buf
[4] = 0x00;
3691 usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
3694 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3696 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
3697 usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
3699 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
3700 usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
3703 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3706 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3709 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3712 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3715 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
3718 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
3721 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3722 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3725 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3726 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3729 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3730 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3733 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3734 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3737 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3738 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3741 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3742 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3745 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3746 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3749 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3750 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3753 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3755 for (i
= 0; i
< 5; i
++)
3756 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3757 third10c0a
[i
][0], dev
->sensor_flags
, &third10c0a
[i
][1]);
3759 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3760 third10c0b
[0], dev
->sensor_flags
, &third10c0b
[1]);
3763 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3766 usb_microdia_control_write(dev
, 0x118b, buf
, 1);
3769 usb_microdia_control_write(dev
, 0x10f7, buf
, 1);
3772 usb_microdia_control_write(dev
, 0x10f8, buf
, 1);
3775 usb_microdia_control_write(dev
, 0x10fa, buf
, 1);
3778 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
3781 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
3784 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3786 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
3787 usb_microdia_control_write(dev
, 0x11bc, buf
, 4);
3789 /* Set whole buf to 0x00 */
3791 usb_microdia_control_write(dev
, 0x11c0, buf
, 48);
3792 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a;
3793 buf
[3] = 0x05; buf
[4] = 0x04; buf
[5] = 0x3f;
3794 usb_microdia_control_write(dev
, 0x11a5, buf
, 6);
3796 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
3797 usb_microdia_control_write(dev
, 0x11af, buf
, 4);
3799 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x2d; buf
[3] = 0xdd;
3800 usb_microdia_control_write(dev
, 0x11b3, buf
, 4);
3803 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3806 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3809 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3811 usb_microdia_control_write(dev
, 0x1100, qtable1
, 64);
3813 usb_microdia_control_write(dev
, 0x1140, qtable2
, 64);
3816 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3819 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3822 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3825 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3828 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
3831 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
3834 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
3837 usb_microdia_control_write(dev
, 0x11bf, buf
, 1);
3839 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3840 second10c0b
[0], dev
->sensor_flags
, &second10c0b
[1]);
3842 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
3843 second10c0c
[0], dev
->sensor_flags
, &second10c0c
[1]);
3845 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3846 second10c0d
[0][0], dev
->sensor_flags
, &second10c0d
[0][1]);
3848 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3849 second10c0d
[1][0], dev
->sensor_flags
, &second10c0d
[1][1]);
3851 buf
[0] = 0x3c; buf
[1] = 0x00; buf
[2] = 0x0b;
3852 buf
[3] = 0x00; buf
[4] = 0x28; buf
[5] = 0x3c;
3853 usb_microdia_control_write(dev
, 0x1180, buf
, 6);
3855 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
3856 buf
[3] = 0xf0; buf
[4] = 0x00;
3857 usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
3860 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3862 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
3863 usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
3865 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
3866 usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
3869 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3872 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3875 usb_microdia_control_write(dev
, 0x11b9, buf
, 1);
3878 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3881 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3884 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3887 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3890 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3893 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3896 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
3899 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
3902 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3903 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3906 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3907 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3910 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3911 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3914 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3915 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3918 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3919 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3922 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3923 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3926 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3927 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3930 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3931 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3934 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3936 for (i
= 0; i
< 3; i
++)
3937 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3938 third10c0a
[i
][0], dev
->sensor_flags
, &third10c0a
[i
][1]);
3940 for (i
= 0; i
< 4; i
++)
3941 sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
,
3942 1, read10c0
[i
], dev
->sensor_flags
, buf
);
3945 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3948 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
3951 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
3957 int microdia_624f_start_stream(struct usb_microdia
*dev
)
3961 __u8 eeprom_slave_id
= 0x50;
3962 __u8 eeprom_flags
= SN9C20X_I2C_2WIRE
;
3965 __u8 unknown1
[9] = { dev
->sensor_flags
, dev
->sensor_slave_address
,
3966 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
3970 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3976 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3982 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3988 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3994 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4000 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4006 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4010 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20;
4011 buf
[3] = 0x10; buf
[4] = 0x08;
4013 ret
= usb_microdia_control_write(dev
, command
, buf
, 5);
4017 /* this is the same register as the I2C write, not sure why
4018 * we're writing 9 bytes -- the SN9C102 docs say all writes
4019 * must be 8 bytes, but we don't have docs for SN9C20x */
4021 ret
= usb_microdia_control_write(dev
, command
, unknown1
, 9);
4025 buf
[0] = 0x44; buf
[23] = 0x0a;
4027 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4033 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4037 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
4039 ret
= usb_microdia_control_write(dev
, command
, buf
, 3);
4043 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
4044 buf
[3] = 0xf0; buf
[4] = 0x00;
4046 ret
= usb_microdia_control_write(dev
, command
, buf
, 5);
4050 buf
[0] = 0x87; buf
[1] = 0xcc; buf
[2] = 0x08;
4052 ret
= usb_microdia_control_write(dev
, command
, buf
, 3);
4056 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20;
4057 buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b;
4058 buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80;
4059 buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8;
4060 buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
4061 buf
[20] = 0xf4; buf
[21] = 0xff;
4063 ret
= usb_microdia_control_write(dev
, command
, buf
, 22);
4067 buf
[0] = 0x00; buf
[1] = 0x00;
4069 ret
= usb_microdia_control_write(dev
, command
, buf
, 2);
4073 buf
[0] = 0x60; buf
[1] = 0x20; buf
[2] = 0x00; buf
[3] = 0x08;
4074 buf
[4] = 0x00; buf
[5] = 0x40; buf
[6] = 0x01; buf
[7] = 0xf0;
4077 ret
= usb_microdia_control_write(dev
, command
, buf
, 9);
4083 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4089 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4093 /* reset all SCCB registers to their default values */
4094 buf
[0] = OV965X_COM7_SCCB_RESET
;
4095 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_COM7
,
4096 dev
->sensor_flags
, buf
);
4100 buf
[0] = 0x7f; /* 0x7f AGC setting */
4101 buf
[1] = 0xe0; /* blue gain setting */
4102 buf
[2] = 0x90; /* red gain setting */
4103 buf
[3] = OV965X_VREF_VSTOP_LOW3(0x04) | OV965X_VREF_VSTART_LOW3(0x02);
4104 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_GAIN
,
4105 dev
->sensor_flags
, buf
);
4110 this write appears to be unnecessary since we issued
4111 the reset above and the spec says that 0x00 is the default
4112 for all 4 of the registers we're writing to here
4115 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_COM1
,
4116 dev
->sensor_flags
, buf
);
4120 /* first byte still 0, not sure why, RAVE default is 0x00 too */
4122 buf
[1] = OV965X_COM2_OUTPUT_DRIVE_CAP_2X
;
4123 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, OV965X_CTL_RAVE
,
4124 dev
->sensor_flags
, buf
);
4128 buf
[0] = 0x00; buf
[1] = 0x00;
4129 /* not sure why we're setting bit 5 below, spec says it's reserved */
4130 buf
[2] = OV965X_COM5_15FPS_48MHZ_RGB
| 0x20;
4131 /* likewise, spec says 4 & 6 are reserved */
4132 buf
[3] = OV965X_COM6_TIMING_RESET_ON_FMT_CHANGE
| 0x50;
4133 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_COM3
,
4134 dev
->sensor_flags
, buf
);
4138 buf
[0] = 0xff; /* AEC bits 2-9 */
4139 buf
[1] = OV965X_CLKRC_INPUT_CLK_NO_SCALE
;
4140 buf
[2] = OV965X_COM7_OUTPUT_RAW_RGB
;
4141 buf
[3] = OV965X_COM8_FAST_AGC_AEC
| OV965X_COM8_AEC_STEP_SIZE_NOLIMIT
|
4142 /*OV965X_COM8_AGC_ENABLE |*/ OV965X_COM8_AEC_ENABLE
| OV965X_COM8_AWB_ENABLE
;
4143 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_AECH
,
4144 dev
->sensor_flags
, buf
);
4148 buf
[0] = OV965X_COM9_MAX_AGC_8X
| OV965X_COM9_RELAX_EXPOSURE_TIMING
|
4149 OV965X_COM9_DROP_VSYNC_ON_FRAME_DROP
|
4150 OV965X_COM9_DROP_FRAME_ON_BIG_AEC
;
4152 buf
[2] = 0x07; /* hmm, spec says this is reserved */
4153 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 3, OV965X_CTL_COM9
,
4154 dev
->sensor_flags
, buf
);
4158 /* this is supposed to be reserved too */
4159 buf
[0] = 0x04; buf
[1] = 0x00;
4160 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, OV965X_CTL_MVFP
,
4161 dev
->sensor_flags
, buf
);
4165 buf
[0] = 0x78; /* this is the default! */
4166 buf
[1] = 0x68; /* this is the default! */
4167 buf
[2] = 0xd4; /* this is the default! */
4168 buf
[3] = 0x80; /* this is the default! */
4169 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_AEW
,
4170 dev
->sensor_flags
, buf
);
4174 buf
[0] = OV965X_BIAS_SUBTRACT
;
4175 buf
[1] = OV965X_Gr_COM_BYPASS_ANALOG_BLC
| OV965X_Gr_COM_BYPASS_REGULATOR
;
4176 buf
[2] = 0x00; buf
[3] = 0x00;
4177 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_GbBIAS
,
4178 dev
->sensor_flags
, buf
);
4182 buf
[0] = OV965X_BIAS_SUBTRACT
;
4183 buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
4184 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_RBIAS
,
4185 dev
->sensor_flags
, buf
);
4189 buf
[0] = 0x08; /* HSYNC rising edge start */
4190 buf
[1] = 0x30; /* HSYNC rising edge end */
4191 buf
[2] = OV965X_HREF_EDGE_OFT_TO_DATA_OUT(2) | OV965X_HREF_HSTART_LOW3(6)
4192 | OV965X_HREF_HSTOP_LOW3(4);
4193 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 3, OV965X_CTL_HSYST
,
4194 dev
->sensor_flags
, buf
);
4198 /* the docs say all 4 of these bytes are reserved */
4199 buf
[0] = 0xe2; buf
[1] = 0xbf; buf
[2] = 0x81; buf
[3] = 0xf9;
4200 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_CHLF
,
4201 dev
->sensor_flags
, buf
);
4205 /* the docs say these 2 bytes are reserved */
4206 buf
[0] = 0x00; buf
[1] = 0x93;
4207 buf
[2] = 0x50; /* bits 4 and 6 are supposedly reserved */
4208 buf
[3] = OV965X_TSLB_OUTPUT_SEQ_UYVY
| OV965X_TSLB_DIGITAL_BLC_ENABLE
;
4209 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_ADC
,
4210 dev
->sensor_flags
, buf
);
4214 buf
[0] = OV965X_COM11_MANUAL_BANDING_FILTER
;
4215 buf
[1] = 0x73; /* these bits all reserved */
4216 buf
[2] = OV965X_COM13_ENABLE_COLOR_MATRIX
| OV965X_COM13_DELAY_Y_CHANNEL
4217 | OV965X_COM13_OUTPUT_DELAY(1);
4218 buf
[3] = OV965X_COM14_YUV_EDGE_ENHANCE
4219 | OV965X_COM14_EDGE_ENHANCE_FACTOR_DBL
4220 | 0x0b; /* these last bits supposedly reserved */
4221 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_COM11
,
4222 dev
->sensor_flags
, buf
);
4226 buf
[0] = OV965X_EDGE_EDGE_ENHANCE_LOW4(8)
4227 | OV965X_EDGE_EDGE_ENHANCE_FACTOR(8);
4228 buf
[1] = OV965X_COM15_OUTPUT_RANGE_O0_TO_FF
| 0x01; /* bit reserved */
4229 buf
[2] = 0x00; buf
[3] = 0x08; /* this bit supposedly reserved */
4230 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_EDGE
,
4231 dev
->sensor_flags
, buf
);
4236 /* OV9653 control register 0x43 is reserved, according to the docs */
4237 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x43,
4238 dev
->sensor_flags
, buf
); /* 'Dummy'-write */
4242 buf
[0] = 0x80; buf
[1] = 0x80; buf
[2] = 0x40; buf
[3] = 0x00;
4243 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_MANU
,
4244 dev
->sensor_flags
, buf
);
4249 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_DBLV
,
4250 dev
->sensor_flags
, buf
);
4254 buf
[0] = 0x06; buf
[1] = 0x20; buf
[2] = 0x00; buf
[3] = 0x00;
4255 /* OV9653 control register 0x8b is reserved, according to the docs */
4256 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x8b,
4257 dev
->sensor_flags
, buf
);
4262 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_DBLC1
,
4263 dev
->sensor_flags
, buf
);
4267 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x88; buf
[3] = 0x88;
4268 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_DM_LNL
,
4269 dev
->sensor_flags
, buf
);
4274 /* control reg 0x96 reserved, according to docs */
4275 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, 0x96,
4276 dev
->sensor_flags
, buf
);
4281 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_COM26
,
4282 dev
->sensor_flags
, buf
);
4286 buf
[0] = 0x80; buf
[1] = 0xb8; buf
[2] = 0x92; buf
[3] = 0x0a;
4287 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_ACOM2
,
4288 dev
->sensor_flags
, buf
);
4292 /* reserved, according to docs */
4293 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0xac,
4294 dev
->sensor_flags
, NULL
);
4298 buf
[0] = 0x1b; buf
[1] = 0xbb; buf
[2] = 0x05; buf
[3] = 0x7d;
4299 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_HSTART
,
4300 dev
->sensor_flags
, buf
);
4305 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_PSHIFT
,
4306 dev
->sensor_flags
, buf
);
4310 /* now for some reason it switches to these two reads and
4311 * then back to the long init sequence */
4313 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* reads 30 */
4316 /* msg("Should read 0x30, read: %x", buf[0]); */
4319 buf
[0] = eeprom_slave_id
;
4320 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4324 /* TRY TO READ FROM EEPROM: */
4325 ret
= sn9c20x_read_i2c_data(dev
, eeprom_slave_id
, 1, 0x00, eeprom_flags
, buf
);
4327 UDIA_INFO("No EEPROM found\n");
4329 UDIA_INFO("Read from EEPROM successful\n");
4330 /* returns 0xff -- don't know what we're supposed to do w/ that info */
4331 /* msg("Read from eeprom, should read 0xff, read: %x", buf[0]); */
4335 buf
[0] = dev
->sensor_slave_address
;
4336 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4342 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4348 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4354 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4360 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4366 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4372 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4378 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4384 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4390 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4396 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4401 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_COM7
,
4402 dev
->sensor_flags
, buf
);
4407 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_VREF
,
4408 dev
->sensor_flags
, buf
);
4412 buf
[0] = 0x24; buf
[1] = 0xc5; buf
[2] = 0x00; buf
[3] = 0x3c;
4413 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_HSTART
,
4414 dev
->sensor_flags
, buf
);
4418 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, OV965X_CTL_PSHIFT
,
4419 dev
->sensor_flags
, NULL
);
4424 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_HREF
,
4425 dev
->sensor_flags
, buf
);
4430 buf
[0] = 0x02; buf
[1] = 0x00; buf
[2] = 0x07; buf
[3] = 0x00;
4431 buf
[4] = 0x28; buf
[5] = 0x3c;
4432 ret
= usb_microdia_control_write(dev
, command
, buf
, 6);
4437 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0;
4439 ret
= usb_microdia_control_write(dev
, command
, buf
, 5);
4445 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4450 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
4451 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4456 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
4457 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4463 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4469 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4475 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4482 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4488 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4494 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4500 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4503 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 0x38 */
4508 else if (buf
[0] == 0xb8)
4510 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4513 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 0x39 */
4518 else if (buf
[0] == 0xb9)
4520 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4523 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 0x3a */
4528 else if (buf
[0] == 0xba)
4530 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4533 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 0x3b */
4538 else if (buf
[0] == 0xbb)
4540 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4543 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 0x3c */
4546 last_11b8
[0] = buf
[0];
4547 buf
[0] = last_11b8
[0] & 0xf0; /* 0xf0 or 0x70 */
4548 buf
[0] = buf
[0] | 0x0a; /* => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 5 READS/WRITES */
4549 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4554 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_CLKRC
,
4555 dev
->sensor_flags
, buf
);
4561 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_EXHCH
,
4562 dev
->sensor_flags
, buf
);
4567 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_EXHCL
,
4568 dev
->sensor_flags
, buf
);
4573 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_DM_LNL
,
4574 dev
->sensor_flags
, buf
);
4580 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_DM_LNH
,
4581 dev
->sensor_flags
, buf
);
4586 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_MVFP
,
4587 dev
->sensor_flags
, buf
);
4591 /* is it really necessary to do this same write again?; 627f does this, too */
4593 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_MVFP
,
4594 dev
->sensor_flags
, buf
);
4601 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4606 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_AECH
,
4607 dev
->sensor_flags
, buf
);
4612 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_COM1
,
4613 dev
->sensor_flags
, buf
);
4619 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_AECHM
,
4620 dev
->sensor_flags
, buf
);
4625 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_ADVFL
,
4626 dev
->sensor_flags
, buf
);
4632 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_ADVFH
,
4633 dev
->sensor_flags
, buf
);
4639 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_GAIN
,
4640 dev
->sensor_flags
, buf
);
4645 buf
[0] = 0x78; /*buf[1] = 0x78;*/
4646 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_BLUE
,
4647 dev
->sensor_flags
, buf
);
4652 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_RED
,
4653 dev
->sensor_flags
, buf
);
4656 /* 627f does the last two writes at once (2 byte write to OV965X_CTL_BLUE) */
4661 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4665 if (dev
->webcam_model
== CAMERA_MODEL(USB_0C45_VID
, USB_627F_PID
))
4670 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4676 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4682 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4689 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4695 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4702 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4708 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4712 /* memset(buf, 0, 4); */
4714 buf
[0] = 0x80; buf
[1] = 0x02; buf
[2] = 0xe0; buf
[3] = 0x01;
4715 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4720 if (dev
->webcam_model
== CAMERA_MODEL(USB_0C45_VID
, USB_627F_PID
)) {
4721 buf
[0] = 0x19; buf
[1] = 0x31; buf
[2] = 0x44; buf
[3] = 0x50;
4722 buf
[4] = 0x52; buf
[5] = 0x56; buf
[6] = 0x5b; buf
[7] = 0x61;
4723 buf
[8] = 0x65; buf
[9] = 0x6a; buf
[10] = 0x6c; buf
[11] = 0x6e;
4724 buf
[12] = 0x70; buf
[13] = 0x72; buf
[14] = 0x74; buf
[15] = 0x76;
4725 buf
[16] = 0x1a; buf
[17] = 0x31; buf
[18] = 0x44; buf
[19] = 0x51;
4726 buf
[20] = 0x54; buf
[21] = 0x57; buf
[22] = 0x5c; buf
[23] = 0x61;
4727 buf
[24] = 0x66; buf
[25] = 0x6b; buf
[26] = 0x6d; buf
[27] = 0x6f;
4728 buf
[28] = 0x71; buf
[29] = 0x73; buf
[30] = 0x75; buf
[31] = 0x76;
4729 buf
[32] = 0x1b; buf
[33] = 0x32; buf
[34] = 0x44; buf
[35] = 0x50;
4730 buf
[36] = 0x50; buf
[37] = 0x54; buf
[38] = 0x59; buf
[39] = 0x5e;
4731 buf
[40] = 0x63; buf
[41] = 0x67; buf
[42] = 0x6a; buf
[43] = 0x6c;
4732 buf
[44] = 0x6e; buf
[45] = 0x70; buf
[46] = 0x72; buf
[47] = 0x73;
4734 buf
[0] = 0x10; buf
[1] = 0x21; buf
[2] = 0x34; buf
[3] = 0x40;
4735 buf
[4] = 0x47; buf
[5] = 0x4F; buf
[6] = 0x57; buf
[7] = 0x5F;
4736 buf
[8] = 0x64; buf
[9] = 0x68; buf
[10] = 0x6D; buf
[11] = 0x73;
4737 buf
[12] = 0x79; buf
[13] = 0x80; buf
[14] = 0x89; buf
[15] = 0x97;
4738 buf
[16] = 0x0D; buf
[17] = 0x1C; buf
[18] = 0x2A; buf
[19] = 0x33;
4739 buf
[20] = 0x38; buf
[21] = 0x3D; buf
[22] = 0x44; buf
[23] = 0x4A;
4740 buf
[24] = 0x4E; buf
[25] = 0x52; buf
[26] = 0x56; buf
[27] = 0x5B;
4741 buf
[28] = 0x61; buf
[29] = 0x68; buf
[30] = 0x6F; buf
[31] = 0x7A;
4742 buf
[32] = 0x0D; buf
[33] = 0x1A; buf
[34] = 0x2A; buf
[35] = 0x31;
4743 buf
[36] = 0x36; buf
[37] = 0x3B; buf
[38] = 0x41; buf
[39] = 0x47;
4744 buf
[40] = 0x4A; buf
[41] = 0x4E; buf
[42] = 0x53; buf
[43] = 0x58;
4745 buf
[44] = 0x5D; buf
[45] = 0x64; buf
[46] = 0x6B; buf
[47] = 0x76;
4747 ret
= usb_microdia_control_write(dev
, command
, buf
, 48);
4751 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05;
4752 buf
[4] = 0x04; buf
[5] = 0x3f;
4753 ret
= usb_microdia_control_write(dev
, command
, buf
, 6);
4759 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
4760 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4765 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x32; buf
[3] = 0xdd;
4766 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4773 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4779 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4785 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4790 /* //////////////////////////////////////////////////////////////////// */
4793 buf
[0] = 0x0d; buf
[1] = 0x08; buf
[2] = 0x08; buf
[3] = 0x0d;
4794 buf
[4] = 0x08; buf
[5] = 0x08; buf
[6] = 0x0d; buf
[7] = 0x0d;
4795 buf
[8] = 0x0d; buf
[9] = 0x0d; buf
[10] = 0x11; buf
[11] = 0x0d;
4796 buf
[12] = 0x0d; buf
[13] = 0x11; buf
[14] = 0x15; buf
[15] = 0x21;
4797 buf
[16] = 0x15; buf
[17] = 0x15; buf
[18] = 0x11; buf
[19] = 0x11;
4798 buf
[20] = 0x15; buf
[21] = 0x2a; buf
[22] = 0x1d; buf
[23] = 0x1d;
4799 buf
[24] = 0x19; buf
[25] = 0x21; buf
[26] = 0x32; buf
[27] = 0x2a;
4800 buf
[28] = 0x32; buf
[29] = 0x32; buf
[30] = 0x2e; buf
[31] = 0x2a;
4801 buf
[32] = 0x2e; buf
[33] = 0x2e; buf
[34] = 0x36; buf
[35] = 0x3a;
4802 buf
[36] = 0x4b; buf
[37] = 0x43; buf
[38] = 0x36; buf
[39] = 0x3a;
4803 buf
[40] = 0x47; buf
[41] = 0x3a; buf
[42] = 0x2e; buf
[43] = 0x2e;
4804 buf
[44] = 0x43; buf
[45] = 0x5c; buf
[46] = 0x43; buf
[47] = 0x47;
4805 buf
[48] = 0x4f; buf
[49] = 0x54; buf
[50] = 0x58; buf
[51] = 0x58;
4806 buf
[52] = 0x58; buf
[53] = 0x32; buf
[54] = 0x3f; buf
[55] = 0x60;
4807 buf
[56] = 0x64; buf
[57] = 0x5c; buf
[58] = 0x54; buf
[59] = 0x64;
4808 buf
[60] = 0x4b; buf
[61] = 0x54; buf
[62] = 0x58; buf
[63] = 0x54;
4809 ret
= usb_microdia_control_write(dev
, command
, buf
, 64);
4814 buf
[0] = 0x0d; buf
[1] = 0x11; buf
[2] = 0x11; buf
[3] = 0x15;
4815 buf
[4] = 0x11; buf
[5] = 0x15; buf
[6] = 0x26; buf
[7] = 0x15;
4816 buf
[8] = 0x15; buf
[9] = 0x26; buf
[10] = 0x54; buf
[11] = 0x36;
4817 buf
[12] = 0x2e; buf
[13] = 0x36; buf
[14] = 0x54; buf
[15] = 0x54;
4818 buf
[16] = 0x54; buf
[17] = 0x54; buf
[18] = 0x54; buf
[19] = 0x54;
4819 buf
[20] = 0x54; buf
[21] = 0x54; buf
[22] = 0x54; buf
[23] = 0x54;
4820 buf
[24] = 0x54; buf
[25] = 0x54; buf
[26] = 0x54; buf
[27] = 0x54;
4821 buf
[28] = 0x54; buf
[29] = 0x54; buf
[30] = 0x54; buf
[31] = 0x54;
4822 buf
[32] = 0x54; buf
[33] = 0x54; buf
[34] = 0x54; buf
[35] = 0x54;
4823 buf
[36] = 0x54; buf
[37] = 0x54; buf
[38] = 0x54; buf
[39] = 0x54;
4824 buf
[40] = 0x54; buf
[41] = 0x54; buf
[42] = 0x54; buf
[43] = 0x54;
4825 buf
[44] = 0x54; buf
[45] = 0x54; buf
[46] = 0x54; buf
[47] = 0x54;
4826 buf
[48] = 0x54; buf
[49] = 0x54; buf
[50] = 0x54; buf
[51] = 0x54;
4827 buf
[52] = 0x54; buf
[53] = 0x54; buf
[54] = 0x54; buf
[55] = 0x54;
4828 buf
[56] = 0x54; buf
[57] = 0x54; buf
[58] = 0x54; buf
[59] = 0x54;
4829 buf
[60] = 0x54; buf
[61] = 0x54; buf
[62] = 0x54; buf
[63] = 0x54;
4830 ret
= usb_microdia_control_write(dev
, command
, buf
, 64);
4837 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4843 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4850 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4856 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4862 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4868 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4874 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4880 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4886 buf
[0] = 0x02; buf
[1] = 0x00; buf
[2] = 0x07; buf
[3] = 0x00;
4887 buf
[4] = 0x28; buf
[5] = 0x3c;
4888 ret
= usb_microdia_control_write(dev
, command
, buf
, 6);
4893 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0;
4895 ret
= usb_microdia_control_write(dev
, command
, buf
, 5);
4901 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4906 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
4907 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4913 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
4914 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4920 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4926 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4932 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4938 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4944 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4950 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4956 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4963 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4969 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4975 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4982 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4987 if (last_11b8
[0] == 0x3c)
4989 else if (last_11b8
[0] == 0xbc)
4991 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4994 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 624f: 0xb8 627f: 0x38 */
4999 else if (buf
[0] == 0xb8)
5001 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
5004 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 624f: 0xb9 627f: 0x39 */
5009 else if (buf
[0] == 0xb9)
5011 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
5014 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 0x3a */
5019 else if (buf
[0] == 0xba)
5021 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
5024 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 624f: 0x3b 627f: 0xbb */
5029 else if (buf
[0] == 0xbb)
5032 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
5036 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 624f: 0x3c 627f: 0xbc */
5040 buf
[0] = buf
[0] & 0xf0; /* 0xf0 or 0x70 */
5042 /* THIS VALUE SEEMS TO DEPEND ON WHAT WAS
5043 READ/WRITTEN IN THE LAST 5 READS/WRITES */
5044 if (dev
->webcam_model
== CAMERA_MODEL(USB_0C45_VID
, USB_627F_PID
))
5045 buf
[0] = buf
[0] | 0x09;
5047 buf
[0] = buf
[0] | 0x08;
5048 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
5053 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_CLKRC
,
5054 dev
->sensor_flags
, buf
);
5059 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_EXHCH
,
5060 dev
->sensor_flags
, buf
);
5065 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_EXHCL
,
5066 dev
->sensor_flags
, buf
);
5071 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_DM_LNL
,
5072 dev
->sensor_flags
, buf
);
5077 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_DM_LNH
,
5078 dev
->sensor_flags
, buf
);
5084 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
5091 UDIA_ERROR("start stream: command %x failed (%d)!\n", command
, ret
);
5095 int microdia_6260_start_stream(struct usb_microdia
*dev
)
5100 ret
= usb_microdia_control_read(dev
, 0x1045, buf
, 1);
5102 ret
= usb_microdia_control_write(dev
, 0x1045, buf
, 1);
5104 ret
= usb_microdia_control_write(dev
, 0x1066, buf
, 1);
5106 ret
= usb_microdia_control_write(dev
, 0x1007, buf
, 1);
5108 ret
= usb_microdia_control_write(dev
, 0x1006, buf
, 1);
5110 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
5112 ret
= usb_microdia_control_write(dev
, 0x1001, buf
, 1);
5114 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5116 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
5118 ret
= usb_microdia_control_write(dev
, 0x1020, buf
, 1);
5120 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20; buf
[3] = 0x10;
5122 ret
= usb_microdia_control_write(dev
, 0x1067, buf
, 5);
5124 buf
[0] = 0x80; buf
[1] = 0x21; buf
[2] = 0x00; buf
[3] = 0x00;
5125 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
5127 ret
= usb_microdia_control_write(dev
, 0x10c0, buf
, 9);
5129 buf
[0] = 0x45; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30;
5130 buf
[4] = 0x00; buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed;
5131 buf
[8] = 0x0f; buf
[9] = 0xda; buf
[10] = 0x0f; buf
[11] = 0x3a;
5132 buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00; buf
[15] = 0xd0;
5133 buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
5134 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
5135 ret
= usb_microdia_control_write(dev
, 0x10e0, buf
, 24);
5137 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
5138 ret
= usb_microdia_control_write(dev
, 0x10f8, buf
, 3);
5140 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0;
5142 ret
= usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
5144 buf
[0] = 0x8a; buf
[1] = 0x8c; buf
[2] = 0x08;
5145 ret
= usb_microdia_control_write(dev
, 0x1188, buf
, 3);
5147 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20;
5148 buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b;
5149 buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80;
5150 buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8;
5151 buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
5152 buf
[20] = 0xf4; buf
[21] = 0xff;
5153 ret
= usb_microdia_control_write(dev
, 0x118b, buf
, 22);
5155 buf
[0] = 0x00; buf
[1] = 0x00;
5156 ret
= usb_microdia_control_write(dev
, 0x11a1, buf
, 2);
5158 buf
[0] = 0x60; buf
[1] = 0x28; buf
[2] = 0x00; buf
[3] = 0x00;
5159 buf
[4] = 0x00; buf
[5] = 0x40; buf
[6] = 0x01; buf
[7] = 0xf0;
5161 ret
= usb_microdia_control_write(dev
, 0x11b7, buf
, 9);
5164 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
5167 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5169 ret
= ov7670_initialise(dev
);
5171 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1, 0x3b, dev
->sensor_flags
, buf
);
5172 ret
= usb_microdia_control_read(dev
, 0x10c1, buf
, 1);
5174 ret
= usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
5176 /* TRY TO READ FROM EEPROM: */
5177 ret
= sn9c20x_read_i2c_data(dev
, 0x50, 1, 0x00, dev
->sensor_flags
, buf
);
5179 UDIA_INFO("No EEPROM found\n");
5181 UDIA_INFO("Read from EEPROM successful\n");
5184 ret
= usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
5186 ret
= usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
5188 ret
= usb_microdia_control_write(dev
, 0x1001, buf
, 1);
5190 ret
= usb_microdia_control_write(dev
, 0x1001, buf
, 1);
5192 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00;
5193 buf
[4] = 0x50; buf
[5] = 0x3c;
5194 ret
= usb_microdia_control_write(dev
, 0x1180, buf
, 6);
5196 buf
[0] = 0x00; buf
[1] = 0x40; buf
[2] = 0x00; buf
[3] = 0xf0;
5198 ret
= usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
5201 ret
= usb_microdia_control_write(dev
, 0x1189, buf
, 1);
5203 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0x50;
5204 ret
= usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
5206 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x3c;
5207 ret
= usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
5209 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
5211 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5213 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5215 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5217 ret
= usb_microdia_control_write(dev
, 0x118a, buf
, 1);
5219 ret
= usb_microdia_control_write(dev
, 0x0395, buf
, 1);
5221 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5222 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5224 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5225 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5227 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5228 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5230 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5231 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5233 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5234 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5236 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5237 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5239 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5241 /* OV7670 Intialise Part 2 */
5242 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00;
5243 buf
[4] = 0x50; buf
[5] = 0x3c;
5244 ret
= usb_microdia_control_write(dev
, 0x1180, buf
, 6);
5246 buf
[0] = 0x00; buf
[1] = 0x40; buf
[2] = 0x00; buf
[3] = 0xf0;
5248 ret
= usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
5251 ret
= usb_microdia_control_write(dev
, 0x1189, buf
, 1);
5253 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0x50;
5254 ret
= usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
5256 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x3c;
5257 ret
= usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
5260 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
5262 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
5264 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
5266 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5268 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5270 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5272 ret
= usb_microdia_control_write(dev
, 0x118a, buf
, 1);
5274 ret
= usb_microdia_control_write(dev
, 0x0395, buf
, 1);
5276 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5277 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5279 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5280 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5282 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5283 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5285 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5286 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5288 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5289 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5291 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5292 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5294 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5296 /* OV7670 Initialisation Part 3 Goes Here */
5298 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
5304 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
5308 * @returns 0 (ok) or -1 (error)
5312 * Windows driver versions: 5.7.23.000
5313 * Windows versions: 2000 and XP
5314 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
5315 * All logs were made using AMCAP with 640x480, RGB24
5317 int microdia_6270_start_stream(struct usb_microdia
*dev
)
5324 /* Check if sensor slave address is valid: */
5325 if ((dev
->sensor_slave_address
!= MT9V111_I2C_SLAVE_ADDRESS
) && (dev
->sensor_slave_address
!= MT9V011_I2C_SLAVE_ADDRESS
)) {
5326 UDIA_INFO("microdia_6270_start_stream(): Invalid sensor slave address !\n");
5330 /* <= INTERRUPT COMING BACK (URB 1953) */
5331 /* SWITCH TO ALTERNATE SETTINGS 8 (URB 1954) // NOT IN ALEX'S LOG */
5332 /* => INTERRUPT GOING DOWN (URB 1955) */
5335 usb_microdia_control_write(dev
, 0x1066, buf
, 1); /* URB 1956 */
5337 /* <= INTERRUPT COMING BACK (URB 1955) */
5338 /* => INTERRUPT GOING DOWN (URB 1957) */
5341 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 1958 */
5343 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 1959 */
5345 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 1960 */
5347 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 1961 */
5349 usb_microdia_control_write(dev
, 0x1020, buf
, 1); /* URB 1962 */
5350 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20; buf
[3] = 0x10; buf
[4] = 0x08;
5351 usb_microdia_control_write(dev
, 0x1067, buf
, 5); /* URB 1963 */
5353 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5354 /* STRANGE I2C MESSAGE: */
5356 /* - byte 8 = 0x00 at first start + first cycle */
5357 /* - procedure not complete: no wait/check for ack/error, no readout of 0x10c2 */
5358 /* - dummy writes at first cycle and read at second cycle, but there are many I2C messages in the meantime, so this should not work */
5360 /* AT FIRST START + FIRST CYCLE: */
5361 buf
[0] = 0x80; buf
[1] = dev
->sensor_slave_address
; buf
[2] = 0x00; buf
[3] = 0x00;
5362 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x03;
5363 /* AT ALL FURTHER STARTS + FIRST CYCLE: */
5364 /* MT9V111: I2C MESSAGE => IFP Register 0x33: Auto exposure */
5365 /* buf[0] = 0x90; buf[1] = dev->sensor_slave_address; buf[2] = 0x33; buf[3] = 0x00; */
5366 /* buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03; */
5367 /* MT9V011: ????????????????????????? */
5368 /* buf[0] = 0x90; buf[1] = dev->sensor_slave_address; buf[2] = 0x07; buf[3] = 0x00; */
5369 /* buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03; */
5370 /* ALWAYS AT 2nd AND FURTHER CYCLES: */
5372 /* buf[0] = 0xa2; buf[1] = 0x5c; buf[2] = 0x00; buf[3] = 0x36; */
5373 /* buf[4] = 0x00; buf[5] = 0x82; buf[6] = 0x3a; buf[7] = 0x10; buf[8] = 0x03; */
5374 /* => buf[3] to buf[6] simply contain bytes read with URB 2215 */
5376 /* buf[0] = 0xb0; buf[1] = 0x5d; buf[2] = 0x07; buf[3] = 0x00; */
5377 /* buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03; */
5378 usb_microdia_control_write(dev
, 0x10c0, buf
, 9); /* URB 1964 */
5379 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5381 buf
[0] = 0x45; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30;
5382 buf
[4] = 0x00; buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed;
5383 buf
[8] = 0x0f; buf
[9] = 0xda; buf
[10] = 0x0f; buf
[11] = 0x3a;
5384 buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00; buf
[15] = 0xd0;
5385 buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
5386 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
5387 usb_microdia_control_write(dev
, 0x10e0, buf
, 24); /* URB 1965 */
5388 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
5389 usb_microdia_control_write(dev
, 0x10f8, buf
, 3); /* URB 1966 */
5390 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
5391 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); /* URB 1967 */
5392 buf
[0] = 0x06; buf
[1] = 0x0c; buf
[2] = 0x08;
5393 usb_microdia_control_write(dev
, 0x1188, buf
, 3); /* URB 1968 */
5394 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20;
5395 buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b;
5396 buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80;
5397 buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8;
5398 buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
5399 buf
[20] = 0xf4; buf
[21] = 0xff;
5400 usb_microdia_control_write(dev
, 0x118b, buf
, 22); /* URB 1969 */
5401 buf
[0] = 0x00; buf
[1] = 0x00;
5402 usb_microdia_control_write(dev
, 0x11a1, buf
, 2); /* URB 1970 */
5403 buf
[0] = 0x60; buf
[1] = 0x28; buf
[2] = 0x00; buf
[3] = 0x08;
5404 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
5406 usb_microdia_control_write(dev
, 0x11b7, buf
, 9); /* URB 1971 */
5408 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 1972 */
5410 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 1973 */
5412 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5415 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
5416 /* Write to IFP register 0x0d: Color Correction Register 8 */
5417 buf
[0] = 0x00; buf
[1] = 0x01;
5418 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
); /* URBs 1974-1976 */
5419 /* Write to IFP register 0x0d: Color Correction Register 8 */
5420 buf
[0] = 0x00; buf
[1] = 0x00; /* ??? */
5421 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
); /* URBs 1977-1979 */
5422 /* Writes to IFP registers 0x01: Register Address Space Selection */
5423 /* 0x02: Color Correction Register 1 */
5424 buf
[0] = 0x00; buf
[1] = 0x01; /* select IFP address space */
5425 buf
[2] = 0x00; buf
[3] = 0x16; /* ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
5426 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x01, dev
->sensor_flags
, buf
); /* URBs 1980-1982 */
5427 /* Writes to IFP registers 0x03: Color Correction Register 3 */
5428 /* 0x04: Color Correction Register 4 */
5429 buf
[0] = 0x01; buf
[1] = 0xe1; /* ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
5430 buf
[2] = 0x02; buf
[3] = 0x81; /* ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
5431 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x03, dev
->sensor_flags
, buf
); /* URBs 1983-1985 */
5432 /* Writes to IFP registers 0x05: Aperture Correction (Sharpening) */
5433 /* 0x06: Operating Mode Control */
5434 buf
[0] = 0x00; buf
[1] = 0x04; /* 100% sharpening, no automatic sharpness reduction at low light // AT FIRST START + FIRST CYCLE: 0x00 0x00: no sharpening */
5435 buf
[2] = 0x00; buf
[3] = 0x00; /* stop AWB at the current values, no on-the-fly defect correction, no auto exposure, + RESREVED option */
5436 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x05, dev
->sensor_flags
, buf
); /* URBs 1986-1988 */
5437 /* Writes to IFP registers 0x07: Image Flow Processor Soft Reset */
5438 /* 0x08: Output Format Control */
5439 buf
[0] = 0x30; buf
[1] = 0x02; /* reset // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
5440 buf
[2] = 0x04; buf
[3] = 0x80; /* bypass entire image processing, raw 8+2 Bayer data output directly */
5441 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x07, dev
->sensor_flags
, buf
); /* URBs 1989-1991 */
5442 /* "Dummy" write to IFP Register 0x11: Color Correction Register 12 */
5443 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x11, dev
->sensor_flags
, NULL
); /* URBs 1992-1993 */
5444 /* Write to register 0x01: Register address space selection */
5445 /* Write to sensor register 0x02: Column Start */
5446 buf
[0] = 0x00; buf
[1] = 0x04; /* select sensor address space */
5447 buf
[2] = 0x00; buf
[3] = 0x16; /* start with column 22 */
5448 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x01, dev
->sensor_flags
, buf
); /* URBs 1994-1996 */
5449 /* Writes to sensor registers 0x03: Window Height */
5450 /* 0x04: Window Width */
5451 buf
[0] = 0x01; buf
[1] = 0xe6; /* 486 */
5452 buf
[2] = 0x02; buf
[3] = 0x86; /* 646 */
5453 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x03, dev
->sensor_flags
, buf
); /* URBs 1997-1999 */
5454 /* Writes to sensor registers 0x05: Horizontal Blanking */
5455 /* 0x06: Vertical Blanking */
5456 buf
[0] = 0x00; buf
[1] = 0x04; /* 4 columns (pixel clocks) // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
5457 buf
[2] = 0x00; buf
[3] = 0x00; /* 0 rows */
5458 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x05, dev
->sensor_flags
, buf
); /* URBs 2000-2002 */
5459 /* Writes to sensor registers 0x07: Output Control */
5460 /* 0x08: Row Start */
5461 buf
[0] = 0x30; buf
[1] = 0x02; /* normal operation + chip enable + RESERVED options */
5462 buf
[2] = 0x00; buf
[3] = 0x08; /* row 8 */
5463 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x07, dev
->sensor_flags
, buf
); /* URBs 2003-2005 */
5464 /* "Dummy" write to sensor Register 0x11: UNDOCUMENTED */
5465 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x11, dev
->sensor_flags
, NULL
); /* URBs 2006-2007 */
5466 /* Writes to sensor registers 0x0c: Shutter Delay */
5467 /* 0x0d: Reset (Soft) (from MT9V011 datasheet) */
5468 buf
[0] = 0x00; buf
[1] = 0x00; /* 0 master clocks */
5469 buf
[2] = 0x00; buf
[3] = 0x00; /* return to normal operation */
5470 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0c, dev
->sensor_flags
, buf
); /* URBs 2008-2010 */
5471 /* Writes to sensor registers 0x0e: UNDOCUMENTED */
5472 /* 0x0f: UNDOCUMENTED */
5473 buf
[0] = 0x00; buf
[1] = 0x00;
5474 buf
[2] = 0x00; buf
[3] = 0x00;
5475 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0e, dev
->sensor_flags
, buf
); /* URBs 2011-2013 */
5476 /* Writes to sensor registers 0x10: UNDOCUMENTED */
5477 /* 0x11: UNDOCUMENTED */
5478 buf
[0] = 0x00; buf
[1] = 0x00;
5479 buf
[2] = 0x00; buf
[3] = 0x00;
5480 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x10, dev
->sensor_flags
, buf
); /* URBs 2014-2016 */
5481 /* Writes to sensor registers 0x12: 2X Zoom Col Start => 0x1e bit 0 must be set to activate zoom */
5482 /* 0x13: 2X Zoom Row Start => 0x1e bit 0 must be set to activate zoom */
5483 buf
[0] = 0x00; buf
[1] = 0xb0; /* column 176 */
5484 buf
[2] = 0x00; buf
[3] = 0x7c; /* row 124 */
5485 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x12, dev
->sensor_flags
, buf
); /* URBs 2017-2018 */
5486 /* Writes to sensor registers 0x14: UNDOCUMENTED */
5487 /* 0x15: UNDOCUMENTED */
5488 buf
[0] = 0x00; buf
[1] = 0x00;
5489 buf
[2] = 0x00; buf
[3] = 0x00;
5490 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x14, dev
->sensor_flags
, buf
); /* URBs 2019-2021 */
5491 /* Writes to sensor registers 0x16: UNDOCUMENTED */
5492 /* 0x17: UNDOCUMENTED */
5493 buf
[0] = 0x00; buf
[1] = 0x00;
5494 buf
[2] = 0x00; buf
[3] = 0x00;
5495 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x16, dev
->sensor_flags
, buf
); /* URBs 2022-2024 */
5496 /* Writes to sensor registers 0x18: UNDOCUMENTED */
5497 /* 0x19: UNDOCUMENTED */
5498 buf
[0] = 0x00; buf
[1] = 0x00;
5499 buf
[2] = 0x00; buf
[3] = 0x00;
5500 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x18, dev
->sensor_flags
, buf
); /* URBs 2025-2027 */
5501 /* Writes to sensor registers 0x1a: UNDOCUMENTED */
5502 /* 0x1b: UNDOCUMENTED */
5503 buf
[0] = 0x00; buf
[1] = 0x00;
5504 buf
[2] = 0x00; buf
[3] = 0x00;
5505 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1a, dev
->sensor_flags
, buf
); /* URBs 2028-2030 */
5506 /* Writes to sensor registers 0x1c: UNDOCUMENTED */
5507 /* 0x1d: UNDOCUMENTED */
5508 buf
[0] = 0x00; buf
[1] = 0x00;
5509 buf
[2] = 0x00; buf
[3] = 0x00;
5510 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1c, dev
->sensor_flags
, buf
); /* URBs 2031-2033 */
5511 /* Write to sensor register 0x30: RESERVED */
5512 buf
[0] = 0x00; buf
[1] = 0x00;
5513 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x30, dev
->sensor_flags
, buf
); /* URBs 2034-2036 */
5514 /* Write to sensor register 0x20: Read Mode */
5515 buf
[0] = 0x00; buf
[1] = 0x00; /* normal readout */
5516 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
); /* URBs 2037-2039 */
5517 /* Writes to sensor registers 0x30: RESERVED */
5518 /* 0x31: RESERVED */
5519 buf
[0] = 0x00; buf
[1] = 0x05;
5520 buf
[2] = 0x00; buf
[3] = 0x00;
5521 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x30, dev
->sensor_flags
, buf
); /* URBs 2040-2042 */
5522 /* "Dummy" write to sensor Register 0x34: RESERVED */
5523 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x34, dev
->sensor_flags
, NULL
); /* URBs 2043-2044 */
5524 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
5525 /* Write to sensor register 0x07: Output Control */
5526 buf
[0] = 0x00; buf
[1] = 0x02; /* chip enable, normal operation */
5527 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
5528 /* Write to sensor register 0x0d: Soft Reset */
5529 buf
[0] = 0x00; buf
[1] = 0x01; /* reset */
5530 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
);
5531 /* Write to sensor register 0x0d: Soft Reset */
5532 buf
[0] = 0x00; buf
[1] = 0x00; /* resume operation */
5533 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
);
5534 /* Writes to sensor registers 0x01: Row start */
5535 /* 0x02: Column Start */
5536 buf
[0] = 0x00; buf
[1] = 0x08; /* start with row 8 */
5537 buf
[2] = 0x00; buf
[3] = 0x16; /* start with column 22 */
5538 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x01, dev
->sensor_flags
, buf
);
5539 /* Writes to sensor registers 0x03: Window Height */
5540 /* 0x04: Window Width */
5541 buf
[0] = 0x01; buf
[1] = 0xe1; /* 481 */
5542 buf
[2] = 0x02; buf
[3] = 0x81; /* 641 */
5543 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x03, dev
->sensor_flags
, buf
);
5544 /* Writes to sensor registers 0x05: Horizontal Blanking */
5545 /* 0x06: Vertical Blanking */
5546 buf
[0] = 0x00; buf
[1] = 0x83; /* 131 columns (pixel clocks) */
5547 buf
[2] = 0x00; buf
[3] = 0x06; /* 6 rows */
5548 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x05, dev
->sensor_flags
, buf
);
5549 /* Write to sensor register 0x0d: Soft Reset */
5550 buf
[0] = 0x00; buf
[1] = 0x02; /* UNKNOWN */
5551 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
);
5552 /* Writes to sensor registers 0x0a: Pixel Clock Speed */
5553 /* 0x0b: Frame Restart */
5554 buf
[0] = 0x00; buf
[1] = 0x00; /* default */
5555 buf
[2] = 0x00; buf
[3] = 0x00; /* (has no effect/no restart) */
5556 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0a, dev
->sensor_flags
, buf
);
5557 /* Writes to sensor registers 0x0c: Shutter Delay */
5558 /* 0x0d: Soft Reset */
5559 buf
[0] = 0x00; buf
[1] = 0x00; /* 0 master clocks */
5560 buf
[2] = 0x00; buf
[3] = 0x00; /* resume operation */
5561 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0c, dev
->sensor_flags
, buf
);
5562 /* Writes to sensor registers 0x0e: UNDOCUMENTED */
5563 /* 0x0f: UNDOCUMENTED */
5564 buf
[0] = 0x00; buf
[1] = 0x00;
5565 buf
[2] = 0x00; buf
[3] = 0x00;
5566 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0e, dev
->sensor_flags
, buf
);
5567 /* Writes to sensor registers 0x10: UNDOCUMENTED */
5568 /* 0x11: UNDOCUMENTED */
5569 buf
[0] = 0x00; buf
[1] = 0x00;
5570 buf
[2] = 0x00; buf
[3] = 0x00;
5571 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x10, dev
->sensor_flags
, buf
);
5572 /* Writes to sensor registers 0x12: 2X Zoom Column Start (from MT9V111 datasheet) */
5573 /* 0x13: 2X Zoom Row Start (from MT9V111 datasheet) */
5574 buf
[0] = 0x00; buf
[1] = 0x00; /* column 0 => bit0 of reg 0x1e must be set to activate zoom */
5575 buf
[2] = 0x00; buf
[3] = 0x00; /* row 0 => bit0 of reg 0x1e must be set to activate zoom */
5576 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x12, dev
->sensor_flags
, buf
);
5577 /* Writes to sensor registers 0x14: UNDOCUMENTED */
5578 /* 0x15: UNDOCUMENTED */
5579 buf
[0] = 0x00; buf
[1] = 0x00;
5580 buf
[2] = 0x00; buf
[3] = 0x00;
5581 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x14, dev
->sensor_flags
, buf
);
5582 /* Writes to sensor registers 0x16: UNDOCUMENTED */
5583 /* 0x17: UNDOCUMENTED */
5584 buf
[0] = 0x00; buf
[1] = 0x00;
5585 buf
[2] = 0x00; buf
[3] = 0x00;
5586 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x16, dev
->sensor_flags
, buf
);
5587 /* Writes to sensor registers 0x18: UNDOCUMENTED */
5588 /* 0x19: UNDOCUMENTED */
5589 buf
[0] = 0x00; buf
[1] = 0x00;
5590 buf
[2] = 0x00; buf
[3] = 0x00;
5591 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x18, dev
->sensor_flags
, buf
);
5592 /* Writes to sensor registers 0x1a: UNDOCUMENTED */
5593 /* 0x1b: UNDOCUMENTED */
5594 buf
[0] = 0x00; buf
[1] = 0x00;
5595 buf
[2] = 0x00; buf
[3] = 0x00;
5596 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1a, dev
->sensor_flags
, buf
);
5597 /* Writes to sensor registers 0x1c: UNDOCUMENTED */
5598 /* 0x1d: UNDOCUMENTED */
5599 buf
[0] = 0x00; buf
[1] = 0x00;
5600 buf
[2] = 0x00; buf
[3] = 0x00;
5601 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1c, dev
->sensor_flags
, buf
);
5602 /* Write to sensor register 0x32: RESERVED */
5603 buf
[0] = 0x00; buf
[1] = 0x00;
5604 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x32, dev
->sensor_flags
, buf
);
5605 /* Writes to sensor registers 0x20: Read Mode */
5606 /* 0x21: RESERVED */
5607 buf
[0] = 0x11; buf
[1] = 0x01; /* output all frames (including bad frames) + UNDOCUMENTED */
5608 buf
[2] = 0x00; buf
[3] = 0x00;
5609 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x20, dev
->sensor_flags
, buf
);
5610 /* Writes to sensor registers 0x22: RESERVED */
5611 /* 0x23: UNDOCUMENTED */
5612 buf
[0] = 0x00; buf
[1] = 0x00;
5613 buf
[2] = 0x00; buf
[3] = 0x00;
5614 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x22, dev
->sensor_flags
, buf
);
5615 /* Writes to sensor registers 0x24: UNDOCUMENTED */
5616 /* 0x25: UNDOCUMENTED */
5617 buf
[0] = 0x00; buf
[1] = 0x00;
5618 buf
[2] = 0x00; buf
[3] = 0x00;
5619 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x24, dev
->sensor_flags
, buf
);
5620 /* Writes to sensor registers 0x26: UNDOCUMENTED */
5621 /* 0x27: RESERVED */
5622 buf
[0] = 0x00; buf
[1] = 0x00;
5623 buf
[2] = 0x00; buf
[3] = 0x24;
5624 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x26, dev
->sensor_flags
, buf
);
5625 /* "Dummy" write to sensor Register 0x30: RESERVED */
5626 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x30, dev
->sensor_flags
, NULL
);
5627 /* Writes to sensor registers 0x2f: RESERVED */
5628 /* 0x30: RESERVED */
5629 buf
[0] = 0xf7; buf
[1] = 0xb0;
5630 buf
[2] = 0x00; buf
[3] = 0x05;
5631 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2f, dev
->sensor_flags
, buf
);
5632 /* Writes to sensor registers 0x31: RESERVED */
5633 /* 0x32: RESERVED */
5634 buf
[0] = 0x00; buf
[1] = 0x00;
5635 buf
[2] = 0x00; buf
[3] = 0x00;
5636 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x31, dev
->sensor_flags
, buf
);
5637 /* Writes to sensor registers 0x33: RESERVED */
5638 /* 0x34: RESERVED */
5639 buf
[0] = 0x00; buf
[1] = 0x00;
5640 buf
[2] = 0x01; buf
[3] = 0x00;
5641 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x33, dev
->sensor_flags
, buf
);
5642 /* "Dummy" write to sensor Register 0x3b: RESERVED */
5643 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x3b, dev
->sensor_flags
, NULL
);
5644 /* Write to sensor register 0x3d: RESERVED */
5645 buf
[0] = 0x06; buf
[1] = 0x8f;
5646 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x3d, dev
->sensor_flags
, buf
);
5647 /* Writes to sensor registers 0x40: RESERVED */
5648 /* 0x41: RESERVED */
5649 buf
[0] = 0x01; buf
[1] = 0xe0;
5650 buf
[2] = 0x00; buf
[3] = 0xd1;
5651 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x40, dev
->sensor_flags
, buf
);
5652 /* Write to sensor register 0x44: UNDOCUMENTED */
5653 buf
[0] = 0x00; buf
[1] = 0x82;
5654 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x44, dev
->sensor_flags
, buf
);
5655 /* Writes to sensor registers 0x5a: RESERVED */
5656 /* 0x5b: RESERVED */
5657 buf
[0] = 0x00; buf
[1] = 0x00;
5658 buf
[2] = 0x00; buf
[3] = 0x00;
5659 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x5a, dev
->sensor_flags
, buf
);
5660 /* Writes to sensor registers 0x5c: RESERVED */
5661 /* 0x5d: RESERVED */
5662 buf
[0] = 0x00; buf
[1] = 0x00;
5663 buf
[2] = 0x00; buf
[3] = 0x00;
5664 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x5c, dev
->sensor_flags
, buf
);
5665 /* Writes to sensor registers 0x5e: RESERVED */
5666 /* 0x5f: RESERVED */
5667 buf
[0] = 0x00; buf
[1] = 0x00;
5668 buf
[2] = 0xa3; buf
[3] = 0x1d;
5669 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x5e, dev
->sensor_flags
, buf
);
5670 /* "Dummy" write to sensor Register 0x68: UNDOCUMENTED */
5671 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x68, dev
->sensor_flags
, NULL
);
5672 /* Write to sensor register 0x62: RESERVED */
5673 buf
[0] = 0x06; buf
[1] = 0x11;
5674 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x62, dev
->sensor_flags
, buf
);
5677 UDIA_INFO("1 or more errors occured in I2C-message-block 1 !\n");
5680 /* END OF I2C MESSAGES */
5681 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5683 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
5685 usb_microdia_control_write(dev
, 0x1007, buf
, 8);
5687 usb_microdia_control_write(dev
, 0x1006, buf
, 8);
5691 /* *** TEMPORARY SWITCH TO SLAVE ADDRESS 0x50, I2C READ ATTEMPT: */
5692 /* - WE CURRENTLY KNOW NO 6270 CAM THAT IS SUCCESSFULLY READ HERE */
5693 /* - IF READ FAILS, THIS IS NEVER DONE AGAIN (IN NEXT CYCLE OR FURTHER STARTS) */
5694 usb_microdia_control_read(dev
, 0x10c1, buf
, 1); /* returns 0x5c */
5696 usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
5697 retI2C
= sn9c20x_read_i2c_data(dev
, 0x50, 1, 0x00, SN9C20X_I2C_2WIRE
, buf
);
5699 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");
5701 usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
5704 buf
[0] = 0x47; /* ALEX: 0x44 */
5705 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2045 */
5706 buf
[0] = 0x47; /* ALEX: 0x04 */
5707 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2046 */
5709 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 2047 */
5711 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 2048 */
5712 buf
[0] = 0x84; /* ALEX: 0xc0 */
5713 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 2049 */
5716 usb_microdia_control_write(dev, 0x1001, buf, 1);
5719 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
5720 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5723 /* Writes to sensor registers 0x02: Column Start */
5724 /* 0x03: Window Height */
5725 buf
[0] = 0x00; buf
[1] = 0x16; /* coulmn 22 */
5726 buf
[2] = 0x01; buf
[3] = 0xe1; /* 481 */
5727 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x02, dev
->sensor_flags
, buf
); /* URBs 2050-2052 */
5728 /* Writes to sensor registers 0x04: Window Width */
5729 /* 0x05: Horizontal Blanking */
5730 buf
[0] = 0x02; buf
[1] = 0x81; /* 641 */
5731 buf
[2] = 0x00; buf
[3] = 0x04; /* 4 columns (pixel clocks) // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
5732 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x04, dev
->sensor_flags
, buf
); /* URBs 2053-2055 */
5733 /* Writes to sensor registers 0x06: Vertical Blanking */
5734 /* 0x07: Output Control */
5735 buf
[0] = 0x00; buf
[1] = 0x00; /* 0 rows */
5736 buf
[2] = 0x30; buf
[3] = 0x02; /* normal operation + chip enable + RESERVED options */
5737 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x06, dev
->sensor_flags
, buf
); /* URBs 2056-2058 */
5738 /* Write to sensor register 0x0e: UNDOCUMENTED */
5739 buf
[0] = 0x00; buf
[1] = 0x08;
5740 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0e, dev
->sensor_flags
, buf
); /* URBs 2059-2061 */
5742 UDIA_INFO("1 or more errors occured in I2C-message-block 2 !\n");
5745 /* END OF I2C MESSAGES */
5746 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5749 buf
[0] = 0x02; buf
[1] = 0x00; buf
[2] = 0x02; buf
[3] = 0x00;
5750 buf
[4] = 0x28; buf
[5] = 0x3c;
5751 usb_microdia_control_write(dev
, 0x1180, buf
, 6); /* URB 2062 */
5752 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
5753 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); /* URB 2063 */
5755 usb_microdia_control_write(dev
, 0x1189, buf
, 1); /* URB 2064 */
5756 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
5757 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); /* URB 2065 */
5758 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
5759 usb_microdia_control_write(dev
, 0x11ab, buf
, 4); /* URB 2066 */
5760 buf
[0] = 0x78; /* ALEX: 0x7c */
5761 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 2067 */
5762 buf
[0] = 0x18; /* ALEX: 0x1c */
5763 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2068 */
5764 buf
[0] = 0x18; /* ALEX: 0x1c */
5765 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2069 */
5767 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2070 */
5769 usb_microdia_control_write(dev
, 0x118a, buf
, 1); /* URB 2071 */
5771 usb_microdia_control_write(dev
, 0x0395, buf
, 1); /* URB 2072 */
5774 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2073 */
5775 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2074 // 0x38 */
5778 else if (buf
[0] == 0xb8)
5780 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2075 */
5781 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2076 // 0xb9 */
5784 else if (buf
[0] == 0xb9)
5786 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2077 */
5787 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2078 */
5790 else if (buf
[0] == 0xba)
5792 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2079 */
5793 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2080 // 0x3b */
5796 else if (buf
[0] == 0xbb)
5798 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2081 */
5799 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2082 // 0x3c */
5802 else if (buf
[0] == 0xbc)
5804 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2083 */
5805 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2084 // 0x3d */
5806 last_11b8
[0] = buf
[0];
5807 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
5810 else if (buf
[0] == 0xbd)
5812 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2085 */
5813 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2086 */
5816 else if (buf
[0] == 0xbe)
5818 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2087 */
5819 usb_microdia_control_read(dev
, 0x11b8, last_11b8
, 1); /* URB 2088 */
5821 buf
[0] = last_11b8
[0] & 0xf0; /* 0xf0 or 0x70 */
5822 buf
[0] = buf
[0] | 0x0d; /* 0x0c => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 8 READS/WRITES */
5823 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2089 */
5826 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5829 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
5830 /* Write to sensor register 0x06: Vertical Blanking */
5831 buf
[0] = 0x00; buf
[1] = 0x2d; /* 45 rows */
5832 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
); /* URBs 2090-2092 */
5833 /* Write to sensor register 0x05: Horizontal Blanking */
5834 buf
[0] = 0x00; buf
[1] = 0x04; /* 4 columns (pixel clocks) */
5835 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
); /* URBs 2093-2095 */
5836 /* Write to sensor register 0x20: Read Mode */
5837 buf
[0] = 0x00; buf
[1] = 0x00; /* normal readout */
5838 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
); /* URBs 2096-2098 */
5839 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
5840 /* Write to sensor register 0x0a: Pixel Clock Speed */
5841 buf
[0] = 0x00; buf
[1] = 0x00; /* default */
5842 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0a, dev
->sensor_flags
, buf
);
5843 /* Write to sensor register 0x06: Vertical Blanking */
5844 buf
[0] = 0x00; buf
[1] = 0x29; /* 41 rows */
5845 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
);
5846 /* Write to sensor register 0x05: Horizontal Blanking */
5847 buf
[0] = 0x00; buf
[1] = 0x09; /* 9 columns (pixel clocks) */
5848 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
);
5849 /* Write to sensor register 0x20: Read Mode */
5850 buf
[0] = 0x11; buf
[1] = 0x01; /* output all frames (including bad ones) + UNKNOWN */
5851 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
);
5854 UDIA_INFO("1 or more errors occured in I2C-message-block 3 !\n");
5857 /* END OF I2C MESSAGES */
5858 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5862 usb_microdia_control_write(dev
, 0x1180, buf
, 1); /* URB 2099 */
5864 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5867 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
5868 /* Write to sensor register 0x20: Read Mode */
5869 buf
[0] = 0x00; buf
[1] = 0x00; /* normal readout */
5870 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
); /* URBs 2100-2102 */
5871 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
5872 /* Write to sensor register 0x20: Read Mode */
5873 buf
[0] = 0x11; buf
[1] = 0x01; /* output all frames (including bad ones) + UNKNOWN */
5874 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
);
5877 UDIA_INFO("1 or more errors occured in I2C-message-block 4 !\n");
5880 /* END OF I2C MESSAGES */
5881 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5885 usb_microdia_control_write(dev
, 0x1182, buf
, 1); /* URB 2103 */
5888 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5891 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
5892 /* Write to sensor register 0x09: Shutter Width */
5893 buf
[0] = 0x00; buf
[1] = 0x64; /* integration of 100 rows */
5894 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x09, dev
->sensor_flags
, buf
); /* URBs 2104-2106 */
5895 /* Write to sensor register 0x2b: Green 1 Gain */
5896 /* 0x2c: Blue Gain */
5897 buf
[0] = 0x00; buf
[1] = 0xa0; /* 32*0.03125*2 = 2 */
5898 buf
[2] = 0x00; buf
[3] = 0xa0; /* 32*0.03125*2 = 2 */
5899 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2b, dev
->sensor_flags
, buf
); /* URBs 2107-2109 */
5900 /* Write to sensor register 0x2d: Red Gain */
5901 /* 0x2e: Green 2 Gain */
5902 buf
[0] = 0x00; buf
[1] = 0xa0; /* 32*0.03125*2 = 2 */
5903 buf
[2] = 0x00; buf
[3] = 0xa0; /* 32*0.03125*2 = 2 */
5904 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2d, dev
->sensor_flags
, buf
); /* URBs 2110-2112 */
5905 /* "Dummy" write to sensor Register 0x33: RESERVED */
5906 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x33, dev
->sensor_flags
, NULL
); /* URBs 2113-2114 */
5907 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
5908 /* Write to sensor register 0x09: Shutter Width */
5909 buf
[0] = 0x00; buf
[1] = 0x64; /* integration of 100 rows */
5910 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x09, dev
->sensor_flags
, buf
);
5911 /* Write to sensor register 0x07: Output Control */
5912 buf
[0] = 0x00; buf
[1] = 0x03; /* dont update changes until bit0=0, chip enable, normal operation */
5913 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
5914 /* Write to sensor register 0x2b: Green 1 Gain */
5915 /* 0x2c: Blue Gain */
5916 buf
[0] = 0x00; buf
[1] = 0x33; /* 51*0.03125*1 = 1.59375 */
5917 buf
[2] = 0x00; buf
[3] = 0xa0; /* 32*0.03125*2 = 2 */
5918 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2b, dev
->sensor_flags
, buf
);
5919 /* Write to sensor register 0x2d: Red Gain */
5920 /* 0x2e: Green 2 Gain */
5921 buf
[0] = 0x00; buf
[1] = 0xa0; /* 32*0.03125*2 = 2 */
5922 buf
[2] = 0x00; buf
[3] = 0x33; /* 51*0.03125*1 = 1.59375 */
5923 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2d, dev
->sensor_flags
, buf
);
5924 /* "Dummy" write to sensor Register 0x33: RESERVED */
5925 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x33, dev
->sensor_flags
, NULL
);
5926 /* Write to sensor register 0x07: Output Control */
5927 buf
[0] = 0x00; buf
[1] = 0x02; /* chip enable, normal operation */
5928 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
5931 UDIA_INFO("1 or more errors occured in I2C-message-block 5 !\n");
5934 /* END OF I2C MESSAGES */
5935 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5938 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2119 */
5940 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
5942 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
5944 usb_microdia_control_write(dev
, 0x118b, buf
, 1); /* URB 2124 */
5947 usb_microdia_control_write(dev
, 0x10f7, buf
, 1); /* URB 2135 */
5949 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
5951 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
5953 usb_microdia_control_write(dev
, 0x10f8, buf
, 1); /* URB 2138 */
5955 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
5957 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
5959 usb_microdia_control_write(dev
, 0x10fa, buf
, 1); /* URB 2139 */
5962 usb_microdia_control_write(dev
, 0x10f9, buf
, 1); /* URB 2140 */
5964 usb_microdia_control_write(dev
, 0x10f9, buf
, 1); /* URB 2141 */
5966 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2142 */
5967 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
5968 usb_microdia_control_write(dev
, 0x11bc, buf
, 4); /* URB 2143 */
5969 for (k
= 0; k
< 48; k
++)
5971 usb_microdia_control_write(dev
, 0x11c0, buf
, 48); /* URB 2144 */
5973 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05;
5974 buf
[4] = 0x04; buf
[5] = 0x3f;
5975 usb_microdia_control_write(dev
, 0x11a5, buf
, 6); /* URB 2149 */
5977 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
5978 buf
[0] = 0x14; buf
[1] = 0xec; buf
[2] = 0x0a; buf
[3] = 0xf6;
5979 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
5980 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
5982 usb_microdia_control_write(dev
, 0x11af, buf
, 4); /* URB 2150 */
5984 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x2d; buf
[3] = 0xdd;
5985 usb_microdia_control_write(dev
, 0x11b3, buf
, 4); /* URB 2151 */
5986 buf
[0] = 0x47; /* ALEX: 0x04 */
5987 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2152 */
5989 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2153 */
5990 buf
[0] = 0x67; /* ALEX: 0x24 */
5991 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2154 */
5992 buf
[0] = 0x0d; buf
[1] = 0x08; buf
[2] = 0x08; buf
[3] = 0x0d;
5993 buf
[4] = 0x08; buf
[5] = 0x08; buf
[6] = 0x0d; buf
[7] = 0x0d;
5994 buf
[8] = 0x0d; buf
[9] = 0x0d; buf
[10] = 0x11; buf
[11] = 0x0d;
5995 buf
[12] = 0x0d; buf
[13] = 0x11; buf
[14] = 0x15; buf
[15] = 0x21;
5996 buf
[16] = 0x15; buf
[17] = 0x15; buf
[18] = 0x11; buf
[19] = 0x11;
5997 buf
[20] = 0x15; buf
[21] = 0x2a; buf
[22] = 0x1d; buf
[23] = 0x1d;
5998 buf
[24] = 0x19; buf
[25] = 0x21; buf
[26] = 0x32; buf
[27] = 0x2a;
5999 buf
[28] = 0x32; buf
[29] = 0x32; buf
[30] = 0x2e; buf
[31] = 0x2a;
6000 buf
[32] = 0x2e; buf
[33] = 0x2e; buf
[34] = 0x36; buf
[35] = 0x3a;
6001 buf
[36] = 0x4b; buf
[37] = 0x43; buf
[38] = 0x36; buf
[39] = 0x3a;
6002 buf
[40] = 0x47; buf
[41] = 0x3a; buf
[42] = 0x2e; buf
[43] = 0x2e;
6003 buf
[44] = 0x43; buf
[45] = 0x5c; buf
[46] = 0x43; buf
[47] = 0x47;
6004 buf
[48] = 0x4f; buf
[49] = 0x53; buf
[50] = 0x58; buf
[51] = 0x58;
6005 buf
[52] = 0x58; buf
[53] = 0x32; buf
[54] = 0x3f; buf
[55] = 0x60;
6006 buf
[56] = 0x64; buf
[57] = 0x5c; buf
[58] = 0x53; buf
[59] = 0x64;
6007 buf
[60] = 0x4b; buf
[61] = 0x53; buf
[62] = 0x58; buf
[63] = 0x53;
6008 usb_microdia_control_write(dev
, 0x1100, buf
, 64); /* URB 2155 */
6009 buf
[0] = 0x0d; buf
[1] = 0x11; buf
[2] = 0x11; buf
[3] = 0x15;
6010 buf
[4] = 0x11; buf
[5] = 0x15; buf
[6] = 0x26; buf
[7] = 0x15;
6011 buf
[8] = 0x15; buf
[9] = 0x26; buf
[10] = 0x53; buf
[11] = 0x36;
6012 buf
[12] = 0x2e; buf
[13] = 0x36; buf
[14] = 0x53; buf
[15] = 0x53;
6013 buf
[16] = 0x53; buf
[17] = 0x53; buf
[18] = 0x53; buf
[19] = 0x53;
6014 buf
[20] = 0x53; buf
[21] = 0x53; buf
[22] = 0x53; buf
[23] = 0x53;
6015 buf
[24] = 0x53; buf
[25] = 0x53; buf
[26] = 0x53; buf
[27] = 0x53;
6016 buf
[28] = 0x53; buf
[29] = 0x53; buf
[30] = 0x53; buf
[31] = 0x53;
6017 buf
[32] = 0x53; buf
[33] = 0x53; buf
[34] = 0x53; buf
[35] = 0x53;
6018 buf
[36] = 0x53; buf
[37] = 0x53; buf
[38] = 0x53; buf
[39] = 0x53;
6019 buf
[40] = 0x53; buf
[41] = 0x53; buf
[42] = 0x53; buf
[43] = 0x53;
6020 buf
[44] = 0x53; buf
[45] = 0x53; buf
[46] = 0x53; buf
[47] = 0x53;
6021 buf
[48] = 0x53; buf
[49] = 0x53; buf
[50] = 0x53; buf
[51] = 0x53;
6022 buf
[52] = 0x53; buf
[53] = 0x53; buf
[54] = 0x53; buf
[55] = 0x53;
6023 buf
[56] = 0x53; buf
[57] = 0x53; buf
[58] = 0x53; buf
[59] = 0x53;
6024 buf
[60] = 0x53; buf
[61] = 0x53; buf
[62] = 0x53; buf
[63] = 0x53;
6025 usb_microdia_control_write(dev
, 0x1140, buf
, 64); /* URB 2156 */
6026 buf
[0] = 0x47; /* ALEX: 0x04 */
6027 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2157 */
6029 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2158 */
6030 buf
[0] = 0x4b; /* ALEX: 0x08 */
6031 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2159 */
6033 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
6034 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
6037 /* Writes to sensor registers 0x02: Column Start */
6038 /* 0x03: Window Hight */
6039 buf
[0] = 0x00; buf
[1] = 0x16; /* coulmn 22 */
6040 buf
[2] = 0x01; buf
[3] = 0xe1; /* 481 */
6041 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x02, dev
->sensor_flags
, buf
); /* URBs 2160-2162 */
6042 /* Writes to sensor registers 0x04: Window Width */
6043 /* 0x05: Horizontal Blanking */
6044 buf
[0] = 0x02; buf
[1] = 0x81; /* 641 */
6045 buf
[2] = 0x00; buf
[3] = 0x04; /* 4 columns (pixel clocks) */
6046 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x04, dev
->sensor_flags
, buf
); /* URBs 2163-2165 */
6047 /* Writes to sensor registers 0x06: Vertical Blanking */
6048 /* 0x07: Output Control */
6049 buf
[0] = 0x00; buf
[1] = 0x2d; /* 45 rows */
6050 buf
[2] = 0x30; buf
[3] = 0x02; /* RESERVED options */
6051 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x06, dev
->sensor_flags
, buf
); /* URBs 2166-2167 */
6052 /* Writes to sensor register 0x0e: UNDOCUMENTED */
6053 buf
[0] = 0x00; buf
[1] = 0x08;
6054 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0e, dev
->sensor_flags
, buf
); /* URBs 2168-2170 */
6056 UDIA_INFO("1 or more errors occured in I2C-message-block 6 !\n");
6059 /* END OF I2C MESSAGES */
6060 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
6061 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
6063 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
6065 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
6069 buf
[0] = 0x02; buf
[1] = 0x00; buf
[2] = 0x02; buf
[3] = 0x00;
6070 buf
[4] = 0x28; buf
[5] = 0x3c;
6071 usb_microdia_control_write(dev
, 0x1180, buf
, 6); /* URB 2171 */
6072 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
6073 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); /* URB 2172 */
6075 usb_microdia_control_write(dev
, 0x1189, buf
, 1); /* URB 2173 */
6076 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
6077 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); /* URB 2174 */
6078 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
6079 usb_microdia_control_write(dev
, 0x11ab, buf
, 4); /* URB 2175 */
6081 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2176 */
6083 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2177 */
6085 usb_microdia_control_write(dev
, 0x11b9, buf
, 1); /* URB 2178 */
6087 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2179 */
6089 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2180 */
6090 buf
[0] = 0x78; /* ALEX: 0x7c */
6091 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 2181 */
6092 buf
[0] = 0x18; /* ALEX: 0x1c */
6093 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2182 */
6094 buf
[0] = 0x18; /* ALEX: 0x1c */
6095 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2183 */
6096 buf
[0] = 0x7d; /* ALEX: 0xfc */
6097 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2184 */
6099 usb_microdia_control_write(dev
, 0x118a, buf
, 1); /* URB 2185 */
6101 usb_microdia_control_write(dev
, 0x0395, buf
, 1); /* URB 2186 */
6103 if ((last_11b8
[0] == 0x3d) || (last_11b8
[0] == 0x3f))
6105 else if ((last_11b8
[0] == 0xbd) || (last_11b8
[0] == 0xbf))
6107 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2187 */
6108 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2188 // 0x38 */
6111 else if (buf
[0] == 0xb8)
6113 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2189 */
6114 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2190 // 0xb9 */
6117 else if (buf
[0] == 0xb9)
6119 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2191 */
6120 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2192 // 0xba */
6123 else if (buf
[0] == 0xba)
6125 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2193 */
6126 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2194 // 0x3b */
6129 else if (buf
[0] == 0xbb)
6131 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2195 */
6132 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2196 // 0x3c */
6135 else if (buf
[0] == 0xbc)
6137 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2197 */
6138 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2198 // 0x3d */
6139 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
6142 else if (buf
[0] == 0xbd)
6144 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2199 */
6145 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2200 */
6148 else if (buf
[0] == 0xbe)
6150 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2201 */
6151 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2202 */
6153 buf
[0] = buf
[0] & 0xf0; /* 0xf0 or 0x70 */
6154 buf
[0] = buf
[0] | 0x0d; /* 0x0c => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 8 READS/WRITES */
6155 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2089 */
6157 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
6160 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
6161 /* Write to sensor register 0x06: Vertical Blanking */
6162 buf
[0] = 0x00; buf
[1] = 0x2d; /* 45 rows */
6163 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
); /* URBs 2204-2206 */
6164 /* Write to sensor register 0x05: Horizontal Blanking */
6165 buf
[0] = 0x00; buf
[1] = 0x04; /* 4 columns (pixel clocks) */
6166 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
); /* URBs 2207-2209 */
6167 /* Read of sensor register 0x36: Chip Version (mirror of reg0xff) */
6168 retI2C
+= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x36, dev
->sensor_flags
, buf
); /* URBs 2211-2215 // 0x82 0x3a */
6169 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
6170 /* Write to sensor register 0x0a: Pixel Clock Speed */
6171 buf
[0] = 0x00; buf
[1] = 0x00; /* default */
6172 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
);
6173 /* Write to sensor register 0x06: Vertical Blanking */
6174 buf
[0] = 0x00; buf
[1] = 0x29; /* 41 rows */
6175 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
);
6176 /* Write to sensor register 0x05: Horizontal Blanking */
6177 buf
[0] = 0x00; buf
[1] = 0x09; /* 9 columns (pixel clocks) */
6178 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
);
6179 /* Read of sensor register 0x00: Chip Version (=reg0xff) */
6180 retI2C
+= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x00, dev
->sensor_flags
, buf
); /* 0x82 0x43 */
6183 UDIA_INFO("1 or more errors occured in I2C-message-block 7 !\n");
6186 /* END OF I2C MESSAGES */
6187 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
6191 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2216 */
6194 /*** NOW DRIVER DOES STOP-SEQUENCE
6195 - WITHOUT WRITES TO 0x1007 AND 0x1006 (URBs 3544-3550) => MT9V111
6196 - WRITING 0x40 INSTEAD OF 0x60 TO 0x1007 AND 0x1006 => MT9V011
6198 /*** 2nd, 3rd, ... CYCLE: ALL MESSAGES (URBs 1953 - URBs 2216) ARE REPEATED ***/
6199 /*** ----- WE DON'T DO THIS, IT SEEMS TO BE UNNECESSARY ----- ***/
6201 /* Setup IFP registers for AE and AWB (new, not in the logs): */
6202 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
6203 mt9v111_setup_autoexposure(dev
);
6204 mt9v111_setup_autowhitebalance(dev
);
6205 mt9v111_set_autocorrections(dev
, 1);
6208 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6210 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6212 usb_microdia_control_write(dev
, 0x1007, buf
, 1); /* URB 2489 */
6213 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6215 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6217 usb_microdia_control_write(dev
, 0x1006, buf
, 1); /* URB 2490 */
6218 /* => These two writes seem to cause the cam to start sending isochronus USB messages */
6223 int microdia_627b_start_stream(struct usb_microdia
*dev
)
6230 buf
[0] = 0x00; /** Will have to be set for every single interrupt. */
6232 ret = usb_interrupt_msg(dev->udev, 0x00000083, buf, 0x0000001, &actual, 1000); // URB 43
6237 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 44 */
6242 //ret = usb_set_interface(dev->udev, 0, 8);
6243 //if(ret < 0) goto err;
6245 //buf[0] = 0x00; // Will have to be set for every single interrupt
6246 //ret = usb_interrupt_msg(dev->udev, 0x00000083, buf, 0x0000001, &actual, 1000); // URB 45
6251 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 46 */
6257 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 47 */
6263 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 48 */
6269 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 49 */
6275 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 50 */
6280 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20; buf
[3] = 0x10; buf
[4] = 0x08;
6281 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5); /* URB 51 */
6286 buf
[0] = 0x80; buf
[1] = 0x21; buf
[2] = 0x00; buf
[3] = 0x00;
6287 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
6289 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9); /* URB 52 */
6293 /* transferbufferlength is 18, but data is 24 bytes long, what to do ? */
6295 buf
[0] = 0x45; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30; buf
[4] = 0x00;
6296 buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed; buf
[8] = 0x0f; buf
[9] = 0xda;
6297 buf
[10] = 0x0f; buf
[11] = 0x3a; buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00;
6298 buf
[15] = 0xd0; buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
6299 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
6300 ret
= usb_microdia_control_write(dev
, reg
, buf
, 24); /* URB 53 */
6305 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
6306 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3); /* URB 54 */
6311 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
6312 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5); /* URB 55 */
6317 buf
[0] = 0x86; buf
[1] = 0x8c; buf
[2] = 0x08;
6318 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3); /* URB 56 */
6323 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20; buf
[4] = 0x20;
6324 buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b; buf
[8] = 0x4f; buf
[9] = 0x61;
6325 buf
[10] = 0x71; buf
[11] = 0x80; buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab;
6326 buf
[15] = 0xb8; buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
6327 buf
[20] = 0xf4; buf
[21] = 0xff;
6328 ret
= usb_microdia_control_write(dev
, reg
, buf
, 22); /* URB 57 */
6333 buf
[0] = 0x00; buf
[1] = 0x00;
6334 ret
= usb_microdia_control_write(dev
, reg
, buf
, 2); /* URB 58 */
6339 buf
[0] = 0x60; buf
[1] = 0x28; buf
[2] = 0x00; buf
[3] = 0x08; buf
[4] = 0x00;
6340 buf
[5] = 0x40; buf
[6] = 0x01; buf
[7] = 0xf0; buf
[8] = 0x00;
6341 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9); /* URB 59 */
6347 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 60 */
6353 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6358 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6359 OV7660_CTL_COM7
, dev
->sensor_flags
, buf
);
6363 buf
[0] = 0x01; buf
[1] = 0x74; buf
[2] = 0x92; buf
[3] = 0x00;
6364 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6365 OV7660_CTL_GAIN
, dev
->sensor_flags
, buf
);
6369 buf
[0] = 0x00; buf
[1] = 0x7d; buf
[2] = 0x62; buf
[3] = 0x00;
6370 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6371 OV7660_CTL_COM1
, dev
->sensor_flags
, buf
);
6375 buf
[0] = 0x83; buf
[1] = 0x01;
6376 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
6377 OV7660_CTL_RAVE
, dev
->sensor_flags
, buf
);
6381 buf
[0] = 0x00; buf
[1] = 0x08; buf
[2] = 0x04; buf
[3] = 0x62;
6382 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6383 OV7660_CTL_COM3
, dev
->sensor_flags
, buf
);
6387 buf
[0] = 0x00; buf
[1] = 0x40; buf
[2] = 0x05; buf
[3] = 0xf8;
6388 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6389 OV7660_CTL_AECH
, dev
->sensor_flags
, buf
);
6393 buf
[0] = 0x2e; buf
[1] = 0x00; buf
[2] = 0x02;
6394 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 3,
6395 OV7660_CTL_COM9
, dev
->sensor_flags
, buf
);
6399 buf
[0] = 0x10; buf
[1] = 0x60; buf
[2] = 0x02; buf
[3] = 0x7b;
6400 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6401 OV7660_CTL_HSTART
, dev
->sensor_flags
, buf
);
6406 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6407 OV7660_CTL_PSHFT
, dev
->sensor_flags
, buf
);
6411 buf
[0] = 0x01; buf
[1] = 0x0e;
6412 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
6413 OV7660_CTL_MVFP
, dev
->sensor_flags
, buf
);
6417 buf
[0] = 0x07; buf
[1] = 0x07; buf
[2] = 0x07; buf
[3] = 0x07;
6418 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6419 OV7660_CTL_BOS
, dev
->sensor_flags
, buf
);
6423 buf
[0] = 0x68; buf
[1] = 0x58; buf
[2] = 0xd4; buf
[3] = 0x80;
6424 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6425 OV7660_CTL_AEW
, dev
->sensor_flags
, buf
);
6429 buf
[0] = 0x80; buf
[1] = 0x3c; buf
[2] = 0x00; buf
[3] = 0x00;
6430 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6431 OV7660_CTL_GbBIAS
, dev
->sensor_flags
, buf
);
6435 buf
[0] = 0x80; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x62;
6436 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6437 OV7660_CTL_RBIAS
, dev
->sensor_flags
, buf
);
6441 buf
[0] = 0x08; buf
[1] = 0x30; buf
[2] = 0xb4;
6442 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 3,
6443 OV7660_CTL_HSYST
, dev
->sensor_flags
, buf
);
6447 buf
[0] = 0x00; buf
[1] = 0x07; buf
[2] = 0x84; buf
[3] = 0x00;
6448 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6449 OV7660_CTL_CHLF
, dev
->sensor_flags
, buf
);
6453 buf
[0] = 0x0c; buf
[1] = 0x02; buf
[2] = 0x43; buf
[3] = 0x00;
6454 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6455 OV7660_CTL_ADC
, dev
->sensor_flags
, buf
);
6459 buf
[0] = 0x02; buf
[1] = 0x6c; buf
[2] = 0x19; buf
[3] = 0x0e;
6460 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6461 OV7660_CTL_COM11
, dev
->sensor_flags
, buf
);
6465 buf
[0] = 0x41; buf
[1] = 0xc1; buf
[2] = 0x22; buf
[3] = 0x08;
6466 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6467 OV7660_CTL_EDGE
, dev
->sensor_flags
, buf
);
6472 reg
= 0x43; /* RSVD 0x43 is Reserved */
6473 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
6474 reg
, dev
->sensor_flags
, NULL
);
6478 reg
= 0x43; /* RSVD 0x43 is Reserved */
6479 buf
[0] = 0xf0; buf
[1] = 0x10; buf
[2] = 0x78; buf
[3] = 0xa8;
6480 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6481 dev
->sensor_flags
, buf
);
6485 reg
= 0x47; /* RSVD 0x47 is Reserved */
6486 buf
[0] = 0x60; buf
[1] = 0x80; buf
[2] = 0x00; buf
[3] = 0x00;
6487 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6488 dev
->sensor_flags
, buf
);
6492 reg
= 0x4b; /* RSVD 0x4b is Reserved */
6493 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
6494 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6495 dev
->sensor_flags
, buf
);
6500 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
6501 OV7660_CTL_MTX1
, dev
->sensor_flags
, NULL
);
6505 reg
= 0x59; /* RSVD 0x59 is Reserved */
6506 buf
[0] = 0xba; buf
[1] = 0x9a; buf
[2] = 0x22; buf
[3] = 0xb9;
6507 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6508 reg
, dev
->sensor_flags
, buf
);
6512 reg
= 0x5d; /* RSVD 0x5d is Reserved */
6513 buf
[0] = 0x9b; buf
[1] = 0x10; buf
[2] = 0xf0; buf
[3] = 0x05;
6514 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6515 reg
, dev
->sensor_flags
, buf
);
6519 reg
= 0x61; /* RSVD 0x61 is Reserved */
6521 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6522 reg
, dev
->sensor_flags
, buf
);
6526 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x30;
6527 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6528 OV7660_CTL_LCC1
, dev
->sensor_flags
, buf
);
6533 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6534 OV7660_CTL_LCC5
, dev
->sensor_flags
, buf
);
6538 buf
[0] = 0x80; buf
[1] = 0x7a; buf
[2] = 0x90; buf
[3] = 0x80;
6539 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6540 OV7660_CTL_MANU
, dev
->sensor_flags
, buf
);
6545 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6546 OV7660_CTL_DBLV
, dev
->sensor_flags
, buf
);
6550 reg
= 0x8b; /* RSVD 0x8b is Reserved */
6551 buf
[0] = 0x99; buf
[1] = 0x99; buf
[2] = 0xcf;
6552 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 3, reg
,
6553 dev
->sensor_flags
, buf
);
6557 buf
[0] = 0x00; buf
[1] = 0x00;
6558 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
6559 OV7660_CTL_DM_LNL
, dev
->sensor_flags
, buf
);
6565 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6571 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6576 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6582 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6586 /* TRY TO READ FROM EEPROM: */
6588 ret
= sn9c20x_read_i2c_data(dev
, 0x50, 1, reg
, SN9C20X_I2C_2WIRE
, buf
);
6590 UDIA_INFO("No EEPROM found\n");
6592 UDIA_INFO("Read from EEPROM successful\n");
6596 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6602 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6608 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6614 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6620 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6626 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6631 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6632 OV7660_CTL_VREF
, dev
->sensor_flags
, buf
);
6636 buf
[0] = 0x10; buf
[1] = 0x61; buf
[2] = 0x02; buf
[3] = 0x7a;
6637 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6638 OV7660_CTL_HSTART
, dev
->sensor_flags
, buf
);
6642 /* "Dummy" write: */
6643 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
6644 OV7660_CTL_PSHFT
, dev
->sensor_flags
, NULL
);
6649 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6650 OV7660_CTL_HREF
, dev
->sensor_flags
, buf
);
6655 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6656 OV7660_CTL_HREF
, dev
->sensor_flags
, buf
);
6661 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6662 OV7660_CTL_HREF
, dev
->sensor_flags
, buf
);
6667 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6668 OV7660_CTL_HREF
, dev
->sensor_flags
, buf
);
6673 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6674 OV7660_CTL_HREF
, dev
->sensor_flags
, buf
);
6679 buf
[0] = 0x01; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00; buf
[4] = 0x28;
6681 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
6686 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
6687 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
6693 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6698 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
6699 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
6704 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
6705 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
6711 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6717 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6723 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6729 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6735 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6741 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6747 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6750 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6756 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6759 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6765 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6768 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6774 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6777 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6783 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6786 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6792 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6795 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6801 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6806 //ret = usb_microdia_control_read(dev, reg, buf, 1);
6807 //if(ret < 0) goto err;
6811 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6812 OV7660_CTL_CLKRC
, dev
->sensor_flags
, buf
);
6817 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6818 OV7660_CTL_EXHCH
, dev
->sensor_flags
, buf
);
6823 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6824 OV7660_CTL_EXHCL
, dev
->sensor_flags
, buf
);
6829 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6830 OV7660_CTL_DM_LNL
, dev
->sensor_flags
, buf
);
6835 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6836 OV7660_CTL_DM_LNH
, dev
->sensor_flags
, buf
);
6841 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6842 OV7660_CTL_MVFP
, dev
->sensor_flags
, buf
);
6847 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6848 OV7660_CTL_MVFP
, dev
->sensor_flags
, buf
);
6853 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6854 OV7660_CTL_VREF
, dev
->sensor_flags
, buf
);
6859 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6860 OV7660_CTL_VREF
, dev
->sensor_flags
, buf
);
6865 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6866 OV7660_CTL_AECH
, dev
->sensor_flags
, buf
);
6871 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6872 OV7660_CTL_COM1
, dev
->sensor_flags
, buf
);
6877 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6878 OV7660_CTL_ADVFL
, dev
->sensor_flags
, buf
);
6883 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6884 OV7660_CTL_ADVFH
, dev
->sensor_flags
, buf
);
6889 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6890 OV7660_CTL_GAIN
, dev
->sensor_flags
, buf
);
6894 buf
[0] = 0x78; buf
[1] = 0x78;
6895 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
6896 OV7660_CTL_BLUE
, dev
->sensor_flags
, buf
);
6902 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6908 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6914 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6920 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6926 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6932 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6938 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6944 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6949 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
6950 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
6955 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00;
6956 buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00;
6957 buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00;
6958 buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00;
6959 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x00; buf
[23] = 0x00; buf
[24] = 0x00;
6960 buf
[25] = 0x00; buf
[26] = 0x00; buf
[27] = 0x00; buf
[28] = 0x00; buf
[29] = 0x00;
6961 buf
[30] = 0x00; buf
[31] = 0x00; buf
[32] = 0x00;
6962 ret
= usb_microdia_control_write(dev
, reg
, buf
, 33);
6965 /* transferbufferlength was only 30 ? */
6968 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05; buf
[4] = 0x04;
6970 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
6975 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
6976 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
6981 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x32; buf
[3] = 0xdd;
6982 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
6988 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6994 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7000 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7005 buf
[0] = 0x0d; buf
[1] = 0x08; buf
[2] = 0x08; buf
[3] = 0x0d; buf
[4] = 0x08;
7006 buf
[5] = 0x08; buf
[6] = 0x0d; buf
[7] = 0x0d; buf
[8] = 0x0d; buf
[9] = 0x0d;
7007 buf
[10] = 0x11; buf
[11] = 0x0d; buf
[12] = 0x0d; buf
[13] = 0x11; buf
[14] = 0x15;
7008 buf
[15] = 0x21; buf
[16] = 0x15; buf
[17] = 0x15; buf
[18] = 0x11; buf
[19] = 0x11;
7009 buf
[20] = 0x15; buf
[21] = 0x2a; buf
[22] = 0x1d; buf
[23] = 0x1d; buf
[24] = 0x19;
7010 buf
[25] = 0x21; buf
[26] = 0x32; buf
[27] = 0x2a; buf
[28] = 0x32; buf
[29] = 0x32;
7011 buf
[30] = 0x2e; buf
[31] = 0x2a; buf
[32] = 0x2e; buf
[33] = 0x2e; buf
[34] = 0x36;
7012 buf
[35] = 0x3a; buf
[36] = 0x4b; buf
[37] = 0x43; buf
[38] = 0x36; buf
[39] = 0x3a;
7013 buf
[40] = 0x47; buf
[41] = 0x3a; buf
[42] = 0x2e; buf
[43] = 0x2e; buf
[44] = 0x43;
7014 buf
[45] = 0x5c; buf
[46] = 0x43; buf
[47] = 0x47; buf
[48] = 0x4f; buf
[49] = 0x53;
7015 buf
[50] = 0x58; buf
[51] = 0x58; buf
[52] = 0x58; buf
[53] = 0x32; buf
[54] = 0x3f;
7016 buf
[55] = 0x60; buf
[56] = 0x64; buf
[57] = 0x5c; buf
[58] = 0x53; buf
[59] = 0x64;
7017 buf
[60] = 0x4b; buf
[61] = 0x53; buf
[62] = 0x58; buf
[63] = 0x53;
7018 ret
= usb_microdia_control_write(dev
, reg
, buf
, 64);
7021 /* transferbufferlength is only 40 ? */
7024 buf
[0] = 0x0d; buf
[1] = 0x11; buf
[2] = 0x11; buf
[3] = 0x15; buf
[4] = 0x11;
7025 buf
[5] = 0x15; buf
[6] = 0x26; buf
[7] = 0x15; buf
[8] = 0x15; buf
[9] = 0x26;
7026 buf
[10] = 0x53; buf
[11] = 0x36; buf
[12] = 0x2e; buf
[13] = 0x36; buf
[14] = 0x53;
7027 buf
[15] = 0x53; buf
[16] = 0x53; buf
[17] = 0x53; buf
[18] = 0x53; buf
[19] = 0x53;
7028 buf
[20] = 0x53; buf
[21] = 0x53; buf
[22] = 0x53; buf
[23] = 0x53; buf
[24] = 0x53;
7029 buf
[25] = 0x53; buf
[26] = 0x53; buf
[27] = 0x53; buf
[28] = 0x53; buf
[29] = 0x53;
7030 buf
[30] = 0x53; buf
[31] = 0x53; buf
[32] = 0x53; buf
[33] = 0x53; buf
[34] = 0x53;
7031 buf
[35] = 0x53; buf
[36] = 0x53; buf
[37] = 0x53; buf
[38] = 0x53; buf
[39] = 0x53;
7032 buf
[40] = 0x53; buf
[41] = 0x53; buf
[42] = 0x53; buf
[43] = 0x53; buf
[44] = 0x53;
7033 buf
[45] = 0x53; buf
[46] = 0x53; buf
[47] = 0x53; buf
[48] = 0x53; buf
[49] = 0x53;
7034 buf
[50] = 0x53; buf
[51] = 0x53; buf
[52] = 0x53; buf
[53] = 0x53; buf
[54] = 0x53;
7035 buf
[55] = 0x53; buf
[56] = 0x53; buf
[57] = 0x53; buf
[58] = 0x53; buf
[59] = 0x53;
7036 buf
[60] = 0x53; buf
[61] = 0x53; buf
[62] = 0x53; buf
[63] = 0x53;
7037 ret
= usb_microdia_control_write(dev
, reg
, buf
, 64);
7040 /* transferbufferlength is only 40 ? */
7044 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7050 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7056 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7061 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7062 OV7660_CTL_VREF
, dev
->sensor_flags
, buf
);
7067 buf
[0] = 0x01; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00; buf
[4] = 0x28;
7069 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
7074 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
7075 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
7081 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7086 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
7087 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
7092 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
7093 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
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);
7123 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7129 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7135 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7141 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7147 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7153 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7159 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7165 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7168 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7174 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7177 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7183 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7186 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7192 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7195 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7201 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7204 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7210 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7213 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7219 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7224 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7225 OV7660_CTL_CLKRC
, dev
->sensor_flags
, buf
);
7230 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7231 OV7660_CTL_EXHCH
, dev
->sensor_flags
, buf
);
7236 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7237 OV7660_CTL_EXHCL
, dev
->sensor_flags
, buf
);
7242 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7243 OV7660_CTL_DM_LNL
, dev
->sensor_flags
, buf
);
7248 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7249 OV7660_CTL_DM_LNH
, dev
->sensor_flags
, buf
);
7253 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7254 OV7660_CTL_PID
, dev
->sensor_flags
, buf
);
7258 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7259 OV7660_CTL_VER
, dev
->sensor_flags
, buf
);
7263 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7264 OV7660_CTL_MIDH
, dev
->sensor_flags
, buf
);
7268 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7269 OV7660_CTL_MIDL
, dev
->sensor_flags
, buf
);
7275 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7281 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7287 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7293 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7299 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7304 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7305 OV7660_CTL_AECH
, dev
->sensor_flags
, buf
);
7310 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7311 OV7660_CTL_COM1
, dev
->sensor_flags
, buf
);
7316 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7317 OV7660_CTL_GAIN
, dev
->sensor_flags
, buf
);
7321 buf
[0] = 0x00; buf
[1] = 0x01;
7322 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
7323 OV7660_CTL_ADVFL
, dev
->sensor_flags
, buf
);
7328 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7329 OV7660_CTL_GAIN
, dev
->sensor_flags
, buf
);
7333 buf
[0] = 0x50; buf
[1] = 0x60;
7334 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
7335 OV7660_CTL_BLUE
, dev
->sensor_flags
, buf
);
7339 buf
[0] = 0xfc; buf
[1] = 0x04;
7340 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
7341 OV7660_CTL_ADVFL
, dev
->sensor_flags
, buf
);
7345 buf
[0] = 0x1f; buf
[1] = 0x00;
7346 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
7347 OV7660_CTL_GAIN
, dev
->sensor_flags
, buf
);
7351 buf
[0] = 0x48; buf
[1] = 0x58;
7352 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
7353 OV7660_CTL_BLUE
, dev
->sensor_flags
, buf
);
7357 buf
[0] = 0xf6; buf
[1] = 0x0b;
7358 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
7359 OV7660_CTL_ADVFL
, dev
->sensor_flags
, buf
);
7365 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7369 buf
[0] = 0x50; buf
[1] = 0x60;
7370 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
7371 OV7660_CTL_BLUE
, dev
->sensor_flags
, buf
);
7377 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg
, ret
);
7381 UDIA_ERROR("r/w in sensor register %x failed (%d)!\n", reg
, ret
);
7387 * @brief From UsbSnoop-plugin-parsed.log
7391 * @returns 0 (OK) or <0 (Error)
7393 * @author Vincent, Kuzja
7395 int microdia_6288_start_stream(struct usb_microdia
*dev
)
7405 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7411 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7417 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7423 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7429 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7435 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7440 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20;
7441 buf
[3] = 0x10; buf
[4] = 0x08;
7442 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
7447 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;
7448 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9);
7453 buf
[0] = 0x44; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30;
7454 buf
[4] = 0x00; buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed;
7455 buf
[8] = 0x0f; buf
[9] = 0xda; buf
[10] = 0x0f; buf
[11] = 0x3a;
7456 buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00; buf
[15] = 0xd0;
7457 buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
7458 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
7459 ret
= usb_microdia_control_write(dev
, reg
, buf
, 24);
7464 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
7465 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
7470 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
7471 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
7476 buf
[0] = 0x86; buf
[1] = 0xcc; buf
[2] = 0x08;
7477 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
7482 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20;
7483 buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b;
7484 buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80;
7485 buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8;
7486 buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
7487 buf
[20] = 0xf4; buf
[21] = 0xff;
7488 ret
= usb_microdia_control_write(dev
, reg
, buf
, 22);
7493 buf
[0] = 0x00; buf
[1] = 0x00;
7494 ret
= usb_microdia_control_write(dev
, reg
, buf
, 2);
7499 buf
[0] = 0x60; buf
[1] = 0x20; buf
[2] = 0x00; buf
[3] = 0x08;
7500 buf
[4] = 0x00; buf
[5] = 0x40; buf
[6] = 0x01; buf
[7] = 0xf0;
7502 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9);
7508 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7514 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7519 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x12; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7520 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7525 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7530 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7535 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x12; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7536 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7541 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7546 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7551 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x0d; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7552 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7557 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7562 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7567 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x0e; buf
[3] = 0x61; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7568 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7573 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7578 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7583 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x11; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7584 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7589 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7594 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7599 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x13; buf
[3] = 0xb8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7600 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7605 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7610 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7615 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x14; buf
[3] = 0x3e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7616 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7621 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7626 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7631 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x16; buf
[3] = 0x24; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7632 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7637 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7642 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7647 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7648 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7653 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7658 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7663 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7664 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7669 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7674 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7679 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7680 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7685 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7690 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7695 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x27; buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7696 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7701 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7706 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7711 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x28; buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7712 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7717 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7722 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7727 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x29; buf
[3] = 0x15; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7728 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7733 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7738 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7743 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2c; buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7744 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7749 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7754 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7759 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x32; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7760 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7765 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7770 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7775 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x34; buf
[3] = 0x3d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7776 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7781 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7786 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7791 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x35; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7792 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7797 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7802 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7807 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x36; buf
[3] = 0xf8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7808 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7813 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7818 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7823 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x38; buf
[3] = 0x12; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7824 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7829 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7834 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7839 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x39; buf
[3] = 0x57; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7840 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7845 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7850 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7855 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7856 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7861 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7866 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7871 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3b; buf
[3] = 0xcc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7872 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7877 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7882 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7887 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3c; buf
[3] = 0x0c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7888 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7893 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7898 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7903 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3d; buf
[3] = 0x19; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7904 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7909 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7914 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7919 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3e; buf
[3] = 0x0c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7920 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7925 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7930 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7935 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3f; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7936 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7941 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7946 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7951 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x41; buf
[3] = 0x40; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7952 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7957 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7962 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7967 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x42; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7968 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7973 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7978 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7983 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x45; buf
[3] = 0x46; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7984 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7989 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7994 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7999 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x46; buf
[3] = 0x62; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8000 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8005 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8010 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8015 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x47; buf
[3] = 0x2a; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8016 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8021 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8026 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8031 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x48; buf
[3] = 0x3c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8032 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8037 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8042 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8047 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4a; buf
[3] = 0xf0; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8048 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8053 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8058 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8063 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4b; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8064 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8069 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8074 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8079 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4c; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8080 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8085 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8090 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8095 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4d; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8096 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8101 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8106 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8111 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4e; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8112 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8117 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8122 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8127 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x69; buf
[3] = 0x02; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8128 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8133 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8138 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8143 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x6c; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8144 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8149 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8154 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8159 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x6f; buf
[3] = 0x9e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8160 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8165 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8170 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8175 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x70; buf
[3] = 0x05; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8176 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8181 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8186 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8191 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x71; buf
[3] = 0x78; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8192 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8197 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8202 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8207 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x77; buf
[3] = 0x02; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8208 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8213 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8218 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8223 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x8a; buf
[3] = 0x23; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8224 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8229 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8234 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8239 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x8c; buf
[3] = 0x0d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8240 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8245 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8250 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8255 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x90; buf
[3] = 0x7e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8256 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8261 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8266 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8271 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x91; buf
[3] = 0x7c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8272 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8277 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8282 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8287 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x9f; buf
[3] = 0x6e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8288 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8293 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8298 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8303 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa0; buf
[3] = 0x6e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8304 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8309 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8314 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8319 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa4; buf
[3] = 0x50; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8320 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8325 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8330 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8335 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa5; buf
[3] = 0x68; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8336 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8341 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8346 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8351 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa6; buf
[3] = 0x60; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8352 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8357 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8362 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8367 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa8; buf
[3] = 0xc1; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8368 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8373 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8378 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8383 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa9; buf
[3] = 0xfa; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8384 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8389 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8394 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8399 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xaa; buf
[3] = 0x92; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8400 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8405 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8410 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8415 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xab; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8416 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8421 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8426 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8431 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xac; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8432 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8437 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8442 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8447 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xad; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8448 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8453 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8458 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8463 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xae; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8464 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8469 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8474 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8479 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xaf; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8480 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8485 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8490 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8495 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb2; buf
[3] = 0xf2; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8496 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8501 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8506 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8511 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb3; buf
[3] = 0x20; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8512 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8517 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8522 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8527 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb4; buf
[3] = 0x20; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8528 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8533 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8538 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8543 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb5; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8544 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8549 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8554 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8559 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb6; buf
[3] = 0xaf; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8560 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8565 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8570 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8575 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbb; buf
[3] = 0xae; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8576 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8581 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8586 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8591 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbc; buf
[3] = 0x44; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8592 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8597 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8602 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8607 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbd; buf
[3] = 0x44; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8608 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8613 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8618 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8623 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbe; buf
[3] = 0x3b; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8624 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8629 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8634 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8639 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbf; buf
[3] = 0x3a; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8640 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8645 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8650 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8655 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc0; buf
[3] = 0xe2; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8656 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8661 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8666 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8671 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc1; buf
[3] = 0xc8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8672 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8677 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8682 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8687 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc2; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8688 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8693 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8698 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8703 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc4; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8704 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8709 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8714 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8719 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc6; buf
[3] = 0x85; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8720 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8725 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8730 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8735 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc7; buf
[3] = 0x81; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8736 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8741 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8746 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8751 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc9; buf
[3] = 0xe0; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8752 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8757 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8762 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8767 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xca; buf
[3] = 0xe8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8768 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8773 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8778 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8783 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xcc; buf
[3] = 0xd8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8784 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8789 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8794 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8799 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xcd; buf
[3] = 0x93; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8800 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8805 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8810 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8815 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8821 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8826 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8827 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8832 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8837 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8838 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8843 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8848 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8849 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8854 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8859 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8860 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8865 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8870 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8871 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8876 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8881 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8882 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8887 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8892 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8893 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8898 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8903 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8904 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8909 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8914 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8915 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8920 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8921 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8926 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8931 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8932 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8937 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8942 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8943 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8948 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8953 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8954 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8959 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8964 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8965 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8970 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8975 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8976 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8981 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8986 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8987 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8992 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8997 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8998 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9003 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9008 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9009 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9014 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
9020 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9026 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9032 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9038 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9044 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9050 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9056 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9062 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9068 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9074 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9080 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9085 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x03; buf
[3] = 0x14; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9086 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9091 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9096 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9101 buf
[0] = 0xd0; buf
[1] = 0x30; buf
[2] = 0x17; buf
[3] = 0x1b; buf
[4] = 0xbc; buf
[5] = 0x01; buf
[6] = 0x7a; buf
[7] = 0x10;
9102 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9107 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9112 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9117 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1b; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9118 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9123 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9128 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x32; buf
[3] = 0x82; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9129 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9134 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9139 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9144 buf
[0] = 0x05; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00; buf
[4] = 0x50; buf
[5] = 0x78;
9145 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
9150 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
9151 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
9157 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9163 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9168 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0xa0;
9169 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9174 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x78;
9175 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9181 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9187 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9193 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9199 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9205 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9211 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9217 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9222 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9228 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9233 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9239 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9244 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9250 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9255 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9261 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9266 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9272 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9277 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9283 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9288 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x11; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9289 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9294 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9299 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9304 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9305 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9310 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9315 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9320 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2b; buf
[3] = 0x06; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9321 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9326 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9331 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9336 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x92; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9337 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9342 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9347 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9352 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x93; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9353 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9358 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9363 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9368 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9369 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9374 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9379 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9384 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9385 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9390 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9395 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9401 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9406 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x10; buf
[3] = 0x7d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9407 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9412 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9417 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9422 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x04; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9423 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9428 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9433 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9438 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa1; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9439 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9444 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9449 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9454 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2d; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9455 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9460 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9465 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9470 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9471 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9476 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9481 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9486 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9487 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9492 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9497 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9502 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9503 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9508 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9513 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9518 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9519 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9524 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9529 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9535 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9541 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9547 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9553 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9559 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9565 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9571 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9577 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9582 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
9583 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9588 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
9589 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
9590 buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00;
9591 buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00;
9592 buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00;
9593 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x00; buf
[23] = 0x00;
9594 buf
[24] = 0x00; buf
[25] = 0x00; buf
[26] = 0x00; buf
[27] = 0x00;
9595 buf
[28] = 0x00; buf
[29] = 0x00; buf
[30] = 0x00; buf
[31] = 0x00;
9596 buf
[32] = 0x00; buf
[33] = 0x00; buf
[34] = 0x00; buf
[35] = 0x00;
9597 buf
[36] = 0x00; buf
[37] = 0x00; buf
[38] = 0x00; buf
[39] = 0x00;
9598 buf
[40] = 0x00; buf
[41] = 0x00; buf
[42] = 0x00; buf
[43] = 0x00;
9599 buf
[44] = 0x00; buf
[45] = 0x00; buf
[46] = 0x00; buf
[47] = 0x00;
9600 ret
= usb_microdia_control_write(dev
, reg
, buf
, 48);
9605 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05;
9606 buf
[4] = 0x04; buf
[5] = 0x3f;
9607 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
9612 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
9613 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9618 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x32; buf
[3] = 0xdd;
9619 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9625 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9631 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9637 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9642 buf
[0] = 0x0d; buf
[1] = 0x08; buf
[2] = 0x08; buf
[3] = 0x0d;
9643 buf
[4] = 0x08; buf
[5] = 0x08; buf
[6] = 0x0d; buf
[7] = 0x0d;
9644 buf
[8] = 0x0d; buf
[9] = 0x0d; buf
[10] = 0x11; buf
[11] = 0x0d;
9645 buf
[12] = 0x0d; buf
[13] = 0x11; buf
[14] = 0x15; buf
[15] = 0x21;
9646 buf
[16] = 0x15; buf
[17] = 0x15; buf
[18] = 0x11; buf
[19] = 0x11;
9647 buf
[20] = 0x15; buf
[21] = 0x2a; buf
[22] = 0x1d; buf
[23] = 0x1d;
9648 buf
[24] = 0x19; buf
[25] = 0x21; buf
[26] = 0x32; buf
[27] = 0x2a;
9649 buf
[28] = 0x32; buf
[29] = 0x32; buf
[30] = 0x2e; buf
[31] = 0x2a;
9650 buf
[32] = 0x2e; buf
[33] = 0x2e; buf
[34] = 0x36; buf
[35] = 0x3a;
9651 buf
[36] = 0x4b; buf
[37] = 0x43; buf
[38] = 0x36; buf
[39] = 0x3a;
9652 buf
[40] = 0x47; buf
[41] = 0x3a; buf
[42] = 0x2e; buf
[43] = 0x2e;
9653 buf
[44] = 0x43; buf
[45] = 0x5c; buf
[46] = 0x43; buf
[47] = 0x47;
9654 buf
[48] = 0x4f; buf
[49] = 0x53; buf
[50] = 0x58; buf
[51] = 0x58;
9655 buf
[52] = 0x58; buf
[53] = 0x32; buf
[54] = 0x3f; buf
[55] = 0x60;
9656 buf
[56] = 0x64; buf
[57] = 0x5c; buf
[58] = 0x53; buf
[59] = 0x64;
9657 buf
[60] = 0x4b; buf
[61] = 0x53; buf
[62] = 0x58; buf
[63] = 0x53;
9658 ret
= usb_microdia_control_write(dev
, reg
, buf
, 64);
9663 buf
[0] = 0x0d; buf
[1] = 0x11; buf
[2] = 0x11; buf
[3] = 0x15;
9664 buf
[4] = 0x11; buf
[5] = 0x15; buf
[6] = 0x26; buf
[7] = 0x15;
9665 buf
[8] = 0x15; buf
[9] = 0x26; buf
[10] = 0x53; buf
[11] = 0x36;
9666 buf
[12] = 0x2e; buf
[13] = 0x36; buf
[14] = 0x53; buf
[15] = 0x53;
9667 buf
[16] = 0x53; buf
[17] = 0x53; buf
[18] = 0x53; buf
[19] = 0x53;
9668 buf
[20] = 0x53; buf
[21] = 0x53; buf
[22] = 0x53; buf
[23] = 0x53;
9669 buf
[24] = 0x53; buf
[25] = 0x53; buf
[26] = 0x53; buf
[27] = 0x53;
9670 buf
[28] = 0x53; buf
[29] = 0x53; buf
[30] = 0x53; buf
[31] = 0x53;
9671 buf
[32] = 0x53; buf
[33] = 0x53; buf
[34] = 0x53; buf
[35] = 0x53;
9672 buf
[36] = 0x53; buf
[37] = 0x53; buf
[38] = 0x53; buf
[39] = 0x53;
9673 buf
[40] = 0x53; buf
[41] = 0x53; buf
[42] = 0x53; buf
[43] = 0x53;
9674 buf
[44] = 0x53; buf
[45] = 0x53; buf
[46] = 0x53; buf
[47] = 0x53;
9675 buf
[48] = 0x53; buf
[49] = 0x53; buf
[50] = 0x53; buf
[51] = 0x53;
9676 buf
[52] = 0x53; buf
[53] = 0x53; buf
[54] = 0x53; buf
[55] = 0x53;
9677 buf
[56] = 0x53; buf
[57] = 0x53; buf
[58] = 0x53; buf
[59] = 0x53;
9678 buf
[60] = 0x53; buf
[61] = 0x53; buf
[62] = 0x53; buf
[63] = 0x53;
9679 ret
= usb_microdia_control_write(dev
, reg
, buf
, 64);
9685 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9691 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9697 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9703 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9709 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9715 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9721 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9727 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9732 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x03; buf
[3] = 0x14; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9733 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9738 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9743 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9748 buf
[0] = 0xd0; buf
[1] = 0x30; buf
[2] = 0x17; buf
[3] = 0x1b; buf
[4] = 0xbc; buf
[5] = 0x01; buf
[6] = 0x7a; buf
[7] = 0x10;
9749 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9754 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9759 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9764 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1b; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9765 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9770 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9775 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x32; buf
[3] = 0x82; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9776 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9781 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9786 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9791 buf
[0] = 0x05; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00;
9792 buf
[4] = 0x50; buf
[5] = 0x78;
9793 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
9798 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0;
9800 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
9806 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9811 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0xa0;
9812 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9817 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x78;
9818 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9824 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9830 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9836 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9842 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9848 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9854 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9860 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9866 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9872 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9878 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9884 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9890 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9895 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9901 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9906 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9912 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9917 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9923 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9928 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9934 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9939 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9945 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9950 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9956 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9961 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x11; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9962 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9967 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9972 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9977 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9978 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9983 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9988 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9993 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2b; buf
[3] = 0x70; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9994 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9999 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10004 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10009 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x92; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10010 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10015 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10020 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10025 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x93; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10026 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10031 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10036 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10041 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x0a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10042 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10047 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10052 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10053 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10058 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10063 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
10068 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x0b; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10069 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10074 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10079 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10080 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10085 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10090 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
10095 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1c; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10096 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10101 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10106 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10107 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10112 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10117 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
10122 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1d; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10123 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10128 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10133 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10134 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10139 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10144 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
10150 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10156 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10162 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10167 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa1; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10168 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10173 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10178 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10183 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x10; buf
[3] = 0x06; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10184 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10189 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10194 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10199 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x04; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10200 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10205 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10210 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10215 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2d; buf
[3] = 0x36; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10216 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10221 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10226 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10231 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10232 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10237 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10242 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10247 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
10248 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10253 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10258 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10263 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x06; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
10264 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10269 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10274 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10279 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x94; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10280 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10285 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10290 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10295 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x8d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10296 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10301 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10306 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10311 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x09; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
10312 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10317 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10322 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10327 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x95; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10328 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10333 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10338 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10343 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x85; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10344 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10349 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10354 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10359 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x0c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
10360 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10365 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10370 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10375 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x96; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10376 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10381 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10386 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10391 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10392 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10397 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10402 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10407 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x7c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10408 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10413 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10418 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10424 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10430 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10437 /* END OF MICRODIA 6288 START STREAM */
10441 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
10446 * @brief From UsbSnoop-plugin-parsed.log
10450 * @returns 0 if all OK
10452 * this function starts video stream Microdia 6128 webcam
10453 * Bridge SN9C325 + OM6802 CMOS sensor
10454 * note: comments are my observations so they could be wrong
10456 int microdia_6128_start_stream(struct usb_microdia
*dev
)
10463 0x00, 0x1a, 0x34, 0x27, 0x20, 0xa0, 0x34, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00
10467 0x08, 0x22, 0x44, 0x63, 0x7d, 0x92, 0xa3, 0xaf, 0xbc, 0xc4, 0xcd, 0xd5, 0xdc, 0xe1, 0xe8, 0xef,
10472 0x15, 0x00, 0x2b, 0x00, 0x08, 0x00, 0xeb, 0x0f, 0xd7, 0x0f, 0x43, 0x00, 0x3d, 0x00, 0xca, 0x0f,
10473 0xf7, 0x0f, 0x0c, 0x00, 0x00
10476 __u8 qtable_1
[] = {
10477 0x06, 0x04, 0x04, 0x06, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0x06, 0x08, 0x0a, 0x10,
10478 0x0a, 0x0a, 0x08, 0x08, 0x0a, 0x13, 0x0e, 0x0e, 0x0c, 0x10, 0x17, 0x13, 0x17, 0x17, 0x15, 0x13,
10479 0x15, 0x15, 0x19, 0x1b, 0x23, 0x1f, 0x19, 0x1b, 0x21, 0x1b, 0x15, 0x15, 0x1f, 0x2b, 0x1f, 0x21,
10480 0x25, 0x27, 0x29, 0x29, 0x29, 0x17, 0x1d, 0x2d, 0x2f, 0x2b, 0x27, 0x2f, 0x23, 0x27, 0x29, 0x27
10484 __u8 qtable_2
[] = {
10485 0x06, 0x08, 0x08, 0x0a, 0x08, 0x0a, 0x12, 0x0a, 0x0a, 0x12, 0x27, 0x19, 0x15, 0x19, 0x27, 0x27,
10486 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
10487 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
10488 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
10491 __u8 om6802_sensor
[][8] = {
10492 {0xa0, dev
->sensor_slave_address
, 0xd6, 0x02, 0x00, 0x00, 0x00, 0x10},
10493 {0xa0, dev
->sensor_slave_address
, 0xae, 0xe2, 0x00, 0x00, 0x00, 0x10},
10494 {0xa0, dev
->sensor_slave_address
, 0xdf, 0x6d, 0x00, 0x00, 0x00, 0x10}, // Enter factory mode
10495 {0xa0, dev
->sensor_slave_address
, 0xdd, 0x18, 0x00, 0x00, 0x00, 0x10}, // RGB, uyvy1,Raw RGB, n/1/2, n/clp
10496 {0xa0, dev
->sensor_slave_address
, 0x5a, 0xc0, 0x00, 0x00, 0x00, 0x10},
10497 {0xa0, dev
->sensor_slave_address
, 0xfb, 0x11, 0x00, 0x00, 0x00, 0x10},
10498 {0xa0, dev
->sensor_slave_address
, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x10},
10499 {0xa0, dev
->sensor_slave_address
, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x10},
10500 {0xa0, dev
->sensor_slave_address
, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x10},
10501 {0xa0, dev
->sensor_slave_address
, 0xfb, 0xee, 0x00, 0x00, 0x00, 0x10},
10502 {0xa0, dev
->sensor_slave_address
, 0x5d, 0x80, 0x00, 0x00, 0x00, 0x10},
10503 {0xa0, dev
->sensor_slave_address
, 0x71, 0x84, 0x00, 0x00, 0x00, 0x10},
10504 {0xa0, dev
->sensor_slave_address
, 0x72, 0x00, 0x00, 0x00, 0x00, 0x10},
10505 {0xa0, dev
->sensor_slave_address
, 0x68, 0x80, 0x00, 0x00, 0x00, 0x10},
10506 {0xa0, dev
->sensor_slave_address
, 0x69, 0x00, 0x00, 0x00, 0x00, 0x10},
10507 {0xa0, dev
->sensor_slave_address
, 0x71, 0x18, 0x00, 0x00, 0x00, 0x10},
10508 {0xa0, dev
->sensor_slave_address
, 0x72, 0x04, 0x00, 0x00, 0x00, 0x10},
10509 {0xa0, dev
->sensor_slave_address
, 0x68, 0xde, 0x00, 0x00, 0x00, 0x10},
10510 {0xa0, dev
->sensor_slave_address
, 0x69, 0x00, 0x00, 0x00, 0x00, 0x10}, // 18
10511 {0xa0, dev
->sensor_slave_address
, 0x68, 0x80, 0x00, 0x00, 0x00, 0x10},
10512 {0xa0, dev
->sensor_slave_address
, 0x69, 0x00, 0x00, 0x00, 0x00, 0x10},
10513 {0, 0, 0, 0, 0, 0, 0, 0} // Terminating string
10517 ret
+= usb_microdia_control_write(dev
, 0xf1, buf
, 1); // Reset cam
10520 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1); // Sensor off, video off, clk 12MHz
10522 ret
+= usb_microdia_control_read(dev
, 0x00, buf
, 1); // Check if cam is working, must write 0x12 in buf[0]
10524 if(buf
[0] != 0x12){
10525 UDIA_ERROR("Microdia 6128 webcam not connected or working !!!\n");
10529 ret
+= usb_microdia_control_read(dev
, 0x01, buf
, 1); // Must read 23
10531 if(buf
[0] != 0x23){
10532 UDIA_ERROR("Microdia 6128 webcam is not initialized !!!\n");
10536 buf
[0] = 0x23; buf
[1] = 0x72;
10537 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 2); // Configure GPIO
10539 buf
[0] = 0x34; buf
[1] = 0x27; buf
[2] = 0x20; buf
[3] = 0xa0; buf
[4] = 0x34;
10540 ret
+= usb_microdia_control_write(dev
, 0x05, buf
, 5);
10542 buf
[0] = 0x44; buf
[1] = 0x45; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00;
10543 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 5);
10545 buf
[0] = 0x08; buf
[1] = 0x40; buf
[2] = 0x20; buf
[3] = 0x00; buf
[4] = 0x00;
10546 ret
+= usb_microdia_control_write(dev
, 0x9a, buf
, 5);
10548 buf
[0] = 0x60; buf
[1] = 0x00; buf
[2] = 0x00;
10549 ret
+= usb_microdia_control_write(dev
, 0xd4, buf
, 3);
10550 ret
+= usb_microdia_control_write(dev
, 0x03, data_15
, 15);
10553 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1);
10556 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
10558 buf
[0] = 0x22; buf
[1] = 0x62;
10559 ret
+= usb_microdia_control_write(dev
, 0x01, &buf
[0], 1);
10560 ret
+= usb_microdia_control_write(dev
, 0x01, &buf
[1], 1);
10563 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
10564 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
10566 buf
[0] = 0x42; // Sensor on, clk 24MHz, video off
10567 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1);
10568 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1);
10571 for (i
= 0; i
< 2; i
++){
10572 ret
+= usb_microdia_control_write(dev
, 0x08, om6802_sensor
[i
], 8);
10577 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1);
10580 for (i
= 2; i
< 11; i
++){
10581 ret
+= usb_microdia_control_write(dev
, 0x08, om6802_sensor
[i
], 8);
10586 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1);
10587 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1); // URB 1780
10590 ret
+= usb_microdia_control_write(dev
, 0x15, buf
, 1);
10593 ret
+= usb_microdia_control_write(dev
, 0x16, buf
, 1);
10596 ret
+= usb_microdia_control_write(dev
, 0x12, buf
, 1);
10599 ret
+= usb_microdia_control_write(dev
, 0x13, buf
, 1);
10602 ret
+= usb_microdia_control_write(dev
, 0x18, buf
, 1);
10605 ret
+= usb_microdia_control_write(dev
, 0xd2, buf
, 1);
10608 ret
+= usb_microdia_control_write(dev
, 0xd3, buf
, 1);
10611 ret
+= usb_microdia_control_write(dev
, 0xc6, buf
, 1);
10612 ret
+= usb_microdia_control_write(dev
, 0xc7, buf
, 1);
10615 ret
+= usb_microdia_control_write(dev
, 0xc8, buf
, 1);
10618 ret
+= usb_microdia_control_write(dev
, 0xc9, buf
, 1);
10621 ret
+= usb_microdia_control_write(dev
, 0x18, buf
, 1);
10624 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
10627 ret
+= usb_microdia_control_write(dev
, 0x05, buf
, 1);
10628 ret
+= usb_microdia_control_write(dev
, 0x07, buf
, 1);
10629 ret
+= usb_microdia_control_write(dev
, 0x06, buf
, 1);
10632 ret
+= usb_microdia_control_write(dev
, 0x14, buf
, 1);
10634 ret
+= usb_microdia_control_write(dev
, 0x20, data_17
, 17);
10635 ret
+= usb_microdia_control_write(dev
, 0x20, data_17
, 17);
10637 for (i
= 0; i
< 8; ++i
) // writing the same buffer 8 times, why ??
10638 ret
+= usb_microdia_control_write(dev
, 0x84, data_21
, 21);
10640 data_21
[0] = 0x16; data_21
[10] = 40; data_21
[12] = 0x3f;
10641 ret
+= usb_microdia_control_write(dev
, 0x84, data_21
, 21);
10644 ret
+= usb_microdia_control_write(dev
, 0x9a, buf
, 1);
10647 ret
+= usb_microdia_control_write(dev
, 0x99, buf
, 1);
10649 ret
+= usb_microdia_control_write(dev
, 0x84, data_21
, 21); // URB 1811
10652 ret
+= usb_microdia_control_write(dev
, 0x05, buf
, 1);
10653 ret
+= usb_microdia_control_write(dev
, 0x07, buf
, 1);
10654 ret
+= usb_microdia_control_write(dev
, 0x06, buf
, 1);
10657 for (i
= 11; i
< 15; i
++){
10658 ret
+= usb_microdia_control_write(dev
, 0x08, om6802_sensor
[i
], 8);
10663 ret
+= usb_microdia_control_write(dev
, 0x05, buf
, 1);
10665 ret
+= usb_microdia_control_write(dev
, 0x06, buf
, 1);
10667 buf
[0] = buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05; buf
[4] = 0x04; buf
[5] = 0x3f;
10668 ret
+= usb_microdia_control_write(dev
, 0xc0, buf
, 6);
10670 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
10671 ret
+= usb_microdia_control_write(dev
, 0xca, buf
, 4);
10673 buf
[0] = 0x1e; buf
[1] = 0xdd; buf
[2] = 0x2d; buf
[3] = 0xe7;
10674 ret
+= usb_microdia_control_write(dev
, 0xce, buf
, 4);
10677 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1);
10680 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
10683 for (i
= 15; i
< 19; i
++){
10684 ret
+= usb_microdia_control_write(dev
, 0x08, om6802_sensor
[i
], 8);
10689 ret
+= usb_microdia_control_write(dev
, 0x05, buf
, 1);
10692 ret
+= usb_microdia_control_write(dev
, 0x06, buf
, 1);
10694 // This changes the mode (VGA = 0 , CIF = 1)
10695 // buf = 0x40 | 0x05 | (mode << 4) 45 or 55
10697 ret
+= usb_microdia_control_write(dev
, 0x18, buf
, 1);
10699 // This is the Q table
10700 ret
+= usb_microdia_control_write(dev
, 0x0100, qtable_1
, 64); // first time
10701 ret
+= usb_microdia_control_write(dev
, 0x0140, qtable_2
, 64); // second time
10703 // mode: VGA = 0, CIF = 1
10704 // buf = 0x05 | (mode << 4) 05 or 15
10706 ret
+= usb_microdia_control_write(dev
, 0x18, buf
, 1);
10709 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1);
10710 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1);
10712 buf
[0] = 0x42; // Sensor on, Video disabled, clk 24MHz
10713 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1);
10716 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
10718 // Command to start streaming
10719 // Sensor on, clk 24MHz, video enabled
10721 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1);
10723 // When the device reads 46 from reg 0x01 it means that
10724 // camera is streaming
10725 ret
+= usb_microdia_control_read(dev
, 0x01, buf
, 1); // Must read 0x46
10728 UDIA_DEBUG("Some read or write were not successful in Start Stream\n");
10734 int dev_microdia_stop_stream(struct usb_microdia
*dev
)
10737 if(dev
&& dev
->stop_stream
)
10738 ret
= dev
->stop_stream(dev
);
10744 * @brief From stop.htm
10752 * For SN9C201 with MI1310.
10753 * This function has not been tested yet.
10755 int microdia_6242_stop_stream(struct usb_microdia
*dev
)
10759 __u8 only10c0
[3] = {0x0d, 0x00, 0x00};
10762 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
10765 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
10768 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
10770 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
10771 only10c0
[0], dev
->sensor_flags
, &only10c0
[1]);
10774 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
10777 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
10780 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
10783 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
10786 buf
[0] = 0x98; buf
[1] = 0xe7; buf
[2] = 0x11;
10787 usb_microdia_control_write(dev
, 0x1000, buf
, 3);
10790 * After the select alternate setting 0 is actually another transfer:
10792 * usb_microdia_control_write(dev, 0x1066, buf, 1);
10800 * @brief From stopstream.log
10808 * For SN9C201 with SOI968.
10809 * I don't whether the function really stops the stream.
10810 * Nevertheless the LED on the webcam now stops glowing.
10811 * The function is very similar to "microdia_624f_stop_stream".
10813 int microdia_624e_stop_stream(struct usb_microdia
*dev
)
10818 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
10820 /* Next two writes added because it works better.
10821 * The LED stops glowing and I think the stream does too.
10822 * 0x20 = 0b00100000 which is the minimal of what the
10823 * other stopstreams have in common.
10826 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
10829 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
10832 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
10835 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
10837 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
10838 usb_microdia_control_write(dev
, 0x1000, buf
, 3);
10840 usb_microdia_control_read(dev
, 0x1066, buf
, 1);
10846 int microdia_624f_stop_stream(struct usb_microdia
*dev
)
10854 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
10860 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
10866 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
10872 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
10878 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
10884 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
10892 ret
= usb_microdia_control_write(dev
, command
, buf
, 3);
10897 ret
= usb_microdia_control_read(dev
, command
, buf
, 1);
10902 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
10909 UDIA_ERROR("command %x failed (%d)!\n", command
, ret
);
10913 int microdia_6260_stop_stream(struct usb_microdia
*dev
)
10919 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
10921 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
10923 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
10925 ret
= usb_microdia_control_write(dev
, 0x1007, buf
, 1);
10927 ret
= usb_microdia_control_write(dev
, 0x1006, buf
, 1);
10929 buf
[0] = 0x98; buf
[1] = 0xe7; buf
[2] = 0x11;
10930 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 3);
10933 ret
= usb_microdia_control_write(dev
, 0x1066, buf
, 1);
10934 ret
= usb_microdia_control_read(dev
, 0x1045, buf
, 1);
10936 ret
= usb_microdia_control_write(dev
, 0x1045, buf
, 1);
10938 ret
= usb_microdia_control_write(dev
, 0x10c8, buf
, 1);
10940 ret
= usb_microdia_control_write(dev
, 0x1020, buf
, 1);
10946 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
10950 * @returns 0 (ok) or -1 (error)
10952 * @author Comer352l
10954 * Windows driver version: 5.7.23.000
10955 * Windows versions: 2000 and XP
10956 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
10957 * All logs were made using AMCAP with 640x480, RGB24
10959 int microdia_6270_stop_stream(struct usb_microdia
*dev
)
10965 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
10967 ret
+= usb_microdia_control_write(dev
, 0x1007, buf
, 1); /* URB 3541 */
10969 ret
+= usb_microdia_control_write(dev
, 0x1006, buf
, 1); /* URB 3542 */
10970 /* => These two writes seem to cause the cam to stop sending isochronus USB messages */
10973 ret
+= usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 3544 */
10974 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
10976 ret
+= usb_microdia_control_write(dev
, 0x1007, buf
, 1); /* URB 3541 */
10978 ret
+= usb_microdia_control_write(dev
, 0x1006, buf
, 1); /* URB 3542 */
10980 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
10981 /* Write to sensor register 0x07: Output Control */
10982 buf
[0] = 0x00; buf
[1] = 0x00; /* stop sensor readout, normal operation */
10983 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
10985 buf
[0] = 0x38; /* ALEX: 0x3c */
10986 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 3545 */
10987 buf
[0] = 0x6d; /* ALEX: 0xec; FRANK: also 0x6c */
10988 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 3546 */
10989 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
10990 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 3); /* URB 3547 */
10992 /* INTERRUPT COMMING BACK (URB 2227) */
10993 /* SELECT ALTERNATE SETTINGS (URB 3548) */
10994 /* INTERRUPT GOING DOWN (URB 3549) */
10997 ret
+= usb_microdia_control_write(dev
, 0x1066, buf
, 1); /* URB 3550 */
11000 UDIA_INFO("One ore more errors occured while stopping stream !\n");
11007 int microdia_627b_stop_stream(struct usb_microdia
*dev
)
11015 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11021 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11028 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11029 //if(ret < 0) goto err;
11033 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11034 //if(ret < 0) goto err;
11039 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11046 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11047 //if(ret < 0) goto err;
11051 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11052 //if(ret < 0) goto err;
11057 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11063 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11068 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
11069 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
11075 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11081 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
11086 * @brief From UsbSnoop-plugin-parsed.log
11090 * @returns 0 (OK) or <0 (Error)
11092 * @author Vincent, Kuzja
11094 int microdia_6288_stop_stream(struct usb_microdia
*dev
)
11102 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11108 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11114 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11120 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11126 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11131 buf
[0] = 0x98; buf
[1] = 0xe7; buf
[2] = 0x11;
11132 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
11138 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11144 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
11149 * @brief From UsbSnoop-plugin-parsed.log
11153 * @returns 0 if all OK
11155 * This function stops the video stream for microdia 6128
11156 * Bridge SN9C325 + OM6802 CMOS sensor
11157 * note: comments are my observations so they could be wrong
11159 int microdia_6128_stop_stream(struct usb_microdia
*dev
)
11164 ret
+= usb_microdia_control_read(dev
, 0x00, &data
, 1);
11166 // Stop stream command
11168 ret
+= usb_microdia_control_write(dev
, 0x01, &data
, 1);
11171 ret
+= usb_microdia_control_write(dev
, 0xf1, &data
, 1);
11174 ret
+= usb_microdia_control_write(dev
, 0xf1, &data
, 1);
11177 UDIA_DEBUG("Some read or write were not successful in Stop Stream\n");
11184 int microdia_624f_set_exposure(struct usb_microdia
*dev
)
11187 __u8 v1
= (dev
->vsettings
.exposure
>> 4) & 0xff;
11188 __u8 v2
= dev
->vsettings
.exposure
>> 12;
11190 ret
|= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, 0x2d,
11191 dev
->sensor_flags
, &v1
);
11193 ret
|= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, 0x2e,
11194 dev
->sensor_flags
, &v2
);
11199 int microdia_624f_flip_detect(struct usb_microdia
*dev
)
11204 ret
= usb_microdia_control_read(dev
, 0x1009, &val
, 1);
11205 if (ret
< 0) return -EAGAIN
;
11207 dev
->vsettings
.vflip
= 1;
11210 dev
->vsettings
.vflip
= 0;
11216 int microdia_6260_flip_detect(struct usb_microdia
*dev
)
11218 const __u8 flip_bit
= 0x01;
11221 static __u8 flip_reg
= flip_bit
;
11224 ret
= usb_microdia_control_read(dev
, 0x1009, &val
, 1);
11227 if (flip_reg
!= (val
& flip_bit
)) {
11228 if (val
& flip_bit
)
11232 ret
= ov7670_auto_flip(dev
, vflip
);
11233 flip_reg
= (val
& flip_bit
);