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