3 * @author Nicolas VIVIEN
7 * @brief Device specific functions
9 * @note Copyright (C) Nicolas VIVIEN
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the Free Software
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 #include <linux/errno.h>
29 #include <linux/string.h>
39 int dev_microdia_init_camera(struct usb_microdia
*dev
)
45 * @brief Set USB-bandwidth to maximum
47 * @param dev Pointer to device structure
49 * @returns 0 or negative error value
51 int dev_microdia_camera_on(struct usb_microdia
*dev
)
54 struct usb_device
*udev
= dev
->udev
;
56 ret
= usb_set_interface(udev
, 0, 8);
59 UDIA_ERROR("usb_set_interface failed !\n");
65 * @brief Set USB-bandwidth to minimum
67 * @param dev Pointer to device structure
69 * @returns 0 or negative error value
71 int dev_microdia_camera_off(struct usb_microdia
*dev
)
74 struct usb_device
*udev
= dev
->udev
;
76 ret
= usb_set_interface(udev
, 0, 0);
79 UDIA_ERROR("usb_set_interface failed !\n");
85 * @brief Wrapper function for camera-setting functions
87 * @param dev Pointer to device structure
91 int dev_microdia_camera_settings(struct usb_microdia
*dev
)
93 dev_microdia_camera_set_contrast(dev
);
94 dev_microdia_camera_set_brightness(dev
);
95 dev_microdia_camera_set_gamma(dev
);
96 dev_microdia_camera_set_exposure(dev
);
97 dev_microdia_camera_set_hvflip(dev
);
98 dev_microdia_camera_set_sharpness(dev
);
99 dev_microdia_camera_set_rgb_gain(dev
);
100 dev_microdia_camera_set_auto_exposure(dev
);
101 dev_microdia_camera_set_auto_whitebalance(dev
);
106 * @brief Wrapper function for device-specific contrast functions
108 * @param dev Pointer to device structure
110 * @returns 0 or negative error value
112 int dev_microdia_camera_set_contrast(struct usb_microdia
*dev
)
115 if (dev
&& dev
->set_contrast
)
116 ret
= dev
->set_contrast(dev
);
121 * @brief Wrapper function for device-specific brightness functions
123 * @param dev Pointer to device structure
125 * @returns 0 or negative error value
127 int dev_microdia_camera_set_brightness(struct usb_microdia
*dev
)
130 if (dev
&& dev
->set_brightness
)
131 ret
= dev
->set_brightness(dev
);
136 * @brief Wrapper function for device-specific gamma functions
138 * @param dev Pointer to device structure
140 * @returns 0 or negative error value
142 int dev_microdia_camera_set_gamma(struct usb_microdia
*dev
)
145 if (dev
&& dev
->set_gamma
)
146 ret
= dev
->set_gamma(dev
);
151 * @brief Wrapper function for device-specific exposure functions
153 * @param dev Pointer to device structure
155 * @returns 0 or negative error value
157 int dev_microdia_camera_set_exposure(struct usb_microdia
*dev
)
159 if (dev
->set_exposure
!= NULL
)
160 return dev
->set_exposure(dev
);
166 * @brief Wrapper function for device-specific hvflip functions
168 * @param dev Pointer to device structure
170 * @returns 0 or negative error value
172 int dev_microdia_camera_set_hvflip(struct usb_microdia
*dev
)
175 if (dev
&& dev
->set_hvflip
)
176 ret
= dev
->set_hvflip(dev
);
182 * @brief Wrapper function for device-specific sharpness functions
184 * @param dev Pointer to device structure
186 * @returns 0 or negative error value
188 int dev_microdia_camera_set_sharpness(struct usb_microdia
*dev
)
191 if (dev
&& dev
->set_sharpness
)
192 ret
= dev
->set_sharpness(dev
);
198 * @brief Wrapper function for device-specific rgb-gain functions
200 * @param dev Pointer to device structure
202 * @returns 0 or negative error value
204 int dev_microdia_camera_set_rgb_gain(struct usb_microdia
*dev
)
207 if (dev
&& dev
->set_rgb_gain
)
208 ret
= dev
->set_rgb_gain(dev
);
214 * @brief Wrapper function for device-specific auto-exposure functions
216 * @param dev Pointer to device structure
218 * @returns 0 or negative error value
220 int dev_microdia_camera_set_auto_exposure(struct usb_microdia
*dev
)
223 if (dev
&& dev
->set_auto_exposure
)
224 ret
= dev
->set_auto_exposure(dev
);
230 * @brief Wrapper function for device-specific auto-whitebalance functions
232 * @param dev Pointer to device structure
234 * @returns 0 or negative error value
236 int dev_microdia_camera_set_auto_whitebalance(struct usb_microdia
*dev
)
239 if (dev
&& dev
->set_auto_whitebalance
)
240 ret
= dev
->set_auto_whitebalance(dev
);
247 * @brief Wrapper function for device-specific initialization functions
249 * @param dev Pointer to device structure
251 * @returns 0 or negative error value
253 int dev_microdia_initialize_device(struct usb_microdia
*dev
)
257 if (dev
&& dev
->initialize
)
258 ret
= dev
->initialize(dev
);
264 * @brief From init-physical-replug.log
272 * For SN9C201 with MI1300.
275 int microdia_6240_initialize(struct usb_microdia
*dev
)
281 * @brief From start.log (14 jun 2008)
289 * For SN9C201 with MI1300.
292 int microdia_6240_start_stream(struct usb_microdia
*dev
)
299 /* Setup the bridge registers */
300 static __u16 bridge6240_init
[][2] = {
1025 static __u8 mi1300_init
[][2] = {
1212 /* initialize SN9C201 for 6240 */
1213 for (i
= 0; i
< ARRAY_SIZE(bridge6240_init
); i
++) {
1214 reg
= bridge6240_init
[i
][0];
1215 value
[0] = bridge6240_init
[i
][1];
1216 ret
= usb_microdia_control_write(dev
, reg
, value
, 1);
1218 UDIA_INFO("6240 Bridge: Inititialization Error (%d) on array line %d\n", ret
, i
);
1223 /* initialize the Bridge to I2C interface */
1224 ret
= sn9c20x_i2c_initialize(dev
);
1226 /* initialize the Sensor MI 1300 */
1227 for (i
= 0; i
< ARRAY_SIZE(mi1300_init
); i
++) {
1228 reg
= mi1300_init
[i
][0];
1229 value
[0] = mi1300_init
[i
][1];
1230 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1231 reg
, dev
->sensor_flags
, value
);
1233 UDIA_INFO("Sensor MI 1300: Inititialization Error (%d) on array line %d\n", ret
, i
);
1238 UDIA_INFO("...start function completed without errors.\n");
1243 * @brief From stop-close-amcap.log
1251 * For SN9C201 with MI1300. Comments from parser-usbsnoop(updated_13Mar2008).pl output
1254 int microdia_6240_stop_stream(struct usb_microdia
*dev
)
1261 static __u8 mi1300_stop
[][2] = {
1266 static __u16 bridge6240_stop
[][2] = {
1278 UDIA_INFO("Stopping camera...\n");
1280 for (i
= 0; i
< ARRAY_SIZE(mi1300_stop
); i
++) {
1281 reg
= mi1300_stop
[i
][0];
1282 value
[0] = mi1300_stop
[i
][1];
1283 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
1284 reg
, dev
->sensor_flags
, value
);
1286 UDIA_INFO("Sensor MI 1300: Stop Sequence Error (%d) on array line %d\n", ret
, i
);
1291 for (i
= 0; i
< ARRAY_SIZE(bridge6240_stop
); i
++) {
1292 reg
= bridge6240_stop
[i
][0];
1293 value
[0] = bridge6240_stop
[i
][1];
1294 ret
= usb_microdia_control_write(dev
, reg
, value
, 1);
1296 UDIA_INFO("6240 Bridge: Stop Sequence Error (%d) on array line %d\n", ret
, i
);
1305 * @brief From init.sequence.log
1313 * For SN9C201 with SOI968.
1314 * Tests showed this function is actually unnecessary.
1315 * Nevertheless the reads may give us valuable values we don't know about yet.
1317 int microdia_624e_initialize(struct usb_microdia
*dev
)
1321 usb_microdia_control_read(dev
, 0x130d, &buf
, 1);
1322 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
1328 * @brief From UsbSnoop-plugin-parsed.log
1334 int microdia_624f_initialize(struct usb_microdia
*dev
)
1336 /* Do nothing here */
1341 * @brief From UsbSnoop-plugin-parsed.log
1347 int microdia_6260_initialize(struct usb_microdia
*dev
)
1351 usb_microdia_control_read(dev
, 0x130d, &buf
, 1);
1352 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
1354 usb_microdia_control_write(dev
, 0x10c8, &buf
, 1);
1355 usb_microdia_control_read(dev
, 0x100a, &buf
, 1);
1357 usb_microdia_control_write(dev
, 0x100a, &buf
, 1);
1358 usb_microdia_control_read(dev
, 0x100b, &buf
, 1);
1360 usb_microdia_control_write(dev
, 0x100b, &buf
, 1);
1361 usb_microdia_control_read(dev
, 0x1001, &buf
, 1);
1363 usb_microdia_control_write(dev
, 0x1001, &buf
, 1);
1364 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
1366 usb_microdia_control_write(dev
, 0x1040, &buf
, 1);
1367 usb_microdia_control_read(dev
, 0x1045, &buf
, 1);
1369 usb_microdia_control_write(dev
, 0x1045, &buf
, 1);
1370 usb_microdia_control_read(dev
, 0x1046, &buf
, 1);
1372 usb_microdia_control_write(dev
, 0x1046, &buf
, 1);
1374 usb_microdia_control_write(dev
, 0x1045, &buf
, 1);
1376 usb_microdia_control_write(dev
, 0x1040, &buf
, 1);
1378 usb_microdia_control_write(dev
, 0x1020, &buf
, 1);
1384 * @brief From 6 init-logs
1388 * @returns 0 (ok) or -1 (error)
1392 * Windows driver versions: 5.5.8.12 and 5.7.23.000
1393 * Windows versions: 2000 and XP
1394 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
1396 * Comments behind read oprations contain HEX-values that appeared in the logs
1398 int microdia_6270_initialize(struct usb_microdia
*dev
)
1410 ret
+= usb_microdia_control_read(dev
, 0x130d, buf
, 1); /* URB 5 0x81,0x85,0x04,0x8b,0x02,... */
1412 ret
+= usb_microdia_control_read(dev
, 0x1040, buf
, 1); /* URB 6 0xe4,0xc4,0xa4,0x44,... */
1415 * THE OLD DRIVER 5.5.8.12 DOES AN ADDITIONAL WRITE HERE:
1417 * usb_microdia_control_write(dev, 0x10c8, buf, 1);
1420 ret
+= usb_microdia_control_read(dev
, 0x118a, buf
, 1); /* URB 7 0x05,0x7b,0x01,0x04,... */
1422 ret
+= usb_microdia_control_read(dev
, 0x0395, buf_0395
, 1); /* URB 8 0xc2,0x82,0x38,0x98,0x04,... */
1423 /* => this value will be rewritten to 0x118a and 0x0395 later (URBs 81+82) */
1426 ret
+= usb_microdia_control_write(dev
, 0x118a, buf
, 1); /* URB 9 */
1428 ret
+= usb_microdia_control_write(dev
, 0x0395, buf
, 1); /* URB 10 */
1430 ret
+= usb_microdia_control_read(dev
, 0x11b8, buf_11b8
, 1); /* URB 11 0xa0,0x00,0x24,... */
1431 /* => this value will be rewritten to 0x11b8 later (URB 83) */
1434 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 12 */
1436 ret
+= usb_microdia_control_read(dev
, 0x1000, buf_1000
, 5); /* URB 13 0x30 0xCF 0x00 0x03 (0x02 or 0x00) */
1437 /* => these values will be rewritten to 0x1000 later (URB 84) */
1439 buf
[0] = 0x70; buf
[1] = 0x00; buf
[2] = 0x18; buf
[3] = 0x00; buf
[4] = 0x00;
1440 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 5); /* URB 14 */
1442 ret
+= usb_microdia_control_read(dev
, 0x1060, buf_1060
, 2); /* URB 15 0x08 0x00 (always ???) */
1443 /* => this value will be rewritten to 0x1060 later (URB 85) */
1445 buf
[0] = 0x00; buf
[1] = 0x03;
1446 ret
+= usb_microdia_control_write(dev
, 0x1060, buf
, 2); /* URB 16 */
1448 /* initialize I2C registers to avoid getting no ACK at first I2C operation: */
1449 ret
+= sn9c20x_i2c_initialize(dev
);
1451 /* enable I2C communication (bit 0) */
1452 buf
[0] = 0x21; /* THE OLD DRIVER 5.5.8.12 WRITES 0x5d */
1453 ret
+= usb_microdia_control_write(dev
, 0x10c8, buf
, 1); /* URB 17 */
1455 /* probe sensor model: */
1456 retSP
= mt9vx11_sensor_probe(dev
); /* substitutes URBs 18-48 */
1457 if ((retSP
== 0) && (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
))
1458 /* switch (back) to IFP address space: */
1459 retASS
= mt9v111_select_address_space(dev
, MT9V111_ADDRESSSPACE_IFP
);
1461 ret
+= usb_microdia_control_write(dev
, 0x118a, buf_0395
, 1); /* URB 81 => write value read with URB 8 */
1463 ret
+= usb_microdia_control_write(dev
, 0x0395, buf_0395
, 1); /* URB 82 => write value read with URB 8 */
1465 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf_11b8
, 1); /* URB 83 => write value read with URB 11 */
1467 ret
+= usb_microdia_control_write(dev
, 0x1000, buf_1000
, 5); /* URB 84 => write value read with URB 13 */
1469 ret
+= usb_microdia_control_write(dev
, 0x1060, buf_1060
, 2); /* URB 85 => write value read with URB 15; (always 08 00 ???) */
1471 /* USB-interrupt-message: doesn't work yet (returns error -110) */
1472 /* 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 */
1475 * THE OLD DRIVER 5.5.8.12 DOES AN ADDITIONAL WRITE HERE:
1477 * usb_microdia_control_write(dev, 0x1020, wbuf, 1);
1480 if ((retSP
!= 0) || (retASS
!= 0) || (ret
< 33)) {
1482 UDIA_INFO("One ore more errors occured during initialization !\n");
1491 * @brief From UsbSnoop-plugin-parsed.log
1497 int microdia_627b_initialize(struct usb_microdia
*dev
)
1499 /* Apparently we don't need to write anything here */
1504 * @brief From init-start-stop-log (made by VÃctor M. Hernández Rocamora)
1508 * @returns 0 (ok) or -1 (error)
1512 * USB-Logger: SniffUSB 2.0
1514 * Comments behind read oprations contain HEX-values that appeared in the log
1516 int microdia_627f_initialize(struct usb_microdia
*dev
)
1521 ret
+= usb_microdia_control_read(dev
, 0x130d, buf
, 1); /* URB 5 0x81 */
1523 ret
+= usb_microdia_control_read(dev
, 0x1040, buf
, 1); /* URB 6 0xe4 */
1526 ret
+= usb_microdia_control_write(dev
, 0x10c8, buf
, 1); /* URB 7 */
1529 ret
+= usb_microdia_control_write(dev
, 0x1020, buf
, 1); /* URB 8 */
1531 ret
+= usb_microdia_control_read(dev
, 0x1045, buf
, 1); /* URB 9 0x0f */
1534 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); /* URB 10 */
1536 ret
+= usb_microdia_control_read(dev
, 0x1045, buf
, 1); /* URB 11 0x1f */
1539 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); /* URB 12 */
1541 ret
+= usb_microdia_control_read(dev
, 0x1045, buf
, 1); /* URB 13 0x0f */
1544 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); /* URB 14 */
1547 UDIA_INFO("One ore more errors occured during initialization !\n");
1554 * @brief From UsbSnoop-plugin-parsed.log
1558 * @returns 0 (OK) or <0 (Error)
1560 * @author Vincent, Kuzja
1562 int microdia_6288_initialize(struct usb_microdia
*dev
)
1570 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
1575 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
1584 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
1589 * @brief Wrapper function for device-specific startstream functions
1591 * @param dev Pointer to device structure
1595 int dev_microdia_start_stream(struct usb_microdia
*dev
)
1598 if (dev
&& dev
->start_stream
)
1599 ret
= dev
->start_stream(dev
);
1605 * @brief From start.htm
1613 * For SN9C201 with MI1310.
1614 * This function has not been tested yet.
1616 int microdia_6242_start_stream(struct usb_microdia
*dev
)
1622 0x01, 0x18, 0x00, 0x30, 0x00, 0x09, 0x00, 0xed,
1623 0x0f, 0xda, 0x0f, 0x3a, 0x00, 0x3a, 0x00, 0xd0,
1624 0x0f, 0xf7, 0x0f, 0x00, 0x00, 0x00, 0x60, 0x0a};
1627 0x02, 0x00, 0x02, 0x00, 0x50, 0x78, 0x00, 0x00,
1631 0x00, 0x20, 0x20, 0x20, 0x20, 0x00, 0x24, 0x3b,
1632 0x4f, 0x61, 0x71, 0x80, 0x8f, 0x9d, 0xab, 0xb8,
1633 0xc4, 0xd1, 0xdd, 0xe9, 0xf4, 0xff};
1635 __u8 qtable1
[64] = {
1636 0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
1637 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
1638 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
1639 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
1640 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
1641 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
1642 0x4f, 0x54, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
1643 0x64, 0x5c, 0x54, 0x64, 0x4b, 0x54, 0x58, 0x54};
1645 __u8 qtable2
[64] = {
1646 0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
1647 0x15, 0x26, 0x54, 0x36, 0x2e, 0x36, 0x54, 0x54,
1648 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1649 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1650 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1651 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1652 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1653 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54};
1655 __u8 first10c0
[7][3] = {
1665 __u8 second10c0a
[2][5] = {
1666 {0x01, 0x00, 0x0e, 0x00, 0x14},
1667 {0x03, 0x03, 0xc4, 0x05, 0x14}
1670 __u8 second10c0b
[3] =
1673 __u8 third10c0
[4][3] = {
1680 __u8 fourth10c0a
[3][3] = {
1686 __u8 fourth10c0b
[2][5] = {
1687 {0x2b, 0x01, 0x88, 0x01, 0x88},
1688 {0x2d, 0x01, 0x88, 0x01, 0x88}
1691 __u8 fifth10c0
[4][3] = {
1697 /* interrupt down */
1700 usb_microdia_control_write(dev
, 0x1066, buf
, 1); /* URB 1 */
1703 /* interrupt down */
1706 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
1709 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
1712 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
1715 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
1718 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
1721 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
1724 usb_microdia_control_write(dev
, 0x1020, buf
, 1);
1726 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20;
1727 buf
[3] = 0x10; buf
[4] = 0x08;
1728 usb_microdia_control_write(dev
, 0x1067, buf
, 5);
1730 buf
[0] = 0xb0; buf
[1] = dev
->sensor_slave_address
; buf
[2] = 0x0d;
1731 buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00;
1732 buf
[6] = 0x00; buf
[7] = 0x10; buf
[8] = 0x03;
1733 usb_microdia_control_write(dev
, 0x10c0, buf
, 9);
1735 usb_microdia_control_write(dev
, 0x10e0, urb10
, 24); /* URB 10 */
1737 buf
[0] = 0x00; buf
[1] = 0x00; buf
[3] = 0x00;
1738 usb_microdia_control_write(dev
, 0x10f8, buf
, 3);
1740 buf
[0] = 0x00; buf
[1] = 0x40; buf
[2] = 0x00;
1741 buf
[3] = 0xe0; buf
[4] = 0x03;
1742 usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
1744 usb_microdia_control_write(dev
, 0x1180, urb13
, 11);
1746 usb_microdia_control_write(dev
, 0x118b, urb14
, 22);
1748 buf
[0] = 0x00; buf
[1] = 0x00;
1749 usb_microdia_control_write(dev
, 0x11a1, buf
, 2);
1751 buf
[0] = 0x60; buf
[1] = 0x20; buf
[2] = 0x00;
1752 buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00;
1753 buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00;
1754 usb_microdia_control_write(dev
, 0x11b7, buf
, 9);
1757 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1760 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
1762 for (i
= 0; i
< 7; i
++)
1763 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1764 first10c0
[i
][0], dev
->sensor_flags
, &first10c0
[i
][1]); /* URB 9-48 */
1767 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
1770 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
1773 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 50 */
1776 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
1779 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
1782 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
1785 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
1788 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
1791 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
1794 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
1797 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
1800 usb_microdia_control_write(dev
, 0x11bf, buf
, 1);
1802 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
1803 second10c0a
[0][0], dev
->sensor_flags
, &second10c0a
[0][1]);
1805 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
1806 second10c0a
[1][0], dev
->sensor_flags
, &second10c0a
[1][1]);
1808 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
1809 0x09, dev
->sensor_flags
, NULL
);
1811 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1812 second10c0b
[0], dev
->sensor_flags
, &second10c0b
[1]);
1814 buf
[0] = 0x06; buf
[1] = 0x00; buf
[2] = 0x02;
1815 buf
[3] = 0x00; buf
[4] = 0x28; buf
[5] = 0x3c;
1816 usb_microdia_control_write(dev
, 0x1180, buf
, 6);
1818 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
1819 buf
[3] = 0xf0; buf
[4] = 0x00;
1820 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); /* URB 70 */
1823 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
1825 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
1826 usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
1828 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
1829 usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
1832 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
1835 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
1838 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
1841 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1844 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
1847 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
1850 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 80 */
1851 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1854 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1855 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1858 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1859 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1862 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1863 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1866 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1867 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1870 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 90 */
1872 for (i
= 0; i
< 4; i
++)
1873 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1874 third10c0
[i
][0], dev
->sensor_flags
, &third10c0
[i
][1]); /* URB 97-106 */
1877 usb_microdia_control_write(dev
, 0x1180, buf
, 1);
1879 for (i
= 0; i
< 3; i
++)
1880 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1881 fourth10c0a
[i
][0], dev
->sensor_flags
, &fourth10c0a
[i
][1]);
1883 for (i
= 0; i
< 2; i
++)
1884 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
1885 fourth10c0b
[i
][0], dev
->sensor_flags
, &fourth10c0b
[i
][1]);
1887 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
1888 0x33, dev
->sensor_flags
, NULL
);
1890 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1891 first10c0
[0][0], dev
->sensor_flags
, &first10c0
[0][1]);
1894 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
1897 usb_microdia_control_write(dev
, 0x118b, buf
, 1);
1900 usb_microdia_control_write(dev
, 0x10f7, buf
, 1);
1903 usb_microdia_control_write(dev
, 0x10f8, buf
, 1);
1906 usb_microdia_control_write(dev
, 0x10fa, buf
, 1);
1909 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
1912 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
1915 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
1917 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
1918 usb_microdia_control_write(dev
, 0x11bc, buf
, 4);
1920 /* Set whole array buf to 0x00 */
1921 memset(buf
, 0x00, 48);
1922 usb_microdia_control_write(dev
, 0x11c0, buf
, 48);
1924 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a;
1925 buf
[3] = 0x05; buf
[4] = 0x04; buf
[5] = 0x3f;
1926 usb_microdia_control_write(dev
, 0x11a5, buf
, 6);
1928 buf
[0] = 0x14; buf
[1] = 0xec; buf
[2] = 0x0a; buf
[3] = 0xf6;
1929 usb_microdia_control_write(dev
, 0x11af, buf
, 4);
1931 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x2d; buf
[3] = 0xdd;
1932 usb_microdia_control_write(dev
, 0x11b3, buf
, 4);
1935 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
1938 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
1941 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
1943 usb_microdia_control_write(dev
, 0x1100, qtable1
, 64);
1945 usb_microdia_control_write(dev
, 0x1140, qtable2
, 64); /* URB 150 */
1948 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
1951 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
1954 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
1957 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
1960 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
1963 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
1966 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
1969 usb_microdia_control_write(dev
, 0x11bf, buf
, 1);
1971 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
1972 second10c0a
[0][0], dev
->sensor_flags
, &second10c0a
[0][1]);
1974 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
1975 second10c0a
[1][0], dev
->sensor_flags
, &second10c0a
[1][1]);
1977 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
1978 0x09, dev
->sensor_flags
, NULL
);
1980 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1981 second10c0b
[0], dev
->sensor_flags
, &second10c0b
[1]);
1983 buf
[0] = 0x06; buf
[1] = 0x00; buf
[2] = 0x02;
1984 buf
[3] = 0x00; buf
[4] = 0x28; buf
[5] = 0x3c;
1985 usb_microdia_control_write(dev
, 0x1180, buf
, 6);
1987 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
1988 buf
[3] = 0xf0; buf
[4] = 0x00;
1989 usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
1992 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
1994 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
1995 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); /* URB 170 */
1997 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
1998 usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
2001 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
2004 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
2007 usb_microdia_control_write(dev
, 0x11b9, buf
, 1);
2010 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
2013 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
2016 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
2019 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
2022 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
2025 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 180 */
2028 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
2031 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
2034 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2035 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2038 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2039 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2042 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2043 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2046 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2047 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 190 */
2050 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2051 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2054 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2056 for (i
= 0; i
< 3; i
++)
2057 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
2058 fifth10c0
[i
][0], dev
->sensor_flags
, &fifth10c0
[i
][1]); /* URB 200-205 */
2060 sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 2,
2061 0x00, dev
->sensor_flags
, buf
);
2062 /* __u8 result[2] = {buf[3], buf[4]}; */
2065 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
2072 * @brief From startstream.log
2080 * For SN9C201 with SOI968.
2081 * This is function triggers a working stream of image data and a glowing LED.
2083 int microdia_624e_start_stream(struct usb_microdia
*dev
)
2086 __u8 unknown1
[9] = { dev
->sensor_flags
, dev
->sensor_slave_address
,
2087 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
2180 __u8 qtable1
[64] = {
2181 0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
2182 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
2183 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
2184 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
2185 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
2186 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
2187 0x4f, 0x53, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
2188 0x64, 0x5c, 0x53, 0x64, 0x4b, 0x53, 0x58, 0x53
2191 __u8 qtable2
[64] = {
2192 0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
2193 0x15, 0x26, 0x53, 0x36, 0x2e, 0x36, 0x53, 0x53,
2194 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
2195 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
2196 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
2197 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
2198 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
2199 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53
2203 for (i
= 0; i
< ARRAY_SIZE(regs
); i
++) {
2206 ret
= usb_microdia_control_write(dev
, reg
, &value
, 1);
2208 UDIA_INFO("Bridge Init Error (%d). line %d\n", ret
, i
);
2213 memset(reg_11c0
, 0x00, 48);
2214 ret
= usb_microdia_control_write(dev
, 0x11c0, reg_11c0
, 48);
2218 ret
= usb_microdia_control_write(dev
, 0x1100, qtable1
, 64);
2222 ret
= usb_microdia_control_write(dev
, 0x1140, qtable2
, 64);
2226 /* this is the same register as the I2C write, not sure why
2227 * we're writing 9 bytes -- the SN9C102 docs say all writes
2228 * must be 8 bytes, but we don't have docs for SN9C20x */
2229 ret
= usb_microdia_control_write(dev
, 0x10c0, unknown1
, 9);
2233 if (dev
->sensor_init
)
2234 dev
->sensor_init(dev
);
2239 UDIA_ERROR("start stream: failed (%d)!\n", ret
);
2243 int microdia_624f_start_stream(struct usb_microdia
*dev
)
2246 __u8 unknown1
[9] = { dev
->sensor_flags
, dev
->sensor_slave_address
,
2247 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
2311 __u8 reg_11c0
[48] = {
2312 0x10, 0x21, 0x34, 0x40, 0x47, 0x4f, 0x57, 0x5f,
2313 0x64, 0x68, 0x6d, 0x73, 0x79, 0x80, 0x89, 0x97,
2314 0x0d, 0x1c, 0x2a, 0x33, 0x38, 0x3d, 0x44, 0x4a,
2315 0x4e, 0x52, 0x56, 0x5b, 0x61, 0x68, 0x6f, 0x7a,
2316 0x0d, 0x1a, 0x2a, 0x31, 0x36, 0x3b, 0x41, 0x47,
2317 0x4a, 0x4e, 0x53, 0x58, 0x5d, 0x64, 0x6b, 0x76
2320 __u8 qtable1
[64] = {
2321 0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
2322 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
2323 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
2324 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
2325 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
2326 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
2327 0x4f, 0x54, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
2328 0x64, 0x5c, 0x54, 0x64, 0x4b, 0x54, 0x58, 0x54
2331 __u8 qtable2
[64] = {
2332 0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
2333 0x15, 0x26, 0x54, 0x36, 0x2e, 0x36, 0x54, 0x54,
2334 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
2335 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
2336 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
2337 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
2338 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
2339 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54
2342 for (i
= 0; i
< ARRAY_SIZE(regs
); i
++) {
2345 ret
= usb_microdia_control_write(dev
, reg
, &value
, 1);
2347 UDIA_INFO("Bridge Init Error (%d). line %d\n", ret
, i
);
2352 ret
= usb_microdia_control_write(dev
, 0x11c0, reg_11c0
, 48);
2356 ret
= usb_microdia_control_write(dev
, 0x1100, qtable1
, 64);
2360 ret
= usb_microdia_control_write(dev
, 0x1140, qtable2
, 64);
2364 /* this is the same register as the I2C write, not sure why
2365 * we're writing 9 bytes -- the SN9C102 docs say all writes
2366 * must be 8 bytes, but we don't have docs for SN9C20x */
2367 ret
= usb_microdia_control_write(dev
, 0x10c0, unknown1
, 9);
2371 if (dev
->sensor_init
)
2372 dev
->sensor_init(dev
);
2377 UDIA_ERROR("start stream: failed (%d)!\n", ret
);
2381 int microdia_6260_start_stream(struct usb_microdia
*dev
)
2386 ret
= usb_microdia_control_read(dev
, 0x1045, buf
, 1);
2388 ret
= usb_microdia_control_write(dev
, 0x1045, buf
, 1);
2390 ret
= usb_microdia_control_write(dev
, 0x1066, buf
, 1);
2392 ret
= usb_microdia_control_write(dev
, 0x1007, buf
, 1);
2394 ret
= usb_microdia_control_write(dev
, 0x1006, buf
, 1);
2396 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
2398 ret
= usb_microdia_control_write(dev
, 0x1001, buf
, 1);
2400 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
2402 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
2404 ret
= usb_microdia_control_write(dev
, 0x1020, buf
, 1);
2406 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20; buf
[3] = 0x10;
2408 ret
= usb_microdia_control_write(dev
, 0x1067, buf
, 5);
2410 buf
[0] = 0x80; buf
[1] = 0x21; buf
[2] = 0x00; buf
[3] = 0x00;
2411 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
2413 ret
= usb_microdia_control_write(dev
, 0x10c0, buf
, 9);
2415 buf
[0] = 0x45; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30;
2416 buf
[4] = 0x00; buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed;
2417 buf
[8] = 0x0f; buf
[9] = 0xda; buf
[10] = 0x0f; buf
[11] = 0x3a;
2418 buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00; buf
[15] = 0xd0;
2419 buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
2420 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
2421 ret
= usb_microdia_control_write(dev
, 0x10e0, buf
, 24);
2423 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
2424 ret
= usb_microdia_control_write(dev
, 0x10f8, buf
, 3);
2426 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0;
2428 ret
= usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
2430 buf
[0] = 0x8a; buf
[1] = 0x8c; buf
[2] = 0x08;
2431 ret
= usb_microdia_control_write(dev
, 0x1188, buf
, 3);
2433 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20;
2434 buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b;
2435 buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80;
2436 buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8;
2437 buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
2438 buf
[20] = 0xf4; buf
[21] = 0xff;
2439 ret
= usb_microdia_control_write(dev
, 0x118b, buf
, 22);
2441 buf
[0] = 0x00; buf
[1] = 0x00;
2442 ret
= usb_microdia_control_write(dev
, 0x11a1, buf
, 2);
2444 buf
[0] = 0x60; buf
[1] = 0x28; buf
[2] = 0x00; buf
[3] = 0x00;
2445 buf
[4] = 0x00; buf
[5] = 0x40; buf
[6] = 0x01; buf
[7] = 0xf0;
2447 ret
= usb_microdia_control_write(dev
, 0x11b7, buf
, 9);
2450 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
2453 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2455 ret
= ov7670_initialise(dev
);
2459 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1, 0x3b, dev
->sensor_flags
, buf
);
2460 ret
= usb_microdia_control_read(dev
, 0x10c1, buf
, 1);
2462 ret
= usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
2464 /* TRY TO READ FROM EEPROM: */
2465 ret
= sn9c20x_read_i2c_data(dev
, 0x50, 1, 0x00, dev
->sensor_flags
, buf
);
2467 UDIA_INFO("No EEPROM found\n");
2469 UDIA_INFO("Read from EEPROM successful\n");
2472 ret
= usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
2474 ret
= usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
2476 ret
= usb_microdia_control_write(dev
, 0x1001, buf
, 1);
2478 ret
= usb_microdia_control_write(dev
, 0x1001, buf
, 1);
2480 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00;
2481 buf
[4] = 0x50; buf
[5] = 0x3c;
2482 ret
= usb_microdia_control_write(dev
, 0x1180, buf
, 6);
2484 buf
[0] = 0x00; buf
[1] = 0x40; buf
[2] = 0x00; buf
[3] = 0xf0;
2486 ret
= usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
2489 ret
= usb_microdia_control_write(dev
, 0x1189, buf
, 1);
2491 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0x50;
2492 ret
= usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
2494 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x3c;
2495 ret
= usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
2497 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
2499 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
2501 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
2503 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2505 ret
= usb_microdia_control_write(dev
, 0x118a, buf
, 1);
2507 ret
= usb_microdia_control_write(dev
, 0x0395, buf
, 1);
2509 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2510 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2512 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2513 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2515 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2516 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2518 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2519 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2521 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2522 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2524 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2525 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2527 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2529 /* OV7670 Intialise Part 2 */
2530 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00;
2531 buf
[4] = 0x50; buf
[5] = 0x3c;
2532 ret
= usb_microdia_control_write(dev
, 0x1180, buf
, 6);
2534 buf
[0] = 0x00; buf
[1] = 0x40; buf
[2] = 0x00; buf
[3] = 0xf0;
2536 ret
= usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
2539 ret
= usb_microdia_control_write(dev
, 0x1189, buf
, 1);
2541 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0x50;
2542 ret
= usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
2544 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x3c;
2545 ret
= usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
2548 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
2550 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
2552 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
2554 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
2556 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
2558 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2560 ret
= usb_microdia_control_write(dev
, 0x118a, buf
, 1);
2562 ret
= usb_microdia_control_write(dev
, 0x0395, buf
, 1);
2564 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2565 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2567 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2568 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2570 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2571 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2573 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2574 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2576 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2577 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2579 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2580 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2582 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2584 /* OV7670 Initialisation Part 3 Goes Here */
2586 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
2592 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
2596 * @returns 0 (ok) or -1 (error)
2600 * Windows driver versions: 5.7.23.000
2601 * Windows versions: 2000 and XP
2602 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
2603 * All logs were made using AMCAP with 640x480, RGB24
2605 int microdia_6270_start_stream(struct usb_microdia
*dev
)
2612 /* Check if sensor slave address is valid: */
2613 if ((dev
->sensor_slave_address
!= MT9V111_I2C_SLAVE_ADDRESS
) && (dev
->sensor_slave_address
!= MT9V011_I2C_SLAVE_ADDRESS
)) {
2614 UDIA_INFO("microdia_6270_start_stream(): Invalid sensor slave address !\n");
2618 /* <= INTERRUPT COMING BACK (URB 1953) */
2619 /* SWITCH TO ALTERNATE SETTINGS 8 (URB 1954) // NOT IN ALEX'S LOG */
2620 /* => INTERRUPT GOING DOWN (URB 1955) */
2623 usb_microdia_control_write(dev
, 0x1066, buf
, 1); /* URB 1956 */
2625 /* <= INTERRUPT COMING BACK (URB 1955) */
2626 /* => INTERRUPT GOING DOWN (URB 1957) */
2629 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 1958 */
2631 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 1959 */
2633 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 1960 */
2635 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 1961 */
2637 usb_microdia_control_write(dev
, 0x1020, buf
, 1); /* URB 1962 */
2638 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20; buf
[3] = 0x10; buf
[4] = 0x08;
2639 usb_microdia_control_write(dev
, 0x1067, buf
, 5); /* URB 1963 */
2641 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2642 /* STRANGE I2C MESSAGE: */
2644 /* - byte 8 = 0x00 at first start + first cycle */
2645 /* - procedure not complete: no wait/check for ack/error, no readout of 0x10c2 */
2646 /* - dummy writes at first cycle and read at second cycle, but there are many I2C messages in the meantime, so this should not work */
2648 /* AT FIRST START + FIRST CYCLE: */
2649 buf
[0] = 0x80; buf
[1] = dev
->sensor_slave_address
; buf
[2] = 0x00; buf
[3] = 0x00;
2650 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x03;
2651 /* AT ALL FURTHER STARTS + FIRST CYCLE: */
2652 /* MT9V111: I2C MESSAGE => IFP Register 0x33: Auto exposure */
2653 /* buf[0] = 0x90; buf[1] = dev->sensor_slave_address; buf[2] = 0x33; buf[3] = 0x00; */
2654 /* buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03; */
2655 /* MT9V011: ????????????????????????? */
2656 /* buf[0] = 0x90; buf[1] = dev->sensor_slave_address; buf[2] = 0x07; buf[3] = 0x00; */
2657 /* buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03; */
2658 /* ALWAYS AT 2nd AND FURTHER CYCLES: */
2660 /* buf[0] = 0xa2; buf[1] = 0x5c; buf[2] = 0x00; buf[3] = 0x36; */
2661 /* buf[4] = 0x00; buf[5] = 0x82; buf[6] = 0x3a; buf[7] = 0x10; buf[8] = 0x03; */
2662 /* => buf[3] to buf[6] simply contain bytes read with URB 2215 */
2664 /* buf[0] = 0xb0; buf[1] = 0x5d; buf[2] = 0x07; buf[3] = 0x00; */
2665 /* buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03; */
2666 usb_microdia_control_write(dev
, 0x10c0, buf
, 9); /* URB 1964 */
2667 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2669 buf
[0] = 0x45; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30;
2670 buf
[4] = 0x00; buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed;
2671 buf
[8] = 0x0f; buf
[9] = 0xda; buf
[10] = 0x0f; buf
[11] = 0x3a;
2672 buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00; buf
[15] = 0xd0;
2673 buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
2674 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
2675 usb_microdia_control_write(dev
, 0x10e0, buf
, 24); /* URB 1965 */
2676 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
2677 usb_microdia_control_write(dev
, 0x10f8, buf
, 3); /* URB 1966 */
2678 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
2679 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); /* URB 1967 */
2680 buf
[0] = 0x06; buf
[1] = 0x0c; buf
[2] = 0x08;
2681 usb_microdia_control_write(dev
, 0x1188, buf
, 3); /* URB 1968 */
2682 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20;
2683 buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b;
2684 buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80;
2685 buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8;
2686 buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
2687 buf
[20] = 0xf4; buf
[21] = 0xff;
2688 usb_microdia_control_write(dev
, 0x118b, buf
, 22); /* URB 1969 */
2689 buf
[0] = 0x00; buf
[1] = 0x00;
2690 usb_microdia_control_write(dev
, 0x11a1, buf
, 2); /* URB 1970 */
2691 buf
[0] = 0x60; buf
[1] = 0x28; buf
[2] = 0x00; buf
[3] = 0x08;
2692 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
2694 usb_microdia_control_write(dev
, 0x11b7, buf
, 9); /* URB 1971 */
2696 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 1972 */
2698 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 1973 */
2700 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2703 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2704 /* Write to IFP register 0x0d: Color Correction Register 8 */
2705 buf
[0] = 0x00; buf
[1] = 0x01;
2706 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
); /* URBs 1974-1976 */
2707 /* Write to IFP register 0x0d: Color Correction Register 8 */
2708 buf
[0] = 0x00; buf
[1] = 0x00; /* ??? */
2709 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
); /* URBs 1977-1979 */
2710 /* Writes to IFP registers 0x01: Register Address Space Selection */
2711 /* 0x02: Color Correction Register 1 */
2712 buf
[0] = 0x00; buf
[1] = 0x01; /* select IFP address space */
2713 buf
[2] = 0x00; buf
[3] = 0x16; /* ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
2714 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x01, dev
->sensor_flags
, buf
); /* URBs 1980-1982 */
2715 /* Writes to IFP registers 0x03: Color Correction Register 3 */
2716 /* 0x04: Color Correction Register 4 */
2717 buf
[0] = 0x01; buf
[1] = 0xe1; /* ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
2718 buf
[2] = 0x02; buf
[3] = 0x81; /* ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
2719 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x03, dev
->sensor_flags
, buf
); /* URBs 1983-1985 */
2720 /* Writes to IFP registers 0x05: Aperture Correction (Sharpening) */
2721 /* 0x06: Operating Mode Control */
2722 buf
[0] = 0x00; buf
[1] = 0x04; /* 100% sharpening, no automatic sharpness reduction at low light // AT FIRST START + FIRST CYCLE: 0x00 0x00: no sharpening */
2723 buf
[2] = 0x00; buf
[3] = 0x00; /* stop AWB at the current values, no on-the-fly defect correction, no auto exposure, + RESREVED option */
2724 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x05, dev
->sensor_flags
, buf
); /* URBs 1986-1988 */
2725 /* Writes to IFP registers 0x07: Image Flow Processor Soft Reset */
2726 /* 0x08: Output Format Control */
2727 buf
[0] = 0x30; buf
[1] = 0x02; /* reset // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
2728 buf
[2] = 0x04; buf
[3] = 0x80; /* bypass entire image processing, raw 8+2 Bayer data output directly */
2729 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x07, dev
->sensor_flags
, buf
); /* URBs 1989-1991 */
2730 /* "Dummy" write to IFP Register 0x11: Color Correction Register 12 */
2731 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x11, dev
->sensor_flags
, NULL
); /* URBs 1992-1993 */
2732 /* Write to register 0x01: Register address space selection */
2733 /* Write to sensor register 0x02: Column Start */
2734 buf
[0] = 0x00; buf
[1] = 0x04; /* select sensor address space */
2735 buf
[2] = 0x00; buf
[3] = 0x16; /* start with column 22 */
2736 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x01, dev
->sensor_flags
, buf
); /* URBs 1994-1996 */
2737 /* Writes to sensor registers 0x03: Window Height */
2738 /* 0x04: Window Width */
2739 buf
[0] = 0x01; buf
[1] = 0xe6; /* 486 */
2740 buf
[2] = 0x02; buf
[3] = 0x86; /* 646 */
2741 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x03, dev
->sensor_flags
, buf
); /* URBs 1997-1999 */
2742 /* Writes to sensor registers 0x05: Horizontal Blanking */
2743 /* 0x06: Vertical Blanking */
2744 buf
[0] = 0x00; buf
[1] = 0x04; /* 4 columns (pixel clocks) // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
2745 buf
[2] = 0x00; buf
[3] = 0x00; /* 0 rows */
2746 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x05, dev
->sensor_flags
, buf
); /* URBs 2000-2002 */
2747 /* Writes to sensor registers 0x07: Output Control */
2748 /* 0x08: Row Start */
2749 buf
[0] = 0x30; buf
[1] = 0x02; /* normal operation + chip enable + RESERVED options */
2750 buf
[2] = 0x00; buf
[3] = 0x08; /* row 8 */
2751 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x07, dev
->sensor_flags
, buf
); /* URBs 2003-2005 */
2752 /* "Dummy" write to sensor Register 0x11: UNDOCUMENTED */
2753 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x11, dev
->sensor_flags
, NULL
); /* URBs 2006-2007 */
2754 /* Writes to sensor registers 0x0c: Shutter Delay */
2755 /* 0x0d: Reset (Soft) (from MT9V011 datasheet) */
2756 buf
[0] = 0x00; buf
[1] = 0x00; /* 0 master clocks */
2757 buf
[2] = 0x00; buf
[3] = 0x00; /* return to normal operation */
2758 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0c, dev
->sensor_flags
, buf
); /* URBs 2008-2010 */
2759 /* Writes to sensor registers 0x0e: UNDOCUMENTED */
2760 /* 0x0f: UNDOCUMENTED */
2761 buf
[0] = 0x00; buf
[1] = 0x00;
2762 buf
[2] = 0x00; buf
[3] = 0x00;
2763 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0e, dev
->sensor_flags
, buf
); /* URBs 2011-2013 */
2764 /* Writes to sensor registers 0x10: UNDOCUMENTED */
2765 /* 0x11: UNDOCUMENTED */
2766 buf
[0] = 0x00; buf
[1] = 0x00;
2767 buf
[2] = 0x00; buf
[3] = 0x00;
2768 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x10, dev
->sensor_flags
, buf
); /* URBs 2014-2016 */
2769 /* Writes to sensor registers 0x12: 2X Zoom Col Start => 0x1e bit 0 must be set to activate zoom */
2770 /* 0x13: 2X Zoom Row Start => 0x1e bit 0 must be set to activate zoom */
2771 buf
[0] = 0x00; buf
[1] = 0xb0; /* column 176 */
2772 buf
[2] = 0x00; buf
[3] = 0x7c; /* row 124 */
2773 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x12, dev
->sensor_flags
, buf
); /* URBs 2017-2018 */
2774 /* Writes to sensor registers 0x14: UNDOCUMENTED */
2775 /* 0x15: UNDOCUMENTED */
2776 buf
[0] = 0x00; buf
[1] = 0x00;
2777 buf
[2] = 0x00; buf
[3] = 0x00;
2778 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x14, dev
->sensor_flags
, buf
); /* URBs 2019-2021 */
2779 /* Writes to sensor registers 0x16: UNDOCUMENTED */
2780 /* 0x17: UNDOCUMENTED */
2781 buf
[0] = 0x00; buf
[1] = 0x00;
2782 buf
[2] = 0x00; buf
[3] = 0x00;
2783 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x16, dev
->sensor_flags
, buf
); /* URBs 2022-2024 */
2784 /* Writes to sensor registers 0x18: UNDOCUMENTED */
2785 /* 0x19: UNDOCUMENTED */
2786 buf
[0] = 0x00; buf
[1] = 0x00;
2787 buf
[2] = 0x00; buf
[3] = 0x00;
2788 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x18, dev
->sensor_flags
, buf
); /* URBs 2025-2027 */
2789 /* Writes to sensor registers 0x1a: UNDOCUMENTED */
2790 /* 0x1b: UNDOCUMENTED */
2791 buf
[0] = 0x00; buf
[1] = 0x00;
2792 buf
[2] = 0x00; buf
[3] = 0x00;
2793 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1a, dev
->sensor_flags
, buf
); /* URBs 2028-2030 */
2794 /* Writes to sensor registers 0x1c: UNDOCUMENTED */
2795 /* 0x1d: UNDOCUMENTED */
2796 buf
[0] = 0x00; buf
[1] = 0x00;
2797 buf
[2] = 0x00; buf
[3] = 0x00;
2798 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1c, dev
->sensor_flags
, buf
); /* URBs 2031-2033 */
2799 /* Write to sensor register 0x30: RESERVED */
2800 buf
[0] = 0x00; buf
[1] = 0x00;
2801 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x30, dev
->sensor_flags
, buf
); /* URBs 2034-2036 */
2802 /* Write to sensor register 0x20: Read Mode */
2803 buf
[0] = 0x00; buf
[1] = 0x00; /* normal readout */
2804 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
); /* URBs 2037-2039 */
2805 /* Writes to sensor registers 0x30: RESERVED */
2806 /* 0x31: RESERVED */
2807 buf
[0] = 0x00; buf
[1] = 0x05;
2808 buf
[2] = 0x00; buf
[3] = 0x00;
2809 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x30, dev
->sensor_flags
, buf
); /* URBs 2040-2042 */
2810 /* "Dummy" write to sensor Register 0x34: RESERVED */
2811 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x34, dev
->sensor_flags
, NULL
); /* URBs 2043-2044 */
2812 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
2813 /* Write to sensor register 0x07: Output Control */
2814 buf
[0] = 0x00; buf
[1] = 0x02; /* chip enable, normal operation */
2815 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
2816 /* Write to sensor register 0x0d: Soft Reset */
2817 buf
[0] = 0x00; buf
[1] = 0x01; /* reset */
2818 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
);
2819 /* Write to sensor register 0x0d: Soft Reset */
2820 buf
[0] = 0x00; buf
[1] = 0x00; /* resume operation */
2821 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
);
2822 /* Writes to sensor registers 0x01: Row start */
2823 /* 0x02: Column Start */
2824 buf
[0] = 0x00; buf
[1] = 0x08; /* start with row 8 */
2825 buf
[2] = 0x00; buf
[3] = 0x16; /* start with column 22 */
2826 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x01, dev
->sensor_flags
, buf
);
2827 /* Writes to sensor registers 0x03: Window Height */
2828 /* 0x04: Window Width */
2829 buf
[0] = 0x01; buf
[1] = 0xe1; /* 481 */
2830 buf
[2] = 0x02; buf
[3] = 0x81; /* 641 */
2831 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x03, dev
->sensor_flags
, buf
);
2832 /* Writes to sensor registers 0x05: Horizontal Blanking */
2833 /* 0x06: Vertical Blanking */
2834 buf
[0] = 0x00; buf
[1] = 0x83; /* 131 columns (pixel clocks) */
2835 buf
[2] = 0x00; buf
[3] = 0x06; /* 6 rows */
2836 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x05, dev
->sensor_flags
, buf
);
2837 /* Write to sensor register 0x0d: Soft Reset */
2838 buf
[0] = 0x00; buf
[1] = 0x02; /* UNKNOWN */
2839 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
);
2840 /* Writes to sensor registers 0x0a: Pixel Clock Speed */
2841 /* 0x0b: Frame Restart */
2842 buf
[0] = 0x00; buf
[1] = 0x00; /* default */
2843 buf
[2] = 0x00; buf
[3] = 0x00; /* (has no effect/no restart) */
2844 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0a, dev
->sensor_flags
, buf
);
2845 /* Writes to sensor registers 0x0c: Shutter Delay */
2846 /* 0x0d: Soft Reset */
2847 buf
[0] = 0x00; buf
[1] = 0x00; /* 0 master clocks */
2848 buf
[2] = 0x00; buf
[3] = 0x00; /* resume operation */
2849 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0c, dev
->sensor_flags
, buf
);
2850 /* Writes to sensor registers 0x0e: UNDOCUMENTED */
2851 /* 0x0f: UNDOCUMENTED */
2852 buf
[0] = 0x00; buf
[1] = 0x00;
2853 buf
[2] = 0x00; buf
[3] = 0x00;
2854 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0e, dev
->sensor_flags
, buf
);
2855 /* Writes to sensor registers 0x10: UNDOCUMENTED */
2856 /* 0x11: UNDOCUMENTED */
2857 buf
[0] = 0x00; buf
[1] = 0x00;
2858 buf
[2] = 0x00; buf
[3] = 0x00;
2859 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x10, dev
->sensor_flags
, buf
);
2860 /* Writes to sensor registers 0x12: 2X Zoom Column Start (from MT9V111 datasheet) */
2861 /* 0x13: 2X Zoom Row Start (from MT9V111 datasheet) */
2862 buf
[0] = 0x00; buf
[1] = 0x00; /* column 0 => bit0 of reg 0x1e must be set to activate zoom */
2863 buf
[2] = 0x00; buf
[3] = 0x00; /* row 0 => bit0 of reg 0x1e must be set to activate zoom */
2864 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x12, dev
->sensor_flags
, buf
);
2865 /* Writes to sensor registers 0x14: UNDOCUMENTED */
2866 /* 0x15: UNDOCUMENTED */
2867 buf
[0] = 0x00; buf
[1] = 0x00;
2868 buf
[2] = 0x00; buf
[3] = 0x00;
2869 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x14, dev
->sensor_flags
, buf
);
2870 /* Writes to sensor registers 0x16: UNDOCUMENTED */
2871 /* 0x17: UNDOCUMENTED */
2872 buf
[0] = 0x00; buf
[1] = 0x00;
2873 buf
[2] = 0x00; buf
[3] = 0x00;
2874 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x16, dev
->sensor_flags
, buf
);
2875 /* Writes to sensor registers 0x18: UNDOCUMENTED */
2876 /* 0x19: UNDOCUMENTED */
2877 buf
[0] = 0x00; buf
[1] = 0x00;
2878 buf
[2] = 0x00; buf
[3] = 0x00;
2879 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x18, dev
->sensor_flags
, buf
);
2880 /* Writes to sensor registers 0x1a: UNDOCUMENTED */
2881 /* 0x1b: UNDOCUMENTED */
2882 buf
[0] = 0x00; buf
[1] = 0x00;
2883 buf
[2] = 0x00; buf
[3] = 0x00;
2884 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1a, dev
->sensor_flags
, buf
);
2885 /* Writes to sensor registers 0x1c: UNDOCUMENTED */
2886 /* 0x1d: UNDOCUMENTED */
2887 buf
[0] = 0x00; buf
[1] = 0x00;
2888 buf
[2] = 0x00; buf
[3] = 0x00;
2889 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1c, dev
->sensor_flags
, buf
);
2890 /* Write to sensor register 0x32: RESERVED */
2891 buf
[0] = 0x00; buf
[1] = 0x00;
2892 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x32, dev
->sensor_flags
, buf
);
2893 /* Writes to sensor registers 0x20: Read Mode */
2894 /* 0x21: RESERVED */
2895 buf
[0] = 0x11; buf
[1] = 0x01; /* output all frames (including bad frames) + UNDOCUMENTED */
2896 buf
[2] = 0x00; buf
[3] = 0x00;
2897 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x20, dev
->sensor_flags
, buf
);
2898 /* Writes to sensor registers 0x22: RESERVED */
2899 /* 0x23: UNDOCUMENTED */
2900 buf
[0] = 0x00; buf
[1] = 0x00;
2901 buf
[2] = 0x00; buf
[3] = 0x00;
2902 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x22, dev
->sensor_flags
, buf
);
2903 /* Writes to sensor registers 0x24: UNDOCUMENTED */
2904 /* 0x25: UNDOCUMENTED */
2905 buf
[0] = 0x00; buf
[1] = 0x00;
2906 buf
[2] = 0x00; buf
[3] = 0x00;
2907 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x24, dev
->sensor_flags
, buf
);
2908 /* Writes to sensor registers 0x26: UNDOCUMENTED */
2909 /* 0x27: RESERVED */
2910 buf
[0] = 0x00; buf
[1] = 0x00;
2911 buf
[2] = 0x00; buf
[3] = 0x24;
2912 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x26, dev
->sensor_flags
, buf
);
2913 /* "Dummy" write to sensor Register 0x30: RESERVED */
2914 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x30, dev
->sensor_flags
, NULL
);
2915 /* Writes to sensor registers 0x2f: RESERVED */
2916 /* 0x30: RESERVED */
2917 buf
[0] = 0xf7; buf
[1] = 0xb0;
2918 buf
[2] = 0x00; buf
[3] = 0x05;
2919 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2f, dev
->sensor_flags
, buf
);
2920 /* Writes to sensor registers 0x31: RESERVED */
2921 /* 0x32: RESERVED */
2922 buf
[0] = 0x00; buf
[1] = 0x00;
2923 buf
[2] = 0x00; buf
[3] = 0x00;
2924 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x31, dev
->sensor_flags
, buf
);
2925 /* Writes to sensor registers 0x33: RESERVED */
2926 /* 0x34: RESERVED */
2927 buf
[0] = 0x00; buf
[1] = 0x00;
2928 buf
[2] = 0x01; buf
[3] = 0x00;
2929 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x33, dev
->sensor_flags
, buf
);
2930 /* "Dummy" write to sensor Register 0x3b: RESERVED */
2931 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x3b, dev
->sensor_flags
, NULL
);
2932 /* Write to sensor register 0x3d: RESERVED */
2933 buf
[0] = 0x06; buf
[1] = 0x8f;
2934 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x3d, dev
->sensor_flags
, buf
);
2935 /* Writes to sensor registers 0x40: RESERVED */
2936 /* 0x41: RESERVED */
2937 buf
[0] = 0x01; buf
[1] = 0xe0;
2938 buf
[2] = 0x00; buf
[3] = 0xd1;
2939 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x40, dev
->sensor_flags
, buf
);
2940 /* Write to sensor register 0x44: UNDOCUMENTED */
2941 buf
[0] = 0x00; buf
[1] = 0x82;
2942 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x44, dev
->sensor_flags
, buf
);
2943 /* Writes to sensor registers 0x5a: RESERVED */
2944 /* 0x5b: RESERVED */
2945 buf
[0] = 0x00; buf
[1] = 0x00;
2946 buf
[2] = 0x00; buf
[3] = 0x00;
2947 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x5a, dev
->sensor_flags
, buf
);
2948 /* Writes to sensor registers 0x5c: RESERVED */
2949 /* 0x5d: RESERVED */
2950 buf
[0] = 0x00; buf
[1] = 0x00;
2951 buf
[2] = 0x00; buf
[3] = 0x00;
2952 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x5c, dev
->sensor_flags
, buf
);
2953 /* Writes to sensor registers 0x5e: RESERVED */
2954 /* 0x5f: RESERVED */
2955 buf
[0] = 0x00; buf
[1] = 0x00;
2956 buf
[2] = 0xa3; buf
[3] = 0x1d;
2957 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x5e, dev
->sensor_flags
, buf
);
2958 /* "Dummy" write to sensor Register 0x68: UNDOCUMENTED */
2959 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x68, dev
->sensor_flags
, NULL
);
2960 /* Write to sensor register 0x62: RESERVED */
2961 buf
[0] = 0x06; buf
[1] = 0x11;
2962 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x62, dev
->sensor_flags
, buf
);
2965 UDIA_INFO("1 or more errors occured in I2C-message-block 1 !\n");
2968 /* END OF I2C MESSAGES */
2969 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2971 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
2973 usb_microdia_control_write(dev
, 0x1007, buf
, 8);
2975 usb_microdia_control_write(dev
, 0x1006, buf
, 8);
2979 /* *** TEMPORARY SWITCH TO SLAVE ADDRESS 0x50, I2C READ ATTEMPT: */
2980 /* - WE CURRENTLY KNOW NO 6270 CAM THAT IS SUCCESSFULLY READ HERE */
2981 /* - IF READ FAILS, THIS IS NEVER DONE AGAIN (IN NEXT CYCLE OR FURTHER STARTS) */
2982 usb_microdia_control_read(dev
, 0x10c1, buf
, 1); /* returns 0x5c */
2984 usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
2985 retI2C
= sn9c20x_read_i2c_data(dev
, 0x50, 1, 0x00, SN9C20X_I2C_2WIRE
, buf
);
2987 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");
2989 usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
2992 buf
[0] = 0x47; /* ALEX: 0x44 */
2993 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2045 */
2994 buf
[0] = 0x47; /* ALEX: 0x04 */
2995 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2046 */
2997 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 2047 */
2999 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 2048 */
3000 buf
[0] = 0x84; /* ALEX: 0xc0 */
3001 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 2049 */
3004 usb_microdia_control_write(dev, 0x1001, buf, 1);
3007 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
3008 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
3011 /* Writes to sensor registers 0x02: Column Start */
3012 /* 0x03: Window Height */
3013 buf
[0] = 0x00; buf
[1] = 0x16; /* coulmn 22 */
3014 buf
[2] = 0x01; buf
[3] = 0xe1; /* 481 */
3015 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x02, dev
->sensor_flags
, buf
); /* URBs 2050-2052 */
3016 /* Writes to sensor registers 0x04: Window Width */
3017 /* 0x05: Horizontal Blanking */
3018 buf
[0] = 0x02; buf
[1] = 0x81; /* 641 */
3019 buf
[2] = 0x00; buf
[3] = 0x04; /* 4 columns (pixel clocks) // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
3020 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x04, dev
->sensor_flags
, buf
); /* URBs 2053-2055 */
3021 /* Writes to sensor registers 0x06: Vertical Blanking */
3022 /* 0x07: Output Control */
3023 buf
[0] = 0x00; buf
[1] = 0x00; /* 0 rows */
3024 buf
[2] = 0x30; buf
[3] = 0x02; /* normal operation + chip enable + RESERVED options */
3025 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x06, dev
->sensor_flags
, buf
); /* URBs 2056-2058 */
3026 /* Write to sensor register 0x0e: UNDOCUMENTED */
3027 buf
[0] = 0x00; buf
[1] = 0x08;
3028 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0e, dev
->sensor_flags
, buf
); /* URBs 2059-2061 */
3030 UDIA_INFO("1 or more errors occured in I2C-message-block 2 !\n");
3033 /* END OF I2C MESSAGES */
3034 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
3037 buf
[0] = 0x02; buf
[1] = 0x00; buf
[2] = 0x02; buf
[3] = 0x00;
3038 buf
[4] = 0x28; buf
[5] = 0x3c;
3039 usb_microdia_control_write(dev
, 0x1180, buf
, 6); /* URB 2062 */
3040 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
3041 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); /* URB 2063 */
3043 usb_microdia_control_write(dev
, 0x1189, buf
, 1); /* URB 2064 */
3044 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
3045 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); /* URB 2065 */
3046 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
3047 usb_microdia_control_write(dev
, 0x11ab, buf
, 4); /* URB 2066 */
3048 buf
[0] = 0x78; /* ALEX: 0x7c */
3049 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 2067 */
3050 buf
[0] = 0x18; /* ALEX: 0x1c */
3051 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2068 */
3052 buf
[0] = 0x18; /* ALEX: 0x1c */
3053 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2069 */
3055 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2070 */
3057 usb_microdia_control_write(dev
, 0x118a, buf
, 1); /* URB 2071 */
3059 usb_microdia_control_write(dev
, 0x0395, buf
, 1); /* URB 2072 */
3062 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2073 */
3063 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2074 // 0x38 */
3066 else if (buf
[0] == 0xb8)
3068 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2075 */
3069 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2076 // 0xb9 */
3072 else if (buf
[0] == 0xb9)
3074 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2077 */
3075 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2078 */
3078 else if (buf
[0] == 0xba)
3080 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2079 */
3081 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2080 // 0x3b */
3084 else if (buf
[0] == 0xbb)
3086 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2081 */
3087 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2082 // 0x3c */
3090 else if (buf
[0] == 0xbc)
3092 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2083 */
3093 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2084 // 0x3d */
3094 last_11b8
[0] = buf
[0];
3095 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
3098 else if (buf
[0] == 0xbd)
3100 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2085 */
3101 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2086 */
3104 else if (buf
[0] == 0xbe)
3106 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2087 */
3107 usb_microdia_control_read(dev
, 0x11b8, last_11b8
, 1); /* URB 2088 */
3109 buf
[0] = last_11b8
[0] & 0xf0; /* 0xf0 or 0x70 */
3110 buf
[0] = buf
[0] | 0x0d; /* 0x0c => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 8 READS/WRITES */
3111 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2089 */
3114 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
3117 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
3118 /* Write to sensor register 0x06: Vertical Blanking */
3119 buf
[0] = 0x00; buf
[1] = 0x2d; /* 45 rows */
3120 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
); /* URBs 2090-2092 */
3121 /* Write to sensor register 0x05: Horizontal Blanking */
3122 buf
[0] = 0x00; buf
[1] = 0x04; /* 4 columns (pixel clocks) */
3123 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
); /* URBs 2093-2095 */
3124 /* Write to sensor register 0x20: Read Mode */
3125 buf
[0] = 0x00; buf
[1] = 0x00; /* normal readout */
3126 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
); /* URBs 2096-2098 */
3127 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
3128 /* Write to sensor register 0x0a: Pixel Clock Speed */
3129 buf
[0] = 0x00; buf
[1] = 0x00; /* default */
3130 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0a, dev
->sensor_flags
, buf
);
3131 /* Write to sensor register 0x06: Vertical Blanking */
3132 buf
[0] = 0x00; buf
[1] = 0x29; /* 41 rows */
3133 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
);
3134 /* Write to sensor register 0x05: Horizontal Blanking */
3135 buf
[0] = 0x00; buf
[1] = 0x09; /* 9 columns (pixel clocks) */
3136 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
);
3137 /* Write to sensor register 0x20: Read Mode */
3138 buf
[0] = 0x11; buf
[1] = 0x01; /* output all frames (including bad ones) + UNKNOWN */
3139 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
);
3142 UDIA_INFO("1 or more errors occured in I2C-message-block 3 !\n");
3145 /* END OF I2C MESSAGES */
3146 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
3150 usb_microdia_control_write(dev
, 0x1180, buf
, 1); /* URB 2099 */
3152 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
3155 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
3156 /* Write to sensor register 0x20: Read Mode */
3157 buf
[0] = 0x00; buf
[1] = 0x00; /* normal readout */
3158 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
); /* URBs 2100-2102 */
3159 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
3160 /* Write to sensor register 0x20: Read Mode */
3161 buf
[0] = 0x11; buf
[1] = 0x01; /* output all frames (including bad ones) + UNKNOWN */
3162 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
);
3165 UDIA_INFO("1 or more errors occured in I2C-message-block 4 !\n");
3168 /* END OF I2C MESSAGES */
3169 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
3173 usb_microdia_control_write(dev
, 0x1182, buf
, 1); /* URB 2103 */
3176 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
3179 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
3180 /* Write to sensor register 0x09: Shutter Width */
3181 buf
[0] = 0x00; buf
[1] = 0x64; /* integration of 100 rows */
3182 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x09, dev
->sensor_flags
, buf
); /* URBs 2104-2106 */
3183 /* Write to sensor register 0x2b: Green 1 Gain */
3184 /* 0x2c: Blue Gain */
3185 buf
[0] = 0x00; buf
[1] = 0xa0; /* 32*0.03125*2 = 2 */
3186 buf
[2] = 0x00; buf
[3] = 0xa0; /* 32*0.03125*2 = 2 */
3187 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2b, dev
->sensor_flags
, buf
); /* URBs 2107-2109 */
3188 /* Write to sensor register 0x2d: Red Gain */
3189 /* 0x2e: Green 2 Gain */
3190 buf
[0] = 0x00; buf
[1] = 0xa0; /* 32*0.03125*2 = 2 */
3191 buf
[2] = 0x00; buf
[3] = 0xa0; /* 32*0.03125*2 = 2 */
3192 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2d, dev
->sensor_flags
, buf
); /* URBs 2110-2112 */
3193 /* "Dummy" write to sensor Register 0x33: RESERVED */
3194 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x33, dev
->sensor_flags
, NULL
); /* URBs 2113-2114 */
3195 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
3196 /* Write to sensor register 0x09: Shutter Width */
3197 buf
[0] = 0x00; buf
[1] = 0x64; /* integration of 100 rows */
3198 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x09, dev
->sensor_flags
, buf
);
3199 /* Write to sensor register 0x07: Output Control */
3200 buf
[0] = 0x00; buf
[1] = 0x03; /* dont update changes until bit0=0, chip enable, normal operation */
3201 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
3202 /* Write to sensor register 0x2b: Green 1 Gain */
3203 /* 0x2c: Blue Gain */
3204 buf
[0] = 0x00; buf
[1] = 0x33; /* 51*0.03125*1 = 1.59375 */
3205 buf
[2] = 0x00; buf
[3] = 0xa0; /* 32*0.03125*2 = 2 */
3206 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2b, dev
->sensor_flags
, buf
);
3207 /* Write to sensor register 0x2d: Red Gain */
3208 /* 0x2e: Green 2 Gain */
3209 buf
[0] = 0x00; buf
[1] = 0xa0; /* 32*0.03125*2 = 2 */
3210 buf
[2] = 0x00; buf
[3] = 0x33; /* 51*0.03125*1 = 1.59375 */
3211 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2d, dev
->sensor_flags
, buf
);
3212 /* "Dummy" write to sensor Register 0x33: RESERVED */
3213 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x33, dev
->sensor_flags
, NULL
);
3214 /* Write to sensor register 0x07: Output Control */
3215 buf
[0] = 0x00; buf
[1] = 0x02; /* chip enable, normal operation */
3216 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
3219 UDIA_INFO("1 or more errors occured in I2C-message-block 5 !\n");
3222 /* END OF I2C MESSAGES */
3223 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
3226 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2119 */
3228 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
3230 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
3232 usb_microdia_control_write(dev
, 0x118b, buf
, 1); /* URB 2124 */
3235 usb_microdia_control_write(dev
, 0x10f7, buf
, 1); /* URB 2135 */
3237 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
3239 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
3241 usb_microdia_control_write(dev
, 0x10f8, buf
, 1); /* URB 2138 */
3243 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
3245 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
3247 usb_microdia_control_write(dev
, 0x10fa, buf
, 1); /* URB 2139 */
3250 usb_microdia_control_write(dev
, 0x10f9, buf
, 1); /* URB 2140 */
3252 usb_microdia_control_write(dev
, 0x10f9, buf
, 1); /* URB 2141 */
3254 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2142 */
3255 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
3256 usb_microdia_control_write(dev
, 0x11bc, buf
, 4); /* URB 2143 */
3257 for (k
= 0; k
< 48; k
++)
3259 usb_microdia_control_write(dev
, 0x11c0, buf
, 48); /* URB 2144 */
3261 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05;
3262 buf
[4] = 0x04; buf
[5] = 0x3f;
3263 usb_microdia_control_write(dev
, 0x11a5, buf
, 6); /* URB 2149 */
3265 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
3266 buf
[0] = 0x14; buf
[1] = 0xec; buf
[2] = 0x0a; buf
[3] = 0xf6;
3267 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
3268 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
3270 usb_microdia_control_write(dev
, 0x11af, buf
, 4); /* URB 2150 */
3272 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x2d; buf
[3] = 0xdd;
3273 usb_microdia_control_write(dev
, 0x11b3, buf
, 4); /* URB 2151 */
3274 buf
[0] = 0x47; /* ALEX: 0x04 */
3275 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2152 */
3277 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2153 */
3278 buf
[0] = 0x67; /* ALEX: 0x24 */
3279 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2154 */
3280 buf
[0] = 0x0d; buf
[1] = 0x08; buf
[2] = 0x08; buf
[3] = 0x0d;
3281 buf
[4] = 0x08; buf
[5] = 0x08; buf
[6] = 0x0d; buf
[7] = 0x0d;
3282 buf
[8] = 0x0d; buf
[9] = 0x0d; buf
[10] = 0x11; buf
[11] = 0x0d;
3283 buf
[12] = 0x0d; buf
[13] = 0x11; buf
[14] = 0x15; buf
[15] = 0x21;
3284 buf
[16] = 0x15; buf
[17] = 0x15; buf
[18] = 0x11; buf
[19] = 0x11;
3285 buf
[20] = 0x15; buf
[21] = 0x2a; buf
[22] = 0x1d; buf
[23] = 0x1d;
3286 buf
[24] = 0x19; buf
[25] = 0x21; buf
[26] = 0x32; buf
[27] = 0x2a;
3287 buf
[28] = 0x32; buf
[29] = 0x32; buf
[30] = 0x2e; buf
[31] = 0x2a;
3288 buf
[32] = 0x2e; buf
[33] = 0x2e; buf
[34] = 0x36; buf
[35] = 0x3a;
3289 buf
[36] = 0x4b; buf
[37] = 0x43; buf
[38] = 0x36; buf
[39] = 0x3a;
3290 buf
[40] = 0x47; buf
[41] = 0x3a; buf
[42] = 0x2e; buf
[43] = 0x2e;
3291 buf
[44] = 0x43; buf
[45] = 0x5c; buf
[46] = 0x43; buf
[47] = 0x47;
3292 buf
[48] = 0x4f; buf
[49] = 0x53; buf
[50] = 0x58; buf
[51] = 0x58;
3293 buf
[52] = 0x58; buf
[53] = 0x32; buf
[54] = 0x3f; buf
[55] = 0x60;
3294 buf
[56] = 0x64; buf
[57] = 0x5c; buf
[58] = 0x53; buf
[59] = 0x64;
3295 buf
[60] = 0x4b; buf
[61] = 0x53; buf
[62] = 0x58; buf
[63] = 0x53;
3296 usb_microdia_control_write(dev
, 0x1100, buf
, 64); /* URB 2155 */
3297 buf
[0] = 0x0d; buf
[1] = 0x11; buf
[2] = 0x11; buf
[3] = 0x15;
3298 buf
[4] = 0x11; buf
[5] = 0x15; buf
[6] = 0x26; buf
[7] = 0x15;
3299 buf
[8] = 0x15; buf
[9] = 0x26; buf
[10] = 0x53; buf
[11] = 0x36;
3300 buf
[12] = 0x2e; buf
[13] = 0x36; buf
[14] = 0x53; buf
[15] = 0x53;
3301 buf
[16] = 0x53; buf
[17] = 0x53; buf
[18] = 0x53; buf
[19] = 0x53;
3302 buf
[20] = 0x53; buf
[21] = 0x53; buf
[22] = 0x53; buf
[23] = 0x53;
3303 buf
[24] = 0x53; buf
[25] = 0x53; buf
[26] = 0x53; buf
[27] = 0x53;
3304 buf
[28] = 0x53; buf
[29] = 0x53; buf
[30] = 0x53; buf
[31] = 0x53;
3305 buf
[32] = 0x53; buf
[33] = 0x53; buf
[34] = 0x53; buf
[35] = 0x53;
3306 buf
[36] = 0x53; buf
[37] = 0x53; buf
[38] = 0x53; buf
[39] = 0x53;
3307 buf
[40] = 0x53; buf
[41] = 0x53; buf
[42] = 0x53; buf
[43] = 0x53;
3308 buf
[44] = 0x53; buf
[45] = 0x53; buf
[46] = 0x53; buf
[47] = 0x53;
3309 buf
[48] = 0x53; buf
[49] = 0x53; buf
[50] = 0x53; buf
[51] = 0x53;
3310 buf
[52] = 0x53; buf
[53] = 0x53; buf
[54] = 0x53; buf
[55] = 0x53;
3311 buf
[56] = 0x53; buf
[57] = 0x53; buf
[58] = 0x53; buf
[59] = 0x53;
3312 buf
[60] = 0x53; buf
[61] = 0x53; buf
[62] = 0x53; buf
[63] = 0x53;
3313 usb_microdia_control_write(dev
, 0x1140, buf
, 64); /* URB 2156 */
3314 buf
[0] = 0x47; /* ALEX: 0x04 */
3315 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2157 */
3317 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2158 */
3318 buf
[0] = 0x4b; /* ALEX: 0x08 */
3319 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2159 */
3321 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
3322 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
3325 /* Writes to sensor registers 0x02: Column Start */
3326 /* 0x03: Window Hight */
3327 buf
[0] = 0x00; buf
[1] = 0x16; /* coulmn 22 */
3328 buf
[2] = 0x01; buf
[3] = 0xe1; /* 481 */
3329 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x02, dev
->sensor_flags
, buf
); /* URBs 2160-2162 */
3330 /* Writes to sensor registers 0x04: Window Width */
3331 /* 0x05: Horizontal Blanking */
3332 buf
[0] = 0x02; buf
[1] = 0x81; /* 641 */
3333 buf
[2] = 0x00; buf
[3] = 0x04; /* 4 columns (pixel clocks) */
3334 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x04, dev
->sensor_flags
, buf
); /* URBs 2163-2165 */
3335 /* Writes to sensor registers 0x06: Vertical Blanking */
3336 /* 0x07: Output Control */
3337 buf
[0] = 0x00; buf
[1] = 0x2d; /* 45 rows */
3338 buf
[2] = 0x30; buf
[3] = 0x02; /* RESERVED options */
3339 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x06, dev
->sensor_flags
, buf
); /* URBs 2166-2167 */
3340 /* Writes to sensor register 0x0e: UNDOCUMENTED */
3341 buf
[0] = 0x00; buf
[1] = 0x08;
3342 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0e, dev
->sensor_flags
, buf
); /* URBs 2168-2170 */
3344 UDIA_INFO("1 or more errors occured in I2C-message-block 6 !\n");
3347 /* END OF I2C MESSAGES */
3348 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
3349 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
3351 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
3353 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
3357 buf
[0] = 0x02; buf
[1] = 0x00; buf
[2] = 0x02; buf
[3] = 0x00;
3358 buf
[4] = 0x28; buf
[5] = 0x3c;
3359 usb_microdia_control_write(dev
, 0x1180, buf
, 6); /* URB 2171 */
3360 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
3361 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); /* URB 2172 */
3363 usb_microdia_control_write(dev
, 0x1189, buf
, 1); /* URB 2173 */
3364 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
3365 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); /* URB 2174 */
3366 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
3367 usb_microdia_control_write(dev
, 0x11ab, buf
, 4); /* URB 2175 */
3369 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2176 */
3371 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2177 */
3373 usb_microdia_control_write(dev
, 0x11b9, buf
, 1); /* URB 2178 */
3375 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2179 */
3377 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2180 */
3378 buf
[0] = 0x78; /* ALEX: 0x7c */
3379 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 2181 */
3380 buf
[0] = 0x18; /* ALEX: 0x1c */
3381 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2182 */
3382 buf
[0] = 0x18; /* ALEX: 0x1c */
3383 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2183 */
3384 buf
[0] = 0x7d; /* ALEX: 0xfc */
3385 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2184 */
3387 usb_microdia_control_write(dev
, 0x118a, buf
, 1); /* URB 2185 */
3389 usb_microdia_control_write(dev
, 0x0395, buf
, 1); /* URB 2186 */
3391 if ((last_11b8
[0] == 0x3d) || (last_11b8
[0] == 0x3f))
3393 else if ((last_11b8
[0] == 0xbd) || (last_11b8
[0] == 0xbf))
3395 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2187 */
3396 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2188 // 0x38 */
3399 else if (buf
[0] == 0xb8)
3401 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2189 */
3402 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2190 // 0xb9 */
3405 else if (buf
[0] == 0xb9)
3407 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2191 */
3408 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2192 // 0xba */
3411 else if (buf
[0] == 0xba)
3413 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2193 */
3414 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2194 // 0x3b */
3417 else if (buf
[0] == 0xbb)
3419 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2195 */
3420 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2196 // 0x3c */
3423 else if (buf
[0] == 0xbc)
3425 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2197 */
3426 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2198 // 0x3d */
3427 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
3430 else if (buf
[0] == 0xbd)
3432 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2199 */
3433 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2200 */
3436 else if (buf
[0] == 0xbe)
3438 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2201 */
3439 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2202 */
3441 buf
[0] = buf
[0] & 0xf0; /* 0xf0 or 0x70 */
3442 buf
[0] = buf
[0] | 0x0d; /* 0x0c => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 8 READS/WRITES */
3443 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2089 */
3445 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
3448 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
3449 /* Write to sensor register 0x06: Vertical Blanking */
3450 buf
[0] = 0x00; buf
[1] = 0x2d; /* 45 rows */
3451 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
); /* URBs 2204-2206 */
3452 /* Write to sensor register 0x05: Horizontal Blanking */
3453 buf
[0] = 0x00; buf
[1] = 0x04; /* 4 columns (pixel clocks) */
3454 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
); /* URBs 2207-2209 */
3455 /* Read of sensor register 0x36: Chip Version (mirror of reg0xff) */
3456 retI2C
+= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x36, dev
->sensor_flags
, buf
); /* URBs 2211-2215 // 0x82 0x3a */
3457 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
3458 /* Write to sensor register 0x0a: Pixel Clock Speed */
3459 buf
[0] = 0x00; buf
[1] = 0x00; /* default */
3460 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
);
3461 /* Write to sensor register 0x06: Vertical Blanking */
3462 buf
[0] = 0x00; buf
[1] = 0x29; /* 41 rows */
3463 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
);
3464 /* Write to sensor register 0x05: Horizontal Blanking */
3465 buf
[0] = 0x00; buf
[1] = 0x09; /* 9 columns (pixel clocks) */
3466 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
);
3467 /* Read of sensor register 0x00: Chip Version (=reg0xff) */
3468 retI2C
+= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x00, dev
->sensor_flags
, buf
); /* 0x82 0x43 */
3471 UDIA_INFO("1 or more errors occured in I2C-message-block 7 !\n");
3474 /* END OF I2C MESSAGES */
3475 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
3479 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2216 */
3482 /*** NOW DRIVER DOES STOP-SEQUENCE
3483 - WITHOUT WRITES TO 0x1007 AND 0x1006 (URBs 3544-3550) => MT9V111
3484 - WRITING 0x40 INSTEAD OF 0x60 TO 0x1007 AND 0x1006 => MT9V011
3486 /*** 2nd, 3rd, ... CYCLE: ALL MESSAGES (URBs 1953 - URBs 2216) ARE REPEATED ***/
3487 /*** ----- WE DON'T DO THIS, IT SEEMS TO BE UNNECESSARY ----- ***/
3489 /* Setup IFP registers for AE and AWB (new, not in the logs): */
3490 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
3491 mt9v111_setup_autoexposure(dev
);
3492 mt9v111_setup_autowhitebalance(dev
);
3493 mt9v111_set_autocorrections(dev
, 1);
3496 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
3498 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
3500 usb_microdia_control_write(dev
, 0x1007, buf
, 1); /* URB 2489 */
3501 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
3503 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
3505 usb_microdia_control_write(dev
, 0x1006, buf
, 1); /* URB 2490 */
3506 /* => These two writes seem to cause the cam to start sending isochronus USB messages */
3511 int microdia_627b_start_stream(struct usb_microdia
*dev
)
3514 /* Initialize the Bridge Controller */
3515 ret
= sn9c20x_initialize(dev
);
3516 /* Initialize the I2C interface in the Bridge */
3517 ret
= sn9c20x_i2c_initialize(dev
);
3518 /* Finally, Initialize the Sensor array */
3519 if (dev
->sensor_init
)
3520 dev
->sensor_init(dev
);
3525 * @brief From UsbSnoop-plugin-parsed.log
3529 * @returns 0 (OK) or <0 (Error)
3531 * @author Vincent, Kuzja
3533 int microdia_6288_start_stream(struct usb_microdia
*dev
)
3543 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3549 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3555 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3561 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3567 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3573 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3578 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20;
3579 buf
[3] = 0x10; buf
[4] = 0x08;
3580 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
3585 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;
3586 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9);
3591 buf
[0] = 0x44; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30;
3592 buf
[4] = 0x00; buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed;
3593 buf
[8] = 0x0f; buf
[9] = 0xda; buf
[10] = 0x0f; buf
[11] = 0x3a;
3594 buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00; buf
[15] = 0xd0;
3595 buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
3596 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
3597 ret
= usb_microdia_control_write(dev
, reg
, buf
, 24);
3602 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
3603 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
3608 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
3609 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
3614 buf
[0] = 0x86; buf
[1] = 0xcc; buf
[2] = 0x08;
3615 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
3620 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20;
3621 buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b;
3622 buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80;
3623 buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8;
3624 buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
3625 buf
[20] = 0xf4; buf
[21] = 0xff;
3626 ret
= usb_microdia_control_write(dev
, reg
, buf
, 22);
3631 buf
[0] = 0x00; buf
[1] = 0x00;
3632 ret
= usb_microdia_control_write(dev
, reg
, buf
, 2);
3637 buf
[0] = 0x60; buf
[1] = 0x20; buf
[2] = 0x00; buf
[3] = 0x08;
3638 buf
[4] = 0x00; buf
[5] = 0x40; buf
[6] = 0x01; buf
[7] = 0xf0;
3640 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9);
3646 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3652 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3657 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x12; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3658 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3663 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3668 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3673 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x12; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3674 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3679 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3684 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3689 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x0d; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3690 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3695 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3700 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3705 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x0e; buf
[3] = 0x61; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3706 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3711 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3716 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3721 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x11; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3722 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3727 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3732 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3737 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x13; buf
[3] = 0xb8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3738 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3743 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3748 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3753 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x14; buf
[3] = 0x3e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3754 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3759 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3764 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3769 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x16; buf
[3] = 0x24; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3770 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3775 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3780 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3785 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3786 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3791 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3796 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3801 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3802 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3807 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3812 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3817 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3818 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3823 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3828 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3833 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x27; buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3834 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3839 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3844 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3849 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x28; buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3850 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3855 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3860 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3865 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x29; buf
[3] = 0x15; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3866 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3871 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3876 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3881 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2c; buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3882 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3887 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3892 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3897 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x32; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3898 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3903 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3908 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3913 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x34; buf
[3] = 0x3d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3914 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3919 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3924 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3929 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x35; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3930 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3935 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3940 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3945 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x36; buf
[3] = 0xf8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3946 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3951 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3956 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3961 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x38; buf
[3] = 0x12; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3962 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3967 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3972 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3977 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x39; buf
[3] = 0x57; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3978 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3983 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3988 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3993 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3994 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3999 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4004 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4009 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3b; buf
[3] = 0xcc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4010 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4015 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4020 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4025 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3c; buf
[3] = 0x0c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4026 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4031 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4036 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4041 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3d; buf
[3] = 0x19; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4042 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4047 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4052 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4057 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3e; buf
[3] = 0x0c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4058 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4063 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4068 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4073 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3f; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4074 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4079 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4084 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4089 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x41; buf
[3] = 0x40; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4090 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4095 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4100 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4105 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x42; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4106 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4111 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4116 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4121 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x45; buf
[3] = 0x46; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4122 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4127 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4132 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4137 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x46; buf
[3] = 0x62; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4138 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4143 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4148 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4153 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x47; buf
[3] = 0x2a; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4154 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4159 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4164 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4169 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x48; buf
[3] = 0x3c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4170 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4175 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4180 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4185 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4a; buf
[3] = 0xf0; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4186 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4191 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4196 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4201 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4b; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4202 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4207 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4212 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4217 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4c; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4218 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4223 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4228 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4233 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4d; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4234 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4239 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4244 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4249 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4e; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4250 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4255 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4260 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4265 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x69; buf
[3] = 0x02; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4266 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4271 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4276 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4281 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x6c; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4282 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4287 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4292 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4297 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x6f; buf
[3] = 0x9e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4298 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4303 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4308 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4313 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x70; buf
[3] = 0x05; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4314 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4319 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4324 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4329 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x71; buf
[3] = 0x78; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4330 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4335 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4340 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4345 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x77; buf
[3] = 0x02; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4346 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4351 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4356 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4361 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x8a; buf
[3] = 0x23; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4362 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4367 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4372 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4377 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x8c; buf
[3] = 0x0d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4378 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4383 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4388 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4393 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x90; buf
[3] = 0x7e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4394 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4399 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4404 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4409 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x91; buf
[3] = 0x7c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4410 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4415 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4420 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4425 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x9f; buf
[3] = 0x6e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4426 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4431 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4436 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4441 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa0; buf
[3] = 0x6e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4442 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4447 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4452 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4457 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa4; buf
[3] = 0x50; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4458 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4463 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4468 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4473 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa5; buf
[3] = 0x68; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4474 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4479 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4484 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4489 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa6; buf
[3] = 0x60; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4490 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4495 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4500 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4505 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa8; buf
[3] = 0xc1; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4506 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4511 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4516 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4521 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa9; buf
[3] = 0xfa; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4522 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4527 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4532 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4537 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xaa; buf
[3] = 0x92; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4538 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4543 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4548 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4553 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xab; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4554 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4559 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4564 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4569 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xac; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4570 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4575 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4580 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4585 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xad; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4586 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4591 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4596 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4601 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xae; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4602 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4607 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4612 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4617 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xaf; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4618 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4623 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4628 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4633 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb2; buf
[3] = 0xf2; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4634 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4639 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4644 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4649 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb3; buf
[3] = 0x20; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4650 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4655 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4660 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4665 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb4; buf
[3] = 0x20; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4666 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4671 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4676 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4681 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb5; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4682 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4687 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4692 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4697 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb6; buf
[3] = 0xaf; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4698 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4703 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4708 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4713 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbb; buf
[3] = 0xae; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4714 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4719 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4724 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4729 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbc; buf
[3] = 0x44; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4730 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4735 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4740 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4745 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbd; buf
[3] = 0x44; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4746 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4751 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4756 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4761 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbe; buf
[3] = 0x3b; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4762 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4767 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4772 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4777 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbf; buf
[3] = 0x3a; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4778 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4783 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4788 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4793 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc0; buf
[3] = 0xe2; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4794 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4799 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4804 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4809 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc1; buf
[3] = 0xc8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4810 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4815 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4820 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4825 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc2; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4826 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4831 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4836 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4841 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc4; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4842 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4847 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4852 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4857 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc6; buf
[3] = 0x85; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4858 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4863 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4868 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4873 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc7; buf
[3] = 0x81; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4874 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4879 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4884 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4889 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc9; buf
[3] = 0xe0; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4890 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4895 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4900 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4905 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xca; buf
[3] = 0xe8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4906 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4911 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4916 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4921 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xcc; buf
[3] = 0xd8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4922 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4927 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4932 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4937 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xcd; buf
[3] = 0x93; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4938 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4943 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4948 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4953 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4959 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4964 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4965 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4970 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4975 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4976 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4981 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4986 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4987 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4992 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4997 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4998 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5003 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5008 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5009 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5014 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5019 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5020 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5025 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5030 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5031 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5036 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5041 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5042 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5047 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5052 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5053 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5058 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5059 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5064 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5069 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5070 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5075 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5080 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5081 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5086 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5091 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5092 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5097 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5102 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5103 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5108 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5113 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5114 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5119 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5124 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5125 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5130 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5135 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5136 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5141 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5146 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5147 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5152 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
5158 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5164 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5170 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5176 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5182 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5188 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5194 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5200 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5206 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5212 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5218 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5223 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x03; buf
[3] = 0x14; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5224 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5229 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5234 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5239 buf
[0] = 0xd0; buf
[1] = 0x30; buf
[2] = 0x17; buf
[3] = 0x1b; buf
[4] = 0xbc; buf
[5] = 0x01; buf
[6] = 0x7a; buf
[7] = 0x10;
5240 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5245 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5250 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5255 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1b; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5256 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5261 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5266 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x32; buf
[3] = 0x82; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5267 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5272 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5277 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5282 buf
[0] = 0x05; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00; buf
[4] = 0x50; buf
[5] = 0x78;
5283 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
5288 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
5289 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
5295 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5301 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5306 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0xa0;
5307 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
5312 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x78;
5313 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
5319 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5325 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5331 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5337 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5343 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5349 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5355 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5360 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5366 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5371 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5377 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5382 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5388 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5393 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5399 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5404 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5410 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5415 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5421 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5426 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x11; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5427 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5432 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5437 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5442 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5443 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5448 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5453 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5458 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2b; buf
[3] = 0x06; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5459 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5464 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5469 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5474 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x92; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5475 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5480 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5485 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5490 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x93; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5491 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5496 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5501 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5506 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5507 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5512 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5517 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5522 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5523 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5528 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5533 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5539 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5544 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x10; buf
[3] = 0x7d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5545 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5550 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5555 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5560 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x04; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5561 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5566 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5571 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5576 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa1; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5577 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5582 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5587 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5592 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2d; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5593 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5598 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5603 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5608 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5609 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5614 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5619 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5624 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5625 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5630 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5635 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5640 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5641 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5646 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5651 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5656 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5657 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5662 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5667 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5673 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5679 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5685 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5691 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5697 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5703 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5709 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5715 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5720 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
5721 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
5726 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
5727 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
5728 buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00;
5729 buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00;
5730 buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00;
5731 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x00; buf
[23] = 0x00;
5732 buf
[24] = 0x00; buf
[25] = 0x00; buf
[26] = 0x00; buf
[27] = 0x00;
5733 buf
[28] = 0x00; buf
[29] = 0x00; buf
[30] = 0x00; buf
[31] = 0x00;
5734 buf
[32] = 0x00; buf
[33] = 0x00; buf
[34] = 0x00; buf
[35] = 0x00;
5735 buf
[36] = 0x00; buf
[37] = 0x00; buf
[38] = 0x00; buf
[39] = 0x00;
5736 buf
[40] = 0x00; buf
[41] = 0x00; buf
[42] = 0x00; buf
[43] = 0x00;
5737 buf
[44] = 0x00; buf
[45] = 0x00; buf
[46] = 0x00; buf
[47] = 0x00;
5738 ret
= usb_microdia_control_write(dev
, reg
, buf
, 48);
5743 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05;
5744 buf
[4] = 0x04; buf
[5] = 0x3f;
5745 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
5750 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
5751 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
5756 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x32; buf
[3] = 0xdd;
5757 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
5763 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5769 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5775 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5780 buf
[0] = 0x0d; buf
[1] = 0x08; buf
[2] = 0x08; buf
[3] = 0x0d;
5781 buf
[4] = 0x08; buf
[5] = 0x08; buf
[6] = 0x0d; buf
[7] = 0x0d;
5782 buf
[8] = 0x0d; buf
[9] = 0x0d; buf
[10] = 0x11; buf
[11] = 0x0d;
5783 buf
[12] = 0x0d; buf
[13] = 0x11; buf
[14] = 0x15; buf
[15] = 0x21;
5784 buf
[16] = 0x15; buf
[17] = 0x15; buf
[18] = 0x11; buf
[19] = 0x11;
5785 buf
[20] = 0x15; buf
[21] = 0x2a; buf
[22] = 0x1d; buf
[23] = 0x1d;
5786 buf
[24] = 0x19; buf
[25] = 0x21; buf
[26] = 0x32; buf
[27] = 0x2a;
5787 buf
[28] = 0x32; buf
[29] = 0x32; buf
[30] = 0x2e; buf
[31] = 0x2a;
5788 buf
[32] = 0x2e; buf
[33] = 0x2e; buf
[34] = 0x36; buf
[35] = 0x3a;
5789 buf
[36] = 0x4b; buf
[37] = 0x43; buf
[38] = 0x36; buf
[39] = 0x3a;
5790 buf
[40] = 0x47; buf
[41] = 0x3a; buf
[42] = 0x2e; buf
[43] = 0x2e;
5791 buf
[44] = 0x43; buf
[45] = 0x5c; buf
[46] = 0x43; buf
[47] = 0x47;
5792 buf
[48] = 0x4f; buf
[49] = 0x53; buf
[50] = 0x58; buf
[51] = 0x58;
5793 buf
[52] = 0x58; buf
[53] = 0x32; buf
[54] = 0x3f; buf
[55] = 0x60;
5794 buf
[56] = 0x64; buf
[57] = 0x5c; buf
[58] = 0x53; buf
[59] = 0x64;
5795 buf
[60] = 0x4b; buf
[61] = 0x53; buf
[62] = 0x58; buf
[63] = 0x53;
5796 ret
= usb_microdia_control_write(dev
, reg
, buf
, 64);
5801 buf
[0] = 0x0d; buf
[1] = 0x11; buf
[2] = 0x11; buf
[3] = 0x15;
5802 buf
[4] = 0x11; buf
[5] = 0x15; buf
[6] = 0x26; buf
[7] = 0x15;
5803 buf
[8] = 0x15; buf
[9] = 0x26; buf
[10] = 0x53; buf
[11] = 0x36;
5804 buf
[12] = 0x2e; buf
[13] = 0x36; buf
[14] = 0x53; buf
[15] = 0x53;
5805 buf
[16] = 0x53; buf
[17] = 0x53; buf
[18] = 0x53; buf
[19] = 0x53;
5806 buf
[20] = 0x53; buf
[21] = 0x53; buf
[22] = 0x53; buf
[23] = 0x53;
5807 buf
[24] = 0x53; buf
[25] = 0x53; buf
[26] = 0x53; buf
[27] = 0x53;
5808 buf
[28] = 0x53; buf
[29] = 0x53; buf
[30] = 0x53; buf
[31] = 0x53;
5809 buf
[32] = 0x53; buf
[33] = 0x53; buf
[34] = 0x53; buf
[35] = 0x53;
5810 buf
[36] = 0x53; buf
[37] = 0x53; buf
[38] = 0x53; buf
[39] = 0x53;
5811 buf
[40] = 0x53; buf
[41] = 0x53; buf
[42] = 0x53; buf
[43] = 0x53;
5812 buf
[44] = 0x53; buf
[45] = 0x53; buf
[46] = 0x53; buf
[47] = 0x53;
5813 buf
[48] = 0x53; buf
[49] = 0x53; buf
[50] = 0x53; buf
[51] = 0x53;
5814 buf
[52] = 0x53; buf
[53] = 0x53; buf
[54] = 0x53; buf
[55] = 0x53;
5815 buf
[56] = 0x53; buf
[57] = 0x53; buf
[58] = 0x53; buf
[59] = 0x53;
5816 buf
[60] = 0x53; buf
[61] = 0x53; buf
[62] = 0x53; buf
[63] = 0x53;
5817 ret
= usb_microdia_control_write(dev
, reg
, buf
, 64);
5823 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5829 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5835 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5841 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5847 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5853 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5859 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5865 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5870 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x03; buf
[3] = 0x14; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5871 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5876 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5881 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5886 buf
[0] = 0xd0; buf
[1] = 0x30; buf
[2] = 0x17; buf
[3] = 0x1b; buf
[4] = 0xbc; buf
[5] = 0x01; buf
[6] = 0x7a; buf
[7] = 0x10;
5887 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5892 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5897 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5902 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1b; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5903 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5908 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5913 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x32; buf
[3] = 0x82; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5914 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5919 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5924 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5929 buf
[0] = 0x05; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00;
5930 buf
[4] = 0x50; buf
[5] = 0x78;
5931 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
5936 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0;
5938 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
5944 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5949 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0xa0;
5950 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
5955 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x78;
5956 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
5962 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5968 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5974 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5980 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5986 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5992 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5998 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6004 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6010 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6016 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6022 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6028 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6033 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6039 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6044 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6050 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6055 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6061 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6066 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6072 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6077 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6083 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6088 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6094 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6099 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x11; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6100 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6105 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6110 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6115 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6116 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6121 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6126 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6131 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2b; buf
[3] = 0x70; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6132 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6137 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6142 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6147 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x92; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6148 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6153 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6158 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6163 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x93; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6164 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6169 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6174 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6179 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x0a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6180 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6185 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6190 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6191 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6196 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6201 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
6206 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x0b; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6207 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6212 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6217 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6218 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6223 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6228 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
6233 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1c; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6234 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6239 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6244 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6245 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6250 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6255 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
6260 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1d; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6261 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6266 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6271 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6272 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6277 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6282 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
6288 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6294 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6300 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6305 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa1; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6306 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6311 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6316 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6321 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x10; buf
[3] = 0x06; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6322 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6327 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6332 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6337 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x04; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6338 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6343 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6348 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6353 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2d; buf
[3] = 0x36; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6354 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6359 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6364 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6369 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6370 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6375 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6380 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6385 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
6386 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6391 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6396 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6401 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x06; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
6402 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6407 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6412 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6417 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x94; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6418 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6423 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6428 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6433 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x8d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6434 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6439 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6444 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6449 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x09; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
6450 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6455 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6460 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6465 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x95; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6466 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6471 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6476 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6481 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x85; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6482 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6487 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6492 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6497 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x0c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
6498 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6503 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6508 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6513 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x96; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6514 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6519 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6524 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6529 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6530 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6535 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6540 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6545 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x7c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6546 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6551 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6556 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6562 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6568 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6575 /* END OF MICRODIA 6288 START STREAM */
6579 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
6583 int dev_microdia_stop_stream(struct usb_microdia
*dev
)
6586 if (dev
&& dev
->stop_stream
)
6587 ret
= dev
->stop_stream(dev
);
6593 * @brief From stop.htm
6601 * For SN9C201 with MI1310.
6602 * This function has not been tested yet.
6604 int microdia_6242_stop_stream(struct usb_microdia
*dev
)
6608 __u8 only10c0
[3] = {0x0d, 0x00, 0x00};
6611 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
6614 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
6617 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
6619 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
6620 only10c0
[0], dev
->sensor_flags
, &only10c0
[1]);
6623 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
6626 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
6629 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
6632 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
6635 buf
[0] = 0x98; buf
[1] = 0xe7; buf
[2] = 0x11;
6636 usb_microdia_control_write(dev
, 0x1000, buf
, 3);
6639 * After the select alternate setting 0 is actually another transfer:
6641 * usb_microdia_control_write(dev, 0x1066, buf, 1);
6649 * @brief From stopstream.log
6657 * For SN9C201 with SOI968.
6658 * I don't whether the function really stops the stream.
6659 * Nevertheless the LED on the webcam now stops glowing.
6660 * The function is very similar to "microdia_624f_stop_stream".
6662 int microdia_624e_stop_stream(struct usb_microdia
*dev
)
6667 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
6669 /* Next two writes added because it works better.
6670 * The LED stops glowing and I think the stream does too.
6671 * 0x20 = 0b00100000 which is the minimal of what the
6672 * other stopstreams have in common.
6675 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
6678 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
6681 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
6684 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
6686 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
6687 usb_microdia_control_write(dev
, 0x1000, buf
, 3);
6689 usb_microdia_control_read(dev
, 0x1066, buf
, 1);
6695 int microdia_624f_stop_stream(struct usb_microdia
*dev
)
6703 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6709 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6715 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6721 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6727 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6733 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6741 ret
= usb_microdia_control_write(dev
, command
, buf
, 3);
6746 ret
= usb_microdia_control_read(dev
, command
, buf
, 1);
6751 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6758 UDIA_ERROR("command %x failed (%d)!\n", command
, ret
);
6762 int microdia_6260_stop_stream(struct usb_microdia
*dev
)
6768 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
6770 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
6772 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
6774 ret
= usb_microdia_control_write(dev
, 0x1007, buf
, 1);
6776 ret
= usb_microdia_control_write(dev
, 0x1006, buf
, 1);
6778 buf
[0] = 0x98; buf
[1] = 0xe7; buf
[2] = 0x11;
6779 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 3);
6782 ret
= usb_microdia_control_write(dev
, 0x1066, buf
, 1);
6783 ret
= usb_microdia_control_read(dev
, 0x1045, buf
, 1);
6785 ret
= usb_microdia_control_write(dev
, 0x1045, buf
, 1);
6787 ret
= usb_microdia_control_write(dev
, 0x10c8, buf
, 1);
6789 ret
= usb_microdia_control_write(dev
, 0x1020, buf
, 1);
6795 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
6799 * @returns 0 (ok) or -1 (error)
6803 * Windows driver version: 5.7.23.000
6804 * Windows versions: 2000 and XP
6805 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
6806 * All logs were made using AMCAP with 640x480, RGB24
6808 int microdia_6270_stop_stream(struct usb_microdia
*dev
)
6814 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
6816 ret
+= usb_microdia_control_write(dev
, 0x1007, buf
, 1); /* URB 3541 */
6818 ret
+= usb_microdia_control_write(dev
, 0x1006, buf
, 1); /* URB 3542 */
6819 /* => These two writes seem to cause the cam to stop sending isochronus USB messages */
6822 ret
+= usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 3544 */
6823 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
6825 ret
+= usb_microdia_control_write(dev
, 0x1007, buf
, 1); /* URB 3541 */
6827 ret
+= usb_microdia_control_write(dev
, 0x1006, buf
, 1); /* URB 3542 */
6829 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
6830 /* Write to sensor register 0x07: Output Control */
6831 buf
[0] = 0x00; buf
[1] = 0x00; /* stop sensor readout, normal operation */
6832 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
6834 buf
[0] = 0x38; /* ALEX: 0x3c */
6835 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 3545 */
6836 buf
[0] = 0x6d; /* ALEX: 0xec; FRANK: also 0x6c */
6837 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 3546 */
6838 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
6839 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 3); /* URB 3547 */
6841 /* INTERRUPT COMMING BACK (URB 2227) */
6842 /* SELECT ALTERNATE SETTINGS (URB 3548) */
6843 /* INTERRUPT GOING DOWN (URB 3549) */
6846 ret
+= usb_microdia_control_write(dev
, 0x1066, buf
, 1); /* URB 3550 */
6849 UDIA_INFO("One ore more errors occured while stopping stream !\n");
6856 int microdia_627b_stop_stream(struct usb_microdia
*dev
)
6864 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6870 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6876 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6882 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6888 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6893 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
6894 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
6900 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6907 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
6912 * @brief From UsbSnoop-plugin-parsed.log
6916 * @returns 0 (OK) or <0 (Error)
6918 * @author Vincent, Kuzja
6920 int microdia_6288_stop_stream(struct usb_microdia
*dev
)
6928 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6934 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6940 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6946 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6952 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6957 buf
[0] = 0x98; buf
[1] = 0xe7; buf
[2] = 0x11;
6958 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
6964 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6970 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
6974 int microdia_624f_flip_detect(struct usb_microdia
*dev
)
6979 ret
= usb_microdia_control_read(dev
, 0x1009, &val
, 1);
6983 dev
->vsettings
.vflip
= 1;
6985 dev
->vsettings
.vflip
= 0;
6989 int microdia_6260_flip_detect(struct usb_microdia
*dev
)
6991 const __u8 flip_bit
= 0x01;
6994 static __u8 flip_reg
= flip_bit
;
6997 ret
= usb_microdia_control_read(dev
, 0x1009, &val
, 1);
7000 if (flip_reg
!= (val
& flip_bit
)) {
7005 ret
= ov7670_auto_flip(dev
, vflip
);
7006 flip_reg
= (val
& flip_bit
);