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