SyntekUSBVideoCamera
|
00001 00034 #include <linux/module.h> 00035 #include <linux/init.h> 00036 #include <linux/kernel.h> 00037 #include <linux/version.h> 00038 #include <linux/errno.h> 00039 #include <linux/slab.h> 00040 #include <linux/kref.h> 00041 00042 #include <linux/usb.h> 00043 #include <media/v4l2-common.h> 00044 #include <media/v4l2-ioctl.h> 00045 00046 #include "stk11xx.h" 00047 #include "stk11xx-dev.h" 00048 00049 00050 //============================================================================= 00051 // 00052 // STK-6A33 API 00053 // 00054 //============================================================================= 00055 00056 00070 int dev_stk6a33_initialize_device(struct usb_stk11xx *dev) 00071 { 00072 int i; 00073 int retok; 00074 int value; 00075 00076 STK_INFO("Initialize USB2.0 Syntek Camera\n"); 00077 00078 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00079 usb_stk11xx_write_registry(dev, 0x0002, 0x0078); 00080 usb_stk11xx_write_registry(dev, 0x0003, 0x0080); 00081 00082 usb_stk11xx_write_registry(dev, 0x0002, 0x007f); 00083 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00084 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00085 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00086 usb_stk11xx_write_registry(dev, 0x0000, 0x0027); 00087 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00088 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00089 usb_stk11xx_write_registry(dev, 0x0000, 0x0027); 00090 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00091 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00092 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00093 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00094 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00095 usb_stk11xx_write_registry(dev, 0x0000, 0x0027); 00096 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00097 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00098 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00099 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00100 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00101 usb_stk11xx_write_registry(dev, 0x0000, 0x0027); 00102 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00103 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00104 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00105 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00106 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00107 usb_stk11xx_write_registry(dev, 0x0000, 0x0027); 00108 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00109 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00110 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00111 usb_stk11xx_write_registry(dev, 0x0002, 0x007d); 00112 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00113 00114 for (i=0; i<16; i++) { 00115 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00116 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00117 usb_stk11xx_read_registry(dev, 0x0000, &value); 00118 00119 STK_DEBUG("Loop 1 : Read 0x0000 = %02X\n", value); 00120 } 00121 00122 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00123 usb_stk11xx_write_registry(dev, 0x0000, 0x0020); 00124 00125 usb_stk11xx_write_registry(dev, 0x0002, 0x007f); 00126 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00127 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00128 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00129 usb_stk11xx_write_registry(dev, 0x0000, 0x0027); 00130 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00131 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00132 usb_stk11xx_write_registry(dev, 0x0000, 0x0027); 00133 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00134 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00135 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00136 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00137 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00138 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00139 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00140 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00141 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00142 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00143 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00144 usb_stk11xx_write_registry(dev, 0x0000, 0x0027); 00145 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00146 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00147 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00148 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00149 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00150 usb_stk11xx_write_registry(dev, 0x0000, 0x0027); 00151 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00152 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00153 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00154 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00155 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00156 usb_stk11xx_write_registry(dev, 0x0000, 0x0027); 00157 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00158 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00159 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00160 usb_stk11xx_write_registry(dev, 0x0002, 0x007d); 00161 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00162 00163 for (i=0; i<16; i++) { 00164 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00165 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00166 usb_stk11xx_read_registry(dev, 0x0000, &value); 00167 00168 STK_DEBUG("Loop 2 : Read 0x0000 = %02X\n", value); 00169 } 00170 00171 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00172 usb_stk11xx_write_registry(dev, 0x0000, 0x0020); 00173 00174 usb_stk11xx_write_registry(dev, 0x0002, 0x007f); 00175 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00176 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00177 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00178 usb_stk11xx_write_registry(dev, 0x0000, 0x0027); 00179 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00180 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00181 usb_stk11xx_write_registry(dev, 0x0000, 0x0027); 00182 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00183 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00184 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00185 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00186 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00187 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00188 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00189 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00190 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00191 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00192 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00193 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00194 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00195 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00196 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00197 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00198 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00199 usb_stk11xx_write_registry(dev, 0x0000, 0x0027); 00200 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00201 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00202 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00203 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00204 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00205 usb_stk11xx_write_registry(dev, 0x0000, 0x0027); 00206 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00207 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00208 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00209 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00210 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00211 usb_stk11xx_write_registry(dev, 0x0000, 0x0027); 00212 usb_stk11xx_write_registry(dev, 0x0000, 0x0026); 00213 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00214 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00215 usb_stk11xx_write_registry(dev, 0x0002, 0x007d); 00216 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00217 00218 for (i=0; i<16; i++) { 00219 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00220 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00221 usb_stk11xx_read_registry(dev, 0x0000, &value); 00222 00223 STK_DEBUG("Loop 3 : Read 0x0000 = %02X\n", value); 00224 } 00225 00226 usb_stk11xx_write_registry(dev, 0x0000, 0x0025); 00227 usb_stk11xx_write_registry(dev, 0x0000, 0x0020); 00228 usb_stk11xx_write_registry(dev, 0x0002, 0x007f); 00229 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00230 usb_stk11xx_write_registry(dev, 0x0000, 0x0020); 00231 00232 usb_stk11xx_write_registry(dev, 0x0117, 0x0000); 00233 usb_stk11xx_read_registry(dev, 0x0103, &value); 00234 usb_stk11xx_write_registry(dev, 0x0103, 0x0001); 00235 usb_stk11xx_read_registry(dev, 0x0103, &value); 00236 usb_stk11xx_write_registry(dev, 0x0103, 0x0000); 00237 00238 usb_stk11xx_write_registry(dev, 0x0000, 0x00e0); 00239 usb_stk11xx_write_registry(dev, 0x0002, 0x00f8); 00240 usb_stk11xx_write_registry(dev, 0x0002, 0x0078); 00241 usb_stk11xx_write_registry(dev, 0x0000, 0x0020); 00242 00243 dev_stk6a33_configure_device(dev, 0); 00244 retok = dev_stk11xx_check_device(dev, 65); 00245 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00246 00247 dev_stk6a33_configure_device(dev, 1); 00248 retok = dev_stk11xx_check_device(dev, 65); 00249 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00250 00251 dev_stk6a33_configure_device(dev, 2); 00252 retok = dev_stk11xx_check_device(dev, 65); 00253 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00254 00255 dev_stk6a33_configure_device(dev, 3); 00256 retok = dev_stk11xx_check_device(dev, 65); 00257 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00258 00259 dev_stk6a33_configure_device(dev, 4); 00260 retok = dev_stk11xx_check_device(dev, 65); 00261 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00262 00263 dev_stk6a33_configure_device(dev, 5); 00264 retok = dev_stk11xx_check_device(dev, 65); 00265 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00266 00267 dev_stk6a33_configure_device(dev, 6); 00268 retok = dev_stk11xx_check_device(dev, 65); 00269 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00270 00271 dev_stk6a33_configure_device(dev, 7); 00272 retok = dev_stk11xx_check_device(dev, 65); 00273 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00274 00275 dev_stk6a33_configure_device(dev, 8); 00276 retok = dev_stk11xx_check_device(dev, 65); 00277 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00278 00279 dev_stk6a33_configure_device(dev, 9); 00280 retok = dev_stk11xx_check_device(dev, 65); 00281 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00282 00283 dev_stk6a33_configure_device(dev, 10); 00284 retok = dev_stk11xx_check_device(dev, 65); 00285 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00286 00287 dev_stk6a33_configure_device(dev, 11); 00288 retok = dev_stk11xx_check_device(dev, 65); 00289 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00290 00291 dev_stk6a33_configure_device(dev, 12); 00292 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00293 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00294 usb_stk11xx_write_registry(dev, 0x0208, 0x0000); 00295 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00296 retok = dev_stk11xx_check_device(dev, 500); 00297 usb_stk11xx_read_registry(dev, 0x0209, &value); 00298 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00299 00300 dev_stk6a33_configure_device(dev, 13); 00301 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00302 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00303 usb_stk11xx_write_registry(dev, 0x0208, 0x0000); 00304 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00305 retok = dev_stk11xx_check_device(dev, 500); 00306 usb_stk11xx_read_registry(dev, 0x0209, &value); 00307 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00308 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00309 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00310 usb_stk11xx_write_registry(dev, 0x0208, 0x00f1); 00311 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00312 retok = dev_stk11xx_check_device(dev, 500); 00313 usb_stk11xx_read_registry(dev, 0x0209, &value); 00314 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00315 00316 dev_stk6a33_configure_device(dev, 14); 00317 retok = dev_stk11xx_check_device(dev, 500); 00318 usb_stk11xx_write_registry(dev, 0x0204, 0x00f1); 00319 usb_stk11xx_write_registry(dev, 0x0205, 0x0000); 00320 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00321 retok = dev_stk11xx_check_device(dev, 500); 00322 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00323 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00324 usb_stk11xx_write_registry(dev, 0x0208, 0x0000); 00325 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00326 retok = dev_stk11xx_check_device(dev, 500); 00327 usb_stk11xx_read_registry(dev, 0x0209, &value); 00328 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00329 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00330 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00331 usb_stk11xx_write_registry(dev, 0x0208, 0x00f1); 00332 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00333 retok = dev_stk11xx_check_device(dev, 500); 00334 usb_stk11xx_read_registry(dev, 0x0209, &value); 00335 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00336 00337 dev_stk6a33_configure_device(dev, 15); 00338 00339 dev_stk6a33_camera_asleep(dev); 00340 00341 usb_stk11xx_set_feature(dev, 0); 00342 00343 // Device is initialized and is ready !!! 00344 STK_INFO("Syntek USB2.0 Camera is ready\n"); 00345 00346 return 0; 00347 } 00348 00349 00368 int dev_stk6a33_configure_device(struct usb_stk11xx *dev, int step) 00369 { 00370 int value; 00371 00372 // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 00373 00374 static const int values_001B[] = { 00375 0x0e, 0x03, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07 00376 }; 00377 static const int values_001C[] = { 00378 0x06, 0x02, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06 00379 }; 00380 static const int values_0202[] = { 00381 0x1e, 0x0a, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x14, 0x1e, 0x1f, 0x1f, 0x1f, 0x1f 00382 }; 00383 static const int values_0110[] = { 00384 0x07, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 00385 }; 00386 static const int values_0112[] = { 00387 0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 00388 }; 00389 static const int values_0114[] = { 00390 0x87, 0x80, 0x80, 0x80, 0x80, 0xbe, 0xbe, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 00391 }; 00392 static const int values_0115[] = { 00393 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02 00394 }; 00395 static const int values_0116[] = { 00396 0xe7, 0xe0, 0xe0, 0xe0, 0xe0, 0xe9, 0xe9, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0 00397 }; 00398 static const int values_0117[] = { 00399 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 00400 }; 00401 static const int values_0100[] = { 00402 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 00403 }; 00404 00405 STK_DEBUG("dev_stk6a33_configure_device : %d\n", step); 00406 00407 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00408 usb_stk11xx_write_registry(dev, 0x0002, 0x0068); 00409 usb_stk11xx_write_registry(dev, 0x0003, 0x0080); 00410 usb_stk11xx_write_registry(dev, 0x0005, 0x0000); 00411 00412 usb_stk11xx_write_registry(dev, 0x0007, 0x0003); 00413 usb_stk11xx_write_registry(dev, 0x000d, 0x0000); 00414 usb_stk11xx_write_registry(dev, 0x000f, 0x0002); 00415 usb_stk11xx_write_registry(dev, 0x0300, 0x0012); 00416 usb_stk11xx_write_registry(dev, 0x0350, 0x0041); 00417 00418 usb_stk11xx_write_registry(dev, 0x0351, 0x0000); 00419 usb_stk11xx_write_registry(dev, 0x0352, 0x0000); 00420 usb_stk11xx_write_registry(dev, 0x0353, 0x0000); 00421 usb_stk11xx_write_registry(dev, 0x0018, 0x0010); 00422 usb_stk11xx_write_registry(dev, 0x0019, 0x0000); 00423 00424 usb_stk11xx_write_registry(dev, 0x001b, values_001B[step]); 00425 usb_stk11xx_write_registry(dev, 0x001c, values_001C[step]); 00426 usb_stk11xx_write_registry(dev, 0x0300, 0x0080); 00427 usb_stk11xx_write_registry(dev, 0x001a, 0x0004); 00428 usb_stk11xx_write_registry(dev, 0x0202, values_0202[step]); 00429 00430 usb_stk11xx_write_registry(dev, 0x0110, values_0110[step]); 00431 usb_stk11xx_write_registry(dev, 0x0111, 0x0000); 00432 usb_stk11xx_write_registry(dev, 0x0112, values_0112[step]); 00433 usb_stk11xx_write_registry(dev, 0x0113, 0x0000); 00434 usb_stk11xx_write_registry(dev, 0x0114, values_0114[step]); 00435 00436 usb_stk11xx_write_registry(dev, 0x0115, values_0115[step]); 00437 usb_stk11xx_write_registry(dev, 0x0116, values_0116[step]); 00438 usb_stk11xx_write_registry(dev, 0x0117, values_0117[step]); 00439 00440 usb_stk11xx_read_registry(dev, 0x0100, &value); 00441 usb_stk11xx_write_registry(dev, 0x0100, values_0100[step]); 00442 00443 usb_stk11xx_write_registry(dev, 0x0200, 0x0080); 00444 usb_stk11xx_write_registry(dev, 0x0200, 0x0000); 00445 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00446 00447 00448 switch (step) { 00449 case 0: 00450 usb_stk11xx_write_registry(dev, 0x0203, 0x0040); 00451 00452 usb_stk11xx_write_registry(dev, 0x0204, 0x0041); 00453 usb_stk11xx_write_registry(dev, 0x0205, 0x0001); 00454 usb_stk11xx_write_registry(dev, 0x0204, 0x001c); 00455 usb_stk11xx_write_registry(dev, 0x0205, 0x0002); 00456 00457 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00458 00459 break; 00460 00461 case 1: 00462 usb_stk11xx_write_registry(dev, 0x0203, 0x0022); 00463 00464 usb_stk11xx_write_registry(dev, 0x0204, 0x0027); 00465 usb_stk11xx_write_registry(dev, 0x0205, 0x00a5); 00466 00467 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00468 00469 break; 00470 00471 case 2: 00472 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00473 00474 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00475 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00476 usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 00477 usb_stk11xx_write_registry(dev, 0x0205, 0x00bf); 00478 00479 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00480 00481 break; 00482 00483 case 3: 00484 usb_stk11xx_write_registry(dev, 0x0203, 0x0042); 00485 00486 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00487 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00488 usb_stk11xx_write_registry(dev, 0x0204, 0x0024); 00489 usb_stk11xx_write_registry(dev, 0x0205, 0x00a5); 00490 00491 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00492 00493 break; 00494 00495 case 4: 00496 usb_stk11xx_write_registry(dev, 0x0203, 0x0042); 00497 00498 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00499 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00500 usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 00501 usb_stk11xx_write_registry(dev, 0x0205, 0x00e0); 00502 usb_stk11xx_write_registry(dev, 0x0204, 0x0024); 00503 usb_stk11xx_write_registry(dev, 0x0205, 0x00a5); 00504 00505 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00506 00507 break; 00508 00509 case 5: 00510 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00511 00512 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00513 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00514 usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 00515 usb_stk11xx_write_registry(dev, 0x0205, 0x00ff); 00516 00517 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00518 00519 break; 00520 00521 case 6: 00522 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00523 00524 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00525 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00526 usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 00527 usb_stk11xx_write_registry(dev, 0x0205, 0x00ff); 00528 00529 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00530 00531 break; 00532 00533 case 7: 00534 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00535 00536 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00537 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00538 usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 00539 usb_stk11xx_write_registry(dev, 0x0205, 0x00b7); 00540 00541 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00542 00543 break; 00544 00545 case 8: 00546 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00547 00548 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00549 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00550 usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 00551 usb_stk11xx_write_registry(dev, 0x0205, 0x00b7); 00552 00553 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00554 00555 break; 00556 00557 case 9: 00558 usb_stk11xx_write_registry(dev, 0x0203, 0x0080); 00559 00560 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00561 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00562 usb_stk11xx_write_registry(dev, 0x0204, 0x000a); 00563 usb_stk11xx_write_registry(dev, 0x0205, 0x00ff); 00564 00565 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00566 00567 break; 00568 00569 case 10: 00570 usb_stk11xx_write_registry(dev, 0x0203, 0x00dc); 00571 00572 usb_stk11xx_write_registry(dev, 0x0204, 0x0015); 00573 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00574 00575 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00576 00577 break; 00578 00579 case 11: 00580 usb_stk11xx_write_registry(dev, 0x0203, 0x00ec); 00581 00582 usb_stk11xx_write_registry(dev, 0x0204, 0x0015); 00583 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00584 00585 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00586 00587 break; 00588 00589 case 12: 00590 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00591 break; 00592 00593 case 13: 00594 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00595 break; 00596 00597 case 14: 00598 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00599 00600 usb_stk11xx_write_registry(dev, 0x0204, 0x0001); 00601 usb_stk11xx_write_registry(dev, 0x0205, 0x0000); 00602 00603 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00604 break; 00605 00606 case 15: 00607 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00608 00609 dev_stk6a33_sensor_settings(dev); 00610 00611 usb_stk11xx_write_registry(dev, 0x0200, 0x0080); 00612 usb_stk11xx_write_registry(dev, 0x0200, 0x0000); 00613 usb_stk11xx_write_registry(dev, 0x02ff, 0x0001); 00614 usb_stk11xx_write_registry(dev, 0x0203, 0x00a0); 00615 00616 break; 00617 00618 case 16: 00619 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00620 00621 dev_stk6a33_sensor_settings(dev); 00622 00623 usb_stk11xx_write_registry(dev, 0x0200, 0x0080); 00624 usb_stk11xx_write_registry(dev, 0x0200, 0x0000); 00625 usb_stk11xx_write_registry(dev, 0x02ff, 0x0001); 00626 usb_stk11xx_write_registry(dev, 0x0203, 0x00a0); 00627 00628 00629 break; 00630 00631 case 17: 00632 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00633 00634 dev_stk6a33_sensor_settings(dev); 00635 00636 break; 00637 } 00638 00639 return 0; 00640 } 00641 00642 00652 int dev_stk6a33_camera_asleep(struct usb_stk11xx *dev) 00653 { 00654 int value; 00655 00656 usb_stk11xx_read_registry(dev, 0x0104, &value); 00657 usb_stk11xx_read_registry(dev, 0x0105, &value); 00658 usb_stk11xx_read_registry(dev, 0x0106, &value); 00659 00660 usb_stk11xx_write_registry(dev, 0x0100, 0x0021); 00661 usb_stk11xx_write_registry(dev, 0x0116, 0x0000); 00662 usb_stk11xx_write_registry(dev, 0x0117, 0x0000); 00663 usb_stk11xx_write_registry(dev, 0x0018, 0x0000); 00664 00665 usb_stk11xx_read_registry(dev, 0x0000, &value); 00666 usb_stk11xx_write_registry(dev, 0x0000, 0x0049); 00667 00668 return 0; 00669 } 00670 00671 00682 int dev_stk6a33_init_camera(struct usb_stk11xx *dev) 00683 { 00684 dev_stk6a33_camera_asleep(dev); 00685 00686 usb_stk11xx_set_feature(dev, 0); 00687 00688 usb_stk11xx_write_registry(dev, 0x0000, 0x00e0); 00689 usb_stk11xx_write_registry(dev, 0x0002, 0x00e8); 00690 usb_stk11xx_write_registry(dev, 0x0002, 0x0078); 00691 usb_stk11xx_write_registry(dev, 0x0000, 0x0020); 00692 00693 dev_stk6a33_configure_device(dev, 16); 00694 00695 dev_stk11xx_camera_off(dev); 00696 00697 return 0; 00698 } 00699 00700 00711 int dev_stk6a33_sensor_settings(struct usb_stk11xx *dev) 00712 { 00713 int i; 00714 int retok; 00715 int value; 00716 00717 int asize; 00718 static const int values_204[] = { 00719 0xf0, 0xf1, 0x0d, 0xf1, 0x0d, 0xf1, 0xf0, 0xf1, 0x35, 0xf1, 00720 0xf0, 0xf1, 0x06, 0xf1, 0xf0, 0xf1, 0xdd, 0xf1, 0xf0, 0xf1, 00721 0x1f, 0xf1, 0x20, 0xf1, 0x21, 0xf1, 0x22, 0xf1, 0x23, 0xf1, 00722 0x24, 0xf1, 0x28, 0xf1, 0x29, 0xf1, 0x5e, 0xf1, 0x5f, 0xf1, 00723 0x60, 0xf1, 0xef, 0xf1, 0xf2, 0xf1, 0x02, 0xf1, 0x03, 0xf1, 00724 0x04, 0xf1, 0x09, 0xf1, 0x0a, 0xf1, 0x0b, 0xf1, 0x0c, 0xf1, 00725 0x0d, 0xf1, 0x0e, 0xf1, 0x0f, 0xf1, 0x10, 0xf1, 0x11, 0xf1, 00726 0x15, 0xf1, 0x16, 0xf1, 0x17, 0xf1, 0x18, 0xf1, 0x19, 0xf1, 00727 0x1a, 0xf1, 0x1b, 0xf1, 0x1c, 0xf1, 0x1d, 0xf1, 0x1e, 0xf1, 00728 0xf0, 0xf1, 0x06, 0xf1, 0x06, 0xf1, 0xf0, 0xf1, 0x80, 0xf1, 00729 0x81, 0xf1, 0x82, 0xf1, 0x83, 0xf1, 0x84, 0xf1, 0x85, 0xf1, 00730 0x86, 0xf1, 0x87, 0xf1, 0x88, 0xf1, 0x89, 0xf1, 0x8a, 0xf1, 00731 0x8b, 0xf1, 0x8c, 0xf1, 0x8d, 0xf1, 0x8e, 0xf1, 0x8f, 0xf1, 00732 0x90, 0xf1, 0x91, 0xf1, 0x92, 0xf1, 0x93, 0xf1, 0x94, 0xf1, 00733 0x95, 0xf1, 0xb6, 0xf1, 0xb7, 0xf1, 0xb8, 0xf1, 0xb9, 0xf1, 00734 0xba, 0xf1, 0xbb, 0xf1, 0xbc, 0xf1, 0xbd, 0xf1, 0xbe, 0xf1, 00735 0xbf, 0xf1, 0xc0, 0xf1, 0xc1, 0xf1, 0xc2, 0xf1, 0xc3, 0xf1, 00736 0xc4, 0xf1, 0x06, 0xf1, 0xf0, 0xf1, 0x53, 0xf1, 0x54, 0xf1, 00737 0x55, 0xf1, 0x56, 0xf1, 0x57, 0xf1, 0x58, 0xf1, 0xf0, 0xf1, 00738 0xa7, 0xf1, 0xaa, 0xf1, 0x3a, 0xf1, 0xa1, 0xf1, 0xa4, 0xf1, 00739 0x9b, 0xf1, 0x08, 0xf1, 0xf0, 0xf1, 0x2f, 0xf1, 0x9c, 0xf1, 00740 0xd2, 0xf1, 0xcc, 0xf1, 0xcb, 0xf1, 0x2e, 0xf1, 0x67, 0xf1, 00741 0xf0, 0xf1, 0x65, 0xf1, 0x66, 0xf1, 0x67, 0xf1, 0x65, 0xf1, 00742 0xf0, 0xf1, 0x05, 0xf1, 0x07, 0xf1, 0xf0, 0xf1, 0x39, 0xf1, 00743 0x3b, 0xf1, 0x3a, 0xf1, 0x3c, 0xf1, 0x57, 0xf1, 0x58, 0xf1, 00744 0x59, 0xf1, 0x5a, 0xf1, 0x5c, 0xf1, 0x5d, 0xf1, 0x64, 0xf1, 00745 0xf0, 0xf1, 0x5b, 0xf1, 0xf0, 0xf1, 0x36, 0xf1, 0x37, 0xf1, 00746 0xf0, 0xf1, 0x08, 0xf1 00747 }; 00748 static const int values_205[] = { 00749 0x00, 0x00, 0x00, 0x0b, 0x00, 0x08, 0x00, 0x00, 0x00, 0x22, 00750 0x00, 0x01, 0x70, 0x0e, 0x00, 0x02, 0x18, 0xe0, 0x00, 0x02, 00751 0x01, 0x80, 0xc8, 0x14, 0x80, 0x80, 0xa0, 0x78, 0xa0, 0x78, 00752 0x5f, 0x20, 0xea, 0x02, 0x86, 0x7a, 0x59, 0x4c, 0x4d, 0x51, 00753 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0xee, 0x39, 0x23, 00754 0x07, 0x24, 0x00, 0xcd, 0x00, 0x93, 0x00, 0x04, 0x00, 0x5c, 00755 0x00, 0xd9, 0x00, 0x53, 0x00, 0x08, 0x00, 0x91, 0x00, 0xcf, 00756 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 00757 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 00758 0x00, 0x01, 0xf0, 0x0e, 0x70, 0x0e, 0x00, 0x01, 0x00, 0x0b, 00759 0xee, 0x08, 0xf8, 0xf3, 0x00, 0xfb, 0xee, 0x09, 0xf7, 0xf3, 00760 0xff, 0xfa, 0xf2, 0x08, 0xf9, 0xf5, 0xff, 0xf9, 0xe4, 0x10, 00761 0xf1, 0xea, 0xf8, 0xf6, 0x00, 0x00, 0xe9, 0x0f, 0xf2, 0xed, 00762 0xf6, 0xf6, 0x00, 0x00, 0xea, 0x0d, 0xf4, 0xf1, 0xf8, 0xf8, 00763 0x00, 0x00, 0x07, 0x06, 0x1c, 0x0b, 0x08, 0x06, 0x17, 0x0a, 00764 0x05, 0x06, 0x1a, 0x07, 0x06, 0x04, 0x0a, 0x08, 0x00, 0x19, 00765 0x06, 0x05, 0x07, 0x0a, 0x00, 0x1f, 0x04, 0x04, 0x04, 0x08, 00766 0x00, 0x1b, 0x74, 0x0e, 0x00, 0x01, 0x0b, 0x03, 0x47, 0x22, 00767 0xac, 0x82, 0xda, 0xc7, 0xf5, 0xe9, 0xff, 0x00, 0x00, 0x01, 00768 0x02, 0x80, 0x01, 0xe0, 0x43, 0x00, 0x05, 0x00, 0x04, 0x00, 00769 0x43, 0x00, 0x01, 0x80, 0x00, 0x02, 0xd1, 0x00, 0xd1, 0x00, 00770 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x0c, 0x50, 0x10, 0x10, 00771 0x00, 0x00, 0xa0, 0x00, 0x20, 0x03, 0x05, 0x01, 0x20, 0x00, 00772 0x00, 0x00, 0x01, 0xb8, 0x00, 0xd8, 0x00, 0x02, 0x06, 0xc0, 00773 0x04, 0x0e, 0x06, 0xc0, 0x05, 0x64, 0x02, 0x08, 0x02, 0x71, 00774 0x02, 0x08, 0x02, 0x71, 0x12, 0x0d, 0x17, 0x12, 0x5e, 0x1c, 00775 0x00, 0x02, 0x00, 0x03, 0x00, 0x02, 0x78, 0x10, 0x83, 0x04, 00776 0x00, 0x00, 0x00, 0x21 00777 }; 00778 00779 00780 asize = ARRAY_SIZE(values_204); 00781 00782 for(i=0; i<asize; i++) { 00783 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00784 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00785 00786 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00787 00788 usb_stk11xx_write_registry(dev, 0x0204, values_204[i]); 00789 usb_stk11xx_write_registry(dev, 0x0205, values_205[i]); 00790 usb_stk11xx_write_registry(dev, 0x0200, 0x0001); 00791 00792 retok = dev_stk11xx_check_device(dev, 500); 00793 00794 if (retok != 1) { 00795 STK_ERROR("Load default sensor settings fail !\n"); 00796 return -1; 00797 } 00798 00799 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00800 } 00801 00802 retok = dev_stk11xx_check_device(dev, 500); 00803 00804 return 0; 00805 } 00806 00807 00821 int dev_stk6a33_camera_settings(struct usb_stk11xx *dev) 00822 { 00823 int i; 00824 int ret; 00825 int value; 00826 00827 int asize; 00828 static const int values_204[] = { 00829 0xf0, 0xf1, 0x2e, 0xf1, 0xf0, 0xf1, 0x5b, 0xf1, 0xf0, 0xf1, 0x36, 0xf1, 0x37, 0xf1, 0xf0, 0xf1, 0x08, 0xf1 00830 }; 00831 static const int values_205[] = { 00832 0x00, 0x02, 0x0c, 0x3c, 0x00, 0x02, 0x00, 0x03, 0x00, 0x02, 0x78, 0x10, 0x83, 0x04, 0x00, 0x00, 0x00, 0x21 00833 }; 00834 00835 00836 asize = ARRAY_SIZE(values_204); 00837 00838 // Contrast register 00839 for (i=0; i<asize; i++) { 00840 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00841 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00842 00843 usb_stk11xx_write_registry(dev, 0x0204, values_204[i]); 00844 usb_stk11xx_write_registry(dev, 0x0205, values_205[i]); 00845 00846 usb_stk11xx_write_registry(dev, 0x0200, 0x0001); 00847 ret = dev_stk11xx_check_device(dev, 500); 00848 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00849 } 00850 00851 return 0; 00852 } 00853 00854 00873 int dev_stk6a33_set_camera_quality(struct usb_stk11xx *dev) 00874 { 00875 int ret; 00876 int value; 00877 00878 // Contrast register 00879 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00880 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00881 00882 usb_stk11xx_write_registry(dev, 0x0204, 0x00b3); 00883 usb_stk11xx_write_registry(dev, 0x0205, (dev->vsettings.contrast >> 8)); 00884 00885 usb_stk11xx_write_registry(dev, 0x0200, 0x0001); 00886 ret = dev_stk11xx_check_device(dev, 500); 00887 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00888 00889 STK_DEBUG("Set colour : %d\n", dev->vsettings.colour); 00890 STK_DEBUG("Set contrast : %d\n", dev->vsettings.contrast); 00891 STK_DEBUG("Set whiteness : %d\n", dev->vsettings.whiteness); 00892 STK_DEBUG("Set brightness : %d\n", dev->vsettings.brightness); 00893 00894 return 0; 00895 } 00896 00897 00918 int dev_stk6a33_set_camera_fps(struct usb_stk11xx *dev) 00919 { 00920 return 0; 00921 } 00922 00923 00934 int dev_stk6a33_start_stream(struct usb_stk11xx *dev) 00935 { 00936 int value; 00937 int value_116, value_117; 00938 00939 usb_stk11xx_read_registry(dev, 0x0114, &value); // read 0x80 00940 usb_stk11xx_read_registry(dev, 0x0115, &value); // read 0x02 00941 00942 usb_stk11xx_read_registry(dev, 0x0116, &value_116); 00943 usb_stk11xx_read_registry(dev, 0x0117, &value_117); 00944 00945 usb_stk11xx_write_registry(dev, 0x0116, 0x0000); 00946 usb_stk11xx_write_registry(dev, 0x0117, 0x0000); 00947 00948 usb_stk11xx_read_registry(dev, 0x0100, &value); // read 0x21 00949 usb_stk11xx_write_registry(dev, 0x0100, 0x00a0); 00950 00951 usb_stk11xx_write_registry(dev, 0x0116, value_116); 00952 usb_stk11xx_write_registry(dev, 0x0117, value_117); 00953 00954 return 0; 00955 } 00956 00957 00967 int dev_stk6a33_reconf_camera(struct usb_stk11xx *dev) 00968 { 00969 dev_stk6a33_configure_device(dev, 16); 00970 00971 dev_stk11xx_camera_settings(dev); 00972 00973 return 0; 00974 } 00975 00976 00987 int dev_stk6a33_stop_stream(struct usb_stk11xx *dev) 00988 { 00989 int value; 00990 00991 usb_stk11xx_read_registry(dev, 0x0100, &value); 00992 usb_stk11xx_write_registry(dev, 0x0100, 0x0021); 00993 00994 return 0; 00995 } 00996