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-6A31 API 00053 // 00054 //============================================================================= 00055 00056 00070 int dev_stk6a31_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_stk6a31_configure_device(dev, 0); 00080 dev_stk11xx_check_device(dev, 65); 00081 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00082 00083 dev_stk6a31_configure_device(dev, 1); 00084 dev_stk11xx_check_device(dev, 65); 00085 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00086 00087 dev_stk6a31_configure_device(dev, 2); 00088 dev_stk11xx_check_device(dev, 65); 00089 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00090 00091 dev_stk6a31_configure_device(dev, 3); 00092 dev_stk11xx_check_device(dev, 65); 00093 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00094 00095 dev_stk6a31_configure_device(dev, 4); 00096 dev_stk11xx_check_device(dev, 65); 00097 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00098 00099 dev_stk6a31_configure_device(dev, 5); 00100 dev_stk11xx_check_device(dev, 65); 00101 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00102 00103 dev_stk6a31_configure_device(dev, 6); 00104 dev_stk11xx_check_device(dev, 65); 00105 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00106 00107 dev_stk6a31_configure_device(dev, 7); 00108 dev_stk11xx_check_device(dev, 65); 00109 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00110 00111 dev_stk6a31_configure_device(dev, 8); 00112 00113 dev_stk6a31_configure_device(dev, 9); 00114 dev_stk11xx_check_device(dev, 65); 00115 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00116 00117 dev_stk6a31_configure_device(dev, 10); 00118 dev_stk11xx_check_device(dev, 65); 00119 usb_stk11xx_write_registry(dev, 0x0200, 0x0008); 00120 00121 dev_stk6a31_configure_device(dev, 11); 00122 00123 dev_stk6a31_configure_device(dev, 12); 00124 00125 dev_stk6a31_configure_device(dev, 13); 00126 00127 dev_stk6a31_configure_device(dev, 14); 00128 00129 dev_stk6a31_camera_asleep(dev); 00130 00131 usb_stk11xx_set_feature(dev, 0); 00132 00133 // Device is initialized and is ready !!! 00134 STK_INFO("Syntek USB2.0 Camera is ready\n"); 00135 00136 return 0; 00137 } 00138 00139 00153 int dev_stk6a31_configure_device(struct usb_stk11xx *dev, int step) 00154 { 00155 int value; 00156 00157 // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 00158 static const int values_001B[] = { 00159 0x03, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07 00160 }; 00161 static const int values_001C[] = { 00162 0x02, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06 00163 }; 00164 static const int values_0202[] = { 00165 0x0a, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x0a, 0x1e, 0x1f, 0x1f, 0x1f, 0x1f 00166 }; 00167 static const int values_0110[] = { 00168 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 00169 }; 00170 static const int values_0112[] = { 00171 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 00172 }; 00173 static const int values_0114[] = { 00174 0x80, 0x80, 0x80, 0x80, 0x00, 0xbe, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80 00175 }; 00176 static const int values_0115[] = { 00177 0x02, 0x02, 0x02, 0x02, 0x05, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x05, 0x02, 0x02, 0x02, 0x02 00178 }; 00179 static const int values_0116[] = { 00180 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe9, 0xe0, 0xe0, 0x00, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0 00181 }; 00182 static const int values_0117[] = { 00183 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 00184 }; 00185 static const int values_0100[] = { 00186 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 00187 }; 00188 00189 00190 STK_DEBUG("dev_stk6a31_configure_device : %d\n", step); 00191 00192 usb_stk11xx_write_registry(dev, 0x0000, 0x0024); 00193 usb_stk11xx_write_registry(dev, 0x0002, 0x0078); 00194 usb_stk11xx_write_registry(dev, 0x0003, 0x0080); 00195 usb_stk11xx_write_registry(dev, 0x0005, 0x0000); 00196 00197 usb_stk11xx_write_registry(dev, 0x0007, 0x0003); 00198 usb_stk11xx_write_registry(dev, 0x000d, 0x0000); 00199 usb_stk11xx_write_registry(dev, 0x000f, 0x0002); 00200 usb_stk11xx_write_registry(dev, 0x0300, 0x0012); 00201 usb_stk11xx_write_registry(dev, 0x0350, 0x0041); 00202 00203 usb_stk11xx_write_registry(dev, 0x0351, 0x0000); 00204 usb_stk11xx_write_registry(dev, 0x0352, 0x0000); 00205 usb_stk11xx_write_registry(dev, 0x0353, 0x0000); 00206 usb_stk11xx_write_registry(dev, 0x0018, 0x0010); 00207 usb_stk11xx_write_registry(dev, 0x0019, 0x0000); 00208 00209 usb_stk11xx_write_registry(dev, 0x001b, values_001B[step]); 00210 usb_stk11xx_write_registry(dev, 0x001c, values_001C[step]); 00211 usb_stk11xx_write_registry(dev, 0x0300, 0x0080); 00212 usb_stk11xx_write_registry(dev, 0x001a, 0x0004); 00213 usb_stk11xx_write_registry(dev, 0x0202, values_0202[step]); 00214 00215 usb_stk11xx_write_registry(dev, 0x0110, values_0110[step]); 00216 usb_stk11xx_write_registry(dev, 0x0111, 0x0000); 00217 usb_stk11xx_write_registry(dev, 0x0112, values_0112[step]); 00218 usb_stk11xx_write_registry(dev, 0x0113, 0x0000); 00219 usb_stk11xx_write_registry(dev, 0x0114, values_0114[step]); 00220 00221 usb_stk11xx_write_registry(dev, 0x0115, values_0115[step]); 00222 usb_stk11xx_write_registry(dev, 0x0116, values_0116[step]); 00223 usb_stk11xx_write_registry(dev, 0x0117, values_0117[step]); 00224 00225 usb_stk11xx_read_registry(dev, 0x0100, &value); 00226 usb_stk11xx_write_registry(dev, 0x0100, values_0100[step]); 00227 00228 // usb_stk11xx_write_registry(dev, 0x0200, 0x0080); 00229 // usb_stk11xx_write_registry(dev, 0x0200, 0x0000); 00230 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00231 00232 00233 switch (step) { 00234 case 0: 00235 usb_stk11xx_write_registry(dev, 0x0203, 0x0022); 00236 00237 usb_stk11xx_write_registry(dev, 0x0204, 0x0027); 00238 usb_stk11xx_write_registry(dev, 0x0205, 0x00a5); 00239 00240 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00241 00242 break; 00243 00244 case 1: 00245 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00246 00247 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00248 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00249 usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 00250 usb_stk11xx_write_registry(dev, 0x0205, 0x00bf); 00251 00252 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00253 00254 break; 00255 00256 case 2: 00257 usb_stk11xx_write_registry(dev, 0x0203, 0x0042); 00258 00259 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00260 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00261 usb_stk11xx_write_registry(dev, 0x0204, 0x0024); 00262 usb_stk11xx_write_registry(dev, 0x0205, 0x00a5); 00263 00264 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00265 00266 break; 00267 00268 case 3: 00269 usb_stk11xx_write_registry(dev, 0x0203, 0x0042); 00270 00271 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00272 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00273 usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 00274 usb_stk11xx_write_registry(dev, 0x0205, 0x00e0); 00275 usb_stk11xx_write_registry(dev, 0x0204, 0x0024); 00276 usb_stk11xx_write_registry(dev, 0x0205, 0x00a5); 00277 00278 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00279 00280 break; 00281 00282 case 4: 00283 usb_stk11xx_write_registry(dev, 0x0203, 0x0042); 00284 00285 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00286 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00287 usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 00288 usb_stk11xx_write_registry(dev, 0x0205, 0x00bf); 00289 00290 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00291 00292 break; 00293 00294 case 5: 00295 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00296 00297 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00298 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00299 usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 00300 usb_stk11xx_write_registry(dev, 0x0205, 0x00ff); 00301 00302 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00303 00304 break; 00305 00306 case 6: 00307 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00308 00309 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00310 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00311 usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 00312 usb_stk11xx_write_registry(dev, 0x0205, 0x00b7); 00313 00314 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00315 00316 break; 00317 00318 case 7: 00319 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00320 00321 usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 00322 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00323 usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 00324 usb_stk11xx_write_registry(dev, 0x0205, 0x00b7); 00325 00326 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00327 00328 break; 00329 00330 case 8: 00331 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00332 00333 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00334 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00335 00336 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00337 usb_stk11xx_write_registry(dev, 0x0204, 0x00ff); 00338 usb_stk11xx_write_registry(dev, 0x0205, 0x0001); 00339 usb_stk11xx_write_registry(dev, 0x0200, 0x0001); 00340 dev_stk11xx_check_device(dev, 500); 00341 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00342 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00343 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00344 00345 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00346 usb_stk11xx_write_registry(dev, 0x0208, 0x000a); 00347 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00348 dev_stk11xx_check_device(dev, 500); 00349 usb_stk11xx_read_registry(dev, 0x0209, &value); 00350 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00351 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00352 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00353 00354 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00355 usb_stk11xx_write_registry(dev, 0x0208, 0x000b); 00356 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00357 dev_stk11xx_check_device(dev, 500); 00358 usb_stk11xx_read_registry(dev, 0x0209, &value); 00359 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00360 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00361 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00362 00363 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00364 usb_stk11xx_write_registry(dev, 0x0208, 0x001c); 00365 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00366 dev_stk11xx_check_device(dev, 500); 00367 usb_stk11xx_read_registry(dev, 0x0209, &value); 00368 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00369 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00370 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00371 00372 usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 00373 usb_stk11xx_write_registry(dev, 0x0208, 0x001d); 00374 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00375 dev_stk11xx_check_device(dev, 500); 00376 usb_stk11xx_read_registry(dev, 0x0209, &value); 00377 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00378 00379 break; 00380 00381 case 9: 00382 usb_stk11xx_write_registry(dev, 0x0203, 0x00dc); 00383 00384 usb_stk11xx_write_registry(dev, 0x0204, 0x0015); 00385 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00386 00387 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00388 00389 break; 00390 00391 case 10: 00392 usb_stk11xx_write_registry(dev, 0x0203, 0x00ec); 00393 00394 usb_stk11xx_write_registry(dev, 0x0204, 0x0015); 00395 usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 00396 00397 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00398 00399 break; 00400 00401 case 11: 00402 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00403 00404 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00405 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00406 00407 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00408 00409 usb_stk11xx_write_registry(dev, 0x0208, 0x0000); 00410 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00411 dev_stk11xx_check_device(dev, 500); 00412 usb_stk11xx_read_registry(dev, 0x0209, &value); 00413 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00414 00415 break; 00416 00417 case 12: 00418 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00419 00420 usb_stk11xx_write_registry(dev, 0x0204, 0x00f0); 00421 usb_stk11xx_write_registry(dev, 0x0205, 0x0000); 00422 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00423 dev_stk11xx_check_device(dev, 500); 00424 usb_stk11xx_write_registry(dev, 0x0204, 0x00f1); 00425 usb_stk11xx_write_registry(dev, 0x0205, 0x0000); 00426 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00427 dev_stk11xx_check_device(dev, 500); 00428 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00429 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00430 00431 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00432 usb_stk11xx_write_registry(dev, 0x0208, 0x0000); 00433 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00434 dev_stk11xx_check_device(dev, 500); 00435 usb_stk11xx_read_registry(dev, 0x0209, &value); 00436 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00437 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00438 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00439 00440 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00441 usb_stk11xx_write_registry(dev, 0x0208, 0x00f1); 00442 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00443 dev_stk11xx_check_device(dev, 500); 00444 usb_stk11xx_read_registry(dev, 0x0209, &value); 00445 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00446 00447 break; 00448 00449 case 13: 00450 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00451 00452 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00453 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00454 00455 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00456 usb_stk11xx_write_registry(dev, 0x0208, 0x0000); 00457 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00458 dev_stk11xx_check_device(dev, 500); 00459 usb_stk11xx_read_registry(dev, 0x0209, &value); 00460 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00461 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00462 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00463 00464 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00465 usb_stk11xx_write_registry(dev, 0x0208, 0x00f1); 00466 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00467 dev_stk11xx_check_device(dev, 500); 00468 usb_stk11xx_read_registry(dev, 0x0209, &value); 00469 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00470 00471 break; 00472 00473 case 14: 00474 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00475 00476 usb_stk11xx_write_registry(dev, 0x0204, 0x0001); 00477 usb_stk11xx_write_registry(dev, 0x0205, 0x0000); 00478 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00479 dev_stk11xx_check_device(dev, 500); 00480 usb_stk11xx_write_registry(dev, 0x0204, 0x00f1); 00481 usb_stk11xx_write_registry(dev, 0x0205, 0x0000); 00482 usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 00483 dev_stk11xx_check_device(dev, 500); 00484 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00485 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00486 00487 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00488 usb_stk11xx_write_registry(dev, 0x0208, 0x0000); 00489 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00490 dev_stk11xx_check_device(dev, 500); 00491 usb_stk11xx_read_registry(dev, 0x0209, &value); 00492 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00493 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00494 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00495 00496 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00497 usb_stk11xx_write_registry(dev, 0x0208, 0x00f1); 00498 usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 00499 dev_stk11xx_check_device(dev, 500); 00500 usb_stk11xx_read_registry(dev, 0x0209, &value); 00501 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00502 00503 break; 00504 00505 case 15: 00506 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00507 00508 dev_stk6a31_sensor_settings(dev); 00509 00510 usb_stk11xx_write_registry(dev, 0x0200, 0x0080); 00511 usb_stk11xx_write_registry(dev, 0x0200, 0x0000); 00512 usb_stk11xx_write_registry(dev, 0x02ff, 0x0001); 00513 usb_stk11xx_write_registry(dev, 0x0203, 0x00a0); 00514 00515 00516 break; 00517 00518 case 16: 00519 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00520 00521 dev_stk6a31_sensor_settings(dev); 00522 00523 break; 00524 } 00525 00526 return 0; 00527 } 00528 00529 00539 int dev_stk6a31_camera_asleep(struct usb_stk11xx *dev) 00540 { 00541 int value; 00542 00543 usb_stk11xx_read_registry(dev, 0x0104, &value); 00544 usb_stk11xx_read_registry(dev, 0x0105, &value); 00545 usb_stk11xx_read_registry(dev, 0x0106, &value); 00546 00547 usb_stk11xx_write_registry(dev, 0x0100, 0x0021); 00548 usb_stk11xx_write_registry(dev, 0x0116, 0x0000); 00549 usb_stk11xx_write_registry(dev, 0x0117, 0x0000); 00550 usb_stk11xx_write_registry(dev, 0x0018, 0x0000); 00551 00552 usb_stk11xx_read_registry(dev, 0x0000, &value); 00553 usb_stk11xx_write_registry(dev, 0x0000, 0x0049); 00554 00555 return 0; 00556 } 00557 00558 00569 int dev_stk6a31_init_camera(struct usb_stk11xx *dev) 00570 { 00571 // int retok; 00572 // int value; 00573 00574 dev_stk6a31_camera_asleep(dev); 00575 00576 usb_stk11xx_set_feature(dev, 0); 00577 00578 dev_stk6a31_camera_asleep(dev); 00579 00580 usb_stk11xx_write_registry(dev, 0x0000, 0x00e0); 00581 usb_stk11xx_write_registry(dev, 0x0002, 0x00f8); 00582 usb_stk11xx_write_registry(dev, 0x0002, 0x0078); 00583 usb_stk11xx_write_registry(dev, 0x0000, 0x0020); 00584 00585 dev_stk6a31_configure_device(dev, 15); 00586 00587 dev_stk11xx_camera_off(dev); 00588 00589 return 0; 00590 } 00591 00592 00603 int dev_stk6a31_sensor_settings(struct usb_stk11xx *dev) 00604 { 00605 int i; 00606 int retok; 00607 int value; 00608 00609 int asize; 00610 static const int values_204[] = { 00611 0xf0, 0xf1, 0x0d, 0xf1, 0x0d, 0xf1, 0xf0, 0xf1, 0x35, 0xf1, 00612 0xf0, 0xf1, 0x06, 0xf1, 0xf0, 0xf1, 0xdd, 0xf1, 0xf0, 0xf1, 00613 0x1f, 0xf1, 0x20, 0xf1, 0x21, 0xf1, 0x22, 0xf1, 0x23, 0xf1, 00614 0x24, 0xf1, 0x28, 0xf1, 0x29, 0xf1, 0x5e, 0xf1, 0x5f, 0xf1, 00615 0x60, 0xf1, 0xef, 0xf1, 0xf2, 0xf1, 0x02, 0xf1, 0x03, 0xf1, 00616 0x04, 0xf1, 0x09, 0xf1, 0x0a, 0xf1, 0x0b, 0xf1, 0x0c, 0xf1, 00617 0x0d, 0xf1, 0x0e, 0xf1, 0x0f, 0xf1, 0x10, 0xf1, 0x11, 0xf1, 00618 0x15, 0xf1, 0x16, 0xf1, 0x17, 0xf1, 0x18, 0xf1, 0x19, 0xf1, 00619 0x1a, 0xf1, 0x1b, 0xf1, 0x1c, 0xf1, 0x1d, 0xf1, 0x1e, 0xf1, 00620 0xf0, 0xf1, 0x06, 0xf1, 0x06, 0xf1, 0xf0, 0xf1, 0x80, 0xf1, 00621 0x81, 0xf1, 0x82, 0xf1, 0x83, 0xf1, 0x84, 0xf1, 0x85, 0xf1, 00622 0x86, 0xf1, 0x87, 0xf1, 0x88, 0xf1, 0x89, 0xf1, 0x8a, 0xf1, 00623 0x8b, 0xf1, 0x8c, 0xf1, 0x8d, 0xf1, 0x8e, 0xf1, 0x8f, 0xf1, 00624 0x90, 0xf1, 0x91, 0xf1, 0x92, 0xf1, 0x93, 0xf1, 0x94, 0xf1, 00625 0x95, 0xf1, 0xb6, 0xf1, 0xb7, 0xf1, 0xb8, 0xf1, 0xb9, 0xf1, 00626 0xba, 0xf1, 0xbb, 0xf1, 0xbc, 0xf1, 0xbd, 0xf1, 0xbe, 0xf1, 00627 0xbf, 0xf1, 0xc0, 0xf1, 0xc1, 0xf1, 0xc2, 0xf1, 0xc3, 0xf1, 00628 0xc4, 0xf1, 0x06, 0xf1, 0xf0, 0xf1, 0x53, 0xf1, 0x54, 0xf1, 00629 0x55, 0xf1, 0x56, 0xf1, 0x57, 0xf1, 0x58, 0xf1, 0xdc, 0xf1, 00630 0xdd, 0xf1, 0xde, 0xf1, 0xdf, 0xf1, 0xe0, 0xf1, 0xe1, 0xf1, 00631 0xf0, 0xf1, 0xa7, 0xf1, 0xaa, 0xf1, 0x3a, 0xf1, 0xa1, 0xf1, 00632 0xa4, 0xf1, 0x9b, 0xf1, 0x08, 0xf1, 0xf0, 0xf1, 0x2f, 0xf1, 00633 0x9c, 0xf1, 0xd2, 0xf1, 0xcc, 0xf1, 0xcb, 0xf1, 0x2e, 0xf1, 00634 0x67, 0xf1, 0xf0, 0xf1, 0x65, 0xf1, 0x66, 0xf1, 0x67, 0xf1, 00635 0x65, 0xf1, 0xf0, 0xf1, 0x05, 0xf1, 0x07, 0xf1, 0xf0, 0xf1, 00636 0x39, 0xf1, 0x3b, 0xf1, 0x3a, 0xf1, 0x3c, 0xf1, 0x57, 0xf1, 00637 0x58, 0xf1, 0x59, 0xf1, 0x5a, 0xf1, 0x5c, 0xf1, 0x5d, 0xf1, 00638 0x64, 0xf1, 0xf0, 0xf1, 0x5b, 0xf1, 0xf0, 0xf1, 0x36, 0xf1, 00639 0x37, 0xf1, 0xf0, 0xf1, 0x08, 0xf1 00640 }; 00641 static const int values_205[] = { 00642 0x00, 0x00, 0x00, 0x0b, 0x00, 0x08, 0x00, 0x00, 0x00, 0x22, 00643 0x00, 0x01, 0x70, 0x0e, 0x00, 0x02, 0x18, 0xe0, 0x00, 0x02, 00644 0x01, 0x80, 0xc8, 0x14, 0x80, 0x80, 0xa0, 0x78, 0xa0, 0x78, 00645 0x5f, 0x20, 0xea, 0x02, 0x86, 0x7a, 0x59, 0x4c, 0x4d, 0x51, 00646 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0xee, 0x39, 0x23, 00647 0x07, 0x24, 0x00, 0xcd, 0x00, 0x93, 0x00, 0x04, 0x00, 0x5c, 00648 0x00, 0xd9, 0x00, 0x53, 0x00, 0x08, 0x00, 0x91, 0x00, 0xcf, 00649 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 00650 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 00651 0x00, 0x01, 0xf0, 0x0e, 0x70, 0x0e, 0x00, 0x01, 0x00, 0x07, 00652 0xde, 0x13, 0xeb, 0xe2, 0x00, 0xf6, 0xe1, 0x14, 0xea, 0xdd, 00653 0xfd, 0xf6, 0xe5, 0x11, 0xed, 0xe6, 0xfb, 0xf7, 0xd6, 0x13, 00654 0xed, 0xec, 0xf9, 0xf2, 0x00, 0x00, 0xd8, 0x15, 0xe9, 0xea, 00655 0xf9, 0xf1, 0x00, 0x02, 0xde, 0x10, 0xef, 0xef, 0xfb, 0xf4, 00656 0x00, 0x02, 0x0e, 0x06, 0x27, 0x13, 0x11, 0x06, 0x27, 0x13, 00657 0x0c, 0x03, 0x2a, 0x0f, 0x12, 0x08, 0x1a, 0x16, 0x00, 0x22, 00658 0x15, 0x0a, 0x1c, 0x1a, 0x00, 0x2d, 0x11, 0x09, 0x14, 0x14, 00659 0x00, 0x2a, 0x74, 0x0e, 0x00, 0x01, 0x0b, 0x03, 0x47, 0x22, 00660 0xac, 0x82, 0xda, 0xc7, 0xf5, 0xe9, 0xff, 0x00, 0x0b, 0x03, 00661 0x47, 0x22, 0xac, 0x82, 0xda, 0xc7, 0xf5, 0xe9, 0xff, 0x00, 00662 0x00, 0x01, 0x02, 0x80, 0x01, 0xe0, 0x43, 0x00, 0x05, 0x00, 00663 0x04, 0x00, 0x43, 0x00, 0x01, 0x80, 0x00, 0x02, 0xd1, 0x00, 00664 0xd1, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x0c, 0x3c, 00665 0x10, 0x10, 0x00, 0x00, 0xa0, 0x00, 0x20, 0x03, 0x05, 0x01, 00666 0x20, 0x00, 0x00, 0x00, 0x01, 0xb8, 0x00, 0xd8, 0x00, 0x02, 00667 0x06, 0xc0, 0x04, 0x0e, 0x06, 0xc0, 0x05, 0x64, 0x02, 0x08, 00668 0x02, 0x71, 0x02, 0x09, 0x02, 0x71, 0x12, 0x0d, 0x17, 0x12, 00669 0x5e, 0x1c, 0x00, 0x02, 0x00, 0x03, 0x00, 0x02, 0x78, 0x10, 00670 0x83, 0x04, 0x00, 0x00, 0x00, 0x21 00671 }; 00672 00673 00674 asize = ARRAY_SIZE(values_204); 00675 00676 for(i=0; i<asize; i++) { 00677 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00678 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00679 00680 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 00681 00682 usb_stk11xx_write_registry(dev, 0x0204, values_204[i]); 00683 usb_stk11xx_write_registry(dev, 0x0205, values_205[i]); 00684 usb_stk11xx_write_registry(dev, 0x0200, 0x0001); 00685 00686 retok = dev_stk11xx_check_device(dev, 500); 00687 00688 if (retok != 1) { 00689 STK_ERROR("Load default sensor settings fail !\n"); 00690 return -1; 00691 } 00692 00693 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00694 } 00695 00696 retok = dev_stk11xx_check_device(dev, 500); 00697 00698 return 0; 00699 } 00700 00701 00715 int dev_stk6a31_camera_settings(struct usb_stk11xx *dev) 00716 { 00717 int i; 00718 int value; 00719 00720 int asize; 00721 static const int values_204[] = { 00722 0xf0, 0xf1, 0x2e, 0xf1, 0xf0, 0xf1, 0x5b, 0xf1, 0xf0, 0xf1, 0x36, 0xf1, 0x37, 0xf1, 0xf0, 0xf1, 0x08, 0xf1 00723 }; 00724 static const int values_205[] = { 00725 0x00, 0x02, 0x0c, 0x3c, 0x00, 0x02, 0x00, 0x03, 0x00, 0x02, 0x78, 0x10, 0x83, 0x04, 0x00, 0x00, 0x00, 0x21 00726 }; 00727 00728 00729 asize = ARRAY_SIZE(values_204); 00730 00731 // Contrast register 00732 for (i=0; i<asize; i++) { 00733 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00734 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00735 00736 usb_stk11xx_write_registry(dev, 0x0204, values_204[i]); 00737 usb_stk11xx_write_registry(dev, 0x0205, values_205[i]); 00738 00739 usb_stk11xx_write_registry(dev, 0x0200, 0x0001); 00740 dev_stk11xx_check_device(dev, 500); 00741 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00742 } 00743 00744 return 0; 00745 } 00746 00747 00761 int dev_stk6a31_set_camera_quality(struct usb_stk11xx *dev) 00762 { 00763 int value; 00764 00765 // Contrast register 00766 usb_stk11xx_read_registry(dev, 0x02ff, &value); 00767 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00768 00769 usb_stk11xx_write_registry(dev, 0x0204, 0x00b3); 00770 usb_stk11xx_write_registry(dev, 0x0205, (dev->vsettings.contrast >> 8)); 00771 00772 usb_stk11xx_write_registry(dev, 0x0200, 0x0001); 00773 dev_stk11xx_check_device(dev, 500); 00774 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 00775 00776 STK_DEBUG("Set colour : %d\n", dev->vsettings.colour); 00777 STK_DEBUG("Set contrast : %d\n", dev->vsettings.contrast); 00778 STK_DEBUG("Set whiteness : %d\n", dev->vsettings.whiteness); 00779 STK_DEBUG("Set brightness : %d\n", dev->vsettings.brightness); 00780 00781 return 0; 00782 } 00783 00784 00794 int dev_stk6a31_set_camera_fps(struct usb_stk11xx *dev) 00795 { 00796 return 0; 00797 } 00798 00799 00810 int dev_stk6a31_start_stream(struct usb_stk11xx *dev) 00811 { 00812 int value; 00813 int value_116, value_117; 00814 00815 usb_stk11xx_read_registry(dev, 0x0114, &value); // read 0x80 00816 usb_stk11xx_read_registry(dev, 0x0115, &value); // read 0x02 00817 00818 usb_stk11xx_read_registry(dev, 0x0116, &value_116); 00819 usb_stk11xx_read_registry(dev, 0x0117, &value_117); 00820 00821 usb_stk11xx_write_registry(dev, 0x0116, 0x0000); 00822 usb_stk11xx_write_registry(dev, 0x0117, 0x0000); 00823 00824 usb_stk11xx_read_registry(dev, 0x0100, &value); // read 0x21 00825 usb_stk11xx_write_registry(dev, 0x0100, 0x00a0); 00826 00827 usb_stk11xx_write_registry(dev, 0x0116, value_116); 00828 usb_stk11xx_write_registry(dev, 0x0117, value_117); 00829 00830 return 0; 00831 } 00832 00833 00843 int dev_stk6a31_reconf_camera(struct usb_stk11xx *dev) 00844 { 00845 dev_stk6a31_configure_device(dev, 16); 00846 00847 dev_stk11xx_camera_settings(dev); 00848 00849 return 0; 00850 } 00851 00852 00863 int dev_stk6a31_stop_stream(struct usb_stk11xx *dev) 00864 { 00865 return 0; 00866 } 00867