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] = {
602 static __u8 mi1300_init
[][2] = {
641 /* initialize SN9C201 for 6240 */
642 for (i
= 0; i
< ARRAY_SIZE(bridge6240_init
); i
++) {
643 reg
= bridge6240_init
[i
][0];
644 value
[0] = bridge6240_init
[i
][1];
645 ret
= usb_microdia_control_write(dev
, reg
, value
, 1);
647 UDIA_INFO("6240 Bridge: Inititialization Error (%d) on array line %d\n", ret
, i
);
652 /* initialize the Bridge to I2C interface */
653 ret
= sn9c20x_i2c_initialize(dev
);
655 /* initialize the Sensor MI 1300 */
656 for (i
= 0; i
< ARRAY_SIZE(mi1300_init
); i
++) {
657 reg
= mi1300_init
[i
][0];
658 value
[0] = mi1300_init
[i
][1];
659 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
660 reg
, dev
->sensor_flags
, value
);
662 UDIA_INFO("Sensor MI 1300: Inititialization Error (%d) on array line %d\n", ret
, i
);
667 UDIA_INFO("...start function completed without errors.\n");
672 * @brief From stop-close-amcap.log
680 * For SN9C201 with MI1300. Comments from parser-usbsnoop(updated_13Mar2008).pl output
683 int microdia_6240_stop_stream(struct usb_microdia
*dev
)
690 static __u8 mi1300_stop
[][2] = {
695 static __u16 bridge6240_stop
[][2] = {
707 UDIA_INFO("Stopping camera...\n");
709 for (i
= 0; i
< ARRAY_SIZE(mi1300_stop
); i
++) {
710 reg
= mi1300_stop
[i
][0];
711 value
[0] = mi1300_stop
[i
][1];
712 ret
= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 1,
713 reg
, dev
->sensor_flags
, value
);
715 UDIA_INFO("Sensor MI 1300: Stop Sequence Error (%d) on array line %d\n", ret
, i
);
720 for (i
= 0; i
< ARRAY_SIZE(bridge6240_stop
); i
++) {
721 reg
= bridge6240_stop
[i
][0];
722 value
[0] = bridge6240_stop
[i
][1];
723 ret
= usb_microdia_control_write(dev
, reg
, value
, 1);
725 UDIA_INFO("6240 Bridge: Stop Sequence Error (%d) on array line %d\n", ret
, i
);
734 * @brief From init.sequence.log
742 * For SN9C201 with SOI968.
743 * Tests showed this function is actually unnecessary.
744 * Nevertheless the reads may give us valuable values we don't know about yet.
746 int microdia_624e_initialize(struct usb_microdia
*dev
)
750 usb_microdia_control_read(dev
, 0x130d, &buf
, 1);
751 usb_microdia_control_read(dev
, 0x1040, &buf
, 1);
757 * @brief From UsbSnoop-plugin-parsed.log
763 int microdia_624f_initialize(struct usb_microdia
*dev
)
765 /* Do nothing here */
770 * @brief From UsbSnoop-plugin-parsed.log
776 int microdia_6260_initialize(struct usb_microdia
*dev
)
783 static __u16 bridge6260_init
[][2] = {
796 for (i
= 0; i
< ARRAY_SIZE(bridge6260_init
); i
++) {
797 reg
= bridge6260_init
[i
][0];
798 value
[0] = bridge6260_init
[i
][1];
799 ret
= usb_microdia_control_write(dev
, reg
, value
, 1);
801 UDIA_INFO("6260 Bridge: Init Sequence Error (%d) on array line %d\n", ret
, i
);
810 * @brief From 6 init-logs
814 * @returns 0 (ok) or -1 (error)
818 * Windows driver versions: 5.5.8.12 and 5.7.23.000
819 * Windows versions: 2000 and XP
820 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
822 * Comments behind read oprations contain HEX-values that appeared in the logs
824 int microdia_6270_initialize(struct usb_microdia
*dev
)
836 ret
+= usb_microdia_control_read(dev
, 0x130d, buf
, 1); /* URB 5 0x81,0x85,0x04,0x8b,0x02,... */
838 ret
+= usb_microdia_control_read(dev
, 0x1040, buf
, 1); /* URB 6 0xe4,0xc4,0xa4,0x44,... */
841 * THE OLD DRIVER 5.5.8.12 DOES AN ADDITIONAL WRITE HERE:
843 * usb_microdia_control_write(dev, 0x10c8, buf, 1);
846 ret
+= usb_microdia_control_read(dev
, 0x118a, buf
, 1); /* URB 7 0x05,0x7b,0x01,0x04,... */
848 ret
+= usb_microdia_control_read(dev
, 0x0395, buf_0395
, 1); /* URB 8 0xc2,0x82,0x38,0x98,0x04,... */
849 /* => this value will be rewritten to 0x118a and 0x0395 later (URBs 81+82) */
852 ret
+= usb_microdia_control_write(dev
, 0x118a, buf
, 1); /* URB 9 */
854 ret
+= usb_microdia_control_write(dev
, 0x0395, buf
, 1); /* URB 10 */
856 ret
+= usb_microdia_control_read(dev
, 0x11b8, buf_11b8
, 1); /* URB 11 0xa0,0x00,0x24,... */
857 /* => this value will be rewritten to 0x11b8 later (URB 83) */
860 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 12 */
862 ret
+= usb_microdia_control_read(dev
, 0x1000, buf_1000
, 5); /* URB 13 0x30 0xCF 0x00 0x03 (0x02 or 0x00) */
863 /* => these values will be rewritten to 0x1000 later (URB 84) */
865 buf
[0] = 0x70; buf
[1] = 0x00; buf
[2] = 0x18; buf
[3] = 0x00; buf
[4] = 0x00;
866 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 5); /* URB 14 */
868 ret
+= usb_microdia_control_read(dev
, 0x1060, buf_1060
, 2); /* URB 15 0x08 0x00 (always ???) */
869 /* => this value will be rewritten to 0x1060 later (URB 85) */
871 buf
[0] = 0x00; buf
[1] = 0x03;
872 ret
+= usb_microdia_control_write(dev
, 0x1060, buf
, 2); /* URB 16 */
874 /* initialize I2C registers to avoid getting no ACK at first I2C operation: */
875 ret
+= sn9c20x_i2c_initialize(dev
);
877 /* enable I2C communication (bit 0) */
878 buf
[0] = 0x21; /* THE OLD DRIVER 5.5.8.12 WRITES 0x5d */
879 ret
+= usb_microdia_control_write(dev
, 0x10c8, buf
, 1); /* URB 17 */
881 /* probe sensor model: */
882 retSP
= mt9vx11_sensor_probe(dev
); /* substitutes URBs 18-48 */
883 if ((retSP
== 0) && (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
))
884 /* switch (back) to IFP address space: */
885 retASS
= mt9v111_select_address_space(dev
, MT9V111_ADDRESSSPACE_IFP
);
887 ret
+= usb_microdia_control_write(dev
, 0x118a, buf_0395
, 1); /* URB 81 => write value read with URB 8 */
889 ret
+= usb_microdia_control_write(dev
, 0x0395, buf_0395
, 1); /* URB 82 => write value read with URB 8 */
891 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf_11b8
, 1); /* URB 83 => write value read with URB 11 */
893 ret
+= usb_microdia_control_write(dev
, 0x1000, buf_1000
, 5); /* URB 84 => write value read with URB 13 */
895 ret
+= usb_microdia_control_write(dev
, 0x1060, buf_1060
, 2); /* URB 85 => write value read with URB 15; (always 08 00 ???) */
897 /* USB-interrupt-message: doesn't work yet (returns error -110) */
898 /* 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 */
901 * THE OLD DRIVER 5.5.8.12 DOES AN ADDITIONAL WRITE HERE:
903 * usb_microdia_control_write(dev, 0x1020, wbuf, 1);
906 if ((retSP
!= 0) || (retASS
!= 0) || (ret
< 33)) {
908 UDIA_INFO("One ore more errors occured during initialization !\n");
917 * @brief From UsbSnoop-plugin-parsed.log
923 int microdia_627b_initialize(struct usb_microdia
*dev
)
925 /* Apparently we don't need to write anything here */
930 * @brief From init-start-stop-log (made by VÃctor M. Hernández Rocamora)
934 * @returns 0 (ok) or -1 (error)
938 * USB-Logger: SniffUSB 2.0
940 * Comments behind read oprations contain HEX-values that appeared in the log
942 int microdia_627f_initialize(struct usb_microdia
*dev
)
947 ret
+= usb_microdia_control_read(dev
, 0x130d, buf
, 1); /* URB 5 0x81 */
949 ret
+= usb_microdia_control_read(dev
, 0x1040, buf
, 1); /* URB 6 0xe4 */
952 ret
+= usb_microdia_control_write(dev
, 0x10c8, buf
, 1); /* URB 7 */
955 ret
+= usb_microdia_control_write(dev
, 0x1020, buf
, 1); /* URB 8 */
957 ret
+= usb_microdia_control_read(dev
, 0x1045, buf
, 1); /* URB 9 0x0f */
960 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); /* URB 10 */
962 ret
+= usb_microdia_control_read(dev
, 0x1045, buf
, 1); /* URB 11 0x1f */
965 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); /* URB 12 */
967 ret
+= usb_microdia_control_read(dev
, 0x1045, buf
, 1); /* URB 13 0x0f */
970 ret
+= usb_microdia_control_write(dev
, 0x1045, buf
, 1); /* URB 14 */
973 UDIA_INFO("One ore more errors occured during initialization !\n");
980 * @brief From UsbSnoop-plugin-parsed.log
984 * @returns 0 (OK) or <0 (Error)
986 * @author Vincent, Kuzja
988 int microdia_6288_initialize(struct usb_microdia
*dev
)
996 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
1001 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
1010 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
1015 * @brief Wrapper function for device-specific startstream functions
1017 * @param dev Pointer to device structure
1021 * This will execute a function determined by the array #cameras and
1022 * the function find_camera().
1025 int dev_microdia_start_stream(struct usb_microdia
*dev
)
1028 if (dev
&& dev
->start_stream
)
1029 ret
= dev
->start_stream(dev
);
1035 * @brief From start.htm
1043 * For SN9C201 with MI1310.
1045 int microdia_6242_start_stream(struct usb_microdia
*dev
)
1051 0x01, 0x18, 0x00, 0x30, 0x00, 0x09, 0x00, 0xed,
1052 0x0f, 0xda, 0x0f, 0x3a, 0x00, 0x3a, 0x00, 0xd0,
1053 0x0f, 0xf7, 0x0f, 0x00, 0x00, 0x00, 0x60, 0x0a};
1056 0x02, 0x00, 0x02, 0x00, 0x50, 0x78, 0x00, 0x00,
1060 0x00, 0x20, 0x20, 0x20, 0x20, 0x00, 0x24, 0x3b,
1061 0x4f, 0x61, 0x71, 0x80, 0x8f, 0x9d, 0xab, 0xb8,
1062 0xc4, 0xd1, 0xdd, 0xe9, 0xf4, 0xff};
1064 __u8 qtable1
[64] = {
1065 0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
1066 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
1067 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
1068 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
1069 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
1070 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
1071 0x4f, 0x54, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
1072 0x64, 0x5c, 0x54, 0x64, 0x4b, 0x54, 0x58, 0x54};
1074 __u8 qtable2
[64] = {
1075 0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
1076 0x15, 0x26, 0x54, 0x36, 0x2e, 0x36, 0x54, 0x54,
1077 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1078 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1079 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1080 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1081 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1082 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54};
1084 __u8 first10c0
[7][3] = {
1094 __u8 second10c0a
[2][5] = {
1095 {0x01, 0x00, 0x0e, 0x00, 0x14},
1096 {0x03, 0x03, 0xc4, 0x05, 0x14}
1099 __u8 second10c0b
[3] =
1102 __u8 third10c0
[4][3] = {
1109 __u8 fourth10c0a
[3][3] = {
1115 __u8 fourth10c0b
[2][5] = {
1116 {0x2b, 0x01, 0x88, 0x01, 0x88},
1117 {0x2d, 0x01, 0x88, 0x01, 0x88}
1120 __u8 fifth10c0
[4][3] = {
1126 /* interrupt down */
1129 usb_microdia_control_write(dev
, 0x1066, buf
, 1); /* URB 1 */
1132 /* interrupt down */
1135 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
1138 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
1141 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
1144 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
1147 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
1150 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
1153 usb_microdia_control_write(dev
, 0x1020, buf
, 1);
1155 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20;
1156 buf
[3] = 0x10; buf
[4] = 0x08;
1157 usb_microdia_control_write(dev
, 0x1067, buf
, 5);
1159 buf
[0] = 0xb0; buf
[1] = dev
->sensor_slave_address
; buf
[2] = 0x0d;
1160 buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00;
1161 buf
[6] = 0x00; buf
[7] = 0x10; buf
[8] = 0x03;
1162 usb_microdia_control_write(dev
, 0x10c0, buf
, 9);
1164 usb_microdia_control_write(dev
, 0x10e0, urb10
, 24); /* URB 10 */
1166 buf
[0] = 0x00; buf
[1] = 0x00; buf
[3] = 0x00;
1167 usb_microdia_control_write(dev
, 0x10f8, buf
, 3);
1169 usb_microdia_control_write(dev
, 0x1180, urb13
, 9);
1172 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
1174 usb_microdia_control_write(dev
, 0x118b, urb14
, 22);
1176 buf
[0] = 0x00; buf
[1] = 0x00;
1177 usb_microdia_control_write(dev
, 0x11a1, buf
, 2);
1179 buf
[0] = 0x60; buf
[1] = 0x20; buf
[2] = 0x00;
1180 buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00;
1181 buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x00;
1182 usb_microdia_control_write(dev
, 0x11b7, buf
, 9);
1185 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1188 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
1190 for (i
= 0; i
< 7; i
++)
1191 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1192 first10c0
[i
][0], dev
->sensor_flags
, &first10c0
[i
][1]); /* URB 9-48 */
1195 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
1198 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
1201 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 50 */
1204 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
1207 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
1210 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
1213 usb_microdia_control_write(dev
, 0x1001, buf
, 1);
1216 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
1219 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
1222 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
1225 usb_microdia_control_write(dev
, 0x11bf, buf
, 1);
1227 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
1228 second10c0a
[0][0], dev
->sensor_flags
, &second10c0a
[0][1]);
1230 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
1231 second10c0a
[1][0], dev
->sensor_flags
, &second10c0a
[1][1]);
1233 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
1234 0x09, dev
->sensor_flags
, NULL
);
1236 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1237 second10c0b
[0], dev
->sensor_flags
, &second10c0b
[1]);
1239 buf
[0] = 0x06; buf
[1] = 0x00; buf
[2] = 0x02;
1240 buf
[3] = 0x00; buf
[4] = 0x28; buf
[5] = 0x3c;
1241 usb_microdia_control_write(dev
, 0x1180, buf
, 6);
1243 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
1244 usb_microdia_control_write(dev
, 0x11a1, buf
, 4);
1246 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
1247 usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
1250 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
1253 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
1256 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
1259 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1262 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
1265 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
1268 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 80 */
1269 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1272 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1273 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1276 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1277 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1280 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1281 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1284 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1285 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1288 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 90 */
1290 for (i
= 0; i
< 4; i
++)
1291 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1292 third10c0
[i
][0], dev
->sensor_flags
, &third10c0
[i
][1]); /* URB 97-106 */
1295 usb_microdia_control_write(dev
, 0x1180, buf
, 1);
1297 for (i
= 0; i
< 3; i
++)
1298 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1299 fourth10c0a
[i
][0], dev
->sensor_flags
, &fourth10c0a
[i
][1]);
1301 for (i
= 0; i
< 2; i
++)
1302 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
1303 fourth10c0b
[i
][0], dev
->sensor_flags
, &fourth10c0b
[i
][1]);
1305 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
1306 0x33, dev
->sensor_flags
, NULL
);
1308 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1309 first10c0
[0][0], dev
->sensor_flags
, &first10c0
[0][1]);
1312 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
1315 usb_microdia_control_write(dev
, 0x118b, buf
, 1);
1318 usb_microdia_control_write(dev
, 0x10f7, buf
, 1);
1321 usb_microdia_control_write(dev
, 0x10f8, buf
, 1);
1324 usb_microdia_control_write(dev
, 0x10fa, buf
, 1);
1327 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
1330 usb_microdia_control_write(dev
, 0x10f9, buf
, 1);
1333 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
1335 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
1336 usb_microdia_control_write(dev
, 0x11bc, buf
, 4);
1338 /* Set whole array buf to 0x00 */
1339 memset(buf
, 0x00, 48);
1340 usb_microdia_control_write(dev
, 0x11c0, buf
, 48);
1342 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a;
1343 buf
[3] = 0x05; buf
[4] = 0x04; buf
[5] = 0x3f;
1344 usb_microdia_control_write(dev
, 0x11a5, buf
, 6);
1346 buf
[0] = 0x14; buf
[1] = 0xec; buf
[2] = 0x0a; buf
[3] = 0xf6;
1347 usb_microdia_control_write(dev
, 0x11af, buf
, 4);
1349 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x2d; buf
[3] = 0xdd;
1350 usb_microdia_control_write(dev
, 0x11b3, buf
, 4);
1353 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
1356 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
1359 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
1361 usb_microdia_control_write(dev
, 0x1100, qtable1
, 64);
1363 usb_microdia_control_write(dev
, 0x1140, qtable2
, 64); /* URB 150 */
1366 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
1369 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
1372 usb_microdia_control_write(dev
, 0x10e0, buf
, 1);
1375 usb_microdia_control_write(dev
, 0x11bc, buf
, 1);
1378 usb_microdia_control_write(dev
, 0x11bd, buf
, 1);
1381 usb_microdia_control_write(dev
, 0x11be, buf
, 1);
1384 usb_microdia_control_write(dev
, 0x11bf, buf
, 1);
1386 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
1387 second10c0a
[0][0], dev
->sensor_flags
, &second10c0a
[0][1]);
1389 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4,
1390 second10c0a
[1][0], dev
->sensor_flags
, &second10c0a
[1][1]);
1392 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0,
1393 0x09, dev
->sensor_flags
, NULL
);
1395 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1396 second10c0b
[0], dev
->sensor_flags
, &second10c0b
[1]);
1398 buf
[0] = 0x06; buf
[1] = 0x00; buf
[2] = 0x02;
1399 buf
[3] = 0x00; buf
[4] = 0x28; buf
[5] = 0x3c;
1400 usb_microdia_control_write(dev
, 0x1180, buf
, 6);
1402 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
1403 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); /* URB 170 */
1405 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
1406 usb_microdia_control_write(dev
, 0x11ab, buf
, 4);
1409 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
1412 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
1415 usb_microdia_control_write(dev
, 0x11b9, buf
, 1);
1418 usb_microdia_control_write(dev
, 0x11ba, buf
, 1);
1421 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
1424 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
1427 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
1430 usb_microdia_control_write(dev
, 0x1002, buf
, 1);
1433 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 180 */
1436 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
1439 usb_microdia_control_write(dev
, 0x0395, buf
, 1);
1442 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1443 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1446 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1447 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1450 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1451 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1454 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1455 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 190 */
1458 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1459 usb_microdia_control_read(dev
, 0x11b8, buf
, 1);
1462 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
1464 for (i
= 0; i
< 3; i
++)
1465 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1466 fifth10c0
[i
][0], dev
->sensor_flags
, &fifth10c0
[i
][1]); /* URB 200-205 */
1468 sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 2,
1469 0x00, dev
->sensor_flags
, buf
);
1470 /* __u8 result[2] = {buf[3], buf[4]}; */
1473 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
1480 * @brief From startstream.log
1488 * For SN9C201 with SOI968.
1489 * This is function triggers a working stream of image data and a glowing LED.
1491 int microdia_624e_start_stream(struct usb_microdia
*dev
)
1494 __u8 unknown1
[9] = { dev
->sensor_flags
, dev
->sensor_slave_address
,
1495 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
1588 __u8 qtable1
[64] = {
1589 0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
1590 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
1591 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
1592 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
1593 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
1594 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
1595 0x4f, 0x53, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
1596 0x64, 0x5c, 0x53, 0x64, 0x4b, 0x53, 0x58, 0x53
1599 __u8 qtable2
[64] = {
1600 0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
1601 0x15, 0x26, 0x53, 0x36, 0x2e, 0x36, 0x53, 0x53,
1602 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
1603 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
1604 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
1605 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
1606 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53,
1607 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53
1611 for (i
= 0; i
< ARRAY_SIZE(regs
); i
++) {
1614 ret
= usb_microdia_control_write(dev
, reg
, &value
, 1);
1616 UDIA_INFO("Bridge Init Error (%d). line %d\n", ret
, i
);
1621 memset(reg_11c0
, 0x00, 48);
1622 ret
= usb_microdia_control_write(dev
, 0x11c0, reg_11c0
, 48);
1626 ret
= usb_microdia_control_write(dev
, 0x1100, qtable1
, 64);
1630 ret
= usb_microdia_control_write(dev
, 0x1140, qtable2
, 64);
1634 /* this is the same register as the I2C write, not sure why
1635 * we're writing 9 bytes -- the SN9C102 docs say all writes
1636 * must be 8 bytes, but we don't have docs for SN9C20x */
1637 ret
= usb_microdia_control_write(dev
, 0x10c0, unknown1
, 9);
1641 if (dev
->sensor_init
)
1642 dev
->sensor_init(dev
);
1647 UDIA_ERROR("start stream: failed (%d)!\n", ret
);
1651 int microdia_624f_start_stream(struct usb_microdia
*dev
)
1654 __u8 unknown1
[9] = { dev
->sensor_flags
, dev
->sensor_slave_address
,
1655 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03 };
1719 __u8 reg_11c0
[48] = {
1720 0x10, 0x21, 0x34, 0x40, 0x47, 0x4f, 0x57, 0x5f,
1721 0x64, 0x68, 0x6d, 0x73, 0x79, 0x80, 0x89, 0x97,
1722 0x0d, 0x1c, 0x2a, 0x33, 0x38, 0x3d, 0x44, 0x4a,
1723 0x4e, 0x52, 0x56, 0x5b, 0x61, 0x68, 0x6f, 0x7a,
1724 0x0d, 0x1a, 0x2a, 0x31, 0x36, 0x3b, 0x41, 0x47,
1725 0x4a, 0x4e, 0x53, 0x58, 0x5d, 0x64, 0x6b, 0x76
1728 __u8 qtable1
[64] = {
1729 0x0d, 0x08, 0x08, 0x0d, 0x08, 0x08, 0x0d, 0x0d,
1730 0x0d, 0x0d, 0x11, 0x0d, 0x0d, 0x11, 0x15, 0x21,
1731 0x15, 0x15, 0x11, 0x11, 0x15, 0x2a, 0x1d, 0x1d,
1732 0x19, 0x21, 0x32, 0x2a, 0x32, 0x32, 0x2e, 0x2a,
1733 0x2e, 0x2e, 0x36, 0x3a, 0x4b, 0x43, 0x36, 0x3a,
1734 0x47, 0x3a, 0x2e, 0x2e, 0x43, 0x5c, 0x43, 0x47,
1735 0x4f, 0x54, 0x58, 0x58, 0x58, 0x32, 0x3f, 0x60,
1736 0x64, 0x5c, 0x54, 0x64, 0x4b, 0x54, 0x58, 0x54
1739 __u8 qtable2
[64] = {
1740 0x0d, 0x11, 0x11, 0x15, 0x11, 0x15, 0x26, 0x15,
1741 0x15, 0x26, 0x54, 0x36, 0x2e, 0x36, 0x54, 0x54,
1742 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1743 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1744 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1745 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1746 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
1747 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54
1750 for (i
= 0; i
< ARRAY_SIZE(regs
); i
++) {
1753 ret
= usb_microdia_control_write(dev
, reg
, &value
, 1);
1755 UDIA_INFO("Bridge Init Error (%d). line %d\n", ret
, i
);
1760 ret
= usb_microdia_control_write(dev
, 0x11c0, reg_11c0
, 48);
1764 ret
= usb_microdia_control_write(dev
, 0x1100, qtable1
, 64);
1768 ret
= usb_microdia_control_write(dev
, 0x1140, qtable2
, 64);
1772 /* this is the same register as the I2C write, not sure why
1773 * we're writing 9 bytes -- the SN9C102 docs say all writes
1774 * must be 8 bytes, but we don't have docs for SN9C20x */
1775 ret
= usb_microdia_control_write(dev
, 0x10c0, unknown1
, 9);
1779 if (dev
->sensor_init
)
1780 dev
->sensor_init(dev
);
1785 UDIA_ERROR("start stream: failed (%d)!\n", ret
);
1790 * @brief Start stream from 6260 devices
1794 * @returns 0 or negative error code
1797 int microdia_6260_start_stream(struct usb_microdia
*dev
)
1805 static __u16 bridge6260_start
[][2] = {
1946 UDIA_INFO("Starting camera 0c45:6260...\n");
1948 for (i
= 0; i
< ARRAY_SIZE(bridge6260_start
); i
++) {
1949 reg
= bridge6260_start
[i
][0];
1950 value
[0] = bridge6260_start
[i
][1];
1951 ret
= usb_microdia_control_write(dev
, reg
, value
, 1);
1953 UDIA_INFO("camera 0c45:6260 Bridge: Start Sequence Error (%d) on array line %d\n", ret
, i
);
1958 buf
[0] = 0x80; buf
[1] = 0x21; buf
[2] = 0x00; buf
[3] = 0x00;
1959 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
1961 ret
= usb_microdia_control_write(dev
, 0x10c0, buf
, 9);
1963 ret
= ov7670_initialise(dev
);
1967 ret
= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 1, 0x3b, dev
->sensor_flags
, buf
);
1968 ret
= usb_microdia_control_read(dev
, 0x10c1, buf
, 1);
1970 ret
= usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
1972 /* TRY TO READ FROM EEPROM: */
1973 ret
= sn9c20x_read_i2c_data(dev
, 0x50, 1, 0x00, dev
->sensor_flags
, buf
);
1975 UDIA_INFO("No EEPROM found\n");
1977 UDIA_INFO("Read from EEPROM successful\n");
1980 ret
= usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
1986 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
1990 * @returns 0 (ok) or -1 (error)
1994 * Windows driver versions: 5.7.23.000
1995 * Windows versions: 2000 and XP
1996 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
1997 * All logs were made using AMCAP with 640x480, RGB24
1999 int microdia_6270_start_stream(struct usb_microdia
*dev
)
2006 /* Check if sensor slave address is valid: */
2007 if ((dev
->sensor_slave_address
!= MT9V111_I2C_SLAVE_ADDRESS
) && (dev
->sensor_slave_address
!= MT9V011_I2C_SLAVE_ADDRESS
)) {
2008 UDIA_INFO("microdia_6270_start_stream(): Invalid sensor slave address !\n");
2012 /* <= INTERRUPT COMING BACK (URB 1953) */
2013 /* SWITCH TO ALTERNATE SETTINGS 8 (URB 1954) // NOT IN ALEX'S LOG */
2014 /* => INTERRUPT GOING DOWN (URB 1955) */
2017 usb_microdia_control_write(dev
, 0x1066, buf
, 1); /* URB 1956 */
2019 /* <= INTERRUPT COMING BACK (URB 1955) */
2020 /* => INTERRUPT GOING DOWN (URB 1957) */
2023 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 1958 */
2025 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 1959 */
2027 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 1960 */
2029 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 1961 */
2031 usb_microdia_control_write(dev
, 0x1020, buf
, 1); /* URB 1962 */
2032 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20; buf
[3] = 0x10; buf
[4] = 0x08;
2033 usb_microdia_control_write(dev
, 0x1067, buf
, 5); /* URB 1963 */
2035 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2036 /* STRANGE I2C MESSAGE: */
2038 /* - byte 8 = 0x00 at first start + first cycle */
2039 /* - procedure not complete: no wait/check for ack/error, no readout of 0x10c2 */
2040 /* - dummy writes at first cycle and read at second cycle, but there are many I2C messages in the meantime, so this should not work */
2042 /* AT FIRST START + FIRST CYCLE: */
2043 buf
[0] = 0x80; buf
[1] = dev
->sensor_slave_address
; buf
[2] = 0x00; buf
[3] = 0x00;
2044 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00; buf
[8] = 0x03;
2045 /* AT ALL FURTHER STARTS + FIRST CYCLE: */
2046 /* MT9V111: I2C MESSAGE => IFP Register 0x33: Auto exposure */
2047 /* buf[0] = 0x90; buf[1] = dev->sensor_slave_address; buf[2] = 0x33; buf[3] = 0x00; */
2048 /* buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03; */
2049 /* MT9V011: ????????????????????????? */
2050 /* buf[0] = 0x90; buf[1] = dev->sensor_slave_address; buf[2] = 0x07; buf[3] = 0x00; */
2051 /* buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03; */
2052 /* ALWAYS AT 2nd AND FURTHER CYCLES: */
2054 /* buf[0] = 0xa2; buf[1] = 0x5c; buf[2] = 0x00; buf[3] = 0x36; */
2055 /* buf[4] = 0x00; buf[5] = 0x82; buf[6] = 0x3a; buf[7] = 0x10; buf[8] = 0x03; */
2056 /* => buf[3] to buf[6] simply contain bytes read with URB 2215 */
2058 /* buf[0] = 0xb0; buf[1] = 0x5d; buf[2] = 0x07; buf[3] = 0x00; */
2059 /* buf[4] = 0x00; buf[5] = 0x00; buf[6] = 0x00; buf[7] = 0x10; buf[8] = 0x03; */
2060 usb_microdia_control_write(dev
, 0x10c0, buf
, 9); /* URB 1964 */
2061 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2063 buf
[0] = 0x45; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30;
2064 buf
[4] = 0x00; buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed;
2065 buf
[8] = 0x0f; buf
[9] = 0xda; buf
[10] = 0x0f; buf
[11] = 0x3a;
2066 buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00; buf
[15] = 0xd0;
2067 buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
2068 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
2069 usb_microdia_control_write(dev
, 0x10e0, buf
, 24); /* URB 1965 */
2070 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
2071 usb_microdia_control_write(dev
, 0x10f8, buf
, 3); /* URB 1966 */
2073 usb_microdia_control_write(dev
, 0x1188, buf
, 1); /* URB 1968 */
2075 usb_microdia_control_write(dev
, 0x118a, buf
, 1);
2076 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20;
2077 buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b;
2078 buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80;
2079 buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8;
2080 buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
2081 buf
[20] = 0xf4; buf
[21] = 0xff;
2082 usb_microdia_control_write(dev
, 0x118b, buf
, 22); /* URB 1969 */
2083 buf
[0] = 0x00; buf
[1] = 0x00;
2084 usb_microdia_control_write(dev
, 0x11a1, buf
, 2); /* URB 1970 */
2085 buf
[0] = 0x60; buf
[1] = 0x28; buf
[2] = 0x00; buf
[3] = 0x08;
2086 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
2088 usb_microdia_control_write(dev
, 0x11b7, buf
, 9); /* URB 1971 */
2090 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 1972 */
2092 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 1973 */
2094 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2097 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2098 /* Write to IFP register 0x0d: Color Correction Register 8 */
2099 buf
[0] = 0x00; buf
[1] = 0x01;
2100 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
); /* URBs 1974-1976 */
2101 /* Write to IFP register 0x0d: Color Correction Register 8 */
2102 buf
[0] = 0x00; buf
[1] = 0x00; /* ??? */
2103 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
); /* URBs 1977-1979 */
2104 /* Writes to IFP registers 0x01: Register Address Space Selection */
2105 /* 0x02: Color Correction Register 1 */
2106 buf
[0] = 0x00; buf
[1] = 0x01; /* select IFP address space */
2107 buf
[2] = 0x00; buf
[3] = 0x16; /* ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
2108 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x01, dev
->sensor_flags
, buf
); /* URBs 1980-1982 */
2109 /* Writes to IFP registers 0x03: Color Correction Register 3 */
2110 /* 0x04: Color Correction Register 4 */
2111 buf
[0] = 0x01; buf
[1] = 0xe1; /* ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
2112 buf
[2] = 0x02; buf
[3] = 0x81; /* ??? // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
2113 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x03, dev
->sensor_flags
, buf
); /* URBs 1983-1985 */
2114 /* Writes to IFP registers 0x05: Aperture Correction (Sharpening) */
2115 /* 0x06: Operating Mode Control */
2116 buf
[0] = 0x00; buf
[1] = 0x04; /* 100% sharpening, no automatic sharpness reduction at low light // AT FIRST START + FIRST CYCLE: 0x00 0x00: no sharpening */
2117 buf
[2] = 0x00; buf
[3] = 0x00; /* stop AWB at the current values, no on-the-fly defect correction, no auto exposure, + RESREVED option */
2118 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x05, dev
->sensor_flags
, buf
); /* URBs 1986-1988 */
2119 /* Writes to IFP registers 0x07: Image Flow Processor Soft Reset */
2120 /* 0x08: Output Format Control */
2121 buf
[0] = 0x30; buf
[1] = 0x02; /* reset // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
2122 buf
[2] = 0x04; buf
[3] = 0x80; /* bypass entire image processing, raw 8+2 Bayer data output directly */
2123 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x07, dev
->sensor_flags
, buf
); /* URBs 1989-1991 */
2124 /* "Dummy" write to IFP Register 0x11: Color Correction Register 12 */
2125 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x11, dev
->sensor_flags
, NULL
); /* URBs 1992-1993 */
2126 /* Write to register 0x01: Register address space selection */
2127 /* Write to sensor register 0x02: Column Start */
2128 buf
[0] = 0x00; buf
[1] = 0x04; /* select sensor address space */
2129 buf
[2] = 0x00; buf
[3] = 0x16; /* start with column 22 */
2130 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x01, dev
->sensor_flags
, buf
); /* URBs 1994-1996 */
2131 /* Writes to sensor registers 0x03: Window Height */
2132 /* 0x04: Window Width */
2133 buf
[0] = 0x01; buf
[1] = 0xe6; /* 486 */
2134 buf
[2] = 0x02; buf
[3] = 0x86; /* 646 */
2135 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x03, dev
->sensor_flags
, buf
); /* URBs 1997-1999 */
2136 /* Writes to sensor registers 0x05: Horizontal Blanking */
2137 /* 0x06: Vertical Blanking */
2138 buf
[0] = 0x00; buf
[1] = 0x04; /* 4 columns (pixel clocks) // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
2139 buf
[2] = 0x00; buf
[3] = 0x00; /* 0 rows */
2140 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x05, dev
->sensor_flags
, buf
); /* URBs 2000-2002 */
2141 /* Writes to sensor registers 0x07: Output Control */
2142 /* 0x08: Row Start */
2143 buf
[0] = 0x30; buf
[1] = 0x02; /* normal operation + chip enable + RESERVED options */
2144 buf
[2] = 0x00; buf
[3] = 0x08; /* row 8 */
2145 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x07, dev
->sensor_flags
, buf
); /* URBs 2003-2005 */
2146 /* "Dummy" write to sensor Register 0x11: UNDOCUMENTED */
2147 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x11, dev
->sensor_flags
, NULL
); /* URBs 2006-2007 */
2148 /* Writes to sensor registers 0x0c: Shutter Delay */
2149 /* 0x0d: Reset (Soft) (from MT9V011 datasheet) */
2150 buf
[0] = 0x00; buf
[1] = 0x00; /* 0 master clocks */
2151 buf
[2] = 0x00; buf
[3] = 0x00; /* return to normal operation */
2152 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0c, dev
->sensor_flags
, buf
); /* URBs 2008-2010 */
2153 /* Writes to sensor registers 0x0e: UNDOCUMENTED */
2154 /* 0x0f: UNDOCUMENTED */
2155 buf
[0] = 0x00; buf
[1] = 0x00;
2156 buf
[2] = 0x00; buf
[3] = 0x00;
2157 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0e, dev
->sensor_flags
, buf
); /* URBs 2011-2013 */
2158 /* Writes to sensor registers 0x10: UNDOCUMENTED */
2159 /* 0x11: UNDOCUMENTED */
2160 buf
[0] = 0x00; buf
[1] = 0x00;
2161 buf
[2] = 0x00; buf
[3] = 0x00;
2162 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x10, dev
->sensor_flags
, buf
); /* URBs 2014-2016 */
2163 /* Writes to sensor registers 0x12: 2X Zoom Col Start => 0x1e bit 0 must be set to activate zoom */
2164 /* 0x13: 2X Zoom Row Start => 0x1e bit 0 must be set to activate zoom */
2165 buf
[0] = 0x00; buf
[1] = 0xb0; /* column 176 */
2166 buf
[2] = 0x00; buf
[3] = 0x7c; /* row 124 */
2167 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x12, dev
->sensor_flags
, buf
); /* URBs 2017-2018 */
2168 /* Writes to sensor registers 0x14: UNDOCUMENTED */
2169 /* 0x15: UNDOCUMENTED */
2170 buf
[0] = 0x00; buf
[1] = 0x00;
2171 buf
[2] = 0x00; buf
[3] = 0x00;
2172 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x14, dev
->sensor_flags
, buf
); /* URBs 2019-2021 */
2173 /* Writes to sensor registers 0x16: UNDOCUMENTED */
2174 /* 0x17: UNDOCUMENTED */
2175 buf
[0] = 0x00; buf
[1] = 0x00;
2176 buf
[2] = 0x00; buf
[3] = 0x00;
2177 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x16, dev
->sensor_flags
, buf
); /* URBs 2022-2024 */
2178 /* Writes to sensor registers 0x18: UNDOCUMENTED */
2179 /* 0x19: UNDOCUMENTED */
2180 buf
[0] = 0x00; buf
[1] = 0x00;
2181 buf
[2] = 0x00; buf
[3] = 0x00;
2182 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x18, dev
->sensor_flags
, buf
); /* URBs 2025-2027 */
2183 /* Writes to sensor registers 0x1a: UNDOCUMENTED */
2184 /* 0x1b: UNDOCUMENTED */
2185 buf
[0] = 0x00; buf
[1] = 0x00;
2186 buf
[2] = 0x00; buf
[3] = 0x00;
2187 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1a, dev
->sensor_flags
, buf
); /* URBs 2028-2030 */
2188 /* Writes to sensor registers 0x1c: UNDOCUMENTED */
2189 /* 0x1d: UNDOCUMENTED */
2190 buf
[0] = 0x00; buf
[1] = 0x00;
2191 buf
[2] = 0x00; buf
[3] = 0x00;
2192 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1c, dev
->sensor_flags
, buf
); /* URBs 2031-2033 */
2193 /* Write to sensor register 0x30: RESERVED */
2194 buf
[0] = 0x00; buf
[1] = 0x00;
2195 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x30, dev
->sensor_flags
, buf
); /* URBs 2034-2036 */
2196 /* Write to sensor register 0x20: Read Mode */
2197 buf
[0] = 0x00; buf
[1] = 0x00; /* normal readout */
2198 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
); /* URBs 2037-2039 */
2199 /* Writes to sensor registers 0x30: RESERVED */
2200 /* 0x31: RESERVED */
2201 buf
[0] = 0x00; buf
[1] = 0x05;
2202 buf
[2] = 0x00; buf
[3] = 0x00;
2203 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x30, dev
->sensor_flags
, buf
); /* URBs 2040-2042 */
2204 /* "Dummy" write to sensor Register 0x34: RESERVED */
2205 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x34, dev
->sensor_flags
, NULL
); /* URBs 2043-2044 */
2206 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
2207 /* Write to sensor register 0x07: Output Control */
2208 buf
[0] = 0x00; buf
[1] = 0x02; /* chip enable, normal operation */
2209 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
2210 /* Write to sensor register 0x0d: Soft Reset */
2211 buf
[0] = 0x00; buf
[1] = 0x01; /* reset */
2212 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
);
2213 /* Write to sensor register 0x0d: Soft Reset */
2214 buf
[0] = 0x00; buf
[1] = 0x00; /* resume operation */
2215 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
);
2216 /* Writes to sensor registers 0x01: Row start */
2217 /* 0x02: Column Start */
2218 buf
[0] = 0x00; buf
[1] = 0x08; /* start with row 8 */
2219 buf
[2] = 0x00; buf
[3] = 0x16; /* start with column 22 */
2220 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x01, dev
->sensor_flags
, buf
);
2221 /* Writes to sensor registers 0x03: Window Height */
2222 /* 0x04: Window Width */
2223 buf
[0] = 0x01; buf
[1] = 0xe1; /* 481 */
2224 buf
[2] = 0x02; buf
[3] = 0x81; /* 641 */
2225 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x03, dev
->sensor_flags
, buf
);
2226 /* Writes to sensor registers 0x05: Horizontal Blanking */
2227 /* 0x06: Vertical Blanking */
2228 buf
[0] = 0x00; buf
[1] = 0x83; /* 131 columns (pixel clocks) */
2229 buf
[2] = 0x00; buf
[3] = 0x06; /* 6 rows */
2230 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x05, dev
->sensor_flags
, buf
);
2231 /* Write to sensor register 0x0d: Soft Reset */
2232 buf
[0] = 0x00; buf
[1] = 0x02; /* UNKNOWN */
2233 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0d, dev
->sensor_flags
, buf
);
2234 /* Writes to sensor registers 0x0a: Pixel Clock Speed */
2235 /* 0x0b: Frame Restart */
2236 buf
[0] = 0x00; buf
[1] = 0x00; /* default */
2237 buf
[2] = 0x00; buf
[3] = 0x00; /* (has no effect/no restart) */
2238 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0a, dev
->sensor_flags
, buf
);
2239 /* Writes to sensor registers 0x0c: Shutter Delay */
2240 /* 0x0d: Soft Reset */
2241 buf
[0] = 0x00; buf
[1] = 0x00; /* 0 master clocks */
2242 buf
[2] = 0x00; buf
[3] = 0x00; /* resume operation */
2243 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0c, dev
->sensor_flags
, buf
);
2244 /* Writes to sensor registers 0x0e: UNDOCUMENTED */
2245 /* 0x0f: UNDOCUMENTED */
2246 buf
[0] = 0x00; buf
[1] = 0x00;
2247 buf
[2] = 0x00; buf
[3] = 0x00;
2248 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x0e, dev
->sensor_flags
, buf
);
2249 /* Writes to sensor registers 0x10: UNDOCUMENTED */
2250 /* 0x11: UNDOCUMENTED */
2251 buf
[0] = 0x00; buf
[1] = 0x00;
2252 buf
[2] = 0x00; buf
[3] = 0x00;
2253 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x10, dev
->sensor_flags
, buf
);
2254 /* Writes to sensor registers 0x12: 2X Zoom Column Start (from MT9V111 datasheet) */
2255 /* 0x13: 2X Zoom Row Start (from MT9V111 datasheet) */
2256 buf
[0] = 0x00; buf
[1] = 0x00; /* column 0 => bit0 of reg 0x1e must be set to activate zoom */
2257 buf
[2] = 0x00; buf
[3] = 0x00; /* row 0 => bit0 of reg 0x1e must be set to activate zoom */
2258 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x12, dev
->sensor_flags
, buf
);
2259 /* Writes to sensor registers 0x14: UNDOCUMENTED */
2260 /* 0x15: UNDOCUMENTED */
2261 buf
[0] = 0x00; buf
[1] = 0x00;
2262 buf
[2] = 0x00; buf
[3] = 0x00;
2263 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x14, dev
->sensor_flags
, buf
);
2264 /* Writes to sensor registers 0x16: UNDOCUMENTED */
2265 /* 0x17: UNDOCUMENTED */
2266 buf
[0] = 0x00; buf
[1] = 0x00;
2267 buf
[2] = 0x00; buf
[3] = 0x00;
2268 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x16, dev
->sensor_flags
, buf
);
2269 /* Writes to sensor registers 0x18: UNDOCUMENTED */
2270 /* 0x19: UNDOCUMENTED */
2271 buf
[0] = 0x00; buf
[1] = 0x00;
2272 buf
[2] = 0x00; buf
[3] = 0x00;
2273 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x18, dev
->sensor_flags
, buf
);
2274 /* Writes to sensor registers 0x1a: UNDOCUMENTED */
2275 /* 0x1b: UNDOCUMENTED */
2276 buf
[0] = 0x00; buf
[1] = 0x00;
2277 buf
[2] = 0x00; buf
[3] = 0x00;
2278 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1a, dev
->sensor_flags
, buf
);
2279 /* Writes to sensor registers 0x1c: UNDOCUMENTED */
2280 /* 0x1d: UNDOCUMENTED */
2281 buf
[0] = 0x00; buf
[1] = 0x00;
2282 buf
[2] = 0x00; buf
[3] = 0x00;
2283 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x1c, dev
->sensor_flags
, buf
);
2284 /* Write to sensor register 0x32: RESERVED */
2285 buf
[0] = 0x00; buf
[1] = 0x00;
2286 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x32, dev
->sensor_flags
, buf
);
2287 /* Writes to sensor registers 0x20: Read Mode */
2288 /* 0x21: RESERVED */
2289 buf
[0] = 0x11; buf
[1] = 0x01; /* output all frames (including bad frames) + UNDOCUMENTED */
2290 buf
[2] = 0x00; buf
[3] = 0x00;
2291 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x20, dev
->sensor_flags
, buf
);
2292 /* Writes to sensor registers 0x22: RESERVED */
2293 /* 0x23: UNDOCUMENTED */
2294 buf
[0] = 0x00; buf
[1] = 0x00;
2295 buf
[2] = 0x00; buf
[3] = 0x00;
2296 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x22, dev
->sensor_flags
, buf
);
2297 /* Writes to sensor registers 0x24: UNDOCUMENTED */
2298 /* 0x25: UNDOCUMENTED */
2299 buf
[0] = 0x00; buf
[1] = 0x00;
2300 buf
[2] = 0x00; buf
[3] = 0x00;
2301 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x24, dev
->sensor_flags
, buf
);
2302 /* Writes to sensor registers 0x26: UNDOCUMENTED */
2303 /* 0x27: RESERVED */
2304 buf
[0] = 0x00; buf
[1] = 0x00;
2305 buf
[2] = 0x00; buf
[3] = 0x24;
2306 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x26, dev
->sensor_flags
, buf
);
2307 /* "Dummy" write to sensor Register 0x30: RESERVED */
2308 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x30, dev
->sensor_flags
, NULL
);
2309 /* Writes to sensor registers 0x2f: RESERVED */
2310 /* 0x30: RESERVED */
2311 buf
[0] = 0xf7; buf
[1] = 0xb0;
2312 buf
[2] = 0x00; buf
[3] = 0x05;
2313 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2f, dev
->sensor_flags
, buf
);
2314 /* Writes to sensor registers 0x31: RESERVED */
2315 /* 0x32: RESERVED */
2316 buf
[0] = 0x00; buf
[1] = 0x00;
2317 buf
[2] = 0x00; buf
[3] = 0x00;
2318 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x31, dev
->sensor_flags
, buf
);
2319 /* Writes to sensor registers 0x33: RESERVED */
2320 /* 0x34: RESERVED */
2321 buf
[0] = 0x00; buf
[1] = 0x00;
2322 buf
[2] = 0x01; buf
[3] = 0x00;
2323 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x33, dev
->sensor_flags
, buf
);
2324 /* "Dummy" write to sensor Register 0x3b: RESERVED */
2325 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x3b, dev
->sensor_flags
, NULL
);
2326 /* Write to sensor register 0x3d: RESERVED */
2327 buf
[0] = 0x06; buf
[1] = 0x8f;
2328 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x3d, dev
->sensor_flags
, buf
);
2329 /* Writes to sensor registers 0x40: RESERVED */
2330 /* 0x41: RESERVED */
2331 buf
[0] = 0x01; buf
[1] = 0xe0;
2332 buf
[2] = 0x00; buf
[3] = 0xd1;
2333 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x40, dev
->sensor_flags
, buf
);
2334 /* Write to sensor register 0x44: UNDOCUMENTED */
2335 buf
[0] = 0x00; buf
[1] = 0x82;
2336 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x44, dev
->sensor_flags
, buf
);
2337 /* Writes to sensor registers 0x5a: RESERVED */
2338 /* 0x5b: RESERVED */
2339 buf
[0] = 0x00; buf
[1] = 0x00;
2340 buf
[2] = 0x00; buf
[3] = 0x00;
2341 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x5a, dev
->sensor_flags
, buf
);
2342 /* Writes to sensor registers 0x5c: RESERVED */
2343 /* 0x5d: RESERVED */
2344 buf
[0] = 0x00; buf
[1] = 0x00;
2345 buf
[2] = 0x00; buf
[3] = 0x00;
2346 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x5c, dev
->sensor_flags
, buf
);
2347 /* Writes to sensor registers 0x5e: RESERVED */
2348 /* 0x5f: RESERVED */
2349 buf
[0] = 0x00; buf
[1] = 0x00;
2350 buf
[2] = 0xa3; buf
[3] = 0x1d;
2351 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x5e, dev
->sensor_flags
, buf
);
2352 /* "Dummy" write to sensor Register 0x68: UNDOCUMENTED */
2353 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x68, dev
->sensor_flags
, NULL
);
2354 /* Write to sensor register 0x62: RESERVED */
2355 buf
[0] = 0x06; buf
[1] = 0x11;
2356 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x62, dev
->sensor_flags
, buf
);
2359 UDIA_INFO("1 or more errors occured in I2C-message-block 1 !\n");
2362 /* END OF I2C MESSAGES */
2363 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2365 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
2367 usb_microdia_control_write(dev
, 0x1007, buf
, 8);
2369 usb_microdia_control_write(dev
, 0x1006, buf
, 8);
2373 /* *** TEMPORARY SWITCH TO SLAVE ADDRESS 0x50, I2C READ ATTEMPT: */
2374 /* - WE CURRENTLY KNOW NO 6270 CAM THAT IS SUCCESSFULLY READ HERE */
2375 /* - IF READ FAILS, THIS IS NEVER DONE AGAIN (IN NEXT CYCLE OR FURTHER STARTS) */
2376 usb_microdia_control_read(dev
, 0x10c1, buf
, 1); /* returns 0x5c */
2378 usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
2379 retI2C
= sn9c20x_read_i2c_data(dev
, 0x50, 1, 0x00, SN9C20X_I2C_2WIRE
, buf
);
2381 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");
2383 usb_microdia_control_write(dev
, 0x10c1, buf
, 1);
2386 buf
[0] = 0x47; /* ALEX: 0x44 */
2387 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2045 */
2388 buf
[0] = 0x47; /* ALEX: 0x04 */
2389 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2046 */
2391 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 2047 */
2393 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 2048 */
2394 buf
[0] = 0x84; /* ALEX: 0xc0 */
2395 usb_microdia_control_write(dev
, 0x1001, buf
, 1); /* URB 2049 */
2398 usb_microdia_control_write(dev, 0x1001, buf, 1);
2401 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2402 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2405 /* Writes to sensor registers 0x02: Column Start */
2406 /* 0x03: Window Height */
2407 buf
[0] = 0x00; buf
[1] = 0x16; /* coulmn 22 */
2408 buf
[2] = 0x01; buf
[3] = 0xe1; /* 481 */
2409 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x02, dev
->sensor_flags
, buf
); /* URBs 2050-2052 */
2410 /* Writes to sensor registers 0x04: Window Width */
2411 /* 0x05: Horizontal Blanking */
2412 buf
[0] = 0x02; buf
[1] = 0x81; /* 641 */
2413 buf
[2] = 0x00; buf
[3] = 0x04; /* 4 columns (pixel clocks) // AT FIRST START + FIRST CYCLE: 0x00 0x00 */
2414 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x04, dev
->sensor_flags
, buf
); /* URBs 2053-2055 */
2415 /* Writes to sensor registers 0x06: Vertical Blanking */
2416 /* 0x07: Output Control */
2417 buf
[0] = 0x00; buf
[1] = 0x00; /* 0 rows */
2418 buf
[2] = 0x30; buf
[3] = 0x02; /* normal operation + chip enable + RESERVED options */
2419 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x06, dev
->sensor_flags
, buf
); /* URBs 2056-2058 */
2420 /* Write to sensor register 0x0e: UNDOCUMENTED */
2421 buf
[0] = 0x00; buf
[1] = 0x08;
2422 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0e, dev
->sensor_flags
, buf
); /* URBs 2059-2061 */
2424 UDIA_INFO("1 or more errors occured in I2C-message-block 2 !\n");
2427 /* END OF I2C MESSAGES */
2428 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2431 buf
[0] = 0x02; buf
[1] = 0x00; buf
[2] = 0x02; buf
[3] = 0x00;
2432 buf
[4] = 0x28; buf
[5] = 0x3c;
2433 usb_microdia_control_write(dev
, 0x1180, buf
, 6); /* URB 2062 */
2434 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
2435 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); /* URB 2065 */
2436 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
2437 usb_microdia_control_write(dev
, 0x11ab, buf
, 4); /* URB 2066 */
2438 buf
[0] = 0x78; /* ALEX: 0x7c */
2439 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 2067 */
2440 buf
[0] = 0x18; /* ALEX: 0x1c */
2441 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2068 */
2442 buf
[0] = 0x18; /* ALEX: 0x1c */
2443 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2069 */
2445 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2070 */
2447 usb_microdia_control_write(dev
, 0x118a, buf
, 1); /* URB 2071 */
2449 usb_microdia_control_write(dev
, 0x0395, buf
, 1); /* URB 2072 */
2452 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2073 */
2453 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2074 // 0x38 */
2456 else if (buf
[0] == 0xb8)
2458 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2075 */
2459 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2076 // 0xb9 */
2462 else if (buf
[0] == 0xb9)
2464 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2077 */
2465 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2078 */
2468 else if (buf
[0] == 0xba)
2470 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2079 */
2471 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2080 // 0x3b */
2474 else if (buf
[0] == 0xbb)
2476 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2081 */
2477 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2082 // 0x3c */
2480 else if (buf
[0] == 0xbc)
2482 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2083 */
2483 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2084 // 0x3d */
2484 last_11b8
[0] = buf
[0];
2485 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2488 else if (buf
[0] == 0xbd)
2490 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2085 */
2491 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2086 */
2494 else if (buf
[0] == 0xbe)
2496 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2087 */
2497 usb_microdia_control_read(dev
, 0x11b8, last_11b8
, 1); /* URB 2088 */
2499 buf
[0] = last_11b8
[0] & 0xf0; /* 0xf0 or 0x70 */
2500 buf
[0] = buf
[0] | 0x0d; /* 0x0c => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 8 READS/WRITES */
2501 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2089 */
2504 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2507 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2508 /* Write to sensor register 0x06: Vertical Blanking */
2509 buf
[0] = 0x00; buf
[1] = 0x2d; /* 45 rows */
2510 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
); /* URBs 2090-2092 */
2511 /* Write to sensor register 0x05: Horizontal Blanking */
2512 buf
[0] = 0x00; buf
[1] = 0x04; /* 4 columns (pixel clocks) */
2513 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
); /* URBs 2093-2095 */
2514 /* Write to sensor register 0x20: Read Mode */
2515 buf
[0] = 0x00; buf
[1] = 0x00; /* normal readout */
2516 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
); /* URBs 2096-2098 */
2517 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
2518 /* Write to sensor register 0x0a: Pixel Clock Speed */
2519 buf
[0] = 0x00; buf
[1] = 0x00; /* default */
2520 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0a, dev
->sensor_flags
, buf
);
2521 /* Write to sensor register 0x06: Vertical Blanking */
2522 buf
[0] = 0x00; buf
[1] = 0x29; /* 41 rows */
2523 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
);
2524 /* Write to sensor register 0x05: Horizontal Blanking */
2525 buf
[0] = 0x00; buf
[1] = 0x09; /* 9 columns (pixel clocks) */
2526 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
);
2527 /* Write to sensor register 0x20: Read Mode */
2528 buf
[0] = 0x11; buf
[1] = 0x01; /* output all frames (including bad ones) + UNKNOWN */
2529 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
);
2532 UDIA_INFO("1 or more errors occured in I2C-message-block 3 !\n");
2535 /* END OF I2C MESSAGES */
2536 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2540 usb_microdia_control_write(dev
, 0x1180, buf
, 1); /* URB 2099 */
2542 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2545 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2546 /* Write to sensor register 0x20: Read Mode */
2547 buf
[0] = 0x00; buf
[1] = 0x00; /* normal readout */
2548 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
); /* URBs 2100-2102 */
2549 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
2550 /* Write to sensor register 0x20: Read Mode */
2551 buf
[0] = 0x11; buf
[1] = 0x01; /* output all frames (including bad ones) + UNKNOWN */
2552 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x20, dev
->sensor_flags
, buf
);
2555 UDIA_INFO("1 or more errors occured in I2C-message-block 4 !\n");
2558 /* END OF I2C MESSAGES */
2559 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2563 usb_microdia_control_write(dev
, 0x1182, buf
, 1); /* URB 2103 */
2566 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2569 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2570 /* Write to sensor register 0x09: Shutter Width */
2571 buf
[0] = 0x00; buf
[1] = 0x64; /* integration of 100 rows */
2572 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x09, dev
->sensor_flags
, buf
); /* URBs 2104-2106 */
2573 /* Write to sensor register 0x2b: Green 1 Gain */
2574 /* 0x2c: Blue Gain */
2575 buf
[0] = 0x00; buf
[1] = 0xa0; /* 32*0.03125*2 = 2 */
2576 buf
[2] = 0x00; buf
[3] = 0xa0; /* 32*0.03125*2 = 2 */
2577 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2b, dev
->sensor_flags
, buf
); /* URBs 2107-2109 */
2578 /* Write to sensor register 0x2d: Red Gain */
2579 /* 0x2e: Green 2 Gain */
2580 buf
[0] = 0x00; buf
[1] = 0xa0; /* 32*0.03125*2 = 2 */
2581 buf
[2] = 0x00; buf
[3] = 0xa0; /* 32*0.03125*2 = 2 */
2582 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2d, dev
->sensor_flags
, buf
); /* URBs 2110-2112 */
2583 /* "Dummy" write to sensor Register 0x33: RESERVED */
2584 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x33, dev
->sensor_flags
, NULL
); /* URBs 2113-2114 */
2585 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
2586 /* Write to sensor register 0x09: Shutter Width */
2587 buf
[0] = 0x00; buf
[1] = 0x64; /* integration of 100 rows */
2588 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x09, dev
->sensor_flags
, buf
);
2589 /* Write to sensor register 0x07: Output Control */
2590 buf
[0] = 0x00; buf
[1] = 0x03; /* dont update changes until bit0=0, chip enable, normal operation */
2591 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
2592 /* Write to sensor register 0x2b: Green 1 Gain */
2593 /* 0x2c: Blue Gain */
2594 buf
[0] = 0x00; buf
[1] = 0x33; /* 51*0.03125*1 = 1.59375 */
2595 buf
[2] = 0x00; buf
[3] = 0xa0; /* 32*0.03125*2 = 2 */
2596 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2b, dev
->sensor_flags
, buf
);
2597 /* Write to sensor register 0x2d: Red Gain */
2598 /* 0x2e: Green 2 Gain */
2599 buf
[0] = 0x00; buf
[1] = 0xa0; /* 32*0.03125*2 = 2 */
2600 buf
[2] = 0x00; buf
[3] = 0x33; /* 51*0.03125*1 = 1.59375 */
2601 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x2d, dev
->sensor_flags
, buf
);
2602 /* "Dummy" write to sensor Register 0x33: RESERVED */
2603 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 0, 0x33, dev
->sensor_flags
, NULL
);
2604 /* Write to sensor register 0x07: Output Control */
2605 buf
[0] = 0x00; buf
[1] = 0x02; /* chip enable, normal operation */
2606 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
2609 UDIA_INFO("1 or more errors occured in I2C-message-block 5 !\n");
2612 /* END OF I2C MESSAGES */
2613 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2616 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2119 */
2618 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
2620 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
2622 usb_microdia_control_write(dev
, 0x118b, buf
, 1); /* URB 2124 */
2625 usb_microdia_control_write(dev
, 0x10f7, buf
, 1); /* URB 2135 */
2627 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
2629 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
2631 usb_microdia_control_write(dev
, 0x10f8, buf
, 1); /* URB 2138 */
2633 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
2635 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
2637 usb_microdia_control_write(dev
, 0x10fa, buf
, 1); /* URB 2139 */
2640 usb_microdia_control_write(dev
, 0x10f9, buf
, 1); /* URB 2140 */
2642 usb_microdia_control_write(dev
, 0x10f9, buf
, 1); /* URB 2141 */
2644 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2142 */
2645 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
2646 usb_microdia_control_write(dev
, 0x11bc, buf
, 4); /* URB 2143 */
2647 for (k
= 0; k
< 48; k
++)
2649 usb_microdia_control_write(dev
, 0x11c0, buf
, 48); /* URB 2144 */
2651 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05;
2652 buf
[4] = 0x04; buf
[5] = 0x3f;
2653 usb_microdia_control_write(dev
, 0x11a5, buf
, 6); /* URB 2149 */
2655 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2656 buf
[0] = 0x14; buf
[1] = 0xec; buf
[2] = 0x0a; buf
[3] = 0xf6;
2657 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
2658 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
2660 usb_microdia_control_write(dev
, 0x11af, buf
, 4); /* URB 2150 */
2662 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x2d; buf
[3] = 0xdd;
2663 usb_microdia_control_write(dev
, 0x11b3, buf
, 4); /* URB 2151 */
2664 buf
[0] = 0x47; /* ALEX: 0x04 */
2665 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2152 */
2667 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2153 */
2668 buf
[0] = 0x67; /* ALEX: 0x24 */
2669 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2154 */
2670 buf
[0] = 0x0d; buf
[1] = 0x08; buf
[2] = 0x08; buf
[3] = 0x0d;
2671 buf
[4] = 0x08; buf
[5] = 0x08; buf
[6] = 0x0d; buf
[7] = 0x0d;
2672 buf
[8] = 0x0d; buf
[9] = 0x0d; buf
[10] = 0x11; buf
[11] = 0x0d;
2673 buf
[12] = 0x0d; buf
[13] = 0x11; buf
[14] = 0x15; buf
[15] = 0x21;
2674 buf
[16] = 0x15; buf
[17] = 0x15; buf
[18] = 0x11; buf
[19] = 0x11;
2675 buf
[20] = 0x15; buf
[21] = 0x2a; buf
[22] = 0x1d; buf
[23] = 0x1d;
2676 buf
[24] = 0x19; buf
[25] = 0x21; buf
[26] = 0x32; buf
[27] = 0x2a;
2677 buf
[28] = 0x32; buf
[29] = 0x32; buf
[30] = 0x2e; buf
[31] = 0x2a;
2678 buf
[32] = 0x2e; buf
[33] = 0x2e; buf
[34] = 0x36; buf
[35] = 0x3a;
2679 buf
[36] = 0x4b; buf
[37] = 0x43; buf
[38] = 0x36; buf
[39] = 0x3a;
2680 buf
[40] = 0x47; buf
[41] = 0x3a; buf
[42] = 0x2e; buf
[43] = 0x2e;
2681 buf
[44] = 0x43; buf
[45] = 0x5c; buf
[46] = 0x43; buf
[47] = 0x47;
2682 buf
[48] = 0x4f; buf
[49] = 0x53; buf
[50] = 0x58; buf
[51] = 0x58;
2683 buf
[52] = 0x58; buf
[53] = 0x32; buf
[54] = 0x3f; buf
[55] = 0x60;
2684 buf
[56] = 0x64; buf
[57] = 0x5c; buf
[58] = 0x53; buf
[59] = 0x64;
2685 buf
[60] = 0x4b; buf
[61] = 0x53; buf
[62] = 0x58; buf
[63] = 0x53;
2686 usb_microdia_control_write(dev
, 0x1100, buf
, 64); /* URB 2155 */
2687 buf
[0] = 0x0d; buf
[1] = 0x11; buf
[2] = 0x11; buf
[3] = 0x15;
2688 buf
[4] = 0x11; buf
[5] = 0x15; buf
[6] = 0x26; buf
[7] = 0x15;
2689 buf
[8] = 0x15; buf
[9] = 0x26; buf
[10] = 0x53; buf
[11] = 0x36;
2690 buf
[12] = 0x2e; buf
[13] = 0x36; buf
[14] = 0x53; buf
[15] = 0x53;
2691 buf
[16] = 0x53; buf
[17] = 0x53; buf
[18] = 0x53; buf
[19] = 0x53;
2692 buf
[20] = 0x53; buf
[21] = 0x53; buf
[22] = 0x53; buf
[23] = 0x53;
2693 buf
[24] = 0x53; buf
[25] = 0x53; buf
[26] = 0x53; buf
[27] = 0x53;
2694 buf
[28] = 0x53; buf
[29] = 0x53; buf
[30] = 0x53; buf
[31] = 0x53;
2695 buf
[32] = 0x53; buf
[33] = 0x53; buf
[34] = 0x53; buf
[35] = 0x53;
2696 buf
[36] = 0x53; buf
[37] = 0x53; buf
[38] = 0x53; buf
[39] = 0x53;
2697 buf
[40] = 0x53; buf
[41] = 0x53; buf
[42] = 0x53; buf
[43] = 0x53;
2698 buf
[44] = 0x53; buf
[45] = 0x53; buf
[46] = 0x53; buf
[47] = 0x53;
2699 buf
[48] = 0x53; buf
[49] = 0x53; buf
[50] = 0x53; buf
[51] = 0x53;
2700 buf
[52] = 0x53; buf
[53] = 0x53; buf
[54] = 0x53; buf
[55] = 0x53;
2701 buf
[56] = 0x53; buf
[57] = 0x53; buf
[58] = 0x53; buf
[59] = 0x53;
2702 buf
[60] = 0x53; buf
[61] = 0x53; buf
[62] = 0x53; buf
[63] = 0x53;
2703 usb_microdia_control_write(dev
, 0x1140, buf
, 64); /* URB 2156 */
2704 buf
[0] = 0x47; /* ALEX: 0x04 */
2705 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2157 */
2707 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2158 */
2708 buf
[0] = 0x4b; /* ALEX: 0x08 */
2709 usb_microdia_control_write(dev
, 0x10e0, buf
, 1); /* URB 2159 */
2711 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2712 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2715 /* Writes to sensor registers 0x02: Column Start */
2716 /* 0x03: Window Hight */
2717 buf
[0] = 0x00; buf
[1] = 0x16; /* coulmn 22 */
2718 buf
[2] = 0x01; buf
[3] = 0xe1; /* 481 */
2719 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x02, dev
->sensor_flags
, buf
); /* URBs 2160-2162 */
2720 /* Writes to sensor registers 0x04: Window Width */
2721 /* 0x05: Horizontal Blanking */
2722 buf
[0] = 0x02; buf
[1] = 0x81; /* 641 */
2723 buf
[2] = 0x00; buf
[3] = 0x04; /* 4 columns (pixel clocks) */
2724 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x04, dev
->sensor_flags
, buf
); /* URBs 2163-2165 */
2725 /* Writes to sensor registers 0x06: Vertical Blanking */
2726 /* 0x07: Output Control */
2727 buf
[0] = 0x00; buf
[1] = 0x2d; /* 45 rows */
2728 buf
[2] = 0x30; buf
[3] = 0x02; /* RESERVED options */
2729 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 4, 0x06, dev
->sensor_flags
, buf
); /* URBs 2166-2167 */
2730 /* Writes to sensor register 0x0e: UNDOCUMENTED */
2731 buf
[0] = 0x00; buf
[1] = 0x08;
2732 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x0e, dev
->sensor_flags
, buf
); /* URBs 2168-2170 */
2734 UDIA_INFO("1 or more errors occured in I2C-message-block 6 !\n");
2737 /* END OF I2C MESSAGES */
2738 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2739 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
2741 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
2743 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
2747 buf
[0] = 0x02; buf
[1] = 0x00; buf
[2] = 0x02; buf
[3] = 0x00;
2748 buf
[4] = 0x28; buf
[5] = 0x3c;
2749 usb_microdia_control_write(dev
, 0x1180, buf
, 6); /* URB 2171 */
2750 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x6a; buf
[3] = 0x50;
2751 usb_microdia_control_write(dev
, 0x11a1, buf
, 4); /* URB 2174 */
2752 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x50; buf
[3] = 0x3c;
2753 usb_microdia_control_write(dev
, 0x11ab, buf
, 4); /* URB 2175 */
2755 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2176 */
2757 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2177 */
2759 usb_microdia_control_write(dev
, 0x11b9, buf
, 1); /* URB 2178 */
2761 usb_microdia_control_write(dev
, 0x11ba, buf
, 1); /* URB 2179 */
2763 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2180 */
2764 buf
[0] = 0x78; /* ALEX: 0x7c */
2765 usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 2181 */
2766 buf
[0] = 0x18; /* ALEX: 0x1c */
2767 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2182 */
2768 buf
[0] = 0x18; /* ALEX: 0x1c */
2769 usb_microdia_control_write(dev
, 0x1002, buf
, 1); /* URB 2183 */
2770 buf
[0] = 0x7d; /* ALEX: 0xfc */
2771 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2184 */
2773 usb_microdia_control_write(dev
, 0x118a, buf
, 1); /* URB 2185 */
2775 usb_microdia_control_write(dev
, 0x0395, buf
, 1); /* URB 2186 */
2777 if ((last_11b8
[0] == 0x3d) || (last_11b8
[0] == 0x3f))
2779 else if ((last_11b8
[0] == 0xbd) || (last_11b8
[0] == 0xbf))
2781 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2187 */
2782 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2188 // 0x38 */
2785 else if (buf
[0] == 0xb8)
2787 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2189 */
2788 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2190 // 0xb9 */
2791 else if (buf
[0] == 0xb9)
2793 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2191 */
2794 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2192 // 0xba */
2797 else if (buf
[0] == 0xba)
2799 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2193 */
2800 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2194 // 0x3b */
2803 else if (buf
[0] == 0xbb)
2805 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2195 */
2806 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2196 // 0x3c */
2809 else if (buf
[0] == 0xbc)
2811 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2197 */
2812 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2198 // 0x3d */
2813 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2816 else if (buf
[0] == 0xbd)
2818 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2199 */
2819 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2200 */
2822 else if (buf
[0] == 0xbe)
2824 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2201 */
2825 usb_microdia_control_read(dev
, 0x11b8, buf
, 1); /* URB 2202 */
2827 buf
[0] = buf
[0] & 0xf0; /* 0xf0 or 0x70 */
2828 buf
[0] = buf
[0] | 0x0d; /* 0x0c => THIS VALUE SEEMS TO DEPEND ON WHAT WAS READ/WRITTEN IN THE LAST 8 READS/WRITES */
2829 usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 2089 */
2831 /* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2834 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2835 /* Write to sensor register 0x06: Vertical Blanking */
2836 buf
[0] = 0x00; buf
[1] = 0x2d; /* 45 rows */
2837 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
); /* URBs 2204-2206 */
2838 /* Write to sensor register 0x05: Horizontal Blanking */
2839 buf
[0] = 0x00; buf
[1] = 0x04; /* 4 columns (pixel clocks) */
2840 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
); /* URBs 2207-2209 */
2841 /* Read of sensor register 0x36: Chip Version (mirror of reg0xff) */
2842 retI2C
+= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x36, dev
->sensor_flags
, buf
); /* URBs 2211-2215 // 0x82 0x3a */
2843 } else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
2844 /* Write to sensor register 0x0a: Pixel Clock Speed */
2845 buf
[0] = 0x00; buf
[1] = 0x00; /* default */
2846 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
);
2847 /* Write to sensor register 0x06: Vertical Blanking */
2848 buf
[0] = 0x00; buf
[1] = 0x29; /* 41 rows */
2849 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x06, dev
->sensor_flags
, buf
);
2850 /* Write to sensor register 0x05: Horizontal Blanking */
2851 buf
[0] = 0x00; buf
[1] = 0x09; /* 9 columns (pixel clocks) */
2852 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x05, dev
->sensor_flags
, buf
);
2853 /* Read of sensor register 0x00: Chip Version (=reg0xff) */
2854 retI2C
+= sn9c20x_read_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x00, dev
->sensor_flags
, buf
); /* 0x82 0x43 */
2857 UDIA_INFO("1 or more errors occured in I2C-message-block 7 !\n");
2860 /* END OF I2C MESSAGES */
2861 /* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
2865 usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 2216 */
2868 /*** NOW DRIVER DOES STOP-SEQUENCE
2869 - WITHOUT WRITES TO 0x1007 AND 0x1006 (URBs 3544-3550) => MT9V111
2870 - WRITING 0x40 INSTEAD OF 0x60 TO 0x1007 AND 0x1006 => MT9V011
2872 /*** 2nd, 3rd, ... CYCLE: ALL MESSAGES (URBs 1953 - URBs 2216) ARE REPEATED ***/
2873 /*** ----- WE DON'T DO THIS, IT SEEMS TO BE UNNECESSARY ----- ***/
2875 /* Setup IFP registers for AE and AWB (new, not in the logs): */
2876 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
2877 mt9v111_setup_autoexposure(dev
);
2878 mt9v111_setup_autowhitebalance(dev
);
2879 mt9v111_set_autocorrections(dev
, 1);
2882 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
2884 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
2886 usb_microdia_control_write(dev
, 0x1007, buf
, 1); /* URB 2489 */
2887 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
)
2889 else if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
)
2891 usb_microdia_control_write(dev
, 0x1006, buf
, 1); /* URB 2490 */
2892 /* => These two writes seem to cause the cam to start sending isochronus USB messages */
2898 * @brief Start stream from 627b devices
2902 * @returns 0 or negative error code
2905 int microdia_627b_start_stream(struct usb_microdia
*dev
)
2908 /* Initialize the Bridge Controller */
2909 ret
= sn9c20x_initialize(dev
);
2910 /* Initialize the I2C interface in the Bridge */
2911 ret
= sn9c20x_i2c_initialize(dev
);
2912 /* Finally, Initialize the Sensor array */
2913 if (dev
->sensor_init
)
2914 dev
->sensor_init(dev
);
2919 * @brief From UsbSnoop-plugin-parsed.log
2923 * @returns 0 (OK) or <0 (Error)
2925 * @author Vincent, Kuzja
2927 int microdia_6288_start_stream(struct usb_microdia
*dev
)
2937 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
2943 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
2949 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
2955 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
2961 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
2967 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
2972 buf
[0] = 0x40; buf
[1] = 0x30; buf
[2] = 0x20;
2973 buf
[3] = 0x10; buf
[4] = 0x08;
2974 ret
= usb_microdia_control_write(dev
, reg
, buf
, 5);
2979 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;
2980 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9);
2985 buf
[0] = 0x44; buf
[1] = 0x18; buf
[2] = 0x00; buf
[3] = 0x30;
2986 buf
[4] = 0x00; buf
[5] = 0x09; buf
[6] = 0x00; buf
[7] = 0xed;
2987 buf
[8] = 0x0f; buf
[9] = 0xda; buf
[10] = 0x0f; buf
[11] = 0x3a;
2988 buf
[12] = 0x00; buf
[13] = 0x3a; buf
[14] = 0x00; buf
[15] = 0xd0;
2989 buf
[16] = 0x0f; buf
[17] = 0xf7; buf
[18] = 0x0f; buf
[19] = 0x00;
2990 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x60; buf
[23] = 0x0a;
2991 ret
= usb_microdia_control_write(dev
, reg
, buf
, 24);
2996 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00;
2997 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
3003 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3009 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3014 buf
[0] = 0x00; buf
[1] = 0x20; buf
[2] = 0x20; buf
[3] = 0x20;
3015 buf
[4] = 0x20; buf
[5] = 0x00; buf
[6] = 0x24; buf
[7] = 0x3b;
3016 buf
[8] = 0x4f; buf
[9] = 0x61; buf
[10] = 0x71; buf
[11] = 0x80;
3017 buf
[12] = 0x8f; buf
[13] = 0x9d; buf
[14] = 0xab; buf
[15] = 0xb8;
3018 buf
[16] = 0xc4; buf
[17] = 0xd1; buf
[18] = 0xdd; buf
[19] = 0xe9;
3019 buf
[20] = 0xf4; buf
[21] = 0xff;
3020 ret
= usb_microdia_control_write(dev
, reg
, buf
, 22);
3025 buf
[0] = 0x00; buf
[1] = 0x00;
3026 ret
= usb_microdia_control_write(dev
, reg
, buf
, 2);
3031 buf
[0] = 0x60; buf
[1] = 0x20; buf
[2] = 0x00; buf
[3] = 0x08;
3032 buf
[4] = 0x00; buf
[5] = 0x40; buf
[6] = 0x01; buf
[7] = 0xf0;
3034 ret
= usb_microdia_control_write(dev
, reg
, buf
, 9);
3040 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3046 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
3051 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x12; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3052 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3057 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3062 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3067 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x12; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3068 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3073 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3078 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3083 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x0d; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3084 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3089 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3094 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3099 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x0e; buf
[3] = 0x61; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3100 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3105 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3110 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3115 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x11; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3116 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3121 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3126 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3131 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x13; buf
[3] = 0xb8; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3132 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3137 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3142 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3147 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x14; buf
[3] = 0x3e; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3148 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3153 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3158 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3163 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x16; buf
[3] = 0x24; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3164 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3169 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3174 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3179 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3180 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3185 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3190 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3195 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3196 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3201 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3206 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3211 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3212 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3217 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3222 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3227 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x27; buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3228 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3233 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3238 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3243 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x28; buf
[3] = 0x08; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
3244 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
3249 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3254 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
3259 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x29; buf
[3] = 0x15; 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] = 0x2c; buf
[3] = 0x08; 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] = 0x32; buf
[3] = 0x80; 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] = 0x34; buf
[3] = 0x3d; 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] = 0x35; buf
[3] = 0x00; 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] = 0x36; buf
[3] = 0xf8; 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] = 0x38; buf
[3] = 0x12; 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] = 0x39; buf
[3] = 0x57; 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] = 0x3a; 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] = 0x3b; buf
[3] = 0xcc; 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] = 0x3c; buf
[3] = 0x0c; 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] = 0x3d; buf
[3] = 0x19; 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] = 0x3e; buf
[3] = 0x0c; 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] = 0x3f; buf
[3] = 0x01; 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] = 0x41; buf
[3] = 0x40; 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] = 0x42; 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] = 0x45; buf
[3] = 0x46; 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] = 0x46; buf
[3] = 0x62; 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] = 0x47; buf
[3] = 0x2a; 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] = 0x48; buf
[3] = 0x3c; 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] = 0x4a; buf
[3] = 0xf0; 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] = 0x4b; buf
[3] = 0xdc; 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] = 0x4c; buf
[3] = 0xdc; 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] = 0x4d; buf
[3] = 0xdc; 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] = 0x4e; buf
[3] = 0xdc; 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] = 0x69; buf
[3] = 0x02; 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] = 0x6c; buf
[3] = 0x04; 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] = 0x6f; buf
[3] = 0x9e; 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] = 0x70; buf
[3] = 0x05; 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] = 0x71; buf
[3] = 0x78; 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] = 0x77; buf
[3] = 0x02; 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] = 0x8a; buf
[3] = 0x23; 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] = 0x8c; buf
[3] = 0x0d; 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] = 0x90; buf
[3] = 0x7e; 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] = 0x91; buf
[3] = 0x7c; 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] = 0x9f; buf
[3] = 0x6e; 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] = 0xa0; buf
[3] = 0x6e; 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] = 0xa4; buf
[3] = 0x50; 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] = 0xa5; buf
[3] = 0x68; 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] = 0xa6; buf
[3] = 0x60; 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] = 0xa8; buf
[3] = 0xc1; 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] = 0xa9; buf
[3] = 0xfa; 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] = 0xaa; buf
[3] = 0x92; 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] = 0xab; buf
[3] = 0x04; 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] = 0xac; buf
[3] = 0x80; 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] = 0xad; buf
[3] = 0x80; 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] = 0xae; buf
[3] = 0x80; 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] = 0xaf; buf
[3] = 0x80; 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] = 0xb2; buf
[3] = 0xf2; 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] = 0xb3; buf
[3] = 0x20; 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] = 0xb4; buf
[3] = 0x20; 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] = 0xb5; buf
[3] = 0x00; 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] = 0xb6; buf
[3] = 0xaf; 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] = 0xbb; buf
[3] = 0xae; 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] = 0xbc; buf
[3] = 0x44; 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] = 0xbd; buf
[3] = 0x44; 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] = 0xbe; buf
[3] = 0x3b; 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] = 0xbf; buf
[3] = 0x3a; 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] = 0xc0; buf
[3] = 0xe2; 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] = 0xc1; buf
[3] = 0xc8; 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] = 0xc2; buf
[3] = 0x01; 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] = 0xc4; buf
[3] = 0x00; 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] = 0xc6; buf
[3] = 0x85; 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] = 0xc7; buf
[3] = 0x81; 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] = 0xc9; buf
[3] = 0xe0; 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] = 0xca; buf
[3] = 0xe8; 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] = 0xcc; buf
[3] = 0xd8; 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] = 0xcd; buf
[3] = 0x93; 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 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4353 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4358 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4359 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4364 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4369 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4370 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4375 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4380 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4381 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4386 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4391 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4392 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4397 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4402 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4403 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4408 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4413 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4414 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4419 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4424 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4425 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4430 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4435 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4436 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4441 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4446 buf
[0] = 0x90; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4447 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4452 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4453 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4458 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4463 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4464 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4469 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4474 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4475 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4480 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4485 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4486 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4491 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4496 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4497 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4502 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4507 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; 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 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4519 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4524 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4529 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4530 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4535 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4540 buf
[0] = 0x92; buf
[1] = 0x50; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4541 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4546 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
4552 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4558 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4564 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4570 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4576 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4582 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4588 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4594 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4600 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4606 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4611 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x03; buf
[3] = 0x14; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4612 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4617 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4622 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4627 buf
[0] = 0xd0; buf
[1] = 0x30; buf
[2] = 0x17; buf
[3] = 0x1b; buf
[4] = 0xbc; buf
[5] = 0x01; buf
[6] = 0x7a; buf
[7] = 0x10;
4628 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4633 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4638 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4643 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1b; 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] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x32; buf
[3] = 0x82; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4655 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4660 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4665 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4670 buf
[0] = 0x05; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00; buf
[4] = 0x50; buf
[5] = 0x78;
4671 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
4676 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0xa0;
4677 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
4682 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x78;
4683 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
4689 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4695 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4701 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4707 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4713 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4719 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4725 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4730 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4736 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4741 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4747 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4752 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4758 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4763 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4769 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4774 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4780 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4785 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4791 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4796 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x11; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4797 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4802 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4807 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4812 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4813 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4818 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4823 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4828 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2b; buf
[3] = 0x06; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4829 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4834 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4839 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4844 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x92; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4845 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4850 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4855 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4860 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x93; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4861 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4866 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4871 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4876 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4877 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4882 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4887 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4892 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x1e; buf
[3] = 0x04; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4893 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4898 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4903 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4909 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
4914 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x10; buf
[3] = 0x7d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4915 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4920 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4925 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4930 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x04; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4931 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4936 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4941 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4946 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa1; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4947 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4952 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4957 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4962 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2d; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4963 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4968 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4973 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4978 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4979 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
4984 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4989 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
4994 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
4995 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5000 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5005 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5010 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5011 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5016 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5021 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5026 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5027 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5032 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5037 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5043 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5049 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5055 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5061 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5067 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5073 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5079 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5085 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5090 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
5091 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
5096 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0x00; buf
[3] = 0x00;
5097 buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x00;
5098 buf
[8] = 0x00; buf
[9] = 0x00; buf
[10] = 0x00; buf
[11] = 0x00;
5099 buf
[12] = 0x00; buf
[13] = 0x00; buf
[14] = 0x00; buf
[15] = 0x00;
5100 buf
[16] = 0x00; buf
[17] = 0x00; buf
[18] = 0x00; buf
[19] = 0x00;
5101 buf
[20] = 0x00; buf
[21] = 0x00; buf
[22] = 0x00; buf
[23] = 0x00;
5102 buf
[24] = 0x00; buf
[25] = 0x00; buf
[26] = 0x00; buf
[27] = 0x00;
5103 buf
[28] = 0x00; buf
[29] = 0x00; buf
[30] = 0x00; buf
[31] = 0x00;
5104 buf
[32] = 0x00; buf
[33] = 0x00; buf
[34] = 0x00; buf
[35] = 0x00;
5105 buf
[36] = 0x00; buf
[37] = 0x00; buf
[38] = 0x00; buf
[39] = 0x00;
5106 buf
[40] = 0x00; buf
[41] = 0x00; buf
[42] = 0x00; buf
[43] = 0x00;
5107 buf
[44] = 0x00; buf
[45] = 0x00; buf
[46] = 0x00; buf
[47] = 0x00;
5108 ret
= usb_microdia_control_write(dev
, reg
, buf
, 48);
5113 buf
[0] = 0x2d; buf
[1] = 0x2d; buf
[2] = 0x3a; buf
[3] = 0x05;
5114 buf
[4] = 0x04; buf
[5] = 0x3f;
5115 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
5120 buf
[0] = 0x28; buf
[1] = 0xd8; buf
[2] = 0x14; buf
[3] = 0xec;
5121 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
5126 buf
[0] = 0x32; buf
[1] = 0xdd; buf
[2] = 0x32; buf
[3] = 0xdd;
5127 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
5133 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5139 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5145 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5150 buf
[0] = 0x0d; buf
[1] = 0x08; buf
[2] = 0x08; buf
[3] = 0x0d;
5151 buf
[4] = 0x08; buf
[5] = 0x08; buf
[6] = 0x0d; buf
[7] = 0x0d;
5152 buf
[8] = 0x0d; buf
[9] = 0x0d; buf
[10] = 0x11; buf
[11] = 0x0d;
5153 buf
[12] = 0x0d; buf
[13] = 0x11; buf
[14] = 0x15; buf
[15] = 0x21;
5154 buf
[16] = 0x15; buf
[17] = 0x15; buf
[18] = 0x11; buf
[19] = 0x11;
5155 buf
[20] = 0x15; buf
[21] = 0x2a; buf
[22] = 0x1d; buf
[23] = 0x1d;
5156 buf
[24] = 0x19; buf
[25] = 0x21; buf
[26] = 0x32; buf
[27] = 0x2a;
5157 buf
[28] = 0x32; buf
[29] = 0x32; buf
[30] = 0x2e; buf
[31] = 0x2a;
5158 buf
[32] = 0x2e; buf
[33] = 0x2e; buf
[34] = 0x36; buf
[35] = 0x3a;
5159 buf
[36] = 0x4b; buf
[37] = 0x43; buf
[38] = 0x36; buf
[39] = 0x3a;
5160 buf
[40] = 0x47; buf
[41] = 0x3a; buf
[42] = 0x2e; buf
[43] = 0x2e;
5161 buf
[44] = 0x43; buf
[45] = 0x5c; buf
[46] = 0x43; buf
[47] = 0x47;
5162 buf
[48] = 0x4f; buf
[49] = 0x53; buf
[50] = 0x58; buf
[51] = 0x58;
5163 buf
[52] = 0x58; buf
[53] = 0x32; buf
[54] = 0x3f; buf
[55] = 0x60;
5164 buf
[56] = 0x64; buf
[57] = 0x5c; buf
[58] = 0x53; buf
[59] = 0x64;
5165 buf
[60] = 0x4b; buf
[61] = 0x53; buf
[62] = 0x58; buf
[63] = 0x53;
5166 ret
= usb_microdia_control_write(dev
, reg
, buf
, 64);
5171 buf
[0] = 0x0d; buf
[1] = 0x11; buf
[2] = 0x11; buf
[3] = 0x15;
5172 buf
[4] = 0x11; buf
[5] = 0x15; buf
[6] = 0x26; buf
[7] = 0x15;
5173 buf
[8] = 0x15; buf
[9] = 0x26; buf
[10] = 0x53; buf
[11] = 0x36;
5174 buf
[12] = 0x2e; buf
[13] = 0x36; buf
[14] = 0x53; buf
[15] = 0x53;
5175 buf
[16] = 0x53; buf
[17] = 0x53; buf
[18] = 0x53; buf
[19] = 0x53;
5176 buf
[20] = 0x53; buf
[21] = 0x53; buf
[22] = 0x53; buf
[23] = 0x53;
5177 buf
[24] = 0x53; buf
[25] = 0x53; buf
[26] = 0x53; buf
[27] = 0x53;
5178 buf
[28] = 0x53; buf
[29] = 0x53; buf
[30] = 0x53; buf
[31] = 0x53;
5179 buf
[32] = 0x53; buf
[33] = 0x53; buf
[34] = 0x53; buf
[35] = 0x53;
5180 buf
[36] = 0x53; buf
[37] = 0x53; buf
[38] = 0x53; buf
[39] = 0x53;
5181 buf
[40] = 0x53; buf
[41] = 0x53; buf
[42] = 0x53; buf
[43] = 0x53;
5182 buf
[44] = 0x53; buf
[45] = 0x53; buf
[46] = 0x53; buf
[47] = 0x53;
5183 buf
[48] = 0x53; buf
[49] = 0x53; buf
[50] = 0x53; buf
[51] = 0x53;
5184 buf
[52] = 0x53; buf
[53] = 0x53; buf
[54] = 0x53; buf
[55] = 0x53;
5185 buf
[56] = 0x53; buf
[57] = 0x53; buf
[58] = 0x53; buf
[59] = 0x53;
5186 buf
[60] = 0x53; buf
[61] = 0x53; buf
[62] = 0x53; buf
[63] = 0x53;
5187 ret
= usb_microdia_control_write(dev
, reg
, buf
, 64);
5193 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5199 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5205 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5211 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5217 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5223 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5229 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5234 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x03; buf
[3] = 0x14; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5235 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5240 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5245 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5250 buf
[0] = 0xd0; buf
[1] = 0x30; buf
[2] = 0x17; buf
[3] = 0x1b; buf
[4] = 0xbc; buf
[5] = 0x01; buf
[6] = 0x7a; buf
[7] = 0x10;
5251 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5256 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5261 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5266 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1b; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5267 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5272 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5277 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x32; buf
[3] = 0x82; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5278 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5283 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5288 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5293 buf
[0] = 0x05; buf
[1] = 0x00; buf
[2] = 0x01; buf
[3] = 0x00;
5294 buf
[4] = 0x50; buf
[5] = 0x78;
5295 ret
= usb_microdia_control_write(dev
, reg
, buf
, 6);
5300 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xd5; buf
[3] = 0xa0;
5301 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
5306 buf
[0] = 0x00; buf
[1] = 0x00; buf
[2] = 0xa0; buf
[3] = 0x78;
5307 ret
= usb_microdia_control_write(dev
, reg
, buf
, 4);
5313 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5319 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5325 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5331 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5337 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5343 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5349 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5355 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5361 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5367 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5373 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5379 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5384 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5390 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5395 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5401 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5406 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5412 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5417 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5423 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5428 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5434 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5439 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5445 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5450 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x11; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5451 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5456 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5461 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5466 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5467 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5472 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5477 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5482 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2b; buf
[3] = 0x70; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5483 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5488 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5493 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5498 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x92; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5499 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5504 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5509 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5514 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x93; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5515 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5520 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5525 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5530 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x0a; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5531 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5536 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5541 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5542 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5547 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5552 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
5557 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x0b; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5558 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5563 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5568 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5569 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5574 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5579 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
5584 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1c; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5585 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5590 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5595 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5596 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5601 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5606 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
5611 buf
[0] = 0x90; buf
[1] = 0x30; buf
[2] = 0x1d; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5612 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5617 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5622 buf
[0] = 0x92; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5623 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5628 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5633 ret
= usb_microdia_control_read(dev
, reg
, buf
, 5);
5639 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5645 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5651 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5656 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0xa1; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5657 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5662 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5667 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5672 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x10; buf
[3] = 0x06; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5673 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5678 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5683 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5688 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x04; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5689 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5694 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5699 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5704 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2d; buf
[3] = 0x36; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5705 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5710 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5715 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5720 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x2e; buf
[3] = 0x00; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5721 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5726 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5731 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5736 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x01; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
5737 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5742 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5747 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5752 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x06; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
5753 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5758 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5763 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5768 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x94; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5769 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5774 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5779 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5784 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x8d; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5785 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5790 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5795 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5800 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x09; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
5801 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5806 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5811 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5816 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x95; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5817 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5822 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5827 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5832 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x85; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5833 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5838 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5843 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5848 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x00; buf
[3] = 0x0c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x15;
5849 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5854 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5859 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5864 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x01; buf
[3] = 0x96; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5865 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5870 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5875 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5880 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x80; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5881 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5886 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5891 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5896 buf
[0] = 0xa0; buf
[1] = 0x30; buf
[2] = 0x02; buf
[3] = 0x7c; buf
[4] = 0x00; buf
[5] = 0x00; buf
[6] = 0x00; buf
[7] = 0x10;
5897 ret
= usb_microdia_control_write(dev
, reg
, buf
, 8);
5902 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5907 ret
= usb_microdia_control_read(dev
, reg
, buf
, 1);
5913 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5919 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
5926 /* END OF MICRODIA 6288 START STREAM */
5930 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
5936 * @brief Wrapper function for device-specific stopstream functions
5938 * @param dev Pointer to device structure
5942 * This will execute a function determined by the array #cameras and
5943 * the function find_camera().
5946 int dev_microdia_stop_stream(struct usb_microdia
*dev
)
5949 if (dev
&& dev
->stop_stream
)
5950 ret
= dev
->stop_stream(dev
);
5956 * @brief From stop.htm
5964 * For SN9C201 with MI1310.
5965 * This function has not been tested yet.
5967 int microdia_6242_stop_stream(struct usb_microdia
*dev
)
5971 __u8 only10c0
[3] = {0x0d, 0x00, 0x00};
5974 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
5977 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
5980 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
5982 sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2,
5983 only10c0
[0], dev
->sensor_flags
, &only10c0
[1]);
5986 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
5989 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
5992 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
5995 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
5998 buf
[0] = 0x98; buf
[1] = 0xe7; buf
[2] = 0x11;
5999 usb_microdia_control_write(dev
, 0x1000, buf
, 3);
6002 * After the select alternate setting 0 is actually another transfer:
6004 * usb_microdia_control_write(dev, 0x1066, buf, 1);
6012 * @brief From stopstream.log
6020 * For SN9C201 with SOI968.
6021 * I don't whether the function really stops the stream.
6022 * Nevertheless the LED on the webcam now stops glowing.
6023 * The function is very similar to "microdia_624f_stop_stream".
6025 int microdia_624e_stop_stream(struct usb_microdia
*dev
)
6030 usb_microdia_control_write(dev
, 0x1061, buf
, 1);
6032 /* Next two writes added because it works better.
6033 * The LED stops glowing and I think the stream does too.
6034 * 0x20 = 0b00100000 which is the minimal of what the
6035 * other stopstreams have in common.
6038 usb_microdia_control_write(dev
, 0x1007, buf
, 1);
6041 usb_microdia_control_write(dev
, 0x1006, buf
, 1);
6044 usb_microdia_control_write(dev
, 0x1000, buf
, 1);
6047 usb_microdia_control_write(dev
, 0x11b8, buf
, 1);
6049 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
6050 usb_microdia_control_write(dev
, 0x1000, buf
, 3);
6052 usb_microdia_control_read(dev
, 0x1066, buf
, 1);
6059 * @brief Stop device 624f from streaming
6061 * @param dev Pointer to device structure
6063 * @returns 0 or negative error code
6066 int microdia_624f_stop_stream(struct usb_microdia
*dev
)
6074 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6080 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6086 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6092 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6098 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6104 ret
= usb_microdia_control_write(dev
, command
, buf
, 1);
6112 ret
= usb_microdia_control_write(dev
, command
, buf
, 3);
6119 UDIA_ERROR("command %x failed (%d)!\n", command
, ret
);
6124 * @brief Stop device 6260 from streaming
6126 * @param dev Pointer to device structure
6128 * @returns 0 or negative error code
6131 int microdia_6260_stop_stream(struct usb_microdia
*dev
)
6138 static __u16 bridge6260_stop
[][2] = {
6153 UDIA_INFO("Stopping camera...\n");
6155 for (i
= 0; i
< ARRAY_SIZE(bridge6260_stop
); i
++) {
6156 reg
= bridge6260_stop
[i
][0];
6157 value
[0] = bridge6260_stop
[i
][1];
6158 ret
= usb_microdia_control_write(dev
, reg
, value
, 1);
6160 UDIA_INFO("6260 Bridge: Stop Sequence Error (%d) on array line %d\n", ret
, i
);
6169 * @brief From 7 start-stop-logs (made by Alex Carlos, Boris Borisov, bohzan and Comer352l)
6173 * @returns 0 (ok) or -1 (error)
6177 * Windows driver version: 5.7.23.000
6178 * Windows versions: 2000 and XP
6179 * USB-Logger: SniffUSB 1.8 and 2.0, USBTrace 2.0, SnoopyPro
6180 * All logs were made using AMCAP with 640x480, RGB24
6182 int microdia_6270_stop_stream(struct usb_microdia
*dev
)
6188 if (dev
->sensor_slave_address
== MT9V111_I2C_SLAVE_ADDRESS
) {
6190 ret
+= usb_microdia_control_write(dev
, 0x1007, buf
, 1); /* URB 3541 */
6192 ret
+= usb_microdia_control_write(dev
, 0x1006, buf
, 1); /* URB 3542 */
6193 /* => These two writes seem to cause the cam to stop sending isochronus USB messages */
6196 ret
+= usb_microdia_control_write(dev
, 0x1061, buf
, 1); /* URB 3544 */
6197 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
6199 ret
+= usb_microdia_control_write(dev
, 0x1007, buf
, 1); /* URB 3541 */
6201 ret
+= usb_microdia_control_write(dev
, 0x1006, buf
, 1); /* URB 3542 */
6203 if (dev
->sensor_slave_address
== MT9V011_I2C_SLAVE_ADDRESS
) {
6204 /* Write to sensor register 0x07: Output Control */
6205 buf
[0] = 0x00; buf
[1] = 0x00; /* stop sensor readout, normal operation */
6206 retI2C
+= sn9c20x_write_i2c_data(dev
, dev
->sensor_slave_address
, 2, 0x07, dev
->sensor_flags
, buf
);
6208 buf
[0] = 0x38; /* ALEX: 0x3c */
6209 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 1); /* URB 3545 */
6210 buf
[0] = 0x6d; /* ALEX: 0xec; FRANK: also 0x6c */
6211 ret
+= usb_microdia_control_write(dev
, 0x11b8, buf
, 1); /* URB 3546 */
6212 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
6213 ret
+= usb_microdia_control_write(dev
, 0x1000, buf
, 3); /* URB 3547 */
6215 /* INTERRUPT COMMING BACK (URB 2227) */
6216 /* SELECT ALTERNATE SETTINGS (URB 3548) */
6217 /* INTERRUPT GOING DOWN (URB 3549) */
6220 ret
+= usb_microdia_control_write(dev
, 0x1066, buf
, 1); /* URB 3550 */
6223 UDIA_INFO("One ore more errors occured while stopping stream !\n");
6231 * @brief Stop device 627b from streaming
6233 * @param dev Pointer to device structure
6235 * @returns 0 or negative error code
6238 int microdia_627b_stop_stream(struct usb_microdia
*dev
)
6246 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6252 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6258 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6264 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6270 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6275 buf
[0] = 0x38; buf
[1] = 0xe7; buf
[2] = 0x11;
6276 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
6282 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6289 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
6294 * @brief From UsbSnoop-plugin-parsed.log
6298 * @returns 0 (OK) or <0 (Error)
6300 * @author Vincent, Kuzja
6302 int microdia_6288_stop_stream(struct usb_microdia
*dev
)
6310 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6316 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6322 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6328 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6334 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6339 buf
[0] = 0x98; buf
[1] = 0xe7; buf
[2] = 0x11;
6340 ret
= usb_microdia_control_write(dev
, reg
, buf
, 3);
6346 ret
= usb_microdia_control_write(dev
, reg
, buf
, 1);
6352 UDIA_ERROR("r/w in Register %x failed (%d)!\n", reg
, ret
);
6357 * @brief Detect whether the image for 624f has to be flipped
6359 * @param dev Pointer to device structure
6361 * @returns 0 or negative error code
6364 int microdia_624f_flip_detect(struct usb_microdia
*dev
)
6369 ret
= usb_microdia_control_read(dev
, 0x1009, &val
, 1);
6373 dev
->vsettings
.vflip
= 1;
6375 dev
->vsettings
.vflip
= 0;
6380 * @brief Detect whether the image for 6260 has to be flipped
6382 * @param dev Pointer to device structure
6384 * @returns 0 or negative error code
6387 int microdia_6260_flip_detect(struct usb_microdia
*dev
)
6389 const __u8 flip_bit
= 0x01;
6392 static __u8 flip_reg
= flip_bit
;
6395 ret
= usb_microdia_control_read(dev
, 0x1009, &val
, 1);
6398 if (flip_reg
!= (val
& flip_bit
)) {
6403 ret
= ov7670_auto_flip(dev
, vflip
);
6404 flip_reg
= (val
& flip_bit
);