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