Fix 62B3 to use correct format decoding routines
[microdia.git] / microdia-dev.c
blobd2e9fe8c6193e91e27ef9d9db3a629d156561f16
1 /**
2 * @file microdia-dev.c
3 * @author Nicolas VIVIEN
4 * @date 2008-02-01
5 * @version v0.0.0
7 * @brief Driver for Microdia USB video camera
9 * @note Copyright (C) Nicolas VIVIEN
11 * @par Licences
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
16 * any later version.
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the Free Software
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 #include <linux/errno.h>
29 #include <linux/string.h>
30 #include <stdarg.h>
32 #include "microdia.h"
33 #include "sn9c20x.h"
34 #include "ov7670.h"
35 #include "ov965x.h"
36 #include "mt9vx11.h"
39 int dev_microdia_init_camera(struct usb_microdia *dev)
41 return 0;
44 int dev_microdia_camera_on(struct usb_microdia *dev)
46 int ret = -1;
47 struct usb_device *udev = dev->udev;
49 ret = usb_set_interface(udev, 0, 8);
51 if (ret < 0)
52 UDIA_ERROR("usb_set_interface failed !\n");
54 return ret;
57 int dev_microdia_camera_off(struct usb_microdia *dev)
59 int ret = -1;
60 struct usb_device *udev = dev->udev;
62 ret = usb_set_interface(udev, 0, 0);
64 if (ret < 0)
65 UDIA_ERROR("usb_set_interface failed !\n");
67 return 0;
70 int dev_microdia_camera_settings(struct usb_microdia *dev)
72 dev_microdia_camera_set_contrast(dev);
73 dev_microdia_camera_set_brightness(dev);
74 dev_microdia_camera_set_gamma(dev);
75 dev_microdia_camera_set_exposure(dev);
76 dev_microdia_camera_set_hvflip(dev);
77 dev_microdia_camera_set_sharpness(dev);
78 dev_microdia_camera_set_auto_exposure(dev);
79 dev_microdia_camera_set_auto_whitebalance(dev);
80 return 0;
83 int dev_microdia_camera_set_contrast(struct usb_microdia *dev)
85 int ret = -ENODEV;
86 if(dev && dev->set_contrast)
87 ret = dev->set_contrast(dev);
88 return ret;
91 int dev_microdia_camera_set_brightness(struct usb_microdia *dev)
93 int ret = -ENODEV;
94 if(dev && dev->set_brightness)
95 ret = dev->set_brightness(dev);
96 return ret;
99 int dev_microdia_camera_set_gamma(struct usb_microdia *dev)
101 int ret = -ENODEV;
102 if(dev && dev->set_gamma)
103 ret = dev->set_gamma(dev);
104 return ret;
107 int dev_microdia_camera_set_exposure(struct usb_microdia *dev)
109 if (dev->set_exposure != NULL) {
110 return dev->set_exposure(dev);
112 return 0;
115 int dev_microdia_camera_set_hvflip(struct usb_microdia *dev)
117 int ret = -ENODEV;
118 if(dev && dev->set_hvflip)
119 ret = dev->set_hvflip(dev);
121 return ret;
124 int dev_microdia_camera_set_sharpness(struct usb_microdia *dev)
126 int ret = -ENODEV;
127 if(dev && dev->set_sharpness)
128 ret = dev->set_sharpness(dev);
130 return ret;
133 int dev_microdia_camera_set_auto_exposure(struct usb_microdia *dev)
135 int ret = -ENODEV;
136 if(dev && dev->set_auto_exposure)
137 ret = dev->set_auto_exposure(dev);
139 return ret;
142 int dev_microdia_camera_set_auto_whitebalance(struct usb_microdia *dev)
144 int ret = -ENODEV;
145 if(dev && dev->set_auto_whitebalance)
146 ret = dev->set_auto_whitebalance(dev);
148 return ret;
152 /**
153 * @brief From UsbSnoop-plugin-parsed.log
155 * @param dev
157 * @returns
159 int dev_microdia_initialize_device(struct usb_microdia *dev)
161 int ret = -ENODEV;
163 if(dev && dev->initialize)
164 ret = dev->initialize(dev);
166 return ret;
170 * @brief From init-physical-replug.log
172 * @param dev
174 * @returns 0
176 * @author psnel
178 * For SN9C201 with MI1300.
181 int microdia_6240_initialize(struct usb_microdia *dev)
183 int ret = 0;
184 __u8 buf;
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);
194 buf=0x00;
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)
200 buf=0x80;
201 ret += usb_microdia_control_write(dev, 0x1020, &buf, 1); // URB 9
202 UDIA_INFO("...init: write %x, ret = %d\n",buf,ret);
204 if (ret < 4){
205 UDIA_ERROR("One ore more errors occured during initialization !\n");
206 return -1;
209 return 0;
213 * @brief From start.log (14 jun 2008)
215 * @param dev
217 * @returns 0
219 * @author psnel
221 * For SN9C201 with MI1300.
224 int microdia_6240_start_stream(struct usb_microdia *dev)
226 int ret = 0;
227 int i;
228 __u16 reg;
229 __u8 buf;
230 __u8 buf24[24];
231 __u8 buf64[64];
232 __u8 buf10e1[21] = {
233 0x16, 0x00, 0x2d, 0x00, 0x08, 0x00, 0xf1, 0x0f, 0xd3, 0x0f, 0x3c, 0x00, 0x36, 0x00, 0xce, 0x0f,
234 0xfc, 0x0f, 0x00, 0x00, 0x00};
235 __u8 buf1100[64] = {
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:
246 reg = 0x1066;
247 buf = 0x00;
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:
254 reg = 0x1007;
255 buf = 0x20;
256 ret = usb_microdia_control_write(dev, reg, &buf, 1);// URB 14
257 if(ret < 0) goto err;
258 reg = 0x1006;
259 buf = 0x00;
260 ret = usb_microdia_control_write(dev, reg, &buf, 1);
261 if(ret < 0) goto err;
262 reg = 0x1000;
263 buf = 0x78;
264 ret = usb_microdia_control_write(dev, reg, &buf, 1);
265 if(ret < 0) goto err;
267 reg = 0x1001;
268 ret = usb_microdia_control_read(dev, reg, &buf, 1); // cf
269 if(ret < 0) goto err;
271 reg = 0x1001;
272 buf = 0xc7;
273 ret = usb_microdia_control_write(dev, reg, &buf, 1);
274 if(ret < 0) goto err;
275 reg = 0x1002;
276 buf = 0x18;
277 ret = usb_microdia_control_write(dev, reg, &buf, 1);
278 if(ret < 0) goto err;
280 // URB 20
281 reg = 0x1007;
282 ret = usb_microdia_control_read(dev, reg, buf24, 7); // << 20 00 ff 81 00 00 00
283 if(ret < 0) goto err;
285 reg = 0x1006;
286 buf24[0] = 0x80; buf24[1] = 0xa0;
287 ret = usb_microdia_control_write(dev, reg, buf24, 2);
288 if(ret < 0) goto err;
289 reg = 0x1061;
290 buf = 0x01;
291 ret = usb_microdia_control_write(dev, reg, &buf, 1);
292 if(ret < 0) goto err;
293 reg = 0x1020;
294 buf = 0x80;
295 ret = usb_microdia_control_write(dev, reg, &buf, 1);
296 if(ret < 0) goto err;
297 reg = 0x1067;
298 buf24[0] = 0x40; buf24[1] = 0x30; buf24[2] = 0x20; buf24[3] = 0x10;
299 buf24[4] = 0x08;
300 ret = usb_microdia_control_write(dev, reg, buf24, 5);
301 if(ret < 0) goto err;
302 reg = 0x10c0;
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;
305 buf24[8] = 0x03;
306 ret = usb_microdia_control_write(dev, reg, buf24, 9);
307 if(ret < 0) goto err;
308 reg = 0x10e0;
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;
317 reg = 0x10f8;
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;
321 reg = 0x10fb;
322 buf24[0] = 0x00; buf24[1] = 0xa0; buf24[2] = 0x00; buf24[3] = 0xf0;
323 buf24[4] = 0x00;
324 ret = usb_microdia_control_write(dev, reg, buf24, 5);
325 if(ret < 0) goto err;
326 reg = 0x1188;
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;
331 // URB 30
332 reg = 0x118b;
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;
343 reg = 0x11a1;
344 buf24[0] = 0x00; buf24[1] = 0x00;
345 ret = usb_microdia_control_write(dev, reg, buf24, 2);
346 if(ret < 0) goto err;
348 reg = 0x11b7;
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;
351 buf24[8] = 0x00;
352 ret = usb_microdia_control_write(dev, reg, buf24, 9);
353 if(ret < 0) goto err;
355 reg = 0x11b8;
356 buf = 0x38;
357 ret = usb_microdia_control_write(dev, reg, &buf, 1);
358 if(ret < 0) goto err;
360 reg = 0x1000;
361 buf = 0x78;
362 ret = usb_microdia_control_write(dev, reg, &buf, 1);
363 if(ret < 0) goto err;
366 reg = 0x10c0;
367 // URB 35..90 -->
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;
403 // URB 45
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;
469 // URB 65
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;
510 // URB 77
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;
519 // URB 79
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;
540 // URB 85
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;
561 // <-- 10c0
564 // URB 91
565 reg = 0x10c1;
566 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << 5d
567 if(ret < 0) goto err;
568 buf = 0x50;
569 ret = usb_microdia_control_write(dev, reg, &buf, 1);
570 if(ret < 0) goto err;
572 // URB 93..108
573 reg = 0x10c0;
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
585 // URB 110..126
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;
594 reg = 0x10c2;
595 ret = usb_microdia_control_read(dev, reg, buf24, 5); // << ff ff ff ff ff
596 if(ret < 0) goto err;
598 reg = 0x10c1;
599 buf = 0x5d;
600 ret = usb_microdia_control_write(dev, reg, &buf, 1);
601 if(ret < 0) goto err;
603 reg = 0x10e0;
604 buf = 0x47;
605 ret = usb_microdia_control_write(dev, reg, &buf, 1);
606 if(ret < 0) goto err;
607 buf = 0x07;
608 ret = usb_microdia_control_write(dev, reg, &buf, 1);
609 if(ret < 0) goto err;
611 reg = 0x1001;
612 buf = 0xc6;
613 ret = usb_microdia_control_write(dev, reg, &buf, 1);
614 if(ret < 0) goto err;
615 buf = 0xc4;
616 ret = usb_microdia_control_write(dev, reg, &buf, 1);
617 if(ret < 0) goto err;
618 buf = 0x44;
619 ret = usb_microdia_control_write(dev, reg, &buf, 1);
620 if(ret < 0) goto err;
622 reg = 0x1189;
623 buf = 0x0c;
624 ret = usb_microdia_control_write(dev, reg, &buf, 1);
625 if(ret < 0) goto err;
627 buf = 0x00;
628 // URB 135..138
629 reg = 0x11bc;
630 ret = usb_microdia_control_write(dev, reg, &buf, 1);
631 if(ret < 0) goto err;
632 reg = 0x11bd;
633 ret = usb_microdia_control_write(dev, reg, &buf, 1);
634 if(ret < 0) goto err;
635 reg = 0x11be;
636 ret = usb_microdia_control_write(dev, reg, &buf, 1);
637 if(ret < 0) goto err;
638 reg = 0x11bf;
639 ret = usb_microdia_control_write(dev, reg, &buf, 1);
640 if(ret < 0) goto err;
643 // URB 139
644 reg = 0x10c0;
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;
656 // URB 142
657 reg = 0x1180;
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;
663 reg = 0x10fb;
664 buf24[0] = 0x00; buf24[1] = 0xa0; buf24[2] = 0x00; buf24[3] = 0xf0;
665 buf24[4] = 0x00;
666 ret = usb_microdia_control_write(dev, reg, buf24, 5);
667 if(ret < 0) goto err;
669 reg = 0x1189;
670 buf = 0x0c;
671 ret = usb_microdia_control_write(dev, reg, &buf, 1);
672 if(ret < 0) goto err;
674 reg = 0x11a1;
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;
679 reg = 0x11ab;
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;
684 reg = 0x1000;
685 buf = 0x7c;
686 ret = usb_microdia_control_write(dev, reg, &buf, 1);
687 if(ret < 0) goto err;
689 reg = 0x1002;
690 buf = 0x1c;
691 for(i=148; i<=149; i++){
692 ret = usb_microdia_control_write(dev, reg, &buf, 1);
693 if(ret < 0) goto err;
696 // URB 150
697 reg = 0x11b8;
698 buf = 0x38;
699 ret = usb_microdia_control_write(dev, reg, &buf, 1);
700 if(ret < 0) goto err;
702 reg = 0x118a;
703 buf = 0x05;
704 ret = usb_microdia_control_write(dev, reg, &buf, 1);
705 if(ret < 0) goto err;
707 reg = 0x0395;
708 buf = 0x05;
709 ret = usb_microdia_control_write(dev, reg, &buf, 1);
710 if(ret < 0) goto err;
713 reg = 0x11b8;
714 // URB 153..163
715 buf = 0x78;
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;
720 buf = 0x79;
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;
725 buf = 0x7a;
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;
730 buf = 0x7b;
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;
735 buf = 0xfc;
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;
740 buf = 0x78;
741 ret = usb_microdia_control_write(dev, reg, &buf, 1);
742 if(ret < 0) goto err;
744 // <-- 0x11b8
747 reg = 0x10c0;
748 // URB 164..169
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;
769 // <-- 0x10c0
772 reg = 0x11ba;
773 buf = 0x0a;
774 ret = usb_microdia_control_write(dev, reg, &buf, 1);
775 if(ret < 0) goto err;
777 buf = 0x00;
778 reg = 0x118c;
779 ret = usb_microdia_control_write(dev, reg, &buf, 1);
780 if(ret < 0) goto err;
781 reg = 0x118d;
782 ret = usb_microdia_control_write(dev, reg, &buf, 1);
783 if(ret < 0) goto err;
784 reg = 0x118e;
785 ret = usb_microdia_control_write(dev, reg, &buf, 1);
786 if(ret < 0) goto err;
787 reg = 0x118f;
788 ret = usb_microdia_control_write(dev, reg, &buf, 1);
789 if(ret < 0) goto err;
791 reg = 0x118b;
792 buf = 0x0a;
793 ret = usb_microdia_control_write(dev, reg, &buf, 1);
794 if(ret < 0) goto err;
797 // URB 176
798 reg = 0x1190;
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;
803 buf24[16] = 0xf7;
804 ret = usb_microdia_control_write(dev, reg, buf24, 17);
805 if(ret < 0) goto err;
808 reg = 0x10e1;
809 // URB 177..185
810 for(i=0; i<21; i++) // zeroes
811 buf24[i] = 0x00;
812 for(i=177; i<=184; i++){
813 ret = usb_microdia_control_write(dev, reg, buf24, 21);
814 if(ret < 0) goto err;
816 // ..URB 185
817 ret = usb_microdia_control_write(dev, reg, buf10e1, 21);
818 if(ret < 0) goto err;
821 reg = 0x10f7;
822 buf = 0x07;
823 ret = usb_microdia_control_write(dev, reg, &buf, 1);
824 if(ret < 0) goto err;
825 reg = 0x10f6;
826 buf = 0x60;
827 ret = usb_microdia_control_write(dev, reg, &buf, 1);
828 if(ret < 0) goto err;
830 // URB 188
831 reg = 0x10e1;
832 ret = usb_microdia_control_write(dev, reg, buf10e1, 21);
833 if(ret < 0) goto err;
836 reg = 0x10f8;
837 buf = 0x14;
838 ret = usb_microdia_control_write(dev, reg, &buf, 1);
839 if(ret < 0) goto err;
840 reg = 0x10fa;
841 buf = 0xff;
842 ret = usb_microdia_control_write(dev, reg, &buf, 1);
843 if(ret < 0) goto err;
844 reg = 0x10f9;
845 buf = 0x00;
846 ret = usb_microdia_control_write(dev, reg, &buf, 1);
847 if(ret < 0) goto err;
848 reg = 0x10f9;
849 ret = usb_microdia_control_write(dev, reg, &buf, 1);
850 if(ret < 0) goto err;
852 reg = 0x11ba;
853 buf = 0x0a;
854 ret = usb_microdia_control_write(dev, reg, &buf, 1);
855 if(ret < 0) goto err;
857 reg = 0x11bc;
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;
863 // URB 195
864 reg = 0x11c0;
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;
870 buf = 0x20;
871 // URB 196..199
872 reg = 0x118c;
873 ret = usb_microdia_control_write(dev, reg, &buf, 1);
874 if(ret < 0) goto err;
875 reg = 0x118d;
876 ret = usb_microdia_control_write(dev, reg, &buf, 1);
877 if(ret < 0) goto err;
878 reg = 0x118e;
879 ret = usb_microdia_control_write(dev, reg, &buf, 1);
880 if(ret < 0) goto err;
881 reg = 0x118f;
882 ret = usb_microdia_control_write(dev, reg, &buf, 1);
883 if(ret < 0) goto err;
886 // URB 200
887 reg = 0x10c0;
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;
899 reg = 0x1180;
900 buf = 0x02;
901 ret = usb_microdia_control_write(dev, reg, &buf, 1);
902 if(ret < 0) goto err;
905 reg = 0x10c0;
906 // URB 204..206
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;
918 reg = 0x1182;
919 buf = 0x02;
920 ret = usb_microdia_control_write(dev, reg, &buf, 1);
921 if(ret < 0) goto err;
924 reg = 0x10c0;
925 // URB 208..224
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;
946 // URB 214
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;
986 buf = 0x20;
987 // URB 225..228
988 reg = 0x118c;
989 ret = usb_microdia_control_write(dev, reg, &buf, 1);
990 if(ret < 0) goto err;
991 reg = 0x118d;
992 ret = usb_microdia_control_write(dev, reg, &buf, 1);
993 if(ret < 0) goto err;
994 reg = 0x118e;
995 ret = usb_microdia_control_write(dev, reg, &buf, 1);
996 if(ret < 0) goto err;
997 reg = 0x118f;
998 ret = usb_microdia_control_write(dev, reg, &buf, 1);
999 if(ret < 0) goto err;
1002 reg = 0x11a5;
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;
1007 reg = 0x11af;
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;
1011 reg = 0x11b3;
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;
1017 reg = 0x10c0;
1018 // URB 232..242
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;
1058 reg = 0x118c;
1059 buf = 0x1f;
1060 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1061 if(ret < 0) goto err;
1062 reg = 0x118d;
1063 buf = 0x20;
1064 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1065 if(ret < 0) goto err;
1066 reg = 0x118e;
1067 buf = 0x20;
1068 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1069 if(ret < 0) goto err;
1070 reg = 0x118f;
1071 buf = 0x1f;
1072 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1073 if(ret < 0) goto err;
1075 reg = 0x10e0;
1076 buf = 0x07;
1077 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1078 if(ret < 0) goto err;
1079 buf = 0x27;
1080 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1081 if(ret < 0) goto err;
1084 // URB 249 (see also 509/510)
1085 reg = 0x1100;
1086 ret = usb_microdia_control_write(dev, reg, buf1100, 64);
1087 if(ret < 0) goto err;
1089 // URB 250
1090 reg = 0x1140;
1091 // 00000000:
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;
1102 reg = 0x10e0;
1103 buf = 0x07;
1104 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1105 if(ret < 0) goto err;
1106 buf = 0x0b;
1107 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1108 if(ret < 0) goto err;
1110 reg = 0x1189;
1111 buf = 0x0c;
1112 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1113 if(ret < 0) goto err;
1116 buf = 0x00;
1117 // URB 254..257
1118 reg = 0x11bc;
1119 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1120 if(ret < 0) goto err;
1121 reg = 0x11bd;
1122 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1123 if(ret < 0) goto err;
1124 reg = 0x11be;
1125 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1126 if(ret < 0) goto err;
1127 reg = 0x11bf;
1128 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1129 if(ret < 0) goto err;
1132 reg = 0x1180;
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;
1138 reg = 0x10fb;
1139 buf24[0] = 0x00; buf24[1] = 0xa0; buf24[2] = 0x00; buf24[3] = 0xf0;
1140 buf24[4] = 0x00;
1141 ret = usb_microdia_control_write(dev, reg, buf24, 5);
1142 if(ret < 0) goto err;
1144 reg = 0x1189;
1145 buf = 0x0c;
1146 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1147 if(ret < 0) goto err;
1149 reg = 0x11a1;
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;
1153 reg = 0x11ab;
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;
1158 reg = 0x1061;
1159 buf = 0x03;
1160 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1161 if(ret < 0) goto err;
1162 reg = 0x11ba;
1163 buf = 0x0a;
1164 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1165 if(ret < 0) goto err;
1166 reg = 0x11b9;
1167 buf = 0x00;
1168 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1169 if(ret < 0) goto err;
1170 reg = 0x11ba;
1171 buf = 0x0b;
1172 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1173 if(ret < 0) goto err;
1174 reg = 0x1061;
1175 buf = 0x01;
1176 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1177 if(ret < 0) goto err;
1178 reg = 0x1000;
1179 buf = 0x7c;
1180 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1181 if(ret < 0) goto err;
1182 reg = 0x1002;
1183 buf = 0x1c;
1184 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1185 if(ret < 0) goto err;
1186 buf = 0x1c;
1187 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1188 if(ret < 0) goto err;
1189 reg = 0x11b8;
1190 buf = 0x78;
1191 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1192 if(ret < 0) goto err;
1193 reg = 0x118a;
1194 buf = 0x05;
1195 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1196 if(ret < 0) goto err;
1197 reg = 0x0395;
1198 buf = 0x05;
1199 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1200 if(ret < 0) goto err;
1203 reg = 0x11b8;
1204 // URB 274..284
1205 buf = 0x78;
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;
1210 buf = 0x79;
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;
1215 buf = 0x7a;
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;
1220 buf = 0x7b;
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;
1225 buf = 0xfc;
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;
1230 buf = 0x78;
1231 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1232 if(ret < 0) goto err;
1234 // <-- 0x11b8
1237 reg = 0x10c0;
1238 // URB 285..295
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;
1277 // <-- 0x10c0
1280 // URB 296
1281 reg = 0x10c2;
1282 ret = usb_microdia_control_read(dev, reg, buf24, 5); // << 00 00 00 84 31
1283 if(ret < 0) goto err;
1286 reg = 0x1061;
1287 buf = 0x03;
1288 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1289 if(ret < 0) goto err;
1290 buf = 0x01;
1291 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1292 if(ret < 0) goto err;
1295 reg = 0x10c0;
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;
1307 reg = 0x1000;
1308 buf = 0x3c;
1309 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1310 if(ret < 0) goto err;
1311 reg = 0x11b8;
1312 buf = 0x68;
1313 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1314 if(ret < 0) goto err;
1315 reg = 0x1007;
1316 buf = 0xa0;
1317 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1318 if(ret < 0) goto err;
1319 reg = 0x1006;
1320 buf = 0xa0;
1321 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1322 if(ret < 0) goto err;
1324 reg = 0x1000;
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:
1333 reg = 0x1066;
1334 buf = 0x00;
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:
1342 // URB 312
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:
1349 // URB 314
1350 reg = 0x1007;
1351 buf = 0xa0;
1352 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1353 if(ret < 0) goto err;
1354 reg = 0x1006;
1355 buf = 0x80;
1356 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1357 if(ret < 0) goto err;
1358 reg = 0x1000;
1359 buf = 0x78;
1360 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1361 if(ret < 0) goto err;
1362 reg = 0x1001;
1363 ret = usb_microdia_control_read(dev, reg, &buf, 1); // << ef
1364 if(ret < 0) goto err;
1365 buf = 0xc7;
1366 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1367 if(ret < 0) goto err;
1368 reg = 0x1002;
1369 buf = 0x18;
1370 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1371 if(ret < 0) goto err;
1373 // URB 320
1374 reg = 0x1007;
1375 ret = usb_microdia_control_read(dev, reg, buf24, 7); // << a0 00 ff 81 00 00 00
1376 if(ret < 0) goto err;
1377 reg = 0x1006;
1378 buf24[0] = 0x80; buf24[1] = 0xa0;
1379 ret = usb_microdia_control_write(dev, reg, buf24, 2);
1380 if(ret < 0) goto err;
1382 reg = 0x1061;
1383 buf = 0x01;
1384 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1385 if(ret < 0) goto err;
1386 reg = 0x1020;
1387 buf = 0x80;
1388 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1389 if(ret < 0) goto err;
1391 reg = 0x1067;
1392 buf24[0] = 0x40; buf24[1] = 0x30; buf24[2] = 0x20; buf24[3] = 0x10;
1393 buf24[4] = 0x08;
1394 ret = usb_microdia_control_write(dev, reg, buf24, 5);
1395 if(ret < 0) goto err;
1397 reg = 0x10c0;
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;
1400 buf24[8] = 0x03;
1401 ret = usb_microdia_control_write(dev, reg, buf24, 9);
1402 if(ret < 0) goto err;
1404 // URB 326
1405 reg = 0x10e0;
1406 // 00000000:
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;
1411 // 00000010:
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;
1417 reg = 0x10f8;
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;
1422 reg = 0x10fb;
1423 buf24[0] = 0x00; buf24[1] = 0xa0; buf24[2] = 0x00; buf24[3] = 0xf0;
1424 buf24[4] = 0x00;
1425 ret = usb_microdia_control_write(dev, reg, buf24, 5);
1426 if(ret < 0) goto err;
1428 reg = 0x1188;
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;
1433 // URB 330
1434 reg = 0x118b;
1435 // 00000000:
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;
1440 // 00000010:
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;
1446 reg = 0x11a1;
1447 buf24[0] = 0x00; buf24[1] = 0x00;
1448 ret = usb_microdia_control_write(dev, reg, buf24, 2);
1449 if(ret < 0) goto err;
1451 reg = 0x11b7;
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;
1454 buf24[8] = 0x00;
1455 ret = usb_microdia_control_write(dev, reg, buf24, 9);
1456 if(ret < 0) goto err;
1458 reg = 0x11b8;
1459 buf = 0x38;
1460 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1461 if(ret < 0) goto err;
1462 reg = 0x1000;
1463 buf = 0x78;
1464 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1465 if(ret < 0) goto err;
1468 reg = 0x10c0;
1469 // URB 335..390
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;
1500 // ..URB 344
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;
1541 // ..URB 356
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;
1572 // ..URB 365
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;
1613 // ..URB 377
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;
1642 // ..URB 385
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;
1663 // <-- 0x10c0
1666 // URB 391
1667 reg = 0x10e0;
1668 buf = 0x47;
1669 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1670 if(ret < 0) goto err;
1671 buf = 0x07;
1672 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1673 if(ret < 0) goto err;
1675 reg = 0x1001;
1676 buf = 0xc6;
1677 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1678 if(ret < 0) goto err;
1679 buf = 0xc4;
1680 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1681 if(ret < 0) goto err;
1682 buf = 0x44;
1683 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1684 if(ret < 0) goto err;
1686 reg = 0x1189;
1687 buf = 0x0c;
1688 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1689 if(ret < 0) goto err;
1692 buf = 0x00;
1693 // URB 397..400
1694 reg = 0x11bc;
1695 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1696 if(ret < 0) goto err;
1697 reg = 0x11bd;
1698 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1699 if(ret < 0) goto err;
1700 reg = 0x11be;
1701 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1702 if(ret < 0) goto err;
1703 reg = 0x11bf;
1704 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1705 if(ret < 0) goto err;
1708 // URB 401
1709 reg = 0x10c0;
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;
1721 reg = 0x1180;
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;
1726 reg = 0x10fb;
1727 buf24[0] = 0x00; buf24[1] = 0xa0; buf24[2] = 0x00; buf24[3] = 0xf0;
1728 buf24[4] = 0x00;
1729 ret = usb_microdia_control_write(dev, reg, buf24, 5);
1730 if(ret < 0) goto err;
1733 reg = 0x1189;
1734 buf = 0x0c;
1735 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1736 if(ret < 0) goto err;
1738 reg = 0x11a1;
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;
1742 reg = 0x11ab;
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;
1747 reg = 0x1000;
1748 buf = 0x7c;
1749 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1750 if(ret < 0) goto err;
1752 reg = 0x1002;
1753 buf = 0x1c;
1754 for(i=410; i<=411; i++){
1755 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1756 if(ret < 0) goto err;
1759 reg = 0x11b8;
1760 buf = 0x38;
1761 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1762 if(ret < 0) goto err;
1763 reg = 0x118a;
1764 buf = 0x05;
1765 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1766 if(ret < 0) goto err;
1767 reg = 0x0395;
1768 buf = 0x05;
1769 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1770 if(ret < 0) goto err;
1773 reg = 0x11b8;
1774 // URB 415..425
1775 buf = 0x78;
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;
1780 buf = 0x79;
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;
1785 buf = 0x7a;
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;
1790 buf = 0x7b;
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;
1795 buf = 0xfc;
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;
1800 buf = 0x78;
1801 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1802 if(ret < 0) goto err;
1804 // <-- 0x11b8
1807 reg = 0x10c0;
1808 // URB 426..431
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;
1829 // <-- 0x10c0
1832 reg = 0x11ba;
1833 buf = 0x0a;
1834 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1835 if(ret < 0) goto err;
1836 reg = 0x118c;
1837 buf = 0x1f;
1838 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1839 if(ret < 0) goto err;
1840 reg = 0x118d;
1841 buf = 0x20;
1842 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1843 if(ret < 0) goto err;
1844 reg = 0x118e;
1845 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1846 if(ret < 0) goto err;
1847 reg = 0x118f;
1848 buf = 0x1f;
1849 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1850 if(ret < 0) goto err;
1851 reg = 0x118b;
1852 buf = 0x0a;
1853 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1854 if(ret < 0) goto err;
1857 // URB 438
1858 reg = 0x1190;
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;
1863 buf24[16] = 0xf7;
1864 ret = usb_microdia_control_write(dev, reg, buf24, 17);
1865 if(ret < 0) goto err;
1868 reg = 0x10e1;
1869 // URB 439..447
1870 for(i=439; i<=447; i++){
1871 ret = usb_microdia_control_write(dev, reg, buf10e1, 21);
1872 if(ret < 0) goto err;
1876 reg = 0x10f7;
1877 buf = 0x07;
1878 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1879 if(ret < 0) goto err;
1880 reg = 0x10f6;
1881 buf = 0x60;
1882 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1883 if(ret < 0) goto err;
1886 // URB 450
1887 reg = 0x10e1;
1888 ret = usb_microdia_control_write(dev, reg, buf10e1, 21);
1889 if(ret < 0) goto err;
1892 reg = 0x10f8;
1893 buf = 0x14;
1894 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1895 if(ret < 0) goto err;
1896 reg = 0x10fa;
1897 buf = 0xff;
1898 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1899 if(ret < 0) goto err;
1901 reg = 0x10f9;
1902 buf = 0x00;
1903 for(i=453; i<454; i++){
1904 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1905 if(ret < 0) goto err;
1908 reg = 0x11ba;
1909 buf = 0x0a;
1910 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1911 if(ret < 0) goto err;
1913 reg = 0x11bc;
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;
1919 // URB 457
1920 reg = 0x11c0;
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;
1926 buf = 0x20;
1927 // URB 458..461
1928 reg = 0x118c;
1929 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1930 if(ret < 0) goto err;
1931 reg = 0x118d;
1932 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1933 if(ret < 0) goto err;
1934 reg = 0x118e;
1935 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1936 if(ret < 0) goto err;
1937 reg = 0x118f;
1938 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1939 if(ret < 0) goto err;
1942 // URB 462
1943 reg = 0x10c0;
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;
1955 reg = 0x1180;
1956 buf = 0x02;
1957 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1958 if(ret < 0) goto err;
1961 // URB 466
1962 reg = 0x10c0;
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;
1974 reg = 0x1182;
1975 buf = 0x02;
1976 ret = usb_microdia_control_write(dev, reg, &buf, 1);
1977 if(ret < 0) goto err;
1980 reg = 0x10c0;
1981 // URB 470..483
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;
2012 // ..URB 479
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;
2031 // <-- 0x10c0
2034 buf = 0x20;
2035 // URB 484..487
2036 reg = 0x118c;
2037 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2038 if(ret < 0) goto err;
2039 reg = 0x118d;
2040 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2041 if(ret < 0) goto err;
2042 reg = 0x118e;
2043 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2044 if(ret < 0) goto err;
2045 reg = 0x118f;
2046 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2047 if(ret < 0) goto err;
2050 reg = 0x11a5;
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;
2055 reg = 0x11af;
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;
2059 reg = 0x11b3;
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;
2065 reg = 0x10c0;
2066 // URB 491..502
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;
2107 // <-- 0x10c0
2110 reg = 0x118c;
2111 buf = 0x1f;
2112 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2113 if(ret < 0) goto err;
2114 reg = 0x118d;
2115 buf = 0x20;
2116 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2117 if(ret < 0) goto err;
2118 reg = 0x118e;
2119 buf = 0x20;
2120 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2121 if(ret < 0) goto err;
2122 reg = 0x118f;
2123 buf = 0x1f;
2124 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2125 if(ret < 0) goto err;
2127 reg = 0x10e0;
2128 buf = 0x07;
2129 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2130 if(ret < 0) goto err;
2131 buf = 0x27;
2132 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2133 if(ret < 0) goto err;
2136 // URB 509 (see also 249/250)
2137 reg = 0x1100;
2138 ret = usb_microdia_control_write(dev, reg, buf1100, 64);
2139 if(ret < 0) goto err;
2141 // URB 510
2142 reg = 0x1140;
2143 // 00000000:
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;
2154 reg = 0x10e0;
2155 buf = 0x07;
2156 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2157 if(ret < 0) goto err;
2158 buf = 0x0b;
2159 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2160 if(ret < 0) goto err;
2162 reg = 0x1189;
2163 buf = 0x0c;
2164 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2165 if(ret < 0) goto err;
2167 buf = 0x00;
2168 // URB 514..517
2169 reg = 0x11bc;
2170 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2171 if(ret < 0) goto err;
2172 reg = 0x11bd;
2173 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2174 if(ret < 0) goto err;
2175 reg = 0x11be;
2176 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2177 if(ret < 0) goto err;
2178 reg = 0x11bf;
2179 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2180 if(ret < 0) goto err;
2183 reg = 0x1180;
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);
2188 reg = 0x10fb;
2189 buf24[0] = 0x00; buf24[1] = 0xa0; buf24[2] = 0x00; buf24[3] = 0xf0;
2190 buf24[4] = 0x00;
2191 ret = usb_microdia_control_write(dev, reg, buf24, 5);
2194 reg = 0x1189;
2195 buf = 0x0c;
2196 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2197 if(ret < 0) goto err;
2199 reg = 0x11a1;
2200 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x6a; buf24[3] = 0x50;
2201 ret = usb_microdia_control_write(dev, reg, buf24, 4);
2203 reg = 0x11ab;
2204 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x50; buf24[3] = 0x3c;
2205 ret = usb_microdia_control_write(dev, reg, buf24, 4);
2207 reg = 0x1061;
2208 buf = 0x03;
2209 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2210 if(ret < 0) goto err;
2211 reg = 0x11ba;
2212 buf = 0x0a;
2213 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2214 if(ret < 0) goto err;
2215 reg = 0x11b9;
2216 buf = 0x00;
2217 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2218 if(ret < 0) goto err;
2219 reg = 0x11ba;
2220 buf = 0x0b;
2221 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2222 if(ret < 0) goto err;
2223 reg = 0x1061;
2224 buf = 0x01;
2225 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2226 if(ret < 0) goto err;
2227 reg = 0x1000;
2228 buf = 0x7c;
2229 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2230 if(ret < 0) goto err;
2233 reg = 0x1002;
2234 buf = 0x1c;
2235 for(i=529; i<=530; i++){
2236 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2237 if(ret < 0) goto err;
2241 reg = 0x11b8;
2242 buf = 0x78;
2243 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2244 if(ret < 0) goto err;
2245 reg = 0x118a;
2246 buf = 0x05;
2247 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2248 if(ret < 0) goto err;
2249 reg = 0x0395;
2250 buf = 0x05;
2251 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2252 if(ret < 0) goto err;
2255 reg = 0x11b8;
2256 // URB 534..544
2257 buf = 0x78;
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;
2262 buf = 0x79;
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;
2267 buf = 0x7a;
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;
2272 buf = 0x7b;
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;
2277 buf = 0xfc;
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;
2282 buf = 0x78;
2283 ret = usb_microdia_control_write(dev, reg, &buf, 1);
2284 if(ret < 0) goto err;
2286 // <-- 0x11b8
2289 reg = 0x10c0;
2290 // URB 545..555
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;
2329 // <-- 0x10c0
2332 reg = 0x10c2;
2333 buf24[0] = 0x00; buf24[1] = 0x00; buf24[2] = 0x00; buf24[3] = 0x84;
2334 buf24[4] = 0x31;
2335 ret = usb_microdia_control_write(dev, reg, buf24, 5);
2336 if(ret < 0) goto err;
2338 // URB 557
2339 reg = 0x1061;
2340 buf = 0x03;
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");
2352 return ret;
2353 err:
2354 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg, ret);
2355 return ret;
2359 * @brief From stop-close-amcap.log
2361 * @param dev
2363 * @returns 0
2365 * @author psnel
2367 * For SN9C201 with MI1300. Comments from parser-usbsnoop(updated_13Mar2008).pl output
2370 int microdia_6240_stop_stream(struct usb_microdia *dev)
2372 int ret=0;
2373 __u8 buf[8];
2375 UDIA_INFO("Stopping camera...\n");
2377 buf[0]=0x01;
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);
2392 buf[0]=0x3c;
2393 ret += usb_microdia_control_write(dev, 0x1000, buf, 1); // URB 25323
2394 UDIA_INFO("...stop: write %x, ret = %d\n",buf[0],ret);
2396 buf[0]=0x68;
2397 ret += usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 25324
2398 UDIA_INFO("...stop: write %x, ret = %d\n",buf[0],ret);
2400 buf[0]=0xa0;
2401 ret += usb_microdia_control_write(dev, 0x1007, buf, 1); // URB 25325
2402 UDIA_INFO("...stop: write %x, ret = %d\n",buf[0],ret);
2404 buf[0]=0xa0;
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)
2416 buf[0]=0x00;
2417 ret += usb_microdia_control_write(dev, 0x1066, buf, 1); // URB 25330
2418 UDIA_INFO("...stop: write %x, ret = %d\n",buf[0],ret);
2420 if(ret < 19){
2421 UDIA_ERROR("One ore more errors occured during stop sequence !\n");
2422 return -1;
2425 return 0;
2429 * @brief From init.sequence.log
2431 * @param dev
2433 * @returns 0
2435 * @author GWater
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)
2443 __u8 buf;
2445 usb_microdia_control_read(dev, 0x130d, &buf, 1);
2446 usb_microdia_control_read(dev, 0x1040, &buf, 1);
2448 return 0;
2451 /**
2452 * @brief From UsbSnoop-plugin-parsed.log
2454 * @param dev
2456 * @returns
2458 int microdia_624f_initialize(struct usb_microdia *dev)
2460 /* Do nothing here */
2461 return 0;
2465 * @brief From UsbSnoop-plugin-parsed.log
2467 * @param dev
2469 * @returns
2471 int microdia_6260_initialize(struct usb_microdia *dev)
2473 __u8 buf;
2475 usb_microdia_control_read(dev, 0x130d, &buf, 1);
2476 usb_microdia_control_read(dev, 0x1040, &buf, 1);
2477 buf = 0x00;
2478 usb_microdia_control_write(dev, 0x10c8, &buf, 1);
2479 usb_microdia_control_read(dev, 0x100a, &buf, 1);
2480 buf = 0x04;
2481 usb_microdia_control_write(dev, 0x100a, &buf, 1);
2482 usb_microdia_control_read(dev, 0x100b, &buf, 1);
2483 buf = 0x04;
2484 usb_microdia_control_write(dev, 0x100b, &buf, 1);
2485 usb_microdia_control_read(dev, 0x1001, &buf, 1);
2486 buf = 0xc7;
2487 usb_microdia_control_write(dev, 0x1001, &buf, 1);
2488 usb_microdia_control_read(dev, 0x1040, &buf, 1);
2489 buf = 0x00;
2490 usb_microdia_control_write(dev, 0x1040, &buf, 1);
2491 usb_microdia_control_read(dev, 0x1045, &buf, 1);
2492 buf = 0x04;
2493 usb_microdia_control_write(dev, 0x1045, &buf, 1);
2494 usb_microdia_control_read(dev, 0x1046, &buf, 1);
2495 buf = 0x10;
2496 usb_microdia_control_write(dev, 0x1046, &buf, 1);
2497 buf = 0x14;
2498 usb_microdia_control_write(dev, 0x1045, &buf, 1);
2499 buf = 0x01;
2500 usb_microdia_control_write(dev, 0x1040, &buf, 1);
2501 buf = 0x80;
2502 usb_microdia_control_write(dev, 0x1020, &buf, 1);
2504 return 0;
2508 * @brief From 6 init-logs
2510 * @param dev
2512 * @returns 0 (ok) or -1 (error)
2514 * @author Comer352l
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)
2524 //int actual;
2525 int ret = 0;
2526 int retSP = 0;
2527 int retASS = 0;
2528 __u8 buf[8];
2529 __u8 buf_0395[1];
2530 __u8 buf_1000[5];
2531 __u8 buf_1060[2];
2532 __u8 buf_11b8[1];
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:
2540 * buf[0]=0x00;
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)
2549 buf[0] = 0x05;
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)
2557 buf[0] = 0x10;
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:
2600 * wbuf[0]=0x80;
2601 * usb_microdia_control_write(dev, 0x1020, wbuf, 1);
2604 if ((retSP != 0) || (retASS != 0) || (ret < 33))
2606 if (ret < 33)
2607 UDIA_INFO("One ore more errors occured during initialization !\n");
2608 return -1;
2610 else
2611 return 0;
2614 /**
2615 * @brief From UsbSnoop-plugin-parsed.log
2617 * @param dev
2619 * @returns
2621 int microdia_627b_initialize(struct usb_microdia *dev)
2623 //int actual;
2624 int ret;
2625 int retI2C;
2626 __u16 reg;
2627 __u8 buf[32];
2628 __u8 reg0395[1];
2629 __u8 reg11b8[1];
2630 __u8 reg1000[5];
2631 __u8 reg1060[2];
2633 reg = 0x130d;
2634 ret = usb_microdia_control_read(dev, reg, buf, 1); // URB 5
2635 if(ret < 0) goto err;
2636 reg = 0x1040;
2637 ret = usb_microdia_control_read(dev, reg, buf, 1); // URB 6
2638 if(ret < 0) goto err;
2640 reg = 0x118a;
2641 ret = usb_microdia_control_read(dev, reg, buf, 1); // URB 7
2642 if(ret < 0) goto err;
2643 reg = 0x0395;
2644 ret = usb_microdia_control_read(dev, reg, reg0395, 1); // URB 8
2645 if(ret < 0) goto err;
2647 reg = 0x118a;
2648 buf[0] = 0x05;
2649 ret = usb_microdia_control_write(dev, reg, buf, 1); // URB 9
2650 if(ret < 0) goto err;
2651 reg = 0x0395;
2652 ret = usb_microdia_control_write(dev, reg, buf, 1); // URB 10
2653 if(ret < 0) goto err;
2655 reg = 0x11b8;
2656 ret = usb_microdia_control_read(dev, reg, reg11b8, 1); // URB 11
2657 if(ret < 0) goto err;
2659 reg = 0x11b8;
2660 buf[0] = 0x10;
2661 ret = usb_microdia_control_write(dev, reg, buf, 1); // URB 12
2662 if(ret < 0) goto err;
2663 reg = 0x1000;
2664 ret = usb_microdia_control_read(dev, reg, reg1000, 5); // URB 13
2665 if(ret < 0) goto err;
2667 reg = 0x1000;
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;
2672 reg = 0x1060;
2673 ret = usb_microdia_control_read(dev, reg, reg1060, 2); // URB 15
2674 if(ret < 0) goto err;
2676 reg = 0x1060;
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;
2681 reg = 0x10c8;
2682 buf[0] = 0x21;
2683 ret = usb_microdia_control_write(dev, reg, buf, 1); // URB 17
2684 if(ret < 0) goto err;
2686 reg = 0x0a;
2687 retI2C = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1, reg,
2688 dev->sensor_flags, buf); // URBs 18-29
2689 if (retI2C < 0)
2691 // 2nd try...
2692 reg = 0x10c8;
2693 buf[0] = 0x21;
2694 ret = usb_microdia_control_write(dev, reg, buf, 1); // URB 30
2695 if(ret < 0) goto err;
2697 reg = 0x0a;
2698 retI2C = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1, reg,
2699 dev->sensor_flags, buf); // URBs 31-35
2701 if(retI2C < 0)
2702 UDIA_ERROR("Read of sensor register 0x0a failed.");
2704 reg = 0x118a;
2705 buf[0] = 0xa6;
2706 ret = usb_microdia_control_write(dev, reg, reg0395, 1); // URB 36
2707 if(ret < 0) goto err;
2708 reg = 0x0395;
2709 ret = usb_microdia_control_write(dev, reg, reg0395, 1); // URB 37
2710 if(ret < 0) goto err;
2712 reg = 0x11b8;
2713 buf[0] = 0x06;
2714 ret = usb_microdia_control_write(dev, reg, reg11b8, 1); // URB 38
2715 if(ret < 0) goto err;
2717 reg = 0x1000;
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;
2722 reg = 0x1060;
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
2728 return ret;
2729 err:
2730 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg, ret);
2731 return ret;
2735 * @brief From init-start-stop-log (made by Víctor M. Hernández Rocamora)
2737 * @param dev
2739 * @returns 0 (ok) or -1 (error)
2741 * @author Comer352l
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)
2749 __u8 buf[1];
2750 int ret = 0;
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
2756 buf[0] = 0x00;
2757 ret += usb_microdia_control_write(dev, 0x10c8, buf, 1); // URB 7
2759 buf[0] = 0x80;
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
2764 buf[0] = 0x1f;
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
2769 buf[0] = 0x0f;
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
2774 buf[0] = 0x1f;
2775 ret += usb_microdia_control_write(dev, 0x1045, buf, 1); // URB 14
2777 if (ret < 10)
2779 UDIA_INFO("One ore more errors occured during initialization !\n");
2780 return -1;
2782 return 0;
2785 /**
2786 * @brief From UsbSnoop-plugin-parsed.log
2788 * @param dev
2790 * @returns 0 (OK) or <0 (Error)
2792 * @author Vincent, Kuzja
2794 int microdia_6288_initialize(struct usb_microdia *dev)
2797 int ret;
2798 __u16 reg;
2799 __u8 buf[2];
2801 reg = 0x130d ;
2802 ret = usb_microdia_control_read(dev, reg, buf, 1);
2803 if(ret < 0) goto err;
2805 reg = 0x1040 ;
2806 ret = usb_microdia_control_read(dev, reg, buf, 1);
2807 if(ret < 0) goto err;
2809 if (ret < 0)
2810 return ret;
2811 else
2812 return 0;
2813 err:
2814 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg, ret);
2815 return ret;
2818 /**
2819 * @brief From UsbSnoop-plugin-parsed.log
2821 * @param dev
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)
2831 int ret = 0;
2832 __u8 buf[2];
2834 UDIA_INFO("Initializing camera...\n");
2836 buf[0] = 0x01;
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
2842 if(buf[0] != 0x12){
2843 UDIA_ERROR("Microdia 6128 is not connected or working !!!\n");
2844 return -ENODEV;
2847 buf[0] = 0x29; buf[1] = 0x70; // Configure GPIO
2848 ret += usb_microdia_control_write(dev, 0x01, buf, 2);
2850 buf[0] = 0x01;
2851 ret += usb_microdia_control_write(dev, 0xf1, buf, 1); // Maybe wakeup
2853 buf[0] = 0x0e;
2854 ret += usb_microdia_control_write(dev, 0x01, buf, 1); // Command to initialize cam
2856 if(ret != 8)
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");
2862 return 0;
2866 int dev_microdia_start_stream(struct usb_microdia *dev)
2868 int ret = -ENODEV;
2869 if(dev && dev->start_stream)
2870 ret = dev->start_stream(dev);
2872 return ret;
2876 * @brief From start.htm
2878 * @param dev
2880 * @returns 0
2882 * @author GWater
2884 * For SN9C201 with MI1310.
2885 * This function has not been tested yet.
2887 int microdia_6242_start_stream(struct usb_microdia *dev)
2889 int i = -1;
2890 __u8 buf[48];
2892 __u8 urb10[24] = {
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};
2897 __u8 urb13[11] = {
2898 0x02, 0x00, 0x02, 0x00, 0x50, 0x78, 0x00, 0x00,
2899 0x07, 0xc0, 0x0a};
2901 __u8 urb14[22] = {
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};
2906 __u8 urb119[17] = {
2907 0x08, 0x38, 0x58, 0x6f, 0x7f, 0x8d, 0x9a, 0xa6,
2908 0xb1, 0xbb, 0xc5, 0xce, 0xd7, 0xdf, 0xe8, 0xef,
2909 0xf7};
2911 __u8 urb120[21] = {
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] = {
2937 {0x0d, 0x00, 0x08},
2938 {0x0d, 0x00, 0x09},
2939 {0x0d, 0x00, 0x08},
2940 {0xf0, 0x00, 0x01},
2941 {0x3a, 0x73, 0x00},
2942 {0x06, 0x30, 0x8c},
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] =
2949 {0xc8, 0x00, 0x03};
2951 __u8 third10c0[4][3] = {
2952 {0x0a, 0x00, 0x01},
2953 {0x06, 0x00, 0x29},
2954 {0x05, 0x00, 0x72},
2955 {0x20, 0x00, 0x00}};
2957 __u8 fourth10c0a[3][3] = {
2958 {0x20, 0x00, 0x00},
2959 {0x09, 0x01, 0x90},
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] = {
2966 {0x0a, 0x00, 0x01},
2967 {0x06, 0x00, 0x29},
2968 {0x05, 0x00, 0x72}};
2970 // interrupt down
2972 buf[0] = 0x00;
2973 usb_microdia_control_write(dev, 0x1066, buf, 1); // URB 1
2975 // interrupt up
2977 // interrupt down
2979 buf[0] = 0x60;
2980 usb_microdia_control_write(dev, 0x1007, buf, 1);
2982 buf[0] = 0x00;
2983 usb_microdia_control_write(dev, 0x1006, buf, 1);
2985 buf[0] = 0x78;
2986 usb_microdia_control_write(dev, 0x1000, buf, 1);
2988 buf[0] = 0xc7;
2989 usb_microdia_control_write(dev, 0x1001, buf, 1);
2991 buf[0] = 0x1c;
2992 usb_microdia_control_write(dev, 0x1002, buf, 1);
2994 buf[0] = 0x01;
2995 usb_microdia_control_write(dev, 0x1061, buf, 1);
2997 buf[0] = 0x80;
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);
3030 buf[0] = 0x30;
3031 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3033 buf[0] = 0x78;
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]);
3040 buf[0] = 0x60;
3041 usb_microdia_control_write(dev, 0x1007, buf, 1);
3043 buf[0] = 0x00;
3044 usb_microdia_control_write(dev, 0x1006, buf, 1);
3046 buf[0] = 0x03;
3047 usb_microdia_control_write(dev, 0x10e0, buf, 1); // URB 50
3049 buf[0] = 0x03;
3050 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3052 buf[0] = 0xc6;
3053 usb_microdia_control_write(dev, 0x1001, buf, 1);
3055 buf[0] = 0xc4;
3056 usb_microdia_control_write(dev, 0x1001, buf, 1);
3058 buf[0] = 0x44;
3059 usb_microdia_control_write(dev, 0x1001, buf, 1);
3061 buf[0] = 0x80;
3062 usb_microdia_control_write(dev, 0x1189, buf, 1);
3064 buf[0] = 0x00;
3065 usb_microdia_control_write(dev, 0x11bc, buf, 1);
3067 buf[0] = 0x00;
3068 usb_microdia_control_write(dev, 0x11bd, buf, 1);
3070 buf[0] = 0x00;
3071 usb_microdia_control_write(dev, 0x11be, buf, 1);
3073 buf[0] = 0x00;
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
3096 buf[0] = 0x8c;
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);
3105 buf[0] = 0x78;
3106 usb_microdia_control_write(dev, 0x1000, buf, 1);
3108 buf[0] = 0x18;
3109 usb_microdia_control_write(dev, 0x1002, buf, 1);
3111 buf[0] = 0x18;
3112 usb_microdia_control_write(dev, 0x1002, buf, 1);
3114 buf[0] = 0x38;
3115 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3117 buf[0] = 0x02;
3118 usb_microdia_control_write(dev, 0x118a, buf, 1);
3120 buf[0] = 0x02;
3121 usb_microdia_control_write(dev, 0x0395, buf, 1);
3123 buf[0] = 0x78;
3124 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 80
3125 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3127 buf[0] = 0xf9;
3128 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3129 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3131 buf[0] = 0xfa;
3132 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3133 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3135 buf[0] = 0x7b;
3136 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3137 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3139 buf[0] = 0x7c;
3140 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3141 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3143 buf[0] = 0x7b;
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]);
3150 buf[0] = 0x06;
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]);
3167 buf[0] = 0x20;
3168 usb_microdia_control_write(dev, 0x118c, buf, 1);
3170 buf[0] = 0x20;
3171 usb_microdia_control_write(dev, 0x118d, buf, 1); // URB 110
3173 buf[0] = 0x20;
3174 usb_microdia_control_write(dev, 0x118e, buf, 1);
3176 buf[0] = 0x20;
3177 usb_microdia_control_write(dev, 0x118f, buf, 1);
3179 buf[0] = 0x0a;
3180 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3182 buf[0] = 0x20;
3183 usb_microdia_control_write(dev, 0x118c, buf, 1);
3185 buf[0] = 0x20;
3186 usb_microdia_control_write(dev, 0x118d, buf, 1);
3188 buf[0] = 0x20;
3189 usb_microdia_control_write(dev, 0x118e, buf, 1);
3191 buf[0] = 0x20;
3192 usb_microdia_control_write(dev, 0x118f, buf, 1);
3194 buf[0] = 0x10;
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);
3202 buf[0] = 0x05;
3203 usb_microdia_control_write(dev, 0x10f7, buf, 1);
3205 buf[0] = 0x60;
3206 usb_microdia_control_write(dev, 0x10f6, buf, 1); // URB 130
3208 usb_microdia_control_write(dev, 0x10e1, urb120, 21);
3210 buf[0] = 0x14;
3211 usb_microdia_control_write(dev, 0x10f8, buf, 1);
3213 buf[0] = 0xff;
3214 usb_microdia_control_write(dev, 0x10fa, buf, 1);
3216 buf[0] = 0x00;
3217 usb_microdia_control_write(dev, 0x10f9, buf, 1);
3219 buf[0] = 0x00;
3220 usb_microdia_control_write(dev, 0x10f9, buf, 1);
3222 buf[0] = 0x0a;
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);
3232 buf[0] = 0x20;
3233 usb_microdia_control_write(dev, 0x118c, buf, 1);
3235 buf[0] = 0x20;
3236 usb_microdia_control_write(dev, 0x118d, buf, 1); // URB 140
3238 buf[0] = 0x20;
3239 usb_microdia_control_write(dev, 0x118e, buf, 1);
3241 buf[0] = 0x20;
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);
3254 buf[0] = 0x07;
3255 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3257 buf[0] = 0x01;
3258 usb_microdia_control_write(dev, 0x1061, buf, 1);
3260 buf[0] = 0x27;
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
3267 buf[0] = 0x07;
3268 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3270 buf[0] = 0x03;
3271 usb_microdia_control_write(dev, 0x1061, buf, 1);
3273 buf[0] = 0x0b;
3274 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3276 buf[0] = 0x8c;
3277 usb_microdia_control_write(dev, 0x1189, buf, 1);
3279 buf[0] = 0x00;
3280 usb_microdia_control_write(dev, 0x11bc, buf, 1);
3282 buf[0] = 0x00;
3283 usb_microdia_control_write(dev, 0x11bd, buf, 1);
3285 buf[0] = 0x00;
3286 usb_microdia_control_write(dev, 0x11be, buf, 1);
3288 buf[0] = 0x00;
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);
3311 buf[0] = 0x8c;
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);
3320 buf[0] = 0x03;
3321 usb_microdia_control_write(dev, 0x1061, buf, 1);
3323 buf[0] = 0x0a;
3324 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3326 buf[0] = 0x00;
3327 usb_microdia_control_write(dev, 0x11b9, buf, 1);
3329 buf[0] = 0x0b;
3330 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3332 buf[0] = 0x01;
3333 usb_microdia_control_write(dev, 0x1061, buf, 1);
3335 buf[0] = 0x78;
3336 usb_microdia_control_write(dev, 0x1000, buf, 1);
3338 buf[0] = 0x18;
3339 usb_microdia_control_write(dev, 0x1002, buf, 1);
3341 buf[0] = 0x18;
3342 usb_microdia_control_write(dev, 0x1002, buf, 1);
3344 buf[0] = 0x7b;
3345 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 180
3347 buf[0] = 0x02;
3348 usb_microdia_control_write(dev, 0x118a, buf, 1);
3350 buf[0] = 0x02;
3351 usb_microdia_control_write(dev, 0x0395, buf, 1);
3353 buf[0] = 0x78;
3354 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3355 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3357 buf[0] = 0xf9;
3358 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3359 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3361 buf[0] = 0xfa;
3362 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3363 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3365 buf[0] = 0x7b;
3366 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3367 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 190
3369 buf[0] = 0x7c;
3370 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3371 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3373 buf[0] = 0x7b;
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]}; */
3384 buf[0] = 0x03;
3385 usb_microdia_control_write(dev, 0x1061, buf, 1);
3387 return 0;
3391 * @brief From startstream.log
3393 * @param dev
3395 * @returns 0
3397 * @author GWater
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)
3404 int i = -1;
3405 __u8 buf[48];
3407 __u8 urb10[24] =
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};
3412 __u8 urb14[22] =
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};
3417 __u8 urb119[17] =
3418 {0x08, 0x2b, 0x59, 0x79, 0x91, 0x9e, 0xa9, 0xb3,
3419 0xbd, 0xc6, 0xce, 0xd6, 0xdd, 0xe4, 0xea, 0xf1,
3420 0xf7};
3422 __u8 urb120[21] =
3423 {0x16, 0x00, 0x2d, 0x00, 0x08, 0x00, 0xdd, 0x0f,
3424 0xbc, 0x0f, 0x68, 0x00, 0x68, 0x00, 0xa9, 0x0f,
3425 0xf0, 0x0f, 0x00, 0x00, 0x00};
3427 __u8 qtable1[64] =
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};
3437 __u8 qtable2[64] =
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] =
3455 {0x12, 0x40};
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] = {
3461 {0x32, 0x24},
3462 {0x03, 0x00}};
3464 __u8 third10c0a[5][2] = {
3465 {0x11, 0x40},
3466 {0x2a, 0x10},
3467 {0x2b, 0xe0},
3468 {0x10, 0x32},
3469 {0x00, 0x00}};
3470 __u8 third10c0b[3] =
3471 {0x01, 0x80, 0x80}; // length 2
3473 __u8 read10c0[4] =
3474 {0x0a, 0x0b, 0x1c, 0x1d}; // these are four addresses
3476 // interrupt down
3478 buf[0] = 0x00;
3479 usb_microdia_control_write(dev, 0x1066, buf, 1); // URB 1
3481 // interrupt up
3483 // interrupt down
3485 buf[0] = 0x78;
3486 usb_microdia_control_write(dev, 0x1000, buf, 1);
3488 buf[0] = 0xc7;
3489 usb_microdia_control_write(dev, 0x1001, buf, 1);
3491 buf[0] = 0x1c;
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);
3497 buf[0] = 0x01;
3498 usb_microdia_control_write(dev, 0x1061, buf, 1);
3500 buf[0] = 0x80;
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);
3534 buf[0] = 0x30;
3535 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3537 buf[0] = 0x78;
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]);
3544 buf[0] = 0x47;
3545 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3547 buf[0] = 0x07;
3548 usb_microdia_control_write(dev, 0x10e0, buf, 1); // URB 50
3550 buf[0] = 0xc6;
3551 usb_microdia_control_write(dev, 0x1001, buf, 1);
3553 buf[0] = 0xc4;
3554 usb_microdia_control_write(dev, 0x1001, buf, 1);
3556 buf[0] = 0x44;
3557 usb_microdia_control_write(dev, 0x1001, buf, 1);
3559 buf[0] = 0x8c;
3560 usb_microdia_control_write(dev, 0x1189, buf, 1);
3562 buf[0] = 0x00;
3563 usb_microdia_control_write(dev, 0x11bc, buf, 1);
3565 buf[0] = 0x00;
3566 usb_microdia_control_write(dev, 0x11bd, buf, 1);
3568 buf[0] = 0x00;
3569 usb_microdia_control_write(dev, 0x11be, buf, 1);
3571 buf[0] = 0x00;
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
3598 buf[0] = 0x8c;
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);
3607 buf[0] = 0x7c;
3608 usb_microdia_control_write(dev, 0x1000, buf, 1);
3610 buf[0] = 0x1c;
3611 usb_microdia_control_write(dev, 0x1002, buf, 1);
3613 buf[0] = 0x1c;
3614 usb_microdia_control_write(dev, 0x1002, buf, 1);
3616 buf[0] = 0x38;
3617 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3619 buf[0] = 0x05;
3620 usb_microdia_control_write(dev, 0x118a, buf, 1);
3622 buf[0] = 0x05;
3623 usb_microdia_control_write(dev, 0x0395, buf, 1);
3625 buf[0] = 0x78;
3626 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 80
3627 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3629 buf[0] = 0xf9;
3630 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3631 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3633 buf[0] = 0x7a;
3634 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3635 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3637 buf[0] = 0x7b;
3638 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3639 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3641 buf[0] = 0x7c;
3642 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3643 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3645 buf[0] = 0xfd;
3646 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 90
3647 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3649 buf[0] = 0xfe;
3650 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3651 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3653 buf[0] = 0x7f;
3654 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3655 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3657 buf[0] = 0x7a;
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]);
3667 buf[0] = 0x20;
3668 usb_microdia_control_write(dev, 0x118c, buf, 1);
3670 buf[0] = 0x20;
3671 usb_microdia_control_write(dev, 0x118d, buf, 1); // URB 110
3673 buf[0] = 0x20;
3674 usb_microdia_control_write(dev, 0x118e, buf, 1);
3676 buf[0] = 0x20;
3677 usb_microdia_control_write(dev, 0x118f, buf, 1);
3679 buf[0] = 0x0a;
3680 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3682 buf[0] = 0x20;
3683 usb_microdia_control_write(dev, 0x118c, buf, 1);
3685 buf[0] = 0x20;
3686 usb_microdia_control_write(dev, 0x118d, buf, 1);
3688 buf[0] = 0x20;
3689 usb_microdia_control_write(dev, 0x118e, buf, 1);
3691 buf[0] = 0x20;
3692 usb_microdia_control_write(dev, 0x118f, buf, 1);
3694 buf[0] = 0x0a;
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);
3703 buf[0] = 0x07;
3704 usb_microdia_control_write(dev, 0x10f7, buf, 1);
3706 buf[0] = 0x60;
3707 usb_microdia_control_write(dev, 0x10f6, buf, 1); // URB 130
3709 usb_microdia_control_write(dev, 0x10e1, urb120, 21);
3711 buf[0] = 0x14;
3712 usb_microdia_control_write(dev, 0x10f8, buf, 1);
3714 buf[0] = 0xff;
3715 usb_microdia_control_write(dev, 0x10fa, buf, 1);
3717 buf[0] = 0x00;
3718 usb_microdia_control_write(dev, 0x10f9, buf, 1);
3720 buf[0] = 0x00;
3721 usb_microdia_control_write(dev, 0x10f9, buf, 1);
3723 buf[0] = 0x0e;
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 */
3730 memset(buf, 0, 48);
3731 usb_microdia_control_write(dev, 0x11c0, buf, 48);
3733 buf[0] = 0x20;
3734 usb_microdia_control_write(dev, 0x118c, buf, 1);
3736 buf[0] = 0x20;
3737 usb_microdia_control_write(dev, 0x118d, buf, 1); // URB 140
3739 buf[0] = 0x20;
3740 usb_microdia_control_write(dev, 0x118e, buf, 1);
3742 buf[0] = 0x20;
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);
3755 buf[0] = 0x07;
3756 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3758 buf[0] = 0x01;
3759 usb_microdia_control_write(dev, 0x1061, buf, 1);
3761 buf[0] = 0x27;
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
3768 buf[0] = 0x07;
3769 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3771 buf[0] = 0x03;
3772 usb_microdia_control_write(dev, 0x1061, buf, 1);
3774 buf[0] = 0x0b;
3775 usb_microdia_control_write(dev, 0x10e0, buf, 1);
3777 buf[0] = 0x8c;
3778 usb_microdia_control_write(dev, 0x1189, buf, 1);
3780 buf[0] = 0x00;
3781 usb_microdia_control_write(dev, 0x11bc, buf, 1);
3783 buf[0] = 0x00;
3784 usb_microdia_control_write(dev, 0x11bd, buf, 1);
3786 buf[0] = 0x00;
3787 usb_microdia_control_write(dev, 0x11be, buf, 1);
3789 buf[0] = 0x00;
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);
3812 buf[0] = 0x8c;
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);
3821 buf[0] = 0x03;
3822 usb_microdia_control_write(dev, 0x1061, buf, 1);
3824 buf[0] = 0x0e;
3825 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3827 buf[0] = 0x00;
3828 usb_microdia_control_write(dev, 0x11b9, buf, 1);
3830 buf[0] = 0x0f;
3831 usb_microdia_control_write(dev, 0x11ba, buf, 1);
3833 buf[0] = 0x01;
3834 usb_microdia_control_write(dev, 0x1061, buf, 1);
3836 buf[0] = 0x7c;
3837 usb_microdia_control_write(dev, 0x1000, buf, 1);
3839 buf[0] = 0x1c;
3840 usb_microdia_control_write(dev, 0x1002, buf, 1);
3842 buf[0] = 0x1c;
3843 usb_microdia_control_write(dev, 0x1002, buf, 1);
3845 buf[0] = 0x7a;
3846 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 180
3848 buf[0] = 0x05;
3849 usb_microdia_control_write(dev, 0x118a, buf, 1);
3851 buf[0] = 0x05;
3852 usb_microdia_control_write(dev, 0x0395, buf, 1);
3854 buf[0] = 0x78;
3855 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3856 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3858 buf[0] = 0xf9;
3859 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3860 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3862 buf[0] = 0x7a;
3863 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3864 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3866 buf[0] = 0x7b;
3867 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3868 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 190
3870 buf[0] = 0x7c;
3871 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3872 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3874 buf[0] = 0x7d;
3875 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3876 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3878 buf[0] = 0xfe;
3879 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3880 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3882 buf[0] = 0x7f;
3883 usb_microdia_control_write(dev, 0x11b8, buf, 1);
3884 usb_microdia_control_read(dev, 0x11b8, buf, 1);
3886 buf[0] = 0x7a;
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);
3897 buf[0] = 0x03;
3898 usb_microdia_control_write(dev, 0x1061, buf, 1);
3900 buf[0] = 0xa0;
3901 usb_microdia_control_write(dev, 0x1007, buf, 1);
3903 buf[0] = 0x80;
3904 usb_microdia_control_write(dev, 0x1006, buf, 1);
3906 return 0;
3909 int microdia_624f_start_stream(struct usb_microdia *dev)
3911 int ret, i;
3912 __u8 last_11b8[1];
3913 __u8 eeprom_slave_id = 0x50;
3914 __u8 eeprom_flags = SN9C20X_I2C_2WIRE;
3915 __u16 command;
3916 __u8 buf[64];
3917 __u8 unknown1[9] = { dev->sensor_flags, dev->sensor_slave_address,
3918 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
3920 buf[0] = 0x20;
3921 command = 0x1007;
3922 ret = usb_microdia_control_write(dev, command, buf, 1);
3923 if(ret < 0) goto err;
3925 buf[0] = 0x00;
3926 command = 0x1006;
3927 ret = usb_microdia_control_write(dev, command, buf, 1);
3928 if(ret < 0) goto err;
3930 buf[0] = 0x78;
3931 command = 0x1000;
3932 ret = usb_microdia_control_write(dev, command, buf, 1);
3933 if(ret < 0) goto err;
3935 buf[0] = 0xc7;
3936 command = 0x1001;
3937 ret = usb_microdia_control_write(dev, command, buf, 1);
3938 if(ret < 0) goto err;
3940 buf[0] = 0x1c;
3941 command = 0x1002;
3942 ret = usb_microdia_control_write(dev, command, buf, 1);
3943 if(ret < 0) goto err;
3945 buf[0] = 0x01;
3946 command = 0x1061;
3947 ret = usb_microdia_control_write(dev, command, buf, 1);
3948 if(ret < 0) goto err;
3950 buf[0] = 0x80;
3951 command = 0x1020;
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;
3957 command = 0x1067;
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 */
3964 command = 0x10c0;
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;
3974 command = 0x10e0;
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;
3979 command = 0x10f8;
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;
3985 command = 0x10fb;
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;
3990 command = 0x1188;
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;
4000 command = 0x118b;
4001 ret = usb_microdia_control_write(dev, command, buf, 22);
4002 if(ret < 0) goto err;
4004 buf[0] = 0x00; buf[1] = 0x00;
4005 command = 0x11a1;
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;
4011 buf[8] = 0x00;
4012 command = 0x11b7;
4013 ret = usb_microdia_control_write(dev, command, buf, 9);
4014 if(ret < 0) goto err;
4016 buf[0] = 0x30;
4017 command = 0x11b8;
4018 ret = usb_microdia_control_write(dev, command, buf, 1);
4019 if(ret < 0) goto err;
4021 buf[0] = 0x78;
4022 command = 0x1000;
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
4045 memset(buf, 0, 4);
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 */
4051 buf[0] = 0;
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;
4078 buf[1] = 0x00;
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;
4152 buf[0] = 0x00;
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;
4163 buf[0] = 0x0a;
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;
4174 buf[0] = 0xdf;
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;
4184 buf[0] = 0x04;
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;
4190 buf[0] = 0x80;
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;
4210 buf[0] = 0x00;
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 */
4217 command = 0x10c1;
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]);
4222 command = 0x10c1;
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);
4229 if (ret < 0)
4231 UDIA_INFO("No EEPROM found\n");
4233 else
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]);
4240 command = 0x10c1;
4241 buf[0] = dev->sensor_slave_address;
4242 ret = usb_microdia_control_write(dev, command, buf, 1);
4243 if(ret < 0) goto err;
4245 command = 0x10e0;
4246 buf[0] = 0x47;
4247 ret = usb_microdia_control_write(dev, command, buf, 1);
4248 if(ret < 0) goto err;
4250 command = 0x10e0;
4251 buf[0] = 0x07;
4252 ret = usb_microdia_control_write(dev, command, buf, 1);
4253 if(ret < 0) goto err;
4255 command = 0x1001;
4256 buf[0] = 0xc6;
4257 ret = usb_microdia_control_write(dev, command, buf, 1);
4258 if(ret < 0) goto err;
4260 command = 0x1001;
4261 buf[0] = 0xc4;
4262 ret = usb_microdia_control_write(dev, command, buf, 1);
4263 if(ret < 0) goto err;
4265 command = 0x1001;
4266 buf[0] = 0x44;
4267 ret = usb_microdia_control_write(dev, command, buf, 1);
4268 if(ret < 0) goto err;
4270 command = 0x1189;
4271 buf[0] = 0x8c;
4272 ret = usb_microdia_control_write(dev, command, buf, 1);
4273 if(ret < 0) goto err;
4275 command = 0x11bc;
4276 buf[0] = 0x40;
4277 ret = usb_microdia_control_write(dev, command, buf, 1);
4278 if (ret < 0) goto err;
4280 command = 0x11bd;
4281 buf[0] = 0x01;
4282 ret = usb_microdia_control_write(dev, command, buf, 1);
4283 if (ret < 0) goto err;
4285 command = 0x11be;
4286 buf[0] = 0xf0;
4287 ret = usb_microdia_control_write(dev, command, buf, 1);
4288 if (ret < 0) goto err;
4290 command = 0x11bf;
4291 buf[0] = 0x00;
4292 ret = usb_microdia_control_write(dev, command, buf, 1);
4293 if (ret < 0) goto err;
4295 buf[0] = 0x45;
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;
4300 buf[0] = 0x36;
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;
4314 buf[0] = 0x84;
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;
4319 command = 0x1180;
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;
4325 command = 0x10fb;
4326 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0;
4327 buf[4] = 0x00;
4328 ret = usb_microdia_control_write(dev, command, buf, 5);
4329 if(ret < 0) goto err;
4331 command = 0x1189;
4332 buf[0] = 0x8c;
4333 ret = usb_microdia_control_write(dev, command, buf, 1);
4334 if(ret < 0) goto err;
4336 command = 0x11a1;
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;
4341 command = 0x11ab;
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;
4346 command = 0x1000;
4347 buf[0] = 0x78;
4348 ret = usb_microdia_control_write(dev, command, buf, 1);
4349 if(ret < 0) goto err;
4351 command = 0x1002;
4352 buf[0] = 0x18;
4353 ret = usb_microdia_control_write(dev, command, buf, 1);
4354 if(ret < 0) goto err;
4356 command = 0x1002;
4357 buf[0] = 0x18;
4358 ret = usb_microdia_control_write(dev, command, buf, 1);
4359 if(ret < 0) goto err;
4361 /* urb 297 */
4362 command = 0x11b8;
4363 buf[0] = 0x38;
4364 ret = usb_microdia_control_write(dev, command, buf, 1);
4365 if(ret < 0) goto err;
4367 command = 0x118a;
4368 buf[0] = 0x04;
4369 ret = usb_microdia_control_write(dev, command, buf, 1);
4370 if(ret < 0) goto err;
4372 command = 0x0395;
4373 buf[0] = 0x04;
4374 ret = usb_microdia_control_write(dev, command, buf, 1);
4375 if(ret < 0) goto err;
4377 command = 0x11b8;
4378 buf[0] = 0x78;
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;
4383 if (buf[0] == 0x38)
4384 buf[0] = 0x79;
4385 else if (buf[0] == 0xb8)
4386 buf[0] = 0xf9;
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;
4391 if (buf[0] == 0x39)
4392 buf[0] = 0x7a;
4393 else if (buf[0] == 0xb9)
4394 buf[0] = 0xfa;
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;
4399 if (buf[0] == 0x3a)
4400 buf[0] = 0x7b;
4401 else if (buf[0] == 0xba)
4402 buf[0] = 0xfb;
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;
4407 if (buf[0] == 0x3b)
4408 buf[0] = 0x7c;
4409 else if (buf[0] == 0xbb)
4410 buf[0] = 0xfc;
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;
4421 buf[0] = 0x80;
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;
4426 /* urb 331 */
4427 buf[0] = 0x00;
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;
4432 buf[0] = 0x00;
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;
4437 buf[0] = 0x00;
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;
4442 /* urb 347 */
4443 buf[0] = 0x00;
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;
4448 buf[0] = 0x04;
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 */
4454 buf[0] = 0x04;
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;
4459 /* urb 365 */
4460 command = 0x1182;
4461 buf[0] = 0x07;
4462 ret = usb_microdia_control_write(dev, command, buf, 1);
4463 if(ret < 0) goto err;
4465 buf[0] = 0x7c;
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;
4470 buf[0] = 0x03;
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;
4475 /* urb 379 */
4476 buf[0] = 0x00;
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;
4481 buf[0] = 0x00;
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;
4486 /* urb 391 */
4487 buf[0] = 0x00;
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;
4492 /* urb 397 */
4493 buf[0] = 0x00;
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;
4498 /* urb 403 */
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;
4503 /* urb 409 */
4504 buf[0] = 0x78;
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)
4510 command = 0x118c;
4511 buf[0] = 0x20;
4512 ret = usb_microdia_control_write(dev, command, buf, 1);
4513 if(ret < 0) goto err;
4515 command = 0x118d;
4516 buf[0] = 0x20;
4517 ret = usb_microdia_control_write(dev, command, buf, 1);
4518 if(ret < 0) goto err;
4520 command = 0x118e;
4521 buf[0] = 0x20;
4522 ret = usb_microdia_control_write(dev, command, buf, 1);
4523 if(ret < 0) goto err;
4525 command = 0x118f;
4526 buf[0] = 0x20;
4527 ret = usb_microdia_control_write(dev, command, buf, 1);
4528 if(ret < 0) goto err;
4530 /* urb 423 */
4531 command = 0x11ba;
4532 buf[0] = 0x0a;
4533 ret = usb_microdia_control_write(dev, command, buf, 1);
4534 if(ret < 0) goto err;
4536 command = 0x118c;
4537 buf[0] = 0x20;
4538 ret = usb_microdia_control_write(dev, command, buf, 1);
4539 if(ret < 0) goto err;
4541 /* urb 427 */
4542 buf[0] = 0x20;
4543 command = 0x118d;
4544 ret = usb_microdia_control_write(dev, command, buf, 1);
4545 if(ret < 0) goto err;
4547 buf[0] = 0x20;
4548 command = 0x118e;
4549 ret = usb_microdia_control_write(dev, command, buf, 1);
4550 if(ret < 0) goto err;
4552 buf[0] = 0x20;
4553 command = 0x118f;
4554 ret = usb_microdia_control_write(dev, command, buf, 1);
4555 if(ret < 0) goto err;
4557 if (dev->webcam_model == MICRODIA_627F)
4558 buf[0] = 0x0e;
4559 else // 624f
4560 buf[0] = 0x00;
4561 command = 0x118b;
4562 ret = usb_microdia_control_write(dev, command, buf, 1);
4563 if(ret < 0) goto err;
4565 /* urb 435 */
4566 /* Gamma control? */
4567 command = 0x1190;
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;
4574 buf[16] = 0xf7;
4576 else // 624f
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;
4582 buf[16] = 0xf5;*/
4584 /* Old one */
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;
4589 buf[16] = 0xff;
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;
4601 buf[20] = 0x00;
4603 else // 624f
4604 memset(buf, 0, 21);
4605 command = 0x10e1;
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;
4616 buf[20] = 0x00;
4618 else // 624f
4620 /* urb 453 */
4621 buf[0] = 0x15; buf[2] = 0x29;
4623 ret = usb_microdia_control_write(dev, command, buf, 21);
4624 if (ret < 0) goto err;
4626 command = 0x10f7;
4627 buf[0] = 0x05;
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)
4633 buf[0] = 0x80;
4634 else // 624f
4635 buf[0] = 0x00; // 624f-log: 0xc0 !
4636 ret = usb_microdia_control_write(dev, command, buf, 1);
4637 if(ret < 0) goto err;
4639 /* urb 459 */
4640 command = 0x10e1;
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;
4648 buf[20] = 0x00;
4650 else // 624f
4652 memset(buf, 0, 21);
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;
4658 command = 0x10f8;
4659 buf[0] = 0x14;
4660 ret = usb_microdia_control_write(dev, command, buf, 1);
4661 if(ret < 0) goto err;
4663 /* urb 463 */
4664 command = 0x10fa;
4665 buf[0] = 0xff;
4666 ret = usb_microdia_control_write(dev, command, buf, 1);
4667 if(ret < 0) goto err;
4669 command = 0x10f9;
4670 buf[0] = 0x00;
4671 ret = usb_microdia_control_write(dev, command, buf, 1);
4672 if(ret < 0) goto err;
4674 /* urb 467 */
4675 command = 0x10f9;
4676 buf[0] = 0x00;
4677 ret = usb_microdia_control_write(dev, command, buf, 1);
4678 if(ret < 0) goto err;
4680 command = 0x11ba;
4681 buf[0] = 0x0e;
4682 ret = usb_microdia_control_write(dev, command, buf, 1);
4683 if(ret < 0) goto err;
4685 //memset(buf, 0, 4);
4686 command = 0x11bc;
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;
4691 command = 0x11c0;
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;
4707 else // 624f
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);
4724 command = 0x118c;
4725 buf[0] = 0x20;
4726 ret = usb_microdia_control_write(dev, command, buf, 1);
4727 if(ret < 0) goto err;
4729 /* urb 477 */
4730 command = 0x118d;
4731 buf[0] = 0x20;
4732 ret = usb_microdia_control_write(dev, command, buf, 1);
4733 if(ret < 0) goto err;
4735 command = 0x118e;
4736 buf[0] = 0x20;
4737 ret = usb_microdia_control_write(dev, command, buf, 1);
4738 if(ret < 0) goto err;
4740 command = 0x118f;
4741 buf[0] = 0x20;
4742 ret = usb_microdia_control_write(dev, command, buf, 1);
4743 if(ret < 0) goto err;
4745 /* urb 483 */
4746 command = 0x11a5;
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;
4752 /* urb 485 */
4753 command = 0x11af;
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;
4758 command = 0x11b3;
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;
4763 /* urb 489 */
4764 command = 0x10e0;
4765 buf[0] = 0x07;
4766 ret = usb_microdia_control_write(dev, command, buf, 1);
4767 if(ret < 0) goto err;
4769 command = 0x1061;
4770 buf[0] = 0x01;
4771 ret = usb_microdia_control_write(dev, command, buf, 1);
4772 if(ret < 0) goto err;
4774 command = 0x10e0;
4775 buf[0] = 0x27;
4776 ret = usb_microdia_control_write(dev, command, buf, 1);
4777 if(ret < 0) goto err;
4780 //////////////////////////////////////////////////////////////////////
4781 /* urb 495 */
4782 command = 0x1100;
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;
4802 command = 0x1140;
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;
4822 /* urb 499 */
4823 command = 0x10e0;
4824 buf[0] = 0x07;
4825 ret = usb_microdia_control_write(dev, command, buf, 1);
4826 if(ret < 0) goto err;
4828 command = 0x1061;
4829 buf[0] = 0x03;
4830 ret = usb_microdia_control_write(dev, command, buf, 1);
4831 if(ret < 0) goto err;
4833 /* urb 503 */
4834 command = 0x10e0;
4835 buf[0] = 0x0b;
4836 ret = usb_microdia_control_write(dev, command, buf, 1);
4837 if(ret < 0) goto err;
4839 command = 0x1189;
4840 buf[0] = 0x8c;
4841 ret = usb_microdia_control_write(dev, command, buf, 1);
4842 if(ret < 0) goto err;
4844 buf[0] = 0x40;
4845 command = 0x11bc;
4846 ret = usb_microdia_control_write(dev, command, buf, 1);
4847 if(ret < 0) goto err;
4849 buf[0] = 0x01;
4850 command = 0x11bd;
4851 ret = usb_microdia_control_write(dev, command, buf, 1);
4852 if(ret < 0) goto err;
4854 buf[0] = 0xf0;
4855 command = 0x11be;
4856 ret = usb_microdia_control_write(dev, command, buf, 1);
4857 if(ret < 0) goto err;
4859 buf[0] = 0x00;
4860 command = 0x11bf;
4861 ret = usb_microdia_control_write(dev, command, buf, 1);
4862 if(ret < 0) goto err;
4864 /* urb 515 */
4865 command = 0x1180;
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;
4871 command = 0x10fb;
4872 buf[0] = 0x00; buf[1] = 0xa0; buf[2] = 0x00; buf[3] = 0xf0;
4873 buf[4] = 0x00;
4874 ret = usb_microdia_control_write(dev, command, buf, 5);
4875 if(ret < 0) goto err;
4877 command = 0x1189;
4878 buf[0] = 0x8c;
4879 ret = usb_microdia_control_write(dev, command, buf, 1);
4880 if(ret < 0) goto err;
4882 command = 0x11a1;
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;
4887 /* 523 */
4888 command = 0x11ab;
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;
4893 command = 0x1061;
4894 buf[0] = 0x03;
4895 ret = usb_microdia_control_write(dev, command, buf, 1);
4896 if(ret < 0) goto err;
4898 command = 0x11ba;
4899 buf[0] = 0x0e;
4900 ret = usb_microdia_control_write(dev, command, buf, 1);
4901 if(ret < 0) goto err;
4903 command = 0x11b9;
4904 buf[0] = 0x00;
4905 ret = usb_microdia_control_write(dev, command, buf, 1);
4906 if(ret < 0) goto err;
4908 command = 0x11ba;
4909 buf[0] = 0x0f;
4910 ret = usb_microdia_control_write(dev, command, buf, 1);
4911 if(ret < 0) goto err;
4913 command = 0x1061;
4914 buf[0] = 0x01;
4915 ret = usb_microdia_control_write(dev, command, buf, 1);
4916 if(ret < 0) goto err;
4918 command = 0x1000;
4919 buf[0] = 0x78;
4920 ret = usb_microdia_control_write(dev, command, buf, 1);
4921 if(ret < 0) goto err;
4923 command = 0x1002;
4924 buf[0] = 0x18;
4925 ret = usb_microdia_control_write(dev, command, buf, 1);
4926 if(ret < 0) goto err;
4928 /* urb 539 */
4929 command = 0x1002;
4930 buf[0] = 0x18;
4931 ret = usb_microdia_control_write(dev, command, buf, 1);
4932 if(ret < 0) goto err;
4934 command = 0x11b8;
4935 buf[0] = 0x7a;
4936 ret = usb_microdia_control_write(dev, command, buf, 1);
4937 if(ret < 0) goto err;
4939 command = 0x118a;
4940 buf[0] = 0x04;
4941 ret = usb_microdia_control_write(dev, command, buf, 1);
4942 if(ret < 0) goto err;
4944 /* urb 545 */
4945 command = 0x0395;
4946 buf[0] = 0x04;
4947 ret = usb_microdia_control_write(dev, command, buf, 1);
4948 if(ret < 0) goto err;
4950 command = 0x11b8;
4951 if (last_11b8[0] == 0x3c)
4952 buf[0] = 0x78;
4953 else if (last_11b8[0] == 0xbc)
4954 buf[0] = 0xf8;
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;
4959 if (buf[0] == 0x38)
4960 buf[0] = 0x79;
4961 else if (buf[0] == 0xb8)
4962 buf[0] = 0xf9;
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;
4967 if (buf[0] == 0x39)
4968 buf[0] = 0x7a;
4969 else if (buf[0] == 0xb9)
4970 buf[0] = 0xfa;
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;
4975 if (buf[0] == 0x3a)
4976 buf[0] = 0x7b;
4977 else if (buf[0] == 0xba)
4978 buf[0] = 0xfb;
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;
4983 if (buf[0] == 0x3b)
4984 buf[0] = 0x7c;
4985 else if (buf[0] == 0xbb)
4986 buf[0] = 0xfc;
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
4994 else // 624f
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;
4999 buf[0] = 0x80;
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;
5004 buf[0] = 0x00;
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;
5009 /* urb 581 */
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;
5014 /* urb 587 */
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;
5019 /* urb 593 */
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]);
5030 /* urb 609 */
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]);
5037 /* urb 619 */
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]);
5044 /* urb 629 */
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]);
5051 command = 0x1061;
5052 buf[0] = 0x03;
5053 ret = usb_microdia_control_write(dev, command, buf, 1);
5054 if(ret < 0) goto err;
5055 //////////////////////////////////////////////////////////////////////////////////
5056 //STREAM STARTED!
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
5065 command = 0x10f6;
5066 buf[0] = 0x80;
5067 ret = usb_microdia_control_write(dev, command, buf, 1);
5068 if(ret < 0) goto err;
5070 command = 0x10e1;
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;
5076 buf[20] = 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);
5084 buf[0] = 0x0f;
5085 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1, 0x00,
5086 dev->sensor_flags, buf);
5088 // urb 679
5089 command = 0x10e1;
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;
5095 buf[20] = 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);
5109 // urb 743
5110 command = 0x10f6;
5111 buf[0] = 0x74;
5112 ret = usb_microdia_control_write(dev, command, buf, 1);
5114 // urb 745
5115 command = 0x10e1;
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;
5121 buf[20] = 0x00;
5122 ret = usb_microdia_control_write(dev, command, buf, 21);
5123 if(ret < 0) goto err;
5124 return ret;
5126 buf[0] = 0xe8;
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
5131 return 0;
5133 err:
5134 UDIA_ERROR("start stream: command %x failed (%d)!\n", command, ret);
5135 return ret;
5138 int microdia_6260_start_stream(struct usb_microdia *dev)
5140 int ret;
5141 __u8 buf[32];
5143 ret = usb_microdia_control_read(dev, 0x1045, buf, 1);
5144 buf[0] = 0x1f;
5145 ret = usb_microdia_control_write(dev, 0x1045, buf, 1);
5146 buf[0] = 0x00;
5147 ret = usb_microdia_control_write(dev, 0x1066, buf, 1);
5148 buf[0] = 0x20;
5149 ret = usb_microdia_control_write(dev, 0x1007, buf, 1);
5150 buf[0] = 0x00;
5151 ret = usb_microdia_control_write(dev, 0x1006, buf, 1);
5152 buf[0] = 0x78;
5153 ret = usb_microdia_control_write(dev, 0x1000, buf, 1);
5154 buf[0] = 0xc7;
5155 ret = usb_microdia_control_write(dev, 0x1001, buf, 1);
5156 buf[0] = 0x18;
5157 ret = usb_microdia_control_write(dev, 0x1002, buf, 1);
5158 buf[0] = 0x01;
5159 ret = usb_microdia_control_write(dev, 0x1061, buf, 1);
5160 buf[0] = 0x80;
5161 ret = usb_microdia_control_write(dev, 0x1020, buf, 1);
5162 buf[0] = 0x40;
5163 buf[1] = 0x30;
5164 buf[2] = 0x20;
5165 buf[3] = 0x10;
5166 buf[4] = 0x08;
5167 ret = usb_microdia_control_write(dev, 0x1067, buf, 5);
5168 buf[0] = 0x80;
5169 buf[1] = 0x21;
5170 buf[2] = 0x00;
5171 buf[3] = 0x00;
5172 buf[4] = 0x00;
5173 buf[5] = 0x00;
5174 buf[6] = 0x00;
5175 buf[7] = 0x00;
5176 buf[8] = 0x03;
5177 ret = usb_microdia_control_write(dev, 0x10c0, buf, 9);
5178 buf[0] = 0x45;
5179 buf[1] = 0x18;
5180 buf[2] = 0x00;
5181 buf[3] = 0x30;
5182 buf[4] = 0x00;
5183 buf[5] = 0x09;
5184 buf[6] = 0x00;
5185 buf[7] = 0xed;
5186 buf[8] = 0x0f;
5187 buf[9] = 0xda;
5188 buf[10] = 0x0f;
5189 buf[11] = 0x3a;
5190 buf[12] = 0x00;
5191 buf[13] = 0x3a;
5192 buf[14] = 0x00;
5193 buf[15] = 0xd0;
5194 buf[16] = 0x0f;
5195 buf[17] = 0xf7;
5196 buf[18] = 0x0f;
5197 buf[19] = 0x00;
5198 buf[20] = 0x00;
5199 buf[21] = 0x00;
5200 buf[22] = 0x60;
5201 buf[23] = 0x0a;
5202 ret = usb_microdia_control_write(dev, 0x10e0, buf, 24);
5203 buf[0] = 0x00;
5204 buf[1] = 0x00;
5205 buf[2] = 0x00;
5206 ret = usb_microdia_control_write(dev, 0x10f8, buf, 3);
5207 buf[0] = 0x00;
5208 buf[1] = 0xa0;
5209 buf[2] = 0x00;
5210 buf[3] = 0xf0;
5211 buf[4] = 0x00;
5212 ret = usb_microdia_control_write(dev, 0x10fb, buf, 5);
5213 buf[0] = 0x8a;
5214 buf[1] = 0x8c;
5215 buf[2] = 0x08;
5216 ret = usb_microdia_control_write(dev, 0x1188, buf, 3);
5217 buf[0] = 0x00;
5218 buf[1] = 0x20;
5219 buf[2] = 0x20;
5220 buf[3] = 0x20;
5221 buf[4] = 0x20;
5222 buf[5] = 0x00;
5223 buf[6] = 0x24;
5224 buf[7] = 0x3b;
5225 buf[8] = 0x4f;
5226 buf[9] = 0x61;
5227 buf[10] = 0x71;
5228 buf[11] = 0x80;
5229 buf[12] = 0x8f;
5230 buf[13] = 0x9d;
5231 buf[14] = 0xab;
5232 buf[15] = 0xb8;
5233 buf[16] = 0xc4;
5234 buf[17] = 0xd1;
5235 buf[18] = 0xdd;
5236 buf[19] = 0xe9;
5237 buf[20] = 0xf4;
5238 buf[21] = 0xff;
5239 ret = usb_microdia_control_write(dev, 0x118b, buf, 22);
5240 buf[0] = 0x00;
5241 buf[1] = 0x00;
5242 ret = usb_microdia_control_write(dev, 0x11a1, buf, 2);
5243 buf[0] = 0x60;
5244 buf[1] = 0x28;
5245 buf[2] = 0x00;
5246 buf[3] = 0x00;
5247 buf[4] = 0x00;
5248 buf[5] = 0x40;
5249 buf[6] = 0x01;
5250 buf[7] = 0xf0;
5251 buf[8] = 0x00;
5252 ret = usb_microdia_control_write(dev, 0x11b7, buf, 9);
5253 buf[0] = 0x78;
5254 ret = usb_microdia_control_write(dev, 0x1000, buf, 1);
5255 buf[0] = 0x38;
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);
5262 buf[0] = 0x50;
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);
5267 if (ret < 0)
5269 UDIA_INFO("No EEPROM found\n");
5271 else
5273 UDIA_INFO("Read from EEPROM successful\n");
5276 buf[0] = 0x21;
5277 ret = usb_microdia_control_write(dev, 0x10c1, buf, 1);
5278 buf[0] = 0x45;
5279 ret = usb_microdia_control_write(dev, 0x10e0, buf, 1);
5280 buf[0] = 0xc6;
5281 ret = usb_microdia_control_write(dev, 0x1001, buf, 1);
5282 buf[0] = 0xc4;
5283 ret = usb_microdia_control_write(dev, 0x1001, buf, 1);
5284 buf[0] = 0x00;
5285 buf[1] = 0x00;
5286 buf[2] = 0x01;
5287 buf[3] = 0x00;
5288 buf[4] = 0x50;
5289 buf[5] = 0x3c;
5290 ret = usb_microdia_control_write(dev, 0x1180, buf, 6);
5291 buf[0] = 0x00;
5292 buf[1] = 0x40;
5293 buf[2] = 0x00;
5294 buf[3] = 0xf0;
5295 buf[4] = 0x01;
5296 ret = usb_microdia_control_write(dev, 0x10fb, buf, 5);
5297 buf[0] = 0x80;
5298 ret = usb_microdia_control_write(dev, 0x1189, buf, 1);
5299 buf[0] = 0x00;
5300 buf[1] = 0x00;
5301 buf[2] = 0xd5;
5302 buf[3] = 0x50;
5303 ret = usb_microdia_control_write(dev, 0x11a1, buf, 4);
5304 buf[0] = 0x00;
5305 buf[1] = 0x00;
5306 buf[2] = 0xa0;
5307 buf[3] = 0x3c;
5308 ret = usb_microdia_control_write(dev, 0x11ab, buf, 4);
5309 buf[0] = 0x78;
5310 ret = usb_microdia_control_write(dev, 0x1000, buf, 1);
5311 buf[0] = 0x10;
5312 ret = usb_microdia_control_write(dev, 0x1002, buf, 1);
5313 buf[0] = 0x00;
5314 ret = usb_microdia_control_write(dev, 0x1002, buf, 1);
5315 buf[0] = 0x38;
5316 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5317 buf[0] = 0x04;
5318 ret = usb_microdia_control_write(dev, 0x118a, buf, 1);
5319 buf[0] = 0x04;
5320 ret = usb_microdia_control_write(dev, 0x0395, buf, 1);
5321 buf[0] = 0x78;
5322 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5323 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5324 buf[0] = 0xf9;
5325 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5326 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5327 buf[0] = 0xfa;
5328 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5329 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5330 buf[0] = 0x7b;
5331 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5332 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5333 buf[0] = 0x7c;
5334 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5335 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5336 buf[0] = 0x7d;
5337 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5338 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5339 buf[0] = 0x7b;
5340 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5342 * OV7670 Intialise Part 2
5344 buf[0] = 0x00;
5345 buf[1] = 0x00;
5346 buf[2] = 0x01;
5347 buf[3] = 0x00;
5348 buf[4] = 0x50;
5349 buf[5] = 0x3c;
5350 ret = usb_microdia_control_write(dev, 0x1180, buf, 6);
5351 buf[0] = 0x00;
5352 buf[1] = 0x40;
5353 buf[2] = 0x00;
5354 buf[3] = 0xf0;
5355 buf[4] = 0x01;
5356 ret = usb_microdia_control_write(dev, 0x10fb, buf, 5);
5357 buf[0] = 0x80;
5358 ret = usb_microdia_control_write(dev, 0x1189, buf, 1);
5359 buf[0] = 0x00;
5360 buf[1] = 0x00;
5361 buf[2] = 0xd5;
5362 buf[3] = 0x50;
5363 ret = usb_microdia_control_write(dev, 0x11a1, buf, 4);
5364 buf[0] = 0x00;
5365 buf[1] = 0x00;
5366 buf[2] = 0xa0;
5367 buf[3] = 0x3c;
5368 ret = usb_microdia_control_write(dev, 0x11ab, buf, 4);
5369 buf[0] = 0x03;
5370 ret = usb_microdia_control_write(dev, 0x1061, buf, 1);
5371 buf[0] = 0x01;
5372 ret = usb_microdia_control_write(dev, 0x1061, buf, 1);
5373 buf[0] = 0x78;
5374 ret = usb_microdia_control_write(dev, 0x1000, buf, 1);
5375 buf[0] = 0x00;
5376 ret = usb_microdia_control_write(dev, 0x1002, buf, 1);
5377 buf[0] = 0x00;
5378 ret = usb_microdia_control_write(dev, 0x1002, buf, 1);
5379 buf[0] = 0x7b;
5380 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5381 buf[0] = 0x04;
5382 ret = usb_microdia_control_write(dev, 0x118a, buf, 1);
5383 buf[0] = 0x04;
5384 ret = usb_microdia_control_write(dev, 0x0395, buf, 1);
5385 buf[0] = 0x78;
5386 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5387 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5388 buf[0] = 0x79;
5389 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5390 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5391 buf[0] = 0x7a;
5392 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5393 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5394 buf[0] = 0x7b;
5395 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5396 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5397 buf[0] = 0x7c;
5398 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5399 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5400 buf[0] = 0x7d;
5401 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5402 ret = usb_microdia_control_read(dev, 0x11b8, buf, 1);
5403 buf[0] = 0xfa;
5404 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
5406 * OV7670 Initialisation Part 3 Goes Here
5408 buf[0] = 0x03;
5409 ret = usb_microdia_control_write(dev, 0x1061, buf, 1);
5410 buf[0] = 0x00;
5411 buf[1] = 0x00;
5412 buf[2] = 0x00;
5413 buf[3] = 0x00;
5414 buf[4] = 0x00;
5415 buf[5] = 0x00;
5416 buf[6] = 0x00;
5417 buf[7] = 0x00;
5418 buf[8] = 0x00;
5419 buf[9] = 0x00;
5420 buf[10] = 0x00;
5421 buf[11] = 0x00;
5422 buf[12] = 0x00;
5423 buf[13] = 0x00;
5424 buf[14] = 0x00;
5425 buf[15] = 0x00;
5426 buf[16] = 0x00;
5427 buf[17] = 0x00;
5428 buf[18] = 0x0a;
5429 buf[19] = 0x00;
5430 buf[20] = 0x00;
5431 ret = usb_microdia_control_write(dev, 0x10e1, buf, 21);
5432 buf[0] = 0x00;
5433 buf[1] = 0x00;
5434 buf[2] = 0x00;
5435 buf[3] = 0x00;
5436 buf[4] = 0x00;
5437 buf[5] = 0x00;
5438 buf[6] = 0x00;
5439 buf[7] = 0x00;
5440 buf[8] = 0x00;
5441 buf[9] = 0x00;
5442 buf[10] = 0x00;
5443 buf[11] = 0x00;
5444 buf[12] = 0x00;
5445 buf[13] = 0x00;
5446 buf[14] = 0x00;
5447 buf[15] = 0x00;
5448 buf[16] = 0x00;
5449 buf[17] = 0x00;
5450 buf[18] = 0x0a;
5451 buf[19] = 0x00;
5452 buf[20] = 0x00;
5453 ret = usb_microdia_control_write(dev, 0x10e1, buf, 21);
5454 buf[0] = 0x00;
5455 buf[1] = 0x00;
5456 buf[2] = 0x00;
5457 buf[3] = 0x00;
5458 buf[4] = 0x00;
5459 buf[5] = 0x00;
5460 buf[6] = 0x00;
5461 buf[7] = 0x00;
5462 buf[8] = 0x00;
5463 buf[9] = 0x00;
5464 buf[10] = 0x00;
5465 buf[11] = 0x00;
5466 buf[12] = 0x00;
5467 buf[13] = 0x00;
5468 buf[14] = 0x00;
5469 buf[15] = 0x00;
5470 buf[16] = 0x00;
5471 buf[17] = 0x00;
5472 buf[18] = 0x0a;
5473 buf[19] = 0x00;
5474 buf[20] = 0x00;
5475 ret = usb_microdia_control_write(dev, 0x10e1, buf, 21);
5476 buf[0] = 0x00;
5477 buf[1] = 0x00;
5478 buf[2] = 0x00;
5479 buf[3] = 0x00;
5480 buf[4] = 0x00;
5481 buf[5] = 0x00;
5482 buf[6] = 0x00;
5483 buf[7] = 0x00;
5484 buf[8] = 0x00;
5485 buf[9] = 0x00;
5486 buf[10] = 0x00;
5487 buf[11] = 0x00;
5488 buf[12] = 0x00;
5489 buf[13] = 0x00;
5490 buf[14] = 0x00;
5491 buf[15] = 0x00;
5492 buf[16] = 0x00;
5493 buf[17] = 0x00;
5494 buf[18] = 0x0a;
5495 buf[19] = 0x00;
5496 buf[20] = 0x00;
5497 ret = usb_microdia_control_write(dev, 0x10e1, buf, 21);
5499 return ret;
5503 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
5505 * @param dev
5507 * @returns 0 (ok) or -1 (error)
5509 * @author Comer352l
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)
5518 __u8 buf[64];
5519 __u8 last_11b8[1];
5520 int k;
5521 int retI2C;
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");
5527 return -1;
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)
5534 buf[0] = 0x00;
5535 usb_microdia_control_write(dev, 0x1066, buf, 1); // URB 1956
5537 // <= INTERRUPT COMING BACK (URB 1955)
5538 // => INTERRUPT GOING DOWN (URB 1957)
5540 buf[0] = 0x78;
5541 usb_microdia_control_write(dev, 0x1000, buf, 1); // URB 1958
5542 buf[0] = 0xc7;
5543 usb_microdia_control_write(dev, 0x1001, buf, 1); // URB 1959
5544 buf[0] = 0x18;
5545 usb_microdia_control_write(dev, 0x1002, buf, 1); // URB 1960
5546 buf[0] = 0x01;
5547 usb_microdia_control_write(dev, 0x1061, buf, 1); // URB 1961
5548 buf[0] = 0x80;
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:
5555 // - 9 bytes
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:
5571 //MT9V111:
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
5575 //MT9V011:
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;
5605 buf[8] = 0x00;
5606 usb_microdia_control_write(dev, 0x11b7, buf, 9); // URB 1971
5607 buf[0] = 0x38;
5608 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 1972
5609 buf[0] = 0x78;
5610 usb_microdia_control_write(dev, 0x1000, buf, 1); // URB 1973
5612 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5613 // I2C MESSAGES
5614 retI2C = 0;
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
5661 // 0x08: Row Start
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
5719 // 0x31: 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
5761 // 0x0d: Soft Reset
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
5809 // 0x21: RESERVED
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
5824 // 0x27: RESERVED
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
5831 // 0x30: 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
5836 // 0x32: 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
5841 // 0x34: 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
5851 // 0x41: 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
5859 // 0x5b: 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
5864 // 0x5d: 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
5869 // 0x5f: 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);
5879 if (retI2C < 0)
5881 UDIA_INFO("1 or more errors occured in I2C-message-block 1 !\n");
5882 return -1;
5884 // END OF I2C MESSAGES
5885 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5887 if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
5889 buf[0] = 0x40;
5890 usb_microdia_control_write(dev, 0x1007, buf, 8);
5891 buf[0] = 0x40;
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
5900 buf[0] = 0x50;
5901 usb_microdia_control_write(dev, 0x10c1, buf, 1);
5902 retI2C = sn9c20x_read_i2c_data(dev, 0x50, 1, 0x00, SN9C20X_I2C_2WIRE, buf);
5903 if (retI2C >= 0)
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");
5905 buf[0] = 0x5c;
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
5913 buf[0] = 0xc6;
5914 usb_microdia_control_write(dev, 0x1001, buf, 1); // URB 2047
5915 buf[0] = 0xc4;
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
5919 /* ALEX:
5920 buf[0] = 0x40;
5921 usb_microdia_control_write(dev, 0x1001, buf, 1);
5924 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
5926 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5927 // I2C MESSAGES
5928 retI2C = 0;
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
5947 if (retI2C < 0)
5949 UDIA_INFO("1 or more errors occured in I2C-message-block 2 !\n");
5950 return -1;
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
5961 buf[0] = 0x0c;
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
5973 buf[0] = 0x38;
5974 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2070
5975 buf[0] = 0x04;
5976 usb_microdia_control_write(dev, 0x118a, buf, 1); // URB 2071
5977 buf[0] = 0x04;
5978 usb_microdia_control_write(dev, 0x0395, buf, 1); // URB 2072
5980 buf[0] = 0x78;
5981 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2073
5982 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2074 // 0x38
5983 if (buf[0] == 0x38)
5984 buf[0] = 0x79;
5985 else if (buf[0] == 0xb8)
5986 buf[0] = 0xf9;
5987 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2075
5988 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2076 // 0xb9
5989 if (buf[0] == 0x39)
5990 buf[0] = 0x7a;
5991 else if (buf[0] == 0xb9)
5992 buf[0] = 0xfa;
5993 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2077
5994 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2078
5995 if (buf[0] == 0x3a)
5996 buf[0] = 0x7b;
5997 else if (buf[0] == 0xba)
5998 buf[0] = 0xfb;
5999 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2079
6000 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2080 // 0x3b
6001 if (buf[0] == 0x3b)
6002 buf[0] = 0x7c;
6003 else if (buf[0] == 0xbb)
6004 buf[0] = 0xfc;
6005 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2081
6006 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2082 // 0x3c
6007 if (buf[0] == 0x3c)
6008 buf[0] = 0x7d;
6009 else if (buf[0] == 0xbc)
6010 buf[0] = 0xfd;
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)
6016 if (buf[0] == 0x3d)
6017 buf[0] = 0x7e;
6018 else if (buf[0] == 0xbd)
6019 buf[0] = 0xfe;
6020 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2085
6021 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2086
6022 if (buf[0] == 0x3e)
6023 buf[0] = 0x7f;
6024 else if (buf[0] == 0xbe)
6025 buf[0] = 0xff;
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 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6035 // I2C MESSAGES
6036 retI2C = 0;
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);
6064 if (retI2C < 0)
6066 UDIA_INFO("1 or more errors occured in I2C-message-block 3 !\n");
6067 return -1;
6069 // END OF I2C MESSAGES
6070 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6073 buf[0] = 0x02;
6074 usb_microdia_control_write(dev, 0x1180, buf, 1); // URB 2099
6076 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6077 // I2C MESSAGE
6078 retI2C = 0;
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);
6091 if (retI2C < 0)
6093 UDIA_INFO("1 or more errors occured in I2C-message-block 4 !\n");
6094 return -1;
6096 // END OF I2C MESSAGES
6097 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6100 buf[0] = 0x02;
6101 usb_microdia_control_write(dev, 0x1182, buf, 1); // URB 2103
6104 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6105 // I2C MESSAGES
6106 retI2C = 0;
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
6113 // 0x2c: Blue 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
6134 // 0x2c: Blue 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);
6149 if (retI2C < 0)
6151 UDIA_INFO("1 or more errors occured in I2C-message-block 5 !\n");
6152 return -1;
6154 // END OF I2C MESSAGES
6155 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6158 buf[0] = 0x20;
6159 usb_microdia_control_write(dev, 0x118c, buf, 1); // URB 2115
6160 buf[0] = 0x20;
6161 usb_microdia_control_write(dev, 0x118d, buf, 1); // URB 2116
6162 buf[0] = 0x20;
6163 usb_microdia_control_write(dev, 0x118e, buf, 1); // URB 2117
6164 buf[0] = 0x20;
6165 usb_microdia_control_write(dev, 0x118f, buf, 1); // URB 2118
6166 buf[0] = 0x0a;
6167 usb_microdia_control_write(dev, 0x11ba, buf, 1); // URB 2119
6168 buf[0] = 0x20;
6169 usb_microdia_control_write(dev, 0x118c, buf, 1); // URB 2120
6170 buf[0] = 0x20;
6171 usb_microdia_control_write(dev, 0x118d, buf, 1); // URB 2121
6172 buf[0] = 0x20;
6173 usb_microdia_control_write(dev, 0x118e, buf, 1); // URB 2122
6174 buf[0] = 0x20;
6175 usb_microdia_control_write(dev, 0x118f, buf, 1); // URB 2123
6177 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6179 buf[0] = 0x14;
6181 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6183 buf[0] = 0x0a;
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;
6194 buf[16] = 0xf5;
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;
6202 buf[16] = 0xf2;
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;
6213 buf[20] = 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;
6222 buf[20] = 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
6229 buf[0] = 0x07;
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;
6241 buf[20] = 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;
6250 buf[20] = 0x00;
6252 usb_microdia_control_write(dev, 0x10e1, buf, 21); // URB 2137
6254 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6256 buf[0] = 0x01;
6258 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6260 buf[0] = 0x14;
6262 usb_microdia_control_write(dev, 0x10f8, buf, 1); // URB 2138
6264 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6266 buf[0] = 0x0a;
6268 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6270 buf[0] = 0xff;
6272 usb_microdia_control_write(dev, 0x10fa, buf, 1); // URB 2139
6274 buf[0] = 0x00;
6275 usb_microdia_control_write(dev, 0x10f9, buf, 1); // URB 2140
6276 buf[0] = 0x00;
6277 usb_microdia_control_write(dev, 0x10f9, buf, 1); // URB 2141
6278 buf[0] = 0x0a;
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
6284 buf[0] = 0x20;
6285 usb_microdia_control_write(dev, 0x118c, buf, 1); // URB 2145
6286 buf[0] = 0x20;
6287 usb_microdia_control_write(dev, 0x118d, buf, 1); // URB 2146
6288 buf[0] = 0x20;
6289 usb_microdia_control_write(dev, 0x118e, buf, 1); // URB 2147
6290 buf[0] = 0x20;
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
6310 buf[0] = 0x01;
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
6350 buf[0] = 0x03;
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 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6358 // I2C MESSAGES
6359 retI2C = 0;
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
6378 if (retI2C < 0)
6380 UDIA_INFO("1 or more errors occured in I2C-message-block 6 !\n");
6381 return -1;
6383 // END OF I2C MESSAGES
6384 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6386 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6388 buf[0] = 0x40;
6389 usb_microdia_control_write(dev, 0x1007, buf, 1);
6390 buf[0] = 0x40;
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
6400 buf[0] = 0x0c;
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
6406 buf[0] = 0x03;
6407 usb_microdia_control_write(dev, 0x1061, buf, 1); // URB 2176
6408 buf[0] = 0x0a;
6409 usb_microdia_control_write(dev, 0x11ba, buf, 1); // URB 2177
6410 buf[0] = 0x00;
6411 usb_microdia_control_write(dev, 0x11b9, buf, 1); // URB 2178
6412 buf[0] = 0x0b;
6413 usb_microdia_control_write(dev, 0x11ba, buf, 1); // URB 2179
6414 buf[0] = 0x01;
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
6424 buf[0] = 0x04;
6425 usb_microdia_control_write(dev, 0x118a, buf, 1); // URB 2185
6426 buf[0] = 0x04;
6427 usb_microdia_control_write(dev, 0x0395, buf, 1); // URB 2186
6429 if ((last_11b8[0] == 0x3d) || (last_11b8[0] == 0x3f))
6430 buf[0] = 0x78;
6431 else if ((last_11b8[0] == 0xbd) || (last_11b8[0] == 0xbf))
6432 buf[0] = 0xf8;
6433 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2187
6434 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2188 // 0x38
6435 if (buf[0] == 0x38)
6436 buf[0] = 0x79;
6437 else if (buf[0] == 0xb8)
6438 buf[0] = 0xf9;
6439 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2189
6440 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2190 // 0xb9
6441 if (buf[0] == 0x39)
6442 buf[0] = 0x7a;
6443 else if (buf[0] == 0xb9)
6444 buf[0] = 0xfa;
6445 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2191
6446 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2192 // 0xba
6447 if (buf[0] == 0x3a)
6448 buf[0] = 0x7b;
6449 else if (buf[0] == 0xba)
6450 buf[0] = 0xfb;
6451 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2193
6452 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2194 // 0x3b
6453 if (buf[0] == 0x3b)
6454 buf[0] = 0x7c;
6455 else if (buf[0] == 0xbb)
6456 buf[0] = 0xfc;
6457 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2195
6458 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2196 // 0x3c
6459 if (buf[0] == 0x3c)
6460 buf[0] = 0x7d;
6461 else if (buf[0] == 0xbc)
6462 buf[0] = 0xfd;
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)
6467 if (buf[0] == 0x3d)
6468 buf[0] = 0x7e;
6469 else if (buf[0] == 0xbd)
6470 buf[0] = 0xfe;
6471 usb_microdia_control_write(dev, 0x11b8, buf, 1); // URB 2199
6472 usb_microdia_control_read(dev, 0x11b8, buf, 1); // URB 2200
6473 if (buf[0] == 0x3e)
6474 buf[0] = 0x7f;
6475 else if (buf[0] == 0xbe)
6476 buf[0] = 0xff;
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 // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6485 // I2C MESSAGES
6486 retI2C = 0;
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
6512 if (retI2C < 0)
6514 UDIA_INFO("1 or more errors occured in I2C-message-block 7 !\n");
6515 return -1;
6517 // END OF I2C MESSAGES
6518 // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6521 buf[0] = 0x03;
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
6528 ***/
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)
6542 buf[0] = 0x20;
6544 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6546 buf[0] = 0x60;
6548 usb_microdia_control_write(dev, 0x1007, buf, 1); // URB 2489
6549 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
6551 buf[0] = 0x00;
6553 else if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
6555 buf[0] = 0x40;
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
6560 return 0;
6563 int microdia_627b_start_stream(struct usb_microdia *dev)
6565 int ret;
6566 //int actual;
6567 __u16 reg;
6568 __u8 buf[64];
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
6573 reg = 0x1066;
6574 buf[0] = 0x00;
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
6584 reg = 0x1000;
6585 buf[0] = 0x78;
6586 ret = usb_microdia_control_write(dev, reg, buf, 1); // URB 46
6587 if(ret < 0) goto err;
6589 reg = 0x1001;
6590 buf[0] = 0xc7;
6591 ret = usb_microdia_control_write(dev, reg, buf, 1); // URB 47
6592 if(ret < 0) goto err;
6594 reg = 0x1002;
6595 buf[0] = 0x18;
6596 ret = usb_microdia_control_write(dev, reg, buf, 1); // URB 48
6597 if(ret < 0) goto err;
6599 reg = 0x1061;
6600 buf[0] = 0x01;
6601 ret = usb_microdia_control_write(dev, reg, buf, 1); // URB 49
6602 if(ret < 0) goto err;
6604 reg = 0x1020;
6605 buf[0] = 0x80;
6606 ret = usb_microdia_control_write(dev, reg, buf, 1); // URB 50
6607 if(ret < 0) goto err;
6609 reg = 0x1067;
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;
6614 reg = 0x10c0;
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;
6617 buf[8] = 0x03;
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 ?
6623 reg = 0x10e0;
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;
6632 reg = 0x10f8;
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;
6637 reg = 0x10fb;
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;
6642 reg = 0x1188;
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;
6647 reg = 0x118b;
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;
6656 reg = 0x11a1;
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;
6661 reg = 0x11b7;
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;
6667 reg = 0x11b8;
6668 buf[0] = 0x38;
6669 ret = usb_microdia_control_write(dev, reg, buf, 1); // URB 60
6670 if(ret < 0) goto err;
6672 reg = 0x1000;
6673 buf[0] = 0x78;
6674 ret = usb_microdia_control_write(dev, reg, buf, 1);
6675 if(ret < 0) goto err;
6677 reg = 0x12;
6678 buf[0] = 0x80;
6679 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
6680 dev->sensor_flags, buf);
6681 if(ret < 0) goto errI2C;
6683 reg = 0x00;
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;
6689 reg = 0x04;
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;
6695 reg = 0x08;
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;
6701 reg = 0x0c;
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;
6707 reg = 0x10;
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;
6713 reg = 0x14;
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;
6719 reg = 0x17;
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;
6725 reg = 0x1b;
6726 buf[0] = 0x06;
6727 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
6728 dev->sensor_flags, buf);
6729 if(ret < 0) goto errI2C;
6731 reg = 0x1e;
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;
6737 reg = 0x20;
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;
6743 reg = 0x24;
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;
6749 reg = 0x28;
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;
6755 reg = 0x2c;
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;
6761 reg = 0x30;
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;
6767 reg = 0x33;
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;
6773 reg = 0x37;
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;
6779 reg = 0x3b;
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;
6785 reg = 0x3f;
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;
6791 // "Dummy" write
6792 reg = 0x43;
6793 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, reg,
6794 dev->sensor_flags, NULL);
6795 if(ret < 0) goto errI2C;
6797 reg = 0x43;
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;
6803 reg = 0x47;
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;
6809 reg = 0x4b;
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;
6815 // "Dummy" write
6816 reg = 0x4f;
6817 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, reg,
6818 dev->sensor_flags, NULL);
6819 if(ret < 0) goto errI2C;
6821 reg = 0x59;
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;
6827 reg = 0x5d;
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;
6833 reg = 0x61;
6834 buf[0] = 0x60;
6835 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
6836 dev->sensor_flags, buf);
6837 if(ret < 0) goto errI2C;
6839 reg = 0x62;
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;
6845 reg = 0x66;
6846 buf[0] = 0x00;
6847 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
6848 dev->sensor_flags, buf);
6849 if(ret < 0) goto errI2C;
6851 reg = 0x67;
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;
6857 reg = 0x6b;
6858 buf[0] = 0x0a;
6859 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
6860 dev->sensor_flags, buf);
6861 if(ret < 0) goto errI2C;
6863 reg = 0x8b;
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;
6869 reg = 0x92;
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;
6875 reg = 0x1007;
6876 buf[0] = 0x40;
6877 ret = usb_microdia_control_write(dev, reg, buf, 1);
6878 if(ret < 0) goto err;
6880 reg = 0x1006;
6881 buf[0] = 0x00;
6882 ret = usb_microdia_control_write(dev, reg, buf, 1);
6883 if(ret < 0) goto err;
6885 reg = 0x10c1;
6886 ret = usb_microdia_control_read(dev, reg, buf, 1);
6887 if(ret < 0) goto err;
6889 reg = 0x10c1;
6890 buf[0] = 0x50;
6891 ret = usb_microdia_control_write(dev, reg, buf, 1);
6892 if(ret < 0) goto err;
6894 // TRY TO READ FROM EEPROM:
6895 reg = 0x00;
6896 ret = sn9c20x_read_i2c_data(dev, 0x50, 1, reg, SN9C20X_I2C_2WIRE, buf);
6897 if(ret < 0)
6899 UDIA_INFO("No EEPROM found\n");
6901 else
6903 UDIA_INFO("Read from EEPROM successful\n");
6906 reg = 0x10c1;
6907 buf[0] = 0x21;
6908 ret = usb_microdia_control_write(dev, reg, buf, 1);
6909 if(ret < 0) goto err;
6911 reg = 0x10e0;
6912 buf[0] = 0x47;
6913 ret = usb_microdia_control_write(dev, reg, buf, 1);
6914 if(ret < 0) goto err;
6916 reg = 0x10e0;
6917 buf[0] = 0x47;
6918 ret = usb_microdia_control_write(dev, reg, buf, 1);
6919 if(ret < 0) goto err;
6921 reg = 0x1001;
6922 buf[0] = 0xc6;
6923 ret = usb_microdia_control_write(dev, reg, buf, 1);
6924 if(ret < 0) goto err;
6926 reg = 0x1001;
6927 buf[0] = 0xc4;
6928 ret = usb_microdia_control_write(dev, reg, buf, 1);
6929 if(ret < 0) goto err;
6931 reg = 0x1001;
6932 buf[0] = 0x84;
6933 ret = usb_microdia_control_write(dev, reg, buf, 1);
6934 if(ret < 0) goto err;
6936 reg = 0x03;
6937 buf[0] = 0x08;
6938 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
6939 dev->sensor_flags, buf);
6940 if(ret < 0) goto errI2C;
6942 reg = 0x17;
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;
6948 // "Dummy" write:
6949 reg = 0x1b;
6950 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 0, reg,
6951 dev->sensor_flags, NULL);
6952 if(ret < 0) goto errI2C;
6954 reg = 0x32;
6955 buf[0] = 0x84;
6956 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
6957 dev->sensor_flags, buf);
6958 if(ret < 0) goto errI2C;
6960 reg = 0x32;
6961 buf[0] = 0x84;
6962 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
6963 dev->sensor_flags, buf);
6964 if(ret < 0) goto errI2C;
6966 reg = 0x32;
6967 buf[0] = 0x84;
6968 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
6969 dev->sensor_flags, buf);
6970 if(ret < 0) goto errI2C;
6972 reg = 0x32;
6973 buf[0] = 0x84;
6974 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
6975 dev->sensor_flags, buf);
6976 if(ret < 0) goto errI2C;
6978 reg = 0x32;
6979 buf[0] = 0x84;
6980 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
6981 dev->sensor_flags, buf);
6982 if(ret < 0) goto errI2C;
6984 reg = 0x1180;
6985 buf[0] = 0x01; buf[1] = 0x00; buf[2] = 0x01; buf[3] = 0x00; buf[4] = 0x28;
6986 buf[5] = 0x3c;
6987 ret = usb_microdia_control_write(dev, reg, buf, 6);
6988 if(ret < 0) goto err;
6990 reg = 0x10fb;
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;
6995 reg = 0x1189;
6996 buf[0] = 0x8c;
6997 ret = usb_microdia_control_write(dev, reg, buf, 1);
6998 if(ret < 0) goto err;
7000 reg = 0x11a1;
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;
7005 reg = 0x11ab;
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;
7010 reg = 0x1000;
7011 buf[0] = 0x78;
7012 ret = usb_microdia_control_write(dev, reg, buf, 1);
7013 if(ret < 0) goto err;
7015 reg = 0x1002;
7016 buf[0] = 0x18;
7017 ret = usb_microdia_control_write(dev, reg, buf, 1);
7018 if(ret < 0) goto err;
7020 reg = 0x1002;
7021 buf[0] = 0x18;
7022 ret = usb_microdia_control_write(dev, reg, buf, 1);
7023 if(ret < 0) goto err;
7025 reg = 0x11b8;
7026 buf[0] = 0x38;
7027 ret = usb_microdia_control_write(dev, reg, buf, 1);
7028 if(ret < 0) goto err;
7030 reg = 0x118a;
7031 buf[0] = 0x04;
7032 ret = usb_microdia_control_write(dev, reg, buf, 1);
7033 if(ret < 0) goto err;
7035 reg = 0x0395;
7036 buf[0] = 0x04;
7037 ret = usb_microdia_control_write(dev, reg, buf, 1);
7038 if(ret < 0) goto err;
7040 reg = 0x11b8;
7041 buf[0] = 0x78;
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;
7047 reg = 0x11b8;
7048 buf[0] = 0xf9;
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;
7054 reg = 0x11b8;
7055 buf[0] = 0xfa;
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;
7061 reg = 0x11b8;
7062 buf[0] = 0x7b;
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;
7068 reg = 0x11b8;
7069 buf[0] = 0x7c;
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;
7075 reg = 0x11b8;
7076 buf[0] = 0x7d;
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;
7082 reg = 0x11b8;
7083 buf[0] = 0x7b;
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;
7089 reg = 0x11;
7090 buf[0] = 0x40;
7091 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7092 dev->sensor_flags, buf);
7093 if(ret < 0) goto errI2C;
7095 reg = 0x2a;
7096 buf[0] = 0x00;
7097 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7098 dev->sensor_flags, buf);
7099 if(ret < 0) goto errI2C;
7101 reg = 0x2b;
7102 buf[0] = 0x00;
7103 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7104 dev->sensor_flags, buf);
7105 if(ret < 0) goto errI2C;
7107 reg = 0x92;
7108 buf[0] = 0x00;
7109 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7110 dev->sensor_flags, buf);
7111 if(ret < 0) goto errI2C;
7113 reg = 0x93;
7114 buf[0] = 0x00;
7115 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7116 dev->sensor_flags, buf);
7117 if(ret < 0) goto errI2C;
7119 reg = 0x1e;
7120 buf[0] = 0x01;
7121 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7122 dev->sensor_flags, buf);
7123 if(ret < 0) goto errI2C;
7125 reg = 0x1e;
7126 buf[0] = 0x01;
7127 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7128 dev->sensor_flags, buf);
7129 if(ret < 0) goto errI2C;
7131 reg = 0x03;
7132 buf[0] = 0x08;
7133 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7134 dev->sensor_flags, buf);
7135 if(ret < 0) goto errI2C;
7137 reg = 0x03;
7138 buf[0] = 0x00;
7139 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7140 dev->sensor_flags, buf);
7141 if(ret < 0) goto errI2C;
7143 reg = 0x10;
7144 buf[0] = 0x7f;
7145 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7146 dev->sensor_flags, buf);
7147 if(ret < 0) goto errI2C;
7149 reg = 0x04;
7150 buf[0] = 0x00;
7151 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7152 dev->sensor_flags, buf);
7153 if(ret < 0) goto errI2C;
7155 reg = 0x2d;
7156 buf[0] = 0x00;
7157 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7158 dev->sensor_flags, buf);
7159 if(ret < 0) goto errI2C;
7161 reg = 0x2e;
7162 buf[0] = 0x00;
7163 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7164 dev->sensor_flags, buf);
7165 if(ret < 0) goto errI2C;
7167 reg = 0x00;
7168 buf[0] = 0x00;
7169 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7170 dev->sensor_flags, buf);
7171 if(ret < 0) goto errI2C;
7173 reg = 0x01;
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;
7179 reg = 0x118c;
7180 buf[0] = 0x20;
7181 ret = usb_microdia_control_write(dev, reg, buf, 1);
7182 if(ret < 0) goto err;
7184 reg = 0x118d;
7185 buf[0] = 0x20;
7186 ret = usb_microdia_control_write(dev, reg, buf, 1);
7187 if(ret < 0) goto err;
7189 reg = 0x118e;
7190 buf[0] = 0x20;
7191 ret = usb_microdia_control_write(dev, reg, buf, 1);
7192 if(ret < 0) goto err;
7194 reg = 0x118f;
7195 buf[0] = 0x20;
7196 ret = usb_microdia_control_write(dev, reg, buf, 1);
7197 if(ret < 0) goto err;
7199 reg = 0x11ba;
7200 buf[0] = 0x0a;
7201 ret = usb_microdia_control_write(dev, reg, buf, 1);
7202 if(ret < 0) goto err;
7204 reg = 0x118c;
7205 buf[0] = 0x20;
7206 ret = usb_microdia_control_write(dev, reg, buf, 1);
7207 if(ret < 0) goto err;
7209 reg = 0x118d;
7210 buf[0] = 0x20;
7211 ret = usb_microdia_control_write(dev, reg, buf, 1);
7212 if(ret < 0) goto err;
7214 reg = 0x118e;
7215 buf[0] = 0x20;
7216 ret = usb_microdia_control_write(dev, reg, buf, 1);
7217 if(ret < 0) goto err;
7219 reg = 0x118f;
7220 buf[0] = 0x20;
7221 ret = usb_microdia_control_write(dev, reg, buf, 1);
7222 if(ret < 0) goto err;
7224 reg = 0x118b;
7225 buf[0] = 0x0c;
7226 ret = usb_microdia_control_write(dev, reg, buf, 1);
7227 if(ret < 0) goto err;
7229 reg = 0x1190;
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 ?
7238 reg = 0x10e1;
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;
7243 buf[20] = 0x00;
7244 ret = usb_microdia_control_write(dev, reg, buf, 21);
7245 if(ret < 0) goto err;
7246 //transferbufferlength was only 15 ?
7248 reg = 0x10e1;
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;
7253 buf[20] = 0x00;
7254 ret = usb_microdia_control_write(dev, reg, buf, 21);
7255 if(ret < 0) goto err;
7256 //transferbufferlength was only 15 ?
7258 reg = 0x10e1;
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;
7263 buf[20] = 0x00;
7264 ret = usb_microdia_control_write(dev, reg, buf, 21);
7265 if(ret < 0) goto err;
7266 //transferbufferlength was only 15 ?
7268 reg = 0x10e1;
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;
7273 buf[20] = 0x00;
7274 ret = usb_microdia_control_write(dev, reg, buf, 21);
7275 if(ret < 0) goto err;
7276 //transferbufferlength was only 15 ?
7278 reg = 0x10e1;
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;
7283 buf[20] = 0x00;
7284 ret = usb_microdia_control_write(dev, reg, buf, 21);
7285 if(ret < 0) goto err;
7286 //transferbufferlength was only 15 ?
7288 reg = 0x10e1;
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;
7293 buf[20] = 0x00;
7294 ret = usb_microdia_control_write(dev, reg, buf, 21);
7295 if(ret < 0) goto err;
7296 //transferbufferlength was only 15 ?
7298 reg = 0x10e1;
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;
7303 buf[20] = 0x00;
7304 ret = usb_microdia_control_write(dev, reg, buf, 21);
7305 if(ret < 0) goto err;
7306 //transferbufferlength was only 15 ?
7308 reg = 0x10e1;
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;
7313 buf[20] = 0x00;
7314 ret = usb_microdia_control_write(dev, reg, buf, 21);
7315 if(ret < 0) goto err;
7316 //transferbufferlength was only 15 ?
7318 reg = 0x10e1;
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;
7323 buf[20] = 0x00;
7324 ret = usb_microdia_control_write(dev, reg, buf, 21);
7325 if(ret < 0) goto err;
7326 //transferbufferlength was only 15 ?
7328 reg = 0x10f7;
7329 buf[0] = 0x05;
7330 ret = usb_microdia_control_write(dev, reg, buf, 1);
7331 if(ret < 0) goto err;
7333 reg = 0x10f6;
7334 buf[0] = 0x1b;
7335 ret = usb_microdia_control_write(dev, reg, buf, 1);
7336 if(ret < 0) goto err;
7338 reg = 0x10e1;
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;
7343 buf[20] = 0x00;
7344 ret = usb_microdia_control_write(dev, reg, buf, 21);
7345 if(ret < 0) goto err;
7346 //transferbufferlength was only 15 ?
7348 reg = 0x10f8;
7349 buf[0] = 0x14;
7350 ret = usb_microdia_control_write(dev, reg, buf, 1);
7351 if(ret < 0) goto err;
7353 reg = 0x10fa;
7354 buf[0] = 0xff;
7355 ret = usb_microdia_control_write(dev, reg, buf, 1);
7356 if(ret < 0) goto err;
7358 reg = 0x10f9;
7359 buf[0] = 0x00;
7360 ret = usb_microdia_control_write(dev, reg, buf, 1);
7361 if(ret < 0) goto err;
7363 reg = 0x10f9;
7364 buf[0] = 0x00;
7365 ret = usb_microdia_control_write(dev, reg, buf, 1);
7366 if(ret < 0) goto err;
7368 reg = 0x11ba;
7369 buf[0] = 0x0a;
7370 ret = usb_microdia_control_write(dev, reg, buf, 1);
7371 if(ret < 0) goto err;
7373 reg = 0x11bc;
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;
7378 reg = 0x11c0;
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 ?
7390 reg = 0x118c;
7391 buf[0] = 0x20;
7392 ret = usb_microdia_control_write(dev, reg, buf, 1);
7393 if(ret < 0) goto err;
7395 reg = 0x118d;
7396 buf[0] = 0x20;
7397 ret = usb_microdia_control_write(dev, reg, buf, 1);
7398 if(ret < 0) goto err;
7400 reg = 0x118e;
7401 buf[0] = 0x20;
7402 ret = usb_microdia_control_write(dev, reg, buf, 1);
7403 if(ret < 0) goto err;
7405 reg = 0x118f;
7406 buf[0] = 0x20;
7407 ret = usb_microdia_control_write(dev, reg, buf, 1);
7408 if(ret < 0) goto err;
7410 reg = 0x11a5;
7411 buf[0] = 0x2d; buf[1] = 0x2d; buf[2] = 0x3a; buf[3] = 0x05; buf[4] = 0x04;
7412 buf[5] = 0x3f;
7413 ret = usb_microdia_control_write(dev, reg, buf, 6);
7414 if(ret < 0) goto err;
7416 reg = 0x11af;
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;
7421 reg = 0x11b3;
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;
7426 reg = 0x10e0;
7427 buf[0] = 0x47;
7428 ret = usb_microdia_control_write(dev, reg, buf, 1);
7429 if(ret < 0) goto err;
7431 reg = 0x1061;
7432 buf[0] = 0x01;
7433 ret = usb_microdia_control_write(dev, reg, buf, 1);
7434 if(ret < 0) goto err;
7436 reg = 0x10e0;
7437 buf[0] = 0x67;
7438 ret = usb_microdia_control_write(dev, reg, buf, 1);
7439 if(ret < 0) goto err;
7441 reg = 0x1100;
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 ?
7459 reg = 0x1140;
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 ?
7477 reg = 0x10e0;
7478 buf[0] = 0x47;
7479 ret = usb_microdia_control_write(dev, reg, buf, 1);
7480 if(ret < 0) goto err;
7482 reg = 0x1061;
7483 buf[0] = 0x03;
7484 ret = usb_microdia_control_write(dev, reg, buf, 1);
7485 if(ret < 0) goto err;
7487 reg = 0x10e0;
7488 buf[0] = 0x4b;
7489 ret = usb_microdia_control_write(dev, reg, buf, 1);
7490 if(ret < 0) goto err;
7492 reg = 0x03;
7493 buf[0] = 0x08;
7494 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7495 dev->sensor_flags, buf);
7496 if(ret < 0) goto errI2C;
7498 reg = 0x1180;
7499 buf[0] = 0x01; buf[1] = 0x00; buf[2] = 0x01; buf[3] = 0x00; buf[4] = 0x28;
7500 buf[5] = 0x3c;
7501 ret = usb_microdia_control_write(dev, reg, buf, 6);
7502 if(ret < 0) goto err;
7504 reg = 0x10fb;
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;
7509 reg = 0x1189;
7510 buf[0] = 0x8c;
7511 ret = usb_microdia_control_write(dev, reg, buf, 1);
7512 if(ret < 0) goto err;
7514 reg = 0x11a1;
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;
7519 reg = 0x11ab;
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;
7524 reg = 0x1061;
7525 buf[0] = 0x03;
7526 ret = usb_microdia_control_write(dev, reg, buf, 1);
7527 if(ret < 0) goto err;
7529 reg = 0x11ba;
7530 buf[0] = 0x0a;
7531 ret = usb_microdia_control_write(dev, reg, buf, 1);
7532 if(ret < 0) goto err;
7534 reg = 0x11b9;
7535 buf[0] = 0x00;
7536 ret = usb_microdia_control_write(dev, reg, buf, 1);
7537 if(ret < 0) goto err;
7539 reg = 0x11ba;
7540 buf[0] = 0x0b;
7541 ret = usb_microdia_control_write(dev, reg, buf, 1);
7542 if(ret < 0) goto err;
7544 reg = 0x1061;
7545 buf[0] = 0x01;
7546 ret = usb_microdia_control_write(dev, reg, buf, 1);
7547 if(ret < 0) goto err;
7549 reg = 0x1000;
7550 buf[0] = 0x78;
7551 ret = usb_microdia_control_write(dev, reg, buf, 1);
7552 if(ret < 0) goto err;
7554 reg = 0x1002;
7555 buf[0] = 0x18;
7556 ret = usb_microdia_control_write(dev, reg, buf, 1);
7557 if(ret < 0) goto err;
7559 reg = 0x1002;
7560 buf[0] = 0x18;
7561 ret = usb_microdia_control_write(dev, reg, buf, 1);
7562 if(ret < 0) goto err;
7564 reg = 0x11b8;
7565 buf[0] = 0x7b;
7566 ret = usb_microdia_control_write(dev, reg, buf, 1);
7567 if(ret < 0) goto err;
7569 reg = 0x118a;
7570 buf[0] = 0x04;
7571 ret = usb_microdia_control_write(dev, reg, buf, 1);
7572 if(ret < 0) goto err;
7574 reg = 0x0395;
7575 buf[0] = 0x04;
7576 ret = usb_microdia_control_write(dev, reg, buf, 1);
7577 if(ret < 0) goto err;
7579 reg = 0x11b8;
7580 buf[0] = 0x78;
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;
7586 reg = 0x11b8;
7587 buf[0] = 0xf9;
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;
7593 reg = 0x11b8;
7594 buf[0] = 0xfa;
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;
7600 reg = 0x11b8;
7601 buf[0] = 0x7b;
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;
7607 reg = 0x11b8;
7608 buf[0] = 0x7c;
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;
7614 reg = 0x11b8;
7615 buf[0] = 0x7d;
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;
7621 reg = 0x11b8;
7622 buf[0] = 0x7b;
7623 ret = usb_microdia_control_write(dev, reg, buf, 1);
7624 if(ret < 0) goto err;
7626 reg = 0x11;
7627 buf[0] = 0x40;
7628 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7629 dev->sensor_flags, buf);
7630 if(ret < 0) goto errI2C;
7632 reg = 0x2a;
7633 buf[0] = 0x00;
7634 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7635 dev->sensor_flags, buf);
7636 if(ret < 0) goto errI2C;
7638 reg = 0x2b;
7639 buf[0] = 0x00;
7640 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7641 dev->sensor_flags, buf);
7642 if(ret < 0) goto errI2C;
7644 reg = 0x92;
7645 buf[0] = 0x00;
7646 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7647 dev->sensor_flags, buf);
7648 if(ret < 0) goto errI2C;
7650 reg = 0x93;
7651 buf[0] = 0x00;
7652 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7653 dev->sensor_flags, buf);
7654 if(ret < 0) goto errI2C;
7656 reg = 0x0a;
7657 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7658 dev->sensor_flags, buf);
7659 if(ret < 0) goto errI2C;
7661 reg = 0x0b;
7662 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7663 dev->sensor_flags, buf);
7664 if(ret < 0) goto errI2C;
7666 reg = 0x1c;
7667 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7668 dev->sensor_flags, buf);
7669 if(ret < 0) goto errI2C;
7671 reg = 0x1d;
7672 ret = sn9c20x_read_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7673 dev->sensor_flags, buf);
7674 if(ret < 0) goto errI2C;
7676 reg = 0x1061;
7677 buf[0] = 0x03;
7678 ret = usb_microdia_control_write(dev, reg, buf, 1);
7679 if(ret < 0) goto err;
7681 reg = 0x1007;
7682 buf[0] = 0x60;
7683 ret = usb_microdia_control_write(dev, reg, buf, 1);
7684 if(ret < 0) goto err;
7686 reg = 0x1006;
7687 buf[0] = 0x00;
7688 ret = usb_microdia_control_write(dev, reg, buf, 1);
7689 if(ret < 0) goto err;
7691 reg = 0x1007;
7692 buf[0] = 0x60;
7693 ret = usb_microdia_control_write(dev, reg, buf, 1);
7694 if(ret < 0) goto err;
7696 reg = 0x1006;
7697 buf[0] = 0x00;
7698 ret = usb_microdia_control_write(dev, reg, buf, 1);
7699 if(ret < 0) goto err;
7701 reg = 0x10e1;
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;
7706 buf[20] = 0x00;
7707 ret = usb_microdia_control_write(dev, reg, buf, 21);
7708 if(ret < 0) goto err;
7709 //transferbufferlength is only 15 ?
7711 reg = 0x10;
7712 buf[0] = 0x7f;
7713 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7714 dev->sensor_flags, buf);
7715 if(ret < 0) goto errI2C;
7717 reg = 0x04;
7718 buf[0] = 0x01;
7719 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7720 dev->sensor_flags, buf);
7721 if(ret < 0) goto errI2C;
7723 reg = 0x10e1;
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;
7728 buf[20] = 0x00;
7729 ret = usb_microdia_control_write(dev, reg, buf, 21);
7730 if(ret < 0) goto err;
7731 //transferbufferlength is only 15 ?
7733 reg = 0x00;
7734 buf[0] = 0x13;
7735 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7736 dev->sensor_flags, buf);
7737 if(ret < 0) goto errI2C;
7739 reg = 0x10e1;
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;
7744 buf[20] = 0x00;
7745 ret = usb_microdia_control_write(dev, reg, buf, 21);
7746 if(ret < 0) goto err;
7747 //transferbufferlength is only 15 ?
7749 reg = 0x2d;
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;
7755 reg = 0x00;
7756 buf[0] = 0x1e;
7757 ret = sn9c20x_write_i2c_data(dev, dev->sensor_slave_address, 1, reg,
7758 dev->sensor_flags, buf);
7759 if(ret < 0) goto errI2C;
7761 reg = 0x01;
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;
7767 reg = 0x118c;
7768 buf[0] = 0x1e;
7769 ret = usb_microdia_control_write(dev, reg, buf, 1);
7770 if(ret < 0) goto err;
7772 reg = 0x118d;
7773 buf[0] = 0x20;
7774 ret = usb_microdia_control_write(dev, reg, buf, 1);
7775 if(ret < 0) goto err;
7777 reg = 0x118e;
7778 buf[0] = 0x20;
7779 ret = usb_microdia_control_write(dev, reg, buf, 1);
7780 if(ret < 0) goto err;
7782 reg = 0x118f;
7783 buf[0] = 0x21;
7784 ret = usb_microdia_control_write(dev, reg, buf, 1);
7785 if(ret < 0) goto err;
7787 reg = 0x2d;
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;
7793 reg = 0x10e1;
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;
7798 buf[20] = 0x00;
7799 ret = usb_microdia_control_write(dev, reg, buf, 21);
7800 if(ret < 0) goto err;
7801 //transferbufferlength is only 15 ?
7803 reg = 0x00;
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;
7809 reg = 0x01;
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;
7815 reg = 0x118c;
7816 buf[0] = 0x20;
7817 ret = usb_microdia_control_write(dev, reg, buf, 1);
7818 if(ret < 0) goto err;
7820 reg = 0x118d;
7821 buf[0] = 0x20;
7822 ret = usb_microdia_control_write(dev, reg, buf, 1);
7823 if(ret < 0) goto err;
7825 reg = 0x118e;
7826 buf[0] = 0x20;
7827 ret = usb_microdia_control_write(dev, reg, buf, 1);
7828 if(ret < 0) goto err;
7830 reg = 0x118f;
7831 buf[0] = 0x1f;
7832 ret = usb_microdia_control_write(dev, reg, buf, 1);
7833 if(ret < 0) goto err;
7835 reg = 0x2d;
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;
7841 reg = 0x10e1;
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;
7846 buf[20] = 0x00;
7847 ret = usb_microdia_control_write(dev, reg, buf, 21);
7848 if(ret < 0) goto err;
7849 //transferbufferlength is only 15 ?
7851 reg = 0x118c;
7852 buf[0] = 0x21;
7853 ret = usb_microdia_control_write(dev, reg, buf, 1);
7854 if(ret < 0) goto err;
7856 reg = 0x118d;
7857 buf[0] = 0x20;
7858 ret = usb_microdia_control_write(dev, reg, buf, 1);
7859 if(ret < 0) goto err;
7861 reg = 0x118e;
7862 buf[0] = 0x20;
7863 ret = usb_microdia_control_write(dev, reg, buf, 1);
7864 if(ret < 0) goto err;
7866 reg = 0x118f;
7867 buf[0] = 0x21;
7868 ret = usb_microdia_control_write(dev, reg, buf, 1);
7869 if(ret < 0) goto err;
7871 reg = 0x1006;
7872 buf[0] = 0x40;
7873 ret = usb_microdia_control_write(dev, reg, buf, 1);
7874 if(ret < 0) goto err;
7876 reg = 0x01;
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;
7882 reg = 0x118c;
7883 buf[0] = 0x1f;
7884 ret = usb_microdia_control_write(dev, reg, buf, 1);
7885 if(ret < 0) goto err;
7887 reg = 0x118d;
7888 buf[0] = 0x20;
7889 ret = usb_microdia_control_write(dev, reg, buf, 1);
7890 if(ret < 0) goto err;
7892 reg = 0x118e;
7893 buf[0] = 0x20;
7894 ret = usb_microdia_control_write(dev, reg, buf, 1);
7895 if(ret < 0) goto err;
7897 reg = 0x118f;
7898 buf[0] = 0x20;
7899 ret = usb_microdia_control_write(dev, reg, buf, 1);
7900 if(ret < 0) goto err;
7902 return ret;
7903 err:
7904 UDIA_ERROR("r/w in bridge register %x failed (%d)!\n", reg, ret);
7905 return ret;
7907 errI2C:
7908 UDIA_ERROR("r/w in sensor register %x failed (%d)!\n", reg, ret);
7909 return ret;
7913 /**
7914 * @brief From UsbSnoop-plugin-parsed.log
7916 * @param dev
7918 * @returns 0 (OK) or <0 (Error)
7920 * @author Vincent, Kuzja
7922 int microdia_6288_start_stream(struct usb_microdia *dev)
7924 int ret;
7925 __u16 reg;
7926 __u8 buf[64];
7930 reg = 0x1066 ;
7931 buf[0] = 0x00;
7932 ret = usb_microdia_control_write(dev, reg, buf, 1);
7933 if(ret < 0) goto err;
7935 reg = 0x1000 ;
7936 buf[0] = 0x78;
7937 ret = usb_microdia_control_write(dev, reg, buf, 1);
7938 if(ret < 0) goto err;
7940 reg = 0x1001 ;
7941 buf[0] = 0xc7;
7942 ret = usb_microdia_control_write(dev, reg, buf, 1);
7943 if(ret < 0) goto err;
7945 reg = 0x1002 ;
7946 buf[0] = 0x1c;
7947 ret = usb_microdia_control_write(dev, reg, buf, 1);
7948 if(ret < 0) goto err;
7950 reg = 0x1061 ;
7951 buf[0] = 0x01;
7952 ret = usb_microdia_control_write(dev, reg, buf, 1);
7953 if(ret < 0) goto err;
7955 reg = 0x1020 ;
7956 buf[0] = 0x80;
7957 ret = usb_microdia_control_write(dev, reg, buf, 1);
7958 if(ret < 0) goto err;
7960 reg = 0x1067 ;
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;
7965 reg = 0x10c0 ;
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;
7970 reg = 0x10e0 ;
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;
7975 reg = 0x10f8 ;
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;
7980 reg = 0x10fb ;
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;
7985 reg = 0x1188 ;
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;
7990 reg = 0x118b ;
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;
7995 reg = 0x11a1 ;
7996 buf[0] = 0x00; buf[1] = 0x00;
7997 ret = usb_microdia_control_write(dev, reg, buf, 2);
7998 if(ret < 0) goto err;
8000 reg = 0x11b7 ;
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;
8005 reg = 0x11b8 ;
8006 buf[0] = 0x30;
8007 ret = usb_microdia_control_write(dev, reg, buf, 1);
8008 if(ret < 0) goto err;
8010 reg = 0x1000 ;
8011 buf[0] = 0x78;
8012 ret = usb_microdia_control_write(dev, reg, buf, 1);
8013 if(ret < 0) goto err;
8015 reg = 0x10c0 ;
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;
8020 reg = 0x10c0 ;
8021 ret = usb_microdia_control_read(dev, reg, buf, 1);
8022 if(ret < 0) goto err;
8024 reg = 0x10c0 ;
8025 ret = usb_microdia_control_read(dev, reg, buf, 1);
8026 if(ret < 0) goto err;
8028 reg = 0x10c0 ;
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;
8033 reg = 0x10c0 ;
8034 ret = usb_microdia_control_read(dev, reg, buf, 1);
8035 if(ret < 0) goto err;
8037 reg = 0x10c0 ;
8038 ret = usb_microdia_control_read(dev, reg, buf, 1);
8039 if(ret < 0) goto err;
8041 reg = 0x10c0 ;
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;
8046 reg = 0x10c0 ;
8047 ret = usb_microdia_control_read(dev, reg, buf, 1);
8048 if(ret < 0) goto err;
8050 reg = 0x10c0 ;
8051 ret = usb_microdia_control_read(dev, reg, buf, 1);
8052 if(ret < 0) goto err;
8054 reg = 0x10c0 ;
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;
8059 reg = 0x10c0 ;
8060 ret = usb_microdia_control_read(dev, reg, buf, 1);
8061 if(ret < 0) goto err;
8063 reg = 0x10c0 ;
8064 ret = usb_microdia_control_read(dev, reg, buf, 1);
8065 if(ret < 0) goto err;
8067 reg = 0x10c0 ;
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;
8072 reg = 0x10c0 ;
8073 ret = usb_microdia_control_read(dev, reg, buf, 1);
8074 if(ret < 0) goto err;
8076 reg = 0x10c0 ;
8077 ret = usb_microdia_control_read(dev, reg, buf, 1);
8078 if(ret < 0) goto err;
8080 reg = 0x10c0 ;
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;
8085 reg = 0x10c0 ;
8086 ret = usb_microdia_control_read(dev, reg, buf, 1);
8087 if(ret < 0) goto err;
8089 reg = 0x10c0 ;
8090 ret = usb_microdia_control_read(dev, reg, buf, 1);
8091 if(ret < 0) goto err;
8093 reg = 0x10c0 ;
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;
8098 reg = 0x10c0 ;
8099 ret = usb_microdia_control_read(dev, reg, buf, 1);
8100 if(ret < 0) goto err;
8102 reg = 0x10c0 ;
8103 ret = usb_microdia_control_read(dev, reg, buf, 1);
8104 if(ret < 0) goto err;
8106 reg = 0x10c0 ;
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;
8111 reg = 0x10c0 ;
8112 ret = usb_microdia_control_read(dev, reg, buf, 1);
8113 if(ret < 0) goto err;
8115 reg = 0x10c0 ;
8116 ret = usb_microdia_control_read(dev, reg, buf, 1);
8117 if(ret < 0) goto err;
8119 reg = 0x10c0 ;
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;
8124 reg = 0x10c0 ;
8125 ret = usb_microdia_control_read(dev, reg, buf, 1);
8126 if(ret < 0) goto err;
8128 reg = 0x10c0 ;
8129 ret = usb_microdia_control_read(dev, reg, buf, 1);
8130 if(ret < 0) goto err;
8132 reg = 0x10c0 ;
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;
8137 reg = 0x10c0 ;
8138 ret = usb_microdia_control_read(dev, reg, buf, 1);
8139 if(ret < 0) goto err;
8141 reg = 0x10c0 ;
8142 ret = usb_microdia_control_read(dev, reg, buf, 1);
8143 if(ret < 0) goto err;
8145 reg = 0x10c0 ;
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;
8150 reg = 0x10c0 ;
8151 ret = usb_microdia_control_read(dev, reg, buf, 1);
8152 if(ret < 0) goto err;
8154 reg = 0x10c0 ;
8155 ret = usb_microdia_control_read(dev, reg, buf, 1);
8156 if(ret < 0) goto err;
8158 reg = 0x10c0 ;
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;
8163 reg = 0x10c0 ;
8164 ret = usb_microdia_control_read(dev, reg, buf, 1);
8165 if(ret < 0) goto err;
8167 reg = 0x10c0 ;
8168 ret = usb_microdia_control_read(dev, reg, buf, 1);
8169 if(ret < 0) goto err;
8171 reg = 0x10c0 ;
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;
8176 reg = 0x10c0 ;
8177 ret = usb_microdia_control_read(dev, reg, buf, 1);
8178 if(ret < 0) goto err;
8180 reg = 0x10c0 ;
8181 ret = usb_microdia_control_read(dev, reg, buf, 1);
8182 if(ret < 0) goto err;
8184 reg = 0x10c0 ;
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;
8189 reg = 0x10c0 ;
8190 ret = usb_microdia_control_read(dev, reg, buf, 1);
8191 if(ret < 0) goto err;
8193 reg = 0x10c0 ;
8194 ret = usb_microdia_control_read(dev, reg, buf, 1);
8195 if(ret < 0) goto err;
8197 reg = 0x10c0 ;
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;
8202 reg = 0x10c0 ;
8203 ret = usb_microdia_control_read(dev, reg, buf, 1);
8204 if(ret < 0) goto err;
8206 reg = 0x10c0 ;
8207 ret = usb_microdia_control_read(dev, reg, buf, 1);
8208 if(ret < 0) goto err;
8210 reg = 0x10c0 ;
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;
8215 reg = 0x10c0 ;
8216 ret = usb_microdia_control_read(dev, reg, buf, 1);
8217 if(ret < 0) goto err;
8219 reg = 0x10c0 ;
8220 ret = usb_microdia_control_read(dev, reg, buf, 1);
8221 if(ret < 0) goto err;
8223 reg = 0x10c0 ;
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;
8228 reg = 0x10c0 ;
8229 ret = usb_microdia_control_read(dev, reg, buf, 1);
8230 if(ret < 0) goto err;
8232 reg = 0x10c0 ;
8233 ret = usb_microdia_control_read(dev, reg, buf, 1);
8234 if(ret < 0) goto err;
8236 reg = 0x10c0 ;
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;
8241 reg = 0x10c0 ;
8242 ret = usb_microdia_control_read(dev, reg, buf, 1);
8243 if(ret < 0) goto err;
8245 reg = 0x10c0 ;
8246 ret = usb_microdia_control_read(dev, reg, buf, 1);
8247 if(ret < 0) goto err;
8249 reg = 0x10c0 ;
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;
8254 reg = 0x10c0 ;
8255 ret = usb_microdia_control_read(dev, reg, buf, 1);
8256 if(ret < 0) goto err;
8258 reg = 0x10c0 ;
8259 ret = usb_microdia_control_read(dev, reg, buf, 1);
8260 if(ret < 0) goto err;
8262 reg = 0x10c0 ;
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;
8267 reg = 0x10c0 ;
8268 ret = usb_microdia_control_read(dev, reg, buf, 1);
8269 if(ret < 0) goto err;
8271 reg = 0x10c0 ;
8272 ret = usb_microdia_control_read(dev, reg, buf, 1);
8273 if(ret < 0) goto err;
8275 reg = 0x10c0 ;
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;
8280 reg = 0x10c0 ;
8281 ret = usb_microdia_control_read(dev, reg, buf, 1);
8282 if(ret < 0) goto err;
8284 reg = 0x10c0 ;
8285 ret = usb_microdia_control_read(dev, reg, buf, 1);
8286 if(ret < 0) goto err;
8288 reg = 0x10c0 ;
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;
8293 reg = 0x10c0 ;
8294 ret = usb_microdia_control_read(dev, reg, buf, 1);
8295 if(ret < 0) goto err;
8297 reg = 0x10c0 ;
8298 ret = usb_microdia_control_read(dev, reg, buf, 1);
8299 if(ret < 0) goto err;
8301 reg = 0x10c0 ;
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;
8306 reg = 0x10c0 ;
8307 ret = usb_microdia_control_read(dev, reg, buf, 1);
8308 if(ret < 0) goto err;
8310 reg = 0x10c0 ;
8311 ret = usb_microdia_control_read(dev, reg, buf, 1);
8312 if(ret < 0) goto err;
8314 reg = 0x10c0 ;
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;
8319 reg = 0x10c0 ;
8320 ret = usb_microdia_control_read(dev, reg, buf, 1);
8321 if(ret < 0) goto err;
8323 reg = 0x10c0 ;
8324 ret = usb_microdia_control_read(dev, reg, buf, 1);
8325 if(ret < 0) goto err;
8327 reg = 0x10c0 ;
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;
8332 reg = 0x10c0 ;
8333 ret = usb_microdia_control_read(dev, reg, buf, 1);
8334 if(ret < 0) goto err;
8336 reg = 0x10c0 ;
8337 ret = usb_microdia_control_read(dev, reg, buf, 1);
8338 if(ret < 0) goto err;
8340 reg = 0x10c0 ;
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;
8345 reg = 0x10c0 ;
8346 ret = usb_microdia_control_read(dev, reg, buf, 1);
8347 if(ret < 0) goto err;
8349 reg = 0x10c0 ;
8350 ret = usb_microdia_control_read(dev, reg, buf, 1);
8351 if(ret < 0) goto err;
8353 reg = 0x10c0 ;
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;
8358 reg = 0x10c0 ;
8359 ret = usb_microdia_control_read(dev, reg, buf, 1);
8360 if(ret < 0) goto err;
8362 reg = 0x10c0 ;
8363 ret = usb_microdia_control_read(dev, reg, buf, 1);
8364 if(ret < 0) goto err;
8366 reg = 0x10c0 ;
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;
8371 reg = 0x10c0 ;
8372 ret = usb_microdia_control_read(dev, reg, buf, 1);
8373 if(ret < 0) goto err;
8375 reg = 0x10c0 ;
8376 ret = usb_microdia_control_read(dev, reg, buf, 1);
8377 if(ret < 0) goto err;
8379 reg = 0x10c0 ;
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;
8384 reg = 0x10c0 ;
8385 ret = usb_microdia_control_read(dev, reg, buf, 1);
8386 if(ret < 0) goto err;
8388 reg = 0x10c0 ;
8389 ret = usb_microdia_control_read(dev, reg, buf, 1);
8390 if(ret < 0) goto err;
8392 reg = 0x10c0 ;
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;
8397 reg = 0x10c0 ;
8398 ret = usb_microdia_control_read(dev, reg, buf, 1);
8399 if(ret < 0) goto err;
8401 reg = 0x10c0 ;
8402 ret = usb_microdia_control_read(dev, reg, buf, 1);
8403 if(ret < 0) goto err;
8405 reg = 0x10c0 ;
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;
8410 reg = 0x10c0 ;
8411 ret = usb_microdia_control_read(dev, reg, buf, 1);
8412 if(ret < 0) goto err;
8414 reg = 0x10c0 ;
8415 ret = usb_microdia_control_read(dev, reg, buf, 1);
8416 if(ret < 0) goto err;
8418 reg = 0x10c0 ;
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;
8423 reg = 0x10c0 ;
8424 ret = usb_microdia_control_read(dev, reg, buf, 1);
8425 if(ret < 0) goto err;
8427 reg = 0x10c0 ;
8428 ret = usb_microdia_control_read(dev, reg, buf, 1);
8429 if(ret < 0) goto err;
8431 reg = 0x10c0 ;
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;
8436 reg = 0x10c0 ;
8437 ret = usb_microdia_control_read(dev, reg, buf, 1);
8438 if(ret < 0) goto err;
8440 reg = 0x10c0 ;
8441 ret = usb_microdia_control_read(dev, reg, buf, 1);
8442 if(ret < 0) goto err;
8444 reg = 0x10c0 ;
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;
8449 reg = 0x10c0 ;
8450 ret = usb_microdia_control_read(dev, reg, buf, 1);
8451 if(ret < 0) goto err;
8453 reg = 0x10c0 ;
8454 ret = usb_microdia_control_read(dev, reg, buf, 1);
8455 if(ret < 0) goto err;
8457 reg = 0x10c0 ;
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;
8462 reg = 0x10c0 ;
8463 ret = usb_microdia_control_read(dev, reg, buf, 1);
8464 if(ret < 0) goto err;
8466 reg = 0x10c0 ;
8467 ret = usb_microdia_control_read(dev, reg, buf, 1);
8468 if(ret < 0) goto err;
8470 reg = 0x10c0 ;
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;
8475 reg = 0x10c0 ;
8476 ret = usb_microdia_control_read(dev, reg, buf, 1);
8477 if(ret < 0) goto err;
8479 reg = 0x10c0 ;
8480 ret = usb_microdia_control_read(dev, reg, buf, 1);
8481 if(ret < 0) goto err;
8483 reg = 0x10c0 ;
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;
8488 reg = 0x10c0 ;
8489 ret = usb_microdia_control_read(dev, reg, buf, 1);
8490 if(ret < 0) goto err;
8492 reg = 0x10c0 ;
8493 ret = usb_microdia_control_read(dev, reg, buf, 1);
8494 if(ret < 0) goto err;
8496 reg = 0x10c0 ;
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;
8501 reg = 0x10c0 ;
8502 ret = usb_microdia_control_read(dev, reg, buf, 1);
8503 if(ret < 0) goto err;
8505 reg = 0x10c0 ;
8506 ret = usb_microdia_control_read(dev, reg, buf, 1);
8507 if(ret < 0) goto err;
8509 reg = 0x10c0 ;
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;
8514 reg = 0x10c0 ;
8515 ret = usb_microdia_control_read(dev, reg, buf, 1);
8516 if(ret < 0) goto err;
8518 reg = 0x10c0 ;
8519 ret = usb_microdia_control_read(dev, reg, buf, 1);
8520 if(ret < 0) goto err;
8522 reg = 0x10c0 ;
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;
8527 reg = 0x10c0 ;
8528 ret = usb_microdia_control_read(dev, reg, buf, 1);
8529 if(ret < 0) goto err;
8531 reg = 0x10c0 ;
8532 ret = usb_microdia_control_read(dev, reg, buf, 1);
8533 if(ret < 0) goto err;
8535 reg = 0x10c0 ;
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;
8540 reg = 0x10c0 ;
8541 ret = usb_microdia_control_read(dev, reg, buf, 1);
8542 if(ret < 0) goto err;
8544 reg = 0x10c0 ;
8545 ret = usb_microdia_control_read(dev, reg, buf, 1);
8546 if(ret < 0) goto err;
8548 reg = 0x10c0 ;
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;
8553 reg = 0x10c0 ;
8554 ret = usb_microdia_control_read(dev, reg, buf, 1);
8555 if(ret < 0) goto err;
8557 reg = 0x10c0 ;
8558 ret = usb_microdia_control_read(dev, reg, buf, 1);
8559 if(ret < 0) goto err;
8561 reg = 0x10c0 ;
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;
8566 reg = 0x10c0 ;
8567 ret = usb_microdia_control_read(dev, reg, buf, 1);
8568 if(ret < 0) goto err;
8570 reg = 0x10c0 ;
8571 ret = usb_microdia_control_read(dev, reg, buf, 1);
8572 if(ret < 0) goto err;
8574 reg = 0x10c0 ;
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;
8579 reg = 0x10c0 ;
8580 ret = usb_microdia_control_read(dev, reg, buf, 1);
8581 if(ret < 0) goto err;
8583 reg = 0x10c0 ;
8584 ret = usb_microdia_control_read(dev, reg, buf, 1);
8585 if(ret < 0) goto err;
8587 reg = 0x10c0 ;
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;
8592 reg = 0x10c0 ;
8593 ret = usb_microdia_control_read(dev, reg, buf, 1);
8594 if(ret < 0) goto err;
8596 reg = 0x10c0 ;
8597 ret = usb_microdia_control_read(dev, reg, buf, 1);
8598 if(ret < 0) goto err;
8600 reg = 0x10c0 ;
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;
8605 reg = 0x10c0 ;
8606 ret = usb_microdia_control_read(dev, reg, buf, 1);
8607 if(ret < 0) goto err;
8609 reg = 0x10c0 ;
8610 ret = usb_microdia_control_read(dev, reg, buf, 1);
8611 if(ret < 0) goto err;
8613 reg = 0x10c0 ;
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;
8618 reg = 0x10c0 ;
8619 ret = usb_microdia_control_read(dev, reg, buf, 1);
8620 if(ret < 0) goto err;
8622 reg = 0x10c0 ;
8623 ret = usb_microdia_control_read(dev, reg, buf, 1);
8624 if(ret < 0) goto err;
8626 reg = 0x10c0 ;
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;
8631 reg = 0x10c0 ;
8632 ret = usb_microdia_control_read(dev, reg, buf, 1);
8633 if(ret < 0) goto err;
8635 reg = 0x10c0 ;
8636 ret = usb_microdia_control_read(dev, reg, buf, 1);
8637 if(ret < 0) goto err;
8639 reg = 0x10c0 ;
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;
8644 reg = 0x10c0 ;
8645 ret = usb_microdia_control_read(dev, reg, buf, 1);
8646 if(ret < 0) goto err;
8648 reg = 0x10c0 ;
8649 ret = usb_microdia_control_read(dev, reg, buf, 1);
8650 if(ret < 0) goto err;
8652 reg = 0x10c0 ;
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;
8657 reg = 0x10c0 ;
8658 ret = usb_microdia_control_read(dev, reg, buf, 1);
8659 if(ret < 0) goto err;
8661 reg = 0x10c0 ;
8662 ret = usb_microdia_control_read(dev, reg, buf, 1);
8663 if(ret < 0) goto err;
8665 reg = 0x10c0 ;
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;
8670 reg = 0x10c0 ;
8671 ret = usb_microdia_control_read(dev, reg, buf, 1);
8672 if(ret < 0) goto err;
8674 reg = 0x10c0 ;
8675 ret = usb_microdia_control_read(dev, reg, buf, 1);
8676 if(ret < 0) goto err;
8678 reg = 0x10c0 ;
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;
8683 reg = 0x10c0 ;
8684 ret = usb_microdia_control_read(dev, reg, buf, 1);
8685 if(ret < 0) goto err;
8687 reg = 0x10c0 ;
8688 ret = usb_microdia_control_read(dev, reg, buf, 1);
8689 if(ret < 0) goto err;
8691 reg = 0x10c0 ;
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;
8696 reg = 0x10c0 ;
8697 ret = usb_microdia_control_read(dev, reg, buf, 1);
8698 if(ret < 0) goto err;
8700 reg = 0x10c0 ;
8701 ret = usb_microdia_control_read(dev, reg, buf, 1);
8702 if(ret < 0) goto err;
8704 reg = 0x10c0 ;
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;
8709 reg = 0x10c0 ;
8710 ret = usb_microdia_control_read(dev, reg, buf, 1);
8711 if(ret < 0) goto err;
8713 reg = 0x10c0 ;
8714 ret = usb_microdia_control_read(dev, reg, buf, 1);
8715 if(ret < 0) goto err;
8717 reg = 0x10c0 ;
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;
8722 reg = 0x10c0 ;
8723 ret = usb_microdia_control_read(dev, reg, buf, 1);
8724 if(ret < 0) goto err;
8726 reg = 0x10c0 ;
8727 ret = usb_microdia_control_read(dev, reg, buf, 1);
8728 if(ret < 0) goto err;
8730 reg = 0x10c0 ;
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;
8735 reg = 0x10c0 ;
8736 ret = usb_microdia_control_read(dev, reg, buf, 1);
8737 if(ret < 0) goto err;
8739 reg = 0x10c0 ;
8740 ret = usb_microdia_control_read(dev, reg, buf, 1);
8741 if(ret < 0) goto err;
8743 reg = 0x10c0 ;
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;
8748 reg = 0x10c0 ;
8749 ret = usb_microdia_control_read(dev, reg, buf, 1);
8750 if(ret < 0) goto err;
8752 reg = 0x10c0 ;
8753 ret = usb_microdia_control_read(dev, reg, buf, 1);
8754 if(ret < 0) goto err;
8756 reg = 0x10c0 ;
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;
8761 reg = 0x10c0 ;
8762 ret = usb_microdia_control_read(dev, reg, buf, 1);
8763 if(ret < 0) goto err;
8765 reg = 0x10c0 ;
8766 ret = usb_microdia_control_read(dev, reg, buf, 1);
8767 if(ret < 0) goto err;
8769 reg = 0x10c0 ;
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;
8774 reg = 0x10c0 ;
8775 ret = usb_microdia_control_read(dev, reg, buf, 1);
8776 if(ret < 0) goto err;
8778 reg = 0x10c0 ;
8779 ret = usb_microdia_control_read(dev, reg, buf, 1);
8780 if(ret < 0) goto err;
8782 reg = 0x10c0 ;
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;
8787 reg = 0x10c0 ;
8788 ret = usb_microdia_control_read(dev, reg, buf, 1);
8789 if(ret < 0) goto err;
8791 reg = 0x10c0 ;
8792 ret = usb_microdia_control_read(dev, reg, buf, 1);
8793 if(ret < 0) goto err;
8795 reg = 0x10c0 ;
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;
8800 reg = 0x10c0 ;
8801 ret = usb_microdia_control_read(dev, reg, buf, 1);
8802 if(ret < 0) goto err;
8804 reg = 0x10c0 ;
8805 ret = usb_microdia_control_read(dev, reg, buf, 1);
8806 if(ret < 0) goto err;
8808 reg = 0x10c0 ;
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;
8813 reg = 0x10c0 ;
8814 ret = usb_microdia_control_read(dev, reg, buf, 1);
8815 if(ret < 0) goto err;
8817 reg = 0x10c0 ;
8818 ret = usb_microdia_control_read(dev, reg, buf, 1);
8819 if(ret < 0) goto err;
8821 reg = 0x10c0 ;
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;
8826 reg = 0x10c0 ;
8827 ret = usb_microdia_control_read(dev, reg, buf, 1);
8828 if(ret < 0) goto err;
8830 reg = 0x10c0 ;
8831 ret = usb_microdia_control_read(dev, reg, buf, 1);
8832 if(ret < 0) goto err;
8834 reg = 0x10c0 ;
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;
8839 reg = 0x10c0 ;
8840 ret = usb_microdia_control_read(dev, reg, buf, 1);
8841 if(ret < 0) goto err;
8843 reg = 0x10c0 ;
8844 ret = usb_microdia_control_read(dev, reg, buf, 1);
8845 if(ret < 0) goto err;
8847 reg = 0x10c0 ;
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;
8852 reg = 0x10c0 ;
8853 ret = usb_microdia_control_read(dev, reg, buf, 1);
8854 if(ret < 0) goto err;
8856 reg = 0x10c0 ;
8857 ret = usb_microdia_control_read(dev, reg, buf, 1);
8858 if(ret < 0) goto err;
8860 reg = 0x10c0 ;
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;
8865 reg = 0x10c0 ;
8866 ret = usb_microdia_control_read(dev, reg, buf, 1);
8867 if(ret < 0) goto err;
8869 reg = 0x10c0 ;
8870 ret = usb_microdia_control_read(dev, reg, buf, 1);
8871 if(ret < 0) goto err;
8873 reg = 0x10c0 ;
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;
8878 reg = 0x10c0 ;
8879 ret = usb_microdia_control_read(dev, reg, buf, 1);
8880 if(ret < 0) goto err;
8882 reg = 0x10c0 ;
8883 ret = usb_microdia_control_read(dev, reg, buf, 1);
8884 if(ret < 0) goto err;
8886 reg = 0x10c0 ;
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;
8891 reg = 0x10c0 ;
8892 ret = usb_microdia_control_read(dev, reg, buf, 1);
8893 if(ret < 0) goto err;
8895 reg = 0x10c0 ;
8896 ret = usb_microdia_control_read(dev, reg, buf, 1);
8897 if(ret < 0) goto err;
8899 reg = 0x10c0 ;
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;
8904 reg = 0x10c0 ;
8905 ret = usb_microdia_control_read(dev, reg, buf, 1);
8906 if(ret < 0) goto err;
8908 reg = 0x10c0 ;
8909 ret = usb_microdia_control_read(dev, reg, buf, 1);
8910 if(ret < 0) goto err;
8912 reg = 0x10c0 ;
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;
8917 reg = 0x10c0 ;
8918 ret = usb_microdia_control_read(dev, reg, buf, 1);
8919 if(ret < 0) goto err;
8921 reg = 0x10c0 ;
8922 ret = usb_microdia_control_read(dev, reg, buf, 1);
8923 if(ret < 0) goto err;
8925 reg = 0x10c0 ;
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;
8930 reg = 0x10c0 ;
8931 ret = usb_microdia_control_read(dev, reg, buf, 1);
8932 if(ret < 0) goto err;
8934 reg = 0x10c0 ;
8935 ret = usb_microdia_control_read(dev, reg, buf, 1);
8936 if(ret < 0) goto err;
8938 reg = 0x10c0 ;
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;
8943 reg = 0x10c0 ;
8944 ret = usb_microdia_control_read(dev, reg, buf, 1);
8945 if(ret < 0) goto err;
8947 reg = 0x10c0 ;
8948 ret = usb_microdia_control_read(dev, reg, buf, 1);
8949 if(ret < 0) goto err;
8951 reg = 0x10c0 ;
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;
8956 reg = 0x10c0 ;
8957 ret = usb_microdia_control_read(dev, reg, buf, 1);
8958 if(ret < 0) goto err;
8960 reg = 0x10c0 ;
8961 ret = usb_microdia_control_read(dev, reg, buf, 1);
8962 if(ret < 0) goto err;
8964 reg = 0x10c0 ;
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;
8969 reg = 0x10c0 ;
8970 ret = usb_microdia_control_read(dev, reg, buf, 1);
8971 if(ret < 0) goto err;
8973 reg = 0x10c0 ;
8974 ret = usb_microdia_control_read(dev, reg, buf, 1);
8975 if(ret < 0) goto err;
8977 reg = 0x10c0 ;
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;
8982 reg = 0x10c0 ;
8983 ret = usb_microdia_control_read(dev, reg, buf, 1);
8984 if(ret < 0) goto err;
8986 reg = 0x10c0 ;
8987 ret = usb_microdia_control_read(dev, reg, buf, 1);
8988 if(ret < 0) goto err;
8990 reg = 0x10c0 ;
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;
8995 reg = 0x10c0 ;
8996 ret = usb_microdia_control_read(dev, reg, buf, 1);
8997 if(ret < 0) goto err;
8999 reg = 0x10c0 ;
9000 ret = usb_microdia_control_read(dev, reg, buf, 1);
9001 if(ret < 0) goto err;
9003 reg = 0x10c0 ;
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;
9008 reg = 0x10c0 ;
9009 ret = usb_microdia_control_read(dev, reg, buf, 1);
9010 if(ret < 0) goto err;
9012 reg = 0x10c0 ;
9013 ret = usb_microdia_control_read(dev, reg, buf, 1);
9014 if(ret < 0) goto err;
9016 reg = 0x10c0 ;
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;
9021 reg = 0x10c0 ;
9022 ret = usb_microdia_control_read(dev, reg, buf, 1);
9023 if(ret < 0) goto err;
9025 reg = 0x10c0 ;
9026 ret = usb_microdia_control_read(dev, reg, buf, 1);
9027 if(ret < 0) goto err;
9029 reg = 0x10c0 ;
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;
9034 reg = 0x10c0 ;
9035 ret = usb_microdia_control_read(dev, reg, buf, 1);
9036 if(ret < 0) goto err;
9038 reg = 0x10c0 ;
9039 ret = usb_microdia_control_read(dev, reg, buf, 1);
9040 if(ret < 0) goto err;
9042 reg = 0x10c0 ;
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;
9047 reg = 0x10c0 ;
9048 ret = usb_microdia_control_read(dev, reg, buf, 1);
9049 if(ret < 0) goto err;
9051 reg = 0x10c0 ;
9052 ret = usb_microdia_control_read(dev, reg, buf, 1);
9053 if(ret < 0) goto err;
9055 reg = 0x10c0 ;
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;
9060 reg = 0x10c0 ;
9061 ret = usb_microdia_control_read(dev, reg, buf, 1);
9062 if(ret < 0) goto err;
9064 reg = 0x10c0 ;
9065 ret = usb_microdia_control_read(dev, reg, buf, 1);
9066 if(ret < 0) goto err;
9068 reg = 0x10c1 ;
9069 ret = usb_microdia_control_read(dev, reg, buf, 1);
9070 if(ret < 0) goto err;
9072 reg = 0x10c1 ;
9073 buf[0] = 0x50;
9074 ret = usb_microdia_control_write(dev, reg, buf, 1);
9075 if(ret < 0) goto err;
9077 reg = 0x10c0 ;
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;
9082 reg = 0x10c0 ;
9083 ret = usb_microdia_control_read(dev, reg, buf, 1);
9084 if(ret < 0) goto err;
9086 reg = 0x10c0 ;
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;
9091 reg = 0x10c0 ;
9092 ret = usb_microdia_control_read(dev, reg, buf, 1);
9093 if(ret < 0) goto err;
9095 reg = 0x10c0 ;
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;
9100 reg = 0x10c0 ;
9101 ret = usb_microdia_control_read(dev, reg, buf, 1);
9102 if(ret < 0) goto err;
9104 reg = 0x10c0 ;
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;
9109 reg = 0x10c0 ;
9110 ret = usb_microdia_control_read(dev, reg, buf, 1);
9111 if(ret < 0) goto err;
9113 reg = 0x10c0 ;
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;
9118 reg = 0x10c0 ;
9119 ret = usb_microdia_control_read(dev, reg, buf, 1);
9120 if(ret < 0) goto err;
9122 reg = 0x10c0 ;
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;
9127 reg = 0x10c0 ;
9128 ret = usb_microdia_control_read(dev, reg, buf, 1);
9129 if(ret < 0) goto err;
9131 reg = 0x10c0 ;
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;
9136 reg = 0x10c0 ;
9137 ret = usb_microdia_control_read(dev, reg, buf, 1);
9138 if(ret < 0) goto err;
9140 reg = 0x10c0 ;
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;
9145 reg = 0x10c0 ;
9146 ret = usb_microdia_control_read(dev, reg, buf, 1);
9147 if(ret < 0) goto err;
9149 reg = 0x10c0 ;
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;
9154 reg = 0x10c0 ;
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;
9159 reg = 0x10c0 ;
9160 ret = usb_microdia_control_read(dev, reg, buf, 1);
9161 if(ret < 0) goto err;
9163 reg = 0x10c0 ;
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;
9168 reg = 0x10c0 ;
9169 ret = usb_microdia_control_read(dev, reg, buf, 1);
9170 if(ret < 0) goto err;
9172 reg = 0x10c0 ;
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;
9177 reg = 0x10c0 ;
9178 ret = usb_microdia_control_read(dev, reg, buf, 1);
9179 if(ret < 0) goto err;
9181 reg = 0x10c0 ;
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;
9186 reg = 0x10c0 ;
9187 ret = usb_microdia_control_read(dev, reg, buf, 1);
9188 if(ret < 0) goto err;
9190 reg = 0x10c0 ;
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;
9195 reg = 0x10c0 ;
9196 ret = usb_microdia_control_read(dev, reg, buf, 1);
9197 if(ret < 0) goto err;
9199 reg = 0x10c0 ;
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;
9204 reg = 0x10c0 ;
9205 ret = usb_microdia_control_read(dev, reg, buf, 1);
9206 if(ret < 0) goto err;
9208 reg = 0x10c0 ;
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;
9213 reg = 0x10c0 ;
9214 ret = usb_microdia_control_read(dev, reg, buf, 1);
9215 if(ret < 0) goto err;
9217 reg = 0x10c0 ;
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;
9222 reg = 0x10c0 ;
9223 ret = usb_microdia_control_read(dev, reg, buf, 1);
9224 if(ret < 0) goto err;
9226 reg = 0x10c0 ;
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;
9231 reg = 0x10c2 ;
9232 ret = usb_microdia_control_read(dev, reg, buf, 5);
9233 if(ret < 0) goto err;
9235 reg = 0x10c1 ;
9236 buf[0] = 0x30;
9237 ret = usb_microdia_control_write(dev, reg, buf, 1);
9238 if(ret < 0) goto err;
9240 reg = 0x10e0 ;
9241 buf[0] = 0x47;
9242 ret = usb_microdia_control_write(dev, reg, buf, 1);
9243 if(ret < 0) goto err;
9245 reg = 0x10e0 ;
9246 buf[0] = 0x47;
9247 ret = usb_microdia_control_write(dev, reg, buf, 1);
9248 if(ret < 0) goto err;
9250 reg = 0x1001 ;
9251 buf[0] = 0xc6;
9252 ret = usb_microdia_control_write(dev, reg, buf, 1);
9253 if(ret < 0) goto err;
9255 reg = 0x1001 ;
9256 buf[0] = 0xc4;
9257 ret = usb_microdia_control_write(dev, reg, buf, 1);
9258 if(ret < 0) goto err;
9260 reg = 0x1001 ;
9261 buf[0] = 0x84;
9262 ret = usb_microdia_control_write(dev, reg, buf, 1);
9263 if(ret < 0) goto err;
9265 reg = 0x1189 ;
9266 buf[0] = 0xcc;
9267 ret = usb_microdia_control_write(dev, reg, buf, 1);
9268 if(ret < 0) goto err;
9270 reg = 0x11bc ;
9271 buf[0] = 0x00;
9272 ret = usb_microdia_control_write(dev, reg, buf, 1);
9273 if(ret < 0) goto err;
9275 reg = 0x11bd ;
9276 buf[0] = 0x00;
9277 ret = usb_microdia_control_write(dev, reg, buf, 1);
9278 if(ret < 0) goto err;
9280 reg = 0x11be ;
9281 buf[0] = 0x00;
9282 ret = usb_microdia_control_write(dev, reg, buf, 1);
9283 if(ret < 0) goto err;
9285 reg = 0x11bf ;
9286 buf[0] = 0x00;
9287 ret = usb_microdia_control_write(dev, reg, buf, 1);
9288 if(ret < 0) goto err;
9290 reg = 0x10c0 ;
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;
9295 reg = 0x10c0 ;
9296 ret = usb_microdia_control_read(dev, reg, buf, 1);
9297 if(ret < 0) goto err;
9299 reg = 0x10c0 ;
9300 ret = usb_microdia_control_read(dev, reg, buf, 1);
9301 if(ret < 0) goto err;
9303 reg = 0x10c0 ;
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;
9308 reg = 0x10c0 ;
9309 ret = usb_microdia_control_read(dev, reg, buf, 1);
9310 if(ret < 0) goto err;
9312 reg = 0x10c0 ;
9313 ret = usb_microdia_control_read(dev, reg, buf, 1);
9314 if(ret < 0) goto err;
9316 reg = 0x10c0 ;
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;
9321 reg = 0x10c0 ;
9322 ret = usb_microdia_control_read(dev, reg, buf, 1);
9323 if(ret < 0) goto err;
9325 reg = 0x10c0 ;
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;
9330 reg = 0x10c0 ;
9331 ret = usb_microdia_control_read(dev, reg, buf, 1);
9332 if(ret < 0) goto err;
9334 reg = 0x10c0 ;
9335 ret = usb_microdia_control_read(dev, reg, buf, 1);
9336 if(ret < 0) goto err;
9338 reg = 0x1180 ;
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;
9343 reg = 0x10fb ;
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;
9348 reg = 0x1189 ;
9349 buf[0] = 0xdc;
9350 ret = usb_microdia_control_write(dev, reg, buf, 1);
9351 if(ret < 0) goto err;
9353 reg = 0x1189 ;
9354 buf[0] = 0xd0;
9355 ret = usb_microdia_control_write(dev, reg, buf, 1);
9356 if(ret < 0) goto err;
9358 reg = 0x11a1 ;
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;
9363 reg = 0x11ab ;
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;
9368 reg = 0x1000 ;
9369 buf[0] = 0x78;
9370 ret = usb_microdia_control_write(dev, reg, buf, 1);
9371 if(ret < 0) goto err;
9373 reg = 0x1002 ;
9374 buf[0] = 0x18;
9375 ret = usb_microdia_control_write(dev, reg, buf, 1);
9376 if(ret < 0) goto err;
9378 reg = 0x1002 ;
9379 buf[0] = 0x08;
9380 ret = usb_microdia_control_write(dev, reg, buf, 1);
9381 if(ret < 0) goto err;
9383 reg = 0x11b8 ;
9384 buf[0] = 0x38;
9385 ret = usb_microdia_control_write(dev, reg, buf, 1);
9386 if(ret < 0) goto err;
9388 reg = 0x118a ;
9389 buf[0] = 0x02;
9390 ret = usb_microdia_control_write(dev, reg, buf, 1);
9391 if(ret < 0) goto err;
9393 reg = 0x0395 ;
9394 buf[0] = 0x02;
9395 ret = usb_microdia_control_write(dev, reg, buf, 1);
9396 if(ret < 0) goto err;
9398 reg = 0x11b8 ;
9399 buf[0] = 0x78;
9400 ret = usb_microdia_control_write(dev, reg, buf, 1);
9401 if(ret < 0) goto err;
9403 reg = 0x11b8 ;
9404 ret = usb_microdia_control_read(dev, reg, buf, 1);
9405 if(ret < 0) goto err;
9407 reg = 0x11b8 ;
9408 buf[0] = 0xf9;
9409 ret = usb_microdia_control_write(dev, reg, buf, 1);
9410 if(ret < 0) goto err;
9412 reg = 0x11b8 ;
9413 ret = usb_microdia_control_read(dev, reg, buf, 1);
9414 if(ret < 0) goto err;
9416 reg = 0x11b8 ;
9417 buf[0] = 0x7a;
9418 ret = usb_microdia_control_write(dev, reg, buf, 1);
9419 if(ret < 0) goto err;
9421 reg = 0x11b8 ;
9422 ret = usb_microdia_control_read(dev, reg, buf, 1);
9423 if(ret < 0) goto err;
9425 reg = 0x11b8 ;
9426 buf[0] = 0x7b;
9427 ret = usb_microdia_control_write(dev, reg, buf, 1);
9428 if(ret < 0) goto err;
9430 reg = 0x11b8 ;
9431 ret = usb_microdia_control_read(dev, reg, buf, 1);
9432 if(ret < 0) goto err;
9434 reg = 0x11b8 ;
9435 buf[0] = 0x7c;
9436 ret = usb_microdia_control_write(dev, reg, buf, 1);
9437 if(ret < 0) goto err;
9439 reg = 0x11b8 ;
9440 ret = usb_microdia_control_read(dev, reg, buf, 1);
9441 if(ret < 0) goto err;
9443 reg = 0x11b8 ;
9444 buf[0] = 0xfd;
9445 ret = usb_microdia_control_write(dev, reg, buf, 1);
9446 if(ret < 0) goto err;
9448 reg = 0x11b8 ;
9449 ret = usb_microdia_control_read(dev, reg, buf, 1);
9450 if(ret < 0) goto err;
9452 reg = 0x11b8 ;
9453 buf[0] = 0xfa;
9454 ret = usb_microdia_control_write(dev, reg, buf, 1);
9455 if(ret < 0) goto err;
9457 reg = 0x10c0 ;
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;
9462 reg = 0x10c0 ;
9463 ret = usb_microdia_control_read(dev, reg, buf, 1);
9464 if(ret < 0) goto err;
9466 reg = 0x10c0 ;
9467 ret = usb_microdia_control_read(dev, reg, buf, 1);
9468 if(ret < 0) goto err;
9470 reg = 0x10c0 ;
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;
9475 reg = 0x10c0 ;
9476 ret = usb_microdia_control_read(dev, reg, buf, 1);
9477 if(ret < 0) goto err;
9479 reg = 0x10c0 ;
9480 ret = usb_microdia_control_read(dev, reg, buf, 1);
9481 if(ret < 0) goto err;
9483 reg = 0x10c0 ;
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;
9488 reg = 0x10c0 ;
9489 ret = usb_microdia_control_read(dev, reg, buf, 1);
9490 if(ret < 0) goto err;
9492 reg = 0x10c0 ;
9493 ret = usb_microdia_control_read(dev, reg, buf, 1);
9494 if(ret < 0) goto err;
9496 reg = 0x10c0 ;
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;
9501 reg = 0x10c0 ;
9502 ret = usb_microdia_control_read(dev, reg, buf, 1);
9503 if(ret < 0) goto err;
9505 reg = 0x10c0 ;
9506 ret = usb_microdia_control_read(dev, reg, buf, 1);
9507 if(ret < 0) goto err;
9509 reg = 0x10c0 ;
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;
9514 reg = 0x10c0 ;
9515 ret = usb_microdia_control_read(dev, reg, buf, 1);
9516 if(ret < 0) goto err;
9518 reg = 0x10c0 ;
9519 ret = usb_microdia_control_read(dev, reg, buf, 1);
9520 if(ret < 0) goto err;
9522 reg = 0x10c0 ;
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;
9527 reg = 0x10c0 ;
9528 ret = usb_microdia_control_read(dev, reg, buf, 1);
9529 if(ret < 0) goto err;
9531 reg = 0x10c0 ;
9532 ret = usb_microdia_control_read(dev, reg, buf, 1);
9533 if(ret < 0) goto err;
9535 reg = 0x10c0 ;
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;
9540 reg = 0x10c0 ;
9541 ret = usb_microdia_control_read(dev, reg, buf, 1);
9542 if(ret < 0) goto err;
9544 reg = 0x10c0 ;
9545 ret = usb_microdia_control_read(dev, reg, buf, 1);
9546 if(ret < 0) goto err;
9548 reg = 0x1182 ;
9549 buf[0] = 0x01;
9550 ret = usb_microdia_control_write(dev, reg, buf, 1);
9551 if(ret < 0) goto err;
9553 reg = 0x10c0 ;
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;
9558 reg = 0x10c0 ;
9559 ret = usb_microdia_control_read(dev, reg, buf, 1);
9560 if(ret < 0) goto err;
9562 reg = 0x10c0 ;
9563 ret = usb_microdia_control_read(dev, reg, buf, 1);
9564 if(ret < 0) goto err;
9566 reg = 0x10c0 ;
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;
9571 reg = 0x10c0 ;
9572 ret = usb_microdia_control_read(dev, reg, buf, 1);
9573 if(ret < 0) goto err;
9575 reg = 0x10c0 ;
9576 ret = usb_microdia_control_read(dev, reg, buf, 1);
9577 if(ret < 0) goto err;
9579 reg = 0x10c0 ;
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;
9584 reg = 0x10c0 ;
9585 ret = usb_microdia_control_read(dev, reg, buf, 1);
9586 if(ret < 0) goto err;
9588 reg = 0x10c0 ;
9589 ret = usb_microdia_control_read(dev, reg, buf, 1);
9590 if(ret < 0) goto err;
9592 reg = 0x10c0 ;
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;
9597 reg = 0x10c0 ;
9598 ret = usb_microdia_control_read(dev, reg, buf, 1);
9599 if(ret < 0) goto err;
9601 reg = 0x10c0 ;
9602 ret = usb_microdia_control_read(dev, reg, buf, 1);
9603 if(ret < 0) goto err;
9605 reg = 0x10c0 ;
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;
9610 reg = 0x10c0 ;
9611 ret = usb_microdia_control_read(dev, reg, buf, 1);
9612 if(ret < 0) goto err;
9614 reg = 0x10c0 ;
9615 ret = usb_microdia_control_read(dev, reg, buf, 1);
9616 if(ret < 0) goto err;
9618 reg = 0x10c0 ;
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;
9623 reg = 0x10c0 ;
9624 ret = usb_microdia_control_read(dev, reg, buf, 1);
9625 if(ret < 0) goto err;
9627 reg = 0x10c0 ;
9628 ret = usb_microdia_control_read(dev, reg, buf, 1);
9629 if(ret < 0) goto err;
9631 reg = 0x10c0 ;
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;
9636 reg = 0x10c0 ;
9637 ret = usb_microdia_control_read(dev, reg, buf, 1);
9638 if(ret < 0) goto err;
9640 reg = 0x10c0 ;
9641 ret = usb_microdia_control_read(dev, reg, buf, 1);
9642 if(ret < 0) goto err;
9644 reg = 0x10c0 ;
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;
9649 reg = 0x10c0 ;
9650 ret = usb_microdia_control_read(dev, reg, buf, 1);
9651 if(ret < 0) goto err;
9653 reg = 0x10c0 ;
9654 ret = usb_microdia_control_read(dev, reg, buf, 1);
9655 if(ret < 0) goto err;
9657 reg = 0x118c ;
9658 buf[0] = 0x20;
9659 ret = usb_microdia_control_write(dev, reg, buf, 1);
9660 if(ret < 0) goto err;
9662 reg = 0x118d ;
9663 buf[0] = 0x20;
9664 ret = usb_microdia_control_write(dev, reg, buf, 1);
9665 if(ret < 0) goto err;
9667 reg = 0x118e ;
9668 buf[0] = 0x20;
9669 ret = usb_microdia_control_write(dev, reg, buf, 1);
9670 if(ret < 0) goto err;
9672 reg = 0x118f ;
9673 buf[0] = 0x20;
9674 ret = usb_microdia_control_write(dev, reg, buf, 1);
9675 if(ret < 0) goto err;
9677 reg = 0x11ba ;
9678 buf[0] = 0x0a;
9679 ret = usb_microdia_control_write(dev, reg, buf, 1);
9680 if(ret < 0) goto err;
9682 reg = 0x118c ;
9683 buf[0] = 0x20;
9684 ret = usb_microdia_control_write(dev, reg, buf, 1);
9685 if(ret < 0) goto err;
9687 reg = 0x118d ;
9688 buf[0] = 0x20;
9689 ret = usb_microdia_control_write(dev, reg, buf, 1);
9690 if(ret < 0) goto err;
9692 reg = 0x118e ;
9693 buf[0] = 0x20;
9694 ret = usb_microdia_control_write(dev, reg, buf, 1);
9695 if(ret < 0) goto err;
9697 reg = 0x118f ;
9698 buf[0] = 0x20;
9699 ret = usb_microdia_control_write(dev, reg, buf, 1);
9700 if(ret < 0) goto err;
9702 reg = 0x118b ;
9703 buf[0] = 0x10;
9704 ret = usb_microdia_control_write(dev, reg, buf, 1);
9705 if(ret < 0) goto err;
9707 reg = 0x1190 ;
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;
9712 reg = 0x10e1 ;
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;
9717 reg = 0x10e1 ;
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;
9722 reg = 0x10e1 ;
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;
9727 reg = 0x10e1 ;
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;
9732 reg = 0x10e1 ;
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;
9737 reg = 0x10e1 ;
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;
9742 reg = 0x10e1 ;
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;
9747 reg = 0x10e1 ;
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;
9752 reg = 0x10e1 ;
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;
9757 reg = 0x10f7 ;
9758 buf[0] = 0x05;
9759 ret = usb_microdia_control_write(dev, reg, buf, 1);
9760 if(ret < 0) goto err;
9762 reg = 0x10f6 ;
9763 buf[0] = 0x20;
9764 ret = usb_microdia_control_write(dev, reg, buf, 1);
9765 if(ret < 0) goto err;
9767 reg = 0x10e1 ;
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;
9772 reg = 0x10f8 ;
9773 buf[0] = 0x14;
9774 ret = usb_microdia_control_write(dev, reg, buf, 1);
9775 if(ret < 0) goto err;
9777 reg = 0x10fa ;
9778 buf[0] = 0xff;
9779 ret = usb_microdia_control_write(dev, reg, buf, 1);
9780 if(ret < 0) goto err;
9782 reg = 0x10f9 ;
9783 buf[0] = 0x00;
9784 ret = usb_microdia_control_write(dev, reg, buf, 1);
9785 if(ret < 0) goto err;
9787 reg = 0x10f9 ;
9788 buf[0] = 0x00;
9789 ret = usb_microdia_control_write(dev, reg, buf, 1);
9790 if(ret < 0) goto err;
9792 reg = 0x11ba ;
9793 buf[0] = 0x0a;
9794 ret = usb_microdia_control_write(dev, reg, buf, 1);
9795 if(ret < 0) goto err;
9797 reg = 0x11bc ;
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;
9802 reg = 0x11c0 ;
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;
9807 reg = 0x118c ;
9808 buf[0] = 0x20;
9809 ret = usb_microdia_control_write(dev, reg, buf, 1);
9810 if(ret < 0) goto err;
9812 reg = 0x118d ;
9813 buf[0] = 0x20;
9814 ret = usb_microdia_control_write(dev, reg, buf, 1);
9815 if(ret < 0) goto err;
9817 reg = 0x118e ;
9818 buf[0] = 0x20;
9819 ret = usb_microdia_control_write(dev, reg, buf, 1);
9820 if(ret < 0) goto err;
9822 reg = 0x118f ;
9823 buf[0] = 0x20;
9824 ret = usb_microdia_control_write(dev, reg, buf, 1);
9825 if(ret < 0) goto err;
9827 reg = 0x11a5 ;
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;
9832 reg = 0x11af ;
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;
9837 reg = 0x11b3 ;
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;
9842 reg = 0x10e0 ;
9843 buf[0] = 0x47;
9844 ret = usb_microdia_control_write(dev, reg, buf, 1);
9845 if(ret < 0) goto err;
9847 reg = 0x1061 ;
9848 buf[0] = 0x01;
9849 ret = usb_microdia_control_write(dev, reg, buf, 1);
9850 if(ret < 0) goto err;
9852 reg = 0x10e0 ;
9853 buf[0] = 0x67;
9854 ret = usb_microdia_control_write(dev, reg, buf, 1);
9855 if(ret < 0) goto err;
9857 reg = 0x1100 ;
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;
9862 reg = 0x1140 ;
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;
9867 reg = 0x10e0 ;
9868 buf[0] = 0x47;
9869 ret = usb_microdia_control_write(dev, reg, buf, 1);
9870 if(ret < 0) goto err;
9872 reg = 0x1061 ;
9873 buf[0] = 0x03;
9874 ret = usb_microdia_control_write(dev, reg, buf, 1);
9875 if(ret < 0) goto err;
9877 reg = 0x10e0 ;
9878 buf[0] = 0x4b;
9879 ret = usb_microdia_control_write(dev, reg, buf, 1);
9880 if(ret < 0) goto err;
9882 reg = 0x1189 ;
9883 buf[0] = 0xd0;
9884 ret = usb_microdia_control_write(dev, reg, buf, 1);
9885 if(ret < 0) goto err;
9887 reg = 0x11bc ;
9888 buf[0] = 0x00;
9889 ret = usb_microdia_control_write(dev, reg, buf, 1);
9890 if(ret < 0) goto err;
9892 reg = 0x11bd ;
9893 buf[0] = 0x00;
9894 ret = usb_microdia_control_write(dev, reg, buf, 1);
9895 if(ret < 0) goto err;
9897 reg = 0x11be ;
9898 buf[0] = 0x00;
9899 ret = usb_microdia_control_write(dev, reg, buf, 1);
9900 if(ret < 0) goto err;
9902 reg = 0x11bf ;
9903 buf[0] = 0x00;
9904 ret = usb_microdia_control_write(dev, reg, buf, 1);
9905 if(ret < 0) goto err;
9907 reg = 0x10c0 ;
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;
9912 reg = 0x10c0 ;
9913 ret = usb_microdia_control_read(dev, reg, buf, 1);
9914 if(ret < 0) goto err;
9916 reg = 0x10c0 ;
9917 ret = usb_microdia_control_read(dev, reg, buf, 1);
9918 if(ret < 0) goto err;
9920 reg = 0x10c0 ;
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;
9925 reg = 0x10c0 ;
9926 ret = usb_microdia_control_read(dev, reg, buf, 1);
9927 if(ret < 0) goto err;
9929 reg = 0x10c0 ;
9930 ret = usb_microdia_control_read(dev, reg, buf, 1);
9931 if(ret < 0) goto err;
9933 reg = 0x10c0 ;
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;
9938 reg = 0x10c0 ;
9939 ret = usb_microdia_control_read(dev, reg, buf, 1);
9940 if(ret < 0) goto err;
9942 reg = 0x10c0 ;
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;
9947 reg = 0x10c0 ;
9948 ret = usb_microdia_control_read(dev, reg, buf, 1);
9949 if(ret < 0) goto err;
9951 reg = 0x10c0 ;
9952 ret = usb_microdia_control_read(dev, reg, buf, 1);
9953 if(ret < 0) goto err;
9955 reg = 0x1180 ;
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;
9960 reg = 0x10fb ;
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;
9965 reg = 0x1189 ;
9966 buf[0] = 0xd0;
9967 ret = usb_microdia_control_write(dev, reg, buf, 1);
9968 if(ret < 0) goto err;
9970 reg = 0x11a1 ;
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;
9975 reg = 0x11ab ;
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;
9980 reg = 0x1061 ;
9981 buf[0] = 0x03;
9982 ret = usb_microdia_control_write(dev, reg, buf, 1);
9983 if(ret < 0) goto err;
9985 reg = 0x11ba ;
9986 buf[0] = 0x0a;
9987 ret = usb_microdia_control_write(dev, reg, buf, 1);
9988 if(ret < 0) goto err;
9990 reg = 0x11b9 ;
9991 buf[0] = 0x00;
9992 ret = usb_microdia_control_write(dev, reg, buf, 1);
9993 if(ret < 0) goto err;
9995 reg = 0x11ba ;
9996 buf[0] = 0x0b;
9997 ret = usb_microdia_control_write(dev, reg, buf, 1);
9998 if(ret < 0) goto err;
10000 reg = 0x1061 ;
10001 buf[0] = 0x01;
10002 ret = usb_microdia_control_write(dev, reg, buf, 1);
10003 if(ret < 0) goto err;
10005 reg = 0x1000 ;
10006 buf[0] = 0x78;
10007 ret = usb_microdia_control_write(dev, reg, buf, 1);
10008 if(ret < 0) goto err;
10010 reg = 0x1002 ;
10011 buf[0] = 0x08;
10012 ret = usb_microdia_control_write(dev, reg, buf, 1);
10013 if(ret < 0) goto err;
10015 reg = 0x1002 ;
10016 buf[0] = 0x08;
10017 ret = usb_microdia_control_write(dev, reg, buf, 1);
10018 if(ret < 0) goto err;
10020 reg = 0x11b8 ;
10021 buf[0] = 0xfa;
10022 ret = usb_microdia_control_write(dev, reg, buf, 1);
10023 if(ret < 0) goto err;
10025 reg = 0x118a ;
10026 buf[0] = 0x02;
10027 ret = usb_microdia_control_write(dev, reg, buf, 1);
10028 if(ret < 0) goto err;
10030 reg = 0x0395 ;
10031 buf[0] = 0x02;
10032 ret = usb_microdia_control_write(dev, reg, buf, 1);
10033 if(ret < 0) goto err;
10035 reg = 0x11b8 ;
10036 buf[0] = 0xf8;
10037 ret = usb_microdia_control_write(dev, reg, buf, 1);
10038 if(ret < 0) goto err;
10040 reg = 0x11b8 ;
10041 ret = usb_microdia_control_read(dev, reg, buf, 1);
10042 if(ret < 0) goto err;
10044 reg = 0x11b8 ;
10045 buf[0] = 0xf9;
10046 ret = usb_microdia_control_write(dev, reg, buf, 1);
10047 if(ret < 0) goto err;
10049 reg = 0x11b8 ;
10050 ret = usb_microdia_control_read(dev, reg, buf, 1);
10051 if(ret < 0) goto err;
10053 reg = 0x11b8 ;
10054 buf[0] = 0x7a;
10055 ret = usb_microdia_control_write(dev, reg, buf, 1);
10056 if(ret < 0) goto err;
10058 reg = 0x11b8 ;
10059 ret = usb_microdia_control_read(dev, reg, buf, 1);
10060 if(ret < 0) goto err;
10062 reg = 0x11b8 ;
10063 buf[0] = 0x7b;
10064 ret = usb_microdia_control_write(dev, reg, buf, 1);
10065 if(ret < 0) goto err;
10067 reg = 0x11b8 ;
10068 ret = usb_microdia_control_read(dev, reg, buf, 1);
10069 if(ret < 0) goto err;
10071 reg = 0x11b8 ;
10072 buf[0] = 0x7c;
10073 ret = usb_microdia_control_write(dev, reg, buf, 1);
10074 if(ret < 0) goto err;
10076 reg = 0x11b8 ;
10077 ret = usb_microdia_control_read(dev, reg, buf, 1);
10078 if(ret < 0) goto err;
10080 reg = 0x11b8 ;
10081 buf[0] = 0xfd;
10082 ret = usb_microdia_control_write(dev, reg, buf, 1);
10083 if(ret < 0) goto err;
10085 reg = 0x11b8 ;
10086 ret = usb_microdia_control_read(dev, reg, buf, 1);
10087 if(ret < 0) goto err;
10089 reg = 0x11b8 ;
10090 buf[0] = 0xfa;
10091 ret = usb_microdia_control_write(dev, reg, buf, 1);
10092 if(ret < 0) goto err;
10094 reg = 0x10c0 ;
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;
10099 reg = 0x10c0 ;
10100 ret = usb_microdia_control_read(dev, reg, buf, 1);
10101 if(ret < 0) goto err;
10103 reg = 0x10c0 ;
10104 ret = usb_microdia_control_read(dev, reg, buf, 1);
10105 if(ret < 0) goto err;
10107 reg = 0x10c0 ;
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;
10112 reg = 0x10c0 ;
10113 ret = usb_microdia_control_read(dev, reg, buf, 1);
10114 if(ret < 0) goto err;
10116 reg = 0x10c0 ;
10117 ret = usb_microdia_control_read(dev, reg, buf, 1);
10118 if(ret < 0) goto err;
10120 reg = 0x10c0 ;
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;
10125 reg = 0x10c0 ;
10126 ret = usb_microdia_control_read(dev, reg, buf, 1);
10127 if(ret < 0) goto err;
10129 reg = 0x10c0 ;
10130 ret = usb_microdia_control_read(dev, reg, buf, 1);
10131 if(ret < 0) goto err;
10133 reg = 0x10c0 ;
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;
10138 reg = 0x10c0 ;
10139 ret = usb_microdia_control_read(dev, reg, buf, 1);
10140 if(ret < 0) goto err;
10142 reg = 0x10c0 ;
10143 ret = usb_microdia_control_read(dev, reg, buf, 1);
10144 if(ret < 0) goto err;
10146 reg = 0x10c0 ;
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;
10151 reg = 0x10c0 ;
10152 ret = usb_microdia_control_read(dev, reg, buf, 1);
10153 if(ret < 0) goto err;
10155 reg = 0x10c0 ;
10156 ret = usb_microdia_control_read(dev, reg, buf, 1);
10157 if(ret < 0) goto err;
10159 reg = 0x10c0 ;
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;
10164 reg = 0x10c0 ;
10165 ret = usb_microdia_control_read(dev, reg, buf, 1);
10166 if(ret < 0) goto err;
10168 reg = 0x10c0 ;
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;
10173 reg = 0x10c0 ;
10174 ret = usb_microdia_control_read(dev, reg, buf, 1);
10175 if(ret < 0) goto err;
10177 reg = 0x10c2 ;
10178 ret = usb_microdia_control_read(dev, reg, buf, 5);
10179 if(ret < 0) goto err;
10181 reg = 0x10c0 ;
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;
10186 reg = 0x10c0 ;
10187 ret = usb_microdia_control_read(dev, reg, buf, 1);
10188 if(ret < 0) goto err;
10190 reg = 0x10c0 ;
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;
10195 reg = 0x10c0 ;
10196 ret = usb_microdia_control_read(dev, reg, buf, 1);
10197 if(ret < 0) goto err;
10199 reg = 0x10c2 ;
10200 ret = usb_microdia_control_read(dev, reg, buf, 5);
10201 if(ret < 0) goto err;
10203 reg = 0x10c0 ;
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;
10208 reg = 0x10c0 ;
10209 ret = usb_microdia_control_read(dev, reg, buf, 1);
10210 if(ret < 0) goto err;
10212 reg = 0x10c0 ;
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;
10217 reg = 0x10c0 ;
10218 ret = usb_microdia_control_read(dev, reg, buf, 1);
10219 if(ret < 0) goto err;
10221 reg = 0x10c2 ;
10222 ret = usb_microdia_control_read(dev, reg, buf, 5);
10223 if(ret < 0) goto err;
10225 reg = 0x10c0 ;
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;
10230 reg = 0x10c0 ;
10231 ret = usb_microdia_control_read(dev, reg, buf, 1);
10232 if(ret < 0) goto err;
10234 reg = 0x10c0 ;
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;
10239 reg = 0x10c0 ;
10240 ret = usb_microdia_control_read(dev, reg, buf, 1);
10241 if(ret < 0) goto err;
10243 reg = 0x10c2 ;
10244 ret = usb_microdia_control_read(dev, reg, buf, 5);
10245 if(ret < 0) goto err;
10247 reg = 0x1061 ;
10248 buf[0] = 0x03;
10249 ret = usb_microdia_control_write(dev, reg, buf, 1);
10250 if(ret < 0) goto err;
10252 reg = 0x1007 ;
10253 buf[0] = 0x20;
10254 ret = usb_microdia_control_write(dev, reg, buf, 1);
10255 if(ret < 0) goto err;
10257 reg = 0x1006 ;
10258 buf[0] = 0x00;
10259 ret = usb_microdia_control_write(dev, reg, buf, 1);
10260 if(ret < 0) goto err;
10262 reg = 0x10e1 ;
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;
10267 reg = 0x10c0 ;
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;
10272 reg = 0x10c0 ;
10273 ret = usb_microdia_control_read(dev, reg, buf, 1);
10274 if(ret < 0) goto err;
10276 reg = 0x10c0 ;
10277 ret = usb_microdia_control_read(dev, reg, buf, 1);
10278 if(ret < 0) goto err;
10280 reg = 0x10c0 ;
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;
10285 reg = 0x10c0 ;
10286 ret = usb_microdia_control_read(dev, reg, buf, 1);
10287 if(ret < 0) goto err;
10289 reg = 0x10c0 ;
10290 ret = usb_microdia_control_read(dev, reg, buf, 1);
10291 if(ret < 0) goto err;
10293 reg = 0x10c0 ;
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;
10298 reg = 0x10c0 ;
10299 ret = usb_microdia_control_read(dev, reg, buf, 1);
10300 if(ret < 0) goto err;
10302 reg = 0x10c0 ;
10303 ret = usb_microdia_control_read(dev, reg, buf, 1);
10304 if(ret < 0) goto err;
10306 reg = 0x10c0 ;
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;
10311 reg = 0x10c0 ;
10312 ret = usb_microdia_control_read(dev, reg, buf, 1);
10313 if(ret < 0) goto err;
10315 reg = 0x10c0 ;
10316 ret = usb_microdia_control_read(dev, reg, buf, 1);
10317 if(ret < 0) goto err;
10319 reg = 0x10c0 ;
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;
10324 reg = 0x10c0 ;
10325 ret = usb_microdia_control_read(dev, reg, buf, 1);
10326 if(ret < 0) goto err;
10328 reg = 0x10c0 ;
10329 ret = usb_microdia_control_read(dev, reg, buf, 1);
10330 if(ret < 0) goto err;
10332 reg = 0x10e1 ;
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;
10337 reg = 0x10c0 ;
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;
10342 reg = 0x10c0 ;
10343 ret = usb_microdia_control_read(dev, reg, buf, 1);
10344 if(ret < 0) goto err;
10346 reg = 0x10c0 ;
10347 ret = usb_microdia_control_read(dev, reg, buf, 1);
10348 if(ret < 0) goto err;
10350 reg = 0x10e1 ;
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;
10355 reg = 0x10c0 ;
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;
10360 reg = 0x10c0 ;
10361 ret = usb_microdia_control_read(dev, reg, buf, 1);
10362 if(ret < 0) goto err;
10364 reg = 0x10c0 ;
10365 ret = usb_microdia_control_read(dev, reg, buf, 1);
10366 if(ret < 0) goto err;
10368 reg = 0x10c0 ;
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;
10373 reg = 0x10c0 ;
10374 ret = usb_microdia_control_read(dev, reg, buf, 1);
10375 if(ret < 0) goto err;
10377 reg = 0x10c0 ;
10378 ret = usb_microdia_control_read(dev, reg, buf, 1);
10379 if(ret < 0) goto err;
10381 reg = 0x10c0 ;
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;
10386 reg = 0x10c0 ;
10387 ret = usb_microdia_control_read(dev, reg, buf, 1);
10388 if(ret < 0) goto err;
10390 reg = 0x10c0 ;
10391 ret = usb_microdia_control_read(dev, reg, buf, 1);
10392 if(ret < 0) goto err;
10394 reg = 0x118c ;
10395 buf[0] = 0x20;
10396 ret = usb_microdia_control_write(dev, reg, buf, 1);
10397 if(ret < 0) goto err;
10399 reg = 0x118d ;
10400 buf[0] = 0x20;
10401 ret = usb_microdia_control_write(dev, reg, buf, 1);
10402 if(ret < 0) goto err;
10404 reg = 0x118e ;
10405 buf[0] = 0x20;
10406 ret = usb_microdia_control_write(dev, reg, buf, 1);
10407 if(ret < 0) goto err;
10409 reg = 0x118f ;
10410 buf[0] = 0x20;
10411 ret = usb_microdia_control_write(dev, reg, buf, 1);
10412 if(ret < 0) goto err;
10414 reg = 0x10c0 ;
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;
10419 reg = 0x10c0 ;
10420 ret = usb_microdia_control_read(dev, reg, buf, 1);
10421 if(ret < 0) goto err;
10423 reg = 0x10c0 ;
10424 ret = usb_microdia_control_read(dev, reg, buf, 1);
10425 if(ret < 0) goto err;
10427 reg = 0x10c0 ;
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;
10432 reg = 0x10c0 ;
10433 ret = usb_microdia_control_read(dev, reg, buf, 1);
10434 if(ret < 0) goto err;
10436 reg = 0x10c0 ;
10437 ret = usb_microdia_control_read(dev, reg, buf, 1);
10438 if(ret < 0) goto err;
10440 reg = 0x10c0 ;
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;
10445 reg = 0x10c0 ;
10446 ret = usb_microdia_control_read(dev, reg, buf, 1);
10447 if(ret < 0) goto err;
10449 reg = 0x10c0 ;
10450 ret = usb_microdia_control_read(dev, reg, buf, 1);
10451 if(ret < 0) goto err;
10453 reg = 0x118c ;
10454 buf[0] = 0x20;
10455 ret = usb_microdia_control_write(dev, reg, buf, 1);
10456 if(ret < 0) goto err;
10458 reg = 0x118d ;
10459 buf[0] = 0x20;
10460 ret = usb_microdia_control_write(dev, reg, buf, 1);
10461 if(ret < 0) goto err;
10463 reg = 0x118e ;
10464 buf[0] = 0x20;
10465 ret = usb_microdia_control_write(dev, reg, buf, 1);
10466 if(ret < 0) goto err;
10468 reg = 0x118f ;
10469 buf[0] = 0x20;
10470 ret = usb_microdia_control_write(dev, reg, buf, 1);
10471 if(ret < 0) goto err;
10473 reg = 0x10c0 ;
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;
10478 reg = 0x10c0 ;
10479 ret = usb_microdia_control_read(dev, reg, buf, 1);
10480 if(ret < 0) goto err;
10482 reg = 0x10c0 ;
10483 ret = usb_microdia_control_read(dev, reg, buf, 1);
10484 if(ret < 0) goto err;
10486 reg = 0x10c0 ;
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;
10491 reg = 0x10c0 ;
10492 ret = usb_microdia_control_read(dev, reg, buf, 1);
10493 if(ret < 0) goto err;
10495 reg = 0x10c0 ;
10496 ret = usb_microdia_control_read(dev, reg, buf, 1);
10497 if(ret < 0) goto err;
10499 reg = 0x10c0 ;
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;
10504 reg = 0x10c0 ;
10505 ret = usb_microdia_control_read(dev, reg, buf, 1);
10506 if(ret < 0) goto err;
10508 reg = 0x10c0 ;
10509 ret = usb_microdia_control_read(dev, reg, buf, 1);
10510 if(ret < 0) goto err;
10512 reg = 0x118c ;
10513 buf[0] = 0x20;
10514 ret = usb_microdia_control_write(dev, reg, buf, 1);
10515 if(ret < 0) goto err;
10517 reg = 0x118d ;
10518 buf[0] = 0x20;
10519 ret = usb_microdia_control_write(dev, reg, buf, 1);
10520 if(ret < 0) goto err;
10522 reg = 0x118e ;
10523 buf[0] = 0x20;
10524 ret = usb_microdia_control_write(dev, reg, buf, 1);
10525 if(ret < 0) goto err;
10527 reg = 0x118f ;
10528 buf[0] = 0x20;
10529 ret = usb_microdia_control_write(dev, reg, buf, 1);
10530 if(ret < 0) goto err;
10532 reg = 0x10c0 ;
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;
10537 reg = 0x10c0 ;
10538 ret = usb_microdia_control_read(dev, reg, buf, 1);
10539 if(ret < 0) goto err;
10541 reg = 0x10c0 ;
10542 ret = usb_microdia_control_read(dev, reg, buf, 1);
10543 if(ret < 0) goto err;
10545 reg = 0x118c ;
10546 buf[0] = 0x20;
10547 ret = usb_microdia_control_write(dev, reg, buf, 1);
10548 if(ret < 0) goto err;
10550 reg = 0x118d ;
10551 buf[0] = 0x20;
10552 ret = usb_microdia_control_write(dev, reg, buf, 1);
10553 if(ret < 0) goto err;
10555 reg = 0x118e ;
10556 buf[0] = 0x20;
10557 ret = usb_microdia_control_write(dev, reg, buf, 1);
10558 if(ret < 0) goto err;
10560 reg = 0x118f ;
10561 buf[0] = 0x20;
10562 ret = usb_microdia_control_write(dev, reg, buf, 1);
10563 if(ret < 0) goto err;
10565 reg = 0x1007 ;
10566 buf[0] = 0x20;
10567 ret = usb_microdia_control_write(dev, reg, buf, 1);
10568 if(ret < 0) goto err;
10570 reg = 0x1006 ;
10571 buf[0] = 0x20;
10572 ret = usb_microdia_control_write(dev, reg, buf, 1);
10573 if(ret < 0) goto err;
10578 /* END OF MICRODIA 6288 START STREAM */
10580 return 0;
10581 err:
10582 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg, ret);
10583 return ret;
10586 /**
10587 * @brief From UsbSnoop-plugin-parsed.log
10589 * @param dev
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)
10599 int i;
10600 int ret = 0;
10601 __u8 buf[8];
10603 __u8 data_15[] = {
10604 0x00, 0x1a, 0x34, 0x27, 0x20, 0xa0, 0x34, 0x69, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00
10607 __u8 data_17[] = {
10608 0x08, 0x22, 0x44, 0x63, 0x7d, 0x92, 0xa3, 0xaf, 0xbc, 0xc4, 0xcd, 0xd5, 0xdc, 0xe1, 0xe8, 0xef,
10609 0xf7
10612 __u8 data_21[] = {
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
10657 buf[0] = 0x00;
10658 ret += usb_microdia_control_write(dev, 0xf1, buf, 1); // Reset cam
10660 buf[0] = 0x23;
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");
10667 return -ENODEV;
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");
10674 return -ENODEV;
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);
10693 buf[0] = 0x73;
10694 ret += usb_microdia_control_write(dev, 0x02, buf, 1);
10696 buf[0] = 0x64;
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);
10703 buf[0] = 0x64;
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);
10711 // Sensor stuff
10712 for (i = 0; i < 2; i++){
10713 ret += usb_microdia_control_write(dev, 0x08, om6802_sensor[i], 8);
10714 msleep(1);
10717 buf[0] = 0x71;
10718 ret += usb_microdia_control_write(dev, 0x02, buf, 1);
10720 // Sensor stuff
10721 for (i = 2; i < 11; i++){
10722 ret += usb_microdia_control_write(dev, 0x08, om6802_sensor[i], 8);
10723 msleep(1);
10726 buf[0] = 0x71;
10727 ret += usb_microdia_control_write(dev, 0x02, buf, 1);
10728 ret += usb_microdia_control_write(dev, 0x02, buf, 1); // URB 1780
10730 buf[0] = 0x28;
10731 ret += usb_microdia_control_write(dev, 0x15, buf, 1);
10733 buf[0] = 0x1e;
10734 ret += usb_microdia_control_write(dev, 0x16, buf, 1);
10736 buf[0] = 0x51;
10737 ret += usb_microdia_control_write(dev, 0x12, buf, 1);
10739 buf[0] = 0x01;
10740 ret += usb_microdia_control_write(dev, 0x13, buf, 1);
10742 buf[0] = 0x45;
10743 ret += usb_microdia_control_write(dev, 0x18, buf, 1);
10745 buf[0] = 0x6a;
10746 ret += usb_microdia_control_write(dev, 0xd2, buf, 1);
10748 buf[0] = 0x50;
10749 ret += usb_microdia_control_write(dev, 0xd3, buf, 1);
10751 buf[0] = 0x00;
10752 ret += usb_microdia_control_write(dev, 0xc6, buf, 1);
10753 ret += usb_microdia_control_write(dev, 0xc7, buf, 1);
10755 buf[0] = 0x50;
10756 ret += usb_microdia_control_write(dev, 0xc8, buf, 1);
10758 buf[0] = 0x3c;
10759 ret += usb_microdia_control_write(dev, 0xc9, buf, 1);
10761 buf[0] = 0x45;
10762 ret += usb_microdia_control_write(dev, 0x18, buf, 1);
10764 buf[0] = 0x64;
10765 ret += usb_microdia_control_write(dev, 0x17, buf, 1);
10767 buf[0] = 0x20;
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);
10772 buf[0] = 0x00;
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);
10784 buf[0] = 0x08;
10785 ret += usb_microdia_control_write(dev, 0x9a, buf, 1);
10787 buf[0] = 0x10;
10788 ret += usb_microdia_control_write(dev, 0x99, buf, 1);
10790 ret += usb_microdia_control_write(dev, 0x84, data_21, 21); // URB 1811
10792 buf[0] = 0x20;
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);
10797 // Sensor Stuff
10798 for (i = 11; i < 15; i++){
10799 ret += usb_microdia_control_write(dev, 0x08, om6802_sensor[i], 8);
10800 msleep(1);
10803 buf[0] = 0x34;
10804 ret += usb_microdia_control_write(dev, 0x05, buf, 1);
10805 buf[0] = 0x27;
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);
10817 buf[0] = 0x42;
10818 ret += usb_microdia_control_write(dev, 0x01, buf, 1);
10820 buf[0] = 0x64;
10821 ret += usb_microdia_control_write(dev, 0x17, buf, 1);
10823 // Sensor Stuff
10824 for (i = 15; i < 19; i++){
10825 ret += usb_microdia_control_write(dev, 0x08, om6802_sensor[i], 8);
10826 msleep(1);
10829 buf[0] = 0x28;
10830 ret += usb_microdia_control_write(dev, 0x05, buf, 1);
10832 buf[0] = 0x54;
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
10837 buf[0] = 0x45;
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
10846 buf[0] = 0x05;
10847 ret += usb_microdia_control_write(dev, 0x18, buf, 1);
10849 buf[0] = 0x71;
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);
10856 buf[0] = 0x64;
10857 ret += usb_microdia_control_write(dev, 0x17, buf, 1);
10859 // Command to start streaming
10860 // Sensor on, clk 24MHz, video enabled
10861 buf[0] = 0x46;
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
10868 if (ret != 624)
10869 UDIA_DEBUG("Some read or write were not successful in Start Stream\n");
10871 return 0;
10875 int dev_microdia_stop_stream(struct usb_microdia *dev)
10877 int ret = -ENODEV;
10878 if(dev && dev->stop_stream)
10879 ret = dev->stop_stream(dev);
10881 return ret;
10885 * @brief From stop.htm
10887 * @param dev
10889 * @returns 0
10891 * @author GWater
10893 * For SN9C201 with MI1310.
10894 * This function has not been tested yet.
10896 int microdia_6242_stop_stream(struct usb_microdia *dev)
10898 __u8 buf[3];
10900 __u8 only10c0[3] = {0x0d, 0x00, 0x00};
10902 buf[0] = 0x01;
10903 usb_microdia_control_write(dev, 0x1061, buf, 1);
10905 buf[0] = 0x60;
10906 usb_microdia_control_write(dev, 0x1007, buf, 1);
10908 buf[0] = 0x00;
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]);
10914 buf[0] = 0x38;
10915 usb_microdia_control_write(dev, 0x1000, buf, 1);
10917 buf[0] = 0x6b;
10918 usb_microdia_control_write(dev, 0x11b8, buf, 1);
10920 buf[0] = 0x60;
10921 usb_microdia_control_write(dev, 0x1007, buf, 1);
10923 buf[0] = 0x20;
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:
10932 * buf[0] = 0x00;
10933 * usb_microdia_control_write(dev, 0x1066, buf, 1);
10936 return 0;
10939 /**
10940 * @brief From stopstream.log
10942 * @param dev
10944 * @returns 0
10946 * @author GWater
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)
10955 __u8 buf[3];
10957 buf[0] = 0x01;
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.
10964 buf[0] = 0x20;
10965 usb_microdia_control_write(dev, 0x1007, buf, 1);
10967 buf[0] = 0x20;
10968 usb_microdia_control_write(dev, 0x1006, buf, 1);
10970 buf[0] = 0x3c;
10971 usb_microdia_control_write(dev, 0x1000, buf, 1);
10973 buf[0] = 0x6a;
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);
10981 return 0;
10984 int microdia_624f_stop_stream(struct usb_microdia *dev)
10986 int ret;
10987 __u16 command;
10988 __u8 buf[3];
10990 buf[0] = 0x02;
10991 command = 0x1066;
10992 ret = usb_microdia_control_write(dev, command, buf, 1);
10993 if(ret < 0) goto err;
10995 buf[0] = 0x01;
10996 command = 0x1061;
10997 ret = usb_microdia_control_write(dev, command, buf, 1);
10998 if(ret < 0) goto err;
11000 buf[0] = 0x38;
11001 command = 0x1000;
11002 ret = usb_microdia_control_write(dev, command, buf, 1);
11003 if(ret < 0) goto err;
11005 buf[0] = 0x6a;
11006 command = 0x11b8;
11007 ret = usb_microdia_control_write(dev, command, buf, 1);
11008 if(ret < 0) goto err;
11010 buf[0] = 0x20;
11011 command = 0x1007;
11012 ret = usb_microdia_control_write(dev, command, buf, 1);
11013 if(ret < 0) goto err;
11015 buf[0] = 0x20;
11016 command = 0x1006;
11017 ret = usb_microdia_control_write(dev, command, buf, 1);
11018 if(ret < 0) goto err;
11020 buf[0] = 0x98;
11021 buf[1] = 0xe7;
11022 buf[2] = 0x11;
11023 command = 0x1000;
11024 ret = usb_microdia_control_write(dev, command, buf, 3);
11025 if(ret < 0) goto err;
11027 command = 0x1045;
11028 ret = usb_microdia_control_read(dev, command, buf, 1);
11029 if(ret < 0) goto err;
11031 buf[0] = 0x0f;
11032 ret = usb_microdia_control_write(dev, command, buf, 1);
11033 if(ret < 0) goto err;
11035 return ret;
11037 err:
11038 UDIA_ERROR("command %x failed (%d)!\n", command, ret);
11039 return ret;
11042 int microdia_6260_stop_stream(struct usb_microdia *dev)
11044 int ret;
11045 __u8 buf[32];
11047 buf[0] = 0x01;
11048 ret = usb_microdia_control_write(dev, 0x1061, buf, 1);
11049 buf[0] = 0x38;
11050 ret = usb_microdia_control_write(dev, 0x1000, buf, 1);
11051 buf[0] = 0x6b;
11052 ret = usb_microdia_control_write(dev, 0x11b8, buf, 1);
11053 buf[0] = 0x20;
11054 ret = usb_microdia_control_write(dev, 0x1007, buf, 1);
11055 buf[0] = 0x20;
11056 ret = usb_microdia_control_write(dev, 0x1006, buf, 1);
11057 buf[0] = 0x98;
11058 buf[1] = 0xe7;
11059 buf[2] = 0x11;
11060 ret = usb_microdia_control_write(dev, 0x1000, buf, 3);
11061 buf[0] = 0x00;
11062 ret = usb_microdia_control_write(dev, 0x1066, buf, 1);
11063 ret = usb_microdia_control_read(dev, 0x1045, buf, 1);
11064 buf[0] = 0x0f;
11065 ret = usb_microdia_control_write(dev, 0x1045, buf, 1);
11066 buf[0] = 0x00;
11067 ret = usb_microdia_control_write(dev, 0x10c8, buf, 1);
11068 buf[0] = 0x80;
11069 ret = usb_microdia_control_write(dev, 0x1020, buf, 1);
11071 return ret;
11075 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
11077 * @param dev
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)
11090 int ret = 0;
11091 int retI2C = 0;
11092 __u8 buf[3];
11094 if (dev->sensor_slave_address == MT9V111_I2C_SLAVE_ADDRESS)
11096 buf[0] = 0x20;
11097 ret += usb_microdia_control_write(dev, 0x1007, buf, 1); // URB 3541
11098 buf[0] = 0x20;
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
11102 buf[0] = 0x01;
11103 ret += usb_microdia_control_write(dev, 0x1061, buf, 1); // URB 3544
11104 if (dev->sensor_slave_address == MT9V011_I2C_SLAVE_ADDRESS)
11106 buf[0] = 0x60;
11107 ret += usb_microdia_control_write(dev, 0x1007, buf, 1); // URB 3541
11108 buf[0] = 0x60;
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)
11128 buf[0] = 0x00;
11129 ret += usb_microdia_control_write(dev, 0x1066, buf, 1); // URB 3550
11131 if (ret < 9)
11133 UDIA_INFO("One ore more errors occured while stopping stream !\n");
11134 return -1;
11136 else
11137 return 0;
11140 int microdia_627b_stop_stream(struct usb_microdia *dev)
11142 int ret = 0;
11143 __u16 reg;
11144 __u8 buf[3];
11146 reg = 0x1007;
11147 buf[0] = 0x60;
11148 ret = usb_microdia_control_write(dev, reg, buf, 1);
11149 if(ret < 0) goto err;
11151 reg = 0x1006;
11152 buf[0] = 0x20;
11153 ret = usb_microdia_control_write(dev, reg, buf, 1);
11154 if(ret < 0) goto err;
11156 //reg = 0x1007;
11157 //buf[0] = 0x60;
11158 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11159 //if(ret < 0) goto err;
11161 //reg = 0x1006;
11162 //buf[0] = 0x20;
11163 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11164 //if(ret < 0) goto err;
11166 reg = 0x1061;
11167 buf[0] = 0x01;
11168 ret = usb_microdia_control_write(dev, reg, buf, 1);
11169 if(ret < 0) goto err;
11171 //reg = 0x1007;
11172 //buf[0] = 0x60;
11173 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11174 //if(ret < 0) goto err;
11176 //reg = 0x1006;
11177 //buf[0] = 0x20;
11178 //ret = usb_microdia_control_write(dev, reg, buf, 1);
11179 //if(ret < 0) goto err;
11181 reg = 0x1000;
11182 buf[0] = 0x38;
11183 ret = usb_microdia_control_write(dev, reg, buf, 1);
11184 if(ret < 0) goto err;
11186 reg = 0x11b8;
11187 buf[0] = 0x6b;
11188 ret = usb_microdia_control_write(dev, reg, buf, 1);
11189 if(ret < 0) goto err;
11191 reg = 0x1000;
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;
11196 reg = 0x1066;
11197 buf[0] = 0x00;
11198 ret = usb_microdia_control_write(dev, reg, buf, 1);
11199 if(ret < 0) goto err;
11201 return ret;
11202 err:
11203 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg, ret);
11204 return ret;
11207 /**
11208 * @brief From UsbSnoop-plugin-parsed.log
11210 * @param dev
11212 * @returns 0 (OK) or <0 (Error)
11214 * @author Vincent, Kuzja
11216 int microdia_6288_stop_stream(struct usb_microdia *dev)
11218 int ret = 0;
11219 __u16 reg;
11220 __u8 buf[8];
11222 reg = 0x1061 ;
11223 buf[0] = 0x01;
11224 ret = usb_microdia_control_write(dev, reg, buf, 1);
11225 if(ret < 0) goto err;
11227 reg = 0x1000 ;
11228 buf[0] = 0x38;
11229 ret = usb_microdia_control_write(dev, reg, buf, 1);
11230 if(ret < 0) goto err;
11232 reg = 0x11b8 ;
11233 buf[0] = 0xe9;
11234 ret = usb_microdia_control_write(dev, reg, buf, 1);
11235 if(ret < 0) goto err;
11237 reg = 0x1007 ;
11238 buf[0] = 0x20;
11239 ret = usb_microdia_control_write(dev, reg, buf, 1);
11240 if(ret < 0) goto err;
11242 reg = 0x1006 ;
11243 buf[0] = 0x20;
11244 ret = usb_microdia_control_write(dev, reg, buf, 1);
11245 if(ret < 0) goto err;
11247 reg = 0x1000 ;
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;
11252 reg = 0x1066 ;
11253 buf[0] = 0x00;
11254 ret = usb_microdia_control_write(dev, reg, buf, 1);
11255 if(ret < 0) goto err;
11257 return 0;
11258 err:
11259 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg, ret);
11260 return ret;
11263 /**
11264 * @brief From UsbSnoop-plugin-parsed.log
11266 * @param dev
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)
11276 int ret = 0;
11277 __u8 data;
11279 ret += usb_microdia_control_read(dev, 0x00, &data, 1);
11281 // Stop stream command
11282 data = 0x00;
11283 ret += usb_microdia_control_write(dev, 0x01, &data, 1);
11285 data = 0x00;
11286 ret += usb_microdia_control_write(dev, 0xf1, &data, 1);
11288 data = 0x01;
11289 ret += usb_microdia_control_write(dev, 0xf1, &data, 1);
11291 if(ret != 4)
11292 UDIA_DEBUG("Some read or write were not successful in Stop Stream\n");
11294 return 0;
11299 int microdia_624f_set_exposure(struct usb_microdia *dev)
11301 int ret = 0;
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);
11311 return ret;
11314 int microdia_624f_flip_detect(struct usb_microdia *dev)
11316 int ret = 0;
11317 __u8 val;
11319 ret = usb_microdia_control_read(dev, 0x1009, &val, 1);
11320 if (ret < 0) return -EAGAIN;
11321 if (val & 0x01) {
11322 dev->vsettings.vflip = 1;
11324 else {
11325 dev->vsettings.vflip = 0;
11328 return ret;
11331 int microdia_6260_flip_detect(struct usb_microdia *dev)
11333 const __u8 flip_bit = 0x01;
11334 int ret = 0;
11335 __u8 val;
11336 static __u8 flip_reg = flip_bit;
11337 __u8 vflip;
11339 ret = usb_microdia_control_read(dev, 0x1009, &val, 1);
11340 if (ret < 0)
11341 return -EAGAIN;
11342 if (flip_reg != (val & flip_bit)) {
11343 if (val & flip_bit)
11344 vflip = 0;
11345 else
11346 vflip = 1;
11347 ret = ov7670_auto_flip(dev, vflip);
11348 flip_reg = (val & flip_bit);
11351 return ret;