3 * @author Nicolas VIVIEN
6 * @brief Device specific functions
8 * @note Copyright (C) Nicolas VIVIEN
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27 #include <linux/errno.h>
28 #include <linux/string.h>
39 * @brief Set USB-bandwidth to maximum
41 * @param dev Pointer to device structure
43 * @returns 0 or negative error value
45 int dev_microdia_camera_on(struct usb_microdia
*dev
)
48 struct usb_device
*udev
= dev
->udev
;
50 ret
= usb_set_interface(udev
, 0, 8);
53 UDIA_ERROR("usb_set_interface failed !\n");
59 * @brief Set USB-bandwidth to minimum
61 * @param dev Pointer to device structure
63 * @returns 0 or negative error value
65 int dev_microdia_camera_off(struct usb_microdia
*dev
)
68 struct usb_device
*udev
= dev
->udev
;
70 ret
= usb_set_interface(udev
, 0, 0);
73 UDIA_ERROR("usb_set_interface failed !\n");
79 * @brief Wrapper function for camera-setting functions
81 * @param dev Pointer to device structure
85 int dev_microdia_camera_settings(struct usb_microdia
*dev
)
87 dev_microdia_camera_set_contrast(dev
);
88 dev_microdia_camera_set_brightness(dev
);
89 dev_microdia_camera_set_gamma(dev
);
90 dev_microdia_camera_set_exposure(dev
);
91 dev_microdia_camera_set_hvflip(dev
);
92 dev_microdia_camera_set_sharpness(dev
);
93 dev_microdia_camera_set_rgb_gain(dev
);
94 dev_microdia_camera_set_auto_exposure(dev
);
95 dev_microdia_camera_set_auto_whitebalance(dev
);
100 * @brief Wrapper function for device-specific contrast functions
102 * @param dev Pointer to device structure
104 * @returns 0 or negative error value
106 * This will execute a function determined by the array #cameras and
107 * the function find_camera().
110 int dev_microdia_camera_set_contrast(struct usb_microdia
*dev
)
113 if (dev
&& dev
->set_contrast
)
114 ret
= dev
->set_contrast(dev
);
119 * @brief Wrapper function for device-specific brightness functions
121 * @param dev Pointer to device structure
123 * @returns 0 or negative error value
125 * This will execute a function determined by the array #cameras and
126 * the function find_camera().
129 int dev_microdia_camera_set_brightness(struct usb_microdia
*dev
)
132 if (dev
&& dev
->set_brightness
)
133 ret
= dev
->set_brightness(dev
);
138 * @brief Wrapper function for device-specific gamma functions
140 * @param dev Pointer to device structure
142 * @returns 0 or negative error value
144 * This will execute a function determined by the array #cameras and
145 * the function find_camera().
148 int dev_microdia_camera_set_gamma(struct usb_microdia
*dev
)
151 if (dev
&& dev
->set_gamma
)
152 ret
= dev
->set_gamma(dev
);
157 * @brief Wrapper function for device-specific exposure functions
159 * @param dev Pointer to device structure
161 * @returns 0 or negative error value
163 * This will execute a function determined by the array #cameras and
164 * the function find_camera().
167 int dev_microdia_camera_set_exposure(struct usb_microdia
*dev
)
169 if (dev
->set_exposure
!= NULL
)
170 return dev
->set_exposure(dev
);
176 * @brief Wrapper function for device-specific hvflip functions
178 * @param dev Pointer to device structure
180 * @returns 0 or negative error value
182 * This will execute a function determined by the array #cameras and
183 * the function find_camera().
186 int dev_microdia_camera_set_hvflip(struct usb_microdia
*dev
)
189 if (dev
&& dev
->set_hvflip
)
190 ret
= dev
->set_hvflip(dev
);
196 * @brief Wrapper function for device-specific sharpness functions
198 * @param dev Pointer to device structure
200 * @returns 0 or negative error value
202 * This will execute a function determined by the array #cameras and
203 * the function find_camera().
206 int dev_microdia_camera_set_sharpness(struct usb_microdia
*dev
)
209 if (dev
&& dev
->set_sharpness
)
210 ret
= dev
->set_sharpness(dev
);
216 * @brief Wrapper function for device-specific rgb-gain functions
218 * @param dev Pointer to device structure
220 * @returns 0 or negative error value
222 * This will execute a function determined by the array #cameras and
223 * the function find_camera().
226 int dev_microdia_camera_set_rgb_gain(struct usb_microdia
*dev
)
229 if (dev
&& dev
->set_rgb_gain
)
230 ret
= dev
->set_rgb_gain(dev
);
236 * @brief Wrapper function for device-specific auto-exposure functions
238 * @param dev Pointer to device structure
240 * @returns 0 or negative error value
242 * This will execute a function determined by the array #cameras and
243 * the function find_camera().
246 int dev_microdia_camera_set_auto_exposure(struct usb_microdia
*dev
)
249 if (dev
&& dev
->set_auto_exposure
)
250 ret
= dev
->set_auto_exposure(dev
);
256 * @brief Wrapper function for device-specific auto-whitebalance functions
258 * @param dev Pointer to device structure
260 * @returns 0 or negative error value
262 * This will execute a function determined by the array #cameras and
263 * the function find_camera().
266 int dev_microdia_camera_set_auto_whitebalance(struct usb_microdia
*dev
)
269 if (dev
&& dev
->set_auto_whitebalance
)
270 ret
= dev
->set_auto_whitebalance(dev
);
277 * @brief Wrapper function for device-specific initialization functions
279 * @param dev Pointer to device structure
281 * @returns 0 or negative error value
283 * This will execute a function determined by the array #cameras and
284 * the function find_camera().
287 int dev_microdia_initialize_device(struct usb_microdia
*dev
)
291 if (dev
&& dev
->initialize
)
292 ret
= dev
->initialize(dev
);
298 * @brief From init-physical-replug.log
306 * For SN9C201 with MI1300.
309 int microdia_6240_initialize(struct usb_microdia
*dev
)
315 * @brief From start.log (14 jun 2008)
323 * For SN9C201 with MI1300.
326 int microdia_6240_start_stream(struct usb_microdia
*dev
)
333 /* Setup the bridge registers */
334 static __u16 bridge6240_init
[][2] = {
608 static __u8 mi1300_init
[][2] = {
795 /* initialize SN9C201 for 6240 */
796 for (i
= 0; i
< ARRAY_SIZE(bridge6240_init
); i
++) {
797 reg
= bridge6240_init
[i
][0];
798 value
[0] = bridge6240_init
[i
][1];
799 ret
= usb_microdia_control_write(dev
, reg
, value
, 1);
801 UDIA_INFO("6240 Bridge: Inititialization Error (%d) on array line %d\n", ret
, i
);
806 /* initialize the Bridge to I2C interface */
807 ret
= sn9c20x_i2c_initialize(dev
);
809 /* initialize the Sensor MI 1300 */
810 for (i
= 0; i
< ARRAY_SIZE(mi1300_init
); i
++) {
811 reg
= mi1300_init
[i
][0];
812 value
[0] = mi1300_init
[i
][1];
813 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
814 reg
, dev
->sensor_flags
, value
);
816 UDIA_INFO("Sensor MI 1300: Inititialization Error (%d) on array line %d\n", ret
, i
);
821 UDIA_INFO("...start function completed without errors.\n");
826 * @brief From stop-close-amcap.log
834 * For SN9C201 with MI1300. Comments from parser-usbsnoop(updated_13Mar2008).pl output
837 int microdia_6240_stop_stream(struct usb_microdia
*dev
)
844 static __u8 mi1300_stop
[][2] = {
849 static __u16 bridge6240_stop
[][2] = {
861 UDIA_INFO("Stopping camera...\n");
863 for (i
= 0; i
< ARRAY_SIZE(mi1300_stop
); i
++) {
864 reg
= mi1300_stop
[i
][0];
865 value
[0] = mi1300_stop
[i
][1];
866 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
867 reg
, dev
->sensor_flags
, value
);
869 UDIA_INFO("Sensor MI 1300: Stop Sequence Error (%d) on array line %d\n", ret
, i
);
874 for (i
= 0; i
< ARRAY_SIZE(bridge6240_stop
); i
++) {
875 reg
= bridge6240_stop
[i
][0];
876 value
[0] = bridge6240_stop
[i
][1];
877 ret
= usb_microdia_control_write(dev
, reg
, value
, 1);
879 UDIA_INFO("6240 Bridge: Stop Sequence Error (%d) on array line %d\n", ret
, i
);
888 * @brief From init.sequence.log
896 * For SN9C201 with SOI968.
897 * Tests showed this function is actually unnecessary.
898 * Nevertheless the reads may give us valuable values we don't know about yet.
900 int microdia_624e_initialize(struct usb_microdia
*dev
)
904 usb_microdia_control_read(dev
, 0x130d, &buf
, 1);
905 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
911 * @brief From UsbSnoop-plugin-parsed.log
917 int microdia_624f_initialize(struct usb_microdia
*dev
)
919 /* Do nothing here */
924 * @brief From UsbSnoop-plugin-parsed.log
930 int microdia_6260_initialize(struct usb_microdia
*dev
)
934 usb_microdia_control_read(dev
, 0x130d, &buf
, 1);
935 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
937 usb_microdia_control_write(dev
, 0x10c8, &buf
, 1);
938 usb_microdia_control_read(dev
, 0x100a, &buf
, 1);
940 usb_microdia_control_write(dev
, 0x100a, &buf
, 1);
941 usb_microdia_control_read(dev
, 0x100b, &buf
, 1);
943 usb_microdia_control_write(dev
, 0x100b, &buf
, 1);
944 usb_microdia_control_read(dev
, 0x1001, &buf
, 1);
946 usb_microdia_control_write(dev
, 0x1001, &buf
, 1);
947 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
949 usb_microdia_control_write(dev
, 0x1040, &buf
, 1);
950 usb_microdia_control_read(dev
, 0x1045, &buf
, 1);
952 usb_microdia_control_write(dev
, 0x1045, &buf
, 1);
953 usb_microdia_control_read(dev
, 0x1046, &buf
, 1);
955 usb_microdia_control_write(dev
, 0x1046, &buf
, 1);
957 usb_microdia_control_write(dev
, 0x1045, &buf
, 1);
959 usb_microdia_control_write(dev
, 0x1040, &buf
, 1);
961 usb_microdia_control_write(dev
, 0x1020, &buf
, 1);
967 * @brief From 6 init-logs
971 * @returns 0 (ok) or -1 (error)
975 * Windows driver versions: 5.5.8.12 and 5.7.23.000
976 * Windows versions: 2000 and XP
977 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
979 * Comments behind read oprations contain HEX-values that appeared in the logs
981 int microdia_6270_initialize(struct usb_microdia
*dev
)
993 ret
+= usb_microdia_control_read(dev
, 0x130d, buf
, 1); /* URB 5 0x81,0x85,0x04,0x8b,0x02,... */
995 ret
+= usb_microdia_control_read(dev
, 0x1040, buf
, 1); /* URB 6 0xe4,0xc4,0xa4,0x44,... */
998 * THE OLD DRIVER 5.5.8.12 DOES AN ADDITIONAL WRITE HERE:
1000 * usb_microdia_control_write(dev, 0x10c8, buf, 1);
1003 ret
+= usb_microdia_control_read(dev
, 0x118a, buf
, 1); /* URB 7 0x05,0x7b,0x01,0x04,... */
1005 ret
+= usb_microdia_control_read(dev
, 0x0395, buf_0395
, 1); /* URB 8 0xc2,0x82,0x38,0x98,0x04,... */
1006 /* => this value will be rewritten to 0x118a and 0x0395 later (URBs 81+82) */
1009 ret
+= usb_microdia_control_write(dev
, 0x118a, buf
, 1); /* URB 9 */
1011 ret
+= usb_microdia_control_write(dev
, 0x0395, buf
, 1); /* URB 10 */
1013 ret
+= usb_microdia_control_read(dev
, 0x11b8, buf_11b8
, 1); /* URB 11 0xa0,0x00,0x24,... */
1014 /* => this value will be rewritten to 0x11b8 later (URB 83) */
1017 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 12 */
1019 ret
+= usb_microdia_control_read(dev
, 0x1000, buf_1000
, 5); /* URB 13 0x30 0xCF 0x00 0x03 (0x02 or 0x00) */
1020 /* => these values will be rewritten to 0x1000 later (URB 84) */
1022 buf
[0] = 0x70; buf
[1] = 0x00; buf
[2] = 0x18; buf
[3] = 0x00; buf
[4] = 0x00;
1023 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 5); /* URB 14 */
1025 ret
+= usb_microdia_control_read(dev
, 0x1060, buf_1060
, 2); /* URB 15 0x08 0x00 (always ???) */
1026 /* => this value will be rewritten to 0x1060 later (URB 85) */
1028 buf
[0] = 0x00; buf
[1] = 0x03;
1029 ret
+= usb_microdia_control_write(dev
, 0x1060, buf
, 2); /* URB 16 */
1031 /* initialize I2C registers to avoid getting no ACK at first I2C operation: */
1032 ret
+= sn9c20x_i2c_initialize(dev
);
1034 /* enable I2C communication (bit 0) */
1035 buf
[0] = 0x21; /* THE OLD DRIVER 5.5.8.12 WRITES 0x5d */
1036 ret
+= usb_microdia_control_write(dev
, 0x10c8, buf
, 1); /* URB 17 */
1038 /* probe sensor model: */
1039 retSP
= mt9vx11_sensor_probe(dev
); /* substitutes URBs 18-48 */
1040 if ((retSP
== 0) && (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
))
1041 /* switch (back) to IFP address space: */
1042 retASS
= mt9v111_select_address_space(dev
, MT9V111_ADDRESSSPACE_IFP
);
1044 ret
+= usb_microdia_control_write(dev
, 0x118a, buf_0395
, 1); /* URB 81 => write value read with URB 8 */
1046 ret
+= usb_microdia_control_write(dev
, 0x0395, buf_0395
, 1); /* URB 82 => write value read with URB 8 */
1048 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf_11b8
, 1); /* URB 83 => write value read with URB 11 */
1050 ret
+= usb_microdia_control_write(dev
, 0x1000, buf_1000
, 5); /* URB 84 => write value read with URB 13 */
1052 ret
+= usb_microdia_control_write(dev
, 0x1060, buf_1060
, 2); /* URB 85 => write value read with URB 15; (always 08 00 ???) */
1054 /* USB-interrupt-message: doesn't work yet (returns error -110) */
1055 /* 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 */
1058 * THE OLD DRIVER 5.5.8.12 DOES AN ADDITIONAL WRITE HERE:
1060 * usb_microdia_control_write(dev, 0x1020, wbuf, 1);
1063 if ((retSP
!= 0) || (retASS
!= 0) || (ret
< 33)) {
1065 UDIA_INFO("One ore more errors occured during initialization !\n");
1074 * @brief From UsbSnoop-plugin-parsed.log
1080 int microdia_627b_initialize(struct usb_microdia
*dev
)
1082 /* Apparently we don't need to write anything here */
1087 * @brief From init-start-stop-log (made by VÃctor M. Hernández Rocamora)
1091 * @returns 0 (ok) or -1 (error)
1095 * USB-Logger: SniffUSB 2.0
1097 * Comments behind read oprations contain HEX-values that appeared in the log
1099 int microdia_627f_initialize(struct usb_microdia
*dev
)
1104 ret
+= usb_microdia_control_read(dev
, 0x130d, buf
, 1); /* URB 5 0x81 */
1106 ret
+= usb_microdia_control_read(dev
, 0x1040, buf
, 1); /* URB 6 0xe4 */
1109 ret
+= usb_microdia_control_write(dev
, 0x10c8, buf
, 1); /* URB 7 */
1112 ret
+= usb_microdia_control_write(dev
, 0x1020, buf
, 1); /* URB 8 */
1114 ret
+= usb_microdia_control_read(dev
, 0x1045, buf
, 1); /* URB 9 0x0f */
1117 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); /* URB 10 */
1119 ret
+= usb_microdia_control_read(dev
, 0x1045, buf
, 1); /* URB 11 0x1f */
1122 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); /* URB 12 */
1124 ret
+= usb_microdia_control_read(dev
, 0x1045, buf
, 1); /* URB 13 0x0f */
1127 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); /* URB 14 */
1130 UDIA_INFO("One ore more errors occured during initialization !\n");
1137 * @brief From UsbSnoop-plugin-parsed.log
1141 * @returns 0 (OK) or <0 (Error)
1143 * @author Vincent, Kuzja
1145 int microdia_6288_initialize(struct usb_microdia
*dev
)
1153 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
1158 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
1167 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
1172 * @brief Wrapper function for device-specific startstream functions
1174 * @param dev Pointer to device structure
1178 * This will execute a function determined by the array #cameras and
1179 * the function find_camera().
1182 int dev_microdia_start_stream(struct usb_microdia
*dev
)
1185 if (dev
&& dev
->start_stream
)
1186 ret
= dev
->start_stream(dev
);
1192 * @brief From start.htm
1200 * For SN9C201 with MI1310.
1202 int microdia_6242_start_stream(struct usb_microdia
*dev
)
1208 0x01, 0x18, 0x00, 0x30, 0x00, 0x09, 0x00, 0xed,
1209 0x0f, 0xda, 0x0f, 0x3a, 0x00, 0x3a, 0x00, 0xd0,
1210 0x0f, 0xf7, 0x0f, 0x00, 0x00, 0x00, 0x60, 0x0a};
1213 0x02, 0x00, 0x02, 0x00, 0x50, 0x78, 0x00, 0x00,
1217 0x00, 0x20, 0x20, 0x20, 0x20, 0x00, 0x24, 0x3b,
1218 0x4f, 0x61, 0x71, 0x80, 0x8f, 0x9d, 0xab, 0xb8,
1219 0xc4, 0xd1, 0xdd, 0xe9, 0xf4, 0xff};
1221 __u8 qtable1
[64] = {
1222 0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
1223 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
1224 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
1225 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
1226 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
1227 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
1228 0x4f, 0x54, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
1229 0x64, 0x5c, 0x54, 0x64, 0x4b, 0x54, 0x58, 0x54};
1231 __u8 qtable2
[64] = {
1232 0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
1233 0x15, 0x26, 0x54, 0x36, 0x2e, 0x36, 0x54, 0x54,
1234 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1235 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1236 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1237 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1238 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1239 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54};
1241 __u8 first10c0
[7][3] = {
1251 __u8 second10c0a
[2][5] = {
1252 {0x01, 0x00, 0x0e, 0x00, 0x14},
1253 {0x03, 0x03, 0xc4, 0x05, 0x14}
1256 __u8 second10c0b
[3] =
1259 __u8 third10c0
[4][3] = {
1266 __u8 fourth10c0a
[3][3] = {
1272 __u8 fourth10c0b
[2][5] = {
1273 {0x2b, 0x01, 0x88, 0x01, 0x88},
1274 {0x2d, 0x01, 0x88, 0x01, 0x88}
1277 __u8 fifth10c0
[4][3] = {
1283 /* interrupt down */
1286 usb_microdia_control_write(dev
, 0x1066, buf
, 1); /* URB 1 */
1289 /* interrupt down */
1292 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
1295 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
1298 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
1301 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
1304 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
1307 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
1310 usb_microdia_control_write(dev
, 0x1020, buf
, 1);
1312 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20;
1313 buf
[3] = 0x10; buf
[4] = 0x08;
1314 usb_microdia_control_write(dev
, 0x1067, buf
, 5);
1316 buf
[0] = 0xb0; buf
[1] = dev
->sensor_slave_address
; buf
[2] = 0x0d;
1317 buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00;
1318 buf
[6] = 0x00; buf
[7] = 0x10; buf
[8] = 0x03;
1319 usb_microdia_control_write(dev
, 0x10c0, buf
, 9);
1321 usb_microdia_control_write(dev
, 0x10e0, urb10
, 24); /* URB 10 */
1323 buf
[0] = 0x00; buf
[1] = 0x00; buf
[3] = 0x00;
1324 usb_microdia_control_write(dev
, 0x10f8, buf
, 3);
1326 buf
[0] = 0x00; buf
[1] = 0x40; buf
[2] = 0x00;
1327 buf
[3] = 0xe0; buf
[4] = 0x03;
1328 usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
1330 usb_microdia_control_write(dev
, 0x1180, urb13
, 11);
1332 usb_microdia_control_write(dev
, 0x118b, urb14
, 22);
1334 buf
[0] = 0x00; buf
[1] = 0x00;
1335 usb_microdia_control_write(dev
, 0x11a1, buf
, 2);
1337 buf
[0] = 0x60; buf
[1] = 0x20; buf
[2] = 0x00;
1338 buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00;
1339 buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00;
1340 usb_microdia_control_write(dev
, 0x11b7, buf
, 9);
1343 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1346 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
1348 for (i
= 0; i
< 7; i
++)
1349 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1350 first10c0
[i
][0], dev
->sensor_flags
, &first10c0
[i
][1]); /* URB 9-48 */
1353 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
1356 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
1359 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 50 */
1362 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
1365 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
1368 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
1371 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
1374 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
1377 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
1380 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
1383 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
1386 usb_microdia_control_write(dev
, 0x11bf, buf
, 1);
1388 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
1389 second10c0a
[0][0], dev
->sensor_flags
, &second10c0a
[0][1]);
1391 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
1392 second10c0a
[1][0], dev
->sensor_flags
, &second10c0a
[1][1]);
1394 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
1395 0x09, dev
->sensor_flags
, NULL
);
1397 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1398 second10c0b
[0], dev
->sensor_flags
, &second10c0b
[1]);
1400 buf
[0] = 0x06; buf
[1] = 0x00; buf
[2] = 0x02;
1401 buf
[3] = 0x00; buf
[4] = 0x28; buf
[5] = 0x3c;
1402 usb_microdia_control_write(dev
, 0x1180, buf
, 6);
1404 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
1405 buf
[3] = 0xf0; buf
[4] = 0x00;
1406 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); /* URB 70 */
1409 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
1411 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
1412 usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
1414 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
1415 usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
1418 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
1421 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
1424 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
1427 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1430 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
1433 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
1436 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 80 */
1437 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1440 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1441 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1444 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1445 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1448 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1449 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1452 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1453 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1456 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 90 */
1458 for (i
= 0; i
< 4; i
++)
1459 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1460 third10c0
[i
][0], dev
->sensor_flags
, &third10c0
[i
][1]); /* URB 97-106 */
1463 usb_microdia_control_write(dev
, 0x1180, buf
, 1);
1465 for (i
= 0; i
< 3; i
++)
1466 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1467 fourth10c0a
[i
][0], dev
->sensor_flags
, &fourth10c0a
[i
][1]);
1469 for (i
= 0; i
< 2; i
++)
1470 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
1471 fourth10c0b
[i
][0], dev
->sensor_flags
, &fourth10c0b
[i
][1]);
1473 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
1474 0x33, dev
->sensor_flags
, NULL
);
1476 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1477 first10c0
[0][0], dev
->sensor_flags
, &first10c0
[0][1]);
1480 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
1483 usb_microdia_control_write(dev
, 0x118b, buf
, 1);
1486 usb_microdia_control_write(dev
, 0x10f7, buf
, 1);
1489 usb_microdia_control_write(dev
, 0x10f8, buf
, 1);
1492 usb_microdia_control_write(dev
, 0x10fa, buf
, 1);
1495 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
1498 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
1501 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
1503 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
1504 usb_microdia_control_write(dev
, 0x11bc, buf
, 4);
1506 /* Set whole array buf to 0x00 */
1507 memset(buf
, 0x00, 48);
1508 usb_microdia_control_write(dev
, 0x11c0, buf
, 48);
1510 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a;
1511 buf
[3] = 0x05; buf
[4] = 0x04; buf
[5] = 0x3f;
1512 usb_microdia_control_write(dev
, 0x11a5, buf
, 6);
1514 buf
[0] = 0x14; buf
[1] = 0xec; buf
[2] = 0x0a; buf
[3] = 0xf6;
1515 usb_microdia_control_write(dev
, 0x11af, buf
, 4);
1517 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x2d; buf
[3] = 0xdd;
1518 usb_microdia_control_write(dev
, 0x11b3, buf
, 4);
1521 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
1524 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
1527 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
1529 usb_microdia_control_write(dev
, 0x1100, qtable1
, 64);
1531 usb_microdia_control_write(dev
, 0x1140, qtable2
, 64); /* URB 150 */
1534 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
1537 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
1540 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
1543 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
1546 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
1549 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
1552 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
1555 usb_microdia_control_write(dev
, 0x11bf, buf
, 1);
1557 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
1558 second10c0a
[0][0], dev
->sensor_flags
, &second10c0a
[0][1]);
1560 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
1561 second10c0a
[1][0], dev
->sensor_flags
, &second10c0a
[1][1]);
1563 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
1564 0x09, dev
->sensor_flags
, NULL
);
1566 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1567 second10c0b
[0], dev
->sensor_flags
, &second10c0b
[1]);
1569 buf
[0] = 0x06; buf
[1] = 0x00; buf
[2] = 0x02;
1570 buf
[3] = 0x00; buf
[4] = 0x28; buf
[5] = 0x3c;
1571 usb_microdia_control_write(dev
, 0x1180, buf
, 6);
1573 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00;
1574 buf
[3] = 0xf0; buf
[4] = 0x00;
1575 usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
1578 usb_microdia_control_write(dev
, 0x1189, buf
, 1);
1580 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
1581 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); /* URB 170 */
1583 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
1584 usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
1587 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
1590 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
1593 usb_microdia_control_write(dev
, 0x11b9, buf
, 1);
1596 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
1599 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
1602 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
1605 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
1608 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
1611 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 180 */
1614 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
1617 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
1620 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1621 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1624 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1625 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1628 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1629 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1632 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1633 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 190 */
1636 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1637 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1640 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1642 for (i
= 0; i
< 3; i
++)
1643 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1644 fifth10c0
[i
][0], dev
->sensor_flags
, &fifth10c0
[i
][1]); /* URB 200-205 */
1646 sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1647 0x00, dev
->sensor_flags
, buf
);
1648 /* __u8 result[2] = {buf[3], buf[4]}; */
1651 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
1658 * @brief From startstream.log
1666 * For SN9C201 with SOI968.
1667 * This is function triggers a working stream of image data and a glowing LED.
1669 int microdia_624e_start_stream(struct usb_microdia
*dev
)
1672 __u8 unknown1
[9] = { dev
->sensor_flags
, dev
->sensor_slave_address
,
1673 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
1766 __u8 qtable1
[64] = {
1767 0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
1768 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
1769 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
1770 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
1771 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
1772 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
1773 0x4f, 0x53, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
1774 0x64, 0x5c, 0x53, 0x64, 0x4b, 0x53, 0x58, 0x53
1777 __u8 qtable2
[64] = {
1778 0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
1779 0x15, 0x26, 0x53, 0x36, 0x2e, 0x36, 0x53, 0x53,
1780 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
1781 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
1782 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
1783 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
1784 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
1785 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53
1789 for (i
= 0; i
< ARRAY_SIZE(regs
); i
++) {
1792 ret
= usb_microdia_control_write(dev
, reg
, &value
, 1);
1794 UDIA_INFO("Bridge Init Error (%d). line %d\n", ret
, i
);
1799 memset(reg_11c0
, 0x00, 48);
1800 ret
= usb_microdia_control_write(dev
, 0x11c0, reg_11c0
, 48);
1804 ret
= usb_microdia_control_write(dev
, 0x1100, qtable1
, 64);
1808 ret
= usb_microdia_control_write(dev
, 0x1140, qtable2
, 64);
1812 /* this is the same register as the I2C write, not sure why
1813 * we're writing 9 bytes -- the SN9C102 docs say all writes
1814 * must be 8 bytes, but we don't have docs for SN9C20x */
1815 ret
= usb_microdia_control_write(dev
, 0x10c0, unknown1
, 9);
1819 if (dev
->sensor_init
)
1820 dev
->sensor_init(dev
);
1825 UDIA_ERROR("start stream: failed (%d)!\n", ret
);
1829 int microdia_624f_start_stream(struct usb_microdia
*dev
)
1832 __u8 unknown1
[9] = { dev
->sensor_flags
, dev
->sensor_slave_address
,
1833 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
1897 __u8 reg_11c0
[48] = {
1898 0x10, 0x21, 0x34, 0x40, 0x47, 0x4f, 0x57, 0x5f,
1899 0x64, 0x68, 0x6d, 0x73, 0x79, 0x80, 0x89, 0x97,
1900 0x0d, 0x1c, 0x2a, 0x33, 0x38, 0x3d, 0x44, 0x4a,
1901 0x4e, 0x52, 0x56, 0x5b, 0x61, 0x68, 0x6f, 0x7a,
1902 0x0d, 0x1a, 0x2a, 0x31, 0x36, 0x3b, 0x41, 0x47,
1903 0x4a, 0x4e, 0x53, 0x58, 0x5d, 0x64, 0x6b, 0x76
1906 __u8 qtable1
[64] = {
1907 0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
1908 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
1909 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
1910 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
1911 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
1912 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
1913 0x4f, 0x54, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
1914 0x64, 0x5c, 0x54, 0x64, 0x4b, 0x54, 0x58, 0x54
1917 __u8 qtable2
[64] = {
1918 0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
1919 0x15, 0x26, 0x54, 0x36, 0x2e, 0x36, 0x54, 0x54,
1920 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1921 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1922 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1923 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1924 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1925 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54
1928 for (i
= 0; i
< ARRAY_SIZE(regs
); i
++) {
1931 ret
= usb_microdia_control_write(dev
, reg
, &value
, 1);
1933 UDIA_INFO("Bridge Init Error (%d). line %d\n", ret
, i
);
1938 ret
= usb_microdia_control_write(dev
, 0x11c0, reg_11c0
, 48);
1942 ret
= usb_microdia_control_write(dev
, 0x1100, qtable1
, 64);
1946 ret
= usb_microdia_control_write(dev
, 0x1140, qtable2
, 64);
1950 /* this is the same register as the I2C write, not sure why
1951 * we're writing 9 bytes -- the SN9C102 docs say all writes
1952 * must be 8 bytes, but we don't have docs for SN9C20x */
1953 ret
= usb_microdia_control_write(dev
, 0x10c0, unknown1
, 9);
1957 if (dev
->sensor_init
)
1958 dev
->sensor_init(dev
);
1963 UDIA_ERROR("start stream: failed (%d)!\n", ret
);
1968 * @brief Start stream from 6260 devices
1972 * @returns 0 or negative error code
1975 int microdia_6260_start_stream(struct usb_microdia
*dev
)
1980 ret
= usb_microdia_control_read(dev
, 0x1045, buf
, 1);
1982 ret
= usb_microdia_control_write(dev
, 0x1045, buf
, 1);
1984 ret
= usb_microdia_control_write(dev
, 0x1066, buf
, 1);
1986 ret
= usb_microdia_control_write(dev
, 0x1007, buf
, 1);
1988 ret
= usb_microdia_control_write(dev
, 0x1006, buf
, 1);
1990 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
1992 ret
= usb_microdia_control_write(dev
, 0x1001, buf
, 1);
1994 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
1996 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
1998 ret
= usb_microdia_control_write(dev
, 0x1020, buf
, 1);
2000 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20; buf
[3] = 0x10;
2002 ret
= usb_microdia_control_write(dev
, 0x1067, buf
, 5);
2004 buf
[0] = 0x80; buf
[1] = 0x21; buf
[2] = 0x00; buf
[3] = 0x00;
2005 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
2007 ret
= usb_microdia_control_write(dev
, 0x10c0, buf
, 9);
2009 buf
[0] = 0x45; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30;
2010 buf
[4] = 0x00; buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed;
2011 buf
[8] = 0x0f; buf
[9] = 0xda; buf
[10] = 0x0f; buf
[11] = 0x3a;
2012 buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00; buf
[15] = 0xd0;
2013 buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
2014 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
2015 ret
= usb_microdia_control_write(dev
, 0x10e0, buf
, 24);
2017 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
2018 ret
= usb_microdia_control_write(dev
, 0x10f8, buf
, 3);
2020 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0;
2022 ret
= usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
2024 buf
[0] = 0x8a; buf
[1] = 0x8c; buf
[2] = 0x08;
2025 ret
= usb_microdia_control_write(dev
, 0x1188, buf
, 3);
2027 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20;
2028 buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b;
2029 buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80;
2030 buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8;
2031 buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
2032 buf
[20] = 0xf4; buf
[21] = 0xff;
2033 ret
= usb_microdia_control_write(dev
, 0x118b, buf
, 22);
2035 buf
[0] = 0x00; buf
[1] = 0x00;
2036 ret
= usb_microdia_control_write(dev
, 0x11a1, buf
, 2);
2038 buf
[0] = 0x60; buf
[1] = 0x28; buf
[2] = 0x00; buf
[3] = 0x00;
2039 buf
[4] = 0x00; buf
[5] = 0x40; buf
[6] = 0x01; buf
[7] = 0xf0;
2041 ret
= usb_microdia_control_write(dev
, 0x11b7, buf
, 9);
2044 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
2047 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2049 ret
= ov7670_initialise(dev
);
2053 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1, 0x3b, dev
->sensor_flags
, buf
);
2054 ret
= usb_microdia_control_read(dev
, 0x10c1, buf
, 1);
2056 ret
= usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
2058 /* TRY TO READ FROM EEPROM: */
2059 ret
= sn9c20x_read_i2c_data(dev
, 0x50, 1, 0x00, dev
->sensor_flags
, buf
);
2061 UDIA_INFO("No EEPROM found\n");
2063 UDIA_INFO("Read from EEPROM successful\n");
2066 ret
= usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
2068 ret
= usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
2070 ret
= usb_microdia_control_write(dev
, 0x1001, buf
, 1);
2072 ret
= usb_microdia_control_write(dev
, 0x1001, buf
, 1);
2074 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00;
2075 buf
[4] = 0x50; buf
[5] = 0x3c;
2076 ret
= usb_microdia_control_write(dev
, 0x1180, buf
, 6);
2078 buf
[0] = 0x00; buf
[1] = 0x40; buf
[2] = 0x00; buf
[3] = 0xf0;
2080 ret
= usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
2083 ret
= usb_microdia_control_write(dev
, 0x1189, buf
, 1);
2085 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0x50;
2086 ret
= usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
2088 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x3c;
2089 ret
= usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
2091 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
2093 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
2095 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
2097 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2099 ret
= usb_microdia_control_write(dev
, 0x118a, buf
, 1);
2101 ret
= usb_microdia_control_write(dev
, 0x0395, buf
, 1);
2103 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2104 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2106 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2107 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2109 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2110 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2112 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2113 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2115 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2116 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2118 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2119 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2121 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2123 /* OV7670 Intialise Part 2 */
2124 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00;
2125 buf
[4] = 0x50; buf
[5] = 0x3c;
2126 ret
= usb_microdia_control_write(dev
, 0x1180, buf
, 6);
2128 buf
[0] = 0x00; buf
[1] = 0x40; buf
[2] = 0x00; buf
[3] = 0xf0;
2130 ret
= usb_microdia_control_write(dev
, 0x10fb, buf
, 5);
2133 ret
= usb_microdia_control_write(dev
, 0x1189, buf
, 1);
2135 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0x50;
2136 ret
= usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
2138 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x3c;
2139 ret
= usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
2142 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
2144 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
2146 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
2148 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
2150 ret
= usb_microdia_control_write(dev
, 0x1002, buf
, 1);
2152 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2154 ret
= usb_microdia_control_write(dev
, 0x118a, buf
, 1);
2156 ret
= usb_microdia_control_write(dev
, 0x0395, buf
, 1);
2158 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2159 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2161 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2162 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2164 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2165 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2167 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2168 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2170 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2171 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2173 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2174 ret
= usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
2176 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
2178 /* OV7670 Initialisation Part 3 Goes Here */
2180 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
2186 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
2190 * @returns 0 (ok) or -1 (error)
2194 * Windows driver versions: 5.7.23.000
2195 * Windows versions: 2000 and XP
2196 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
2197 * All logs were made using AMCAP with 640x480, RGB24
2199 int microdia_6270_start_stream(struct usb_microdia
*dev
)
2206 /* Check if sensor slave address is valid: */
2207 if ((dev
->sensor_slave_address
!= MT9V111_I2C_SLAVE_ADDRESS
) && (dev
->sensor_slave_address
!= MT9V011_I2C_SLAVE_ADDRESS
)) {
2208 UDIA_INFO("microdia_6270_start_stream(): Invalid sensor slave address !\n");
2212 /* <= INTERRUPT COMING BACK (URB 1953) */
2213 /* SWITCH TO ALTERNATE SETTINGS 8 (URB 1954) // NOT IN ALEX'S LOG */
2214 /* => INTERRUPT GOING DOWN (URB 1955) */
2217 usb_microdia_control_write(dev
, 0x1066, buf
, 1); /* URB 1956 */
2219 /* <= INTERRUPT COMING BACK (URB 1955) */
2220 /* => INTERRUPT GOING DOWN (URB 1957) */
2223 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 1958 */
2225 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 1959 */
2227 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 1960 */
2229 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 1961 */
2231 usb_microdia_control_write(dev
, 0x1020, buf
, 1); /* URB 1962 */
2232 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20; buf
[3] = 0x10; buf
[4] = 0x08;
2233 usb_microdia_control_write(dev
, 0x1067, buf
, 5); /* URB 1963 */
2235 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2236 /* STRANGE I2C MESSAGE: */
2238 /* - byte 8 = 0x00 at first start + first cycle */
2239 /* - procedure not complete: no wait/check for ack/error, no readout of 0x10c2 */
2240 /* - dummy writes at first cycle and read at second cycle, but there are many I2C messages in the meantime, so this should not work */
2242 /* AT FIRST START + FIRST CYCLE: */
2243 buf
[0] = 0x80; buf
[1] = dev
->sensor_slave_address
; buf
[2] = 0x00; buf
[3] = 0x00;
2244 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x03;
2245 /* AT ALL FURTHER STARTS + FIRST CYCLE: */
2246 /* MT9V111: I2C MESSAGE => IFP Register 0x33: Auto exposure */
2247 /* buf[0] = 0x90; buf[1] = dev->sensor_slave_address; buf[2] = 0x33; buf[3] = 0x00; */
2248 /* buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03; */
2249 /* MT9V011: ????????????????????????? */
2250 /* buf[0] = 0x90; buf[1] = dev->sensor_slave_address; buf[2] = 0x07; buf[3] = 0x00; */
2251 /* buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03; */
2252 /* ALWAYS AT 2nd AND FURTHER CYCLES: */
2254 /* buf[0] = 0xa2; buf[1] = 0x5c; buf[2] = 0x00; buf[3] = 0x36; */
2255 /* buf[4] = 0x00; buf[5] = 0x82; buf[6] = 0x3a; buf[7] = 0x10; buf[8] = 0x03; */
2256 /* => buf[3] to buf[6] simply contain bytes read with URB 2215 */
2258 /* buf[0] = 0xb0; buf[1] = 0x5d; buf[2] = 0x07; buf[3] = 0x00; */
2259 /* buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03; */
2260 usb_microdia_control_write(dev
, 0x10c0, buf
, 9); /* URB 1964 */
2261 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2263 buf
[0] = 0x45; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30;
2264 buf
[4] = 0x00; buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed;
2265 buf
[8] = 0x0f; buf
[9] = 0xda; buf
[10] = 0x0f; buf
[11] = 0x3a;
2266 buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00; buf
[15] = 0xd0;
2267 buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
2268 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
2269 usb_microdia_control_write(dev
, 0x10e0, buf
, 24); /* URB 1965 */
2270 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
2271 usb_microdia_control_write(dev
, 0x10f8, buf
, 3); /* URB 1966 */
2272 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
2273 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); /* URB 1967 */
2274 buf
[0] = 0x06; buf
[1] = 0x0c; buf
[2] = 0x08;
2275 usb_microdia_control_write(dev
, 0x1188, buf
, 3); /* URB 1968 */
2276 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20;
2277 buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b;
2278 buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80;
2279 buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8;
2280 buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
2281 buf
[20] = 0xf4; buf
[21] = 0xff;
2282 usb_microdia_control_write(dev
, 0x118b, buf
, 22); /* URB 1969 */
2283 buf
[0] = 0x00; buf
[1] = 0x00;
2284 usb_microdia_control_write(dev
, 0x11a1, buf
, 2); /* URB 1970 */
2285 buf
[0] = 0x60; buf
[1] = 0x28; buf
[2] = 0x00; buf
[3] = 0x08;
2286 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
2288 usb_microdia_control_write(dev
, 0x11b7, buf
, 9); /* URB 1971 */
2290 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 1972 */
2292 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 1973 */
2294 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2297 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2298 /* Write to IFP register 0x0d: Color Correction Register 8 */
2299 buf
[0] = 0x00; buf
[1] = 0x01;
2300 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
); /* URBs 1974-1976 */
2301 /* Write to IFP register 0x0d: Color Correction Register 8 */
2302 buf
[0] = 0x00; buf
[1] = 0x00; /* ??? */
2303 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
); /* URBs 1977-1979 */
2304 /* Writes to IFP registers 0x01: Register Address Space Selection */
2305 /* 0x02: Color Correction Register 1 */
2306 buf
[0] = 0x00; buf
[1] = 0x01; /* select IFP address space */
2307 buf
[2] = 0x00; buf
[3] = 0x16; /* ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
2308 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x01, dev
->sensor_flags
, buf
); /* URBs 1980-1982 */
2309 /* Writes to IFP registers 0x03: Color Correction Register 3 */
2310 /* 0x04: Color Correction Register 4 */
2311 buf
[0] = 0x01; buf
[1] = 0xe1; /* ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
2312 buf
[2] = 0x02; buf
[3] = 0x81; /* ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
2313 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x03, dev
->sensor_flags
, buf
); /* URBs 1983-1985 */
2314 /* Writes to IFP registers 0x05: Aperture Correction (Sharpening) */
2315 /* 0x06: Operating Mode Control */
2316 buf
[0] = 0x00; buf
[1] = 0x04; /* 100% sharpening, no automatic sharpness reduction at low light // AT FIRST START + FIRST CYCLE: 0x00 0x00: no sharpening */
2317 buf
[2] = 0x00; buf
[3] = 0x00; /* stop AWB at the current values, no on-the-fly defect correction, no auto exposure, + RESREVED option */
2318 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x05, dev
->sensor_flags
, buf
); /* URBs 1986-1988 */
2319 /* Writes to IFP registers 0x07: Image Flow Processor Soft Reset */
2320 /* 0x08: Output Format Control */
2321 buf
[0] = 0x30; buf
[1] = 0x02; /* reset // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
2322 buf
[2] = 0x04; buf
[3] = 0x80; /* bypass entire image processing, raw 8+2 Bayer data output directly */
2323 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x07, dev
->sensor_flags
, buf
); /* URBs 1989-1991 */
2324 /* "Dummy" write to IFP Register 0x11: Color Correction Register 12 */
2325 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x11, dev
->sensor_flags
, NULL
); /* URBs 1992-1993 */
2326 /* Write to register 0x01: Register address space selection */
2327 /* Write to sensor register 0x02: Column Start */
2328 buf
[0] = 0x00; buf
[1] = 0x04; /* select sensor address space */
2329 buf
[2] = 0x00; buf
[3] = 0x16; /* start with column 22 */
2330 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x01, dev
->sensor_flags
, buf
); /* URBs 1994-1996 */
2331 /* Writes to sensor registers 0x03: Window Height */
2332 /* 0x04: Window Width */
2333 buf
[0] = 0x01; buf
[1] = 0xe6; /* 486 */
2334 buf
[2] = 0x02; buf
[3] = 0x86; /* 646 */
2335 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x03, dev
->sensor_flags
, buf
); /* URBs 1997-1999 */
2336 /* Writes to sensor registers 0x05: Horizontal Blanking */
2337 /* 0x06: Vertical Blanking */
2338 buf
[0] = 0x00; buf
[1] = 0x04; /* 4 columns (pixel clocks) // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
2339 buf
[2] = 0x00; buf
[3] = 0x00; /* 0 rows */
2340 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x05, dev
->sensor_flags
, buf
); /* URBs 2000-2002 */
2341 /* Writes to sensor registers 0x07: Output Control */
2342 /* 0x08: Row Start */
2343 buf
[0] = 0x30; buf
[1] = 0x02; /* normal operation + chip enable + RESERVED options */
2344 buf
[2] = 0x00; buf
[3] = 0x08; /* row 8 */
2345 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x07, dev
->sensor_flags
, buf
); /* URBs 2003-2005 */
2346 /* "Dummy" write to sensor Register 0x11: UNDOCUMENTED */
2347 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x11, dev
->sensor_flags
, NULL
); /* URBs 2006-2007 */
2348 /* Writes to sensor registers 0x0c: Shutter Delay */
2349 /* 0x0d: Reset (Soft) (from MT9V011 datasheet) */
2350 buf
[0] = 0x00; buf
[1] = 0x00; /* 0 master clocks */
2351 buf
[2] = 0x00; buf
[3] = 0x00; /* return to normal operation */
2352 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0c, dev
->sensor_flags
, buf
); /* URBs 2008-2010 */
2353 /* Writes to sensor registers 0x0e: UNDOCUMENTED */
2354 /* 0x0f: UNDOCUMENTED */
2355 buf
[0] = 0x00; buf
[1] = 0x00;
2356 buf
[2] = 0x00; buf
[3] = 0x00;
2357 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0e, dev
->sensor_flags
, buf
); /* URBs 2011-2013 */
2358 /* Writes to sensor registers 0x10: UNDOCUMENTED */
2359 /* 0x11: UNDOCUMENTED */
2360 buf
[0] = 0x00; buf
[1] = 0x00;
2361 buf
[2] = 0x00; buf
[3] = 0x00;
2362 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x10, dev
->sensor_flags
, buf
); /* URBs 2014-2016 */
2363 /* Writes to sensor registers 0x12: 2X Zoom Col Start => 0x1e bit 0 must be set to activate zoom */
2364 /* 0x13: 2X Zoom Row Start => 0x1e bit 0 must be set to activate zoom */
2365 buf
[0] = 0x00; buf
[1] = 0xb0; /* column 176 */
2366 buf
[2] = 0x00; buf
[3] = 0x7c; /* row 124 */
2367 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x12, dev
->sensor_flags
, buf
); /* URBs 2017-2018 */
2368 /* Writes to sensor registers 0x14: UNDOCUMENTED */
2369 /* 0x15: UNDOCUMENTED */
2370 buf
[0] = 0x00; buf
[1] = 0x00;
2371 buf
[2] = 0x00; buf
[3] = 0x00;
2372 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x14, dev
->sensor_flags
, buf
); /* URBs 2019-2021 */
2373 /* Writes to sensor registers 0x16: UNDOCUMENTED */
2374 /* 0x17: UNDOCUMENTED */
2375 buf
[0] = 0x00; buf
[1] = 0x00;
2376 buf
[2] = 0x00; buf
[3] = 0x00;
2377 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x16, dev
->sensor_flags
, buf
); /* URBs 2022-2024 */
2378 /* Writes to sensor registers 0x18: UNDOCUMENTED */
2379 /* 0x19: UNDOCUMENTED */
2380 buf
[0] = 0x00; buf
[1] = 0x00;
2381 buf
[2] = 0x00; buf
[3] = 0x00;
2382 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x18, dev
->sensor_flags
, buf
); /* URBs 2025-2027 */
2383 /* Writes to sensor registers 0x1a: UNDOCUMENTED */
2384 /* 0x1b: UNDOCUMENTED */
2385 buf
[0] = 0x00; buf
[1] = 0x00;
2386 buf
[2] = 0x00; buf
[3] = 0x00;
2387 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1a, dev
->sensor_flags
, buf
); /* URBs 2028-2030 */
2388 /* Writes to sensor registers 0x1c: UNDOCUMENTED */
2389 /* 0x1d: UNDOCUMENTED */
2390 buf
[0] = 0x00; buf
[1] = 0x00;
2391 buf
[2] = 0x00; buf
[3] = 0x00;
2392 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1c, dev
->sensor_flags
, buf
); /* URBs 2031-2033 */
2393 /* Write to sensor register 0x30: RESERVED */
2394 buf
[0] = 0x00; buf
[1] = 0x00;
2395 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x30, dev
->sensor_flags
, buf
); /* URBs 2034-2036 */
2396 /* Write to sensor register 0x20: Read Mode */
2397 buf
[0] = 0x00; buf
[1] = 0x00; /* normal readout */
2398 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
); /* URBs 2037-2039 */
2399 /* Writes to sensor registers 0x30: RESERVED */
2400 /* 0x31: RESERVED */
2401 buf
[0] = 0x00; buf
[1] = 0x05;
2402 buf
[2] = 0x00; buf
[3] = 0x00;
2403 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x30, dev
->sensor_flags
, buf
); /* URBs 2040-2042 */
2404 /* "Dummy" write to sensor Register 0x34: RESERVED */
2405 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x34, dev
->sensor_flags
, NULL
); /* URBs 2043-2044 */
2406 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
2407 /* Write to sensor register 0x07: Output Control */
2408 buf
[0] = 0x00; buf
[1] = 0x02; /* chip enable, normal operation */
2409 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
2410 /* Write to sensor register 0x0d: Soft Reset */
2411 buf
[0] = 0x00; buf
[1] = 0x01; /* reset */
2412 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
);
2413 /* Write to sensor register 0x0d: Soft Reset */
2414 buf
[0] = 0x00; buf
[1] = 0x00; /* resume operation */
2415 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
);
2416 /* Writes to sensor registers 0x01: Row start */
2417 /* 0x02: Column Start */
2418 buf
[0] = 0x00; buf
[1] = 0x08; /* start with row 8 */
2419 buf
[2] = 0x00; buf
[3] = 0x16; /* start with column 22 */
2420 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x01, dev
->sensor_flags
, buf
);
2421 /* Writes to sensor registers 0x03: Window Height */
2422 /* 0x04: Window Width */
2423 buf
[0] = 0x01; buf
[1] = 0xe1; /* 481 */
2424 buf
[2] = 0x02; buf
[3] = 0x81; /* 641 */
2425 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x03, dev
->sensor_flags
, buf
);
2426 /* Writes to sensor registers 0x05: Horizontal Blanking */
2427 /* 0x06: Vertical Blanking */
2428 buf
[0] = 0x00; buf
[1] = 0x83; /* 131 columns (pixel clocks) */
2429 buf
[2] = 0x00; buf
[3] = 0x06; /* 6 rows */
2430 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x05, dev
->sensor_flags
, buf
);
2431 /* Write to sensor register 0x0d: Soft Reset */
2432 buf
[0] = 0x00; buf
[1] = 0x02; /* UNKNOWN */
2433 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
);
2434 /* Writes to sensor registers 0x0a: Pixel Clock Speed */
2435 /* 0x0b: Frame Restart */
2436 buf
[0] = 0x00; buf
[1] = 0x00; /* default */
2437 buf
[2] = 0x00; buf
[3] = 0x00; /* (has no effect/no restart) */
2438 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0a, dev
->sensor_flags
, buf
);
2439 /* Writes to sensor registers 0x0c: Shutter Delay */
2440 /* 0x0d: Soft Reset */
2441 buf
[0] = 0x00; buf
[1] = 0x00; /* 0 master clocks */
2442 buf
[2] = 0x00; buf
[3] = 0x00; /* resume operation */
2443 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0c, dev
->sensor_flags
, buf
);
2444 /* Writes to sensor registers 0x0e: UNDOCUMENTED */
2445 /* 0x0f: UNDOCUMENTED */
2446 buf
[0] = 0x00; buf
[1] = 0x00;
2447 buf
[2] = 0x00; buf
[3] = 0x00;
2448 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0e, dev
->sensor_flags
, buf
);
2449 /* Writes to sensor registers 0x10: UNDOCUMENTED */
2450 /* 0x11: UNDOCUMENTED */
2451 buf
[0] = 0x00; buf
[1] = 0x00;
2452 buf
[2] = 0x00; buf
[3] = 0x00;
2453 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x10, dev
->sensor_flags
, buf
);
2454 /* Writes to sensor registers 0x12: 2X Zoom Column Start (from MT9V111 datasheet) */
2455 /* 0x13: 2X Zoom Row Start (from MT9V111 datasheet) */
2456 buf
[0] = 0x00; buf
[1] = 0x00; /* column 0 => bit0 of reg 0x1e must be set to activate zoom */
2457 buf
[2] = 0x00; buf
[3] = 0x00; /* row 0 => bit0 of reg 0x1e must be set to activate zoom */
2458 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x12, dev
->sensor_flags
, buf
);
2459 /* Writes to sensor registers 0x14: UNDOCUMENTED */
2460 /* 0x15: UNDOCUMENTED */
2461 buf
[0] = 0x00; buf
[1] = 0x00;
2462 buf
[2] = 0x00; buf
[3] = 0x00;
2463 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x14, dev
->sensor_flags
, buf
);
2464 /* Writes to sensor registers 0x16: UNDOCUMENTED */
2465 /* 0x17: UNDOCUMENTED */
2466 buf
[0] = 0x00; buf
[1] = 0x00;
2467 buf
[2] = 0x00; buf
[3] = 0x00;
2468 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x16, dev
->sensor_flags
, buf
);
2469 /* Writes to sensor registers 0x18: UNDOCUMENTED */
2470 /* 0x19: UNDOCUMENTED */
2471 buf
[0] = 0x00; buf
[1] = 0x00;
2472 buf
[2] = 0x00; buf
[3] = 0x00;
2473 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x18, dev
->sensor_flags
, buf
);
2474 /* Writes to sensor registers 0x1a: UNDOCUMENTED */
2475 /* 0x1b: UNDOCUMENTED */
2476 buf
[0] = 0x00; buf
[1] = 0x00;
2477 buf
[2] = 0x00; buf
[3] = 0x00;
2478 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1a, dev
->sensor_flags
, buf
);
2479 /* Writes to sensor registers 0x1c: UNDOCUMENTED */
2480 /* 0x1d: UNDOCUMENTED */
2481 buf
[0] = 0x00; buf
[1] = 0x00;
2482 buf
[2] = 0x00; buf
[3] = 0x00;
2483 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1c, dev
->sensor_flags
, buf
);
2484 /* Write to sensor register 0x32: RESERVED */
2485 buf
[0] = 0x00; buf
[1] = 0x00;
2486 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x32, dev
->sensor_flags
, buf
);
2487 /* Writes to sensor registers 0x20: Read Mode */
2488 /* 0x21: RESERVED */
2489 buf
[0] = 0x11; buf
[1] = 0x01; /* output all frames (including bad frames) + UNDOCUMENTED */
2490 buf
[2] = 0x00; buf
[3] = 0x00;
2491 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x20, dev
->sensor_flags
, buf
);
2492 /* Writes to sensor registers 0x22: RESERVED */
2493 /* 0x23: UNDOCUMENTED */
2494 buf
[0] = 0x00; buf
[1] = 0x00;
2495 buf
[2] = 0x00; buf
[3] = 0x00;
2496 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x22, dev
->sensor_flags
, buf
);
2497 /* Writes to sensor registers 0x24: UNDOCUMENTED */
2498 /* 0x25: UNDOCUMENTED */
2499 buf
[0] = 0x00; buf
[1] = 0x00;
2500 buf
[2] = 0x00; buf
[3] = 0x00;
2501 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x24, dev
->sensor_flags
, buf
);
2502 /* Writes to sensor registers 0x26: UNDOCUMENTED */
2503 /* 0x27: RESERVED */
2504 buf
[0] = 0x00; buf
[1] = 0x00;
2505 buf
[2] = 0x00; buf
[3] = 0x24;
2506 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x26, dev
->sensor_flags
, buf
);
2507 /* "Dummy" write to sensor Register 0x30: RESERVED */
2508 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x30, dev
->sensor_flags
, NULL
);
2509 /* Writes to sensor registers 0x2f: RESERVED */
2510 /* 0x30: RESERVED */
2511 buf
[0] = 0xf7; buf
[1] = 0xb0;
2512 buf
[2] = 0x00; buf
[3] = 0x05;
2513 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2f, dev
->sensor_flags
, buf
);
2514 /* Writes to sensor registers 0x31: RESERVED */
2515 /* 0x32: RESERVED */
2516 buf
[0] = 0x00; buf
[1] = 0x00;
2517 buf
[2] = 0x00; buf
[3] = 0x00;
2518 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x31, dev
->sensor_flags
, buf
);
2519 /* Writes to sensor registers 0x33: RESERVED */
2520 /* 0x34: RESERVED */
2521 buf
[0] = 0x00; buf
[1] = 0x00;
2522 buf
[2] = 0x01; buf
[3] = 0x00;
2523 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x33, dev
->sensor_flags
, buf
);
2524 /* "Dummy" write to sensor Register 0x3b: RESERVED */
2525 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x3b, dev
->sensor_flags
, NULL
);
2526 /* Write to sensor register 0x3d: RESERVED */
2527 buf
[0] = 0x06; buf
[1] = 0x8f;
2528 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x3d, dev
->sensor_flags
, buf
);
2529 /* Writes to sensor registers 0x40: RESERVED */
2530 /* 0x41: RESERVED */
2531 buf
[0] = 0x01; buf
[1] = 0xe0;
2532 buf
[2] = 0x00; buf
[3] = 0xd1;
2533 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x40, dev
->sensor_flags
, buf
);
2534 /* Write to sensor register 0x44: UNDOCUMENTED */
2535 buf
[0] = 0x00; buf
[1] = 0x82;
2536 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x44, dev
->sensor_flags
, buf
);
2537 /* Writes to sensor registers 0x5a: RESERVED */
2538 /* 0x5b: RESERVED */
2539 buf
[0] = 0x00; buf
[1] = 0x00;
2540 buf
[2] = 0x00; buf
[3] = 0x00;
2541 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x5a, dev
->sensor_flags
, buf
);
2542 /* Writes to sensor registers 0x5c: RESERVED */
2543 /* 0x5d: RESERVED */
2544 buf
[0] = 0x00; buf
[1] = 0x00;
2545 buf
[2] = 0x00; buf
[3] = 0x00;
2546 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x5c, dev
->sensor_flags
, buf
);
2547 /* Writes to sensor registers 0x5e: RESERVED */
2548 /* 0x5f: RESERVED */
2549 buf
[0] = 0x00; buf
[1] = 0x00;
2550 buf
[2] = 0xa3; buf
[3] = 0x1d;
2551 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x5e, dev
->sensor_flags
, buf
);
2552 /* "Dummy" write to sensor Register 0x68: UNDOCUMENTED */
2553 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x68, dev
->sensor_flags
, NULL
);
2554 /* Write to sensor register 0x62: RESERVED */
2555 buf
[0] = 0x06; buf
[1] = 0x11;
2556 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x62, dev
->sensor_flags
, buf
);
2559 UDIA_INFO("1 or more errors occured in I2C-message-block 1 !\n");
2562 /* END OF I2C MESSAGES */
2563 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2565 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
2567 usb_microdia_control_write(dev
, 0x1007, buf
, 8);
2569 usb_microdia_control_write(dev
, 0x1006, buf
, 8);
2573 /* *** TEMPORARY SWITCH TO SLAVE ADDRESS 0x50, I2C READ ATTEMPT: */
2574 /* - WE CURRENTLY KNOW NO 6270 CAM THAT IS SUCCESSFULLY READ HERE */
2575 /* - IF READ FAILS, THIS IS NEVER DONE AGAIN (IN NEXT CYCLE OR FURTHER STARTS) */
2576 usb_microdia_control_read(dev
, 0x10c1, buf
, 1); /* returns 0x5c */
2578 usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
2579 retI2C
= sn9c20x_read_i2c_data(dev
, 0x50, 1, 0x00, SN9C20X_I2C_2WIRE
, buf
);
2581 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");
2583 usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
2586 buf
[0] = 0x47; /* ALEX: 0x44 */
2587 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2045 */
2588 buf
[0] = 0x47; /* ALEX: 0x04 */
2589 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2046 */
2591 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 2047 */
2593 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 2048 */
2594 buf
[0] = 0x84; /* ALEX: 0xc0 */
2595 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 2049 */
2598 usb_microdia_control_write(dev, 0x1001, buf, 1);
2601 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2602 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2605 /* Writes to sensor registers 0x02: Column Start */
2606 /* 0x03: Window Height */
2607 buf
[0] = 0x00; buf
[1] = 0x16; /* coulmn 22 */
2608 buf
[2] = 0x01; buf
[3] = 0xe1; /* 481 */
2609 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x02, dev
->sensor_flags
, buf
); /* URBs 2050-2052 */
2610 /* Writes to sensor registers 0x04: Window Width */
2611 /* 0x05: Horizontal Blanking */
2612 buf
[0] = 0x02; buf
[1] = 0x81; /* 641 */
2613 buf
[2] = 0x00; buf
[3] = 0x04; /* 4 columns (pixel clocks) // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
2614 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x04, dev
->sensor_flags
, buf
); /* URBs 2053-2055 */
2615 /* Writes to sensor registers 0x06: Vertical Blanking */
2616 /* 0x07: Output Control */
2617 buf
[0] = 0x00; buf
[1] = 0x00; /* 0 rows */
2618 buf
[2] = 0x30; buf
[3] = 0x02; /* normal operation + chip enable + RESERVED options */
2619 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x06, dev
->sensor_flags
, buf
); /* URBs 2056-2058 */
2620 /* Write to sensor register 0x0e: UNDOCUMENTED */
2621 buf
[0] = 0x00; buf
[1] = 0x08;
2622 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0e, dev
->sensor_flags
, buf
); /* URBs 2059-2061 */
2624 UDIA_INFO("1 or more errors occured in I2C-message-block 2 !\n");
2627 /* END OF I2C MESSAGES */
2628 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2631 buf
[0] = 0x02; buf
[1] = 0x00; buf
[2] = 0x02; buf
[3] = 0x00;
2632 buf
[4] = 0x28; buf
[5] = 0x3c;
2633 usb_microdia_control_write(dev
, 0x1180, buf
, 6); /* URB 2062 */
2634 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
2635 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); /* URB 2063 */
2637 usb_microdia_control_write(dev
, 0x1189, buf
, 1); /* URB 2064 */
2638 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
2639 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); /* URB 2065 */
2640 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
2641 usb_microdia_control_write(dev
, 0x11ab, buf
, 4); /* URB 2066 */
2642 buf
[0] = 0x78; /* ALEX: 0x7c */
2643 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 2067 */
2644 buf
[0] = 0x18; /* ALEX: 0x1c */
2645 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2068 */
2646 buf
[0] = 0x18; /* ALEX: 0x1c */
2647 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2069 */
2649 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2070 */
2651 usb_microdia_control_write(dev
, 0x118a, buf
, 1); /* URB 2071 */
2653 usb_microdia_control_write(dev
, 0x0395, buf
, 1); /* URB 2072 */
2656 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2073 */
2657 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2074 // 0x38 */
2660 else if (buf
[0] == 0xb8)
2662 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2075 */
2663 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2076 // 0xb9 */
2666 else if (buf
[0] == 0xb9)
2668 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2077 */
2669 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2078 */
2672 else if (buf
[0] == 0xba)
2674 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2079 */
2675 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2080 // 0x3b */
2678 else if (buf
[0] == 0xbb)
2680 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2081 */
2681 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2082 // 0x3c */
2684 else if (buf
[0] == 0xbc)
2686 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2083 */
2687 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2084 // 0x3d */
2688 last_11b8
[0] = buf
[0];
2689 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2692 else if (buf
[0] == 0xbd)
2694 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2085 */
2695 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2086 */
2698 else if (buf
[0] == 0xbe)
2700 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2087 */
2701 usb_microdia_control_read(dev
, 0x11b8, last_11b8
, 1); /* URB 2088 */
2703 buf
[0] = last_11b8
[0] & 0xf0; /* 0xf0 or 0x70 */
2704 buf
[0] = buf
[0] | 0x0d; /* 0x0c => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 8 READS/WRITES */
2705 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2089 */
2708 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2711 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2712 /* Write to sensor register 0x06: Vertical Blanking */
2713 buf
[0] = 0x00; buf
[1] = 0x2d; /* 45 rows */
2714 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
); /* URBs 2090-2092 */
2715 /* Write to sensor register 0x05: Horizontal Blanking */
2716 buf
[0] = 0x00; buf
[1] = 0x04; /* 4 columns (pixel clocks) */
2717 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
); /* URBs 2093-2095 */
2718 /* Write to sensor register 0x20: Read Mode */
2719 buf
[0] = 0x00; buf
[1] = 0x00; /* normal readout */
2720 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
); /* URBs 2096-2098 */
2721 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
2722 /* Write to sensor register 0x0a: Pixel Clock Speed */
2723 buf
[0] = 0x00; buf
[1] = 0x00; /* default */
2724 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0a, dev
->sensor_flags
, buf
);
2725 /* Write to sensor register 0x06: Vertical Blanking */
2726 buf
[0] = 0x00; buf
[1] = 0x29; /* 41 rows */
2727 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
);
2728 /* Write to sensor register 0x05: Horizontal Blanking */
2729 buf
[0] = 0x00; buf
[1] = 0x09; /* 9 columns (pixel clocks) */
2730 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
);
2731 /* Write to sensor register 0x20: Read Mode */
2732 buf
[0] = 0x11; buf
[1] = 0x01; /* output all frames (including bad ones) + UNKNOWN */
2733 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
);
2736 UDIA_INFO("1 or more errors occured in I2C-message-block 3 !\n");
2739 /* END OF I2C MESSAGES */
2740 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2744 usb_microdia_control_write(dev
, 0x1180, buf
, 1); /* URB 2099 */
2746 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2749 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2750 /* Write to sensor register 0x20: Read Mode */
2751 buf
[0] = 0x00; buf
[1] = 0x00; /* normal readout */
2752 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
); /* URBs 2100-2102 */
2753 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
2754 /* Write to sensor register 0x20: Read Mode */
2755 buf
[0] = 0x11; buf
[1] = 0x01; /* output all frames (including bad ones) + UNKNOWN */
2756 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
);
2759 UDIA_INFO("1 or more errors occured in I2C-message-block 4 !\n");
2762 /* END OF I2C MESSAGES */
2763 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2767 usb_microdia_control_write(dev
, 0x1182, buf
, 1); /* URB 2103 */
2770 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2773 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2774 /* Write to sensor register 0x09: Shutter Width */
2775 buf
[0] = 0x00; buf
[1] = 0x64; /* integration of 100 rows */
2776 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x09, dev
->sensor_flags
, buf
); /* URBs 2104-2106 */
2777 /* Write to sensor register 0x2b: Green 1 Gain */
2778 /* 0x2c: Blue Gain */
2779 buf
[0] = 0x00; buf
[1] = 0xa0; /* 32*0.03125*2 = 2 */
2780 buf
[2] = 0x00; buf
[3] = 0xa0; /* 32*0.03125*2 = 2 */
2781 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2b, dev
->sensor_flags
, buf
); /* URBs 2107-2109 */
2782 /* Write to sensor register 0x2d: Red Gain */
2783 /* 0x2e: Green 2 Gain */
2784 buf
[0] = 0x00; buf
[1] = 0xa0; /* 32*0.03125*2 = 2 */
2785 buf
[2] = 0x00; buf
[3] = 0xa0; /* 32*0.03125*2 = 2 */
2786 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2d, dev
->sensor_flags
, buf
); /* URBs 2110-2112 */
2787 /* "Dummy" write to sensor Register 0x33: RESERVED */
2788 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x33, dev
->sensor_flags
, NULL
); /* URBs 2113-2114 */
2789 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
2790 /* Write to sensor register 0x09: Shutter Width */
2791 buf
[0] = 0x00; buf
[1] = 0x64; /* integration of 100 rows */
2792 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x09, dev
->sensor_flags
, buf
);
2793 /* Write to sensor register 0x07: Output Control */
2794 buf
[0] = 0x00; buf
[1] = 0x03; /* dont update changes until bit0=0, chip enable, normal operation */
2795 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
2796 /* Write to sensor register 0x2b: Green 1 Gain */
2797 /* 0x2c: Blue Gain */
2798 buf
[0] = 0x00; buf
[1] = 0x33; /* 51*0.03125*1 = 1.59375 */
2799 buf
[2] = 0x00; buf
[3] = 0xa0; /* 32*0.03125*2 = 2 */
2800 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2b, dev
->sensor_flags
, buf
);
2801 /* Write to sensor register 0x2d: Red Gain */
2802 /* 0x2e: Green 2 Gain */
2803 buf
[0] = 0x00; buf
[1] = 0xa0; /* 32*0.03125*2 = 2 */
2804 buf
[2] = 0x00; buf
[3] = 0x33; /* 51*0.03125*1 = 1.59375 */
2805 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2d, dev
->sensor_flags
, buf
);
2806 /* "Dummy" write to sensor Register 0x33: RESERVED */
2807 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x33, dev
->sensor_flags
, NULL
);
2808 /* Write to sensor register 0x07: Output Control */
2809 buf
[0] = 0x00; buf
[1] = 0x02; /* chip enable, normal operation */
2810 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
2813 UDIA_INFO("1 or more errors occured in I2C-message-block 5 !\n");
2816 /* END OF I2C MESSAGES */
2817 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2820 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2119 */
2822 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
2824 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
2826 usb_microdia_control_write(dev
, 0x118b, buf
, 1); /* URB 2124 */
2829 usb_microdia_control_write(dev
, 0x10f7, buf
, 1); /* URB 2135 */
2831 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
2833 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
2835 usb_microdia_control_write(dev
, 0x10f8, buf
, 1); /* URB 2138 */
2837 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
2839 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
2841 usb_microdia_control_write(dev
, 0x10fa, buf
, 1); /* URB 2139 */
2844 usb_microdia_control_write(dev
, 0x10f9, buf
, 1); /* URB 2140 */
2846 usb_microdia_control_write(dev
, 0x10f9, buf
, 1); /* URB 2141 */
2848 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2142 */
2849 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
2850 usb_microdia_control_write(dev
, 0x11bc, buf
, 4); /* URB 2143 */
2851 for (k
= 0; k
< 48; k
++)
2853 usb_microdia_control_write(dev
, 0x11c0, buf
, 48); /* URB 2144 */
2855 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05;
2856 buf
[4] = 0x04; buf
[5] = 0x3f;
2857 usb_microdia_control_write(dev
, 0x11a5, buf
, 6); /* URB 2149 */
2859 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2860 buf
[0] = 0x14; buf
[1] = 0xec; buf
[2] = 0x0a; buf
[3] = 0xf6;
2861 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
2862 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
2864 usb_microdia_control_write(dev
, 0x11af, buf
, 4); /* URB 2150 */
2866 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x2d; buf
[3] = 0xdd;
2867 usb_microdia_control_write(dev
, 0x11b3, buf
, 4); /* URB 2151 */
2868 buf
[0] = 0x47; /* ALEX: 0x04 */
2869 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2152 */
2871 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2153 */
2872 buf
[0] = 0x67; /* ALEX: 0x24 */
2873 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2154 */
2874 buf
[0] = 0x0d; buf
[1] = 0x08; buf
[2] = 0x08; buf
[3] = 0x0d;
2875 buf
[4] = 0x08; buf
[5] = 0x08; buf
[6] = 0x0d; buf
[7] = 0x0d;
2876 buf
[8] = 0x0d; buf
[9] = 0x0d; buf
[10] = 0x11; buf
[11] = 0x0d;
2877 buf
[12] = 0x0d; buf
[13] = 0x11; buf
[14] = 0x15; buf
[15] = 0x21;
2878 buf
[16] = 0x15; buf
[17] = 0x15; buf
[18] = 0x11; buf
[19] = 0x11;
2879 buf
[20] = 0x15; buf
[21] = 0x2a; buf
[22] = 0x1d; buf
[23] = 0x1d;
2880 buf
[24] = 0x19; buf
[25] = 0x21; buf
[26] = 0x32; buf
[27] = 0x2a;
2881 buf
[28] = 0x32; buf
[29] = 0x32; buf
[30] = 0x2e; buf
[31] = 0x2a;
2882 buf
[32] = 0x2e; buf
[33] = 0x2e; buf
[34] = 0x36; buf
[35] = 0x3a;
2883 buf
[36] = 0x4b; buf
[37] = 0x43; buf
[38] = 0x36; buf
[39] = 0x3a;
2884 buf
[40] = 0x47; buf
[41] = 0x3a; buf
[42] = 0x2e; buf
[43] = 0x2e;
2885 buf
[44] = 0x43; buf
[45] = 0x5c; buf
[46] = 0x43; buf
[47] = 0x47;
2886 buf
[48] = 0x4f; buf
[49] = 0x53; buf
[50] = 0x58; buf
[51] = 0x58;
2887 buf
[52] = 0x58; buf
[53] = 0x32; buf
[54] = 0x3f; buf
[55] = 0x60;
2888 buf
[56] = 0x64; buf
[57] = 0x5c; buf
[58] = 0x53; buf
[59] = 0x64;
2889 buf
[60] = 0x4b; buf
[61] = 0x53; buf
[62] = 0x58; buf
[63] = 0x53;
2890 usb_microdia_control_write(dev
, 0x1100, buf
, 64); /* URB 2155 */
2891 buf
[0] = 0x0d; buf
[1] = 0x11; buf
[2] = 0x11; buf
[3] = 0x15;
2892 buf
[4] = 0x11; buf
[5] = 0x15; buf
[6] = 0x26; buf
[7] = 0x15;
2893 buf
[8] = 0x15; buf
[9] = 0x26; buf
[10] = 0x53; buf
[11] = 0x36;
2894 buf
[12] = 0x2e; buf
[13] = 0x36; buf
[14] = 0x53; buf
[15] = 0x53;
2895 buf
[16] = 0x53; buf
[17] = 0x53; buf
[18] = 0x53; buf
[19] = 0x53;
2896 buf
[20] = 0x53; buf
[21] = 0x53; buf
[22] = 0x53; buf
[23] = 0x53;
2897 buf
[24] = 0x53; buf
[25] = 0x53; buf
[26] = 0x53; buf
[27] = 0x53;
2898 buf
[28] = 0x53; buf
[29] = 0x53; buf
[30] = 0x53; buf
[31] = 0x53;
2899 buf
[32] = 0x53; buf
[33] = 0x53; buf
[34] = 0x53; buf
[35] = 0x53;
2900 buf
[36] = 0x53; buf
[37] = 0x53; buf
[38] = 0x53; buf
[39] = 0x53;
2901 buf
[40] = 0x53; buf
[41] = 0x53; buf
[42] = 0x53; buf
[43] = 0x53;
2902 buf
[44] = 0x53; buf
[45] = 0x53; buf
[46] = 0x53; buf
[47] = 0x53;
2903 buf
[48] = 0x53; buf
[49] = 0x53; buf
[50] = 0x53; buf
[51] = 0x53;
2904 buf
[52] = 0x53; buf
[53] = 0x53; buf
[54] = 0x53; buf
[55] = 0x53;
2905 buf
[56] = 0x53; buf
[57] = 0x53; buf
[58] = 0x53; buf
[59] = 0x53;
2906 buf
[60] = 0x53; buf
[61] = 0x53; buf
[62] = 0x53; buf
[63] = 0x53;
2907 usb_microdia_control_write(dev
, 0x1140, buf
, 64); /* URB 2156 */
2908 buf
[0] = 0x47; /* ALEX: 0x04 */
2909 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2157 */
2911 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2158 */
2912 buf
[0] = 0x4b; /* ALEX: 0x08 */
2913 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2159 */
2915 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2916 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2919 /* Writes to sensor registers 0x02: Column Start */
2920 /* 0x03: Window Hight */
2921 buf
[0] = 0x00; buf
[1] = 0x16; /* coulmn 22 */
2922 buf
[2] = 0x01; buf
[3] = 0xe1; /* 481 */
2923 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x02, dev
->sensor_flags
, buf
); /* URBs 2160-2162 */
2924 /* Writes to sensor registers 0x04: Window Width */
2925 /* 0x05: Horizontal Blanking */
2926 buf
[0] = 0x02; buf
[1] = 0x81; /* 641 */
2927 buf
[2] = 0x00; buf
[3] = 0x04; /* 4 columns (pixel clocks) */
2928 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x04, dev
->sensor_flags
, buf
); /* URBs 2163-2165 */
2929 /* Writes to sensor registers 0x06: Vertical Blanking */
2930 /* 0x07: Output Control */
2931 buf
[0] = 0x00; buf
[1] = 0x2d; /* 45 rows */
2932 buf
[2] = 0x30; buf
[3] = 0x02; /* RESERVED options */
2933 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x06, dev
->sensor_flags
, buf
); /* URBs 2166-2167 */
2934 /* Writes to sensor register 0x0e: UNDOCUMENTED */
2935 buf
[0] = 0x00; buf
[1] = 0x08;
2936 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0e, dev
->sensor_flags
, buf
); /* URBs 2168-2170 */
2938 UDIA_INFO("1 or more errors occured in I2C-message-block 6 !\n");
2941 /* END OF I2C MESSAGES */
2942 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2943 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
2945 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
2947 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
2951 buf
[0] = 0x02; buf
[1] = 0x00; buf
[2] = 0x02; buf
[3] = 0x00;
2952 buf
[4] = 0x28; buf
[5] = 0x3c;
2953 usb_microdia_control_write(dev
, 0x1180, buf
, 6); /* URB 2171 */
2954 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
2955 usb_microdia_control_write(dev
, 0x10fb, buf
, 5); /* URB 2172 */
2957 usb_microdia_control_write(dev
, 0x1189, buf
, 1); /* URB 2173 */
2958 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
2959 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); /* URB 2174 */
2960 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
2961 usb_microdia_control_write(dev
, 0x11ab, buf
, 4); /* URB 2175 */
2963 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2176 */
2965 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2177 */
2967 usb_microdia_control_write(dev
, 0x11b9, buf
, 1); /* URB 2178 */
2969 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2179 */
2971 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2180 */
2972 buf
[0] = 0x78; /* ALEX: 0x7c */
2973 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 2181 */
2974 buf
[0] = 0x18; /* ALEX: 0x1c */
2975 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2182 */
2976 buf
[0] = 0x18; /* ALEX: 0x1c */
2977 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2183 */
2978 buf
[0] = 0x7d; /* ALEX: 0xfc */
2979 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2184 */
2981 usb_microdia_control_write(dev
, 0x118a, buf
, 1); /* URB 2185 */
2983 usb_microdia_control_write(dev
, 0x0395, buf
, 1); /* URB 2186 */
2985 if ((last_11b8
[0] == 0x3d) || (last_11b8
[0] == 0x3f))
2987 else if ((last_11b8
[0] == 0xbd) || (last_11b8
[0] == 0xbf))
2989 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2187 */
2990 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2188 // 0x38 */
2993 else if (buf
[0] == 0xb8)
2995 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2189 */
2996 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2190 // 0xb9 */
2999 else if (buf
[0] == 0xb9)
3001 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2191 */
3002 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2192 // 0xba */
3005 else if (buf
[0] == 0xba)
3007 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2193 */
3008 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2194 // 0x3b */
3011 else if (buf
[0] == 0xbb)
3013 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2195 */
3014 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2196 // 0x3c */
3017 else if (buf
[0] == 0xbc)
3019 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2197 */
3020 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2198 // 0x3d */
3021 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
3024 else if (buf
[0] == 0xbd)
3026 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2199 */
3027 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2200 */
3030 else if (buf
[0] == 0xbe)
3032 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2201 */
3033 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2202 */
3035 buf
[0] = buf
[0] & 0xf0; /* 0xf0 or 0x70 */
3036 buf
[0] = buf
[0] | 0x0d; /* 0x0c => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 8 READS/WRITES */
3037 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2089 */
3039 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
3042 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
3043 /* Write to sensor register 0x06: Vertical Blanking */
3044 buf
[0] = 0x00; buf
[1] = 0x2d; /* 45 rows */
3045 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
); /* URBs 2204-2206 */
3046 /* Write to sensor register 0x05: Horizontal Blanking */
3047 buf
[0] = 0x00; buf
[1] = 0x04; /* 4 columns (pixel clocks) */
3048 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
); /* URBs 2207-2209 */
3049 /* Read of sensor register 0x36: Chip Version (mirror of reg0xff) */
3050 retI2C
+= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x36, dev
->sensor_flags
, buf
); /* URBs 2211-2215 // 0x82 0x3a */
3051 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
3052 /* Write to sensor register 0x0a: Pixel Clock Speed */
3053 buf
[0] = 0x00; buf
[1] = 0x00; /* default */
3054 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
);
3055 /* Write to sensor register 0x06: Vertical Blanking */
3056 buf
[0] = 0x00; buf
[1] = 0x29; /* 41 rows */
3057 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
);
3058 /* Write to sensor register 0x05: Horizontal Blanking */
3059 buf
[0] = 0x00; buf
[1] = 0x09; /* 9 columns (pixel clocks) */
3060 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
);
3061 /* Read of sensor register 0x00: Chip Version (=reg0xff) */
3062 retI2C
+= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x00, dev
->sensor_flags
, buf
); /* 0x82 0x43 */
3065 UDIA_INFO("1 or more errors occured in I2C-message-block 7 !\n");
3068 /* END OF I2C MESSAGES */
3069 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
3073 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2216 */
3076 /*** NOW DRIVER DOES STOP-SEQUENCE
3077 - WITHOUT WRITES TO 0x1007 AND 0x1006 (URBs 3544-3550) => MT9V111
3078 - WRITING 0x40 INSTEAD OF 0x60 TO 0x1007 AND 0x1006 => MT9V011
3080 /*** 2nd, 3rd, ... CYCLE: ALL MESSAGES (URBs 1953 - URBs 2216) ARE REPEATED ***/
3081 /*** ----- WE DON'T DO THIS, IT SEEMS TO BE UNNECESSARY ----- ***/
3083 /* Setup IFP registers for AE and AWB (new, not in the logs): */
3084 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
3085 mt9v111_setup_autoexposure(dev
);
3086 mt9v111_setup_autowhitebalance(dev
);
3087 mt9v111_set_autocorrections(dev
, 1);
3090 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
3092 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
3094 usb_microdia_control_write(dev
, 0x1007, buf
, 1); /* URB 2489 */
3095 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
3097 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
3099 usb_microdia_control_write(dev
, 0x1006, buf
, 1); /* URB 2490 */
3100 /* => These two writes seem to cause the cam to start sending isochronus USB messages */
3106 * @brief Start stream from 627b devices
3110 * @returns 0 or negative error code
3113 int microdia_627b_start_stream(struct usb_microdia
*dev
)
3116 /* Initialize the Bridge Controller */
3117 ret
= sn9c20x_initialize(dev
);
3118 /* Initialize the I2C interface in the Bridge */
3119 ret
= sn9c20x_i2c_initialize(dev
);
3120 /* Finally, Initialize the Sensor array */
3121 if (dev
->sensor_init
)
3122 dev
->sensor_init(dev
);
3127 * @brief From UsbSnoop-plugin-parsed.log
3131 * @returns 0 (OK) or <0 (Error)
3133 * @author Vincent, Kuzja
3135 int microdia_6288_start_stream(struct usb_microdia
*dev
)
3145 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3151 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3157 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3163 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3169 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3175 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3180 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20;
3181 buf
[3] = 0x10; buf
[4] = 0x08;
3182 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
3187 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;
3188 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9);
3193 buf
[0] = 0x44; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30;
3194 buf
[4] = 0x00; buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed;
3195 buf
[8] = 0x0f; buf
[9] = 0xda; buf
[10] = 0x0f; buf
[11] = 0x3a;
3196 buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00; buf
[15] = 0xd0;
3197 buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
3198 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
3199 ret
= usb_microdia_control_write(dev
, reg
, buf
, 24);
3204 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
3205 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
3210 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
3211 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
3216 buf
[0] = 0x86; buf
[1] = 0xcc; buf
[2] = 0x08;
3217 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
3222 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20;
3223 buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b;
3224 buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80;
3225 buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8;
3226 buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
3227 buf
[20] = 0xf4; buf
[21] = 0xff;
3228 ret
= usb_microdia_control_write(dev
, reg
, buf
, 22);
3233 buf
[0] = 0x00; buf
[1] = 0x00;
3234 ret
= usb_microdia_control_write(dev
, reg
, buf
, 2);
3239 buf
[0] = 0x60; buf
[1] = 0x20; buf
[2] = 0x00; buf
[3] = 0x08;
3240 buf
[4] = 0x00; buf
[5] = 0x40; buf
[6] = 0x01; buf
[7] = 0xf0;
3242 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9);
3248 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3254 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3259 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x12; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3260 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3265 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3270 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3275 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x12; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3276 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3281 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3286 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3291 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x0d; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3292 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3297 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3302 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3307 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x0e; buf
[3] = 0x61; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3308 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3313 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3318 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3323 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x11; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3324 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3329 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3334 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3339 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x13; buf
[3] = 0xb8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3340 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3345 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3350 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3355 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x14; buf
[3] = 0x3e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3356 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3361 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3366 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3371 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x16; buf
[3] = 0x24; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3372 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3377 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3382 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3387 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3388 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3393 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3398 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3403 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3404 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3409 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3414 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3419 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3420 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3425 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3430 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3435 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x27; buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3436 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3441 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3446 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3451 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x28; buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3452 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3457 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3462 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3467 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x29; buf
[3] = 0x15; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3468 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3473 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3478 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3483 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2c; buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3484 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3489 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3494 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3499 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x32; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3500 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3505 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3510 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3515 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x34; buf
[3] = 0x3d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3516 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3521 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3526 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3531 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x35; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3532 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3537 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3542 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3547 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x36; buf
[3] = 0xf8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3548 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3553 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3558 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3563 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x38; buf
[3] = 0x12; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3564 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3569 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3574 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3579 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x39; buf
[3] = 0x57; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3580 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3585 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3590 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3595 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3596 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3601 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3606 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3611 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3b; buf
[3] = 0xcc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3612 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3617 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3622 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3627 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3c; buf
[3] = 0x0c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3628 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3633 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3638 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3643 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3d; buf
[3] = 0x19; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3644 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3649 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3654 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3659 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3e; buf
[3] = 0x0c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3660 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3665 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3670 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3675 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x3f; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3676 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3681 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3686 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3691 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x41; buf
[3] = 0x40; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3692 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3697 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3702 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3707 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x42; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3708 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3713 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3718 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3723 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x45; buf
[3] = 0x46; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3724 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3729 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3734 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3739 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x46; buf
[3] = 0x62; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3740 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3745 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3750 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3755 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x47; buf
[3] = 0x2a; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3756 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3761 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3766 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3771 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x48; buf
[3] = 0x3c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3772 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3777 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3782 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3787 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4a; buf
[3] = 0xf0; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3788 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3793 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3798 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3803 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4b; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3804 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3809 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3814 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3819 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4c; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3820 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3825 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3830 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3835 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4d; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3836 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3841 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3846 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3851 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x4e; buf
[3] = 0xdc; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3852 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3857 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3862 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3867 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x69; buf
[3] = 0x02; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3868 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3873 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3878 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3883 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x6c; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3884 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3889 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3894 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3899 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x6f; buf
[3] = 0x9e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3900 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3905 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3910 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3915 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x70; buf
[3] = 0x05; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3916 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3921 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3926 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3931 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x71; buf
[3] = 0x78; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3932 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3937 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3942 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3947 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x77; buf
[3] = 0x02; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3948 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3953 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3958 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3963 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x8a; buf
[3] = 0x23; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3964 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3969 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3974 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3979 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x8c; buf
[3] = 0x0d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3980 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3985 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3990 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3995 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x90; buf
[3] = 0x7e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3996 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4001 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4006 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4011 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x91; buf
[3] = 0x7c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4012 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4017 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4022 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4027 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x9f; buf
[3] = 0x6e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4028 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4033 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4038 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4043 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa0; buf
[3] = 0x6e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4044 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4049 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4054 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4059 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa4; buf
[3] = 0x50; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4060 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4065 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4070 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4075 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa5; buf
[3] = 0x68; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4076 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4081 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4086 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4091 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa6; buf
[3] = 0x60; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4092 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4097 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4102 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4107 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa8; buf
[3] = 0xc1; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4108 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4113 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4118 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4123 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa9; buf
[3] = 0xfa; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4124 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4129 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4134 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4139 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xaa; buf
[3] = 0x92; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4140 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4145 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4150 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4155 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xab; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4156 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4161 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4166 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4171 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xac; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4172 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4177 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4182 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4187 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xad; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4188 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4193 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4198 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4203 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xae; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4204 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4209 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4214 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4219 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xaf; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4220 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4225 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4230 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4235 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb2; buf
[3] = 0xf2; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4236 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4241 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4246 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4251 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb3; buf
[3] = 0x20; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4252 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4257 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4262 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4267 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb4; buf
[3] = 0x20; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4268 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4273 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4278 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4283 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb5; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4284 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4289 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4294 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4299 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xb6; buf
[3] = 0xaf; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4300 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4305 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4310 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4315 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbb; buf
[3] = 0xae; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4316 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4321 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4326 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4331 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbc; buf
[3] = 0x44; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4332 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4337 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4342 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4347 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbd; buf
[3] = 0x44; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4348 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4353 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4358 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4363 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbe; buf
[3] = 0x3b; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4364 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4369 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4374 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4379 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xbf; buf
[3] = 0x3a; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4380 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4385 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4390 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4395 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc0; buf
[3] = 0xe2; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4396 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4401 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4406 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4411 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc1; buf
[3] = 0xc8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4412 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4417 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4422 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4427 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc2; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4428 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4433 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4438 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4443 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc4; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4444 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4449 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4454 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4459 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc6; buf
[3] = 0x85; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4460 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4465 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4470 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4475 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc7; buf
[3] = 0x81; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4476 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4481 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4486 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4491 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xc9; buf
[3] = 0xe0; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4492 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4497 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4502 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4507 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xca; buf
[3] = 0xe8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4508 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4513 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4518 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4523 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xcc; buf
[3] = 0xd8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4524 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4529 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4534 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4539 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xcd; buf
[3] = 0x93; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4540 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4545 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4550 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4555 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4561 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4566 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4567 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4572 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4577 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4578 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4583 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4588 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4589 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4594 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4599 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4600 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4605 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4610 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4611 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4616 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4621 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4622 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4627 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4632 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4633 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4638 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4643 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4644 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4649 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4654 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4655 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4660 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4661 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4666 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4671 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4672 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4677 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4682 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4683 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4688 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4693 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4694 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4699 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4704 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4705 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4710 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4715 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4716 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4721 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4726 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4727 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4732 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4737 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4738 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4743 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4748 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4749 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4754 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
4760 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4766 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4772 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4778 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4784 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4790 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4796 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4802 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4808 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4814 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4820 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4825 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x03; buf
[3] = 0x14; 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] = 0xd0; buf
[1] = 0x30; buf
[2] = 0x17; buf
[3] = 0x1b; buf
[4] = 0xbc; buf
[5] = 0x01; buf
[6] = 0x7a; 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] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1b; buf
[3] = 0x00; 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 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x32; buf
[3] = 0x82; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4869 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4874 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4879 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4884 buf
[0] = 0x05; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00; buf
[4] = 0x50; buf
[5] = 0x78;
4885 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
4890 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0; buf
[4] = 0x00;
4891 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
4897 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4903 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4908 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0xa0;
4909 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
4914 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x78;
4915 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
4921 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4927 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4933 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4939 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4945 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4951 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4957 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4962 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4968 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4973 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4979 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4984 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4990 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4995 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5001 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5006 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5012 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5017 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5023 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5028 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x11; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5029 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5034 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5039 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5044 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5045 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5050 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5055 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5060 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2b; buf
[3] = 0x06; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5061 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5066 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5071 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5076 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x92; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5077 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5082 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5087 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5092 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x93; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5093 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5098 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5103 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5108 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5109 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5114 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5119 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5124 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x04; 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 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5141 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5146 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x10; buf
[3] = 0x7d; 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
, 1);
5157 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5162 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x04; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5163 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5168 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5173 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5178 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa1; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5179 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5184 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5189 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5194 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2d; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5195 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5200 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5205 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5210 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5211 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5216 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5221 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5226 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5227 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5232 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5237 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5242 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5243 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5248 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5253 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5258 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5259 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5264 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5269 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5275 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5281 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5287 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5293 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5299 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5305 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5311 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5317 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5322 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
5323 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
5328 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
5329 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
5330 buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00;
5331 buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00;
5332 buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00;
5333 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x00; buf
[23] = 0x00;
5334 buf
[24] = 0x00; buf
[25] = 0x00; buf
[26] = 0x00; buf
[27] = 0x00;
5335 buf
[28] = 0x00; buf
[29] = 0x00; buf
[30] = 0x00; buf
[31] = 0x00;
5336 buf
[32] = 0x00; buf
[33] = 0x00; buf
[34] = 0x00; buf
[35] = 0x00;
5337 buf
[36] = 0x00; buf
[37] = 0x00; buf
[38] = 0x00; buf
[39] = 0x00;
5338 buf
[40] = 0x00; buf
[41] = 0x00; buf
[42] = 0x00; buf
[43] = 0x00;
5339 buf
[44] = 0x00; buf
[45] = 0x00; buf
[46] = 0x00; buf
[47] = 0x00;
5340 ret
= usb_microdia_control_write(dev
, reg
, buf
, 48);
5345 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05;
5346 buf
[4] = 0x04; buf
[5] = 0x3f;
5347 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
5352 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
5353 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
5358 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x32; buf
[3] = 0xdd;
5359 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
5365 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5371 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5377 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5382 buf
[0] = 0x0d; buf
[1] = 0x08; buf
[2] = 0x08; buf
[3] = 0x0d;
5383 buf
[4] = 0x08; buf
[5] = 0x08; buf
[6] = 0x0d; buf
[7] = 0x0d;
5384 buf
[8] = 0x0d; buf
[9] = 0x0d; buf
[10] = 0x11; buf
[11] = 0x0d;
5385 buf
[12] = 0x0d; buf
[13] = 0x11; buf
[14] = 0x15; buf
[15] = 0x21;
5386 buf
[16] = 0x15; buf
[17] = 0x15; buf
[18] = 0x11; buf
[19] = 0x11;
5387 buf
[20] = 0x15; buf
[21] = 0x2a; buf
[22] = 0x1d; buf
[23] = 0x1d;
5388 buf
[24] = 0x19; buf
[25] = 0x21; buf
[26] = 0x32; buf
[27] = 0x2a;
5389 buf
[28] = 0x32; buf
[29] = 0x32; buf
[30] = 0x2e; buf
[31] = 0x2a;
5390 buf
[32] = 0x2e; buf
[33] = 0x2e; buf
[34] = 0x36; buf
[35] = 0x3a;
5391 buf
[36] = 0x4b; buf
[37] = 0x43; buf
[38] = 0x36; buf
[39] = 0x3a;
5392 buf
[40] = 0x47; buf
[41] = 0x3a; buf
[42] = 0x2e; buf
[43] = 0x2e;
5393 buf
[44] = 0x43; buf
[45] = 0x5c; buf
[46] = 0x43; buf
[47] = 0x47;
5394 buf
[48] = 0x4f; buf
[49] = 0x53; buf
[50] = 0x58; buf
[51] = 0x58;
5395 buf
[52] = 0x58; buf
[53] = 0x32; buf
[54] = 0x3f; buf
[55] = 0x60;
5396 buf
[56] = 0x64; buf
[57] = 0x5c; buf
[58] = 0x53; buf
[59] = 0x64;
5397 buf
[60] = 0x4b; buf
[61] = 0x53; buf
[62] = 0x58; buf
[63] = 0x53;
5398 ret
= usb_microdia_control_write(dev
, reg
, buf
, 64);
5403 buf
[0] = 0x0d; buf
[1] = 0x11; buf
[2] = 0x11; buf
[3] = 0x15;
5404 buf
[4] = 0x11; buf
[5] = 0x15; buf
[6] = 0x26; buf
[7] = 0x15;
5405 buf
[8] = 0x15; buf
[9] = 0x26; buf
[10] = 0x53; buf
[11] = 0x36;
5406 buf
[12] = 0x2e; buf
[13] = 0x36; buf
[14] = 0x53; buf
[15] = 0x53;
5407 buf
[16] = 0x53; buf
[17] = 0x53; buf
[18] = 0x53; buf
[19] = 0x53;
5408 buf
[20] = 0x53; buf
[21] = 0x53; buf
[22] = 0x53; buf
[23] = 0x53;
5409 buf
[24] = 0x53; buf
[25] = 0x53; buf
[26] = 0x53; buf
[27] = 0x53;
5410 buf
[28] = 0x53; buf
[29] = 0x53; buf
[30] = 0x53; buf
[31] = 0x53;
5411 buf
[32] = 0x53; buf
[33] = 0x53; buf
[34] = 0x53; buf
[35] = 0x53;
5412 buf
[36] = 0x53; buf
[37] = 0x53; buf
[38] = 0x53; buf
[39] = 0x53;
5413 buf
[40] = 0x53; buf
[41] = 0x53; buf
[42] = 0x53; buf
[43] = 0x53;
5414 buf
[44] = 0x53; buf
[45] = 0x53; buf
[46] = 0x53; buf
[47] = 0x53;
5415 buf
[48] = 0x53; buf
[49] = 0x53; buf
[50] = 0x53; buf
[51] = 0x53;
5416 buf
[52] = 0x53; buf
[53] = 0x53; buf
[54] = 0x53; buf
[55] = 0x53;
5417 buf
[56] = 0x53; buf
[57] = 0x53; buf
[58] = 0x53; buf
[59] = 0x53;
5418 buf
[60] = 0x53; buf
[61] = 0x53; buf
[62] = 0x53; buf
[63] = 0x53;
5419 ret
= usb_microdia_control_write(dev
, reg
, buf
, 64);
5425 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5431 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5437 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5443 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5449 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5455 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5461 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5467 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5472 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x03; buf
[3] = 0x14; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5473 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5478 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5483 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5488 buf
[0] = 0xd0; buf
[1] = 0x30; buf
[2] = 0x17; buf
[3] = 0x1b; buf
[4] = 0xbc; buf
[5] = 0x01; buf
[6] = 0x7a; buf
[7] = 0x10;
5489 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5494 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5499 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5504 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1b; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5505 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5510 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5515 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x32; buf
[3] = 0x82; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5516 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5521 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5526 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5531 buf
[0] = 0x05; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00;
5532 buf
[4] = 0x50; buf
[5] = 0x78;
5533 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
5538 buf
[0] = 0x00; buf
[1] = 0xa0; buf
[2] = 0x00; buf
[3] = 0xf0;
5540 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
5546 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5551 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0xa0;
5552 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
5557 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x78;
5558 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
5564 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5570 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5576 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5582 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5588 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5594 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5600 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5606 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5612 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5618 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5624 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5630 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5635 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5641 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5646 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5652 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5657 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5663 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5668 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5674 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5679 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5685 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5690 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5696 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5701 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x11; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5702 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5707 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5712 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5717 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5718 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5723 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5728 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5733 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2b; buf
[3] = 0x70; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5734 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5739 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5744 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5749 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x92; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5750 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5755 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5760 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5765 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x93; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5766 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5771 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5776 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5781 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x0a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5782 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5787 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5792 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5793 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5798 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5803 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
5808 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x0b; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5809 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5814 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5819 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5820 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5825 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5830 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
5835 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1c; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5836 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5841 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5846 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5847 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5852 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5857 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
5862 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1d; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5863 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5868 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5873 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5874 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5879 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5884 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
5890 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5896 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5902 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5907 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa1; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5908 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5913 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5918 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5923 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x10; buf
[3] = 0x06; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5924 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5929 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5934 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5939 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x04; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5940 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5945 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5950 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5955 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2d; buf
[3] = 0x36; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5956 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5961 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5966 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5971 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5972 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5977 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5982 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5987 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
5988 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5993 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5998 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6003 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x06; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
6004 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6009 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6014 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6019 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x94; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6020 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6025 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6030 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6035 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x8d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6036 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6041 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6046 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6051 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x09; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
6052 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6057 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6062 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6067 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x95; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6068 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6073 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6078 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6083 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x85; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
6084 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
6089 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6094 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
6099 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x0c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
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] = 0x01; buf
[3] = 0x96; 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] = 0x02; buf
[3] = 0x80; 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] = 0x02; buf
[3] = 0x7c; 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);
6164 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6170 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6177 /* END OF MICRODIA 6288 START STREAM */
6181 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
6186 * @brief Wrapper function for device-specific stopstream functions
6188 * @param dev Pointer to device structure
6192 * This will execute a function determined by the array #cameras and
6193 * the function find_camera().
6196 int dev_microdia_stop_stream(struct usb_microdia
*dev
)
6199 if (dev
&& dev
->stop_stream
)
6200 ret
= dev
->stop_stream(dev
);
6206 * @brief From stop.htm
6214 * For SN9C201 with MI1310.
6215 * This function has not been tested yet.
6217 int microdia_6242_stop_stream(struct usb_microdia
*dev
)
6221 __u8 only10c0
[3] = {0x0d, 0x00, 0x00};
6224 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
6227 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
6230 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
6232 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
6233 only10c0
[0], dev
->sensor_flags
, &only10c0
[1]);
6236 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
6239 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
6242 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
6245 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
6248 buf
[0] = 0x98; buf
[1] = 0xe7; buf
[2] = 0x11;
6249 usb_microdia_control_write(dev
, 0x1000, buf
, 3);
6252 * After the select alternate setting 0 is actually another transfer:
6254 * usb_microdia_control_write(dev, 0x1066, buf, 1);
6262 * @brief From stopstream.log
6270 * For SN9C201 with SOI968.
6271 * I don't whether the function really stops the stream.
6272 * Nevertheless the LED on the webcam now stops glowing.
6273 * The function is very similar to "microdia_624f_stop_stream".
6275 int microdia_624e_stop_stream(struct usb_microdia
*dev
)
6280 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
6282 /* Next two writes added because it works better.
6283 * The LED stops glowing and I think the stream does too.
6284 * 0x20 = 0b00100000 which is the minimal of what the
6285 * other stopstreams have in common.
6288 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
6291 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
6294 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
6297 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
6299 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
6300 usb_microdia_control_write(dev
, 0x1000, buf
, 3);
6302 usb_microdia_control_read(dev
, 0x1066, buf
, 1);
6309 * @brief Stop device 624f from streaming
6311 * @param dev Pointer to device structure
6313 * @returns 0 or negative error code
6316 int microdia_624f_stop_stream(struct usb_microdia
*dev
)
6324 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6330 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6336 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6342 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6348 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6354 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6362 ret
= usb_microdia_control_write(dev
, command
, buf
, 3);
6369 UDIA_ERROR("command %x failed (%d)!\n", command
, ret
);
6374 * @brief Stop device 6260 from streaming
6376 * @param dev Pointer to device structure
6378 * @returns 0 or negative error code
6381 int microdia_6260_stop_stream(struct usb_microdia
*dev
)
6387 ret
= usb_microdia_control_write(dev
, 0x1061, buf
, 1);
6389 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 1);
6391 ret
= usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
6393 ret
= usb_microdia_control_write(dev
, 0x1007, buf
, 1);
6395 ret
= usb_microdia_control_write(dev
, 0x1006, buf
, 1);
6397 buf
[0] = 0x98; buf
[1] = 0xe7; buf
[2] = 0x11;
6398 ret
= usb_microdia_control_write(dev
, 0x1000, buf
, 3);
6401 ret
= usb_microdia_control_write(dev
, 0x1066, buf
, 1);
6402 ret
= usb_microdia_control_read(dev
, 0x1045, buf
, 1);
6404 ret
= usb_microdia_control_write(dev
, 0x1045, buf
, 1);
6406 ret
= usb_microdia_control_write(dev
, 0x10c8, buf
, 1);
6408 ret
= usb_microdia_control_write(dev
, 0x1020, buf
, 1);
6414 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
6418 * @returns 0 (ok) or -1 (error)
6422 * Windows driver version: 5.7.23.000
6423 * Windows versions: 2000 and XP
6424 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
6425 * All logs were made using AMCAP with 640x480, RGB24
6427 int microdia_6270_stop_stream(struct usb_microdia
*dev
)
6433 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
6435 ret
+= usb_microdia_control_write(dev
, 0x1007, buf
, 1); /* URB 3541 */
6437 ret
+= usb_microdia_control_write(dev
, 0x1006, buf
, 1); /* URB 3542 */
6438 /* => These two writes seem to cause the cam to stop sending isochronus USB messages */
6441 ret
+= usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 3544 */
6442 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
6444 ret
+= usb_microdia_control_write(dev
, 0x1007, buf
, 1); /* URB 3541 */
6446 ret
+= usb_microdia_control_write(dev
, 0x1006, buf
, 1); /* URB 3542 */
6448 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
6449 /* Write to sensor register 0x07: Output Control */
6450 buf
[0] = 0x00; buf
[1] = 0x00; /* stop sensor readout, normal operation */
6451 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
6453 buf
[0] = 0x38; /* ALEX: 0x3c */
6454 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 3545 */
6455 buf
[0] = 0x6d; /* ALEX: 0xec; FRANK: also 0x6c */
6456 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 3546 */
6457 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
6458 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 3); /* URB 3547 */
6460 /* INTERRUPT COMMING BACK (URB 2227) */
6461 /* SELECT ALTERNATE SETTINGS (URB 3548) */
6462 /* INTERRUPT GOING DOWN (URB 3549) */
6465 ret
+= usb_microdia_control_write(dev
, 0x1066, buf
, 1); /* URB 3550 */
6468 UDIA_INFO("One ore more errors occured while stopping stream !\n");
6476 * @brief Stop device 627b from streaming
6478 * @param dev Pointer to device structure
6480 * @returns 0 or negative error code
6483 int microdia_627b_stop_stream(struct usb_microdia
*dev
)
6491 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6497 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6503 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6509 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6515 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6520 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
6521 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
6527 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6534 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
6539 * @brief From UsbSnoop-plugin-parsed.log
6543 * @returns 0 (OK) or <0 (Error)
6545 * @author Vincent, Kuzja
6547 int microdia_6288_stop_stream(struct usb_microdia
*dev
)
6555 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6561 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6567 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6573 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6579 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6584 buf
[0] = 0x98; buf
[1] = 0xe7; buf
[2] = 0x11;
6585 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
6591 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6597 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
6602 * @brief Detect whether the image for 624f has to be flipped
6604 * @param dev Pointer to device structure
6606 * @returns 0 or negative error code
6609 int microdia_624f_flip_detect(struct usb_microdia
*dev
)
6614 ret
= usb_microdia_control_read(dev
, 0x1009, &val
, 1);
6618 dev
->vsettings
.vflip
= 1;
6620 dev
->vsettings
.vflip
= 0;
6625 * @brief Detect whether the image for 6260 has to be flipped
6627 * @param dev Pointer to device structure
6629 * @returns 0 or negative error code
6632 int microdia_6260_flip_detect(struct usb_microdia
*dev
)
6634 const __u8 flip_bit
= 0x01;
6637 static __u8 flip_reg
= flip_bit
;
6640 ret
= usb_microdia_control_read(dev
, 0x1009, &val
, 1);
6643 if (flip_reg
!= (val
& flip_bit
)) {
6648 ret
= ov7670_auto_flip(dev
, vflip
);
6649 flip_reg
= (val
& flip_bit
);