Removed unecessary sn9c20x register writes
[microdia.git] / microdia-dev.c
blobdd4a8002ddc1a4b174060efcfef82e59259edf41
1 /**
2 * @file microdia-dev.c
3 * @author Nicolas VIVIEN
4 * @date 2008-02-01
5 * @version v0.0.0
7 * @brief Driver for Microdia USB video camera
9 * @note Copyright (C) Nicolas VIVIEN
11 * @par Licences
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
16 * any later version.
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the Free Software
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 #include <linux/errno.h>
29 #include <linux/string.h>
30 #include <stdarg.h>
32 #include "microdia.h"
33 #include "sn9c20x.h"
34 #include "ov7670.h"
35 #include "ov965x.h"
36 #include "mt9vx11.h"
37 #include "ov7660.h"
39 int dev_microdia_init_camera(struct usb_microdia *dev)
41 return 0;
44 int dev_microdia_camera_on(struct usb_microdia *dev)
46 int ret = -1;
47 struct usb_device *udev = dev->udev;
49 ret = usb_set_interface(udev, 0, 8);
51 if (ret < 0)
52 UDIA_ERROR("usb_set_interface failed !\n");
54 return ret;
57 int dev_microdia_camera_off(struct usb_microdia *dev)
59 int ret = -1;
60 struct usb_device *udev = dev->udev;
62 ret = usb_set_interface(udev, 0, 0);
64 if (ret < 0)
65 UDIA_ERROR("usb_set_interface failed !\n");
67 return 0;
70 int dev_microdia_camera_settings(struct usb_microdia *dev)
72 dev_microdia_camera_set_contrast(dev);
73 dev_microdia_camera_set_brightness(dev);
74 dev_microdia_camera_set_gamma(dev);
75 dev_microdia_camera_set_exposure(dev);
76 dev_microdia_camera_set_hvflip(dev);
77 dev_microdia_camera_set_sharpness(dev);
78 dev_microdia_camera_set_rgb_gain(dev);
79 dev_microdia_camera_set_auto_exposure(dev);
80 dev_microdia_camera_set_auto_whitebalance(dev);
81 return 0;
84 int dev_microdia_camera_set_contrast(struct usb_microdia *dev)
86 int ret = -ENODEV;
87 if(dev && dev->set_contrast)
88 ret = dev->set_contrast(dev);
89 return ret;
92 int dev_microdia_camera_set_brightness(struct usb_microdia *dev)
94 int ret = -ENODEV;
95 if(dev && dev->set_brightness)
96 ret = dev->set_brightness(dev);
97 return ret;
100 int dev_microdia_camera_set_gamma(struct usb_microdia *dev)
102 int ret = -ENODEV;
103 if(dev && dev->set_gamma)
104 ret = dev->set_gamma(dev);
105 return ret;
108 int dev_microdia_camera_set_exposure(struct usb_microdia *dev)
110 if (dev->set_exposure != NULL) {
111 return dev->set_exposure(dev);
113 return 0;
116 int dev_microdia_camera_set_hvflip(struct usb_microdia *dev)
118 int ret = -ENODEV;
119 if(dev && dev->set_hvflip)
120 ret = dev->set_hvflip(dev);
122 return ret;
125 int dev_microdia_camera_set_sharpness(struct usb_microdia *dev)
127 int ret = -ENODEV;
128 if(dev && dev->set_sharpness)
129 ret = dev->set_sharpness(dev);
131 return ret;
134 int dev_microdia_camera_set_rgb_gain(struct usb_microdia *dev)
136 int ret = -ENODEV;
137 if (dev && dev->set_rgb_gain)
138 ret = dev->set_rgb_gain(dev);
140 return ret;
143 int dev_microdia_camera_set_auto_exposure(struct usb_microdia *dev)
145 int ret = -ENODEV;
146 if(dev && dev->set_auto_exposure)
147 ret = dev->set_auto_exposure(dev);
149 return ret;
152 int dev_microdia_camera_set_auto_whitebalance(struct usb_microdia *dev)
154 int ret = -ENODEV;
155 if(dev && dev->set_auto_whitebalance)
156 ret = dev->set_auto_whitebalance(dev);
158 return ret;
162 /**
163 * @brief From UsbSnoop-plugin-parsed.log
165 * @param dev
167 * @returns
169 int dev_microdia_initialize_device(struct usb_microdia *dev)
171 int ret = -ENODEV;
173 if(dev && dev->initialize)
174 ret = dev->initialize(dev);
176 return ret;
180 * @brief From init-physical-replug.log
182 * @param dev
184 * @returns 0
186 * @author psnel
188 * For SN9C201 with MI1300.
191 int microdia_6240_initialize(struct usb_microdia *dev)
193 int ret = 0;
194 __u8 buf;
196 UDIA_INFO("Initializing camera...\n");
198 ret = usb_microdia_control_read(dev, 0x130d, &buf, 1); /* URB 5 0x81 */
199 UDIA_INFO("...init: read %x, ret = %d\n", buf, ret);
201 ret += usb_microdia_control_read(dev, 0x1040, &buf, 1); /* URB 6 0xe4 */
202 UDIA_INFO("...init: read %x, ret = %d\n", buf, ret);
204 buf = 0x00;
205 ret += usb_microdia_control_write(dev, 0x10c8, &buf, 1); /* URB 7 */
206 UDIA_INFO("...init: write %x, ret = %d\n", buf, ret);
208 /* Interrupt going down (URB 8) */
210 buf = 0x80;
211 ret += usb_microdia_control_write(dev, 0x1020, &buf, 1); /* URB 9 */
212 UDIA_INFO("...init: write %x, ret = %d\n", buf, ret);
214 if (ret < 4) {
215 UDIA_ERROR("One or more errors occured during initialization!\n");
216 return -1;
219 return 0;
223 * @brief From start.log (14 jun 2008)
225 * @param dev
227 * @returns 0
229 * @author psnel
231 * For SN9C201 with MI1300.
234 int microdia_6240_start_stream(struct usb_microdia *dev)
236 int ret = 0;
237 int i;
238 __u16 reg;
239 __u8 buf;
240 __u8 buf24[24];
241 __u8 buf64[64];
242 __u8 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: */
256 reg = 0x1066;
257 buf = 0x00;
258 ret = usb_microdia_control_write(dev, reg, &buf, 1); /* URB 12 */
259 if (ret < 0)
260 goto err;
262 /* UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: */
263 /* UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: */
265 reg = 0x1007;
266 buf = 0x20;
267 ret = usb_microdia_control_write(dev, reg, &buf, 1); /* URB 14 */
268 if (ret < 0)
269 goto err;
270 reg = 0x1006;
271 buf = 0x00;
272 ret = usb_microdia_control_write(dev, reg, &buf, 1);
273 if (ret < 0)
274 goto err;
275 reg = 0x1000;
276 buf = 0x78;
277 ret = usb_microdia_control_write(dev, reg, &buf, 1);
278 if (ret < 0)
279 goto err;
281 reg = 0x1001;
282 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* cf */
283 if (ret < 0)
284 goto err;
286 reg = 0x1001;
287 buf = 0xc7;
288 ret = usb_microdia_control_write(dev, reg, &buf, 1);
289 if (ret < 0)
290 goto err;
291 reg = 0x1002;
292 buf = 0x18;
293 ret = usb_microdia_control_write(dev, reg, &buf, 1);
294 if (ret < 0)
295 goto err;
297 reg = 0x1007;
298 ret = usb_microdia_control_read(dev, reg, buf24, 7); /* URB 20 << 20 00 ff 81 00 00 00 */
299 if (ret < 0)
300 goto err;
302 reg = 0x1006;
303 buf24[0] = 0x80; buf24[1] = 0xa0;
304 ret = usb_microdia_control_write(dev, reg, buf24, 2);
305 if (ret < 0)
306 goto err;
307 reg = 0x1061;
308 buf = 0x01;
309 ret = usb_microdia_control_write(dev, reg, &buf, 1);
310 if (ret < 0)
311 goto err;
312 reg = 0x1020;
313 buf = 0x80;
314 ret = usb_microdia_control_write(dev, reg, &buf, 1);
315 if (ret < 0)
316 goto err;
317 reg = 0x1067;
318 buf24[0] = 0x40; buf24[1] = 0x30; buf24[2] = 0x20; buf24[3] = 0x10;
319 buf24[4] = 0x08;
320 ret = usb_microdia_control_write(dev, reg, buf24, 5);
321 if (ret < 0)
322 goto err;
323 reg = 0x10c0;
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;
326 buf24[8] = 0x03;
327 ret = usb_microdia_control_write(dev, reg, buf24, 9);
328 if (ret < 0)
329 goto err;
330 reg = 0x10e0;
331 buf = 0x45;
332 ret = usb_microdia_control_write(dev, reg, &buf, 1);
333 if (ret < 0)
334 goto err;
335 reg = 0x10f5;
336 buf = 0x60;
337 ret = usb_microdia_control_write(dev, reg, &buf, 1);
338 if (ret < 0)
339 goto err;
340 reg = 0x10f8;
341 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x00;
342 ret = usb_microdia_control_write(dev, reg, buf24, 3);
343 if (ret < 0)
344 goto err;
345 reg = 0x10fb;
346 buf24[0] = 0x00; buf24[1] = 0xa0; buf24[2] = 0x00; buf24[3] = 0xf0;
347 buf24[4] = 0x00;
348 ret = usb_microdia_control_write(dev, reg, buf24, 5);
349 if (ret < 0)
350 goto err;
351 reg = 0x1188;
352 buf24[0] = 0x06; buf24[1] = 0x4c; buf24[2] = 0x08;
353 ret = usb_microdia_control_write(dev, reg, buf24, 3);
354 if (ret < 0)
355 goto err;
357 reg = 0x118b;
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 */
366 if (ret < 0)
367 goto err;
369 reg = 0x11a1;
370 buf24[0] = 0x00; buf24[1] = 0x00;
371 ret = usb_microdia_control_write(dev, reg, buf24, 2);
372 if (ret < 0)
373 goto err;
375 reg = 0x11b7;
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;
378 buf24[8] = 0x00;
379 ret = usb_microdia_control_write(dev, reg, buf24, 9);
380 if (ret < 0)
381 goto err;
383 reg = 0x11b8;
384 buf = 0x38;
385 ret = usb_microdia_control_write(dev, reg, &buf, 1);
386 if (ret < 0)
387 goto err;
389 reg = 0x1000;
390 buf = 0x78;
391 ret = usb_microdia_control_write(dev, reg, &buf, 1);
392 if (ret < 0)
393 goto err;
395 reg = 0x10c0;
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 --> */
399 if (ret < 0)
400 goto err;
402 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* << b0 */
403 if (ret < 0)
404 goto err;
405 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* << b4 */
406 if (ret < 0)
407 goto err;
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);
412 if (ret < 0)
413 goto err;
415 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* << b0 */
416 if (ret < 0)
417 goto err;
418 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* << b4 */
419 if (ret < 0)
420 goto err;
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);
425 if (ret < 0)
426 goto err;
428 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* << b0 */
429 if (ret < 0)
430 goto err;
431 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* << b4 */
432 if (ret < 0)
433 goto err;
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);
438 if (ret < 0)
439 goto err;
441 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // URB 45 << d0 */
442 if (ret < 0)
443 goto err;
444 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
445 if (ret < 0)
446 goto err;
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);
451 if (ret < 0)
452 goto err;
454 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
455 if (ret < 0)
456 goto err;
457 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
458 if (ret < 0)
459 goto err;
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);
464 if (ret < 0)
465 goto err;
467 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
468 if (ret < 0)
469 goto err;
470 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
471 if (ret < 0)
472 goto err;
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);
477 if (ret < 0)
478 goto err;
480 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
481 if (ret < 0)
482 goto err;
483 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
484 if (ret < 0)
485 goto err;
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);
490 if (ret < 0)
491 goto err;
493 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
494 if (ret < 0)
495 goto err;
496 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
497 if (ret < 0)
498 goto err;
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);
503 if (ret < 0)
504 goto err;
506 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
507 if (ret < 0)
508 goto err;
509 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
510 if (ret < 0)
511 goto err;
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);
516 if (ret < 0)
517 goto err;
519 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
520 if (ret < 0)
521 goto err;
522 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
523 if (ret < 0)
524 goto err;
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 */
529 if (ret < 0)
530 goto err;
532 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
533 if (ret < 0)
534 goto err;
535 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
536 if (ret < 0)
537 goto err;
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);
542 if (ret < 0)
543 goto err;
545 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
546 if (ret < 0)
547 goto err;
548 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
549 if (ret < 0)
550 goto err;
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);
555 if (ret < 0)
556 goto err;
558 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
559 if (ret < 0)
560 goto err;
561 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
562 if (ret < 0)
563 goto err;
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);
568 if (ret < 0)
569 goto err;
571 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
572 if (ret < 0)
573 goto err;
574 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
575 if (ret < 0)
576 goto err;
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 */
581 if (ret < 0)
582 goto err;
584 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 94 */
585 if (ret < 0)
586 goto err;
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 */
591 if (ret < 0)
592 goto err;
594 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
595 if(ret < 0) goto err;
596 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
597 if (ret < 0)
598 goto err;
600 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x60; buf24[3] = 0x00;
601 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
602 ret = usb_microdia_control_write(dev, reg, buf24, 8);
603 if (ret < 0)
604 goto err;
606 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
607 if (ret < 0)
608 goto err;
609 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
610 if (ret < 0)
611 goto err;
613 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x62; buf24[3] = 0x04;
614 buf24[4] = 0x98; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
615 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 85 */
616 if (ret < 0)
617 goto err;
619 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
620 if (ret < 0)
621 goto err;
622 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
623 if (ret < 0)
624 goto err;
626 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x68; buf24[3] = 0x00;
627 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
628 ret = usb_microdia_control_write(dev, reg, buf24, 8);
629 if (ret < 0)
630 goto err;
632 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
633 if (ret < 0)
634 goto err;
635 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
636 if (ret < 0)
637 goto err;
638 /* // <-- 10c0 */
639 reg = 0x10c1;
640 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* URB 91 // << 5d*/
641 if (ret < 0)
642 goto err;
643 buf = 0x50;
644 ret = usb_microdia_control_write(dev, reg, &buf, 1);
645 if (ret < 0)
646 goto err;
648 reg = 0x10c0;
649 buf24[0] = 0x90; buf24[1] = 0x50; buf24[2] = 0x00; buf24[3] = 0x00;
650 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
651 for(i=93; i<=108; i++){
652 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 93..108 */
653 if (ret < 0)
654 goto err;
655 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 9c */
656 if (ret < 0)
657 goto err;
659 ret = usb_microdia_control_write(dev, reg, buf24, 8);
660 if (ret < 0)
661 goto err;
663 buf24[0] = 0x92; /* // change only 1st value */
664 for(i=110; i<=126; i++){
665 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 110..126 */
666 if (ret < 0)
667 goto err;
668 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 9e */
669 if (ret < 0)
670 goto err;
673 reg = 0x10c2;
674 ret = usb_microdia_control_read(dev, reg, buf24, 5); /* // << ff ff ff ff ff */
675 if (ret < 0)
676 goto err;
678 reg = 0x10c1;
679 buf = 0x5d;
680 ret = usb_microdia_control_write(dev, reg, &buf, 1);
681 if (ret < 0)
682 goto err;
684 reg = 0x10e0;
685 buf = 0x47;
686 ret = usb_microdia_control_write(dev, reg, &buf, 1);
687 if (ret < 0)
688 goto err;
689 buf = 0x07;
690 ret = usb_microdia_control_write(dev, reg, &buf, 1);
691 if (ret < 0)
692 goto err;
694 reg = 0x1001;
695 buf = 0xc6;
696 ret = usb_microdia_control_write(dev, reg, &buf, 1);
697 if (ret < 0)
698 goto err;
699 buf = 0xc4;
700 ret = usb_microdia_control_write(dev, reg, &buf, 1);
701 if (ret < 0)
702 goto err;
703 buf = 0x44;
704 ret = usb_microdia_control_write(dev, reg, &buf, 1);
705 if (ret < 0)
706 goto err;
708 reg = 0x1189;
709 buf = 0x0c;
710 ret = usb_microdia_control_write(dev, reg, &buf, 1);
711 if (ret < 0)
712 goto err;
714 buf = 0x00;
715 reg = 0x11bc;
716 ret = usb_microdia_control_write(dev, reg, &buf, 1); /* URB 135..138 */
717 if (ret < 0)
718 goto err;
719 reg = 0x11bd;
720 ret = usb_microdia_control_write(dev, reg, &buf, 1);
721 if (ret < 0)
722 goto err;
723 reg = 0x11be;
724 ret = usb_microdia_control_write(dev, reg, &buf, 1);
725 if (ret < 0)
726 goto err;
727 reg = 0x11bf;
728 ret = usb_microdia_control_write(dev, reg, &buf, 1);
729 if (ret < 0)
730 goto err;
732 reg = 0x10c0;
733 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x20; buf24[3] = 0x11;
734 buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
735 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 139 */
736 if (ret < 0)
737 goto err;
739 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
740 if (ret < 0)
741 goto err;
742 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
743 if (ret < 0)
744 goto err;
746 reg = 0x1180;
747 buf24[0] = 0x02; buf24[1] = 0x00; buf24[2] = 0x02; buf24[3] = 0x00;
748 buf24[4] = 0x28; buf24[5] = 0x3c;
749 ret = usb_microdia_control_write(dev, reg, buf24, 6); /* URB 142 */
750 if (ret < 0)
751 goto err;
753 reg = 0x10fb;
754 buf24[0] = 0x00; buf24[1] = 0xa0; buf24[2] = 0x00; buf24[3] = 0xf0;
755 buf24[4] = 0x00;
756 ret = usb_microdia_control_write(dev, reg, buf24, 5);
757 if (ret < 0)
758 goto err;
760 reg = 0x1189;
761 buf = 0x0c;
762 ret = usb_microdia_control_write(dev, reg, &buf, 1);
763 if (ret < 0)
764 goto err;
766 reg = 0x11a1;
767 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x6a; buf24[3] = 0x50;
768 ret = usb_microdia_control_write(dev, reg, buf24, 4);
769 if (ret < 0)
770 goto err;
772 reg = 0x11ab;
773 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x50; buf24[3] = 0x3c;
774 ret = usb_microdia_control_write(dev, reg, buf24, 4);
775 if (ret < 0)
776 goto err;
778 reg = 0x1000;
779 buf = 0x7c;
780 ret = usb_microdia_control_write(dev, reg, &buf, 1);
781 if (ret < 0)
782 goto err;
784 reg = 0x1002;
785 buf = 0x1c;
786 for(i=148; i<=149; i++){
787 ret = usb_microdia_control_write(dev, reg, &buf, 1);
788 if (ret < 0)
789 goto err;
792 reg = 0x11b8;
793 buf = 0x38;
794 ret = usb_microdia_control_write(dev, reg, &buf, 1); /* URB 150 */
795 if (ret < 0)
796 goto err;
798 reg = 0x118a;
799 buf = 0x05;
800 ret = usb_microdia_control_write(dev, reg, &buf, 1);
801 if (ret < 0)
802 goto err;
804 reg = 0x0395;
805 buf = 0x05;
806 ret = usb_microdia_control_write(dev, reg, &buf, 1);
807 if (ret < 0)
808 goto err;
810 reg = 0x11b8;
811 buf = 0x78;
812 ret = usb_microdia_control_write(dev, reg, &buf, 1); /* URB 153..163 */
813 if (ret < 0)
814 goto err;
815 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 38 */
816 if (ret < 0)
817 goto err;
818 buf = 0x79;
819 ret = usb_microdia_control_write(dev, reg, &buf, 1);
820 if (ret < 0)
821 goto err;
822 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 39 */
823 if (ret < 0)
824 goto err;
825 buf = 0x7a;
826 ret = usb_microdia_control_write(dev, reg, &buf, 1);
827 if (ret < 0)
828 goto err;
829 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 3a */
830 if (ret < 0)
831 goto err;
832 buf = 0x7b;
833 ret = usb_microdia_control_write(dev, reg, &buf, 1);
834 if (ret < 0)
835 goto err;
836 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << bb */
837 if (ret < 0)
838 goto err;
839 buf = 0xfc;
840 ret = usb_microdia_control_write(dev, reg, &buf, 1);
841 if (ret < 0)
842 goto err;
843 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 3c */
844 if (ret < 0)
845 goto err;
846 buf = 0x78;
847 ret = usb_microdia_control_write(dev, reg, &buf, 1);
848 if (ret < 0)
849 goto err;
850 /* <-- 0x11b8 */
851 reg = 0x10c0;
852 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x06; buf24[3] = 0x00;
853 buf24[4] = 0xf2; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
854 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 164..169 */
855 if (ret < 0)
856 goto err;
858 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
859 if (ret < 0)
860 goto err;
861 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
862 if (ret < 0)
863 goto err;
865 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x05; buf24[3] = 0x00;
866 buf24[4] = 0x13; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
867 ret = usb_microdia_control_write(dev, reg, buf24, 8);
868 if (ret < 0)
869 goto err;
871 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
872 if (ret < 0)
873 goto err;
874 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
875 if (ret < 0)
876 goto err;
877 /* <-- 0x10c0 */
878 reg = 0x11ba;
879 buf = 0x0a;
880 ret = usb_microdia_control_write(dev, reg, &buf, 1);
881 if (ret < 0)
882 goto err;
884 reg = 0x118b;
885 buf = 0x0a;
886 ret = usb_microdia_control_write(dev, reg, &buf, 1);
887 if (ret < 0)
888 goto err;
890 reg = 0x10f7;
891 buf = 0x07;
892 ret = usb_microdia_control_write(dev, reg, &buf, 1);
893 if (ret < 0)
894 goto err;
896 reg = 0x10f8;
897 buf = 0x14;
898 ret = usb_microdia_control_write(dev, reg, &buf, 1);
899 if (ret < 0)
900 goto err;
901 reg = 0x10fa;
902 buf = 0xff;
903 ret = usb_microdia_control_write(dev, reg, &buf, 1);
904 if (ret < 0)
905 goto err;
906 reg = 0x10f9;
907 buf = 0x00;
908 ret = usb_microdia_control_write(dev, reg, &buf, 1);
909 if (ret < 0)
910 goto err;
911 reg = 0x10f9;
912 ret = usb_microdia_control_write(dev, reg, &buf, 1);
913 if (ret < 0)
914 goto err;
916 reg = 0x11ba;
917 buf = 0x0a;
918 ret = usb_microdia_control_write(dev, reg, &buf, 1);
919 if (ret < 0)
920 goto err;
922 reg = 0x11bc;
923 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x00; buf24[3] = 0x00;
924 ret = usb_microdia_control_write(dev, reg, buf24, 4);
925 if (ret < 0)
926 goto err;
928 reg = 0x11c0;
929 for (i = 0; i < 48; i++)
930 buf64[i] = 0; /* // zeroes */
931 ret = usb_microdia_control_write(dev, reg, buf64, 48); /* URB 195 */
932 if (ret < 0)
933 goto err;
935 reg = 0x10c0;
936 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x20; buf24[3] = 0x11;
937 buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
938 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 200 */
939 if (ret < 0)
940 goto err;
942 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
943 if (ret < 0)
944 goto err;
945 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
946 if (ret < 0)
947 goto err;
949 reg = 0x1180;
950 buf = 0x02;
951 ret = usb_microdia_control_write(dev, reg, &buf, 1);
952 if (ret < 0)
953 goto err;
955 reg = 0x10c0;
957 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x20; buf24[3] = 0x11;
958 buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
960 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 204..206 */
961 if (ret < 0)
962 goto err;
964 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* << b0 */
965 if (ret < 0)
966 goto err;
967 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
968 if (ret < 0)
969 goto err;
971 reg = 0x1182;
972 buf = 0x02;
973 ret = usb_microdia_control_write(dev, reg, &buf, 1);
974 if (ret < 0)
975 goto err;
977 reg = 0x10c0;
978 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x09; buf24[3] = 0x03;
979 buf24[4] = 0xe8; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
980 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 208..224 */
981 if (ret < 0)
982 goto err;
984 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
985 if (ret < 0)
986 goto err;
987 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
988 if (ret < 0)
989 goto err;
991 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
992 buf24[4] = 0x03; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
993 ret = usb_microdia_control_write(dev, reg, buf24, 8);
994 if (ret < 0)
995 goto err;
997 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
998 if (ret < 0)
999 goto err;
1000 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
1001 if (ret < 0)
1002 goto err;
1004 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x2b; buf24[3] = 0x00;
1005 buf24[4] = 0x10; buf24[5] = 0x00; buf24[6] = 0x10; buf24[7] = 0x10;
1006 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 214 */
1007 if (ret < 0)
1008 goto err;
1010 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
1011 if (ret < 0)
1012 goto err;
1013 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
1014 if (ret < 0)
1015 goto err;
1017 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x2d; buf24[3] = 0x00;
1018 buf24[4] = 0x10; buf24[5] = 0x00; buf24[6] = 0x10; buf24[7] = 0x10;
1019 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1020 if (ret < 0)
1021 goto err;
1023 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
1024 if (ret < 0)
1025 goto err;
1026 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
1027 if (ret < 0)
1028 goto err;
1030 buf24[0] = 0x90; buf24[1] = 0x5d; buf24[2] = 0x33; buf24[3] = 0x00;
1031 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1032 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1033 if(ret < 0) goto err;
1035 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 94 */
1036 if (ret < 0)
1037 goto err;
1039 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
1040 buf24[4] = 0x02; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1041 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1042 if (ret < 0)
1043 goto err;
1045 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
1046 if (ret < 0)
1047 goto err;
1048 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
1049 if (ret < 0)
1050 goto err;
1052 reg = 0x11a5;
1053 buf24[0] = 0x2d; buf24[1] = 0x2d; buf24[2] = 0x3a; buf24[3] = 0x05;
1054 buf24[4] = 0x04; buf24[5] = 0x3f;
1055 ret = usb_microdia_control_write(dev, reg, buf24, 6);
1056 if (ret < 0)
1057 goto err;
1058 reg = 0x11af;
1059 buf24[0] = 0x28; buf24[1] = 0xd8; buf24[2] = 0x14; buf24[3] = 0xec;
1060 ret = usb_microdia_control_write(dev, reg, buf24, 4);
1061 if (ret < 0)
1062 goto err;
1063 reg = 0x11b3;
1064 buf24[0] = 0x32; buf24[1] = 0xdd; buf24[2] = 0x2d; buf24[3] = 0xdd;
1065 ret = usb_microdia_control_write(dev, reg, buf24, 4);
1066 if (ret < 0)
1067 goto err;
1069 reg = 0x10c0;
1070 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
1071 buf24[4] = 0x03; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1072 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 232..242 */
1073 if (ret < 0)
1074 goto err;
1076 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
1077 if (ret < 0)
1078 goto err;
1079 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
1080 if (ret < 0)
1081 goto err;
1083 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x2c; buf24[3] = 0x00;
1084 buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x1d; buf24[7] = 0x10;
1085 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1086 if (ret < 0)
1087 goto err;
1089 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
1090 if (ret < 0)
1091 goto err;
1092 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
1093 if (ret < 0)
1094 goto err;
1096 buf24[0] = 0x90; buf24[1] = 0x5d; buf24[2] = 0x30; buf24[3] = 0x00;
1097 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1098 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1099 if (ret < 0)
1100 goto err;
1102 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 94 */
1103 if (ret < 0)
1104 goto err;
1106 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
1107 buf24[4] = 0x02; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1108 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1109 if (ret < 0)
1110 goto err;
1112 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
1113 if (ret < 0)
1114 goto err;
1115 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
1116 if (ret < 0)
1117 goto err;
1119 reg = 0x10e0;
1120 buf = 0x07;
1121 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1122 if (ret < 0)
1123 goto err;
1124 buf = 0x27;
1125 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1126 if (ret < 0)
1127 goto err;
1129 reg = 0x1100;
1130 ret = usb_microdia_control_write(dev, reg, buf1100, 64); /* URB 249 (see also 509/510) */
1131 if (ret < 0)
1132 goto err;
1134 reg = 0x1140; /* 00000000: */
1135 buf64[0] = 0x0d; buf64[1] = 0x11; buf64[2] = 0x11; buf64[3] = 0x15;
1136 buf64[4] = 0x11; buf64[5] = 0x15; buf64[6] = 0x26; buf64[7] = 0x15;
1137 buf64[8] = 0x15; buf64[9] = 0x26; buf64[10] = 0x54; buf64[11] = 0x36;
1138 buf64[12] = 0x2e; buf64[13] = 0x36; buf64[14] = 0x54; buf64[15] = 0x54; /* 00000010: .. 00000030: 0x54 */
1139 for(i=16; i<=63; i++) buf64[i] = 0x54;
1140 ret = usb_microdia_control_write(dev, reg, buf64, 64); /* URB 250 */
1141 if (ret < 0)
1142 goto err;
1144 reg = 0x10e0;
1145 buf = 0x07;
1146 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1147 if (ret < 0)
1148 goto err;
1149 buf = 0x0b;
1150 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1151 if (ret < 0)
1152 goto err;
1154 reg = 0x1189;
1155 buf = 0x0c;
1156 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1157 if (ret < 0)
1158 goto err;
1160 buf = 0x00;
1161 reg = 0x11bc;
1162 ret = usb_microdia_control_write(dev, reg, &buf, 1); /* URB 254..257 */
1163 if (ret < 0)
1164 goto err;
1165 reg = 0x11bd;
1166 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1167 if (ret < 0)
1168 goto err;
1169 reg = 0x11be;
1170 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1171 if (ret < 0)
1172 goto err;
1173 reg = 0x11bf;
1174 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1175 if (ret < 0)
1176 goto err;
1178 reg = 0x1180;
1179 buf24[0] = 0x02; buf24[1] = 0x00; buf24[2] = 0x02; buf24[3] = 0x00;
1180 buf24[4] = 0x28; buf24[5] = 0x3c;
1181 ret = usb_microdia_control_write(dev, reg, buf24, 6);
1182 if (ret < 0)
1183 goto err;
1185 reg = 0x10fb;
1186 buf24[0] = 0x00; buf24[1] = 0xa0; buf24[2] = 0x00; buf24[3] = 0xf0;
1187 buf24[4] = 0x00;
1188 ret = usb_microdia_control_write(dev, reg, buf24, 5);
1189 if (ret < 0)
1190 goto err;
1192 reg = 0x1189;
1193 buf = 0x0c;
1194 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1195 if (ret < 0)
1196 goto err;
1198 reg = 0x11a1;
1199 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x6a; buf24[3] = 0x50;
1200 ret = usb_microdia_control_write(dev, reg, buf24, 4);
1201 if (ret < 0)
1202 goto err;
1203 reg = 0x11ab;
1204 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x50; buf24[3] = 0x3c;
1205 ret = usb_microdia_control_write(dev, reg, buf24, 4);
1206 if (ret < 0)
1207 goto err;
1209 reg = 0x1061;
1210 buf = 0x03;
1211 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1212 if (ret < 0)
1213 goto err;
1214 reg = 0x11ba;
1215 buf = 0x0a;
1216 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1217 if (ret < 0)
1218 goto err;
1219 reg = 0x11b9;
1220 buf = 0x00;
1221 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1222 if (ret < 0)
1223 goto err;
1224 reg = 0x11ba;
1225 buf = 0x0b;
1226 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1227 if (ret < 0)
1228 goto err;
1229 reg = 0x1061;
1230 buf = 0x01;
1231 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1232 if (ret < 0)
1233 goto err;
1234 reg = 0x1000;
1235 buf = 0x7c;
1236 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1237 if (ret < 0)
1238 goto err;
1239 reg = 0x1002;
1240 buf = 0x1c;
1241 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1242 if (ret < 0)
1243 goto err;
1244 buf = 0x1c;
1245 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1246 if (ret < 0)
1247 goto err;
1248 reg = 0x11b8;
1249 buf = 0x78;
1250 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1251 if (ret < 0)
1252 goto err;
1253 reg = 0x118a;
1254 buf = 0x05;
1255 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1256 if (ret < 0)
1257 goto err;
1258 reg = 0x0395;
1259 buf = 0x05;
1260 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1261 if (ret < 0)
1262 goto err;
1265 reg = 0x11b8;
1266 buf = 0x78;
1267 ret = usb_microdia_control_write(dev, reg, &buf, 1); /* URB 274..284 */
1268 if (ret < 0)
1269 goto err;
1270 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 38 */
1271 if (ret < 0)
1272 goto err;
1273 buf = 0x79;
1274 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1275 if (ret < 0)
1276 goto err;
1277 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 39 */
1278 if (ret < 0)
1279 goto err;
1280 buf = 0x7a;
1281 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1282 if (ret < 0)
1283 goto err;
1284 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 3a */
1285 if (ret < 0)
1286 goto err;
1287 buf = 0x7b;
1288 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1289 if (ret < 0)
1290 goto err;
1291 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << bb */
1292 if (ret < 0)
1293 goto err;
1294 buf = 0xfc;
1295 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1296 if (ret < 0)
1297 goto err;
1298 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 3c */
1299 if (ret < 0)
1300 goto err;
1301 buf = 0x78;
1302 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1303 if (ret < 0)
1304 goto err;
1305 /* // <-- 0x11b8 */
1306 reg = 0x10c0;
1307 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x06; buf24[3] = 0x00;
1308 buf24[4] = 0xf2; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1309 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 285..295 */
1310 if (ret < 0)
1311 goto err;
1313 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
1314 if (ret < 0)
1315 goto err;
1316 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
1317 if (ret < 0)
1318 goto err;
1320 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x05; buf24[3] = 0x00;
1321 buf24[4] = 0x13; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1322 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1323 if (ret < 0)
1324 goto err;
1326 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
1327 if (ret < 0)
1328 goto err;
1329 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
1330 if (ret < 0)
1331 goto err;
1333 buf24[0] = 0x90; buf24[1] = 0x5d; buf24[2] = 0x00; buf24[3] = 0x00;
1334 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1335 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1336 if (ret < 0)
1337 goto err;
1339 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 94 */
1340 if (ret < 0)
1341 goto err;
1343 buf24[0] = 0xa2; buf24[1] = 0x5d; buf24[2] = 0x00; buf24[3] = 0x00;
1344 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1345 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1346 if (ret < 0)
1347 goto err;
1349 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << a2 */
1350 if (ret < 0)
1351 goto err;
1352 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << a6 */
1353 if (ret < 0)
1354 goto err;
1355 /* // <-- 0x10c0 */
1356 reg = 0x10c2;
1357 ret = usb_microdia_control_read(dev, reg, buf24, 5); /* URB 296 // << 00 00 00 84 31 */
1358 if (ret < 0)
1359 goto err;
1361 reg = 0x1061;
1362 buf = 0x03;
1363 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1364 if (ret < 0)
1365 goto err;
1366 buf = 0x01;
1367 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1368 if (ret < 0)
1369 goto err;
1371 reg = 0x10c0;
1372 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
1373 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1374 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1375 if (ret < 0)
1376 goto err;
1378 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
1379 if (ret < 0)
1380 goto err;
1381 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
1382 if (ret < 0)
1383 goto err;
1385 reg = 0x1000;
1386 buf = 0x3c;
1387 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1388 if (ret < 0)
1389 goto err;
1390 reg = 0x11b8;
1391 buf = 0x68;
1392 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1393 if (ret < 0)
1394 goto err;
1395 reg = 0x1007;
1396 buf = 0xa0;
1397 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1398 if (ret < 0)
1399 goto err;
1400 reg = 0x1006;
1401 buf = 0xa0;
1402 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1403 if (ret < 0)
1404 goto err;
1406 reg = 0x1000;
1407 buf24[0] = 0x98; buf24[1] = 0xef; buf24[2] = 0x11;
1408 ret = usb_microdia_control_write(dev, reg, buf24, 3);
1409 if (ret < 0)
1410 goto err;
1412 /* UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1413 // URB 307 <<< GETTING SELECT_INTERFACE Interface: AlternateSetting = 0
1414 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1417 reg = 0x1066;
1418 buf = 0x00;
1419 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1420 if (ret < 0)
1421 goto err;
1423 /* UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1424 // URB 310 <<< GETTING SELECT_INTERFACE Interface: AlternateSetting = 8
1425 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1427 ret = usb_microdia_control_write(dev, reg, &buf, 1); /* URB 312 */
1428 if (ret < 0)
1429 goto err;
1431 /* UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1432 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1435 reg = 0x1007;
1436 buf = 0xa0;
1437 ret = usb_microdia_control_write(dev, reg, &buf, 1); /* URB 314 */
1438 if (ret < 0)
1439 goto err;
1440 reg = 0x1006;
1441 buf = 0x80;
1442 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1443 if (ret < 0)
1444 goto err;
1445 reg = 0x1000;
1446 buf = 0x78;
1447 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1448 if (ret < 0)
1449 goto err;
1450 reg = 0x1001;
1451 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << ef */
1452 if (ret < 0)
1453 goto err;
1454 buf = 0xc7;
1455 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1456 if (ret < 0)
1457 goto err;
1458 reg = 0x1002;
1459 buf = 0x18;
1460 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1461 if (ret < 0)
1462 goto err;
1464 reg = 0x1007;
1465 ret = usb_microdia_control_read(dev, reg, buf24, 7); /* URB 320 // << a0 00 ff 81 00 00 00 */
1466 if (ret < 0)
1467 goto err;
1468 reg = 0x1006;
1469 buf24[0] = 0x80; buf24[1] = 0xa0;
1470 ret = usb_microdia_control_write(dev, reg, buf24, 2);
1471 if (ret < 0)
1472 goto err;
1474 reg = 0x1061;
1475 buf = 0x01;
1476 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1477 if (ret < 0)
1478 goto err;
1479 reg = 0x1020;
1480 buf = 0x80;
1481 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1482 if (ret < 0)
1483 goto err;
1485 reg = 0x1067;
1486 buf24[0] = 0x40; buf24[1] = 0x30; buf24[2] = 0x20; buf24[3] = 0x10;
1487 buf24[4] = 0x08;
1488 ret = usb_microdia_control_write(dev, reg, buf24, 5);
1489 if (ret < 0)
1490 goto err;
1492 reg = 0x10c0;
1493 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
1494 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1495 buf24[8] = 0x03;
1496 ret = usb_microdia_control_write(dev, reg, buf24, 9);
1497 if (ret < 0)
1498 goto err;
1500 reg = 0x10e0;
1501 /* // 00000000: */
1502 buf = 0x45;
1503 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1504 if (ret < 0)
1505 goto err;
1506 reg = 0x10f5;
1507 buf = 0x60;
1508 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1509 if (ret < 0)
1510 goto err;
1512 reg = 0x10f8;
1513 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x00;
1514 ret = usb_microdia_control_write(dev, reg, buf24, 3);
1515 if (ret < 0)
1516 goto err;
1518 reg = 0x10fb;
1519 buf24[0] = 0x00; buf24[1] = 0xa0; buf24[2] = 0x00; buf24[3] = 0xf0;
1520 buf24[4] = 0x00;
1521 ret = usb_microdia_control_write(dev, reg, buf24, 5);
1522 if (ret < 0)
1523 goto err;
1525 reg = 0x1188;
1526 buf24[0] = 0x06; buf24[1] = 0x4c; buf24[2] = 0x08;
1527 ret = usb_microdia_control_write(dev, reg, buf24, 3);
1528 if (ret < 0)
1529 goto err;
1531 reg = 0x118b;
1532 /* // 00000000: */
1533 buf24[0] = 0x00; buf24[1] = 0x20; buf24[2] = 0x20; buf24[3] = 0x20;
1534 buf24[4] = 0x20; buf24[5] = 0x00; buf24[6] = 0x24; buf24[7] = 0x3b;
1535 buf24[8] = 0x4f; buf24[9] = 0x61; buf24[10] = 0x71; buf24[11] = 0x80;
1536 buf24[12] = 0x8f; buf24[13] = 0x9d; buf24[14] = 0xab; buf24[15] = 0xb8;
1537 /* // 00000010: */
1538 buf24[16] = 0xc4; buf24[17] = 0xd1; buf24[18] = 0xdd; buf24[19] = 0xe9;
1539 buf24[20] = 0xf4; buf24[21] = 0xff;
1540 ret = usb_microdia_control_write(dev, reg, buf24, 22); /* URB 330 */
1541 if (ret < 0)
1542 goto err;
1544 reg = 0x11a1;
1545 buf24[0] = 0x00; buf24[1] = 0x00;
1546 ret = usb_microdia_control_write(dev, reg, buf24, 2);
1547 if (ret < 0)
1548 goto err;
1550 reg = 0x11b7;
1551 buf24[0] = 0x60; buf24[1] = 0x28; buf24[2] = 0x00; buf24[3] = 0x08;
1552 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x00;
1553 buf24[8] = 0x00;
1554 ret = usb_microdia_control_write(dev, reg, buf24, 9);
1555 if (ret < 0)
1556 goto err;
1558 reg = 0x11b8;
1559 buf = 0x38;
1560 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1561 if (ret < 0)
1562 goto err;
1563 reg = 0x1000;
1564 buf = 0x78;
1565 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1566 if (ret < 0)
1567 goto err;
1569 reg = 0x10c0;
1570 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
1571 buf24[4] = 0x02; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1572 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 335..390 */
1573 if (ret < 0)
1574 goto err;
1576 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
1577 if (ret < 0)
1578 goto err;
1579 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
1580 if (ret < 0)
1581 goto err;
1583 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x0d; buf24[3] = 0x00;
1584 buf24[4] = 0x01; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1585 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1586 if (ret < 0)
1587 goto err;
1589 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
1590 if (ret < 0)
1591 goto err;
1592 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
1593 if (ret < 0)
1594 goto err;
1596 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x0d; buf24[3] = 0x00;
1597 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1598 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1599 if (ret < 0)
1600 goto err;
1602 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
1603 if (ret < 0)
1604 goto err;
1605 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
1606 if (ret < 0)
1607 goto err;
1609 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x01; buf24[3] = 0x00;
1610 buf24[4] = 0x0e; buf24[5] = 0x00; buf24[6] = 0x14; buf24[7] = 0x10;
1611 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 344 */
1612 if (ret < 0)
1613 goto err;
1615 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
1616 if (ret < 0)
1617 goto err;
1618 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
1619 if (ret < 0)
1620 goto err;
1622 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x03; buf24[3] = 0x03;
1623 buf24[4] = 0xc1; buf24[5] = 0x05; buf24[6] = 0x01; buf24[7] = 0x10;
1624 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1625 if (ret < 0)
1626 goto err;
1628 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
1629 if (ret < 0)
1630 goto err;
1631 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
1632 if (ret < 0)
1633 goto err;
1635 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x05; buf24[3] = 0x00;
1636 buf24[4] = 0x83; buf24[5] = 0x00; buf24[6] = 0x06; buf24[7] = 0x10;
1637 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1638 if (ret < 0)
1639 goto err;
1641 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
1642 if (ret < 0)
1643 goto err;
1644 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
1645 if (ret < 0)
1646 goto err;
1648 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x0d; buf24[3] = 0x00;
1649 buf24[4] = 0x02; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1650 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1651 if (ret < 0)
1652 goto err;
1654 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
1655 if (ret < 0)
1656 goto err;
1657 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
1658 if (ret < 0)
1659 goto err;
1661 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x09; buf24[3] = 0x00;
1662 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1663 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 356 */
1664 if (ret < 0)
1665 goto err;
1667 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
1668 if(ret < 0) goto err;
1669 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
1670 if (ret < 0)
1671 goto err;
1673 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x0b; buf24[3] = 0x00;
1674 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1675 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1676 if (ret < 0)
1677 goto err;
1679 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
1680 if (ret < 0)
1681 goto err;
1682 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
1683 if (ret < 0)
1684 goto err;
1686 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x11; buf24[3] = 0x00;
1687 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1688 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1689 if (ret < 0)
1690 goto err;
1692 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
1693 if (ret < 0)
1694 goto err;
1695 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
1696 if (ret < 0)
1697 goto err;
1699 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x1e; buf24[3] = 0x80;
1700 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1701 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 365 */
1702 if (ret < 0)
1703 goto err;
1705 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
1706 if (ret < 0)
1707 goto err;
1708 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
1709 if (ret < 0)
1710 goto err;
1712 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x20; buf24[3] = 0x11;
1713 buf24[4] = 0x05; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1714 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1715 if (ret < 0)
1716 goto err;
1718 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
1719 if (ret < 0)
1720 goto err;
1721 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
1722 if (ret < 0)
1723 goto err;
1725 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x2b; buf24[3] = 0x00;
1726 buf24[4] = 0x08; buf24[5] = 0x00; buf24[6] = 0x10; buf24[7] = 0x10;
1727 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1728 if (ret < 0)
1729 goto err;
1731 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
1732 if (ret < 0)
1733 goto err;
1734 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
1735 if (ret < 0)
1736 goto err;
1738 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x2d; buf24[3] = 0x00;
1739 buf24[4] = 0x14; buf24[5] = 0x00; buf24[6] = 0x08; buf24[7] = 0x10;
1740 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1741 if (ret < 0)
1742 goto err;
1744 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
1745 if (ret < 0)
1746 goto err;
1747 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
1748 if (ret < 0)
1749 goto err;
1751 buf24[0] = 0x90; buf24[1] = 0x5d; buf24[2] = 0x33; buf24[3] = 0x00;
1752 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1753 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 377 */
1754 if (ret < 0)
1755 goto err;
1757 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 94 */
1758 if (ret < 0)
1759 goto err;
1761 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x5f; buf24[3] = 0x89;
1762 buf24[4] = 0x04; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1763 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1764 if (ret < 0)
1765 goto err;
1767 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
1768 if (ret < 0)
1769 goto err;
1770 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << b4
1771 if (ret < 0)
1772 goto err;
1774 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x60; buf24[3] = 0x00;
1775 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1776 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1777 if (ret < 0)
1778 goto err;
1780 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
1781 if (ret < 0)
1782 goto err;
1783 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << d4
1784 if (ret < 0)
1785 goto err;
1787 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x62; buf24[3] = 0x04;
1788 buf24[4] = 0x98; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1789 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 385 */
1790 if (ret < 0)
1791 goto err;
1793 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
1794 if (ret < 0)
1795 goto err;
1796 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
1797 if (ret < 0)
1798 goto err;
1800 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x68; buf24[3] = 0x00;
1801 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1802 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1803 if (ret < 0)
1804 goto err;
1806 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
1807 if (ret < 0)
1808 goto err;
1809 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
1810 if (ret < 0)
1811 goto err;
1812 /* // <-- 0x10c0 */
1813 reg = 0x10e0;
1814 buf = 0x47;
1815 ret = usb_microdia_control_write(dev, reg, &buf, 1); /* URB 391 */
1816 if (ret < 0)
1817 goto err;
1818 buf = 0x07;
1819 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1820 if (ret < 0)
1821 goto err;
1823 reg = 0x1001;
1824 buf = 0xc6;
1825 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1826 if (ret < 0)
1827 goto err;
1828 buf = 0xc4;
1829 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1830 if (ret < 0)
1831 goto err;
1832 buf = 0x44;
1833 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1834 if (ret < 0)
1835 goto err;
1837 reg = 0x1189;
1838 buf = 0x0c;
1839 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1840 if (ret < 0)
1841 goto err;
1843 buf = 0x00;
1844 reg = 0x11bc;
1845 ret = usb_microdia_control_write(dev, reg, &buf, 1); /* URB 397..400 */
1846 if (ret < 0)
1847 goto err;
1848 reg = 0x11bd;
1849 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1850 if (ret < 0)
1851 goto err;
1852 reg = 0x11be;
1853 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1854 if (ret < 0)
1855 goto err;
1856 reg = 0x11bf;
1857 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1858 if (ret < 0)
1859 goto err;
1861 reg = 0x10c0;
1862 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x20; buf24[3] = 0x11;
1863 buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1864 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 401 */
1865 if (ret < 0)
1866 goto err;
1868 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
1869 if (ret < 0)
1870 goto err;
1871 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
1872 if (ret < 0)
1873 goto err;
1875 reg = 0x1180;
1876 buf24[0] = 0x02; buf24[1] = 0x00; buf24[2] = 0x02; buf24[3] = 0x00;
1877 buf24[4] = 0x28; buf24[5] = 0x3c;
1878 ret = usb_microdia_control_write(dev, reg, buf24, 6);
1879 if (ret < 0)
1880 goto err;
1881 reg = 0x10fb;
1882 buf24[0] = 0x00; buf24[1] = 0xa0; buf24[2] = 0x00; buf24[3] = 0xf0;
1883 buf24[4] = 0x00;
1884 ret = usb_microdia_control_write(dev, reg, buf24, 5);
1885 if (ret < 0)
1886 goto err;
1888 reg = 0x1189;
1889 buf = 0x0c;
1890 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1891 if (ret < 0)
1892 goto err;
1894 reg = 0x11a1;
1895 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x6a; buf24[3] = 0x50;
1896 ret = usb_microdia_control_write(dev, reg, buf24, 4);
1897 if (ret < 0)
1898 goto err;
1899 reg = 0x11ab;
1900 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x50; buf24[3] = 0x3c;
1901 ret = usb_microdia_control_write(dev, reg, buf24, 4);
1902 if (ret < 0)
1903 goto err;
1905 reg = 0x1000;
1906 buf = 0x7c;
1907 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1908 if (ret < 0)
1909 goto err;
1911 reg = 0x1002;
1912 buf = 0x1c;
1913 for(i=410; i<=411; i++){
1914 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1915 if (ret < 0)
1916 goto err;
1919 reg = 0x11b8;
1920 buf = 0x38;
1921 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1922 if (ret < 0)
1923 goto err;
1924 reg = 0x118a;
1925 buf = 0x05;
1926 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1927 if (ret < 0)
1928 goto err;
1929 reg = 0x0395;
1930 buf = 0x05;
1931 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1932 if (ret < 0)
1933 goto err;
1935 reg = 0x11b8;
1936 buf = 0x78;
1937 ret = usb_microdia_control_write(dev, reg, &buf, 1); /* URB 415..425 */
1938 if (ret < 0)
1939 goto err;
1940 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 38 */
1941 if (ret < 0)
1942 goto err;
1943 buf = 0x79;
1944 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1945 if (ret < 0)
1946 goto err;
1947 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 39 */
1948 if (ret < 0)
1949 goto err;
1950 buf = 0x7a;
1951 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1952 if (ret < 0)
1953 goto err;
1954 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 3a */
1955 if (ret < 0)
1956 goto err;
1957 buf = 0x7b;
1958 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1959 if (ret < 0)
1960 goto err;
1961 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << bb */
1962 if (ret < 0)
1963 goto err;
1964 buf = 0xfc;
1965 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1966 if (ret < 0)
1967 goto err;
1968 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 3c */
1969 if (ret < 0)
1970 goto err;
1971 buf = 0x78;
1972 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1973 if (ret < 0)
1974 goto err;
1975 /* // <-- 0x11b8 */
1976 reg = 0x10c0;
1978 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x06; buf24[3] = 0x00;
1979 buf24[4] = 0xf2; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1980 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 426..431 */
1981 if (ret < 0)
1982 goto err;
1984 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
1985 if (ret < 0)
1986 goto err;
1987 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
1988 if (ret < 0)
1989 goto err;
1991 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x05; buf24[3] = 0x00;
1992 buf24[4] = 0x13; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
1993 ret = usb_microdia_control_write(dev, reg, buf24, 8);
1994 if (ret < 0)
1995 goto err;
1997 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
1998 if (ret < 0)
1999 goto err;
2000 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
2001 if (ret < 0)
2002 goto err;
2003 /* // <-- 0x10c0 */
2004 reg = 0x11ba;
2005 buf = 0x0a;
2006 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2007 if (ret < 0)
2008 goto err;
2010 reg = 0x118b;
2011 buf = 0x0a;
2012 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2013 if (ret < 0)
2014 goto err;
2016 reg = 0x10f7;
2017 buf = 0x07;
2018 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2019 if (ret < 0)
2020 goto err;
2022 reg = 0x10f8;
2023 buf = 0x14;
2024 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2025 if (ret < 0)
2026 goto err;
2027 reg = 0x10fa;
2028 buf = 0xff;
2029 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2030 if (ret < 0)
2031 goto err;
2033 reg = 0x10f9;
2034 buf = 0x00;
2035 for(i=453; i<454; i++){
2036 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2037 if (ret < 0)
2038 goto err;
2041 reg = 0x11ba;
2042 buf = 0x0a;
2043 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2044 if (ret < 0)
2045 goto err;
2047 reg = 0x11bc;
2048 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x00; buf24[3] = 0x00;
2049 ret = usb_microdia_control_write(dev, reg, buf24, 4);
2050 if (ret < 0)
2051 goto err;
2053 reg = 0x11c0;
2054 for (i = 0; i < 48; i++)
2055 buf64[i] = 0; /* // zeroes */
2056 ret = usb_microdia_control_write(dev, reg, buf64, 48); /* URB 457 */
2057 if (ret < 0)
2058 goto err;
2060 reg = 0x10c0;
2061 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x20; buf24[3] = 0x11;
2062 buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2063 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 462 */
2064 if (ret < 0)
2065 goto err;
2067 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
2068 if (ret < 0)
2069 goto err;
2070 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
2071 if (ret < 0)
2072 goto err;
2074 reg = 0x1180;
2075 buf = 0x02;
2076 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2077 if (ret < 0)
2078 goto err;
2080 reg = 0x10c0;
2081 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x20; buf24[3] = 0x11;
2082 buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2083 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 466 */
2084 if (ret < 0)
2085 goto err;
2087 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
2088 if (ret < 0)
2089 goto err;
2090 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
2091 if (ret < 0)
2092 goto err;
2094 reg = 0x1182;
2095 buf = 0x02;
2096 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2097 if (ret < 0)
2098 goto err;
2100 reg = 0x10c0;
2101 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
2102 buf24[4] = 0x03; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2103 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 470..483 */
2104 if (ret < 0)
2105 goto err;
2107 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
2108 if (ret < 0)
2109 goto err;
2110 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
2111 if (ret < 0)
2112 goto err;
2114 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x2b; buf24[3] = 0x00;
2115 buf24[4] = 0x10; buf24[5] = 0x00; buf24[6] = 0x10; buf24[7] = 0x10;
2116 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2117 if (ret < 0)
2118 goto err;
2120 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
2121 if (ret < 0)
2122 goto err;
2123 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
2124 if (ret < 0)
2125 goto err;
2127 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x2d; buf24[3] = 0x00;
2128 buf24[4] = 0x10; buf24[5] = 0x00; buf24[6] = 0x10; buf24[7] = 0x10;
2129 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2130 if (ret < 0)
2131 goto err;
2133 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d0 */
2134 if (ret < 0)
2135 goto err;
2136 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
2137 if (ret < 0)
2138 goto err;
2140 buf24[0] = 0x90; buf24[1] = 0x5d; buf24[2] = 0x33; buf24[3] = 0x00;
2141 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2142 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 479 */
2143 if (ret < 0)
2144 goto err;
2146 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 94 */
2147 if (ret < 0)
2148 goto err;
2150 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
2151 buf24[4] = 0x02; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2152 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2153 if (ret < 0)
2154 goto err;
2156 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
2157 if (ret < 0)
2158 goto err;
2159 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
2160 if (ret < 0)
2161 goto err;
2162 /* // <-- 0x10c0 */
2163 reg = 0x11a5;
2164 buf24[0] = 0x2d; buf24[1] = 0x2d; buf24[2] = 0x3a; buf24[3] = 0x05;
2165 buf24[4] = 0x04; buf24[5] = 0x3f;
2166 ret = usb_microdia_control_write(dev, reg, buf24, 6);
2167 if (ret < 0)
2168 goto err;
2169 reg = 0x11af;
2170 buf24[0] = 0x28; buf24[1] = 0xd8; buf24[2] = 0x14; buf24[3] = 0xec;
2171 ret = usb_microdia_control_write(dev, reg, buf24, 4);
2172 if (ret < 0)
2173 goto err;
2174 reg = 0x11b3;
2175 buf24[0] = 0x32; buf24[1] = 0xdd; buf24[2] = 0x2d; buf24[3] = 0xdd;
2176 ret = usb_microdia_control_write(dev, reg, buf24, 4);
2177 if (ret < 0)
2178 goto err;
2180 reg = 0x10c0;
2181 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
2182 buf24[4] = 0x03; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2183 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 491..502 */
2184 if (ret < 0)
2185 goto err;
2187 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
2188 if (ret < 0)
2189 goto err;
2190 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
2191 if (ret < 0)
2192 goto err;
2194 buf24[0] = 0xd0; buf24[1] = 0x5d; buf24[2] = 0x2c; buf24[3] = 0x00;
2195 buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x1d; buf24[7] = 0x10;
2196 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2197 if (ret < 0)
2198 goto err;
2200 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 495: d0 */
2201 if (ret < 0)
2202 goto err;
2203 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 496: d0 */
2204 if (ret < 0)
2205 goto err;
2206 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << d4 */
2207 if (ret < 0)
2208 goto err;
2210 buf24[0] = 0x90; buf24[1] = 0x5d; buf24[2] = 0x30; buf24[3] = 0x00;
2211 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2212 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2213 if (ret < 0)
2214 goto err;
2216 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 94 */
2217 if (ret < 0)
2218 goto err;
2220 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x07; buf24[3] = 0x00;
2221 buf24[4] = 0x02; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2222 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2223 if (ret < 0)
2224 goto err;
2226 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
2227 if (ret < 0)
2228 goto err;
2229 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
2230 if (ret < 0)
2231 goto err;
2232 /* // <-- 0x10c0 */
2233 reg = 0x10e0;
2234 buf = 0x07;
2235 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2236 if (ret < 0)
2237 goto err;
2238 buf = 0x27;
2239 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2240 if (ret < 0)
2241 goto err;
2243 reg = 0x1100;
2244 ret = usb_microdia_control_write(dev, reg, buf1100, 64); /* URB 509 (see also 249/250) */
2245 if (ret < 0)
2246 goto err;
2248 reg = 0x1140;
2249 /* // 00000000: */
2250 buf64[0] = 0x0d; buf64[1] = 0x11; buf64[2] = 0x11; buf64[3] = 0x15;
2251 buf64[4] = 0x11; buf64[5] = 0x15; buf64[6] = 0x26; buf64[7] = 0x15;
2252 buf64[8] = 0x15; buf64[9] = 0x26; buf64[10] = 0x54; buf64[11] = 0x36;
2253 buf64[12] = 0x2e; buf64[13] = 0x36; buf64[14] = 0x54; buf64[15] = 0x54;
2254 /* // 00000010: .. 00000030: 0x54 */
2255 for(i=16; i<=63; i++) buf64[i] = 0x54;
2256 ret = usb_microdia_control_write(dev, reg, buf64, 64); /* URB 510 */
2257 if (ret < 0)
2258 goto err;
2260 reg = 0x10e0;
2261 buf = 0x07;
2262 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2263 if (ret < 0)
2264 goto err;
2265 buf = 0x0b;
2266 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2267 if (ret < 0)
2268 goto err;
2270 reg = 0x1189;
2271 buf = 0x0c;
2272 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2273 if (ret < 0)
2274 goto err;
2276 buf = 0x00;
2277 reg = 0x11bc;
2278 ret = usb_microdia_control_write(dev, reg, &buf, 1); /* URB 514..517 */
2279 if (ret < 0)
2280 goto err;
2281 reg = 0x11bd;
2282 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2283 if (ret < 0)
2284 goto err;
2285 reg = 0x11be;
2286 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2287 if (ret < 0)
2288 goto err;
2289 reg = 0x11bf;
2290 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2291 if (ret < 0)
2292 goto err;
2294 reg = 0x1180;
2295 buf24[0] = 0x02; buf24[1] = 0x00; buf24[2] = 0x02; buf24[3] = 0x00;
2296 buf24[4] = 0x28; buf24[5] = 0x3c;
2297 ret = usb_microdia_control_write(dev, reg, buf24, 6);
2299 reg = 0x10fb;
2300 buf24[0] = 0x00; buf24[1] = 0xa0; buf24[2] = 0x00; buf24[3] = 0xf0;
2301 buf24[4] = 0x00;
2302 ret = usb_microdia_control_write(dev, reg, buf24, 5);
2304 reg = 0x1189;
2305 buf = 0x0c;
2306 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2307 if (ret < 0)
2308 goto err;
2310 reg = 0x11a1;
2311 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x6a; buf24[3] = 0x50;
2312 ret = usb_microdia_control_write(dev, reg, buf24, 4);
2314 reg = 0x11ab;
2315 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x50; buf24[3] = 0x3c;
2316 ret = usb_microdia_control_write(dev, reg, buf24, 4);
2318 reg = 0x1061;
2319 buf = 0x03;
2320 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2321 if (ret < 0)
2322 goto err;
2323 reg = 0x11ba;
2324 buf = 0x0a;
2325 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2326 if (ret < 0)
2327 goto err;
2328 reg = 0x11b9;
2329 buf = 0x00;
2330 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2331 if (ret < 0)
2332 goto err;
2333 reg = 0x11ba;
2334 buf = 0x0b;
2335 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2336 if (ret < 0)
2337 goto err;
2338 reg = 0x1061;
2339 buf = 0x01;
2340 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2341 if (ret < 0)
2342 goto err;
2343 reg = 0x1000;
2344 buf = 0x7c;
2345 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2346 if (ret < 0)
2347 goto err;
2349 reg = 0x1002;
2350 buf = 0x1c;
2351 for(i=529; i<=530; i++){
2352 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2353 if (ret < 0)
2354 goto err;
2357 reg = 0x11b8;
2358 buf = 0x78;
2359 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2360 if (ret < 0)
2361 goto err;
2362 reg = 0x118a;
2363 buf = 0x05;
2364 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2365 if (ret < 0)
2366 goto err;
2367 reg = 0x0395;
2368 buf = 0x05;
2369 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2370 if (ret < 0)
2371 goto err;
2373 reg = 0x11b8;
2374 buf = 0x78;
2375 ret = usb_microdia_control_write(dev, reg, &buf, 1); /* URB 534..544 */
2376 if (ret < 0)
2377 goto err;
2378 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 38 */
2379 if (ret < 0)
2380 goto err;
2381 buf = 0x79;
2382 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2383 if (ret < 0)
2384 goto err;
2385 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 39 */
2386 if (ret < 0)
2387 goto err;
2388 buf = 0x7a;
2389 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2390 if (ret < 0)
2391 goto err;
2392 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 3a */
2393 if (ret < 0)
2394 goto err;
2395 buf = 0x7b;
2396 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2397 if (ret < 0)
2398 goto err;
2399 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << bb */
2400 if (ret < 0)
2401 goto err;
2402 buf = 0xfc;
2403 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2404 if (ret < 0)
2405 goto err;
2406 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 3c */
2407 if (ret < 0)
2408 goto err;
2409 buf = 0x78;
2410 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2411 if (ret < 0)
2412 goto err;
2413 /* // <-- 0x11b8 */
2414 reg = 0x10c0;
2415 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x06; buf24[3] = 0x00;
2416 buf24[4] = 0xf2; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2417 ret = usb_microdia_control_write(dev, reg, buf24, 8); /* URB 545..555 */
2418 if (ret < 0)
2419 goto err;
2421 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
2422 if (ret < 0)
2423 goto err;
2424 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
2425 if (ret < 0)
2426 goto err;
2428 buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x05; buf24[3] = 0x00;
2429 buf24[4] = 0x13; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2430 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2431 if (ret < 0)
2432 goto err;
2434 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b0 */
2435 if (ret < 0)
2436 goto err;
2437 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << b4 */
2438 if (ret < 0)
2439 goto err;
2441 buf24[0] = 0x90; buf24[1] = 0x5d; buf24[2] = 0x00; buf24[3] = 0x00;
2442 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2443 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2444 if (ret < 0)
2445 goto err;
2447 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << 94 */
2448 if (ret < 0)
2449 goto err;
2451 buf24[0] = 0xa2; buf24[1] = 0x5d; buf24[2] = 0x00; buf24[3] = 0x00;
2452 buf24[4] = 0x00; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
2453 ret = usb_microdia_control_write(dev, reg, buf24, 8);
2454 if (ret < 0)
2455 goto err;
2457 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << a2 */
2458 if (ret < 0)
2459 goto err;
2460 ret = usb_microdia_control_read(dev, reg, &buf, 1); /* // << a6 */
2461 if (ret < 0)
2462 goto err;
2463 /* // <-- 0x10c0 */
2464 reg = 0x10c2;
2465 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x00; buf24[3] = 0x84;
2466 buf24[4] = 0x31;
2467 ret = usb_microdia_control_write(dev, reg, buf24, 5);
2468 if (ret < 0)
2469 goto err;
2471 reg = 0x1061;
2472 buf = 0x03;
2473 ret = usb_microdia_control_write(dev, reg, &buf, 1); /* URB 557 */
2474 if (ret < 0)
2475 goto err;
2477 /* UNKNOWN -- URB_FUNCTION_RESET_PIPE:
2478 // UNKNOWN -- URB_FUNCTION_RESET_PIPE:
2479 // UNKNOWN -- URB_FUNCTION_GET_CURRENT_FRAME_NUMBER:
2480 // UNKNOWN -- URB_FUNCTION_GET_CURRENT_FRAME_NUMBER:
2481 // URB 560 >>> SENDING ISO REQUEST
2483 UDIA_INFO("...start function completed without errors.\n");
2484 return ret;
2485 err:
2486 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg, ret);
2487 return ret;
2491 * @brief From stop-close-amcap.log
2493 * @param dev
2495 * @returns 0
2497 * @author psnel
2499 * For SN9C201 with MI1300. Comments from parser-usbsnoop(updated_13Mar2008).pl output
2502 int microdia_6240_stop_stream(struct usb_microdia *dev)
2504 int ret=0;
2505 __u8 buf[8];
2507 UDIA_INFO("Stopping camera...\n");
2509 buf[0]=0x01;
2510 ret = usb_microdia_control_write(dev, 0x1061, buf, 1); /* URB 25319 */
2511 UDIA_INFO("...stop: write %x, ret = %d\n",buf[0],ret);
2513 buf[0]=0xb0; buf[1]=0x5d; buf[2]=0x07; buf[3]=0x00;
2514 buf[4]=0x00; buf[5]=0x00; buf[6]=0x00; buf[7]=0x10;
2515 ret += usb_microdia_control_write(dev, 0x10c0, buf, 8); /* URB 25320 */
2516 UDIA_INFO("...stop: write buf[8], ret = %d\n",ret);
2518 ret += usb_microdia_control_read(dev, 0x10c0, buf, 1); /* URB 25321 << b0 */
2519 UDIA_INFO("...stop: read %x, ret = %d\n",buf[0],ret);
2521 ret += usb_microdia_control_read(dev, 0x10c0, buf, 1); /* URB 25322 << b4 */
2522 UDIA_INFO("...stop: read %x, ret = %d\n",buf[0],ret);
2524 buf[0]=0x3c;
2525 ret += usb_microdia_control_write(dev, 0x1000, buf, 1); /* URB 25323 */
2526 UDIA_INFO("...stop: write %x, ret = %d\n",buf[0],ret);
2528 buf[0]=0x68;
2529 ret += usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 25324 */
2530 UDIA_INFO("...stop: write %x, ret = %d\n",buf[0],ret);
2532 buf[0]=0xa0;
2533 ret += usb_microdia_control_write(dev, 0x1007, buf, 1); /* URB 25325 */
2534 UDIA_INFO("...stop: write %x, ret = %d\n",buf[0],ret);
2536 buf[0]=0xa0;
2537 ret += usb_microdia_control_write(dev, 0x1006, buf, 1); /* URB 25326 */
2538 UDIA_INFO("...stop: write %x, ret = %d\n",buf[0],ret);
2540 buf[0]=0x98; buf[1]=0xef; buf[2]=0x11;
2541 ret += usb_microdia_control_write(dev, 0x1000, buf, 3); /* URB 25327 */
2542 UDIA_INFO("...stop: write buf[3], ret = %d\n",ret);
2544 /* UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: (URB 5009)
2545 // URB 25328 <<< GETTING SELECT_INTERFACE Interface: AlternateSetting = 0
2546 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: (URB 25329)
2549 buf[0]=0x00;
2550 ret += usb_microdia_control_write(dev, 0x1066, buf, 1); /* URB 25330 */
2551 UDIA_INFO("...stop: write %x, ret = %d\n",buf[0],ret);
2553 if (ret < 19) {
2554 UDIA_ERROR("One ore more errors occured during stop sequence !\n");
2555 return -1;
2558 return 0;
2562 * @brief From init.sequence.log
2564 * @param dev
2566 * @returns 0
2568 * @author GWater
2570 * For SN9C201 with SOI968.
2571 * Tests showed this function is actually unnecessary.
2572 * Nevertheless the reads may give us valuable values we don't know about yet.
2574 int microdia_624e_initialize(struct usb_microdia *dev)
2576 __u8 buf;
2578 usb_microdia_control_read(dev, 0x130d, &buf, 1);
2579 usb_microdia_control_read(dev, 0x1040, &buf, 1);
2581 return 0;
2584 /**
2585 * @brief From UsbSnoop-plugin-parsed.log
2587 * @param dev
2589 * @returns
2591 int microdia_624f_initialize(struct usb_microdia *dev)
2593 /* Do nothing here */
2594 return 0;
2598 * @brief From UsbSnoop-plugin-parsed.log
2600 * @param dev
2602 * @returns
2604 int microdia_6260_initialize(struct usb_microdia *dev)
2606 __u8 buf;
2608 usb_microdia_control_read(dev, 0x130d, &buf, 1);
2609 usb_microdia_control_read(dev, 0x1040, &buf, 1);
2610 buf = 0x00;
2611 usb_microdia_control_write(dev, 0x10c8, &buf, 1);
2612 usb_microdia_control_read(dev, 0x100a, &buf, 1);
2613 buf = 0x04;
2614 usb_microdia_control_write(dev, 0x100a, &buf, 1);
2615 usb_microdia_control_read(dev, 0x100b, &buf, 1);
2616 buf = 0x04;
2617 usb_microdia_control_write(dev, 0x100b, &buf, 1);
2618 usb_microdia_control_read(dev, 0x1001, &buf, 1);
2619 buf = 0xc7;
2620 usb_microdia_control_write(dev, 0x1001, &buf, 1);
2621 usb_microdia_control_read(dev, 0x1040, &buf, 1);
2622 buf = 0x00;
2623 usb_microdia_control_write(dev, 0x1040, &buf, 1);
2624 usb_microdia_control_read(dev, 0x1045, &buf, 1);
2625 buf = 0x04;
2626 usb_microdia_control_write(dev, 0x1045, &buf, 1);
2627 usb_microdia_control_read(dev, 0x1046, &buf, 1);
2628 buf = 0x10;
2629 usb_microdia_control_write(dev, 0x1046, &buf, 1);
2630 buf = 0x14;
2631 usb_microdia_control_write(dev, 0x1045, &buf, 1);
2632 buf = 0x01;
2633 usb_microdia_control_write(dev, 0x1040, &buf, 1);
2634 buf = 0x80;
2635 usb_microdia_control_write(dev, 0x1020, &buf, 1);
2637 return 0;
2641 * @brief From 6 init-logs
2643 * @param dev
2645 * @returns 0 (ok) or -1 (error)
2647 * @author Comer352l
2649 * Windows driver versions: 5.5.8.12 and 5.7.23.000
2650 * Windows versions: 2000 and XP
2651 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
2653 * Comments behind read oprations contain HEX-values that appeared in the logs
2655 int microdia_6270_initialize(struct usb_microdia *dev)
2657 /* int actual; */
2658 int ret = 0;
2659 int retSP = 0;
2660 int retASS = 0;
2661 __u8 buf[8];
2662 __u8 buf_0395[1];
2663 __u8 buf_1000[5];
2664 __u8 buf_1060[2];
2665 __u8 buf_11b8[1];
2667 ret += usb_microdia_control_read(dev, 0x130d, buf, 1); /* URB 5 0x81,0x85,0x04,0x8b,0x02,... */
2669 ret += usb_microdia_control_read(dev, 0x1040, buf, 1); /* URB 6 0xe4,0xc4,0xa4,0x44,... */
2672 * THE OLD DRIVER 5.5.8.12 DOES AN ADDITIONAL WRITE HERE:
2673 * buf[0]=0x00;
2674 * usb_microdia_control_write(dev, 0x10c8, buf, 1);
2677 ret += usb_microdia_control_read(dev, 0x118a, buf, 1); /* URB 7 0x05,0x7b,0x01,0x04,... */
2679 ret += usb_microdia_control_read(dev, 0x0395, buf_0395, 1); /* URB 8 0xc2,0x82,0x38,0x98,0x04,... */
2680 /* => this value will be rewritten to 0x118a and 0x0395 later (URBs 81+82) */
2682 buf[0] = 0x05;
2683 ret += usb_microdia_control_write(dev, 0x118a, buf, 1); /* URB 9 */
2685 ret += usb_microdia_control_write(dev, 0x0395, buf, 1); /* URB 10 */
2687 ret += usb_microdia_control_read(dev, 0x11b8, buf_11b8, 1); /* URB 11 0xa0,0x00,0x24,... */
2688 /* => this value will be rewritten to 0x11b8 later (URB 83) */
2690 buf[0] = 0x10;
2691 ret += usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 12 */
2693 ret += usb_microdia_control_read(dev, 0x1000, buf_1000, 5); /* URB 13 0x30 0xCF 0x00 0x03 (0x02 or 0x00) */
2694 /* => these values will be rewritten to 0x1000 later (URB 84) */
2696 buf[0] = 0x70; buf[1] = 0x00; buf[2] = 0x18; buf[3] = 0x00; buf[4] = 0x00;
2697 ret += usb_microdia_control_write(dev, 0x1000, buf, 5); /* URB 14 */
2699 ret += usb_microdia_control_read(dev, 0x1060, buf_1060, 2); /* URB 15 0x08 0x00 (always ???) */
2700 /* => this value will be rewritten to 0x1060 later (URB 85) */
2702 buf[0] = 0x00; buf[1] = 0x03;
2703 ret += usb_microdia_control_write(dev, 0x1060, buf, 2); /* URB 16 */
2705 /* initialize I2C registers to avoid getting no ACK at first I2C operation: */
2706 ret += sn9c20x_initialize_i2c(dev, SN9C20X_I2C_2WIRE, MT9V011_I2C_SLAVE_ADDRESS);
2708 /* enable I2C communication (bit 0) */
2709 buf[0] = 0x21; /* THE OLD DRIVER 5.5.8.12 WRITES 0x5d */
2710 ret += usb_microdia_control_write(dev, 0x10c8, buf, 1); /* URB 17 */
2712 /* probe sensor model: */
2713 retSP = mt9vx11_sensor_probe(dev); /* substitutes URBs 18-48 */
2714 if ((retSP == 0) && (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS))
2715 /* switch (back) to IFP address space: */
2716 retASS = mt9v111_select_address_space(dev, MT9V111_ADDRESSSPACE_IFP);
2718 ret += usb_microdia_control_write(dev, 0x118a, buf_0395, 1); /* URB 81 => write value read with URB 8 */
2720 ret += usb_microdia_control_write(dev, 0x0395, buf_0395, 1); /* URB 82 => write value read with URB 8 */
2722 ret += usb_microdia_control_write(dev, 0x11b8, buf_11b8, 1); /* URB 83 => write value read with URB 11 */
2724 ret += usb_microdia_control_write(dev, 0x1000, buf_1000, 5); /* URB 84 => write value read with URB 13 */
2726 ret += usb_microdia_control_write(dev, 0x1060, buf_1060, 2); /* URB 85 => write value read with URB 15; (always 08 00 ???) */
2728 /* USB-interrupt-message: doesn't work yet (returns error -110) */
2729 /* usb_interrupt_msg(dev->udev, usb_rcvintpipe(dev->udev, dev->int_in_endpointAddr), dev->int_in_buffer, dev->int_in_size, &actual, 1000); // URB 86 */
2732 * THE OLD DRIVER 5.5.8.12 DOES AN ADDITIONAL WRITE HERE:
2733 * wbuf[0]=0x80;
2734 * usb_microdia_control_write(dev, 0x1020, wbuf, 1);
2737 if ((retSP != 0) || (retASS != 0) || (ret < 33)) {
2738 if (ret < 33)
2739 UDIA_INFO("One ore more errors occured during initialization !\n");
2740 return -1;
2741 } else {
2742 return 0;
2747 /**
2748 * @brief From UsbSnoop-plugin-parsed.log
2750 * @param dev
2752 * @returns
2754 int microdia_627b_initialize(struct usb_microdia *dev)
2756 /*int actual;*/
2757 int ret;
2758 int retI2C;
2759 __u16 reg;
2760 __u8 buf[32];
2761 __u8 reg0395[1];
2762 __u8 reg11b8[1];
2763 __u8 reg1000[5];
2764 __u8 reg1060[2];
2766 reg = 0x130d;
2767 ret = usb_microdia_control_read(dev, reg, buf, 1); /* URB 5 */
2768 if (ret < 0)
2769 goto err;
2770 reg = 0x1040;
2771 ret = usb_microdia_control_read(dev, reg, buf, 1); /* URB 6 */
2772 if (ret < 0)
2773 goto err;
2775 reg = 0x118a;
2776 ret = usb_microdia_control_read(dev, reg, buf, 1); /* URB 7 */
2777 if (ret < 0)
2778 goto err;
2779 reg = 0x0395;
2780 ret = usb_microdia_control_read(dev, reg, reg0395, 1); /* URB 8 */
2781 if (ret < 0)
2782 goto err;
2784 reg = 0x118a;
2785 buf[0] = 0x05;
2786 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 9 */
2787 if (ret < 0)
2788 goto err;
2789 reg = 0x0395;
2790 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 10 */
2791 if (ret < 0)
2792 goto err;
2794 reg = 0x11b8;
2795 ret = usb_microdia_control_read(dev, reg, reg11b8, 1); /* URB 11 */
2796 if (ret < 0)
2797 goto err;
2799 reg = 0x11b8;
2800 buf[0] = 0x10;
2801 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 12 */
2802 if (ret < 0)
2803 goto err;
2804 reg = 0x1000;
2805 ret = usb_microdia_control_read(dev, reg, reg1000, 5); /* URB 13 */
2806 if (ret < 0)
2807 goto err;
2809 reg = 0x1000;
2810 buf[0] = 0x70; buf[1] = 0x00; buf[2] = 0x18; buf[3] = 0x00; buf[4] = 0x00;
2811 ret = usb_microdia_control_write(dev, reg, buf, 5); /* URB 14 */
2812 if (ret < 0)
2813 goto err;
2815 reg = 0x1060;
2816 ret = usb_microdia_control_read(dev, reg, reg1060, 2); /* URB 15 */
2817 if (ret < 0)
2818 goto err;
2820 reg = 0x1060;
2821 buf[0] = 0x00; buf[1] = 0x03;
2822 ret = usb_microdia_control_write(dev, reg, buf, 2); /* URB 16 */
2823 if (ret < 0)
2824 goto err;
2826 reg = 0x10c8;
2827 buf[0] = 0x21;
2828 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 17 */
2829 if (ret < 0)
2830 goto err;
2832 retI2C = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1,
2833 OV7660_CTL_PID, dev->sensor_flags, buf); /* URBs 18-29 */
2834 if (retI2C < 0) {
2835 /* 2nd try... */
2836 reg = 0x10c8;
2837 buf[0] = 0x21;
2838 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 30 */
2839 if (ret < 0)
2840 goto err;
2842 retI2C = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1,
2843 OV7660_CTL_PID, dev->sensor_flags, buf); /* URBs 31-35 */
2845 if (retI2C < 0)
2846 UDIA_ERROR("Read of sensor register 0x0a failed.");
2848 reg = 0x118a;
2849 buf[0] = 0xa6;
2850 ret = usb_microdia_control_write(dev, reg, reg0395, 1); /* URB 36 */
2851 if (ret < 0)
2852 goto err;
2853 reg = 0x0395;
2854 ret = usb_microdia_control_write(dev, reg, reg0395, 1); /* URB 37 */
2855 if (ret < 0)
2856 goto err;
2858 reg = 0x11b8;
2859 buf[0] = 0x06;
2860 ret = usb_microdia_control_write(dev, reg, reg11b8, 1); /* URB 38 */
2861 if (ret < 0)
2862 goto err;
2864 reg = 0x1000;
2865 buf[0] = 0x30; buf[1] = 0xcf; buf[2] = 0x00; buf[3] = 0x03; buf[4] = 0x02;
2866 ret = usb_microdia_control_write(dev, reg, reg1000, 5); /* URB 39 */
2867 if (ret < 0)
2868 goto err;
2870 reg = 0x1060;
2871 buf[0] = 0x08; buf[1] = 0x00;
2872 ret = usb_microdia_control_write(dev, reg, reg1060, 2); /* URB 40 */
2873 if (ret < 0)
2874 goto err;
2877 //URB 41
2878 ret = usb_interrupt_msg(dev->udev, 0x00000083, buf, 0x0000001, &actual, 1000);
2881 return ret;
2882 err:
2883 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg, ret);
2884 return ret;
2888 * @brief From init-start-stop-log (made by Víctor M. Hernández Rocamora)
2890 * @param dev
2892 * @returns 0 (ok) or -1 (error)
2894 * @author Comer352l
2896 * USB-Logger: SniffUSB 2.0
2898 * Comments behind read oprations contain HEX-values that appeared in the log
2900 int microdia_627f_initialize(struct usb_microdia *dev)
2902 __u8 buf[1];
2903 int ret = 0;
2905 ret += usb_microdia_control_read(dev, 0x130d, buf, 1); // URB 5 0x81
2907 ret += usb_microdia_control_read(dev, 0x1040, buf, 1); // URB 6 0xe4
2909 buf[0] = 0x00;
2910 ret += usb_microdia_control_write(dev, 0x10c8, buf, 1); // URB 7
2912 buf[0] = 0x80;
2913 ret += usb_microdia_control_write(dev, 0x1020, buf, 1); // URB 8
2915 ret += usb_microdia_control_read(dev, 0x1045, buf, 1); // URB 9 0x0f
2917 buf[0] = 0x1f;
2918 ret += usb_microdia_control_write(dev, 0x1045, buf, 1); // URB 10
2920 ret += usb_microdia_control_read(dev, 0x1045, buf, 1); // URB 11 0x1f
2922 buf[0] = 0x0f;
2923 ret += usb_microdia_control_write(dev, 0x1045, buf, 1); // URB 12
2925 ret += usb_microdia_control_read(dev, 0x1045, buf, 1); // URB 13 0x0f
2927 buf[0] = 0x1f;
2928 ret += usb_microdia_control_write(dev, 0x1045, buf, 1); // URB 14
2930 if (ret < 10)
2932 UDIA_INFO("One ore more errors occured during initialization !\n");
2933 return -1;
2935 return 0;
2939 * @brief From UsbSnoop-plugin-parsed.log
2941 * @param dev
2943 * @returns 0 (OK) or <0 (Error)
2945 * @author Vincent, Kuzja
2947 int microdia_6288_initialize(struct usb_microdia *dev)
2950 int ret;
2951 __u16 reg;
2952 __u8 buf[2];
2954 reg = 0x130d ;
2955 ret = usb_microdia_control_read(dev, reg, buf, 1);
2956 if (ret < 0)
2957 goto err;
2959 reg = 0x1040 ;
2960 ret = usb_microdia_control_read(dev, reg, buf, 1);
2961 if (ret < 0)
2962 goto err;
2964 if (ret < 0)
2965 return ret;
2966 else
2967 return 0;
2968 err:
2969 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg, ret);
2970 return ret;
2973 /**
2974 * @brief From UsbSnoop-plugin-parsed.log
2976 * @param dev
2978 * @returns 0 if all OK
2980 * Function to initialize Microdia 6128 webcam
2981 * Bridge SN9C325 + OM6802 CMOS sensor
2982 * note: comments are my observations so they could be wrong
2984 int microdia_6128_initialize(struct usb_microdia *dev)
2986 int ret = 0;
2987 __u8 buf[2];
2989 UDIA_INFO("Initializing camera...\n");
2991 buf[0] = 0x01;
2992 ret += usb_microdia_control_write(dev, 0xf1, buf, 1);
2993 ret += usb_microdia_control_read(dev, 0x00, buf, 1); // read reg 0x00 must write 0x00 in buf[0]
2994 ret += usb_microdia_control_write(dev, 0xf1, buf, 1);
2995 ret += usb_microdia_control_read(dev, 0x00, buf, 1); // get cam ID, must read 0x12
2997 if(buf[0] != 0x12){
2998 UDIA_ERROR("Microdia 6128 is not connected or working !!!\n");
2999 return -ENODEV;
3002 buf[0] = 0x29; buf[1] = 0x70; // Configure GPIO
3003 ret += usb_microdia_control_write(dev, 0x01, buf, 2);
3005 buf[0] = 0x01;
3006 ret += usb_microdia_control_write(dev, 0xf1, buf, 1); // Maybe wakeup
3008 buf[0] = 0x0e;
3009 ret += usb_microdia_control_write(dev, 0x01, buf, 1); // Command to initialize cam
3011 if(ret != 8)
3012 UDIA_DEBUG("Some read or writes were not successful in initialization !\n");
3014 /* Device is initialized and ready */
3015 UDIA_INFO("Microdia USB2.0 Camera is ready\n");
3017 return 0;
3021 int dev_microdia_start_stream(struct usb_microdia *dev)
3023 int ret = -ENODEV;
3024 if(dev && dev->start_stream)
3025 ret = dev->start_stream(dev);
3027 return ret;
3031 * @brief From start.htm
3033 * @param dev
3035 * @returns 0
3037 * @author GWater
3039 * For SN9C201 with MI1310.
3040 * This function has not been tested yet.
3042 int microdia_6242_start_stream(struct usb_microdia *dev)
3044 int i = -1;
3045 __u8 buf[48];
3047 __u8 urb10[24] = {
3048 0x01, 0x18, 0x00, 0x30, 0x00, 0x09, 0x00, 0xed,
3049 0x0f, 0xda, 0x0f, 0x3a, 0x00, 0x3a, 0x00, 0xd0,
3050 0x0f, 0xf7, 0x0f, 0x00, 0x00, 0x00, 0x60, 0x0a};
3052 __u8 urb13[11] = {
3053 0x02, 0x00, 0x02, 0x00, 0x50, 0x78, 0x00, 0x00,
3054 0x07, 0xc0, 0x0a};
3056 __u8 urb14[22] = {
3057 0x00, 0x20, 0x20, 0x20, 0x20, 0x00, 0x24, 0x3b,
3058 0x4f, 0x61, 0x71, 0x80, 0x8f, 0x9d, 0xab, 0xb8,
3059 0xc4, 0xd1, 0xdd, 0xe9, 0xf4, 0xff};
3061 __u8 qtable1[64] = {
3062 0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
3063 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
3064 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
3065 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
3066 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
3067 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
3068 0x4f, 0x54, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
3069 0x64, 0x5c, 0x54, 0x64, 0x4b, 0x54, 0x58, 0x54};
3071 __u8 qtable2[64] = {
3072 0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
3073 0x15, 0x26, 0x54, 0x36, 0x2e, 0x36, 0x54, 0x54,
3074 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
3075 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
3076 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
3077 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
3078 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
3079 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54};
3081 __u8 first10c0[7][3] = {
3082 {0x0d, 0x00, 0x08},
3083 {0x0d, 0x00, 0x09},
3084 {0x0d, 0x00, 0x08},
3085 {0xf0, 0x00, 0x01},
3086 {0x3a, 0x73, 0x00},
3087 {0x06, 0x30, 0x8c},
3088 {0xf0, 0x00, 0x00}
3091 __u8 second10c0a[2][5] = {
3092 {0x01, 0x00, 0x0e, 0x00, 0x14},
3093 {0x03, 0x03, 0xc4, 0x05, 0x14}
3096 __u8 second10c0b[3] =
3097 {0xc8, 0x00, 0x03};
3099 __u8 third10c0[4][3] = {
3100 {0x0a, 0x00, 0x01},
3101 {0x06, 0x00, 0x29},
3102 {0x05, 0x00, 0x72},
3103 {0x20, 0x00, 0x00}
3106 __u8 fourth10c0a[3][3] = {
3107 {0x20, 0x00, 0x00},
3108 {0x09, 0x01, 0x90},
3109 {0x0d, 0x80, 0x08}
3112 __u8 fourth10c0b[2][5] = {
3113 {0x2b, 0x01, 0x88, 0x01, 0x88},
3114 {0x2d, 0x01, 0x88, 0x01, 0x88}
3117 __u8 fifth10c0[4][3] = {
3118 {0x0a, 0x00, 0x01},
3119 {0x06, 0x00, 0x29},
3120 {0x05, 0x00, 0x72}
3123 /* interrupt down */
3125 buf[0] = 0x00;
3126 usb_microdia_control_write(dev, 0x1066, buf, 1); /* URB 1 */
3128 /* interrupt up */
3129 /* interrupt down */
3131 buf[0] = 0x60;
3132 usb_microdia_control_write(dev, 0x1007, buf, 1);
3134 buf[0] = 0x00;
3135 usb_microdia_control_write(dev, 0x1006, buf, 1);
3137 buf[0] = 0x78;
3138 usb_microdia_control_write(dev, 0x1000, buf, 1);
3140 buf[0] = 0xc7;
3141 usb_microdia_control_write(dev, 0x1001, buf, 1);
3143 buf[0] = 0x1c;
3144 usb_microdia_control_write(dev, 0x1002, buf, 1);
3146 buf[0] = 0x01;
3147 usb_microdia_control_write(dev, 0x1061, buf, 1);
3149 buf[0] = 0x80;
3150 usb_microdia_control_write(dev, 0x1020, buf, 1);
3152 buf[0] = 0x40; buf[1] = 0x30; buf[2] = 0x20;
3153 buf[3] = 0x10; buf[4] = 0x08;
3154 usb_microdia_control_write(dev, 0x1067, buf, 5);
3156 buf[0] = 0xb0; buf[1] = dev->sensor_slave_address; buf[2] = 0x0d;
3157 buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00;
3158 buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03;
3159 usb_microdia_control_write(dev, 0x10c0, buf, 9);
3161 usb_microdia_control_write(dev, 0x10e0, urb10, 24); /* URB 10 */
3163 buf[0] = 0x00; buf[1] = 0x00; buf[3] = 0x00;
3164 usb_microdia_control_write(dev, 0x10f8, buf, 3);
3166 buf[0] = 0x00; buf[1] = 0x40; buf[2] = 0x00;
3167 buf[3] = 0xe0; buf[4] = 0x03;
3168 usb_microdia_control_write(dev, 0x10fb, buf, 5);
3170 usb_microdia_control_write(dev, 0x1180, urb13, 11);
3172 usb_microdia_control_write(dev, 0x118b, urb14, 22);
3174 buf[0] = 0x00; buf[1] = 0x00;
3175 usb_microdia_control_write(dev, 0x11a1, buf, 2);
3177 buf[0] = 0x60; buf[1] = 0x20; buf[2] = 0x00;
3178 buf[3] = 0x08; buf[4] = 0x00; buf[5] = 0x00;
3179 buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00;
3180 usb_microdia_control_write(dev, 0x11b7, buf, 9);
3182 buf[0] = 0x30;
3183 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3185 buf[0] = 0x78;
3186 usb_microdia_control_write(dev, 0x1000, buf, 1);
3188 for (i = 0; i < 7; i++)
3189 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
3190 first10c0[i][0], dev->sensor_flags, &first10c0[i][1]); /* URB 9-48 */
3192 buf[0] = 0x60;
3193 usb_microdia_control_write(dev, 0x1007, buf, 1);
3195 buf[0] = 0x00;
3196 usb_microdia_control_write(dev, 0x1006, buf, 1);
3198 buf[0] = 0x03;
3199 usb_microdia_control_write(dev, 0x10e0, buf, 1); /* URB 50 */
3201 buf[0] = 0x03;
3202 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3204 buf[0] = 0xc6;
3205 usb_microdia_control_write(dev, 0x1001, buf, 1);
3207 buf[0] = 0xc4;
3208 usb_microdia_control_write(dev, 0x1001, buf, 1);
3210 buf[0] = 0x44;
3211 usb_microdia_control_write(dev, 0x1001, buf, 1);
3213 buf[0] = 0x80;
3214 usb_microdia_control_write(dev, 0x1189, buf, 1);
3216 buf[0] = 0x00;
3217 usb_microdia_control_write(dev, 0x11bc, buf, 1);
3219 buf[0] = 0x00;
3220 usb_microdia_control_write(dev, 0x11bd, buf, 1);
3222 buf[0] = 0x00;
3223 usb_microdia_control_write(dev, 0x11be, buf, 1);
3225 buf[0] = 0x00;
3226 usb_microdia_control_write(dev, 0x11bf, buf, 1);
3228 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
3229 second10c0a[0][0], dev->sensor_flags, &second10c0a[0][1]);
3231 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
3232 second10c0a[1][0], dev->sensor_flags, &second10c0a[1][1]);
3234 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0,
3235 0x09, dev->sensor_flags, NULL);
3237 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
3238 second10c0b[0], dev->sensor_flags, &second10c0b[1]);
3240 buf[0] = 0x06; buf[1] = 0x00; buf[2] = 0x02;
3241 buf[3] = 0x00; buf[4] = 0x28; buf[5] = 0x3c;
3242 usb_microdia_control_write(dev, 0x1180, buf, 6);
3244 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00;
3245 buf[3] = 0xf0; buf[4] = 0x00;
3246 usb_microdia_control_write(dev, 0x10fb, buf, 5); /* URB 70 */
3248 buf[0] = 0x8c;
3249 usb_microdia_control_write(dev, 0x1189, buf, 1);
3251 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
3252 usb_microdia_control_write(dev, 0x11a1, buf, 4);
3254 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
3255 usb_microdia_control_write(dev, 0x11ab, buf, 4);
3257 buf[0] = 0x78;
3258 usb_microdia_control_write(dev, 0x1000, buf, 1);
3260 buf[0] = 0x18;
3261 usb_microdia_control_write(dev, 0x1002, buf, 1);
3263 buf[0] = 0x18;
3264 usb_microdia_control_write(dev, 0x1002, buf, 1);
3266 buf[0] = 0x38;
3267 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3269 buf[0] = 0x02;
3270 usb_microdia_control_write(dev, 0x118a, buf, 1);
3272 buf[0] = 0x02;
3273 usb_microdia_control_write(dev, 0x0395, buf, 1);
3275 buf[0] = 0x78;
3276 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 80 */
3277 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3279 buf[0] = 0xf9;
3280 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3281 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3283 buf[0] = 0xfa;
3284 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3285 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3287 buf[0] = 0x7b;
3288 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3289 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3291 buf[0] = 0x7c;
3292 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3293 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3295 buf[0] = 0x7b;
3296 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 90 */
3298 for (i = 0; i < 4; i++)
3299 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
3300 third10c0[i][0], dev->sensor_flags, &third10c0[i][1]); /* URB 97-106 */
3302 buf[0] = 0x06;
3303 usb_microdia_control_write(dev, 0x1180, buf, 1);
3305 for (i = 0; i < 3; i++)
3306 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
3307 fourth10c0a[i][0], dev->sensor_flags, &fourth10c0a[i][1]);
3309 for (i = 0; i < 2; i++)
3310 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
3311 fourth10c0b[i][0], dev->sensor_flags, &fourth10c0b[i][1]);
3313 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0,
3314 0x33, dev->sensor_flags, NULL);
3316 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
3317 first10c0[0][0], dev->sensor_flags, &first10c0[0][1]);
3319 buf[0] = 0x0a;
3320 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3322 buf[0] = 0x10;
3323 usb_microdia_control_write(dev, 0x118b, buf, 1);
3325 buf[0] = 0x05;
3326 usb_microdia_control_write(dev, 0x10f7, buf, 1);
3328 buf[0] = 0x14;
3329 usb_microdia_control_write(dev, 0x10f8, buf, 1);
3331 buf[0] = 0xff;
3332 usb_microdia_control_write(dev, 0x10fa, buf, 1);
3334 buf[0] = 0x00;
3335 usb_microdia_control_write(dev, 0x10f9, buf, 1);
3337 buf[0] = 0x00;
3338 usb_microdia_control_write(dev, 0x10f9, buf, 1);
3340 buf[0] = 0x0a;
3341 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3343 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00;
3344 usb_microdia_control_write(dev, 0x11bc, buf, 4);
3346 /* Set whole array buf to 0x00 */
3347 memset(buf, 0x00, 48);
3348 usb_microdia_control_write(dev, 0x11c0, buf, 48);
3350 buf[0] = 0x2d; buf[1] = 0x2d; buf[2] = 0x3a;
3351 buf[3] = 0x05; buf[4] = 0x04; buf[5] = 0x3f;
3352 usb_microdia_control_write(dev, 0x11a5, buf, 6);
3354 buf[0] = 0x14; buf[1] = 0xec; buf[2] = 0x0a; buf[3] = 0xf6;
3355 usb_microdia_control_write(dev, 0x11af, buf, 4);
3357 buf[0] = 0x32; buf[1] = 0xdd; buf[2] = 0x2d; buf[3] = 0xdd;
3358 usb_microdia_control_write(dev, 0x11b3, buf, 4);
3360 buf[0] = 0x07;
3361 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3363 buf[0] = 0x01;
3364 usb_microdia_control_write(dev, 0x1061, buf, 1);
3366 buf[0] = 0x27;
3367 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3369 usb_microdia_control_write(dev, 0x1100, qtable1, 64);
3371 usb_microdia_control_write(dev, 0x1140, qtable2, 64); /* URB 150 */
3373 buf[0] = 0x07;
3374 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3376 buf[0] = 0x03;
3377 usb_microdia_control_write(dev, 0x1061, buf, 1);
3379 buf[0] = 0x0b;
3380 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3382 buf[0] = 0x8c;
3383 usb_microdia_control_write(dev, 0x1189, buf, 1);
3385 buf[0] = 0x00;
3386 usb_microdia_control_write(dev, 0x11bc, buf, 1);
3388 buf[0] = 0x00;
3389 usb_microdia_control_write(dev, 0x11bd, buf, 1);
3391 buf[0] = 0x00;
3392 usb_microdia_control_write(dev, 0x11be, buf, 1);
3394 buf[0] = 0x00;
3395 usb_microdia_control_write(dev, 0x11bf, buf, 1);
3397 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
3398 second10c0a[0][0], dev->sensor_flags, &second10c0a[0][1]);
3400 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
3401 second10c0a[1][0], dev->sensor_flags, &second10c0a[1][1]);
3403 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0,
3404 0x09, dev->sensor_flags, NULL);
3406 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
3407 second10c0b[0], dev->sensor_flags, &second10c0b[1]);
3409 buf[0] = 0x06; buf[1] = 0x00; buf[2] = 0x02;
3410 buf[3] = 0x00; buf[4] = 0x28; buf[5] = 0x3c;
3411 usb_microdia_control_write(dev, 0x1180, buf, 6);
3413 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00;
3414 buf[3] = 0xf0; buf[4] = 0x00;
3415 usb_microdia_control_write(dev, 0x10fb, buf, 5);
3417 buf[0] = 0x8c;
3418 usb_microdia_control_write(dev, 0x1189, buf, 1);
3420 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
3421 usb_microdia_control_write(dev, 0x11a1, buf, 4); /* URB 170 */
3423 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
3424 usb_microdia_control_write(dev, 0x11ab, buf, 4);
3426 buf[0] = 0x03;
3427 usb_microdia_control_write(dev, 0x1061, buf, 1);
3429 buf[0] = 0x0a;
3430 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3432 buf[0] = 0x00;
3433 usb_microdia_control_write(dev, 0x11b9, buf, 1);
3435 buf[0] = 0x0b;
3436 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3438 buf[0] = 0x01;
3439 usb_microdia_control_write(dev, 0x1061, buf, 1);
3441 buf[0] = 0x78;
3442 usb_microdia_control_write(dev, 0x1000, buf, 1);
3444 buf[0] = 0x18;
3445 usb_microdia_control_write(dev, 0x1002, buf, 1);
3447 buf[0] = 0x18;
3448 usb_microdia_control_write(dev, 0x1002, buf, 1);
3450 buf[0] = 0x7b;
3451 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 180 */
3453 buf[0] = 0x02;
3454 usb_microdia_control_write(dev, 0x118a, buf, 1);
3456 buf[0] = 0x02;
3457 usb_microdia_control_write(dev, 0x0395, buf, 1);
3459 buf[0] = 0x78;
3460 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3461 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3463 buf[0] = 0xf9;
3464 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3465 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3467 buf[0] = 0xfa;
3468 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3469 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3471 buf[0] = 0x7b;
3472 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3473 usb_microdia_control_read(dev, 0x11b8, buf, 1); /* URB 190 */
3475 buf[0] = 0x7c;
3476 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3477 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3479 buf[0] = 0x7b;
3480 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3482 for (i = 0; i < 3; i++)
3483 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
3484 fifth10c0[i][0], dev->sensor_flags, &fifth10c0[i][1]); /* URB 200-205 */
3486 sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 2,
3487 0x00, dev->sensor_flags, buf);
3488 /* __u8 result[2] = {buf[3], buf[4]}; */
3490 buf[0] = 0x03;
3491 usb_microdia_control_write(dev, 0x1061, buf, 1);
3493 return 0;
3498 * @brief From startstream.log
3500 * @param dev
3502 * @returns 0
3504 * @author GWater
3506 * For SN9C201 with SOI968.
3507 * This is function triggers a working stream of image data and a glowing LED.
3509 int microdia_624e_start_stream(struct usb_microdia *dev)
3511 int i = -1;
3512 __u8 buf[48];
3514 __u8 urb10[24] =
3515 {0x47, 0x18, 0x00, 0x30, 0x00, 0x09, 0x00, 0xed,
3516 0x0f, 0xda, 0x0f, 0x3a, 0x00, 0x3a, 0x00, 0xd0,
3517 0x0f, 0xf7, 0x0f, 0x00, 0x00, 0x00, 0x60, 0x0a};
3519 __u8 urb14[22] =
3520 {0x00, 0x20, 0x20, 0x20, 0x20, 0x00, 0x24, 0x3b,
3521 0x4f, 0x61, 0x71, 0x80, 0x8f, 0x9d, 0xab, 0xb8,
3522 0xc4, 0xd1, 0xdd, 0xe9, 0xf4, 0xff};
3524 __u8 qtable1[64] =
3525 {0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
3526 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
3527 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
3528 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
3529 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
3530 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
3531 0x4f, 0x53, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
3532 0x64, 0x5c, 0x53, 0x64, 0x4b, 0x53, 0x58, 0x53};
3534 __u8 qtable2[64] =
3535 {0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
3536 0x15, 0x26, 0x53, 0x36, 0x2e, 0x36, 0x53, 0x53,
3537 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3538 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3539 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3540 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3541 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3542 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53};
3544 __u8 first10c0[20][2] = {
3545 {0x12, 0x80}, {0x12, 0x00}, {0x0c, 0x00}, {0x0f, 0x1f},
3546 {0x11, 0x80}, {0x38, 0x52}, {0x1e, 0x00}, {0x33, 0x08},
3547 {0x35, 0x8c}, {0x36, 0x0c}, {0x37, 0x04}, {0x45, 0x04},
3548 {0x47, 0xff}, {0x3e, 0x00}, {0x3f, 0x00}, {0x3b, 0x20},
3549 {0x3a, 0x96}, {0x3d, 0x0a}, {0x14, 0x4e}, {0x13, 0x88} };
3551 __u8 second10c0a[2] =
3552 {0x12, 0x40};
3553 __u8 second10c0b[5] =
3554 {0x17, 0x13, 0x63, 0x01, 0x79}; /* 4 bytes */
3555 __u8 second10c0c[2] =
3556 {0x1b, 0x00}; /* 0 bytes */
3557 __u8 second10c0d[2][2] = {
3558 {0x32, 0x24},
3559 {0x03, 0x00} };
3561 __u8 third10c0a[5][2] = {
3562 {0x11, 0x40},
3563 {0x2a, 0x10},
3564 {0x2b, 0xe0},
3565 {0x10, 0x32},
3566 {0x00, 0x00} };
3567 __u8 third10c0b[3] =
3568 {0x01, 0x80, 0x80}; /* 2 bytes */
3570 __u8 read10c0[4] =
3571 {0x0a, 0x0b, 0x1c, 0x1d}; /* these are four addresses */
3573 /* interrupt down */
3575 buf[0] = 0x00;
3576 usb_microdia_control_write(dev, 0x1066, buf, 1);
3578 /* interrupt up and down */
3580 buf[0] = 0x78;
3581 usb_microdia_control_write(dev, 0x1000, buf, 1);
3583 buf[0] = 0xc7;
3584 usb_microdia_control_write(dev, 0x1001, buf, 1);
3586 buf[0] = 0x1c;
3587 usb_microdia_control_write(dev, 0x1002, buf, 1);
3589 buf[0] = 0xa0; buf[1] = 0xa0;
3590 usb_microdia_control_write(dev, 0x1006, buf, 2);
3592 buf[0] = 0x01;
3593 usb_microdia_control_write(dev, 0x1061, buf, 1);
3595 buf[0] = 0x80;
3596 usb_microdia_control_write(dev, 0x1020, buf, 1);
3598 buf[0] = 0x40; buf[1] = 0x30; buf[2] = 0x20;
3599 buf[3] = 0x10; buf[4] = 0x08;
3600 usb_microdia_control_write(dev, 0x1067, buf, 5);
3602 buf[0] = 0x92; buf[1] = dev->sensor_slave_address; buf[2] = 0x00;
3603 buf[3] = 0x00; buf[4] = 0x1d; buf[5] = 0x00;
3604 buf[6] = 0xa2; buf[7] = 0x10; buf[8] = 0x03;
3605 usb_microdia_control_write(dev, 0x10c0, buf, 9);
3607 usb_microdia_control_write(dev, 0x10e0, urb10, 24);
3609 buf[0] = 0x00; buf[1] = 0x00; buf[3] = 0x00;
3610 usb_microdia_control_write(dev, 0x10f8, buf, 3);
3612 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00;
3613 buf[3] = 0xf0; buf[4] = 0x00;
3614 usb_microdia_control_write(dev, 0x10fb, buf, 5);
3616 buf[0] = 0x8a; buf[1] = 0xcc; buf[2] = 0x08;
3617 usb_microdia_control_write(dev, 0x1188, buf, 3);
3619 usb_microdia_control_write(dev, 0x118b, urb14, 22);
3621 buf[0] = 0x00; buf[1] = 0x00;
3622 usb_microdia_control_write(dev, 0x11a1, buf, 2);
3624 buf[0] = 0x60; buf[1] = 0x20; buf[2] = 0x00;
3625 buf[3] = 0x08; buf[4] = 0x00; buf[5] = 0x40;
3626 buf[6] = 0x01; buf[7] = 0xf0; buf[8] = 0x00;
3627 usb_microdia_control_write(dev, 0x11b7, buf, 9);
3629 buf[0] = 0x30;
3630 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3632 buf[0] = 0x78;
3633 usb_microdia_control_write(dev, 0x1000, buf, 1);
3635 for (i = 0; i < 20; i++)
3636 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
3637 first10c0[i][0], dev->sensor_flags, &first10c0[i][1]);
3639 buf[0] = 0x47;
3640 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3642 buf[0] = 0x07;
3643 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3645 buf[0] = 0xc6;
3646 usb_microdia_control_write(dev, 0x1001, buf, 1);
3648 buf[0] = 0xc4;
3649 usb_microdia_control_write(dev, 0x1001, buf, 1);
3651 buf[0] = 0x44;
3652 usb_microdia_control_write(dev, 0x1001, buf, 1);
3654 buf[0] = 0x8c;
3655 usb_microdia_control_write(dev, 0x1189, buf, 1);
3657 buf[0] = 0x00;
3658 usb_microdia_control_write(dev, 0x11bc, buf, 1);
3660 buf[0] = 0x00;
3661 usb_microdia_control_write(dev, 0x11bd, buf, 1);
3663 buf[0] = 0x00;
3664 usb_microdia_control_write(dev, 0x11be, buf, 1);
3666 buf[0] = 0x00;
3667 usb_microdia_control_write(dev, 0x11bf, buf, 1);
3670 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
3671 second10c0a[0], dev->sensor_flags, &second10c0a[1]);
3673 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
3674 second10c0b[0], dev->sensor_flags, &second10c0b[1]);
3676 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0,
3677 second10c0c[0], dev->sensor_flags, &second10c0c[1]);
3679 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
3680 second10c0d[0][0], dev->sensor_flags, &second10c0d[0][1]);
3682 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
3683 second10c0d[1][0], dev->sensor_flags, &second10c0d[1][1]);
3685 buf[0] = 0x3c; buf[1] = 0x00; buf[2] = 0x0b;
3686 buf[3] = 0x00; buf[4] = 0x28; buf[5] = 0x3c;
3687 usb_microdia_control_write(dev, 0x1180, buf, 6);
3689 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00;
3690 buf[3] = 0xf0; buf[4] = 0x00;
3691 usb_microdia_control_write(dev, 0x10fb, buf, 5);
3693 buf[0] = 0x8c;
3694 usb_microdia_control_write(dev, 0x1189, buf, 1);
3696 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
3697 usb_microdia_control_write(dev, 0x11a1, buf, 4);
3699 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
3700 usb_microdia_control_write(dev, 0x11ab, buf, 4);
3702 buf[0] = 0x7c;
3703 usb_microdia_control_write(dev, 0x1000, buf, 1);
3705 buf[0] = 0x1c;
3706 usb_microdia_control_write(dev, 0x1002, buf, 1);
3708 buf[0] = 0x1c;
3709 usb_microdia_control_write(dev, 0x1002, buf, 1);
3711 buf[0] = 0x38;
3712 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3714 buf[0] = 0x05;
3715 usb_microdia_control_write(dev, 0x118a, buf, 1);
3717 buf[0] = 0x05;
3718 usb_microdia_control_write(dev, 0x0395, buf, 1);
3720 buf[0] = 0x78;
3721 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3722 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3724 buf[0] = 0xf9;
3725 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3726 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3728 buf[0] = 0x7a;
3729 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3730 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3732 buf[0] = 0x7b;
3733 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3734 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3736 buf[0] = 0x7c;
3737 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3738 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3740 buf[0] = 0xfd;
3741 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3742 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3744 buf[0] = 0xfe;
3745 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3746 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3748 buf[0] = 0x7f;
3749 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3750 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3752 buf[0] = 0x7a;
3753 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3755 for (i = 0; i < 5; i++)
3756 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
3757 third10c0a[i][0], dev->sensor_flags, &third10c0a[i][1]);
3759 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
3760 third10c0b[0], dev->sensor_flags, &third10c0b[1]);
3762 buf[0] = 0x0a;
3763 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3765 buf[0] = 0x0a;
3766 usb_microdia_control_write(dev, 0x118b, buf, 1);
3768 buf[0] = 0x07;
3769 usb_microdia_control_write(dev, 0x10f7, buf, 1);
3771 buf[0] = 0x14;
3772 usb_microdia_control_write(dev, 0x10f8, buf, 1);
3774 buf[0] = 0xff;
3775 usb_microdia_control_write(dev, 0x10fa, buf, 1);
3777 buf[0] = 0x00;
3778 usb_microdia_control_write(dev, 0x10f9, buf, 1);
3780 buf[0] = 0x00;
3781 usb_microdia_control_write(dev, 0x10f9, buf, 1);
3783 buf[0] = 0x0e;
3784 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3786 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00;
3787 usb_microdia_control_write(dev, 0x11bc, buf, 4);
3789 /* Set whole buf to 0x00 */
3790 memset(buf, 0, 48);
3791 usb_microdia_control_write(dev, 0x11c0, buf, 48);
3792 buf[0] = 0x2d; buf[1] = 0x2d; buf[2] = 0x3a;
3793 buf[3] = 0x05; buf[4] = 0x04; buf[5] = 0x3f;
3794 usb_microdia_control_write(dev, 0x11a5, buf, 6);
3796 buf[0] = 0x28; buf[1] = 0xd8; buf[2] = 0x14; buf[3] = 0xec;
3797 usb_microdia_control_write(dev, 0x11af, buf, 4);
3799 buf[0] = 0x32; buf[1] = 0xdd; buf[2] = 0x2d; buf[3] = 0xdd;
3800 usb_microdia_control_write(dev, 0x11b3, buf, 4);
3802 buf[0] = 0x07;
3803 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3805 buf[0] = 0x01;
3806 usb_microdia_control_write(dev, 0x1061, buf, 1);
3808 buf[0] = 0x27;
3809 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3811 usb_microdia_control_write(dev, 0x1100, qtable1, 64);
3813 usb_microdia_control_write(dev, 0x1140, qtable2, 64);
3815 buf[0] = 0x07;
3816 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3818 buf[0] = 0x03;
3819 usb_microdia_control_write(dev, 0x1061, buf, 1);
3821 buf[0] = 0x0b;
3822 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3824 buf[0] = 0x8c;
3825 usb_microdia_control_write(dev, 0x1189, buf, 1);
3827 buf[0] = 0x00;
3828 usb_microdia_control_write(dev, 0x11bc, buf, 1);
3830 buf[0] = 0x00;
3831 usb_microdia_control_write(dev, 0x11bd, buf, 1);
3833 buf[0] = 0x00;
3834 usb_microdia_control_write(dev, 0x11be, buf, 1);
3836 buf[0] = 0x00;
3837 usb_microdia_control_write(dev, 0x11bf, buf, 1);
3839 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
3840 second10c0b[0], dev->sensor_flags, &second10c0b[1]);
3842 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0,
3843 second10c0c[0], dev->sensor_flags, &second10c0c[1]);
3845 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
3846 second10c0d[0][0], dev->sensor_flags, &second10c0d[0][1]);
3848 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
3849 second10c0d[1][0], dev->sensor_flags, &second10c0d[1][1]);
3851 buf[0] = 0x3c; buf[1] = 0x00; buf[2] = 0x0b;
3852 buf[3] = 0x00; buf[4] = 0x28; buf[5] = 0x3c;
3853 usb_microdia_control_write(dev, 0x1180, buf, 6);
3855 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00;
3856 buf[3] = 0xf0; buf[4] = 0x00;
3857 usb_microdia_control_write(dev, 0x10fb, buf, 5);
3859 buf[0] = 0x8c;
3860 usb_microdia_control_write(dev, 0x1189, buf, 1);
3862 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
3863 usb_microdia_control_write(dev, 0x11a1, buf, 4);
3865 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
3866 usb_microdia_control_write(dev, 0x11ab, buf, 4);
3868 buf[0] = 0x03;
3869 usb_microdia_control_write(dev, 0x1061, buf, 1);
3871 buf[0] = 0x0e;
3872 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3874 buf[0] = 0x00;
3875 usb_microdia_control_write(dev, 0x11b9, buf, 1);
3877 buf[0] = 0x0f;
3878 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3880 buf[0] = 0x01;
3881 usb_microdia_control_write(dev, 0x1061, buf, 1);
3883 buf[0] = 0x7c;
3884 usb_microdia_control_write(dev, 0x1000, buf, 1);
3886 buf[0] = 0x1c;
3887 usb_microdia_control_write(dev, 0x1002, buf, 1);
3889 buf[0] = 0x1c;
3890 usb_microdia_control_write(dev, 0x1002, buf, 1);
3892 buf[0] = 0x7a;
3893 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3895 buf[0] = 0x05;
3896 usb_microdia_control_write(dev, 0x118a, buf, 1);
3898 buf[0] = 0x05;
3899 usb_microdia_control_write(dev, 0x0395, buf, 1);
3901 buf[0] = 0x78;
3902 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3903 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3905 buf[0] = 0xf9;
3906 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3907 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3909 buf[0] = 0x7a;
3910 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3911 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3913 buf[0] = 0x7b;
3914 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3915 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3917 buf[0] = 0x7c;
3918 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3919 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3921 buf[0] = 0x7d;
3922 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3923 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3925 buf[0] = 0xfe;
3926 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3927 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3929 buf[0] = 0x7f;
3930 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3931 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3933 buf[0] = 0x7a;
3934 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3936 for (i = 0; i < 3; i++)
3937 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
3938 third10c0a[i][0], dev->sensor_flags, &third10c0a[i][1]);
3940 for (i = 0; i < 4; i++)
3941 sn9c20x_read_i2c_data(dev, dev->sensor_slave_address,
3942 1, read10c0[i], dev->sensor_flags, buf);
3944 buf[0] = 0x03;
3945 usb_microdia_control_write(dev, 0x1061, buf, 1);
3947 buf[0] = 0xa0;
3948 usb_microdia_control_write(dev, 0x1007, buf, 1);
3950 buf[0] = 0x80;
3951 usb_microdia_control_write(dev, 0x1006, buf, 1);
3953 return 0;
3957 int microdia_624f_start_stream(struct usb_microdia *dev)
3959 int ret;
3960 __u8 last_11b8[1];
3961 __u8 eeprom_slave_id = 0x50;
3962 __u8 eeprom_flags = SN9C20X_I2C_2WIRE;
3963 __u16 command;
3964 __u8 buf[64];
3965 __u8 unknown1[9] = { dev->sensor_flags, dev->sensor_slave_address,
3966 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
3968 buf[0] = 0x20;
3969 command = 0x1007;
3970 ret = usb_microdia_control_write(dev, command, buf, 1);
3971 if (ret < 0)
3972 goto err;
3974 buf[0] = 0x00;
3975 command = 0x1006;
3976 ret = usb_microdia_control_write(dev, command, buf, 1);
3977 if (ret < 0)
3978 goto err;
3980 buf[0] = 0x78;
3981 command = 0x1000;
3982 ret = usb_microdia_control_write(dev, command, buf, 1);
3983 if (ret < 0)
3984 goto err;
3986 buf[0] = 0xc7;
3987 command = 0x1001;
3988 ret = usb_microdia_control_write(dev, command, buf, 1);
3989 if (ret < 0)
3990 goto err;
3992 buf[0] = 0x1c;
3993 command = 0x1002;
3994 ret = usb_microdia_control_write(dev, command, buf, 1);
3995 if (ret < 0)
3996 goto err;
3998 buf[0] = 0x01;
3999 command = 0x1061;
4000 ret = usb_microdia_control_write(dev, command, buf, 1);
4001 if (ret < 0)
4002 goto err;
4004 buf[0] = 0x80;
4005 command = 0x1020;
4006 ret = usb_microdia_control_write(dev, command, buf, 1);
4007 if (ret < 0)
4008 goto err;
4010 buf[0] = 0x40; buf[1] = 0x30; buf[2] = 0x20;
4011 buf[3] = 0x10; buf[4] = 0x08;
4012 command = 0x1067;
4013 ret = usb_microdia_control_write(dev, command, buf, 5);
4014 if (ret < 0)
4015 goto err;
4017 /* this is the same register as the I2C write, not sure why
4018 * we're writing 9 bytes -- the SN9C102 docs say all writes
4019 * must be 8 bytes, but we don't have docs for SN9C20x */
4020 command = 0x10c0;
4021 ret = usb_microdia_control_write(dev, command, unknown1, 9);
4022 if (ret < 0)
4023 goto err;
4025 buf[0] = 0x44; buf[23] = 0x0a;
4026 command = 0x10e0;
4027 ret = usb_microdia_control_write(dev, command, buf, 1);
4028 if (ret < 0)
4029 goto err;
4031 buf[0] = 0x60;
4032 command = 0x10f5;
4033 ret = usb_microdia_control_write(dev, command, buf, 1);
4034 if (ret < 0)
4035 goto err;
4037 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00;
4038 command = 0x10f8;
4039 ret = usb_microdia_control_write(dev, command, buf, 3);
4040 if (ret < 0)
4041 goto err;
4043 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00;
4044 buf[3] = 0xf0; buf[4] = 0x00;
4045 command = 0x10fb;
4046 ret = usb_microdia_control_write(dev, command, buf, 5);
4047 if (ret < 0)
4048 goto err;
4050 buf[0] = 0x87; buf[1] = 0xcc; buf[2] = 0x08;
4051 command = 0x1188;
4052 ret = usb_microdia_control_write(dev, command, buf, 3);
4053 if (ret < 0)
4054 goto err;
4056 buf[0] = 0x00; buf[1] = 0x20; buf[2] = 0x20; buf[3] = 0x20;
4057 buf[4] = 0x20; buf[5] = 0x00; buf[6] = 0x24; buf[7] = 0x3b;
4058 buf[8] = 0x4f; buf[9] = 0x61; buf[10] = 0x71; buf[11] = 0x80;
4059 buf[12] = 0x8f; buf[13] = 0x9d; buf[14] = 0xab; buf[15] = 0xb8;
4060 buf[16] = 0xc4; buf[17] = 0xd1; buf[18] = 0xdd; buf[19] = 0xe9;
4061 buf[20] = 0xf4; buf[21] = 0xff;
4062 command = 0x118b;
4063 ret = usb_microdia_control_write(dev, command, buf, 22);
4064 if (ret < 0)
4065 goto err;
4067 buf[0] = 0x00; buf[1] = 0x00;
4068 command = 0x11a1;
4069 ret = usb_microdia_control_write(dev, command, buf, 2);
4070 if (ret < 0)
4071 goto err;
4073 buf[0] = 0x60; buf[1] = 0x20; buf[2] = 0x00; buf[3] = 0x08;
4074 buf[4] = 0x00; buf[5] = 0x40; buf[6] = 0x01; buf[7] = 0xf0;
4075 buf[8] = 0x00;
4076 command = 0x11b7;
4077 ret = usb_microdia_control_write(dev, command, buf, 9);
4078 if (ret < 0)
4079 goto err;
4081 buf[0] = 0x30;
4082 command = 0x11b8;
4083 ret = usb_microdia_control_write(dev, command, buf, 1);
4084 if (ret < 0)
4085 goto err;
4087 buf[0] = 0x78;
4088 command = 0x1000;
4089 ret = usb_microdia_control_write(dev, command, buf, 1);
4090 if (ret < 0)
4091 goto err;
4093 /* reset all SCCB registers to their default values */
4094 buf[0] = OV965X_COM7_SCCB_RESET;
4095 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_COM7,
4096 dev->sensor_flags, buf);
4097 if (ret < 0)
4098 goto err;
4100 buf[0] = 0x7f; /* 0x7f AGC setting */
4101 buf[1] = 0xe0; /* blue gain setting */
4102 buf[2] = 0x90; /* red gain setting */
4103 buf[3] = OV965X_VREF_VSTOP_LOW3(0x04) | OV965X_VREF_VSTART_LOW3(0x02);
4104 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_GAIN,
4105 dev->sensor_flags, buf);
4106 if (ret < 0)
4107 goto err;
4110 this write appears to be unnecessary since we issued
4111 the reset above and the spec says that 0x00 is the default
4112 for all 4 of the registers we're writing to here
4114 memset(buf, 0, 4);
4115 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_COM1,
4116 dev->sensor_flags, buf);
4117 if (ret < 0)
4118 goto err;
4120 /* first byte still 0, not sure why, RAVE default is 0x00 too */
4121 buf[0] = 0;
4122 buf[1] = OV965X_COM2_OUTPUT_DRIVE_CAP_2X;
4123 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, OV965X_CTL_RAVE,
4124 dev->sensor_flags, buf);
4125 if (ret < 0)
4126 goto err;
4128 buf[0] = 0x00; buf[1] = 0x00;
4129 /* not sure why we're setting bit 5 below, spec says it's reserved */
4130 buf[2] = OV965X_COM5_15FPS_48MHZ_RGB | 0x20;
4131 /* likewise, spec says 4 & 6 are reserved */
4132 buf[3] = OV965X_COM6_TIMING_RESET_ON_FMT_CHANGE | 0x50;
4133 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_COM3,
4134 dev->sensor_flags, buf);
4135 if (ret < 0)
4136 goto err;
4138 buf[0] = 0xff; /* AEC bits 2-9 */
4139 buf[1] = OV965X_CLKRC_INPUT_CLK_NO_SCALE;
4140 buf[2] = OV965X_COM7_OUTPUT_RAW_RGB;
4141 buf[3] = OV965X_COM8_FAST_AGC_AEC | OV965X_COM8_AEC_STEP_SIZE_NOLIMIT |
4142 /*OV965X_COM8_AGC_ENABLE |*/ OV965X_COM8_AEC_ENABLE | OV965X_COM8_AWB_ENABLE;
4143 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_AECH,
4144 dev->sensor_flags, buf);
4145 if (ret < 0)
4146 goto err;
4148 buf[0] = OV965X_COM9_MAX_AGC_8X | OV965X_COM9_RELAX_EXPOSURE_TIMING |
4149 OV965X_COM9_DROP_VSYNC_ON_FRAME_DROP |
4150 OV965X_COM9_DROP_FRAME_ON_BIG_AEC;
4151 buf[1] = 0x00;
4152 buf[2] = 0x07; /* hmm, spec says this is reserved */
4153 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 3, OV965X_CTL_COM9,
4154 dev->sensor_flags, buf);
4155 if (ret < 0)
4156 goto err;
4158 /* this is supposed to be reserved too */
4159 buf[0] = 0x04; buf[1] = 0x00;
4160 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, OV965X_CTL_MVFP,
4161 dev->sensor_flags, buf);
4162 if (ret < 0)
4163 goto err;
4165 buf[0] = 0x78; /* this is the default! */
4166 buf[1] = 0x68; /* this is the default! */
4167 buf[2] = 0xd4; /* this is the default! */
4168 buf[3] = 0x80; /* this is the default! */
4169 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_AEW,
4170 dev->sensor_flags, buf);
4171 if (ret < 0)
4172 goto err;
4174 buf[0] = OV965X_BIAS_SUBTRACT;
4175 buf[1] = OV965X_Gr_COM_BYPASS_ANALOG_BLC | OV965X_Gr_COM_BYPASS_REGULATOR;
4176 buf[2] = 0x00; buf[3] = 0x00;
4177 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_GbBIAS,
4178 dev->sensor_flags, buf);
4179 if (ret < 0)
4180 goto err;
4182 buf[0] = OV965X_BIAS_SUBTRACT;
4183 buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00;
4184 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_RBIAS,
4185 dev->sensor_flags, buf);
4186 if (ret < 0)
4187 goto err;
4189 buf[0] = 0x08; /* HSYNC rising edge start */
4190 buf[1] = 0x30; /* HSYNC rising edge end */
4191 buf[2] = OV965X_HREF_EDGE_OFT_TO_DATA_OUT(2) | OV965X_HREF_HSTART_LOW3(6)
4192 | OV965X_HREF_HSTOP_LOW3(4);
4193 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 3, OV965X_CTL_HSYST,
4194 dev->sensor_flags, buf);
4195 if (ret < 0)
4196 goto err;
4198 /* the docs say all 4 of these bytes are reserved */
4199 buf[0] = 0xe2; buf[1] = 0xbf; buf[2] = 0x81; buf[3] = 0xf9;
4200 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_CHLF,
4201 dev->sensor_flags, buf);
4202 if (ret < 0)
4203 goto err;
4205 /* the docs say these 2 bytes are reserved */
4206 buf[0] = 0x00; buf[1] = 0x93;
4207 buf[2] = 0x50; /* bits 4 and 6 are supposedly reserved */
4208 buf[3] = OV965X_TSLB_OUTPUT_SEQ_UYVY | OV965X_TSLB_DIGITAL_BLC_ENABLE;
4209 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_ADC,
4210 dev->sensor_flags, buf);
4211 if (ret < 0)
4212 goto err;
4214 buf[0] = OV965X_COM11_MANUAL_BANDING_FILTER;
4215 buf[1] = 0x73; /* these bits all reserved */
4216 buf[2] = OV965X_COM13_ENABLE_COLOR_MATRIX | OV965X_COM13_DELAY_Y_CHANNEL
4217 | OV965X_COM13_OUTPUT_DELAY(1);
4218 buf[3] = OV965X_COM14_YUV_EDGE_ENHANCE
4219 | OV965X_COM14_EDGE_ENHANCE_FACTOR_DBL
4220 | 0x0b; /* these last bits supposedly reserved */
4221 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_COM11,
4222 dev->sensor_flags, buf);
4223 if (ret < 0)
4224 goto err;
4226 buf[0] = OV965X_EDGE_EDGE_ENHANCE_LOW4(8)
4227 | OV965X_EDGE_EDGE_ENHANCE_FACTOR(8);
4228 buf[1] = OV965X_COM15_OUTPUT_RANGE_O0_TO_FF | 0x01; /* bit reserved */
4229 buf[2] = 0x00; buf[3] = 0x08; /* this bit supposedly reserved */
4230 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_EDGE,
4231 dev->sensor_flags, buf);
4232 if (ret < 0)
4233 goto err;
4235 buf[0] = 0x00;
4236 /* OV9653 control register 0x43 is reserved, according to the docs */
4237 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0x43,
4238 dev->sensor_flags, buf); /* 'Dummy'-write */
4239 if (ret < 0)
4240 goto err;
4242 buf[0] = 0x80; buf[1] = 0x80; buf[2] = 0x40; buf[3] = 0x00;
4243 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_MANU,
4244 dev->sensor_flags, buf);
4245 if (ret < 0)
4246 goto err;
4248 buf[0] = 0x0a;
4249 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_DBLV,
4250 dev->sensor_flags, buf);
4251 if (ret < 0)
4252 goto err;
4254 buf[0] = 0x06; buf[1] = 0x20; buf[2] = 0x00; buf[3] = 0x00;
4255 /* OV9653 control register 0x8b is reserved, according to the docs */
4256 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x8b,
4257 dev->sensor_flags, buf);
4258 if (ret < 0)
4259 goto err;
4261 buf[0] = 0xdf;
4262 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_DBLC1,
4263 dev->sensor_flags, buf);
4264 if (ret < 0)
4265 goto err;
4267 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x88; buf[3] = 0x88;
4268 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_DM_LNL,
4269 dev->sensor_flags, buf);
4270 if (ret < 0)
4271 goto err;
4273 buf[0] = 0x04;
4274 /* control reg 0x96 reserved, according to docs */
4275 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, 0x96,
4276 dev->sensor_flags, buf);
4277 if (ret < 0)
4278 goto err;
4280 buf[0] = 0x80;
4281 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_COM26,
4282 dev->sensor_flags, buf);
4283 if (ret < 0)
4284 goto err;
4286 buf[0] = 0x80; buf[1] = 0xb8; buf[2] = 0x92; buf[3] = 0x0a;
4287 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_ACOM2,
4288 dev->sensor_flags, buf);
4289 if (ret < 0)
4290 goto err;
4292 /* reserved, according to docs */
4293 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0xac,
4294 dev->sensor_flags, NULL);
4295 if (ret < 0)
4296 goto err;
4298 buf[0] = 0x1b; buf[1] = 0xbb; buf[2] = 0x05; buf[3] = 0x7d;
4299 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_HSTART,
4300 dev->sensor_flags, buf);
4301 if (ret < 0)
4302 goto err;
4304 buf[0] = 0x00;
4305 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_PSHIFT,
4306 dev->sensor_flags, buf);
4307 if (ret < 0)
4308 goto err;
4310 /* now for some reason it switches to these two reads and
4311 * then back to the long init sequence */
4312 command = 0x10c1;
4313 ret = usb_microdia_control_read(dev, command, buf, 1); /* reads 30 */
4314 if (ret < 0)
4315 goto err;
4316 /* msg("Should read 0x30, read: %x", buf[0]); */
4318 command = 0x10c1;
4319 buf[0] = eeprom_slave_id;
4320 ret = usb_microdia_control_write(dev, command, buf, 1);
4321 if (ret < 0)
4322 goto err;
4324 /* TRY TO READ FROM EEPROM: */
4325 ret = sn9c20x_read_i2c_data(dev, eeprom_slave_id, 1, 0x00, eeprom_flags, buf);
4326 if (ret < 0) {
4327 UDIA_INFO("No EEPROM found\n");
4328 } else {
4329 UDIA_INFO("Read from EEPROM successful\n");
4330 /* returns 0xff -- don't know what we're supposed to do w/ that info */
4331 /* msg("Read from eeprom, should read 0xff, read: %x", buf[0]); */
4334 command = 0x10c1;
4335 buf[0] = dev->sensor_slave_address;
4336 ret = usb_microdia_control_write(dev, command, buf, 1);
4337 if (ret < 0)
4338 goto err;
4340 command = 0x10e0;
4341 buf[0] = 0x47;
4342 ret = usb_microdia_control_write(dev, command, buf, 1);
4343 if (ret < 0)
4344 goto err;
4346 command = 0x10e0;
4347 buf[0] = 0x07;
4348 ret = usb_microdia_control_write(dev, command, buf, 1);
4349 if (ret < 0)
4350 goto err;
4352 command = 0x1001;
4353 buf[0] = 0xc6;
4354 ret = usb_microdia_control_write(dev, command, buf, 1);
4355 if (ret < 0)
4356 goto err;
4358 command = 0x1001;
4359 buf[0] = 0xc4;
4360 ret = usb_microdia_control_write(dev, command, buf, 1);
4361 if (ret < 0)
4362 goto err;
4364 command = 0x1001;
4365 buf[0] = 0x44;
4366 ret = usb_microdia_control_write(dev, command, buf, 1);
4367 if (ret < 0)
4368 goto err;
4370 command = 0x1189;
4371 buf[0] = 0x8c;
4372 ret = usb_microdia_control_write(dev, command, buf, 1);
4373 if (ret < 0)
4374 goto err;
4376 command = 0x11bc;
4377 buf[0] = 0x40;
4378 ret = usb_microdia_control_write(dev, command, buf, 1);
4379 if (ret < 0)
4380 goto err;
4382 command = 0x11bd;
4383 buf[0] = 0x01;
4384 ret = usb_microdia_control_write(dev, command, buf, 1);
4385 if (ret < 0)
4386 goto err;
4388 command = 0x11be;
4389 buf[0] = 0xf0;
4390 ret = usb_microdia_control_write(dev, command, buf, 1);
4391 if (ret < 0)
4392 goto err;
4394 command = 0x11bf;
4395 buf[0] = 0x00;
4396 ret = usb_microdia_control_write(dev, command, buf, 1);
4397 if (ret < 0)
4398 goto err;
4400 buf[0] = 0x45;
4401 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_COM7,
4402 dev->sensor_flags, buf);
4403 if (ret < 0)
4404 goto err;
4406 buf[0] = 0x36;
4407 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_VREF,
4408 dev->sensor_flags, buf);
4409 if (ret < 0)
4410 goto err;
4412 buf[0] = 0x24; buf[1] = 0xc5; buf[2] = 0x00; buf[3] = 0x3c;
4413 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, OV965X_CTL_HSTART,
4414 dev->sensor_flags, buf);
4415 if (ret < 0)
4416 goto err;
4418 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, OV965X_CTL_PSHIFT,
4419 dev->sensor_flags, NULL);
4420 if (ret < 0)
4421 goto err;
4423 buf[0] = 0x84;
4424 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_HREF,
4425 dev->sensor_flags, buf);
4426 if (ret < 0)
4427 goto err;
4429 command = 0x1180;
4430 buf[0] = 0x02; buf[1] = 0x00; buf[2] = 0x07; buf[3] = 0x00;
4431 buf[4] = 0x28; buf[5] = 0x3c;
4432 ret = usb_microdia_control_write(dev, command, buf, 6);
4433 if (ret < 0)
4434 goto err;
4436 command = 0x10fb;
4437 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0;
4438 buf[4] = 0x00;
4439 ret = usb_microdia_control_write(dev, command, buf, 5);
4440 if (ret < 0)
4441 goto err;
4443 command = 0x1189;
4444 buf[0] = 0x8c;
4445 ret = usb_microdia_control_write(dev, command, buf, 1);
4446 if (ret < 0)
4447 goto err;
4449 command = 0x11a1;
4450 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
4451 ret = usb_microdia_control_write(dev, command, buf, 4);
4452 if (ret < 0)
4453 goto err;
4455 command = 0x11ab;
4456 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
4457 ret = usb_microdia_control_write(dev, command, buf, 4);
4458 if (ret < 0)
4459 goto err;
4461 command = 0x1000;
4462 buf[0] = 0x78;
4463 ret = usb_microdia_control_write(dev, command, buf, 1);
4464 if (ret < 0)
4465 goto err;
4467 command = 0x1002;
4468 buf[0] = 0x18;
4469 ret = usb_microdia_control_write(dev, command, buf, 1);
4470 if (ret < 0)
4471 goto err;
4473 command = 0x1002;
4474 buf[0] = 0x18;
4475 ret = usb_microdia_control_write(dev, command, buf, 1);
4476 if (ret < 0)
4477 goto err;
4479 /* urb 297 */
4480 command = 0x11b8;
4481 buf[0] = 0x38;
4482 ret = usb_microdia_control_write(dev, command, buf, 1);
4483 if (ret < 0)
4484 goto err;
4486 command = 0x118a;
4487 buf[0] = 0x04;
4488 ret = usb_microdia_control_write(dev, command, buf, 1);
4489 if (ret < 0)
4490 goto err;
4492 command = 0x0395;
4493 buf[0] = 0x04;
4494 ret = usb_microdia_control_write(dev, command, buf, 1);
4495 if (ret < 0)
4496 goto err;
4498 command = 0x11b8;
4499 buf[0] = 0x78;
4500 ret = usb_microdia_control_write(dev, command, buf, 1);
4501 if (ret < 0)
4502 goto err;
4503 ret = usb_microdia_control_read(dev, command, buf, 1); /* 0x38 */
4504 if (ret < 0)
4505 goto err;
4506 if (buf[0] == 0x38)
4507 buf[0] = 0x79;
4508 else if (buf[0] == 0xb8)
4509 buf[0] = 0xf9;
4510 ret = usb_microdia_control_write(dev, command, buf, 1);
4511 if (ret < 0)
4512 goto err;
4513 ret = usb_microdia_control_read(dev, command, buf, 1); /* 0x39 */
4514 if (ret < 0)
4515 goto err;
4516 if (buf[0] == 0x39)
4517 buf[0] = 0x7a;
4518 else if (buf[0] == 0xb9)
4519 buf[0] = 0xfa;
4520 ret = usb_microdia_control_write(dev, command, buf, 1);
4521 if (ret < 0)
4522 goto err;
4523 ret = usb_microdia_control_read(dev, command, buf, 1); /* 0x3a */
4524 if (ret < 0)
4525 goto err;
4526 if (buf[0] == 0x3a)
4527 buf[0] = 0x7b;
4528 else if (buf[0] == 0xba)
4529 buf[0] = 0xfb;
4530 ret = usb_microdia_control_write(dev, command, buf, 1);
4531 if (ret < 0)
4532 goto err;
4533 ret = usb_microdia_control_read(dev, command, buf, 1); /* 0x3b */
4534 if (ret < 0)
4535 goto err;
4536 if (buf[0] == 0x3b)
4537 buf[0] = 0x7c;
4538 else if (buf[0] == 0xbb)
4539 buf[0] = 0xfc;
4540 ret = usb_microdia_control_write(dev, command, buf, 1);
4541 if (ret < 0)
4542 goto err;
4543 ret = usb_microdia_control_read(dev, command, buf, 1); /* 0x3c */
4544 if (ret < 0)
4545 goto err;
4546 last_11b8[0] = buf[0];
4547 buf[0] = last_11b8[0] & 0xf0; /* 0xf0 or 0x70 */
4548 buf[0] = buf[0] | 0x0a; /* => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 5 READS/WRITES */
4549 ret = usb_microdia_control_write(dev, command, buf, 1);
4550 if (ret < 0)
4551 goto err;
4553 buf[0] = 0x80;
4554 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_CLKRC,
4555 dev->sensor_flags, buf);
4556 if (ret < 0)
4557 goto err;
4559 /* urb 331 */
4560 buf[0] = 0x00;
4561 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_EXHCH,
4562 dev->sensor_flags, buf);
4563 if (ret < 0)
4564 goto err;
4566 buf[0] = 0x00;
4567 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_EXHCL,
4568 dev->sensor_flags, buf);
4569 if (ret < 0)
4570 goto err;
4572 buf[0] = 0x00;
4573 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_DM_LNL,
4574 dev->sensor_flags, buf);
4575 if (ret < 0)
4576 goto err;
4578 /* urb 347 */
4579 buf[0] = 0x00;
4580 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_DM_LNH,
4581 dev->sensor_flags, buf);
4582 if (ret < 0)
4583 goto err;
4585 buf[0] = 0x04;
4586 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_MVFP,
4587 dev->sensor_flags, buf);
4588 if (ret < 0)
4589 goto err;
4591 /* is it really necessary to do this same write again?; 627f does this, too */
4592 buf[0] = 0x04;
4593 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_MVFP,
4594 dev->sensor_flags, buf);
4595 if (ret < 0)
4596 goto err;
4598 /* urb 365 */
4599 command = 0x1182;
4600 buf[0] = 0x07;
4601 ret = usb_microdia_control_write(dev, command, buf, 1);
4602 if (ret < 0)
4603 goto err;
4605 buf[0] = 0x7c;
4606 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_AECH,
4607 dev->sensor_flags, buf);
4608 if (ret < 0)
4609 goto err;
4611 buf[0] = 0x03;
4612 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_COM1,
4613 dev->sensor_flags, buf);
4614 if (ret < 0)
4615 goto err;
4617 /* urb 379 */
4618 buf[0] = 0x00;
4619 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_AECHM,
4620 dev->sensor_flags, buf);
4621 if (ret < 0)
4622 goto err;
4624 buf[0] = 0x00;
4625 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_ADVFL,
4626 dev->sensor_flags, buf);
4627 if (ret < 0)
4628 goto err;
4630 /* urb 391 */
4631 buf[0] = 0x00;
4632 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_ADVFH,
4633 dev->sensor_flags, buf);
4634 if (ret < 0)
4635 goto err;
4637 /* urb 397 */
4638 buf[0] = 0x00;
4639 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_GAIN,
4640 dev->sensor_flags, buf);
4641 if (ret < 0)
4642 goto err;
4644 /* urb 403 */
4645 buf[0] = 0x78; /*buf[1] = 0x78;*/
4646 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_BLUE,
4647 dev->sensor_flags, buf);
4648 if (ret < 0)
4649 goto err;
4650 /* urb 409 */
4651 buf[0] = 0x78;
4652 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_RED,
4653 dev->sensor_flags, buf);
4654 if (ret < 0)
4655 goto err;
4656 /* 627f does the last two writes at once (2 byte write to OV965X_CTL_BLUE) */
4658 /* urb 423 */
4659 command = 0x11ba;
4660 buf[0] = 0x0a;
4661 ret = usb_microdia_control_write(dev, command, buf, 1);
4662 if (ret < 0)
4663 goto err;
4665 if (dev->webcam_model == CAMERA_MODEL(USB_0C45_VID, USB_627F_PID))
4666 buf[0] = 0x0e;
4667 else /* 624f */
4668 buf[0] = 0x00;
4669 command = 0x118b;
4670 ret = usb_microdia_control_write(dev, command, buf, 1);
4671 if (ret < 0)
4672 goto err;
4674 command = 0x10f7;
4675 buf[0] = 0x05;
4676 ret = usb_microdia_control_write(dev, command, buf, 1);
4677 if (ret < 0)
4678 goto err;
4680 command = 0x10f8;
4681 buf[0] = 0x14;
4682 ret = usb_microdia_control_write(dev, command, buf, 1);
4683 if (ret < 0)
4684 goto err;
4686 /* urb 463 */
4687 command = 0x10fa;
4688 buf[0] = 0xff;
4689 ret = usb_microdia_control_write(dev, command, buf, 1);
4690 if (ret < 0)
4691 goto err;
4693 command = 0x10f9;
4694 buf[0] = 0x00;
4695 ret = usb_microdia_control_write(dev, command, buf, 1);
4696 if (ret < 0)
4697 goto err;
4699 /* urb 467 */
4700 command = 0x10f9;
4701 buf[0] = 0x00;
4702 ret = usb_microdia_control_write(dev, command, buf, 1);
4703 if (ret < 0)
4704 goto err;
4706 command = 0x11ba;
4707 buf[0] = 0x0e;
4708 ret = usb_microdia_control_write(dev, command, buf, 1);
4709 if (ret < 0)
4710 goto err;
4712 /* memset(buf, 0, 4); */
4713 command = 0x11bc;
4714 buf[0] = 0x80; buf[1] = 0x02; buf[2] = 0xe0; buf[3] = 0x01;
4715 ret = usb_microdia_control_write(dev, command, buf, 4);
4716 if (ret < 0)
4717 goto err;
4719 command = 0x11c0;
4720 if (dev->webcam_model == CAMERA_MODEL(USB_0C45_VID, USB_627F_PID)) {
4721 buf[0] = 0x19; buf[1] = 0x31; buf[2] = 0x44; buf[3] = 0x50;
4722 buf[4] = 0x52; buf[5] = 0x56; buf[6] = 0x5b; buf[7] = 0x61;
4723 buf[8] = 0x65; buf[9] = 0x6a; buf[10] = 0x6c; buf[11] = 0x6e;
4724 buf[12] = 0x70; buf[13] = 0x72; buf[14] = 0x74; buf[15] = 0x76;
4725 buf[16] = 0x1a; buf[17] = 0x31; buf[18] = 0x44; buf[19] = 0x51;
4726 buf[20] = 0x54; buf[21] = 0x57; buf[22] = 0x5c; buf[23] = 0x61;
4727 buf[24] = 0x66; buf[25] = 0x6b; buf[26] = 0x6d; buf[27] = 0x6f;
4728 buf[28] = 0x71; buf[29] = 0x73; buf[30] = 0x75; buf[31] = 0x76;
4729 buf[32] = 0x1b; buf[33] = 0x32; buf[34] = 0x44; buf[35] = 0x50;
4730 buf[36] = 0x50; buf[37] = 0x54; buf[38] = 0x59; buf[39] = 0x5e;
4731 buf[40] = 0x63; buf[41] = 0x67; buf[42] = 0x6a; buf[43] = 0x6c;
4732 buf[44] = 0x6e; buf[45] = 0x70; buf[46] = 0x72; buf[47] = 0x73;
4733 } else /* 624f */ {
4734 buf[0] = 0x10; buf[1] = 0x21; buf[2] = 0x34; buf[3] = 0x40;
4735 buf[4] = 0x47; buf[5] = 0x4F; buf[6] = 0x57; buf[7] = 0x5F;
4736 buf[8] = 0x64; buf[9] = 0x68; buf[10] = 0x6D; buf[11] = 0x73;
4737 buf[12] = 0x79; buf[13] = 0x80; buf[14] = 0x89; buf[15] = 0x97;
4738 buf[16] = 0x0D; buf[17] = 0x1C; buf[18] = 0x2A; buf[19] = 0x33;
4739 buf[20] = 0x38; buf[21] = 0x3D; buf[22] = 0x44; buf[23] = 0x4A;
4740 buf[24] = 0x4E; buf[25] = 0x52; buf[26] = 0x56; buf[27] = 0x5B;
4741 buf[28] = 0x61; buf[29] = 0x68; buf[30] = 0x6F; buf[31] = 0x7A;
4742 buf[32] = 0x0D; buf[33] = 0x1A; buf[34] = 0x2A; buf[35] = 0x31;
4743 buf[36] = 0x36; buf[37] = 0x3B; buf[38] = 0x41; buf[39] = 0x47;
4744 buf[40] = 0x4A; buf[41] = 0x4E; buf[42] = 0x53; buf[43] = 0x58;
4745 buf[44] = 0x5D; buf[45] = 0x64; buf[46] = 0x6B; buf[47] = 0x76;
4747 ret = usb_microdia_control_write(dev, command, buf, 48);
4749 /* urb 483 */
4750 command = 0x11a5;
4751 buf[0] = 0x2d; buf[1] = 0x2d; buf[2] = 0x3a; buf[3] = 0x05;
4752 buf[4] = 0x04; buf[5] = 0x3f;
4753 ret = usb_microdia_control_write(dev, command, buf, 6);
4754 if (ret < 0)
4755 goto err;
4757 /* urb 485 */
4758 command = 0x11af;
4759 buf[0] = 0x28; buf[1] = 0xd8; buf[2] = 0x14; buf[3] = 0xec;
4760 ret = usb_microdia_control_write(dev, command, buf, 4);
4761 if (ret < 0)
4762 goto err;
4764 command = 0x11b3;
4765 buf[0] = 0x32; buf[1] = 0xdd; buf[2] = 0x32; buf[3] = 0xdd;
4766 ret = usb_microdia_control_write(dev, command, buf, 4);
4767 if (ret < 0)
4768 goto err;
4770 /* urb 489 */
4771 command = 0x10e0;
4772 buf[0] = 0x07;
4773 ret = usb_microdia_control_write(dev, command, buf, 1);
4774 if (ret < 0)
4775 goto err;
4777 command = 0x1061;
4778 buf[0] = 0x01;
4779 ret = usb_microdia_control_write(dev, command, buf, 1);
4780 if (ret < 0)
4781 goto err;
4783 command = 0x10e0;
4784 buf[0] = 0x27;
4785 ret = usb_microdia_control_write(dev, command, buf, 1);
4786 if (ret < 0)
4787 goto err;
4790 /* //////////////////////////////////////////////////////////////////// */
4791 /* urb 495 */
4792 command = 0x1100;
4793 buf[0] = 0x0d; buf[1] = 0x08; buf[2] = 0x08; buf[3] = 0x0d;
4794 buf[4] = 0x08; buf[5] = 0x08; buf[6] = 0x0d; buf[7] = 0x0d;
4795 buf[8] = 0x0d; buf[9] = 0x0d; buf[10] = 0x11; buf[11] = 0x0d;
4796 buf[12] = 0x0d; buf[13] = 0x11; buf[14] = 0x15; buf[15] = 0x21;
4797 buf[16] = 0x15; buf[17] = 0x15; buf[18] = 0x11; buf[19] = 0x11;
4798 buf[20] = 0x15; buf[21] = 0x2a; buf[22] = 0x1d; buf[23] = 0x1d;
4799 buf[24] = 0x19; buf[25] = 0x21; buf[26] = 0x32; buf[27] = 0x2a;
4800 buf[28] = 0x32; buf[29] = 0x32; buf[30] = 0x2e; buf[31] = 0x2a;
4801 buf[32] = 0x2e; buf[33] = 0x2e; buf[34] = 0x36; buf[35] = 0x3a;
4802 buf[36] = 0x4b; buf[37] = 0x43; buf[38] = 0x36; buf[39] = 0x3a;
4803 buf[40] = 0x47; buf[41] = 0x3a; buf[42] = 0x2e; buf[43] = 0x2e;
4804 buf[44] = 0x43; buf[45] = 0x5c; buf[46] = 0x43; buf[47] = 0x47;
4805 buf[48] = 0x4f; buf[49] = 0x54; buf[50] = 0x58; buf[51] = 0x58;
4806 buf[52] = 0x58; buf[53] = 0x32; buf[54] = 0x3f; buf[55] = 0x60;
4807 buf[56] = 0x64; buf[57] = 0x5c; buf[58] = 0x54; buf[59] = 0x64;
4808 buf[60] = 0x4b; buf[61] = 0x54; buf[62] = 0x58; buf[63] = 0x54;
4809 ret = usb_microdia_control_write(dev, command, buf, 64);
4810 if (ret < 0)
4811 goto err;
4813 command = 0x1140;
4814 buf[0] = 0x0d; buf[1] = 0x11; buf[2] = 0x11; buf[3] = 0x15;
4815 buf[4] = 0x11; buf[5] = 0x15; buf[6] = 0x26; buf[7] = 0x15;
4816 buf[8] = 0x15; buf[9] = 0x26; buf[10] = 0x54; buf[11] = 0x36;
4817 buf[12] = 0x2e; buf[13] = 0x36; buf[14] = 0x54; buf[15] = 0x54;
4818 buf[16] = 0x54; buf[17] = 0x54; buf[18] = 0x54; buf[19] = 0x54;
4819 buf[20] = 0x54; buf[21] = 0x54; buf[22] = 0x54; buf[23] = 0x54;
4820 buf[24] = 0x54; buf[25] = 0x54; buf[26] = 0x54; buf[27] = 0x54;
4821 buf[28] = 0x54; buf[29] = 0x54; buf[30] = 0x54; buf[31] = 0x54;
4822 buf[32] = 0x54; buf[33] = 0x54; buf[34] = 0x54; buf[35] = 0x54;
4823 buf[36] = 0x54; buf[37] = 0x54; buf[38] = 0x54; buf[39] = 0x54;
4824 buf[40] = 0x54; buf[41] = 0x54; buf[42] = 0x54; buf[43] = 0x54;
4825 buf[44] = 0x54; buf[45] = 0x54; buf[46] = 0x54; buf[47] = 0x54;
4826 buf[48] = 0x54; buf[49] = 0x54; buf[50] = 0x54; buf[51] = 0x54;
4827 buf[52] = 0x54; buf[53] = 0x54; buf[54] = 0x54; buf[55] = 0x54;
4828 buf[56] = 0x54; buf[57] = 0x54; buf[58] = 0x54; buf[59] = 0x54;
4829 buf[60] = 0x54; buf[61] = 0x54; buf[62] = 0x54; buf[63] = 0x54;
4830 ret = usb_microdia_control_write(dev, command, buf, 64);
4831 if (ret < 0)
4832 goto err;
4834 /* urb 499 */
4835 command = 0x10e0;
4836 buf[0] = 0x07;
4837 ret = usb_microdia_control_write(dev, command, buf, 1);
4838 if (ret < 0)
4839 goto err;
4841 command = 0x1061;
4842 buf[0] = 0x03;
4843 ret = usb_microdia_control_write(dev, command, buf, 1);
4844 if (ret < 0)
4845 goto err;
4847 /* urb 503 */
4848 command = 0x10e0;
4849 buf[0] = 0x0b;
4850 ret = usb_microdia_control_write(dev, command, buf, 1);
4851 if (ret < 0)
4852 goto err;
4854 command = 0x1189;
4855 buf[0] = 0x8c;
4856 ret = usb_microdia_control_write(dev, command, buf, 1);
4857 if (ret < 0)
4858 goto err;
4860 buf[0] = 0x40;
4861 command = 0x11bc;
4862 ret = usb_microdia_control_write(dev, command, buf, 1);
4863 if (ret < 0)
4864 goto err;
4866 buf[0] = 0x01;
4867 command = 0x11bd;
4868 ret = usb_microdia_control_write(dev, command, buf, 1);
4869 if (ret < 0)
4870 goto err;
4872 buf[0] = 0xf0;
4873 command = 0x11be;
4874 ret = usb_microdia_control_write(dev, command, buf, 1);
4875 if (ret < 0)
4876 goto err;
4878 buf[0] = 0x00;
4879 command = 0x11bf;
4880 ret = usb_microdia_control_write(dev, command, buf, 1);
4881 if (ret < 0)
4882 goto err;
4884 /* urb 515 */
4885 command = 0x1180;
4886 buf[0] = 0x02; buf[1] = 0x00; buf[2] = 0x07; buf[3] = 0x00;
4887 buf[4] = 0x28; buf[5] = 0x3c;
4888 ret = usb_microdia_control_write(dev, command, buf, 6);
4889 if (ret < 0)
4890 goto err;
4892 command = 0x10fb;
4893 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0;
4894 buf[4] = 0x00;
4895 ret = usb_microdia_control_write(dev, command, buf, 5);
4896 if (ret < 0)
4897 goto err;
4899 command = 0x1189;
4900 buf[0] = 0x8c;
4901 ret = usb_microdia_control_write(dev, command, buf, 1);
4902 if (ret < 0)
4903 goto err;
4905 command = 0x11a1;
4906 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
4907 ret = usb_microdia_control_write(dev, command, buf, 4);
4908 if (ret < 0)
4909 goto err;
4911 /* 523 */
4912 command = 0x11ab;
4913 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
4914 ret = usb_microdia_control_write(dev, command, buf, 4);
4915 if (ret < 0)
4916 goto err;
4918 command = 0x1061;
4919 buf[0] = 0x03;
4920 ret = usb_microdia_control_write(dev, command, buf, 1);
4921 if (ret < 0)
4922 goto err;
4924 command = 0x11ba;
4925 buf[0] = 0x0e;
4926 ret = usb_microdia_control_write(dev, command, buf, 1);
4927 if (ret < 0)
4928 goto err;
4930 command = 0x11b9;
4931 buf[0] = 0x00;
4932 ret = usb_microdia_control_write(dev, command, buf, 1);
4933 if (ret < 0)
4934 goto err;
4936 command = 0x11ba;
4937 buf[0] = 0x0f;
4938 ret = usb_microdia_control_write(dev, command, buf, 1);
4939 if (ret < 0)
4940 goto err;
4942 command = 0x1061;
4943 buf[0] = 0x01;
4944 ret = usb_microdia_control_write(dev, command, buf, 1);
4945 if (ret < 0)
4946 goto err;
4948 command = 0x1000;
4949 buf[0] = 0x78;
4950 ret = usb_microdia_control_write(dev, command, buf, 1);
4951 if (ret < 0)
4952 goto err;
4954 command = 0x1002;
4955 buf[0] = 0x18;
4956 ret = usb_microdia_control_write(dev, command, buf, 1);
4957 if (ret < 0)
4958 goto err;
4960 /* urb 539 */
4961 command = 0x1002;
4962 buf[0] = 0x18;
4963 ret = usb_microdia_control_write(dev, command, buf, 1);
4964 if (ret < 0)
4965 goto err;
4967 command = 0x11b8;
4968 buf[0] = 0x7a;
4969 ret = usb_microdia_control_write(dev, command, buf, 1);
4970 if (ret < 0)
4971 goto err;
4973 command = 0x118a;
4974 buf[0] = 0x04;
4975 ret = usb_microdia_control_write(dev, command, buf, 1);
4976 if (ret < 0)
4977 goto err;
4979 /* urb 545 */
4980 command = 0x0395;
4981 buf[0] = 0x04;
4982 ret = usb_microdia_control_write(dev, command, buf, 1);
4983 if (ret < 0)
4984 goto err;
4986 command = 0x11b8;
4987 if (last_11b8[0] == 0x3c)
4988 buf[0] = 0x78;
4989 else if (last_11b8[0] == 0xbc)
4990 buf[0] = 0xf8;
4991 ret = usb_microdia_control_write(dev, command, buf, 1);
4992 if (ret < 0)
4993 goto err;
4994 ret = usb_microdia_control_read(dev, command, buf, 1); /* 624f: 0xb8 627f: 0x38 */
4995 if (ret < 0)
4996 goto err;
4997 if (buf[0] == 0x38)
4998 buf[0] = 0x79;
4999 else if (buf[0] == 0xb8)
5000 buf[0] = 0xf9;
5001 ret = usb_microdia_control_write(dev, command, buf, 1);
5002 if (ret < 0)
5003 goto err;
5004 ret = usb_microdia_control_read(dev, command, buf, 1); /* 624f: 0xb9 627f: 0x39 */
5005 if (ret < 0)
5006 goto err;
5007 if (buf[0] == 0x39)
5008 buf[0] = 0x7a;
5009 else if (buf[0] == 0xb9)
5010 buf[0] = 0xfa;
5011 ret = usb_microdia_control_write(dev, command, buf, 1);
5012 if (ret < 0)
5013 goto err;
5014 ret = usb_microdia_control_read(dev, command, buf, 1); /* 0x3a */
5015 if (ret < 0)
5016 goto err;
5017 if (buf[0] == 0x3a)
5018 buf[0] = 0x7b;
5019 else if (buf[0] == 0xba)
5020 buf[0] = 0xfb;
5021 ret = usb_microdia_control_write(dev, command, buf, 1);
5022 if (ret < 0)
5023 goto err;
5024 ret = usb_microdia_control_read(dev, command, buf, 1); /* 624f: 0x3b 627f: 0xbb */
5025 if (ret < 0)
5026 goto err;
5027 if (buf[0] == 0x3b)
5028 buf[0] = 0x7c;
5029 else if (buf[0] == 0xbb)
5030 buf[0] = 0xfc;
5032 ret = usb_microdia_control_write(dev, command, buf, 1);
5033 if (ret < 0)
5034 goto err;
5036 ret = usb_microdia_control_read(dev, command, buf, 1); /* 624f: 0x3c 627f: 0xbc */
5037 if (ret < 0)
5038 goto err;
5040 buf[0] = buf[0] & 0xf0; /* 0xf0 or 0x70 */
5042 /* THIS VALUE SEEMS TO DEPEND ON WHAT WAS
5043 READ/WRITTEN IN THE LAST 5 READS/WRITES */
5044 if (dev->webcam_model == CAMERA_MODEL(USB_0C45_VID, USB_627F_PID))
5045 buf[0] = buf[0] | 0x09;
5046 else /* 624f */
5047 buf[0] = buf[0] | 0x08;
5048 ret = usb_microdia_control_write(dev, command, buf, 1);
5049 if (ret < 0)
5050 goto err;
5052 buf[0] = 0x80;
5053 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_CLKRC,
5054 dev->sensor_flags, buf);
5055 if (ret < 0)
5056 goto err;
5058 buf[0] = 0x00;
5059 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_EXHCH,
5060 dev->sensor_flags, buf);
5061 if (ret < 0)
5062 goto err;
5064 /* urb 581 */
5065 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_EXHCL,
5066 dev->sensor_flags, buf);
5067 if (ret < 0)
5068 goto err;
5070 /* urb 587 */
5071 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_DM_LNL,
5072 dev->sensor_flags, buf);
5073 if (ret < 0)
5074 goto err;
5076 /* urb 593 */
5077 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, OV965X_CTL_DM_LNH,
5078 dev->sensor_flags, buf);
5079 if (ret < 0)
5080 goto err;
5082 command = 0x1061;
5083 buf[0] = 0x03;
5084 ret = usb_microdia_control_write(dev, command, buf, 1);
5085 if (ret < 0)
5086 goto err;
5088 return 0;
5090 err:
5091 UDIA_ERROR("start stream: command %x failed (%d)!\n", command, ret);
5092 return ret;
5095 int microdia_6260_start_stream(struct usb_microdia *dev)
5097 int ret;
5098 __u8 buf[32];
5100 ret = usb_microdia_control_read(dev, 0x1045, buf, 1);
5101 buf[0] = 0x1f;
5102 ret = usb_microdia_control_write(dev, 0x1045, buf, 1);
5103 buf[0] = 0x00;
5104 ret = usb_microdia_control_write(dev, 0x1066, buf, 1);
5105 buf[0] = 0x20;
5106 ret = usb_microdia_control_write(dev, 0x1007, buf, 1);
5107 buf[0] = 0x00;
5108 ret = usb_microdia_control_write(dev, 0x1006, buf, 1);
5109 buf[0] = 0x78;
5110 ret = usb_microdia_control_write(dev, 0x1000, buf, 1);
5111 buf[0] = 0xc7;
5112 ret = usb_microdia_control_write(dev, 0x1001, buf, 1);
5113 buf[0] = 0x18;
5114 ret = usb_microdia_control_write(dev, 0x1002, buf, 1);
5115 buf[0] = 0x01;
5116 ret = usb_microdia_control_write(dev, 0x1061, buf, 1);
5117 buf[0] = 0x80;
5118 ret = usb_microdia_control_write(dev, 0x1020, buf, 1);
5120 buf[0] = 0x40; buf[1] = 0x30; buf[2] = 0x20; buf[3] = 0x10;
5121 buf[4] = 0x08;
5122 ret = usb_microdia_control_write(dev, 0x1067, buf, 5);
5124 buf[0] = 0x80; buf[1] = 0x21; buf[2] = 0x00; buf[3] = 0x00;
5125 buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00;
5126 buf[8] = 0x03;
5127 ret = usb_microdia_control_write(dev, 0x10c0, buf, 9);
5129 buf[0] = 0x45; buf[1] = 0x18; buf[2] = 0x00; buf[3] = 0x30;
5130 buf[4] = 0x00; buf[5] = 0x09; buf[6] = 0x00; buf[7] = 0xed;
5131 buf[8] = 0x0f; buf[9] = 0xda; buf[10] = 0x0f; buf[11] = 0x3a;
5132 buf[12] = 0x00; buf[13] = 0x3a; buf[14] = 0x00; buf[15] = 0xd0;
5133 buf[16] = 0x0f; buf[17] = 0xf7; buf[18] = 0x0f; buf[19] = 0x00;
5134 buf[20] = 0x00; buf[21] = 0x00; buf[22] = 0x60; buf[23] = 0x0a;
5135 ret = usb_microdia_control_write(dev, 0x10e0, buf, 24);
5137 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00;
5138 ret = usb_microdia_control_write(dev, 0x10f8, buf, 3);
5140 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0;
5141 buf[4] = 0x00;
5142 ret = usb_microdia_control_write(dev, 0x10fb, buf, 5);
5144 buf[0] = 0x8a; buf[1] = 0x8c; buf[2] = 0x08;
5145 ret = usb_microdia_control_write(dev, 0x1188, buf, 3);
5147 buf[0] = 0x00; buf[1] = 0x20; buf[2] = 0x20; buf[3] = 0x20;
5148 buf[4] = 0x20; buf[5] = 0x00; buf[6] = 0x24; buf[7] = 0x3b;
5149 buf[8] = 0x4f; buf[9] = 0x61; buf[10] = 0x71; buf[11] = 0x80;
5150 buf[12] = 0x8f; buf[13] = 0x9d; buf[14] = 0xab; buf[15] = 0xb8;
5151 buf[16] = 0xc4; buf[17] = 0xd1; buf[18] = 0xdd; buf[19] = 0xe9;
5152 buf[20] = 0xf4; buf[21] = 0xff;
5153 ret = usb_microdia_control_write(dev, 0x118b, buf, 22);
5155 buf[0] = 0x00; buf[1] = 0x00;
5156 ret = usb_microdia_control_write(dev, 0x11a1, buf, 2);
5158 buf[0] = 0x60; buf[1] = 0x28; buf[2] = 0x00; buf[3] = 0x00;
5159 buf[4] = 0x00; buf[5] = 0x40; buf[6] = 0x01; buf[7] = 0xf0;
5160 buf[8] = 0x00;
5161 ret = usb_microdia_control_write(dev, 0x11b7, buf, 9);
5163 buf[0] = 0x78;
5164 ret = usb_microdia_control_write(dev, 0x1000, buf, 1);
5166 buf[0] = 0x38;
5167 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5169 ret = ov7670_initialise(dev);
5171 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1, 0x3b, dev->sensor_flags, buf);
5172 ret = usb_microdia_control_read(dev, 0x10c1, buf, 1);
5173 buf[0] = 0x50;
5174 ret = usb_microdia_control_write(dev, 0x10c1, buf, 1);
5176 /* TRY TO READ FROM EEPROM: */
5177 ret = sn9c20x_read_i2c_data(dev, 0x50, 1, 0x00, dev->sensor_flags, buf);
5178 if (ret < 0)
5179 UDIA_INFO("No EEPROM found\n");
5180 else
5181 UDIA_INFO("Read from EEPROM successful\n");
5183 buf[0] = 0x21;
5184 ret = usb_microdia_control_write(dev, 0x10c1, buf, 1);
5185 buf[0] = 0x45;
5186 ret = usb_microdia_control_write(dev, 0x10e0, buf, 1);
5187 buf[0] = 0xc6;
5188 ret = usb_microdia_control_write(dev, 0x1001, buf, 1);
5189 buf[0] = 0xc4;
5190 ret = usb_microdia_control_write(dev, 0x1001, buf, 1);
5192 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x01; buf[3] = 0x00;
5193 buf[4] = 0x50; buf[5] = 0x3c;
5194 ret = usb_microdia_control_write(dev, 0x1180, buf, 6);
5196 buf[0] = 0x00; buf[1] = 0x40; buf[2] = 0x00; buf[3] = 0xf0;
5197 buf[4] = 0x01;
5198 ret = usb_microdia_control_write(dev, 0x10fb, buf, 5);
5200 buf[0] = 0x80;
5201 ret = usb_microdia_control_write(dev, 0x1189, buf, 1);
5203 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0xd5; buf[3] = 0x50;
5204 ret = usb_microdia_control_write(dev, 0x11a1, buf, 4);
5206 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0xa0; buf[3] = 0x3c;
5207 ret = usb_microdia_control_write(dev, 0x11ab, buf, 4);
5208 buf[0] = 0x78;
5209 ret = usb_microdia_control_write(dev, 0x1000, buf, 1);
5210 buf[0] = 0x10;
5211 ret = usb_microdia_control_write(dev, 0x1002, buf, 1);
5212 buf[0] = 0x00;
5213 ret = usb_microdia_control_write(dev, 0x1002, buf, 1);
5214 buf[0] = 0x38;
5215 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5216 buf[0] = 0x04;
5217 ret = usb_microdia_control_write(dev, 0x118a, buf, 1);
5218 buf[0] = 0x04;
5219 ret = usb_microdia_control_write(dev, 0x0395, buf, 1);
5220 buf[0] = 0x78;
5221 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5222 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5223 buf[0] = 0xf9;
5224 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5225 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5226 buf[0] = 0xfa;
5227 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5228 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5229 buf[0] = 0x7b;
5230 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5231 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5232 buf[0] = 0x7c;
5233 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5234 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5235 buf[0] = 0x7d;
5236 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5237 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5238 buf[0] = 0x7b;
5239 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5241 /* OV7670 Intialise Part 2 */
5242 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x01; buf[3] = 0x00;
5243 buf[4] = 0x50; buf[5] = 0x3c;
5244 ret = usb_microdia_control_write(dev, 0x1180, buf, 6);
5246 buf[0] = 0x00; buf[1] = 0x40; buf[2] = 0x00; buf[3] = 0xf0;
5247 buf[4] = 0x01;
5248 ret = usb_microdia_control_write(dev, 0x10fb, buf, 5);
5250 buf[0] = 0x80;
5251 ret = usb_microdia_control_write(dev, 0x1189, buf, 1);
5253 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0xd5; buf[3] = 0x50;
5254 ret = usb_microdia_control_write(dev, 0x11a1, buf, 4);
5256 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0xa0; buf[3] = 0x3c;
5257 ret = usb_microdia_control_write(dev, 0x11ab, buf, 4);
5259 buf[0] = 0x03;
5260 ret = usb_microdia_control_write(dev, 0x1061, buf, 1);
5261 buf[0] = 0x01;
5262 ret = usb_microdia_control_write(dev, 0x1061, buf, 1);
5263 buf[0] = 0x78;
5264 ret = usb_microdia_control_write(dev, 0x1000, buf, 1);
5265 buf[0] = 0x00;
5266 ret = usb_microdia_control_write(dev, 0x1002, buf, 1);
5267 buf[0] = 0x00;
5268 ret = usb_microdia_control_write(dev, 0x1002, buf, 1);
5269 buf[0] = 0x7b;
5270 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5271 buf[0] = 0x04;
5272 ret = usb_microdia_control_write(dev, 0x118a, buf, 1);
5273 buf[0] = 0x04;
5274 ret = usb_microdia_control_write(dev, 0x0395, buf, 1);
5275 buf[0] = 0x78;
5276 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5277 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5278 buf[0] = 0x79;
5279 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5280 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5281 buf[0] = 0x7a;
5282 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5283 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5284 buf[0] = 0x7b;
5285 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5286 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5287 buf[0] = 0x7c;
5288 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5289 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5290 buf[0] = 0x7d;
5291 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5292 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5293 buf[0] = 0xfa;
5294 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5296 /* OV7670 Initialisation Part 3 Goes Here */
5297 buf[0] = 0x03;
5298 ret = usb_microdia_control_write(dev, 0x1061, buf, 1);
5300 return ret;
5304 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
5306 * @param dev
5308 * @returns 0 (ok) or -1 (error)
5310 * @author Comer352l
5312 * Windows driver versions: 5.7.23.000
5313 * Windows versions: 2000 and XP
5314 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
5315 * All logs were made using AMCAP with 640x480, RGB24
5317 int microdia_6270_start_stream(struct usb_microdia *dev)
5319 __u8 buf[64];
5320 __u8 last_11b8[1];
5321 int k;
5322 int retI2C;
5324 /* Check if sensor slave address is valid: */
5325 if ((dev->sensor_slave_address != MT9V111_I2C_SLAVE_ADDRESS) && (dev->sensor_slave_address != MT9V011_I2C_SLAVE_ADDRESS)) {
5326 UDIA_INFO("microdia_6270_start_stream(): Invalid sensor slave address !\n");
5327 return -1;
5330 /* <= INTERRUPT COMING BACK (URB 1953) */
5331 /* SWITCH TO ALTERNATE SETTINGS 8 (URB 1954) // NOT IN ALEX'S LOG */
5332 /* => INTERRUPT GOING DOWN (URB 1955) */
5334 buf[0] = 0x00;
5335 usb_microdia_control_write(dev, 0x1066, buf, 1); /* URB 1956 */
5337 /* <= INTERRUPT COMING BACK (URB 1955) */
5338 /* => INTERRUPT GOING DOWN (URB 1957) */
5340 buf[0] = 0x78;
5341 usb_microdia_control_write(dev, 0x1000, buf, 1); /* URB 1958 */
5342 buf[0] = 0xc7;
5343 usb_microdia_control_write(dev, 0x1001, buf, 1); /* URB 1959 */
5344 buf[0] = 0x18;
5345 usb_microdia_control_write(dev, 0x1002, buf, 1); /* URB 1960 */
5346 buf[0] = 0x01;
5347 usb_microdia_control_write(dev, 0x1061, buf, 1); /* URB 1961 */
5348 buf[0] = 0x80;
5349 usb_microdia_control_write(dev, 0x1020, buf, 1); /* URB 1962 */
5350 buf[0] = 0x40; buf[1] = 0x30; buf[2] = 0x20; buf[3] = 0x10; buf[4] = 0x08;
5351 usb_microdia_control_write(dev, 0x1067, buf, 5); /* URB 1963 */
5353 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5354 /* STRANGE I2C MESSAGE: */
5355 /* - 9 bytes */
5356 /* - byte 8 = 0x00 at first start + first cycle */
5357 /* - procedure not complete: no wait/check for ack/error, no readout of 0x10c2 */
5358 /* - dummy writes at first cycle and read at second cycle, but there are many I2C messages in the meantime, so this should not work */
5359 /* */
5360 /* AT FIRST START + FIRST CYCLE: */
5361 buf[0] = 0x80; buf[1] = dev->sensor_slave_address; buf[2] = 0x00; buf[3] = 0x00;
5362 buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x03;
5363 /* AT ALL FURTHER STARTS + FIRST CYCLE: */
5364 /* MT9V111: I2C MESSAGE => IFP Register 0x33: Auto exposure */
5365 /* buf[0] = 0x90; buf[1] = dev->sensor_slave_address; buf[2] = 0x33; buf[3] = 0x00; */
5366 /* buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03; */
5367 /* MT9V011: ????????????????????????? */
5368 /* buf[0] = 0x90; buf[1] = dev->sensor_slave_address; buf[2] = 0x07; buf[3] = 0x00; */
5369 /* buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03; */
5370 /* ALWAYS AT 2nd AND FURTHER CYCLES: */
5371 /* MT9V111: */
5372 /* buf[0] = 0xa2; buf[1] = 0x5c; buf[2] = 0x00; buf[3] = 0x36; */
5373 /* buf[4] = 0x00; buf[5] = 0x82; buf[6] = 0x3a; buf[7] = 0x10; buf[8] = 0x03; */
5374 /* => buf[3] to buf[6] simply contain bytes read with URB 2215 */
5375 /* MT9V011: */
5376 /* buf[0] = 0xb0; buf[1] = 0x5d; buf[2] = 0x07; buf[3] = 0x00; */
5377 /* buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03; */
5378 usb_microdia_control_write(dev, 0x10c0, buf, 9); /* URB 1964 */
5379 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5381 buf[0] = 0x45; buf[1] = 0x18; buf[2] = 0x00; buf[3] = 0x30;
5382 buf[4] = 0x00; buf[5] = 0x09; buf[6] = 0x00; buf[7] = 0xed;
5383 buf[8] = 0x0f; buf[9] = 0xda; buf[10] = 0x0f; buf[11] = 0x3a;
5384 buf[12] = 0x00; buf[13] = 0x3a; buf[14] = 0x00; buf[15] = 0xd0;
5385 buf[16] = 0x0f; buf[17] = 0xf7; buf[18] = 0x0f; buf[19] = 0x00;
5386 buf[20] = 0x00; buf[21] = 0x00; buf[22] = 0x60; buf[23] = 0x0a;
5387 usb_microdia_control_write(dev, 0x10e0, buf, 24); /* URB 1965 */
5388 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00;
5389 usb_microdia_control_write(dev, 0x10f8, buf, 3); /* URB 1966 */
5390 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0; buf[4] = 0x00;
5391 usb_microdia_control_write(dev, 0x10fb, buf, 5); /* URB 1967 */
5392 buf[0] = 0x06; buf[1] = 0x0c; buf[2] = 0x08;
5393 usb_microdia_control_write(dev, 0x1188, buf, 3); /* URB 1968 */
5394 buf[0] = 0x00; buf[1] = 0x20; buf[2] = 0x20; buf[3] = 0x20;
5395 buf[4] = 0x20; buf[5] = 0x00; buf[6] = 0x24; buf[7] = 0x3b;
5396 buf[8] = 0x4f; buf[9] = 0x61; buf[10] = 0x71; buf[11] = 0x80;
5397 buf[12] = 0x8f; buf[13] = 0x9d; buf[14] = 0xab; buf[15] = 0xb8;
5398 buf[16] = 0xc4; buf[17] = 0xd1; buf[18] = 0xdd; buf[19] = 0xe9;
5399 buf[20] = 0xf4; buf[21] = 0xff;
5400 usb_microdia_control_write(dev, 0x118b, buf, 22); /* URB 1969 */
5401 buf[0] = 0x00; buf[1] = 0x00;
5402 usb_microdia_control_write(dev, 0x11a1, buf, 2); /* URB 1970 */
5403 buf[0] = 0x60; buf[1] = 0x28; buf[2] = 0x00; buf[3] = 0x08;
5404 buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00;
5405 buf[8] = 0x00;
5406 usb_microdia_control_write(dev, 0x11b7, buf, 9); /* URB 1971 */
5407 buf[0] = 0x38;
5408 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 1972 */
5409 buf[0] = 0x78;
5410 usb_microdia_control_write(dev, 0x1000, buf, 1); /* URB 1973 */
5412 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5413 /* I2C MESSAGES */
5414 retI2C = 0;
5415 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS) {
5416 /* Write to IFP register 0x0d: Color Correction Register 8 */
5417 buf[0] = 0x00; buf[1] = 0x01;
5418 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x0d, dev->sensor_flags, buf); /* URBs 1974-1976 */
5419 /* Write to IFP register 0x0d: Color Correction Register 8 */
5420 buf[0] = 0x00; buf[1] = 0x00; /* ??? */
5421 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x0d, dev->sensor_flags, buf); /* URBs 1977-1979 */
5422 /* Writes to IFP registers 0x01: Register Address Space Selection */
5423 /* 0x02: Color Correction Register 1 */
5424 buf[0] = 0x00; buf[1] = 0x01; /* select IFP address space */
5425 buf[2] = 0x00; buf[3] = 0x16; /* ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
5426 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x01, dev->sensor_flags, buf); /* URBs 1980-1982 */
5427 /* Writes to IFP registers 0x03: Color Correction Register 3 */
5428 /* 0x04: Color Correction Register 4 */
5429 buf[0] = 0x01; buf[1] = 0xe1; /* ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
5430 buf[2] = 0x02; buf[3] = 0x81; /* ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
5431 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x03, dev->sensor_flags, buf); /* URBs 1983-1985 */
5432 /* Writes to IFP registers 0x05: Aperture Correction (Sharpening) */
5433 /* 0x06: Operating Mode Control */
5434 buf[0] = 0x00; buf[1] = 0x04; /* 100% sharpening, no automatic sharpness reduction at low light // AT FIRST START + FIRST CYCLE: 0x00 0x00: no sharpening */
5435 buf[2] = 0x00; buf[3] = 0x00; /* stop AWB at the current values, no on-the-fly defect correction, no auto exposure, + RESREVED option */
5436 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x05, dev->sensor_flags, buf); /* URBs 1986-1988 */
5437 /* Writes to IFP registers 0x07: Image Flow Processor Soft Reset */
5438 /* 0x08: Output Format Control */
5439 buf[0] = 0x30; buf[1] = 0x02; /* reset // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
5440 buf[2] = 0x04; buf[3] = 0x80; /* bypass entire image processing, raw 8+2 Bayer data output directly */
5441 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x07, dev->sensor_flags, buf); /* URBs 1989-1991 */
5442 /* "Dummy" write to IFP Register 0x11: Color Correction Register 12 */
5443 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0x11, dev->sensor_flags, NULL); /* URBs 1992-1993 */
5444 /* Write to register 0x01: Register address space selection */
5445 /* Write to sensor register 0x02: Column Start */
5446 buf[0] = 0x00; buf[1] = 0x04; /* select sensor address space */
5447 buf[2] = 0x00; buf[3] = 0x16; /* start with column 22 */
5448 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x01, dev->sensor_flags, buf); /* URBs 1994-1996 */
5449 /* Writes to sensor registers 0x03: Window Height */
5450 /* 0x04: Window Width */
5451 buf[0] = 0x01; buf[1] = 0xe6; /* 486 */
5452 buf[2] = 0x02; buf[3] = 0x86; /* 646 */
5453 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x03, dev->sensor_flags, buf); /* URBs 1997-1999 */
5454 /* Writes to sensor registers 0x05: Horizontal Blanking */
5455 /* 0x06: Vertical Blanking */
5456 buf[0] = 0x00; buf[1] = 0x04; /* 4 columns (pixel clocks) // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
5457 buf[2] = 0x00; buf[3] = 0x00; /* 0 rows */
5458 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x05, dev->sensor_flags, buf); /* URBs 2000-2002 */
5459 /* Writes to sensor registers 0x07: Output Control */
5460 /* 0x08: Row Start */
5461 buf[0] = 0x30; buf[1] = 0x02; /* normal operation + chip enable + RESERVED options */
5462 buf[2] = 0x00; buf[3] = 0x08; /* row 8 */
5463 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x07, dev->sensor_flags, buf); /* URBs 2003-2005 */
5464 /* "Dummy" write to sensor Register 0x11: UNDOCUMENTED */
5465 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0x11, dev->sensor_flags, NULL); /* URBs 2006-2007 */
5466 /* Writes to sensor registers 0x0c: Shutter Delay */
5467 /* 0x0d: Reset (Soft) (from MT9V011 datasheet) */
5468 buf[0] = 0x00; buf[1] = 0x00; /* 0 master clocks */
5469 buf[2] = 0x00; buf[3] = 0x00; /* return to normal operation */
5470 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x0c, dev->sensor_flags, buf); /* URBs 2008-2010 */
5471 /* Writes to sensor registers 0x0e: UNDOCUMENTED */
5472 /* 0x0f: UNDOCUMENTED */
5473 buf[0] = 0x00; buf[1] = 0x00;
5474 buf[2] = 0x00; buf[3] = 0x00;
5475 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x0e, dev->sensor_flags, buf); /* URBs 2011-2013 */
5476 /* Writes to sensor registers 0x10: UNDOCUMENTED */
5477 /* 0x11: UNDOCUMENTED */
5478 buf[0] = 0x00; buf[1] = 0x00;
5479 buf[2] = 0x00; buf[3] = 0x00;
5480 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x10, dev->sensor_flags, buf); /* URBs 2014-2016 */
5481 /* Writes to sensor registers 0x12: 2X Zoom Col Start => 0x1e bit 0 must be set to activate zoom */
5482 /* 0x13: 2X Zoom Row Start => 0x1e bit 0 must be set to activate zoom */
5483 buf[0] = 0x00; buf[1] = 0xb0; /* column 176 */
5484 buf[2] = 0x00; buf[3] = 0x7c; /* row 124 */
5485 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x12, dev->sensor_flags, buf); /* URBs 2017-2018 */
5486 /* Writes to sensor registers 0x14: UNDOCUMENTED */
5487 /* 0x15: UNDOCUMENTED */
5488 buf[0] = 0x00; buf[1] = 0x00;
5489 buf[2] = 0x00; buf[3] = 0x00;
5490 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x14, dev->sensor_flags, buf); /* URBs 2019-2021 */
5491 /* Writes to sensor registers 0x16: UNDOCUMENTED */
5492 /* 0x17: UNDOCUMENTED */
5493 buf[0] = 0x00; buf[1] = 0x00;
5494 buf[2] = 0x00; buf[3] = 0x00;
5495 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x16, dev->sensor_flags, buf); /* URBs 2022-2024 */
5496 /* Writes to sensor registers 0x18: UNDOCUMENTED */
5497 /* 0x19: UNDOCUMENTED */
5498 buf[0] = 0x00; buf[1] = 0x00;
5499 buf[2] = 0x00; buf[3] = 0x00;
5500 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x18, dev->sensor_flags, buf); /* URBs 2025-2027 */
5501 /* Writes to sensor registers 0x1a: UNDOCUMENTED */
5502 /* 0x1b: UNDOCUMENTED */
5503 buf[0] = 0x00; buf[1] = 0x00;
5504 buf[2] = 0x00; buf[3] = 0x00;
5505 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x1a, dev->sensor_flags, buf); /* URBs 2028-2030 */
5506 /* Writes to sensor registers 0x1c: UNDOCUMENTED */
5507 /* 0x1d: UNDOCUMENTED */
5508 buf[0] = 0x00; buf[1] = 0x00;
5509 buf[2] = 0x00; buf[3] = 0x00;
5510 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x1c, dev->sensor_flags, buf); /* URBs 2031-2033 */
5511 /* Write to sensor register 0x30: RESERVED */
5512 buf[0] = 0x00; buf[1] = 0x00;
5513 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x30, dev->sensor_flags, buf); /* URBs 2034-2036 */
5514 /* Write to sensor register 0x20: Read Mode */
5515 buf[0] = 0x00; buf[1] = 0x00; /* normal readout */
5516 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x20, dev->sensor_flags, buf); /* URBs 2037-2039 */
5517 /* Writes to sensor registers 0x30: RESERVED */
5518 /* 0x31: RESERVED */
5519 buf[0] = 0x00; buf[1] = 0x05;
5520 buf[2] = 0x00; buf[3] = 0x00;
5521 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x30, dev->sensor_flags, buf); /* URBs 2040-2042 */
5522 /* "Dummy" write to sensor Register 0x34: RESERVED */
5523 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0x34, dev->sensor_flags, NULL); /* URBs 2043-2044 */
5524 } else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS) {
5525 /* Write to sensor register 0x07: Output Control */
5526 buf[0] = 0x00; buf[1] = 0x02; /* chip enable, normal operation */
5527 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x07, dev->sensor_flags, buf);
5528 /* Write to sensor register 0x0d: Soft Reset */
5529 buf[0] = 0x00; buf[1] = 0x01; /* reset */
5530 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x0d, dev->sensor_flags, buf);
5531 /* Write to sensor register 0x0d: Soft Reset */
5532 buf[0] = 0x00; buf[1] = 0x00; /* resume operation */
5533 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x0d, dev->sensor_flags, buf);
5534 /* Writes to sensor registers 0x01: Row start */
5535 /* 0x02: Column Start */
5536 buf[0] = 0x00; buf[1] = 0x08; /* start with row 8 */
5537 buf[2] = 0x00; buf[3] = 0x16; /* start with column 22 */
5538 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x01, dev->sensor_flags, buf);
5539 /* Writes to sensor registers 0x03: Window Height */
5540 /* 0x04: Window Width */
5541 buf[0] = 0x01; buf[1] = 0xe1; /* 481 */
5542 buf[2] = 0x02; buf[3] = 0x81; /* 641 */
5543 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x03, dev->sensor_flags, buf);
5544 /* Writes to sensor registers 0x05: Horizontal Blanking */
5545 /* 0x06: Vertical Blanking */
5546 buf[0] = 0x00; buf[1] = 0x83; /* 131 columns (pixel clocks) */
5547 buf[2] = 0x00; buf[3] = 0x06; /* 6 rows */
5548 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x05, dev->sensor_flags, buf);
5549 /* Write to sensor register 0x0d: Soft Reset */
5550 buf[0] = 0x00; buf[1] = 0x02; /* UNKNOWN */
5551 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x0d, dev->sensor_flags, buf);
5552 /* Writes to sensor registers 0x0a: Pixel Clock Speed */
5553 /* 0x0b: Frame Restart */
5554 buf[0] = 0x00; buf[1] = 0x00; /* default */
5555 buf[2] = 0x00; buf[3] = 0x00; /* (has no effect/no restart) */
5556 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x0a, dev->sensor_flags, buf);
5557 /* Writes to sensor registers 0x0c: Shutter Delay */
5558 /* 0x0d: Soft Reset */
5559 buf[0] = 0x00; buf[1] = 0x00; /* 0 master clocks */
5560 buf[2] = 0x00; buf[3] = 0x00; /* resume operation */
5561 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x0c, dev->sensor_flags, buf);
5562 /* Writes to sensor registers 0x0e: UNDOCUMENTED */
5563 /* 0x0f: UNDOCUMENTED */
5564 buf[0] = 0x00; buf[1] = 0x00;
5565 buf[2] = 0x00; buf[3] = 0x00;
5566 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x0e, dev->sensor_flags, buf);
5567 /* Writes to sensor registers 0x10: UNDOCUMENTED */
5568 /* 0x11: UNDOCUMENTED */
5569 buf[0] = 0x00; buf[1] = 0x00;
5570 buf[2] = 0x00; buf[3] = 0x00;
5571 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x10, dev->sensor_flags, buf);
5572 /* Writes to sensor registers 0x12: 2X Zoom Column Start (from MT9V111 datasheet) */
5573 /* 0x13: 2X Zoom Row Start (from MT9V111 datasheet) */
5574 buf[0] = 0x00; buf[1] = 0x00; /* column 0 => bit0 of reg 0x1e must be set to activate zoom */
5575 buf[2] = 0x00; buf[3] = 0x00; /* row 0 => bit0 of reg 0x1e must be set to activate zoom */
5576 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x12, dev->sensor_flags, buf);
5577 /* Writes to sensor registers 0x14: UNDOCUMENTED */
5578 /* 0x15: UNDOCUMENTED */
5579 buf[0] = 0x00; buf[1] = 0x00;
5580 buf[2] = 0x00; buf[3] = 0x00;
5581 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x14, dev->sensor_flags, buf);
5582 /* Writes to sensor registers 0x16: UNDOCUMENTED */
5583 /* 0x17: UNDOCUMENTED */
5584 buf[0] = 0x00; buf[1] = 0x00;
5585 buf[2] = 0x00; buf[3] = 0x00;
5586 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x16, dev->sensor_flags, buf);
5587 /* Writes to sensor registers 0x18: UNDOCUMENTED */
5588 /* 0x19: UNDOCUMENTED */
5589 buf[0] = 0x00; buf[1] = 0x00;
5590 buf[2] = 0x00; buf[3] = 0x00;
5591 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x18, dev->sensor_flags, buf);
5592 /* Writes to sensor registers 0x1a: UNDOCUMENTED */
5593 /* 0x1b: UNDOCUMENTED */
5594 buf[0] = 0x00; buf[1] = 0x00;
5595 buf[2] = 0x00; buf[3] = 0x00;
5596 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x1a, dev->sensor_flags, buf);
5597 /* Writes to sensor registers 0x1c: UNDOCUMENTED */
5598 /* 0x1d: UNDOCUMENTED */
5599 buf[0] = 0x00; buf[1] = 0x00;
5600 buf[2] = 0x00; buf[3] = 0x00;
5601 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x1c, dev->sensor_flags, buf);
5602 /* Write to sensor register 0x32: RESERVED */
5603 buf[0] = 0x00; buf[1] = 0x00;
5604 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x32, dev->sensor_flags, buf);
5605 /* Writes to sensor registers 0x20: Read Mode */
5606 /* 0x21: RESERVED */
5607 buf[0] = 0x11; buf[1] = 0x01; /* output all frames (including bad frames) + UNDOCUMENTED */
5608 buf[2] = 0x00; buf[3] = 0x00;
5609 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x20, dev->sensor_flags, buf);
5610 /* Writes to sensor registers 0x22: RESERVED */
5611 /* 0x23: UNDOCUMENTED */
5612 buf[0] = 0x00; buf[1] = 0x00;
5613 buf[2] = 0x00; buf[3] = 0x00;
5614 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x22, dev->sensor_flags, buf);
5615 /* Writes to sensor registers 0x24: UNDOCUMENTED */
5616 /* 0x25: UNDOCUMENTED */
5617 buf[0] = 0x00; buf[1] = 0x00;
5618 buf[2] = 0x00; buf[3] = 0x00;
5619 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x24, dev->sensor_flags, buf);
5620 /* Writes to sensor registers 0x26: UNDOCUMENTED */
5621 /* 0x27: RESERVED */
5622 buf[0] = 0x00; buf[1] = 0x00;
5623 buf[2] = 0x00; buf[3] = 0x24;
5624 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x26, dev->sensor_flags, buf);
5625 /* "Dummy" write to sensor Register 0x30: RESERVED */
5626 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0x30, dev->sensor_flags, NULL);
5627 /* Writes to sensor registers 0x2f: RESERVED */
5628 /* 0x30: RESERVED */
5629 buf[0] = 0xf7; buf[1] = 0xb0;
5630 buf[2] = 0x00; buf[3] = 0x05;
5631 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x2f, dev->sensor_flags, buf);
5632 /* Writes to sensor registers 0x31: RESERVED */
5633 /* 0x32: RESERVED */
5634 buf[0] = 0x00; buf[1] = 0x00;
5635 buf[2] = 0x00; buf[3] = 0x00;
5636 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x31, dev->sensor_flags, buf);
5637 /* Writes to sensor registers 0x33: RESERVED */
5638 /* 0x34: RESERVED */
5639 buf[0] = 0x00; buf[1] = 0x00;
5640 buf[2] = 0x01; buf[3] = 0x00;
5641 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x33, dev->sensor_flags, buf);
5642 /* "Dummy" write to sensor Register 0x3b: RESERVED */
5643 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0x3b, dev->sensor_flags, NULL);
5644 /* Write to sensor register 0x3d: RESERVED */
5645 buf[0] = 0x06; buf[1] = 0x8f;
5646 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x3d, dev->sensor_flags, buf);
5647 /* Writes to sensor registers 0x40: RESERVED */
5648 /* 0x41: RESERVED */
5649 buf[0] = 0x01; buf[1] = 0xe0;
5650 buf[2] = 0x00; buf[3] = 0xd1;
5651 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x40, dev->sensor_flags, buf);
5652 /* Write to sensor register 0x44: UNDOCUMENTED */
5653 buf[0] = 0x00; buf[1] = 0x82;
5654 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x44, dev->sensor_flags, buf);
5655 /* Writes to sensor registers 0x5a: RESERVED */
5656 /* 0x5b: RESERVED */
5657 buf[0] = 0x00; buf[1] = 0x00;
5658 buf[2] = 0x00; buf[3] = 0x00;
5659 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x5a, dev->sensor_flags, buf);
5660 /* Writes to sensor registers 0x5c: RESERVED */
5661 /* 0x5d: RESERVED */
5662 buf[0] = 0x00; buf[1] = 0x00;
5663 buf[2] = 0x00; buf[3] = 0x00;
5664 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x5c, dev->sensor_flags, buf);
5665 /* Writes to sensor registers 0x5e: RESERVED */
5666 /* 0x5f: RESERVED */
5667 buf[0] = 0x00; buf[1] = 0x00;
5668 buf[2] = 0xa3; buf[3] = 0x1d;
5669 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x5e, dev->sensor_flags, buf);
5670 /* "Dummy" write to sensor Register 0x68: UNDOCUMENTED */
5671 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0x68, dev->sensor_flags, NULL);
5672 /* Write to sensor register 0x62: RESERVED */
5673 buf[0] = 0x06; buf[1] = 0x11;
5674 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x62, dev->sensor_flags, buf);
5676 if (retI2C < 0) {
5677 UDIA_INFO("1 or more errors occured in I2C-message-block 1 !\n");
5678 return -1;
5680 /* END OF I2C MESSAGES */
5681 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5683 if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS) {
5684 buf[0] = 0x40;
5685 usb_microdia_control_write(dev, 0x1007, buf, 8);
5686 buf[0] = 0x40;
5687 usb_microdia_control_write(dev, 0x1006, buf, 8);
5691 /* *** TEMPORARY SWITCH TO SLAVE ADDRESS 0x50, I2C READ ATTEMPT: */
5692 /* - WE CURRENTLY KNOW NO 6270 CAM THAT IS SUCCESSFULLY READ HERE */
5693 /* - IF READ FAILS, THIS IS NEVER DONE AGAIN (IN NEXT CYCLE OR FURTHER STARTS) */
5694 usb_microdia_control_read(dev, 0x10c1, buf, 1); /* returns 0x5c */
5695 buf[0] = 0x50;
5696 usb_microdia_control_write(dev, 0x10c1, buf, 1);
5697 retI2C = sn9c20x_read_i2c_data(dev, 0x50, 1, 0x00, SN9C20X_I2C_2WIRE, buf);
5698 if (retI2C >= 0)
5699 UDIA_INFO("Read of address 0x00 from slave 0x50 successful:\n=> Please report this to microdia@googlegroups.com (http:/* groups.google.com/group/microdia) !\n");
5700 buf[0] = 0x5c;
5701 usb_microdia_control_write(dev, 0x10c1, buf, 1);
5704 buf[0] = 0x47; /* ALEX: 0x44 */
5705 usb_microdia_control_write(dev, 0x10e0, buf, 1); /* URB 2045 */
5706 buf[0] = 0x47; /* ALEX: 0x04 */
5707 usb_microdia_control_write(dev, 0x10e0, buf, 1); /* URB 2046 */
5708 buf[0] = 0xc6;
5709 usb_microdia_control_write(dev, 0x1001, buf, 1); /* URB 2047 */
5710 buf[0] = 0xc4;
5711 usb_microdia_control_write(dev, 0x1001, buf, 1); /* URB 2048 */
5712 buf[0] = 0x84; /* ALEX: 0xc0 */
5713 usb_microdia_control_write(dev, 0x1001, buf, 1); /* URB 2049 */
5714 /* ALEX:
5715 buf[0] = 0x40;
5716 usb_microdia_control_write(dev, 0x1001, buf, 1);
5719 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS) {
5720 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5721 /* I2C MESSAGES */
5722 retI2C = 0;
5723 /* Writes to sensor registers 0x02: Column Start */
5724 /* 0x03: Window Height */
5725 buf[0] = 0x00; buf[1] = 0x16; /* coulmn 22 */
5726 buf[2] = 0x01; buf[3] = 0xe1; /* 481 */
5727 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x02, dev->sensor_flags, buf); /* URBs 2050-2052 */
5728 /* Writes to sensor registers 0x04: Window Width */
5729 /* 0x05: Horizontal Blanking */
5730 buf[0] = 0x02; buf[1] = 0x81; /* 641 */
5731 buf[2] = 0x00; buf[3] = 0x04; /* 4 columns (pixel clocks) // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
5732 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x04, dev->sensor_flags, buf); /* URBs 2053-2055 */
5733 /* Writes to sensor registers 0x06: Vertical Blanking */
5734 /* 0x07: Output Control */
5735 buf[0] = 0x00; buf[1] = 0x00; /* 0 rows */
5736 buf[2] = 0x30; buf[3] = 0x02; /* normal operation + chip enable + RESERVED options */
5737 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x06, dev->sensor_flags, buf); /* URBs 2056-2058 */
5738 /* Write to sensor register 0x0e: UNDOCUMENTED */
5739 buf[0] = 0x00; buf[1] = 0x08;
5740 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x0e, dev->sensor_flags, buf); /* URBs 2059-2061 */
5741 if (retI2C < 0) {
5742 UDIA_INFO("1 or more errors occured in I2C-message-block 2 !\n");
5743 return -1;
5745 /* END OF I2C MESSAGES */
5746 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5749 buf[0] = 0x02; buf[1] = 0x00; buf[2] = 0x02; buf[3] = 0x00;
5750 buf[4] = 0x28; buf[5] = 0x3c;
5751 usb_microdia_control_write(dev, 0x1180, buf, 6); /* URB 2062 */
5752 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0; buf[4] = 0x00;
5753 usb_microdia_control_write(dev, 0x10fb, buf, 5); /* URB 2063 */
5754 buf[0] = 0x0c;
5755 usb_microdia_control_write(dev, 0x1189, buf, 1); /* URB 2064 */
5756 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
5757 usb_microdia_control_write(dev, 0x11a1, buf, 4); /* URB 2065 */
5758 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
5759 usb_microdia_control_write(dev, 0x11ab, buf, 4); /* URB 2066 */
5760 buf[0] = 0x78; /* ALEX: 0x7c */
5761 usb_microdia_control_write(dev, 0x1000, buf, 1); /* URB 2067 */
5762 buf[0] = 0x18; /* ALEX: 0x1c */
5763 usb_microdia_control_write(dev, 0x1002, buf, 1); /* URB 2068 */
5764 buf[0] = 0x18; /* ALEX: 0x1c */
5765 usb_microdia_control_write(dev, 0x1002, buf, 1); /* URB 2069 */
5766 buf[0] = 0x38;
5767 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2070 */
5768 buf[0] = 0x04;
5769 usb_microdia_control_write(dev, 0x118a, buf, 1); /* URB 2071 */
5770 buf[0] = 0x04;
5771 usb_microdia_control_write(dev, 0x0395, buf, 1); /* URB 2072 */
5773 buf[0] = 0x78;
5774 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2073 */
5775 usb_microdia_control_read(dev, 0x11b8, buf, 1); /* URB 2074 // 0x38 */
5776 if (buf[0] == 0x38)
5777 buf[0] = 0x79;
5778 else if (buf[0] == 0xb8)
5779 buf[0] = 0xf9;
5780 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2075 */
5781 usb_microdia_control_read(dev, 0x11b8, buf, 1); /* URB 2076 // 0xb9 */
5782 if (buf[0] == 0x39)
5783 buf[0] = 0x7a;
5784 else if (buf[0] == 0xb9)
5785 buf[0] = 0xfa;
5786 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2077 */
5787 usb_microdia_control_read(dev, 0x11b8, buf, 1); /* URB 2078 */
5788 if (buf[0] == 0x3a)
5789 buf[0] = 0x7b;
5790 else if (buf[0] == 0xba)
5791 buf[0] = 0xfb;
5792 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2079 */
5793 usb_microdia_control_read(dev, 0x11b8, buf, 1); /* URB 2080 // 0x3b */
5794 if (buf[0] == 0x3b)
5795 buf[0] = 0x7c;
5796 else if (buf[0] == 0xbb)
5797 buf[0] = 0xfc;
5798 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2081 */
5799 usb_microdia_control_read(dev, 0x11b8, buf, 1); /* URB 2082 // 0x3c */
5800 if (buf[0] == 0x3c)
5801 buf[0] = 0x7d;
5802 else if (buf[0] == 0xbc)
5803 buf[0] = 0xfd;
5804 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2083 */
5805 usb_microdia_control_read(dev, 0x11b8, buf, 1); /* URB 2084 // 0x3d */
5806 last_11b8[0] = buf[0];
5807 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS) {
5808 if (buf[0] == 0x3d)
5809 buf[0] = 0x7e;
5810 else if (buf[0] == 0xbd)
5811 buf[0] = 0xfe;
5812 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2085 */
5813 usb_microdia_control_read(dev, 0x11b8, buf, 1); /* URB 2086 */
5814 if (buf[0] == 0x3e)
5815 buf[0] = 0x7f;
5816 else if (buf[0] == 0xbe)
5817 buf[0] = 0xff;
5818 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2087 */
5819 usb_microdia_control_read(dev, 0x11b8, last_11b8, 1); /* URB 2088 */
5821 buf[0] = last_11b8[0] & 0xf0; /* 0xf0 or 0x70 */
5822 buf[0] = buf[0] | 0x0d; /* 0x0c => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 8 READS/WRITES */
5823 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2089 */
5826 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5827 /* I2C MESSAGES */
5828 retI2C = 0;
5829 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS) {
5830 /* Write to sensor register 0x06: Vertical Blanking */
5831 buf[0] = 0x00; buf[1] = 0x2d; /* 45 rows */
5832 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x06, dev->sensor_flags, buf); /* URBs 2090-2092 */
5833 /* Write to sensor register 0x05: Horizontal Blanking */
5834 buf[0] = 0x00; buf[1] = 0x04; /* 4 columns (pixel clocks) */
5835 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x05, dev->sensor_flags, buf); /* URBs 2093-2095 */
5836 /* Write to sensor register 0x20: Read Mode */
5837 buf[0] = 0x00; buf[1] = 0x00; /* normal readout */
5838 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x20, dev->sensor_flags, buf); /* URBs 2096-2098 */
5839 } else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS) {
5840 /* Write to sensor register 0x0a: Pixel Clock Speed */
5841 buf[0] = 0x00; buf[1] = 0x00; /* default */
5842 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x0a, dev->sensor_flags, buf);
5843 /* Write to sensor register 0x06: Vertical Blanking */
5844 buf[0] = 0x00; buf[1] = 0x29; /* 41 rows */
5845 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x06, dev->sensor_flags, buf);
5846 /* Write to sensor register 0x05: Horizontal Blanking */
5847 buf[0] = 0x00; buf[1] = 0x09; /* 9 columns (pixel clocks) */
5848 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x05, dev->sensor_flags, buf);
5849 /* Write to sensor register 0x20: Read Mode */
5850 buf[0] = 0x11; buf[1] = 0x01; /* output all frames (including bad ones) + UNKNOWN */
5851 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x20, dev->sensor_flags, buf);
5853 if (retI2C < 0) {
5854 UDIA_INFO("1 or more errors occured in I2C-message-block 3 !\n");
5855 return -1;
5857 /* END OF I2C MESSAGES */
5858 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5861 buf[0] = 0x02;
5862 usb_microdia_control_write(dev, 0x1180, buf, 1); /* URB 2099 */
5864 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5865 /* I2C MESSAGE */
5866 retI2C = 0;
5867 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS) {
5868 /* Write to sensor register 0x20: Read Mode */
5869 buf[0] = 0x00; buf[1] = 0x00; /* normal readout */
5870 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x20, dev->sensor_flags, buf); /* URBs 2100-2102 */
5871 } else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS) {
5872 /* Write to sensor register 0x20: Read Mode */
5873 buf[0] = 0x11; buf[1] = 0x01; /* output all frames (including bad ones) + UNKNOWN */
5874 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x20, dev->sensor_flags, buf);
5876 if (retI2C < 0) {
5877 UDIA_INFO("1 or more errors occured in I2C-message-block 4 !\n");
5878 return -1;
5880 /* END OF I2C MESSAGES */
5881 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5884 buf[0] = 0x02;
5885 usb_microdia_control_write(dev, 0x1182, buf, 1); /* URB 2103 */
5888 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5889 /* I2C MESSAGES */
5890 retI2C = 0;
5891 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS) {
5892 /* Write to sensor register 0x09: Shutter Width */
5893 buf[0] = 0x00; buf[1] = 0x64; /* integration of 100 rows */
5894 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x09, dev->sensor_flags, buf); /* URBs 2104-2106 */
5895 /* Write to sensor register 0x2b: Green 1 Gain */
5896 /* 0x2c: Blue Gain */
5897 buf[0] = 0x00; buf[1] = 0xa0; /* 32*0.03125*2 = 2 */
5898 buf[2] = 0x00; buf[3] = 0xa0; /* 32*0.03125*2 = 2 */
5899 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x2b, dev->sensor_flags, buf); /* URBs 2107-2109 */
5900 /* Write to sensor register 0x2d: Red Gain */
5901 /* 0x2e: Green 2 Gain */
5902 buf[0] = 0x00; buf[1] = 0xa0; /* 32*0.03125*2 = 2 */
5903 buf[2] = 0x00; buf[3] = 0xa0; /* 32*0.03125*2 = 2 */
5904 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x2d, dev->sensor_flags, buf); /* URBs 2110-2112 */
5905 /* "Dummy" write to sensor Register 0x33: RESERVED */
5906 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0x33, dev->sensor_flags, NULL); /* URBs 2113-2114 */
5907 } else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS) {
5908 /* Write to sensor register 0x09: Shutter Width */
5909 buf[0] = 0x00; buf[1] = 0x64; /* integration of 100 rows */
5910 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x09, dev->sensor_flags, buf);
5911 /* Write to sensor register 0x07: Output Control */
5912 buf[0] = 0x00; buf[1] = 0x03; /* dont update changes until bit0=0, chip enable, normal operation */
5913 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x07, dev->sensor_flags, buf);
5914 /* Write to sensor register 0x2b: Green 1 Gain */
5915 /* 0x2c: Blue Gain */
5916 buf[0] = 0x00; buf[1] = 0x33; /* 51*0.03125*1 = 1.59375 */
5917 buf[2] = 0x00; buf[3] = 0xa0; /* 32*0.03125*2 = 2 */
5918 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x2b, dev->sensor_flags, buf);
5919 /* Write to sensor register 0x2d: Red Gain */
5920 /* 0x2e: Green 2 Gain */
5921 buf[0] = 0x00; buf[1] = 0xa0; /* 32*0.03125*2 = 2 */
5922 buf[2] = 0x00; buf[3] = 0x33; /* 51*0.03125*1 = 1.59375 */
5923 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x2d, dev->sensor_flags, buf);
5924 /* "Dummy" write to sensor Register 0x33: RESERVED */
5925 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, 0x33, dev->sensor_flags, NULL);
5926 /* Write to sensor register 0x07: Output Control */
5927 buf[0] = 0x00; buf[1] = 0x02; /* chip enable, normal operation */
5928 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x07, dev->sensor_flags, buf);
5930 if (retI2C < 0) {
5931 UDIA_INFO("1 or more errors occured in I2C-message-block 5 !\n");
5932 return -1;
5934 /* END OF I2C MESSAGES */
5935 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
5937 buf[0] = 0x0a;
5938 usb_microdia_control_write(dev, 0x11ba, buf, 1); /* URB 2119 */
5940 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
5941 buf[0] = 0x14;
5942 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
5943 buf[0] = 0x0a;
5944 usb_microdia_control_write(dev, 0x118b, buf, 1); /* URB 2124 */
5946 buf[0] = 0x07;
5947 usb_microdia_control_write(dev, 0x10f7, buf, 1); /* URB 2135 */
5949 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
5950 buf[0] = 0x01;
5951 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
5952 buf[0] = 0x14;
5953 usb_microdia_control_write(dev, 0x10f8, buf, 1); /* URB 2138 */
5955 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
5956 buf[0] = 0x0a;
5957 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
5958 buf[0] = 0xff;
5959 usb_microdia_control_write(dev, 0x10fa, buf, 1); /* URB 2139 */
5961 buf[0] = 0x00;
5962 usb_microdia_control_write(dev, 0x10f9, buf, 1); /* URB 2140 */
5963 buf[0] = 0x00;
5964 usb_microdia_control_write(dev, 0x10f9, buf, 1); /* URB 2141 */
5965 buf[0] = 0x0a;
5966 usb_microdia_control_write(dev, 0x11ba, buf, 1); /* URB 2142 */
5967 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00;
5968 usb_microdia_control_write(dev, 0x11bc, buf, 4); /* URB 2143 */
5969 for (k = 0; k < 48; k++)
5970 buf[k] = 0x00;
5971 usb_microdia_control_write(dev, 0x11c0, buf, 48); /* URB 2144 */
5973 buf[0] = 0x2d; buf[1] = 0x2d; buf[2] = 0x3a; buf[3] = 0x05;
5974 buf[4] = 0x04; buf[5] = 0x3f;
5975 usb_microdia_control_write(dev, 0x11a5, buf, 6); /* URB 2149 */
5977 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS) {
5978 buf[0] = 0x14; buf[1] = 0xec; buf[2] = 0x0a; buf[3] = 0xf6;
5979 } else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS) {
5980 buf[0] = 0x28; buf[1] = 0xd8; buf[2] = 0x14; buf[3] = 0xec;
5982 usb_microdia_control_write(dev, 0x11af, buf, 4); /* URB 2150 */
5984 buf[0] = 0x32; buf[1] = 0xdd; buf[2] = 0x2d; buf[3] = 0xdd;
5985 usb_microdia_control_write(dev, 0x11b3, buf, 4); /* URB 2151 */
5986 buf[0] = 0x47; /* ALEX: 0x04 */
5987 usb_microdia_control_write(dev, 0x10e0, buf, 1); /* URB 2152 */
5988 buf[0] = 0x01;
5989 usb_microdia_control_write(dev, 0x1061, buf, 1); /* URB 2153 */
5990 buf[0] = 0x67; /* ALEX: 0x24 */
5991 usb_microdia_control_write(dev, 0x10e0, buf, 1); /* URB 2154 */
5992 buf[0] = 0x0d; buf[1] = 0x08; buf[2] = 0x08; buf[3] = 0x0d;
5993 buf[4] = 0x08; buf[5] = 0x08; buf[6] = 0x0d; buf[7] = 0x0d;
5994 buf[8] = 0x0d; buf[9] = 0x0d; buf[10] = 0x11; buf[11] = 0x0d;
5995 buf[12] = 0x0d; buf[13] = 0x11; buf[14] = 0x15; buf[15] = 0x21;
5996 buf[16] = 0x15; buf[17] = 0x15; buf[18] = 0x11; buf[19] = 0x11;
5997 buf[20] = 0x15; buf[21] = 0x2a; buf[22] = 0x1d; buf[23] = 0x1d;
5998 buf[24] = 0x19; buf[25] = 0x21; buf[26] = 0x32; buf[27] = 0x2a;
5999 buf[28] = 0x32; buf[29] = 0x32; buf[30] = 0x2e; buf[31] = 0x2a;
6000 buf[32] = 0x2e; buf[33] = 0x2e; buf[34] = 0x36; buf[35] = 0x3a;
6001 buf[36] = 0x4b; buf[37] = 0x43; buf[38] = 0x36; buf[39] = 0x3a;
6002 buf[40] = 0x47; buf[41] = 0x3a; buf[42] = 0x2e; buf[43] = 0x2e;
6003 buf[44] = 0x43; buf[45] = 0x5c; buf[46] = 0x43; buf[47] = 0x47;
6004 buf[48] = 0x4f; buf[49] = 0x53; buf[50] = 0x58; buf[51] = 0x58;
6005 buf[52] = 0x58; buf[53] = 0x32; buf[54] = 0x3f; buf[55] = 0x60;
6006 buf[56] = 0x64; buf[57] = 0x5c; buf[58] = 0x53; buf[59] = 0x64;
6007 buf[60] = 0x4b; buf[61] = 0x53; buf[62] = 0x58; buf[63] = 0x53;
6008 usb_microdia_control_write(dev, 0x1100, buf, 64); /* URB 2155 */
6009 buf[0] = 0x0d; buf[1] = 0x11; buf[2] = 0x11; buf[3] = 0x15;
6010 buf[4] = 0x11; buf[5] = 0x15; buf[6] = 0x26; buf[7] = 0x15;
6011 buf[8] = 0x15; buf[9] = 0x26; buf[10] = 0x53; buf[11] = 0x36;
6012 buf[12] = 0x2e; buf[13] = 0x36; buf[14] = 0x53; buf[15] = 0x53;
6013 buf[16] = 0x53; buf[17] = 0x53; buf[18] = 0x53; buf[19] = 0x53;
6014 buf[20] = 0x53; buf[21] = 0x53; buf[22] = 0x53; buf[23] = 0x53;
6015 buf[24] = 0x53; buf[25] = 0x53; buf[26] = 0x53; buf[27] = 0x53;
6016 buf[28] = 0x53; buf[29] = 0x53; buf[30] = 0x53; buf[31] = 0x53;
6017 buf[32] = 0x53; buf[33] = 0x53; buf[34] = 0x53; buf[35] = 0x53;
6018 buf[36] = 0x53; buf[37] = 0x53; buf[38] = 0x53; buf[39] = 0x53;
6019 buf[40] = 0x53; buf[41] = 0x53; buf[42] = 0x53; buf[43] = 0x53;
6020 buf[44] = 0x53; buf[45] = 0x53; buf[46] = 0x53; buf[47] = 0x53;
6021 buf[48] = 0x53; buf[49] = 0x53; buf[50] = 0x53; buf[51] = 0x53;
6022 buf[52] = 0x53; buf[53] = 0x53; buf[54] = 0x53; buf[55] = 0x53;
6023 buf[56] = 0x53; buf[57] = 0x53; buf[58] = 0x53; buf[59] = 0x53;
6024 buf[60] = 0x53; buf[61] = 0x53; buf[62] = 0x53; buf[63] = 0x53;
6025 usb_microdia_control_write(dev, 0x1140, buf, 64); /* URB 2156 */
6026 buf[0] = 0x47; /* ALEX: 0x04 */
6027 usb_microdia_control_write(dev, 0x10e0, buf, 1); /* URB 2157 */
6028 buf[0] = 0x03;
6029 usb_microdia_control_write(dev, 0x1061, buf, 1); /* URB 2158 */
6030 buf[0] = 0x4b; /* ALEX: 0x08 */
6031 usb_microdia_control_write(dev, 0x10e0, buf, 1); /* URB 2159 */
6033 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS) {
6034 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
6035 /* I2C MESSAGES */
6036 retI2C = 0;
6037 /* Writes to sensor registers 0x02: Column Start */
6038 /* 0x03: Window Hight */
6039 buf[0] = 0x00; buf[1] = 0x16; /* coulmn 22 */
6040 buf[2] = 0x01; buf[3] = 0xe1; /* 481 */
6041 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x02, dev->sensor_flags, buf); /* URBs 2160-2162 */
6042 /* Writes to sensor registers 0x04: Window Width */
6043 /* 0x05: Horizontal Blanking */
6044 buf[0] = 0x02; buf[1] = 0x81; /* 641 */
6045 buf[2] = 0x00; buf[3] = 0x04; /* 4 columns (pixel clocks) */
6046 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x04, dev->sensor_flags, buf); /* URBs 2163-2165 */
6047 /* Writes to sensor registers 0x06: Vertical Blanking */
6048 /* 0x07: Output Control */
6049 buf[0] = 0x00; buf[1] = 0x2d; /* 45 rows */
6050 buf[2] = 0x30; buf[3] = 0x02; /* RESERVED options */
6051 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, 0x06, dev->sensor_flags, buf); /* URBs 2166-2167 */
6052 /* Writes to sensor register 0x0e: UNDOCUMENTED */
6053 buf[0] = 0x00; buf[1] = 0x08;
6054 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x0e, dev->sensor_flags, buf); /* URBs 2168-2170 */
6055 if (retI2C < 0) {
6056 UDIA_INFO("1 or more errors occured in I2C-message-block 6 !\n");
6057 return -1;
6059 /* END OF I2C MESSAGES */
6060 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
6061 } else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS) {
6062 buf[0] = 0x40;
6063 usb_microdia_control_write(dev, 0x1007, buf, 1);
6064 buf[0] = 0x40;
6065 usb_microdia_control_write(dev, 0x1006, buf, 1);
6069 buf[0] = 0x02; buf[1] = 0x00; buf[2] = 0x02; buf[3] = 0x00;
6070 buf[4] = 0x28; buf[5] = 0x3c;
6071 usb_microdia_control_write(dev, 0x1180, buf, 6); /* URB 2171 */
6072 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0; buf[4] = 0x00;
6073 usb_microdia_control_write(dev, 0x10fb, buf, 5); /* URB 2172 */
6074 buf[0] = 0x0c;
6075 usb_microdia_control_write(dev, 0x1189, buf, 1); /* URB 2173 */
6076 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
6077 usb_microdia_control_write(dev, 0x11a1, buf, 4); /* URB 2174 */
6078 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
6079 usb_microdia_control_write(dev, 0x11ab, buf, 4); /* URB 2175 */
6080 buf[0] = 0x03;
6081 usb_microdia_control_write(dev, 0x1061, buf, 1); /* URB 2176 */
6082 buf[0] = 0x0a;
6083 usb_microdia_control_write(dev, 0x11ba, buf, 1); /* URB 2177 */
6084 buf[0] = 0x00;
6085 usb_microdia_control_write(dev, 0x11b9, buf, 1); /* URB 2178 */
6086 buf[0] = 0x0b;
6087 usb_microdia_control_write(dev, 0x11ba, buf, 1); /* URB 2179 */
6088 buf[0] = 0x01;
6089 usb_microdia_control_write(dev, 0x1061, buf, 1); /* URB 2180 */
6090 buf[0] = 0x78; /* ALEX: 0x7c */
6091 usb_microdia_control_write(dev, 0x1000, buf, 1); /* URB 2181 */
6092 buf[0] = 0x18; /* ALEX: 0x1c */
6093 usb_microdia_control_write(dev, 0x1002, buf, 1); /* URB 2182 */
6094 buf[0] = 0x18; /* ALEX: 0x1c */
6095 usb_microdia_control_write(dev, 0x1002, buf, 1); /* URB 2183 */
6096 buf[0] = 0x7d; /* ALEX: 0xfc */
6097 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2184 */
6098 buf[0] = 0x04;
6099 usb_microdia_control_write(dev, 0x118a, buf, 1); /* URB 2185 */
6100 buf[0] = 0x04;
6101 usb_microdia_control_write(dev, 0x0395, buf, 1); /* URB 2186 */
6103 if ((last_11b8[0] == 0x3d) || (last_11b8[0] == 0x3f))
6104 buf[0] = 0x78;
6105 else if ((last_11b8[0] == 0xbd) || (last_11b8[0] == 0xbf))
6106 buf[0] = 0xf8;
6107 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2187 */
6108 usb_microdia_control_read(dev, 0x11b8, buf, 1); /* URB 2188 // 0x38 */
6109 if (buf[0] == 0x38)
6110 buf[0] = 0x79;
6111 else if (buf[0] == 0xb8)
6112 buf[0] = 0xf9;
6113 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2189 */
6114 usb_microdia_control_read(dev, 0x11b8, buf, 1); /* URB 2190 // 0xb9 */
6115 if (buf[0] == 0x39)
6116 buf[0] = 0x7a;
6117 else if (buf[0] == 0xb9)
6118 buf[0] = 0xfa;
6119 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2191 */
6120 usb_microdia_control_read(dev, 0x11b8, buf, 1); /* URB 2192 // 0xba */
6121 if (buf[0] == 0x3a)
6122 buf[0] = 0x7b;
6123 else if (buf[0] == 0xba)
6124 buf[0] = 0xfb;
6125 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2193 */
6126 usb_microdia_control_read(dev, 0x11b8, buf, 1); /* URB 2194 // 0x3b */
6127 if (buf[0] == 0x3b)
6128 buf[0] = 0x7c;
6129 else if (buf[0] == 0xbb)
6130 buf[0] = 0xfc;
6131 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2195 */
6132 usb_microdia_control_read(dev, 0x11b8, buf, 1); /* URB 2196 // 0x3c */
6133 if (buf[0] == 0x3c)
6134 buf[0] = 0x7d;
6135 else if (buf[0] == 0xbc)
6136 buf[0] = 0xfd;
6137 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2197 */
6138 usb_microdia_control_read(dev, 0x11b8, buf, 1); /* URB 2198 // 0x3d */
6139 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS) {
6140 if (buf[0] == 0x3d)
6141 buf[0] = 0x7e;
6142 else if (buf[0] == 0xbd)
6143 buf[0] = 0xfe;
6144 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2199 */
6145 usb_microdia_control_read(dev, 0x11b8, buf, 1); /* URB 2200 */
6146 if (buf[0] == 0x3e)
6147 buf[0] = 0x7f;
6148 else if (buf[0] == 0xbe)
6149 buf[0] = 0xff;
6150 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2201 */
6151 usb_microdia_control_read(dev, 0x11b8, buf, 1); /* URB 2202 */
6153 buf[0] = buf[0] & 0xf0; /* 0xf0 or 0x70 */
6154 buf[0] = buf[0] | 0x0d; /* 0x0c => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 8 READS/WRITES */
6155 usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 2089 */
6157 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
6158 /* I2C MESSAGES */
6159 retI2C = 0;
6160 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS) {
6161 /* Write to sensor register 0x06: Vertical Blanking */
6162 buf[0] = 0x00; buf[1] = 0x2d; /* 45 rows */
6163 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x06, dev->sensor_flags, buf); /* URBs 2204-2206 */
6164 /* Write to sensor register 0x05: Horizontal Blanking */
6165 buf[0] = 0x00; buf[1] = 0x04; /* 4 columns (pixel clocks) */
6166 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x05, dev->sensor_flags, buf); /* URBs 2207-2209 */
6167 /* Read of sensor register 0x36: Chip Version (mirror of reg0xff) */
6168 retI2C += sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 2, 0x36, dev->sensor_flags, buf); /* URBs 2211-2215 // 0x82 0x3a */
6169 } else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS) {
6170 /* Write to sensor register 0x0a: Pixel Clock Speed */
6171 buf[0] = 0x00; buf[1] = 0x00; /* default */
6172 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x06, dev->sensor_flags, buf);
6173 /* Write to sensor register 0x06: Vertical Blanking */
6174 buf[0] = 0x00; buf[1] = 0x29; /* 41 rows */
6175 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x06, dev->sensor_flags, buf);
6176 /* Write to sensor register 0x05: Horizontal Blanking */
6177 buf[0] = 0x00; buf[1] = 0x09; /* 9 columns (pixel clocks) */
6178 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x05, dev->sensor_flags, buf);
6179 /* Read of sensor register 0x00: Chip Version (=reg0xff) */
6180 retI2C += sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 2, 0x00, dev->sensor_flags, buf); /* 0x82 0x43 */
6182 if (retI2C < 0) {
6183 UDIA_INFO("1 or more errors occured in I2C-message-block 7 !\n");
6184 return -1;
6186 /* END OF I2C MESSAGES */
6187 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
6190 buf[0] = 0x03;
6191 usb_microdia_control_write(dev, 0x1061, buf, 1); /* URB 2216 */
6194 /*** NOW DRIVER DOES STOP-SEQUENCE
6195 - WITHOUT WRITES TO 0x1007 AND 0x1006 (URBs 3544-3550) => MT9V111
6196 - WRITING 0x40 INSTEAD OF 0x60 TO 0x1007 AND 0x1006 => MT9V011
6197 ***/
6198 /*** 2nd, 3rd, ... CYCLE: ALL MESSAGES (URBs 1953 - URBs 2216) ARE REPEATED ***/
6199 /*** ----- WE DON'T DO THIS, IT SEEMS TO BE UNNECESSARY ----- ***/
6201 /* Setup IFP registers for AE and AWB (new, not in the logs): */
6202 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS) {
6203 mt9v111_setup_autoexposure(dev);
6204 mt9v111_setup_autowhitebalance(dev);
6205 mt9v111_set_autocorrections(dev, 1);
6208 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6209 buf[0] = 0x20;
6210 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6211 buf[0] = 0x60;
6212 usb_microdia_control_write(dev, 0x1007, buf, 1); /* URB 2489 */
6213 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6214 buf[0] = 0x00;
6215 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6216 buf[0] = 0x40;
6217 usb_microdia_control_write(dev, 0x1006, buf, 1); /* URB 2490 */
6218 /* => These two writes seem to cause the cam to start sending isochronus USB messages */
6220 return 0;
6223 int microdia_627b_start_stream(struct usb_microdia *dev)
6225 int ret;
6226 /* int actual; */
6227 __u16 reg;
6228 __u8 buf[64];
6230 buf[0] = 0x00; /** Will have to be set for every single interrupt. */
6232 ret = usb_interrupt_msg(dev->udev, 0x00000083, buf, 0x0000001, &actual, 1000); // URB 43
6235 reg = 0x1066;
6236 buf[0] = 0x00;
6237 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 44 */
6238 if (ret < 0)
6239 goto err;
6242 //ret = usb_set_interface(dev->udev, 0, 8);
6243 //if(ret < 0) goto err;
6245 //buf[0] = 0x00; // Will have to be set for every single interrupt
6246 //ret = usb_interrupt_msg(dev->udev, 0x00000083, buf, 0x0000001, &actual, 1000); // URB 45
6249 reg = 0x1000;
6250 buf[0] = 0x78;
6251 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 46 */
6252 if (ret < 0)
6253 goto err;
6255 reg = 0x1001;
6256 buf[0] = 0xc7;
6257 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 47 */
6258 if (ret < 0)
6259 goto err;
6261 reg = 0x1002;
6262 buf[0] = 0x18;
6263 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 48 */
6264 if (ret < 0)
6265 goto err;
6267 reg = 0x1061;
6268 buf[0] = 0x01;
6269 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 49 */
6270 if (ret < 0)
6271 goto err;
6273 reg = 0x1020;
6274 buf[0] = 0x80;
6275 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 50 */
6276 if (ret < 0)
6277 goto err;
6279 reg = 0x1067;
6280 buf[0] = 0x40; buf[1] = 0x30; buf[2] = 0x20; buf[3] = 0x10; buf[4] = 0x08;
6281 ret = usb_microdia_control_write(dev, reg, buf, 5); /* URB 51 */
6282 if (ret < 0)
6283 goto err;
6285 reg = 0x10c0;
6286 buf[0] = 0x80; buf[1] = 0x21; buf[2] = 0x00; buf[3] = 0x00;
6287 buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00;
6288 buf[8] = 0x03;
6289 ret = usb_microdia_control_write(dev, reg, buf, 9); /* URB 52 */
6290 if (ret < 0)
6291 goto err;
6293 /* transferbufferlength is 18, but data is 24 bytes long, what to do ? */
6294 reg = 0x10e0;
6295 buf[0] = 0x45; buf[1] = 0x18; buf[2] = 0x00; buf[3] = 0x30; buf[4] = 0x00;
6296 buf[5] = 0x09; buf[6] = 0x00; buf[7] = 0xed; buf[8] = 0x0f; buf[9] = 0xda;
6297 buf[10] = 0x0f; buf[11] = 0x3a; buf[12] = 0x00; buf[13] = 0x3a; buf[14] = 0x00;
6298 buf[15] = 0xd0; buf[16] = 0x0f; buf[17] = 0xf7; buf[18] = 0x0f; buf[19] = 0x00;
6299 buf[20] = 0x00; buf[21] = 0x00; buf[22] = 0x60; buf[23] = 0x0a;
6300 ret = usb_microdia_control_write(dev, reg, buf, 24); /* URB 53 */
6301 if (ret < 0)
6302 goto err;
6304 reg = 0x10f8;
6305 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00;
6306 ret = usb_microdia_control_write(dev, reg, buf, 3); /* URB 54 */
6307 if (ret < 0)
6308 goto err;
6310 reg = 0x10fb;
6311 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0; buf[4] = 0x00;
6312 ret = usb_microdia_control_write(dev, reg, buf, 5); /* URB 55 */
6313 if (ret < 0)
6314 goto err;
6316 reg = 0x1188;
6317 buf[0] = 0x86; buf[1] = 0x8c; buf[2] = 0x08;
6318 ret = usb_microdia_control_write(dev, reg, buf, 3); /* URB 56 */
6319 if (ret < 0)
6320 goto err;
6322 reg = 0x118b;
6323 buf[0] = 0x00; buf[1] = 0x20; buf[2] = 0x20; buf[3] = 0x20; buf[4] = 0x20;
6324 buf[5] = 0x00; buf[6] = 0x24; buf[7] = 0x3b; buf[8] = 0x4f; buf[9] = 0x61;
6325 buf[10] = 0x71; buf[11] = 0x80; buf[12] = 0x8f; buf[13] = 0x9d; buf[14] = 0xab;
6326 buf[15] = 0xb8; buf[16] = 0xc4; buf[17] = 0xd1; buf[18] = 0xdd; buf[19] = 0xe9;
6327 buf[20] = 0xf4; buf[21] = 0xff;
6328 ret = usb_microdia_control_write(dev, reg, buf, 22); /* URB 57 */
6329 if (ret < 0)
6330 goto err;
6332 reg = 0x11a1;
6333 buf[0] = 0x00; buf[1] = 0x00;
6334 ret = usb_microdia_control_write(dev, reg, buf, 2); /* URB 58 */
6335 if (ret < 0)
6336 goto err;
6338 reg = 0x11b7;
6339 buf[0] = 0x60; buf[1] = 0x28; buf[2] = 0x00; buf[3] = 0x08; buf[4] = 0x00;
6340 buf[5] = 0x40; buf[6] = 0x01; buf[7] = 0xf0; buf[8] = 0x00;
6341 ret = usb_microdia_control_write(dev, reg, buf, 9); /* URB 59 */
6342 if (ret < 0)
6343 goto err;
6345 reg = 0x11b8;
6346 buf[0] = 0x38;
6347 ret = usb_microdia_control_write(dev, reg, buf, 1); /* URB 60 */
6348 if (ret < 0)
6349 goto err;
6351 reg = 0x1000;
6352 buf[0] = 0x78;
6353 ret = usb_microdia_control_write(dev, reg, buf, 1);
6354 if (ret < 0)
6355 goto err;
6357 buf[0] = 0x80;
6358 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6359 OV7660_CTL_COM7, dev->sensor_flags, buf);
6360 if (ret < 0)
6361 goto errI2C;
6363 buf[0] = 0x01; buf[1] = 0x74; buf[2] = 0x92; buf[3] = 0x00;
6364 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6365 OV7660_CTL_GAIN, dev->sensor_flags, buf);
6366 if (ret < 0)
6367 goto errI2C;
6369 buf[0] = 0x00; buf[1] = 0x7d; buf[2] = 0x62; buf[3] = 0x00;
6370 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6371 OV7660_CTL_COM1, dev->sensor_flags, buf);
6372 if (ret < 0)
6373 goto errI2C;
6375 buf[0] = 0x83; buf[1] = 0x01;
6376 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
6377 OV7660_CTL_RAVE, dev->sensor_flags, buf);
6378 if (ret < 0)
6379 goto errI2C;
6381 buf[0] = 0x00; buf[1] = 0x08; buf[2] = 0x04; buf[3] = 0x62;
6382 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6383 OV7660_CTL_COM3, dev->sensor_flags, buf);
6384 if (ret < 0)
6385 goto errI2C;
6387 buf[0] = 0x00; buf[1] = 0x40; buf[2] = 0x05; buf[3] = 0xf8;
6388 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6389 OV7660_CTL_AECH, dev->sensor_flags, buf);
6390 if (ret < 0)
6391 goto errI2C;
6393 buf[0] = 0x2e; buf[1] = 0x00; buf[2] = 0x02;
6394 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 3,
6395 OV7660_CTL_COM9, dev->sensor_flags, buf);
6396 if (ret < 0)
6397 goto errI2C;
6399 buf[0] = 0x10; buf[1] = 0x60; buf[2] = 0x02; buf[3] = 0x7b;
6400 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6401 OV7660_CTL_HSTART, dev->sensor_flags, buf);
6402 if (ret < 0)
6403 goto errI2C;
6405 buf[0] = 0x06;
6406 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6407 OV7660_CTL_PSHFT, dev->sensor_flags, buf);
6408 if (ret < 0)
6409 goto errI2C;
6411 buf[0] = 0x01; buf[1] = 0x0e;
6412 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
6413 OV7660_CTL_MVFP, dev->sensor_flags, buf);
6414 if (ret < 0)
6415 goto errI2C;
6417 buf[0] = 0x07; buf[1] = 0x07; buf[2] = 0x07; buf[3] = 0x07;
6418 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6419 OV7660_CTL_BOS, dev->sensor_flags, buf);
6420 if (ret < 0)
6421 goto errI2C;
6423 buf[0] = 0x68; buf[1] = 0x58; buf[2] = 0xd4; buf[3] = 0x80;
6424 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6425 OV7660_CTL_AEW, dev->sensor_flags, buf);
6426 if (ret < 0)
6427 goto errI2C;
6429 buf[0] = 0x80; buf[1] = 0x3c; buf[2] = 0x00; buf[3] = 0x00;
6430 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6431 OV7660_CTL_GbBIAS, dev->sensor_flags, buf);
6432 if (ret < 0)
6433 goto errI2C;
6435 buf[0] = 0x80; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x62;
6436 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6437 OV7660_CTL_RBIAS, dev->sensor_flags, buf);
6438 if (ret < 0)
6439 goto errI2C;
6441 buf[0] = 0x08; buf[1] = 0x30; buf[2] = 0xb4;
6442 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 3,
6443 OV7660_CTL_HSYST, dev->sensor_flags, buf);
6444 if (ret < 0)
6445 goto errI2C;
6447 buf[0] = 0x00; buf[1] = 0x07; buf[2] = 0x84; buf[3] = 0x00;
6448 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6449 OV7660_CTL_CHLF, dev->sensor_flags, buf);
6450 if (ret < 0)
6451 goto errI2C;
6453 buf[0] = 0x0c; buf[1] = 0x02; buf[2] = 0x43; buf[3] = 0x00;
6454 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6455 OV7660_CTL_ADC, dev->sensor_flags, buf);
6456 if (ret < 0)
6457 goto errI2C;
6459 buf[0] = 0x02; buf[1] = 0x6c; buf[2] = 0x19; buf[3] = 0x0e;
6460 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6461 OV7660_CTL_COM11, dev->sensor_flags, buf);
6462 if (ret < 0)
6463 goto errI2C;
6465 buf[0] = 0x41; buf[1] = 0xc1; buf[2] = 0x22; buf[3] = 0x08;
6466 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6467 OV7660_CTL_EDGE, dev->sensor_flags, buf);
6468 if (ret < 0)
6469 goto errI2C;
6471 /* "Dummy" write */
6472 reg = 0x43; /* RSVD 0x43 is Reserved */
6473 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0,
6474 reg, dev->sensor_flags, NULL);
6475 if (ret < 0)
6476 goto errI2C;
6478 reg = 0x43; /* RSVD 0x43 is Reserved */
6479 buf[0] = 0xf0; buf[1] = 0x10; buf[2] = 0x78; buf[3] = 0xa8;
6480 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, reg,
6481 dev->sensor_flags, buf);
6482 if (ret < 0)
6483 goto errI2C;
6485 reg = 0x47; /* RSVD 0x47 is Reserved */
6486 buf[0] = 0x60; buf[1] = 0x80; buf[2] = 0x00; buf[3] = 0x00;
6487 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, reg,
6488 dev->sensor_flags, buf);
6489 if (ret < 0)
6490 goto errI2C;
6492 reg = 0x4b; /* RSVD 0x4b is Reserved */
6493 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00;
6494 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4, reg,
6495 dev->sensor_flags, buf);
6496 if (ret < 0)
6497 goto errI2C;
6499 /* "Dummy" write */
6500 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0,
6501 OV7660_CTL_MTX1, dev->sensor_flags, NULL);
6502 if (ret < 0)
6503 goto errI2C;
6505 reg = 0x59; /* RSVD 0x59 is Reserved */
6506 buf[0] = 0xba; buf[1] = 0x9a; buf[2] = 0x22; buf[3] = 0xb9;
6507 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6508 reg, dev->sensor_flags, buf);
6509 if (ret < 0)
6510 goto errI2C;
6512 reg = 0x5d; /* RSVD 0x5d is Reserved */
6513 buf[0] = 0x9b; buf[1] = 0x10; buf[2] = 0xf0; buf[3] = 0x05;
6514 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6515 reg, dev->sensor_flags, buf);
6516 if (ret < 0)
6517 goto errI2C;
6519 reg = 0x61; /* RSVD 0x61 is Reserved */
6520 buf[0] = 0x60;
6521 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6522 reg, dev->sensor_flags, buf);
6523 if (ret < 0)
6524 goto errI2C;
6526 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x30;
6527 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6528 OV7660_CTL_LCC1, dev->sensor_flags, buf);
6529 if (ret < 0)
6530 goto errI2C;
6532 buf[0] = 0x00;
6533 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6534 OV7660_CTL_LCC5, dev->sensor_flags, buf);
6535 if (ret < 0)
6536 goto errI2C;
6538 buf[0] = 0x80; buf[1] = 0x7a; buf[2] = 0x90; buf[3] = 0x80;
6539 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6540 OV7660_CTL_MANU, dev->sensor_flags, buf);
6541 if (ret < 0)
6542 goto errI2C;
6544 buf[0] = 0x0a;
6545 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6546 OV7660_CTL_DBLV, dev->sensor_flags, buf);
6547 if (ret < 0)
6548 goto errI2C;
6550 reg = 0x8b; /* RSVD 0x8b is Reserved */
6551 buf[0] = 0x99; buf[1] = 0x99; buf[2] = 0xcf;
6552 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 3, reg,
6553 dev->sensor_flags, buf);
6554 if (ret < 0)
6555 goto errI2C;
6557 buf[0] = 0x00; buf[1] = 0x00;
6558 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
6559 OV7660_CTL_DM_LNL, dev->sensor_flags, buf);
6560 if (ret < 0)
6561 goto errI2C;
6563 reg = 0x1007;
6564 buf[0] = 0x40;
6565 ret = usb_microdia_control_write(dev, reg, buf, 1);
6566 if (ret < 0)
6567 goto err;
6569 reg = 0x1006;
6570 buf[0] = 0x00;
6571 ret = usb_microdia_control_write(dev, reg, buf, 1);
6572 if (ret < 0)
6573 goto err;
6575 reg = 0x10c1;
6576 ret = usb_microdia_control_read(dev, reg, buf, 1);
6577 if (ret < 0)
6578 goto err;
6580 reg = 0x10c1;
6581 buf[0] = 0x50;
6582 ret = usb_microdia_control_write(dev, reg, buf, 1);
6583 if (ret < 0)
6584 goto err;
6586 /* TRY TO READ FROM EEPROM: */
6587 reg = 0x00;
6588 ret = sn9c20x_read_i2c_data(dev, 0x50, 1, reg, SN9C20X_I2C_2WIRE, buf);
6589 if (ret < 0)
6590 UDIA_INFO("No EEPROM found\n");
6591 else
6592 UDIA_INFO("Read from EEPROM successful\n");
6594 reg = 0x10c1;
6595 buf[0] = 0x21;
6596 ret = usb_microdia_control_write(dev, reg, buf, 1);
6597 if (ret < 0)
6598 goto err;
6600 reg = 0x10e0;
6601 buf[0] = 0x47;
6602 ret = usb_microdia_control_write(dev, reg, buf, 1);
6603 if (ret < 0)
6604 goto err;
6606 reg = 0x10e0;
6607 buf[0] = 0x47;
6608 ret = usb_microdia_control_write(dev, reg, buf, 1);
6609 if (ret < 0)
6610 goto err;
6612 reg = 0x1001;
6613 buf[0] = 0xc6;
6614 ret = usb_microdia_control_write(dev, reg, buf, 1);
6615 if (ret < 0)
6616 goto err;
6618 reg = 0x1001;
6619 buf[0] = 0xc4;
6620 ret = usb_microdia_control_write(dev, reg, buf, 1);
6621 if (ret < 0)
6622 goto err;
6624 reg = 0x1001;
6625 buf[0] = 0x84;
6626 ret = usb_microdia_control_write(dev, reg, buf, 1);
6627 if (ret < 0)
6628 goto err;
6630 buf[0] = 0x08;
6631 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6632 OV7660_CTL_VREF, dev->sensor_flags, buf);
6633 if (ret < 0)
6634 goto errI2C;
6636 buf[0] = 0x10; buf[1] = 0x61; buf[2] = 0x02; buf[3] = 0x7a;
6637 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 4,
6638 OV7660_CTL_HSTART, dev->sensor_flags, buf);
6639 if (ret < 0)
6640 goto errI2C;
6642 /* "Dummy" write: */
6643 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0,
6644 OV7660_CTL_PSHFT, dev->sensor_flags, NULL);
6645 if (ret < 0)
6646 goto errI2C;
6648 buf[0] = 0x84;
6649 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6650 OV7660_CTL_HREF, dev->sensor_flags, buf);
6651 if (ret < 0)
6652 goto errI2C;
6654 buf[0] = 0x84;
6655 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6656 OV7660_CTL_HREF, dev->sensor_flags, buf);
6657 if (ret < 0)
6658 goto errI2C;
6660 buf[0] = 0x84;
6661 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6662 OV7660_CTL_HREF, dev->sensor_flags, buf);
6663 if (ret < 0)
6664 goto errI2C;
6666 buf[0] = 0x84;
6667 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6668 OV7660_CTL_HREF, dev->sensor_flags, buf);
6669 if (ret < 0)
6670 goto errI2C;
6672 buf[0] = 0x84;
6673 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6674 OV7660_CTL_HREF, dev->sensor_flags, buf);
6675 if (ret < 0)
6676 goto errI2C;
6678 reg = 0x1180;
6679 buf[0] = 0x01; buf[1] = 0x00; buf[2] = 0x01; buf[3] = 0x00; buf[4] = 0x28;
6680 buf[5] = 0x3c;
6681 ret = usb_microdia_control_write(dev, reg, buf, 6);
6682 if (ret < 0)
6683 goto err;
6685 reg = 0x10fb;
6686 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0; buf[4] = 0x00;
6687 ret = usb_microdia_control_write(dev, reg, buf, 5);
6688 if (ret < 0)
6689 goto err;
6691 reg = 0x1189;
6692 buf[0] = 0x8c;
6693 ret = usb_microdia_control_write(dev, reg, buf, 1);
6694 if (ret < 0)
6695 goto err;
6697 reg = 0x11a1;
6698 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
6699 ret = usb_microdia_control_write(dev, reg, buf, 4);
6700 if (ret < 0)
6701 goto err;
6703 reg = 0x11ab;
6704 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
6705 ret = usb_microdia_control_write(dev, reg, buf, 4);
6706 if (ret < 0)
6707 goto err;
6709 reg = 0x1000;
6710 buf[0] = 0x78;
6711 ret = usb_microdia_control_write(dev, reg, buf, 1);
6712 if (ret < 0)
6713 goto err;
6715 reg = 0x1002;
6716 buf[0] = 0x18;
6717 ret = usb_microdia_control_write(dev, reg, buf, 1);
6718 if (ret < 0)
6719 goto err;
6721 reg = 0x1002;
6722 buf[0] = 0x18;
6723 ret = usb_microdia_control_write(dev, reg, buf, 1);
6724 if (ret < 0)
6725 goto err;
6727 reg = 0x11b8;
6728 buf[0] = 0x38;
6729 ret = usb_microdia_control_write(dev, reg, buf, 1);
6730 if (ret < 0)
6731 goto err;
6733 reg = 0x118a;
6734 buf[0] = 0x04;
6735 ret = usb_microdia_control_write(dev, reg, buf, 1);
6736 if (ret < 0)
6737 goto err;
6739 reg = 0x0395;
6740 buf[0] = 0x04;
6741 ret = usb_microdia_control_write(dev, reg, buf, 1);
6742 if (ret < 0)
6743 goto err;
6745 reg = 0x11b8;
6746 buf[0] = 0x78;
6747 ret = usb_microdia_control_write(dev, reg, buf, 1);
6748 if (ret < 0)
6749 goto err;
6750 ret = usb_microdia_control_read(dev, reg, buf, 1);
6751 if (ret < 0)
6752 goto err;
6754 reg = 0x11b8;
6755 buf[0] = 0xf9;
6756 ret = usb_microdia_control_write(dev, reg, buf, 1);
6757 if (ret < 0)
6758 goto err;
6759 ret = usb_microdia_control_read(dev, reg, buf, 1);
6760 if (ret < 0)
6761 goto err;
6763 reg = 0x11b8;
6764 buf[0] = 0xfa;
6765 ret = usb_microdia_control_write(dev, reg, buf, 1);
6766 if (ret < 0)
6767 goto err;
6768 ret = usb_microdia_control_read(dev, reg, buf, 1);
6769 if (ret < 0)
6770 goto err;
6772 reg = 0x11b8;
6773 buf[0] = 0x7b;
6774 ret = usb_microdia_control_write(dev, reg, buf, 1);
6775 if (ret < 0)
6776 goto err;
6777 ret = usb_microdia_control_read(dev, reg, buf, 1);
6778 if (ret < 0)
6779 goto err;
6781 reg = 0x11b8;
6782 buf[0] = 0x7c;
6783 ret = usb_microdia_control_write(dev, reg, buf, 1);
6784 if (ret < 0)
6785 goto err;
6786 ret = usb_microdia_control_read(dev, reg, buf, 1);
6787 if (ret < 0)
6788 goto err;
6790 reg = 0x11b8;
6791 buf[0] = 0x7d;
6792 ret = usb_microdia_control_write(dev, reg, buf, 1);
6793 if (ret < 0)
6794 goto err;
6795 ret = usb_microdia_control_read(dev, reg, buf, 1);
6796 if (ret < 0)
6797 goto err;
6799 reg = 0x11b8;
6800 buf[0] = 0x7b;
6801 ret = usb_microdia_control_write(dev, reg, buf, 1);
6802 if (ret < 0)
6803 goto err;
6806 //ret = usb_microdia_control_read(dev, reg, buf, 1);
6807 //if(ret < 0) goto err;
6810 buf[0] = 0x40;
6811 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6812 OV7660_CTL_CLKRC, dev->sensor_flags, buf);
6813 if (ret < 0)
6814 goto errI2C;
6816 buf[0] = 0x00;
6817 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6818 OV7660_CTL_EXHCH, dev->sensor_flags, buf);
6819 if (ret < 0)
6820 goto errI2C;
6822 buf[0] = 0x00;
6823 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6824 OV7660_CTL_EXHCL, dev->sensor_flags, buf);
6825 if (ret < 0)
6826 goto errI2C;
6828 buf[0] = 0x00;
6829 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6830 OV7660_CTL_DM_LNL, dev->sensor_flags, buf);
6831 if (ret < 0)
6832 goto errI2C;
6834 buf[0] = 0x00;
6835 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6836 OV7660_CTL_DM_LNH, dev->sensor_flags, buf);
6837 if (ret < 0)
6838 goto errI2C;
6840 buf[0] = 0x01;
6841 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6842 OV7660_CTL_MVFP, dev->sensor_flags, buf);
6843 if (ret < 0)
6844 goto errI2C;
6846 buf[0] = 0x01;
6847 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6848 OV7660_CTL_MVFP, dev->sensor_flags, buf);
6849 if (ret < 0)
6850 goto errI2C;
6852 buf[0] = 0x08;
6853 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6854 OV7660_CTL_VREF, dev->sensor_flags, buf);
6855 if (ret < 0)
6856 goto errI2C;
6858 buf[0] = 0x00;
6859 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6860 OV7660_CTL_VREF, dev->sensor_flags, buf);
6861 if (ret < 0)
6862 goto errI2C;
6864 buf[0] = 0x7f;
6865 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6866 OV7660_CTL_AECH, dev->sensor_flags, buf);
6867 if (ret < 0)
6868 goto errI2C;
6870 buf[0] = 0x00;
6871 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6872 OV7660_CTL_COM1, dev->sensor_flags, buf);
6873 if (ret < 0)
6874 goto errI2C;
6876 buf[0] = 0x00;
6877 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6878 OV7660_CTL_ADVFL, dev->sensor_flags, buf);
6879 if (ret < 0)
6880 goto errI2C;
6882 buf[0] = 0x00;
6883 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6884 OV7660_CTL_ADVFH, dev->sensor_flags, buf);
6885 if (ret < 0)
6886 goto errI2C;
6888 buf[0] = 0x00;
6889 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
6890 OV7660_CTL_GAIN, dev->sensor_flags, buf);
6891 if (ret < 0)
6892 goto errI2C;
6894 buf[0] = 0x78; buf[1] = 0x78;
6895 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
6896 OV7660_CTL_BLUE, dev->sensor_flags, buf);
6897 if (ret < 0)
6898 goto errI2C;
6900 reg = 0x11ba;
6901 buf[0] = 0x0a;
6902 ret = usb_microdia_control_write(dev, reg, buf, 1);
6903 if (ret < 0)
6904 goto err;
6906 reg = 0x118b;
6907 buf[0] = 0x0c;
6908 ret = usb_microdia_control_write(dev, reg, buf, 1);
6909 if (ret < 0)
6910 goto err;
6912 reg = 0x10f7;
6913 buf[0] = 0x05;
6914 ret = usb_microdia_control_write(dev, reg, buf, 1);
6915 if (ret < 0)
6916 goto err;
6918 reg = 0x10f8;
6919 buf[0] = 0x14;
6920 ret = usb_microdia_control_write(dev, reg, buf, 1);
6921 if (ret < 0)
6922 goto err;
6924 reg = 0x10fa;
6925 buf[0] = 0xff;
6926 ret = usb_microdia_control_write(dev, reg, buf, 1);
6927 if (ret < 0)
6928 goto err;
6930 reg = 0x10f9;
6931 buf[0] = 0x00;
6932 ret = usb_microdia_control_write(dev, reg, buf, 1);
6933 if (ret < 0)
6934 goto err;
6936 reg = 0x10f9;
6937 buf[0] = 0x00;
6938 ret = usb_microdia_control_write(dev, reg, buf, 1);
6939 if (ret < 0)
6940 goto err;
6942 reg = 0x11ba;
6943 buf[0] = 0x0a;
6944 ret = usb_microdia_control_write(dev, reg, buf, 1);
6945 if (ret < 0)
6946 goto err;
6948 reg = 0x11bc;
6949 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00;
6950 ret = usb_microdia_control_write(dev, reg, buf, 4);
6951 if (ret < 0)
6952 goto err;
6954 reg = 0x11c0;
6955 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00;
6956 buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x00; buf[9] = 0x00;
6957 buf[10] = 0x00; buf[11] = 0x00; buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00;
6958 buf[15] = 0x00; buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00;
6959 buf[20] = 0x00; buf[21] = 0x00; buf[22] = 0x00; buf[23] = 0x00; buf[24] = 0x00;
6960 buf[25] = 0x00; buf[26] = 0x00; buf[27] = 0x00; buf[28] = 0x00; buf[29] = 0x00;
6961 buf[30] = 0x00; buf[31] = 0x00; buf[32] = 0x00;
6962 ret = usb_microdia_control_write(dev, reg, buf, 33);
6963 if (ret < 0)
6964 goto err;
6965 /* transferbufferlength was only 30 ? */
6967 reg = 0x11a5;
6968 buf[0] = 0x2d; buf[1] = 0x2d; buf[2] = 0x3a; buf[3] = 0x05; buf[4] = 0x04;
6969 buf[5] = 0x3f;
6970 ret = usb_microdia_control_write(dev, reg, buf, 6);
6971 if (ret < 0)
6972 goto err;
6974 reg = 0x11af;
6975 buf[0] = 0x28; buf[1] = 0xd8; buf[2] = 0x14; buf[3] = 0xec;
6976 ret = usb_microdia_control_write(dev, reg, buf, 4);
6977 if (ret < 0)
6978 goto err;
6980 reg = 0x11b3;
6981 buf[0] = 0x32; buf[1] = 0xdd; buf[2] = 0x32; buf[3] = 0xdd;
6982 ret = usb_microdia_control_write(dev, reg, buf, 4);
6983 if (ret < 0)
6984 goto err;
6986 reg = 0x10e0;
6987 buf[0] = 0x47;
6988 ret = usb_microdia_control_write(dev, reg, buf, 1);
6989 if (ret < 0)
6990 goto err;
6992 reg = 0x1061;
6993 buf[0] = 0x01;
6994 ret = usb_microdia_control_write(dev, reg, buf, 1);
6995 if (ret < 0)
6996 goto err;
6998 reg = 0x10e0;
6999 buf[0] = 0x67;
7000 ret = usb_microdia_control_write(dev, reg, buf, 1);
7001 if (ret < 0)
7002 goto err;
7004 reg = 0x1100;
7005 buf[0] = 0x0d; buf[1] = 0x08; buf[2] = 0x08; buf[3] = 0x0d; buf[4] = 0x08;
7006 buf[5] = 0x08; buf[6] = 0x0d; buf[7] = 0x0d; buf[8] = 0x0d; buf[9] = 0x0d;
7007 buf[10] = 0x11; buf[11] = 0x0d; buf[12] = 0x0d; buf[13] = 0x11; buf[14] = 0x15;
7008 buf[15] = 0x21; buf[16] = 0x15; buf[17] = 0x15; buf[18] = 0x11; buf[19] = 0x11;
7009 buf[20] = 0x15; buf[21] = 0x2a; buf[22] = 0x1d; buf[23] = 0x1d; buf[24] = 0x19;
7010 buf[25] = 0x21; buf[26] = 0x32; buf[27] = 0x2a; buf[28] = 0x32; buf[29] = 0x32;
7011 buf[30] = 0x2e; buf[31] = 0x2a; buf[32] = 0x2e; buf[33] = 0x2e; buf[34] = 0x36;
7012 buf[35] = 0x3a; buf[36] = 0x4b; buf[37] = 0x43; buf[38] = 0x36; buf[39] = 0x3a;
7013 buf[40] = 0x47; buf[41] = 0x3a; buf[42] = 0x2e; buf[43] = 0x2e; buf[44] = 0x43;
7014 buf[45] = 0x5c; buf[46] = 0x43; buf[47] = 0x47; buf[48] = 0x4f; buf[49] = 0x53;
7015 buf[50] = 0x58; buf[51] = 0x58; buf[52] = 0x58; buf[53] = 0x32; buf[54] = 0x3f;
7016 buf[55] = 0x60; buf[56] = 0x64; buf[57] = 0x5c; buf[58] = 0x53; buf[59] = 0x64;
7017 buf[60] = 0x4b; buf[61] = 0x53; buf[62] = 0x58; buf[63] = 0x53;
7018 ret = usb_microdia_control_write(dev, reg, buf, 64);
7019 if (ret < 0)
7020 goto err;
7021 /* transferbufferlength is only 40 ? */
7023 reg = 0x1140;
7024 buf[0] = 0x0d; buf[1] = 0x11; buf[2] = 0x11; buf[3] = 0x15; buf[4] = 0x11;
7025 buf[5] = 0x15; buf[6] = 0x26; buf[7] = 0x15; buf[8] = 0x15; buf[9] = 0x26;
7026 buf[10] = 0x53; buf[11] = 0x36; buf[12] = 0x2e; buf[13] = 0x36; buf[14] = 0x53;
7027 buf[15] = 0x53; buf[16] = 0x53; buf[17] = 0x53; buf[18] = 0x53; buf[19] = 0x53;
7028 buf[20] = 0x53; buf[21] = 0x53; buf[22] = 0x53; buf[23] = 0x53; buf[24] = 0x53;
7029 buf[25] = 0x53; buf[26] = 0x53; buf[27] = 0x53; buf[28] = 0x53; buf[29] = 0x53;
7030 buf[30] = 0x53; buf[31] = 0x53; buf[32] = 0x53; buf[33] = 0x53; buf[34] = 0x53;
7031 buf[35] = 0x53; buf[36] = 0x53; buf[37] = 0x53; buf[38] = 0x53; buf[39] = 0x53;
7032 buf[40] = 0x53; buf[41] = 0x53; buf[42] = 0x53; buf[43] = 0x53; buf[44] = 0x53;
7033 buf[45] = 0x53; buf[46] = 0x53; buf[47] = 0x53; buf[48] = 0x53; buf[49] = 0x53;
7034 buf[50] = 0x53; buf[51] = 0x53; buf[52] = 0x53; buf[53] = 0x53; buf[54] = 0x53;
7035 buf[55] = 0x53; buf[56] = 0x53; buf[57] = 0x53; buf[58] = 0x53; buf[59] = 0x53;
7036 buf[60] = 0x53; buf[61] = 0x53; buf[62] = 0x53; buf[63] = 0x53;
7037 ret = usb_microdia_control_write(dev, reg, buf, 64);
7038 if (ret < 0)
7039 goto err;
7040 /* transferbufferlength is only 40 ? */
7042 reg = 0x10e0;
7043 buf[0] = 0x47;
7044 ret = usb_microdia_control_write(dev, reg, buf, 1);
7045 if (ret < 0)
7046 goto err;
7048 reg = 0x1061;
7049 buf[0] = 0x03;
7050 ret = usb_microdia_control_write(dev, reg, buf, 1);
7051 if (ret < 0)
7052 goto err;
7054 reg = 0x10e0;
7055 buf[0] = 0x4b;
7056 ret = usb_microdia_control_write(dev, reg, buf, 1);
7057 if (ret < 0)
7058 goto err;
7060 buf[0] = 0x08;
7061 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7062 OV7660_CTL_VREF, dev->sensor_flags, buf);
7063 if (ret < 0)
7064 goto errI2C;
7066 reg = 0x1180;
7067 buf[0] = 0x01; buf[1] = 0x00; buf[2] = 0x01; buf[3] = 0x00; buf[4] = 0x28;
7068 buf[5] = 0x3c;
7069 ret = usb_microdia_control_write(dev, reg, buf, 6);
7070 if (ret < 0)
7071 goto err;
7073 reg = 0x10fb;
7074 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0; buf[4] = 0x00;
7075 ret = usb_microdia_control_write(dev, reg, buf, 5);
7076 if (ret < 0)
7077 goto err;
7079 reg = 0x1189;
7080 buf[0] = 0x8c;
7081 ret = usb_microdia_control_write(dev, reg, buf, 1);
7082 if (ret < 0)
7083 goto err;
7085 reg = 0x11a1;
7086 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x6a; buf[3] = 0x50;
7087 ret = usb_microdia_control_write(dev, reg, buf, 4);
7088 if (ret < 0)
7089 goto err;
7091 reg = 0x11ab;
7092 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x50; buf[3] = 0x3c;
7093 ret = usb_microdia_control_write(dev, reg, buf, 4);
7094 if (ret < 0)
7095 goto err;
7097 reg = 0x1061;
7098 buf[0] = 0x03;
7099 ret = usb_microdia_control_write(dev, reg, buf, 1);
7100 if (ret < 0)
7101 goto err;
7103 reg = 0x11ba;
7104 buf[0] = 0x0a;
7105 ret = usb_microdia_control_write(dev, reg, buf, 1);
7106 if (ret < 0)
7107 goto err;
7109 reg = 0x11b9;
7110 buf[0] = 0x00;
7111 ret = usb_microdia_control_write(dev, reg, buf, 1);
7112 if (ret < 0)
7113 goto err;
7115 reg = 0x11ba;
7116 buf[0] = 0x0b;
7117 ret = usb_microdia_control_write(dev, reg, buf, 1);
7118 if (ret < 0)
7119 goto err;
7121 reg = 0x1061;
7122 buf[0] = 0x01;
7123 ret = usb_microdia_control_write(dev, reg, buf, 1);
7124 if (ret < 0)
7125 goto err;
7127 reg = 0x1000;
7128 buf[0] = 0x78;
7129 ret = usb_microdia_control_write(dev, reg, buf, 1);
7130 if (ret < 0)
7131 goto err;
7133 reg = 0x1002;
7134 buf[0] = 0x18;
7135 ret = usb_microdia_control_write(dev, reg, buf, 1);
7136 if (ret < 0)
7137 goto err;
7139 reg = 0x1002;
7140 buf[0] = 0x18;
7141 ret = usb_microdia_control_write(dev, reg, buf, 1);
7142 if (ret < 0)
7143 goto err;
7145 reg = 0x11b8;
7146 buf[0] = 0x7b;
7147 ret = usb_microdia_control_write(dev, reg, buf, 1);
7148 if (ret < 0)
7149 goto err;
7151 reg = 0x118a;
7152 buf[0] = 0x04;
7153 ret = usb_microdia_control_write(dev, reg, buf, 1);
7154 if (ret < 0)
7155 goto err;
7157 reg = 0x0395;
7158 buf[0] = 0x04;
7159 ret = usb_microdia_control_write(dev, reg, buf, 1);
7160 if (ret < 0)
7161 goto err;
7163 reg = 0x11b8;
7164 buf[0] = 0x78;
7165 ret = usb_microdia_control_write(dev, reg, buf, 1);
7166 if (ret < 0)
7167 goto err;
7168 ret = usb_microdia_control_read(dev, reg, buf, 1);
7169 if (ret < 0)
7170 goto err;
7172 reg = 0x11b8;
7173 buf[0] = 0xf9;
7174 ret = usb_microdia_control_write(dev, reg, buf, 1);
7175 if (ret < 0)
7176 goto err;
7177 ret = usb_microdia_control_read(dev, reg, buf, 1);
7178 if (ret < 0)
7179 goto err;
7181 reg = 0x11b8;
7182 buf[0] = 0xfa;
7183 ret = usb_microdia_control_write(dev, reg, buf, 1);
7184 if (ret < 0)
7185 goto err;
7186 ret = usb_microdia_control_read(dev, reg, buf, 1);
7187 if (ret < 0)
7188 goto err;
7190 reg = 0x11b8;
7191 buf[0] = 0x7b;
7192 ret = usb_microdia_control_write(dev, reg, buf, 1);
7193 if (ret < 0)
7194 goto err;
7195 ret = usb_microdia_control_read(dev, reg, buf, 1);
7196 if (ret < 0)
7197 goto err;
7199 reg = 0x11b8;
7200 buf[0] = 0x7c;
7201 ret = usb_microdia_control_write(dev, reg, buf, 1);
7202 if (ret < 0)
7203 goto err;
7204 ret = usb_microdia_control_read(dev, reg, buf, 1);
7205 if (ret < 0)
7206 goto err;
7208 reg = 0x11b8;
7209 buf[0] = 0x7d;
7210 ret = usb_microdia_control_write(dev, reg, buf, 1);
7211 if (ret < 0)
7212 goto err;
7213 ret = usb_microdia_control_read(dev, reg, buf, 1);
7214 if (ret < 0)
7215 goto err;
7217 reg = 0x11b8;
7218 buf[0] = 0x7b;
7219 ret = usb_microdia_control_write(dev, reg, buf, 1);
7220 if (ret < 0)
7221 goto err;
7223 buf[0] = 0x40;
7224 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7225 OV7660_CTL_CLKRC, dev->sensor_flags, buf);
7226 if (ret < 0)
7227 goto errI2C;
7229 buf[0] = 0x00;
7230 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7231 OV7660_CTL_EXHCH, dev->sensor_flags, buf);
7232 if (ret < 0)
7233 goto errI2C;
7235 buf[0] = 0x00;
7236 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7237 OV7660_CTL_EXHCL, dev->sensor_flags, buf);
7238 if (ret < 0)
7239 goto errI2C;
7241 buf[0] = 0x00;
7242 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7243 OV7660_CTL_DM_LNL, dev->sensor_flags, buf);
7244 if (ret < 0)
7245 goto errI2C;
7247 buf[0] = 0x00;
7248 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7249 OV7660_CTL_DM_LNH, dev->sensor_flags, buf);
7250 if (ret < 0)
7251 goto errI2C;
7253 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1,
7254 OV7660_CTL_PID, dev->sensor_flags, buf);
7255 if (ret < 0)
7256 goto errI2C;
7258 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1,
7259 OV7660_CTL_VER, dev->sensor_flags, buf);
7260 if (ret < 0)
7261 goto errI2C;
7263 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1,
7264 OV7660_CTL_MIDH, dev->sensor_flags, buf);
7265 if (ret < 0)
7266 goto errI2C;
7268 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1,
7269 OV7660_CTL_MIDL, dev->sensor_flags, buf);
7270 if (ret < 0)
7271 goto errI2C;
7273 reg = 0x1061;
7274 buf[0] = 0x03;
7275 ret = usb_microdia_control_write(dev, reg, buf, 1);
7276 if (ret < 0)
7277 goto err;
7279 reg = 0x1007;
7280 buf[0] = 0x60;
7281 ret = usb_microdia_control_write(dev, reg, buf, 1);
7282 if (ret < 0)
7283 goto err;
7285 reg = 0x1006;
7286 buf[0] = 0x00;
7287 ret = usb_microdia_control_write(dev, reg, buf, 1);
7288 if (ret < 0)
7289 goto err;
7291 reg = 0x1007;
7292 buf[0] = 0x60;
7293 ret = usb_microdia_control_write(dev, reg, buf, 1);
7294 if (ret < 0)
7295 goto err;
7297 reg = 0x1006;
7298 buf[0] = 0x00;
7299 ret = usb_microdia_control_write(dev, reg, buf, 1);
7300 if (ret < 0)
7301 goto err;
7303 buf[0] = 0x7f;
7304 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7305 OV7660_CTL_AECH, dev->sensor_flags, buf);
7306 if (ret < 0)
7307 goto errI2C;
7309 buf[0] = 0x01;
7310 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7311 OV7660_CTL_COM1, dev->sensor_flags, buf);
7312 if (ret < 0)
7313 goto errI2C;
7315 buf[0] = 0x13;
7316 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7317 OV7660_CTL_GAIN, dev->sensor_flags, buf);
7318 if (ret < 0)
7319 goto errI2C;
7321 buf[0] = 0x00; buf[1] = 0x01;
7322 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
7323 OV7660_CTL_ADVFL, dev->sensor_flags, buf);
7324 if (ret < 0)
7325 goto errI2C;
7327 buf[0] = 0x1e;
7328 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1,
7329 OV7660_CTL_GAIN, dev->sensor_flags, buf);
7330 if (ret < 0)
7331 goto errI2C;
7333 buf[0] = 0x50; buf[1] = 0x60;
7334 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
7335 OV7660_CTL_BLUE, dev->sensor_flags, buf);
7336 if (ret < 0)
7337 goto errI2C;
7339 buf[0] = 0xfc; buf[1] = 0x04;
7340 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
7341 OV7660_CTL_ADVFL, dev->sensor_flags, buf);
7342 if (ret < 0)
7343 goto errI2C;
7345 buf[0] = 0x1f; buf[1] = 0x00;
7346 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
7347 OV7660_CTL_GAIN, dev->sensor_flags, buf);
7348 if (ret < 0)
7349 goto errI2C;
7351 buf[0] = 0x48; buf[1] = 0x58;
7352 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
7353 OV7660_CTL_BLUE, dev->sensor_flags, buf);
7354 if (ret < 0)
7355 goto errI2C;
7357 buf[0] = 0xf6; buf[1] = 0x0b;
7358 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
7359 OV7660_CTL_ADVFL, dev->sensor_flags, buf);
7360 if (ret < 0)
7361 goto errI2C;
7363 reg = 0x1006;
7364 buf[0] = 0x40;
7365 ret = usb_microdia_control_write(dev, reg, buf, 1);
7366 if (ret < 0)
7367 goto err;
7369 buf[0] = 0x50; buf[1] = 0x60;
7370 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
7371 OV7660_CTL_BLUE, dev->sensor_flags, buf);
7372 if (ret < 0)
7373 goto errI2C;
7375 return ret;
7376 err:
7377 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg, ret);
7378 return ret;
7380 errI2C:
7381 UDIA_ERROR("r/w in sensor register %x failed (%d)!\n", reg, ret);
7382 return ret;
7387 * @brief From UsbSnoop-plugin-parsed.log
7389 * @param dev
7391 * @returns 0 (OK) or <0 (Error)
7393 * @author Vincent, Kuzja
7395 int microdia_6288_start_stream(struct usb_microdia *dev)
7397 int ret;
7398 __u16 reg;
7399 __u8 buf[64];
7403 reg = 0x1066 ;
7404 buf[0] = 0x00;
7405 ret = usb_microdia_control_write(dev, reg, buf, 1);
7406 if (ret < 0)
7407 goto err;
7409 reg = 0x1000 ;
7410 buf[0] = 0x78;
7411 ret = usb_microdia_control_write(dev, reg, buf, 1);
7412 if (ret < 0)
7413 goto err;
7415 reg = 0x1001 ;
7416 buf[0] = 0xc7;
7417 ret = usb_microdia_control_write(dev, reg, buf, 1);
7418 if (ret < 0)
7419 goto err;
7421 reg = 0x1002 ;
7422 buf[0] = 0x1c;
7423 ret = usb_microdia_control_write(dev, reg, buf, 1);
7424 if (ret < 0)
7425 goto err;
7427 reg = 0x1061 ;
7428 buf[0] = 0x01;
7429 ret = usb_microdia_control_write(dev, reg, buf, 1);
7430 if (ret < 0)
7431 goto err;
7433 reg = 0x1020 ;
7434 buf[0] = 0x80;
7435 ret = usb_microdia_control_write(dev, reg, buf, 1);
7436 if (ret < 0)
7437 goto err;
7439 reg = 0x1067 ;
7440 buf[0] = 0x40; buf[1] = 0x30; buf[2] = 0x20;
7441 buf[3] = 0x10; buf[4] = 0x08;
7442 ret = usb_microdia_control_write(dev, reg, buf, 5);
7443 if (ret < 0)
7444 goto err;
7446 reg = 0x10c0 ;
7447 buf[0] = 0x80; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00; buf[8] = 0x03;
7448 ret = usb_microdia_control_write(dev, reg, buf, 9);
7449 if (ret < 0)
7450 goto err;
7452 reg = 0x10e0 ;
7453 buf[0] = 0x44; buf[1] = 0x18; buf[2] = 0x00; buf[3] = 0x30;
7454 buf[4] = 0x00; buf[5] = 0x09; buf[6] = 0x00; buf[7] = 0xed;
7455 buf[8] = 0x0f; buf[9] = 0xda; buf[10] = 0x0f; buf[11] = 0x3a;
7456 buf[12] = 0x00; buf[13] = 0x3a; buf[14] = 0x00; buf[15] = 0xd0;
7457 buf[16] = 0x0f; buf[17] = 0xf7; buf[18] = 0x0f; buf[19] = 0x00;
7458 buf[20] = 0x00; buf[21] = 0x00; buf[22] = 0x60; buf[23] = 0x0a;
7459 ret = usb_microdia_control_write(dev, reg, buf, 24);
7460 if (ret < 0)
7461 goto err;
7463 reg = 0x10f8 ;
7464 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00;
7465 ret = usb_microdia_control_write(dev, reg, buf, 3);
7466 if (ret < 0)
7467 goto err;
7469 reg = 0x10fb ;
7470 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0; buf[4] = 0x00;
7471 ret = usb_microdia_control_write(dev, reg, buf, 5);
7472 if (ret < 0)
7473 goto err;
7475 reg = 0x1188 ;
7476 buf[0] = 0x86; buf[1] = 0xcc; buf[2] = 0x08;
7477 ret = usb_microdia_control_write(dev, reg, buf, 3);
7478 if (ret < 0)
7479 goto err;
7481 reg = 0x118b ;
7482 buf[0] = 0x00; buf[1] = 0x20; buf[2] = 0x20; buf[3] = 0x20;
7483 buf[4] = 0x20; buf[5] = 0x00; buf[6] = 0x24; buf[7] = 0x3b;
7484 buf[8] = 0x4f; buf[9] = 0x61; buf[10] = 0x71; buf[11] = 0x80;
7485 buf[12] = 0x8f; buf[13] = 0x9d; buf[14] = 0xab; buf[15] = 0xb8;
7486 buf[16] = 0xc4; buf[17] = 0xd1; buf[18] = 0xdd; buf[19] = 0xe9;
7487 buf[20] = 0xf4; buf[21] = 0xff;
7488 ret = usb_microdia_control_write(dev, reg, buf, 22);
7489 if (ret < 0)
7490 goto err;
7492 reg = 0x11a1 ;
7493 buf[0] = 0x00; buf[1] = 0x00;
7494 ret = usb_microdia_control_write(dev, reg, buf, 2);
7495 if (ret < 0)
7496 goto err;
7498 reg = 0x11b7 ;
7499 buf[0] = 0x60; buf[1] = 0x20; buf[2] = 0x00; buf[3] = 0x08;
7500 buf[4] = 0x00; buf[5] = 0x40; buf[6] = 0x01; buf[7] = 0xf0;
7501 buf[8] = 0x00;
7502 ret = usb_microdia_control_write(dev, reg, buf, 9);
7503 if (ret < 0)
7504 goto err;
7506 reg = 0x11b8 ;
7507 buf[0] = 0x30;
7508 ret = usb_microdia_control_write(dev, reg, buf, 1);
7509 if (ret < 0)
7510 goto err;
7512 reg = 0x1000 ;
7513 buf[0] = 0x78;
7514 ret = usb_microdia_control_write(dev, reg, buf, 1);
7515 if (ret < 0)
7516 goto err;
7518 reg = 0x10c0 ;
7519 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x12; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7520 ret = usb_microdia_control_write(dev, reg, buf, 8);
7521 if (ret < 0)
7522 goto err;
7524 reg = 0x10c0 ;
7525 ret = usb_microdia_control_read(dev, reg, buf, 1);
7526 if (ret < 0)
7527 goto err;
7529 reg = 0x10c0 ;
7530 ret = usb_microdia_control_read(dev, reg, buf, 1);
7531 if (ret < 0)
7532 goto err;
7534 reg = 0x10c0 ;
7535 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x12; buf[3] = 0x01; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7536 ret = usb_microdia_control_write(dev, reg, buf, 8);
7537 if (ret < 0)
7538 goto err;
7540 reg = 0x10c0 ;
7541 ret = usb_microdia_control_read(dev, reg, buf, 1);
7542 if (ret < 0)
7543 goto err;
7545 reg = 0x10c0 ;
7546 ret = usb_microdia_control_read(dev, reg, buf, 1);
7547 if (ret < 0)
7548 goto err;
7550 reg = 0x10c0 ;
7551 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x0d; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7552 ret = usb_microdia_control_write(dev, reg, buf, 8);
7553 if (ret < 0)
7554 goto err;
7556 reg = 0x10c0 ;
7557 ret = usb_microdia_control_read(dev, reg, buf, 1);
7558 if (ret < 0)
7559 goto err;
7561 reg = 0x10c0 ;
7562 ret = usb_microdia_control_read(dev, reg, buf, 1);
7563 if (ret < 0)
7564 goto err;
7566 reg = 0x10c0 ;
7567 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x0e; buf[3] = 0x61; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7568 ret = usb_microdia_control_write(dev, reg, buf, 8);
7569 if (ret < 0)
7570 goto err;
7572 reg = 0x10c0 ;
7573 ret = usb_microdia_control_read(dev, reg, buf, 1);
7574 if (ret < 0)
7575 goto err;
7577 reg = 0x10c0 ;
7578 ret = usb_microdia_control_read(dev, reg, buf, 1);
7579 if (ret < 0)
7580 goto err;
7582 reg = 0x10c0 ;
7583 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x11; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7584 ret = usb_microdia_control_write(dev, reg, buf, 8);
7585 if (ret < 0)
7586 goto err;
7588 reg = 0x10c0 ;
7589 ret = usb_microdia_control_read(dev, reg, buf, 1);
7590 if (ret < 0)
7591 goto err;
7593 reg = 0x10c0 ;
7594 ret = usb_microdia_control_read(dev, reg, buf, 1);
7595 if (ret < 0)
7596 goto err;
7598 reg = 0x10c0 ;
7599 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x13; buf[3] = 0xb8; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7600 ret = usb_microdia_control_write(dev, reg, buf, 8);
7601 if (ret < 0)
7602 goto err;
7604 reg = 0x10c0 ;
7605 ret = usb_microdia_control_read(dev, reg, buf, 1);
7606 if (ret < 0)
7607 goto err;
7609 reg = 0x10c0 ;
7610 ret = usb_microdia_control_read(dev, reg, buf, 1);
7611 if (ret < 0)
7612 goto err;
7614 reg = 0x10c0 ;
7615 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x14; buf[3] = 0x3e; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7616 ret = usb_microdia_control_write(dev, reg, buf, 8);
7617 if (ret < 0)
7618 goto err;
7620 reg = 0x10c0 ;
7621 ret = usb_microdia_control_read(dev, reg, buf, 1);
7622 if (ret < 0)
7623 goto err;
7625 reg = 0x10c0 ;
7626 ret = usb_microdia_control_read(dev, reg, buf, 1);
7627 if (ret < 0)
7628 goto err;
7630 reg = 0x10c0 ;
7631 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x16; buf[3] = 0x24; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7632 ret = usb_microdia_control_write(dev, reg, buf, 8);
7633 if (ret < 0)
7634 goto err;
7636 reg = 0x10c0 ;
7637 ret = usb_microdia_control_read(dev, reg, buf, 1);
7638 if (ret < 0)
7639 goto err;
7641 reg = 0x10c0 ;
7642 ret = usb_microdia_control_read(dev, reg, buf, 1);
7643 if (ret < 0)
7644 goto err;
7646 reg = 0x10c0 ;
7647 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x1e; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7648 ret = usb_microdia_control_write(dev, reg, buf, 8);
7649 if (ret < 0)
7650 goto err;
7652 reg = 0x10c0 ;
7653 ret = usb_microdia_control_read(dev, reg, buf, 1);
7654 if (ret < 0)
7655 goto err;
7657 reg = 0x10c0 ;
7658 ret = usb_microdia_control_read(dev, reg, buf, 1);
7659 if (ret < 0)
7660 goto err;
7662 reg = 0x10c0 ;
7663 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x1e; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7664 ret = usb_microdia_control_write(dev, reg, buf, 8);
7665 if (ret < 0)
7666 goto err;
7668 reg = 0x10c0 ;
7669 ret = usb_microdia_control_read(dev, reg, buf, 1);
7670 if (ret < 0)
7671 goto err;
7673 reg = 0x10c0 ;
7674 ret = usb_microdia_control_read(dev, reg, buf, 1);
7675 if (ret < 0)
7676 goto err;
7678 reg = 0x10c0 ;
7679 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x1e; buf[3] = 0x04; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7680 ret = usb_microdia_control_write(dev, reg, buf, 8);
7681 if (ret < 0)
7682 goto err;
7684 reg = 0x10c0 ;
7685 ret = usb_microdia_control_read(dev, reg, buf, 1);
7686 if (ret < 0)
7687 goto err;
7689 reg = 0x10c0 ;
7690 ret = usb_microdia_control_read(dev, reg, buf, 1);
7691 if (ret < 0)
7692 goto err;
7694 reg = 0x10c0 ;
7695 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x27; buf[3] = 0x08; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7696 ret = usb_microdia_control_write(dev, reg, buf, 8);
7697 if (ret < 0)
7698 goto err;
7700 reg = 0x10c0 ;
7701 ret = usb_microdia_control_read(dev, reg, buf, 1);
7702 if (ret < 0)
7703 goto err;
7705 reg = 0x10c0 ;
7706 ret = usb_microdia_control_read(dev, reg, buf, 1);
7707 if (ret < 0)
7708 goto err;
7710 reg = 0x10c0 ;
7711 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x28; buf[3] = 0x08; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7712 ret = usb_microdia_control_write(dev, reg, buf, 8);
7713 if (ret < 0)
7714 goto err;
7716 reg = 0x10c0 ;
7717 ret = usb_microdia_control_read(dev, reg, buf, 1);
7718 if (ret < 0)
7719 goto err;
7721 reg = 0x10c0 ;
7722 ret = usb_microdia_control_read(dev, reg, buf, 1);
7723 if (ret < 0)
7724 goto err;
7726 reg = 0x10c0 ;
7727 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x29; buf[3] = 0x15; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7728 ret = usb_microdia_control_write(dev, reg, buf, 8);
7729 if (ret < 0)
7730 goto err;
7732 reg = 0x10c0 ;
7733 ret = usb_microdia_control_read(dev, reg, buf, 1);
7734 if (ret < 0)
7735 goto err;
7737 reg = 0x10c0 ;
7738 ret = usb_microdia_control_read(dev, reg, buf, 1);
7739 if (ret < 0)
7740 goto err;
7742 reg = 0x10c0 ;
7743 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x2c; buf[3] = 0x08; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7744 ret = usb_microdia_control_write(dev, reg, buf, 8);
7745 if (ret < 0)
7746 goto err;
7748 reg = 0x10c0 ;
7749 ret = usb_microdia_control_read(dev, reg, buf, 1);
7750 if (ret < 0)
7751 goto err;
7753 reg = 0x10c0 ;
7754 ret = usb_microdia_control_read(dev, reg, buf, 1);
7755 if (ret < 0)
7756 goto err;
7758 reg = 0x10c0 ;
7759 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x32; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7760 ret = usb_microdia_control_write(dev, reg, buf, 8);
7761 if (ret < 0)
7762 goto err;
7764 reg = 0x10c0 ;
7765 ret = usb_microdia_control_read(dev, reg, buf, 1);
7766 if (ret < 0)
7767 goto err;
7769 reg = 0x10c0 ;
7770 ret = usb_microdia_control_read(dev, reg, buf, 1);
7771 if (ret < 0)
7772 goto err;
7774 reg = 0x10c0 ;
7775 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x34; buf[3] = 0x3d; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7776 ret = usb_microdia_control_write(dev, reg, buf, 8);
7777 if (ret < 0)
7778 goto err;
7780 reg = 0x10c0 ;
7781 ret = usb_microdia_control_read(dev, reg, buf, 1);
7782 if (ret < 0)
7783 goto err;
7785 reg = 0x10c0 ;
7786 ret = usb_microdia_control_read(dev, reg, buf, 1);
7787 if (ret < 0)
7788 goto err;
7790 reg = 0x10c0 ;
7791 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x35; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7792 ret = usb_microdia_control_write(dev, reg, buf, 8);
7793 if (ret < 0)
7794 goto err;
7796 reg = 0x10c0 ;
7797 ret = usb_microdia_control_read(dev, reg, buf, 1);
7798 if (ret < 0)
7799 goto err;
7801 reg = 0x10c0 ;
7802 ret = usb_microdia_control_read(dev, reg, buf, 1);
7803 if (ret < 0)
7804 goto err;
7806 reg = 0x10c0 ;
7807 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x36; buf[3] = 0xf8; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7808 ret = usb_microdia_control_write(dev, reg, buf, 8);
7809 if (ret < 0)
7810 goto err;
7812 reg = 0x10c0 ;
7813 ret = usb_microdia_control_read(dev, reg, buf, 1);
7814 if (ret < 0)
7815 goto err;
7817 reg = 0x10c0 ;
7818 ret = usb_microdia_control_read(dev, reg, buf, 1);
7819 if (ret < 0)
7820 goto err;
7822 reg = 0x10c0 ;
7823 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x38; buf[3] = 0x12; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7824 ret = usb_microdia_control_write(dev, reg, buf, 8);
7825 if (ret < 0)
7826 goto err;
7828 reg = 0x10c0 ;
7829 ret = usb_microdia_control_read(dev, reg, buf, 1);
7830 if (ret < 0)
7831 goto err;
7833 reg = 0x10c0 ;
7834 ret = usb_microdia_control_read(dev, reg, buf, 1);
7835 if (ret < 0)
7836 goto err;
7838 reg = 0x10c0 ;
7839 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x39; buf[3] = 0x57; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7840 ret = usb_microdia_control_write(dev, reg, buf, 8);
7841 if (ret < 0)
7842 goto err;
7844 reg = 0x10c0 ;
7845 ret = usb_microdia_control_read(dev, reg, buf, 1);
7846 if (ret < 0)
7847 goto err;
7849 reg = 0x10c0 ;
7850 ret = usb_microdia_control_read(dev, reg, buf, 1);
7851 if (ret < 0)
7852 goto err;
7854 reg = 0x10c0 ;
7855 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x3a; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7856 ret = usb_microdia_control_write(dev, reg, buf, 8);
7857 if (ret < 0)
7858 goto err;
7860 reg = 0x10c0 ;
7861 ret = usb_microdia_control_read(dev, reg, buf, 1);
7862 if (ret < 0)
7863 goto err;
7865 reg = 0x10c0 ;
7866 ret = usb_microdia_control_read(dev, reg, buf, 1);
7867 if (ret < 0)
7868 goto err;
7870 reg = 0x10c0 ;
7871 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x3b; buf[3] = 0xcc; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7872 ret = usb_microdia_control_write(dev, reg, buf, 8);
7873 if (ret < 0)
7874 goto err;
7876 reg = 0x10c0 ;
7877 ret = usb_microdia_control_read(dev, reg, buf, 1);
7878 if (ret < 0)
7879 goto err;
7881 reg = 0x10c0 ;
7882 ret = usb_microdia_control_read(dev, reg, buf, 1);
7883 if (ret < 0)
7884 goto err;
7886 reg = 0x10c0 ;
7887 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x3c; buf[3] = 0x0c; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7888 ret = usb_microdia_control_write(dev, reg, buf, 8);
7889 if (ret < 0)
7890 goto err;
7892 reg = 0x10c0 ;
7893 ret = usb_microdia_control_read(dev, reg, buf, 1);
7894 if (ret < 0)
7895 goto err;
7897 reg = 0x10c0 ;
7898 ret = usb_microdia_control_read(dev, reg, buf, 1);
7899 if (ret < 0)
7900 goto err;
7902 reg = 0x10c0 ;
7903 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x3d; buf[3] = 0x19; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7904 ret = usb_microdia_control_write(dev, reg, buf, 8);
7905 if (ret < 0)
7906 goto err;
7908 reg = 0x10c0 ;
7909 ret = usb_microdia_control_read(dev, reg, buf, 1);
7910 if (ret < 0)
7911 goto err;
7913 reg = 0x10c0 ;
7914 ret = usb_microdia_control_read(dev, reg, buf, 1);
7915 if (ret < 0)
7916 goto err;
7918 reg = 0x10c0 ;
7919 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x3e; buf[3] = 0x0c; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7920 ret = usb_microdia_control_write(dev, reg, buf, 8);
7921 if (ret < 0)
7922 goto err;
7924 reg = 0x10c0 ;
7925 ret = usb_microdia_control_read(dev, reg, buf, 1);
7926 if (ret < 0)
7927 goto err;
7929 reg = 0x10c0 ;
7930 ret = usb_microdia_control_read(dev, reg, buf, 1);
7931 if (ret < 0)
7932 goto err;
7934 reg = 0x10c0 ;
7935 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x3f; buf[3] = 0x01; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7936 ret = usb_microdia_control_write(dev, reg, buf, 8);
7937 if (ret < 0)
7938 goto err;
7940 reg = 0x10c0 ;
7941 ret = usb_microdia_control_read(dev, reg, buf, 1);
7942 if (ret < 0)
7943 goto err;
7945 reg = 0x10c0 ;
7946 ret = usb_microdia_control_read(dev, reg, buf, 1);
7947 if (ret < 0)
7948 goto err;
7950 reg = 0x10c0 ;
7951 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x41; buf[3] = 0x40; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7952 ret = usb_microdia_control_write(dev, reg, buf, 8);
7953 if (ret < 0)
7954 goto err;
7956 reg = 0x10c0 ;
7957 ret = usb_microdia_control_read(dev, reg, buf, 1);
7958 if (ret < 0)
7959 goto err;
7961 reg = 0x10c0 ;
7962 ret = usb_microdia_control_read(dev, reg, buf, 1);
7963 if (ret < 0)
7964 goto err;
7966 reg = 0x10c0 ;
7967 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x42; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7968 ret = usb_microdia_control_write(dev, reg, buf, 8);
7969 if (ret < 0)
7970 goto err;
7972 reg = 0x10c0 ;
7973 ret = usb_microdia_control_read(dev, reg, buf, 1);
7974 if (ret < 0)
7975 goto err;
7977 reg = 0x10c0 ;
7978 ret = usb_microdia_control_read(dev, reg, buf, 1);
7979 if (ret < 0)
7980 goto err;
7982 reg = 0x10c0 ;
7983 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x45; buf[3] = 0x46; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
7984 ret = usb_microdia_control_write(dev, reg, buf, 8);
7985 if (ret < 0)
7986 goto err;
7988 reg = 0x10c0 ;
7989 ret = usb_microdia_control_read(dev, reg, buf, 1);
7990 if (ret < 0)
7991 goto err;
7993 reg = 0x10c0 ;
7994 ret = usb_microdia_control_read(dev, reg, buf, 1);
7995 if (ret < 0)
7996 goto err;
7998 reg = 0x10c0 ;
7999 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x46; buf[3] = 0x62; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8000 ret = usb_microdia_control_write(dev, reg, buf, 8);
8001 if (ret < 0)
8002 goto err;
8004 reg = 0x10c0 ;
8005 ret = usb_microdia_control_read(dev, reg, buf, 1);
8006 if (ret < 0)
8007 goto err;
8009 reg = 0x10c0 ;
8010 ret = usb_microdia_control_read(dev, reg, buf, 1);
8011 if (ret < 0)
8012 goto err;
8014 reg = 0x10c0 ;
8015 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x47; buf[3] = 0x2a; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8016 ret = usb_microdia_control_write(dev, reg, buf, 8);
8017 if (ret < 0)
8018 goto err;
8020 reg = 0x10c0 ;
8021 ret = usb_microdia_control_read(dev, reg, buf, 1);
8022 if (ret < 0)
8023 goto err;
8025 reg = 0x10c0 ;
8026 ret = usb_microdia_control_read(dev, reg, buf, 1);
8027 if (ret < 0)
8028 goto err;
8030 reg = 0x10c0 ;
8031 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x48; buf[3] = 0x3c; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8032 ret = usb_microdia_control_write(dev, reg, buf, 8);
8033 if (ret < 0)
8034 goto err;
8036 reg = 0x10c0 ;
8037 ret = usb_microdia_control_read(dev, reg, buf, 1);
8038 if (ret < 0)
8039 goto err;
8041 reg = 0x10c0 ;
8042 ret = usb_microdia_control_read(dev, reg, buf, 1);
8043 if (ret < 0)
8044 goto err;
8046 reg = 0x10c0 ;
8047 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x4a; buf[3] = 0xf0; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8048 ret = usb_microdia_control_write(dev, reg, buf, 8);
8049 if (ret < 0)
8050 goto err;
8052 reg = 0x10c0 ;
8053 ret = usb_microdia_control_read(dev, reg, buf, 1);
8054 if (ret < 0)
8055 goto err;
8057 reg = 0x10c0 ;
8058 ret = usb_microdia_control_read(dev, reg, buf, 1);
8059 if (ret < 0)
8060 goto err;
8062 reg = 0x10c0 ;
8063 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x4b; buf[3] = 0xdc; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8064 ret = usb_microdia_control_write(dev, reg, buf, 8);
8065 if (ret < 0)
8066 goto err;
8068 reg = 0x10c0 ;
8069 ret = usb_microdia_control_read(dev, reg, buf, 1);
8070 if (ret < 0)
8071 goto err;
8073 reg = 0x10c0 ;
8074 ret = usb_microdia_control_read(dev, reg, buf, 1);
8075 if (ret < 0)
8076 goto err;
8078 reg = 0x10c0 ;
8079 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x4c; buf[3] = 0xdc; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8080 ret = usb_microdia_control_write(dev, reg, buf, 8);
8081 if (ret < 0)
8082 goto err;
8084 reg = 0x10c0 ;
8085 ret = usb_microdia_control_read(dev, reg, buf, 1);
8086 if (ret < 0)
8087 goto err;
8089 reg = 0x10c0 ;
8090 ret = usb_microdia_control_read(dev, reg, buf, 1);
8091 if (ret < 0)
8092 goto err;
8094 reg = 0x10c0 ;
8095 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x4d; buf[3] = 0xdc; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8096 ret = usb_microdia_control_write(dev, reg, buf, 8);
8097 if (ret < 0)
8098 goto err;
8100 reg = 0x10c0 ;
8101 ret = usb_microdia_control_read(dev, reg, buf, 1);
8102 if (ret < 0)
8103 goto err;
8105 reg = 0x10c0 ;
8106 ret = usb_microdia_control_read(dev, reg, buf, 1);
8107 if (ret < 0)
8108 goto err;
8110 reg = 0x10c0 ;
8111 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x4e; buf[3] = 0xdc; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8112 ret = usb_microdia_control_write(dev, reg, buf, 8);
8113 if (ret < 0)
8114 goto err;
8116 reg = 0x10c0 ;
8117 ret = usb_microdia_control_read(dev, reg, buf, 1);
8118 if (ret < 0)
8119 goto err;
8121 reg = 0x10c0 ;
8122 ret = usb_microdia_control_read(dev, reg, buf, 1);
8123 if (ret < 0)
8124 goto err;
8126 reg = 0x10c0 ;
8127 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x69; buf[3] = 0x02; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8128 ret = usb_microdia_control_write(dev, reg, buf, 8);
8129 if (ret < 0)
8130 goto err;
8132 reg = 0x10c0 ;
8133 ret = usb_microdia_control_read(dev, reg, buf, 1);
8134 if (ret < 0)
8135 goto err;
8137 reg = 0x10c0 ;
8138 ret = usb_microdia_control_read(dev, reg, buf, 1);
8139 if (ret < 0)
8140 goto err;
8142 reg = 0x10c0 ;
8143 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x6c; buf[3] = 0x04; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8144 ret = usb_microdia_control_write(dev, reg, buf, 8);
8145 if (ret < 0)
8146 goto err;
8148 reg = 0x10c0 ;
8149 ret = usb_microdia_control_read(dev, reg, buf, 1);
8150 if (ret < 0)
8151 goto err;
8153 reg = 0x10c0 ;
8154 ret = usb_microdia_control_read(dev, reg, buf, 1);
8155 if (ret < 0)
8156 goto err;
8158 reg = 0x10c0 ;
8159 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x6f; buf[3] = 0x9e; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8160 ret = usb_microdia_control_write(dev, reg, buf, 8);
8161 if (ret < 0)
8162 goto err;
8164 reg = 0x10c0 ;
8165 ret = usb_microdia_control_read(dev, reg, buf, 1);
8166 if (ret < 0)
8167 goto err;
8169 reg = 0x10c0 ;
8170 ret = usb_microdia_control_read(dev, reg, buf, 1);
8171 if (ret < 0)
8172 goto err;
8174 reg = 0x10c0 ;
8175 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x70; buf[3] = 0x05; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8176 ret = usb_microdia_control_write(dev, reg, buf, 8);
8177 if (ret < 0)
8178 goto err;
8180 reg = 0x10c0 ;
8181 ret = usb_microdia_control_read(dev, reg, buf, 1);
8182 if (ret < 0)
8183 goto err;
8185 reg = 0x10c0 ;
8186 ret = usb_microdia_control_read(dev, reg, buf, 1);
8187 if (ret < 0)
8188 goto err;
8190 reg = 0x10c0 ;
8191 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x71; buf[3] = 0x78; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8192 ret = usb_microdia_control_write(dev, reg, buf, 8);
8193 if (ret < 0)
8194 goto err;
8196 reg = 0x10c0 ;
8197 ret = usb_microdia_control_read(dev, reg, buf, 1);
8198 if (ret < 0)
8199 goto err;
8201 reg = 0x10c0 ;
8202 ret = usb_microdia_control_read(dev, reg, buf, 1);
8203 if (ret < 0)
8204 goto err;
8206 reg = 0x10c0 ;
8207 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x77; buf[3] = 0x02; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8208 ret = usb_microdia_control_write(dev, reg, buf, 8);
8209 if (ret < 0)
8210 goto err;
8212 reg = 0x10c0 ;
8213 ret = usb_microdia_control_read(dev, reg, buf, 1);
8214 if (ret < 0)
8215 goto err;
8217 reg = 0x10c0 ;
8218 ret = usb_microdia_control_read(dev, reg, buf, 1);
8219 if (ret < 0)
8220 goto err;
8222 reg = 0x10c0 ;
8223 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x8a; buf[3] = 0x23; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8224 ret = usb_microdia_control_write(dev, reg, buf, 8);
8225 if (ret < 0)
8226 goto err;
8228 reg = 0x10c0 ;
8229 ret = usb_microdia_control_read(dev, reg, buf, 1);
8230 if (ret < 0)
8231 goto err;
8233 reg = 0x10c0 ;
8234 ret = usb_microdia_control_read(dev, reg, buf, 1);
8235 if (ret < 0)
8236 goto err;
8238 reg = 0x10c0 ;
8239 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x8c; buf[3] = 0x0d; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8240 ret = usb_microdia_control_write(dev, reg, buf, 8);
8241 if (ret < 0)
8242 goto err;
8244 reg = 0x10c0 ;
8245 ret = usb_microdia_control_read(dev, reg, buf, 1);
8246 if (ret < 0)
8247 goto err;
8249 reg = 0x10c0 ;
8250 ret = usb_microdia_control_read(dev, reg, buf, 1);
8251 if (ret < 0)
8252 goto err;
8254 reg = 0x10c0 ;
8255 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x90; buf[3] = 0x7e; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8256 ret = usb_microdia_control_write(dev, reg, buf, 8);
8257 if (ret < 0)
8258 goto err;
8260 reg = 0x10c0 ;
8261 ret = usb_microdia_control_read(dev, reg, buf, 1);
8262 if (ret < 0)
8263 goto err;
8265 reg = 0x10c0 ;
8266 ret = usb_microdia_control_read(dev, reg, buf, 1);
8267 if (ret < 0)
8268 goto err;
8270 reg = 0x10c0 ;
8271 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x91; buf[3] = 0x7c; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8272 ret = usb_microdia_control_write(dev, reg, buf, 8);
8273 if (ret < 0)
8274 goto err;
8276 reg = 0x10c0 ;
8277 ret = usb_microdia_control_read(dev, reg, buf, 1);
8278 if (ret < 0)
8279 goto err;
8281 reg = 0x10c0 ;
8282 ret = usb_microdia_control_read(dev, reg, buf, 1);
8283 if (ret < 0)
8284 goto err;
8286 reg = 0x10c0 ;
8287 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x9f; buf[3] = 0x6e; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8288 ret = usb_microdia_control_write(dev, reg, buf, 8);
8289 if (ret < 0)
8290 goto err;
8292 reg = 0x10c0 ;
8293 ret = usb_microdia_control_read(dev, reg, buf, 1);
8294 if (ret < 0)
8295 goto err;
8297 reg = 0x10c0 ;
8298 ret = usb_microdia_control_read(dev, reg, buf, 1);
8299 if (ret < 0)
8300 goto err;
8302 reg = 0x10c0 ;
8303 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xa0; buf[3] = 0x6e; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8304 ret = usb_microdia_control_write(dev, reg, buf, 8);
8305 if (ret < 0)
8306 goto err;
8308 reg = 0x10c0 ;
8309 ret = usb_microdia_control_read(dev, reg, buf, 1);
8310 if (ret < 0)
8311 goto err;
8313 reg = 0x10c0 ;
8314 ret = usb_microdia_control_read(dev, reg, buf, 1);
8315 if (ret < 0)
8316 goto err;
8318 reg = 0x10c0 ;
8319 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xa4; buf[3] = 0x50; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8320 ret = usb_microdia_control_write(dev, reg, buf, 8);
8321 if (ret < 0)
8322 goto err;
8324 reg = 0x10c0 ;
8325 ret = usb_microdia_control_read(dev, reg, buf, 1);
8326 if (ret < 0)
8327 goto err;
8329 reg = 0x10c0 ;
8330 ret = usb_microdia_control_read(dev, reg, buf, 1);
8331 if (ret < 0)
8332 goto err;
8334 reg = 0x10c0 ;
8335 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xa5; buf[3] = 0x68; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8336 ret = usb_microdia_control_write(dev, reg, buf, 8);
8337 if (ret < 0)
8338 goto err;
8340 reg = 0x10c0 ;
8341 ret = usb_microdia_control_read(dev, reg, buf, 1);
8342 if (ret < 0)
8343 goto err;
8345 reg = 0x10c0 ;
8346 ret = usb_microdia_control_read(dev, reg, buf, 1);
8347 if (ret < 0)
8348 goto err;
8350 reg = 0x10c0 ;
8351 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xa6; buf[3] = 0x60; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8352 ret = usb_microdia_control_write(dev, reg, buf, 8);
8353 if (ret < 0)
8354 goto err;
8356 reg = 0x10c0 ;
8357 ret = usb_microdia_control_read(dev, reg, buf, 1);
8358 if (ret < 0)
8359 goto err;
8361 reg = 0x10c0 ;
8362 ret = usb_microdia_control_read(dev, reg, buf, 1);
8363 if (ret < 0)
8364 goto err;
8366 reg = 0x10c0 ;
8367 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xa8; buf[3] = 0xc1; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8368 ret = usb_microdia_control_write(dev, reg, buf, 8);
8369 if (ret < 0)
8370 goto err;
8372 reg = 0x10c0 ;
8373 ret = usb_microdia_control_read(dev, reg, buf, 1);
8374 if (ret < 0)
8375 goto err;
8377 reg = 0x10c0 ;
8378 ret = usb_microdia_control_read(dev, reg, buf, 1);
8379 if (ret < 0)
8380 goto err;
8382 reg = 0x10c0 ;
8383 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xa9; buf[3] = 0xfa; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8384 ret = usb_microdia_control_write(dev, reg, buf, 8);
8385 if (ret < 0)
8386 goto err;
8388 reg = 0x10c0 ;
8389 ret = usb_microdia_control_read(dev, reg, buf, 1);
8390 if (ret < 0)
8391 goto err;
8393 reg = 0x10c0 ;
8394 ret = usb_microdia_control_read(dev, reg, buf, 1);
8395 if (ret < 0)
8396 goto err;
8398 reg = 0x10c0 ;
8399 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xaa; buf[3] = 0x92; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8400 ret = usb_microdia_control_write(dev, reg, buf, 8);
8401 if (ret < 0)
8402 goto err;
8404 reg = 0x10c0 ;
8405 ret = usb_microdia_control_read(dev, reg, buf, 1);
8406 if (ret < 0)
8407 goto err;
8409 reg = 0x10c0 ;
8410 ret = usb_microdia_control_read(dev, reg, buf, 1);
8411 if (ret < 0)
8412 goto err;
8414 reg = 0x10c0 ;
8415 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xab; buf[3] = 0x04; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8416 ret = usb_microdia_control_write(dev, reg, buf, 8);
8417 if (ret < 0)
8418 goto err;
8420 reg = 0x10c0 ;
8421 ret = usb_microdia_control_read(dev, reg, buf, 1);
8422 if (ret < 0)
8423 goto err;
8425 reg = 0x10c0 ;
8426 ret = usb_microdia_control_read(dev, reg, buf, 1);
8427 if (ret < 0)
8428 goto err;
8430 reg = 0x10c0 ;
8431 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xac; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8432 ret = usb_microdia_control_write(dev, reg, buf, 8);
8433 if (ret < 0)
8434 goto err;
8436 reg = 0x10c0 ;
8437 ret = usb_microdia_control_read(dev, reg, buf, 1);
8438 if (ret < 0)
8439 goto err;
8441 reg = 0x10c0 ;
8442 ret = usb_microdia_control_read(dev, reg, buf, 1);
8443 if (ret < 0)
8444 goto err;
8446 reg = 0x10c0 ;
8447 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xad; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8448 ret = usb_microdia_control_write(dev, reg, buf, 8);
8449 if (ret < 0)
8450 goto err;
8452 reg = 0x10c0 ;
8453 ret = usb_microdia_control_read(dev, reg, buf, 1);
8454 if (ret < 0)
8455 goto err;
8457 reg = 0x10c0 ;
8458 ret = usb_microdia_control_read(dev, reg, buf, 1);
8459 if (ret < 0)
8460 goto err;
8462 reg = 0x10c0 ;
8463 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xae; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8464 ret = usb_microdia_control_write(dev, reg, buf, 8);
8465 if (ret < 0)
8466 goto err;
8468 reg = 0x10c0 ;
8469 ret = usb_microdia_control_read(dev, reg, buf, 1);
8470 if (ret < 0)
8471 goto err;
8473 reg = 0x10c0 ;
8474 ret = usb_microdia_control_read(dev, reg, buf, 1);
8475 if (ret < 0)
8476 goto err;
8478 reg = 0x10c0 ;
8479 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xaf; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8480 ret = usb_microdia_control_write(dev, reg, buf, 8);
8481 if (ret < 0)
8482 goto err;
8484 reg = 0x10c0 ;
8485 ret = usb_microdia_control_read(dev, reg, buf, 1);
8486 if (ret < 0)
8487 goto err;
8489 reg = 0x10c0 ;
8490 ret = usb_microdia_control_read(dev, reg, buf, 1);
8491 if (ret < 0)
8492 goto err;
8494 reg = 0x10c0 ;
8495 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xb2; buf[3] = 0xf2; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8496 ret = usb_microdia_control_write(dev, reg, buf, 8);
8497 if (ret < 0)
8498 goto err;
8500 reg = 0x10c0 ;
8501 ret = usb_microdia_control_read(dev, reg, buf, 1);
8502 if (ret < 0)
8503 goto err;
8505 reg = 0x10c0 ;
8506 ret = usb_microdia_control_read(dev, reg, buf, 1);
8507 if (ret < 0)
8508 goto err;
8510 reg = 0x10c0 ;
8511 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xb3; buf[3] = 0x20; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8512 ret = usb_microdia_control_write(dev, reg, buf, 8);
8513 if (ret < 0)
8514 goto err;
8516 reg = 0x10c0 ;
8517 ret = usb_microdia_control_read(dev, reg, buf, 1);
8518 if (ret < 0)
8519 goto err;
8521 reg = 0x10c0 ;
8522 ret = usb_microdia_control_read(dev, reg, buf, 1);
8523 if (ret < 0)
8524 goto err;
8526 reg = 0x10c0 ;
8527 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xb4; buf[3] = 0x20; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8528 ret = usb_microdia_control_write(dev, reg, buf, 8);
8529 if (ret < 0)
8530 goto err;
8532 reg = 0x10c0 ;
8533 ret = usb_microdia_control_read(dev, reg, buf, 1);
8534 if (ret < 0)
8535 goto err;
8537 reg = 0x10c0 ;
8538 ret = usb_microdia_control_read(dev, reg, buf, 1);
8539 if (ret < 0)
8540 goto err;
8542 reg = 0x10c0 ;
8543 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xb5; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8544 ret = usb_microdia_control_write(dev, reg, buf, 8);
8545 if (ret < 0)
8546 goto err;
8548 reg = 0x10c0 ;
8549 ret = usb_microdia_control_read(dev, reg, buf, 1);
8550 if (ret < 0)
8551 goto err;
8553 reg = 0x10c0 ;
8554 ret = usb_microdia_control_read(dev, reg, buf, 1);
8555 if (ret < 0)
8556 goto err;
8558 reg = 0x10c0 ;
8559 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xb6; buf[3] = 0xaf; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8560 ret = usb_microdia_control_write(dev, reg, buf, 8);
8561 if (ret < 0)
8562 goto err;
8564 reg = 0x10c0 ;
8565 ret = usb_microdia_control_read(dev, reg, buf, 1);
8566 if (ret < 0)
8567 goto err;
8569 reg = 0x10c0 ;
8570 ret = usb_microdia_control_read(dev, reg, buf, 1);
8571 if (ret < 0)
8572 goto err;
8574 reg = 0x10c0 ;
8575 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xbb; buf[3] = 0xae; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8576 ret = usb_microdia_control_write(dev, reg, buf, 8);
8577 if (ret < 0)
8578 goto err;
8580 reg = 0x10c0 ;
8581 ret = usb_microdia_control_read(dev, reg, buf, 1);
8582 if (ret < 0)
8583 goto err;
8585 reg = 0x10c0 ;
8586 ret = usb_microdia_control_read(dev, reg, buf, 1);
8587 if (ret < 0)
8588 goto err;
8590 reg = 0x10c0 ;
8591 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xbc; buf[3] = 0x44; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8592 ret = usb_microdia_control_write(dev, reg, buf, 8);
8593 if (ret < 0)
8594 goto err;
8596 reg = 0x10c0 ;
8597 ret = usb_microdia_control_read(dev, reg, buf, 1);
8598 if (ret < 0)
8599 goto err;
8601 reg = 0x10c0 ;
8602 ret = usb_microdia_control_read(dev, reg, buf, 1);
8603 if (ret < 0)
8604 goto err;
8606 reg = 0x10c0 ;
8607 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xbd; buf[3] = 0x44; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8608 ret = usb_microdia_control_write(dev, reg, buf, 8);
8609 if (ret < 0)
8610 goto err;
8612 reg = 0x10c0 ;
8613 ret = usb_microdia_control_read(dev, reg, buf, 1);
8614 if (ret < 0)
8615 goto err;
8617 reg = 0x10c0 ;
8618 ret = usb_microdia_control_read(dev, reg, buf, 1);
8619 if (ret < 0)
8620 goto err;
8622 reg = 0x10c0 ;
8623 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xbe; buf[3] = 0x3b; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8624 ret = usb_microdia_control_write(dev, reg, buf, 8);
8625 if (ret < 0)
8626 goto err;
8628 reg = 0x10c0 ;
8629 ret = usb_microdia_control_read(dev, reg, buf, 1);
8630 if (ret < 0)
8631 goto err;
8633 reg = 0x10c0 ;
8634 ret = usb_microdia_control_read(dev, reg, buf, 1);
8635 if (ret < 0)
8636 goto err;
8638 reg = 0x10c0 ;
8639 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xbf; buf[3] = 0x3a; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8640 ret = usb_microdia_control_write(dev, reg, buf, 8);
8641 if (ret < 0)
8642 goto err;
8644 reg = 0x10c0 ;
8645 ret = usb_microdia_control_read(dev, reg, buf, 1);
8646 if (ret < 0)
8647 goto err;
8649 reg = 0x10c0 ;
8650 ret = usb_microdia_control_read(dev, reg, buf, 1);
8651 if (ret < 0)
8652 goto err;
8654 reg = 0x10c0 ;
8655 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xc0; buf[3] = 0xe2; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8656 ret = usb_microdia_control_write(dev, reg, buf, 8);
8657 if (ret < 0)
8658 goto err;
8660 reg = 0x10c0 ;
8661 ret = usb_microdia_control_read(dev, reg, buf, 1);
8662 if (ret < 0)
8663 goto err;
8665 reg = 0x10c0 ;
8666 ret = usb_microdia_control_read(dev, reg, buf, 1);
8667 if (ret < 0)
8668 goto err;
8670 reg = 0x10c0 ;
8671 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xc1; buf[3] = 0xc8; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8672 ret = usb_microdia_control_write(dev, reg, buf, 8);
8673 if (ret < 0)
8674 goto err;
8676 reg = 0x10c0 ;
8677 ret = usb_microdia_control_read(dev, reg, buf, 1);
8678 if (ret < 0)
8679 goto err;
8681 reg = 0x10c0 ;
8682 ret = usb_microdia_control_read(dev, reg, buf, 1);
8683 if (ret < 0)
8684 goto err;
8686 reg = 0x10c0 ;
8687 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xc2; buf[3] = 0x01; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8688 ret = usb_microdia_control_write(dev, reg, buf, 8);
8689 if (ret < 0)
8690 goto err;
8692 reg = 0x10c0 ;
8693 ret = usb_microdia_control_read(dev, reg, buf, 1);
8694 if (ret < 0)
8695 goto err;
8697 reg = 0x10c0 ;
8698 ret = usb_microdia_control_read(dev, reg, buf, 1);
8699 if (ret < 0)
8700 goto err;
8702 reg = 0x10c0 ;
8703 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xc4; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8704 ret = usb_microdia_control_write(dev, reg, buf, 8);
8705 if (ret < 0)
8706 goto err;
8708 reg = 0x10c0 ;
8709 ret = usb_microdia_control_read(dev, reg, buf, 1);
8710 if (ret < 0)
8711 goto err;
8713 reg = 0x10c0 ;
8714 ret = usb_microdia_control_read(dev, reg, buf, 1);
8715 if (ret < 0)
8716 goto err;
8718 reg = 0x10c0 ;
8719 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xc6; buf[3] = 0x85; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8720 ret = usb_microdia_control_write(dev, reg, buf, 8);
8721 if (ret < 0)
8722 goto err;
8724 reg = 0x10c0 ;
8725 ret = usb_microdia_control_read(dev, reg, buf, 1);
8726 if (ret < 0)
8727 goto err;
8729 reg = 0x10c0 ;
8730 ret = usb_microdia_control_read(dev, reg, buf, 1);
8731 if (ret < 0)
8732 goto err;
8734 reg = 0x10c0 ;
8735 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xc7; buf[3] = 0x81; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8736 ret = usb_microdia_control_write(dev, reg, buf, 8);
8737 if (ret < 0)
8738 goto err;
8740 reg = 0x10c0 ;
8741 ret = usb_microdia_control_read(dev, reg, buf, 1);
8742 if (ret < 0)
8743 goto err;
8745 reg = 0x10c0 ;
8746 ret = usb_microdia_control_read(dev, reg, buf, 1);
8747 if (ret < 0)
8748 goto err;
8750 reg = 0x10c0 ;
8751 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xc9; buf[3] = 0xe0; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8752 ret = usb_microdia_control_write(dev, reg, buf, 8);
8753 if (ret < 0)
8754 goto err;
8756 reg = 0x10c0 ;
8757 ret = usb_microdia_control_read(dev, reg, buf, 1);
8758 if (ret < 0)
8759 goto err;
8761 reg = 0x10c0 ;
8762 ret = usb_microdia_control_read(dev, reg, buf, 1);
8763 if (ret < 0)
8764 goto err;
8766 reg = 0x10c0 ;
8767 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xca; buf[3] = 0xe8; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8768 ret = usb_microdia_control_write(dev, reg, buf, 8);
8769 if (ret < 0)
8770 goto err;
8772 reg = 0x10c0 ;
8773 ret = usb_microdia_control_read(dev, reg, buf, 1);
8774 if (ret < 0)
8775 goto err;
8777 reg = 0x10c0 ;
8778 ret = usb_microdia_control_read(dev, reg, buf, 1);
8779 if (ret < 0)
8780 goto err;
8782 reg = 0x10c0 ;
8783 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xcc; buf[3] = 0xd8; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8784 ret = usb_microdia_control_write(dev, reg, buf, 8);
8785 if (ret < 0)
8786 goto err;
8788 reg = 0x10c0 ;
8789 ret = usb_microdia_control_read(dev, reg, buf, 1);
8790 if (ret < 0)
8791 goto err;
8793 reg = 0x10c0 ;
8794 ret = usb_microdia_control_read(dev, reg, buf, 1);
8795 if (ret < 0)
8796 goto err;
8798 reg = 0x10c0 ;
8799 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xcd; buf[3] = 0x93; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8800 ret = usb_microdia_control_write(dev, reg, buf, 8);
8801 if (ret < 0)
8802 goto err;
8804 reg = 0x10c0 ;
8805 ret = usb_microdia_control_read(dev, reg, buf, 1);
8806 if (ret < 0)
8807 goto err;
8809 reg = 0x10c0 ;
8810 ret = usb_microdia_control_read(dev, reg, buf, 1);
8811 if (ret < 0)
8812 goto err;
8814 reg = 0x10c1 ;
8815 ret = usb_microdia_control_read(dev, reg, buf, 1);
8816 if (ret < 0)
8817 goto err;
8819 reg = 0x10c1 ;
8820 buf[0] = 0x50;
8821 ret = usb_microdia_control_write(dev, reg, buf, 1);
8822 if (ret < 0)
8823 goto err;
8825 reg = 0x10c0 ;
8826 buf[0] = 0x90; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8827 ret = usb_microdia_control_write(dev, reg, buf, 8);
8828 if (ret < 0)
8829 goto err;
8831 reg = 0x10c0 ;
8832 ret = usb_microdia_control_read(dev, reg, buf, 1);
8833 if (ret < 0)
8834 goto err;
8836 reg = 0x10c0 ;
8837 buf[0] = 0x90; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8838 ret = usb_microdia_control_write(dev, reg, buf, 8);
8839 if (ret < 0)
8840 goto err;
8842 reg = 0x10c0 ;
8843 ret = usb_microdia_control_read(dev, reg, buf, 1);
8844 if (ret < 0)
8845 goto err;
8847 reg = 0x10c0 ;
8848 buf[0] = 0x90; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8849 ret = usb_microdia_control_write(dev, reg, buf, 8);
8850 if (ret < 0)
8851 goto err;
8853 reg = 0x10c0 ;
8854 ret = usb_microdia_control_read(dev, reg, buf, 1);
8855 if (ret < 0)
8856 goto err;
8858 reg = 0x10c0 ;
8859 buf[0] = 0x90; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8860 ret = usb_microdia_control_write(dev, reg, buf, 8);
8861 if (ret < 0)
8862 goto err;
8864 reg = 0x10c0 ;
8865 ret = usb_microdia_control_read(dev, reg, buf, 1);
8866 if (ret < 0)
8867 goto err;
8869 reg = 0x10c0 ;
8870 buf[0] = 0x90; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8871 ret = usb_microdia_control_write(dev, reg, buf, 8);
8872 if (ret < 0)
8873 goto err;
8875 reg = 0x10c0 ;
8876 ret = usb_microdia_control_read(dev, reg, buf, 1);
8877 if (ret < 0)
8878 goto err;
8880 reg = 0x10c0 ;
8881 buf[0] = 0x90; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8882 ret = usb_microdia_control_write(dev, reg, buf, 8);
8883 if (ret < 0)
8884 goto err;
8886 reg = 0x10c0 ;
8887 ret = usb_microdia_control_read(dev, reg, buf, 1);
8888 if (ret < 0)
8889 goto err;
8891 reg = 0x10c0 ;
8892 buf[0] = 0x90; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8893 ret = usb_microdia_control_write(dev, reg, buf, 8);
8894 if (ret < 0)
8895 goto err;
8897 reg = 0x10c0 ;
8898 ret = usb_microdia_control_read(dev, reg, buf, 1);
8899 if (ret < 0)
8900 goto err;
8902 reg = 0x10c0 ;
8903 buf[0] = 0x90; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8904 ret = usb_microdia_control_write(dev, reg, buf, 8);
8905 if (ret < 0)
8906 goto err;
8908 reg = 0x10c0 ;
8909 ret = usb_microdia_control_read(dev, reg, buf, 1);
8910 if (ret < 0)
8911 goto err;
8913 reg = 0x10c0 ;
8914 buf[0] = 0x90; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8915 ret = usb_microdia_control_write(dev, reg, buf, 8);
8916 if (ret < 0)
8917 goto err;
8919 reg = 0x10c0 ;
8920 buf[0] = 0x92; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8921 ret = usb_microdia_control_write(dev, reg, buf, 8);
8922 if (ret < 0)
8923 goto err;
8925 reg = 0x10c0 ;
8926 ret = usb_microdia_control_read(dev, reg, buf, 1);
8927 if (ret < 0)
8928 goto err;
8930 reg = 0x10c0 ;
8931 buf[0] = 0x92; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8932 ret = usb_microdia_control_write(dev, reg, buf, 8);
8933 if (ret < 0)
8934 goto err;
8936 reg = 0x10c0 ;
8937 ret = usb_microdia_control_read(dev, reg, buf, 1);
8938 if (ret < 0)
8939 goto err;
8941 reg = 0x10c0 ;
8942 buf[0] = 0x92; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8943 ret = usb_microdia_control_write(dev, reg, buf, 8);
8944 if (ret < 0)
8945 goto err;
8947 reg = 0x10c0 ;
8948 ret = usb_microdia_control_read(dev, reg, buf, 1);
8949 if (ret < 0)
8950 goto err;
8952 reg = 0x10c0 ;
8953 buf[0] = 0x92; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8954 ret = usb_microdia_control_write(dev, reg, buf, 8);
8955 if (ret < 0)
8956 goto err;
8958 reg = 0x10c0 ;
8959 ret = usb_microdia_control_read(dev, reg, buf, 1);
8960 if (ret < 0)
8961 goto err;
8963 reg = 0x10c0 ;
8964 buf[0] = 0x92; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8965 ret = usb_microdia_control_write(dev, reg, buf, 8);
8966 if (ret < 0)
8967 goto err;
8969 reg = 0x10c0 ;
8970 ret = usb_microdia_control_read(dev, reg, buf, 1);
8971 if (ret < 0)
8972 goto err;
8974 reg = 0x10c0 ;
8975 buf[0] = 0x92; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8976 ret = usb_microdia_control_write(dev, reg, buf, 8);
8977 if (ret < 0)
8978 goto err;
8980 reg = 0x10c0 ;
8981 ret = usb_microdia_control_read(dev, reg, buf, 1);
8982 if (ret < 0)
8983 goto err;
8985 reg = 0x10c0 ;
8986 buf[0] = 0x92; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8987 ret = usb_microdia_control_write(dev, reg, buf, 8);
8988 if (ret < 0)
8989 goto err;
8991 reg = 0x10c0 ;
8992 ret = usb_microdia_control_read(dev, reg, buf, 1);
8993 if (ret < 0)
8994 goto err;
8996 reg = 0x10c0 ;
8997 buf[0] = 0x92; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
8998 ret = usb_microdia_control_write(dev, reg, buf, 8);
8999 if (ret < 0)
9000 goto err;
9002 reg = 0x10c0 ;
9003 ret = usb_microdia_control_read(dev, reg, buf, 1);
9004 if (ret < 0)
9005 goto err;
9007 reg = 0x10c0 ;
9008 buf[0] = 0x92; buf[1] = 0x50; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9009 ret = usb_microdia_control_write(dev, reg, buf, 8);
9010 if (ret < 0)
9011 goto err;
9013 reg = 0x10c2 ;
9014 ret = usb_microdia_control_read(dev, reg, buf, 5);
9015 if (ret < 0)
9016 goto err;
9018 reg = 0x10c1 ;
9019 buf[0] = 0x30;
9020 ret = usb_microdia_control_write(dev, reg, buf, 1);
9021 if (ret < 0)
9022 goto err;
9024 reg = 0x10e0 ;
9025 buf[0] = 0x47;
9026 ret = usb_microdia_control_write(dev, reg, buf, 1);
9027 if (ret < 0)
9028 goto err;
9030 reg = 0x10e0 ;
9031 buf[0] = 0x47;
9032 ret = usb_microdia_control_write(dev, reg, buf, 1);
9033 if (ret < 0)
9034 goto err;
9036 reg = 0x1001 ;
9037 buf[0] = 0xc6;
9038 ret = usb_microdia_control_write(dev, reg, buf, 1);
9039 if (ret < 0)
9040 goto err;
9042 reg = 0x1001 ;
9043 buf[0] = 0xc4;
9044 ret = usb_microdia_control_write(dev, reg, buf, 1);
9045 if (ret < 0)
9046 goto err;
9048 reg = 0x1001 ;
9049 buf[0] = 0x84;
9050 ret = usb_microdia_control_write(dev, reg, buf, 1);
9051 if (ret < 0)
9052 goto err;
9054 reg = 0x1189 ;
9055 buf[0] = 0xcc;
9056 ret = usb_microdia_control_write(dev, reg, buf, 1);
9057 if (ret < 0)
9058 goto err;
9060 reg = 0x11bc ;
9061 buf[0] = 0x00;
9062 ret = usb_microdia_control_write(dev, reg, buf, 1);
9063 if (ret < 0)
9064 goto err;
9066 reg = 0x11bd ;
9067 buf[0] = 0x00;
9068 ret = usb_microdia_control_write(dev, reg, buf, 1);
9069 if (ret < 0)
9070 goto err;
9072 reg = 0x11be ;
9073 buf[0] = 0x00;
9074 ret = usb_microdia_control_write(dev, reg, buf, 1);
9075 if (ret < 0)
9076 goto err;
9078 reg = 0x11bf ;
9079 buf[0] = 0x00;
9080 ret = usb_microdia_control_write(dev, reg, buf, 1);
9081 if (ret < 0)
9082 goto err;
9084 reg = 0x10c0 ;
9085 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x03; buf[3] = 0x14; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9086 ret = usb_microdia_control_write(dev, reg, buf, 8);
9087 if (ret < 0)
9088 goto err;
9090 reg = 0x10c0 ;
9091 ret = usb_microdia_control_read(dev, reg, buf, 1);
9092 if (ret < 0)
9093 goto err;
9095 reg = 0x10c0 ;
9096 ret = usb_microdia_control_read(dev, reg, buf, 1);
9097 if (ret < 0)
9098 goto err;
9100 reg = 0x10c0 ;
9101 buf[0] = 0xd0; buf[1] = 0x30; buf[2] = 0x17; buf[3] = 0x1b; buf[4] = 0xbc; buf[5] = 0x01; buf[6] = 0x7a; buf[7] = 0x10;
9102 ret = usb_microdia_control_write(dev, reg, buf, 8);
9103 if (ret < 0)
9104 goto err;
9106 reg = 0x10c0 ;
9107 ret = usb_microdia_control_read(dev, reg, buf, 1);
9108 if (ret < 0)
9109 goto err;
9111 reg = 0x10c0 ;
9112 ret = usb_microdia_control_read(dev, reg, buf, 1);
9113 if (ret < 0)
9114 goto err;
9116 reg = 0x10c0 ;
9117 buf[0] = 0x90; buf[1] = 0x30; buf[2] = 0x1b; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9118 ret = usb_microdia_control_write(dev, reg, buf, 8);
9119 if (ret < 0)
9120 goto err;
9122 reg = 0x10c0 ;
9123 ret = usb_microdia_control_read(dev, reg, buf, 1);
9124 if (ret < 0)
9125 goto err;
9127 reg = 0x10c0 ;
9128 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x32; buf[3] = 0x82; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9129 ret = usb_microdia_control_write(dev, reg, buf, 8);
9130 if (ret < 0)
9131 goto err;
9133 reg = 0x10c0 ;
9134 ret = usb_microdia_control_read(dev, reg, buf, 1);
9135 if (ret < 0)
9136 goto err;
9138 reg = 0x10c0 ;
9139 ret = usb_microdia_control_read(dev, reg, buf, 1);
9140 if (ret < 0)
9141 goto err;
9143 reg = 0x1180 ;
9144 buf[0] = 0x05; buf[1] = 0x00; buf[2] = 0x01; buf[3] = 0x00; buf[4] = 0x50; buf[5] = 0x78;
9145 ret = usb_microdia_control_write(dev, reg, buf, 6);
9146 if (ret < 0)
9147 goto err;
9149 reg = 0x10fb ;
9150 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0; buf[4] = 0x00;
9151 ret = usb_microdia_control_write(dev, reg, buf, 5);
9152 if (ret < 0)
9153 goto err;
9155 reg = 0x1189 ;
9156 buf[0] = 0xdc;
9157 ret = usb_microdia_control_write(dev, reg, buf, 1);
9158 if (ret < 0)
9159 goto err;
9161 reg = 0x1189 ;
9162 buf[0] = 0xd0;
9163 ret = usb_microdia_control_write(dev, reg, buf, 1);
9164 if (ret < 0)
9165 goto err;
9167 reg = 0x11a1 ;
9168 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0xd5; buf[3] = 0xa0;
9169 ret = usb_microdia_control_write(dev, reg, buf, 4);
9170 if (ret < 0)
9171 goto err;
9173 reg = 0x11ab ;
9174 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0xa0; buf[3] = 0x78;
9175 ret = usb_microdia_control_write(dev, reg, buf, 4);
9176 if (ret < 0)
9177 goto err;
9179 reg = 0x1000 ;
9180 buf[0] = 0x78;
9181 ret = usb_microdia_control_write(dev, reg, buf, 1);
9182 if (ret < 0)
9183 goto err;
9185 reg = 0x1002 ;
9186 buf[0] = 0x18;
9187 ret = usb_microdia_control_write(dev, reg, buf, 1);
9188 if (ret < 0)
9189 goto err;
9191 reg = 0x1002 ;
9192 buf[0] = 0x08;
9193 ret = usb_microdia_control_write(dev, reg, buf, 1);
9194 if (ret < 0)
9195 goto err;
9197 reg = 0x11b8 ;
9198 buf[0] = 0x38;
9199 ret = usb_microdia_control_write(dev, reg, buf, 1);
9200 if (ret < 0)
9201 goto err;
9203 reg = 0x118a ;
9204 buf[0] = 0x02;
9205 ret = usb_microdia_control_write(dev, reg, buf, 1);
9206 if (ret < 0)
9207 goto err;
9209 reg = 0x0395 ;
9210 buf[0] = 0x02;
9211 ret = usb_microdia_control_write(dev, reg, buf, 1);
9212 if (ret < 0)
9213 goto err;
9215 reg = 0x11b8 ;
9216 buf[0] = 0x78;
9217 ret = usb_microdia_control_write(dev, reg, buf, 1);
9218 if (ret < 0)
9219 goto err;
9221 reg = 0x11b8 ;
9222 ret = usb_microdia_control_read(dev, reg, buf, 1);
9223 if (ret < 0)
9224 goto err;
9226 reg = 0x11b8 ;
9227 buf[0] = 0xf9;
9228 ret = usb_microdia_control_write(dev, reg, buf, 1);
9229 if (ret < 0)
9230 goto err;
9232 reg = 0x11b8 ;
9233 ret = usb_microdia_control_read(dev, reg, buf, 1);
9234 if (ret < 0)
9235 goto err;
9237 reg = 0x11b8 ;
9238 buf[0] = 0x7a;
9239 ret = usb_microdia_control_write(dev, reg, buf, 1);
9240 if (ret < 0)
9241 goto err;
9243 reg = 0x11b8 ;
9244 ret = usb_microdia_control_read(dev, reg, buf, 1);
9245 if (ret < 0)
9246 goto err;
9248 reg = 0x11b8 ;
9249 buf[0] = 0x7b;
9250 ret = usb_microdia_control_write(dev, reg, buf, 1);
9251 if (ret < 0)
9252 goto err;
9254 reg = 0x11b8 ;
9255 ret = usb_microdia_control_read(dev, reg, buf, 1);
9256 if (ret < 0)
9257 goto err;
9259 reg = 0x11b8 ;
9260 buf[0] = 0x7c;
9261 ret = usb_microdia_control_write(dev, reg, buf, 1);
9262 if (ret < 0)
9263 goto err;
9265 reg = 0x11b8 ;
9266 ret = usb_microdia_control_read(dev, reg, buf, 1);
9267 if (ret < 0)
9268 goto err;
9270 reg = 0x11b8 ;
9271 buf[0] = 0xfd;
9272 ret = usb_microdia_control_write(dev, reg, buf, 1);
9273 if (ret < 0)
9274 goto err;
9276 reg = 0x11b8 ;
9277 ret = usb_microdia_control_read(dev, reg, buf, 1);
9278 if (ret < 0)
9279 goto err;
9281 reg = 0x11b8 ;
9282 buf[0] = 0xfa;
9283 ret = usb_microdia_control_write(dev, reg, buf, 1);
9284 if (ret < 0)
9285 goto err;
9287 reg = 0x10c0 ;
9288 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x11; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9289 ret = usb_microdia_control_write(dev, reg, buf, 8);
9290 if (ret < 0)
9291 goto err;
9293 reg = 0x10c0 ;
9294 ret = usb_microdia_control_read(dev, reg, buf, 1);
9295 if (ret < 0)
9296 goto err;
9298 reg = 0x10c0 ;
9299 ret = usb_microdia_control_read(dev, reg, buf, 1);
9300 if (ret < 0)
9301 goto err;
9303 reg = 0x10c0 ;
9304 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x2a; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9305 ret = usb_microdia_control_write(dev, reg, buf, 8);
9306 if (ret < 0)
9307 goto err;
9309 reg = 0x10c0 ;
9310 ret = usb_microdia_control_read(dev, reg, buf, 1);
9311 if (ret < 0)
9312 goto err;
9314 reg = 0x10c0 ;
9315 ret = usb_microdia_control_read(dev, reg, buf, 1);
9316 if (ret < 0)
9317 goto err;
9319 reg = 0x10c0 ;
9320 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x2b; buf[3] = 0x06; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9321 ret = usb_microdia_control_write(dev, reg, buf, 8);
9322 if (ret < 0)
9323 goto err;
9325 reg = 0x10c0 ;
9326 ret = usb_microdia_control_read(dev, reg, buf, 1);
9327 if (ret < 0)
9328 goto err;
9330 reg = 0x10c0 ;
9331 ret = usb_microdia_control_read(dev, reg, buf, 1);
9332 if (ret < 0)
9333 goto err;
9335 reg = 0x10c0 ;
9336 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x92; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9337 ret = usb_microdia_control_write(dev, reg, buf, 8);
9338 if (ret < 0)
9339 goto err;
9341 reg = 0x10c0 ;
9342 ret = usb_microdia_control_read(dev, reg, buf, 1);
9343 if (ret < 0)
9344 goto err;
9346 reg = 0x10c0 ;
9347 ret = usb_microdia_control_read(dev, reg, buf, 1);
9348 if (ret < 0)
9349 goto err;
9351 reg = 0x10c0 ;
9352 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x93; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9353 ret = usb_microdia_control_write(dev, reg, buf, 8);
9354 if (ret < 0)
9355 goto err;
9357 reg = 0x10c0 ;
9358 ret = usb_microdia_control_read(dev, reg, buf, 1);
9359 if (ret < 0)
9360 goto err;
9362 reg = 0x10c0 ;
9363 ret = usb_microdia_control_read(dev, reg, buf, 1);
9364 if (ret < 0)
9365 goto err;
9367 reg = 0x10c0 ;
9368 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x1e; buf[3] = 0x04; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9369 ret = usb_microdia_control_write(dev, reg, buf, 8);
9370 if (ret < 0)
9371 goto err;
9373 reg = 0x10c0 ;
9374 ret = usb_microdia_control_read(dev, reg, buf, 1);
9375 if (ret < 0)
9376 goto err;
9378 reg = 0x10c0 ;
9379 ret = usb_microdia_control_read(dev, reg, buf, 1);
9380 if (ret < 0)
9381 goto err;
9383 reg = 0x10c0 ;
9384 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x1e; buf[3] = 0x04; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9385 ret = usb_microdia_control_write(dev, reg, buf, 8);
9386 if (ret < 0)
9387 goto err;
9389 reg = 0x10c0 ;
9390 ret = usb_microdia_control_read(dev, reg, buf, 1);
9391 if (ret < 0)
9392 goto err;
9394 reg = 0x10c0 ;
9395 ret = usb_microdia_control_read(dev, reg, buf, 1);
9396 if (ret < 0)
9397 goto err;
9399 reg = 0x1182 ;
9400 buf[0] = 0x01;
9401 ret = usb_microdia_control_write(dev, reg, buf, 1);
9402 if (ret < 0)
9403 goto err;
9405 reg = 0x10c0 ;
9406 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x10; buf[3] = 0x7d; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9407 ret = usb_microdia_control_write(dev, reg, buf, 8);
9408 if (ret < 0)
9409 goto err;
9411 reg = 0x10c0 ;
9412 ret = usb_microdia_control_read(dev, reg, buf, 1);
9413 if (ret < 0)
9414 goto err;
9416 reg = 0x10c0 ;
9417 ret = usb_microdia_control_read(dev, reg, buf, 1);
9418 if (ret < 0)
9419 goto err;
9421 reg = 0x10c0 ;
9422 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x04; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9423 ret = usb_microdia_control_write(dev, reg, buf, 8);
9424 if (ret < 0)
9425 goto err;
9427 reg = 0x10c0 ;
9428 ret = usb_microdia_control_read(dev, reg, buf, 1);
9429 if (ret < 0)
9430 goto err;
9432 reg = 0x10c0 ;
9433 ret = usb_microdia_control_read(dev, reg, buf, 1);
9434 if (ret < 0)
9435 goto err;
9437 reg = 0x10c0 ;
9438 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xa1; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9439 ret = usb_microdia_control_write(dev, reg, buf, 8);
9440 if (ret < 0)
9441 goto err;
9443 reg = 0x10c0 ;
9444 ret = usb_microdia_control_read(dev, reg, buf, 1);
9445 if (ret < 0)
9446 goto err;
9448 reg = 0x10c0 ;
9449 ret = usb_microdia_control_read(dev, reg, buf, 1);
9450 if (ret < 0)
9451 goto err;
9453 reg = 0x10c0 ;
9454 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x2d; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9455 ret = usb_microdia_control_write(dev, reg, buf, 8);
9456 if (ret < 0)
9457 goto err;
9459 reg = 0x10c0 ;
9460 ret = usb_microdia_control_read(dev, reg, buf, 1);
9461 if (ret < 0)
9462 goto err;
9464 reg = 0x10c0 ;
9465 ret = usb_microdia_control_read(dev, reg, buf, 1);
9466 if (ret < 0)
9467 goto err;
9469 reg = 0x10c0 ;
9470 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x2e; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9471 ret = usb_microdia_control_write(dev, reg, buf, 8);
9472 if (ret < 0)
9473 goto err;
9475 reg = 0x10c0 ;
9476 ret = usb_microdia_control_read(dev, reg, buf, 1);
9477 if (ret < 0)
9478 goto err;
9480 reg = 0x10c0 ;
9481 ret = usb_microdia_control_read(dev, reg, buf, 1);
9482 if (ret < 0)
9483 goto err;
9485 reg = 0x10c0 ;
9486 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9487 ret = usb_microdia_control_write(dev, reg, buf, 8);
9488 if (ret < 0)
9489 goto err;
9491 reg = 0x10c0 ;
9492 ret = usb_microdia_control_read(dev, reg, buf, 1);
9493 if (ret < 0)
9494 goto err;
9496 reg = 0x10c0 ;
9497 ret = usb_microdia_control_read(dev, reg, buf, 1);
9498 if (ret < 0)
9499 goto err;
9501 reg = 0x10c0 ;
9502 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x01; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9503 ret = usb_microdia_control_write(dev, reg, buf, 8);
9504 if (ret < 0)
9505 goto err;
9507 reg = 0x10c0 ;
9508 ret = usb_microdia_control_read(dev, reg, buf, 1);
9509 if (ret < 0)
9510 goto err;
9512 reg = 0x10c0 ;
9513 ret = usb_microdia_control_read(dev, reg, buf, 1);
9514 if (ret < 0)
9515 goto err;
9517 reg = 0x10c0 ;
9518 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x02; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9519 ret = usb_microdia_control_write(dev, reg, buf, 8);
9520 if (ret < 0)
9521 goto err;
9523 reg = 0x10c0 ;
9524 ret = usb_microdia_control_read(dev, reg, buf, 1);
9525 if (ret < 0)
9526 goto err;
9528 reg = 0x10c0 ;
9529 ret = usb_microdia_control_read(dev, reg, buf, 1);
9530 if (ret < 0)
9531 goto err;
9533 reg = 0x11ba ;
9534 buf[0] = 0x0a;
9535 ret = usb_microdia_control_write(dev, reg, buf, 1);
9536 if (ret < 0)
9537 goto err;
9539 reg = 0x118b ;
9540 buf[0] = 0x10;
9541 ret = usb_microdia_control_write(dev, reg, buf, 1);
9542 if (ret < 0)
9543 goto err;
9545 reg = 0x10f7;
9546 buf[0] = 0x05;
9547 ret = usb_microdia_control_write(dev, reg, buf, 1);
9548 if (ret < 0)
9549 goto err;
9551 reg = 0x10f8 ;
9552 buf[0] = 0x14;
9553 ret = usb_microdia_control_write(dev, reg, buf, 1);
9554 if (ret < 0)
9555 goto err;
9557 reg = 0x10fa ;
9558 buf[0] = 0xff;
9559 ret = usb_microdia_control_write(dev, reg, buf, 1);
9560 if (ret < 0)
9561 goto err;
9563 reg = 0x10f9 ;
9564 buf[0] = 0x00;
9565 ret = usb_microdia_control_write(dev, reg, buf, 1);
9566 if (ret < 0)
9567 goto err;
9569 reg = 0x10f9 ;
9570 buf[0] = 0x00;
9571 ret = usb_microdia_control_write(dev, reg, buf, 1);
9572 if (ret < 0)
9573 goto err;
9575 reg = 0x11ba ;
9576 buf[0] = 0x0a;
9577 ret = usb_microdia_control_write(dev, reg, buf, 1);
9578 if (ret < 0)
9579 goto err;
9581 reg = 0x11bc ;
9582 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00;
9583 ret = usb_microdia_control_write(dev, reg, buf, 4);
9584 if (ret < 0)
9585 goto err;
9587 reg = 0x11c0;
9588 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0x00; buf[3] = 0x00;
9589 buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x00;
9590 buf[8] = 0x00; buf[9] = 0x00; buf[10] = 0x00; buf[11] = 0x00;
9591 buf[12] = 0x00; buf[13] = 0x00; buf[14] = 0x00; buf[15] = 0x00;
9592 buf[16] = 0x00; buf[17] = 0x00; buf[18] = 0x00; buf[19] = 0x00;
9593 buf[20] = 0x00; buf[21] = 0x00; buf[22] = 0x00; buf[23] = 0x00;
9594 buf[24] = 0x00; buf[25] = 0x00; buf[26] = 0x00; buf[27] = 0x00;
9595 buf[28] = 0x00; buf[29] = 0x00; buf[30] = 0x00; buf[31] = 0x00;
9596 buf[32] = 0x00; buf[33] = 0x00; buf[34] = 0x00; buf[35] = 0x00;
9597 buf[36] = 0x00; buf[37] = 0x00; buf[38] = 0x00; buf[39] = 0x00;
9598 buf[40] = 0x00; buf[41] = 0x00; buf[42] = 0x00; buf[43] = 0x00;
9599 buf[44] = 0x00; buf[45] = 0x00; buf[46] = 0x00; buf[47] = 0x00;
9600 ret = usb_microdia_control_write(dev, reg, buf, 48);
9601 if (ret < 0)
9602 goto err;
9604 reg = 0x11a5 ;
9605 buf[0] = 0x2d; buf[1] = 0x2d; buf[2] = 0x3a; buf[3] = 0x05;
9606 buf[4] = 0x04; buf[5] = 0x3f;
9607 ret = usb_microdia_control_write(dev, reg, buf, 6);
9608 if (ret < 0)
9609 goto err;
9611 reg = 0x11af ;
9612 buf[0] = 0x28; buf[1] = 0xd8; buf[2] = 0x14; buf[3] = 0xec;
9613 ret = usb_microdia_control_write(dev, reg, buf, 4);
9614 if (ret < 0)
9615 goto err;
9617 reg = 0x11b3 ;
9618 buf[0] = 0x32; buf[1] = 0xdd; buf[2] = 0x32; buf[3] = 0xdd;
9619 ret = usb_microdia_control_write(dev, reg, buf, 4);
9620 if (ret < 0)
9621 goto err;
9623 reg = 0x10e0 ;
9624 buf[0] = 0x47;
9625 ret = usb_microdia_control_write(dev, reg, buf, 1);
9626 if (ret < 0)
9627 goto err;
9629 reg = 0x1061 ;
9630 buf[0] = 0x01;
9631 ret = usb_microdia_control_write(dev, reg, buf, 1);
9632 if (ret < 0)
9633 goto err;
9635 reg = 0x10e0 ;
9636 buf[0] = 0x67;
9637 ret = usb_microdia_control_write(dev, reg, buf, 1);
9638 if (ret < 0)
9639 goto err;
9641 reg = 0x1100 ;
9642 buf[0] = 0x0d; buf[1] = 0x08; buf[2] = 0x08; buf[3] = 0x0d;
9643 buf[4] = 0x08; buf[5] = 0x08; buf[6] = 0x0d; buf[7] = 0x0d;
9644 buf[8] = 0x0d; buf[9] = 0x0d; buf[10] = 0x11; buf[11] = 0x0d;
9645 buf[12] = 0x0d; buf[13] = 0x11; buf[14] = 0x15; buf[15] = 0x21;
9646 buf[16] = 0x15; buf[17] = 0x15; buf[18] = 0x11; buf[19] = 0x11;
9647 buf[20] = 0x15; buf[21] = 0x2a; buf[22] = 0x1d; buf[23] = 0x1d;
9648 buf[24] = 0x19; buf[25] = 0x21; buf[26] = 0x32; buf[27] = 0x2a;
9649 buf[28] = 0x32; buf[29] = 0x32; buf[30] = 0x2e; buf[31] = 0x2a;
9650 buf[32] = 0x2e; buf[33] = 0x2e; buf[34] = 0x36; buf[35] = 0x3a;
9651 buf[36] = 0x4b; buf[37] = 0x43; buf[38] = 0x36; buf[39] = 0x3a;
9652 buf[40] = 0x47; buf[41] = 0x3a; buf[42] = 0x2e; buf[43] = 0x2e;
9653 buf[44] = 0x43; buf[45] = 0x5c; buf[46] = 0x43; buf[47] = 0x47;
9654 buf[48] = 0x4f; buf[49] = 0x53; buf[50] = 0x58; buf[51] = 0x58;
9655 buf[52] = 0x58; buf[53] = 0x32; buf[54] = 0x3f; buf[55] = 0x60;
9656 buf[56] = 0x64; buf[57] = 0x5c; buf[58] = 0x53; buf[59] = 0x64;
9657 buf[60] = 0x4b; buf[61] = 0x53; buf[62] = 0x58; buf[63] = 0x53;
9658 ret = usb_microdia_control_write(dev, reg, buf, 64);
9659 if (ret < 0)
9660 goto err;
9662 reg = 0x1140 ;
9663 buf[0] = 0x0d; buf[1] = 0x11; buf[2] = 0x11; buf[3] = 0x15;
9664 buf[4] = 0x11; buf[5] = 0x15; buf[6] = 0x26; buf[7] = 0x15;
9665 buf[8] = 0x15; buf[9] = 0x26; buf[10] = 0x53; buf[11] = 0x36;
9666 buf[12] = 0x2e; buf[13] = 0x36; buf[14] = 0x53; buf[15] = 0x53;
9667 buf[16] = 0x53; buf[17] = 0x53; buf[18] = 0x53; buf[19] = 0x53;
9668 buf[20] = 0x53; buf[21] = 0x53; buf[22] = 0x53; buf[23] = 0x53;
9669 buf[24] = 0x53; buf[25] = 0x53; buf[26] = 0x53; buf[27] = 0x53;
9670 buf[28] = 0x53; buf[29] = 0x53; buf[30] = 0x53; buf[31] = 0x53;
9671 buf[32] = 0x53; buf[33] = 0x53; buf[34] = 0x53; buf[35] = 0x53;
9672 buf[36] = 0x53; buf[37] = 0x53; buf[38] = 0x53; buf[39] = 0x53;
9673 buf[40] = 0x53; buf[41] = 0x53; buf[42] = 0x53; buf[43] = 0x53;
9674 buf[44] = 0x53; buf[45] = 0x53; buf[46] = 0x53; buf[47] = 0x53;
9675 buf[48] = 0x53; buf[49] = 0x53; buf[50] = 0x53; buf[51] = 0x53;
9676 buf[52] = 0x53; buf[53] = 0x53; buf[54] = 0x53; buf[55] = 0x53;
9677 buf[56] = 0x53; buf[57] = 0x53; buf[58] = 0x53; buf[59] = 0x53;
9678 buf[60] = 0x53; buf[61] = 0x53; buf[62] = 0x53; buf[63] = 0x53;
9679 ret = usb_microdia_control_write(dev, reg, buf, 64);
9680 if (ret < 0)
9681 goto err;
9683 reg = 0x10e0 ;
9684 buf[0] = 0x47;
9685 ret = usb_microdia_control_write(dev, reg, buf, 1);
9686 if (ret < 0)
9687 goto err;
9689 reg = 0x1061 ;
9690 buf[0] = 0x03;
9691 ret = usb_microdia_control_write(dev, reg, buf, 1);
9692 if (ret < 0)
9693 goto err;
9695 reg = 0x10e0 ;
9696 buf[0] = 0x4b;
9697 ret = usb_microdia_control_write(dev, reg, buf, 1);
9698 if (ret < 0)
9699 goto err;
9701 reg = 0x1189 ;
9702 buf[0] = 0xd0;
9703 ret = usb_microdia_control_write(dev, reg, buf, 1);
9704 if (ret < 0)
9705 goto err;
9707 reg = 0x11bc ;
9708 buf[0] = 0x00;
9709 ret = usb_microdia_control_write(dev, reg, buf, 1);
9710 if (ret < 0)
9711 goto err;
9713 reg = 0x11bd ;
9714 buf[0] = 0x00;
9715 ret = usb_microdia_control_write(dev, reg, buf, 1);
9716 if (ret < 0)
9717 goto err;
9719 reg = 0x11be ;
9720 buf[0] = 0x00;
9721 ret = usb_microdia_control_write(dev, reg, buf, 1);
9722 if (ret < 0)
9723 goto err;
9725 reg = 0x11bf ;
9726 buf[0] = 0x00;
9727 ret = usb_microdia_control_write(dev, reg, buf, 1);
9728 if (ret < 0)
9729 goto err;
9731 reg = 0x10c0 ;
9732 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x03; buf[3] = 0x14; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9733 ret = usb_microdia_control_write(dev, reg, buf, 8);
9734 if (ret < 0)
9735 goto err;
9737 reg = 0x10c0 ;
9738 ret = usb_microdia_control_read(dev, reg, buf, 1);
9739 if (ret < 0)
9740 goto err;
9742 reg = 0x10c0 ;
9743 ret = usb_microdia_control_read(dev, reg, buf, 1);
9744 if (ret < 0)
9745 goto err;
9747 reg = 0x10c0 ;
9748 buf[0] = 0xd0; buf[1] = 0x30; buf[2] = 0x17; buf[3] = 0x1b; buf[4] = 0xbc; buf[5] = 0x01; buf[6] = 0x7a; buf[7] = 0x10;
9749 ret = usb_microdia_control_write(dev, reg, buf, 8);
9750 if (ret < 0)
9751 goto err;
9753 reg = 0x10c0 ;
9754 ret = usb_microdia_control_read(dev, reg, buf, 1);
9755 if (ret < 0)
9756 goto err;
9758 reg = 0x10c0 ;
9759 ret = usb_microdia_control_read(dev, reg, buf, 1);
9760 if (ret < 0)
9761 goto err;
9763 reg = 0x10c0 ;
9764 buf[0] = 0x90; buf[1] = 0x30; buf[2] = 0x1b; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9765 ret = usb_microdia_control_write(dev, reg, buf, 8);
9766 if (ret < 0)
9767 goto err;
9769 reg = 0x10c0 ;
9770 ret = usb_microdia_control_read(dev, reg, buf, 1);
9771 if (ret < 0)
9772 goto err;
9774 reg = 0x10c0 ;
9775 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x32; buf[3] = 0x82; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9776 ret = usb_microdia_control_write(dev, reg, buf, 8);
9777 if (ret < 0)
9778 goto err;
9780 reg = 0x10c0 ;
9781 ret = usb_microdia_control_read(dev, reg, buf, 1);
9782 if (ret < 0)
9783 goto err;
9785 reg = 0x10c0 ;
9786 ret = usb_microdia_control_read(dev, reg, buf, 1);
9787 if (ret < 0)
9788 goto err;
9790 reg = 0x1180 ;
9791 buf[0] = 0x05; buf[1] = 0x00; buf[2] = 0x01; buf[3] = 0x00;
9792 buf[4] = 0x50; buf[5] = 0x78;
9793 ret = usb_microdia_control_write(dev, reg, buf, 6);
9794 if (ret < 0)
9795 goto err;
9797 reg = 0x10fb ;
9798 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0;
9799 buf[4] = 0x00;
9800 ret = usb_microdia_control_write(dev, reg, buf, 5);
9801 if (ret < 0)
9802 goto err;
9804 reg = 0x1189 ;
9805 buf[0] = 0xd0;
9806 ret = usb_microdia_control_write(dev, reg, buf, 1);
9807 if (ret < 0)
9808 goto err;
9810 reg = 0x11a1 ;
9811 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0xd5; buf[3] = 0xa0;
9812 ret = usb_microdia_control_write(dev, reg, buf, 4);
9813 if (ret < 0)
9814 goto err;
9816 reg = 0x11ab ;
9817 buf[0] = 0x00; buf[1] = 0x00; buf[2] = 0xa0; buf[3] = 0x78;
9818 ret = usb_microdia_control_write(dev, reg, buf, 4);
9819 if (ret < 0)
9820 goto err;
9822 reg = 0x1061 ;
9823 buf[0] = 0x03;
9824 ret = usb_microdia_control_write(dev, reg, buf, 1);
9825 if (ret < 0)
9826 goto err;
9828 reg = 0x11ba ;
9829 buf[0] = 0x0a;
9830 ret = usb_microdia_control_write(dev, reg, buf, 1);
9831 if (ret < 0)
9832 goto err;
9834 reg = 0x11b9 ;
9835 buf[0] = 0x00;
9836 ret = usb_microdia_control_write(dev, reg, buf, 1);
9837 if (ret < 0)
9838 goto err;
9840 reg = 0x11ba ;
9841 buf[0] = 0x0b;
9842 ret = usb_microdia_control_write(dev, reg, buf, 1);
9843 if (ret < 0)
9844 goto err;
9846 reg = 0x1061 ;
9847 buf[0] = 0x01;
9848 ret = usb_microdia_control_write(dev, reg, buf, 1);
9849 if (ret < 0)
9850 goto err;
9852 reg = 0x1000 ;
9853 buf[0] = 0x78;
9854 ret = usb_microdia_control_write(dev, reg, buf, 1);
9855 if (ret < 0)
9856 goto err;
9858 reg = 0x1002 ;
9859 buf[0] = 0x08;
9860 ret = usb_microdia_control_write(dev, reg, buf, 1);
9861 if (ret < 0)
9862 goto err;
9864 reg = 0x1002 ;
9865 buf[0] = 0x08;
9866 ret = usb_microdia_control_write(dev, reg, buf, 1);
9867 if (ret < 0)
9868 goto err;
9870 reg = 0x11b8 ;
9871 buf[0] = 0xfa;
9872 ret = usb_microdia_control_write(dev, reg, buf, 1);
9873 if (ret < 0)
9874 goto err;
9876 reg = 0x118a ;
9877 buf[0] = 0x02;
9878 ret = usb_microdia_control_write(dev, reg, buf, 1);
9879 if (ret < 0)
9880 goto err;
9882 reg = 0x0395 ;
9883 buf[0] = 0x02;
9884 ret = usb_microdia_control_write(dev, reg, buf, 1);
9885 if (ret < 0)
9886 goto err;
9888 reg = 0x11b8 ;
9889 buf[0] = 0xf8;
9890 ret = usb_microdia_control_write(dev, reg, buf, 1);
9891 if (ret < 0)
9892 goto err;
9894 reg = 0x11b8 ;
9895 ret = usb_microdia_control_read(dev, reg, buf, 1);
9896 if (ret < 0)
9897 goto err;
9899 reg = 0x11b8 ;
9900 buf[0] = 0xf9;
9901 ret = usb_microdia_control_write(dev, reg, buf, 1);
9902 if (ret < 0)
9903 goto err;
9905 reg = 0x11b8 ;
9906 ret = usb_microdia_control_read(dev, reg, buf, 1);
9907 if (ret < 0)
9908 goto err;
9910 reg = 0x11b8 ;
9911 buf[0] = 0x7a;
9912 ret = usb_microdia_control_write(dev, reg, buf, 1);
9913 if (ret < 0)
9914 goto err;
9916 reg = 0x11b8 ;
9917 ret = usb_microdia_control_read(dev, reg, buf, 1);
9918 if (ret < 0)
9919 goto err;
9921 reg = 0x11b8 ;
9922 buf[0] = 0x7b;
9923 ret = usb_microdia_control_write(dev, reg, buf, 1);
9924 if (ret < 0)
9925 goto err;
9927 reg = 0x11b8 ;
9928 ret = usb_microdia_control_read(dev, reg, buf, 1);
9929 if (ret < 0)
9930 goto err;
9932 reg = 0x11b8 ;
9933 buf[0] = 0x7c;
9934 ret = usb_microdia_control_write(dev, reg, buf, 1);
9935 if (ret < 0)
9936 goto err;
9938 reg = 0x11b8 ;
9939 ret = usb_microdia_control_read(dev, reg, buf, 1);
9940 if (ret < 0)
9941 goto err;
9943 reg = 0x11b8 ;
9944 buf[0] = 0xfd;
9945 ret = usb_microdia_control_write(dev, reg, buf, 1);
9946 if (ret < 0)
9947 goto err;
9949 reg = 0x11b8 ;
9950 ret = usb_microdia_control_read(dev, reg, buf, 1);
9951 if (ret < 0)
9952 goto err;
9954 reg = 0x11b8 ;
9955 buf[0] = 0xfa;
9956 ret = usb_microdia_control_write(dev, reg, buf, 1);
9957 if (ret < 0)
9958 goto err;
9960 reg = 0x10c0 ;
9961 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x11; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9962 ret = usb_microdia_control_write(dev, reg, buf, 8);
9963 if (ret < 0)
9964 goto err;
9966 reg = 0x10c0 ;
9967 ret = usb_microdia_control_read(dev, reg, buf, 1);
9968 if (ret < 0)
9969 goto err;
9971 reg = 0x10c0 ;
9972 ret = usb_microdia_control_read(dev, reg, buf, 1);
9973 if (ret < 0)
9974 goto err;
9976 reg = 0x10c0 ;
9977 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x2a; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9978 ret = usb_microdia_control_write(dev, reg, buf, 8);
9979 if (ret < 0)
9980 goto err;
9982 reg = 0x10c0 ;
9983 ret = usb_microdia_control_read(dev, reg, buf, 1);
9984 if (ret < 0)
9985 goto err;
9987 reg = 0x10c0 ;
9988 ret = usb_microdia_control_read(dev, reg, buf, 1);
9989 if (ret < 0)
9990 goto err;
9992 reg = 0x10c0 ;
9993 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x2b; buf[3] = 0x70; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
9994 ret = usb_microdia_control_write(dev, reg, buf, 8);
9995 if (ret < 0)
9996 goto err;
9998 reg = 0x10c0 ;
9999 ret = usb_microdia_control_read(dev, reg, buf, 1);
10000 if (ret < 0)
10001 goto err;
10003 reg = 0x10c0 ;
10004 ret = usb_microdia_control_read(dev, reg, buf, 1);
10005 if (ret < 0)
10006 goto err;
10008 reg = 0x10c0 ;
10009 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x92; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10010 ret = usb_microdia_control_write(dev, reg, buf, 8);
10011 if (ret < 0)
10012 goto err;
10014 reg = 0x10c0 ;
10015 ret = usb_microdia_control_read(dev, reg, buf, 1);
10016 if (ret < 0)
10017 goto err;
10019 reg = 0x10c0 ;
10020 ret = usb_microdia_control_read(dev, reg, buf, 1);
10021 if (ret < 0)
10022 goto err;
10024 reg = 0x10c0 ;
10025 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x93; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10026 ret = usb_microdia_control_write(dev, reg, buf, 8);
10027 if (ret < 0)
10028 goto err;
10030 reg = 0x10c0 ;
10031 ret = usb_microdia_control_read(dev, reg, buf, 1);
10032 if (ret < 0)
10033 goto err;
10035 reg = 0x10c0 ;
10036 ret = usb_microdia_control_read(dev, reg, buf, 1);
10037 if (ret < 0)
10038 goto err;
10040 reg = 0x10c0 ;
10041 buf[0] = 0x90; buf[1] = 0x30; buf[2] = 0x0a; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10042 ret = usb_microdia_control_write(dev, reg, buf, 8);
10043 if (ret < 0)
10044 goto err;
10046 reg = 0x10c0 ;
10047 ret = usb_microdia_control_read(dev, reg, buf, 1);
10048 if (ret < 0)
10049 goto err;
10051 reg = 0x10c0 ;
10052 buf[0] = 0x92; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10053 ret = usb_microdia_control_write(dev, reg, buf, 8);
10054 if (ret < 0)
10055 goto err;
10057 reg = 0x10c0 ;
10058 ret = usb_microdia_control_read(dev, reg, buf, 1);
10059 if (ret < 0)
10060 goto err;
10062 reg = 0x10c2 ;
10063 ret = usb_microdia_control_read(dev, reg, buf, 5);
10064 if (ret < 0)
10065 goto err;
10067 reg = 0x10c0 ;
10068 buf[0] = 0x90; buf[1] = 0x30; buf[2] = 0x0b; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10069 ret = usb_microdia_control_write(dev, reg, buf, 8);
10070 if (ret < 0)
10071 goto err;
10073 reg = 0x10c0 ;
10074 ret = usb_microdia_control_read(dev, reg, buf, 1);
10075 if (ret < 0)
10076 goto err;
10078 reg = 0x10c0 ;
10079 buf[0] = 0x92; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10080 ret = usb_microdia_control_write(dev, reg, buf, 8);
10081 if (ret < 0)
10082 goto err;
10084 reg = 0x10c0 ;
10085 ret = usb_microdia_control_read(dev, reg, buf, 1);
10086 if (ret < 0)
10087 goto err;
10089 reg = 0x10c2 ;
10090 ret = usb_microdia_control_read(dev, reg, buf, 5);
10091 if (ret < 0)
10092 goto err;
10094 reg = 0x10c0 ;
10095 buf[0] = 0x90; buf[1] = 0x30; buf[2] = 0x1c; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10096 ret = usb_microdia_control_write(dev, reg, buf, 8);
10097 if (ret < 0)
10098 goto err;
10100 reg = 0x10c0 ;
10101 ret = usb_microdia_control_read(dev, reg, buf, 1);
10102 if (ret < 0)
10103 goto err;
10105 reg = 0x10c0 ;
10106 buf[0] = 0x92; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10107 ret = usb_microdia_control_write(dev, reg, buf, 8);
10108 if (ret < 0)
10109 goto err;
10111 reg = 0x10c0 ;
10112 ret = usb_microdia_control_read(dev, reg, buf, 1);
10113 if (ret < 0)
10114 goto err;
10116 reg = 0x10c2 ;
10117 ret = usb_microdia_control_read(dev, reg, buf, 5);
10118 if (ret < 0)
10119 goto err;
10121 reg = 0x10c0 ;
10122 buf[0] = 0x90; buf[1] = 0x30; buf[2] = 0x1d; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10123 ret = usb_microdia_control_write(dev, reg, buf, 8);
10124 if (ret < 0)
10125 goto err;
10127 reg = 0x10c0 ;
10128 ret = usb_microdia_control_read(dev, reg, buf, 1);
10129 if (ret < 0)
10130 goto err;
10132 reg = 0x10c0 ;
10133 buf[0] = 0x92; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10134 ret = usb_microdia_control_write(dev, reg, buf, 8);
10135 if (ret < 0)
10136 goto err;
10138 reg = 0x10c0 ;
10139 ret = usb_microdia_control_read(dev, reg, buf, 1);
10140 if (ret < 0)
10141 goto err;
10143 reg = 0x10c2 ;
10144 ret = usb_microdia_control_read(dev, reg, buf, 5);
10145 if (ret < 0)
10146 goto err;
10148 reg = 0x1061 ;
10149 buf[0] = 0x03;
10150 ret = usb_microdia_control_write(dev, reg, buf, 1);
10151 if (ret < 0)
10152 goto err;
10154 reg = 0x1007 ;
10155 buf[0] = 0x20;
10156 ret = usb_microdia_control_write(dev, reg, buf, 1);
10157 if (ret < 0)
10158 goto err;
10160 reg = 0x1006 ;
10161 buf[0] = 0x00;
10162 ret = usb_microdia_control_write(dev, reg, buf, 1);
10163 if (ret < 0)
10164 goto err;
10166 reg = 0x10c0 ;
10167 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0xa1; buf[3] = 0x01; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10168 ret = usb_microdia_control_write(dev, reg, buf, 8);
10169 if (ret < 0)
10170 goto err;
10172 reg = 0x10c0 ;
10173 ret = usb_microdia_control_read(dev, reg, buf, 1);
10174 if (ret < 0)
10175 goto err;
10177 reg = 0x10c0 ;
10178 ret = usb_microdia_control_read(dev, reg, buf, 1);
10179 if (ret < 0)
10180 goto err;
10182 reg = 0x10c0 ;
10183 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x10; buf[3] = 0x06; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10184 ret = usb_microdia_control_write(dev, reg, buf, 8);
10185 if (ret < 0)
10186 goto err;
10188 reg = 0x10c0 ;
10189 ret = usb_microdia_control_read(dev, reg, buf, 1);
10190 if (ret < 0)
10191 goto err;
10193 reg = 0x10c0 ;
10194 ret = usb_microdia_control_read(dev, reg, buf, 1);
10195 if (ret < 0)
10196 goto err;
10198 reg = 0x10c0 ;
10199 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x04; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10200 ret = usb_microdia_control_write(dev, reg, buf, 8);
10201 if (ret < 0)
10202 goto err;
10204 reg = 0x10c0 ;
10205 ret = usb_microdia_control_read(dev, reg, buf, 1);
10206 if (ret < 0)
10207 goto err;
10209 reg = 0x10c0 ;
10210 ret = usb_microdia_control_read(dev, reg, buf, 1);
10211 if (ret < 0)
10212 goto err;
10214 reg = 0x10c0 ;
10215 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x2d; buf[3] = 0x36; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10216 ret = usb_microdia_control_write(dev, reg, buf, 8);
10217 if (ret < 0)
10218 goto err;
10220 reg = 0x10c0 ;
10221 ret = usb_microdia_control_read(dev, reg, buf, 1);
10222 if (ret < 0)
10223 goto err;
10225 reg = 0x10c0 ;
10226 ret = usb_microdia_control_read(dev, reg, buf, 1);
10227 if (ret < 0)
10228 goto err;
10230 reg = 0x10c0 ;
10231 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x2e; buf[3] = 0x00; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10232 ret = usb_microdia_control_write(dev, reg, buf, 8);
10233 if (ret < 0)
10234 goto err;
10236 reg = 0x10c0 ;
10237 ret = usb_microdia_control_read(dev, reg, buf, 1);
10238 if (ret < 0)
10239 goto err;
10241 reg = 0x10c0 ;
10242 ret = usb_microdia_control_read(dev, reg, buf, 1);
10243 if (ret < 0)
10244 goto err;
10246 reg = 0x10c0 ;
10247 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x01; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x15;
10248 ret = usb_microdia_control_write(dev, reg, buf, 8);
10249 if (ret < 0)
10250 goto err;
10252 reg = 0x10c0 ;
10253 ret = usb_microdia_control_read(dev, reg, buf, 1);
10254 if (ret < 0)
10255 goto err;
10257 reg = 0x10c0 ;
10258 ret = usb_microdia_control_read(dev, reg, buf, 1);
10259 if (ret < 0)
10260 goto err;
10262 reg = 0x10c0 ;
10263 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x06; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x15;
10264 ret = usb_microdia_control_write(dev, reg, buf, 8);
10265 if (ret < 0)
10266 goto err;
10268 reg = 0x10c0 ;
10269 ret = usb_microdia_control_read(dev, reg, buf, 1);
10270 if (ret < 0)
10271 goto err;
10273 reg = 0x10c0 ;
10274 ret = usb_microdia_control_read(dev, reg, buf, 1);
10275 if (ret < 0)
10276 goto err;
10278 reg = 0x10c0 ;
10279 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x01; buf[3] = 0x94; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10280 ret = usb_microdia_control_write(dev, reg, buf, 8);
10281 if (ret < 0)
10282 goto err;
10284 reg = 0x10c0 ;
10285 ret = usb_microdia_control_read(dev, reg, buf, 1);
10286 if (ret < 0)
10287 goto err;
10289 reg = 0x10c0 ;
10290 ret = usb_microdia_control_read(dev, reg, buf, 1);
10291 if (ret < 0)
10292 goto err;
10294 reg = 0x10c0 ;
10295 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x02; buf[3] = 0x8d; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10296 ret = usb_microdia_control_write(dev, reg, buf, 8);
10297 if (ret < 0)
10298 goto err;
10300 reg = 0x10c0 ;
10301 ret = usb_microdia_control_read(dev, reg, buf, 1);
10302 if (ret < 0)
10303 goto err;
10305 reg = 0x10c0 ;
10306 ret = usb_microdia_control_read(dev, reg, buf, 1);
10307 if (ret < 0)
10308 goto err;
10310 reg = 0x10c0 ;
10311 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x09; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x15;
10312 ret = usb_microdia_control_write(dev, reg, buf, 8);
10313 if (ret < 0)
10314 goto err;
10316 reg = 0x10c0 ;
10317 ret = usb_microdia_control_read(dev, reg, buf, 1);
10318 if (ret < 0)
10319 goto err;
10321 reg = 0x10c0 ;
10322 ret = usb_microdia_control_read(dev, reg, buf, 1);
10323 if (ret < 0)
10324 goto err;
10326 reg = 0x10c0 ;
10327 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x01; buf[3] = 0x95; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10328 ret = usb_microdia_control_write(dev, reg, buf, 8);
10329 if (ret < 0)
10330 goto err;
10332 reg = 0x10c0 ;
10333 ret = usb_microdia_control_read(dev, reg, buf, 1);
10334 if (ret < 0)
10335 goto err;
10337 reg = 0x10c0 ;
10338 ret = usb_microdia_control_read(dev, reg, buf, 1);
10339 if (ret < 0)
10340 goto err;
10342 reg = 0x10c0 ;
10343 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x02; buf[3] = 0x85; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10344 ret = usb_microdia_control_write(dev, reg, buf, 8);
10345 if (ret < 0)
10346 goto err;
10348 reg = 0x10c0 ;
10349 ret = usb_microdia_control_read(dev, reg, buf, 1);
10350 if (ret < 0)
10351 goto err;
10353 reg = 0x10c0 ;
10354 ret = usb_microdia_control_read(dev, reg, buf, 1);
10355 if (ret < 0)
10356 goto err;
10358 reg = 0x10c0 ;
10359 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x00; buf[3] = 0x0c; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x15;
10360 ret = usb_microdia_control_write(dev, reg, buf, 8);
10361 if (ret < 0)
10362 goto err;
10364 reg = 0x10c0 ;
10365 ret = usb_microdia_control_read(dev, reg, buf, 1);
10366 if (ret < 0)
10367 goto err;
10369 reg = 0x10c0 ;
10370 ret = usb_microdia_control_read(dev, reg, buf, 1);
10371 if (ret < 0)
10372 goto err;
10374 reg = 0x10c0 ;
10375 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x01; buf[3] = 0x96; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10376 ret = usb_microdia_control_write(dev, reg, buf, 8);
10377 if (ret < 0)
10378 goto err;
10380 reg = 0x10c0 ;
10381 ret = usb_microdia_control_read(dev, reg, buf, 1);
10382 if (ret < 0)
10383 goto err;
10385 reg = 0x10c0 ;
10386 ret = usb_microdia_control_read(dev, reg, buf, 1);
10387 if (ret < 0)
10388 goto err;
10390 reg = 0x10c0 ;
10391 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x02; buf[3] = 0x80; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10392 ret = usb_microdia_control_write(dev, reg, buf, 8);
10393 if (ret < 0)
10394 goto err;
10396 reg = 0x10c0 ;
10397 ret = usb_microdia_control_read(dev, reg, buf, 1);
10398 if (ret < 0)
10399 goto err;
10401 reg = 0x10c0 ;
10402 ret = usb_microdia_control_read(dev, reg, buf, 1);
10403 if (ret < 0)
10404 goto err;
10406 reg = 0x10c0 ;
10407 buf[0] = 0xa0; buf[1] = 0x30; buf[2] = 0x02; buf[3] = 0x7c; buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10;
10408 ret = usb_microdia_control_write(dev, reg, buf, 8);
10409 if (ret < 0)
10410 goto err;
10412 reg = 0x10c0 ;
10413 ret = usb_microdia_control_read(dev, reg, buf, 1);
10414 if (ret < 0)
10415 goto err;
10417 reg = 0x10c0 ;
10418 ret = usb_microdia_control_read(dev, reg, buf, 1);
10419 if (ret < 0)
10420 goto err;
10422 reg = 0x1007 ;
10423 buf[0] = 0x20;
10424 ret = usb_microdia_control_write(dev, reg, buf, 1);
10425 if (ret < 0)
10426 goto err;
10428 reg = 0x1006 ;
10429 buf[0] = 0x20;
10430 ret = usb_microdia_control_write(dev, reg, buf, 1);
10431 if (ret < 0)
10432 goto err;
10437 /* END OF MICRODIA 6288 START STREAM */
10439 return 0;
10440 err:
10441 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg, ret);
10442 return ret;
10445 /**
10446 * @brief From UsbSnoop-plugin-parsed.log
10448 * @param dev
10450 * @returns 0 if all OK
10452 * this function starts video stream Microdia 6128 webcam
10453 * Bridge SN9C325 + OM6802 CMOS sensor
10454 * note: comments are my observations so they could be wrong
10456 int microdia_6128_start_stream(struct usb_microdia *dev)
10458 int i;
10459 int ret = 0;
10460 __u8 buf[8];
10462 __u8 data_15[] = {
10463 0x00, 0x1a, 0x34, 0x27, 0x20, 0xa0, 0x34, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00
10466 __u8 data_17[] = {
10467 0x08, 0x22, 0x44, 0x63, 0x7d, 0x92, 0xa3, 0xaf, 0xbc, 0xc4, 0xcd, 0xd5, 0xdc, 0xe1, 0xe8, 0xef,
10468 0xf7
10471 __u8 data_21[] = {
10472 0x15, 0x00, 0x2b, 0x00, 0x08, 0x00, 0xeb, 0x0f, 0xd7, 0x0f, 0x43, 0x00, 0x3d, 0x00, 0xca, 0x0f,
10473 0xf7, 0x0f, 0x0c, 0x00, 0x00
10476 __u8 qtable_1[] = {
10477 0x06, 0x04, 0x04, 0x06, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0x06, 0x08, 0x0a, 0x10,
10478 0x0a, 0x0a, 0x08, 0x08, 0x0a, 0x13, 0x0e, 0x0e, 0x0c, 0x10, 0x17, 0x13, 0x17, 0x17, 0x15, 0x13,
10479 0x15, 0x15, 0x19, 0x1b, 0x23, 0x1f, 0x19, 0x1b, 0x21, 0x1b, 0x15, 0x15, 0x1f, 0x2b, 0x1f, 0x21,
10480 0x25, 0x27, 0x29, 0x29, 0x29, 0x17, 0x1d, 0x2d, 0x2f, 0x2b, 0x27, 0x2f, 0x23, 0x27, 0x29, 0x27
10484 __u8 qtable_2[] = {
10485 0x06, 0x08, 0x08, 0x0a, 0x08, 0x0a, 0x12, 0x0a, 0x0a, 0x12, 0x27, 0x19, 0x15, 0x19, 0x27, 0x27,
10486 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
10487 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
10488 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
10491 __u8 om6802_sensor[][8] = {
10492 {0xa0, dev->sensor_slave_address, 0xd6, 0x02, 0x00, 0x00, 0x00, 0x10},
10493 {0xa0, dev->sensor_slave_address, 0xae, 0xe2, 0x00, 0x00, 0x00, 0x10},
10494 {0xa0, dev->sensor_slave_address, 0xdf, 0x6d, 0x00, 0x00, 0x00, 0x10}, // Enter factory mode
10495 {0xa0, dev->sensor_slave_address, 0xdd, 0x18, 0x00, 0x00, 0x00, 0x10}, // RGB, uyvy1,Raw RGB, n/1/2, n/clp
10496 {0xa0, dev->sensor_slave_address, 0x5a, 0xc0, 0x00, 0x00, 0x00, 0x10},
10497 {0xa0, dev->sensor_slave_address, 0xfb, 0x11, 0x00, 0x00, 0x00, 0x10},
10498 {0xa0, dev->sensor_slave_address, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x10},
10499 {0xa0, dev->sensor_slave_address, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x10},
10500 {0xa0, dev->sensor_slave_address, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x10},
10501 {0xa0, dev->sensor_slave_address, 0xfb, 0xee, 0x00, 0x00, 0x00, 0x10},
10502 {0xa0, dev->sensor_slave_address, 0x5d, 0x80, 0x00, 0x00, 0x00, 0x10},
10503 {0xa0, dev->sensor_slave_address, 0x71, 0x84, 0x00, 0x00, 0x00, 0x10},
10504 {0xa0, dev->sensor_slave_address, 0x72, 0x00, 0x00, 0x00, 0x00, 0x10},
10505 {0xa0, dev->sensor_slave_address, 0x68, 0x80, 0x00, 0x00, 0x00, 0x10},
10506 {0xa0, dev->sensor_slave_address, 0x69, 0x00, 0x00, 0x00, 0x00, 0x10},
10507 {0xa0, dev->sensor_slave_address, 0x71, 0x18, 0x00, 0x00, 0x00, 0x10},
10508 {0xa0, dev->sensor_slave_address, 0x72, 0x04, 0x00, 0x00, 0x00, 0x10},
10509 {0xa0, dev->sensor_slave_address, 0x68, 0xde, 0x00, 0x00, 0x00, 0x10},
10510 {0xa0, dev->sensor_slave_address, 0x69, 0x00, 0x00, 0x00, 0x00, 0x10}, // 18
10511 {0xa0, dev->sensor_slave_address, 0x68, 0x80, 0x00, 0x00, 0x00, 0x10},
10512 {0xa0, dev->sensor_slave_address, 0x69, 0x00, 0x00, 0x00, 0x00, 0x10},
10513 {0, 0, 0, 0, 0, 0, 0, 0} // Terminating string
10516 buf[0] = 0x00;
10517 ret += usb_microdia_control_write(dev, 0xf1, buf, 1); // Reset cam
10519 buf[0] = 0x23;
10520 ret += usb_microdia_control_write(dev, 0x01, buf, 1); // Sensor off, video off, clk 12MHz
10522 ret += usb_microdia_control_read(dev, 0x00, buf, 1); // Check if cam is working, must write 0x12 in buf[0]
10524 if(buf[0] != 0x12){
10525 UDIA_ERROR("Microdia 6128 webcam not connected or working !!!\n");
10526 return -ENODEV;
10529 ret += usb_microdia_control_read(dev, 0x01, buf, 1); // Must read 23
10531 if(buf[0] != 0x23){
10532 UDIA_ERROR("Microdia 6128 webcam is not initialized !!!\n");
10533 return -ENODEV;
10536 buf[0] = 0x23; buf[1] = 0x72;
10537 ret += usb_microdia_control_write(dev, 0x01, buf, 2); // Configure GPIO
10539 buf[0] = 0x34; buf[1] = 0x27; buf[2] = 0x20; buf[3] = 0xa0; buf[4] = 0x34;
10540 ret += usb_microdia_control_write(dev, 0x05, buf, 5);
10542 buf[0] = 0x44; buf[1] = 0x45; buf[2] = 0x00; buf[3] = 0x00; buf[4] = 0x00;
10543 ret += usb_microdia_control_write(dev, 0x17, buf, 5);
10545 buf[0] = 0x08; buf[1] = 0x40; buf[2] = 0x20; buf[3] = 0x00; buf[4] = 0x00;
10546 ret += usb_microdia_control_write(dev, 0x9a, buf, 5);
10548 buf[0] = 0x60; buf[1] = 0x00; buf[2] = 0x00;
10549 ret += usb_microdia_control_write(dev, 0xd4, buf, 3);
10550 ret += usb_microdia_control_write(dev, 0x03, data_15, 15);
10552 buf[0] = 0x73;
10553 ret += usb_microdia_control_write(dev, 0x02, buf, 1);
10555 buf[0] = 0x64;
10556 ret += usb_microdia_control_write(dev, 0x17, buf, 1);
10558 buf[0] = 0x22; buf[1] = 0x62;
10559 ret += usb_microdia_control_write(dev, 0x01, &buf[0], 1);
10560 ret += usb_microdia_control_write(dev, 0x01, &buf[1], 1);
10562 buf[0] = 0x64;
10563 ret += usb_microdia_control_write(dev, 0x17, buf, 1);
10564 ret += usb_microdia_control_write(dev, 0x17, buf, 1);
10566 buf[0] = 0x42; // Sensor on, clk 24MHz, video off
10567 ret += usb_microdia_control_write(dev, 0x01, buf, 1);
10568 ret += usb_microdia_control_write(dev, 0x01, buf, 1);
10570 // Sensor stuff
10571 for (i = 0; i < 2; i++){
10572 ret += usb_microdia_control_write(dev, 0x08, om6802_sensor[i], 8);
10573 msleep(1);
10576 buf[0] = 0x71;
10577 ret += usb_microdia_control_write(dev, 0x02, buf, 1);
10579 // Sensor stuff
10580 for (i = 2; i < 11; i++){
10581 ret += usb_microdia_control_write(dev, 0x08, om6802_sensor[i], 8);
10582 msleep(1);
10585 buf[0] = 0x71;
10586 ret += usb_microdia_control_write(dev, 0x02, buf, 1);
10587 ret += usb_microdia_control_write(dev, 0x02, buf, 1); // URB 1780
10589 buf[0] = 0x28;
10590 ret += usb_microdia_control_write(dev, 0x15, buf, 1);
10592 buf[0] = 0x1e;
10593 ret += usb_microdia_control_write(dev, 0x16, buf, 1);
10595 buf[0] = 0x51;
10596 ret += usb_microdia_control_write(dev, 0x12, buf, 1);
10598 buf[0] = 0x01;
10599 ret += usb_microdia_control_write(dev, 0x13, buf, 1);
10601 buf[0] = 0x45;
10602 ret += usb_microdia_control_write(dev, 0x18, buf, 1);
10604 buf[0] = 0x6a;
10605 ret += usb_microdia_control_write(dev, 0xd2, buf, 1);
10607 buf[0] = 0x50;
10608 ret += usb_microdia_control_write(dev, 0xd3, buf, 1);
10610 buf[0] = 0x00;
10611 ret += usb_microdia_control_write(dev, 0xc6, buf, 1);
10612 ret += usb_microdia_control_write(dev, 0xc7, buf, 1);
10614 buf[0] = 0x50;
10615 ret += usb_microdia_control_write(dev, 0xc8, buf, 1);
10617 buf[0] = 0x3c;
10618 ret += usb_microdia_control_write(dev, 0xc9, buf, 1);
10620 buf[0] = 0x45;
10621 ret += usb_microdia_control_write(dev, 0x18, buf, 1);
10623 buf[0] = 0x64;
10624 ret += usb_microdia_control_write(dev, 0x17, buf, 1);
10626 buf[0] = 0x20;
10627 ret += usb_microdia_control_write(dev, 0x05, buf, 1);
10628 ret += usb_microdia_control_write(dev, 0x07, buf, 1);
10629 ret += usb_microdia_control_write(dev, 0x06, buf, 1);
10631 buf[0] = 0x00;
10632 ret += usb_microdia_control_write(dev, 0x14, buf, 1);
10634 ret += usb_microdia_control_write(dev, 0x20, data_17, 17);
10635 ret += usb_microdia_control_write(dev, 0x20, data_17, 17);
10637 for (i = 0; i < 8; ++i) // writing the same buffer 8 times, why ??
10638 ret += usb_microdia_control_write(dev, 0x84, data_21, 21);
10640 data_21[0] = 0x16; data_21[10] = 40; data_21[12] = 0x3f;
10641 ret += usb_microdia_control_write(dev, 0x84, data_21, 21);
10643 buf[0] = 0x08;
10644 ret += usb_microdia_control_write(dev, 0x9a, buf, 1);
10646 buf[0] = 0x10;
10647 ret += usb_microdia_control_write(dev, 0x99, buf, 1);
10649 ret += usb_microdia_control_write(dev, 0x84, data_21, 21); // URB 1811
10651 buf[0] = 0x20;
10652 ret += usb_microdia_control_write(dev, 0x05, buf, 1);
10653 ret += usb_microdia_control_write(dev, 0x07, buf, 1);
10654 ret += usb_microdia_control_write(dev, 0x06, buf, 1);
10656 // Sensor Stuff
10657 for (i = 11; i < 15; i++){
10658 ret += usb_microdia_control_write(dev, 0x08, om6802_sensor[i], 8);
10659 msleep(1);
10662 buf[0] = 0x34;
10663 ret += usb_microdia_control_write(dev, 0x05, buf, 1);
10664 buf[0] = 0x27;
10665 ret += usb_microdia_control_write(dev, 0x06, buf, 1);
10667 buf[0] = buf[1] = 0x2d; buf[2] = 0x3a; buf[3] = 0x05; buf[4] = 0x04; buf[5] = 0x3f;
10668 ret += usb_microdia_control_write(dev, 0xc0, buf, 6);
10670 buf[0] = 0x28; buf[1] = 0xd8; buf[2] = 0x14; buf[3] = 0xec;
10671 ret += usb_microdia_control_write(dev, 0xca, buf, 4);
10673 buf[0] = 0x1e; buf[1] = 0xdd; buf[2] = 0x2d; buf[3] = 0xe7;
10674 ret += usb_microdia_control_write(dev, 0xce, buf, 4);
10676 buf[0] = 0x42;
10677 ret += usb_microdia_control_write(dev, 0x01, buf, 1);
10679 buf[0] = 0x64;
10680 ret += usb_microdia_control_write(dev, 0x17, buf, 1);
10682 // Sensor Stuff
10683 for (i = 15; i < 19; i++){
10684 ret += usb_microdia_control_write(dev, 0x08, om6802_sensor[i], 8);
10685 msleep(1);
10688 buf[0] = 0x28;
10689 ret += usb_microdia_control_write(dev, 0x05, buf, 1);
10691 buf[0] = 0x54;
10692 ret += usb_microdia_control_write(dev, 0x06, buf, 1);
10694 // This changes the mode (VGA = 0 , CIF = 1)
10695 // buf = 0x40 | 0x05 | (mode << 4) 45 or 55
10696 buf[0] = 0x45;
10697 ret += usb_microdia_control_write(dev, 0x18, buf, 1);
10699 // This is the Q table
10700 ret += usb_microdia_control_write(dev, 0x0100, qtable_1, 64); // first time
10701 ret += usb_microdia_control_write(dev, 0x0140, qtable_2, 64); // second time
10703 // mode: VGA = 0, CIF = 1
10704 // buf = 0x05 | (mode << 4) 05 or 15
10705 buf[0] = 0x05;
10706 ret += usb_microdia_control_write(dev, 0x18, buf, 1);
10708 buf[0] = 0x71;
10709 ret += usb_microdia_control_write(dev, 0x02, buf, 1);
10710 ret += usb_microdia_control_write(dev, 0x02, buf, 1);
10712 buf[0] = 0x42; // Sensor on, Video disabled, clk 24MHz
10713 ret += usb_microdia_control_write(dev, 0x01, buf, 1);
10715 buf[0] = 0x64;
10716 ret += usb_microdia_control_write(dev, 0x17, buf, 1);
10718 // Command to start streaming
10719 // Sensor on, clk 24MHz, video enabled
10720 buf[0] = 0x46;
10721 ret += usb_microdia_control_write(dev, 0x01, buf, 1);
10723 // When the device reads 46 from reg 0x01 it means that
10724 // camera is streaming
10725 ret += usb_microdia_control_read(dev, 0x01, buf, 1); // Must read 0x46
10727 if (ret != 624)
10728 UDIA_DEBUG("Some read or write were not successful in Start Stream\n");
10730 return 0;
10734 int dev_microdia_stop_stream(struct usb_microdia *dev)
10736 int ret = -ENODEV;
10737 if(dev && dev->stop_stream)
10738 ret = dev->stop_stream(dev);
10740 return ret;
10744 * @brief From stop.htm
10746 * @param dev
10748 * @returns 0
10750 * @author GWater
10752 * For SN9C201 with MI1310.
10753 * This function has not been tested yet.
10755 int microdia_6242_stop_stream(struct usb_microdia *dev)
10757 __u8 buf[3];
10759 __u8 only10c0[3] = {0x0d, 0x00, 0x00};
10761 buf[0] = 0x01;
10762 usb_microdia_control_write(dev, 0x1061, buf, 1);
10764 buf[0] = 0x60;
10765 usb_microdia_control_write(dev, 0x1007, buf, 1);
10767 buf[0] = 0x00;
10768 usb_microdia_control_write(dev, 0x1006, buf, 1);
10770 sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2,
10771 only10c0[0], dev->sensor_flags, &only10c0[1]);
10773 buf[0] = 0x38;
10774 usb_microdia_control_write(dev, 0x1000, buf, 1);
10776 buf[0] = 0x6b;
10777 usb_microdia_control_write(dev, 0x11b8, buf, 1);
10779 buf[0] = 0x60;
10780 usb_microdia_control_write(dev, 0x1007, buf, 1);
10782 buf[0] = 0x20;
10783 usb_microdia_control_write(dev, 0x1006, buf, 1);
10786 buf[0] = 0x98; buf[1] = 0xe7; buf[2] = 0x11;
10787 usb_microdia_control_write(dev, 0x1000, buf, 3);
10790 * After the select alternate setting 0 is actually another transfer:
10791 * buf[0] = 0x00;
10792 * usb_microdia_control_write(dev, 0x1066, buf, 1);
10795 return 0;
10800 * @brief From stopstream.log
10802 * @param dev
10804 * @returns 0
10806 * @author GWater
10808 * For SN9C201 with SOI968.
10809 * I don't whether the function really stops the stream.
10810 * Nevertheless the LED on the webcam now stops glowing.
10811 * The function is very similar to "microdia_624f_stop_stream".
10813 int microdia_624e_stop_stream(struct usb_microdia *dev)
10815 __u8 buf[3];
10817 buf[0] = 0x01;
10818 usb_microdia_control_write(dev, 0x1061, buf, 1);
10820 /* Next two writes added because it works better.
10821 * The LED stops glowing and I think the stream does too.
10822 * 0x20 = 0b00100000 which is the minimal of what the
10823 * other stopstreams have in common.
10825 buf[0] = 0x20;
10826 usb_microdia_control_write(dev, 0x1007, buf, 1);
10828 buf[0] = 0x20;
10829 usb_microdia_control_write(dev, 0x1006, buf, 1);
10831 buf[0] = 0x3c;
10832 usb_microdia_control_write(dev, 0x1000, buf, 1);
10834 buf[0] = 0x6a;
10835 usb_microdia_control_write(dev, 0x11b8, buf, 1);
10837 buf[0] = 0x38; buf[1] = 0xe7; buf[2] = 0x11;
10838 usb_microdia_control_write(dev, 0x1000, buf, 3);
10840 usb_microdia_control_read(dev, 0x1066, buf, 1);
10842 return 0;
10846 int microdia_624f_stop_stream(struct usb_microdia *dev)
10848 int ret;
10849 __u16 command;
10850 __u8 buf[3];
10852 buf[0] = 0x02;
10853 command = 0x1066;
10854 ret = usb_microdia_control_write(dev, command, buf, 1);
10855 if (ret < 0)
10856 goto err;
10858 buf[0] = 0x01;
10859 command = 0x1061;
10860 ret = usb_microdia_control_write(dev, command, buf, 1);
10861 if (ret < 0)
10862 goto err;
10864 buf[0] = 0x38;
10865 command = 0x1000;
10866 ret = usb_microdia_control_write(dev, command, buf, 1);
10867 if (ret < 0)
10868 goto err;
10870 buf[0] = 0x6a;
10871 command = 0x11b8;
10872 ret = usb_microdia_control_write(dev, command, buf, 1);
10873 if (ret < 0)
10874 goto err;
10876 buf[0] = 0x20;
10877 command = 0x1007;
10878 ret = usb_microdia_control_write(dev, command, buf, 1);
10879 if (ret < 0)
10880 goto err;
10882 buf[0] = 0x20;
10883 command = 0x1006;
10884 ret = usb_microdia_control_write(dev, command, buf, 1);
10885 if (ret < 0)
10886 goto err;
10888 buf[0] = 0x98;
10889 buf[1] = 0xe7;
10890 buf[2] = 0x11;
10891 command = 0x1000;
10892 ret = usb_microdia_control_write(dev, command, buf, 3);
10893 if (ret < 0)
10894 goto err;
10896 command = 0x1045;
10897 ret = usb_microdia_control_read(dev, command, buf, 1);
10898 if (ret < 0)
10899 goto err;
10901 buf[0] = 0x0f;
10902 ret = usb_microdia_control_write(dev, command, buf, 1);
10903 if (ret < 0)
10904 goto err;
10906 return ret;
10908 err:
10909 UDIA_ERROR("command %x failed (%d)!\n", command, ret);
10910 return ret;
10913 int microdia_6260_stop_stream(struct usb_microdia *dev)
10915 int ret;
10916 __u8 buf[32];
10918 buf[0] = 0x01;
10919 ret = usb_microdia_control_write(dev, 0x1061, buf, 1);
10920 buf[0] = 0x38;
10921 ret = usb_microdia_control_write(dev, 0x1000, buf, 1);
10922 buf[0] = 0x6b;
10923 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
10924 buf[0] = 0x20;
10925 ret = usb_microdia_control_write(dev, 0x1007, buf, 1);
10926 buf[0] = 0x20;
10927 ret = usb_microdia_control_write(dev, 0x1006, buf, 1);
10929 buf[0] = 0x98; buf[1] = 0xe7; buf[2] = 0x11;
10930 ret = usb_microdia_control_write(dev, 0x1000, buf, 3);
10932 buf[0] = 0x00;
10933 ret = usb_microdia_control_write(dev, 0x1066, buf, 1);
10934 ret = usb_microdia_control_read(dev, 0x1045, buf, 1);
10935 buf[0] = 0x0f;
10936 ret = usb_microdia_control_write(dev, 0x1045, buf, 1);
10937 buf[0] = 0x00;
10938 ret = usb_microdia_control_write(dev, 0x10c8, buf, 1);
10939 buf[0] = 0x80;
10940 ret = usb_microdia_control_write(dev, 0x1020, buf, 1);
10942 return ret;
10946 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
10948 * @param dev
10950 * @returns 0 (ok) or -1 (error)
10952 * @author Comer352l
10954 * Windows driver version: 5.7.23.000
10955 * Windows versions: 2000 and XP
10956 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
10957 * All logs were made using AMCAP with 640x480, RGB24
10959 int microdia_6270_stop_stream(struct usb_microdia *dev)
10961 int ret = 0;
10962 int retI2C = 0;
10963 __u8 buf[3];
10965 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS) {
10966 buf[0] = 0x20;
10967 ret += usb_microdia_control_write(dev, 0x1007, buf, 1); /* URB 3541 */
10968 buf[0] = 0x20;
10969 ret += usb_microdia_control_write(dev, 0x1006, buf, 1); /* URB 3542 */
10970 /* => These two writes seem to cause the cam to stop sending isochronus USB messages */
10972 buf[0] = 0x01;
10973 ret += usb_microdia_control_write(dev, 0x1061, buf, 1); /* URB 3544 */
10974 if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS) {
10975 buf[0] = 0x60;
10976 ret += usb_microdia_control_write(dev, 0x1007, buf, 1); /* URB 3541 */
10977 buf[0] = 0x60;
10978 ret += usb_microdia_control_write(dev, 0x1006, buf, 1); /* URB 3542 */
10980 if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS) {
10981 /* Write to sensor register 0x07: Output Control */
10982 buf[0] = 0x00; buf[1] = 0x00; /* stop sensor readout, normal operation */
10983 retI2C += sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x07, dev->sensor_flags, buf);
10985 buf[0] = 0x38; /* ALEX: 0x3c */
10986 ret += usb_microdia_control_write(dev, 0x1000, buf, 1); /* URB 3545 */
10987 buf[0] = 0x6d; /* ALEX: 0xec; FRANK: also 0x6c */
10988 ret += usb_microdia_control_write(dev, 0x11b8, buf, 1); /* URB 3546 */
10989 buf[0] = 0x38; buf[1] = 0xe7; buf[2] = 0x11;
10990 ret += usb_microdia_control_write(dev, 0x1000, buf, 3); /* URB 3547 */
10992 /* INTERRUPT COMMING BACK (URB 2227) */
10993 /* SELECT ALTERNATE SETTINGS (URB 3548) */
10994 /* INTERRUPT GOING DOWN (URB 3549) */
10996 buf[0] = 0x00;
10997 ret += usb_microdia_control_write(dev, 0x1066, buf, 1); /* URB 3550 */
10999 if (ret < 9) {
11000 UDIA_INFO("One ore more errors occured while stopping stream !\n");
11001 return -1;
11002 } else {
11003 return 0;
11007 int microdia_627b_stop_stream(struct usb_microdia *dev)
11009 int ret = 0;
11010 __u16 reg;
11011 __u8 buf[3];
11013 reg = 0x1007;
11014 buf[0] = 0x60;
11015 ret = usb_microdia_control_write(dev, reg, buf, 1);
11016 if (ret < 0)
11017 goto err;
11019 reg = 0x1006;
11020 buf[0] = 0x20;
11021 ret = usb_microdia_control_write(dev, reg, buf, 1);
11022 if (ret < 0)
11023 goto err;
11026 //reg = 0x1007;
11027 //buf[0] = 0x60;
11028 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11029 //if(ret < 0) goto err;
11031 //reg = 0x1006;
11032 //buf[0] = 0x20;
11033 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11034 //if(ret < 0) goto err;
11037 reg = 0x1061;
11038 buf[0] = 0x01;
11039 ret = usb_microdia_control_write(dev, reg, buf, 1);
11040 if (ret < 0)
11041 goto err;
11044 //reg = 0x1007;
11045 //buf[0] = 0x60;
11046 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11047 //if(ret < 0) goto err;
11049 //reg = 0x1006;
11050 //buf[0] = 0x20;
11051 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11052 //if(ret < 0) goto err;
11055 reg = 0x1000;
11056 buf[0] = 0x38;
11057 ret = usb_microdia_control_write(dev, reg, buf, 1);
11058 if (ret < 0)
11059 goto err;
11061 reg = 0x11b8;
11062 buf[0] = 0x6b;
11063 ret = usb_microdia_control_write(dev, reg, buf, 1);
11064 if (ret < 0)
11065 goto err;
11067 reg = 0x1000;
11068 buf[0] = 0x38; buf[1] = 0xe7; buf[2] = 0x11;
11069 ret = usb_microdia_control_write(dev, reg, buf, 3);
11070 if (ret < 0)
11071 goto err;
11073 reg = 0x1066;
11074 buf[0] = 0x00;
11075 ret = usb_microdia_control_write(dev, reg, buf, 1);
11076 if (ret < 0)
11077 goto err;
11079 return ret;
11080 err:
11081 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg, ret);
11082 return ret;
11086 * @brief From UsbSnoop-plugin-parsed.log
11088 * @param dev
11090 * @returns 0 (OK) or <0 (Error)
11092 * @author Vincent, Kuzja
11094 int microdia_6288_stop_stream(struct usb_microdia *dev)
11096 int ret = 0;
11097 __u16 reg;
11098 __u8 buf[8];
11100 reg = 0x1061 ;
11101 buf[0] = 0x01;
11102 ret = usb_microdia_control_write(dev, reg, buf, 1);
11103 if (ret < 0)
11104 goto err;
11106 reg = 0x1000 ;
11107 buf[0] = 0x38;
11108 ret = usb_microdia_control_write(dev, reg, buf, 1);
11109 if (ret < 0)
11110 goto err;
11112 reg = 0x11b8 ;
11113 buf[0] = 0xe9;
11114 ret = usb_microdia_control_write(dev, reg, buf, 1);
11115 if (ret < 0)
11116 goto err;
11118 reg = 0x1007 ;
11119 buf[0] = 0x20;
11120 ret = usb_microdia_control_write(dev, reg, buf, 1);
11121 if (ret < 0)
11122 goto err;
11124 reg = 0x1006 ;
11125 buf[0] = 0x20;
11126 ret = usb_microdia_control_write(dev, reg, buf, 1);
11127 if (ret < 0)
11128 goto err;
11130 reg = 0x1000 ;
11131 buf[0] = 0x98; buf[1] = 0xe7; buf[2] = 0x11;
11132 ret = usb_microdia_control_write(dev, reg, buf, 3);
11133 if (ret < 0)
11134 goto err;
11136 reg = 0x1066 ;
11137 buf[0] = 0x00;
11138 ret = usb_microdia_control_write(dev, reg, buf, 1);
11139 if (ret < 0)
11140 goto err;
11142 return 0;
11143 err:
11144 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg, ret);
11145 return ret;
11148 /**
11149 * @brief From UsbSnoop-plugin-parsed.log
11151 * @param dev
11153 * @returns 0 if all OK
11155 * This function stops the video stream for microdia 6128
11156 * Bridge SN9C325 + OM6802 CMOS sensor
11157 * note: comments are my observations so they could be wrong
11159 int microdia_6128_stop_stream(struct usb_microdia *dev)
11161 int ret = 0;
11162 __u8 data;
11164 ret += usb_microdia_control_read(dev, 0x00, &data, 1);
11166 // Stop stream command
11167 data = 0x00;
11168 ret += usb_microdia_control_write(dev, 0x01, &data, 1);
11170 data = 0x00;
11171 ret += usb_microdia_control_write(dev, 0xf1, &data, 1);
11173 data = 0x01;
11174 ret += usb_microdia_control_write(dev, 0xf1, &data, 1);
11176 if(ret != 4)
11177 UDIA_DEBUG("Some read or write were not successful in Stop Stream\n");
11179 return 0;
11184 int microdia_624f_set_exposure(struct usb_microdia *dev)
11186 int ret = 0;
11187 __u8 v1 = (dev->vsettings.exposure >> 4) & 0xff;
11188 __u8 v2 = dev->vsettings.exposure >> 12;
11190 ret |= sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, 0x2d,
11191 dev->sensor_flags, &v1);
11193 ret |= sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, 0x2e,
11194 dev->sensor_flags, &v2);
11196 return ret;
11199 int microdia_624f_flip_detect(struct usb_microdia *dev)
11201 int ret = 0;
11202 __u8 val;
11204 ret = usb_microdia_control_read(dev, 0x1009, &val, 1);
11205 if (ret < 0) return -EAGAIN;
11206 if (val & 0x01) {
11207 dev->vsettings.vflip = 1;
11209 else {
11210 dev->vsettings.vflip = 0;
11213 return ret;
11216 int microdia_6260_flip_detect(struct usb_microdia *dev)
11218 const __u8 flip_bit = 0x01;
11219 int ret = 0;
11220 __u8 val;
11221 static __u8 flip_reg = flip_bit;
11222 __u8 vflip;
11224 ret = usb_microdia_control_read(dev, 0x1009, &val, 1);
11225 if (ret < 0)
11226 return -EAGAIN;
11227 if (flip_reg != (val & flip_bit)) {
11228 if (val & flip_bit)
11229 vflip = 0;
11230 else
11231 vflip = 1;
11232 ret = ov7670_auto_flip(dev, vflip);
11233 flip_reg = (val & flip_bit);
11236 return ret;