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-0500 API 00053 // 00054 //============================================================================= 00055 00056 00070 int dev_stk0500_initialize_device(struct usb_stk11xx *dev) 00071 { 00072 STK_INFO("Initialize USB2.0 Syntek Camera\n"); 00073 00074 usb_stk11xx_write_registry(dev, 0x0000, 0x00e0); 00075 usb_stk11xx_write_registry(dev, 0x0002, 0x00f8); 00076 usb_stk11xx_write_registry(dev, 0x0002, 0x0078); 00077 usb_stk11xx_write_registry(dev, 0x0000, 0x0020); 00078 00079 dev_stk0500_configure_device(dev, 0); 00080 dev_stk11xx_check_device(dev, 65); 00081 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00082 00083 dev_stk0500_configure_device(dev, 1); 00084 dev_stk11xx_check_device(dev, 65); 00085 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00086 00087 dev_stk0500_configure_device(dev, 2); 00088 dev_stk11xx_check_device(dev, 65); 00089 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00090 00091 dev_stk0500_configure_device(dev, 3); 00092 dev_stk11xx_check_device(dev, 65); 00093 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00094 00095 dev_stk0500_configure_device(dev, 4); 00096 dev_stk11xx_check_device(dev, 65); 00097 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00098 00099 dev_stk0500_configure_device(dev, 5); 00100 dev_stk11xx_check_device(dev, 65); 00101 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00102 00103 dev_stk0500_configure_device(dev, 6); 00104 dev_stk11xx_check_device(dev, 65); 00105 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00106 00107 dev_stk0500_configure_device(dev, 7); 00108 dev_stk11xx_check_device(dev, 65); 00109 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00110 00111 dev_stk0500_configure_device(dev, 8); 00112 00113 dev_stk0500_configure_device(dev, 9); 00114 dev_stk11xx_check_device(dev, 65); 00115 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00116 00117 dev_stk0500_configure_device(dev, 10); 00118 dev_stk11xx_check_device(dev, 65); 00119 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00120 00121 dev_stk0500_configure_device(dev, 11); 00122 00123 dev_stk0500_configure_device(dev, 12); 00124 dev_stk11xx_check_device(dev, 65); 00125 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00126 00127 dev_stk0500_configure_device(dev, 13); 00128 00129 dev_stk0500_configure_device(dev, 14); 00130 dev_stk11xx_check_device(dev, 65); 00131 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00132 00133 dev_stk0500_configure_device(dev, 15); 00134 00135 dev_stk0500_configure_device(dev, 16); 00136 00137 dev_stk0500_camera_asleep(dev); 00138 00139 usb_stk11xx_write_registry(dev, 0x0000, 0x00e0); 00140 usb_stk11xx_write_registry(dev, 0x0002, 0x00f8); 00141 usb_stk11xx_write_registry(dev, 0x0002, 0x0078); 00142 usb_stk11xx_write_registry(dev, 0x0000, 0x0020); 00143 00144 dev_stk0500_stop_stream(dev); 00145 00146 usb_stk11xx_write_registry(dev, 0x0000, 0x00e0); 00147 usb_stk11xx_write_registry(dev, 0x0002, 0x00f8); 00148 usb_stk11xx_write_registry(dev, 0x0002, 0x0078); 00149 usb_stk11xx_write_registry(dev, 0x0000, 0x0020); 00150 00151 usb_stk11xx_set_feature(dev, 0); 00152 00153 // Device is initialized and is ready !!! 00154 STK_INFO("Syntek USB2.0 Camera is ready\n"); 00155 00156 return 0; 00157 } 00158 00159 00173 int dev_stk0500_configure_device(struct usb_stk11xx *dev, int step) 00174 { 00175 int value; 00176 00177 // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 00178 static const int values_001B[] = { 00179 0x03, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0e, 0x0e, 0x0e 00180 }; 00181 static const int values_001C[] = { 00182 0x02, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x46, 0x46, 0x46 00183 }; 00184 static const int values_0202[] = { 00185 0x0a, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x0a, 0x1e, 0x1f, 0x1f, 0x0a, 0x1e, 0x1e 00186 }; 00187 static const int values_0110[] = { 00188 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01 00189 }; 00190 static const int values_0112[] = { 00191 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01 00192 }; 00193 static const int values_0114[] = { 00194 0x80, 0x80, 0x80, 0x80, 0x00, 0xbe, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x81, 0x81 00195 }; 00196 static const int values_0115[] = { 00197 0x02, 0x02, 0x02, 0x02, 0x05, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02 00198 }; 00199 static const int values_0116[] = { 00200 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe9, 0xe0, 0xe0, 0x00, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1 00201 }; 00202 static const int values_0117[] = { 00203 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 00204 }; 00205 static const int values_0100[] = { 00206 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x21 00207 }; 00208 00209 00210 STK_DEBUG("dev_stk0500_configure_device : %d\n", step); 00211 00212 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00213 usb_stk11xx_write_registry(dev, 0x0002, 0x0078); 00214 usb_stk11xx_write_registry(dev, 0x0003, 0x0080); 00215 usb_stk11xx_write_registry(dev, 0x0005, 0x0000); 00216 00217 usb_stk11xx_write_registry(dev, 0x0007, 0x0003); 00218 usb_stk11xx_write_registry(dev, 0x000d, 0x0000); 00219 usb_stk11xx_write_registry(dev, 0x000f, 0x0002); 00220 usb_stk11xx_write_registry(dev, 0x0300, 0x0012); 00221 usb_stk11xx_write_registry(dev, 0x0350, 0x0041); 00222 00223 usb_stk11xx_write_registry(dev, 0x0351, 0x0000); 00224 usb_stk11xx_write_registry(dev, 0x0352, 0x0000); 00225 usb_stk11xx_write_registry(dev, 0x0353, 0x0000); 00226 usb_stk11xx_write_registry(dev, 0x0018, 0x0010); 00227 usb_stk11xx_write_registry(dev, 0x0019, 0x0000); 00228 00229 usb_stk11xx_write_registry(dev, 0x001b, values_001B[step]); 00230 usb_stk11xx_write_registry(dev, 0x001c, values_001C[step]); 00231 usb_stk11xx_write_registry(dev, 0x0300, 0x0080); 00232 usb_stk11xx_write_registry(dev, 0x001a, 0x0004); 00233 usb_stk11xx_write_registry(dev, 0x0202, values_0202[step]); 00234 00235 usb_stk11xx_write_registry(dev, 0x0110, values_0110[step]); 00236 usb_stk11xx_write_registry(dev, 0x0111, 0x0000); 00237 usb_stk11xx_write_registry(dev, 0x0112, values_0112[step]); 00238 usb_stk11xx_write_registry(dev, 0x0113, 0x0000); 00239 usb_stk11xx_write_registry(dev, 0x0114, values_0114[step]); 00240 00241 usb_stk11xx_write_registry(dev, 0x0115, values_0115[step]); 00242 usb_stk11xx_write_registry(dev, 0x0116, values_0116[step]); 00243 usb_stk11xx_write_registry(dev, 0x0117, values_0117[step]); 00244 00245 usb_stk11xx_read_registry(dev, 0x0100, &value); 00246 usb_stk11xx_write_registry(dev, 0x0100, values_0100[step]); 00247 00248 // usb_stk11xx_write_registry(dev, 0x0200, 0x0080); 00249 // usb_stk11xx_write_registry(dev, 0x0200, 0x0000); 00250 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00251 00252 00253 switch (step) { 00254 case 0: 00255 usb_stk11xx_write_registry(dev, 0x0203, 0x0022); 00256 00257 usb_stk11xx_write_registry(dev, 0x0204, 0x0027); 00258 usb_stk11xx_write_registry(dev, 0x0205, 0x00a5); 00259 00260 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00261 00262 break; 00263 00264 case 1: 00265 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00266 00267 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00268 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00269 usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 00270 usb_stk11xx_write_registry(dev, 0x0205, 0x00bf); 00271 00272 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00273 00274 break; 00275 00276 case 2: 00277 usb_stk11xx_write_registry(dev, 0x0203, 0x0042); 00278 00279 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00280 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00281 usb_stk11xx_write_registry(dev, 0x0204, 0x0024); 00282 usb_stk11xx_write_registry(dev, 0x0205, 0x00a5); 00283 00284 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00285 00286 break; 00287 00288 case 3: 00289 usb_stk11xx_write_registry(dev, 0x0203, 0x0042); 00290 00291 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00292 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00293 usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 00294 usb_stk11xx_write_registry(dev, 0x0205, 0x00e0); 00295 usb_stk11xx_write_registry(dev, 0x0204, 0x0024); 00296 usb_stk11xx_write_registry(dev, 0x0205, 0x00a5); 00297 00298 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00299 00300 break; 00301 00302 case 4: 00303 usb_stk11xx_write_registry(dev, 0x0203, 0x0042); 00304 00305 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00306 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00307 usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 00308 usb_stk11xx_write_registry(dev, 0x0205, 0x00bf); 00309 00310 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00311 00312 break; 00313 00314 case 5: 00315 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00316 00317 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00318 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00319 usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 00320 usb_stk11xx_write_registry(dev, 0x0205, 0x00ff); 00321 00322 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00323 00324 break; 00325 00326 case 6: 00327 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00328 00329 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00330 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00331 usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 00332 usb_stk11xx_write_registry(dev, 0x0205, 0x00b7); 00333 00334 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00335 00336 break; 00337 00338 case 7: 00339 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00340 00341 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00342 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00343 usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 00344 usb_stk11xx_write_registry(dev, 0x0205, 0x00b7); 00345 00346 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00347 00348 break; 00349 00350 case 8: 00351 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00352 00353 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00354 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00355 00356 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00357 usb_stk11xx_write_registry(dev, 0x0204, 0x00ff); 00358 usb_stk11xx_write_registry(dev, 0x0205, 0x0001); 00359 usb_stk11xx_write_registry(dev, 0x0200, 0x0001); 00360 dev_stk11xx_check_device(dev, 500); 00361 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00362 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00363 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00364 00365 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00366 usb_stk11xx_write_registry(dev, 0x0208, 0x000a); 00367 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00368 dev_stk11xx_check_device(dev, 500); 00369 usb_stk11xx_read_registry(dev, 0x0209, &value); 00370 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00371 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00372 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00373 00374 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00375 usb_stk11xx_write_registry(dev, 0x0208, 0x000b); 00376 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00377 dev_stk11xx_check_device(dev, 500); 00378 usb_stk11xx_read_registry(dev, 0x0209, &value); 00379 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00380 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00381 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00382 00383 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00384 usb_stk11xx_write_registry(dev, 0x0208, 0x001c); 00385 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00386 dev_stk11xx_check_device(dev, 500); 00387 usb_stk11xx_read_registry(dev, 0x0209, &value); 00388 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00389 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00390 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00391 00392 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00393 usb_stk11xx_write_registry(dev, 0x0208, 0x001d); 00394 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00395 dev_stk11xx_check_device(dev, 500); 00396 usb_stk11xx_read_registry(dev, 0x0209, &value); 00397 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00398 00399 break; 00400 00401 case 9: 00402 usb_stk11xx_write_registry(dev, 0x0203, 0x00dc); 00403 00404 usb_stk11xx_write_registry(dev, 0x0204, 0x0015); 00405 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00406 00407 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00408 00409 break; 00410 00411 case 10: 00412 usb_stk11xx_write_registry(dev, 0x0203, 0x00ec); 00413 00414 usb_stk11xx_write_registry(dev, 0x0204, 0x0015); 00415 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00416 00417 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00418 00419 break; 00420 00421 case 11: 00422 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00423 00424 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00425 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00426 00427 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00428 00429 usb_stk11xx_write_registry(dev, 0x0208, 0x0000); 00430 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00431 dev_stk11xx_check_device(dev, 500); 00432 usb_stk11xx_read_registry(dev, 0x0209, &value); 00433 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00434 00435 break; 00436 00437 case 12: 00438 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00439 00440 usb_stk11xx_write_registry(dev, 0x0204, 0x00f0); 00441 usb_stk11xx_write_registry(dev, 0x0205, 0x0000); 00442 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00443 00444 break; 00445 00446 case 13: 00447 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00448 00449 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00450 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00451 00452 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00453 usb_stk11xx_write_registry(dev, 0x0208, 0x0000); 00454 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00455 dev_stk11xx_check_device(dev, 500); 00456 usb_stk11xx_read_registry(dev, 0x0209, &value); 00457 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00458 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00459 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00460 00461 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00462 usb_stk11xx_write_registry(dev, 0x0208, 0x00f1); 00463 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00464 dev_stk11xx_check_device(dev, 500); 00465 usb_stk11xx_read_registry(dev, 0x0209, &value); 00466 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00467 00468 break; 00469 00470 case 14: 00471 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00472 00473 usb_stk11xx_write_registry(dev, 0x0204, 0x0001); 00474 usb_stk11xx_write_registry(dev, 0x0205, 0x0000); 00475 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00476 break; 00477 00478 case 15: 00479 usb_stk11xx_write_registry(dev, 0x0203, 0x007a); 00480 00481 usb_stk11xx_write_registry(dev, 0x0205, 0x0030); 00482 usb_stk11xx_write_registry(dev, 0x0200, 0x0000); 00483 usb_stk11xx_write_registry(dev, 0x0200, 0x0061); 00484 dev_stk11xx_check_device(dev, 500); 00485 usb_stk11xx_read_registry(dev, 0x0209, &value); 00486 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00487 dev_stk11xx_check_device(dev, 500); 00488 usb_stk11xx_read_registry(dev, 0x0209, &value); 00489 usb_stk11xx_write_registry(dev, 0x02ff, 0x0001); 00490 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00491 00492 break; 00493 00494 case 16: 00495 usb_stk11xx_write_registry(dev, 0x0203, 0x0050); 00496 00497 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00498 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00499 00500 usb_stk11xx_write_registry(dev, 0x0203, 0x0050); 00501 usb_stk11xx_write_registry(dev, 0x0208, 0x0000); 00502 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00503 dev_stk11xx_check_device(dev, 500); 00504 usb_stk11xx_read_registry(dev, 0x0209, &value); 00505 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00506 00507 break; 00508 00509 case 17: 00510 usb_stk11xx_write_registry(dev, 0x0203, 0x0050); 00511 00512 dev_stk0500_sensor_settings(dev); 00513 00514 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00515 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00516 00517 usb_stk11xx_write_registry(dev, 0x0203, 0x0050); 00518 usb_stk11xx_write_registry(dev, 0x0208, 0x0003); 00519 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00520 dev_stk11xx_check_device(dev, 500); 00521 usb_stk11xx_read_registry(dev, 0x0209, &value); 00522 00523 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00524 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00525 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00526 00527 usb_stk11xx_write_registry(dev, 0x0203, 0x0050); 00528 usb_stk11xx_write_registry(dev, 0x0208, 0x0004); 00529 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00530 dev_stk11xx_check_device(dev, 500); 00531 usb_stk11xx_read_registry(dev, 0x0209, &value); 00532 00533 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00534 usb_stk11xx_write_registry(dev, 0x0200, 0x0006); 00535 dev_stk11xx_check_device(dev, 500); 00536 00537 break; 00538 } 00539 00540 return 0; 00541 } 00542 00543 00553 int dev_stk0500_camera_asleep(struct usb_stk11xx *dev) 00554 { 00555 int value; 00556 00557 usb_stk11xx_read_registry(dev, 0x0104, &value); 00558 usb_stk11xx_read_registry(dev, 0x0105, &value); 00559 usb_stk11xx_read_registry(dev, 0x0106, &value); 00560 00561 usb_stk11xx_write_registry(dev, 0x0100, 0x0021); 00562 usb_stk11xx_write_registry(dev, 0x0116, 0x0000); 00563 usb_stk11xx_write_registry(dev, 0x0117, 0x0000); 00564 usb_stk11xx_write_registry(dev, 0x0018, 0x0000); 00565 00566 usb_stk11xx_read_registry(dev, 0x0000, &value); 00567 usb_stk11xx_write_registry(dev, 0x0000, 0x0048); 00568 00569 return 0; 00570 } 00571 00572 00583 int dev_stk0500_init_camera(struct usb_stk11xx *dev) 00584 { 00585 dev_stk0500_camera_asleep(dev); 00586 00587 usb_stk11xx_set_feature(dev, 0); 00588 00589 dev_stk0500_camera_asleep(dev); 00590 00591 usb_stk11xx_write_registry(dev, 0x0000, 0x00e0); 00592 usb_stk11xx_write_registry(dev, 0x0002, 0x00f8); 00593 usb_stk11xx_write_registry(dev, 0x0002, 0x0078); 00594 usb_stk11xx_write_registry(dev, 0x0000, 0x0020); 00595 00596 usb_stk11xx_write_registry(dev, 0x0104, 0x0000); 00597 usb_stk11xx_write_registry(dev, 0x0105, 0x0000); 00598 usb_stk11xx_write_registry(dev, 0x0106, 0x0000); 00599 00600 dev_stk11xx_camera_off(dev); 00601 00602 return 0; 00603 } 00604 00605 00616 int dev_stk0500_sensor_settings(struct usb_stk11xx *dev) 00617 { 00618 int i; 00619 int retok; 00620 int value; 00621 00622 int asize; 00623 static const int values_204[] = { 00624 0x1e, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 00625 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 00626 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1b, 0x1c, 0x1d, 00627 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x1e, 0x25, 00628 0x06, 0x25, 0x03, 0x04 00629 }; 00630 static const int values_205[] = { 00631 0x10, 0x11, 0x7b, 0x19, 0x06, 0x78, 0x10, 0x00, 0x00, 0x00, 00632 0x00, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 00633 0x04, 0x00, 0x0b, 0x04, 0x08, 0x05, 0x08, 0x01, 0x10, 0x09, 00634 0x00, 0x08, 0x24, 0x05, 0x48, 0x00, 0x20, 0x01, 0x00, 0x01, 00635 0x01, 0x01, 0x06, 0x78 00636 }; 00637 00638 00639 asize = ARRAY_SIZE(values_204); 00640 00641 for(i=0; i<asize; i++) { 00642 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00643 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00644 00645 usb_stk11xx_write_registry(dev, 0x0203, 0x0050); 00646 00647 usb_stk11xx_write_registry(dev, 0x0204, values_204[i]); 00648 usb_stk11xx_write_registry(dev, 0x0205, values_205[i]); 00649 usb_stk11xx_write_registry(dev, 0x0200, 0x0001); 00650 00651 retok = dev_stk11xx_check_device(dev, 500); 00652 00653 if (retok != 1) { 00654 STK_ERROR("Load default sensor settings fail !\n"); 00655 return -1; 00656 } 00657 00658 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00659 } 00660 00661 // retok = dev_stk11xx_check_device(dev, 500); 00662 00663 return 0; 00664 } 00665 00666 00680 int dev_stk0500_camera_settings(struct usb_stk11xx *dev) 00681 { 00682 return 0; 00683 } 00684 00685 00699 int dev_stk0500_set_camera_quality(struct usb_stk11xx *dev) 00700 { 00701 int value; 00702 00703 usb_stk11xx_write_registry(dev, 0x0200, 0x0000); 00704 00705 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00706 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00707 00708 // Contrast register ? 00709 usb_stk11xx_write_registry(dev, 0x0203, 0x0050); 00710 usb_stk11xx_write_registry(dev, 0x0204, 0x0003); 00711 usb_stk11xx_write_registry(dev, 0x0205, (dev->vsettings.contrast >> 8)); 00712 usb_stk11xx_write_registry(dev, 0x0200, 0x0001); 00713 00714 dev_stk11xx_check_device(dev, 500); 00715 00716 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00717 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00718 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00719 00720 // Whiteness register ? 00721 usb_stk11xx_write_registry(dev, 0x0203, 0x0050); 00722 usb_stk11xx_write_registry(dev, 0x0204, 0x0004); 00723 usb_stk11xx_write_registry(dev, 0x0205, (dev->vsettings.whiteness >> 8)); 00724 usb_stk11xx_write_registry(dev, 0x0200, 0x0001); 00725 00726 dev_stk11xx_check_device(dev, 500); 00727 00728 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00729 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00730 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00731 00732 usb_stk11xx_write_registry(dev, 0x0203, 0x0050); 00733 usb_stk11xx_write_registry(dev, 0x0208, 0x0003); 00734 usb_stk11xx_write_registry(dev, 0x0208, 0x0020); 00735 00736 dev_stk11xx_check_device(dev, 500); 00737 usb_stk11xx_read_registry(dev, 0x0209, &value); 00738 00739 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00740 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00741 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00742 00743 usb_stk11xx_write_registry(dev, 0x0203, 0x0050); 00744 usb_stk11xx_write_registry(dev, 0x0208, 0x0004); 00745 usb_stk11xx_write_registry(dev, 0x0208, 0x0020); 00746 00747 dev_stk11xx_check_device(dev, 500); 00748 usb_stk11xx_read_registry(dev, 0x0209, &value); 00749 00750 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00751 usb_stk11xx_write_registry(dev, 0x0200, 0x0006); 00752 00753 dev_stk11xx_check_device(dev, 500); 00754 00755 STK_DEBUG("Set colour : %d\n", dev->vsettings.colour); 00756 STK_DEBUG("Set contrast : %d\n", dev->vsettings.contrast); 00757 STK_DEBUG("Set whiteness : %d\n", dev->vsettings.whiteness); 00758 STK_DEBUG("Set brightness : %d\n", dev->vsettings.brightness); 00759 00760 return 0; 00761 } 00762 00763 00773 int dev_stk0500_set_camera_fps(struct usb_stk11xx *dev) 00774 { 00775 return 0; 00776 } 00777 00778 00789 int dev_stk0500_start_stream(struct usb_stk11xx *dev) 00790 { 00791 int value; 00792 00793 usb_stk11xx_read_registry(dev, 0x0100, &value); // read 0x21 00794 usb_stk11xx_write_registry(dev, 0x0100, 0x00a1); 00795 00796 usb_stk11xx_read_registry(dev, 0x0100, &value); // read 0xa1 00797 usb_stk11xx_write_registry(dev, 0x0100, 0x00a1); 00798 00799 return 0; 00800 } 00801 00802 00812 int dev_stk0500_reconf_camera(struct usb_stk11xx *dev) 00813 { 00814 dev_stk0500_configure_device(dev, 17); 00815 00816 return 0; 00817 } 00818 00819 00830 int dev_stk0500_stop_stream(struct usb_stk11xx *dev) 00831 { 00832 int value; 00833 00834 usb_stk11xx_write_registry(dev, 0x0100, 0x0021); 00835 usb_stk11xx_read_registry(dev, 0x0000, &value); 00836 usb_stk11xx_write_registry(dev, 0x0000, 0x0048); 00837 00838 return 0; 00839 } 00840