SyntekUSBVideoCamera
stk11xx-dev-0500.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-0500 API
00053 //
00054 //=============================================================================
00055 
00056 
00070 int dev_stk0500_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_stk0500_configure_device(dev, 0);
00080     dev_stk11xx_check_device(dev, 65);
00081     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00082 
00083     dev_stk0500_configure_device(dev, 1);
00084     dev_stk11xx_check_device(dev, 65);
00085     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00086 
00087     dev_stk0500_configure_device(dev, 2);
00088     dev_stk11xx_check_device(dev, 65);
00089     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00090 
00091     dev_stk0500_configure_device(dev, 3);
00092     dev_stk11xx_check_device(dev, 65);
00093     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00094 
00095     dev_stk0500_configure_device(dev, 4);
00096     dev_stk11xx_check_device(dev, 65);
00097     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00098 
00099     dev_stk0500_configure_device(dev, 5);
00100     dev_stk11xx_check_device(dev, 65);
00101     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00102 
00103     dev_stk0500_configure_device(dev, 6);
00104     dev_stk11xx_check_device(dev, 65);
00105     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00106 
00107     dev_stk0500_configure_device(dev, 7);
00108     dev_stk11xx_check_device(dev, 65);
00109     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00110 
00111     dev_stk0500_configure_device(dev, 8);
00112 
00113     dev_stk0500_configure_device(dev, 9);
00114     dev_stk11xx_check_device(dev, 65);
00115     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00116 
00117     dev_stk0500_configure_device(dev, 10);
00118     dev_stk11xx_check_device(dev, 65);
00119     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00120 
00121     dev_stk0500_configure_device(dev, 11);
00122 
00123     dev_stk0500_configure_device(dev, 12);
00124     dev_stk11xx_check_device(dev, 65);
00125     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00126 
00127     dev_stk0500_configure_device(dev, 13);
00128 
00129     dev_stk0500_configure_device(dev, 14);
00130     dev_stk11xx_check_device(dev, 65);
00131     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00132 
00133     dev_stk0500_configure_device(dev, 15);
00134 
00135     dev_stk0500_configure_device(dev, 16);
00136 
00137     dev_stk0500_camera_asleep(dev);
00138 
00139     usb_stk11xx_write_registry(dev, 0x0000, 0x00e0);
00140     usb_stk11xx_write_registry(dev, 0x0002, 0x00f8);
00141     usb_stk11xx_write_registry(dev, 0x0002, 0x0078);
00142     usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
00143 
00144     dev_stk0500_stop_stream(dev);
00145 
00146     usb_stk11xx_write_registry(dev, 0x0000, 0x00e0);
00147     usb_stk11xx_write_registry(dev, 0x0002, 0x00f8);
00148     usb_stk11xx_write_registry(dev, 0x0002, 0x0078);
00149     usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
00150 
00151     usb_stk11xx_set_feature(dev, 0);
00152 
00153     // Device is initialized and is ready !!!
00154     STK_INFO("Syntek USB2.0 Camera is ready\n");
00155 
00156     return 0;
00157 }
00158 
00159 
00173 int dev_stk0500_configure_device(struct usb_stk11xx *dev, int step)
00174 {
00175     int value;
00176 
00177     //     0,    1,    2,    3,    4,    5,    6,    7,    8,    9,   10,   11,   12,   13,   14,   15,   16,   17
00178     static const int values_001B[] = {
00179         0x03, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x0e, 0x0e, 0x0e
00180     };
00181     static const int values_001C[] = {
00182         0x02, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x46, 0x46, 0x46
00183     };
00184     static const int values_0202[] = {
00185         0x0a, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x0a, 0x1e, 0x1f, 0x1f, 0x0a, 0x1e, 0x1e
00186     };
00187     static const int values_0110[] = {
00188         0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01
00189     };
00190     static const int values_0112[] = {
00191         0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01
00192     };
00193     static const int values_0114[] = {
00194         0x80, 0x80, 0x80, 0x80, 0x00, 0xbe, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x81, 0x81
00195     };
00196     static const int values_0115[] = {
00197         0x02, 0x02, 0x02, 0x02, 0x05, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02
00198     };
00199     static const int values_0116[] = {
00200         0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe9, 0xe0, 0xe0, 0x00, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1
00201     };
00202     static const int values_0117[] = {
00203         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01
00204     };
00205     static const int values_0100[] = {
00206         0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x21
00207     };
00208 
00209 
00210     STK_DEBUG("dev_stk0500_configure_device : %d\n", step);
00211 
00212     usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00213     usb_stk11xx_write_registry(dev, 0x0002, 0x0078);
00214     usb_stk11xx_write_registry(dev, 0x0003, 0x0080);
00215     usb_stk11xx_write_registry(dev, 0x0005, 0x0000);
00216     
00217     usb_stk11xx_write_registry(dev, 0x0007, 0x0003);
00218     usb_stk11xx_write_registry(dev, 0x000d, 0x0000);
00219     usb_stk11xx_write_registry(dev, 0x000f, 0x0002);
00220     usb_stk11xx_write_registry(dev, 0x0300, 0x0012);
00221     usb_stk11xx_write_registry(dev, 0x0350, 0x0041);
00222     
00223     usb_stk11xx_write_registry(dev, 0x0351, 0x0000);
00224     usb_stk11xx_write_registry(dev, 0x0352, 0x0000);
00225     usb_stk11xx_write_registry(dev, 0x0353, 0x0000);
00226     usb_stk11xx_write_registry(dev, 0x0018, 0x0010);
00227     usb_stk11xx_write_registry(dev, 0x0019, 0x0000);
00228     
00229     usb_stk11xx_write_registry(dev, 0x001b, values_001B[step]);
00230     usb_stk11xx_write_registry(dev, 0x001c, values_001C[step]);
00231     usb_stk11xx_write_registry(dev, 0x0300, 0x0080);
00232     usb_stk11xx_write_registry(dev, 0x001a, 0x0004);
00233     usb_stk11xx_write_registry(dev, 0x0202, values_0202[step]);
00234     
00235     usb_stk11xx_write_registry(dev, 0x0110, values_0110[step]);
00236     usb_stk11xx_write_registry(dev, 0x0111, 0x0000);
00237     usb_stk11xx_write_registry(dev, 0x0112, values_0112[step]);
00238     usb_stk11xx_write_registry(dev, 0x0113, 0x0000);
00239     usb_stk11xx_write_registry(dev, 0x0114, values_0114[step]);
00240     
00241     usb_stk11xx_write_registry(dev, 0x0115, values_0115[step]);
00242     usb_stk11xx_write_registry(dev, 0x0116, values_0116[step]);
00243     usb_stk11xx_write_registry(dev, 0x0117, values_0117[step]);
00244 
00245     usb_stk11xx_read_registry(dev, 0x0100, &value);
00246     usb_stk11xx_write_registry(dev, 0x0100, values_0100[step]);
00247 
00248 //  usb_stk11xx_write_registry(dev, 0x0200, 0x0080); 
00249 //  usb_stk11xx_write_registry(dev, 0x0200, 0x0000); 
00250     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 
00251 
00252 
00253     switch (step) {
00254         case 0:
00255             usb_stk11xx_write_registry(dev, 0x0203, 0x0022); 
00256 
00257             usb_stk11xx_write_registry(dev, 0x0204, 0x0027); 
00258             usb_stk11xx_write_registry(dev, 0x0205, 0x00a5); 
00259 
00260             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00261 
00262             break;
00263     
00264         case 1:
00265             usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 
00266 
00267             usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 
00268             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00269             usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 
00270             usb_stk11xx_write_registry(dev, 0x0205, 0x00bf); 
00271 
00272             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00273 
00274             break;
00275 
00276         case 2:
00277             usb_stk11xx_write_registry(dev, 0x0203, 0x0042); 
00278 
00279             usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 
00280             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00281             usb_stk11xx_write_registry(dev, 0x0204, 0x0024); 
00282             usb_stk11xx_write_registry(dev, 0x0205, 0x00a5); 
00283 
00284             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00285 
00286             break;
00287 
00288         case 3:
00289             usb_stk11xx_write_registry(dev, 0x0203, 0x0042); 
00290 
00291             usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 
00292             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00293             usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 
00294             usb_stk11xx_write_registry(dev, 0x0205, 0x00e0); 
00295             usb_stk11xx_write_registry(dev, 0x0204, 0x0024); 
00296             usb_stk11xx_write_registry(dev, 0x0205, 0x00a5); 
00297 
00298             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00299 
00300             break;
00301 
00302         case 4:
00303             usb_stk11xx_write_registry(dev, 0x0203, 0x0042); 
00304 
00305             usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 
00306             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00307             usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 
00308             usb_stk11xx_write_registry(dev, 0x0205, 0x00bf); 
00309 
00310             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00311 
00312             break;
00313 
00314         case 5:
00315             usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 
00316 
00317             usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 
00318             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00319             usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 
00320             usb_stk11xx_write_registry(dev, 0x0205, 0x00ff); 
00321 
00322             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00323 
00324             break;
00325 
00326         case 6:
00327             usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 
00328 
00329             usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 
00330             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00331             usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 
00332             usb_stk11xx_write_registry(dev, 0x0205, 0x00b7); 
00333 
00334             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00335 
00336             break;
00337 
00338         case 7:
00339             usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 
00340 
00341             usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 
00342             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00343             usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 
00344             usb_stk11xx_write_registry(dev, 0x0205, 0x00b7); 
00345 
00346             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00347 
00348             break;
00349 
00350         case 8:
00351             usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 
00352 
00353             usb_stk11xx_read_registry(dev, 0x02ff, &value);
00354             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 
00355 
00356             usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 
00357             usb_stk11xx_write_registry(dev, 0x0204, 0x00ff); 
00358             usb_stk11xx_write_registry(dev, 0x0205, 0x0001); 
00359             usb_stk11xx_write_registry(dev, 0x0200, 0x0001); 
00360             dev_stk11xx_check_device(dev, 500);
00361             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 
00362             usb_stk11xx_read_registry(dev, 0x02ff, &value);
00363             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 
00364 
00365             usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 
00366             usb_stk11xx_write_registry(dev, 0x0208, 0x000a); 
00367             usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 
00368             dev_stk11xx_check_device(dev, 500);
00369             usb_stk11xx_read_registry(dev, 0x0209, &value);
00370             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 
00371             usb_stk11xx_read_registry(dev, 0x02ff, &value);
00372             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 
00373 
00374             usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 
00375             usb_stk11xx_write_registry(dev, 0x0208, 0x000b); 
00376             usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 
00377             dev_stk11xx_check_device(dev, 500);
00378             usb_stk11xx_read_registry(dev, 0x0209, &value);
00379             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 
00380             usb_stk11xx_read_registry(dev, 0x02ff, &value);
00381             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 
00382 
00383             usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 
00384             usb_stk11xx_write_registry(dev, 0x0208, 0x001c); 
00385             usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 
00386             dev_stk11xx_check_device(dev, 500);
00387             usb_stk11xx_read_registry(dev, 0x0209, &value);
00388             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 
00389             usb_stk11xx_read_registry(dev, 0x02ff, &value);
00390             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 
00391 
00392             usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 
00393             usb_stk11xx_write_registry(dev, 0x0208, 0x001d); 
00394             usb_stk11xx_write_registry(dev, 0x0200, 0x0020); 
00395             dev_stk11xx_check_device(dev, 500);
00396             usb_stk11xx_read_registry(dev, 0x0209, &value);
00397             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 
00398 
00399             break;
00400 
00401         case 9:
00402             usb_stk11xx_write_registry(dev, 0x0203, 0x00dc); 
00403 
00404             usb_stk11xx_write_registry(dev, 0x0204, 0x0015); 
00405             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00406 
00407             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00408 
00409             break;
00410 
00411         case 10:
00412             usb_stk11xx_write_registry(dev, 0x0203, 0x00ec); 
00413 
00414             usb_stk11xx_write_registry(dev, 0x0204, 0x0015); 
00415             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00416 
00417             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00418 
00419             break;
00420 
00421         case 11:
00422             usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 
00423 
00424             usb_stk11xx_read_registry(dev, 0x02ff, &value);
00425             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00426 
00427             usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 
00428 
00429             usb_stk11xx_write_registry(dev, 0x0208, 0x0000);
00430             usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
00431             dev_stk11xx_check_device(dev, 500);
00432             usb_stk11xx_read_registry(dev, 0x0209, &value);
00433             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00434 
00435             break;
00436 
00437         case 12:
00438             usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 
00439 
00440             usb_stk11xx_write_registry(dev, 0x0204, 0x00f0); 
00441             usb_stk11xx_write_registry(dev, 0x0205, 0x0000); 
00442             usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
00443 
00444             break;
00445 
00446         case 13:
00447             usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 
00448 
00449             usb_stk11xx_read_registry(dev, 0x02ff, &value);
00450             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00451 
00452             usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 
00453             usb_stk11xx_write_registry(dev, 0x0208, 0x0000);
00454             usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
00455             dev_stk11xx_check_device(dev, 500);
00456             usb_stk11xx_read_registry(dev, 0x0209, &value);
00457             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00458             usb_stk11xx_read_registry(dev, 0x02ff, &value);
00459             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00460 
00461             usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 
00462             usb_stk11xx_write_registry(dev, 0x0208, 0x00f1);
00463             usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
00464             dev_stk11xx_check_device(dev, 500);
00465             usb_stk11xx_read_registry(dev, 0x0209, &value);
00466             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00467 
00468             break;
00469 
00470         case 14:
00471             usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 
00472 
00473             usb_stk11xx_write_registry(dev, 0x0204, 0x0001); 
00474             usb_stk11xx_write_registry(dev, 0x0205, 0x0000); 
00475             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00476             break;
00477 
00478         case 15:
00479             usb_stk11xx_write_registry(dev, 0x0203, 0x007a); 
00480 
00481             usb_stk11xx_write_registry(dev, 0x0205, 0x0030); 
00482             usb_stk11xx_write_registry(dev, 0x0200, 0x0000); 
00483             usb_stk11xx_write_registry(dev, 0x0200, 0x0061); 
00484             dev_stk11xx_check_device(dev, 500);
00485             usb_stk11xx_read_registry(dev, 0x0209, &value);
00486             usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
00487             dev_stk11xx_check_device(dev, 500);
00488             usb_stk11xx_read_registry(dev, 0x0209, &value);
00489             usb_stk11xx_write_registry(dev, 0x02ff, 0x0001);
00490             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00491 
00492             break;
00493 
00494         case 16:
00495             usb_stk11xx_write_registry(dev, 0x0203, 0x0050); 
00496 
00497             usb_stk11xx_read_registry(dev, 0x02ff, &value);
00498             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00499 
00500             usb_stk11xx_write_registry(dev, 0x0203, 0x0050); 
00501             usb_stk11xx_write_registry(dev, 0x0208, 0x0000);
00502             usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
00503             dev_stk11xx_check_device(dev, 500);
00504             usb_stk11xx_read_registry(dev, 0x0209, &value);
00505             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00506 
00507             break;
00508 
00509         case 17:
00510             usb_stk11xx_write_registry(dev, 0x0203, 0x0050); 
00511 
00512             dev_stk0500_sensor_settings(dev);
00513 
00514             usb_stk11xx_read_registry(dev, 0x02ff, &value);
00515             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00516 
00517             usb_stk11xx_write_registry(dev, 0x0203, 0x0050); 
00518             usb_stk11xx_write_registry(dev, 0x0208, 0x0003);
00519             usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
00520             dev_stk11xx_check_device(dev, 500);
00521             usb_stk11xx_read_registry(dev, 0x0209, &value);
00522 
00523             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00524             usb_stk11xx_read_registry(dev, 0x02ff, &value);
00525             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00526 
00527             usb_stk11xx_write_registry(dev, 0x0203, 0x0050); 
00528             usb_stk11xx_write_registry(dev, 0x0208, 0x0004);
00529             usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
00530             dev_stk11xx_check_device(dev, 500);
00531             usb_stk11xx_read_registry(dev, 0x0209, &value);
00532 
00533             usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00534             usb_stk11xx_write_registry(dev, 0x0200, 0x0006);
00535             dev_stk11xx_check_device(dev, 500);
00536 
00537             break;
00538     }
00539     
00540     return 0;
00541 }
00542 
00543 
00553 int dev_stk0500_camera_asleep(struct usb_stk11xx *dev)
00554 {
00555     int value;
00556 
00557     usb_stk11xx_read_registry(dev, 0x0104, &value);
00558     usb_stk11xx_read_registry(dev, 0x0105, &value);
00559     usb_stk11xx_read_registry(dev, 0x0106, &value);
00560 
00561     usb_stk11xx_write_registry(dev, 0x0100, 0x0021);
00562     usb_stk11xx_write_registry(dev, 0x0116, 0x0000);
00563     usb_stk11xx_write_registry(dev, 0x0117, 0x0000);
00564     usb_stk11xx_write_registry(dev, 0x0018, 0x0000);
00565 
00566     usb_stk11xx_read_registry(dev, 0x0000, &value);
00567     usb_stk11xx_write_registry(dev, 0x0000, 0x0048);
00568 
00569     return 0;
00570 }
00571 
00572 
00583 int dev_stk0500_init_camera(struct usb_stk11xx *dev)
00584 {
00585     dev_stk0500_camera_asleep(dev);
00586 
00587     usb_stk11xx_set_feature(dev, 0);
00588 
00589     dev_stk0500_camera_asleep(dev);
00590 
00591     usb_stk11xx_write_registry(dev, 0x0000, 0x00e0);
00592     usb_stk11xx_write_registry(dev, 0x0002, 0x00f8);
00593     usb_stk11xx_write_registry(dev, 0x0002, 0x0078);
00594     usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
00595 
00596     usb_stk11xx_write_registry(dev, 0x0104, 0x0000);
00597     usb_stk11xx_write_registry(dev, 0x0105, 0x0000);
00598     usb_stk11xx_write_registry(dev, 0x0106, 0x0000);
00599 
00600     dev_stk11xx_camera_off(dev);
00601 
00602     return 0;
00603 }
00604 
00605 
00616 int dev_stk0500_sensor_settings(struct usb_stk11xx *dev)
00617 {
00618     int i;
00619     int retok;
00620     int value;
00621 
00622     int asize;
00623     static const int values_204[] = {
00624         0x1e, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 
00625         0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 
00626         0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1b, 0x1c, 0x1d, 
00627         0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x1e, 0x25, 
00628         0x06, 0x25, 0x03, 0x04
00629     };
00630     static const int values_205[] = {
00631         0x10, 0x11, 0x7b, 0x19, 0x06, 0x78, 0x10, 0x00, 0x00, 0x00, 
00632         0x00, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 0xf0, 0x00, 
00633         0x04, 0x00, 0x0b, 0x04, 0x08, 0x05, 0x08, 0x01, 0x10, 0x09, 
00634         0x00, 0x08, 0x24, 0x05, 0x48, 0x00, 0x20, 0x01, 0x00, 0x01, 
00635         0x01, 0x01, 0x06, 0x78
00636     };
00637 
00638 
00639     asize = ARRAY_SIZE(values_204);
00640 
00641     for(i=0; i<asize; i++) {
00642         usb_stk11xx_read_registry(dev, 0x02ff, &value);
00643         usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00644 
00645         usb_stk11xx_write_registry(dev, 0x0203, 0x0050);
00646 
00647         usb_stk11xx_write_registry(dev, 0x0204, values_204[i]);
00648         usb_stk11xx_write_registry(dev, 0x0205, values_205[i]);
00649         usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
00650 
00651         retok = dev_stk11xx_check_device(dev, 500);
00652 
00653         if (retok != 1) {
00654             STK_ERROR("Load default sensor settings fail !\n");
00655             return -1;
00656         }
00657 
00658         usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00659     }
00660 
00661 //  retok = dev_stk11xx_check_device(dev, 500);
00662 
00663     return 0;
00664 }
00665 
00666 
00680 int dev_stk0500_camera_settings(struct usb_stk11xx *dev)
00681 {
00682     return 0;
00683 }
00684 
00685 
00699 int dev_stk0500_set_camera_quality(struct usb_stk11xx *dev)
00700 {
00701     int value; 
00702 
00703     usb_stk11xx_write_registry(dev, 0x0200, 0x0000);
00704 
00705     usb_stk11xx_read_registry(dev, 0x02ff, &value);
00706     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00707 
00708     // Contrast register ?
00709     usb_stk11xx_write_registry(dev, 0x0203, 0x0050);
00710     usb_stk11xx_write_registry(dev, 0x0204, 0x0003);
00711     usb_stk11xx_write_registry(dev, 0x0205, (dev->vsettings.contrast >> 8));
00712     usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
00713 
00714     dev_stk11xx_check_device(dev, 500);
00715 
00716     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00717     usb_stk11xx_read_registry(dev, 0x02ff, &value);
00718     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00719 
00720     // Whiteness register ?
00721     usb_stk11xx_write_registry(dev, 0x0203, 0x0050);
00722     usb_stk11xx_write_registry(dev, 0x0204, 0x0004);
00723     usb_stk11xx_write_registry(dev, 0x0205, (dev->vsettings.whiteness >> 8));
00724     usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
00725 
00726     dev_stk11xx_check_device(dev, 500);
00727 
00728     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00729     usb_stk11xx_read_registry(dev, 0x02ff, &value);
00730     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00731 
00732     usb_stk11xx_write_registry(dev, 0x0203, 0x0050);
00733     usb_stk11xx_write_registry(dev, 0x0208, 0x0003);
00734     usb_stk11xx_write_registry(dev, 0x0208, 0x0020);
00735 
00736     dev_stk11xx_check_device(dev, 500);
00737     usb_stk11xx_read_registry(dev, 0x0209, &value);
00738 
00739     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00740     usb_stk11xx_read_registry(dev, 0x02ff, &value);
00741     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00742 
00743     usb_stk11xx_write_registry(dev, 0x0203, 0x0050);
00744     usb_stk11xx_write_registry(dev, 0x0208, 0x0004);
00745     usb_stk11xx_write_registry(dev, 0x0208, 0x0020);
00746 
00747     dev_stk11xx_check_device(dev, 500);
00748     usb_stk11xx_read_registry(dev, 0x0209, &value);
00749 
00750     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00751     usb_stk11xx_write_registry(dev, 0x0200, 0x0006);
00752 
00753     dev_stk11xx_check_device(dev, 500);
00754 
00755     STK_DEBUG("Set colour : %d\n", dev->vsettings.colour);
00756     STK_DEBUG("Set contrast : %d\n", dev->vsettings.contrast);
00757     STK_DEBUG("Set whiteness : %d\n", dev->vsettings.whiteness);
00758     STK_DEBUG("Set brightness : %d\n", dev->vsettings.brightness);
00759 
00760     return 0;
00761 }
00762 
00763 
00773 int dev_stk0500_set_camera_fps(struct usb_stk11xx *dev)
00774 {
00775     return 0;
00776 }
00777 
00778 
00789 int dev_stk0500_start_stream(struct usb_stk11xx *dev)
00790 {
00791     int value;
00792 
00793     usb_stk11xx_read_registry(dev, 0x0100, &value); // read 0x21
00794     usb_stk11xx_write_registry(dev, 0x0100, 0x00a1);
00795 
00796     usb_stk11xx_read_registry(dev, 0x0100, &value); // read 0xa1
00797     usb_stk11xx_write_registry(dev, 0x0100, 0x00a1);
00798 
00799     return 0;
00800 }
00801 
00802 
00812 int dev_stk0500_reconf_camera(struct usb_stk11xx *dev)
00813 {
00814     dev_stk0500_configure_device(dev, 17);
00815 
00816     return 0;
00817 }
00818 
00819 
00830 int dev_stk0500_stop_stream(struct usb_stk11xx *dev)
00831 {
00832     int value;
00833 
00834     usb_stk11xx_write_registry(dev, 0x0100, 0x0021);
00835     usb_stk11xx_read_registry(dev, 0x0000, &value);
00836     usb_stk11xx_write_registry(dev, 0x0000, 0x0048);
00837 
00838     return 0;
00839 }
00840