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 */
597 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b4 */
601 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x60; buf24
[3] = 0x00;
602 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
603 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
607 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << d0 */
610 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << d4 */
614 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x62; buf24
[3] = 0x04;
615 buf24
[4] = 0x98; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
616 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 85 */
620 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << d0 */
623 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << d4 */
627 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x68; buf24
[3] = 0x00;
628 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
629 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
633 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b0 */
636 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b4 */
641 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* URB 91 // << 5d*/
645 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
650 buf24
[0] = 0x90; buf24
[1] = 0x50; buf24
[2] = 0x00; buf24
[3] = 0x00;
651 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
652 for (i
= 93; i
<= 108; i
++) {
653 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 93..108 */
656 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << 9c */
660 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
664 buf24
[0] = 0x92; /* change only 1st value */
665 for (i
= 110; i
<= 126; i
++) {
666 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 110..126 */
669 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << 9e */
675 ret
= usb_microdia_control_read(dev
, reg
, buf24
, 5); /* << ff ff ff ff ff */
681 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
687 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
691 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
697 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
701 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
705 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
711 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
717 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 135..138 */
721 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
725 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
729 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
734 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
735 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
736 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 139 */
740 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b0 */
743 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b4 */
748 buf24
[0] = 0x02; buf24
[1] = 0x00; buf24
[2] = 0x02; buf24
[3] = 0x00;
749 buf24
[4] = 0x28; buf24
[5] = 0x3c;
750 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 6); /* URB 142 */
755 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
757 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
763 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
768 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x6a; buf24
[3] = 0x50;
769 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
774 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x50; buf24
[3] = 0x3c;
775 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
781 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
787 for (i
= 148; i
<= 149; i
++) {
788 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
795 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 150 */
801 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
807 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
813 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 153..163 */
816 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << 38 */
820 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
823 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << 39 */
827 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
830 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << 3a */
834 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
837 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << bb */
841 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
844 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << 3c */
848 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
853 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x06; buf24
[3] = 0x00;
854 buf24
[4] = 0xf2; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
855 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 164..169 */
859 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b0 */
862 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b4 */
866 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x05; buf24
[3] = 0x00;
867 buf24
[4] = 0x13; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
868 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
872 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b0 */
875 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b4 */
881 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
887 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
893 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
899 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
904 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
909 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
913 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
919 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
924 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x00; buf24
[3] = 0x00;
925 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
930 for (i
= 0; i
< 48; i
++)
931 buf64
[i
] = 0; /* zeroes */
932 ret
= usb_microdia_control_write(dev
, reg
, buf64
, 48); /* URB 195 */
937 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
938 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
939 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 200 */
943 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
946 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
952 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
958 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x20; buf24[3] = 0x11;
959 buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
961 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 204..206 */
965 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b0 */
968 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b4 */
974 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
979 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x09; buf24
[3] = 0x03;
980 buf24
[4] = 0xe8; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
981 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 208..224 */
985 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
988 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
992 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
993 buf24
[4] = 0x03; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
994 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
998 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1001 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1005 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2b; buf24
[3] = 0x00;
1006 buf24
[4] = 0x10; buf24
[5] = 0x00; buf24
[6] = 0x10; buf24
[7] = 0x10;
1007 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 214 */
1011 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1014 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1018 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2d; buf24
[3] = 0x00;
1019 buf24
[4] = 0x10; buf24
[5] = 0x00; buf24
[6] = 0x10; buf24
[7] = 0x10;
1020 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1024 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1027 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1031 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x33; buf24
[3] = 0x00;
1032 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1033 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1037 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 94 */
1041 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
1042 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1043 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1047 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1050 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1055 buf24
[0] = 0x2d; buf24
[1] = 0x2d; buf24
[2] = 0x3a; buf24
[3] = 0x05;
1056 buf24
[4] = 0x04; buf24
[5] = 0x3f;
1057 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 6);
1061 buf24
[0] = 0x28; buf24
[1] = 0xd8; buf24
[2] = 0x14; buf24
[3] = 0xec;
1062 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1066 buf24
[0] = 0x32; buf24
[1] = 0xdd; buf24
[2] = 0x2d; buf24
[3] = 0xdd;
1067 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1072 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
1073 buf24
[4] = 0x03; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1074 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 232..242 */
1078 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1081 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1085 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2c; buf24
[3] = 0x00;
1086 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x1d; buf24
[7] = 0x10;
1087 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1091 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1094 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1098 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x30; buf24
[3] = 0x00;
1099 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1100 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1104 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 94 */
1108 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
1109 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1110 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1114 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1117 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1123 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1127 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1132 ret
= usb_microdia_control_write(dev
, reg
, buf1100
, 64); /* URB 249 (see also 509/510) */
1136 reg
= 0x1140; /* 00000000: */
1137 buf64
[0] = 0x0d; buf64
[1] = 0x11; buf64
[2] = 0x11; buf64
[3] = 0x15;
1138 buf64
[4] = 0x11; buf64
[5] = 0x15; buf64
[6] = 0x26; buf64
[7] = 0x15;
1139 buf64
[8] = 0x15; buf64
[9] = 0x26; buf64
[10] = 0x54; buf64
[11] = 0x36;
1140 buf64
[12] = 0x2e; buf64
[13] = 0x36; buf64
[14] = 0x54; buf64
[15] = 0x54; /* 00000010: .. 00000030: 0x54 */
1141 for (i
= 16; i
<= 63; i
++)
1143 ret
= usb_microdia_control_write(dev
, reg
, buf64
, 64); /* URB 250 */
1149 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1153 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1159 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1165 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 254..257 */
1169 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1173 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1177 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1182 buf24
[0] = 0x02; buf24
[1] = 0x00; buf24
[2] = 0x02; buf24
[3] = 0x00;
1183 buf24
[4] = 0x28; buf24
[5] = 0x3c;
1184 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 6);
1189 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
1191 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
1197 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1202 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x6a; buf24
[3] = 0x50;
1203 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1207 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x50; buf24
[3] = 0x3c;
1208 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1214 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1219 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1224 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1229 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1234 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1239 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1244 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1248 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1253 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1258 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1263 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1269 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 274..284 */
1272 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 38 */
1276 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1279 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 39 */
1283 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1286 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 3a */
1290 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1293 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << bb */
1297 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1300 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 3c */
1304 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1309 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x06; buf24
[3] = 0x00;
1310 buf24
[4] = 0xf2; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1311 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 285..295 */
1315 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1318 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1322 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x05; buf24
[3] = 0x00;
1323 buf24
[4] = 0x13; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1324 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1328 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1331 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1335 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x00; buf24
[3] = 0x00;
1336 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1337 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1341 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 94 */
1345 buf24
[0] = 0xa2; buf24
[1] = 0x5d; buf24
[2] = 0x00; buf24
[3] = 0x00;
1346 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1347 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1351 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << a2 */
1354 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << a6 */
1359 ret
= usb_microdia_control_read(dev
, reg
, buf24
, 5); /* URB 296 // << 00 00 00 84 31 */
1365 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1369 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1374 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
1375 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1376 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1380 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1383 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1389 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1394 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1399 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1404 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1409 buf24
[0] = 0x98; buf24
[1] = 0xef; buf24
[2] = 0x11;
1410 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 3);
1414 /* UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1415 // URB 307 <<< GETTING SELECT_INTERFACE Interface: AlternateSetting = 0
1416 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1421 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1425 /* UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1426 // URB 310 <<< GETTING SELECT_INTERFACE Interface: AlternateSetting = 8
1427 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1429 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 312 */
1433 /* UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1434 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1439 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 314 */
1444 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1449 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1453 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << ef */
1457 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1462 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1467 ret
= usb_microdia_control_read(dev
, reg
, buf24
, 7); /* URB 320 // << a0 00 ff 81 00 00 00 */
1471 buf24
[0] = 0x80; buf24
[1] = 0xa0;
1472 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 2);
1478 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1483 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1488 buf24
[0] = 0x40; buf24
[1] = 0x30; buf24
[2] = 0x20; buf24
[3] = 0x10;
1490 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
1495 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
1496 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1498 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 9);
1505 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1510 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1515 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x00;
1516 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 3);
1521 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
1523 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
1528 buf24
[0] = 0x06; buf24
[1] = 0x4c; buf24
[2] = 0x08;
1529 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 3);
1535 buf24
[0] = 0x00; buf24
[1] = 0x20; buf24
[2] = 0x20; buf24
[3] = 0x20;
1536 buf24
[4] = 0x20; buf24
[5] = 0x00; buf24
[6] = 0x24; buf24
[7] = 0x3b;
1537 buf24
[8] = 0x4f; buf24
[9] = 0x61; buf24
[10] = 0x71; buf24
[11] = 0x80;
1538 buf24
[12] = 0x8f; buf24
[13] = 0x9d; buf24
[14] = 0xab; buf24
[15] = 0xb8;
1540 buf24
[16] = 0xc4; buf24
[17] = 0xd1; buf24
[18] = 0xdd; buf24
[19] = 0xe9;
1541 buf24
[20] = 0xf4; buf24
[21] = 0xff;
1542 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 22); /* URB 330 */
1547 buf24
[0] = 0x00; buf24
[1] = 0x00;
1548 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 2);
1553 buf24
[0] = 0x60; buf24
[1] = 0x28; buf24
[2] = 0x00; buf24
[3] = 0x08;
1554 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x00;
1556 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 9);
1562 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1567 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1572 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
1573 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1574 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 335..390 */
1578 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1581 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1585 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x0d; buf24
[3] = 0x00;
1586 buf24
[4] = 0x01; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1587 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1591 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1594 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1598 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x0d; buf24
[3] = 0x00;
1599 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1600 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1604 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1607 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1611 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x01; buf24
[3] = 0x00;
1612 buf24
[4] = 0x0e; buf24
[5] = 0x00; buf24
[6] = 0x14; buf24
[7] = 0x10;
1613 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 344 */
1617 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1620 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1624 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x03; buf24
[3] = 0x03;
1625 buf24
[4] = 0xc1; buf24
[5] = 0x05; buf24
[6] = 0x01; buf24
[7] = 0x10;
1626 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1630 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1633 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1637 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x05; buf24
[3] = 0x00;
1638 buf24
[4] = 0x83; buf24
[5] = 0x00; buf24
[6] = 0x06; buf24
[7] = 0x10;
1639 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1643 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1646 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1650 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x0d; buf24
[3] = 0x00;
1651 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1652 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1656 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1659 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1663 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x09; buf24
[3] = 0x00;
1664 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1665 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 356 */
1669 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1672 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1676 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x0b; buf24
[3] = 0x00;
1677 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1678 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1682 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1685 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1689 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x11; buf24
[3] = 0x00;
1690 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1691 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1695 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1698 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1702 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x1e; buf24
[3] = 0x80;
1703 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1704 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 365 */
1708 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1711 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1715 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
1716 buf24
[4] = 0x05; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1717 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1721 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1724 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1728 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2b; buf24
[3] = 0x00;
1729 buf24
[4] = 0x08; buf24
[5] = 0x00; buf24
[6] = 0x10; buf24
[7] = 0x10;
1730 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1734 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1737 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1741 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2d; buf24
[3] = 0x00;
1742 buf24
[4] = 0x14; buf24
[5] = 0x00; buf24
[6] = 0x08; buf24
[7] = 0x10;
1743 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1747 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
1750 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
1754 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x33; buf24
[3] = 0x00;
1755 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1756 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 377 */
1760 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 94 */
1764 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x5f; buf24
[3] = 0x89;
1765 buf24
[4] = 0x04; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1766 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1770 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b0 */
1773 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b4 */
1777 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x60; buf24
[3] = 0x00;
1778 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1779 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1783 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << d0 */
1786 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << d4 */
1790 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x62; buf24
[3] = 0x04;
1791 buf24
[4] = 0x98; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1792 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 385 */
1796 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << d0 */
1799 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << d4 */
1803 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x68; buf24
[3] = 0x00;
1804 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1805 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1809 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b0 */
1812 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* << b4 */
1818 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 391 */
1822 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1828 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1832 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1836 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1842 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1848 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 397..400 */
1852 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1856 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1860 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1865 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
1866 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1867 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 401 */
1871 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1874 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1879 buf24
[0] = 0x02; buf24
[1] = 0x00; buf24
[2] = 0x02; buf24
[3] = 0x00;
1880 buf24
[4] = 0x28; buf24
[5] = 0x3c;
1881 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 6);
1885 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
1887 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
1893 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1898 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x6a; buf24
[3] = 0x50;
1899 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1903 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x50; buf24
[3] = 0x3c;
1904 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1910 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1916 for (i
= 410; i
<= 411; i
++) {
1917 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1924 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1929 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1934 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1940 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 415..425 */
1943 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 38 */
1947 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1950 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 39 */
1954 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1957 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 3a */
1961 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1964 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << bb */
1968 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1971 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 3c */
1975 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1981 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x06; buf24
[3] = 0x00;
1982 buf24
[4] = 0xf2; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1983 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 426..431 */
1987 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
1990 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
1994 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x05; buf24
[3] = 0x00;
1995 buf24
[4] = 0x13; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1996 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2000 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
2003 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
2009 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2015 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2021 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2027 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2032 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2038 for (i
= 453; i
< 454; i
++) {
2039 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2046 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2051 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x00; buf24
[3] = 0x00;
2052 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
2057 for (i
= 0; i
< 48; i
++)
2058 buf64
[i
] = 0; /* // zeroes */
2059 ret
= usb_microdia_control_write(dev
, reg
, buf64
, 48); /* URB 457 */
2064 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
2065 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2066 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 462 */
2070 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
2073 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
2079 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2084 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
2085 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2086 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 466 */
2090 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
2093 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
2099 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2104 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
2105 buf24
[4] = 0x03; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2106 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 470..483 */
2110 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
2113 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
2117 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2b; buf24
[3] = 0x00;
2118 buf24
[4] = 0x10; buf24
[5] = 0x00; buf24
[6] = 0x10; buf24
[7] = 0x10;
2119 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2123 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
2126 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
2130 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2d; buf24
[3] = 0x00;
2131 buf24
[4] = 0x10; buf24
[5] = 0x00; buf24
[6] = 0x10; buf24
[7] = 0x10;
2132 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2136 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d0 */
2139 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
2143 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x33; buf24
[3] = 0x00;
2144 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2145 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 479 */
2149 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 94 */
2153 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
2154 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2155 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2159 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
2162 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
2167 buf24
[0] = 0x2d; buf24
[1] = 0x2d; buf24
[2] = 0x3a; buf24
[3] = 0x05;
2168 buf24
[4] = 0x04; buf24
[5] = 0x3f;
2169 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 6);
2173 buf24
[0] = 0x28; buf24
[1] = 0xd8; buf24
[2] = 0x14; buf24
[3] = 0xec;
2174 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
2178 buf24
[0] = 0x32; buf24
[1] = 0xdd; buf24
[2] = 0x2d; buf24
[3] = 0xdd;
2179 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
2184 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
2185 buf24
[4] = 0x03; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2186 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 491..502 */
2190 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
2193 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
2197 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2c; buf24
[3] = 0x00;
2198 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x1d; buf24
[7] = 0x10;
2199 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2203 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 495: d0 */
2206 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 496: d0 */
2209 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << d4 */
2213 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x30; buf24
[3] = 0x00;
2214 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2215 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2219 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 94 */
2223 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
2224 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2225 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2229 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
2232 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
2238 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2242 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2247 ret
= usb_microdia_control_write(dev
, reg
, buf1100
, 64); /* URB 509 (see also 249/250) */
2253 buf64
[0] = 0x0d; buf64
[1] = 0x11; buf64
[2] = 0x11; buf64
[3] = 0x15;
2254 buf64
[4] = 0x11; buf64
[5] = 0x15; buf64
[6] = 0x26; buf64
[7] = 0x15;
2255 buf64
[8] = 0x15; buf64
[9] = 0x26; buf64
[10] = 0x54; buf64
[11] = 0x36;
2256 buf64
[12] = 0x2e; buf64
[13] = 0x36; buf64
[14] = 0x54; buf64
[15] = 0x54;
2257 /* 00000010: .. 00000030: 0x54 */
2258 for (i
= 16; i
<= 63; i
++)
2260 ret
= usb_microdia_control_write(dev
, reg
, buf64
, 64); /* URB 510 */
2266 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2270 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2276 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2282 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 514..517 */
2286 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2290 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2294 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2299 buf24
[0] = 0x02; buf24
[1] = 0x00; buf24
[2] = 0x02; buf24
[3] = 0x00;
2300 buf24
[4] = 0x28; buf24
[5] = 0x3c;
2301 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 6);
2304 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
2306 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
2310 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2315 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x6a; buf24
[3] = 0x50;
2316 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
2319 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x50; buf24
[3] = 0x3c;
2320 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
2324 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2329 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2334 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2339 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2344 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2349 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2355 for (i
= 529; i
<= 530; i
++) {
2356 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2363 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2368 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2373 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2379 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 534..544 */
2382 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 38 */
2386 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2389 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 39 */
2393 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2396 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 3a */
2400 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2403 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << bb */
2407 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2410 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 3c */
2414 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2419 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x06; buf24
[3] = 0x00;
2420 buf24
[4] = 0xf2; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2421 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8); /* URB 545..555 */
2425 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
2428 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
2432 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x05; buf24
[3] = 0x00;
2433 buf24
[4] = 0x13; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2434 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2438 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b0 */
2441 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << b4 */
2445 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x00; buf24
[3] = 0x00;
2446 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2447 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2451 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << 94 */
2455 buf24
[0] = 0xa2; buf24
[1] = 0x5d; buf24
[2] = 0x00; buf24
[3] = 0x00;
2456 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2457 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2461 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << a2 */
2464 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); /* // << a6 */
2469 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x00; buf24
[3] = 0x84;
2471 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
2477 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1); /* URB 557 */
2481 /* UNKNOWN -- URB_FUNCTION_RESET_PIPE:
2482 // UNKNOWN -- URB_FUNCTION_RESET_PIPE:
2483 // UNKNOWN -- URB_FUNCTION_GET_CURRENT_FRAME_NUMBER:
2484 // UNKNOWN -- URB_FUNCTION_GET_CURRENT_FRAME_NUMBER:
2485 // URB 560 >>> SENDING ISO REQUEST
2487 UDIA_INFO("...start function completed without errors.\n");
2490 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg
, ret
);
2495 * @brief From stop-close-amcap.log
2503 * For SN9C201 with MI1300. Comments from parser-usbsnoop(updated_13Mar2008).pl output
2506 int microdia_6240_stop_stream(struct usb_microdia
*dev
)
2511 UDIA_INFO("Stopping camera...\n");
2514 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 25319 */
2515 UDIA_INFO("...stop: write %x, ret = %d\n", buf
[0], ret
);
2517 buf
[0] = 0xb0; buf
[1] = 0x5d; buf
[2] = 0x07; buf
[3] = 0x00;
2518 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
2519 ret
+= usb_microdia_control_write(dev
, 0x10c0, buf
, 8); /* URB 25320 */
2520 UDIA_INFO("...stop: write buf[8], ret = %d\n", ret
);
2522 ret
+= usb_microdia_control_read(dev
, 0x10c0, buf
, 1); /* URB 25321 << b0 */
2523 UDIA_INFO("...stop: read %x, ret = %d\n", buf
[0], ret
);
2525 ret
+= usb_microdia_control_read(dev
, 0x10c0, buf
, 1); /* URB 25322 << b4 */
2526 UDIA_INFO("...stop: read %x, ret = %d\n", buf
[0], ret
);
2529 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 25323 */
2530 UDIA_INFO("...stop: write %x, ret = %d\n", buf
[0], ret
);
2533 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 25324 */
2534 UDIA_INFO("...stop: write %x, ret = %d\n", buf
[0], ret
);
2537 ret
+= usb_microdia_control_write(dev
, 0x1007, buf
, 1); /* URB 25325 */
2538 UDIA_INFO("...stop: write %x, ret = %d\n", buf
[0], ret
);
2541 ret
+= usb_microdia_control_write(dev
, 0x1006, buf
, 1); /* URB 25326 */
2542 UDIA_INFO("...stop: write %x, ret = %d\n", buf
[0], ret
);
2544 buf
[0] = 0x98; buf
[1] = 0xef; buf
[2] = 0x11;
2545 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 3); /* URB 25327 */
2546 UDIA_INFO("...stop: write buf[3], ret = %d\n", ret
);
2548 /* UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: (URB 5009)
2549 // URB 25328 <<< GETTING SELECT_INTERFACE Interface: AlternateSetting = 0
2550 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: (URB 25329)
2554 ret
+= usb_microdia_control_write(dev
, 0x1066, buf
, 1); /* URB 25330 */
2555 UDIA_INFO("...stop: write %x, ret = %d\n", buf
[0], ret
);
2558 UDIA_ERROR("One ore more errors occured during stop sequence !\n");
2566 * @brief From init.sequence.log
2574 * For SN9C201 with SOI968.
2575 * Tests showed this function is actually unnecessary.
2576 * Nevertheless the reads may give us valuable values we don't know about yet.
2578 int microdia_624e_initialize(struct usb_microdia
*dev
)
2582 usb_microdia_control_read(dev
, 0x130d, &buf
, 1);
2583 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
2589 * @brief From UsbSnoop-plugin-parsed.log
2595 int microdia_624f_initialize(struct usb_microdia
*dev
)
2597 /* Do nothing here */
2602 * @brief From UsbSnoop-plugin-parsed.log
2608 int microdia_6260_initialize(struct usb_microdia
*dev
)
2612 usb_microdia_control_read(dev
, 0x130d, &buf
, 1);
2613 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
2615 usb_microdia_control_write(dev
, 0x10c8, &buf
, 1);
2616 usb_microdia_control_read(dev
, 0x100a, &buf
, 1);
2618 usb_microdia_control_write(dev
, 0x100a, &buf
, 1);
2619 usb_microdia_control_read(dev
, 0x100b, &buf
, 1);
2621 usb_microdia_control_write(dev
, 0x100b, &buf
, 1);
2622 usb_microdia_control_read(dev
, 0x1001, &buf
, 1);
2624 usb_microdia_control_write(dev
, 0x1001, &buf
, 1);
2625 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
2627 usb_microdia_control_write(dev
, 0x1040, &buf
, 1);
2628 usb_microdia_control_read(dev
, 0x1045, &buf
, 1);
2630 usb_microdia_control_write(dev
, 0x1045, &buf
, 1);
2631 usb_microdia_control_read(dev
, 0x1046, &buf
, 1);
2633 usb_microdia_control_write(dev
, 0x1046, &buf
, 1);
2635 usb_microdia_control_write(dev
, 0x1045, &buf
, 1);
2637 usb_microdia_control_write(dev
, 0x1040, &buf
, 1);
2639 usb_microdia_control_write(dev
, 0x1020, &buf
, 1);
2645 * @brief From 6 init-logs
2649 * @returns 0 (ok) or -1 (error)
2653 * Windows driver versions: 5.5.8.12 and 5.7.23.000
2654 * Windows versions: 2000 and XP
2655 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
2657 * Comments behind read oprations contain HEX-values that appeared in the logs
2659 int microdia_6270_initialize(struct usb_microdia
*dev
)
2671 ret
+= usb_microdia_control_read(dev
, 0x130d, buf
, 1); /* URB 5 0x81,0x85,0x04,0x8b,0x02,... */
2673 ret
+= usb_microdia_control_read(dev
, 0x1040, buf
, 1); /* URB 6 0xe4,0xc4,0xa4,0x44,... */
2676 * THE OLD DRIVER 5.5.8.12 DOES AN ADDITIONAL WRITE HERE:
2678 * usb_microdia_control_write(dev, 0x10c8, buf, 1);
2681 ret
+= usb_microdia_control_read(dev
, 0x118a, buf
, 1); /* URB 7 0x05,0x7b,0x01,0x04,... */
2683 ret
+= usb_microdia_control_read(dev
, 0x0395, buf_0395
, 1); /* URB 8 0xc2,0x82,0x38,0x98,0x04,... */
2684 /* => this value will be rewritten to 0x118a and 0x0395 later (URBs 81+82) */
2687 ret
+= usb_microdia_control_write(dev
, 0x118a, buf
, 1); /* URB 9 */
2689 ret
+= usb_microdia_control_write(dev
, 0x0395, buf
, 1); /* URB 10 */
2691 ret
+= usb_microdia_control_read(dev
, 0x11b8, buf_11b8
, 1); /* URB 11 0xa0,0x00,0x24,... */
2692 /* => this value will be rewritten to 0x11b8 later (URB 83) */
2695 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 12 */
2697 ret
+= usb_microdia_control_read(dev
, 0x1000, buf_1000
, 5); /* URB 13 0x30 0xCF 0x00 0x03 (0x02 or 0x00) */
2698 /* => these values will be rewritten to 0x1000 later (URB 84) */
2700 buf
[0] = 0x70; buf
[1] = 0x00; buf
[2] = 0x18; buf
[3] = 0x00; buf
[4] = 0x00;
2701 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 5); /* URB 14 */
2703 ret
+= usb_microdia_control_read(dev
, 0x1060, buf_1060
, 2); /* URB 15 0x08 0x00 (always ???) */
2704 /* => this value will be rewritten to 0x1060 later (URB 85) */
2706 buf
[0] = 0x00; buf
[1] = 0x03;
2707 ret
+= usb_microdia_control_write(dev
, 0x1060, buf
, 2); /* URB 16 */
2709 /* initialize I2C registers to avoid getting no ACK at first I2C operation: */
2710 ret
+= sn9c20x_initialize_i2c(dev
, SN9C20X_I2C_2WIRE
, MT9V011_I2C_SLAVE_ADDRESS
);
2712 /* enable I2C communication (bit 0) */
2713 buf
[0] = 0x21; /* THE OLD DRIVER 5.5.8.12 WRITES 0x5d */
2714 ret
+= usb_microdia_control_write(dev
, 0x10c8, buf
, 1); /* URB 17 */
2716 /* probe sensor model: */
2717 retSP
= mt9vx11_sensor_probe(dev
); /* substitutes URBs 18-48 */
2718 if ((retSP
== 0) && (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
))
2719 /* switch (back) to IFP address space: */
2720 retASS
= mt9v111_select_address_space(dev
, MT9V111_ADDRESSSPACE_IFP
);
2722 ret
+= usb_microdia_control_write(dev
, 0x118a, buf_0395
, 1); /* URB 81 => write value read with URB 8 */
2724 ret
+= usb_microdia_control_write(dev
, 0x0395, buf_0395
, 1); /* URB 82 => write value read with URB 8 */
2726 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf_11b8
, 1); /* URB 83 => write value read with URB 11 */
2728 ret
+= usb_microdia_control_write(dev
, 0x1000, buf_1000
, 5); /* URB 84 => write value read with URB 13 */
2730 ret
+= usb_microdia_control_write(dev
, 0x1060, buf_1060
, 2); /* URB 85 => write value read with URB 15; (always 08 00 ???) */
2732 /* USB-interrupt-message: doesn't work yet (returns error -110) */
2733 /* 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 */
2736 * THE OLD DRIVER 5.5.8.12 DOES AN ADDITIONAL WRITE HERE:
2738 * usb_microdia_control_write(dev, 0x1020, wbuf, 1);
2741 if ((retSP
!= 0) || (retASS
!= 0) || (ret
< 33)) {
2743 UDIA_INFO("One ore more errors occured during initialization !\n");
2752 * @brief From UsbSnoop-plugin-parsed.log
2758 int microdia_627b_initialize(struct usb_microdia
*dev
)
2771 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1); /* URB 5 */
2775 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1); /* URB 6 */
2780 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1); /* URB 7 */
2784 ret
= usb_microdia_control_read(dev
, reg
, reg0395
, 1); /* URB 8 */
2790 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 9 */
2794 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 10 */
2799 ret
= usb_microdia_control_read(dev
, reg
, reg11b8
, 1); /* URB 11 */
2805 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 12 */
2809 ret
= usb_microdia_control_read(dev
, reg
, reg1000
, 5); /* URB 13 */
2814 buf
[0] = 0x70; buf
[1] = 0x00; buf
[2] = 0x18; buf
[3] = 0x00; buf
[4] = 0x00;
2815 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5); /* URB 14 */
2820 ret
= usb_microdia_control_read(dev
, reg
, reg1060
, 2); /* URB 15 */
2825 buf
[0] = 0x00; buf
[1] = 0x03;
2826 ret
= usb_microdia_control_write(dev
, reg
, buf
, 2); /* URB 16 */
2832 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 17 */
2836 retI2C
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
2837 OV7660_CTL_PID
, dev
->sensor_flags
, buf
); /* URBs 18-29 */
2842 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 30 */
2846 retI2C
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
2847 OV7660_CTL_PID
, dev
->sensor_flags
, buf
); /* URBs 31-35 */
2850 UDIA_ERROR("Read of sensor register 0x0a failed.");
2854 ret
= usb_microdia_control_write(dev
, reg
, reg0395
, 1); /* URB 36 */
2858 ret
= usb_microdia_control_write(dev
, reg
, reg0395
, 1); /* URB 37 */
2864 ret
= usb_microdia_control_write(dev
, reg
, reg11b8
, 1); /* URB 38 */
2869 buf
[0] = 0x30; buf
[1] = 0xcf; buf
[2] = 0x00; buf
[3] = 0x03; buf
[4] = 0x02;
2870 ret
= usb_microdia_control_write(dev
, reg
, reg1000
, 5); /* URB 39 */
2875 buf
[0] = 0x08; buf
[1] = 0x00;
2876 ret
= usb_microdia_control_write(dev
, reg
, reg1060
, 2); /* URB 40 */
2882 ret = usb_interrupt_msg(dev->udev, 0x00000083, buf, 0x0000001, &actual, 1000);
2887 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg
, ret
);
2892 * @brief From init-start-stop-log (made by VÃctor M. Hernández Rocamora)
2896 * @returns 0 (ok) or -1 (error)
2900 * USB-Logger: SniffUSB 2.0
2902 * Comments behind read oprations contain HEX-values that appeared in the log
2904 int microdia_627f_initialize(struct usb_microdia
*dev
)
2909 ret
+= usb_microdia_control_read(dev
, 0x130d, buf
, 1); /* URB 5 0x81 */
2911 ret
+= usb_microdia_control_read(dev
, 0x1040, buf
, 1); /* URB 6 0xe4 */
2914 ret
+= usb_microdia_control_write(dev
, 0x10c8, buf
, 1); /* URB 7 */
2917 ret
+= usb_microdia_control_write(dev
, 0x1020, buf
, 1); /* URB 8 */
2919 ret
+= usb_microdia_control_read(dev
, 0x1045, buf
, 1); /* URB 9 0x0f */
2922 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); /* URB 10 */
2924 ret
+= usb_microdia_control_read(dev
, 0x1045, buf
, 1); /* URB 11 0x1f */
2927 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); /* URB 12 */
2929 ret
+= usb_microdia_control_read(dev
, 0x1045, buf
, 1); /* URB 13 0x0f */
2932 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); /* URB 14 */
2935 UDIA_INFO("One ore more errors occured during initialization !\n");
2942 * @brief From UsbSnoop-plugin-parsed.log
2946 * @returns 0 (OK) or <0 (Error)
2948 * @author Vincent, Kuzja
2950 int microdia_6288_initialize(struct usb_microdia
*dev
)
2958 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
2963 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
2972 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
2977 * @brief From UsbSnoop-plugin-parsed.log
2981 * @returns 0 if all OK
2983 * Function to initialize Microdia 6128 webcam
2984 * Bridge SN9C325 + OM6802 CMOS sensor
2985 * note: comments are my observations so they could be wrong
2987 int microdia_6128_initialize(struct usb_microdia
*dev
)
2992 UDIA_INFO("Initializing camera...\n");
2995 ret
+= usb_microdia_control_write(dev
, 0xf1, buf
, 1);
2996 ret
+= usb_microdia_control_read(dev
, 0x00, buf
, 1); // read reg 0x00 must write 0x00 in buf[0]
2997 ret
+= usb_microdia_control_write(dev
, 0xf1, buf
, 1);
2998 ret
+= usb_microdia_control_read(dev
, 0x00, buf
, 1); // get cam ID, must read 0x12
3001 UDIA_ERROR("Microdia 6128 is not connected or working !!!\n");
3005 buf
[0] = 0x29; buf
[1] = 0x70; // Configure GPIO
3006 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 2);
3009 ret
+= usb_microdia_control_write(dev
, 0xf1, buf
, 1); // Maybe wakeup
3012 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1); // Command to initialize cam
3015 UDIA_DEBUG("Some read or writes were not successful in initialization !\n");
3017 /* Device is initialized and ready */
3018 UDIA_INFO("Microdia USB2.0 Camera is ready\n");
3024 int dev_microdia_start_stream(struct usb_microdia
*dev
)
3027 if (dev
&& dev
->start_stream
)
3028 ret
= dev
->start_stream(dev
);
3034 * @brief From start.htm
3042 * For SN9C201 with MI1310.
3043 * This function has not been tested yet.
3045 int microdia_6242_start_stream(struct usb_microdia
*dev
)
3051 0x01, 0x18, 0x00, 0x30, 0x00, 0x09, 0x00, 0xed,
3052 0x0f, 0xda, 0x0f, 0x3a, 0x00, 0x3a, 0x00, 0xd0,
3053 0x0f, 0xf7, 0x0f, 0x00, 0x00, 0x00, 0x60, 0x0a};
3056 0x02, 0x00, 0x02, 0x00, 0x50, 0x78, 0x00, 0x00,
3060 0x00, 0x20, 0x20, 0x20, 0x20, 0x00, 0x24, 0x3b,
3061 0x4f, 0x61, 0x71, 0x80, 0x8f, 0x9d, 0xab, 0xb8,
3062 0xc4, 0xd1, 0xdd, 0xe9, 0xf4, 0xff};
3064 __u8 qtable1
[64] = {
3065 0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
3066 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
3067 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
3068 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
3069 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
3070 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
3071 0x4f, 0x54, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
3072 0x64, 0x5c, 0x54, 0x64, 0x4b, 0x54, 0x58, 0x54};
3074 __u8 qtable2
[64] = {
3075 0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
3076 0x15, 0x26, 0x54, 0x36, 0x2e, 0x36, 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,
3080 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
3081 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
3082 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54};
3084 __u8 first10c0
[7][3] = {
3094 __u8 second10c0a
[2][5] = {
3095 {0x01, 0x00, 0x0e, 0x00, 0x14},
3096 {0x03, 0x03, 0xc4, 0x05, 0x14}
3099 __u8 second10c0b
[3] =
3102 __u8 third10c0
[4][3] = {
3109 __u8 fourth10c0a
[3][3] = {
3115 __u8 fourth10c0b
[2][5] = {
3116 {0x2b, 0x01, 0x88, 0x01, 0x88},
3117 {0x2d, 0x01, 0x88, 0x01, 0x88}
3120 __u8 fifth10c0
[4][3] = {
3126 /* interrupt down */
3129 usb_microdia_control_write(dev
, 0x1066, buf
, 1); /* URB 1 */
3132 /* interrupt down */
3135 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
3138 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
3141 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3144 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3147 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3150 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3153 usb_microdia_control_write(dev
, 0x1020, buf
, 1);
3155 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20;
3156 buf
[3] = 0x10; buf
[4] = 0x08;
3157 usb_microdia_control_write(dev
, 0x1067, buf
, 5);
3159 buf
[0] = 0xb0; buf
[1] = dev
->sensor_slave_address
; buf
[2] = 0x0d;
3160 buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00;
3161 buf
[6] = 0x00; buf
[7] = 0x10; buf
[8] = 0x03;
3162 usb_microdia_control_write(dev
, 0x10c0, buf
, 9);
3164 usb_microdia_control_write(dev
, 0x10e0, urb10
, 24); /* URB 10 */
3166 buf
[0] = 0x00; buf
[1] = 0x00; buf
[3] = 0x00;
3167 usb_microdia_control_write(dev
, 0x10f8, buf
, 3);
3169 buf
[0] = 0x00; buf
[1] = 0x40; buf
[2] = 0x00;
3170 buf
[3] = 0xe0; buf
[4] = 0x03;
3171 usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
3173 usb_microdia_control_write(dev
, 0x1180, urb13
, 11);
3175 usb_microdia_control_write(dev
, 0x118b, urb14
, 22);
3177 buf
[0] = 0x00; buf
[1] = 0x00;
3178 usb_microdia_control_write(dev
, 0x11a1, buf
, 2);
3180 buf
[0] = 0x60; buf
[1] = 0x20; buf
[2] = 0x00;
3181 buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00;
3182 buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00;
3183 usb_microdia_control_write(dev
, 0x11b7, buf
, 9);
3186 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3189 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3191 for (i
= 0; i
< 7; i
++)
3192 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3193 first10c0
[i
][0], dev
->sensor_flags
, &first10c0
[i
][1]); /* URB 9-48 */
3196 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
3199 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
3202 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 50 */
3205 usb_microdia_control_write(dev
, 0x10e0, 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
, 0x1001, buf
, 1);
3217 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3220 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
3223 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
3226 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
3229 usb_microdia_control_write(dev
, 0x11bf, buf
, 1);
3231 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3232 second10c0a
[0][0], dev
->sensor_flags
, &second10c0a
[0][1]);
3234 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3235 second10c0a
[1][0], dev
->sensor_flags
, &second10c0a
[1][1]);
3237 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
3238 0x09, dev
->sensor_flags
, NULL
);
3240 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3241 second10c0b
[0], dev
->sensor_flags
, &second10c0b
[1]);
3243 buf
[0] = 0x06; buf
[1] = 0x00; buf
[2] = 0x02;
3244 buf
[3] = 0x00; buf
[4] = 0x28; buf
[5] = 0x3c;
3245 usb_microdia_control_write(dev
, 0x1180, buf
, 6);
3247 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
3248 buf
[3] = 0xf0; buf
[4] = 0x00;
3249 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); /* URB 70 */
3252 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3254 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
3255 usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
3257 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
3258 usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
3261 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3264 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3267 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3270 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3273 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
3276 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
3279 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 80 */
3280 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3283 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3284 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3287 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3288 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3291 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3292 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3295 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3296 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3299 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 90 */
3301 for (i
= 0; i
< 4; i
++)
3302 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3303 third10c0
[i
][0], dev
->sensor_flags
, &third10c0
[i
][1]); /* URB 97-106 */
3306 usb_microdia_control_write(dev
, 0x1180, buf
, 1);
3308 for (i
= 0; i
< 3; i
++)
3309 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3310 fourth10c0a
[i
][0], dev
->sensor_flags
, &fourth10c0a
[i
][1]);
3312 for (i
= 0; i
< 2; i
++)
3313 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3314 fourth10c0b
[i
][0], dev
->sensor_flags
, &fourth10c0b
[i
][1]);
3316 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
3317 0x33, dev
->sensor_flags
, NULL
);
3319 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3320 first10c0
[0][0], dev
->sensor_flags
, &first10c0
[0][1]);
3323 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3326 usb_microdia_control_write(dev
, 0x118b, buf
, 1);
3329 usb_microdia_control_write(dev
, 0x10f7, buf
, 1);
3332 usb_microdia_control_write(dev
, 0x10f8, buf
, 1);
3335 usb_microdia_control_write(dev
, 0x10fa, buf
, 1);
3338 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
3341 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
3344 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3346 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
3347 usb_microdia_control_write(dev
, 0x11bc, buf
, 4);
3349 /* Set whole array buf to 0x00 */
3350 memset(buf
, 0x00, 48);
3351 usb_microdia_control_write(dev
, 0x11c0, buf
, 48);
3353 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a;
3354 buf
[3] = 0x05; buf
[4] = 0x04; buf
[5] = 0x3f;
3355 usb_microdia_control_write(dev
, 0x11a5, buf
, 6);
3357 buf
[0] = 0x14; buf
[1] = 0xec; buf
[2] = 0x0a; buf
[3] = 0xf6;
3358 usb_microdia_control_write(dev
, 0x11af, buf
, 4);
3360 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x2d; buf
[3] = 0xdd;
3361 usb_microdia_control_write(dev
, 0x11b3, buf
, 4);
3364 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3367 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3370 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3372 usb_microdia_control_write(dev
, 0x1100, qtable1
, 64);
3374 usb_microdia_control_write(dev
, 0x1140, qtable2
, 64); /* URB 150 */
3377 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3380 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3383 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3386 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3389 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
3392 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
3395 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
3398 usb_microdia_control_write(dev
, 0x11bf, buf
, 1);
3400 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3401 second10c0a
[0][0], dev
->sensor_flags
, &second10c0a
[0][1]);
3403 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3404 second10c0a
[1][0], dev
->sensor_flags
, &second10c0a
[1][1]);
3406 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
3407 0x09, dev
->sensor_flags
, NULL
);
3409 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3410 second10c0b
[0], dev
->sensor_flags
, &second10c0b
[1]);
3412 buf
[0] = 0x06; buf
[1] = 0x00; buf
[2] = 0x02;
3413 buf
[3] = 0x00; buf
[4] = 0x28; buf
[5] = 0x3c;
3414 usb_microdia_control_write(dev
, 0x1180, buf
, 6);
3416 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
3417 buf
[3] = 0xf0; buf
[4] = 0x00;
3418 usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
3421 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3423 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
3424 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); /* URB 170 */
3426 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
3427 usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
3430 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3433 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3436 usb_microdia_control_write(dev
, 0x11b9, buf
, 1);
3439 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3442 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3445 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3448 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3451 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3454 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 180 */
3457 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
3460 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
3463 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3464 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3467 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3468 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3471 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3472 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3475 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3476 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 190 */
3479 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3480 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3483 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3485 for (i
= 0; i
< 3; i
++)
3486 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3487 fifth10c0
[i
][0], dev
->sensor_flags
, &fifth10c0
[i
][1]); /* URB 200-205 */
3489 sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3490 0x00, dev
->sensor_flags
, buf
);
3491 /* __u8 result[2] = {buf[3], buf[4]}; */
3494 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3501 * @brief From startstream.log
3509 * For SN9C201 with SOI968.
3510 * This is function triggers a working stream of image data and a glowing LED.
3512 int microdia_624e_start_stream(struct usb_microdia
*dev
)
3518 {0x47, 0x18, 0x00, 0x30, 0x00, 0x09, 0x00, 0xed,
3519 0x0f, 0xda, 0x0f, 0x3a, 0x00, 0x3a, 0x00, 0xd0,
3520 0x0f, 0xf7, 0x0f, 0x00, 0x00, 0x00, 0x60, 0x0a};
3523 {0x00, 0x20, 0x20, 0x20, 0x20, 0x00, 0x24, 0x3b,
3524 0x4f, 0x61, 0x71, 0x80, 0x8f, 0x9d, 0xab, 0xb8,
3525 0xc4, 0xd1, 0xdd, 0xe9, 0xf4, 0xff};
3528 {0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
3529 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
3530 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
3531 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
3532 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
3533 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
3534 0x4f, 0x53, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
3535 0x64, 0x5c, 0x53, 0x64, 0x4b, 0x53, 0x58, 0x53};
3538 {0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
3539 0x15, 0x26, 0x53, 0x36, 0x2e, 0x36, 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,
3543 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3544 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3545 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53};
3547 __u8 first10c0
[20][2] = {
3548 {0x12, 0x80}, {0x12, 0x00}, {0x0c, 0x00}, {0x0f, 0x1f},
3549 {0x11, 0x80}, {0x38, 0x52}, {0x1e, 0x00}, {0x33, 0x08},
3550 {0x35, 0x8c}, {0x36, 0x0c}, {0x37, 0x04}, {0x45, 0x04},
3551 {0x47, 0xff}, {0x3e, 0x00}, {0x3f, 0x00}, {0x3b, 0x20},
3552 {0x3a, 0x96}, {0x3d, 0x0a}, {0x14, 0x4e}, {0x13, 0x88} };
3554 __u8 second10c0a
[2] =
3556 __u8 second10c0b
[5] =
3557 {0x17, 0x13, 0x63, 0x01, 0x79}; /* 4 bytes */
3558 __u8 second10c0c
[2] =
3559 {0x1b, 0x00}; /* 0 bytes */
3560 __u8 second10c0d
[2][2] = {
3564 __u8 third10c0a
[5][2] = {
3570 __u8 third10c0b
[3] =
3571 {0x01, 0x80, 0x80}; /* 2 bytes */
3574 {0x0a, 0x0b, 0x1c, 0x1d}; /* these are four addresses */
3576 /* interrupt down */
3579 usb_microdia_control_write(dev
, 0x1066, buf
, 1);
3581 /* interrupt up and down */
3584 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3587 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3590 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3592 buf
[0] = 0xa0; buf
[1] = 0xa0;
3593 usb_microdia_control_write(dev
, 0x1006, buf
, 2);
3596 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3599 usb_microdia_control_write(dev
, 0x1020, buf
, 1);
3601 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20;
3602 buf
[3] = 0x10; buf
[4] = 0x08;
3603 usb_microdia_control_write(dev
, 0x1067, buf
, 5);
3605 buf
[0] = 0x92; buf
[1] = dev
->sensor_slave_address
; buf
[2] = 0x00;
3606 buf
[3] = 0x00; buf
[4] = 0x1d; buf
[5] = 0x00;
3607 buf
[6] = 0xa2; buf
[7] = 0x10; buf
[8] = 0x03;
3608 usb_microdia_control_write(dev
, 0x10c0, buf
, 9);
3610 usb_microdia_control_write(dev
, 0x10e0, urb10
, 24);
3612 buf
[0] = 0x00; buf
[1] = 0x00; buf
[3] = 0x00;
3613 usb_microdia_control_write(dev
, 0x10f8, buf
, 3);
3615 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
3616 buf
[3] = 0xf0; buf
[4] = 0x00;
3617 usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
3619 buf
[0] = 0x8a; buf
[1] = 0xcc; buf
[2] = 0x08;
3620 usb_microdia_control_write(dev
, 0x1188, buf
, 3);
3622 usb_microdia_control_write(dev
, 0x118b, urb14
, 22);
3624 buf
[0] = 0x00; buf
[1] = 0x00;
3625 usb_microdia_control_write(dev
, 0x11a1, buf
, 2);
3627 buf
[0] = 0x60; buf
[1] = 0x20; buf
[2] = 0x00;
3628 buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x40;
3629 buf
[6] = 0x01; buf
[7] = 0xf0; buf
[8] = 0x00;
3630 usb_microdia_control_write(dev
, 0x11b7, buf
, 9);
3633 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3636 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3638 for (i
= 0; i
< 20; i
++)
3639 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3640 first10c0
[i
][0], dev
->sensor_flags
, &first10c0
[i
][1]);
3643 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3646 usb_microdia_control_write(dev
, 0x10e0, 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
, 0x1001, buf
, 1);
3658 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3661 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
3664 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
3667 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
3670 usb_microdia_control_write(dev
, 0x11bf, buf
, 1);
3673 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3674 second10c0a
[0], dev
->sensor_flags
, &second10c0a
[1]);
3676 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3677 second10c0b
[0], dev
->sensor_flags
, &second10c0b
[1]);
3679 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
3680 second10c0c
[0], dev
->sensor_flags
, &second10c0c
[1]);
3682 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3683 second10c0d
[0][0], dev
->sensor_flags
, &second10c0d
[0][1]);
3685 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3686 second10c0d
[1][0], dev
->sensor_flags
, &second10c0d
[1][1]);
3688 buf
[0] = 0x3c; buf
[1] = 0x00; buf
[2] = 0x0b;
3689 buf
[3] = 0x00; buf
[4] = 0x28; buf
[5] = 0x3c;
3690 usb_microdia_control_write(dev
, 0x1180, buf
, 6);
3692 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
3693 buf
[3] = 0xf0; buf
[4] = 0x00;
3694 usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
3697 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3699 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
3700 usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
3702 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
3703 usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
3706 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3709 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3712 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3715 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3718 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
3721 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
3724 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3725 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3728 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3729 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3732 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3733 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3736 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3737 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3740 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3741 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3744 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3745 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3748 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3749 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3752 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3753 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3756 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3758 for (i
= 0; i
< 5; i
++)
3759 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3760 third10c0a
[i
][0], dev
->sensor_flags
, &third10c0a
[i
][1]);
3762 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3763 third10c0b
[0], dev
->sensor_flags
, &third10c0b
[1]);
3766 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3769 usb_microdia_control_write(dev
, 0x118b, buf
, 1);
3772 usb_microdia_control_write(dev
, 0x10f7, buf
, 1);
3775 usb_microdia_control_write(dev
, 0x10f8, buf
, 1);
3778 usb_microdia_control_write(dev
, 0x10fa, buf
, 1);
3781 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
3784 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
3787 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3789 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
3790 usb_microdia_control_write(dev
, 0x11bc, buf
, 4);
3792 /* Set whole buf to 0x00 */
3794 usb_microdia_control_write(dev
, 0x11c0, buf
, 48);
3795 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a;
3796 buf
[3] = 0x05; buf
[4] = 0x04; buf
[5] = 0x3f;
3797 usb_microdia_control_write(dev
, 0x11a5, buf
, 6);
3799 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
3800 usb_microdia_control_write(dev
, 0x11af, buf
, 4);
3802 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x2d; buf
[3] = 0xdd;
3803 usb_microdia_control_write(dev
, 0x11b3, buf
, 4);
3806 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3809 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3812 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3814 usb_microdia_control_write(dev
, 0x1100, qtable1
, 64);
3816 usb_microdia_control_write(dev
, 0x1140, qtable2
, 64);
3819 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3822 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3825 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3828 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3831 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
3834 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
3837 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
3840 usb_microdia_control_write(dev
, 0x11bf, buf
, 1);
3842 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3843 second10c0b
[0], dev
->sensor_flags
, &second10c0b
[1]);
3845 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
3846 second10c0c
[0], dev
->sensor_flags
, &second10c0c
[1]);
3848 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3849 second10c0d
[0][0], dev
->sensor_flags
, &second10c0d
[0][1]);
3851 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3852 second10c0d
[1][0], dev
->sensor_flags
, &second10c0d
[1][1]);
3854 buf
[0] = 0x3c; buf
[1] = 0x00; buf
[2] = 0x0b;
3855 buf
[3] = 0x00; buf
[4] = 0x28; buf
[5] = 0x3c;
3856 usb_microdia_control_write(dev
, 0x1180, buf
, 6);
3858 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
3859 buf
[3] = 0xf0; buf
[4] = 0x00;
3860 usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
3863 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3865 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
3866 usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
3868 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
3869 usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
3872 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3875 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3878 usb_microdia_control_write(dev
, 0x11b9, buf
, 1);
3881 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3884 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3887 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3890 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3893 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3896 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3899 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
3902 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
3905 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3906 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3909 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3910 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3913 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3914 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3917 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3918 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3921 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3922 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3925 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3926 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3929 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3930 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3933 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3934 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3937 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3939 for (i
= 0; i
< 3; i
++)
3940 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3941 third10c0a
[i
][0], dev
->sensor_flags
, &third10c0a
[i
][1]);
3943 for (i
= 0; i
< 4; i
++)
3944 sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
,
3945 1, read10c0
[i
], dev
->sensor_flags
, buf
);
3948 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3951 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
3954 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
3960 int microdia_624f_start_stream(struct usb_microdia
*dev
)
3964 __u8 eeprom_slave_id
= 0x50;
3965 __u8 eeprom_flags
= SN9C20X_I2C_2WIRE
;
3968 __u8 unknown1
[9] = { dev
->sensor_flags
, dev
->sensor_slave_address
,
3969 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
3973 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3979 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3985 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3991 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3997 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4003 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4009 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4013 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20;
4014 buf
[3] = 0x10; buf
[4] = 0x08;
4016 ret
= usb_microdia_control_write(dev
, command
, buf
, 5);
4020 /* this is the same register as the I2C write, not sure why
4021 * we're writing 9 bytes -- the SN9C102 docs say all writes
4022 * must be 8 bytes, but we don't have docs for SN9C20x */
4024 ret
= usb_microdia_control_write(dev
, command
, unknown1
, 9);
4028 buf
[0] = 0x44; buf
[23] = 0x0a;
4030 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4036 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4040 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
4042 ret
= usb_microdia_control_write(dev
, command
, buf
, 3);
4046 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
4047 buf
[3] = 0xf0; buf
[4] = 0x00;
4049 ret
= usb_microdia_control_write(dev
, command
, buf
, 5);
4053 buf
[0] = 0x87; buf
[1] = 0xcc; buf
[2] = 0x08;
4055 ret
= usb_microdia_control_write(dev
, command
, buf
, 3);
4059 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20;
4060 buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b;
4061 buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80;
4062 buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8;
4063 buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
4064 buf
[20] = 0xf4; buf
[21] = 0xff;
4066 ret
= usb_microdia_control_write(dev
, command
, buf
, 22);
4070 buf
[0] = 0x00; buf
[1] = 0x00;
4072 ret
= usb_microdia_control_write(dev
, command
, buf
, 2);
4076 buf
[0] = 0x60; buf
[1] = 0x20; buf
[2] = 0x00; buf
[3] = 0x08;
4077 buf
[4] = 0x00; buf
[5] = 0x40; buf
[6] = 0x01; buf
[7] = 0xf0;
4080 ret
= usb_microdia_control_write(dev
, command
, buf
, 9);
4086 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4092 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4096 /* reset all SCCB registers to their default values */
4097 buf
[0] = OV965X_COM7_SCCB_RESET
;
4098 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_COM7
,
4099 dev
->sensor_flags
, buf
);
4103 buf
[0] = 0x7f; /* 0x7f AGC setting */
4104 buf
[1] = 0xe0; /* blue gain setting */
4105 buf
[2] = 0x90; /* red gain setting */
4106 buf
[3] = OV965X_VREF_VSTOP_LOW3(0x04) | OV965X_VREF_VSTART_LOW3(0x02);
4107 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_GAIN
,
4108 dev
->sensor_flags
, buf
);
4113 this write appears to be unnecessary since we issued
4114 the reset above and the spec says that 0x00 is the default
4115 for all 4 of the registers we're writing to here
4118 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_COM1
,
4119 dev
->sensor_flags
, buf
);
4123 /* first byte still 0, not sure why, RAVE default is 0x00 too */
4125 buf
[1] = OV965X_COM2_OUTPUT_DRIVE_CAP_2X
;
4126 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, OV965X_CTL_RAVE
,
4127 dev
->sensor_flags
, buf
);
4131 buf
[0] = 0x00; buf
[1] = 0x00;
4132 /* not sure why we're setting bit 5 below, spec says it's reserved */
4133 buf
[2] = OV965X_COM5_15FPS_48MHZ_RGB
| 0x20;
4134 /* likewise, spec says 4 & 6 are reserved */
4135 buf
[3] = OV965X_COM6_TIMING_RESET_ON_FMT_CHANGE
| 0x50;
4136 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_COM3
,
4137 dev
->sensor_flags
, buf
);
4141 buf
[0] = 0xff; /* AEC bits 2-9 */
4142 buf
[1] = OV965X_CLKRC_INPUT_CLK_NO_SCALE
;
4143 buf
[2] = OV965X_COM7_OUTPUT_RAW_RGB
;
4144 buf
[3] = OV965X_COM8_FAST_AGC_AEC
| OV965X_COM8_AEC_STEP_SIZE_NOLIMIT
|
4145 /*OV965X_COM8_AGC_ENABLE |*/ OV965X_COM8_AEC_ENABLE
| OV965X_COM8_AWB_ENABLE
;
4146 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_AECH
,
4147 dev
->sensor_flags
, buf
);
4151 buf
[0] = OV965X_COM9_MAX_AGC_8X
| OV965X_COM9_RELAX_EXPOSURE_TIMING
|
4152 OV965X_COM9_DROP_VSYNC_ON_FRAME_DROP
|
4153 OV965X_COM9_DROP_FRAME_ON_BIG_AEC
;
4155 buf
[2] = 0x07; /* hmm, spec says this is reserved */
4156 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 3, OV965X_CTL_COM9
,
4157 dev
->sensor_flags
, buf
);
4161 /* this is supposed to be reserved too */
4162 buf
[0] = 0x04; buf
[1] = 0x00;
4163 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, OV965X_CTL_MVFP
,
4164 dev
->sensor_flags
, buf
);
4168 buf
[0] = 0x78; /* this is the default! */
4169 buf
[1] = 0x68; /* this is the default! */
4170 buf
[2] = 0xd4; /* this is the default! */
4171 buf
[3] = 0x80; /* this is the default! */
4172 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_AEW
,
4173 dev
->sensor_flags
, buf
);
4177 buf
[0] = OV965X_BIAS_SUBTRACT
;
4178 buf
[1] = OV965X_Gr_COM_BYPASS_ANALOG_BLC
| OV965X_Gr_COM_BYPASS_REGULATOR
;
4179 buf
[2] = 0x00; buf
[3] = 0x00;
4180 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_GbBIAS
,
4181 dev
->sensor_flags
, buf
);
4185 buf
[0] = OV965X_BIAS_SUBTRACT
;
4186 buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
4187 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_RBIAS
,
4188 dev
->sensor_flags
, buf
);
4192 buf
[0] = 0x08; /* HSYNC rising edge start */
4193 buf
[1] = 0x30; /* HSYNC rising edge end */
4194 buf
[2] = OV965X_HREF_EDGE_OFT_TO_DATA_OUT(2) | OV965X_HREF_HSTART_LOW3(6)
4195 | OV965X_HREF_HSTOP_LOW3(4);
4196 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 3, OV965X_CTL_HSYST
,
4197 dev
->sensor_flags
, buf
);
4201 /* the docs say all 4 of these bytes are reserved */
4202 buf
[0] = 0xe2; buf
[1] = 0xbf; buf
[2] = 0x81; buf
[3] = 0xf9;
4203 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_CHLF
,
4204 dev
->sensor_flags
, buf
);
4208 /* the docs say these 2 bytes are reserved */
4209 buf
[0] = 0x00; buf
[1] = 0x93;
4210 buf
[2] = 0x50; /* bits 4 and 6 are supposedly reserved */
4211 buf
[3] = OV965X_TSLB_OUTPUT_SEQ_UYVY
| OV965X_TSLB_DIGITAL_BLC_ENABLE
;
4212 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_ADC
,
4213 dev
->sensor_flags
, buf
);
4217 buf
[0] = OV965X_COM11_MANUAL_BANDING_FILTER
;
4218 buf
[1] = 0x73; /* these bits all reserved */
4219 buf
[2] = OV965X_COM13_ENABLE_COLOR_MATRIX
| OV965X_COM13_DELAY_Y_CHANNEL
4220 | OV965X_COM13_OUTPUT_DELAY(1);
4221 buf
[3] = OV965X_COM14_YUV_EDGE_ENHANCE
4222 | OV965X_COM14_EDGE_ENHANCE_FACTOR_DBL
4223 | 0x0b; /* these last bits supposedly reserved */
4224 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_COM11
,
4225 dev
->sensor_flags
, buf
);
4229 buf
[0] = OV965X_EDGE_EDGE_ENHANCE_LOW4(8)
4230 | OV965X_EDGE_EDGE_ENHANCE_FACTOR(8);
4231 buf
[1] = OV965X_COM15_OUTPUT_RANGE_O0_TO_FF
| 0x01; /* bit reserved */
4232 buf
[2] = 0x00; buf
[3] = 0x08; /* this bit supposedly reserved */
4233 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_EDGE
,
4234 dev
->sensor_flags
, buf
);
4239 /* OV9653 control register 0x43 is reserved, according to the docs */
4240 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x43,
4241 dev
->sensor_flags
, buf
); /* 'Dummy'-write */
4245 buf
[0] = 0x80; buf
[1] = 0x80; buf
[2] = 0x40; buf
[3] = 0x00;
4246 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_MANU
,
4247 dev
->sensor_flags
, buf
);
4252 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_DBLV
,
4253 dev
->sensor_flags
, buf
);
4257 buf
[0] = 0x06; buf
[1] = 0x20; buf
[2] = 0x00; buf
[3] = 0x00;
4258 /* OV9653 control register 0x8b is reserved, according to the docs */
4259 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x8b,
4260 dev
->sensor_flags
, buf
);
4265 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_DBLC1
,
4266 dev
->sensor_flags
, buf
);
4270 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x88; buf
[3] = 0x88;
4271 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_DM_LNL
,
4272 dev
->sensor_flags
, buf
);
4277 /* control reg 0x96 reserved, according to docs */
4278 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, 0x96,
4279 dev
->sensor_flags
, buf
);
4284 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_COM26
,
4285 dev
->sensor_flags
, buf
);
4289 buf
[0] = 0x80; buf
[1] = 0xb8; buf
[2] = 0x92; buf
[3] = 0x0a;
4290 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_ACOM2
,
4291 dev
->sensor_flags
, buf
);
4295 /* reserved, according to docs */
4296 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0xac,
4297 dev
->sensor_flags
, NULL
);
4301 buf
[0] = 0x1b; buf
[1] = 0xbb; buf
[2] = 0x05; buf
[3] = 0x7d;
4302 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_HSTART
,
4303 dev
->sensor_flags
, buf
);
4308 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_PSHIFT
,
4309 dev
->sensor_flags
, buf
);
4313 /* now for some reason it switches to these two reads and
4314 * then back to the long init sequence */
4316 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* reads 30 */
4319 /* msg("Should read 0x30, read: %x", buf[0]); */
4322 buf
[0] = eeprom_slave_id
;
4323 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4327 /* TRY TO READ FROM EEPROM: */
4328 ret
= sn9c20x_read_i2c_data(dev
, eeprom_slave_id
, 1, 0x00, eeprom_flags
, buf
);
4330 UDIA_INFO("No EEPROM found\n");
4332 UDIA_INFO("Read from EEPROM successful\n");
4333 /* returns 0xff -- don't know what we're supposed to do w/ that info */
4334 /* msg("Read from eeprom, should read 0xff, read: %x", buf[0]); */
4338 buf
[0] = dev
->sensor_slave_address
;
4339 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4345 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4351 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4357 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4363 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4369 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4375 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4381 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4387 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4393 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4399 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4404 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_COM7
,
4405 dev
->sensor_flags
, buf
);
4410 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_VREF
,
4411 dev
->sensor_flags
, buf
);
4415 buf
[0] = 0x24; buf
[1] = 0xc5; buf
[2] = 0x00; buf
[3] = 0x3c;
4416 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_HSTART
,
4417 dev
->sensor_flags
, buf
);
4421 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, OV965X_CTL_PSHIFT
,
4422 dev
->sensor_flags
, NULL
);
4427 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_HREF
,
4428 dev
->sensor_flags
, buf
);
4433 buf
[0] = 0x02; buf
[1] = 0x00; buf
[2] = 0x07; buf
[3] = 0x00;
4434 buf
[4] = 0x28; buf
[5] = 0x3c;
4435 ret
= usb_microdia_control_write(dev
, command
, buf
, 6);
4440 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0;
4442 ret
= usb_microdia_control_write(dev
, command
, buf
, 5);
4448 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4453 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
4454 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4459 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
4460 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4466 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4472 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4478 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4485 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4491 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4497 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4503 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4506 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 0x38 */
4511 else if (buf
[0] == 0xb8)
4513 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4516 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 0x39 */
4521 else if (buf
[0] == 0xb9)
4523 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4526 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 0x3a */
4531 else if (buf
[0] == 0xba)
4533 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4536 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 0x3b */
4541 else if (buf
[0] == 0xbb)
4543 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4546 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 0x3c */
4549 last_11b8
[0] = buf
[0];
4550 buf
[0] = last_11b8
[0] & 0xf0; /* 0xf0 or 0x70 */
4551 buf
[0] = buf
[0] | 0x0a; /* => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 5 READS/WRITES */
4552 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4557 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_CLKRC
,
4558 dev
->sensor_flags
, buf
);
4564 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_EXHCH
,
4565 dev
->sensor_flags
, buf
);
4570 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_EXHCL
,
4571 dev
->sensor_flags
, buf
);
4576 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_DM_LNL
,
4577 dev
->sensor_flags
, buf
);
4583 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_DM_LNH
,
4584 dev
->sensor_flags
, buf
);
4589 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_MVFP
,
4590 dev
->sensor_flags
, buf
);
4594 /* is it really necessary to do this same write again?; 627f does this, too */
4596 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_MVFP
,
4597 dev
->sensor_flags
, buf
);
4604 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4609 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_AECH
,
4610 dev
->sensor_flags
, buf
);
4615 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_COM1
,
4616 dev
->sensor_flags
, buf
);
4622 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_AECHM
,
4623 dev
->sensor_flags
, buf
);
4628 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_ADVFL
,
4629 dev
->sensor_flags
, buf
);
4635 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_ADVFH
,
4636 dev
->sensor_flags
, buf
);
4642 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_GAIN
,
4643 dev
->sensor_flags
, buf
);
4648 buf
[0] = 0x78; /*buf[1] = 0x78;*/
4649 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_BLUE
,
4650 dev
->sensor_flags
, buf
);
4655 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_RED
,
4656 dev
->sensor_flags
, buf
);
4659 /* 627f does the last two writes at once (2 byte write to OV965X_CTL_BLUE) */
4664 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4668 if (dev
->webcam_model
== CAMERA_MODEL(USB_0C45_VID
, USB_627F_PID
))
4673 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4679 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4685 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4692 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4698 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4705 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4711 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4715 /* memset(buf, 0, 4); */
4717 buf
[0] = 0x80; buf
[1] = 0x02; buf
[2] = 0xe0; buf
[3] = 0x01;
4718 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4723 if (dev
->webcam_model
== CAMERA_MODEL(USB_0C45_VID
, USB_627F_PID
)) {
4724 buf
[0] = 0x19; buf
[1] = 0x31; buf
[2] = 0x44; buf
[3] = 0x50;
4725 buf
[4] = 0x52; buf
[5] = 0x56; buf
[6] = 0x5b; buf
[7] = 0x61;
4726 buf
[8] = 0x65; buf
[9] = 0x6a; buf
[10] = 0x6c; buf
[11] = 0x6e;
4727 buf
[12] = 0x70; buf
[13] = 0x72; buf
[14] = 0x74; buf
[15] = 0x76;
4728 buf
[16] = 0x1a; buf
[17] = 0x31; buf
[18] = 0x44; buf
[19] = 0x51;
4729 buf
[20] = 0x54; buf
[21] = 0x57; buf
[22] = 0x5c; buf
[23] = 0x61;
4730 buf
[24] = 0x66; buf
[25] = 0x6b; buf
[26] = 0x6d; buf
[27] = 0x6f;
4731 buf
[28] = 0x71; buf
[29] = 0x73; buf
[30] = 0x75; buf
[31] = 0x76;
4732 buf
[32] = 0x1b; buf
[33] = 0x32; buf
[34] = 0x44; buf
[35] = 0x50;
4733 buf
[36] = 0x50; buf
[37] = 0x54; buf
[38] = 0x59; buf
[39] = 0x5e;
4734 buf
[40] = 0x63; buf
[41] = 0x67; buf
[42] = 0x6a; buf
[43] = 0x6c;
4735 buf
[44] = 0x6e; buf
[45] = 0x70; buf
[46] = 0x72; buf
[47] = 0x73;
4737 buf
[0] = 0x10; buf
[1] = 0x21; buf
[2] = 0x34; buf
[3] = 0x40;
4738 buf
[4] = 0x47; buf
[5] = 0x4F; buf
[6] = 0x57; buf
[7] = 0x5F;
4739 buf
[8] = 0x64; buf
[9] = 0x68; buf
[10] = 0x6D; buf
[11] = 0x73;
4740 buf
[12] = 0x79; buf
[13] = 0x80; buf
[14] = 0x89; buf
[15] = 0x97;
4741 buf
[16] = 0x0D; buf
[17] = 0x1C; buf
[18] = 0x2A; buf
[19] = 0x33;
4742 buf
[20] = 0x38; buf
[21] = 0x3D; buf
[22] = 0x44; buf
[23] = 0x4A;
4743 buf
[24] = 0x4E; buf
[25] = 0x52; buf
[26] = 0x56; buf
[27] = 0x5B;
4744 buf
[28] = 0x61; buf
[29] = 0x68; buf
[30] = 0x6F; buf
[31] = 0x7A;
4745 buf
[32] = 0x0D; buf
[33] = 0x1A; buf
[34] = 0x2A; buf
[35] = 0x31;
4746 buf
[36] = 0x36; buf
[37] = 0x3B; buf
[38] = 0x41; buf
[39] = 0x47;
4747 buf
[40] = 0x4A; buf
[41] = 0x4E; buf
[42] = 0x53; buf
[43] = 0x58;
4748 buf
[44] = 0x5D; buf
[45] = 0x64; buf
[46] = 0x6B; buf
[47] = 0x76;
4750 ret
= usb_microdia_control_write(dev
, command
, buf
, 48);
4754 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05;
4755 buf
[4] = 0x04; buf
[5] = 0x3f;
4756 ret
= usb_microdia_control_write(dev
, command
, buf
, 6);
4762 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
4763 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4768 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x32; buf
[3] = 0xdd;
4769 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4776 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4782 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4788 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4793 /* //////////////////////////////////////////////////////////////////// */
4796 buf
[0] = 0x0d; buf
[1] = 0x08; buf
[2] = 0x08; buf
[3] = 0x0d;
4797 buf
[4] = 0x08; buf
[5] = 0x08; buf
[6] = 0x0d; buf
[7] = 0x0d;
4798 buf
[8] = 0x0d; buf
[9] = 0x0d; buf
[10] = 0x11; buf
[11] = 0x0d;
4799 buf
[12] = 0x0d; buf
[13] = 0x11; buf
[14] = 0x15; buf
[15] = 0x21;
4800 buf
[16] = 0x15; buf
[17] = 0x15; buf
[18] = 0x11; buf
[19] = 0x11;
4801 buf
[20] = 0x15; buf
[21] = 0x2a; buf
[22] = 0x1d; buf
[23] = 0x1d;
4802 buf
[24] = 0x19; buf
[25] = 0x21; buf
[26] = 0x32; buf
[27] = 0x2a;
4803 buf
[28] = 0x32; buf
[29] = 0x32; buf
[30] = 0x2e; buf
[31] = 0x2a;
4804 buf
[32] = 0x2e; buf
[33] = 0x2e; buf
[34] = 0x36; buf
[35] = 0x3a;
4805 buf
[36] = 0x4b; buf
[37] = 0x43; buf
[38] = 0x36; buf
[39] = 0x3a;
4806 buf
[40] = 0x47; buf
[41] = 0x3a; buf
[42] = 0x2e; buf
[43] = 0x2e;
4807 buf
[44] = 0x43; buf
[45] = 0x5c; buf
[46] = 0x43; buf
[47] = 0x47;
4808 buf
[48] = 0x4f; buf
[49] = 0x54; buf
[50] = 0x58; buf
[51] = 0x58;
4809 buf
[52] = 0x58; buf
[53] = 0x32; buf
[54] = 0x3f; buf
[55] = 0x60;
4810 buf
[56] = 0x64; buf
[57] = 0x5c; buf
[58] = 0x54; buf
[59] = 0x64;
4811 buf
[60] = 0x4b; buf
[61] = 0x54; buf
[62] = 0x58; buf
[63] = 0x54;
4812 ret
= usb_microdia_control_write(dev
, command
, buf
, 64);
4817 buf
[0] = 0x0d; buf
[1] = 0x11; buf
[2] = 0x11; buf
[3] = 0x15;
4818 buf
[4] = 0x11; buf
[5] = 0x15; buf
[6] = 0x26; buf
[7] = 0x15;
4819 buf
[8] = 0x15; buf
[9] = 0x26; buf
[10] = 0x54; buf
[11] = 0x36;
4820 buf
[12] = 0x2e; buf
[13] = 0x36; buf
[14] = 0x54; buf
[15] = 0x54;
4821 buf
[16] = 0x54; buf
[17] = 0x54; buf
[18] = 0x54; buf
[19] = 0x54;
4822 buf
[20] = 0x54; buf
[21] = 0x54; buf
[22] = 0x54; buf
[23] = 0x54;
4823 buf
[24] = 0x54; buf
[25] = 0x54; buf
[26] = 0x54; buf
[27] = 0x54;
4824 buf
[28] = 0x54; buf
[29] = 0x54; buf
[30] = 0x54; buf
[31] = 0x54;
4825 buf
[32] = 0x54; buf
[33] = 0x54; buf
[34] = 0x54; buf
[35] = 0x54;
4826 buf
[36] = 0x54; buf
[37] = 0x54; buf
[38] = 0x54; buf
[39] = 0x54;
4827 buf
[40] = 0x54; buf
[41] = 0x54; buf
[42] = 0x54; buf
[43] = 0x54;
4828 buf
[44] = 0x54; buf
[45] = 0x54; buf
[46] = 0x54; buf
[47] = 0x54;
4829 buf
[48] = 0x54; buf
[49] = 0x54; buf
[50] = 0x54; buf
[51] = 0x54;
4830 buf
[52] = 0x54; buf
[53] = 0x54; buf
[54] = 0x54; buf
[55] = 0x54;
4831 buf
[56] = 0x54; buf
[57] = 0x54; buf
[58] = 0x54; buf
[59] = 0x54;
4832 buf
[60] = 0x54; buf
[61] = 0x54; buf
[62] = 0x54; buf
[63] = 0x54;
4833 ret
= usb_microdia_control_write(dev
, command
, buf
, 64);
4840 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4846 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4853 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4859 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4865 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4871 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4877 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4883 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4889 buf
[0] = 0x02; buf
[1] = 0x00; buf
[2] = 0x07; buf
[3] = 0x00;
4890 buf
[4] = 0x28; buf
[5] = 0x3c;
4891 ret
= usb_microdia_control_write(dev
, command
, buf
, 6);
4896 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0;
4898 ret
= usb_microdia_control_write(dev
, command
, buf
, 5);
4904 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4909 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
4910 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4916 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
4917 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4923 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4929 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4935 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4941 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4947 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4953 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4959 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4966 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4972 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4978 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4985 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4990 if (last_11b8
[0] == 0x3c)
4992 else if (last_11b8
[0] == 0xbc)
4994 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4997 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 624f: 0xb8 627f: 0x38 */
5002 else if (buf
[0] == 0xb8)
5004 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
5007 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 624f: 0xb9 627f: 0x39 */
5012 else if (buf
[0] == 0xb9)
5014 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
5017 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 0x3a */
5022 else if (buf
[0] == 0xba)
5024 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
5027 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 624f: 0x3b 627f: 0xbb */
5032 else if (buf
[0] == 0xbb)
5035 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
5039 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* 624f: 0x3c 627f: 0xbc */
5043 buf
[0] = buf
[0] & 0xf0; /* 0xf0 or 0x70 */
5045 /* THIS VALUE SEEMS TO DEPEND ON WHAT WAS
5046 READ/WRITTEN IN THE LAST 5 READS/WRITES */
5047 if (dev
->webcam_model
== CAMERA_MODEL(USB_0C45_VID
, USB_627F_PID
))
5048 buf
[0] = buf
[0] | 0x09;
5050 buf
[0] = buf
[0] | 0x08;
5051 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
5056 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_CLKRC
,
5057 dev
->sensor_flags
, buf
);
5062 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_EXHCH
,
5063 dev
->sensor_flags
, buf
);
5068 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_EXHCL
,
5069 dev
->sensor_flags
, buf
);
5074 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_DM_LNL
,
5075 dev
->sensor_flags
, buf
);
5080 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_DM_LNH
,
5081 dev
->sensor_flags
, buf
);
5087 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
5094 UDIA_ERROR("start stream: command %x failed (%d)!\n", command
, ret
);
5098 int microdia_6260_start_stream(struct usb_microdia
*dev
)
5103 ret
= usb_microdia_control_read(dev
, 0x1045, buf
, 1);
5105 ret
= usb_microdia_control_write(dev
, 0x1045, buf
, 1);
5107 ret
= usb_microdia_control_write(dev
, 0x1066, buf
, 1);
5109 ret
= usb_microdia_control_write(dev
, 0x1007, buf
, 1);
5111 ret
= usb_microdia_control_write(dev
, 0x1006, buf
, 1);
5113 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
5115 ret
= usb_microdia_control_write(dev
, 0x1001, buf
, 1);
5117 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5119 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
5121 ret
= usb_microdia_control_write(dev
, 0x1020, buf
, 1);
5123 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20; buf
[3] = 0x10;
5125 ret
= usb_microdia_control_write(dev
, 0x1067, buf
, 5);
5127 buf
[0] = 0x80; buf
[1] = 0x21; buf
[2] = 0x00; buf
[3] = 0x00;
5128 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
5130 ret
= usb_microdia_control_write(dev
, 0x10c0, buf
, 9);
5132 buf
[0] = 0x45; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30;
5133 buf
[4] = 0x00; buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed;
5134 buf
[8] = 0x0f; buf
[9] = 0xda; buf
[10] = 0x0f; buf
[11] = 0x3a;
5135 buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00; buf
[15] = 0xd0;
5136 buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
5137 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
5138 ret
= usb_microdia_control_write(dev
, 0x10e0, buf
, 24);
5140 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
5141 ret
= usb_microdia_control_write(dev
, 0x10f8, buf
, 3);
5143 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0;
5145 ret
= usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
5147 buf
[0] = 0x8a; buf
[1] = 0x8c; buf
[2] = 0x08;
5148 ret
= usb_microdia_control_write(dev
, 0x1188, buf
, 3);
5150 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20;
5151 buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b;
5152 buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80;
5153 buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8;
5154 buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
5155 buf
[20] = 0xf4; buf
[21] = 0xff;
5156 ret
= usb_microdia_control_write(dev
, 0x118b, buf
, 22);
5158 buf
[0] = 0x00; buf
[1] = 0x00;
5159 ret
= usb_microdia_control_write(dev
, 0x11a1, buf
, 2);
5161 buf
[0] = 0x60; buf
[1] = 0x28; buf
[2] = 0x00; buf
[3] = 0x00;
5162 buf
[4] = 0x00; buf
[5] = 0x40; buf
[6] = 0x01; buf
[7] = 0xf0;
5164 ret
= usb_microdia_control_write(dev
, 0x11b7, buf
, 9);
5167 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
5170 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5172 ret
= ov7670_initialise(dev
);
5174 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1, 0x3b, dev
->sensor_flags
, buf
);
5175 ret
= usb_microdia_control_read(dev
, 0x10c1, buf
, 1);
5177 ret
= usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
5179 /* TRY TO READ FROM EEPROM: */
5180 ret
= sn9c20x_read_i2c_data(dev
, 0x50, 1, 0x00, dev
->sensor_flags
, buf
);
5182 UDIA_INFO("No EEPROM found\n");
5184 UDIA_INFO("Read from EEPROM successful\n");
5187 ret
= usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
5189 ret
= usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
5191 ret
= usb_microdia_control_write(dev
, 0x1001, buf
, 1);
5193 ret
= usb_microdia_control_write(dev
, 0x1001, buf
, 1);
5195 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00;
5196 buf
[4] = 0x50; buf
[5] = 0x3c;
5197 ret
= usb_microdia_control_write(dev
, 0x1180, buf
, 6);
5199 buf
[0] = 0x00; buf
[1] = 0x40; buf
[2] = 0x00; buf
[3] = 0xf0;
5201 ret
= usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
5204 ret
= usb_microdia_control_write(dev
, 0x1189, buf
, 1);
5206 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0x50;
5207 ret
= usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
5209 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x3c;
5210 ret
= usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
5212 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
5214 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5216 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5218 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5220 ret
= usb_microdia_control_write(dev
, 0x118a, buf
, 1);
5222 ret
= usb_microdia_control_write(dev
, 0x0395, 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);
5240 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5242 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5244 /* OV7670 Intialise Part 2 */
5245 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00;
5246 buf
[4] = 0x50; buf
[5] = 0x3c;
5247 ret
= usb_microdia_control_write(dev
, 0x1180, buf
, 6);
5249 buf
[0] = 0x00; buf
[1] = 0x40; buf
[2] = 0x00; buf
[3] = 0xf0;
5251 ret
= usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
5254 ret
= usb_microdia_control_write(dev
, 0x1189, buf
, 1);
5256 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0x50;
5257 ret
= usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
5259 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x3c;
5260 ret
= usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
5263 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
5265 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
5267 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
5269 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5271 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5273 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5275 ret
= usb_microdia_control_write(dev
, 0x118a, buf
, 1);
5277 ret
= usb_microdia_control_write(dev
, 0x0395, 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);
5295 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5297 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5299 /* OV7670 Initialisation Part 3 Goes Here */
5301 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
5307 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
5311 * @returns 0 (ok) or -1 (error)
5315 * Windows driver versions: 5.7.23.000
5316 * Windows versions: 2000 and XP
5317 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
5318 * All logs were made using AMCAP with 640x480, RGB24
5320 int microdia_6270_start_stream(struct usb_microdia
*dev
)
5327 /* Check if sensor slave address is valid: */
5328 if ((dev
->sensor_slave_address
!= MT9V111_I2C_SLAVE_ADDRESS
) && (dev
->sensor_slave_address
!= MT9V011_I2C_SLAVE_ADDRESS
)) {
5329 UDIA_INFO("microdia_6270_start_stream(): Invalid sensor slave address !\n");
5333 /* <= INTERRUPT COMING BACK (URB 1953) */
5334 /* SWITCH TO ALTERNATE SETTINGS 8 (URB 1954) // NOT IN ALEX'S LOG */
5335 /* => INTERRUPT GOING DOWN (URB 1955) */
5338 usb_microdia_control_write(dev
, 0x1066, buf
, 1); /* URB 1956 */
5340 /* <= INTERRUPT COMING BACK (URB 1955) */
5341 /* => INTERRUPT GOING DOWN (URB 1957) */
5344 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 1958 */
5346 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 1959 */
5348 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 1960 */
5350 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 1961 */
5352 usb_microdia_control_write(dev
, 0x1020, buf
, 1); /* URB 1962 */
5353 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20; buf
[3] = 0x10; buf
[4] = 0x08;
5354 usb_microdia_control_write(dev
, 0x1067, buf
, 5); /* URB 1963 */
5356 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5357 /* STRANGE I2C MESSAGE: */
5359 /* - byte 8 = 0x00 at first start + first cycle */
5360 /* - procedure not complete: no wait/check for ack/error, no readout of 0x10c2 */
5361 /* - dummy writes at first cycle and read at second cycle, but there are many I2C messages in the meantime, so this should not work */
5363 /* AT FIRST START + FIRST CYCLE: */
5364 buf
[0] = 0x80; buf
[1] = dev
->sensor_slave_address
; buf
[2] = 0x00; buf
[3] = 0x00;
5365 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x03;
5366 /* AT ALL FURTHER STARTS + FIRST CYCLE: */
5367 /* MT9V111: I2C MESSAGE => IFP Register 0x33: Auto exposure */
5368 /* buf[0] = 0x90; buf[1] = dev->sensor_slave_address; buf[2] = 0x33; buf[3] = 0x00; */
5369 /* buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03; */
5370 /* MT9V011: ????????????????????????? */
5371 /* buf[0] = 0x90; buf[1] = dev->sensor_slave_address; buf[2] = 0x07; buf[3] = 0x00; */
5372 /* buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03; */
5373 /* ALWAYS AT 2nd AND FURTHER CYCLES: */
5375 /* buf[0] = 0xa2; buf[1] = 0x5c; buf[2] = 0x00; buf[3] = 0x36; */
5376 /* buf[4] = 0x00; buf[5] = 0x82; buf[6] = 0x3a; buf[7] = 0x10; buf[8] = 0x03; */
5377 /* => buf[3] to buf[6] simply contain bytes read with URB 2215 */
5379 /* buf[0] = 0xb0; buf[1] = 0x5d; buf[2] = 0x07; buf[3] = 0x00; */
5380 /* buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03; */
5381 usb_microdia_control_write(dev
, 0x10c0, buf
, 9); /* URB 1964 */
5382 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5384 buf
[0] = 0x45; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30;
5385 buf
[4] = 0x00; buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed;
5386 buf
[8] = 0x0f; buf
[9] = 0xda; buf
[10] = 0x0f; buf
[11] = 0x3a;
5387 buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00; buf
[15] = 0xd0;
5388 buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
5389 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
5390 usb_microdia_control_write(dev
, 0x10e0, buf
, 24); /* URB 1965 */
5391 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
5392 usb_microdia_control_write(dev
, 0x10f8, buf
, 3); /* URB 1966 */
5393 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
5394 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); /* URB 1967 */
5395 buf
[0] = 0x06; buf
[1] = 0x0c; buf
[2] = 0x08;
5396 usb_microdia_control_write(dev
, 0x1188, buf
, 3); /* URB 1968 */
5397 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20;
5398 buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b;
5399 buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80;
5400 buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8;
5401 buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
5402 buf
[20] = 0xf4; buf
[21] = 0xff;
5403 usb_microdia_control_write(dev
, 0x118b, buf
, 22); /* URB 1969 */
5404 buf
[0] = 0x00; buf
[1] = 0x00;
5405 usb_microdia_control_write(dev
, 0x11a1, buf
, 2); /* URB 1970 */
5406 buf
[0] = 0x60; buf
[1] = 0x28; buf
[2] = 0x00; buf
[3] = 0x08;
5407 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
5409 usb_microdia_control_write(dev
, 0x11b7, buf
, 9); /* URB 1971 */
5411 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 1972 */
5413 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 1973 */
5415 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5418 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
5419 /* Write to IFP register 0x0d: Color Correction Register 8 */
5420 buf
[0] = 0x00; buf
[1] = 0x01;
5421 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
); /* URBs 1974-1976 */
5422 /* Write to IFP register 0x0d: Color Correction Register 8 */
5423 buf
[0] = 0x00; buf
[1] = 0x00; /* ??? */
5424 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
); /* URBs 1977-1979 */
5425 /* Writes to IFP registers 0x01: Register Address Space Selection */
5426 /* 0x02: Color Correction Register 1 */
5427 buf
[0] = 0x00; buf
[1] = 0x01; /* select IFP address space */
5428 buf
[2] = 0x00; buf
[3] = 0x16; /* ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
5429 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x01, dev
->sensor_flags
, buf
); /* URBs 1980-1982 */
5430 /* Writes to IFP registers 0x03: Color Correction Register 3 */
5431 /* 0x04: Color Correction Register 4 */
5432 buf
[0] = 0x01; buf
[1] = 0xe1; /* ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
5433 buf
[2] = 0x02; buf
[3] = 0x81; /* ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
5434 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x03, dev
->sensor_flags
, buf
); /* URBs 1983-1985 */
5435 /* Writes to IFP registers 0x05: Aperture Correction (Sharpening) */
5436 /* 0x06: Operating Mode Control */
5437 buf
[0] = 0x00; buf
[1] = 0x04; /* 100% sharpening, no automatic sharpness reduction at low light // AT FIRST START + FIRST CYCLE: 0x00 0x00: no sharpening */
5438 buf
[2] = 0x00; buf
[3] = 0x00; /* stop AWB at the current values, no on-the-fly defect correction, no auto exposure, + RESREVED option */
5439 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x05, dev
->sensor_flags
, buf
); /* URBs 1986-1988 */
5440 /* Writes to IFP registers 0x07: Image Flow Processor Soft Reset */
5441 /* 0x08: Output Format Control */
5442 buf
[0] = 0x30; buf
[1] = 0x02; /* reset // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
5443 buf
[2] = 0x04; buf
[3] = 0x80; /* bypass entire image processing, raw 8+2 Bayer data output directly */
5444 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x07, dev
->sensor_flags
, buf
); /* URBs 1989-1991 */
5445 /* "Dummy" write to IFP Register 0x11: Color Correction Register 12 */
5446 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x11, dev
->sensor_flags
, NULL
); /* URBs 1992-1993 */
5447 /* Write to register 0x01: Register address space selection */
5448 /* Write to sensor register 0x02: Column Start */
5449 buf
[0] = 0x00; buf
[1] = 0x04; /* select sensor address space */
5450 buf
[2] = 0x00; buf
[3] = 0x16; /* start with column 22 */
5451 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x01, dev
->sensor_flags
, buf
); /* URBs 1994-1996 */
5452 /* Writes to sensor registers 0x03: Window Height */
5453 /* 0x04: Window Width */
5454 buf
[0] = 0x01; buf
[1] = 0xe6; /* 486 */
5455 buf
[2] = 0x02; buf
[3] = 0x86; /* 646 */
5456 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x03, dev
->sensor_flags
, buf
); /* URBs 1997-1999 */
5457 /* Writes to sensor registers 0x05: Horizontal Blanking */
5458 /* 0x06: Vertical Blanking */
5459 buf
[0] = 0x00; buf
[1] = 0x04; /* 4 columns (pixel clocks) // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
5460 buf
[2] = 0x00; buf
[3] = 0x00; /* 0 rows */
5461 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x05, dev
->sensor_flags
, buf
); /* URBs 2000-2002 */
5462 /* Writes to sensor registers 0x07: Output Control */
5463 /* 0x08: Row Start */
5464 buf
[0] = 0x30; buf
[1] = 0x02; /* normal operation + chip enable + RESERVED options */
5465 buf
[2] = 0x00; buf
[3] = 0x08; /* row 8 */
5466 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x07, dev
->sensor_flags
, buf
); /* URBs 2003-2005 */
5467 /* "Dummy" write to sensor Register 0x11: UNDOCUMENTED */
5468 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x11, dev
->sensor_flags
, NULL
); /* URBs 2006-2007 */
5469 /* Writes to sensor registers 0x0c: Shutter Delay */
5470 /* 0x0d: Reset (Soft) (from MT9V011 datasheet) */
5471 buf
[0] = 0x00; buf
[1] = 0x00; /* 0 master clocks */
5472 buf
[2] = 0x00; buf
[3] = 0x00; /* return to normal operation */
5473 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0c, dev
->sensor_flags
, buf
); /* URBs 2008-2010 */
5474 /* Writes to sensor registers 0x0e: UNDOCUMENTED */
5475 /* 0x0f: UNDOCUMENTED */
5476 buf
[0] = 0x00; buf
[1] = 0x00;
5477 buf
[2] = 0x00; buf
[3] = 0x00;
5478 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0e, dev
->sensor_flags
, buf
); /* URBs 2011-2013 */
5479 /* Writes to sensor registers 0x10: UNDOCUMENTED */
5480 /* 0x11: UNDOCUMENTED */
5481 buf
[0] = 0x00; buf
[1] = 0x00;
5482 buf
[2] = 0x00; buf
[3] = 0x00;
5483 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x10, dev
->sensor_flags
, buf
); /* URBs 2014-2016 */
5484 /* Writes to sensor registers 0x12: 2X Zoom Col Start => 0x1e bit 0 must be set to activate zoom */
5485 /* 0x13: 2X Zoom Row Start => 0x1e bit 0 must be set to activate zoom */
5486 buf
[0] = 0x00; buf
[1] = 0xb0; /* column 176 */
5487 buf
[2] = 0x00; buf
[3] = 0x7c; /* row 124 */
5488 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x12, dev
->sensor_flags
, buf
); /* URBs 2017-2018 */
5489 /* Writes to sensor registers 0x14: UNDOCUMENTED */
5490 /* 0x15: UNDOCUMENTED */
5491 buf
[0] = 0x00; buf
[1] = 0x00;
5492 buf
[2] = 0x00; buf
[3] = 0x00;
5493 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x14, dev
->sensor_flags
, buf
); /* URBs 2019-2021 */
5494 /* Writes to sensor registers 0x16: UNDOCUMENTED */
5495 /* 0x17: UNDOCUMENTED */
5496 buf
[0] = 0x00; buf
[1] = 0x00;
5497 buf
[2] = 0x00; buf
[3] = 0x00;
5498 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x16, dev
->sensor_flags
, buf
); /* URBs 2022-2024 */
5499 /* Writes to sensor registers 0x18: UNDOCUMENTED */
5500 /* 0x19: UNDOCUMENTED */
5501 buf
[0] = 0x00; buf
[1] = 0x00;
5502 buf
[2] = 0x00; buf
[3] = 0x00;
5503 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x18, dev
->sensor_flags
, buf
); /* URBs 2025-2027 */
5504 /* Writes to sensor registers 0x1a: UNDOCUMENTED */
5505 /* 0x1b: UNDOCUMENTED */
5506 buf
[0] = 0x00; buf
[1] = 0x00;
5507 buf
[2] = 0x00; buf
[3] = 0x00;
5508 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1a, dev
->sensor_flags
, buf
); /* URBs 2028-2030 */
5509 /* Writes to sensor registers 0x1c: UNDOCUMENTED */
5510 /* 0x1d: UNDOCUMENTED */
5511 buf
[0] = 0x00; buf
[1] = 0x00;
5512 buf
[2] = 0x00; buf
[3] = 0x00;
5513 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1c, dev
->sensor_flags
, buf
); /* URBs 2031-2033 */
5514 /* Write to sensor register 0x30: RESERVED */
5515 buf
[0] = 0x00; buf
[1] = 0x00;
5516 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x30, dev
->sensor_flags
, buf
); /* URBs 2034-2036 */
5517 /* Write to sensor register 0x20: Read Mode */
5518 buf
[0] = 0x00; buf
[1] = 0x00; /* normal readout */
5519 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
); /* URBs 2037-2039 */
5520 /* Writes to sensor registers 0x30: RESERVED */
5521 /* 0x31: RESERVED */
5522 buf
[0] = 0x00; buf
[1] = 0x05;
5523 buf
[2] = 0x00; buf
[3] = 0x00;
5524 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x30, dev
->sensor_flags
, buf
); /* URBs 2040-2042 */
5525 /* "Dummy" write to sensor Register 0x34: RESERVED */
5526 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x34, dev
->sensor_flags
, NULL
); /* URBs 2043-2044 */
5527 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
5528 /* Write to sensor register 0x07: Output Control */
5529 buf
[0] = 0x00; buf
[1] = 0x02; /* chip enable, normal operation */
5530 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
5531 /* Write to sensor register 0x0d: Soft Reset */
5532 buf
[0] = 0x00; buf
[1] = 0x01; /* reset */
5533 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
);
5534 /* Write to sensor register 0x0d: Soft Reset */
5535 buf
[0] = 0x00; buf
[1] = 0x00; /* resume operation */
5536 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
);
5537 /* Writes to sensor registers 0x01: Row start */
5538 /* 0x02: Column Start */
5539 buf
[0] = 0x00; buf
[1] = 0x08; /* start with row 8 */
5540 buf
[2] = 0x00; buf
[3] = 0x16; /* start with column 22 */
5541 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x01, dev
->sensor_flags
, buf
);
5542 /* Writes to sensor registers 0x03: Window Height */
5543 /* 0x04: Window Width */
5544 buf
[0] = 0x01; buf
[1] = 0xe1; /* 481 */
5545 buf
[2] = 0x02; buf
[3] = 0x81; /* 641 */
5546 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x03, dev
->sensor_flags
, buf
);
5547 /* Writes to sensor registers 0x05: Horizontal Blanking */
5548 /* 0x06: Vertical Blanking */
5549 buf
[0] = 0x00; buf
[1] = 0x83; /* 131 columns (pixel clocks) */
5550 buf
[2] = 0x00; buf
[3] = 0x06; /* 6 rows */
5551 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x05, dev
->sensor_flags
, buf
);
5552 /* Write to sensor register 0x0d: Soft Reset */
5553 buf
[0] = 0x00; buf
[1] = 0x02; /* UNKNOWN */
5554 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
);
5555 /* Writes to sensor registers 0x0a: Pixel Clock Speed */
5556 /* 0x0b: Frame Restart */
5557 buf
[0] = 0x00; buf
[1] = 0x00; /* default */
5558 buf
[2] = 0x00; buf
[3] = 0x00; /* (has no effect/no restart) */
5559 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0a, dev
->sensor_flags
, buf
);
5560 /* Writes to sensor registers 0x0c: Shutter Delay */
5561 /* 0x0d: Soft Reset */
5562 buf
[0] = 0x00; buf
[1] = 0x00; /* 0 master clocks */
5563 buf
[2] = 0x00; buf
[3] = 0x00; /* resume operation */
5564 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0c, dev
->sensor_flags
, buf
);
5565 /* Writes to sensor registers 0x0e: UNDOCUMENTED */
5566 /* 0x0f: UNDOCUMENTED */
5567 buf
[0] = 0x00; buf
[1] = 0x00;
5568 buf
[2] = 0x00; buf
[3] = 0x00;
5569 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0e, dev
->sensor_flags
, buf
);
5570 /* Writes to sensor registers 0x10: UNDOCUMENTED */
5571 /* 0x11: UNDOCUMENTED */
5572 buf
[0] = 0x00; buf
[1] = 0x00;
5573 buf
[2] = 0x00; buf
[3] = 0x00;
5574 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x10, dev
->sensor_flags
, buf
);
5575 /* Writes to sensor registers 0x12: 2X Zoom Column Start (from MT9V111 datasheet) */
5576 /* 0x13: 2X Zoom Row Start (from MT9V111 datasheet) */
5577 buf
[0] = 0x00; buf
[1] = 0x00; /* column 0 => bit0 of reg 0x1e must be set to activate zoom */
5578 buf
[2] = 0x00; buf
[3] = 0x00; /* row 0 => bit0 of reg 0x1e must be set to activate zoom */
5579 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x12, dev
->sensor_flags
, buf
);
5580 /* Writes to sensor registers 0x14: UNDOCUMENTED */
5581 /* 0x15: UNDOCUMENTED */
5582 buf
[0] = 0x00; buf
[1] = 0x00;
5583 buf
[2] = 0x00; buf
[3] = 0x00;
5584 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x14, dev
->sensor_flags
, buf
);
5585 /* Writes to sensor registers 0x16: UNDOCUMENTED */
5586 /* 0x17: UNDOCUMENTED */
5587 buf
[0] = 0x00; buf
[1] = 0x00;
5588 buf
[2] = 0x00; buf
[3] = 0x00;
5589 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x16, dev
->sensor_flags
, buf
);
5590 /* Writes to sensor registers 0x18: UNDOCUMENTED */
5591 /* 0x19: UNDOCUMENTED */
5592 buf
[0] = 0x00; buf
[1] = 0x00;
5593 buf
[2] = 0x00; buf
[3] = 0x00;
5594 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x18, dev
->sensor_flags
, buf
);
5595 /* Writes to sensor registers 0x1a: UNDOCUMENTED */
5596 /* 0x1b: UNDOCUMENTED */
5597 buf
[0] = 0x00; buf
[1] = 0x00;
5598 buf
[2] = 0x00; buf
[3] = 0x00;
5599 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1a, dev
->sensor_flags
, buf
);
5600 /* Writes to sensor registers 0x1c: UNDOCUMENTED */
5601 /* 0x1d: UNDOCUMENTED */
5602 buf
[0] = 0x00; buf
[1] = 0x00;
5603 buf
[2] = 0x00; buf
[3] = 0x00;
5604 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1c, dev
->sensor_flags
, buf
);
5605 /* Write to sensor register 0x32: RESERVED */
5606 buf
[0] = 0x00; buf
[1] = 0x00;
5607 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x32, dev
->sensor_flags
, buf
);
5608 /* Writes to sensor registers 0x20: Read Mode */
5609 /* 0x21: RESERVED */
5610 buf
[0] = 0x11; buf
[1] = 0x01; /* output all frames (including bad frames) + UNDOCUMENTED */
5611 buf
[2] = 0x00; buf
[3] = 0x00;
5612 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x20, dev
->sensor_flags
, buf
);
5613 /* Writes to sensor registers 0x22: RESERVED */
5614 /* 0x23: UNDOCUMENTED */
5615 buf
[0] = 0x00; buf
[1] = 0x00;
5616 buf
[2] = 0x00; buf
[3] = 0x00;
5617 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x22, dev
->sensor_flags
, buf
);
5618 /* Writes to sensor registers 0x24: UNDOCUMENTED */
5619 /* 0x25: UNDOCUMENTED */
5620 buf
[0] = 0x00; buf
[1] = 0x00;
5621 buf
[2] = 0x00; buf
[3] = 0x00;
5622 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x24, dev
->sensor_flags
, buf
);
5623 /* Writes to sensor registers 0x26: UNDOCUMENTED */
5624 /* 0x27: RESERVED */
5625 buf
[0] = 0x00; buf
[1] = 0x00;
5626 buf
[2] = 0x00; buf
[3] = 0x24;
5627 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x26, dev
->sensor_flags
, buf
);
5628 /* "Dummy" write to sensor Register 0x30: RESERVED */
5629 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x30, dev
->sensor_flags
, NULL
);
5630 /* Writes to sensor registers 0x2f: RESERVED */
5631 /* 0x30: RESERVED */
5632 buf
[0] = 0xf7; buf
[1] = 0xb0;
5633 buf
[2] = 0x00; buf
[3] = 0x05;
5634 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2f, dev
->sensor_flags
, buf
);
5635 /* Writes to sensor registers 0x31: RESERVED */
5636 /* 0x32: RESERVED */
5637 buf
[0] = 0x00; buf
[1] = 0x00;
5638 buf
[2] = 0x00; buf
[3] = 0x00;
5639 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x31, dev
->sensor_flags
, buf
);
5640 /* Writes to sensor registers 0x33: RESERVED */
5641 /* 0x34: RESERVED */
5642 buf
[0] = 0x00; buf
[1] = 0x00;
5643 buf
[2] = 0x01; buf
[3] = 0x00;
5644 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x33, dev
->sensor_flags
, buf
);
5645 /* "Dummy" write to sensor Register 0x3b: RESERVED */
5646 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x3b, dev
->sensor_flags
, NULL
);
5647 /* Write to sensor register 0x3d: RESERVED */
5648 buf
[0] = 0x06; buf
[1] = 0x8f;
5649 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x3d, dev
->sensor_flags
, buf
);
5650 /* Writes to sensor registers 0x40: RESERVED */
5651 /* 0x41: RESERVED */
5652 buf
[0] = 0x01; buf
[1] = 0xe0;
5653 buf
[2] = 0x00; buf
[3] = 0xd1;
5654 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x40, dev
->sensor_flags
, buf
);
5655 /* Write to sensor register 0x44: UNDOCUMENTED */
5656 buf
[0] = 0x00; buf
[1] = 0x82;
5657 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x44, dev
->sensor_flags
, buf
);
5658 /* Writes to sensor registers 0x5a: RESERVED */
5659 /* 0x5b: RESERVED */
5660 buf
[0] = 0x00; buf
[1] = 0x00;
5661 buf
[2] = 0x00; buf
[3] = 0x00;
5662 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x5a, dev
->sensor_flags
, buf
);
5663 /* Writes to sensor registers 0x5c: RESERVED */
5664 /* 0x5d: RESERVED */
5665 buf
[0] = 0x00; buf
[1] = 0x00;
5666 buf
[2] = 0x00; buf
[3] = 0x00;
5667 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x5c, dev
->sensor_flags
, buf
);
5668 /* Writes to sensor registers 0x5e: RESERVED */
5669 /* 0x5f: RESERVED */
5670 buf
[0] = 0x00; buf
[1] = 0x00;
5671 buf
[2] = 0xa3; buf
[3] = 0x1d;
5672 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x5e, dev
->sensor_flags
, buf
);
5673 /* "Dummy" write to sensor Register 0x68: UNDOCUMENTED */
5674 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x68, dev
->sensor_flags
, NULL
);
5675 /* Write to sensor register 0x62: RESERVED */
5676 buf
[0] = 0x06; buf
[1] = 0x11;
5677 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x62, dev
->sensor_flags
, buf
);
5680 UDIA_INFO("1 or more errors occured in I2C-message-block 1 !\n");
5683 /* END OF I2C MESSAGES */
5684 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5686 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
5688 usb_microdia_control_write(dev
, 0x1007, buf
, 8);
5690 usb_microdia_control_write(dev
, 0x1006, buf
, 8);
5694 /* *** TEMPORARY SWITCH TO SLAVE ADDRESS 0x50, I2C READ ATTEMPT: */
5695 /* - WE CURRENTLY KNOW NO 6270 CAM THAT IS SUCCESSFULLY READ HERE */
5696 /* - IF READ FAILS, THIS IS NEVER DONE AGAIN (IN NEXT CYCLE OR FURTHER STARTS) */
5697 usb_microdia_control_read(dev
, 0x10c1, buf
, 1); /* returns 0x5c */
5699 usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
5700 retI2C
= sn9c20x_read_i2c_data(dev
, 0x50, 1, 0x00, SN9C20X_I2C_2WIRE
, buf
);
5702 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");
5704 usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
5707 buf
[0] = 0x47; /* ALEX: 0x44 */
5708 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2045 */
5709 buf
[0] = 0x47; /* ALEX: 0x04 */
5710 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2046 */
5712 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 2047 */
5714 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 2048 */
5715 buf
[0] = 0x84; /* ALEX: 0xc0 */
5716 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 2049 */
5719 usb_microdia_control_write(dev, 0x1001, buf, 1);
5722 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
5723 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5726 /* Writes to sensor registers 0x02: Column Start */
5727 /* 0x03: Window Height */
5728 buf
[0] = 0x00; buf
[1] = 0x16; /* coulmn 22 */
5729 buf
[2] = 0x01; buf
[3] = 0xe1; /* 481 */
5730 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x02, dev
->sensor_flags
, buf
); /* URBs 2050-2052 */
5731 /* Writes to sensor registers 0x04: Window Width */
5732 /* 0x05: Horizontal Blanking */
5733 buf
[0] = 0x02; buf
[1] = 0x81; /* 641 */
5734 buf
[2] = 0x00; buf
[3] = 0x04; /* 4 columns (pixel clocks) // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
5735 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x04, dev
->sensor_flags
, buf
); /* URBs 2053-2055 */
5736 /* Writes to sensor registers 0x06: Vertical Blanking */
5737 /* 0x07: Output Control */
5738 buf
[0] = 0x00; buf
[1] = 0x00; /* 0 rows */
5739 buf
[2] = 0x30; buf
[3] = 0x02; /* normal operation + chip enable + RESERVED options */
5740 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x06, dev
->sensor_flags
, buf
); /* URBs 2056-2058 */
5741 /* Write to sensor register 0x0e: UNDOCUMENTED */
5742 buf
[0] = 0x00; buf
[1] = 0x08;
5743 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0e, dev
->sensor_flags
, buf
); /* URBs 2059-2061 */
5745 UDIA_INFO("1 or more errors occured in I2C-message-block 2 !\n");
5748 /* END OF I2C MESSAGES */
5749 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5752 buf
[0] = 0x02; buf
[1] = 0x00; buf
[2] = 0x02; buf
[3] = 0x00;
5753 buf
[4] = 0x28; buf
[5] = 0x3c;
5754 usb_microdia_control_write(dev
, 0x1180, buf
, 6); /* URB 2062 */
5755 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
5756 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); /* URB 2063 */
5758 usb_microdia_control_write(dev
, 0x1189, buf
, 1); /* URB 2064 */
5759 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
5760 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); /* URB 2065 */
5761 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
5762 usb_microdia_control_write(dev
, 0x11ab, buf
, 4); /* URB 2066 */
5763 buf
[0] = 0x78; /* ALEX: 0x7c */
5764 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 2067 */
5765 buf
[0] = 0x18; /* ALEX: 0x1c */
5766 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2068 */
5767 buf
[0] = 0x18; /* ALEX: 0x1c */
5768 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2069 */
5770 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2070 */
5772 usb_microdia_control_write(dev
, 0x118a, buf
, 1); /* URB 2071 */
5774 usb_microdia_control_write(dev
, 0x0395, buf
, 1); /* URB 2072 */
5777 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2073 */
5778 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2074 // 0x38 */
5781 else if (buf
[0] == 0xb8)
5783 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2075 */
5784 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2076 // 0xb9 */
5787 else if (buf
[0] == 0xb9)
5789 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2077 */
5790 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2078 */
5793 else if (buf
[0] == 0xba)
5795 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2079 */
5796 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2080 // 0x3b */
5799 else if (buf
[0] == 0xbb)
5801 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2081 */
5802 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2082 // 0x3c */
5805 else if (buf
[0] == 0xbc)
5807 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2083 */
5808 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2084 // 0x3d */
5809 last_11b8
[0] = buf
[0];
5810 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
5813 else if (buf
[0] == 0xbd)
5815 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2085 */
5816 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2086 */
5819 else if (buf
[0] == 0xbe)
5821 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2087 */
5822 usb_microdia_control_read(dev
, 0x11b8, last_11b8
, 1); /* URB 2088 */
5824 buf
[0] = last_11b8
[0] & 0xf0; /* 0xf0 or 0x70 */
5825 buf
[0] = buf
[0] | 0x0d; /* 0x0c => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 8 READS/WRITES */
5826 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2089 */
5829 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5832 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
5833 /* Write to sensor register 0x06: Vertical Blanking */
5834 buf
[0] = 0x00; buf
[1] = 0x2d; /* 45 rows */
5835 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
); /* URBs 2090-2092 */
5836 /* Write to sensor register 0x05: Horizontal Blanking */
5837 buf
[0] = 0x00; buf
[1] = 0x04; /* 4 columns (pixel clocks) */
5838 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
); /* URBs 2093-2095 */
5839 /* Write to sensor register 0x20: Read Mode */
5840 buf
[0] = 0x00; buf
[1] = 0x00; /* normal readout */
5841 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
); /* URBs 2096-2098 */
5842 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
5843 /* Write to sensor register 0x0a: Pixel Clock Speed */
5844 buf
[0] = 0x00; buf
[1] = 0x00; /* default */
5845 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0a, dev
->sensor_flags
, buf
);
5846 /* Write to sensor register 0x06: Vertical Blanking */
5847 buf
[0] = 0x00; buf
[1] = 0x29; /* 41 rows */
5848 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
);
5849 /* Write to sensor register 0x05: Horizontal Blanking */
5850 buf
[0] = 0x00; buf
[1] = 0x09; /* 9 columns (pixel clocks) */
5851 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
);
5852 /* Write to sensor register 0x20: Read Mode */
5853 buf
[0] = 0x11; buf
[1] = 0x01; /* output all frames (including bad ones) + UNKNOWN */
5854 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
);
5857 UDIA_INFO("1 or more errors occured in I2C-message-block 3 !\n");
5860 /* END OF I2C MESSAGES */
5861 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5865 usb_microdia_control_write(dev
, 0x1180, buf
, 1); /* URB 2099 */
5867 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5870 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
5871 /* Write to sensor register 0x20: Read Mode */
5872 buf
[0] = 0x00; buf
[1] = 0x00; /* normal readout */
5873 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
); /* URBs 2100-2102 */
5874 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
5875 /* Write to sensor register 0x20: Read Mode */
5876 buf
[0] = 0x11; buf
[1] = 0x01; /* output all frames (including bad ones) + UNKNOWN */
5877 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
);
5880 UDIA_INFO("1 or more errors occured in I2C-message-block 4 !\n");
5883 /* END OF I2C MESSAGES */
5884 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5888 usb_microdia_control_write(dev
, 0x1182, buf
, 1); /* URB 2103 */
5891 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5894 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
5895 /* Write to sensor register 0x09: Shutter Width */
5896 buf
[0] = 0x00; buf
[1] = 0x64; /* integration of 100 rows */
5897 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x09, dev
->sensor_flags
, buf
); /* URBs 2104-2106 */
5898 /* Write to sensor register 0x2b: Green 1 Gain */
5899 /* 0x2c: Blue Gain */
5900 buf
[0] = 0x00; buf
[1] = 0xa0; /* 32*0.03125*2 = 2 */
5901 buf
[2] = 0x00; buf
[3] = 0xa0; /* 32*0.03125*2 = 2 */
5902 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2b, dev
->sensor_flags
, buf
); /* URBs 2107-2109 */
5903 /* Write to sensor register 0x2d: Red Gain */
5904 /* 0x2e: Green 2 Gain */
5905 buf
[0] = 0x00; buf
[1] = 0xa0; /* 32*0.03125*2 = 2 */
5906 buf
[2] = 0x00; buf
[3] = 0xa0; /* 32*0.03125*2 = 2 */
5907 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2d, dev
->sensor_flags
, buf
); /* URBs 2110-2112 */
5908 /* "Dummy" write to sensor Register 0x33: RESERVED */
5909 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x33, dev
->sensor_flags
, NULL
); /* URBs 2113-2114 */
5910 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
5911 /* Write to sensor register 0x09: Shutter Width */
5912 buf
[0] = 0x00; buf
[1] = 0x64; /* integration of 100 rows */
5913 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x09, dev
->sensor_flags
, buf
);
5914 /* Write to sensor register 0x07: Output Control */
5915 buf
[0] = 0x00; buf
[1] = 0x03; /* dont update changes until bit0=0, chip enable, normal operation */
5916 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
5917 /* Write to sensor register 0x2b: Green 1 Gain */
5918 /* 0x2c: Blue Gain */
5919 buf
[0] = 0x00; buf
[1] = 0x33; /* 51*0.03125*1 = 1.59375 */
5920 buf
[2] = 0x00; buf
[3] = 0xa0; /* 32*0.03125*2 = 2 */
5921 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2b, dev
->sensor_flags
, buf
);
5922 /* Write to sensor register 0x2d: Red Gain */
5923 /* 0x2e: Green 2 Gain */
5924 buf
[0] = 0x00; buf
[1] = 0xa0; /* 32*0.03125*2 = 2 */
5925 buf
[2] = 0x00; buf
[3] = 0x33; /* 51*0.03125*1 = 1.59375 */
5926 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2d, dev
->sensor_flags
, buf
);
5927 /* "Dummy" write to sensor Register 0x33: RESERVED */
5928 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x33, dev
->sensor_flags
, NULL
);
5929 /* Write to sensor register 0x07: Output Control */
5930 buf
[0] = 0x00; buf
[1] = 0x02; /* chip enable, normal operation */
5931 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
5934 UDIA_INFO("1 or more errors occured in I2C-message-block 5 !\n");
5937 /* END OF I2C MESSAGES */
5938 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5941 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2119 */
5943 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
5945 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
5947 usb_microdia_control_write(dev
, 0x118b, buf
, 1); /* URB 2124 */
5950 usb_microdia_control_write(dev
, 0x10f7, buf
, 1); /* URB 2135 */
5952 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
5954 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
5956 usb_microdia_control_write(dev
, 0x10f8, buf
, 1); /* URB 2138 */
5958 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
5960 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
5962 usb_microdia_control_write(dev
, 0x10fa, buf
, 1); /* URB 2139 */
5965 usb_microdia_control_write(dev
, 0x10f9, buf
, 1); /* URB 2140 */
5967 usb_microdia_control_write(dev
, 0x10f9, buf
, 1); /* URB 2141 */
5969 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2142 */
5970 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
5971 usb_microdia_control_write(dev
, 0x11bc, buf
, 4); /* URB 2143 */
5972 for (k
= 0; k
< 48; k
++)
5974 usb_microdia_control_write(dev
, 0x11c0, buf
, 48); /* URB 2144 */
5976 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05;
5977 buf
[4] = 0x04; buf
[5] = 0x3f;
5978 usb_microdia_control_write(dev
, 0x11a5, buf
, 6); /* URB 2149 */
5980 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
5981 buf
[0] = 0x14; buf
[1] = 0xec; buf
[2] = 0x0a; buf
[3] = 0xf6;
5982 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
5983 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
5985 usb_microdia_control_write(dev
, 0x11af, buf
, 4); /* URB 2150 */
5987 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x2d; buf
[3] = 0xdd;
5988 usb_microdia_control_write(dev
, 0x11b3, buf
, 4); /* URB 2151 */
5989 buf
[0] = 0x47; /* ALEX: 0x04 */
5990 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2152 */
5992 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2153 */
5993 buf
[0] = 0x67; /* ALEX: 0x24 */
5994 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2154 */
5995 buf
[0] = 0x0d; buf
[1] = 0x08; buf
[2] = 0x08; buf
[3] = 0x0d;
5996 buf
[4] = 0x08; buf
[5] = 0x08; buf
[6] = 0x0d; buf
[7] = 0x0d;
5997 buf
[8] = 0x0d; buf
[9] = 0x0d; buf
[10] = 0x11; buf
[11] = 0x0d;
5998 buf
[12] = 0x0d; buf
[13] = 0x11; buf
[14] = 0x15; buf
[15] = 0x21;
5999 buf
[16] = 0x15; buf
[17] = 0x15; buf
[18] = 0x11; buf
[19] = 0x11;
6000 buf
[20] = 0x15; buf
[21] = 0x2a; buf
[22] = 0x1d; buf
[23] = 0x1d;
6001 buf
[24] = 0x19; buf
[25] = 0x21; buf
[26] = 0x32; buf
[27] = 0x2a;
6002 buf
[28] = 0x32; buf
[29] = 0x32; buf
[30] = 0x2e; buf
[31] = 0x2a;
6003 buf
[32] = 0x2e; buf
[33] = 0x2e; buf
[34] = 0x36; buf
[35] = 0x3a;
6004 buf
[36] = 0x4b; buf
[37] = 0x43; buf
[38] = 0x36; buf
[39] = 0x3a;
6005 buf
[40] = 0x47; buf
[41] = 0x3a; buf
[42] = 0x2e; buf
[43] = 0x2e;
6006 buf
[44] = 0x43; buf
[45] = 0x5c; buf
[46] = 0x43; buf
[47] = 0x47;
6007 buf
[48] = 0x4f; buf
[49] = 0x53; buf
[50] = 0x58; buf
[51] = 0x58;
6008 buf
[52] = 0x58; buf
[53] = 0x32; buf
[54] = 0x3f; buf
[55] = 0x60;
6009 buf
[56] = 0x64; buf
[57] = 0x5c; buf
[58] = 0x53; buf
[59] = 0x64;
6010 buf
[60] = 0x4b; buf
[61] = 0x53; buf
[62] = 0x58; buf
[63] = 0x53;
6011 usb_microdia_control_write(dev
, 0x1100, buf
, 64); /* URB 2155 */
6012 buf
[0] = 0x0d; buf
[1] = 0x11; buf
[2] = 0x11; buf
[3] = 0x15;
6013 buf
[4] = 0x11; buf
[5] = 0x15; buf
[6] = 0x26; buf
[7] = 0x15;
6014 buf
[8] = 0x15; buf
[9] = 0x26; buf
[10] = 0x53; buf
[11] = 0x36;
6015 buf
[12] = 0x2e; buf
[13] = 0x36; buf
[14] = 0x53; buf
[15] = 0x53;
6016 buf
[16] = 0x53; buf
[17] = 0x53; buf
[18] = 0x53; buf
[19] = 0x53;
6017 buf
[20] = 0x53; buf
[21] = 0x53; buf
[22] = 0x53; buf
[23] = 0x53;
6018 buf
[24] = 0x53; buf
[25] = 0x53; buf
[26] = 0x53; buf
[27] = 0x53;
6019 buf
[28] = 0x53; buf
[29] = 0x53; buf
[30] = 0x53; buf
[31] = 0x53;
6020 buf
[32] = 0x53; buf
[33] = 0x53; buf
[34] = 0x53; buf
[35] = 0x53;
6021 buf
[36] = 0x53; buf
[37] = 0x53; buf
[38] = 0x53; buf
[39] = 0x53;
6022 buf
[40] = 0x53; buf
[41] = 0x53; buf
[42] = 0x53; buf
[43] = 0x53;
6023 buf
[44] = 0x53; buf
[45] = 0x53; buf
[46] = 0x53; buf
[47] = 0x53;
6024 buf
[48] = 0x53; buf
[49] = 0x53; buf
[50] = 0x53; buf
[51] = 0x53;
6025 buf
[52] = 0x53; buf
[53] = 0x53; buf
[54] = 0x53; buf
[55] = 0x53;
6026 buf
[56] = 0x53; buf
[57] = 0x53; buf
[58] = 0x53; buf
[59] = 0x53;
6027 buf
[60] = 0x53; buf
[61] = 0x53; buf
[62] = 0x53; buf
[63] = 0x53;
6028 usb_microdia_control_write(dev
, 0x1140, buf
, 64); /* URB 2156 */
6029 buf
[0] = 0x47; /* ALEX: 0x04 */
6030 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2157 */
6032 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2158 */
6033 buf
[0] = 0x4b; /* ALEX: 0x08 */
6034 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2159 */
6036 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
6037 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
6040 /* Writes to sensor registers 0x02: Column Start */
6041 /* 0x03: Window Hight */
6042 buf
[0] = 0x00; buf
[1] = 0x16; /* coulmn 22 */
6043 buf
[2] = 0x01; buf
[3] = 0xe1; /* 481 */
6044 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x02, dev
->sensor_flags
, buf
); /* URBs 2160-2162 */
6045 /* Writes to sensor registers 0x04: Window Width */
6046 /* 0x05: Horizontal Blanking */
6047 buf
[0] = 0x02; buf
[1] = 0x81; /* 641 */
6048 buf
[2] = 0x00; buf
[3] = 0x04; /* 4 columns (pixel clocks) */
6049 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x04, dev
->sensor_flags
, buf
); /* URBs 2163-2165 */
6050 /* Writes to sensor registers 0x06: Vertical Blanking */
6051 /* 0x07: Output Control */
6052 buf
[0] = 0x00; buf
[1] = 0x2d; /* 45 rows */
6053 buf
[2] = 0x30; buf
[3] = 0x02; /* RESERVED options */
6054 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x06, dev
->sensor_flags
, buf
); /* URBs 2166-2167 */
6055 /* Writes to sensor register 0x0e: UNDOCUMENTED */
6056 buf
[0] = 0x00; buf
[1] = 0x08;
6057 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0e, dev
->sensor_flags
, buf
); /* URBs 2168-2170 */
6059 UDIA_INFO("1 or more errors occured in I2C-message-block 6 !\n");
6062 /* END OF I2C MESSAGES */
6063 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
6064 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
6066 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
6068 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
6072 buf
[0] = 0x02; buf
[1] = 0x00; buf
[2] = 0x02; buf
[3] = 0x00;
6073 buf
[4] = 0x28; buf
[5] = 0x3c;
6074 usb_microdia_control_write(dev
, 0x1180, buf
, 6); /* URB 2171 */
6075 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
6076 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); /* URB 2172 */
6078 usb_microdia_control_write(dev
, 0x1189, buf
, 1); /* URB 2173 */
6079 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
6080 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); /* URB 2174 */
6081 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
6082 usb_microdia_control_write(dev
, 0x11ab, buf
, 4); /* URB 2175 */
6084 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2176 */
6086 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2177 */
6088 usb_microdia_control_write(dev
, 0x11b9, buf
, 1); /* URB 2178 */
6090 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2179 */
6092 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2180 */
6093 buf
[0] = 0x78; /* ALEX: 0x7c */
6094 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 2181 */
6095 buf
[0] = 0x18; /* ALEX: 0x1c */
6096 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2182 */
6097 buf
[0] = 0x18; /* ALEX: 0x1c */
6098 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2183 */
6099 buf
[0] = 0x7d; /* ALEX: 0xfc */
6100 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2184 */
6102 usb_microdia_control_write(dev
, 0x118a, buf
, 1); /* URB 2185 */
6104 usb_microdia_control_write(dev
, 0x0395, buf
, 1); /* URB 2186 */
6106 if ((last_11b8
[0] == 0x3d) || (last_11b8
[0] == 0x3f))
6108 else if ((last_11b8
[0] == 0xbd) || (last_11b8
[0] == 0xbf))
6110 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2187 */
6111 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2188 // 0x38 */
6114 else if (buf
[0] == 0xb8)
6116 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2189 */
6117 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2190 // 0xb9 */
6120 else if (buf
[0] == 0xb9)
6122 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2191 */
6123 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2192 // 0xba */
6126 else if (buf
[0] == 0xba)
6128 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2193 */
6129 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2194 // 0x3b */
6132 else if (buf
[0] == 0xbb)
6134 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2195 */
6135 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2196 // 0x3c */
6138 else if (buf
[0] == 0xbc)
6140 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2197 */
6141 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2198 // 0x3d */
6142 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
6145 else if (buf
[0] == 0xbd)
6147 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2199 */
6148 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2200 */
6151 else if (buf
[0] == 0xbe)
6153 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2201 */
6154 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2202 */
6156 buf
[0] = buf
[0] & 0xf0; /* 0xf0 or 0x70 */
6157 buf
[0] = buf
[0] | 0x0d; /* 0x0c => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 8 READS/WRITES */
6158 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2089 */
6160 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
6163 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
6164 /* Write to sensor register 0x06: Vertical Blanking */
6165 buf
[0] = 0x00; buf
[1] = 0x2d; /* 45 rows */
6166 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
); /* URBs 2204-2206 */
6167 /* Write to sensor register 0x05: Horizontal Blanking */
6168 buf
[0] = 0x00; buf
[1] = 0x04; /* 4 columns (pixel clocks) */
6169 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
); /* URBs 2207-2209 */
6170 /* Read of sensor register 0x36: Chip Version (mirror of reg0xff) */
6171 retI2C
+= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x36, dev
->sensor_flags
, buf
); /* URBs 2211-2215 // 0x82 0x3a */
6172 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
6173 /* Write to sensor register 0x0a: Pixel Clock Speed */
6174 buf
[0] = 0x00; buf
[1] = 0x00; /* default */
6175 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
);
6176 /* Write to sensor register 0x06: Vertical Blanking */
6177 buf
[0] = 0x00; buf
[1] = 0x29; /* 41 rows */
6178 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
);
6179 /* Write to sensor register 0x05: Horizontal Blanking */
6180 buf
[0] = 0x00; buf
[1] = 0x09; /* 9 columns (pixel clocks) */
6181 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
);
6182 /* Read of sensor register 0x00: Chip Version (=reg0xff) */
6183 retI2C
+= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x00, dev
->sensor_flags
, buf
); /* 0x82 0x43 */
6186 UDIA_INFO("1 or more errors occured in I2C-message-block 7 !\n");
6189 /* END OF I2C MESSAGES */
6190 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
6194 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2216 */
6197 /*** NOW DRIVER DOES STOP-SEQUENCE
6198 - WITHOUT WRITES TO 0x1007 AND 0x1006 (URBs 3544-3550) => MT9V111
6199 - WRITING 0x40 INSTEAD OF 0x60 TO 0x1007 AND 0x1006 => MT9V011
6201 /*** 2nd, 3rd, ... CYCLE: ALL MESSAGES (URBs 1953 - URBs 2216) ARE REPEATED ***/
6202 /*** ----- WE DON'T DO THIS, IT SEEMS TO BE UNNECESSARY ----- ***/
6204 /* Setup IFP registers for AE and AWB (new, not in the logs): */
6205 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
6206 mt9v111_setup_autoexposure(dev
);
6207 mt9v111_setup_autowhitebalance(dev
);
6208 mt9v111_set_autocorrections(dev
, 1);
6211 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6213 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6215 usb_microdia_control_write(dev
, 0x1007, buf
, 1); /* URB 2489 */
6216 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6218 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6220 usb_microdia_control_write(dev
, 0x1006, buf
, 1); /* URB 2490 */
6221 /* => These two writes seem to cause the cam to start sending isochronus USB messages */
6226 int microdia_627b_start_stream(struct usb_microdia
*dev
)
6233 buf
[0] = 0x00; /** Will have to be set for every single interrupt. */
6235 ret = usb_interrupt_msg(dev->udev, 0x00000083, buf, 0x0000001, &actual, 1000); // URB 43
6240 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 44 */
6245 //ret = usb_set_interface(dev->udev, 0, 8);
6246 //if(ret < 0) goto err;
6248 //buf[0] = 0x00; // Will have to be set for every single interrupt
6249 //ret = usb_interrupt_msg(dev->udev, 0x00000083, buf, 0x0000001, &actual, 1000); // URB 45
6254 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 46 */
6260 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 47 */
6266 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 48 */
6272 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 49 */
6278 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 50 */
6283 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20; buf
[3] = 0x10; buf
[4] = 0x08;
6284 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5); /* URB 51 */
6289 buf
[0] = 0x80; buf
[1] = 0x21; buf
[2] = 0x00; buf
[3] = 0x00;
6290 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
6292 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9); /* URB 52 */
6296 /* transferbufferlength is 18, but data is 24 bytes long, what to do ? */
6298 buf
[0] = 0x45; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30; buf
[4] = 0x00;
6299 buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed; buf
[8] = 0x0f; buf
[9] = 0xda;
6300 buf
[10] = 0x0f; buf
[11] = 0x3a; buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00;
6301 buf
[15] = 0xd0; buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
6302 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
6303 ret
= usb_microdia_control_write(dev
, reg
, buf
, 24); /* URB 53 */
6308 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
6309 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3); /* URB 54 */
6314 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
6315 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5); /* URB 55 */
6320 buf
[0] = 0x86; buf
[1] = 0x8c; buf
[2] = 0x08;
6321 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3); /* URB 56 */
6326 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20; buf
[4] = 0x20;
6327 buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b; buf
[8] = 0x4f; buf
[9] = 0x61;
6328 buf
[10] = 0x71; buf
[11] = 0x80; buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab;
6329 buf
[15] = 0xb8; buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
6330 buf
[20] = 0xf4; buf
[21] = 0xff;
6331 ret
= usb_microdia_control_write(dev
, reg
, buf
, 22); /* URB 57 */
6336 buf
[0] = 0x00; buf
[1] = 0x00;
6337 ret
= usb_microdia_control_write(dev
, reg
, buf
, 2); /* URB 58 */
6342 buf
[0] = 0x60; buf
[1] = 0x28; buf
[2] = 0x00; buf
[3] = 0x08; buf
[4] = 0x00;
6343 buf
[5] = 0x40; buf
[6] = 0x01; buf
[7] = 0xf0; buf
[8] = 0x00;
6344 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9); /* URB 59 */
6350 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); /* URB 60 */
6356 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6361 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6362 OV7660_CTL_COM7
, dev
->sensor_flags
, buf
);
6366 buf
[0] = 0x01; buf
[1] = 0x74; buf
[2] = 0x92; buf
[3] = 0x00;
6367 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6368 OV7660_CTL_GAIN
, dev
->sensor_flags
, buf
);
6372 buf
[0] = 0x00; buf
[1] = 0x7d; buf
[2] = 0x62; buf
[3] = 0x00;
6373 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6374 OV7660_CTL_COM1
, dev
->sensor_flags
, buf
);
6378 buf
[0] = 0x83; buf
[1] = 0x01;
6379 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
6380 OV7660_CTL_RAVE
, dev
->sensor_flags
, buf
);
6384 buf
[0] = 0x00; buf
[1] = 0x08; buf
[2] = 0x04; buf
[3] = 0x62;
6385 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6386 OV7660_CTL_COM3
, dev
->sensor_flags
, buf
);
6390 buf
[0] = 0x00; buf
[1] = 0x40; buf
[2] = 0x05; buf
[3] = 0xf8;
6391 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6392 OV7660_CTL_AECH
, dev
->sensor_flags
, buf
);
6396 buf
[0] = 0x2e; buf
[1] = 0x00; buf
[2] = 0x02;
6397 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 3,
6398 OV7660_CTL_COM9
, dev
->sensor_flags
, buf
);
6402 buf
[0] = 0x10; buf
[1] = 0x60; buf
[2] = 0x02; buf
[3] = 0x7b;
6403 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6404 OV7660_CTL_HSTART
, dev
->sensor_flags
, buf
);
6409 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6410 OV7660_CTL_PSHFT
, dev
->sensor_flags
, buf
);
6414 buf
[0] = 0x01; buf
[1] = 0x0e;
6415 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
6416 OV7660_CTL_MVFP
, dev
->sensor_flags
, buf
);
6420 buf
[0] = 0x07; buf
[1] = 0x07; buf
[2] = 0x07; buf
[3] = 0x07;
6421 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6422 OV7660_CTL_BOS
, dev
->sensor_flags
, buf
);
6426 buf
[0] = 0x68; buf
[1] = 0x58; buf
[2] = 0xd4; buf
[3] = 0x80;
6427 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6428 OV7660_CTL_AEW
, dev
->sensor_flags
, buf
);
6432 buf
[0] = 0x80; buf
[1] = 0x3c; buf
[2] = 0x00; buf
[3] = 0x00;
6433 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6434 OV7660_CTL_GbBIAS
, dev
->sensor_flags
, buf
);
6438 buf
[0] = 0x80; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x62;
6439 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6440 OV7660_CTL_RBIAS
, dev
->sensor_flags
, buf
);
6444 buf
[0] = 0x08; buf
[1] = 0x30; buf
[2] = 0xb4;
6445 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 3,
6446 OV7660_CTL_HSYST
, dev
->sensor_flags
, buf
);
6450 buf
[0] = 0x00; buf
[1] = 0x07; buf
[2] = 0x84; buf
[3] = 0x00;
6451 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6452 OV7660_CTL_CHLF
, dev
->sensor_flags
, buf
);
6456 buf
[0] = 0x0c; buf
[1] = 0x02; buf
[2] = 0x43; buf
[3] = 0x00;
6457 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6458 OV7660_CTL_ADC
, dev
->sensor_flags
, buf
);
6462 buf
[0] = 0x02; buf
[1] = 0x6c; buf
[2] = 0x19; buf
[3] = 0x0e;
6463 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6464 OV7660_CTL_COM11
, dev
->sensor_flags
, buf
);
6468 buf
[0] = 0x41; buf
[1] = 0xc1; buf
[2] = 0x22; buf
[3] = 0x08;
6469 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6470 OV7660_CTL_EDGE
, dev
->sensor_flags
, buf
);
6475 reg
= 0x43; /* RSVD 0x43 is Reserved */
6476 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
6477 reg
, dev
->sensor_flags
, NULL
);
6481 reg
= 0x43; /* RSVD 0x43 is Reserved */
6482 buf
[0] = 0xf0; buf
[1] = 0x10; buf
[2] = 0x78; buf
[3] = 0xa8;
6483 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6484 dev
->sensor_flags
, buf
);
6488 reg
= 0x47; /* RSVD 0x47 is Reserved */
6489 buf
[0] = 0x60; buf
[1] = 0x80; buf
[2] = 0x00; buf
[3] = 0x00;
6490 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6491 dev
->sensor_flags
, buf
);
6495 reg
= 0x4b; /* RSVD 0x4b is Reserved */
6496 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
6497 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6498 dev
->sensor_flags
, buf
);
6503 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
6504 OV7660_CTL_MTX1
, dev
->sensor_flags
, NULL
);
6508 reg
= 0x59; /* RSVD 0x59 is Reserved */
6509 buf
[0] = 0xba; buf
[1] = 0x9a; buf
[2] = 0x22; buf
[3] = 0xb9;
6510 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6511 reg
, dev
->sensor_flags
, buf
);
6515 reg
= 0x5d; /* RSVD 0x5d is Reserved */
6516 buf
[0] = 0x9b; buf
[1] = 0x10; buf
[2] = 0xf0; buf
[3] = 0x05;
6517 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6518 reg
, dev
->sensor_flags
, buf
);
6522 reg
= 0x61; /* RSVD 0x61 is Reserved */
6524 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6525 reg
, dev
->sensor_flags
, buf
);
6529 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x30;
6530 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6531 OV7660_CTL_LCC1
, dev
->sensor_flags
, buf
);
6536 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6537 OV7660_CTL_LCC5
, dev
->sensor_flags
, buf
);
6541 buf
[0] = 0x80; buf
[1] = 0x7a; buf
[2] = 0x90; buf
[3] = 0x80;
6542 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6543 OV7660_CTL_MANU
, dev
->sensor_flags
, buf
);
6548 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6549 OV7660_CTL_DBLV
, dev
->sensor_flags
, buf
);
6553 reg
= 0x8b; /* RSVD 0x8b is Reserved */
6554 buf
[0] = 0x99; buf
[1] = 0x99; buf
[2] = 0xcf;
6555 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 3, reg
,
6556 dev
->sensor_flags
, buf
);
6560 buf
[0] = 0x00; buf
[1] = 0x00;
6561 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
6562 OV7660_CTL_DM_LNL
, dev
->sensor_flags
, buf
);
6568 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6574 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6579 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6585 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6589 /* TRY TO READ FROM EEPROM: */
6591 ret
= sn9c20x_read_i2c_data(dev
, 0x50, 1, reg
, SN9C20X_I2C_2WIRE
, buf
);
6593 UDIA_INFO("No EEPROM found\n");
6595 UDIA_INFO("Read from EEPROM successful\n");
6599 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6605 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6611 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6617 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6623 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6629 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6634 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6635 OV7660_CTL_VREF
, dev
->sensor_flags
, buf
);
6639 buf
[0] = 0x10; buf
[1] = 0x61; buf
[2] = 0x02; buf
[3] = 0x7a;
6640 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
6641 OV7660_CTL_HSTART
, dev
->sensor_flags
, buf
);
6645 /* "Dummy" write: */
6646 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
6647 OV7660_CTL_PSHFT
, dev
->sensor_flags
, NULL
);
6652 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6653 OV7660_CTL_HREF
, dev
->sensor_flags
, buf
);
6658 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6659 OV7660_CTL_HREF
, dev
->sensor_flags
, buf
);
6664 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6665 OV7660_CTL_HREF
, dev
->sensor_flags
, buf
);
6670 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6671 OV7660_CTL_HREF
, dev
->sensor_flags
, buf
);
6676 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6677 OV7660_CTL_HREF
, dev
->sensor_flags
, buf
);
6682 buf
[0] = 0x01; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00; buf
[4] = 0x28;
6684 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
6689 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
6690 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
6696 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6701 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
6702 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
6707 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
6708 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
6714 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6720 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6726 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6732 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6738 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6744 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6750 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6753 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6759 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6762 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6768 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6771 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6777 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6780 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6786 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6789 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6795 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6798 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6804 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6809 //ret = usb_microdia_control_read(dev, reg, buf, 1);
6810 //if(ret < 0) goto err;
6814 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6815 OV7660_CTL_CLKRC
, dev
->sensor_flags
, buf
);
6820 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6821 OV7660_CTL_EXHCH
, dev
->sensor_flags
, buf
);
6826 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6827 OV7660_CTL_EXHCL
, dev
->sensor_flags
, buf
);
6832 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6833 OV7660_CTL_DM_LNL
, dev
->sensor_flags
, buf
);
6838 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6839 OV7660_CTL_DM_LNH
, dev
->sensor_flags
, buf
);
6844 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6845 OV7660_CTL_MVFP
, dev
->sensor_flags
, buf
);
6850 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6851 OV7660_CTL_MVFP
, dev
->sensor_flags
, buf
);
6856 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6857 OV7660_CTL_VREF
, dev
->sensor_flags
, buf
);
6862 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6863 OV7660_CTL_VREF
, dev
->sensor_flags
, buf
);
6868 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6869 OV7660_CTL_AECH
, dev
->sensor_flags
, buf
);
6874 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6875 OV7660_CTL_COM1
, dev
->sensor_flags
, buf
);
6880 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6881 OV7660_CTL_ADVFL
, dev
->sensor_flags
, buf
);
6886 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6887 OV7660_CTL_ADVFH
, dev
->sensor_flags
, buf
);
6892 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
6893 OV7660_CTL_GAIN
, dev
->sensor_flags
, buf
);
6897 buf
[0] = 0x78; buf
[1] = 0x78;
6898 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
6899 OV7660_CTL_BLUE
, dev
->sensor_flags
, buf
);
6905 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6911 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6917 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6923 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6929 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6935 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6941 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6947 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6952 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
6953 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
6958 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00;
6959 buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00;
6960 buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00;
6961 buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00;
6962 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x00; buf
[23] = 0x00; buf
[24] = 0x00;
6963 buf
[25] = 0x00; buf
[26] = 0x00; buf
[27] = 0x00; buf
[28] = 0x00; buf
[29] = 0x00;
6964 buf
[30] = 0x00; buf
[31] = 0x00; buf
[32] = 0x00;
6965 ret
= usb_microdia_control_write(dev
, reg
, buf
, 33);
6968 /* transferbufferlength was only 30 ? */
6971 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05; buf
[4] = 0x04;
6973 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
6978 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
6979 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
6984 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x32; buf
[3] = 0xdd;
6985 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
6991 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6997 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7003 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7008 buf
[0] = 0x0d; buf
[1] = 0x08; buf
[2] = 0x08; buf
[3] = 0x0d; buf
[4] = 0x08;
7009 buf
[5] = 0x08; buf
[6] = 0x0d; buf
[7] = 0x0d; buf
[8] = 0x0d; buf
[9] = 0x0d;
7010 buf
[10] = 0x11; buf
[11] = 0x0d; buf
[12] = 0x0d; buf
[13] = 0x11; buf
[14] = 0x15;
7011 buf
[15] = 0x21; buf
[16] = 0x15; buf
[17] = 0x15; buf
[18] = 0x11; buf
[19] = 0x11;
7012 buf
[20] = 0x15; buf
[21] = 0x2a; buf
[22] = 0x1d; buf
[23] = 0x1d; buf
[24] = 0x19;
7013 buf
[25] = 0x21; buf
[26] = 0x32; buf
[27] = 0x2a; buf
[28] = 0x32; buf
[29] = 0x32;
7014 buf
[30] = 0x2e; buf
[31] = 0x2a; buf
[32] = 0x2e; buf
[33] = 0x2e; buf
[34] = 0x36;
7015 buf
[35] = 0x3a; buf
[36] = 0x4b; buf
[37] = 0x43; buf
[38] = 0x36; buf
[39] = 0x3a;
7016 buf
[40] = 0x47; buf
[41] = 0x3a; buf
[42] = 0x2e; buf
[43] = 0x2e; buf
[44] = 0x43;
7017 buf
[45] = 0x5c; buf
[46] = 0x43; buf
[47] = 0x47; buf
[48] = 0x4f; buf
[49] = 0x53;
7018 buf
[50] = 0x58; buf
[51] = 0x58; buf
[52] = 0x58; buf
[53] = 0x32; buf
[54] = 0x3f;
7019 buf
[55] = 0x60; buf
[56] = 0x64; buf
[57] = 0x5c; buf
[58] = 0x53; buf
[59] = 0x64;
7020 buf
[60] = 0x4b; buf
[61] = 0x53; buf
[62] = 0x58; buf
[63] = 0x53;
7021 ret
= usb_microdia_control_write(dev
, reg
, buf
, 64);
7024 /* transferbufferlength is only 40 ? */
7027 buf
[0] = 0x0d; buf
[1] = 0x11; buf
[2] = 0x11; buf
[3] = 0x15; buf
[4] = 0x11;
7028 buf
[5] = 0x15; buf
[6] = 0x26; buf
[7] = 0x15; buf
[8] = 0x15; buf
[9] = 0x26;
7029 buf
[10] = 0x53; buf
[11] = 0x36; buf
[12] = 0x2e; buf
[13] = 0x36; buf
[14] = 0x53;
7030 buf
[15] = 0x53; buf
[16] = 0x53; buf
[17] = 0x53; buf
[18] = 0x53; buf
[19] = 0x53;
7031 buf
[20] = 0x53; buf
[21] = 0x53; buf
[22] = 0x53; buf
[23] = 0x53; buf
[24] = 0x53;
7032 buf
[25] = 0x53; buf
[26] = 0x53; buf
[27] = 0x53; buf
[28] = 0x53; buf
[29] = 0x53;
7033 buf
[30] = 0x53; buf
[31] = 0x53; buf
[32] = 0x53; buf
[33] = 0x53; buf
[34] = 0x53;
7034 buf
[35] = 0x53; buf
[36] = 0x53; buf
[37] = 0x53; buf
[38] = 0x53; buf
[39] = 0x53;
7035 buf
[40] = 0x53; buf
[41] = 0x53; buf
[42] = 0x53; buf
[43] = 0x53; buf
[44] = 0x53;
7036 buf
[45] = 0x53; buf
[46] = 0x53; buf
[47] = 0x53; buf
[48] = 0x53; buf
[49] = 0x53;
7037 buf
[50] = 0x53; buf
[51] = 0x53; buf
[52] = 0x53; buf
[53] = 0x53; buf
[54] = 0x53;
7038 buf
[55] = 0x53; buf
[56] = 0x53; buf
[57] = 0x53; buf
[58] = 0x53; buf
[59] = 0x53;
7039 buf
[60] = 0x53; buf
[61] = 0x53; buf
[62] = 0x53; buf
[63] = 0x53;
7040 ret
= usb_microdia_control_write(dev
, reg
, buf
, 64);
7043 /* transferbufferlength is only 40 ? */
7047 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7053 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7059 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7064 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7065 OV7660_CTL_VREF
, dev
->sensor_flags
, buf
);
7070 buf
[0] = 0x01; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00; buf
[4] = 0x28;
7072 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
7077 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
7078 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
7084 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7089 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
7090 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
7095 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
7096 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
7102 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7108 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7114 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7120 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7126 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7132 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7138 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7144 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7150 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7156 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7162 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7168 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7171 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7177 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7180 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7186 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7189 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7195 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7198 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7204 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7207 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7213 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7216 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7222 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7227 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7228 OV7660_CTL_CLKRC
, dev
->sensor_flags
, buf
);
7233 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7234 OV7660_CTL_EXHCH
, dev
->sensor_flags
, buf
);
7239 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7240 OV7660_CTL_EXHCL
, dev
->sensor_flags
, buf
);
7245 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7246 OV7660_CTL_DM_LNL
, dev
->sensor_flags
, buf
);
7251 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7252 OV7660_CTL_DM_LNH
, dev
->sensor_flags
, buf
);
7256 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7257 OV7660_CTL_PID
, dev
->sensor_flags
, buf
);
7261 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7262 OV7660_CTL_VER
, dev
->sensor_flags
, buf
);
7266 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7267 OV7660_CTL_MIDH
, dev
->sensor_flags
, buf
);
7271 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7272 OV7660_CTL_MIDL
, dev
->sensor_flags
, buf
);
7278 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7284 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7290 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7296 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7302 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7307 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7308 OV7660_CTL_AECH
, dev
->sensor_flags
, buf
);
7313 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7314 OV7660_CTL_COM1
, dev
->sensor_flags
, buf
);
7319 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7320 OV7660_CTL_GAIN
, dev
->sensor_flags
, buf
);
7324 buf
[0] = 0x00; buf
[1] = 0x01;
7325 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
7326 OV7660_CTL_ADVFL
, dev
->sensor_flags
, buf
);
7331 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
7332 OV7660_CTL_GAIN
, dev
->sensor_flags
, buf
);
7336 buf
[0] = 0x50; buf
[1] = 0x60;
7337 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
7338 OV7660_CTL_BLUE
, dev
->sensor_flags
, buf
);
7342 buf
[0] = 0xfc; buf
[1] = 0x04;
7343 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
7344 OV7660_CTL_ADVFL
, dev
->sensor_flags
, buf
);
7348 buf
[0] = 0x1f; buf
[1] = 0x00;
7349 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
7350 OV7660_CTL_GAIN
, dev
->sensor_flags
, buf
);
7354 buf
[0] = 0x48; buf
[1] = 0x58;
7355 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
7356 OV7660_CTL_BLUE
, dev
->sensor_flags
, buf
);
7360 buf
[0] = 0xf6; buf
[1] = 0x0b;
7361 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
7362 OV7660_CTL_ADVFL
, dev
->sensor_flags
, buf
);
7368 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7372 buf
[0] = 0x50; buf
[1] = 0x60;
7373 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
7374 OV7660_CTL_BLUE
, dev
->sensor_flags
, buf
);
7380 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg
, ret
);
7384 UDIA_ERROR("r/w in sensor register %x failed (%d)!\n", reg
, ret
);
7390 * @brief From UsbSnoop-plugin-parsed.log
7394 * @returns 0 (OK) or <0 (Error)
7396 * @author Vincent, Kuzja
7398 int microdia_6288_start_stream(struct usb_microdia
*dev
)
7408 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7414 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7420 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7426 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7432 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7438 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7443 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20;
7444 buf
[3] = 0x10; buf
[4] = 0x08;
7445 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
7450 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;
7451 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9);
7456 buf
[0] = 0x44; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30;
7457 buf
[4] = 0x00; buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed;
7458 buf
[8] = 0x0f; buf
[9] = 0xda; buf
[10] = 0x0f; buf
[11] = 0x3a;
7459 buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00; buf
[15] = 0xd0;
7460 buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
7461 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
7462 ret
= usb_microdia_control_write(dev
, reg
, buf
, 24);
7467 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
7468 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
7473 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
7474 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
7479 buf
[0] = 0x86; buf
[1] = 0xcc; buf
[2] = 0x08;
7480 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
7485 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20;
7486 buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b;
7487 buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80;
7488 buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8;
7489 buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
7490 buf
[20] = 0xf4; buf
[21] = 0xff;
7491 ret
= usb_microdia_control_write(dev
, reg
, buf
, 22);
7496 buf
[0] = 0x00; buf
[1] = 0x00;
7497 ret
= usb_microdia_control_write(dev
, reg
, buf
, 2);
7502 buf
[0] = 0x60; buf
[1] = 0x20; buf
[2] = 0x00; buf
[3] = 0x08;
7503 buf
[4] = 0x00; buf
[5] = 0x40; buf
[6] = 0x01; buf
[7] = 0xf0;
7505 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9);
7511 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7517 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7522 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x12; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7523 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7528 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7533 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7538 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x12; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7539 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7544 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7549 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7554 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x0d; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7555 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7560 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7565 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7570 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x0e; buf
[3] = 0x61; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7571 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7576 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7581 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7586 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x11; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7587 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7592 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7597 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7602 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x13; buf
[3] = 0xb8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7603 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7608 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7613 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7618 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x14; buf
[3] = 0x3e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7619 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7624 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7629 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7634 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x16; buf
[3] = 0x24; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7635 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7640 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7645 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7650 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7651 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7656 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7661 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7666 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7667 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7672 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7677 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7682 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7683 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7688 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7693 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7698 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x27; buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7699 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7704 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7709 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7714 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x28; buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7715 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7720 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7725 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7730 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x29; buf
[3] = 0x15; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7731 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7736 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7741 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7746 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2c; buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7747 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7752 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7757 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7762 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x32; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7763 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7768 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7773 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7778 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x34; buf
[3] = 0x3d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7779 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7784 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7789 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7794 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x35; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7795 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7800 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7805 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7810 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x36; buf
[3] = 0xf8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7811 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7816 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7821 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7826 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x38; buf
[3] = 0x12; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7827 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7832 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7837 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7842 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x39; buf
[3] = 0x57; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7843 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7848 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7853 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7858 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7859 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7864 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7869 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7874 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3b; buf
[3] = 0xcc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7875 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7880 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7885 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7890 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3c; buf
[3] = 0x0c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7891 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7896 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7901 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7906 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3d; buf
[3] = 0x19; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7907 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7912 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7917 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7922 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3e; buf
[3] = 0x0c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7923 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7928 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7933 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7938 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3f; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7939 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7944 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7949 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7954 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x41; buf
[3] = 0x40; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7955 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7960 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7965 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7970 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x42; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7971 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7976 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7981 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7986 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x45; buf
[3] = 0x46; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
7987 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
7992 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7997 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8002 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x46; buf
[3] = 0x62; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8003 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8008 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8013 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8018 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x47; buf
[3] = 0x2a; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8019 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8024 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8029 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8034 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x48; buf
[3] = 0x3c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8035 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8040 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8045 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8050 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4a; buf
[3] = 0xf0; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8051 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8056 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8061 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8066 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4b; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8067 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8072 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8077 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8082 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4c; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8083 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8088 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8093 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8098 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4d; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8099 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8104 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8109 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8114 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4e; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8115 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8120 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8125 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8130 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x69; buf
[3] = 0x02; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8131 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8136 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8141 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8146 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x6c; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8147 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8152 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8157 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8162 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x6f; buf
[3] = 0x9e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8163 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8168 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8173 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8178 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x70; buf
[3] = 0x05; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8179 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8184 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8189 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8194 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x71; buf
[3] = 0x78; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8195 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8200 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8205 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8210 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x77; buf
[3] = 0x02; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8211 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8216 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8221 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8226 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x8a; buf
[3] = 0x23; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8227 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8232 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8237 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8242 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x8c; buf
[3] = 0x0d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8243 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8248 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8253 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8258 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x90; buf
[3] = 0x7e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8259 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8264 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8269 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8274 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x91; buf
[3] = 0x7c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8275 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8280 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8285 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8290 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x9f; buf
[3] = 0x6e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8291 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8296 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8301 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8306 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa0; buf
[3] = 0x6e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8307 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8312 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8317 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8322 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa4; buf
[3] = 0x50; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8323 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8328 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8333 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8338 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa5; buf
[3] = 0x68; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8339 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8344 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8349 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8354 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa6; buf
[3] = 0x60; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8355 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8360 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8365 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8370 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa8; buf
[3] = 0xc1; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8371 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8376 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8381 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8386 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa9; buf
[3] = 0xfa; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8387 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8392 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8397 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8402 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xaa; buf
[3] = 0x92; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8403 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8408 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8413 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8418 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xab; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8419 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8424 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8429 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8434 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xac; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8435 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8440 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8445 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8450 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xad; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8451 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8456 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8461 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8466 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xae; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8467 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8472 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8477 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8482 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xaf; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8483 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8488 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8493 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8498 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb2; buf
[3] = 0xf2; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8499 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8504 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8509 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8514 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb3; buf
[3] = 0x20; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8515 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8520 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8525 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8530 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb4; buf
[3] = 0x20; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8531 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8536 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8541 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8546 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb5; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8547 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8552 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8557 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8562 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb6; buf
[3] = 0xaf; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8563 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8568 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8573 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8578 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbb; buf
[3] = 0xae; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8579 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8584 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8589 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8594 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbc; buf
[3] = 0x44; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8595 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8600 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8605 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8610 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbd; buf
[3] = 0x44; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8611 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8616 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8621 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8626 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbe; buf
[3] = 0x3b; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8627 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8632 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8637 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8642 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbf; buf
[3] = 0x3a; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8643 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8648 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8653 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8658 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc0; buf
[3] = 0xe2; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8659 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8664 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8669 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8674 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc1; buf
[3] = 0xc8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8675 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8680 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8685 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8690 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc2; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8691 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8696 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8701 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8706 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc4; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8707 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8712 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8717 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8722 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc6; buf
[3] = 0x85; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8723 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8728 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8733 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8738 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc7; buf
[3] = 0x81; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8739 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8744 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8749 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8754 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc9; buf
[3] = 0xe0; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8755 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8760 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8765 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8770 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xca; buf
[3] = 0xe8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8771 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8776 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8781 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8786 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xcc; buf
[3] = 0xd8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8787 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8792 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8797 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8802 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xcd; buf
[3] = 0x93; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8803 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8808 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8813 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8818 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8824 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8829 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8830 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8835 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8840 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8841 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8846 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8851 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8852 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8857 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8862 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8863 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8868 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8873 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8874 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8879 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8884 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8885 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8890 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8895 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8896 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8901 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8906 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8907 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8912 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8917 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8918 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8923 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8924 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8929 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8934 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8935 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8940 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8945 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8946 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8951 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8956 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8957 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8962 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8967 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8968 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8973 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8978 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8979 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8984 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8989 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8990 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8995 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9000 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9001 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9006 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9011 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9012 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9017 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
9023 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9029 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9035 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9041 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9047 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9053 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9059 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9065 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9071 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9077 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9083 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9088 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x03; buf
[3] = 0x14; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9089 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9094 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9099 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9104 buf
[0] = 0xd0; buf
[1] = 0x30; buf
[2] = 0x17; buf
[3] = 0x1b; buf
[4] = 0xbc; buf
[5] = 0x01; buf
[6] = 0x7a; buf
[7] = 0x10;
9105 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9110 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9115 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9120 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1b; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9121 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9126 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9131 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x32; buf
[3] = 0x82; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9132 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9137 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9142 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9147 buf
[0] = 0x05; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00; buf
[4] = 0x50; buf
[5] = 0x78;
9148 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
9153 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
9154 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
9160 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9166 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9171 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0xa0;
9172 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9177 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x78;
9178 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9184 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9190 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9196 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9202 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9208 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9214 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9220 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9225 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9231 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9236 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9242 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9247 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9253 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9258 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9264 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9269 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9275 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9280 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9286 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9291 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x11; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9292 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9297 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9302 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9307 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9308 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9313 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9318 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9323 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2b; buf
[3] = 0x06; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9324 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9329 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9334 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9339 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x92; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9340 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9345 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9350 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9355 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x93; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9356 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9361 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9366 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9371 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9372 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9377 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9382 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9387 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9388 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9393 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9398 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9404 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9409 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x10; buf
[3] = 0x7d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9410 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9415 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9420 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9425 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x04; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9426 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9431 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9436 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9441 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa1; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9442 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9447 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9452 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9457 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2d; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9458 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9463 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9468 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9473 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9474 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9479 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9484 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9489 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9490 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9495 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9500 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9505 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9506 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9511 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9516 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9521 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9522 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9527 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9532 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9538 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9544 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9550 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9556 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9562 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9568 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9574 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9580 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9585 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
9586 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9591 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
9592 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
9593 buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00;
9594 buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00;
9595 buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00;
9596 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x00; buf
[23] = 0x00;
9597 buf
[24] = 0x00; buf
[25] = 0x00; buf
[26] = 0x00; buf
[27] = 0x00;
9598 buf
[28] = 0x00; buf
[29] = 0x00; buf
[30] = 0x00; buf
[31] = 0x00;
9599 buf
[32] = 0x00; buf
[33] = 0x00; buf
[34] = 0x00; buf
[35] = 0x00;
9600 buf
[36] = 0x00; buf
[37] = 0x00; buf
[38] = 0x00; buf
[39] = 0x00;
9601 buf
[40] = 0x00; buf
[41] = 0x00; buf
[42] = 0x00; buf
[43] = 0x00;
9602 buf
[44] = 0x00; buf
[45] = 0x00; buf
[46] = 0x00; buf
[47] = 0x00;
9603 ret
= usb_microdia_control_write(dev
, reg
, buf
, 48);
9608 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05;
9609 buf
[4] = 0x04; buf
[5] = 0x3f;
9610 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
9615 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
9616 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9621 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x32; buf
[3] = 0xdd;
9622 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9628 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9634 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9640 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9645 buf
[0] = 0x0d; buf
[1] = 0x08; buf
[2] = 0x08; buf
[3] = 0x0d;
9646 buf
[4] = 0x08; buf
[5] = 0x08; buf
[6] = 0x0d; buf
[7] = 0x0d;
9647 buf
[8] = 0x0d; buf
[9] = 0x0d; buf
[10] = 0x11; buf
[11] = 0x0d;
9648 buf
[12] = 0x0d; buf
[13] = 0x11; buf
[14] = 0x15; buf
[15] = 0x21;
9649 buf
[16] = 0x15; buf
[17] = 0x15; buf
[18] = 0x11; buf
[19] = 0x11;
9650 buf
[20] = 0x15; buf
[21] = 0x2a; buf
[22] = 0x1d; buf
[23] = 0x1d;
9651 buf
[24] = 0x19; buf
[25] = 0x21; buf
[26] = 0x32; buf
[27] = 0x2a;
9652 buf
[28] = 0x32; buf
[29] = 0x32; buf
[30] = 0x2e; buf
[31] = 0x2a;
9653 buf
[32] = 0x2e; buf
[33] = 0x2e; buf
[34] = 0x36; buf
[35] = 0x3a;
9654 buf
[36] = 0x4b; buf
[37] = 0x43; buf
[38] = 0x36; buf
[39] = 0x3a;
9655 buf
[40] = 0x47; buf
[41] = 0x3a; buf
[42] = 0x2e; buf
[43] = 0x2e;
9656 buf
[44] = 0x43; buf
[45] = 0x5c; buf
[46] = 0x43; buf
[47] = 0x47;
9657 buf
[48] = 0x4f; buf
[49] = 0x53; buf
[50] = 0x58; buf
[51] = 0x58;
9658 buf
[52] = 0x58; buf
[53] = 0x32; buf
[54] = 0x3f; buf
[55] = 0x60;
9659 buf
[56] = 0x64; buf
[57] = 0x5c; buf
[58] = 0x53; buf
[59] = 0x64;
9660 buf
[60] = 0x4b; buf
[61] = 0x53; buf
[62] = 0x58; buf
[63] = 0x53;
9661 ret
= usb_microdia_control_write(dev
, reg
, buf
, 64);
9666 buf
[0] = 0x0d; buf
[1] = 0x11; buf
[2] = 0x11; buf
[3] = 0x15;
9667 buf
[4] = 0x11; buf
[5] = 0x15; buf
[6] = 0x26; buf
[7] = 0x15;
9668 buf
[8] = 0x15; buf
[9] = 0x26; buf
[10] = 0x53; buf
[11] = 0x36;
9669 buf
[12] = 0x2e; buf
[13] = 0x36; buf
[14] = 0x53; buf
[15] = 0x53;
9670 buf
[16] = 0x53; buf
[17] = 0x53; buf
[18] = 0x53; buf
[19] = 0x53;
9671 buf
[20] = 0x53; buf
[21] = 0x53; buf
[22] = 0x53; buf
[23] = 0x53;
9672 buf
[24] = 0x53; buf
[25] = 0x53; buf
[26] = 0x53; buf
[27] = 0x53;
9673 buf
[28] = 0x53; buf
[29] = 0x53; buf
[30] = 0x53; buf
[31] = 0x53;
9674 buf
[32] = 0x53; buf
[33] = 0x53; buf
[34] = 0x53; buf
[35] = 0x53;
9675 buf
[36] = 0x53; buf
[37] = 0x53; buf
[38] = 0x53; buf
[39] = 0x53;
9676 buf
[40] = 0x53; buf
[41] = 0x53; buf
[42] = 0x53; buf
[43] = 0x53;
9677 buf
[44] = 0x53; buf
[45] = 0x53; buf
[46] = 0x53; buf
[47] = 0x53;
9678 buf
[48] = 0x53; buf
[49] = 0x53; buf
[50] = 0x53; buf
[51] = 0x53;
9679 buf
[52] = 0x53; buf
[53] = 0x53; buf
[54] = 0x53; buf
[55] = 0x53;
9680 buf
[56] = 0x53; buf
[57] = 0x53; buf
[58] = 0x53; buf
[59] = 0x53;
9681 buf
[60] = 0x53; buf
[61] = 0x53; buf
[62] = 0x53; buf
[63] = 0x53;
9682 ret
= usb_microdia_control_write(dev
, reg
, buf
, 64);
9688 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9694 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9700 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9706 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9712 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9718 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9724 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9730 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9735 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x03; buf
[3] = 0x14; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9736 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9741 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9746 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9751 buf
[0] = 0xd0; buf
[1] = 0x30; buf
[2] = 0x17; buf
[3] = 0x1b; buf
[4] = 0xbc; buf
[5] = 0x01; buf
[6] = 0x7a; buf
[7] = 0x10;
9752 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9757 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9762 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9767 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1b; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9768 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9773 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9778 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x32; buf
[3] = 0x82; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9779 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9784 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9789 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9794 buf
[0] = 0x05; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00;
9795 buf
[4] = 0x50; buf
[5] = 0x78;
9796 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
9801 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0;
9803 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
9809 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9814 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0xa0;
9815 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9820 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x78;
9821 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9827 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9833 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9839 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9845 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9851 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9857 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9863 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9869 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9875 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9881 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9887 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9893 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9898 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9904 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9909 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9915 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9920 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9926 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9931 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9937 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9942 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9948 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9953 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9959 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9964 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x11; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9965 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9970 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9975 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9980 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9981 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9986 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9991 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9996 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2b; buf
[3] = 0x70; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9997 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10002 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10007 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10012 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x92; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10013 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10018 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10023 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10028 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x93; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10029 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10034 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10039 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10044 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x0a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10045 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10050 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10055 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10056 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10061 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10066 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
10071 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x0b; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10072 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10077 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10082 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10083 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10088 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10093 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
10098 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1c; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10099 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10104 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10109 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10110 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10115 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10120 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
10125 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1d; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10126 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10131 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10136 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10137 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10142 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10147 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
10153 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10159 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10165 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10170 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa1; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10171 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10176 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10181 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10186 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x10; buf
[3] = 0x06; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10187 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10192 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10197 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10202 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x04; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10203 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10208 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10213 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10218 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2d; buf
[3] = 0x36; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10219 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10224 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10229 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10234 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10235 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10240 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10245 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10250 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
10251 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10256 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10261 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10266 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x06; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
10267 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10272 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10277 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10282 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x94; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10283 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10288 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10293 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10298 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x8d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10299 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10304 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10309 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10314 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x09; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
10315 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10320 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10325 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10330 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x95; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10331 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10336 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10341 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10346 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x85; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10347 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10352 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10357 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10362 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x0c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
10363 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10368 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10373 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10378 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x96; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10379 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10384 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10389 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10394 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10395 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10400 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10405 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10410 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x7c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10411 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10416 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10421 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10427 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10433 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10440 /* END OF MICRODIA 6288 START STREAM */
10444 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
10449 * @brief From UsbSnoop-plugin-parsed.log
10453 * @returns 0 if all OK
10455 * this function starts video stream Microdia 6128 webcam
10456 * Bridge SN9C325 + OM6802 CMOS sensor
10457 * note: comments are my observations so they could be wrong
10459 int microdia_6128_start_stream(struct usb_microdia
*dev
)
10466 0x00, 0x1a, 0x34, 0x27, 0x20, 0xa0, 0x34, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00
10470 0x08, 0x22, 0x44, 0x63, 0x7d, 0x92, 0xa3, 0xaf, 0xbc, 0xc4, 0xcd, 0xd5, 0xdc, 0xe1, 0xe8, 0xef,
10475 0x15, 0x00, 0x2b, 0x00, 0x08, 0x00, 0xeb, 0x0f, 0xd7, 0x0f, 0x43, 0x00, 0x3d, 0x00, 0xca, 0x0f,
10476 0xf7, 0x0f, 0x0c, 0x00, 0x00
10479 __u8 qtable_1
[] = {
10480 0x06, 0x04, 0x04, 0x06, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0x06, 0x08, 0x0a, 0x10,
10481 0x0a, 0x0a, 0x08, 0x08, 0x0a, 0x13, 0x0e, 0x0e, 0x0c, 0x10, 0x17, 0x13, 0x17, 0x17, 0x15, 0x13,
10482 0x15, 0x15, 0x19, 0x1b, 0x23, 0x1f, 0x19, 0x1b, 0x21, 0x1b, 0x15, 0x15, 0x1f, 0x2b, 0x1f, 0x21,
10483 0x25, 0x27, 0x29, 0x29, 0x29, 0x17, 0x1d, 0x2d, 0x2f, 0x2b, 0x27, 0x2f, 0x23, 0x27, 0x29, 0x27
10487 __u8 qtable_2
[] = {
10488 0x06, 0x08, 0x08, 0x0a, 0x08, 0x0a, 0x12, 0x0a, 0x0a, 0x12, 0x27, 0x19, 0x15, 0x19, 0x27, 0x27,
10489 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
10490 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
10491 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
10494 __u8 om6802_sensor
[][8] = {
10495 {0xa0, dev
->sensor_slave_address
, 0xd6, 0x02, 0x00, 0x00, 0x00, 0x10},
10496 {0xa0, dev
->sensor_slave_address
, 0xae, 0xe2, 0x00, 0x00, 0x00, 0x10},
10497 {0xa0, dev
->sensor_slave_address
, 0xdf, 0x6d, 0x00, 0x00, 0x00, 0x10}, // Enter factory mode
10498 {0xa0, dev
->sensor_slave_address
, 0xdd, 0x18, 0x00, 0x00, 0x00, 0x10}, // RGB, uyvy1,Raw RGB, n/1/2, n/clp
10499 {0xa0, dev
->sensor_slave_address
, 0x5a, 0xc0, 0x00, 0x00, 0x00, 0x10},
10500 {0xa0, dev
->sensor_slave_address
, 0xfb, 0x11, 0x00, 0x00, 0x00, 0x10},
10501 {0xa0, dev
->sensor_slave_address
, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x10},
10502 {0xa0, dev
->sensor_slave_address
, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x10},
10503 {0xa0, dev
->sensor_slave_address
, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x10},
10504 {0xa0, dev
->sensor_slave_address
, 0xfb, 0xee, 0x00, 0x00, 0x00, 0x10},
10505 {0xa0, dev
->sensor_slave_address
, 0x5d, 0x80, 0x00, 0x00, 0x00, 0x10},
10506 {0xa0, dev
->sensor_slave_address
, 0x71, 0x84, 0x00, 0x00, 0x00, 0x10},
10507 {0xa0, dev
->sensor_slave_address
, 0x72, 0x00, 0x00, 0x00, 0x00, 0x10},
10508 {0xa0, dev
->sensor_slave_address
, 0x68, 0x80, 0x00, 0x00, 0x00, 0x10},
10509 {0xa0, dev
->sensor_slave_address
, 0x69, 0x00, 0x00, 0x00, 0x00, 0x10},
10510 {0xa0, dev
->sensor_slave_address
, 0x71, 0x18, 0x00, 0x00, 0x00, 0x10},
10511 {0xa0, dev
->sensor_slave_address
, 0x72, 0x04, 0x00, 0x00, 0x00, 0x10},
10512 {0xa0, dev
->sensor_slave_address
, 0x68, 0xde, 0x00, 0x00, 0x00, 0x10},
10513 {0xa0, dev
->sensor_slave_address
, 0x69, 0x00, 0x00, 0x00, 0x00, 0x10}, // 18
10514 {0xa0, dev
->sensor_slave_address
, 0x68, 0x80, 0x00, 0x00, 0x00, 0x10},
10515 {0xa0, dev
->sensor_slave_address
, 0x69, 0x00, 0x00, 0x00, 0x00, 0x10},
10516 {0, 0, 0, 0, 0, 0, 0, 0} // Terminating string
10520 ret
+= usb_microdia_control_write(dev
, 0xf1, buf
, 1); // Reset cam
10523 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1); // Sensor off, video off, clk 12MHz
10525 ret
+= usb_microdia_control_read(dev
, 0x00, buf
, 1); // Check if cam is working, must write 0x12 in buf[0]
10527 if(buf
[0] != 0x12){
10528 UDIA_ERROR("Microdia 6128 webcam not connected or working !!!\n");
10532 ret
+= usb_microdia_control_read(dev
, 0x01, buf
, 1); // Must read 23
10534 if(buf
[0] != 0x23){
10535 UDIA_ERROR("Microdia 6128 webcam is not initialized !!!\n");
10539 buf
[0] = 0x23; buf
[1] = 0x72;
10540 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 2); // Configure GPIO
10542 buf
[0] = 0x34; buf
[1] = 0x27; buf
[2] = 0x20; buf
[3] = 0xa0; buf
[4] = 0x34;
10543 ret
+= usb_microdia_control_write(dev
, 0x05, buf
, 5);
10545 buf
[0] = 0x44; buf
[1] = 0x45; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00;
10546 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 5);
10548 buf
[0] = 0x08; buf
[1] = 0x40; buf
[2] = 0x20; buf
[3] = 0x00; buf
[4] = 0x00;
10549 ret
+= usb_microdia_control_write(dev
, 0x9a, buf
, 5);
10551 buf
[0] = 0x60; buf
[1] = 0x00; buf
[2] = 0x00;
10552 ret
+= usb_microdia_control_write(dev
, 0xd4, buf
, 3);
10553 ret
+= usb_microdia_control_write(dev
, 0x03, data_15
, 15);
10556 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1);
10559 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
10561 buf
[0] = 0x22; buf
[1] = 0x62;
10562 ret
+= usb_microdia_control_write(dev
, 0x01, &buf
[0], 1);
10563 ret
+= usb_microdia_control_write(dev
, 0x01, &buf
[1], 1);
10566 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
10567 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
10569 buf
[0] = 0x42; // Sensor on, clk 24MHz, video off
10570 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1);
10571 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1);
10574 for (i
= 0; i
< 2; i
++){
10575 ret
+= usb_microdia_control_write(dev
, 0x08, om6802_sensor
[i
], 8);
10580 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1);
10583 for (i
= 2; i
< 11; i
++){
10584 ret
+= usb_microdia_control_write(dev
, 0x08, om6802_sensor
[i
], 8);
10589 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1);
10590 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1); // URB 1780
10593 ret
+= usb_microdia_control_write(dev
, 0x15, buf
, 1);
10596 ret
+= usb_microdia_control_write(dev
, 0x16, buf
, 1);
10599 ret
+= usb_microdia_control_write(dev
, 0x12, buf
, 1);
10602 ret
+= usb_microdia_control_write(dev
, 0x13, buf
, 1);
10605 ret
+= usb_microdia_control_write(dev
, 0x18, buf
, 1);
10608 ret
+= usb_microdia_control_write(dev
, 0xd2, buf
, 1);
10611 ret
+= usb_microdia_control_write(dev
, 0xd3, buf
, 1);
10614 ret
+= usb_microdia_control_write(dev
, 0xc6, buf
, 1);
10615 ret
+= usb_microdia_control_write(dev
, 0xc7, buf
, 1);
10618 ret
+= usb_microdia_control_write(dev
, 0xc8, buf
, 1);
10621 ret
+= usb_microdia_control_write(dev
, 0xc9, buf
, 1);
10624 ret
+= usb_microdia_control_write(dev
, 0x18, buf
, 1);
10627 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
10630 ret
+= usb_microdia_control_write(dev
, 0x05, buf
, 1);
10631 ret
+= usb_microdia_control_write(dev
, 0x07, buf
, 1);
10632 ret
+= usb_microdia_control_write(dev
, 0x06, buf
, 1);
10635 ret
+= usb_microdia_control_write(dev
, 0x14, buf
, 1);
10637 ret
+= usb_microdia_control_write(dev
, 0x20, data_17
, 17);
10638 ret
+= usb_microdia_control_write(dev
, 0x20, data_17
, 17);
10640 for (i
= 0; i
< 8; ++i
) // writing the same buffer 8 times, why ??
10641 ret
+= usb_microdia_control_write(dev
, 0x84, data_21
, 21);
10643 data_21
[0] = 0x16; data_21
[10] = 40; data_21
[12] = 0x3f;
10644 ret
+= usb_microdia_control_write(dev
, 0x84, data_21
, 21);
10647 ret
+= usb_microdia_control_write(dev
, 0x9a, buf
, 1);
10650 ret
+= usb_microdia_control_write(dev
, 0x99, buf
, 1);
10652 ret
+= usb_microdia_control_write(dev
, 0x84, data_21
, 21); // URB 1811
10655 ret
+= usb_microdia_control_write(dev
, 0x05, buf
, 1);
10656 ret
+= usb_microdia_control_write(dev
, 0x07, buf
, 1);
10657 ret
+= usb_microdia_control_write(dev
, 0x06, buf
, 1);
10660 for (i
= 11; i
< 15; i
++){
10661 ret
+= usb_microdia_control_write(dev
, 0x08, om6802_sensor
[i
], 8);
10666 ret
+= usb_microdia_control_write(dev
, 0x05, buf
, 1);
10668 ret
+= usb_microdia_control_write(dev
, 0x06, buf
, 1);
10670 buf
[0] = buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05; buf
[4] = 0x04; buf
[5] = 0x3f;
10671 ret
+= usb_microdia_control_write(dev
, 0xc0, buf
, 6);
10673 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
10674 ret
+= usb_microdia_control_write(dev
, 0xca, buf
, 4);
10676 buf
[0] = 0x1e; buf
[1] = 0xdd; buf
[2] = 0x2d; buf
[3] = 0xe7;
10677 ret
+= usb_microdia_control_write(dev
, 0xce, buf
, 4);
10680 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1);
10683 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
10686 for (i
= 15; i
< 19; i
++){
10687 ret
+= usb_microdia_control_write(dev
, 0x08, om6802_sensor
[i
], 8);
10692 ret
+= usb_microdia_control_write(dev
, 0x05, buf
, 1);
10695 ret
+= usb_microdia_control_write(dev
, 0x06, buf
, 1);
10697 // This changes the mode (VGA = 0 , CIF = 1)
10698 // buf = 0x40 | 0x05 | (mode << 4) 45 or 55
10700 ret
+= usb_microdia_control_write(dev
, 0x18, buf
, 1);
10702 // This is the Q table
10703 ret
+= usb_microdia_control_write(dev
, 0x0100, qtable_1
, 64); // first time
10704 ret
+= usb_microdia_control_write(dev
, 0x0140, qtable_2
, 64); // second time
10706 // mode: VGA = 0, CIF = 1
10707 // buf = 0x05 | (mode << 4) 05 or 15
10709 ret
+= usb_microdia_control_write(dev
, 0x18, buf
, 1);
10712 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1);
10713 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1);
10715 buf
[0] = 0x42; // Sensor on, Video disabled, clk 24MHz
10716 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1);
10719 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
10721 // Command to start streaming
10722 // Sensor on, clk 24MHz, video enabled
10724 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1);
10726 // When the device reads 46 from reg 0x01 it means that
10727 // camera is streaming
10728 ret
+= usb_microdia_control_read(dev
, 0x01, buf
, 1); // Must read 0x46
10731 UDIA_DEBUG("Some read or write were not successful in Start Stream\n");
10737 int dev_microdia_stop_stream(struct usb_microdia
*dev
)
10740 if (dev
&& dev
->stop_stream
)
10741 ret
= dev
->stop_stream(dev
);
10747 * @brief From stop.htm
10755 * For SN9C201 with MI1310.
10756 * This function has not been tested yet.
10758 int microdia_6242_stop_stream(struct usb_microdia
*dev
)
10762 __u8 only10c0
[3] = {0x0d, 0x00, 0x00};
10765 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
10768 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
10771 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
10773 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
10774 only10c0
[0], dev
->sensor_flags
, &only10c0
[1]);
10777 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
10780 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
10783 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
10786 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
10789 buf
[0] = 0x98; buf
[1] = 0xe7; buf
[2] = 0x11;
10790 usb_microdia_control_write(dev
, 0x1000, buf
, 3);
10793 * After the select alternate setting 0 is actually another transfer:
10795 * usb_microdia_control_write(dev, 0x1066, buf, 1);
10803 * @brief From stopstream.log
10811 * For SN9C201 with SOI968.
10812 * I don't whether the function really stops the stream.
10813 * Nevertheless the LED on the webcam now stops glowing.
10814 * The function is very similar to "microdia_624f_stop_stream".
10816 int microdia_624e_stop_stream(struct usb_microdia
*dev
)
10821 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
10823 /* Next two writes added because it works better.
10824 * The LED stops glowing and I think the stream does too.
10825 * 0x20 = 0b00100000 which is the minimal of what the
10826 * other stopstreams have in common.
10829 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
10832 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
10835 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
10838 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
10840 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
10841 usb_microdia_control_write(dev
, 0x1000, buf
, 3);
10843 usb_microdia_control_read(dev
, 0x1066, buf
, 1);
10849 int microdia_624f_stop_stream(struct usb_microdia
*dev
)
10857 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
10863 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
10869 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
10875 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
10881 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
10887 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
10895 ret
= usb_microdia_control_write(dev
, command
, buf
, 3);
10900 ret
= usb_microdia_control_read(dev
, command
, buf
, 1);
10905 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
10912 UDIA_ERROR("command %x failed (%d)!\n", command
, ret
);
10916 int microdia_6260_stop_stream(struct usb_microdia
*dev
)
10922 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
10924 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
10926 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
10928 ret
= usb_microdia_control_write(dev
, 0x1007, buf
, 1);
10930 ret
= usb_microdia_control_write(dev
, 0x1006, buf
, 1);
10932 buf
[0] = 0x98; buf
[1] = 0xe7; buf
[2] = 0x11;
10933 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 3);
10936 ret
= usb_microdia_control_write(dev
, 0x1066, buf
, 1);
10937 ret
= usb_microdia_control_read(dev
, 0x1045, buf
, 1);
10939 ret
= usb_microdia_control_write(dev
, 0x1045, buf
, 1);
10941 ret
= usb_microdia_control_write(dev
, 0x10c8, buf
, 1);
10943 ret
= usb_microdia_control_write(dev
, 0x1020, buf
, 1);
10949 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
10953 * @returns 0 (ok) or -1 (error)
10955 * @author Comer352l
10957 * Windows driver version: 5.7.23.000
10958 * Windows versions: 2000 and XP
10959 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
10960 * All logs were made using AMCAP with 640x480, RGB24
10962 int microdia_6270_stop_stream(struct usb_microdia
*dev
)
10968 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
10970 ret
+= usb_microdia_control_write(dev
, 0x1007, buf
, 1); /* URB 3541 */
10972 ret
+= usb_microdia_control_write(dev
, 0x1006, buf
, 1); /* URB 3542 */
10973 /* => These two writes seem to cause the cam to stop sending isochronus USB messages */
10976 ret
+= usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 3544 */
10977 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
10979 ret
+= usb_microdia_control_write(dev
, 0x1007, buf
, 1); /* URB 3541 */
10981 ret
+= usb_microdia_control_write(dev
, 0x1006, buf
, 1); /* URB 3542 */
10983 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
10984 /* Write to sensor register 0x07: Output Control */
10985 buf
[0] = 0x00; buf
[1] = 0x00; /* stop sensor readout, normal operation */
10986 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
10988 buf
[0] = 0x38; /* ALEX: 0x3c */
10989 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 3545 */
10990 buf
[0] = 0x6d; /* ALEX: 0xec; FRANK: also 0x6c */
10991 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 3546 */
10992 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
10993 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 3); /* URB 3547 */
10995 /* INTERRUPT COMMING BACK (URB 2227) */
10996 /* SELECT ALTERNATE SETTINGS (URB 3548) */
10997 /* INTERRUPT GOING DOWN (URB 3549) */
11000 ret
+= usb_microdia_control_write(dev
, 0x1066, buf
, 1); /* URB 3550 */
11003 UDIA_INFO("One ore more errors occured while stopping stream !\n");
11010 int microdia_627b_stop_stream(struct usb_microdia
*dev
)
11018 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11024 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11031 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11032 //if(ret < 0) goto err;
11036 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11037 //if(ret < 0) goto err;
11042 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11049 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11050 //if(ret < 0) goto err;
11054 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11055 //if(ret < 0) goto err;
11060 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11066 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11071 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
11072 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
11078 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11084 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
11089 * @brief From UsbSnoop-plugin-parsed.log
11093 * @returns 0 (OK) or <0 (Error)
11095 * @author Vincent, Kuzja
11097 int microdia_6288_stop_stream(struct usb_microdia
*dev
)
11105 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11111 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11117 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11123 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11129 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11134 buf
[0] = 0x98; buf
[1] = 0xe7; buf
[2] = 0x11;
11135 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
11141 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11147 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
11152 * @brief From UsbSnoop-plugin-parsed.log
11156 * @returns 0 if all OK
11158 * This function stops the video stream for microdia 6128
11159 * Bridge SN9C325 + OM6802 CMOS sensor
11160 * note: comments are my observations so they could be wrong
11162 int microdia_6128_stop_stream(struct usb_microdia
*dev
)
11167 ret
+= usb_microdia_control_read(dev
, 0x00, &data
, 1);
11169 // Stop stream command
11171 ret
+= usb_microdia_control_write(dev
, 0x01, &data
, 1);
11174 ret
+= usb_microdia_control_write(dev
, 0xf1, &data
, 1);
11177 ret
+= usb_microdia_control_write(dev
, 0xf1, &data
, 1);
11180 UDIA_DEBUG("Some read or write were not successful in Stop Stream\n");
11187 int microdia_624f_set_exposure(struct usb_microdia
*dev
)
11190 __u8 v1
= (dev
->vsettings
.exposure
>> 4) & 0xff;
11191 __u8 v2
= dev
->vsettings
.exposure
>> 12;
11193 ret
|= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, 0x2d,
11194 dev
->sensor_flags
, &v1
);
11196 ret
|= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, 0x2e,
11197 dev
->sensor_flags
, &v2
);
11202 int microdia_624f_flip_detect(struct usb_microdia
*dev
)
11207 ret
= usb_microdia_control_read(dev
, 0x1009, &val
, 1);
11211 dev
->vsettings
.vflip
= 1;
11213 dev
->vsettings
.vflip
= 0;
11217 int microdia_6260_flip_detect(struct usb_microdia
*dev
)
11219 const __u8 flip_bit
= 0x01;
11222 static __u8 flip_reg
= flip_bit
;
11225 ret
= usb_microdia_control_read(dev
, 0x1009, &val
, 1);
11228 if (flip_reg
!= (val
& flip_bit
)) {
11229 if (val
& flip_bit
)
11233 ret
= ov7670_auto_flip(dev
, vflip
);
11234 flip_reg
= (val
& flip_bit
);