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_stka821_initialize_device(struct usb_stk11xx *dev)
00070 {
00071 int i;
00072 int retok;
00073 int value;
00074
00075 STK_INFO("Initialize USB2.0 Syntek Camera\n");
00076
00077 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00078 usb_stk11xx_write_registry(dev, 0x0002, 0x0068);
00079 usb_stk11xx_write_registry(dev, 0x0003, 0x0080);
00080
00081 usb_stk11xx_write_registry(dev, 0x0002, 0x006f);
00082 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00083 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00084 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00085 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
00086 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00087 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00088 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
00089 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00090 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00091 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00092 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00093 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00094 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
00095 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00096 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00097 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00098 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00099 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00100 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
00101 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00102 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00103 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00104 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00105 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00106 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
00107 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00108 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00109 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00110 usb_stk11xx_write_registry(dev, 0x0002, 0x006d);
00111 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00112
00113 for (i=0; i<16; i++) {
00114 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00115 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00116 usb_stk11xx_read_registry(dev, 0x0000, &value);
00117
00118 STK_DEBUG("Loop 1 : Read 0x0000 = %02X\n", value);
00119 }
00120
00121 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00122 usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
00123
00124 usb_stk11xx_write_registry(dev, 0x0002, 0x006f);
00125 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00126 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00127 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00128 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
00129 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00130 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00131 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
00132 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00133 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00134 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00135 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00136 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00137 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00138 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00139 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00140 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00141 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00142 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00143 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
00144 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00145 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00146 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00147 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00148 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00149 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
00150 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00151 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00152 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00153 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00154 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00155 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
00156 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00157 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00158 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00159 usb_stk11xx_write_registry(dev, 0x0002, 0x006d);
00160 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00161
00162 for (i=0; i<16; i++) {
00163 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00164 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00165 usb_stk11xx_read_registry(dev, 0x0000, &value);
00166
00167 STK_DEBUG("Loop 2 : Read 0x0000 = %02X\n", value);
00168 }
00169
00170 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00171 usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
00172
00173 usb_stk11xx_write_registry(dev, 0x0002, 0x006f);
00174 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00175 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00176 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00177 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
00178 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00179 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00180 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
00181 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00182 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00183 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00184 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00185 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00186 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00187 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00188 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00189 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00190 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00191 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00192 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00193 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00194 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00195 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00196 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00197 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00198 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
00199 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00200 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00201 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00202 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00203 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00204 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
00205 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00206 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00207 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00208 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00209 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00210 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
00211 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
00212 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00213 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00214 usb_stk11xx_write_registry(dev, 0x0002, 0x006d);
00215 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00216
00217 for (i=0; i<16; i++) {
00218 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00219 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00220 usb_stk11xx_read_registry(dev, 0x0000, &value);
00221
00222 STK_DEBUG("Loop 3 : Read 0x0000 = %02X\n", value);
00223 }
00224
00225 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00226 usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
00227 usb_stk11xx_write_registry(dev, 0x0002, 0x006f);
00228 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00229 usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
00230
00231 usb_stk11xx_write_registry(dev, 0x0117, 0x0000);
00232 usb_stk11xx_read_registry(dev, 0x0103, &value);
00233 usb_stk11xx_write_registry(dev, 0x0103, 0x0001);
00234 usb_stk11xx_read_registry(dev, 0x0103, &value);
00235 usb_stk11xx_write_registry(dev, 0x0103, 0x0000);
00236
00237 usb_stk11xx_write_registry(dev, 0x0000, 0x00e0);
00238 usb_stk11xx_write_registry(dev, 0x0002, 0x00e8);
00239 usb_stk11xx_write_registry(dev, 0x0002, 0x0068);
00240 usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
00241
00242 dev_stka821_configure_device(dev, 0);
00243 retok = dev_stk11xx_check_device(dev, 65);
00244 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00245
00246 dev_stka821_configure_device(dev, 1);
00247 retok = dev_stk11xx_check_device(dev, 65);
00248 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00249
00250 dev_stka821_configure_device(dev, 2);
00251 retok = dev_stk11xx_check_device(dev, 65);
00252 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00253
00254 dev_stka821_configure_device(dev, 3);
00255 retok = dev_stk11xx_check_device(dev, 65);
00256 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00257
00258 dev_stka821_configure_device(dev, 4);
00259 retok = dev_stk11xx_check_device(dev, 65);
00260 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00261
00262 dev_stka821_configure_device(dev, 5);
00263 retok = dev_stk11xx_check_device(dev, 65);
00264 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00265
00266 dev_stka821_configure_device(dev, 6);
00267 retok = dev_stk11xx_check_device(dev, 65);
00268 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00269
00270 dev_stka821_configure_device(dev, 7);
00271 retok = dev_stk11xx_check_device(dev, 65);
00272 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00273
00274 dev_stka821_configure_device(dev, 8);
00275 retok = dev_stk11xx_check_device(dev, 65);
00276 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00277
00278 dev_stka821_configure_device(dev, 9);
00279 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00280 usb_stk11xx_write_registry(dev, 0x0002, 0x006d);
00281 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00282 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
00283 usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
00284
00285 dev_stka821_configure_device(dev, 10);
00286 usb_stk11xx_write_registry(dev, 0x0200, 0x0080);
00287 usb_stk11xx_write_registry(dev, 0x0200, 0x0000);
00288 usb_stk11xx_write_registry(dev, 0x02ff, 0x0001);
00289 usb_stk11xx_write_registry(dev, 0x0203, 0x00a0);
00290
00291 dev_stka821_camera_asleep(dev);
00292
00293 usb_stk11xx_set_feature(dev, 0);
00294
00295
00296 STK_INFO("Syntek USB2.0 Camera is ready\n");
00297
00298 return 0;
00299 }
00300
00301
00315 int dev_stka821_configure_device(struct usb_stk11xx *dev, int step)
00316 {
00317 int retok;
00318 int value;
00319
00320
00321 static const int values_001B[] = {
00322 0x0e, 0x03, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x07, 0x07, 0x07, 0x07, 0x07
00323 };
00324 static const int values_001C[] = {
00325 0x06, 0x02, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06
00326 };
00327 static const int values_0202[] = {
00328 0x1e, 0x0a, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e
00329 };
00330 static const int values_0110[] = {
00331 0x07, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00
00332 };
00333 static const int values_0112[] = {
00334 0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00
00335 };
00336 static const int values_0114[] = {
00337 0x87, 0x80, 0x80, 0x80, 0x80, 0xbe, 0xbe, 0x80, 0x84, 0x80, 0x80, 0x80, 0x80, 0x80
00338 };
00339 static const int values_0116[] = {
00340 0xe7, 0xe0, 0xe0, 0xe0, 0xe0, 0xe9, 0xe9, 0xe0, 0xe4, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0
00341 };
00342 static const int values_0100[] = {
00343 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20
00344 };
00345
00346 STK_DEBUG("dev_stka821_configure_device : %d\n", step);
00347
00348 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00349 usb_stk11xx_write_registry(dev, 0x0002, 0x0068);
00350 usb_stk11xx_write_registry(dev, 0x0003, 0x0080);
00351 usb_stk11xx_write_registry(dev, 0x0005, 0x0000);
00352
00353 usb_stk11xx_write_registry(dev, 0x0007, 0x0003);
00354 usb_stk11xx_write_registry(dev, 0x000d, 0x0000);
00355 usb_stk11xx_write_registry(dev, 0x000f, 0x0002);
00356 usb_stk11xx_write_registry(dev, 0x0300, 0x0012);
00357 usb_stk11xx_write_registry(dev, 0x0350, 0x0041);
00358
00359 usb_stk11xx_write_registry(dev, 0x0351, 0x0000);
00360 usb_stk11xx_write_registry(dev, 0x0352, 0x0000);
00361 usb_stk11xx_write_registry(dev, 0x0353, 0x0000);
00362 usb_stk11xx_write_registry(dev, 0x0018, 0x0010);
00363 usb_stk11xx_write_registry(dev, 0x0019, 0x0000);
00364
00365 usb_stk11xx_write_registry(dev, 0x001b, values_001B[step]);
00366 usb_stk11xx_write_registry(dev, 0x001c, values_001C[step]);
00367 usb_stk11xx_write_registry(dev, 0x0300, 0x0080);
00368 usb_stk11xx_write_registry(dev, 0x001a, 0x0004);
00369 usb_stk11xx_write_registry(dev, 0x0202, values_0202[step]);
00370
00371 usb_stk11xx_write_registry(dev, 0x0110, values_0110[step]);
00372 usb_stk11xx_write_registry(dev, 0x0111, 0x0000);
00373 usb_stk11xx_write_registry(dev, 0x0112, values_0112[step]);
00374 usb_stk11xx_write_registry(dev, 0x0113, 0x0000);
00375 usb_stk11xx_write_registry(dev, 0x0114, values_0114[step]);
00376
00377 usb_stk11xx_write_registry(dev, 0x0115, 0x0002);
00378 usb_stk11xx_write_registry(dev, 0x0116, values_0116[step]);
00379 usb_stk11xx_write_registry(dev, 0x0117, 0x0001);
00380
00381 usb_stk11xx_read_registry(dev, 0x0100, &value);
00382 usb_stk11xx_write_registry(dev, 0x0100, values_0100[step]);
00383
00384 usb_stk11xx_write_registry(dev, 0x0200, 0x0080);
00385 usb_stk11xx_write_registry(dev, 0x0200, 0x0000);
00386 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00387
00388
00389 switch (step) {
00390 case 0:
00391 usb_stk11xx_write_registry(dev, 0x0203, 0x0040);
00392
00393 usb_stk11xx_write_registry(dev, 0x0204, 0x0041);
00394 usb_stk11xx_write_registry(dev, 0x0205, 0x0001);
00395 usb_stk11xx_write_registry(dev, 0x0204, 0x001c);
00396 usb_stk11xx_write_registry(dev, 0x0205, 0x0002);
00397
00398 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
00399
00400 break;
00401
00402 case 1:
00403 usb_stk11xx_write_registry(dev, 0x0203, 0x0022);
00404
00405 usb_stk11xx_write_registry(dev, 0x0204, 0x0027);
00406 usb_stk11xx_write_registry(dev, 0x0205, 0x00a5);
00407
00408 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
00409
00410 break;
00411
00412 case 2:
00413 usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
00414
00415 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
00416 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
00417 usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
00418 usb_stk11xx_write_registry(dev, 0x0205, 0x00bf);
00419
00420 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
00421
00422 break;
00423
00424 case 3:
00425 usb_stk11xx_write_registry(dev, 0x0203, 0x0042);
00426
00427 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
00428 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
00429 usb_stk11xx_write_registry(dev, 0x0204, 0x0024);
00430 usb_stk11xx_write_registry(dev, 0x0205, 0x00a5);
00431
00432 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
00433
00434 break;
00435
00436 case 4:
00437 usb_stk11xx_write_registry(dev, 0x0203, 0x0042);
00438
00439 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
00440 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
00441 usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
00442 usb_stk11xx_write_registry(dev, 0x0205, 0x00e0);
00443 usb_stk11xx_write_registry(dev, 0x0204, 0x0024);
00444 usb_stk11xx_write_registry(dev, 0x0205, 0x00a5);
00445
00446 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
00447
00448 break;
00449
00450 case 5:
00451 usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
00452
00453 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
00454 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
00455 usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
00456 usb_stk11xx_write_registry(dev, 0x0205, 0x00ff);
00457
00458 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
00459
00460 break;
00461
00462 case 6:
00463 usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
00464
00465 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
00466 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
00467 usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
00468 usb_stk11xx_write_registry(dev, 0x0205, 0x00ff);
00469
00470 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
00471
00472 break;
00473
00474 case 7:
00475 usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
00476
00477 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
00478 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
00479 usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
00480 usb_stk11xx_write_registry(dev, 0x0205, 0x00b7);
00481
00482 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
00483
00484 break;
00485
00486 case 8:
00487 usb_stk11xx_write_registry(dev, 0x0203, 0x0080);
00488
00489 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
00490 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
00491 usb_stk11xx_write_registry(dev, 0x0204, 0x000a);
00492 usb_stk11xx_write_registry(dev, 0x0205, 0x00ff);
00493
00494 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
00495
00496 break;
00497
00498 case 9:
00499 usb_stk11xx_write_registry(dev, 0x0203, 0x00dc);
00500
00501 usb_stk11xx_write_registry(dev, 0x0204, 0x0015);
00502 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
00503
00504 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
00505
00506 retok = dev_stk11xx_check_device(dev, 500);
00507 usb_stk11xx_read_registry(dev, 0x02ff, &value);
00508 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00509 usb_stk11xx_write_registry(dev, 0x0208, 0x0000);
00510 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
00511 retok = dev_stk11xx_check_device(dev, 500);
00512 usb_stk11xx_read_registry(dev, 0x0209, &value);
00513 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00514 usb_stk11xx_read_registry(dev, 0x02ff, &value);
00515 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00516 usb_stk11xx_write_registry(dev, 0x0208, 0x0001);
00517 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
00518 retok = dev_stk11xx_check_device(dev, 500);
00519 usb_stk11xx_read_registry(dev, 0x0209, &value);
00520 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00521 usb_stk11xx_read_registry(dev, 0x02ff, &value);
00522 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00523 usb_stk11xx_write_registry(dev, 0x0208, 0x0002);
00524 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
00525 retok = dev_stk11xx_check_device(dev, 500);
00526 usb_stk11xx_read_registry(dev, 0x0209, &value);
00527 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00528 usb_stk11xx_write_registry(dev, 0x0002, 0x006f);
00529
00530 break;
00531
00532 case 10:
00533 usb_stk11xx_write_registry(dev, 0x0203, 0x00dc);
00534
00535 dev_stka821_sensor_settings(dev);
00536
00537 break;
00538
00539 case 11:
00540 usb_stk11xx_write_registry(dev, 0x0203, 0x00dc);
00541
00542 dev_stka821_sensor_settings(dev);
00543
00544 usb_stk11xx_write_registry(dev, 0x0104, 0x0000);
00545 usb_stk11xx_write_registry(dev, 0x0105, 0x0000);
00546 usb_stk11xx_write_registry(dev, 0x0106, 0x0000);
00547
00548 break;
00549
00550 case 12:
00551 usb_stk11xx_write_registry(dev, 0x0203, 0x00dc);
00552
00553 dev_stka821_sensor_settings(dev);
00554
00555 usb_stk11xx_write_registry(dev, 0x0104, 0x0000);
00556 usb_stk11xx_write_registry(dev, 0x0105, 0x0000);
00557 usb_stk11xx_write_registry(dev, 0x0106, 0x0000);
00558
00559 break;
00560
00561 case 13:
00562 usb_stk11xx_write_registry(dev, 0x0203, 0x00dc);
00563
00564 dev_stka821_sensor_settings(dev);
00565
00566 usb_stk11xx_write_registry(dev, 0x0106, 0x0000);
00567 }
00568
00569 return 0;
00570 }
00571
00572
00582 int dev_stka821_camera_asleep(struct usb_stk11xx *dev)
00583 {
00584 int value;
00585
00586 usb_stk11xx_read_registry(dev, 0x0104, &value);
00587 usb_stk11xx_read_registry(dev, 0x0105, &value);
00588 usb_stk11xx_read_registry(dev, 0x0106, &value);
00589
00590 usb_stk11xx_write_registry(dev, 0x0100, 0x0021);
00591 usb_stk11xx_write_registry(dev, 0x0116, 0x0000);
00592 usb_stk11xx_write_registry(dev, 0x0117, 0x0000);
00593 usb_stk11xx_write_registry(dev, 0x0018, 0x0000);
00594
00595 usb_stk11xx_read_registry(dev, 0x0000, &value);
00596 usb_stk11xx_write_registry(dev, 0x0000, 0x0049);
00597
00598 return 0;
00599 }
00600
00601
00612 int dev_stka821_init_camera(struct usb_stk11xx *dev)
00613 {
00614
00615
00616
00617 dev_stka821_camera_asleep(dev);
00618
00619 usb_stk11xx_set_feature(dev, 0);
00620
00621 usb_stk11xx_write_registry(dev, 0x0000, 0x00e0);
00622 usb_stk11xx_write_registry(dev, 0x0002, 0x00e8);
00623 usb_stk11xx_write_registry(dev, 0x0002, 0x0068);
00624 usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
00625
00626 dev_stka821_configure_device(dev, 11);
00627
00628 dev_stk11xx_camera_off(dev);
00629
00630 dev_stka821_camera_settings(dev);
00631
00632 dev_stka821_camera_asleep(dev);
00633
00634 usb_stk11xx_set_feature(dev, 0);
00635
00636 usb_stk11xx_write_registry(dev, 0x0000, 0x00e0);
00637 usb_stk11xx_write_registry(dev, 0x0002, 0x00e8);
00638 usb_stk11xx_write_registry(dev, 0x0002, 0x0068);
00639 usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
00640
00641 dev_stka821_configure_device(dev, 12);
00642
00643 dev_stk11xx_camera_off(dev);
00644
00645 dev_stka821_camera_settings(dev);
00646
00647 return 0;
00648 }
00649
00650
00661 int dev_stka821_sensor_settings(struct usb_stk11xx *dev)
00662 {
00663 int i;
00664 int retok;
00665 int value;
00666
00667 int asize;
00668 static const int values_204[] = {
00669 0x17, 0x19, 0xb4, 0xa6, 0x12, 0x13, 0x1e, 0x21, 0x24, 0x32,
00670 0x36, 0x39, 0x4d, 0x53, 0x5d, 0x5f, 0x60, 0x61, 0x62, 0x63,
00671 0x64, 0x65, 0x66, 0x82, 0x83, 0x85, 0x86, 0x89, 0x97, 0x98,
00672 0xad, 0xae, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbf, 0x48, 0xd8,
00673 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
00674 0x80, 0x81, 0xd8, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c,
00675 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0xd8, 0x76, 0x77, 0x78, 0x79,
00676 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x5c, 0xc0,
00677 0x59, 0x5a, 0x5b, 0xd4, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93,
00678 0x94, 0x95, 0x96, 0xb3, 0x73, 0x06, 0x07, 0x0b, 0x15, 0x20,
00679 0x4e, 0x4f, 0x49, 0x4a, 0x4b, 0x4c, 0x46, 0x06, 0x07, 0xb9,
00680 0xba, 0xbb, 0xbc, 0x61, 0x62, 0x65, 0x66
00681 };
00682 static const int values_205[] = {
00683 0x41, 0x41, 0x03, 0x06, 0x06, 0x08, 0x06, 0x00, 0x02, 0x69,
00684 0x35, 0x60, 0xfe, 0x1c, 0x04, 0x08, 0x08, 0x08, 0x08, 0x00,
00685 0x00, 0x10, 0x14, 0x01, 0x80, 0x0c, 0xb6, 0x00, 0x25, 0x25,
00686 0x3f, 0x24, 0x10, 0x07, 0xcc, 0x1f, 0x30, 0x02, 0x9c, 0x80,
00687 0x00, 0x0d, 0x18, 0x22, 0x2c, 0x3e, 0x4f, 0x6f, 0x8e, 0xac,
00688 0xc8, 0xe5, 0xa0, 0x00, 0x0d, 0x18, 0x22, 0x2c, 0x3e, 0x4f,
00689 0x6f, 0x8e, 0xac, 0xc8, 0xe5, 0xc0, 0x00, 0x0d, 0x18, 0x22,
00690 0x2c, 0x3e, 0x4f, 0x6f, 0x8e, 0xac, 0xc8, 0xe5, 0x70, 0x18,
00691 0x09, 0x07, 0x07, 0x3c, 0x3d, 0x95, 0x88, 0x89, 0x47, 0x9c,
00692 0x81, 0x9c, 0x3d, 0x76, 0x76, 0x01, 0xf3, 0x05, 0x00, 0x44,
00693 0x06, 0x0a, 0x96, 0x00, 0x7d, 0x00, 0x20, 0x01, 0xf3, 0x04,
00694 0xe4, 0x09, 0xc8, 0x08, 0x08, 0x10, 0x14
00695 };
00696
00697
00698 asize = ARRAY_SIZE(values_204);
00699
00700 for(i=0; i<asize; i++) {
00701 usb_stk11xx_read_registry(dev, 0x02ff, &value);
00702 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00703
00704 usb_stk11xx_write_registry(dev, 0x0204, values_204[i]);
00705 usb_stk11xx_write_registry(dev, 0x0205, values_205[i]);
00706 usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
00707
00708 retok = dev_stk11xx_check_device(dev, 500);
00709
00710 if (retok != 1) {
00711 STK_ERROR("Load default sensor settings fail !\n");
00712 return -1;
00713 }
00714
00715 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00716 }
00717
00718 retok = dev_stk11xx_check_device(dev, 500);
00719
00720 return 0;
00721 }
00722
00723
00737 int dev_stka821_camera_settings(struct usb_stk11xx *dev)
00738 {
00739 int i;
00740 int ret;
00741 int value;
00742
00743 int asize;
00744 static const int values_204[] = {
00745 0xb3, 0x73, 0x46, 0x06, 0x07, 0xb9, 0xba, 0xbb, 0xbc, 0x61, 0x62, 0x65, 0x66
00746 };
00747 static const int values_205[] = {
00748 0x76, 0x76, 0x20, 0x01, 0xf3, 0x04, 0xe4, 0x09, 0xc8, 0x08, 0x08, 0x10, 0x14
00749 };
00750
00751
00752
00753 usb_stk11xx_read_registry(dev, 0x02ff, &value);
00754 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00755
00756 usb_stk11xx_write_registry(dev, 0x0204, 0x00b3);
00757 usb_stk11xx_write_registry(dev, 0x0205, (dev->vsettings.contrast >> 8));
00758
00759 usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
00760 ret = dev_stk11xx_check_device(dev, 500);
00761 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00762
00763 asize = ARRAY_SIZE(values_204);
00764
00765 for (i=1; i<asize; i++) {
00766 usb_stk11xx_read_registry(dev, 0x02ff, &value);
00767 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00768
00769 usb_stk11xx_write_registry(dev, 0x0204, values_204[i]);
00770 usb_stk11xx_write_registry(dev, 0x0205, values_205[i]);
00771
00772 usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
00773 ret = dev_stk11xx_check_device(dev, 500);
00774 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00775 }
00776
00777 return 0;
00778 }
00779
00780
00794 int dev_stka821_set_camera_quality(struct usb_stk11xx *dev)
00795 {
00796 int ret;
00797 int value;
00798
00799
00800 usb_stk11xx_read_registry(dev, 0x02ff, &value);
00801 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00802
00803 usb_stk11xx_write_registry(dev, 0x0204, 0x00b3);
00804 usb_stk11xx_write_registry(dev, 0x0205, (dev->vsettings.contrast >> 8));
00805
00806 usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
00807 ret = dev_stk11xx_check_device(dev, 500);
00808 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00809
00810 STK_DEBUG("Set colour : %d\n", dev->vsettings.colour);
00811 STK_DEBUG("Set contrast : %d\n", dev->vsettings.contrast);
00812 STK_DEBUG("Set whiteness : %d\n", dev->vsettings.whiteness);
00813 STK_DEBUG("Set brightness : %d\n", dev->vsettings.brightness);
00814
00815 return 0;
00816 }
00817
00818
00828 int dev_stka821_set_camera_fps(struct usb_stk11xx *dev)
00829 {
00830 return 0;
00831 }
00832
00833
00844 int dev_stka821_start_stream(struct usb_stk11xx *dev)
00845 {
00846 int value;
00847 int value_116, value_117;
00848
00849 usb_stk11xx_read_registry(dev, 0x0116, &value_116);
00850 usb_stk11xx_read_registry(dev, 0x0117, &value_117);
00851
00852 usb_stk11xx_write_registry(dev, 0x0116, 0x0000);
00853 usb_stk11xx_write_registry(dev, 0x0117, 0x0000);
00854
00855 usb_stk11xx_read_registry(dev, 0x0100, &value);
00856 usb_stk11xx_write_registry(dev, 0x0100, 0x00a0);
00857
00858 usb_stk11xx_write_registry(dev, 0x0116, value_116);
00859 usb_stk11xx_write_registry(dev, 0x0117, value_117);
00860
00861 return 0;
00862 }
00863
00864
00874 int dev_stka821_reconf_camera(struct usb_stk11xx *dev)
00875 {
00876 dev_stka821_configure_device(dev, 13);
00877
00878 dev_stk11xx_camera_settings(dev);
00879
00880 return 0;
00881 }
00882
00883
00894 int dev_stka821_stop_stream(struct usb_stk11xx *dev)
00895 {
00896 int value;
00897
00898 usb_stk11xx_read_registry(dev, 0x0100, &value);
00899 usb_stk11xx_write_registry(dev, 0x0100, 0x0020);
00900
00901 return 0;
00902 }
00903