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