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
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
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
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
00232
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
00575
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
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
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);
00821 usb_stk11xx_read_registry(dev, 0x0115, &value);
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);
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