SyntekUSBVideoCamera

stk11xx-dev-a821.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-A821 API
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     // Device is initialized and is ready !!!
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     //     0,    1,    2,    3,    4,    5,    6,    7,    8,    9,   10,   11,   12,   13
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 //  int retok;
00616 //  int value;
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     // Contrast register
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     // Contrast register
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); // read 0x21
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