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