3 * @author Nicolas VIVIEN
7 * @brief Driver for Microdia USB video camera
9 * @note Copyright (C) Nicolas VIVIEN
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the Free Software
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 #include <linux/errno.h>
29 #include <linux/string.h>
39 int dev_microdia_init_camera(struct usb_microdia
*dev
)
44 int dev_microdia_camera_on(struct usb_microdia
*dev
)
47 struct usb_device
*udev
= dev
->udev
;
49 ret
= usb_set_interface(udev
, 0, 8);
52 UDIA_ERROR("usb_set_interface failed !\n");
57 int dev_microdia_camera_off(struct usb_microdia
*dev
)
60 struct usb_device
*udev
= dev
->udev
;
62 ret
= usb_set_interface(udev
, 0, 0);
65 UDIA_ERROR("usb_set_interface failed !\n");
70 int dev_microdia_camera_settings(struct usb_microdia
*dev
)
72 dev_microdia_camera_set_contrast(dev
);
73 dev_microdia_camera_set_brightness(dev
);
74 dev_microdia_camera_set_gamma(dev
);
75 dev_microdia_camera_set_exposure(dev
);
76 dev_microdia_camera_set_hvflip(dev
);
77 dev_microdia_camera_set_sharpness(dev
);
78 dev_microdia_camera_set_auto_exposure(dev
);
79 dev_microdia_camera_set_auto_whitebalance(dev
);
83 int dev_microdia_camera_set_contrast(struct usb_microdia
*dev
)
86 if(dev
&& dev
->set_contrast
)
87 ret
= dev
->set_contrast(dev
);
91 int dev_microdia_camera_set_brightness(struct usb_microdia
*dev
)
94 if(dev
&& dev
->set_brightness
)
95 ret
= dev
->set_brightness(dev
);
99 int dev_microdia_camera_set_gamma(struct usb_microdia
*dev
)
102 if(dev
&& dev
->set_gamma
)
103 ret
= dev
->set_gamma(dev
);
107 int dev_microdia_camera_set_exposure(struct usb_microdia
*dev
)
109 if (dev
->set_exposure
!= NULL
) {
110 return dev
->set_exposure(dev
);
115 int dev_microdia_camera_set_hvflip(struct usb_microdia
*dev
)
118 if(dev
&& dev
->set_hvflip
)
119 ret
= dev
->set_hvflip(dev
);
124 int dev_microdia_camera_set_sharpness(struct usb_microdia
*dev
)
127 if(dev
&& dev
->set_sharpness
)
128 ret
= dev
->set_sharpness(dev
);
133 int dev_microdia_camera_set_auto_exposure(struct usb_microdia
*dev
)
136 if(dev
&& dev
->set_auto_exposure
)
137 ret
= dev
->set_auto_exposure(dev
);
142 int dev_microdia_camera_set_auto_whitebalance(struct usb_microdia
*dev
)
145 if(dev
&& dev
->set_auto_whitebalance
)
146 ret
= dev
->set_auto_whitebalance(dev
);
153 * @brief From UsbSnoop-plugin-parsed.log
159 int dev_microdia_initialize_device(struct usb_microdia
*dev
)
163 if(dev
&& dev
->initialize
)
164 ret
= dev
->initialize(dev
);
170 * @brief From init-physical-replug.log
178 * For SN9C201 with MI1300.
181 int microdia_6240_initialize(struct usb_microdia
*dev
)
186 UDIA_INFO("Initializing camera...\n");
188 ret
= usb_microdia_control_read(dev
, 0x130d, &buf
, 1); // URB 5 0x81
189 UDIA_INFO("...init: read %x, ret = %d\n",buf
,ret
);
191 ret
+= usb_microdia_control_read(dev
, 0x1040, &buf
, 1); // URB 6 0xe4
192 UDIA_INFO("...init: read %x, ret = %d\n",buf
,ret
);
195 ret
+= usb_microdia_control_write(dev
, 0x10c8, &buf
, 1); // URB 7
196 UDIA_INFO("...init: write %x, ret = %d\n",buf
,ret
);
198 // Interrupt going down (URB 8)
201 ret
+= usb_microdia_control_write(dev
, 0x1020, &buf
, 1); // URB 9
202 UDIA_INFO("...init: write %x, ret = %d\n",buf
,ret
);
205 UDIA_ERROR("One ore more errors occured during initialization !\n");
213 * @brief From start.log (14 jun 2008)
221 * For SN9C201 with MI1300.
224 int microdia_6240_start_stream(struct usb_microdia
*dev
)
233 0x16, 0x00, 0x2d, 0x00, 0x08, 0x00, 0xf1, 0x0f, 0xd3, 0x0f, 0x3c, 0x00, 0x36, 0x00, 0xce, 0x0f,
234 0xfc, 0x0f, 0x00, 0x00, 0x00};
236 0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d, 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
237 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d, 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
238 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a, 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
239 0x4f, 0x54, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60, 0x64, 0x5c, 0x54, 0x64, 0x4b, 0x54, 0x58, 0x54};
241 UDIA_INFO("Starting camera data stream...\n");
243 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
244 // URB 10 <<< GETTING SELECT_INTERFACE Interface: AlternateSetting = 8
245 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
248 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);// URB 12
249 if(ret
< 0) goto err
;
251 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
252 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
256 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);// URB 14
257 if(ret
< 0) goto err
;
260 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
261 if(ret
< 0) goto err
;
264 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
265 if(ret
< 0) goto err
;
268 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // cf
269 if(ret
< 0) goto err
;
273 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
274 if(ret
< 0) goto err
;
277 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
278 if(ret
< 0) goto err
;
282 ret
= usb_microdia_control_read(dev
, reg
, buf24
, 7); // << 20 00 ff 81 00 00 00
283 if(ret
< 0) goto err
;
286 buf24
[0] = 0x80; buf24
[1] = 0xa0;
287 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 2);
288 if(ret
< 0) goto err
;
291 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
292 if(ret
< 0) goto err
;
295 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
296 if(ret
< 0) goto err
;
298 buf24
[0] = 0x40; buf24
[1] = 0x30; buf24
[2] = 0x20; buf24
[3] = 0x10;
300 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
301 if(ret
< 0) goto err
;
303 buf24
[0] = 0x80; buf24
[1] = 0x5d; buf24
[2] = 0x00; buf24
[3] = 0x00;
304 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x00;
306 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 9);
307 if(ret
< 0) goto err
;
309 buf24
[0] = 0x45; buf24
[1] = 0x18; buf24
[2] = 0x00; buf24
[3] = 0x30;
310 buf24
[4] = 0x00; buf24
[5] = 0x09; buf24
[6] = 0x00; buf24
[7] = 0xed;
311 buf24
[8] = 0x0f; buf24
[9] = 0xda; buf24
[10] = 0x0f; buf24
[11] = 0x3a;
312 buf24
[12] = 0x00; buf24
[13] = 0x3a; buf24
[14] = 0x00; buf24
[15] = 0xd0;
313 buf24
[16] = 0x0f; buf24
[17] = 0xf7; buf24
[18] = 0x0f; buf24
[19] = 0x00;
314 buf24
[20] = 0x00; buf24
[21] = 0x00; buf24
[22] = 0x60; buf24
[23] = 0x0a;
315 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 24);
316 if(ret
< 0) goto err
;
318 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x00;
319 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 3);
320 if(ret
< 0) goto err
;
322 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
324 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
325 if(ret
< 0) goto err
;
327 buf24
[0] = 0x06; buf24
[1] = 0x4c; buf24
[2] = 0x08;
328 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 3);
329 if(ret
< 0) goto err
;
333 buf24
[0] = 0x00; buf24
[1] = 0x20; buf24
[2] = 0x20; buf24
[3] = 0x20;
334 buf24
[4] = 0x20; buf24
[5] = 0x00; buf24
[6] = 0x24; buf24
[7] = 0x3b;
335 buf24
[8] = 0x4f; buf24
[9] = 0x61; buf24
[10] = 0x71; buf24
[11] = 0x80;
336 buf24
[12] = 0x8f; buf24
[13] = 0x9d; buf24
[14] = 0xab; buf24
[15] = 0xb8;
338 buf24
[16] = 0xc4; buf24
[17] = 0xd1; buf24
[18] = 0xdd; buf24
[19] = 0xe9;
339 buf24
[20] = 0xf4; buf24
[21] = 0xff;
340 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 22);
341 if(ret
< 0) goto err
;
344 buf24
[0] = 0x00; buf24
[1] = 0x00;
345 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 2);
346 if(ret
< 0) goto err
;
349 buf24
[0] = 0x60; buf24
[1] = 0x28; buf24
[2] = 0x00; buf24
[3] = 0x08;
350 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x00;
352 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 9);
353 if(ret
< 0) goto err
;
357 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
358 if(ret
< 0) goto err
;
362 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
363 if(ret
< 0) goto err
;
368 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
369 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
370 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
371 if(ret
< 0) goto err
;
373 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
374 if(ret
< 0) goto err
;
375 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
376 if(ret
< 0) goto err
;
378 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x0d; buf24
[3] = 0x00;
379 buf24
[4] = 0x01; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
380 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
381 if(ret
< 0) goto err
;
383 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
384 if(ret
< 0) goto err
;
385 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
386 if(ret
< 0) goto err
;
388 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x0d; buf24
[3] = 0x00;
389 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
390 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
391 if(ret
< 0) goto err
;
393 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
394 if(ret
< 0) goto err
;
395 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
396 if(ret
< 0) goto err
;
398 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x01; buf24
[3] = 0x00;
399 buf24
[4] = 0x0e; buf24
[5] = 0x00; buf24
[6] = 0x14; buf24
[7] = 0x10;
400 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
401 if(ret
< 0) goto err
;
404 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
405 if(ret
< 0) goto err
;
406 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
407 if(ret
< 0) goto err
;
409 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x03; buf24
[3] = 0x03;
410 buf24
[4] = 0xc1; buf24
[5] = 0x05; buf24
[6] = 0x01; buf24
[7] = 0x10;
411 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
412 if(ret
< 0) goto err
;
414 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
415 if(ret
< 0) goto err
;
416 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
417 if(ret
< 0) goto err
;
419 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x05; buf24
[3] = 0x00;
420 buf24
[4] = 0x83; buf24
[5] = 0x00; buf24
[6] = 0x06; buf24
[7] = 0x10;
421 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
422 if(ret
< 0) goto err
;
424 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
425 if(ret
< 0) goto err
;
426 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
427 if(ret
< 0) goto err
;
429 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x0d; buf24
[3] = 0x00;
430 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
431 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
432 if(ret
< 0) goto err
;
434 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
435 if(ret
< 0) goto err
;
436 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
437 if(ret
< 0) goto err
;
439 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x09; buf24
[3] = 0x00;
440 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
441 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
442 if(ret
< 0) goto err
;
444 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
445 if(ret
< 0) goto err
;
446 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
447 if(ret
< 0) goto err
;
449 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x0b; buf24
[3] = 0x00;
450 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
451 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
452 if(ret
< 0) goto err
;
454 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
455 if(ret
< 0) goto err
;
456 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
457 if(ret
< 0) goto err
;
459 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x11; buf24
[3] = 0x00;
460 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
461 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
462 if(ret
< 0) goto err
;
464 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
465 if(ret
< 0) goto err
;
466 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
467 if(ret
< 0) goto err
;
470 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x1e; buf24
[3] = 0x80;
471 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
472 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
473 if(ret
< 0) goto err
;
475 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
476 if(ret
< 0) goto err
;
477 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
478 if(ret
< 0) goto err
;
480 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
481 buf24
[4] = 0x05; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
482 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
483 if(ret
< 0) goto err
;
485 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
486 if(ret
< 0) goto err
;
487 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
488 if(ret
< 0) goto err
;
490 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2b; buf24
[3] = 0x00;
491 buf24
[4] = 0x08; buf24
[5] = 0x00; buf24
[6] = 0x10; buf24
[7] = 0x10;
492 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
493 if(ret
< 0) goto err
;
495 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
496 if(ret
< 0) goto err
;
497 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
498 if(ret
< 0) goto err
;
500 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2d; buf24
[3] = 0x00;
501 buf24
[4] = 0x14; buf24
[5] = 0x00; buf24
[6] = 0x08; buf24
[7] = 0x10;
502 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
503 if(ret
< 0) goto err
;
505 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
506 if(ret
< 0) goto err
;
507 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
508 if(ret
< 0) goto err
;
511 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x33; buf24
[3] = 0x00;
512 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
513 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
514 if(ret
< 0) goto err
;
516 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 94
517 if(ret
< 0) goto err
;
520 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x5f; buf24
[3] = 0x89;
521 buf24
[4] = 0x04; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
522 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
523 if(ret
< 0) goto err
;
525 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
526 if(ret
< 0) goto err
;
527 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
528 if(ret
< 0) goto err
;
530 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x60; buf24
[3] = 0x00;
531 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
532 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
533 if(ret
< 0) goto err
;
535 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
536 if(ret
< 0) goto err
;
537 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
538 if(ret
< 0) goto err
;
541 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x62; buf24
[3] = 0x04;
542 buf24
[4] = 0x98; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
543 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
544 if(ret
< 0) goto err
;
546 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
547 if(ret
< 0) goto err
;
548 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
549 if(ret
< 0) goto err
;
551 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x68; buf24
[3] = 0x00;
552 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
553 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
554 if(ret
< 0) goto err
;
556 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
557 if(ret
< 0) goto err
;
558 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
559 if(ret
< 0) goto err
;
566 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 5d
567 if(ret
< 0) goto err
;
569 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
570 if(ret
< 0) goto err
;
574 buf24
[0] = 0x90; buf24
[1] = 0x50; buf24
[2] = 0x00; buf24
[3] = 0x00;
575 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
576 for(i
=93; i
<=108; i
++){
577 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
578 if(ret
< 0) goto err
;
579 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 9c
580 if(ret
< 0) goto err
;
582 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
583 if(ret
< 0) goto err
;
584 buf24
[0] = 0x92; // change only 1st value
586 for(i
=110; i
<=126; i
++){
587 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
588 if(ret
< 0) goto err
;
589 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 9e
590 if(ret
< 0) goto err
;
595 ret
= usb_microdia_control_read(dev
, reg
, buf24
, 5); // << ff ff ff ff ff
596 if(ret
< 0) goto err
;
600 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
601 if(ret
< 0) goto err
;
605 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
606 if(ret
< 0) goto err
;
608 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
609 if(ret
< 0) goto err
;
613 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
614 if(ret
< 0) goto err
;
616 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
617 if(ret
< 0) goto err
;
619 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
620 if(ret
< 0) goto err
;
624 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
625 if(ret
< 0) goto err
;
630 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
631 if(ret
< 0) goto err
;
633 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
634 if(ret
< 0) goto err
;
636 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
637 if(ret
< 0) goto err
;
639 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
640 if(ret
< 0) goto err
;
645 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
646 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
647 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
648 if(ret
< 0) goto err
;
650 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
651 if(ret
< 0) goto err
;
652 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
653 if(ret
< 0) goto err
;
658 buf24
[0] = 0x02; buf24
[1] = 0x00; buf24
[2] = 0x02; buf24
[3] = 0x00;
659 buf24
[4] = 0x28; buf24
[5] = 0x3c;
660 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 6);
661 if(ret
< 0) goto err
;
664 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
666 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
667 if(ret
< 0) goto err
;
671 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
672 if(ret
< 0) goto err
;
675 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x6a; buf24
[3] = 0x50;
676 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
677 if(ret
< 0) goto err
;
680 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x50; buf24
[3] = 0x3c;
681 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
682 if(ret
< 0) goto err
;
686 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
687 if(ret
< 0) goto err
;
691 for(i
=148; i
<=149; i
++){
692 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
693 if(ret
< 0) goto err
;
699 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
700 if(ret
< 0) goto err
;
704 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
705 if(ret
< 0) goto err
;
709 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
710 if(ret
< 0) goto err
;
716 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
717 if(ret
< 0) goto err
;
718 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 38
719 if(ret
< 0) goto err
;
721 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
722 if(ret
< 0) goto err
;
723 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 39
724 if(ret
< 0) goto err
;
726 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
727 if(ret
< 0) goto err
;
728 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 3a
729 if(ret
< 0) goto err
;
731 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
732 if(ret
< 0) goto err
;
733 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << bb
734 if(ret
< 0) goto err
;
736 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
737 if(ret
< 0) goto err
;
738 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 3c
739 if(ret
< 0) goto err
;
741 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
742 if(ret
< 0) goto err
;
749 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x06; buf24
[3] = 0x00;
750 buf24
[4] = 0xf2; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
751 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
752 if(ret
< 0) goto err
;
754 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
755 if(ret
< 0) goto err
;
756 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
757 if(ret
< 0) goto err
;
759 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x05; buf24
[3] = 0x00;
760 buf24
[4] = 0x13; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
761 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
762 if(ret
< 0) goto err
;
764 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
765 if(ret
< 0) goto err
;
766 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
767 if(ret
< 0) goto err
;
774 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
775 if(ret
< 0) goto err
;
779 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
780 if(ret
< 0) goto err
;
782 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
783 if(ret
< 0) goto err
;
785 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
786 if(ret
< 0) goto err
;
788 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
789 if(ret
< 0) goto err
;
793 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
794 if(ret
< 0) goto err
;
799 buf24
[0] = 0x08; buf24
[1] = 0x2e; buf24
[2] = 0x55; buf24
[3] = 0x6f;
800 buf24
[4] = 0x7f; buf24
[5] = 0x8d; buf24
[6] = 0x9a; buf24
[7] = 0xa6;
801 buf24
[8] = 0xb1; buf24
[9] = 0xbb; buf24
[10] = 0xc5; buf24
[11] = 0xce;
802 buf24
[12] = 0xd7; buf24
[13] = 0xdf; buf24
[14] = 0xe8; buf24
[15] = 0xef;
804 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 17);
805 if(ret
< 0) goto err
;
810 for(i
=0; i
<21; i
++) // zeroes
812 for(i
=177; i
<=184; i
++){
813 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 21);
814 if(ret
< 0) goto err
;
817 ret
= usb_microdia_control_write(dev
, reg
, buf10e1
, 21);
818 if(ret
< 0) goto err
;
823 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
824 if(ret
< 0) goto err
;
827 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
828 if(ret
< 0) goto err
;
832 ret
= usb_microdia_control_write(dev
, reg
, buf10e1
, 21);
833 if(ret
< 0) goto err
;
838 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
839 if(ret
< 0) goto err
;
842 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
843 if(ret
< 0) goto err
;
846 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
847 if(ret
< 0) goto err
;
849 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
850 if(ret
< 0) goto err
;
854 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
855 if(ret
< 0) goto err
;
858 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x00; buf24
[3] = 0x00;
859 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
860 if(ret
< 0) goto err
;
865 for(i
=0; i
<48; i
++) buf64
[i
] = 0; // zeroes
866 ret
= usb_microdia_control_write(dev
, reg
, buf64
, 48);
867 if(ret
< 0) goto err
;
873 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
874 if(ret
< 0) goto err
;
876 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
877 if(ret
< 0) goto err
;
879 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
880 if(ret
< 0) goto err
;
882 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
883 if(ret
< 0) goto err
;
888 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
889 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
890 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
891 if(ret
< 0) goto err
;
893 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
894 if(ret
< 0) goto err
;
895 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
896 if(ret
< 0) goto err
;
901 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
902 if(ret
< 0) goto err
;
907 //buf24[0] = 0xb0; buf24[1] = 0x5d; buf24[2] = 0x20; buf24[3] = 0x11;
908 //buf24[4] = 0x1d; buf24[5] = 0x00; buf24[6] = 0x00; buf24[7] = 0x10;
909 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
910 if(ret
< 0) goto err
;
912 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
913 if(ret
< 0) goto err
;
914 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
915 if(ret
< 0) goto err
;
920 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
921 if(ret
< 0) goto err
;
926 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x09; buf24
[3] = 0x03;
927 buf24
[4] = 0xe8; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
928 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
929 if(ret
< 0) goto err
;
931 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
932 if(ret
< 0) goto err
;
933 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
934 if(ret
< 0) goto err
;
936 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
937 buf24
[4] = 0x03; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
938 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
939 if(ret
< 0) goto err
;
941 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
942 if(ret
< 0) goto err
;
943 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
944 if(ret
< 0) goto err
;
947 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2b; buf24
[3] = 0x00;
948 buf24
[4] = 0x10; buf24
[5] = 0x00; buf24
[6] = 0x10; buf24
[7] = 0x10;
949 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
950 if(ret
< 0) goto err
;
952 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
953 if(ret
< 0) goto err
;
954 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
955 if(ret
< 0) goto err
;
957 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2d; buf24
[3] = 0x00;
958 buf24
[4] = 0x10; buf24
[5] = 0x00; buf24
[6] = 0x10; buf24
[7] = 0x10;
959 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
960 if(ret
< 0) goto err
;
962 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
963 if(ret
< 0) goto err
;
964 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
965 if(ret
< 0) goto err
;
967 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x33; buf24
[3] = 0x00;
968 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
969 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
970 if(ret
< 0) goto err
;
972 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 94
973 if(ret
< 0) goto err
;
975 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
976 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
977 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
978 if(ret
< 0) goto err
;
980 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
981 if(ret
< 0) goto err
;
982 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
983 if(ret
< 0) goto err
;
989 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
990 if(ret
< 0) goto err
;
992 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
993 if(ret
< 0) goto err
;
995 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
996 if(ret
< 0) goto err
;
998 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
999 if(ret
< 0) goto err
;
1003 buf24
[0] = 0x2d; buf24
[1] = 0x2d; buf24
[2] = 0x3a; buf24
[3] = 0x05;
1004 buf24
[4] = 0x04; buf24
[5] = 0x3f;
1005 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 6);
1006 if(ret
< 0) goto err
;
1008 buf24
[0] = 0x28; buf24
[1] = 0xd8; buf24
[2] = 0x14; buf24
[3] = 0xec;
1009 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1010 if(ret
< 0) goto err
;
1012 buf24
[0] = 0x32; buf24
[1] = 0xdd; buf24
[2] = 0x2d; buf24
[3] = 0xdd;
1013 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1014 if(ret
< 0) goto err
;
1019 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
1020 buf24
[4] = 0x03; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1021 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1022 if(ret
< 0) goto err
;
1024 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1025 if(ret
< 0) goto err
;
1026 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1027 if(ret
< 0) goto err
;
1029 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2c; buf24
[3] = 0x00;
1030 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x1d; buf24
[7] = 0x10;
1031 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1032 if(ret
< 0) goto err
;
1034 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
1035 if(ret
< 0) goto err
;
1036 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
1037 if(ret
< 0) goto err
;
1039 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x30; buf24
[3] = 0x00;
1040 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1041 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1042 if(ret
< 0) goto err
;
1044 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 94
1045 if(ret
< 0) goto err
;
1047 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
1048 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1049 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1050 if(ret
< 0) goto err
;
1052 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1053 if(ret
< 0) goto err
;
1054 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1055 if(ret
< 0) goto err
;
1060 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1061 if(ret
< 0) goto err
;
1064 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1065 if(ret
< 0) goto err
;
1068 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1069 if(ret
< 0) goto err
;
1072 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1073 if(ret
< 0) goto err
;
1077 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1078 if(ret
< 0) goto err
;
1080 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1081 if(ret
< 0) goto err
;
1084 // URB 249 (see also 509/510)
1086 ret
= usb_microdia_control_write(dev
, reg
, buf1100
, 64);
1087 if(ret
< 0) goto err
;
1092 buf64
[0] = 0x0d; buf64
[1] = 0x11; buf64
[2] = 0x11; buf64
[3] = 0x15;
1093 buf64
[4] = 0x11; buf64
[5] = 0x15; buf64
[6] = 0x26; buf64
[7] = 0x15;
1094 buf64
[8] = 0x15; buf64
[9] = 0x26; buf64
[10] = 0x54; buf64
[11] = 0x36;
1095 buf64
[12] = 0x2e; buf64
[13] = 0x36; buf64
[14] = 0x54; buf64
[15] = 0x54;
1096 // 00000010: .. 00000030: 0x54
1097 for(i
=16; i
<=63; i
++) buf64
[i
] = 0x54;
1098 ret
= usb_microdia_control_write(dev
, reg
, buf64
, 64);
1099 if(ret
< 0) goto err
;
1104 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1105 if(ret
< 0) goto err
;
1107 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1108 if(ret
< 0) goto err
;
1112 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1113 if(ret
< 0) goto err
;
1119 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1120 if(ret
< 0) goto err
;
1122 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1123 if(ret
< 0) goto err
;
1125 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1126 if(ret
< 0) goto err
;
1128 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1129 if(ret
< 0) goto err
;
1133 buf24
[0] = 0x02; buf24
[1] = 0x00; buf24
[2] = 0x02; buf24
[3] = 0x00;
1134 buf24
[4] = 0x28; buf24
[5] = 0x3c;
1135 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 6);
1136 if(ret
< 0) goto err
;
1139 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
1141 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
1142 if(ret
< 0) goto err
;
1146 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1147 if(ret
< 0) goto err
;
1150 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x6a; buf24
[3] = 0x50;
1151 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1152 if(ret
< 0) goto err
;
1154 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x50; buf24
[3] = 0x3c;
1155 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1156 if(ret
< 0) goto err
;
1160 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1161 if(ret
< 0) goto err
;
1164 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1165 if(ret
< 0) goto err
;
1168 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1169 if(ret
< 0) goto err
;
1172 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1173 if(ret
< 0) goto err
;
1176 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1177 if(ret
< 0) goto err
;
1180 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1181 if(ret
< 0) goto err
;
1184 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1185 if(ret
< 0) goto err
;
1187 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1188 if(ret
< 0) goto err
;
1191 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1192 if(ret
< 0) goto err
;
1195 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1196 if(ret
< 0) goto err
;
1199 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1200 if(ret
< 0) goto err
;
1206 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1207 if(ret
< 0) goto err
;
1208 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 38
1209 if(ret
< 0) goto err
;
1211 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1212 if(ret
< 0) goto err
;
1213 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 39
1214 if(ret
< 0) goto err
;
1216 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1217 if(ret
< 0) goto err
;
1218 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 3a
1219 if(ret
< 0) goto err
;
1221 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1222 if(ret
< 0) goto err
;
1223 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << bb
1224 if(ret
< 0) goto err
;
1226 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1227 if(ret
< 0) goto err
;
1228 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 3c
1229 if(ret
< 0) goto err
;
1231 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1232 if(ret
< 0) goto err
;
1239 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x06; buf24
[3] = 0x00;
1240 buf24
[4] = 0xf2; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1241 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1242 if(ret
< 0) goto err
;
1244 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1245 if(ret
< 0) goto err
;
1246 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1247 if(ret
< 0) goto err
;
1249 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x05; buf24
[3] = 0x00;
1250 buf24
[4] = 0x13; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1251 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1252 if(ret
< 0) goto err
;
1254 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1255 if(ret
< 0) goto err
;
1256 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1257 if(ret
< 0) goto err
;
1259 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x00; buf24
[3] = 0x00;
1260 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1261 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1262 if(ret
< 0) goto err
;
1264 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 94
1265 if(ret
< 0) goto err
;
1267 buf24
[0] = 0xa2; buf24
[1] = 0x5d; buf24
[2] = 0x00; buf24
[3] = 0x00;
1268 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1269 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1270 if(ret
< 0) goto err
;
1272 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << a2
1273 if(ret
< 0) goto err
;
1274 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << a6
1275 if(ret
< 0) goto err
;
1282 ret
= usb_microdia_control_read(dev
, reg
, buf24
, 5); // << 00 00 00 84 31
1283 if(ret
< 0) goto err
;
1288 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1289 if(ret
< 0) goto err
;
1291 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1292 if(ret
< 0) goto err
;
1296 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
1297 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1298 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1299 if(ret
< 0) goto err
;
1301 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1302 if(ret
< 0) goto err
;
1303 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1304 if(ret
< 0) goto err
;
1309 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1310 if(ret
< 0) goto err
;
1313 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1314 if(ret
< 0) goto err
;
1317 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1318 if(ret
< 0) goto err
;
1321 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1322 if(ret
< 0) goto err
;
1325 buf24
[0] = 0x98; buf24
[1] = 0xef; buf24
[2] = 0x11;
1326 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 3);
1327 if(ret
< 0) goto err
;
1329 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1330 // URB 307 <<< GETTING SELECT_INTERFACE Interface: AlternateSetting = 0
1331 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1335 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1336 if(ret
< 0) goto err
;
1338 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1339 // URB 310 <<< GETTING SELECT_INTERFACE Interface: AlternateSetting = 8
1340 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1343 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1344 if(ret
< 0) goto err
;
1346 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1347 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:
1352 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1353 if(ret
< 0) goto err
;
1356 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1357 if(ret
< 0) goto err
;
1360 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1361 if(ret
< 0) goto err
;
1363 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << ef
1364 if(ret
< 0) goto err
;
1366 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1367 if(ret
< 0) goto err
;
1370 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1371 if(ret
< 0) goto err
;
1375 ret
= usb_microdia_control_read(dev
, reg
, buf24
, 7); // << a0 00 ff 81 00 00 00
1376 if(ret
< 0) goto err
;
1378 buf24
[0] = 0x80; buf24
[1] = 0xa0;
1379 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 2);
1380 if(ret
< 0) goto err
;
1384 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1385 if(ret
< 0) goto err
;
1388 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1389 if(ret
< 0) goto err
;
1392 buf24
[0] = 0x40; buf24
[1] = 0x30; buf24
[2] = 0x20; buf24
[3] = 0x10;
1394 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
1395 if(ret
< 0) goto err
;
1398 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
1399 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1401 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 9);
1402 if(ret
< 0) goto err
;
1407 buf24
[0] = 0x45; buf24
[1] = 0x18; buf24
[2] = 0x00; buf24
[3] = 0x30;
1408 buf24
[4] = 0x00; buf24
[5] = 0x09; buf24
[6] = 0x00; buf24
[7] = 0xed;
1409 buf24
[8] = 0x0f; buf24
[9] = 0xda; buf24
[10] = 0x0f; buf24
[11] = 0x3a;
1410 buf24
[12] = 0x00; buf24
[13] = 0x3a; buf24
[14] = 0x00; buf24
[15] = 0xd0;
1412 buf24
[16] = 0x0f; buf24
[17] = 0xf7; buf24
[18] = 0x0f; buf24
[19] = 0x10;
1413 buf24
[20] = 0x00; buf24
[21] = 0x00; buf24
[22] = 0x60; buf24
[23] = 0x0a;
1414 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 24);
1415 if(ret
< 0) goto err
;
1418 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x00;
1419 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 3);
1420 if(ret
< 0) goto err
;
1423 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
1425 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
1426 if(ret
< 0) goto err
;
1429 buf24
[0] = 0x06; buf24
[1] = 0x4c; buf24
[2] = 0x08;
1430 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 3);
1431 if(ret
< 0) goto err
;
1436 buf24
[0] = 0x00; buf24
[1] = 0x20; buf24
[2] = 0x20; buf24
[3] = 0x20;
1437 buf24
[4] = 0x20; buf24
[5] = 0x00; buf24
[6] = 0x24; buf24
[7] = 0x3b;
1438 buf24
[8] = 0x4f; buf24
[9] = 0x61; buf24
[10] = 0x71; buf24
[11] = 0x80;
1439 buf24
[12] = 0x8f; buf24
[13] = 0x9d; buf24
[14] = 0xab; buf24
[15] = 0xb8;
1441 buf24
[16] = 0xc4; buf24
[17] = 0xd1; buf24
[18] = 0xdd; buf24
[19] = 0xe9;
1442 buf24
[20] = 0xf4; buf24
[21] = 0xff;
1443 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 22);
1444 if(ret
< 0) goto err
;
1447 buf24
[0] = 0x00; buf24
[1] = 0x00;
1448 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 2);
1449 if(ret
< 0) goto err
;
1452 buf24
[0] = 0x60; buf24
[1] = 0x28; buf24
[2] = 0x00; buf24
[3] = 0x08;
1453 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x00;
1455 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 9);
1456 if(ret
< 0) goto err
;
1460 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1461 if(ret
< 0) goto err
;
1464 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1465 if(ret
< 0) goto err
;
1470 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
1471 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1472 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1473 if(ret
< 0) goto err
;
1475 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1476 if(ret
< 0) goto err
;
1477 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1478 if(ret
< 0) goto err
;
1480 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x0d; buf24
[3] = 0x00;
1481 buf24
[4] = 0x01; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1482 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1483 if(ret
< 0) goto err
;
1485 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1486 if(ret
< 0) goto err
;
1487 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1488 if(ret
< 0) goto err
;
1490 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x0d; buf24
[3] = 0x00;
1491 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1492 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1493 if(ret
< 0) goto err
;
1495 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1496 if(ret
< 0) goto err
;
1497 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1498 if(ret
< 0) goto err
;
1501 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x01; buf24
[3] = 0x00;
1502 buf24
[4] = 0x0e; buf24
[5] = 0x00; buf24
[6] = 0x14; buf24
[7] = 0x10;
1503 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1504 if(ret
< 0) goto err
;
1506 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
1507 if(ret
< 0) goto err
;
1508 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
1509 if(ret
< 0) goto err
;
1511 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x03; buf24
[3] = 0x03;
1512 buf24
[4] = 0xc1; buf24
[5] = 0x05; buf24
[6] = 0x01; buf24
[7] = 0x10;
1513 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1514 if(ret
< 0) goto err
;
1516 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
1517 if(ret
< 0) goto err
;
1518 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
1519 if(ret
< 0) goto err
;
1521 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x05; buf24
[3] = 0x00;
1522 buf24
[4] = 0x83; buf24
[5] = 0x00; buf24
[6] = 0x06; buf24
[7] = 0x10;
1523 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1524 if(ret
< 0) goto err
;
1526 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
1527 if(ret
< 0) goto err
;
1528 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
1529 if(ret
< 0) goto err
;
1531 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x0d; buf24
[3] = 0x00;
1532 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1533 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1534 if(ret
< 0) goto err
;
1536 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1537 if(ret
< 0) goto err
;
1538 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1539 if(ret
< 0) goto err
;
1542 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x09; buf24
[3] = 0x00;
1543 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1544 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1545 if(ret
< 0) goto err
;
1547 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
1548 if(ret
< 0) goto err
;
1549 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
1550 if(ret
< 0) goto err
;
1552 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x0b; buf24
[3] = 0x00;
1553 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1554 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1555 if(ret
< 0) goto err
;
1557 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
1558 if(ret
< 0) goto err
;
1559 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
1560 if(ret
< 0) goto err
;
1562 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x11; buf24
[3] = 0x00;
1563 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1564 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1565 if(ret
< 0) goto err
;
1567 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1568 if(ret
< 0) goto err
;
1569 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1570 if(ret
< 0) goto err
;
1573 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x1e; buf24
[3] = 0x80;
1574 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1575 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1576 if(ret
< 0) goto err
;
1578 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1579 if(ret
< 0) goto err
;
1580 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1581 if(ret
< 0) goto err
;
1583 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
1584 buf24
[4] = 0x05; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1585 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1586 if(ret
< 0) goto err
;
1588 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1589 if(ret
< 0) goto err
;
1590 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1591 if(ret
< 0) goto err
;
1593 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2b; buf24
[3] = 0x00;
1594 buf24
[4] = 0x08; buf24
[5] = 0x00; buf24
[6] = 0x10; buf24
[7] = 0x10;
1595 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1596 if(ret
< 0) goto err
;
1598 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
1599 if(ret
< 0) goto err
;
1600 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
1601 if(ret
< 0) goto err
;
1603 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2d; buf24
[3] = 0x00;
1604 buf24
[4] = 0x14; buf24
[5] = 0x00; buf24
[6] = 0x08; buf24
[7] = 0x10;
1605 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1606 if(ret
< 0) goto err
;
1608 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
1609 if(ret
< 0) goto err
;
1610 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
1611 if(ret
< 0) goto err
;
1614 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x33; buf24
[3] = 0x00;
1615 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1616 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1617 if(ret
< 0) goto err
;
1619 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 94
1620 if(ret
< 0) goto err
;
1622 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x5f; buf24
[3] = 0x89;
1623 buf24
[4] = 0x04; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1624 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1625 if(ret
< 0) goto err
;
1627 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1628 if(ret
< 0) goto err
;
1629 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1630 if(ret
< 0) goto err
;
1632 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x60; buf24
[3] = 0x00;
1633 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1634 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1635 if(ret
< 0) goto err
;
1637 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
1638 if(ret
< 0) goto err
;
1639 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
1640 if(ret
< 0) goto err
;
1643 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x62; buf24
[3] = 0x04;
1644 buf24
[4] = 0x98; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1645 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1646 if(ret
< 0) goto err
;
1648 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
1649 if(ret
< 0) goto err
;
1650 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
1651 if(ret
< 0) goto err
;
1653 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x68; buf24
[3] = 0x00;
1654 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1655 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1656 if(ret
< 0) goto err
;
1658 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1659 if(ret
< 0) goto err
;
1660 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1661 if(ret
< 0) goto err
;
1669 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1670 if(ret
< 0) goto err
;
1672 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1673 if(ret
< 0) goto err
;
1677 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1678 if(ret
< 0) goto err
;
1680 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1681 if(ret
< 0) goto err
;
1683 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1684 if(ret
< 0) goto err
;
1688 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1689 if(ret
< 0) goto err
;
1695 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1696 if(ret
< 0) goto err
;
1698 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1699 if(ret
< 0) goto err
;
1701 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1702 if(ret
< 0) goto err
;
1704 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1705 if(ret
< 0) goto err
;
1710 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
1711 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1712 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1713 if(ret
< 0) goto err
;
1715 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1716 if(ret
< 0) goto err
;
1717 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1718 if(ret
< 0) goto err
;
1722 buf24
[0] = 0x02; buf24
[1] = 0x00; buf24
[2] = 0x02; buf24
[3] = 0x00;
1723 buf24
[4] = 0x28; buf24
[5] = 0x3c;
1724 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 6);
1725 if(ret
< 0) goto err
;
1727 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
1729 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
1730 if(ret
< 0) goto err
;
1735 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1736 if(ret
< 0) goto err
;
1739 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x6a; buf24
[3] = 0x50;
1740 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1741 if(ret
< 0) goto err
;
1743 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x50; buf24
[3] = 0x3c;
1744 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1745 if(ret
< 0) goto err
;
1749 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1750 if(ret
< 0) goto err
;
1754 for(i
=410; i
<=411; i
++){
1755 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1756 if(ret
< 0) goto err
;
1761 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1762 if(ret
< 0) goto err
;
1765 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1766 if(ret
< 0) goto err
;
1769 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1770 if(ret
< 0) goto err
;
1776 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1777 if(ret
< 0) goto err
;
1778 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 38
1779 if(ret
< 0) goto err
;
1781 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1782 if(ret
< 0) goto err
;
1783 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 39
1784 if(ret
< 0) goto err
;
1786 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1787 if(ret
< 0) goto err
;
1788 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 3a
1789 if(ret
< 0) goto err
;
1791 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1792 if(ret
< 0) goto err
;
1793 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << bb
1794 if(ret
< 0) goto err
;
1796 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1797 if(ret
< 0) goto err
;
1798 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 3c
1799 if(ret
< 0) goto err
;
1801 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1802 if(ret
< 0) goto err
;
1809 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x06; buf24
[3] = 0x00;
1810 buf24
[4] = 0xf2; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1811 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1812 if(ret
< 0) goto err
;
1814 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1815 if(ret
< 0) goto err
;
1816 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1817 if(ret
< 0) goto err
;
1819 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x05; buf24
[3] = 0x00;
1820 buf24
[4] = 0x13; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1821 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1822 if(ret
< 0) goto err
;
1824 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1825 if(ret
< 0) goto err
;
1826 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1827 if(ret
< 0) goto err
;
1834 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1835 if(ret
< 0) goto err
;
1838 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1839 if(ret
< 0) goto err
;
1842 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1843 if(ret
< 0) goto err
;
1845 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1846 if(ret
< 0) goto err
;
1849 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1850 if(ret
< 0) goto err
;
1853 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1854 if(ret
< 0) goto err
;
1859 buf24
[0] = 0x08; buf24
[1] = 0x2e; buf24
[2] = 0x55; buf24
[3] = 0x6f;
1860 buf24
[4] = 0x7f; buf24
[5] = 0x8d; buf24
[6] = 0x9a; buf24
[7] = 0xa6;
1861 buf24
[8] = 0xb1; buf24
[9] = 0xbb; buf24
[10] = 0xc5; buf24
[11] = 0xce;
1862 buf24
[12] = 0xd7; buf24
[13] = 0xdf; buf24
[14] = 0xe8; buf24
[15] = 0xef;
1864 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 17);
1865 if(ret
< 0) goto err
;
1870 for(i
=439; i
<=447; i
++){
1871 ret
= usb_microdia_control_write(dev
, reg
, buf10e1
, 21);
1872 if(ret
< 0) goto err
;
1878 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1879 if(ret
< 0) goto err
;
1882 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1883 if(ret
< 0) goto err
;
1888 ret
= usb_microdia_control_write(dev
, reg
, buf10e1
, 21);
1889 if(ret
< 0) goto err
;
1894 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1895 if(ret
< 0) goto err
;
1898 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1899 if(ret
< 0) goto err
;
1903 for(i
=453; i
<454; i
++){
1904 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1905 if(ret
< 0) goto err
;
1910 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1911 if(ret
< 0) goto err
;
1914 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x00; buf24
[3] = 0x00;
1915 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
1916 if(ret
< 0) goto err
;
1921 for(i
=0; i
<48; i
++) buf64
[i
] = 0; // zeroes
1922 ret
= usb_microdia_control_write(dev
, reg
, buf64
, 48);
1923 if(ret
< 0) goto err
;
1929 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1930 if(ret
< 0) goto err
;
1932 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1933 if(ret
< 0) goto err
;
1935 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1936 if(ret
< 0) goto err
;
1938 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1939 if(ret
< 0) goto err
;
1944 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
1945 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1946 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1947 if(ret
< 0) goto err
;
1949 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1950 if(ret
< 0) goto err
;
1951 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1952 if(ret
< 0) goto err
;
1957 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1958 if(ret
< 0) goto err
;
1963 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x20; buf24
[3] = 0x11;
1964 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1965 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1966 if(ret
< 0) goto err
;
1968 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1969 if(ret
< 0) goto err
;
1970 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1971 if(ret
< 0) goto err
;
1976 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
1977 if(ret
< 0) goto err
;
1982 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
1983 buf24
[4] = 0x03; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
1984 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1985 if(ret
< 0) goto err
;
1987 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
1988 if(ret
< 0) goto err
;
1989 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
1990 if(ret
< 0) goto err
;
1992 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2b; buf24
[3] = 0x00;
1993 buf24
[4] = 0x10; buf24
[5] = 0x00; buf24
[6] = 0x10; buf24
[7] = 0x10;
1994 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
1995 if(ret
< 0) goto err
;
1997 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
1998 if(ret
< 0) goto err
;
1999 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
2000 if(ret
< 0) goto err
;
2002 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2d; buf24
[3] = 0x00;
2003 buf24
[4] = 0x10; buf24
[5] = 0x00; buf24
[6] = 0x10; buf24
[7] = 0x10;
2004 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2005 if(ret
< 0) goto err
;
2007 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d0
2008 if(ret
< 0) goto err
;
2009 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
2010 if(ret
< 0) goto err
;
2013 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x33; buf24
[3] = 0x00;
2014 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2015 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2016 if(ret
< 0) goto err
;
2018 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 94
2019 if(ret
< 0) goto err
;
2021 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
2022 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2023 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2024 if(ret
< 0) goto err
;
2026 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
2027 if(ret
< 0) goto err
;
2028 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
2029 if(ret
< 0) goto err
;
2037 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2038 if(ret
< 0) goto err
;
2040 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2041 if(ret
< 0) goto err
;
2043 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2044 if(ret
< 0) goto err
;
2046 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2047 if(ret
< 0) goto err
;
2051 buf24
[0] = 0x2d; buf24
[1] = 0x2d; buf24
[2] = 0x3a; buf24
[3] = 0x05;
2052 buf24
[4] = 0x04; buf24
[5] = 0x3f;
2053 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 6);
2054 if(ret
< 0) goto err
;
2056 buf24
[0] = 0x28; buf24
[1] = 0xd8; buf24
[2] = 0x14; buf24
[3] = 0xec;
2057 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
2058 if(ret
< 0) goto err
;
2060 buf24
[0] = 0x32; buf24
[1] = 0xdd; buf24
[2] = 0x2d; buf24
[3] = 0xdd;
2061 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
2062 if(ret
< 0) goto err
;
2067 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
2068 buf24
[4] = 0x03; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2069 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2070 if(ret
< 0) goto err
;
2072 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
2073 if(ret
< 0) goto err
;
2074 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
2075 if(ret
< 0) goto err
;
2077 buf24
[0] = 0xd0; buf24
[1] = 0x5d; buf24
[2] = 0x2c; buf24
[3] = 0x00;
2078 buf24
[4] = 0x1d; buf24
[5] = 0x00; buf24
[6] = 0x1d; buf24
[7] = 0x10;
2079 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2080 if(ret
< 0) goto err
;
2082 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 495: d0
2083 if(ret
< 0) goto err
;
2084 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 496: d0
2085 if(ret
< 0) goto err
;
2086 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << d4
2087 if(ret
< 0) goto err
;
2089 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x30; buf24
[3] = 0x00;
2090 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2091 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2092 if(ret
< 0) goto err
;
2094 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 94
2095 if(ret
< 0) goto err
;
2097 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x07; buf24
[3] = 0x00;
2098 buf24
[4] = 0x02; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2099 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2100 if(ret
< 0) goto err
;
2102 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
2103 if(ret
< 0) goto err
;
2104 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
2105 if(ret
< 0) goto err
;
2112 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2113 if(ret
< 0) goto err
;
2116 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2117 if(ret
< 0) goto err
;
2120 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2121 if(ret
< 0) goto err
;
2124 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2125 if(ret
< 0) goto err
;
2129 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2130 if(ret
< 0) goto err
;
2132 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2133 if(ret
< 0) goto err
;
2136 // URB 509 (see also 249/250)
2138 ret
= usb_microdia_control_write(dev
, reg
, buf1100
, 64);
2139 if(ret
< 0) goto err
;
2144 buf64
[0] = 0x0d; buf64
[1] = 0x11; buf64
[2] = 0x11; buf64
[3] = 0x15;
2145 buf64
[4] = 0x11; buf64
[5] = 0x15; buf64
[6] = 0x26; buf64
[7] = 0x15;
2146 buf64
[8] = 0x15; buf64
[9] = 0x26; buf64
[10] = 0x54; buf64
[11] = 0x36;
2147 buf64
[12] = 0x2e; buf64
[13] = 0x36; buf64
[14] = 0x54; buf64
[15] = 0x54;
2148 // 00000010: .. 00000030: 0x54
2149 for(i
=16; i
<=63; i
++) buf64
[i
] = 0x54;
2150 ret
= usb_microdia_control_write(dev
, reg
, buf64
, 64);
2151 if(ret
< 0) goto err
;
2156 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2157 if(ret
< 0) goto err
;
2159 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2160 if(ret
< 0) goto err
;
2164 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2165 if(ret
< 0) goto err
;
2170 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2171 if(ret
< 0) goto err
;
2173 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2174 if(ret
< 0) goto err
;
2176 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2177 if(ret
< 0) goto err
;
2179 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2180 if(ret
< 0) goto err
;
2184 buf24
[0] = 0x02; buf24
[1] = 0x00; buf24
[2] = 0x02; buf24
[3] = 0x00;
2185 buf24
[4] = 0x28; buf24
[5] = 0x3c;
2186 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 6);
2189 buf24
[0] = 0x00; buf24
[1] = 0xa0; buf24
[2] = 0x00; buf24
[3] = 0xf0;
2191 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
2196 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2197 if(ret
< 0) goto err
;
2200 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x6a; buf24
[3] = 0x50;
2201 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
2204 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x50; buf24
[3] = 0x3c;
2205 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 4);
2209 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2210 if(ret
< 0) goto err
;
2213 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2214 if(ret
< 0) goto err
;
2217 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2218 if(ret
< 0) goto err
;
2221 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2222 if(ret
< 0) goto err
;
2225 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2226 if(ret
< 0) goto err
;
2229 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2230 if(ret
< 0) goto err
;
2235 for(i
=529; i
<=530; i
++){
2236 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2237 if(ret
< 0) goto err
;
2243 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2244 if(ret
< 0) goto err
;
2247 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2248 if(ret
< 0) goto err
;
2251 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2252 if(ret
< 0) goto err
;
2258 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2259 if(ret
< 0) goto err
;
2260 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 38
2261 if(ret
< 0) goto err
;
2263 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2264 if(ret
< 0) goto err
;
2265 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 39
2266 if(ret
< 0) goto err
;
2268 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2269 if(ret
< 0) goto err
;
2270 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 3a
2271 if(ret
< 0) goto err
;
2273 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2274 if(ret
< 0) goto err
;
2275 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << bb
2276 if(ret
< 0) goto err
;
2278 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2279 if(ret
< 0) goto err
;
2280 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 3c
2281 if(ret
< 0) goto err
;
2283 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2284 if(ret
< 0) goto err
;
2291 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x06; buf24
[3] = 0x00;
2292 buf24
[4] = 0xf2; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2293 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2294 if(ret
< 0) goto err
;
2296 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
2297 if(ret
< 0) goto err
;
2298 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
2299 if(ret
< 0) goto err
;
2301 buf24
[0] = 0xb0; buf24
[1] = 0x5d; buf24
[2] = 0x05; buf24
[3] = 0x00;
2302 buf24
[4] = 0x13; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2303 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2304 if(ret
< 0) goto err
;
2306 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b0
2307 if(ret
< 0) goto err
;
2308 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << b4
2309 if(ret
< 0) goto err
;
2311 buf24
[0] = 0x90; buf24
[1] = 0x5d; buf24
[2] = 0x00; buf24
[3] = 0x00;
2312 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2313 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2314 if(ret
< 0) goto err
;
2316 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << 94
2317 if(ret
< 0) goto err
;
2319 buf24
[0] = 0xa2; buf24
[1] = 0x5d; buf24
[2] = 0x00; buf24
[3] = 0x00;
2320 buf24
[4] = 0x00; buf24
[5] = 0x00; buf24
[6] = 0x00; buf24
[7] = 0x10;
2321 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 8);
2322 if(ret
< 0) goto err
;
2324 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << a2
2325 if(ret
< 0) goto err
;
2326 ret
= usb_microdia_control_read(dev
, reg
, &buf
, 1); // << a6
2327 if(ret
< 0) goto err
;
2333 buf24
[0] = 0x00; buf24
[1] = 0x00; buf24
[2] = 0x00; buf24
[3] = 0x84;
2335 ret
= usb_microdia_control_write(dev
, reg
, buf24
, 5);
2336 if(ret
< 0) goto err
;
2341 ret
= usb_microdia_control_write(dev
, reg
, &buf
, 1);
2342 if(ret
< 0) goto err
;
2344 // UNKNOWN -- URB_FUNCTION_RESET_PIPE:
2345 // UNKNOWN -- URB_FUNCTION_RESET_PIPE:
2346 // UNKNOWN -- URB_FUNCTION_GET_CURRENT_FRAME_NUMBER:
2347 // UNKNOWN -- URB_FUNCTION_GET_CURRENT_FRAME_NUMBER:
2348 // URB 560 >>> SENDING ISO REQUEST
2350 UDIA_INFO("...start function completed without errors.\n");
2354 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg
, ret
);
2359 * @brief From stop-close-amcap.log
2367 * For SN9C201 with MI1300. Comments from parser-usbsnoop(updated_13Mar2008).pl output
2370 int microdia_6240_stop_stream(struct usb_microdia
*dev
)
2375 UDIA_INFO("Stopping camera...\n");
2378 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1); // URB 25319
2379 UDIA_INFO("...stop: write %x, ret = %d\n",buf
[0],ret
);
2381 buf
[0]=0xb0; buf
[1]=0x5d; buf
[2]=0x07; buf
[3]=0x00;
2382 buf
[4]=0x00; buf
[5]=0x00; buf
[6]=0x00; buf
[7]=0x10;
2383 ret
+= usb_microdia_control_write(dev
, 0x10c0, buf
, 8); // URB 25320
2384 UDIA_INFO("...stop: write buf[8], ret = %d\n",ret
);
2386 ret
+= usb_microdia_control_read(dev
, 0x10c0, buf
, 1); // URB 25321 << b0
2387 UDIA_INFO("...stop: read %x, ret = %d\n",buf
[0],ret
);
2389 ret
+= usb_microdia_control_read(dev
, 0x10c0, buf
, 1); // URB 25322 << b4
2390 UDIA_INFO("...stop: read %x, ret = %d\n",buf
[0],ret
);
2393 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 1); // URB 25323
2394 UDIA_INFO("...stop: write %x, ret = %d\n",buf
[0],ret
);
2397 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 25324
2398 UDIA_INFO("...stop: write %x, ret = %d\n",buf
[0],ret
);
2401 ret
+= usb_microdia_control_write(dev
, 0x1007, buf
, 1); // URB 25325
2402 UDIA_INFO("...stop: write %x, ret = %d\n",buf
[0],ret
);
2405 ret
+= usb_microdia_control_write(dev
, 0x1006, buf
, 1); // URB 25326
2406 UDIA_INFO("...stop: write %x, ret = %d\n",buf
[0],ret
);
2408 buf
[0]=0x98; buf
[1]=0xef; buf
[2]=0x11;
2409 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 3); // URB 25327
2410 UDIA_INFO("...stop: write buf[3], ret = %d\n",ret
);
2412 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: (URB 5009)
2413 // URB 25328 <<< GETTING SELECT_INTERFACE Interface: AlternateSetting = 0
2414 // UNKNOWN -- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER: (URB 25329)
2417 ret
+= usb_microdia_control_write(dev
, 0x1066, buf
, 1); // URB 25330
2418 UDIA_INFO("...stop: write %x, ret = %d\n",buf
[0],ret
);
2421 UDIA_ERROR("One ore more errors occured during stop sequence !\n");
2429 * @brief From init.sequence.log
2437 * For SN9C201 with SOI968.
2438 * Tests showed this function is actually unnecessary.
2439 * Nevertheless the reads may give us valuable values we don't know about yet.
2441 int microdia_624e_initialize(struct usb_microdia
*dev
)
2445 usb_microdia_control_read(dev
, 0x130d, &buf
, 1);
2446 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
2452 * @brief From UsbSnoop-plugin-parsed.log
2458 int microdia_624f_initialize(struct usb_microdia
*dev
)
2460 /* Do nothing here */
2465 * @brief From UsbSnoop-plugin-parsed.log
2471 int microdia_6260_initialize(struct usb_microdia
*dev
)
2475 usb_microdia_control_read(dev
, 0x130d, &buf
, 1);
2476 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
2478 usb_microdia_control_write(dev
, 0x10c8, &buf
, 1);
2479 usb_microdia_control_read(dev
, 0x100a, &buf
, 1);
2481 usb_microdia_control_write(dev
, 0x100a, &buf
, 1);
2482 usb_microdia_control_read(dev
, 0x100b, &buf
, 1);
2484 usb_microdia_control_write(dev
, 0x100b, &buf
, 1);
2485 usb_microdia_control_read(dev
, 0x1001, &buf
, 1);
2487 usb_microdia_control_write(dev
, 0x1001, &buf
, 1);
2488 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
2490 usb_microdia_control_write(dev
, 0x1040, &buf
, 1);
2491 usb_microdia_control_read(dev
, 0x1045, &buf
, 1);
2493 usb_microdia_control_write(dev
, 0x1045, &buf
, 1);
2494 usb_microdia_control_read(dev
, 0x1046, &buf
, 1);
2496 usb_microdia_control_write(dev
, 0x1046, &buf
, 1);
2498 usb_microdia_control_write(dev
, 0x1045, &buf
, 1);
2500 usb_microdia_control_write(dev
, 0x1040, &buf
, 1);
2502 usb_microdia_control_write(dev
, 0x1020, &buf
, 1);
2508 * @brief From 6 init-logs
2512 * @returns 0 (ok) or -1 (error)
2516 * Windows driver versions: 5.5.8.12 and 5.7.23.000
2517 * Windows versions: 2000 and XP
2518 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
2520 * Comments behind read oprations contain HEX-values that appeared in the logs
2522 int microdia_6270_initialize(struct usb_microdia
*dev
)
2534 ret
+= usb_microdia_control_read(dev
, 0x130d, buf
, 1); // URB 5 0x81,0x85,0x04,0x8b,0x02,...
2536 ret
+= usb_microdia_control_read(dev
, 0x1040, buf
, 1); // URB 6 0xe4,0xc4,0xa4,0x44,...
2539 * THE OLD DRIVER 5.5.8.12 DOES AN ADDITIONAL WRITE HERE:
2541 * usb_microdia_control_write(dev, 0x10c8, buf, 1);
2544 ret
+= usb_microdia_control_read(dev
, 0x118a, buf
, 1); // URB 7 0x05,0x7b,0x01,0x04,...
2546 ret
+= usb_microdia_control_read(dev
, 0x0395, buf_0395
, 1); // URB 8 0xc2,0x82,0x38,0x98,0x04,...
2547 // => this value will be rewritten to 0x118a and 0x0395 later (URBs 81+82)
2550 ret
+= usb_microdia_control_write(dev
, 0x118a, buf
, 1); // URB 9
2552 ret
+= usb_microdia_control_write(dev
, 0x0395, buf
, 1); // URB 10
2554 ret
+= usb_microdia_control_read(dev
, 0x11b8, buf_11b8
, 1); // URB 11 0xa0,0x00,0x24,...
2555 // => this value will be rewritten to 0x11b8 later (URB 83)
2558 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 12
2560 ret
+= usb_microdia_control_read(dev
, 0x1000, buf_1000
, 5); // URB 13 0x30 0xCF 0x00 0x03 (0x02 or 0x00)
2561 // => these values will be rewritten to 0x1000 later (URB 84)
2563 buf
[0] = 0x70; buf
[1] = 0x00; buf
[2] = 0x18; buf
[3] = 0x00; buf
[4] = 0x00;
2564 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 5); // URB 14
2566 ret
+= usb_microdia_control_read(dev
, 0x1060, buf_1060
, 2); // URB 15 0x08 0x00 (always ???)
2567 // => this value will be rewritten to 0x1060 later (URB 85)
2569 buf
[0] = 0x00; buf
[1] = 0x03;
2570 ret
+= usb_microdia_control_write(dev
, 0x1060, buf
, 2); // URB 16
2572 // initialize I2C registers to avoid getting no ACK at first I2C operation:
2573 ret
+= sn9c20x_initialize_i2c(dev
, SN9C20X_I2C_2WIRE
, MT9V011_I2C_SLAVE_ADDRESS
);
2575 // enable I2C communication (bit 0)
2576 buf
[0] = 0x21; // THE OLD DRIVER 5.5.8.12 WRITES 0x5d
2577 ret
+= usb_microdia_control_write(dev
, 0x10c8, buf
, 1); // URB 17
2579 // probe sensor model:
2580 retSP
= mt9vx11_sensor_probe(dev
); // substitutes URBs 18-48
2581 if ((retSP
== 0) && (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
))
2582 // switch (back) to IFP address space:
2583 retASS
= mt9v111_select_address_space(dev
, MT9V111_ADDRESSSPACE_IFP
);
2585 ret
+= usb_microdia_control_write(dev
, 0x118a, buf_0395
, 1); // URB 81 => write value read with URB 8
2587 ret
+= usb_microdia_control_write(dev
, 0x0395, buf_0395
, 1); // URB 82 => write value read with URB 8
2589 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf_11b8
, 1); // URB 83 => write value read with URB 11
2591 ret
+= usb_microdia_control_write(dev
, 0x1000, buf_1000
, 5); // URB 84 => write value read with URB 13
2593 ret
+= usb_microdia_control_write(dev
, 0x1060, buf_1060
, 2); // URB 85 => write value read with URB 15; (always 08 00 ???)
2595 // USB-interrupt-message: doesn't work yet (returns error -110)
2596 //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
2599 * THE OLD DRIVER 5.5.8.12 DOES AN ADDITIONAL WRITE HERE:
2601 * usb_microdia_control_write(dev, 0x1020, wbuf, 1);
2604 if ((retSP
!= 0) || (retASS
!= 0) || (ret
< 33))
2607 UDIA_INFO("One ore more errors occured during initialization !\n");
2615 * @brief From UsbSnoop-plugin-parsed.log
2621 int microdia_627b_initialize(struct usb_microdia
*dev
)
2634 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1); // URB 5
2635 if(ret
< 0) goto err
;
2637 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1); // URB 6
2638 if(ret
< 0) goto err
;
2641 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1); // URB 7
2642 if(ret
< 0) goto err
;
2644 ret
= usb_microdia_control_read(dev
, reg
, reg0395
, 1); // URB 8
2645 if(ret
< 0) goto err
;
2649 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); // URB 9
2650 if(ret
< 0) goto err
;
2652 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); // URB 10
2653 if(ret
< 0) goto err
;
2656 ret
= usb_microdia_control_read(dev
, reg
, reg11b8
, 1); // URB 11
2657 if(ret
< 0) goto err
;
2661 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); // URB 12
2662 if(ret
< 0) goto err
;
2664 ret
= usb_microdia_control_read(dev
, reg
, reg1000
, 5); // URB 13
2665 if(ret
< 0) goto err
;
2668 buf
[0] = 0x70; buf
[1] = 0x00; buf
[2] = 0x18; buf
[3] = 0x00; buf
[4] = 0x00;
2669 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5); // URB 14
2670 if(ret
< 0) goto err
;
2673 ret
= usb_microdia_control_read(dev
, reg
, reg1060
, 2); // URB 15
2674 if(ret
< 0) goto err
;
2677 buf
[0] = 0x00; buf
[1] = 0x03;
2678 ret
= usb_microdia_control_write(dev
, reg
, buf
, 2); // URB 16
2679 if(ret
< 0) goto err
;
2683 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); // URB 17
2684 if(ret
< 0) goto err
;
2687 retI2C
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
2688 dev
->sensor_flags
, buf
); // URBs 18-29
2694 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); // URB 30
2695 if(ret
< 0) goto err
;
2698 retI2C
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
2699 dev
->sensor_flags
, buf
); // URBs 31-35
2702 UDIA_ERROR("Read of sensor register 0x0a failed.");
2706 ret
= usb_microdia_control_write(dev
, reg
, reg0395
, 1); // URB 36
2707 if(ret
< 0) goto err
;
2709 ret
= usb_microdia_control_write(dev
, reg
, reg0395
, 1); // URB 37
2710 if(ret
< 0) goto err
;
2714 ret
= usb_microdia_control_write(dev
, reg
, reg11b8
, 1); // URB 38
2715 if(ret
< 0) goto err
;
2718 buf
[0] = 0x30; buf
[1] = 0xcf; buf
[2] = 0x00; buf
[3] = 0x03; buf
[4] = 0x02;
2719 ret
= usb_microdia_control_write(dev
, reg
, reg1000
, 5); // URB 39
2720 if(ret
< 0) goto err
;
2723 buf
[0] = 0x08; buf
[1] = 0x00;
2724 ret
= usb_microdia_control_write(dev
, reg
, reg1060
, 2); // URB 40
2725 if(ret
< 0) goto err
;
2727 //ret = usb_interrupt_msg(dev->udev, 0x00000083, buf, 0x0000001, &actual, 1000); // URB 41
2730 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg
, ret
);
2735 * @brief From init-start-stop-log (made by VÃctor M. Hernández Rocamora)
2739 * @returns 0 (ok) or -1 (error)
2743 * USB-Logger: SniffUSB 2.0
2745 * Comments behind read oprations contain HEX-values that appeared in the log
2747 int microdia_627f_initialize(struct usb_microdia
*dev
)
2752 ret
+= usb_microdia_control_read(dev
, 0x130d, buf
, 1); // URB 5 0x81
2754 ret
+= usb_microdia_control_read(dev
, 0x1040, buf
, 1); // URB 6 0xe4
2757 ret
+= usb_microdia_control_write(dev
, 0x10c8, buf
, 1); // URB 7
2760 ret
+= usb_microdia_control_write(dev
, 0x1020, buf
, 1); // URB 8
2762 ret
+= usb_microdia_control_read(dev
, 0x1045, buf
, 1); // URB 9 0x0f
2765 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); // URB 10
2767 ret
+= usb_microdia_control_read(dev
, 0x1045, buf
, 1); // URB 11 0x1f
2770 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); // URB 12
2772 ret
+= usb_microdia_control_read(dev
, 0x1045, buf
, 1); // URB 13 0x0f
2775 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); // URB 14
2779 UDIA_INFO("One ore more errors occured during initialization !\n");
2786 * @brief From UsbSnoop-plugin-parsed.log
2790 * @returns 0 (OK) or <0 (Error)
2792 * @author Vincent, Kuzja
2794 int microdia_6288_initialize(struct usb_microdia
*dev
)
2802 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
2803 if(ret
< 0) goto err
;
2806 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
2807 if(ret
< 0) goto err
;
2814 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
2819 * @brief From UsbSnoop-plugin-parsed.log
2823 * @returns 0 if all OK
2825 * Function to initialize Microdia 6128 webcam
2826 * Bridge SN9C325 + OM6802 CMOS sensor
2827 * note: comments are my observations so they could be wrong
2829 int microdia_6128_initialize(struct usb_microdia
*dev
)
2834 UDIA_INFO("Initializing camera...\n");
2837 ret
+= usb_microdia_control_write(dev
, 0xf1, buf
, 1);
2838 ret
+= usb_microdia_control_read(dev
, 0x00, buf
, 1); // read reg 0x00 must write 0x00 in buf[0]
2839 ret
+= usb_microdia_control_write(dev
, 0xf1, buf
, 1);
2840 ret
+= usb_microdia_control_read(dev
, 0x00, buf
, 1); // get cam ID, must read 0x12
2843 UDIA_ERROR("Microdia 6128 is not connected or working !!!\n");
2847 buf
[0] = 0x29; buf
[1] = 0x70; // Configure GPIO
2848 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 2);
2851 ret
+= usb_microdia_control_write(dev
, 0xf1, buf
, 1); // Maybe wakeup
2854 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1); // Command to initialize cam
2857 UDIA_DEBUG("Some read or writes were not successful in initialization !\n");
2859 /* Device is initialized and ready */
2860 UDIA_INFO("Microdia USB2.0 Camera is ready\n");
2866 int dev_microdia_start_stream(struct usb_microdia
*dev
)
2869 if(dev
&& dev
->start_stream
)
2870 ret
= dev
->start_stream(dev
);
2876 * @brief From start.htm
2884 * For SN9C201 with MI1310.
2885 * This function has not been tested yet.
2887 int microdia_6242_start_stream(struct usb_microdia
*dev
)
2893 0x01, 0x18, 0x00, 0x30, 0x00, 0x09, 0x00, 0xed,
2894 0x0f, 0xda, 0x0f, 0x3a, 0x00, 0x3a, 0x00, 0xd0,
2895 0x0f, 0xf7, 0x0f, 0x00, 0x00, 0x00, 0x60, 0x0a};
2898 0x02, 0x00, 0x02, 0x00, 0x50, 0x78, 0x00, 0x00,
2902 0x00, 0x20, 0x20, 0x20, 0x20, 0x00, 0x24, 0x3b,
2903 0x4f, 0x61, 0x71, 0x80, 0x8f, 0x9d, 0xab, 0xb8,
2904 0xc4, 0xd1, 0xdd, 0xe9, 0xf4, 0xff};
2907 0x08, 0x38, 0x58, 0x6f, 0x7f, 0x8d, 0x9a, 0xa6,
2908 0xb1, 0xbb, 0xc5, 0xce, 0xd7, 0xdf, 0xe8, 0xef,
2912 0x16, 0x00, 0x2b, 0x00, 0x08, 0x00, 0x00, 0x00,
2913 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2914 0x00, 0x00, 0x00, 0x00, 0x00};
2916 __u8 qtable1
[64] = {
2917 0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
2918 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
2919 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
2920 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
2921 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
2922 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
2923 0x4f, 0x54, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
2924 0x64, 0x5c, 0x54, 0x64, 0x4b, 0x54, 0x58, 0x54};
2926 __u8 qtable2
[64] = {
2927 0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
2928 0x15, 0x26, 0x54, 0x36, 0x2e, 0x36, 0x54, 0x54,
2929 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
2930 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
2931 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
2932 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
2933 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
2934 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54};
2936 __u8 first10c0
[7][3] = {
2943 {0xf0, 0x00, 0x00}};
2945 __u8 second10c0a
[2][5] = {
2946 {0x01, 0x00, 0x0e, 0x00, 0x14},
2947 {0x03, 0x03, 0xc4, 0x05, 0x14}};
2948 __u8 second10c0b
[3] =
2951 __u8 third10c0
[4][3] = {
2955 {0x20, 0x00, 0x00}};
2957 __u8 fourth10c0a
[3][3] = {
2960 {0x0d, 0x80, 0x08}};
2961 __u8 fourth10c0b
[2][5] = {
2962 {0x2b, 0x01, 0x88, 0x01, 0x88},
2963 {0x2d, 0x01, 0x88, 0x01, 0x88}};
2965 __u8 fifth10c0
[4][3] = {
2968 {0x05, 0x00, 0x72}};
2973 usb_microdia_control_write(dev
, 0x1066, buf
, 1); // URB 1
2980 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
2983 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
2986 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
2989 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
2992 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
2995 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
2998 usb_microdia_control_write(dev
, 0x1020, buf
, 1);
3000 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20;
3001 buf
[3] = 0x10; buf
[4] = 0x08;
3002 usb_microdia_control_write(dev
, 0x1067, buf
, 5);
3004 buf
[0] = 0xb0; buf
[1] = dev
->sensor_slave_address
; buf
[2] = 0x0d;
3005 buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00;
3006 buf
[6] = 0x00; buf
[7] = 0x10; buf
[8] = 0x03;
3007 usb_microdia_control_write(dev
, 0x10c0, buf
, 9);
3009 usb_microdia_control_write(dev
, 0x10e0, urb10
, 24); // URB 10
3011 buf
[0] = 0x00; buf
[1] = 0x00; buf
[3] = 0x00;
3012 usb_microdia_control_write(dev
, 0x10f8, buf
, 3);
3014 buf
[0] = 0x00; buf
[1] = 0x40; buf
[2] = 0x00;
3015 buf
[3] = 0xe0; buf
[4] = 0x03;
3016 usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
3018 usb_microdia_control_write(dev
, 0x1180, urb13
, 11);
3020 usb_microdia_control_write(dev
, 0x118b, urb14
, 22);
3022 buf
[0] = 0x00; buf
[1] = 0x00;
3023 usb_microdia_control_write(dev
, 0x11a1, buf
, 2);
3025 buf
[0] = 0x60; buf
[1] = 0x20; buf
[2] = 0x00;
3026 buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00;
3027 buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00;
3028 usb_microdia_control_write(dev
, 0x11b7, buf
, 9);
3031 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3034 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3036 for (i
= 0; i
< 7; i
++) // URB 9-48
3037 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3038 first10c0
[i
][0], dev
->sensor_flags
, &first10c0
[i
][1]);
3041 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
3044 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
3047 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); // URB 50
3050 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3053 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3056 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3059 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3062 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3065 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
3068 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
3071 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
3074 usb_microdia_control_write(dev
, 0x11bf, buf
, 1);
3076 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3077 second10c0a
[0][0], dev
->sensor_flags
, &second10c0a
[0][1]);
3079 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3080 second10c0a
[1][0], dev
->sensor_flags
, &second10c0a
[1][1]);
3082 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
3083 0x09, dev
->sensor_flags
, NULL
);
3085 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3086 second10c0b
[0], dev
->sensor_flags
, &second10c0b
[1]);
3088 buf
[0] = 0x06; buf
[1] = 0x00; buf
[2] = 0x02;
3089 buf
[3] = 0x00; buf
[4] = 0x28; buf
[5] = 0x3c;
3090 usb_microdia_control_write(dev
, 0x1180, buf
, 6);
3092 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
3093 buf
[3] = 0xf0; buf
[4] = 0x00;
3094 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); // URB 70
3097 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3099 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
3100 usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
3102 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
3103 usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
3106 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3109 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3112 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3115 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3118 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
3121 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
3124 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 80
3125 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3128 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3129 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3132 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3133 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3136 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3137 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3140 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3141 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3144 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 90
3146 for (i
= 0; i
< 4; i
++) // URB 97-106
3147 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3148 third10c0
[i
][0], dev
->sensor_flags
, &third10c0
[i
][1]);
3151 usb_microdia_control_write(dev
, 0x1180, buf
, 1);
3153 for (i
= 0; i
< 3; i
++)
3154 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3155 fourth10c0a
[i
][0], dev
->sensor_flags
, &fourth10c0a
[i
][1]);
3157 for (i
= 0; i
< 2; i
++)
3158 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3159 fourth10c0b
[i
][0], dev
->sensor_flags
, &fourth10c0b
[i
][1]);
3161 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
3162 0x33, dev
->sensor_flags
, NULL
);
3164 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3165 first10c0
[0][0], dev
->sensor_flags
, &first10c0
[0][1]);
3168 usb_microdia_control_write(dev
, 0x118c, buf
, 1);
3171 usb_microdia_control_write(dev
, 0x118d, buf
, 1); // URB 110
3174 usb_microdia_control_write(dev
, 0x118e, buf
, 1);
3177 usb_microdia_control_write(dev
, 0x118f, buf
, 1);
3180 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3183 usb_microdia_control_write(dev
, 0x118c, buf
, 1);
3186 usb_microdia_control_write(dev
, 0x118d, buf
, 1);
3189 usb_microdia_control_write(dev
, 0x118e, buf
, 1);
3192 usb_microdia_control_write(dev
, 0x118f, buf
, 1);
3195 usb_microdia_control_write(dev
, 0x118b, buf
, 1);
3197 usb_microdia_control_write(dev
, 0x1190, urb119
, 17);
3199 for (i
= 0; i
< 9; i
++) // URB 120-128
3200 usb_microdia_control_write(dev
, 0x10e1, urb120
, 21);
3203 usb_microdia_control_write(dev
, 0x10f7, buf
, 1);
3206 usb_microdia_control_write(dev
, 0x10f6, buf
, 1); // URB 130
3208 usb_microdia_control_write(dev
, 0x10e1, urb120
, 21);
3211 usb_microdia_control_write(dev
, 0x10f8, buf
, 1);
3214 usb_microdia_control_write(dev
, 0x10fa, buf
, 1);
3217 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
3220 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
3223 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3225 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
3226 usb_microdia_control_write(dev
, 0x11bc, buf
, 4);
3228 /* Set whole array buf to 0x00 */
3229 memset(buf
, 0x00, 48);
3230 usb_microdia_control_write(dev
, 0x11c0, buf
, 48);
3233 usb_microdia_control_write(dev
, 0x118c, buf
, 1);
3236 usb_microdia_control_write(dev
, 0x118d, buf
, 1); // URB 140
3239 usb_microdia_control_write(dev
, 0x118e, buf
, 1);
3242 usb_microdia_control_write(dev
, 0x118f, buf
, 1);
3244 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a;
3245 buf
[3] = 0x05; buf
[4] = 0x04; buf
[5] = 0x3f;
3246 usb_microdia_control_write(dev
, 0x11a5, buf
, 6);
3248 buf
[0] = 0x14; buf
[1] = 0xec; buf
[2] = 0x0a; buf
[3] = 0xf6;
3249 usb_microdia_control_write(dev
, 0x11af, buf
, 4);
3251 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x2d; buf
[3] = 0xdd;
3252 usb_microdia_control_write(dev
, 0x11b3, buf
, 4);
3255 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3258 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3261 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3263 usb_microdia_control_write(dev
, 0x1100, qtable1
, 64);
3265 usb_microdia_control_write(dev
, 0x1140, qtable2
, 64); // URB 150
3268 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3271 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3274 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3277 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3280 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
3283 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
3286 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
3289 usb_microdia_control_write(dev
, 0x11bf, buf
, 1);
3291 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3292 second10c0a
[0][0], dev
->sensor_flags
, &second10c0a
[0][1]);
3294 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3295 second10c0a
[1][0], dev
->sensor_flags
, &second10c0a
[1][1]);
3297 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
3298 0x09, dev
->sensor_flags
, NULL
);
3300 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3301 second10c0b
[0], dev
->sensor_flags
, &second10c0b
[1]);
3303 buf
[0] = 0x06; buf
[1] = 0x00; buf
[2] = 0x02;
3304 buf
[3] = 0x00; buf
[4] = 0x28; buf
[5] = 0x3c;
3305 usb_microdia_control_write(dev
, 0x1180, buf
, 6);
3307 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
3308 buf
[3] = 0xf0; buf
[4] = 0x00;
3309 usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
3312 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3314 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
3315 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); // URB 170
3317 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
3318 usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
3321 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3324 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3327 usb_microdia_control_write(dev
, 0x11b9, buf
, 1);
3330 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3333 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3336 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3339 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3342 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3345 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 180
3348 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
3351 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
3354 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3355 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3358 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3359 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3362 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3363 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3366 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3367 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 190
3370 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3371 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3374 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3376 for (i
= 0; i
< 3; i
++) // URB 200-205
3377 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3378 fifth10c0
[i
][0], dev
->sensor_flags
, &fifth10c0
[i
][1]);
3380 sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3381 0x00, dev
->sensor_flags
, buf
);
3382 /* __u8 result[2] = {buf[3], buf[4]}; */
3385 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3391 * @brief From startstream.log
3399 * For SN9C201 with SOI968.
3400 * This is function triggers a working stream of image data and a glowing LED.
3402 int microdia_624e_start_stream(struct usb_microdia
*dev
)
3408 {0x47, 0x18, 0x00, 0x30, 0x00, 0x09, 0x00, 0xed,
3409 0x0f, 0xda, 0x0f, 0x3a, 0x00, 0x3a, 0x00, 0xd0,
3410 0x0f, 0xf7, 0x0f, 0x00, 0x00, 0x00, 0x60, 0x0a};
3413 {0x00, 0x20, 0x20, 0x20, 0x20, 0x00, 0x24, 0x3b,
3414 0x4f, 0x61, 0x71, 0x80, 0x8f, 0x9d, 0xab, 0xb8,
3415 0xc4, 0xd1, 0xdd, 0xe9, 0xf4, 0xff};
3418 {0x08, 0x2b, 0x59, 0x79, 0x91, 0x9e, 0xa9, 0xb3,
3419 0xbd, 0xc6, 0xce, 0xd6, 0xdd, 0xe4, 0xea, 0xf1,
3423 {0x16, 0x00, 0x2d, 0x00, 0x08, 0x00, 0xdd, 0x0f,
3424 0xbc, 0x0f, 0x68, 0x00, 0x68, 0x00, 0xa9, 0x0f,
3425 0xf0, 0x0f, 0x00, 0x00, 0x00};
3428 {0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
3429 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
3430 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
3431 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
3432 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
3433 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
3434 0x4f, 0x53, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
3435 0x64, 0x5c, 0x53, 0x64, 0x4b, 0x53, 0x58, 0x53};
3438 {0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
3439 0x15, 0x26, 0x53, 0x36, 0x2e, 0x36, 0x53, 0x53,
3440 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3441 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3442 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3443 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3444 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
3445 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53};
3447 __u8 first10c0
[20][2] = {
3448 {0x12, 0x80}, {0x12, 0x00}, {0x0c, 0x00}, {0x0f, 0x1f},
3449 {0x11, 0x80}, {0x38, 0x52}, {0x1e, 0x00}, {0x33, 0x08},
3450 {0x35, 0x8c}, {0x36, 0x0c}, {0x37, 0x04}, {0x45, 0x04},
3451 {0x47, 0xff}, {0x3e, 0x00}, {0x3f, 0x00}, {0x3b, 0x20},
3452 {0x3a, 0x96}, {0x3d, 0x0a}, {0x14, 0x4e}, {0x13, 0x88}};
3454 __u8 second10c0a
[2] =
3456 __u8 second10c0b
[5] =
3457 {0x17, 0x13, 0x63, 0x01, 0x79}; // length 4
3458 __u8 second10c0c
[2] =
3459 {0x1b, 0x00}; // length 0
3460 __u8 second10c0d
[2][2] = {
3464 __u8 third10c0a
[5][2] = {
3470 __u8 third10c0b
[3] =
3471 {0x01, 0x80, 0x80}; // length 2
3474 {0x0a, 0x0b, 0x1c, 0x1d}; // these are four addresses
3479 usb_microdia_control_write(dev
, 0x1066, buf
, 1); // URB 1
3486 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3489 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3492 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3494 buf
[0] = 0xa0; buf
[1] = 0xa0;
3495 usb_microdia_control_write(dev
, 0x1006, buf
, 2);
3498 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3501 usb_microdia_control_write(dev
, 0x1020, buf
, 1);
3503 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20;
3504 buf
[3] = 0x10; buf
[4] = 0x08;
3505 usb_microdia_control_write(dev
, 0x1067, buf
, 5);
3507 buf
[0] = 0x92; buf
[1] = dev
->sensor_slave_address
; buf
[2] = 0x00;
3508 buf
[3] = 0x00; buf
[4] = 0x1d; buf
[5] = 0x00;
3509 buf
[6] = 0xa2; buf
[7] = 0x10; buf
[8] = 0x03;
3510 usb_microdia_control_write(dev
, 0x10c0, buf
, 9);
3512 usb_microdia_control_write(dev
, 0x10e0, urb10
, 24); // URB 10
3514 buf
[0] = 0x00; buf
[1] = 0x00; buf
[3] = 0x00;
3515 usb_microdia_control_write(dev
, 0x10f8, buf
, 3);
3517 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
3518 buf
[3] = 0xf0; buf
[4] = 0x00;
3519 usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
3521 buf
[0] = 0x8a; buf
[1] = 0xcc; buf
[2] = 0x08;
3522 usb_microdia_control_write(dev
, 0x1188, buf
, 3);
3524 usb_microdia_control_write(dev
, 0x118b, urb14
, 22);
3526 buf
[0] = 0x00; buf
[1] = 0x00;
3527 usb_microdia_control_write(dev
, 0x11a1, buf
, 2);
3529 buf
[0] = 0x60; buf
[1] = 0x20; buf
[2] = 0x00;
3530 buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x40;
3531 buf
[6] = 0x01; buf
[7] = 0xf0; buf
[8] = 0x00;
3532 usb_microdia_control_write(dev
, 0x11b7, buf
, 9);
3535 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3538 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3540 for (i
= 0; i
< 20; i
++) // URB 9-48
3541 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3542 first10c0
[i
][0], dev
->sensor_flags
, &first10c0
[i
][1]);
3545 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3548 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); // URB 50
3551 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3554 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3557 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
3560 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3563 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
3566 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
3569 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
3572 usb_microdia_control_write(dev
, 0x11bf, buf
, 1);
3575 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, // URB 59-60
3576 second10c0a
[0], dev
->sensor_flags
, &second10c0a
[1]);
3578 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
3579 second10c0b
[0], dev
->sensor_flags
, &second10c0b
[1]);
3581 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
3582 second10c0c
[0], dev
->sensor_flags
, &second10c0c
[1]);
3584 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3585 second10c0d
[0][0], dev
->sensor_flags
, &second10c0d
[0][1]);
3587 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3588 second10c0d
[1][0], dev
->sensor_flags
, &second10c0d
[1][1]);
3590 buf
[0] = 0x3c; buf
[1] = 0x00; buf
[2] = 0x0b;
3591 buf
[3] = 0x00; buf
[4] = 0x28; buf
[5] = 0x3c;
3592 usb_microdia_control_write(dev
, 0x1180, buf
, 6);
3594 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
3595 buf
[3] = 0xf0; buf
[4] = 0x00;
3596 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); // URB 70
3599 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3601 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
3602 usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
3604 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
3605 usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
3608 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3611 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3614 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3617 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3620 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
3623 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
3626 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 80
3627 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3630 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3631 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3634 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3635 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3638 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3639 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3642 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3643 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3646 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 90
3647 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3650 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3651 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3654 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3655 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3658 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3660 for (i
= 0; i
< 5; i
++) // URB 97-106
3661 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3662 third10c0a
[i
][0], dev
->sensor_flags
, &third10c0a
[i
][1]);
3664 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
3665 third10c0b
[0], dev
->sensor_flags
, &third10c0b
[1]);
3668 usb_microdia_control_write(dev
, 0x118c, buf
, 1);
3671 usb_microdia_control_write(dev
, 0x118d, buf
, 1); // URB 110
3674 usb_microdia_control_write(dev
, 0x118e, buf
, 1);
3677 usb_microdia_control_write(dev
, 0x118f, buf
, 1);
3680 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3683 usb_microdia_control_write(dev
, 0x118c, buf
, 1);
3686 usb_microdia_control_write(dev
, 0x118d, buf
, 1);
3689 usb_microdia_control_write(dev
, 0x118e, buf
, 1);
3692 usb_microdia_control_write(dev
, 0x118f, buf
, 1);
3695 usb_microdia_control_write(dev
, 0x118b, buf
, 1);
3697 usb_microdia_control_write(dev
, 0x1190, urb119
, 17);
3699 for (i
= 0; i
< 9; i
++) // URB 120-128
3700 usb_microdia_control_write(dev
, 0x10e1, urb120
, 21);
3704 usb_microdia_control_write(dev
, 0x10f7, buf
, 1);
3707 usb_microdia_control_write(dev
, 0x10f6, buf
, 1); // URB 130
3709 usb_microdia_control_write(dev
, 0x10e1, urb120
, 21);
3712 usb_microdia_control_write(dev
, 0x10f8, buf
, 1);
3715 usb_microdia_control_write(dev
, 0x10fa, buf
, 1);
3718 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
3721 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
3724 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3726 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
3727 usb_microdia_control_write(dev
, 0x11bc, buf
, 4);
3729 /* Set whole buf to 0x00 */
3731 usb_microdia_control_write(dev
, 0x11c0, buf
, 48);
3734 usb_microdia_control_write(dev
, 0x118c, buf
, 1);
3737 usb_microdia_control_write(dev
, 0x118d, buf
, 1); // URB 140
3740 usb_microdia_control_write(dev
, 0x118e, buf
, 1);
3743 usb_microdia_control_write(dev
, 0x118f, buf
, 1);
3745 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a;
3746 buf
[3] = 0x05; buf
[4] = 0x04; buf
[5] = 0x3f;
3747 usb_microdia_control_write(dev
, 0x11a5, buf
, 6);
3749 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
3750 usb_microdia_control_write(dev
, 0x11af, buf
, 4);
3752 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x2d; buf
[3] = 0xdd;
3753 usb_microdia_control_write(dev
, 0x11b3, buf
, 4);
3756 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3759 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3762 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3764 usb_microdia_control_write(dev
, 0x1100, qtable1
, 64);
3766 usb_microdia_control_write(dev
, 0x1140, qtable2
, 64); // URB 150
3769 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3772 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3775 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
3778 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3781 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
3784 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
3787 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
3790 usb_microdia_control_write(dev
, 0x11bf, buf
, 1);
3792 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, // URB 159-160
3793 second10c0b
[0], dev
->sensor_flags
, &second10c0b
[1]);
3795 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
3796 second10c0c
[0], dev
->sensor_flags
, &second10c0c
[1]);
3798 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3799 second10c0d
[0][0], dev
->sensor_flags
, &second10c0d
[0][1]);
3801 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3802 second10c0d
[1][0], dev
->sensor_flags
, &second10c0d
[1][1]);
3804 buf
[0] = 0x3c; buf
[1] = 0x00; buf
[2] = 0x0b;
3805 buf
[3] = 0x00; buf
[4] = 0x28; buf
[5] = 0x3c;
3806 usb_microdia_control_write(dev
, 0x1180, buf
, 6);
3808 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
3809 buf
[3] = 0xf0; buf
[4] = 0x00;
3810 usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
3813 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
3815 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
3816 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); // URB 170
3818 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
3819 usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
3822 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3825 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3828 usb_microdia_control_write(dev
, 0x11b9, buf
, 1);
3831 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
3834 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3837 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
3840 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3843 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
3846 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 180
3849 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
3852 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
3855 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3856 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3859 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3860 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3863 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3864 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3867 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3868 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 190
3871 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3872 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3875 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3876 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3879 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3880 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3883 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3884 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
3887 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
3889 for (i
= 0; i
< 3; i
++) // URB 200-205
3890 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
3891 third10c0a
[i
][0], dev
->sensor_flags
, &third10c0a
[i
][1]);
3893 for (i
= 0; i
< 4; i
++) // URB 206-225
3894 sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
,
3895 1, read10c0
[i
], dev
->sensor_flags
, buf
);
3898 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
3901 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
3904 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
3909 int microdia_624f_start_stream(struct usb_microdia
*dev
)
3913 __u8 eeprom_slave_id
= 0x50;
3914 __u8 eeprom_flags
= SN9C20X_I2C_2WIRE
;
3917 __u8 unknown1
[9] = { dev
->sensor_flags
, dev
->sensor_slave_address
,
3918 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
3922 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3923 if(ret
< 0) goto err
;
3927 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3928 if(ret
< 0) goto err
;
3932 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3933 if(ret
< 0) goto err
;
3937 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3938 if(ret
< 0) goto err
;
3942 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3943 if(ret
< 0) goto err
;
3947 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3948 if(ret
< 0) goto err
;
3952 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
3953 if(ret
< 0) goto err
;
3955 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20;
3956 buf
[3] = 0x10; buf
[4] = 0x08;
3958 ret
= usb_microdia_control_write(dev
, command
, buf
, 5);
3959 if(ret
< 0) goto err
;
3961 /* this is the same register as the I2C write, not sure why
3962 * we're writing 9 bytes -- the SN9C102 docs say all writes
3963 * must be 8 bytes, but we don't have docs for SN9C20x */
3965 ret
= usb_microdia_control_write(dev
, command
, unknown1
, 9);
3966 if(ret
< 0) goto err
;
3968 buf
[0] = 0x44; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30;
3969 buf
[4] = 0x00; buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed;
3970 buf
[8] = 0x0f; buf
[9] = 0xda; buf
[10] = 0x0f; buf
[11] = 0x3a;
3971 buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00; buf
[15] = 0xd0;
3972 buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
3973 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
3975 ret
= usb_microdia_control_write(dev
, command
, buf
, 24);
3976 if(ret
< 0) goto err
;
3978 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
3980 ret
= usb_microdia_control_write(dev
, command
, buf
, 3);
3981 if(ret
< 0) goto err
;
3983 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
3984 buf
[3] = 0xf0; buf
[4] = 0x00;
3986 ret
= usb_microdia_control_write(dev
, command
, buf
, 5);
3987 if(ret
< 0) goto err
;
3989 buf
[0] = 0x87; buf
[1] = 0xcc; buf
[2] = 0x08;
3991 ret
= usb_microdia_control_write(dev
, command
, buf
, 3);
3992 if(ret
< 0) goto err
;
3994 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20;
3995 buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b;
3996 buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80;
3997 buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8;
3998 buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
3999 buf
[20] = 0xf4; buf
[21] = 0xff;
4001 ret
= usb_microdia_control_write(dev
, command
, buf
, 22);
4002 if(ret
< 0) goto err
;
4004 buf
[0] = 0x00; buf
[1] = 0x00;
4006 ret
= usb_microdia_control_write(dev
, command
, buf
, 2);
4007 if(ret
< 0) goto err
;
4009 buf
[0] = 0x60; buf
[1] = 0x20; buf
[2] = 0x00; buf
[3] = 0x08;
4010 buf
[4] = 0x00; buf
[5] = 0x40; buf
[6] = 0x01; buf
[7] = 0xf0;
4013 ret
= usb_microdia_control_write(dev
, command
, buf
, 9);
4014 if(ret
< 0) goto err
;
4018 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4019 if(ret
< 0) goto err
;
4023 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4024 if(ret
< 0) goto err
;
4026 /* reset all SCCB registers to their default values */
4027 buf
[0] = OV965X_COM7_SCCB_RESET
;
4028 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_COM7
,
4029 dev
->sensor_flags
, buf
);
4030 if(ret
< 0) goto err
;
4032 buf
[0] = 0x7f; //0x7f; /* AGC setting */
4033 buf
[1] = 0xe0; /* blue gain setting */
4034 buf
[2] = 0x90; /* red gain setting */
4035 buf
[3] = OV965X_VREF_VSTOP_LOW3(0x04) | OV965X_VREF_VSTART_LOW3(0x02);
4036 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_GAIN
,
4037 dev
->sensor_flags
, buf
);
4038 if(ret
< 0) goto err
;
4041 this write appears to be unnecessary since we issued
4042 the reset above and the spec says that 0x00 is the default
4043 for all 4 of the registers we're writing to here
4046 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_COM1
,
4047 dev
->sensor_flags
, buf
);
4048 if(ret
< 0) goto err
;
4050 /* first byte still 0, not sure why, RAVE default is 0x00 too */
4052 buf
[1] = OV965X_COM2_OUTPUT_DRIVE_CAP_2X
;
4053 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, OV965X_CTL_RAVE
,
4054 dev
->sensor_flags
, buf
);
4055 if(ret
< 0) goto err
;
4057 buf
[0] = 0x00; buf
[1] = 0x00;
4058 /* not sure why we're setting bit 5 below, spec says it's reserved */
4059 buf
[2] = OV965X_COM5_15FPS_48MHZ_RGB
| 0x20;
4060 /* likewise, spec says 4 & 6 are reserved */
4061 buf
[3] = OV965X_COM6_TIMING_RESET_ON_FMT_CHANGE
| 0x50;
4062 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_COM3
,
4063 dev
->sensor_flags
, buf
);
4064 if(ret
< 0) goto err
;
4066 buf
[0] = 0xff; /* AEC bits 2-9 */
4067 buf
[1] = OV965X_CLKRC_INPUT_CLK_NO_SCALE
;
4068 buf
[2] = OV965X_COM7_OUTPUT_RAW_RGB
;
4069 buf
[3] = OV965X_COM8_FAST_AGC_AEC
| OV965X_COM8_AEC_STEP_SIZE_NOLIMIT
|
4070 /*OV965X_COM8_AGC_ENABLE |*/ OV965X_COM8_AEC_ENABLE
| OV965X_COM8_AWB_ENABLE
;
4071 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_AECH
,
4072 dev
->sensor_flags
, buf
);
4073 if(ret
< 0) goto err
;
4075 buf
[0] = OV965X_COM9_MAX_AGC_8X
| OV965X_COM9_RELAX_EXPOSURE_TIMING
|
4076 OV965X_COM9_DROP_VSYNC_ON_FRAME_DROP
|
4077 OV965X_COM9_DROP_FRAME_ON_BIG_AEC
;
4079 buf
[2] = 0x07; /* hmm, spec says this is reserved */
4080 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 3, OV965X_CTL_COM9
,
4081 dev
->sensor_flags
, buf
);
4082 if(ret
< 0) goto err
;
4084 /* this is supposed to be reserved too */
4085 buf
[0] = 0x04; buf
[1] = 0x00;
4086 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, OV965X_CTL_MVFP
,
4087 dev
->sensor_flags
, buf
);
4088 if(ret
< 0) goto err
;
4090 buf
[0] = 0x78; /* this is the default! */
4091 buf
[1] = 0x68; /* this is the default! */
4092 buf
[2] = 0xd4; /* this is the default! */
4093 buf
[3] = 0x80; /* this is the default! */
4094 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_AEW
,
4095 dev
->sensor_flags
, buf
);
4096 if(ret
< 0) goto err
;
4098 buf
[0] = OV965X_BIAS_SUBTRACT
;
4099 buf
[1] = OV965X_Gr_COM_BYPASS_ANALOG_BLC
| OV965X_Gr_COM_BYPASS_REGULATOR
;
4100 buf
[2] = 0x00; buf
[3] = 0x00;
4101 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_GbBIAS
,
4102 dev
->sensor_flags
, buf
);
4103 if(ret
< 0) goto err
;
4105 buf
[0] = OV965X_BIAS_SUBTRACT
;
4106 buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
4107 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_RBIAS
,
4108 dev
->sensor_flags
, buf
);
4109 if(ret
< 0) goto err
;
4111 buf
[0] = 0x08; /* HSYNC rising edge start */
4112 buf
[1] = 0x30; /* HSYNC rising edge end */
4113 buf
[2] = OV965X_HREF_EDGE_OFT_TO_DATA_OUT(2) | OV965X_HREF_HSTART_LOW3(6)
4114 | OV965X_HREF_HSTOP_LOW3(4);
4115 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 3, OV965X_CTL_HSYST
,
4116 dev
->sensor_flags
, buf
);
4117 if(ret
< 0) goto err
;
4119 /* the docs say all 4 of these bytes are reserved */
4120 buf
[0] = 0xe2; buf
[1] = 0xbf; buf
[2] = 0x81; buf
[3] = 0xf9;
4121 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_CHLF
,
4122 dev
->sensor_flags
, buf
);
4123 if(ret
< 0) goto err
;
4125 /* the docs say these 2 bytes are reserved */
4126 buf
[0] = 0x00; buf
[1] = 0x93;
4127 buf
[2] = 0x50; /* bits 4 and 6 are supposedly reserved */
4128 buf
[3] = OV965X_TSLB_OUTPUT_SEQ_UYVY
| OV965X_TSLB_DIGITAL_BLC_ENABLE
;
4129 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_ADC
,
4130 dev
->sensor_flags
, buf
);
4131 if(ret
< 0) goto err
;
4133 buf
[0] = OV965X_COM11_MANUAL_BANDING_FILTER
;
4134 buf
[1] = 0x73; /* these bits all reserved */
4135 buf
[2] = OV965X_COM13_ENABLE_COLOR_MATRIX
| OV965X_COM13_DELAY_Y_CHANNEL
4136 | OV965X_COM13_OUTPUT_DELAY(1);
4137 buf
[3] = OV965X_COM14_YUV_EDGE_ENHANCE
4138 | OV965X_COM14_EDGE_ENHANCE_FACTOR_DBL
4139 | 0x0b; /* these last bits supposedly reserved */
4140 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_COM11
,
4141 dev
->sensor_flags
, buf
);
4142 if(ret
< 0) goto err
;
4144 buf
[0] = OV965X_EDGE_EDGE_ENHANCE_LOW4(8)
4145 | OV965X_EDGE_EDGE_ENHANCE_FACTOR(8);
4146 buf
[1] = OV965X_COM15_OUTPUT_RANGE_O0_TO_FF
| 0x01; /* bit reserved */
4147 buf
[2] = 0x00; buf
[3] = 0x08; /* this bit supposedly reserved */
4148 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_EDGE
,
4149 dev
->sensor_flags
, buf
);
4150 if(ret
< 0) goto err
;
4153 /* OV9653 control register 0x43 is reserved, according to the docs */
4154 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x43,
4155 dev
->sensor_flags
, buf
); // 'Dummy'-write
4156 if(ret
< 0) goto err
;
4158 buf
[0] = 0x80; buf
[1] = 0x80; buf
[2] = 0x40; buf
[3] = 0x00;
4159 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_MANU
,
4160 dev
->sensor_flags
, buf
);
4161 if(ret
< 0) goto err
;
4164 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_DBLV
,
4165 dev
->sensor_flags
, buf
);
4166 if(ret
< 0) goto err
;
4168 buf
[0] = 0x06; buf
[1] = 0x20; buf
[2] = 0x00; buf
[3] = 0x00;
4169 /* OV9653 control register 0x8b is reserved, according to the docs */
4170 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x8b,
4171 dev
->sensor_flags
, buf
);
4172 if(ret
< 0) goto err
;
4175 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_DBLC1
,
4176 dev
->sensor_flags
, buf
);
4177 if(ret
< 0) goto err
;
4179 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x88; buf
[3] = 0x88;
4180 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_DM_LNL
,
4181 dev
->sensor_flags
, buf
);
4182 if(ret
< 0) goto err
;
4185 /* control reg 0x96 reserved, according to docs */
4186 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, 0x96,
4187 dev
->sensor_flags
, buf
);
4188 if(ret
< 0) goto err
;
4191 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_COM26
,
4192 dev
->sensor_flags
, buf
);
4193 if(ret
< 0) goto err
;
4195 buf
[0] = 0x80; buf
[1] = 0xb8; buf
[2] = 0x92; buf
[3] = 0x0a;
4196 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_ACOM2
,
4197 dev
->sensor_flags
, buf
);
4198 if(ret
< 0) goto err
;
4200 /* reserved, according to docs */
4201 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0xac,
4202 dev
->sensor_flags
, NULL
);
4203 if(ret
< 0) goto err
;
4205 buf
[0] = 0x1b; buf
[1] = 0xbb; buf
[2] = 0x05; buf
[3] = 0x7d;
4206 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_HSTART
,
4207 dev
->sensor_flags
, buf
);
4208 if(ret
< 0) goto err
;
4211 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_PSHIFT
,
4212 dev
->sensor_flags
, buf
);
4213 if(ret
< 0) goto err
;
4215 /* now for some reason it switches to these two reads and
4216 * then back to the long init sequence */
4218 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); /* reads 30 */
4219 if(ret
< 0) goto err
;
4220 //msg("Should read 0x30, read: %x", buf[0]);
4223 buf
[0] = eeprom_slave_id
;
4224 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4225 if(ret
< 0) goto err
;
4227 // TRY TO READ FROM EEPROM:
4228 ret
= sn9c20x_read_i2c_data(dev
, eeprom_slave_id
, 1, 0x00, eeprom_flags
, buf
);
4231 UDIA_INFO("No EEPROM found\n");
4235 UDIA_INFO("Read from EEPROM successful\n");
4236 /* returns 0xff -- don't know what we're supposed to do w/ that info */
4237 //msg("Read from eeprom, should read 0xff, read: %x", buf[0]);
4241 buf
[0] = dev
->sensor_slave_address
;
4242 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4243 if(ret
< 0) goto err
;
4247 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4248 if(ret
< 0) goto err
;
4252 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4253 if(ret
< 0) goto err
;
4257 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4258 if(ret
< 0) goto err
;
4262 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4263 if(ret
< 0) goto err
;
4267 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4268 if(ret
< 0) goto err
;
4272 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4273 if(ret
< 0) goto err
;
4277 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4278 if (ret
< 0) goto err
;
4282 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4283 if (ret
< 0) goto err
;
4287 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4288 if (ret
< 0) goto err
;
4292 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4293 if (ret
< 0) goto err
;
4296 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_COM7
,
4297 dev
->sensor_flags
, buf
);
4298 if(ret
< 0) goto err
;
4301 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_VREF
,
4302 dev
->sensor_flags
, buf
);
4303 if(ret
< 0) goto err
;
4305 buf
[0] = 0x24; buf
[1] = 0xc5; buf
[2] = 0x00; buf
[3] = 0x3c;
4306 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, OV965X_CTL_HSTART
,
4307 dev
->sensor_flags
, buf
);
4308 if(ret
< 0) goto err
;
4310 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, OV965X_CTL_PSHIFT
,
4311 dev
->sensor_flags
, NULL
);
4312 if(ret
< 0) goto err
;
4315 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_HREF
,
4316 dev
->sensor_flags
, buf
);
4317 if(ret
< 0) goto err
;
4320 buf
[0] = 0x02; buf
[1] = 0x00; buf
[2] = 0x07; buf
[3] = 0x00;
4321 buf
[4] = 0x28; buf
[5] = 0x3c;
4322 ret
= usb_microdia_control_write(dev
, command
, buf
, 6);
4323 if(ret
< 0) goto err
;
4326 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0;
4328 ret
= usb_microdia_control_write(dev
, command
, buf
, 5);
4329 if(ret
< 0) goto err
;
4333 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4334 if(ret
< 0) goto err
;
4337 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
4338 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4339 if(ret
< 0) goto err
;
4342 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
4343 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4344 if(ret
< 0) goto err
;
4348 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4349 if(ret
< 0) goto err
;
4353 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4354 if(ret
< 0) goto err
;
4358 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4359 if(ret
< 0) goto err
;
4364 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4365 if(ret
< 0) goto err
;
4369 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4370 if(ret
< 0) goto err
;
4374 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4375 if(ret
< 0) goto err
;
4379 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4380 if(ret
< 0) goto err
;
4381 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); // 0x38
4382 if(ret
< 0) goto err
;
4385 else if (buf
[0] == 0xb8)
4387 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4388 if(ret
< 0) goto err
;
4389 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); // 0x39
4390 if(ret
< 0) goto err
;
4393 else if (buf
[0] == 0xb9)
4395 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4396 if(ret
< 0) goto err
;
4397 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); // 0x3a
4398 if(ret
< 0) goto err
;
4401 else if (buf
[0] == 0xba)
4403 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4404 if(ret
< 0) goto err
;
4405 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); // 0x3b
4406 if(ret
< 0) goto err
;
4409 else if (buf
[0] == 0xbb)
4411 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4412 if(ret
< 0) goto err
;
4413 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); // 0x3c
4414 if(ret
< 0) goto err
;
4415 last_11b8
[0] = buf
[0];
4416 buf
[0] = last_11b8
[0] & 0xf0; // 0xf0 or 0x70
4417 buf
[0] = buf
[0] | 0x0a; // => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 5 READS/WRITES
4418 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4419 if(ret
< 0) goto err
;
4422 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_CLKRC
,
4423 dev
->sensor_flags
, buf
);
4424 if(ret
< 0) goto err
;
4428 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_EXHCH
,
4429 dev
->sensor_flags
, buf
);
4430 if(ret
< 0) goto err
;
4433 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_EXHCL
,
4434 dev
->sensor_flags
, buf
);
4435 if(ret
< 0) goto err
;
4438 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_DM_LNL
,
4439 dev
->sensor_flags
, buf
);
4440 if(ret
< 0) goto err
;
4444 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_DM_LNH
,
4445 dev
->sensor_flags
, buf
);
4446 if(ret
< 0) goto err
;
4449 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_MVFP
,
4450 dev
->sensor_flags
, buf
);
4451 if(ret
< 0) goto err
;
4453 /* is it really necessary to do this same write again?; 627f does this, too */
4455 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_MVFP
,
4456 dev
->sensor_flags
, buf
);
4457 if(ret
< 0) goto err
;
4462 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4463 if(ret
< 0) goto err
;
4466 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_AECH
,
4467 dev
->sensor_flags
, buf
);
4468 if(ret
< 0) goto err
;
4471 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_COM1
,
4472 dev
->sensor_flags
, buf
);
4473 if(ret
< 0) goto err
;
4477 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_AECHM
,
4478 dev
->sensor_flags
, buf
);
4479 if(ret
< 0) goto err
;
4482 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_ADVFL
,
4483 dev
->sensor_flags
, buf
);
4484 if(ret
< 0) goto err
;
4488 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_ADVFH
,
4489 dev
->sensor_flags
, buf
);
4490 if(ret
< 0) goto err
;
4494 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_GAIN
,
4495 dev
->sensor_flags
, buf
);
4496 if(ret
< 0) goto err
;
4499 buf
[0] = 0x78; /*buf[1] = 0x78;*/
4500 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_BLUE
,
4501 dev
->sensor_flags
, buf
);
4502 if(ret
< 0) goto err
;
4505 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_RED
,
4506 dev
->sensor_flags
, buf
);
4507 if(ret
< 0) goto err
;
4508 // 627f does the last two writes at once (2 byte write to OV965X_CTL_BLUE)
4512 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4513 if(ret
< 0) goto err
;
4517 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4518 if(ret
< 0) goto err
;
4522 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4523 if(ret
< 0) goto err
;
4527 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4528 if(ret
< 0) goto err
;
4533 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4534 if(ret
< 0) goto err
;
4538 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4539 if(ret
< 0) goto err
;
4544 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4545 if(ret
< 0) goto err
;
4549 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4550 if(ret
< 0) goto err
;
4554 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4555 if(ret
< 0) goto err
;
4557 if (dev
->webcam_model
== MICRODIA_627F
)
4562 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4563 if(ret
< 0) goto err
;
4566 /* Gamma control? */
4568 if (dev
->webcam_model
== MICRODIA_627F
)
4570 buf
[0] = 0x08; buf
[1] = 0x23; buf
[2] = 0x37; buf
[3] = 0x48;
4571 buf
[4] = 0x59; buf
[5] = 0x68; buf
[6] = 0x77; buf
[7] = 0x85;
4572 buf
[8] = 0x93; buf
[9] = 0xa1; buf
[10] = 0xae; buf
[11] = 0xba;
4573 buf
[12] = 0xc7; buf
[13] = 0xd3; buf
[14] = 0xe0; buf
[15] = 0xeb;
4578 /*buf[0] = 0x0a; buf[1] = 0x37; buf[2] = 0x58; buf[3] = 0x70;
4579 buf[4] = 0x81; buf[5] = 0x8f; buf[6] = 0x9c; buf[7] = 0xa9;
4580 buf[8] = 0xb5; buf[9] = 0xbe; buf[10] = 0xc8; buf[11] = 0xd1;
4581 buf[12] = 0xda; buf[13] = 0xe2; buf[14] = 0xec; buf[15] = 0xf0;
4585 buf
[0] = 0x00; buf
[1] = 0x2a; buf
[2] = 0x42; buf
[3] = 0x56;
4586 buf
[4] = 0x67; buf
[5] = 0x78; buf
[6] = 0x87; buf
[7] = 0x95;
4587 buf
[8] = 0xa2; buf
[9] = 0xaf; buf
[10] = 0xbc; buf
[11] = 0xc8;
4588 buf
[12] = 0xd4; buf
[13] = 0xdf; buf
[14] = 0xea; buf
[15] = 0xf5;
4591 ret
= usb_microdia_control_write(dev
, command
, buf
, 17);
4592 if(ret
< 0) goto err
;
4594 if (dev
->webcam_model
== MICRODIA_627F
)
4596 buf
[0] = 0xf3; buf
[1] = 0x0f; buf
[2] = 0xf3; buf
[3] = 0x0f;
4597 buf
[4] = 0x0f; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
4598 buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00;
4599 buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00;
4600 buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x0c; buf
[19] = 0x00;
4606 for(i
= 0; i
< 8; i
++)
4607 ret
= usb_microdia_control_write(dev
, command
, buf
, 21);
4609 if (dev
->webcam_model
== MICRODIA_627F
)
4611 buf
[0] = 0x0f; buf
[1] = 0x00; buf
[2] = 0x15; buf
[3] = 0x00;
4612 buf
[4] = 0x1a; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
4613 buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00;
4614 buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00;
4615 buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x0c; buf
[19] = 0x00;
4621 buf
[0] = 0x15; buf
[2] = 0x29;
4623 ret
= usb_microdia_control_write(dev
, command
, buf
, 21);
4624 if (ret
< 0) goto err
;
4628 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4629 if(ret
< 0) goto err
;
4631 command
= 0x10f6; // picture sharpness
4632 if (dev
->webcam_model
== MICRODIA_627F
)
4635 buf
[0] = 0x00; // 624f-log: 0xc0 !
4636 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4637 if(ret
< 0) goto err
;
4641 if (dev
->webcam_model
== MICRODIA_627F
)
4643 buf
[0] = 0x0f; buf
[1] = 0x00; buf
[2] = 0x15; buf
[3] = 0x00;
4644 buf
[4] = 0x1a; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
4645 buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00;
4646 buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00;
4647 buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x0c; buf
[19] = 0x00;
4653 buf
[0] = 0x15; buf
[2] = 0x29; buf
[4] = 0x08;
4655 ret
= usb_microdia_control_write(dev
, command
, buf
, 21);
4656 if(ret
< 0) goto err
;
4660 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4661 if(ret
< 0) goto err
;
4666 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4667 if(ret
< 0) goto err
;
4671 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4672 if(ret
< 0) goto err
;
4677 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4678 if(ret
< 0) goto err
;
4682 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4683 if(ret
< 0) goto err
;
4685 //memset(buf, 0, 4);
4687 buf
[0] = 0x80; buf
[1] = 0x02; buf
[2] = 0xe0; buf
[3] = 0x01;
4688 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4689 if(ret
< 0) goto err
;
4692 if (dev
->webcam_model
== MICRODIA_627F
)
4694 buf
[0] = 0x19; buf
[1] = 0x31; buf
[2] = 0x44; buf
[3] = 0x50;
4695 buf
[4] = 0x52; buf
[5] = 0x56; buf
[6] = 0x5b; buf
[7] = 0x61;
4696 buf
[8] = 0x65; buf
[9] = 0x6a; buf
[10] = 0x6c; buf
[11] = 0x6e;
4697 buf
[12] = 0x70; buf
[13] = 0x72; buf
[14] = 0x74; buf
[15] = 0x76;
4698 buf
[16] = 0x1a; buf
[17] = 0x31; buf
[18] = 0x44; buf
[19] = 0x51;
4699 buf
[20] = 0x54; buf
[21] = 0x57; buf
[22] = 0x5c; buf
[23] = 0x61;
4700 buf
[24] = 0x66; buf
[25] = 0x6b; buf
[26] = 0x6d; buf
[27] = 0x6f;
4701 buf
[28] = 0x71; buf
[29] = 0x73; buf
[30] = 0x75; buf
[31] = 0x76;
4702 buf
[32] = 0x1b; buf
[33] = 0x32; buf
[34] = 0x44; buf
[35] = 0x50;
4703 buf
[36] = 0x50; buf
[37] = 0x54; buf
[38] = 0x59; buf
[39] = 0x5e;
4704 buf
[40] = 0x63; buf
[41] = 0x67; buf
[42] = 0x6a; buf
[43] = 0x6c;
4705 buf
[44] = 0x6e; buf
[45] = 0x70; buf
[46] = 0x72; buf
[47] = 0x73;
4709 buf
[0] = 0x10; buf
[1] = 0x21; buf
[2] = 0x34; buf
[3] = 0x40;
4710 buf
[4] =0x47; buf
[5] = 0x4F; buf
[6] = 0x57; buf
[7] = 0x5F;
4711 buf
[8] = 0x64; buf
[9] = 0x68; buf
[10] = 0x6D; buf
[11] = 0x73;
4712 buf
[12] = 0x79; buf
[13] = 0x80; buf
[14] = 0x89; buf
[15] = 0x97;
4713 buf
[16] = 0x0D; buf
[17] = 0x1C; buf
[18] = 0x2A; buf
[19] = 0x33;
4714 buf
[20] = 0x38; buf
[21] = 0x3D; buf
[22] = 0x44; buf
[23] = 0x4A;
4715 buf
[24] = 0x4E; buf
[25] = 0x52; buf
[26] = 0x56; buf
[27] = 0x5B;
4716 buf
[28] = 0x61; buf
[29] = 0x68; buf
[30] = 0x6F; buf
[31] = 0x7A;
4717 buf
[32] = 0x0D; buf
[33] = 0x1A; buf
[34] = 0x2A; buf
[35] = 0x31;
4718 buf
[36] = 0x36; buf
[37] = 0x3B; buf
[38] = 0x41; buf
[39] = 0x47;
4719 buf
[40] = 0x4A; buf
[41] = 0x4E; buf
[42] = 0x53; buf
[43] = 0x58;
4720 buf
[44] = 0x5D; buf
[45] = 0x64; buf
[46] = 0x6B; buf
[47] = 0x76;
4722 ret
= usb_microdia_control_write(dev
, command
, buf
, 48);
4726 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4727 if(ret
< 0) goto err
;
4732 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4733 if(ret
< 0) goto err
;
4737 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4738 if(ret
< 0) goto err
;
4742 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4743 if(ret
< 0) goto err
;
4747 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05;
4748 buf
[4] = 0x04; buf
[5] = 0x3f;
4749 ret
= usb_microdia_control_write(dev
, command
, buf
, 6);
4750 if(ret
< 0) goto err
;
4754 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
4755 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4756 if(ret
< 0) goto err
;
4759 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x32; buf
[3] = 0xdd;
4760 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4761 if(ret
< 0) goto err
;
4766 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4767 if(ret
< 0) goto err
;
4771 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4772 if(ret
< 0) goto err
;
4776 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4777 if(ret
< 0) goto err
;
4780 //////////////////////////////////////////////////////////////////////
4783 buf
[0] = 0x0d; buf
[1] = 0x08; buf
[2] = 0x08; buf
[3] = 0x0d;
4784 buf
[4] = 0x08; buf
[5] = 0x08; buf
[6] = 0x0d; buf
[7] = 0x0d;
4785 buf
[8] = 0x0d; buf
[9] = 0x0d; buf
[10] = 0x11; buf
[11] = 0x0d;
4786 buf
[12] = 0x0d; buf
[13] = 0x11; buf
[14] = 0x15; buf
[15] = 0x21;
4787 buf
[16] = 0x15; buf
[17] = 0x15; buf
[18] = 0x11; buf
[19] = 0x11;
4788 buf
[20] = 0x15; buf
[21] = 0x2a; buf
[22] = 0x1d; buf
[23] = 0x1d;
4789 buf
[24] = 0x19; buf
[25] = 0x21; buf
[26] = 0x32; buf
[27] = 0x2a;
4790 buf
[28] = 0x32; buf
[29] = 0x32; buf
[30] = 0x2e; buf
[31] = 0x2a;
4791 buf
[32] = 0x2e; buf
[33] = 0x2e; buf
[34] = 0x36; buf
[35] = 0x3a;
4792 buf
[36] = 0x4b; buf
[37] = 0x43; buf
[38] = 0x36; buf
[39] = 0x3a;
4793 buf
[40] = 0x47; buf
[41] = 0x3a; buf
[42] = 0x2e; buf
[43] = 0x2e;
4794 buf
[44] = 0x43; buf
[45] = 0x5c; buf
[46] = 0x43; buf
[47] = 0x47;
4795 buf
[48] = 0x4f; buf
[49] = 0x54; buf
[50] = 0x58; buf
[51] = 0x58;
4796 buf
[52] = 0x58; buf
[53] = 0x32; buf
[54] = 0x3f; buf
[55] = 0x60;
4797 buf
[56] = 0x64; buf
[57] = 0x5c; buf
[58] = 0x54; buf
[59] = 0x64;
4798 buf
[60] = 0x4b; buf
[61] = 0x54; buf
[62] = 0x58; buf
[63] = 0x54;
4799 ret
= usb_microdia_control_write(dev
, command
, buf
, 64);
4800 if(ret
< 0) goto err
;
4803 buf
[0] = 0x0d; buf
[1] = 0x11; buf
[2] = 0x11; buf
[3] = 0x15;
4804 buf
[4] = 0x11; buf
[5] = 0x15; buf
[6] = 0x26; buf
[7] = 0x15;
4805 buf
[8] = 0x15; buf
[9] = 0x26; buf
[10] = 0x54; buf
[11] = 0x36;
4806 buf
[12] = 0x2e; buf
[13] = 0x36; buf
[14] = 0x54; buf
[15] = 0x54;
4807 buf
[16] = 0x54; buf
[17] = 0x54; buf
[18] = 0x54; buf
[19] = 0x54;
4808 buf
[20] = 0x54; buf
[21] = 0x54; buf
[22] = 0x54; buf
[23] = 0x54;
4809 buf
[24] = 0x54; buf
[25] = 0x54; buf
[26] = 0x54; buf
[27] = 0x54;
4810 buf
[28] = 0x54; buf
[29] = 0x54; buf
[30] = 0x54; buf
[31] = 0x54;
4811 buf
[32] = 0x54; buf
[33] = 0x54; buf
[34] = 0x54; buf
[35] = 0x54;
4812 buf
[36] = 0x54; buf
[37] = 0x54; buf
[38] = 0x54; buf
[39] = 0x54;
4813 buf
[40] = 0x54; buf
[41] = 0x54; buf
[42] = 0x54; buf
[43] = 0x54;
4814 buf
[44] = 0x54; buf
[45] = 0x54; buf
[46] = 0x54; buf
[47] = 0x54;
4815 buf
[48] = 0x54; buf
[49] = 0x54; buf
[50] = 0x54; buf
[51] = 0x54;
4816 buf
[52] = 0x54; buf
[53] = 0x54; buf
[54] = 0x54; buf
[55] = 0x54;
4817 buf
[56] = 0x54; buf
[57] = 0x54; buf
[58] = 0x54; buf
[59] = 0x54;
4818 buf
[60] = 0x54; buf
[61] = 0x54; buf
[62] = 0x54; buf
[63] = 0x54;
4819 ret
= usb_microdia_control_write(dev
, command
, buf
, 64);
4820 if(ret
< 0) goto err
;
4825 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4826 if(ret
< 0) goto err
;
4830 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4831 if(ret
< 0) goto err
;
4836 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4837 if(ret
< 0) goto err
;
4841 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4842 if(ret
< 0) goto err
;
4846 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4847 if(ret
< 0) goto err
;
4851 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4852 if(ret
< 0) goto err
;
4856 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4857 if(ret
< 0) goto err
;
4861 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4862 if(ret
< 0) goto err
;
4866 buf
[0] = 0x02; buf
[1] = 0x00; buf
[2] = 0x07; buf
[3] = 0x00;
4867 buf
[4] = 0x28; buf
[5] = 0x3c;
4868 ret
= usb_microdia_control_write(dev
, command
, buf
, 6);
4869 if(ret
< 0) goto err
;
4872 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0;
4874 ret
= usb_microdia_control_write(dev
, command
, buf
, 5);
4875 if(ret
< 0) goto err
;
4879 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4880 if(ret
< 0) goto err
;
4883 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
4884 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4885 if(ret
< 0) goto err
;
4889 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
4890 ret
= usb_microdia_control_write(dev
, command
, buf
, 4);
4891 if(ret
< 0) goto err
;
4895 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4896 if(ret
< 0) goto err
;
4900 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4901 if(ret
< 0) goto err
;
4905 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4906 if(ret
< 0) goto err
;
4910 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4911 if(ret
< 0) goto err
;
4915 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4916 if(ret
< 0) goto err
;
4920 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4921 if(ret
< 0) goto err
;
4925 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4926 if(ret
< 0) goto err
;
4931 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4932 if(ret
< 0) goto err
;
4936 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4937 if(ret
< 0) goto err
;
4941 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4942 if(ret
< 0) goto err
;
4947 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4948 if(ret
< 0) goto err
;
4951 if (last_11b8
[0] == 0x3c)
4953 else if (last_11b8
[0] == 0xbc)
4955 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4956 if(ret
< 0) goto err
;
4957 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); // 624f: 0xb8 627f: 0x38
4958 if(ret
< 0) goto err
;
4961 else if (buf
[0] == 0xb8)
4963 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4964 if(ret
< 0) goto err
;
4965 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); // 624f: 0xb9 627f: 0x39
4966 if(ret
< 0) goto err
;
4969 else if (buf
[0] == 0xb9)
4971 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4972 if(ret
< 0) goto err
;
4973 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); // 0x3a
4974 if(ret
< 0) goto err
;
4977 else if (buf
[0] == 0xba)
4979 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4980 if(ret
< 0) goto err
;
4981 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); // 624f: 0x3b 627f: 0xbb
4982 if(ret
< 0) goto err
;
4985 else if (buf
[0] == 0xbb)
4987 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4988 if(ret
< 0) goto err
;
4989 ret
= usb_microdia_control_read(dev
, command
, buf
, 1); // 624f: 0x3c 627f: 0xbc
4990 if(ret
< 0) goto err
;
4991 buf
[0] = buf
[0] & 0xf0; // 0xf0 or 0x70
4992 if (dev
->webcam_model
== MICRODIA_627F
)
4993 buf
[0] = buf
[0] | 0x09; // THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 5 READS/WRITES
4995 buf
[0] = buf
[0] | 0x08; // THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 5 READS/WRITES
4996 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
4997 if(ret
< 0) goto err
;
5000 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_CLKRC
,
5001 dev
->sensor_flags
, buf
);
5002 if(ret
< 0) goto err
;
5005 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_EXHCH
,
5006 dev
->sensor_flags
, buf
);
5007 if(ret
< 0) goto err
;
5010 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_EXHCL
,
5011 dev
->sensor_flags
, buf
);
5012 if(ret
< 0) goto err
;
5015 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_DM_LNL
,
5016 dev
->sensor_flags
, buf
);
5017 if(ret
< 0) goto err
;
5020 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_DM_LNH
,
5021 dev
->sensor_flags
, buf
);
5022 if(ret
< 0) goto err
;
5024 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_PID
,
5025 dev
->sensor_flags
, buf
);
5026 /* returns 96, no idea what we're supposed to do with it */
5027 if(ret
< 0) goto err
;
5028 //msg("sensor pid, should be 0x96: %x", buf[0]);
5031 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_VER
,
5032 dev
->sensor_flags
, buf
);
5033 /* returns 52, no idea what we're supposed to do with it */
5034 if(ret
< 0) goto err
;
5035 //msg("sensor ver, should be 0x52: %x", buf[0]);
5038 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_MIDH
,
5039 dev
->sensor_flags
, buf
);
5040 /* returns 7f, no idea what we're supposed to do with it */
5041 if(ret
< 0) goto err
;
5042 //msg("sensor midh, should be 0x7f: %x", buf[0]);
5045 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1, OV965X_CTL_MIDL
,
5046 dev
->sensor_flags
, buf
);
5047 /* returns a2, no idea what we're supposed to do with it */
5048 if(ret
< 0) goto err
;
5049 //msg("sensor midl, should be 0xa2: %x", buf[0]);
5053 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
5054 if(ret
< 0) goto err
;
5055 //////////////////////////////////////////////////////////////////////////////////
5057 //////////////////////////////////////////////////////////////////////////////////
5059 /* --- ADJUSTMENTS OF SHARPNESS, COLORS, CONTRAST, BRIGHTNESS ---
5060 * SHOULD BE REMOVED (writes to 0x10e1 and 0x10f6 are done again afterwards by dev_microdia_camera_settings() )
5061 * => NOT done by device 627f
5062 * => NOT in the 624f-log from 15-feb-08 at files.zenum.net
5067 ret = usb_microdia_control_write(dev, command, buf, 1);
5068 if(ret < 0) goto err;
5071 buf[0] = 0x15; buf[1] = 0x00; buf[2] = 0x29; buf[3] = 0x00;
5072 buf[4] = 0x08; buf[5] = 0x00; buf[6] = 0xF7; buf[7] = 0x0F;
5073 buf[8] = 0xC2; buf[9] = 0x0F; buf[10] = 0x47; buf[11] = 0x00;
5074 buf[12] = 0x36; buf[13] = 0x00; buf[14] = 0xDD ; buf[15] = 0x0F;
5075 buf[16] = 0xEE; buf[17] = 0x0F; buf[18] = 0x00; buf[19] = 0x00;
5077 ret = usb_microdia_control_write(dev, command, buf, 21);
5078 if(ret < 0) goto err;
5080 buf[0] = 0x7d; buf[1] = 0x00;
5081 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1, 0x2d,
5082 dev->sensor_flags, buf);
5085 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1, 0x00,
5086 dev->sensor_flags, buf);
5090 buf[0] = 0x15; buf[1] = 0x00; buf[2] = 0x29; buf[3] = 0x00;
5091 buf[4] = 0x08; buf[5] = 0x00; buf[6] = 0xF7; buf[7] = 0x0F;
5092 buf[8] = 0xC2; buf[9] = 0x0F; buf[10] = 0x47; buf[11] = 0x00;
5093 buf[12] = 0x36; buf[13] = 0x00; buf[14] = 0xDD ; buf[15] = 0x0F;
5094 buf[16] = 0xEE; buf[17] = 0x0F; buf[18] = 0x00; buf[19] = 0x00;
5096 ret = usb_microdia_control_write(dev, command, buf, 21);
5097 if(ret < 0) goto err;
5099 // These 2 regs controls brightness of image
5100 // (night mode or something like that)
5102 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 2, 0x2d,
5103 dev->sensor_flags, buf);
5104 //msg("Old brightness value: %x %x", buf[0], buf[1]);
5105 buf[0] = 0x00; buf[1] = 0x04;
5106 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 2, 0x2d,
5107 dev->sensor_flags, buf);
5112 ret = usb_microdia_control_write(dev, command, buf, 1);
5116 buf[0] = 0x15; buf[1] = 0x00; buf[2] = 0x29; buf[3] = 0x00;
5117 buf[4] = 0x08; buf[5] = 0x00; buf[6] = 0xF7; buf[7] = 0x0F;
5118 buf[8] = 0xC2; buf[9] = 0x0F; buf[10] = 0x47; buf[11] = 0x00;
5119 buf[12] = 0x36; buf[13] = 0x00; buf[14] = 0xdd ; buf[15] = 0x0F;
5120 buf[16] = 0xEE; buf[17] = 0x0F; buf[18] = 0x00; buf[19] = 0x00;
5122 ret = usb_microdia_control_write(dev, command, buf, 21);
5123 if(ret < 0) goto err;
5127 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, 0x01,
5128 dev->sensor_flags, buf);
5129 // THIS WRITE WILL NEVER BE DONE, because function returned before
5134 UDIA_ERROR("start stream: command %x failed (%d)!\n", command
, ret
);
5138 int microdia_6260_start_stream(struct usb_microdia
*dev
)
5143 ret
= usb_microdia_control_read(dev
, 0x1045, buf
, 1);
5145 ret
= usb_microdia_control_write(dev
, 0x1045, buf
, 1);
5147 ret
= usb_microdia_control_write(dev
, 0x1066, buf
, 1);
5149 ret
= usb_microdia_control_write(dev
, 0x1007, buf
, 1);
5151 ret
= usb_microdia_control_write(dev
, 0x1006, buf
, 1);
5153 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
5155 ret
= usb_microdia_control_write(dev
, 0x1001, buf
, 1);
5157 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5159 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
5161 ret
= usb_microdia_control_write(dev
, 0x1020, buf
, 1);
5167 ret
= usb_microdia_control_write(dev
, 0x1067, buf
, 5);
5177 ret
= usb_microdia_control_write(dev
, 0x10c0, buf
, 9);
5202 ret
= usb_microdia_control_write(dev
, 0x10e0, buf
, 24);
5206 ret
= usb_microdia_control_write(dev
, 0x10f8, buf
, 3);
5212 ret
= usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
5216 ret
= usb_microdia_control_write(dev
, 0x1188, buf
, 3);
5239 ret
= usb_microdia_control_write(dev
, 0x118b, buf
, 22);
5242 ret
= usb_microdia_control_write(dev
, 0x11a1, buf
, 2);
5252 ret
= usb_microdia_control_write(dev
, 0x11b7, buf
, 9);
5254 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
5256 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5258 ret
= ov7670_initialise(dev
);
5260 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1, 0x3b, dev
->sensor_flags
, buf
);
5261 ret
= usb_microdia_control_read(dev
, 0x10c1, buf
, 1);
5263 ret
= usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
5265 // TRY TO READ FROM EEPROM:
5266 ret
= sn9c20x_read_i2c_data(dev
, 0x50, 1, 0x00, dev
->sensor_flags
, buf
);
5269 UDIA_INFO("No EEPROM found\n");
5273 UDIA_INFO("Read from EEPROM successful\n");
5277 ret
= usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
5279 ret
= usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
5281 ret
= usb_microdia_control_write(dev
, 0x1001, buf
, 1);
5283 ret
= usb_microdia_control_write(dev
, 0x1001, buf
, 1);
5290 ret
= usb_microdia_control_write(dev
, 0x1180, buf
, 6);
5296 ret
= usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
5298 ret
= usb_microdia_control_write(dev
, 0x1189, buf
, 1);
5303 ret
= usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
5308 ret
= usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
5310 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
5312 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5314 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5316 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5318 ret
= usb_microdia_control_write(dev
, 0x118a, buf
, 1);
5320 ret
= usb_microdia_control_write(dev
, 0x0395, buf
, 1);
5322 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5323 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5325 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5326 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5328 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5329 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5331 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5332 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5334 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5335 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5337 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5338 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5340 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5342 * OV7670 Intialise Part 2
5350 ret
= usb_microdia_control_write(dev
, 0x1180, buf
, 6);
5356 ret
= usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
5358 ret
= usb_microdia_control_write(dev
, 0x1189, buf
, 1);
5363 ret
= usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
5368 ret
= usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
5370 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
5372 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
5374 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
5376 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5378 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
5380 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5382 ret
= usb_microdia_control_write(dev
, 0x118a, buf
, 1);
5384 ret
= usb_microdia_control_write(dev
, 0x0395, buf
, 1);
5386 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5387 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5389 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5390 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5392 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5393 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5395 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5396 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5398 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5399 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5401 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5402 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
5404 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5406 * OV7670 Initialisation Part 3 Goes Here
5409 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
5431 ret
= usb_microdia_control_write(dev
, 0x10e1, buf
, 21);
5453 ret
= usb_microdia_control_write(dev
, 0x10e1, buf
, 21);
5475 ret
= usb_microdia_control_write(dev
, 0x10e1, buf
, 21);
5497 ret
= usb_microdia_control_write(dev
, 0x10e1, buf
, 21);
5503 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
5507 * @returns 0 (ok) or -1 (error)
5511 * Windows driver versions: 5.7.23.000
5512 * Windows versions: 2000 and XP
5513 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
5514 * All logs were made using AMCAP with 640x480, RGB24
5516 int microdia_6270_start_stream(struct usb_microdia
*dev
)
5523 // Check if sensor slave address is valid:
5524 if ((dev
->sensor_slave_address
!= MT9V111_I2C_SLAVE_ADDRESS
) && (dev
->sensor_slave_address
!= MT9V011_I2C_SLAVE_ADDRESS
))
5526 UDIA_INFO("microdia_6270_start_stream(): Invalid sensor slave address !\n");
5530 // <= INTERRUPT COMING BACK (URB 1953)
5531 // SWITCH TO ALTERNATE SETTINGS 8 (URB 1954) // NOT IN ALEX'S LOG
5532 // => INTERRUPT GOING DOWN (URB 1955)
5535 usb_microdia_control_write(dev
, 0x1066, buf
, 1); // URB 1956
5537 // <= INTERRUPT COMING BACK (URB 1955)
5538 // => INTERRUPT GOING DOWN (URB 1957)
5541 usb_microdia_control_write(dev
, 0x1000, buf
, 1); // URB 1958
5543 usb_microdia_control_write(dev
, 0x1001, buf
, 1); // URB 1959
5545 usb_microdia_control_write(dev
, 0x1002, buf
, 1); // URB 1960
5547 usb_microdia_control_write(dev
, 0x1061, buf
, 1); // URB 1961
5549 usb_microdia_control_write(dev
, 0x1020, buf
, 1); // URB 1962
5550 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20; buf
[3] = 0x10; buf
[4] = 0x08;
5551 usb_microdia_control_write(dev
, 0x1067, buf
, 5); // URB 1963
5553 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5554 // STRANGE I2C MESSAGE:
5556 // - byte 8 = 0x00 at first start + first cycle
5557 // - procedure not complete: no wait/check for ack/error, no readout of 0x10c2
5558 // - dummy writes at first cycle and read at second cycle, but there are many I2C messages in the meantime, so this should not work
5560 // AT FIRST START + FIRST CYCLE:
5561 buf
[0] = 0x80; buf
[1] = dev
->sensor_slave_address
; buf
[2] = 0x00; buf
[3] = 0x00;
5562 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x03;
5563 // AT ALL FURTHER STARTS + FIRST CYCLE:
5564 //MT9V111: I2C MESSAGE => IFP Register 0x33: Auto exposure
5565 //buf[0] = 0x90; buf[1] = dev->sensor_slave_address; buf[2] = 0x33; buf[3] = 0x00;
5566 //buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03;
5567 //MT9V011: ?????????????????????????
5568 //buf[0] = 0x90; buf[1] = dev->sensor_slave_address; buf[2] = 0x07; buf[3] = 0x00;
5569 //buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03;
5570 // ALWAYS AT 2nd AND FURTHER CYCLES:
5572 //buf[0] = 0xa2; buf[1] = 0x5c; buf[2] = 0x00; buf[3] = 0x36;
5573 //buf[4] = 0x00; buf[5] = 0x82; buf[6] = 0x3a; buf[7] = 0x10; buf[8] = 0x03;
5574 // => buf[3] to buf[6] simply contain bytes read with URB 2215
5576 //buf[0] = 0xb0; buf[1] = 0x5d; buf[2] = 0x07; buf[3] = 0x00;
5577 //buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03;
5578 usb_microdia_control_write(dev
, 0x10c0, buf
, 9); // URB 1964
5579 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5581 buf
[0] = 0x45; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30;
5582 buf
[4] = 0x00; buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed;
5583 buf
[8] = 0x0f; buf
[9] = 0xda; buf
[10] = 0x0f; buf
[11] = 0x3a;
5584 buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00; buf
[15] = 0xd0;
5585 buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
5586 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
5587 usb_microdia_control_write(dev
, 0x10e0, buf
, 24); // URB 1965
5588 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
5589 usb_microdia_control_write(dev
, 0x10f8, buf
, 3); // URB 1966
5590 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
5591 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); // URB 1967
5592 buf
[0] = 0x06; buf
[1] = 0x0c; buf
[2] = 0x08;
5593 usb_microdia_control_write(dev
, 0x1188, buf
, 3); // URB 1968
5594 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20;
5595 buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b;
5596 buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80;
5597 buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8;
5598 buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
5599 buf
[20] = 0xf4; buf
[21] = 0xff;
5600 usb_microdia_control_write(dev
, 0x118b, buf
, 22); // URB 1969
5601 buf
[0] = 0x00; buf
[1] = 0x00;
5602 usb_microdia_control_write(dev
, 0x11a1, buf
, 2); // URB 1970
5603 buf
[0] = 0x60; buf
[1] = 0x28; buf
[2] = 0x00; buf
[3] = 0x08;
5604 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
5606 usb_microdia_control_write(dev
, 0x11b7, buf
, 9); // URB 1971
5608 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 1972
5610 usb_microdia_control_write(dev
, 0x1000, buf
, 1); // URB 1973
5612 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5615 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
5617 // Write to IFP register 0x0d: Color Correction Register 8
5618 buf
[0] = 0x00; buf
[1] = 0x01;
5619 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
); // URBs 1974-1976
5620 // Write to IFP register 0x0d: Color Correction Register 8
5621 buf
[0] = 0x00; buf
[1] = 0x00; // ???
5622 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
); // URBs 1977-1979
5623 // Writes to IFP registers 0x01: Register Address Space Selection
5624 // 0x02: Color Correction Register 1
5625 buf
[0] = 0x00; buf
[1] = 0x01; // select IFP address space
5626 buf
[2] = 0x00; buf
[3] = 0x16; // ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00
5627 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x01, dev
->sensor_flags
, buf
); // URBs 1980-1982
5628 // Writes to IFP registers 0x03: Color Correction Register 3
5629 // 0x04: Color Correction Register 4
5630 buf
[0] = 0x01; buf
[1] = 0xe1; // ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00
5631 buf
[2] = 0x02; buf
[3] = 0x81; // ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00
5632 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x03, dev
->sensor_flags
, buf
); // URBs 1983-1985
5633 // Writes to IFP registers 0x05: Aperture Correction (Sharpening)
5634 // 0x06: Operating Mode Control
5635 buf
[0] = 0x00; buf
[1] = 0x04; // 100% sharpening, no automatic sharpness reduction at low light // AT FIRST START + FIRST CYCLE: 0x00 0x00: no sharpening
5636 buf
[2] = 0x00; buf
[3] = 0x00; // stop AWB at the current values, no on-the-fly defect correction, no auto exposure, + RESREVED option
5637 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x05, dev
->sensor_flags
, buf
); // URBs 1986-1988
5638 // Writes to IFP registers 0x07: Image Flow Processor Soft Reset
5639 // 0x08: Output Format Control
5640 buf
[0] = 0x30; buf
[1] = 0x02; // reset // AT FIRST START + FIRST CYCLE: 0x00 0x00
5641 buf
[2] = 0x04; buf
[3] = 0x80; // bypass entire image processing, raw 8+2 Bayer data output directly
5642 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x07, dev
->sensor_flags
, buf
); // URBs 1989-1991
5643 // "Dummy" write to IFP Register 0x11: Color Correction Register 12
5644 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x11, dev
->sensor_flags
, NULL
); // URBs 1992-1993
5645 // Write to register 0x01: Register address space selection
5646 // Write to sensor register 0x02: Column Start
5647 buf
[0] = 0x00; buf
[1] = 0x04; // select sensor address space
5648 buf
[2] = 0x00; buf
[3] = 0x16; // start with column 22
5649 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x01, dev
->sensor_flags
, buf
); // URBs 1994-1996
5650 // Writes to sensor registers 0x03: Window Height
5651 // 0x04: Window Width
5652 buf
[0] = 0x01; buf
[1] = 0xe6; // 486
5653 buf
[2] = 0x02; buf
[3] = 0x86; // 646
5654 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x03, dev
->sensor_flags
, buf
); // URBs 1997-1999
5655 // Writes to sensor registers 0x05: Horizontal Blanking
5656 // 0x06: Vertical Blanking
5657 buf
[0] = 0x00; buf
[1] = 0x04; // 4 columns (pixel clocks) // AT FIRST START + FIRST CYCLE: 0x00 0x00
5658 buf
[2] = 0x00; buf
[3] = 0x00; // 0 rows
5659 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x05, dev
->sensor_flags
, buf
); // URBs 2000-2002
5660 // Writes to sensor registers 0x07: Output Control
5662 buf
[0] = 0x30; buf
[1] = 0x02; // normal operation + chip enable + RESERVED options
5663 buf
[2] = 0x00; buf
[3] = 0x08; // row 8
5664 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x07, dev
->sensor_flags
, buf
); // URBs 2003-2005
5665 // "Dummy" write to sensor Register 0x11: UNDOCUMENTED
5666 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x11, dev
->sensor_flags
, NULL
); // URBs 2006-2007
5667 // Writes to sensor registers 0x0c: Shutter Delay
5668 // 0x0d: Reset (Soft) (from MT9V011 datasheet)
5669 buf
[0] = 0x00; buf
[1] = 0x00; // 0 master clocks
5670 buf
[2] = 0x00; buf
[3] = 0x00; // return to normal operation
5671 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0c, dev
->sensor_flags
, buf
); // URBs 2008-2010
5672 // Writes to sensor registers 0x0e: UNDOCUMENTED
5673 // 0x0f: UNDOCUMENTED
5674 buf
[0] = 0x00; buf
[1] = 0x00;
5675 buf
[2] = 0x00; buf
[3] = 0x00;
5676 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0e, dev
->sensor_flags
, buf
); // URBs 2011-2013
5677 // Writes to sensor registers 0x10: UNDOCUMENTED
5678 // 0x11: UNDOCUMENTED
5679 buf
[0] = 0x00; buf
[1] = 0x00;
5680 buf
[2] = 0x00; buf
[3] = 0x00;
5681 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x10, dev
->sensor_flags
, buf
); // URBs 2014-2016
5682 // Writes to sensor registers 0x12: 2X Zoom Col Start => 0x1e bit 0 must be set to activate zoom
5683 // 0x13: 2X Zoom Row Start => 0x1e bit 0 must be set to activate zoom
5684 buf
[0] = 0x00; buf
[1] = 0xb0; // column 176
5685 buf
[2] = 0x00; buf
[3] = 0x7c; // row 124
5686 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x12, dev
->sensor_flags
, buf
); // URBs 2017-2018
5687 // Writes to sensor registers 0x14: UNDOCUMENTED
5688 // 0x15: UNDOCUMENTED
5689 buf
[0] = 0x00; buf
[1] = 0x00;
5690 buf
[2] = 0x00; buf
[3] = 0x00;
5691 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x14, dev
->sensor_flags
, buf
); // URBs 2019-2021
5692 // Writes to sensor registers 0x16: UNDOCUMENTED
5693 // 0x17: UNDOCUMENTED
5694 buf
[0] = 0x00; buf
[1] = 0x00;
5695 buf
[2] = 0x00; buf
[3] = 0x00;
5696 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x16, dev
->sensor_flags
, buf
); // URBs 2022-2024
5697 // Writes to sensor registers 0x18: UNDOCUMENTED
5698 // 0x19: UNDOCUMENTED
5699 buf
[0] = 0x00; buf
[1] = 0x00;
5700 buf
[2] = 0x00; buf
[3] = 0x00;
5701 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x18, dev
->sensor_flags
, buf
); // URBs 2025-2027
5702 // Writes to sensor registers 0x1a: UNDOCUMENTED
5703 // 0x1b: UNDOCUMENTED
5704 buf
[0] = 0x00; buf
[1] = 0x00;
5705 buf
[2] = 0x00; buf
[3] = 0x00;
5706 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1a, dev
->sensor_flags
, buf
); // URBs 2028-2030
5707 // Writes to sensor registers 0x1c: UNDOCUMENTED
5708 // 0x1d: UNDOCUMENTED
5709 buf
[0] = 0x00; buf
[1] = 0x00;
5710 buf
[2] = 0x00; buf
[3] = 0x00;
5711 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1c, dev
->sensor_flags
, buf
); // URBs 2031-2033
5712 // Write to sensor register 0x30: RESERVED
5713 buf
[0] = 0x00; buf
[1] = 0x00;
5714 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x30, dev
->sensor_flags
, buf
); // URBs 2034-2036
5715 // Write to sensor register 0x20: Read Mode
5716 buf
[0] = 0x00; buf
[1] = 0x00; // normal readout
5717 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
); // URBs 2037-2039
5718 // Writes to sensor registers 0x30: RESERVED
5720 buf
[0] = 0x00; buf
[1] = 0x05;
5721 buf
[2] = 0x00; buf
[3] = 0x00;
5722 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x30, dev
->sensor_flags
, buf
); // URBs 2040-2042
5723 // "Dummy" write to sensor Register 0x34: RESERVED
5724 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x34, dev
->sensor_flags
, NULL
); // URBs 2043-2044
5726 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
5728 // Write to sensor register 0x07: Output Control
5729 buf
[0] = 0x00; buf
[1] = 0x02; // chip enable, normal operation
5730 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
5731 // Write to sensor register 0x0d: Soft Reset
5732 buf
[0] = 0x00; buf
[1] = 0x01; // reset
5733 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
);
5734 // Write to sensor register 0x0d: Soft Reset
5735 buf
[0] = 0x00; buf
[1] = 0x00; // resume operation
5736 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
);
5737 // Writes to sensor registers 0x01: Row start
5738 // 0x02: Column Start
5739 buf
[0] = 0x00; buf
[1] = 0x08; // start with row 8
5740 buf
[2] = 0x00; buf
[3] = 0x16; // start with column 22
5741 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x01, dev
->sensor_flags
, buf
);
5742 // Writes to sensor registers 0x03: Window Height
5743 // 0x04: Window Width
5744 buf
[0] = 0x01; buf
[1] = 0xe1; // 481
5745 buf
[2] = 0x02; buf
[3] = 0x81; // 641
5746 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x03, dev
->sensor_flags
, buf
);
5747 // Writes to sensor registers 0x05: Horizontal Blanking
5748 // 0x06: Vertical Blanking
5749 buf
[0] = 0x00; buf
[1] = 0x83; // 131 columns (pixel clocks)
5750 buf
[2] = 0x00; buf
[3] = 0x06; // 6 rows
5751 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x05, dev
->sensor_flags
, buf
);
5752 // Write to sensor register 0x0d: Soft Reset
5753 buf
[0] = 0x00; buf
[1] = 0x02; // UNKNOWN
5754 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
);
5755 // Writes to sensor registers 0x0a: Pixel Clock Speed
5756 // 0x0b: Frame Restart
5757 buf
[0] = 0x00; buf
[1] = 0x00; // default
5758 buf
[2] = 0x00; buf
[3] = 0x00; // (has no effect/no restart)
5759 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0a, dev
->sensor_flags
, buf
);
5760 // Writes to sensor registers 0x0c: Shutter Delay
5762 buf
[0] = 0x00; buf
[1] = 0x00; // 0 master clocks
5763 buf
[2] = 0x00; buf
[3] = 0x00; // resume operation
5764 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0c, dev
->sensor_flags
, buf
);
5765 // Writes to sensor registers 0x0e: UNDOCUMENTED
5766 // 0x0f: UNDOCUMENTED
5767 buf
[0] = 0x00; buf
[1] = 0x00;
5768 buf
[2] = 0x00; buf
[3] = 0x00;
5769 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0e, dev
->sensor_flags
, buf
);
5770 // Writes to sensor registers 0x10: UNDOCUMENTED
5771 // 0x11: UNDOCUMENTED
5772 buf
[0] = 0x00; buf
[1] = 0x00;
5773 buf
[2] = 0x00; buf
[3] = 0x00;
5774 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x10, dev
->sensor_flags
, buf
);
5775 // Writes to sensor registers 0x12: 2X Zoom Column Start (from MT9V111 datasheet)
5776 // 0x13: 2X Zoom Row Start (from MT9V111 datasheet)
5777 buf
[0] = 0x00; buf
[1] = 0x00; // column 0 => bit0 of reg 0x1e must be set to activate zoom
5778 buf
[2] = 0x00; buf
[3] = 0x00; // row 0 => bit0 of reg 0x1e must be set to activate zoom
5779 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x12, dev
->sensor_flags
, buf
);
5780 // Writes to sensor registers 0x14: UNDOCUMENTED
5781 // 0x15: UNDOCUMENTED
5782 buf
[0] = 0x00; buf
[1] = 0x00;
5783 buf
[2] = 0x00; buf
[3] = 0x00;
5784 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x14, dev
->sensor_flags
, buf
);
5785 // Writes to sensor registers 0x16: UNDOCUMENTED
5786 // 0x17: UNDOCUMENTED
5787 buf
[0] = 0x00; buf
[1] = 0x00;
5788 buf
[2] = 0x00; buf
[3] = 0x00;
5789 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x16, dev
->sensor_flags
, buf
);
5790 // Writes to sensor registers 0x18: UNDOCUMENTED
5791 // 0x19: UNDOCUMENTED
5792 buf
[0] = 0x00; buf
[1] = 0x00;
5793 buf
[2] = 0x00; buf
[3] = 0x00;
5794 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x18, dev
->sensor_flags
, buf
);
5795 // Writes to sensor registers 0x1a: UNDOCUMENTED
5796 // 0x1b: UNDOCUMENTED
5797 buf
[0] = 0x00; buf
[1] = 0x00;
5798 buf
[2] = 0x00; buf
[3] = 0x00;
5799 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1a, dev
->sensor_flags
, buf
);
5800 // Writes to sensor registers 0x1c: UNDOCUMENTED
5801 // 0x1d: UNDOCUMENTED
5802 buf
[0] = 0x00; buf
[1] = 0x00;
5803 buf
[2] = 0x00; buf
[3] = 0x00;
5804 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1c, dev
->sensor_flags
, buf
);
5805 // Write to sensor register 0x32: RESERVED
5806 buf
[0] = 0x00; buf
[1] = 0x00;
5807 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x32, dev
->sensor_flags
, buf
);
5808 // Writes to sensor registers 0x20: Read Mode
5810 buf
[0] = 0x11; buf
[1] = 0x01; // output all frames (including bad frames) + UNDOCUMENTED
5811 buf
[2] = 0x00; buf
[3] = 0x00;
5812 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x20, dev
->sensor_flags
, buf
);
5813 // Writes to sensor registers 0x22: RESERVED
5814 // 0x23: UNDOCUMENTED
5815 buf
[0] = 0x00; buf
[1] = 0x00;
5816 buf
[2] = 0x00; buf
[3] = 0x00;
5817 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x22, dev
->sensor_flags
, buf
);
5818 // Writes to sensor registers 0x24: UNDOCUMENTED
5819 // 0x25: UNDOCUMENTED
5820 buf
[0] = 0x00; buf
[1] = 0x00;
5821 buf
[2] = 0x00; buf
[3] = 0x00;
5822 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x24, dev
->sensor_flags
, buf
);
5823 // Writes to sensor registers 0x26: UNDOCUMENTED
5825 buf
[0] = 0x00; buf
[1] = 0x00;
5826 buf
[2] = 0x00; buf
[3] = 0x24;
5827 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x26, dev
->sensor_flags
, buf
);
5828 // "Dummy" write to sensor Register 0x30: RESERVED
5829 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x30, dev
->sensor_flags
, NULL
);
5830 // Writes to sensor registers 0x2f: RESERVED
5832 buf
[0] = 0xf7; buf
[1] = 0xb0;
5833 buf
[2] = 0x00; buf
[3] = 0x05;
5834 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2f, dev
->sensor_flags
, buf
);
5835 // Writes to sensor registers 0x31: RESERVED
5837 buf
[0] = 0x00; buf
[1] = 0x00;
5838 buf
[2] = 0x00; buf
[3] = 0x00;
5839 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x31, dev
->sensor_flags
, buf
);
5840 // Writes to sensor registers 0x33: RESERVED
5842 buf
[0] = 0x00; buf
[1] = 0x00;
5843 buf
[2] = 0x01; buf
[3] = 0x00;
5844 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x33, dev
->sensor_flags
, buf
);
5845 // "Dummy" write to sensor Register 0x3b: RESERVED
5846 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x3b, dev
->sensor_flags
, NULL
);
5847 // Write to sensor register 0x3d: RESERVED
5848 buf
[0] = 0x06; buf
[1] = 0x8f;
5849 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x3d, dev
->sensor_flags
, buf
);
5850 // Writes to sensor registers 0x40: RESERVED
5852 buf
[0] = 0x01; buf
[1] = 0xe0;
5853 buf
[2] = 0x00; buf
[3] = 0xd1;
5854 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x40, dev
->sensor_flags
, buf
);
5855 // Write to sensor register 0x44: UNDOCUMENTED
5856 buf
[0] = 0x00; buf
[1] = 0x82;
5857 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x44, dev
->sensor_flags
, buf
);
5858 // Writes to sensor registers 0x5a: RESERVED
5860 buf
[0] = 0x00; buf
[1] = 0x00;
5861 buf
[2] = 0x00; buf
[3] = 0x00;
5862 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x5a, dev
->sensor_flags
, buf
);
5863 // Writes to sensor registers 0x5c: RESERVED
5865 buf
[0] = 0x00; buf
[1] = 0x00;
5866 buf
[2] = 0x00; buf
[3] = 0x00;
5867 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x5c, dev
->sensor_flags
, buf
);
5868 // Writes to sensor registers 0x5e: RESERVED
5870 buf
[0] = 0x00; buf
[1] = 0x00;
5871 buf
[2] = 0xa3; buf
[3] = 0x1d;
5872 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x5e, dev
->sensor_flags
, buf
);
5873 // "Dummy" write to sensor Register 0x68: UNDOCUMENTED
5874 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x68, dev
->sensor_flags
, NULL
);
5875 // Write to sensor register 0x62: RESERVED
5876 buf
[0] = 0x06; buf
[1] = 0x11;
5877 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x62, dev
->sensor_flags
, buf
);
5881 UDIA_INFO("1 or more errors occured in I2C-message-block 1 !\n");
5884 // END OF I2C MESSAGES
5885 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5887 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
5890 usb_microdia_control_write(dev
, 0x1007, buf
, 8);
5892 usb_microdia_control_write(dev
, 0x1006, buf
, 8);
5896 // *** TEMPORARY SWITCH TO SLAVE ADDRESS 0x50, I2C READ ATTEMPT:
5897 // - WE CURRENTLY KNOW NO 6270 CAM THAT IS SUCCESSFULLY READ HERE
5898 // - IF READ FAILS, THIS IS NEVER DONE AGAIN (IN NEXT CYCLE OR FURTHER STARTS)
5899 usb_microdia_control_read(dev
, 0x10c1, buf
, 1); // returns 0x5c
5901 usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
5902 retI2C
= sn9c20x_read_i2c_data(dev
, 0x50, 1, 0x00, SN9C20X_I2C_2WIRE
, buf
);
5904 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");
5906 usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
5909 buf
[0] = 0x47; // ALEX: 0x44
5910 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); // URB 2045
5911 buf
[0] = 0x47; // ALEX: 0x04
5912 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); // URB 2046
5914 usb_microdia_control_write(dev
, 0x1001, buf
, 1); // URB 2047
5916 usb_microdia_control_write(dev
, 0x1001, buf
, 1); // URB 2048
5917 buf
[0] = 0x84; // ALEX: 0xc0
5918 usb_microdia_control_write(dev
, 0x1001, buf
, 1); // URB 2049
5921 usb_microdia_control_write(dev, 0x1001, buf, 1);
5924 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
5926 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5929 // Writes to sensor registers 0x02: Column Start
5930 // 0x03: Window Height
5931 buf
[0] = 0x00; buf
[1] = 0x16; // coulmn 22
5932 buf
[2] = 0x01; buf
[3] = 0xe1; // 481
5933 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x02, dev
->sensor_flags
, buf
); // URBs 2050-2052
5934 // Writes to sensor registers 0x04: Window Width
5935 // 0x05: Horizontal Blanking
5936 buf
[0] = 0x02; buf
[1] = 0x81; // 641
5937 buf
[2] = 0x00; buf
[3] = 0x04; // 4 columns (pixel clocks) // AT FIRST START + FIRST CYCLE: 0x00 0x00
5938 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x04, dev
->sensor_flags
, buf
); // URBs 2053-2055
5939 // Writes to sensor registers 0x06: Vertical Blanking
5940 // 0x07: Output Control
5941 buf
[0] = 0x00; buf
[1] = 0x00; // 0 rows
5942 buf
[2] = 0x30; buf
[3] = 0x02; // normal operation + chip enable + RESERVED options
5943 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x06, dev
->sensor_flags
, buf
); // URBs 2056-2058
5944 // Write to sensor register 0x0e: UNDOCUMENTED
5945 buf
[0] = 0x00; buf
[1] = 0x08;
5946 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0e, dev
->sensor_flags
, buf
); // URBs 2059-2061
5949 UDIA_INFO("1 or more errors occured in I2C-message-block 2 !\n");
5952 // END OF I2C MESSAGES
5953 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5956 buf
[0] = 0x02; buf
[1] = 0x00; buf
[2] = 0x02; buf
[3] = 0x00;
5957 buf
[4] = 0x28; buf
[5] = 0x3c;
5958 usb_microdia_control_write(dev
, 0x1180, buf
, 6); // URB 2062
5959 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
5960 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); // URB 2063
5962 usb_microdia_control_write(dev
, 0x1189, buf
, 1); // URB 2064
5963 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
5964 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); // URB 2065
5965 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
5966 usb_microdia_control_write(dev
, 0x11ab, buf
, 4); // URB 2066
5967 buf
[0] = 0x78; // ALEX: 0x7c
5968 usb_microdia_control_write(dev
, 0x1000, buf
, 1); // URB 2067
5969 buf
[0] = 0x18; // ALEX: 0x1c
5970 usb_microdia_control_write(dev
, 0x1002, buf
, 1); // URB 2068
5971 buf
[0] = 0x18; // ALEX: 0x1c
5972 usb_microdia_control_write(dev
, 0x1002, buf
, 1); // URB 2069
5974 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2070
5976 usb_microdia_control_write(dev
, 0x118a, buf
, 1); // URB 2071
5978 usb_microdia_control_write(dev
, 0x0395, buf
, 1); // URB 2072
5981 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2073
5982 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2074 // 0x38
5985 else if (buf
[0] == 0xb8)
5987 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2075
5988 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2076 // 0xb9
5991 else if (buf
[0] == 0xb9)
5993 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2077
5994 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2078
5997 else if (buf
[0] == 0xba)
5999 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2079
6000 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2080 // 0x3b
6003 else if (buf
[0] == 0xbb)
6005 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2081
6006 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2082 // 0x3c
6009 else if (buf
[0] == 0xbc)
6011 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2083
6012 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2084 // 0x3d
6013 last_11b8
[0] = buf
[0];
6014 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6018 else if (buf
[0] == 0xbd)
6020 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2085
6021 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2086
6024 else if (buf
[0] == 0xbe)
6026 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2087
6027 usb_microdia_control_read(dev
, 0x11b8, last_11b8
, 1); // URB 2088
6029 buf
[0] = last_11b8
[0] & 0xf0; // 0xf0 or 0x70
6030 buf
[0] = buf
[0] | 0x0d; // 0x0c => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 8 READS/WRITES
6031 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2089
6034 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6037 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6039 // Write to sensor register 0x06: Vertical Blanking
6040 buf
[0] = 0x00; buf
[1] = 0x2d; // 45 rows
6041 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
); // URBs 2090-2092
6042 // Write to sensor register 0x05: Horizontal Blanking
6043 buf
[0] = 0x00; buf
[1] = 0x04; // 4 columns (pixel clocks)
6044 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
); // URBs 2093-2095
6045 // Write to sensor register 0x20: Read Mode
6046 buf
[0] = 0x00; buf
[1] = 0x00; // normal readout
6047 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
); // URBs 2096-2098
6049 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6051 // Write to sensor register 0x0a: Pixel Clock Speed
6052 buf
[0] = 0x00; buf
[1] = 0x00; // default
6053 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0a, dev
->sensor_flags
, buf
);
6054 // Write to sensor register 0x06: Vertical Blanking
6055 buf
[0] = 0x00; buf
[1] = 0x29; // 41 rows
6056 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
);
6057 // Write to sensor register 0x05: Horizontal Blanking
6058 buf
[0] = 0x00; buf
[1] = 0x09; // 9 columns (pixel clocks)
6059 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
);
6060 // Write to sensor register 0x20: Read Mode
6061 buf
[0] = 0x11; buf
[1] = 0x01; // output all frames (including bad ones) + UNKNOWN
6062 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
);
6066 UDIA_INFO("1 or more errors occured in I2C-message-block 3 !\n");
6069 // END OF I2C MESSAGES
6070 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6074 usb_microdia_control_write(dev
, 0x1180, buf
, 1); // URB 2099
6076 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6079 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6081 // Write to sensor register 0x20: Read Mode
6082 buf
[0] = 0x00; buf
[1] = 0x00; // normal readout
6083 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
); // URBs 2100-2102
6085 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6087 // Write to sensor register 0x20: Read Mode
6088 buf
[0] = 0x11; buf
[1] = 0x01; // output all frames (including bad ones) + UNKNOWN
6089 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
);
6093 UDIA_INFO("1 or more errors occured in I2C-message-block 4 !\n");
6096 // END OF I2C MESSAGES
6097 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6101 usb_microdia_control_write(dev
, 0x1182, buf
, 1); // URB 2103
6104 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6107 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6109 // Write to sensor register 0x09: Shutter Width
6110 buf
[0] = 0x00; buf
[1] = 0x64; // integration of 100 rows
6111 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x09, dev
->sensor_flags
, buf
); // URBs 2104-2106
6112 // Write to sensor register 0x2b: Green 1 Gain
6114 buf
[0] = 0x00; buf
[1] = 0xa0; // 32*0.03125*2 = 2
6115 buf
[2] = 0x00; buf
[3] = 0xa0; // 32*0.03125*2 = 2
6116 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2b, dev
->sensor_flags
, buf
); // URBs 2107-2109
6117 // Write to sensor register 0x2d: Red Gain
6118 // 0x2e: Green 2 Gain
6119 buf
[0] = 0x00; buf
[1] = 0xa0; // 32*0.03125*2 = 2
6120 buf
[2] = 0x00; buf
[3] = 0xa0; // 32*0.03125*2 = 2
6121 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2d, dev
->sensor_flags
, buf
); // URBs 2110-2112
6122 // "Dummy" write to sensor Register 0x33: RESERVED
6123 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x33, dev
->sensor_flags
, NULL
); // URBs 2113-2114
6125 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6127 // Write to sensor register 0x09: Shutter Width
6128 buf
[0] = 0x00; buf
[1] = 0x64; // integration of 100 rows
6129 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x09, dev
->sensor_flags
, buf
);
6130 // Write to sensor register 0x07: Output Control
6131 buf
[0] = 0x00; buf
[1] = 0x03; // dont update changes until bit0=0, chip enable, normal operation
6132 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
6133 // Write to sensor register 0x2b: Green 1 Gain
6135 buf
[0] = 0x00; buf
[1] = 0x33; // 51*0.03125*1 = 1.59375
6136 buf
[2] = 0x00; buf
[3] = 0xa0; // 32*0.03125*2 = 2
6137 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2b, dev
->sensor_flags
, buf
);
6138 // Write to sensor register 0x2d: Red Gain
6139 // 0x2e: Green 2 Gain
6140 buf
[0] = 0x00; buf
[1] = 0xa0; // 32*0.03125*2 = 2
6141 buf
[2] = 0x00; buf
[3] = 0x33; // 51*0.03125*1 = 1.59375
6142 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2d, dev
->sensor_flags
, buf
);
6143 // "Dummy" write to sensor Register 0x33: RESERVED
6144 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x33, dev
->sensor_flags
, NULL
);
6145 // Write to sensor register 0x07: Output Control
6146 buf
[0] = 0x00; buf
[1] = 0x02; // chip enable, normal operation
6147 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
6151 UDIA_INFO("1 or more errors occured in I2C-message-block 5 !\n");
6154 // END OF I2C MESSAGES
6155 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6159 usb_microdia_control_write(dev
, 0x118c, buf
, 1); // URB 2115
6161 usb_microdia_control_write(dev
, 0x118d, buf
, 1); // URB 2116
6163 usb_microdia_control_write(dev
, 0x118e, buf
, 1); // URB 2117
6165 usb_microdia_control_write(dev
, 0x118f, buf
, 1); // URB 2118
6167 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); // URB 2119
6169 usb_microdia_control_write(dev
, 0x118c, buf
, 1); // URB 2120
6171 usb_microdia_control_write(dev
, 0x118d, buf
, 1); // URB 2121
6173 usb_microdia_control_write(dev
, 0x118e, buf
, 1); // URB 2122
6175 usb_microdia_control_write(dev
, 0x118f, buf
, 1); // URB 2123
6177 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6181 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6185 usb_microdia_control_write(dev
, 0x118b, buf
, 1); // URB 2124
6188 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6190 buf
[0] = 0x0a; buf
[1] = 0x36; buf
[2] = 0x56; buf
[3] = 0x6e;
6191 buf
[4] = 0x7f; buf
[5] = 0x8d; buf
[6] = 0x9b; buf
[7] = 0xa8;
6192 buf
[8] = 0xb4; buf
[9] = 0xbd; buf
[10] = 0xc7; buf
[11] = 0xd0;
6193 buf
[12] = 0xd9; buf
[13] = 0xe2; buf
[14] = 0xec; buf
[15] = 0xf0;
6196 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6198 buf
[0] = 0x08; buf
[1] = 0x35; buf
[2] = 0x5a; buf
[3] = 0x6d;
6199 buf
[4] = 0x7d; buf
[5] = 0x8b; buf
[6] = 0x97; buf
[7] = 0xa3;
6200 buf
[8] = 0xad; buf
[9] = 0xb7; buf
[10] = 0xc1; buf
[11] = 0xca;
6201 buf
[12] = 0xd3; buf
[13] = 0xdb; buf
[14] = 0xe3; buf
[15] = 0xeb;
6204 usb_microdia_control_write(dev
, 0x1190, buf
, 17); // URB 2125
6206 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6208 buf
[0] = 0x16; buf
[1] = 0x00; buf
[2] = 0x2b; buf
[3] = 0x00;
6209 buf
[4] = 0x08; buf
[5] = 0x00; buf
[6] = 0xf6; buf
[7] = 0x0f;
6210 buf
[8] = 0xd2; buf
[9] = 0x0f; buf
[10] = 0x38; buf
[11] = 0x00;
6211 buf
[12] = 0x34; buf
[13] = 0x00; buf
[14] = 0xcf; buf
[15] = 0x0f;
6212 buf
[16] = 0xfd; buf
[17] = 0x0f; buf
[18] = 0x00; buf
[19] = 0x00;
6215 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6217 buf
[0] = 0x16; buf
[1] = 0x00; buf
[2] = 0x2b; buf
[3] = 0x00;
6218 buf
[4] = 0x08; buf
[5] = 0x00; buf
[6] = 0xf0; buf
[7] = 0x0f;
6219 buf
[8] = 0xd0; buf
[9] = 0x0f; buf
[10] = 0x41; buf
[11] = 0x00;
6220 buf
[12] = 0x38; buf
[13] = 0x00; buf
[14] = 0xc7; buf
[15] = 0x0f;
6221 buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00;
6224 for (k
=0; k
<9; k
++) // AT FIRST START + FIRST CYCLE: first 8 writes 21 bytes 0x00
6226 usb_microdia_control_write(dev
, 0x10e1, buf
, 21); // URB 2126 - 2134
6230 usb_microdia_control_write(dev
, 0x10f7, buf
, 1); // URB 2135
6231 buf
[0] = 0x18; // ALEX: 0x00
6232 usb_microdia_control_write(dev
, 0x10f6, buf
, 1); // URB 2136
6234 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6236 buf
[0] = 0x16; buf
[1] = 0x00; buf
[2] = 0x2b; buf
[3] = 0x00;
6237 buf
[4] = 0x08; buf
[5] = 0x00; buf
[6] = 0xf6; buf
[7] = 0x0f;
6238 buf
[8] = 0xd2; buf
[9] = 0x0f; buf
[10] = 0x38; buf
[11] = 0x00;
6239 buf
[12] = 0x34; buf
[13] = 0x00; buf
[14] = 0xcf; buf
[15] = 0x0f;
6240 buf
[16] = 0xfd; buf
[17] = 0x0f; buf
[18] = 0x00; buf
[19] = 0x00;
6243 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6245 buf
[0] = 0x16; buf
[1] = 0x00; buf
[2] = 0x2b; buf
[3] = 0x00;
6246 buf
[4] = 0x08; buf
[5] = 0x00; buf
[6] = 0xf0; buf
[7] = 0x0f;
6247 buf
[8] = 0xd0; buf
[9] = 0x0f; buf
[10] = 0x41; buf
[11] = 0x00;
6248 buf
[12] = 0x38; buf
[13] = 0x00; buf
[14] = 0xc7; buf
[15] = 0x0f;
6249 buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00;
6252 usb_microdia_control_write(dev
, 0x10e1, buf
, 21); // URB 2137
6254 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6258 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6262 usb_microdia_control_write(dev
, 0x10f8, buf
, 1); // URB 2138
6264 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6268 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6272 usb_microdia_control_write(dev
, 0x10fa, buf
, 1); // URB 2139
6275 usb_microdia_control_write(dev
, 0x10f9, buf
, 1); // URB 2140
6277 usb_microdia_control_write(dev
, 0x10f9, buf
, 1); // URB 2141
6279 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); // URB 2142
6280 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
6281 usb_microdia_control_write(dev
, 0x11bc, buf
, 4); // URB 2143
6282 for (k
=0; k
<48; k
++) buf
[k
] = 0x00;
6283 usb_microdia_control_write(dev
, 0x11c0, buf
, 48); // URB 2144
6285 usb_microdia_control_write(dev
, 0x118c, buf
, 1); // URB 2145
6287 usb_microdia_control_write(dev
, 0x118d, buf
, 1); // URB 2146
6289 usb_microdia_control_write(dev
, 0x118e, buf
, 1); // URB 2147
6291 usb_microdia_control_write(dev
, 0x118f, buf
, 1); // URB 2148
6292 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05;
6293 buf
[4] = 0x04; buf
[5] = 0x3f;
6294 usb_microdia_control_write(dev
, 0x11a5, buf
, 6); // URB 2149
6296 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6298 buf
[0] = 0x14; buf
[1] = 0xec; buf
[2] = 0x0a; buf
[3] = 0xf6;
6300 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6302 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
6304 usb_microdia_control_write(dev
, 0x11af, buf
, 4); // URB 2150
6306 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x2d; buf
[3] = 0xdd;
6307 usb_microdia_control_write(dev
, 0x11b3, buf
, 4); // URB 2151
6308 buf
[0] = 0x47; // ALEX: 0x04
6309 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); // URB 2152
6311 usb_microdia_control_write(dev
, 0x1061, buf
, 1); // URB 2153
6312 buf
[0] = 0x67; // ALEX: 0x24
6313 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); // URB 2154
6314 buf
[0] = 0x0d; buf
[1] = 0x08; buf
[2] = 0x08; buf
[3] = 0x0d;
6315 buf
[4] = 0x08; buf
[5] = 0x08; buf
[6] = 0x0d; buf
[7] = 0x0d;
6316 buf
[8] = 0x0d; buf
[9] = 0x0d; buf
[10] = 0x11; buf
[11] = 0x0d;
6317 buf
[12] = 0x0d; buf
[13] = 0x11; buf
[14] = 0x15; buf
[15] = 0x21;
6318 buf
[16] = 0x15; buf
[17] = 0x15; buf
[18] = 0x11; buf
[19] = 0x11;
6319 buf
[20] = 0x15; buf
[21] = 0x2a; buf
[22] = 0x1d; buf
[23] = 0x1d;
6320 buf
[24] = 0x19; buf
[25] = 0x21; buf
[26] = 0x32; buf
[27] = 0x2a;
6321 buf
[28] = 0x32; buf
[29] = 0x32; buf
[30] = 0x2e; buf
[31] = 0x2a;
6322 buf
[32] = 0x2e; buf
[33] = 0x2e; buf
[34] = 0x36; buf
[35] = 0x3a;
6323 buf
[36] = 0x4b; buf
[37] = 0x43; buf
[38] = 0x36; buf
[39] = 0x3a;
6324 buf
[40] = 0x47; buf
[41] = 0x3a; buf
[42] = 0x2e; buf
[43] = 0x2e;
6325 buf
[44] = 0x43; buf
[45] = 0x5c; buf
[46] = 0x43; buf
[47] = 0x47;
6326 buf
[48]= 0x4f; buf
[49] = 0x53; buf
[50] = 0x58; buf
[51] = 0x58;
6327 buf
[52] = 0x58; buf
[53] = 0x32; buf
[54] = 0x3f; buf
[55] = 0x60;
6328 buf
[56] = 0x64; buf
[57] = 0x5c; buf
[58] = 0x53; buf
[59] = 0x64;
6329 buf
[60] = 0x4b; buf
[61] = 0x53; buf
[62] = 0x58; buf
[63] = 0x53;
6330 usb_microdia_control_write(dev
, 0x1100, buf
, 64); // URB 2155
6331 buf
[0] = 0x0d; buf
[1] = 0x11; buf
[2] = 0x11; buf
[3] = 0x15;
6332 buf
[4] = 0x11; buf
[5] = 0x15; buf
[6] = 0x26; buf
[7] = 0x15;
6333 buf
[8] = 0x15; buf
[9] = 0x26; buf
[10] = 0x53; buf
[11] = 0x36;
6334 buf
[12] = 0x2e; buf
[13] = 0x36; buf
[14] = 0x53; buf
[15] = 0x53;
6335 buf
[16] = 0x53; buf
[17] = 0x53; buf
[18] = 0x53; buf
[19] = 0x53;
6336 buf
[20] = 0x53; buf
[21] = 0x53; buf
[22] = 0x53; buf
[23] = 0x53;
6337 buf
[24] = 0x53; buf
[25] = 0x53; buf
[26] = 0x53; buf
[27] = 0x53;
6338 buf
[28] = 0x53; buf
[29] = 0x53; buf
[30] = 0x53; buf
[31] = 0x53;
6339 buf
[32] = 0x53; buf
[33] = 0x53; buf
[34] = 0x53; buf
[35] = 0x53;
6340 buf
[36] = 0x53; buf
[37] = 0x53; buf
[38] = 0x53; buf
[39] = 0x53;
6341 buf
[40] = 0x53; buf
[41] = 0x53; buf
[42] = 0x53; buf
[43] = 0x53;
6342 buf
[44] = 0x53; buf
[45] = 0x53; buf
[46] = 0x53; buf
[47] = 0x53;
6343 buf
[48] = 0x53; buf
[49] = 0x53; buf
[50] = 0x53; buf
[51] = 0x53;
6344 buf
[52] = 0x53; buf
[53] = 0x53; buf
[54] = 0x53; buf
[55] = 0x53;
6345 buf
[56] = 0x53; buf
[57] = 0x53; buf
[58] = 0x53; buf
[59] = 0x53;
6346 buf
[60] = 0x53; buf
[61] = 0x53; buf
[62] = 0x53; buf
[63] = 0x53;
6347 usb_microdia_control_write(dev
, 0x1140, buf
, 64); // URB 2156
6348 buf
[0] = 0x47; // ALEX: 0x04
6349 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); // URB 2157
6351 usb_microdia_control_write(dev
, 0x1061, buf
, 1); // URB 2158
6352 buf
[0] = 0x4b; // ALEX: 0x08
6353 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); // URB 2159
6355 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6357 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6360 // Writes to sensor registers 0x02: Column Start
6361 // 0x03: Window Hight
6362 buf
[0] = 0x00; buf
[1] = 0x16; // coulmn 22
6363 buf
[2] = 0x01; buf
[3] = 0xe1; // 481
6364 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x02, dev
->sensor_flags
, buf
); // URBs 2160-2162
6365 // Writes to sensor registers 0x04: Window Width
6366 // 0x05: Horizontal Blanking
6367 buf
[0] = 0x02; buf
[1] = 0x81; // 641
6368 buf
[2] = 0x00; buf
[3] = 0x04; // 4 columns (pixel clocks)
6369 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x04, dev
->sensor_flags
, buf
); // URBs 2163-2165
6370 // Writes to sensor registers 0x06: Vertical Blanking
6371 // 0x07: Output Control
6372 buf
[0] = 0x00; buf
[1] = 0x2d; // 45 rows
6373 buf
[2] = 0x30; buf
[3] = 0x02; // RESERVED options
6374 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x06, dev
->sensor_flags
, buf
); // URBs 2166-2167
6375 // Writes to sensor register 0x0e: UNDOCUMENTED
6376 buf
[0] = 0x00; buf
[1] = 0x08;
6377 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0e, dev
->sensor_flags
, buf
); // URBs 2168-2170
6380 UDIA_INFO("1 or more errors occured in I2C-message-block 6 !\n");
6383 // END OF I2C MESSAGES
6384 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6386 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6389 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
6391 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
6395 buf
[0] = 0x02; buf
[1] = 0x00; buf
[2] = 0x02; buf
[3] = 0x00;
6396 buf
[4] = 0x28; buf
[5] = 0x3c;
6397 usb_microdia_control_write(dev
, 0x1180, buf
, 6); // URB 2171
6398 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
6399 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); // URB 2172
6401 usb_microdia_control_write(dev
, 0x1189, buf
, 1); // URB 2173
6402 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
6403 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); // URB 2174
6404 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
6405 usb_microdia_control_write(dev
, 0x11ab, buf
, 4); // URB 2175
6407 usb_microdia_control_write(dev
, 0x1061, buf
, 1); // URB 2176
6409 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); // URB 2177
6411 usb_microdia_control_write(dev
, 0x11b9, buf
, 1); // URB 2178
6413 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); // URB 2179
6415 usb_microdia_control_write(dev
, 0x1061, buf
, 1); // URB 2180
6416 buf
[0] = 0x78; // ALEX: 0x7c
6417 usb_microdia_control_write(dev
, 0x1000, buf
, 1); // URB 2181
6418 buf
[0] = 0x18; // ALEX: 0x1c
6419 usb_microdia_control_write(dev
, 0x1002, buf
, 1); // URB 2182
6420 buf
[0] = 0x18; // ALEX: 0x1c
6421 usb_microdia_control_write(dev
, 0x1002, buf
, 1); // URB 2183
6422 buf
[0] = 0x7d; // ALEX: 0xfc
6423 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2184
6425 usb_microdia_control_write(dev
, 0x118a, buf
, 1); // URB 2185
6427 usb_microdia_control_write(dev
, 0x0395, buf
, 1); // URB 2186
6429 if ((last_11b8
[0] == 0x3d) || (last_11b8
[0] == 0x3f))
6431 else if ((last_11b8
[0] == 0xbd) || (last_11b8
[0] == 0xbf))
6433 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2187
6434 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2188 // 0x38
6437 else if (buf
[0] == 0xb8)
6439 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2189
6440 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2190 // 0xb9
6443 else if (buf
[0] == 0xb9)
6445 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2191
6446 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2192 // 0xba
6449 else if (buf
[0] == 0xba)
6451 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2193
6452 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2194 // 0x3b
6455 else if (buf
[0] == 0xbb)
6457 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2195
6458 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2196 // 0x3c
6461 else if (buf
[0] == 0xbc)
6463 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2197
6464 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2198 // 0x3d
6465 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6469 else if (buf
[0] == 0xbd)
6471 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2199
6472 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2200
6475 else if (buf
[0] == 0xbe)
6477 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2201
6478 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); // URB 2202
6480 buf
[0] = buf
[0] & 0xf0; // 0xf0 or 0x70
6481 buf
[0] = buf
[0] | 0x0d; // 0x0c => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 8 READS/WRITES
6482 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 2089
6484 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6487 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6489 // Write to sensor register 0x06: Vertical Blanking
6490 buf
[0] = 0x00; buf
[1] = 0x2d; // 45 rows
6491 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
); // URBs 2204-2206
6492 // Write to sensor register 0x05: Horizontal Blanking
6493 buf
[0] = 0x00; buf
[1] = 0x04; // 4 columns (pixel clocks)
6494 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
); // URBs 2207-2209
6495 // Read of sensor register 0x36: Chip Version (mirror of reg0xff)
6496 retI2C
+= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x36, dev
->sensor_flags
, buf
); // URBs 2211-2215 // 0x82 0x3a
6498 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6500 // Write to sensor register 0x0a: Pixel Clock Speed
6501 buf
[0] = 0x00; buf
[1] = 0x00; // default
6502 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
);
6503 // Write to sensor register 0x06: Vertical Blanking
6504 buf
[0] = 0x00; buf
[1] = 0x29; // 41 rows
6505 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
);
6506 // Write to sensor register 0x05: Horizontal Blanking
6507 buf
[0] = 0x00; buf
[1] = 0x09; // 9 columns (pixel clocks)
6508 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
);
6509 // Read of sensor register 0x00: Chip Version (=reg0xff)
6510 retI2C
+= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x00, dev
->sensor_flags
, buf
); // 0x82 0x43
6514 UDIA_INFO("1 or more errors occured in I2C-message-block 7 !\n");
6517 // END OF I2C MESSAGES
6518 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6522 usb_microdia_control_write(dev
, 0x1061, buf
, 1); // URB 2216
6525 /*** NOW DRIVER DOES STOP-SEQUENCE
6526 - WITHOUT WRITES TO 0x1007 AND 0x1006 (URBs 3544-3550) => MT9V111
6527 - WRITING 0x40 INSTEAD OF 0x60 TO 0x1007 AND 0x1006 => MT9V011
6529 /*** 2nd, 3rd, ... CYCLE: ALL MESSAGES (URBs 1953 - URBs 2216) ARE REPEATED ***/
6530 /*** ----- WE DON'T DO THIS, IT SEEMS TO BE UNNECESSARY ----- ***/
6532 // Setup IFP registers for AE and AWB (new, not in the logs):
6533 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6535 mt9v111_setup_autoexposure(dev
);
6536 mt9v111_setup_autowhitebalance(dev
);
6537 mt9v111_set_autocorrections(dev
, 1);
6540 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6544 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6548 usb_microdia_control_write(dev
, 0x1007, buf
, 1); // URB 2489
6549 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
6553 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
6557 usb_microdia_control_write(dev
, 0x1006, buf
, 1); // URB 2490
6558 // => These two writes seem to cause the cam to start sending isochronus USB messages
6563 int microdia_627b_start_stream(struct usb_microdia
*dev
)
6570 buf
[0] = 0x00; /** Will have to be set for every single interrupt. */
6571 //ret = usb_interrupt_msg(dev->udev, 0x00000083, buf, 0x0000001, &actual, 1000); // URB 43
6575 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); // URB 44
6576 if(ret
< 0) goto err
;
6578 //ret = usb_set_interface(dev->udev, 0, 8);
6579 //if(ret < 0) goto err;
6581 //buf[0] = 0x00; /** Will have to be set for every single interrupt. */
6582 //ret = usb_interrupt_msg(dev->udev, 0x00000083, buf, 0x0000001, &actual, 1000); // URB 45
6586 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); // URB 46
6587 if(ret
< 0) goto err
;
6591 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); // URB 47
6592 if(ret
< 0) goto err
;
6596 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); // URB 48
6597 if(ret
< 0) goto err
;
6601 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); // URB 49
6602 if(ret
< 0) goto err
;
6606 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); // URB 50
6607 if(ret
< 0) goto err
;
6610 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20; buf
[3] = 0x10; buf
[4] = 0x08;
6611 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5); // URB 51
6612 if(ret
< 0) goto err
;
6615 buf
[0] = 0x80; buf
[1] = 0x21; buf
[2] = 0x00; buf
[3] = 0x00;
6616 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
6618 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9); // URB 52
6619 if(ret
< 0) goto err
;
6620 //udelay(400); //delay test
6622 //transferbufferlength is 18, but data is 24 bytes long, what to do ?
6624 buf
[0] = 0x45; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30; buf
[4] = 0x00;
6625 buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed; buf
[8] = 0x0f; buf
[9] = 0xda;
6626 buf
[10] = 0x0f; buf
[11] = 0x3a; buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00;
6627 buf
[15] = 0xd0; buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
6628 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
6629 ret
= usb_microdia_control_write(dev
, reg
, buf
, 24); // URB 53
6630 if(ret
< 0) goto err
;
6633 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
6634 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3); // URB 54
6635 if(ret
< 0) goto err
;
6638 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
6639 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5); // URB 55
6640 if(ret
< 0) goto err
;
6643 buf
[0] = 0x86; buf
[1] = 0x8c; buf
[2] = 0x08;
6644 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3); // URB 56
6645 if(ret
< 0) goto err
;
6648 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20; buf
[4] = 0x20;
6649 buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b; buf
[8] = 0x4f; buf
[9] = 0x61;
6650 buf
[10] = 0x71; buf
[11] = 0x80; buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab;
6651 buf
[15] = 0xb8; buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
6652 buf
[20] = 0xf4; buf
[21] = 0xff;
6653 ret
= usb_microdia_control_write(dev
, reg
, buf
, 22); // URB 57
6654 if(ret
< 0) goto err
;
6657 buf
[0] = 0x00; buf
[1] = 0x00;
6658 ret
= usb_microdia_control_write(dev
, reg
, buf
, 2); // URB 58
6659 if(ret
< 0) goto err
;
6662 buf
[0] = 0x60; buf
[1] = 0x28; buf
[2] = 0x00; buf
[3] = 0x08; buf
[4] = 0x00;
6663 buf
[5] = 0x40; buf
[6] = 0x01; buf
[7] = 0xf0; buf
[8] = 0x00;
6664 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9); // URB 59
6665 if(ret
< 0) goto err
;
6669 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1); // URB 60
6670 if(ret
< 0) goto err
;
6674 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6675 if(ret
< 0) goto err
;
6679 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
6680 dev
->sensor_flags
, buf
);
6681 if(ret
< 0) goto errI2C
;
6684 buf
[0] = 0x01; buf
[1] = 0x74; buf
[2] = 0x92; buf
[3] = 0x00;
6685 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6686 dev
->sensor_flags
, buf
);
6687 if(ret
< 0) goto errI2C
;
6690 buf
[0] = 0x00; buf
[1] = 0x7d; buf
[2] = 0x62; buf
[3] = 0x00;
6691 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6692 dev
->sensor_flags
, buf
);
6693 if(ret
< 0) goto errI2C
;
6696 buf
[0] = 0x83; buf
[1] = 0x01;
6697 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, reg
,
6698 dev
->sensor_flags
, buf
);
6699 if(ret
< 0) goto errI2C
;
6702 buf
[0] = 0x00; buf
[1] = 0x08; buf
[2] = 0x04; buf
[3] = 0x62;
6703 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6704 dev
->sensor_flags
, buf
);
6705 if(ret
< 0) goto errI2C
;
6708 buf
[0] = 0x00; buf
[1] = 0x40; buf
[2] = 0x05; buf
[3] = 0xf8;
6709 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6710 dev
->sensor_flags
, buf
);
6711 if(ret
< 0) goto errI2C
;
6714 buf
[0] = 0x2e; buf
[1] = 0x00; buf
[2] = 0x02;
6715 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 3, reg
,
6716 dev
->sensor_flags
, buf
);
6717 if(ret
< 0) goto errI2C
;
6720 buf
[0] = 0x10; buf
[1] = 0x60; buf
[2] = 0x02; buf
[3] = 0x7b;
6721 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6722 dev
->sensor_flags
, buf
);
6723 if(ret
< 0) goto errI2C
;
6727 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
6728 dev
->sensor_flags
, buf
);
6729 if(ret
< 0) goto errI2C
;
6732 buf
[0] = 0x01; buf
[1] = 0x0e;
6733 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, reg
,
6734 dev
->sensor_flags
, buf
);
6735 if(ret
< 0) goto errI2C
;
6738 buf
[0] = 0x07; buf
[1] = 0x07; buf
[2] = 0x07; buf
[3] = 0x07;
6739 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6740 dev
->sensor_flags
, buf
);
6741 if(ret
< 0) goto errI2C
;
6744 buf
[0] = 0x68; buf
[1] = 0x58; buf
[2] = 0xd4; buf
[3] = 0x80;
6745 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6746 dev
->sensor_flags
, buf
);
6747 if(ret
< 0) goto errI2C
;
6750 buf
[0] = 0x80; buf
[1] = 0x3c; buf
[2] = 0x00; buf
[3] = 0x00;
6751 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6752 dev
->sensor_flags
, buf
);
6753 if(ret
< 0) goto errI2C
;
6756 buf
[0] = 0x80; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x62;
6757 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6758 dev
->sensor_flags
, buf
);
6759 if(ret
< 0) goto errI2C
;
6762 buf
[0] = 0x08; buf
[1] = 0x30; buf
[2] = 0xb4;
6763 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 3, reg
,
6764 dev
->sensor_flags
, buf
);
6765 if(ret
< 0) goto errI2C
;
6768 buf
[0] = 0x00; buf
[1] = 0x07; buf
[2] = 0x84; buf
[3] = 0x00;
6769 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6770 dev
->sensor_flags
, buf
);
6771 if(ret
< 0) goto errI2C
;
6774 buf
[0] = 0x0c; buf
[1] = 0x02; buf
[2] = 0x43; buf
[3] = 0x00;
6775 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6776 dev
->sensor_flags
, buf
);
6777 if(ret
< 0) goto errI2C
;
6780 buf
[0] = 0x02; buf
[1] = 0x6c; buf
[2] = 0x19; buf
[3] = 0x0e;
6781 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6782 dev
->sensor_flags
, buf
);
6783 if(ret
< 0) goto errI2C
;
6786 buf
[0] = 0x41; buf
[1] = 0xc1; buf
[2] = 0x22; buf
[3] = 0x08;
6787 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6788 dev
->sensor_flags
, buf
);
6789 if(ret
< 0) goto errI2C
;
6793 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, reg
,
6794 dev
->sensor_flags
, NULL
);
6795 if(ret
< 0) goto errI2C
;
6798 buf
[0] = 0xf0; buf
[1] = 0x10; buf
[2] = 0x78; buf
[3] = 0xa8;
6799 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6800 dev
->sensor_flags
, buf
);
6801 if(ret
< 0) goto errI2C
;
6804 buf
[0] = 0x60; buf
[1] = 0x80; buf
[2] = 0x00; buf
[3] = 0x00;
6805 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6806 dev
->sensor_flags
, buf
);
6807 if(ret
< 0) goto errI2C
;
6810 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
6811 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6812 dev
->sensor_flags
, buf
);
6813 if(ret
< 0) goto errI2C
;
6817 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, reg
,
6818 dev
->sensor_flags
, NULL
);
6819 if(ret
< 0) goto errI2C
;
6822 buf
[0] = 0xba; buf
[1] = 0x9a; buf
[2] = 0x22; buf
[3] = 0xb9;
6823 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6824 dev
->sensor_flags
, buf
);
6825 if(ret
< 0) goto errI2C
;
6828 buf
[0] = 0x9b; buf
[1] = 0x10; buf
[2] = 0xf0; buf
[3] = 0x05;
6829 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6830 dev
->sensor_flags
, buf
);
6831 if(ret
< 0) goto errI2C
;
6835 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
6836 dev
->sensor_flags
, buf
);
6837 if(ret
< 0) goto errI2C
;
6840 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x30;
6841 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6842 dev
->sensor_flags
, buf
);
6843 if(ret
< 0) goto errI2C
;
6847 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
6848 dev
->sensor_flags
, buf
);
6849 if(ret
< 0) goto errI2C
;
6852 buf
[0] = 0x80; buf
[1] = 0x7a; buf
[2] = 0x90; buf
[3] = 0x80;
6853 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6854 dev
->sensor_flags
, buf
);
6855 if(ret
< 0) goto errI2C
;
6859 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
6860 dev
->sensor_flags
, buf
);
6861 if(ret
< 0) goto errI2C
;
6864 buf
[0] = 0x99; buf
[1] = 0x99; buf
[2] = 0xcf;
6865 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 3, reg
,
6866 dev
->sensor_flags
, buf
);
6867 if(ret
< 0) goto errI2C
;
6870 buf
[0] = 0x00; buf
[1] = 0x00;
6871 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, reg
,
6872 dev
->sensor_flags
, buf
);
6873 if(ret
< 0) goto errI2C
;
6877 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6878 if(ret
< 0) goto err
;
6882 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6883 if(ret
< 0) goto err
;
6886 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6887 if(ret
< 0) goto err
;
6891 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6892 if(ret
< 0) goto err
;
6894 // TRY TO READ FROM EEPROM:
6896 ret
= sn9c20x_read_i2c_data(dev
, 0x50, 1, reg
, SN9C20X_I2C_2WIRE
, buf
);
6899 UDIA_INFO("No EEPROM found\n");
6903 UDIA_INFO("Read from EEPROM successful\n");
6908 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6909 if(ret
< 0) goto err
;
6913 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6914 if(ret
< 0) goto err
;
6918 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6919 if(ret
< 0) goto err
;
6923 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6924 if(ret
< 0) goto err
;
6928 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6929 if(ret
< 0) goto err
;
6933 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6934 if(ret
< 0) goto err
;
6938 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
6939 dev
->sensor_flags
, buf
);
6940 if(ret
< 0) goto errI2C
;
6943 buf
[0] = 0x10; buf
[1] = 0x61; buf
[2] = 0x02; buf
[3] = 0x7a;
6944 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, reg
,
6945 dev
->sensor_flags
, buf
);
6946 if(ret
< 0) goto errI2C
;
6950 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, reg
,
6951 dev
->sensor_flags
, NULL
);
6952 if(ret
< 0) goto errI2C
;
6956 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
6957 dev
->sensor_flags
, buf
);
6958 if(ret
< 0) goto errI2C
;
6962 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
6963 dev
->sensor_flags
, buf
);
6964 if(ret
< 0) goto errI2C
;
6968 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
6969 dev
->sensor_flags
, buf
);
6970 if(ret
< 0) goto errI2C
;
6974 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
6975 dev
->sensor_flags
, buf
);
6976 if(ret
< 0) goto errI2C
;
6980 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
6981 dev
->sensor_flags
, buf
);
6982 if(ret
< 0) goto errI2C
;
6985 buf
[0] = 0x01; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00; buf
[4] = 0x28;
6987 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
6988 if(ret
< 0) goto err
;
6991 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
6992 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
6993 if(ret
< 0) goto err
;
6997 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6998 if(ret
< 0) goto err
;
7001 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
7002 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
7003 if(ret
< 0) goto err
;
7006 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
7007 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
7008 if(ret
< 0) goto err
;
7012 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7013 if(ret
< 0) goto err
;
7017 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7018 if(ret
< 0) goto err
;
7022 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7023 if(ret
< 0) goto err
;
7027 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7028 if(ret
< 0) goto err
;
7032 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7033 if(ret
< 0) goto err
;
7037 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7038 if(ret
< 0) goto err
;
7042 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7043 if(ret
< 0) goto err
;
7044 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7045 if(ret
< 0) goto err
;
7049 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7050 if(ret
< 0) goto err
;
7051 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7052 if(ret
< 0) goto err
;
7056 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7057 if(ret
< 0) goto err
;
7058 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7059 if(ret
< 0) goto err
;
7063 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7064 if(ret
< 0) goto err
;
7065 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7066 if(ret
< 0) goto err
;
7070 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7071 if(ret
< 0) goto err
;
7072 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7073 if(ret
< 0) goto err
;
7077 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7078 if(ret
< 0) goto err
;
7079 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7080 if(ret
< 0) goto err
;
7084 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7085 if(ret
< 0) goto err
;
7086 //ret = usb_microdia_control_read(dev, reg, buf, 1);
7087 //if(ret < 0) goto err;
7091 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7092 dev
->sensor_flags
, buf
);
7093 if(ret
< 0) goto errI2C
;
7097 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7098 dev
->sensor_flags
, buf
);
7099 if(ret
< 0) goto errI2C
;
7103 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7104 dev
->sensor_flags
, buf
);
7105 if(ret
< 0) goto errI2C
;
7109 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7110 dev
->sensor_flags
, buf
);
7111 if(ret
< 0) goto errI2C
;
7115 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7116 dev
->sensor_flags
, buf
);
7117 if(ret
< 0) goto errI2C
;
7121 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7122 dev
->sensor_flags
, buf
);
7123 if(ret
< 0) goto errI2C
;
7127 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7128 dev
->sensor_flags
, buf
);
7129 if(ret
< 0) goto errI2C
;
7133 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7134 dev
->sensor_flags
, buf
);
7135 if(ret
< 0) goto errI2C
;
7139 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7140 dev
->sensor_flags
, buf
);
7141 if(ret
< 0) goto errI2C
;
7145 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7146 dev
->sensor_flags
, buf
);
7147 if(ret
< 0) goto errI2C
;
7151 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7152 dev
->sensor_flags
, buf
);
7153 if(ret
< 0) goto errI2C
;
7157 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7158 dev
->sensor_flags
, buf
);
7159 if(ret
< 0) goto errI2C
;
7163 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7164 dev
->sensor_flags
, buf
);
7165 if(ret
< 0) goto errI2C
;
7169 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7170 dev
->sensor_flags
, buf
);
7171 if(ret
< 0) goto errI2C
;
7174 buf
[0] = 0x78; buf
[1] = 0x78;
7175 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, reg
,
7176 dev
->sensor_flags
, buf
);
7177 if(ret
< 0) goto errI2C
;
7181 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7182 if(ret
< 0) goto err
;
7186 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7187 if(ret
< 0) goto err
;
7191 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7192 if(ret
< 0) goto err
;
7196 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7197 if(ret
< 0) goto err
;
7201 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7202 if(ret
< 0) goto err
;
7206 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7207 if(ret
< 0) goto err
;
7211 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7212 if(ret
< 0) goto err
;
7216 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7217 if(ret
< 0) goto err
;
7221 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7222 if(ret
< 0) goto err
;
7226 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7227 if(ret
< 0) goto err
;
7230 buf
[0] = 0x00; buf
[1] = 0x33; buf
[2] = 0x53; buf
[3] = 0x6b; buf
[4] = 0x7c;
7231 buf
[5] = 0x8b; buf
[6] = 0x99; buf
[7] = 0xa6; buf
[8] = 0xb2; buf
[9] = 0xbd;
7232 buf
[10] = 0xc8; buf
[11] = 0xd2; buf
[12] = 0xdc; buf
[13] = 0xe5; buf
[14] = 0xee;
7233 buf
[15] = 0xf7; buf
[16] = 0xff;
7234 ret
= usb_microdia_control_write(dev
, reg
, buf
, 17);
7235 if(ret
< 0) goto err
;
7236 //transferbufferlength was only 11 ?
7239 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00;
7240 buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00;
7241 buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00;
7242 buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0xee; buf
[19] = 0x00;
7244 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7245 if(ret
< 0) goto err
;
7246 //transferbufferlength was only 15 ?
7249 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00;
7250 buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00;
7251 buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00;
7252 buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0xee; buf
[19] = 0x00;
7254 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7255 if(ret
< 0) goto err
;
7256 //transferbufferlength was only 15 ?
7259 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00;
7260 buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00;
7261 buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00;
7262 buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0xee; buf
[19] = 0x00;
7264 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7265 if(ret
< 0) goto err
;
7266 //transferbufferlength was only 15 ?
7269 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00;
7270 buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00;
7271 buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00;
7272 buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0xee; buf
[19] = 0x00;
7274 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7275 if(ret
< 0) goto err
;
7276 //transferbufferlength was only 15 ?
7279 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00;
7280 buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00;
7281 buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00;
7282 buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0xee; buf
[19] = 0x00;
7284 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7285 if(ret
< 0) goto err
;
7286 //transferbufferlength was only 15 ?
7289 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00;
7290 buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00;
7291 buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00;
7292 buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0xee; buf
[19] = 0x00;
7294 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7295 if(ret
< 0) goto err
;
7296 //transferbufferlength was only 15 ?
7299 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00;
7300 buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00;
7301 buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00;
7302 buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0xee; buf
[19] = 0x00;
7304 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7305 if(ret
< 0) goto err
;
7306 //transferbufferlength was only 15 ?
7309 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00;
7310 buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00;
7311 buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00;
7312 buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0xee; buf
[19] = 0x00;
7314 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7315 if(ret
< 0) goto err
;
7316 //transferbufferlength was only 15 ?
7319 buf
[0] = 0x15; buf
[1] = 0x00; buf
[2] = 0x29; buf
[3] = 0x00; buf
[4] = 0x08;
7320 buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00;
7321 buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00;
7322 buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0xee; buf
[19] = 0x00;
7324 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7325 if(ret
< 0) goto err
;
7326 //transferbufferlength was only 15 ?
7330 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7331 if(ret
< 0) goto err
;
7335 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7336 if(ret
< 0) goto err
;
7339 buf
[0] = 0x15; buf
[1] = 0x00; buf
[2] = 0x29; buf
[3] = 0x00; buf
[4] = 0x08;
7340 buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00;
7341 buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00;
7342 buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0xee; buf
[19] = 0x00;
7344 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7345 if(ret
< 0) goto err
;
7346 //transferbufferlength was only 15 ?
7350 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7351 if(ret
< 0) goto err
;
7355 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7356 if(ret
< 0) goto err
;
7360 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7361 if(ret
< 0) goto err
;
7365 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7366 if(ret
< 0) goto err
;
7370 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7371 if(ret
< 0) goto err
;
7374 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
7375 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
7376 if(ret
< 0) goto err
;
7379 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00;
7380 buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00;
7381 buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00;
7382 buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00;
7383 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x00; buf
[23] = 0x00; buf
[24] = 0x00;
7384 buf
[25] = 0x00; buf
[26] = 0x00; buf
[27] = 0x00; buf
[28] = 0x00; buf
[29] = 0x00;
7385 buf
[30] = 0x00; buf
[31] = 0x00; buf
[32] = 0x00;
7386 ret
= usb_microdia_control_write(dev
, reg
, buf
, 33);
7387 if(ret
< 0) goto err
;
7388 //transferbufferlength was only 30 ?
7392 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7393 if(ret
< 0) goto err
;
7397 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7398 if(ret
< 0) goto err
;
7402 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7403 if(ret
< 0) goto err
;
7407 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7408 if(ret
< 0) goto err
;
7411 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05; buf
[4] = 0x04;
7413 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
7414 if(ret
< 0) goto err
;
7417 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
7418 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
7419 if(ret
< 0) goto err
;
7422 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x32; buf
[3] = 0xdd;
7423 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
7424 if(ret
< 0) goto err
;
7428 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7429 if(ret
< 0) goto err
;
7433 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7434 if(ret
< 0) goto err
;
7438 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7439 if(ret
< 0) goto err
;
7442 buf
[0] = 0x0d; buf
[1] = 0x08; buf
[2] = 0x08; buf
[3] = 0x0d; buf
[4] = 0x08;
7443 buf
[5] = 0x08; buf
[6] = 0x0d; buf
[7] = 0x0d; buf
[8] = 0x0d; buf
[9] = 0x0d;
7444 buf
[10] = 0x11; buf
[11] = 0x0d; buf
[12] = 0x0d; buf
[13] = 0x11; buf
[14] = 0x15;
7445 buf
[15] = 0x21; buf
[16] = 0x15; buf
[17] = 0x15; buf
[18] = 0x11; buf
[19] = 0x11;
7446 buf
[20] = 0x15; buf
[21] = 0x2a; buf
[22] = 0x1d; buf
[23] = 0x1d; buf
[24] = 0x19;
7447 buf
[25] = 0x21; buf
[26] = 0x32; buf
[27] = 0x2a; buf
[28] = 0x32; buf
[29] = 0x32;
7448 buf
[30] = 0x2e; buf
[31] = 0x2a; buf
[32] = 0x2e; buf
[33] = 0x2e; buf
[34] = 0x36;
7449 buf
[35] = 0x3a; buf
[36] = 0x4b; buf
[37] = 0x43; buf
[38] = 0x36; buf
[39] = 0x3a;
7450 buf
[40] = 0x47; buf
[41] = 0x3a; buf
[42] = 0x2e; buf
[43] = 0x2e; buf
[44] = 0x43;
7451 buf
[45] = 0x5c; buf
[46] = 0x43; buf
[47] = 0x47; buf
[48] = 0x4f; buf
[49] = 0x53;
7452 buf
[50] = 0x58; buf
[51] = 0x58; buf
[52] = 0x58; buf
[53] = 0x32; buf
[54] = 0x3f;
7453 buf
[55] = 0x60; buf
[56] = 0x64; buf
[57] = 0x5c; buf
[58] = 0x53; buf
[59] = 0x64;
7454 buf
[60] = 0x4b; buf
[61] = 0x53; buf
[62] = 0x58; buf
[63] = 0x53;
7455 ret
= usb_microdia_control_write(dev
, reg
, buf
, 64);
7456 if(ret
< 0) goto err
;
7457 //transferbufferlength is only 40 ?
7460 buf
[0] = 0x0d; buf
[1] = 0x11; buf
[2] = 0x11; buf
[3] = 0x15; buf
[4] = 0x11;
7461 buf
[5] = 0x15; buf
[6] = 0x26; buf
[7] = 0x15; buf
[8] = 0x15; buf
[9] = 0x26;
7462 buf
[10] = 0x53; buf
[11] = 0x36; buf
[12] = 0x2e; buf
[13] = 0x36; buf
[14] = 0x53;
7463 buf
[15] = 0x53; buf
[16] = 0x53; buf
[17] = 0x53; buf
[18] = 0x53; buf
[19] = 0x53;
7464 buf
[20] = 0x53; buf
[21] = 0x53; buf
[22] = 0x53; buf
[23] = 0x53; buf
[24] = 0x53;
7465 buf
[25] = 0x53; buf
[26] = 0x53; buf
[27] = 0x53; buf
[28] = 0x53; buf
[29] = 0x53;
7466 buf
[30] = 0x53; buf
[31] = 0x53; buf
[32] = 0x53; buf
[33] = 0x53; buf
[34] = 0x53;
7467 buf
[35] = 0x53; buf
[36] = 0x53; buf
[37] = 0x53; buf
[38] = 0x53; buf
[39] = 0x53;
7468 buf
[40] = 0x53; buf
[41] = 0x53; buf
[42] = 0x53; buf
[43] = 0x53; buf
[44] = 0x53;
7469 buf
[45] = 0x53; buf
[46] = 0x53; buf
[47] = 0x53; buf
[48] = 0x53; buf
[49] = 0x53;
7470 buf
[50] = 0x53; buf
[51] = 0x53; buf
[52] = 0x53; buf
[53] = 0x53; buf
[54] = 0x53;
7471 buf
[55] = 0x53; buf
[56] = 0x53; buf
[57] = 0x53; buf
[58] = 0x53; buf
[59] = 0x53;
7472 buf
[60] = 0x53; buf
[61] = 0x53; buf
[62] = 0x53; buf
[63] = 0x53;
7473 ret
= usb_microdia_control_write(dev
, reg
, buf
, 64);
7474 if(ret
< 0) goto err
;
7475 //transferbufferlength is only 40 ?
7479 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7480 if(ret
< 0) goto err
;
7484 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7485 if(ret
< 0) goto err
;
7489 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7490 if(ret
< 0) goto err
;
7494 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7495 dev
->sensor_flags
, buf
);
7496 if(ret
< 0) goto errI2C
;
7499 buf
[0] = 0x01; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00; buf
[4] = 0x28;
7501 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
7502 if(ret
< 0) goto err
;
7505 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
7506 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
7507 if(ret
< 0) goto err
;
7511 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7512 if(ret
< 0) goto err
;
7515 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
7516 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
7517 if(ret
< 0) goto err
;
7520 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
7521 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
7522 if(ret
< 0) goto err
;
7526 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7527 if(ret
< 0) goto err
;
7531 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7532 if(ret
< 0) goto err
;
7536 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7537 if(ret
< 0) goto err
;
7541 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7542 if(ret
< 0) goto err
;
7546 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7547 if(ret
< 0) goto err
;
7551 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7552 if(ret
< 0) goto err
;
7556 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7557 if(ret
< 0) goto err
;
7561 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7562 if(ret
< 0) goto err
;
7566 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7567 if(ret
< 0) goto err
;
7571 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7572 if(ret
< 0) goto err
;
7576 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7577 if(ret
< 0) goto err
;
7581 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7582 if(ret
< 0) goto err
;
7583 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7584 if(ret
< 0) goto err
;
7588 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7589 if(ret
< 0) goto err
;
7590 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7591 if(ret
< 0) goto err
;
7595 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7596 if(ret
< 0) goto err
;
7597 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7598 if(ret
< 0) goto err
;
7602 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7603 if(ret
< 0) goto err
;
7604 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7605 if(ret
< 0) goto err
;
7609 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7610 if(ret
< 0) goto err
;
7611 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7612 if(ret
< 0) goto err
;
7616 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7617 if(ret
< 0) goto err
;
7618 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
7619 if(ret
< 0) goto err
;
7623 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7624 if(ret
< 0) goto err
;
7628 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7629 dev
->sensor_flags
, buf
);
7630 if(ret
< 0) goto errI2C
;
7634 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7635 dev
->sensor_flags
, buf
);
7636 if(ret
< 0) goto errI2C
;
7640 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7641 dev
->sensor_flags
, buf
);
7642 if(ret
< 0) goto errI2C
;
7646 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7647 dev
->sensor_flags
, buf
);
7648 if(ret
< 0) goto errI2C
;
7652 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7653 dev
->sensor_flags
, buf
);
7654 if(ret
< 0) goto errI2C
;
7657 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7658 dev
->sensor_flags
, buf
);
7659 if(ret
< 0) goto errI2C
;
7662 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7663 dev
->sensor_flags
, buf
);
7664 if(ret
< 0) goto errI2C
;
7667 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7668 dev
->sensor_flags
, buf
);
7669 if(ret
< 0) goto errI2C
;
7672 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7673 dev
->sensor_flags
, buf
);
7674 if(ret
< 0) goto errI2C
;
7678 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7679 if(ret
< 0) goto err
;
7683 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7684 if(ret
< 0) goto err
;
7688 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7689 if(ret
< 0) goto err
;
7693 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7694 if(ret
< 0) goto err
;
7698 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7699 if(ret
< 0) goto err
;
7702 buf
[0] = 0x15; buf
[1] = 0x00; buf
[2] = 0x29; buf
[3] = 0x00; buf
[4] = 0x08;
7703 buf
[5] = 0x00; buf
[6] = 0xf9; buf
[7] = 0x0f; buf
[8] = 0xc4; buf
[9] = 0x0f;
7704 buf
[10] = 0x44; buf
[11] = 0x00; buf
[12] = 0x3f; buf
[13] = 0x00; buf
[14] = 0xd8;
7705 buf
[15] = 0x0f; buf
[16] = 0xe9; buf
[17] = 0x0f; buf
[18] = 0xeb; buf
[19] = 0x00;
7707 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7708 if(ret
< 0) goto err
;
7709 //transferbufferlength is only 15 ?
7713 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7714 dev
->sensor_flags
, buf
);
7715 if(ret
< 0) goto errI2C
;
7719 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7720 dev
->sensor_flags
, buf
);
7721 if(ret
< 0) goto errI2C
;
7724 buf
[0] = 0x15; buf
[1] = 0x00; buf
[2] = 0x29; buf
[3] = 0x00; buf
[4] = 0x08;
7725 buf
[5] = 0x00; buf
[6] = 0xf9; buf
[7] = 0x0f; buf
[8] = 0xc4; buf
[9] = 0x0f;
7726 buf
[10] = 0x44; buf
[11] = 0x00; buf
[12] = 0x3f; buf
[13] = 0x00; buf
[14] = 0xd8;
7727 buf
[15] = 0x0f; buf
[16] = 0xe9; buf
[17] = 0x0f; buf
[18] = 0xeb; buf
[19] = 0x00;
7729 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7730 if(ret
< 0) goto err
;
7731 //transferbufferlength is only 15 ?
7735 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7736 dev
->sensor_flags
, buf
);
7737 if(ret
< 0) goto errI2C
;
7740 buf
[0] = 0x15; buf
[1] = 0x00; buf
[2] = 0x29; buf
[3] = 0x00; buf
[4] = 0x08;
7741 buf
[5] = 0x00; buf
[6] = 0xf9; buf
[7] = 0x0f; buf
[8] = 0xc4; buf
[9] = 0x0f;
7742 buf
[10] = 0x44; buf
[11] = 0x00; buf
[12] = 0x3f; buf
[13] = 0x00; buf
[14] = 0xd8;
7743 buf
[15] = 0x0f; buf
[16] = 0xe9; buf
[17] = 0x0f; buf
[18] = 0xeb; buf
[19] = 0x00;
7745 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7746 if(ret
< 0) goto err
;
7747 //transferbufferlength is only 15 ?
7750 buf
[0] = 0x00; buf
[1] = 0x01;
7751 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, reg
,
7752 dev
->sensor_flags
, buf
);
7753 if(ret
< 0) goto errI2C
;
7757 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, reg
,
7758 dev
->sensor_flags
, buf
);
7759 if(ret
< 0) goto errI2C
;
7762 buf
[0] = 0x50; buf
[1] = 0x60;
7763 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, reg
,
7764 dev
->sensor_flags
, buf
);
7765 if(ret
< 0) goto errI2C
;
7769 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7770 if(ret
< 0) goto err
;
7774 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7775 if(ret
< 0) goto err
;
7779 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7780 if(ret
< 0) goto err
;
7784 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7785 if(ret
< 0) goto err
;
7788 buf
[0] = 0xfc; buf
[1] = 0x04;
7789 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, reg
,
7790 dev
->sensor_flags
, buf
);
7791 if(ret
< 0) goto errI2C
;
7794 buf
[0] = 0x15; buf
[1] = 0x00; buf
[2] = 0x29; buf
[3] = 0x00; buf
[4] = 0x08;
7795 buf
[5] = 0x00; buf
[6] = 0xf9; buf
[7] = 0x0f; buf
[8] = 0xc8; buf
[9] = 0x0f;
7796 buf
[10] = 0x3f; buf
[11] = 0x00; buf
[12] = 0x3b; buf
[13] = 0x00; buf
[14] = 0xdb;
7797 buf
[15] = 0x0f; buf
[16] = 0xeb; buf
[17] = 0x0f; buf
[18] = 0xeb; buf
[19] = 0x00;
7799 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7800 if(ret
< 0) goto err
;
7801 //transferbufferlength is only 15 ?
7804 buf
[0] = 0x1f; buf
[1] = 0x00;
7805 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, reg
,
7806 dev
->sensor_flags
, buf
);
7807 if(ret
< 0) goto errI2C
;
7810 buf
[0] = 0x48; buf
[1] = 0x58;
7811 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, reg
,
7812 dev
->sensor_flags
, buf
);
7813 if(ret
< 0) goto errI2C
;
7817 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7818 if(ret
< 0) goto err
;
7822 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7823 if(ret
< 0) goto err
;
7827 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7828 if(ret
< 0) goto err
;
7832 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7833 if(ret
< 0) goto err
;
7836 buf
[0] = 0xf6; buf
[1] = 0x0b;
7837 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, reg
,
7838 dev
->sensor_flags
, buf
);
7839 if(ret
< 0) goto errI2C
;
7842 buf
[0] = 0x15; buf
[1] = 0x00; buf
[2] = 0x29; buf
[3] = 0x00; buf
[4] = 0x08;
7843 buf
[5] = 0x00; buf
[6] = 0xfc; buf
[7] = 0x0f; buf
[8] = 0xdc; buf
[9] = 0x0f;
7844 buf
[10] = 0x29; buf
[11] = 0x00; buf
[12] = 0x26; buf
[13] = 0x00; buf
[14] = 0xe8;
7845 buf
[15] = 0x0f; buf
[16] = 0xf3; buf
[17] = 0x0f; buf
[18] = 0xeb; buf
[19] = 0x00;
7847 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
7848 if(ret
< 0) goto err
;
7849 //transferbufferlength is only 15 ?
7853 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7854 if(ret
< 0) goto err
;
7858 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7859 if(ret
< 0) goto err
;
7863 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7864 if(ret
< 0) goto err
;
7868 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7869 if(ret
< 0) goto err
;
7873 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7874 if(ret
< 0) goto err
;
7877 buf
[0] = 0x50; buf
[1] = 0x60;
7878 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, reg
,
7879 dev
->sensor_flags
, buf
);
7880 if(ret
< 0) goto errI2C
;
7884 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7885 if(ret
< 0) goto err
;
7889 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7890 if(ret
< 0) goto err
;
7894 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7895 if(ret
< 0) goto err
;
7899 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7900 if(ret
< 0) goto err
;
7904 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg
, ret
);
7908 UDIA_ERROR("r/w in sensor register %x failed (%d)!\n", reg
, ret
);
7914 * @brief From UsbSnoop-plugin-parsed.log
7918 * @returns 0 (OK) or <0 (Error)
7920 * @author Vincent, Kuzja
7922 int microdia_6288_start_stream(struct usb_microdia
*dev
)
7932 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7933 if(ret
< 0) goto err
;
7937 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7938 if(ret
< 0) goto err
;
7942 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7943 if(ret
< 0) goto err
;
7947 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7948 if(ret
< 0) goto err
;
7952 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7953 if(ret
< 0) goto err
;
7957 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
7958 if(ret
< 0) goto err
;
7961 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20; buf
[3] = 0x10; buf
[4] = 0x08;
7962 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
7963 if(ret
< 0) goto err
;
7966 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;
7967 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9);
7968 if(ret
< 0) goto err
;
7971 buf
[0] = 0x44; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30; buf
[4] = 0x00; buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed; buf
[8] = 0x0f; buf
[9] = 0xda; buf
[10] = 0x0f; buf
[11] = 0x3a; buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00; buf
[15] = 0xd0; buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00; buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
7972 ret
= usb_microdia_control_write(dev
, reg
, buf
, 24);
7973 if(ret
< 0) goto err
;
7976 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
7977 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
7978 if(ret
< 0) goto err
;
7981 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
7982 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
7983 if(ret
< 0) goto err
;
7986 buf
[0] = 0x86; buf
[1] = 0xcc; buf
[2] = 0x08;
7987 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
7988 if(ret
< 0) goto err
;
7991 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20; buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b; buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80; buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8; buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9; buf
[20] = 0xf4; buf
[21] = 0xff;
7992 ret
= usb_microdia_control_write(dev
, reg
, buf
, 22);
7993 if(ret
< 0) goto err
;
7996 buf
[0] = 0x00; buf
[1] = 0x00;
7997 ret
= usb_microdia_control_write(dev
, reg
, buf
, 2);
7998 if(ret
< 0) goto err
;
8001 buf
[0] = 0x60; buf
[1] = 0x20; buf
[2] = 0x00; buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x40; buf
[6] = 0x01; buf
[7] = 0xf0; buf
[8] = 0x00;
8002 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9);
8003 if(ret
< 0) goto err
;
8007 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8008 if(ret
< 0) goto err
;
8012 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
8013 if(ret
< 0) goto err
;
8016 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x12; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8017 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8018 if(ret
< 0) goto err
;
8021 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8022 if(ret
< 0) goto err
;
8025 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8026 if(ret
< 0) goto err
;
8029 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x12; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8030 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8031 if(ret
< 0) goto err
;
8034 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8035 if(ret
< 0) goto err
;
8038 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8039 if(ret
< 0) goto err
;
8042 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x0d; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8043 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8044 if(ret
< 0) goto err
;
8047 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8048 if(ret
< 0) goto err
;
8051 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8052 if(ret
< 0) goto err
;
8055 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x0e; buf
[3] = 0x61; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8056 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8057 if(ret
< 0) goto err
;
8060 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8061 if(ret
< 0) goto err
;
8064 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8065 if(ret
< 0) goto err
;
8068 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x11; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8069 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8070 if(ret
< 0) goto err
;
8073 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8074 if(ret
< 0) goto err
;
8077 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8078 if(ret
< 0) goto err
;
8081 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x13; buf
[3] = 0xb8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8082 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8083 if(ret
< 0) goto err
;
8086 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8087 if(ret
< 0) goto err
;
8090 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8091 if(ret
< 0) goto err
;
8094 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x14; buf
[3] = 0x3e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8095 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8096 if(ret
< 0) goto err
;
8099 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8100 if(ret
< 0) goto err
;
8103 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8104 if(ret
< 0) goto err
;
8107 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x16; buf
[3] = 0x24; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8108 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8109 if(ret
< 0) goto err
;
8112 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8113 if(ret
< 0) goto err
;
8116 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8117 if(ret
< 0) goto err
;
8120 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8121 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8122 if(ret
< 0) goto err
;
8125 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8126 if(ret
< 0) goto err
;
8129 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8130 if(ret
< 0) goto err
;
8133 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8134 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8135 if(ret
< 0) goto err
;
8138 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8139 if(ret
< 0) goto err
;
8142 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8143 if(ret
< 0) goto err
;
8146 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8147 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8148 if(ret
< 0) goto err
;
8151 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8152 if(ret
< 0) goto err
;
8155 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8156 if(ret
< 0) goto err
;
8159 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x27; buf
[3] = 0x08; 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) goto err
;
8164 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8165 if(ret
< 0) goto err
;
8168 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8169 if(ret
< 0) goto err
;
8172 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x28; buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8173 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8174 if(ret
< 0) goto err
;
8177 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8178 if(ret
< 0) goto err
;
8181 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8182 if(ret
< 0) goto err
;
8185 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x29; buf
[3] = 0x15; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8186 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8187 if(ret
< 0) goto err
;
8190 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8191 if(ret
< 0) goto err
;
8194 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8195 if(ret
< 0) goto err
;
8198 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2c; buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8199 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8200 if(ret
< 0) goto err
;
8203 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8204 if(ret
< 0) goto err
;
8207 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8208 if(ret
< 0) goto err
;
8211 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x32; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8212 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8213 if(ret
< 0) goto err
;
8216 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8217 if(ret
< 0) goto err
;
8220 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8221 if(ret
< 0) goto err
;
8224 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x34; buf
[3] = 0x3d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8225 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8226 if(ret
< 0) goto err
;
8229 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8230 if(ret
< 0) goto err
;
8233 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8234 if(ret
< 0) goto err
;
8237 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x35; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8238 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8239 if(ret
< 0) goto err
;
8242 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8243 if(ret
< 0) goto err
;
8246 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8247 if(ret
< 0) goto err
;
8250 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x36; buf
[3] = 0xf8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8251 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8252 if(ret
< 0) goto err
;
8255 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8256 if(ret
< 0) goto err
;
8259 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8260 if(ret
< 0) goto err
;
8263 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x38; buf
[3] = 0x12; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8264 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8265 if(ret
< 0) goto err
;
8268 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8269 if(ret
< 0) goto err
;
8272 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8273 if(ret
< 0) goto err
;
8276 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x39; buf
[3] = 0x57; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8277 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8278 if(ret
< 0) goto err
;
8281 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8282 if(ret
< 0) goto err
;
8285 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8286 if(ret
< 0) goto err
;
8289 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8290 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8291 if(ret
< 0) goto err
;
8294 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8295 if(ret
< 0) goto err
;
8298 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8299 if(ret
< 0) goto err
;
8302 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3b; buf
[3] = 0xcc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8303 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8304 if(ret
< 0) goto err
;
8307 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8308 if(ret
< 0) goto err
;
8311 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8312 if(ret
< 0) goto err
;
8315 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3c; buf
[3] = 0x0c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8316 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8317 if(ret
< 0) goto err
;
8320 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8321 if(ret
< 0) goto err
;
8324 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8325 if(ret
< 0) goto err
;
8328 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3d; buf
[3] = 0x19; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8329 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8330 if(ret
< 0) goto err
;
8333 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8334 if(ret
< 0) goto err
;
8337 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8338 if(ret
< 0) goto err
;
8341 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3e; buf
[3] = 0x0c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8342 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8343 if(ret
< 0) goto err
;
8346 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8347 if(ret
< 0) goto err
;
8350 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8351 if(ret
< 0) goto err
;
8354 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3f; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8355 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8356 if(ret
< 0) goto err
;
8359 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8360 if(ret
< 0) goto err
;
8363 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8364 if(ret
< 0) goto err
;
8367 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x41; buf
[3] = 0x40; 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) goto err
;
8372 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8373 if(ret
< 0) goto err
;
8376 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8377 if(ret
< 0) goto err
;
8380 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x42; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8381 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8382 if(ret
< 0) goto err
;
8385 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8386 if(ret
< 0) goto err
;
8389 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8390 if(ret
< 0) goto err
;
8393 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x45; buf
[3] = 0x46; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8394 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8395 if(ret
< 0) goto err
;
8398 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8399 if(ret
< 0) goto err
;
8402 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8403 if(ret
< 0) goto err
;
8406 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x46; buf
[3] = 0x62; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8407 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8408 if(ret
< 0) goto err
;
8411 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8412 if(ret
< 0) goto err
;
8415 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8416 if(ret
< 0) goto err
;
8419 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x47; buf
[3] = 0x2a; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8420 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8421 if(ret
< 0) goto err
;
8424 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8425 if(ret
< 0) goto err
;
8428 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8429 if(ret
< 0) goto err
;
8432 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x48; buf
[3] = 0x3c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8433 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8434 if(ret
< 0) goto err
;
8437 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8438 if(ret
< 0) goto err
;
8441 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8442 if(ret
< 0) goto err
;
8445 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4a; buf
[3] = 0xf0; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8446 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8447 if(ret
< 0) goto err
;
8450 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8451 if(ret
< 0) goto err
;
8454 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8455 if(ret
< 0) goto err
;
8458 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4b; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8459 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8460 if(ret
< 0) goto err
;
8463 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8464 if(ret
< 0) goto err
;
8467 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8468 if(ret
< 0) goto err
;
8471 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4c; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8472 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8473 if(ret
< 0) goto err
;
8476 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8477 if(ret
< 0) goto err
;
8480 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8481 if(ret
< 0) goto err
;
8484 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4d; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8485 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8486 if(ret
< 0) goto err
;
8489 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8490 if(ret
< 0) goto err
;
8493 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8494 if(ret
< 0) goto err
;
8497 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4e; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8498 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8499 if(ret
< 0) goto err
;
8502 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8503 if(ret
< 0) goto err
;
8506 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8507 if(ret
< 0) goto err
;
8510 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x69; buf
[3] = 0x02; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8511 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8512 if(ret
< 0) goto err
;
8515 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8516 if(ret
< 0) goto err
;
8519 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8520 if(ret
< 0) goto err
;
8523 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x6c; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8524 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8525 if(ret
< 0) goto err
;
8528 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8529 if(ret
< 0) goto err
;
8532 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8533 if(ret
< 0) goto err
;
8536 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x6f; buf
[3] = 0x9e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8537 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8538 if(ret
< 0) goto err
;
8541 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8542 if(ret
< 0) goto err
;
8545 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8546 if(ret
< 0) goto err
;
8549 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x70; buf
[3] = 0x05; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8550 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8551 if(ret
< 0) goto err
;
8554 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8555 if(ret
< 0) goto err
;
8558 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8559 if(ret
< 0) goto err
;
8562 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x71; buf
[3] = 0x78; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8563 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8564 if(ret
< 0) goto err
;
8567 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8568 if(ret
< 0) goto err
;
8571 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8572 if(ret
< 0) goto err
;
8575 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x77; buf
[3] = 0x02; 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) goto err
;
8580 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8581 if(ret
< 0) goto err
;
8584 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8585 if(ret
< 0) goto err
;
8588 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x8a; buf
[3] = 0x23; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8589 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8590 if(ret
< 0) goto err
;
8593 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8594 if(ret
< 0) goto err
;
8597 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8598 if(ret
< 0) goto err
;
8601 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x8c; buf
[3] = 0x0d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8602 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8603 if(ret
< 0) goto err
;
8606 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8607 if(ret
< 0) goto err
;
8610 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8611 if(ret
< 0) goto err
;
8614 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x90; buf
[3] = 0x7e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8615 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8616 if(ret
< 0) goto err
;
8619 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8620 if(ret
< 0) goto err
;
8623 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8624 if(ret
< 0) goto err
;
8627 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x91; buf
[3] = 0x7c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8628 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8629 if(ret
< 0) goto err
;
8632 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8633 if(ret
< 0) goto err
;
8636 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8637 if(ret
< 0) goto err
;
8640 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x9f; buf
[3] = 0x6e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8641 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8642 if(ret
< 0) goto err
;
8645 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8646 if(ret
< 0) goto err
;
8649 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8650 if(ret
< 0) goto err
;
8653 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa0; buf
[3] = 0x6e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8654 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8655 if(ret
< 0) goto err
;
8658 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8659 if(ret
< 0) goto err
;
8662 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8663 if(ret
< 0) goto err
;
8666 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa4; buf
[3] = 0x50; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8667 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8668 if(ret
< 0) goto err
;
8671 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8672 if(ret
< 0) goto err
;
8675 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8676 if(ret
< 0) goto err
;
8679 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa5; buf
[3] = 0x68; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8680 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8681 if(ret
< 0) goto err
;
8684 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8685 if(ret
< 0) goto err
;
8688 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8689 if(ret
< 0) goto err
;
8692 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa6; buf
[3] = 0x60; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8693 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8694 if(ret
< 0) goto err
;
8697 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8698 if(ret
< 0) goto err
;
8701 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8702 if(ret
< 0) goto err
;
8705 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa8; buf
[3] = 0xc1; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8706 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8707 if(ret
< 0) goto err
;
8710 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8711 if(ret
< 0) goto err
;
8714 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8715 if(ret
< 0) goto err
;
8718 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa9; buf
[3] = 0xfa; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8719 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8720 if(ret
< 0) goto err
;
8723 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8724 if(ret
< 0) goto err
;
8727 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8728 if(ret
< 0) goto err
;
8731 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xaa; buf
[3] = 0x92; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8732 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8733 if(ret
< 0) goto err
;
8736 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8737 if(ret
< 0) goto err
;
8740 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8741 if(ret
< 0) goto err
;
8744 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xab; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8745 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8746 if(ret
< 0) goto err
;
8749 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8750 if(ret
< 0) goto err
;
8753 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8754 if(ret
< 0) goto err
;
8757 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xac; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8758 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8759 if(ret
< 0) goto err
;
8762 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8763 if(ret
< 0) goto err
;
8766 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8767 if(ret
< 0) goto err
;
8770 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xad; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8771 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8772 if(ret
< 0) goto err
;
8775 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8776 if(ret
< 0) goto err
;
8779 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8780 if(ret
< 0) goto err
;
8783 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xae; buf
[3] = 0x80; 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) goto err
;
8788 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8789 if(ret
< 0) goto err
;
8792 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8793 if(ret
< 0) goto err
;
8796 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xaf; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8797 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8798 if(ret
< 0) goto err
;
8801 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8802 if(ret
< 0) goto err
;
8805 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8806 if(ret
< 0) goto err
;
8809 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb2; buf
[3] = 0xf2; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8810 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8811 if(ret
< 0) goto err
;
8814 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8815 if(ret
< 0) goto err
;
8818 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8819 if(ret
< 0) goto err
;
8822 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb3; buf
[3] = 0x20; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8823 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8824 if(ret
< 0) goto err
;
8827 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8828 if(ret
< 0) goto err
;
8831 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8832 if(ret
< 0) goto err
;
8835 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb4; buf
[3] = 0x20; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8836 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8837 if(ret
< 0) goto err
;
8840 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8841 if(ret
< 0) goto err
;
8844 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8845 if(ret
< 0) goto err
;
8848 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb5; 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) goto err
;
8853 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8854 if(ret
< 0) goto err
;
8857 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8858 if(ret
< 0) goto err
;
8861 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb6; buf
[3] = 0xaf; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8862 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8863 if(ret
< 0) goto err
;
8866 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8867 if(ret
< 0) goto err
;
8870 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8871 if(ret
< 0) goto err
;
8874 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbb; buf
[3] = 0xae; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8875 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8876 if(ret
< 0) goto err
;
8879 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8880 if(ret
< 0) goto err
;
8883 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8884 if(ret
< 0) goto err
;
8887 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbc; buf
[3] = 0x44; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8888 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8889 if(ret
< 0) goto err
;
8892 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8893 if(ret
< 0) goto err
;
8896 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8897 if(ret
< 0) goto err
;
8900 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbd; buf
[3] = 0x44; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8901 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8902 if(ret
< 0) goto err
;
8905 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8906 if(ret
< 0) goto err
;
8909 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8910 if(ret
< 0) goto err
;
8913 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbe; buf
[3] = 0x3b; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8914 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8915 if(ret
< 0) goto err
;
8918 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8919 if(ret
< 0) goto err
;
8922 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8923 if(ret
< 0) goto err
;
8926 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbf; buf
[3] = 0x3a; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8927 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8928 if(ret
< 0) goto err
;
8931 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8932 if(ret
< 0) goto err
;
8935 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8936 if(ret
< 0) goto err
;
8939 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc0; buf
[3] = 0xe2; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8940 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8941 if(ret
< 0) goto err
;
8944 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8945 if(ret
< 0) goto err
;
8948 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8949 if(ret
< 0) goto err
;
8952 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc1; buf
[3] = 0xc8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8953 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8954 if(ret
< 0) goto err
;
8957 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8958 if(ret
< 0) goto err
;
8961 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8962 if(ret
< 0) goto err
;
8965 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc2; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8966 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8967 if(ret
< 0) goto err
;
8970 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8971 if(ret
< 0) goto err
;
8974 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8975 if(ret
< 0) goto err
;
8978 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc4; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8979 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8980 if(ret
< 0) goto err
;
8983 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8984 if(ret
< 0) goto err
;
8987 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8988 if(ret
< 0) goto err
;
8991 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc6; buf
[3] = 0x85; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
8992 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
8993 if(ret
< 0) goto err
;
8996 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
8997 if(ret
< 0) goto err
;
9000 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9001 if(ret
< 0) goto err
;
9004 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc7; buf
[3] = 0x81; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9005 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9006 if(ret
< 0) goto err
;
9009 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9010 if(ret
< 0) goto err
;
9013 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9014 if(ret
< 0) goto err
;
9017 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc9; buf
[3] = 0xe0; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9018 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9019 if(ret
< 0) goto err
;
9022 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9023 if(ret
< 0) goto err
;
9026 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9027 if(ret
< 0) goto err
;
9030 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xca; buf
[3] = 0xe8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9031 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9032 if(ret
< 0) goto err
;
9035 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9036 if(ret
< 0) goto err
;
9039 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9040 if(ret
< 0) goto err
;
9043 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xcc; buf
[3] = 0xd8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9044 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9045 if(ret
< 0) goto err
;
9048 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9049 if(ret
< 0) goto err
;
9052 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9053 if(ret
< 0) goto err
;
9056 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xcd; buf
[3] = 0x93; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9057 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9058 if(ret
< 0) goto err
;
9061 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9062 if(ret
< 0) goto err
;
9065 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9066 if(ret
< 0) goto err
;
9069 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9070 if(ret
< 0) goto err
;
9074 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9075 if(ret
< 0) goto err
;
9078 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9079 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9080 if(ret
< 0) goto err
;
9083 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9084 if(ret
< 0) goto err
;
9087 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9088 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9089 if(ret
< 0) goto err
;
9092 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9093 if(ret
< 0) goto err
;
9096 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9097 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9098 if(ret
< 0) goto err
;
9101 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9102 if(ret
< 0) goto err
;
9105 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9106 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9107 if(ret
< 0) goto err
;
9110 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9111 if(ret
< 0) goto err
;
9114 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9115 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9116 if(ret
< 0) goto err
;
9119 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9120 if(ret
< 0) goto err
;
9123 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9124 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9125 if(ret
< 0) goto err
;
9128 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9129 if(ret
< 0) goto err
;
9132 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9133 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9134 if(ret
< 0) goto err
;
9137 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9138 if(ret
< 0) goto err
;
9141 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9142 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9143 if(ret
< 0) goto err
;
9146 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9147 if(ret
< 0) goto err
;
9150 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9151 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9152 if(ret
< 0) goto err
;
9155 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9156 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9157 if(ret
< 0) goto err
;
9160 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9161 if(ret
< 0) goto err
;
9164 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9165 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9166 if(ret
< 0) goto err
;
9169 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9170 if(ret
< 0) goto err
;
9173 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9174 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9175 if(ret
< 0) goto err
;
9178 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9179 if(ret
< 0) goto err
;
9182 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9183 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9184 if(ret
< 0) goto err
;
9187 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9188 if(ret
< 0) goto err
;
9191 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9192 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9193 if(ret
< 0) goto err
;
9196 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9197 if(ret
< 0) goto err
;
9200 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9201 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9202 if(ret
< 0) goto err
;
9205 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9206 if(ret
< 0) goto err
;
9209 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9210 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9211 if(ret
< 0) goto err
;
9214 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9215 if(ret
< 0) goto err
;
9218 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9219 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9220 if(ret
< 0) goto err
;
9223 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9224 if(ret
< 0) goto err
;
9227 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9228 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9229 if(ret
< 0) goto err
;
9232 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
9233 if(ret
< 0) goto err
;
9237 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9238 if(ret
< 0) goto err
;
9242 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9243 if(ret
< 0) goto err
;
9247 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9248 if(ret
< 0) goto err
;
9252 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9253 if(ret
< 0) goto err
;
9257 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9258 if(ret
< 0) goto err
;
9262 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9263 if(ret
< 0) goto err
;
9267 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9268 if(ret
< 0) goto err
;
9272 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9273 if(ret
< 0) goto err
;
9277 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9278 if(ret
< 0) goto err
;
9282 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9283 if(ret
< 0) goto err
;
9287 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9288 if(ret
< 0) goto err
;
9291 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x03; buf
[3] = 0x14; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9292 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9293 if(ret
< 0) goto err
;
9296 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9297 if(ret
< 0) goto err
;
9300 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9301 if(ret
< 0) goto err
;
9304 buf
[0] = 0xd0; buf
[1] = 0x30; buf
[2] = 0x17; buf
[3] = 0x1b; buf
[4] = 0xbc; buf
[5] = 0x01; buf
[6] = 0x7a; buf
[7] = 0x10;
9305 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9306 if(ret
< 0) goto err
;
9309 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9310 if(ret
< 0) goto err
;
9313 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9314 if(ret
< 0) goto err
;
9317 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1b; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9318 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9319 if(ret
< 0) goto err
;
9322 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9323 if(ret
< 0) goto err
;
9326 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x32; buf
[3] = 0x82; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9327 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9328 if(ret
< 0) goto err
;
9331 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9332 if(ret
< 0) goto err
;
9335 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9336 if(ret
< 0) goto err
;
9339 buf
[0] = 0x05; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00; buf
[4] = 0x50; buf
[5] = 0x78;
9340 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
9341 if(ret
< 0) goto err
;
9344 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
9345 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
9346 if(ret
< 0) goto err
;
9350 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9351 if(ret
< 0) goto err
;
9355 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9356 if(ret
< 0) goto err
;
9359 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0xa0;
9360 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9361 if(ret
< 0) goto err
;
9364 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x78;
9365 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9366 if(ret
< 0) goto err
;
9370 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9371 if(ret
< 0) goto err
;
9375 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9376 if(ret
< 0) goto err
;
9380 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9381 if(ret
< 0) goto err
;
9385 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9386 if(ret
< 0) goto err
;
9390 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9391 if(ret
< 0) goto err
;
9395 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9396 if(ret
< 0) goto err
;
9400 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9401 if(ret
< 0) goto err
;
9404 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9405 if(ret
< 0) goto err
;
9409 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9410 if(ret
< 0) goto err
;
9413 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9414 if(ret
< 0) goto err
;
9418 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9419 if(ret
< 0) goto err
;
9422 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9423 if(ret
< 0) goto err
;
9427 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9428 if(ret
< 0) goto err
;
9431 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9432 if(ret
< 0) goto err
;
9436 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9437 if(ret
< 0) goto err
;
9440 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9441 if(ret
< 0) goto err
;
9445 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9446 if(ret
< 0) goto err
;
9449 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9450 if(ret
< 0) goto err
;
9454 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9455 if(ret
< 0) goto err
;
9458 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x11; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9459 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9460 if(ret
< 0) goto err
;
9463 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9464 if(ret
< 0) goto err
;
9467 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9468 if(ret
< 0) goto err
;
9471 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9472 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9473 if(ret
< 0) goto err
;
9476 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9477 if(ret
< 0) goto err
;
9480 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9481 if(ret
< 0) goto err
;
9484 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2b; buf
[3] = 0x06; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9485 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9486 if(ret
< 0) goto err
;
9489 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9490 if(ret
< 0) goto err
;
9493 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9494 if(ret
< 0) goto err
;
9497 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x92; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9498 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9499 if(ret
< 0) goto err
;
9502 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9503 if(ret
< 0) goto err
;
9506 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9507 if(ret
< 0) goto err
;
9510 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x93; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9511 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9512 if(ret
< 0) goto err
;
9515 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9516 if(ret
< 0) goto err
;
9519 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9520 if(ret
< 0) goto err
;
9523 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9524 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9525 if(ret
< 0) goto err
;
9528 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9529 if(ret
< 0) goto err
;
9532 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9533 if(ret
< 0) goto err
;
9536 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9537 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9538 if(ret
< 0) goto err
;
9541 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9542 if(ret
< 0) goto err
;
9545 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9546 if(ret
< 0) goto err
;
9550 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9551 if(ret
< 0) goto err
;
9554 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x10; buf
[3] = 0x7d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9555 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9556 if(ret
< 0) goto err
;
9559 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9560 if(ret
< 0) goto err
;
9563 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9564 if(ret
< 0) goto err
;
9567 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x04; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9568 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9569 if(ret
< 0) goto err
;
9572 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9573 if(ret
< 0) goto err
;
9576 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9577 if(ret
< 0) goto err
;
9580 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa1; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9581 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9582 if(ret
< 0) goto err
;
9585 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9586 if(ret
< 0) goto err
;
9589 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9590 if(ret
< 0) goto err
;
9593 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2d; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9594 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9595 if(ret
< 0) goto err
;
9598 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9599 if(ret
< 0) goto err
;
9602 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9603 if(ret
< 0) goto err
;
9606 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9607 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9608 if(ret
< 0) goto err
;
9611 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9612 if(ret
< 0) goto err
;
9615 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9616 if(ret
< 0) goto err
;
9619 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9620 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9621 if(ret
< 0) goto err
;
9624 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9625 if(ret
< 0) goto err
;
9628 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9629 if(ret
< 0) goto err
;
9632 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9633 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9634 if(ret
< 0) goto err
;
9637 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9638 if(ret
< 0) goto err
;
9641 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9642 if(ret
< 0) goto err
;
9645 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9646 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9647 if(ret
< 0) goto err
;
9650 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9651 if(ret
< 0) goto err
;
9654 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9655 if(ret
< 0) goto err
;
9659 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9660 if(ret
< 0) goto err
;
9664 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9665 if(ret
< 0) goto err
;
9669 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9670 if(ret
< 0) goto err
;
9674 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9675 if(ret
< 0) goto err
;
9679 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9680 if(ret
< 0) goto err
;
9684 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9685 if(ret
< 0) goto err
;
9689 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9690 if(ret
< 0) goto err
;
9694 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9695 if(ret
< 0) goto err
;
9699 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9700 if(ret
< 0) goto err
;
9704 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9705 if(ret
< 0) goto err
;
9708 buf
[0] = 0x08; buf
[1] = 0x2f; buf
[2] = 0x46; buf
[3] = 0x58; buf
[4] = 0x69; buf
[5] = 0x78; buf
[6] = 0x86; buf
[7] = 0x94; buf
[8] = 0xa0; buf
[9] = 0xac; buf
[10] = 0xb8; buf
[11] = 0xc3; buf
[12] = 0xce; buf
[13] = 0xd9; buf
[14] = 0xe3; buf
[15] = 0xed; buf
[16] = 0xf7;
9709 ret
= usb_microdia_control_write(dev
, reg
, buf
, 17);
9710 if(ret
< 0) goto err
;
9713 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00; buf
[20] = 0x00;
9714 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
9715 if(ret
< 0) goto err
;
9718 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00; buf
[20] = 0x00;
9719 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
9720 if(ret
< 0) goto err
;
9723 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00; buf
[20] = 0x00;
9724 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
9725 if(ret
< 0) goto err
;
9728 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00; buf
[20] = 0x00;
9729 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
9730 if(ret
< 0) goto err
;
9733 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00; buf
[20] = 0x00;
9734 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
9735 if(ret
< 0) goto err
;
9738 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00; buf
[20] = 0x00;
9739 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
9740 if(ret
< 0) goto err
;
9743 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00; buf
[20] = 0x00;
9744 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
9745 if(ret
< 0) goto err
;
9748 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00; buf
[20] = 0x00;
9749 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
9750 if(ret
< 0) goto err
;
9753 buf
[0] = 0x16; buf
[1] = 0x00; buf
[2] = 0x2d; buf
[3] = 0x00; buf
[4] = 0x08; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00; buf
[20] = 0x00;
9754 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
9755 if(ret
< 0) goto err
;
9759 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9760 if(ret
< 0) goto err
;
9764 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9765 if(ret
< 0) goto err
;
9768 buf
[0] = 0x16; buf
[1] = 0x00; buf
[2] = 0x2d; buf
[3] = 0x00; buf
[4] = 0x08; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00; buf
[20] = 0x00;
9769 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
9770 if(ret
< 0) goto err
;
9774 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9775 if(ret
< 0) goto err
;
9779 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9780 if(ret
< 0) goto err
;
9784 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9785 if(ret
< 0) goto err
;
9789 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9790 if(ret
< 0) goto err
;
9794 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9795 if(ret
< 0) goto err
;
9798 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
9799 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9800 if(ret
< 0) goto err
;
9803 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00; buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00; buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x00; buf
[23] = 0x00; buf
[24] = 0x00; buf
[25] = 0x00; buf
[26] = 0x00; buf
[27] = 0x00; buf
[28] = 0x00; buf
[29] = 0x00; buf
[30] = 0x00; buf
[31] = 0x00; buf
[32] = 0x00; buf
[33] = 0x00; buf
[34] = 0x00; buf
[35] = 0x00; buf
[36] = 0x00; buf
[37] = 0x00; buf
[38] = 0x00; buf
[39] = 0x00; buf
[40] = 0x00; buf
[41] = 0x00; buf
[42] = 0x00; buf
[43] = 0x00; buf
[44] = 0x00; buf
[45] = 0x00; buf
[46] = 0x00; buf
[47] = 0x00;
9804 ret
= usb_microdia_control_write(dev
, reg
, buf
, 48);
9805 if(ret
< 0) goto err
;
9809 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9810 if(ret
< 0) goto err
;
9814 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9815 if(ret
< 0) goto err
;
9819 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9820 if(ret
< 0) goto err
;
9824 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9825 if(ret
< 0) goto err
;
9828 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05; buf
[4] = 0x04; buf
[5] = 0x3f;
9829 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
9830 if(ret
< 0) goto err
;
9833 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
9834 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9835 if(ret
< 0) goto err
;
9838 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x32; buf
[3] = 0xdd;
9839 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9840 if(ret
< 0) goto err
;
9844 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9845 if(ret
< 0) goto err
;
9849 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9850 if(ret
< 0) goto err
;
9854 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9855 if(ret
< 0) goto err
;
9858 buf
[0] = 0x0d; buf
[1] = 0x08; buf
[2] = 0x08; buf
[3] = 0x0d; buf
[4] = 0x08; buf
[5] = 0x08; buf
[6] = 0x0d; buf
[7] = 0x0d; buf
[8] = 0x0d; buf
[9] = 0x0d; buf
[10] = 0x11; buf
[11] = 0x0d; buf
[12] = 0x0d; buf
[13] = 0x11; buf
[14] = 0x15; buf
[15] = 0x21; buf
[16] = 0x15; buf
[17] = 0x15; buf
[18] = 0x11; buf
[19] = 0x11; buf
[20] = 0x15; buf
[21] = 0x2a; buf
[22] = 0x1d; buf
[23] = 0x1d; buf
[24] = 0x19; buf
[25] = 0x21; buf
[26] = 0x32; buf
[27] = 0x2a; buf
[28] = 0x32; buf
[29] = 0x32; buf
[30] = 0x2e; buf
[31] = 0x2a; buf
[32] = 0x2e; buf
[33] = 0x2e; buf
[34] = 0x36; buf
[35] = 0x3a; buf
[36] = 0x4b; buf
[37] = 0x43; buf
[38] = 0x36; buf
[39] = 0x3a; buf
[40] = 0x47; buf
[41] = 0x3a; buf
[42] = 0x2e; buf
[43] = 0x2e; buf
[44] = 0x43; buf
[45] = 0x5c; buf
[46] = 0x43; buf
[47] = 0x47; buf
[48] = 0x4f; buf
[49] = 0x53; buf
[50] = 0x58; buf
[51] = 0x58; buf
[52] = 0x58; buf
[53] = 0x32; buf
[54] = 0x3f; buf
[55] = 0x60; buf
[56] = 0x64; buf
[57] = 0x5c; buf
[58] = 0x53; buf
[59] = 0x64; buf
[60] = 0x4b; buf
[61] = 0x53; buf
[62] = 0x58; buf
[63] = 0x53;
9859 ret
= usb_microdia_control_write(dev
, reg
, buf
, 64);
9860 if(ret
< 0) goto err
;
9863 buf
[0] = 0x0d; buf
[1] = 0x11; buf
[2] = 0x11; buf
[3] = 0x15; buf
[4] = 0x11; buf
[5] = 0x15; buf
[6] = 0x26; buf
[7] = 0x15; buf
[8] = 0x15; buf
[9] = 0x26; buf
[10] = 0x53; buf
[11] = 0x36; buf
[12] = 0x2e; buf
[13] = 0x36; buf
[14] = 0x53; buf
[15] = 0x53; buf
[16] = 0x53; buf
[17] = 0x53; buf
[18] = 0x53; buf
[19] = 0x53; buf
[20] = 0x53; buf
[21] = 0x53; buf
[22] = 0x53; buf
[23] = 0x53; buf
[24] = 0x53; buf
[25] = 0x53; buf
[26] = 0x53; buf
[27] = 0x53; buf
[28] = 0x53; buf
[29] = 0x53; buf
[30] = 0x53; buf
[31] = 0x53; buf
[32] = 0x53; buf
[33] = 0x53; buf
[34] = 0x53; buf
[35] = 0x53; buf
[36] = 0x53; buf
[37] = 0x53; buf
[38] = 0x53; buf
[39] = 0x53; buf
[40] = 0x53; buf
[41] = 0x53; buf
[42] = 0x53; buf
[43] = 0x53; buf
[44] = 0x53; buf
[45] = 0x53; buf
[46] = 0x53; buf
[47] = 0x53; buf
[48] = 0x53; buf
[49] = 0x53; buf
[50] = 0x53; buf
[51] = 0x53; buf
[52] = 0x53; buf
[53] = 0x53; buf
[54] = 0x53; buf
[55] = 0x53; buf
[56] = 0x53; buf
[57] = 0x53; buf
[58] = 0x53; buf
[59] = 0x53; buf
[60] = 0x53; buf
[61] = 0x53; buf
[62] = 0x53; buf
[63] = 0x53;
9864 ret
= usb_microdia_control_write(dev
, reg
, buf
, 64);
9865 if(ret
< 0) goto err
;
9869 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9870 if(ret
< 0) goto err
;
9874 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9875 if(ret
< 0) goto err
;
9879 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9880 if(ret
< 0) goto err
;
9884 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9885 if(ret
< 0) goto err
;
9889 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9890 if(ret
< 0) goto err
;
9894 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9895 if(ret
< 0) goto err
;
9899 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9900 if(ret
< 0) goto err
;
9904 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9905 if(ret
< 0) goto err
;
9908 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x03; buf
[3] = 0x14; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9909 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9910 if(ret
< 0) goto err
;
9913 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9914 if(ret
< 0) goto err
;
9917 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9918 if(ret
< 0) goto err
;
9921 buf
[0] = 0xd0; buf
[1] = 0x30; buf
[2] = 0x17; buf
[3] = 0x1b; buf
[4] = 0xbc; buf
[5] = 0x01; buf
[6] = 0x7a; buf
[7] = 0x10;
9922 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9923 if(ret
< 0) goto err
;
9926 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9927 if(ret
< 0) goto err
;
9930 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9931 if(ret
< 0) goto err
;
9934 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1b; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9935 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9936 if(ret
< 0) goto err
;
9939 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9940 if(ret
< 0) goto err
;
9943 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x32; buf
[3] = 0x82; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
9944 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
9945 if(ret
< 0) goto err
;
9948 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9949 if(ret
< 0) goto err
;
9952 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
9953 if(ret
< 0) goto err
;
9956 buf
[0] = 0x05; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00; buf
[4] = 0x50; buf
[5] = 0x78;
9957 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
9958 if(ret
< 0) goto err
;
9961 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
9962 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
9963 if(ret
< 0) goto err
;
9967 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9968 if(ret
< 0) goto err
;
9971 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0xa0;
9972 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9973 if(ret
< 0) goto err
;
9976 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x78;
9977 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
9978 if(ret
< 0) goto err
;
9982 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9983 if(ret
< 0) goto err
;
9987 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9988 if(ret
< 0) goto err
;
9992 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9993 if(ret
< 0) goto err
;
9997 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
9998 if(ret
< 0) goto err
;
10002 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10003 if(ret
< 0) goto err
;
10007 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10008 if(ret
< 0) goto err
;
10012 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10013 if(ret
< 0) goto err
;
10017 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10018 if(ret
< 0) goto err
;
10022 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10023 if(ret
< 0) goto err
;
10027 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10028 if(ret
< 0) goto err
;
10032 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10033 if(ret
< 0) goto err
;
10037 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10038 if(ret
< 0) goto err
;
10041 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10042 if(ret
< 0) goto err
;
10046 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10047 if(ret
< 0) goto err
;
10050 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10051 if(ret
< 0) goto err
;
10055 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10056 if(ret
< 0) goto err
;
10059 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10060 if(ret
< 0) goto err
;
10064 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10065 if(ret
< 0) goto err
;
10068 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10069 if(ret
< 0) goto err
;
10073 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10074 if(ret
< 0) goto err
;
10077 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10078 if(ret
< 0) goto err
;
10082 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10083 if(ret
< 0) goto err
;
10086 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10087 if(ret
< 0) goto err
;
10091 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10092 if(ret
< 0) goto err
;
10095 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x11; buf
[3] = 0x80; 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) goto err
;
10100 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10101 if(ret
< 0) goto err
;
10104 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10105 if(ret
< 0) goto err
;
10108 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10109 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10110 if(ret
< 0) goto err
;
10113 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10114 if(ret
< 0) goto err
;
10117 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10118 if(ret
< 0) goto err
;
10121 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2b; buf
[3] = 0x70; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10122 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10123 if(ret
< 0) goto err
;
10126 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10127 if(ret
< 0) goto err
;
10130 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10131 if(ret
< 0) goto err
;
10134 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x92; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10135 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10136 if(ret
< 0) goto err
;
10139 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10140 if(ret
< 0) goto err
;
10143 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10144 if(ret
< 0) goto err
;
10147 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x93; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10148 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10149 if(ret
< 0) goto err
;
10152 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10153 if(ret
< 0) goto err
;
10156 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10157 if(ret
< 0) goto err
;
10160 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x0a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10161 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10162 if(ret
< 0) goto err
;
10165 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10166 if(ret
< 0) goto err
;
10169 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10170 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10171 if(ret
< 0) goto err
;
10174 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10175 if(ret
< 0) goto err
;
10178 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
10179 if(ret
< 0) goto err
;
10182 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x0b; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10183 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10184 if(ret
< 0) goto err
;
10187 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10188 if(ret
< 0) goto err
;
10191 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10192 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10193 if(ret
< 0) goto err
;
10196 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10197 if(ret
< 0) goto err
;
10200 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
10201 if(ret
< 0) goto err
;
10204 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1c; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10205 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10206 if(ret
< 0) goto err
;
10209 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10210 if(ret
< 0) goto err
;
10213 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10214 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10215 if(ret
< 0) goto err
;
10218 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10219 if(ret
< 0) goto err
;
10222 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
10223 if(ret
< 0) goto err
;
10226 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1d; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10227 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10228 if(ret
< 0) goto err
;
10231 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10232 if(ret
< 0) goto err
;
10235 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10236 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10237 if(ret
< 0) goto err
;
10240 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10241 if(ret
< 0) goto err
;
10244 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
10245 if(ret
< 0) goto err
;
10249 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10250 if(ret
< 0) goto err
;
10254 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10255 if(ret
< 0) goto err
;
10259 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10260 if(ret
< 0) goto err
;
10263 buf
[0] = 0x16; buf
[1] = 0x00; buf
[2] = 0x2d; buf
[3] = 0x00; buf
[4] = 0x08; buf
[5] = 0x00; buf
[6] = 0xdd; buf
[7] = 0x0f; buf
[8] = 0xcc; buf
[9] = 0x0f; buf
[10] = 0x58; buf
[11] = 0x00; buf
[12] = 0x4b; buf
[13] = 0x00; buf
[14] = 0xb5; buf
[15] = 0x0f; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00; buf
[20] = 0x00;
10264 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
10265 if(ret
< 0) goto err
;
10268 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa1; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10269 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10270 if(ret
< 0) goto err
;
10273 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10274 if(ret
< 0) goto err
;
10277 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10278 if(ret
< 0) goto err
;
10281 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x10; buf
[3] = 0x06; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10282 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10283 if(ret
< 0) goto err
;
10286 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10287 if(ret
< 0) goto err
;
10290 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10291 if(ret
< 0) goto err
;
10294 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x04; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10295 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10296 if(ret
< 0) goto err
;
10299 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10300 if(ret
< 0) goto err
;
10303 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10304 if(ret
< 0) goto err
;
10307 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2d; buf
[3] = 0x36; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10308 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10309 if(ret
< 0) goto err
;
10312 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10313 if(ret
< 0) goto err
;
10316 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10317 if(ret
< 0) goto err
;
10320 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10321 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10322 if(ret
< 0) goto err
;
10325 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10326 if(ret
< 0) goto err
;
10329 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10330 if(ret
< 0) goto err
;
10333 buf
[0] = 0x16; buf
[1] = 0x00; buf
[2] = 0x2d; buf
[3] = 0x00; buf
[4] = 0x08; buf
[5] = 0x00; buf
[6] = 0xdd; buf
[7] = 0x0f; buf
[8] = 0xcc; buf
[9] = 0x0f; buf
[10] = 0x58; buf
[11] = 0x00; buf
[12] = 0x4b; buf
[13] = 0x00; buf
[14] = 0xb5; buf
[15] = 0x0f; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00; buf
[20] = 0x00;
10334 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
10335 if(ret
< 0) goto err
;
10338 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
10339 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10340 if(ret
< 0) goto err
;
10343 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10344 if(ret
< 0) goto err
;
10347 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10348 if(ret
< 0) goto err
;
10351 buf
[0] = 0x16; buf
[1] = 0x00; buf
[2] = 0x2d; buf
[3] = 0x00; buf
[4] = 0x08; buf
[5] = 0x00; buf
[6] = 0xdd; buf
[7] = 0x0f; buf
[8] = 0xcc; buf
[9] = 0x0f; buf
[10] = 0x58; buf
[11] = 0x00; buf
[12] = 0x4b; buf
[13] = 0x00; buf
[14] = 0xb5; buf
[15] = 0x0f; buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00; buf
[20] = 0x00;
10352 ret
= usb_microdia_control_write(dev
, reg
, buf
, 21);
10353 if(ret
< 0) goto err
;
10356 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x06; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
10357 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10358 if(ret
< 0) goto err
;
10361 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10362 if(ret
< 0) goto err
;
10365 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10366 if(ret
< 0) goto err
;
10369 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x94; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10370 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10371 if(ret
< 0) goto err
;
10374 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10375 if(ret
< 0) goto err
;
10378 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10379 if(ret
< 0) goto err
;
10382 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x8d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10383 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10384 if(ret
< 0) goto err
;
10387 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10388 if(ret
< 0) goto err
;
10391 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10392 if(ret
< 0) goto err
;
10396 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10397 if(ret
< 0) goto err
;
10401 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10402 if(ret
< 0) goto err
;
10406 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10407 if(ret
< 0) goto err
;
10411 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10412 if(ret
< 0) goto err
;
10415 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x09; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
10416 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10417 if(ret
< 0) goto err
;
10420 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10421 if(ret
< 0) goto err
;
10424 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10425 if(ret
< 0) goto err
;
10428 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x95; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10429 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10430 if(ret
< 0) goto err
;
10433 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10434 if(ret
< 0) goto err
;
10437 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10438 if(ret
< 0) goto err
;
10441 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x85; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10442 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10443 if(ret
< 0) goto err
;
10446 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10447 if(ret
< 0) goto err
;
10450 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10451 if(ret
< 0) goto err
;
10455 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10456 if(ret
< 0) goto err
;
10460 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10461 if(ret
< 0) goto err
;
10465 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10466 if(ret
< 0) goto err
;
10470 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10471 if(ret
< 0) goto err
;
10474 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x0c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
10475 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10476 if(ret
< 0) goto err
;
10479 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10480 if(ret
< 0) goto err
;
10483 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10484 if(ret
< 0) goto err
;
10487 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x96; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10488 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10489 if(ret
< 0) goto err
;
10492 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10493 if(ret
< 0) goto err
;
10496 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10497 if(ret
< 0) goto err
;
10500 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10501 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10502 if(ret
< 0) goto err
;
10505 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10506 if(ret
< 0) goto err
;
10509 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10510 if(ret
< 0) goto err
;
10514 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10515 if(ret
< 0) goto err
;
10519 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10520 if(ret
< 0) goto err
;
10524 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10525 if(ret
< 0) goto err
;
10529 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10530 if(ret
< 0) goto err
;
10533 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x7c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
10534 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
10535 if(ret
< 0) goto err
;
10538 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10539 if(ret
< 0) goto err
;
10542 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
10543 if(ret
< 0) goto err
;
10547 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10548 if(ret
< 0) goto err
;
10552 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10553 if(ret
< 0) goto err
;
10557 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10558 if(ret
< 0) goto err
;
10562 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10563 if(ret
< 0) goto err
;
10567 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10568 if(ret
< 0) goto err
;
10572 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
10573 if(ret
< 0) goto err
;
10578 /* END OF MICRODIA 6288 START STREAM */
10582 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
10587 * @brief From UsbSnoop-plugin-parsed.log
10591 * @returns 0 if all OK
10593 * this function starts video stream Microdia 6128 webcam
10594 * Bridge SN9C325 + OM6802 CMOS sensor
10595 * note: comments are my observations so they could be wrong
10597 int microdia_6128_start_stream(struct usb_microdia
*dev
)
10604 0x00, 0x1a, 0x34, 0x27, 0x20, 0xa0, 0x34, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00
10608 0x08, 0x22, 0x44, 0x63, 0x7d, 0x92, 0xa3, 0xaf, 0xbc, 0xc4, 0xcd, 0xd5, 0xdc, 0xe1, 0xe8, 0xef,
10613 0x15, 0x00, 0x2b, 0x00, 0x08, 0x00, 0xeb, 0x0f, 0xd7, 0x0f, 0x43, 0x00, 0x3d, 0x00, 0xca, 0x0f,
10614 0xf7, 0x0f, 0x0c, 0x00, 0x00
10617 __u8 qtable_1
[] = {
10618 0x06, 0x04, 0x04, 0x06, 0x04, 0x04, 0x06, 0x06, 0x06, 0x06, 0x08, 0x06, 0x06, 0x08, 0x0a, 0x10,
10619 0x0a, 0x0a, 0x08, 0x08, 0x0a, 0x13, 0x0e, 0x0e, 0x0c, 0x10, 0x17, 0x13, 0x17, 0x17, 0x15, 0x13,
10620 0x15, 0x15, 0x19, 0x1b, 0x23, 0x1f, 0x19, 0x1b, 0x21, 0x1b, 0x15, 0x15, 0x1f, 0x2b, 0x1f, 0x21,
10621 0x25, 0x27, 0x29, 0x29, 0x29, 0x17, 0x1d, 0x2d, 0x2f, 0x2b, 0x27, 0x2f, 0x23, 0x27, 0x29, 0x27
10625 __u8 qtable_2
[] = {
10626 0x06, 0x08, 0x08, 0x0a, 0x08, 0x0a, 0x12, 0x0a, 0x0a, 0x12, 0x27, 0x19, 0x15, 0x19, 0x27, 0x27,
10627 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
10628 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
10629 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
10632 __u8 om6802_sensor
[][8] = {
10633 {0xa0, dev
->sensor_slave_address
, 0xd6, 0x02, 0x00, 0x00, 0x00, 0x10},
10634 {0xa0, dev
->sensor_slave_address
, 0xae, 0xe2, 0x00, 0x00, 0x00, 0x10},
10635 {0xa0, dev
->sensor_slave_address
, 0xdf, 0x6d, 0x00, 0x00, 0x00, 0x10}, // Enter factory mode
10636 {0xa0, dev
->sensor_slave_address
, 0xdd, 0x18, 0x00, 0x00, 0x00, 0x10}, // RGB, uyvy1,Raw RGB, n/1/2, n/clp
10637 {0xa0, dev
->sensor_slave_address
, 0x5a, 0xc0, 0x00, 0x00, 0x00, 0x10},
10638 {0xa0, dev
->sensor_slave_address
, 0xfb, 0x11, 0x00, 0x00, 0x00, 0x10},
10639 {0xa0, dev
->sensor_slave_address
, 0xf0, 0x03, 0x00, 0x00, 0x00, 0x10},
10640 {0xa0, dev
->sensor_slave_address
, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x10},
10641 {0xa0, dev
->sensor_slave_address
, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x10},
10642 {0xa0, dev
->sensor_slave_address
, 0xfb, 0xee, 0x00, 0x00, 0x00, 0x10},
10643 {0xa0, dev
->sensor_slave_address
, 0x5d, 0x80, 0x00, 0x00, 0x00, 0x10},
10644 {0xa0, dev
->sensor_slave_address
, 0x71, 0x84, 0x00, 0x00, 0x00, 0x10},
10645 {0xa0, dev
->sensor_slave_address
, 0x72, 0x00, 0x00, 0x00, 0x00, 0x10},
10646 {0xa0, dev
->sensor_slave_address
, 0x68, 0x80, 0x00, 0x00, 0x00, 0x10},
10647 {0xa0, dev
->sensor_slave_address
, 0x69, 0x00, 0x00, 0x00, 0x00, 0x10},
10648 {0xa0, dev
->sensor_slave_address
, 0x71, 0x18, 0x00, 0x00, 0x00, 0x10},
10649 {0xa0, dev
->sensor_slave_address
, 0x72, 0x04, 0x00, 0x00, 0x00, 0x10},
10650 {0xa0, dev
->sensor_slave_address
, 0x68, 0xde, 0x00, 0x00, 0x00, 0x10},
10651 {0xa0, dev
->sensor_slave_address
, 0x69, 0x00, 0x00, 0x00, 0x00, 0x10}, // 18
10652 {0xa0, dev
->sensor_slave_address
, 0x68, 0x80, 0x00, 0x00, 0x00, 0x10},
10653 {0xa0, dev
->sensor_slave_address
, 0x69, 0x00, 0x00, 0x00, 0x00, 0x10},
10654 {0, 0, 0, 0, 0, 0, 0, 0} // Terminating string
10658 ret
+= usb_microdia_control_write(dev
, 0xf1, buf
, 1); // Reset cam
10661 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1); // Sensor off, video off, clk 12MHz
10663 ret
+= usb_microdia_control_read(dev
, 0x00, buf
, 1); // Check if cam is working, must write 0x12 in buf[0]
10665 if(buf
[0] != 0x12){
10666 UDIA_ERROR("Microdia 6128 webcam not connected or working !!!\n");
10670 ret
+= usb_microdia_control_read(dev
, 0x01, buf
, 1); // Must read 23
10672 if(buf
[0] != 0x23){
10673 UDIA_ERROR("Microdia 6128 webcam is not initialized !!!\n");
10677 buf
[0] = 0x23; buf
[1] = 0x72;
10678 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 2); // Configure GPIO
10680 buf
[0] = 0x34; buf
[1] = 0x27; buf
[2] = 0x20; buf
[3] = 0xa0; buf
[4] = 0x34;
10681 ret
+= usb_microdia_control_write(dev
, 0x05, buf
, 5);
10683 buf
[0] = 0x44; buf
[1] = 0x45; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00;
10684 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 5);
10686 buf
[0] = 0x08; buf
[1] = 0x40; buf
[2] = 0x20; buf
[3] = 0x00; buf
[4] = 0x00;
10687 ret
+= usb_microdia_control_write(dev
, 0x9a, buf
, 5);
10689 buf
[0] = 0x60; buf
[1] = 0x00; buf
[2] = 0x00;
10690 ret
+= usb_microdia_control_write(dev
, 0xd4, buf
, 3);
10691 ret
+= usb_microdia_control_write(dev
, 0x03, data_15
, 15);
10694 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1);
10697 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
10699 buf
[0] = 0x22; buf
[1] = 0x62;
10700 ret
+= usb_microdia_control_write(dev
, 0x01, &buf
[0], 1);
10701 ret
+= usb_microdia_control_write(dev
, 0x01, &buf
[1], 1);
10704 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
10705 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
10707 buf
[0] = 0x42; // Sensor on, clk 24MHz, video off
10708 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1);
10709 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1);
10712 for (i
= 0; i
< 2; i
++){
10713 ret
+= usb_microdia_control_write(dev
, 0x08, om6802_sensor
[i
], 8);
10718 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1);
10721 for (i
= 2; i
< 11; i
++){
10722 ret
+= usb_microdia_control_write(dev
, 0x08, om6802_sensor
[i
], 8);
10727 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1);
10728 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1); // URB 1780
10731 ret
+= usb_microdia_control_write(dev
, 0x15, buf
, 1);
10734 ret
+= usb_microdia_control_write(dev
, 0x16, buf
, 1);
10737 ret
+= usb_microdia_control_write(dev
, 0x12, buf
, 1);
10740 ret
+= usb_microdia_control_write(dev
, 0x13, buf
, 1);
10743 ret
+= usb_microdia_control_write(dev
, 0x18, buf
, 1);
10746 ret
+= usb_microdia_control_write(dev
, 0xd2, buf
, 1);
10749 ret
+= usb_microdia_control_write(dev
, 0xd3, buf
, 1);
10752 ret
+= usb_microdia_control_write(dev
, 0xc6, buf
, 1);
10753 ret
+= usb_microdia_control_write(dev
, 0xc7, buf
, 1);
10756 ret
+= usb_microdia_control_write(dev
, 0xc8, buf
, 1);
10759 ret
+= usb_microdia_control_write(dev
, 0xc9, buf
, 1);
10762 ret
+= usb_microdia_control_write(dev
, 0x18, buf
, 1);
10765 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
10768 ret
+= usb_microdia_control_write(dev
, 0x05, buf
, 1);
10769 ret
+= usb_microdia_control_write(dev
, 0x07, buf
, 1);
10770 ret
+= usb_microdia_control_write(dev
, 0x06, buf
, 1);
10773 ret
+= usb_microdia_control_write(dev
, 0x14, buf
, 1);
10775 ret
+= usb_microdia_control_write(dev
, 0x20, data_17
, 17);
10776 ret
+= usb_microdia_control_write(dev
, 0x20, data_17
, 17);
10778 for (i
= 0; i
< 8; ++i
) // writing the same buffer 8 times, why ??
10779 ret
+= usb_microdia_control_write(dev
, 0x84, data_21
, 21);
10781 data_21
[0] = 0x16; data_21
[10] = 40; data_21
[12] = 0x3f;
10782 ret
+= usb_microdia_control_write(dev
, 0x84, data_21
, 21);
10785 ret
+= usb_microdia_control_write(dev
, 0x9a, buf
, 1);
10788 ret
+= usb_microdia_control_write(dev
, 0x99, buf
, 1);
10790 ret
+= usb_microdia_control_write(dev
, 0x84, data_21
, 21); // URB 1811
10793 ret
+= usb_microdia_control_write(dev
, 0x05, buf
, 1);
10794 ret
+= usb_microdia_control_write(dev
, 0x07, buf
, 1);
10795 ret
+= usb_microdia_control_write(dev
, 0x06, buf
, 1);
10798 for (i
= 11; i
< 15; i
++){
10799 ret
+= usb_microdia_control_write(dev
, 0x08, om6802_sensor
[i
], 8);
10804 ret
+= usb_microdia_control_write(dev
, 0x05, buf
, 1);
10806 ret
+= usb_microdia_control_write(dev
, 0x06, buf
, 1);
10808 buf
[0] = buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05; buf
[4] = 0x04; buf
[5] = 0x3f;
10809 ret
+= usb_microdia_control_write(dev
, 0xc0, buf
, 6);
10811 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
10812 ret
+= usb_microdia_control_write(dev
, 0xca, buf
, 4);
10814 buf
[0] = 0x1e; buf
[1] = 0xdd; buf
[2] = 0x2d; buf
[3] = 0xe7;
10815 ret
+= usb_microdia_control_write(dev
, 0xce, buf
, 4);
10818 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1);
10821 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
10824 for (i
= 15; i
< 19; i
++){
10825 ret
+= usb_microdia_control_write(dev
, 0x08, om6802_sensor
[i
], 8);
10830 ret
+= usb_microdia_control_write(dev
, 0x05, buf
, 1);
10833 ret
+= usb_microdia_control_write(dev
, 0x06, buf
, 1);
10835 // This changes the mode (VGA = 0 , CIF = 1)
10836 // buf = 0x40 | 0x05 | (mode << 4) 45 or 55
10838 ret
+= usb_microdia_control_write(dev
, 0x18, buf
, 1);
10840 // This is the Q table
10841 ret
+= usb_microdia_control_write(dev
, 0x0100, qtable_1
, 64); // first time
10842 ret
+= usb_microdia_control_write(dev
, 0x0140, qtable_2
, 64); // second time
10844 // mode: VGA = 0, CIF = 1
10845 // buf = 0x05 | (mode << 4) 05 or 15
10847 ret
+= usb_microdia_control_write(dev
, 0x18, buf
, 1);
10850 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1);
10851 ret
+= usb_microdia_control_write(dev
, 0x02, buf
, 1);
10853 buf
[0] = 0x42; // Sensor on, Video disabled, clk 24MHz
10854 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1);
10857 ret
+= usb_microdia_control_write(dev
, 0x17, buf
, 1);
10859 // Command to start streaming
10860 // Sensor on, clk 24MHz, video enabled
10862 ret
+= usb_microdia_control_write(dev
, 0x01, buf
, 1);
10864 // When the device reads 46 from reg 0x01 it means that
10865 // camera is streaming
10866 ret
+= usb_microdia_control_read(dev
, 0x01, buf
, 1); // Must read 0x46
10869 UDIA_DEBUG("Some read or write were not successful in Start Stream\n");
10875 int dev_microdia_stop_stream(struct usb_microdia
*dev
)
10878 if(dev
&& dev
->stop_stream
)
10879 ret
= dev
->stop_stream(dev
);
10885 * @brief From stop.htm
10893 * For SN9C201 with MI1310.
10894 * This function has not been tested yet.
10896 int microdia_6242_stop_stream(struct usb_microdia
*dev
)
10900 __u8 only10c0
[3] = {0x0d, 0x00, 0x00};
10903 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
10906 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
10909 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
10911 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
10912 only10c0
[0], dev
->sensor_flags
, &only10c0
[1]);
10915 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
10918 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
10921 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
10924 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
10927 buf
[0] = 0x98; buf
[1] = 0xe7; buf
[2] = 0x11;
10928 usb_microdia_control_write(dev
, 0x1000, buf
, 3);
10931 * After the select alternate setting 0 is actually another transfer:
10933 * usb_microdia_control_write(dev, 0x1066, buf, 1);
10940 * @brief From stopstream.log
10948 * For SN9C201 with SOI968.
10949 * I don't whether the function really stops the stream.
10950 * Nevertheless the LED on the webcam now stops glowing.
10951 * The function is very similar to "microdia_624f_stop_stream".
10953 int microdia_624e_stop_stream(struct usb_microdia
*dev
)
10958 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
10960 /* Next two writes added because it works better.
10961 * The LED stops glowing and I think the stream does too.
10962 * 0x20 = 0b00100000 which is the minimal of what the other stopstreams have in common.
10965 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
10968 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
10971 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
10974 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
10976 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
10977 usb_microdia_control_write(dev
, 0x1000, buf
, 3);
10979 usb_microdia_control_read(dev
, 0x1066, buf
, 1);
10984 int microdia_624f_stop_stream(struct usb_microdia
*dev
)
10992 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
10993 if(ret
< 0) goto err
;
10997 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
10998 if(ret
< 0) goto err
;
11002 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
11003 if(ret
< 0) goto err
;
11007 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
11008 if(ret
< 0) goto err
;
11012 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
11013 if(ret
< 0) goto err
;
11017 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
11018 if(ret
< 0) goto err
;
11024 ret
= usb_microdia_control_write(dev
, command
, buf
, 3);
11025 if(ret
< 0) goto err
;
11028 ret
= usb_microdia_control_read(dev
, command
, buf
, 1);
11029 if(ret
< 0) goto err
;
11032 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
11033 if(ret
< 0) goto err
;
11038 UDIA_ERROR("command %x failed (%d)!\n", command
, ret
);
11042 int microdia_6260_stop_stream(struct usb_microdia
*dev
)
11048 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
11050 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
11052 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
11054 ret
= usb_microdia_control_write(dev
, 0x1007, buf
, 1);
11056 ret
= usb_microdia_control_write(dev
, 0x1006, buf
, 1);
11060 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 3);
11062 ret
= usb_microdia_control_write(dev
, 0x1066, buf
, 1);
11063 ret
= usb_microdia_control_read(dev
, 0x1045, buf
, 1);
11065 ret
= usb_microdia_control_write(dev
, 0x1045, buf
, 1);
11067 ret
= usb_microdia_control_write(dev
, 0x10c8, buf
, 1);
11069 ret
= usb_microdia_control_write(dev
, 0x1020, buf
, 1);
11075 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
11079 * @returns 0 (ok) or -1 (error)
11081 * @author Comer352l
11083 * Windows driver version: 5.7.23.000
11084 * Windows versions: 2000 and XP
11085 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
11086 * All logs were made using AMCAP with 640x480, RGB24
11088 int microdia_6270_stop_stream(struct usb_microdia
*dev
)
11094 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
11097 ret
+= usb_microdia_control_write(dev
, 0x1007, buf
, 1); // URB 3541
11099 ret
+= usb_microdia_control_write(dev
, 0x1006, buf
, 1); // URB 3542
11100 // => These two writes seem to cause the cam to stop sending isochronus USB messages
11103 ret
+= usb_microdia_control_write(dev
, 0x1061, buf
, 1); // URB 3544
11104 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
11107 ret
+= usb_microdia_control_write(dev
, 0x1007, buf
, 1); // URB 3541
11109 ret
+= usb_microdia_control_write(dev
, 0x1006, buf
, 1); // URB 3542
11111 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
11113 // Write to sensor register 0x07: Output Control
11114 buf
[0] = 0x00; buf
[1] = 0x00; // stop sensor readout, normal operation
11115 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
11117 buf
[0] = 0x38; // ALEX: 0x3c
11118 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 1); // URB 3545
11119 buf
[0] = 0x6d; // ALEX: 0xec; FRANK: also 0x6c
11120 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf
, 1); // URB 3546
11121 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
11122 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 3); // URB 3547
11124 // INTERRUPT COMMING BACK (URB 2227)
11125 // SELECT ALTERNATE SETTINGS (URB 3548)
11126 // INTERRUPT GOING DOWN (URB 3549)
11129 ret
+= usb_microdia_control_write(dev
, 0x1066, buf
, 1); // URB 3550
11133 UDIA_INFO("One ore more errors occured while stopping stream !\n");
11140 int microdia_627b_stop_stream(struct usb_microdia
*dev
)
11148 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11149 if(ret
< 0) goto err
;
11153 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11154 if(ret
< 0) goto err
;
11158 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11159 //if(ret < 0) goto err;
11163 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11164 //if(ret < 0) goto err;
11168 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11169 if(ret
< 0) goto err
;
11173 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11174 //if(ret < 0) goto err;
11178 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11179 //if(ret < 0) goto err;
11183 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11184 if(ret
< 0) goto err
;
11188 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11189 if(ret
< 0) goto err
;
11192 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
11193 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
11194 if(ret
< 0) goto err
;
11198 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11199 if(ret
< 0) goto err
;
11203 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
11208 * @brief From UsbSnoop-plugin-parsed.log
11212 * @returns 0 (OK) or <0 (Error)
11214 * @author Vincent, Kuzja
11216 int microdia_6288_stop_stream(struct usb_microdia
*dev
)
11224 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11225 if(ret
< 0) goto err
;
11229 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11230 if(ret
< 0) goto err
;
11234 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11235 if(ret
< 0) goto err
;
11239 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11240 if(ret
< 0) goto err
;
11244 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11245 if(ret
< 0) goto err
;
11248 buf
[0] = 0x98; buf
[1] = 0xe7; buf
[2] = 0x11;
11249 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
11250 if(ret
< 0) goto err
;
11254 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
11255 if(ret
< 0) goto err
;
11259 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
11264 * @brief From UsbSnoop-plugin-parsed.log
11268 * @returns 0 if all OK
11270 * This function stops the video stream for microdia 6128
11271 * Bridge SN9C325 + OM6802 CMOS sensor
11272 * note: comments are my observations so they could be wrong
11274 int microdia_6128_stop_stream(struct usb_microdia
*dev
)
11279 ret
+= usb_microdia_control_read(dev
, 0x00, &data
, 1);
11281 // Stop stream command
11283 ret
+= usb_microdia_control_write(dev
, 0x01, &data
, 1);
11286 ret
+= usb_microdia_control_write(dev
, 0xf1, &data
, 1);
11289 ret
+= usb_microdia_control_write(dev
, 0xf1, &data
, 1);
11292 UDIA_DEBUG("Some read or write were not successful in Stop Stream\n");
11299 int microdia_624f_set_exposure(struct usb_microdia
*dev
)
11302 __u8 v1
= (dev
->vsettings
.exposure
>> 4) & 0xff;
11303 __u8 v2
= dev
->vsettings
.exposure
>> 12;
11305 ret
|= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, 0x2d,
11306 dev
->sensor_flags
, &v1
);
11308 ret
|= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1, 0x2e,
11309 dev
->sensor_flags
, &v2
);
11314 int microdia_624f_flip_detect(struct usb_microdia
*dev
)
11319 ret
= usb_microdia_control_read(dev
, 0x1009, &val
, 1);
11320 if (ret
< 0) return -EAGAIN
;
11322 dev
->vsettings
.vflip
= 1;
11325 dev
->vsettings
.vflip
= 0;
11331 int microdia_6260_flip_detect(struct usb_microdia
*dev
)
11333 const __u8 flip_bit
= 0x01;
11336 static __u8 flip_reg
= flip_bit
;
11339 ret
= usb_microdia_control_read(dev
, 0x1009, &val
, 1);
11342 if (flip_reg
!= (val
& flip_bit
)) {
11343 if (val
& flip_bit
)
11347 ret
= ov7670_auto_flip(dev
, vflip
);
11348 flip_reg
= (val
& flip_bit
);