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