SyntekUSBVideoCamera
stk11xx-dev-6a33.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-6A33 API
00053 //
00054 //=============================================================================
00055 
00056 
00070 int dev_stk6a33_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, 0x0078);
00079     usb_stk11xx_write_registry(dev, 0x0003, 0x0080);
00080 
00081     usb_stk11xx_write_registry(dev, 0x0002, 0x007f);
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, 0x007d);
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, 0x007f);
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, 0x007d);
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, 0x007f);
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, 0x007d);
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, 0x007f);
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, 0x00f8);
00239     usb_stk11xx_write_registry(dev, 0x0002, 0x0078);
00240     usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
00241 
00242     dev_stk6a33_configure_device(dev, 0);
00243     dev_stk11xx_check_device(dev, 65);
00244     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00245 
00246     dev_stk6a33_configure_device(dev, 1);
00247     dev_stk11xx_check_device(dev, 65);
00248     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00249 
00250     dev_stk6a33_configure_device(dev, 2);
00251     dev_stk11xx_check_device(dev, 65);
00252     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00253 
00254     dev_stk6a33_configure_device(dev, 3);
00255     dev_stk11xx_check_device(dev, 65);
00256     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00257 
00258     dev_stk6a33_configure_device(dev, 4);
00259     dev_stk11xx_check_device(dev, 65);
00260     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00261 
00262     dev_stk6a33_configure_device(dev, 5);
00263     dev_stk11xx_check_device(dev, 65);
00264     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00265 
00266     dev_stk6a33_configure_device(dev, 6);
00267     dev_stk11xx_check_device(dev, 65);
00268     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00269 
00270     dev_stk6a33_configure_device(dev, 7);
00271     dev_stk11xx_check_device(dev, 65);
00272     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00273 
00274     dev_stk6a33_configure_device(dev, 8);
00275     dev_stk11xx_check_device(dev, 65);
00276     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00277 
00278     dev_stk6a33_configure_device(dev, 9);
00279     dev_stk11xx_check_device(dev, 65);
00280     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00281 
00282     dev_stk6a33_configure_device(dev, 10);
00283     dev_stk11xx_check_device(dev, 65);
00284     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00285 
00286     dev_stk6a33_configure_device(dev, 11);
00287     dev_stk11xx_check_device(dev, 65);
00288     usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
00289 
00290     dev_stk6a33_configure_device(dev, 12);
00291     usb_stk11xx_read_registry(dev, 0x02ff, &value);
00292     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00293     usb_stk11xx_write_registry(dev, 0x0208, 0x0000);
00294     usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
00295     dev_stk11xx_check_device(dev, 500);
00296     usb_stk11xx_read_registry(dev, 0x0209, &value);
00297     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00298 
00299     dev_stk6a33_configure_device(dev, 13);
00300     usb_stk11xx_read_registry(dev, 0x02ff, &value);
00301     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00302     usb_stk11xx_write_registry(dev, 0x0208, 0x0000);
00303     usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
00304     dev_stk11xx_check_device(dev, 500);
00305     usb_stk11xx_read_registry(dev, 0x0209, &value);
00306     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00307     usb_stk11xx_read_registry(dev, 0x02ff, &value);
00308     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00309     usb_stk11xx_write_registry(dev, 0x0208, 0x00f1);
00310     usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
00311     dev_stk11xx_check_device(dev, 500);
00312     usb_stk11xx_read_registry(dev, 0x0209, &value);
00313     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00314 
00315     dev_stk6a33_configure_device(dev, 14);
00316     dev_stk11xx_check_device(dev, 500);
00317     usb_stk11xx_write_registry(dev, 0x0204, 0x00f1);
00318     usb_stk11xx_write_registry(dev, 0x0205, 0x0000);
00319     usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
00320     dev_stk11xx_check_device(dev, 500);
00321     usb_stk11xx_read_registry(dev, 0x02ff, &value);
00322     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00323     usb_stk11xx_write_registry(dev, 0x0208, 0x0000);
00324     usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
00325     dev_stk11xx_check_device(dev, 500);
00326     usb_stk11xx_read_registry(dev, 0x0209, &value);
00327     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00328     usb_stk11xx_read_registry(dev, 0x02ff, &value);
00329     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00330     usb_stk11xx_write_registry(dev, 0x0208, 0x00f1);
00331     usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
00332     dev_stk11xx_check_device(dev, 500);
00333     usb_stk11xx_read_registry(dev, 0x0209, &value);
00334     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00335 
00336     dev_stk6a33_configure_device(dev, 15);
00337 
00338     dev_stk6a33_camera_asleep(dev);
00339 
00340     usb_stk11xx_set_feature(dev, 0);
00341 
00342     // Device is initialized and is ready !!!
00343     STK_INFO("Syntek USB2.0 Camera is ready\n");
00344 
00345     return 0;
00346 }
00347 
00348 
00364 int dev_stk6a33_configure_device(struct usb_stk11xx *dev, int step)
00365 {
00366     int value;
00367 
00368     //     0,    1,    2,    3,    4,    5,    6,    7,    8,    9,   10,   11,   12,   13,   14,   15,   16,   17
00369 
00370     static const int values_001B[] = {
00371         0x0e, 0x03, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07
00372     };
00373     static const int values_001C[] = {
00374         0x06, 0x02, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06
00375     };
00376     static const int values_0202[] = {
00377         0x1e, 0x0a, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x14, 0x1e, 0x1f, 0x1f, 0x1f, 0x1f
00378     };
00379     static const int values_0110[] = {
00380         0x07, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
00381     };
00382     static const int values_0112[] = {
00383         0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
00384     };
00385     static const int values_0114[] = {
00386         0x87, 0x80, 0x80, 0x80, 0x80, 0xbe, 0xbe, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80
00387     };
00388     static const int values_0115[] = {
00389         0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02
00390     };
00391     static const int values_0116[] = {
00392         0xe7, 0xe0, 0xe0, 0xe0, 0xe0, 0xe9, 0xe9, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0
00393     };
00394     static const int values_0117[] = {
00395         0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01
00396     };
00397     static const int values_0100[] = {
00398         0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20
00399     };
00400 
00401     STK_DEBUG("dev_stk6a33_configure_device : %d\n", step);
00402 
00403     usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
00404     usb_stk11xx_write_registry(dev, 0x0002, 0x0068);
00405     usb_stk11xx_write_registry(dev, 0x0003, 0x0080);
00406     usb_stk11xx_write_registry(dev, 0x0005, 0x0000);
00407     
00408     usb_stk11xx_write_registry(dev, 0x0007, 0x0003);
00409     usb_stk11xx_write_registry(dev, 0x000d, 0x0000);
00410     usb_stk11xx_write_registry(dev, 0x000f, 0x0002);
00411     usb_stk11xx_write_registry(dev, 0x0300, 0x0012);
00412     usb_stk11xx_write_registry(dev, 0x0350, 0x0041);
00413     
00414     usb_stk11xx_write_registry(dev, 0x0351, 0x0000);
00415     usb_stk11xx_write_registry(dev, 0x0352, 0x0000);
00416     usb_stk11xx_write_registry(dev, 0x0353, 0x0000);
00417     usb_stk11xx_write_registry(dev, 0x0018, 0x0010);
00418     usb_stk11xx_write_registry(dev, 0x0019, 0x0000);
00419     
00420     usb_stk11xx_write_registry(dev, 0x001b, values_001B[step]);
00421     usb_stk11xx_write_registry(dev, 0x001c, values_001C[step]);
00422     usb_stk11xx_write_registry(dev, 0x0300, 0x0080);
00423     usb_stk11xx_write_registry(dev, 0x001a, 0x0004);
00424     usb_stk11xx_write_registry(dev, 0x0202, values_0202[step]);
00425     
00426     usb_stk11xx_write_registry(dev, 0x0110, values_0110[step]);
00427     usb_stk11xx_write_registry(dev, 0x0111, 0x0000);
00428     usb_stk11xx_write_registry(dev, 0x0112, values_0112[step]);
00429     usb_stk11xx_write_registry(dev, 0x0113, 0x0000);
00430     usb_stk11xx_write_registry(dev, 0x0114, values_0114[step]);
00431     
00432     usb_stk11xx_write_registry(dev, 0x0115, values_0115[step]);
00433     usb_stk11xx_write_registry(dev, 0x0116, values_0116[step]);
00434     usb_stk11xx_write_registry(dev, 0x0117, values_0117[step]);
00435 
00436     usb_stk11xx_read_registry(dev, 0x0100, &value);
00437     usb_stk11xx_write_registry(dev, 0x0100, values_0100[step]);
00438 
00439     usb_stk11xx_write_registry(dev, 0x0200, 0x0080); 
00440     usb_stk11xx_write_registry(dev, 0x0200, 0x0000); 
00441     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000); 
00442 
00443 
00444     switch (step) {
00445         case 0:
00446             usb_stk11xx_write_registry(dev, 0x0203, 0x0040); 
00447 
00448             usb_stk11xx_write_registry(dev, 0x0204, 0x0041); 
00449             usb_stk11xx_write_registry(dev, 0x0205, 0x0001); 
00450             usb_stk11xx_write_registry(dev, 0x0204, 0x001c); 
00451             usb_stk11xx_write_registry(dev, 0x0205, 0x0002); 
00452 
00453             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00454 
00455             break;
00456 
00457         case 1:
00458             usb_stk11xx_write_registry(dev, 0x0203, 0x0022); 
00459 
00460             usb_stk11xx_write_registry(dev, 0x0204, 0x0027); 
00461             usb_stk11xx_write_registry(dev, 0x0205, 0x00a5); 
00462 
00463             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00464 
00465             break;
00466     
00467         case 2:
00468             usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 
00469 
00470             usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 
00471             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00472             usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 
00473             usb_stk11xx_write_registry(dev, 0x0205, 0x00bf); 
00474 
00475             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00476 
00477             break;
00478 
00479         case 3:
00480             usb_stk11xx_write_registry(dev, 0x0203, 0x0042); 
00481 
00482             usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 
00483             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00484             usb_stk11xx_write_registry(dev, 0x0204, 0x0024); 
00485             usb_stk11xx_write_registry(dev, 0x0205, 0x00a5); 
00486 
00487             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00488 
00489             break;
00490 
00491         case 4:
00492             usb_stk11xx_write_registry(dev, 0x0203, 0x0042); 
00493 
00494             usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 
00495             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00496             usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 
00497             usb_stk11xx_write_registry(dev, 0x0205, 0x00e0); 
00498             usb_stk11xx_write_registry(dev, 0x0204, 0x0024); 
00499             usb_stk11xx_write_registry(dev, 0x0205, 0x00a5); 
00500 
00501             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00502 
00503             break;
00504 
00505         case 5:
00506             usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 
00507 
00508             usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 
00509             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00510             usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 
00511             usb_stk11xx_write_registry(dev, 0x0205, 0x00ff); 
00512 
00513             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00514 
00515             break;
00516 
00517         case 6:
00518             usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 
00519 
00520             usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 
00521             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00522             usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 
00523             usb_stk11xx_write_registry(dev, 0x0205, 0x00ff); 
00524 
00525             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00526 
00527             break;
00528 
00529         case 7:
00530             usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 
00531 
00532             usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 
00533             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00534             usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 
00535             usb_stk11xx_write_registry(dev, 0x0205, 0x00b7); 
00536 
00537             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00538 
00539             break;
00540 
00541         case 8:
00542             usb_stk11xx_write_registry(dev, 0x0203, 0x0060); 
00543 
00544             usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 
00545             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00546             usb_stk11xx_write_registry(dev, 0x0204, 0x0013); 
00547             usb_stk11xx_write_registry(dev, 0x0205, 0x00b7); 
00548 
00549             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00550 
00551             break;
00552 
00553         case 9:
00554             usb_stk11xx_write_registry(dev, 0x0203, 0x0080); 
00555 
00556             usb_stk11xx_write_registry(dev, 0x0204, 0x0012); 
00557             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00558             usb_stk11xx_write_registry(dev, 0x0204, 0x000a); 
00559             usb_stk11xx_write_registry(dev, 0x0205, 0x00ff); 
00560 
00561             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00562 
00563             break;
00564 
00565         case 10:
00566             usb_stk11xx_write_registry(dev, 0x0203, 0x00dc); 
00567 
00568             usb_stk11xx_write_registry(dev, 0x0204, 0x0015); 
00569             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00570 
00571             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00572 
00573             break;
00574 
00575         case 11:
00576             usb_stk11xx_write_registry(dev, 0x0203, 0x00ec); 
00577 
00578             usb_stk11xx_write_registry(dev, 0x0204, 0x0015); 
00579             usb_stk11xx_write_registry(dev, 0x0205, 0x0080); 
00580 
00581             usb_stk11xx_write_registry(dev, 0x0200, 0x0005); 
00582 
00583             break;
00584 
00585         case 12:
00586             usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 
00587             break;
00588 
00589         case 13:
00590             usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 
00591             break;
00592 
00593         case 14:
00594             usb_stk11xx_write_registry(dev, 0x0203, 0x00ba);
00595 
00596             usb_stk11xx_write_registry(dev, 0x0204, 0x0001);
00597             usb_stk11xx_write_registry(dev, 0x0205, 0x0000);
00598 
00599             usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
00600             break;
00601 
00602         case 15:
00603             usb_stk11xx_write_registry(dev, 0x0203, 0x00ba);
00604 
00605             dev_stk6a33_sensor_settings(dev);
00606 
00607             usb_stk11xx_write_registry(dev, 0x0200, 0x0080);
00608             usb_stk11xx_write_registry(dev, 0x0200, 0x0000);
00609             usb_stk11xx_write_registry(dev, 0x02ff, 0x0001);
00610             usb_stk11xx_write_registry(dev, 0x0203, 0x00a0);
00611 
00612             break;
00613 
00614         case 16:
00615             usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 
00616 
00617             dev_stk6a33_sensor_settings(dev);
00618 
00619             usb_stk11xx_write_registry(dev, 0x0200, 0x0080);
00620             usb_stk11xx_write_registry(dev, 0x0200, 0x0000);
00621             usb_stk11xx_write_registry(dev, 0x02ff, 0x0001);
00622             usb_stk11xx_write_registry(dev, 0x0203, 0x00a0);
00623 
00624 
00625             break;
00626 
00627         case 17:
00628             usb_stk11xx_write_registry(dev, 0x0203, 0x00ba); 
00629 
00630             dev_stk6a33_sensor_settings(dev);
00631 
00632             break;
00633     }
00634     
00635     return 0;
00636 }
00637 
00638 
00648 int dev_stk6a33_camera_asleep(struct usb_stk11xx *dev)
00649 {
00650     int value;
00651 
00652     usb_stk11xx_read_registry(dev, 0x0104, &value);
00653     usb_stk11xx_read_registry(dev, 0x0105, &value);
00654     usb_stk11xx_read_registry(dev, 0x0106, &value);
00655 
00656     usb_stk11xx_write_registry(dev, 0x0100, 0x0021);
00657     usb_stk11xx_write_registry(dev, 0x0116, 0x0000);
00658     usb_stk11xx_write_registry(dev, 0x0117, 0x0000);
00659     usb_stk11xx_write_registry(dev, 0x0018, 0x0000);
00660 
00661     usb_stk11xx_read_registry(dev, 0x0000, &value);
00662     usb_stk11xx_write_registry(dev, 0x0000, 0x0049);
00663 
00664     return 0;
00665 }
00666 
00667 
00678 int dev_stk6a33_init_camera(struct usb_stk11xx *dev)
00679 {
00680     dev_stk6a33_camera_asleep(dev);
00681 
00682     usb_stk11xx_set_feature(dev, 0);
00683 
00684     usb_stk11xx_write_registry(dev, 0x0000, 0x00e0);
00685     usb_stk11xx_write_registry(dev, 0x0002, 0x00e8);
00686     usb_stk11xx_write_registry(dev, 0x0002, 0x0078);
00687     usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
00688 
00689     dev_stk6a33_configure_device(dev, 16);
00690 
00691     dev_stk11xx_camera_off(dev);
00692 
00693     return 0;
00694 }
00695 
00696 
00707 int dev_stk6a33_sensor_settings(struct usb_stk11xx *dev)
00708 {
00709     int i;
00710     int retok;
00711     int value;
00712 
00713     int asize;
00714     static const int values_204[] = {
00715         0xf0, 0xf1, 0x0d, 0xf1, 0x0d, 0xf1, 0xf0, 0xf1, 0x35, 0xf1, 
00716         0xf0, 0xf1, 0x06, 0xf1, 0xf0, 0xf1, 0xdd, 0xf1, 0xf0, 0xf1, 
00717         0x1f, 0xf1, 0x20, 0xf1, 0x21, 0xf1, 0x22, 0xf1, 0x23, 0xf1, 
00718         0x24, 0xf1, 0x28, 0xf1, 0x29, 0xf1, 0x5e, 0xf1, 0x5f, 0xf1, 
00719         0x60, 0xf1, 0xef, 0xf1, 0xf2, 0xf1, 0x02, 0xf1, 0x03, 0xf1, 
00720         0x04, 0xf1, 0x09, 0xf1, 0x0a, 0xf1, 0x0b, 0xf1, 0x0c, 0xf1, 
00721         0x0d, 0xf1, 0x0e, 0xf1, 0x0f, 0xf1, 0x10, 0xf1, 0x11, 0xf1, 
00722         0x15, 0xf1, 0x16, 0xf1, 0x17, 0xf1, 0x18, 0xf1, 0x19, 0xf1, 
00723         0x1a, 0xf1, 0x1b, 0xf1, 0x1c, 0xf1, 0x1d, 0xf1, 0x1e, 0xf1, 
00724         0xf0, 0xf1, 0x06, 0xf1, 0x06, 0xf1, 0xf0, 0xf1, 0x80, 0xf1, 
00725         0x81, 0xf1, 0x82, 0xf1, 0x83, 0xf1, 0x84, 0xf1, 0x85, 0xf1, 
00726         0x86, 0xf1, 0x87, 0xf1, 0x88, 0xf1, 0x89, 0xf1, 0x8a, 0xf1, 
00727         0x8b, 0xf1, 0x8c, 0xf1, 0x8d, 0xf1, 0x8e, 0xf1, 0x8f, 0xf1, 
00728         0x90, 0xf1, 0x91, 0xf1, 0x92, 0xf1, 0x93, 0xf1, 0x94, 0xf1, 
00729         0x95, 0xf1, 0xb6, 0xf1, 0xb7, 0xf1, 0xb8, 0xf1, 0xb9, 0xf1, 
00730         0xba, 0xf1, 0xbb, 0xf1, 0xbc, 0xf1, 0xbd, 0xf1, 0xbe, 0xf1, 
00731         0xbf, 0xf1, 0xc0, 0xf1, 0xc1, 0xf1, 0xc2, 0xf1, 0xc3, 0xf1, 
00732         0xc4, 0xf1, 0x06, 0xf1, 0xf0, 0xf1, 0x53, 0xf1, 0x54, 0xf1, 
00733         0x55, 0xf1, 0x56, 0xf1, 0x57, 0xf1, 0x58, 0xf1, 0xf0, 0xf1, 
00734         0xa7, 0xf1, 0xaa, 0xf1, 0x3a, 0xf1, 0xa1, 0xf1, 0xa4, 0xf1, 
00735         0x9b, 0xf1, 0x08, 0xf1, 0xf0, 0xf1, 0x2f, 0xf1, 0x9c, 0xf1, 
00736         0xd2, 0xf1, 0xcc, 0xf1, 0xcb, 0xf1, 0x2e, 0xf1, 0x67, 0xf1, 
00737         0xf0, 0xf1, 0x65, 0xf1, 0x66, 0xf1, 0x67, 0xf1, 0x65, 0xf1, 
00738         0xf0, 0xf1, 0x05, 0xf1, 0x07, 0xf1, 0xf0, 0xf1, 0x39, 0xf1, 
00739         0x3b, 0xf1, 0x3a, 0xf1, 0x3c, 0xf1, 0x57, 0xf1, 0x58, 0xf1, 
00740         0x59, 0xf1, 0x5a, 0xf1, 0x5c, 0xf1, 0x5d, 0xf1, 0x64, 0xf1, 
00741         0xf0, 0xf1, 0x5b, 0xf1, 0xf0, 0xf1, 0x36, 0xf1, 0x37, 0xf1, 
00742         0xf0, 0xf1, 0x08, 0xf1
00743     };
00744     static const int values_205[] = {
00745         0x00, 0x00, 0x00, 0x0b, 0x00, 0x08, 0x00, 0x00, 0x00, 0x22, 
00746         0x00, 0x01, 0x70, 0x0e, 0x00, 0x02, 0x18, 0xe0, 0x00, 0x02, 
00747         0x01, 0x80, 0xc8, 0x14, 0x80, 0x80, 0xa0, 0x78, 0xa0, 0x78, 
00748         0x5f, 0x20, 0xea, 0x02, 0x86, 0x7a, 0x59, 0x4c, 0x4d, 0x51, 
00749         0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0xee, 0x39, 0x23, 
00750         0x07, 0x24, 0x00, 0xcd, 0x00, 0x93, 0x00, 0x04, 0x00, 0x5c, 
00751         0x00, 0xd9, 0x00, 0x53, 0x00, 0x08, 0x00, 0x91, 0x00, 0xcf, 
00752         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
00753         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
00754         0x00, 0x01, 0xf0, 0x0e, 0x70, 0x0e, 0x00, 0x01, 0x00, 0x0b, 
00755         0xee, 0x08, 0xf8, 0xf3, 0x00, 0xfb, 0xee, 0x09, 0xf7, 0xf3, 
00756         0xff, 0xfa, 0xf2, 0x08, 0xf9, 0xf5, 0xff, 0xf9, 0xe4, 0x10, 
00757         0xf1, 0xea, 0xf8, 0xf6, 0x00, 0x00, 0xe9, 0x0f, 0xf2, 0xed, 
00758         0xf6, 0xf6, 0x00, 0x00, 0xea, 0x0d, 0xf4, 0xf1, 0xf8, 0xf8, 
00759         0x00, 0x00, 0x07, 0x06, 0x1c, 0x0b, 0x08, 0x06, 0x17, 0x0a, 
00760         0x05, 0x06, 0x1a, 0x07, 0x06, 0x04, 0x0a, 0x08, 0x00, 0x19, 
00761         0x06, 0x05, 0x07, 0x0a, 0x00, 0x1f, 0x04, 0x04, 0x04, 0x08, 
00762         0x00, 0x1b, 0x74, 0x0e, 0x00, 0x01, 0x0b, 0x03, 0x47, 0x22, 
00763         0xac, 0x82, 0xda, 0xc7, 0xf5, 0xe9, 0xff, 0x00, 0x00, 0x01, 
00764         0x02, 0x80, 0x01, 0xe0, 0x43, 0x00, 0x05, 0x00, 0x04, 0x00, 
00765         0x43, 0x00, 0x01, 0x80, 0x00, 0x02, 0xd1, 0x00, 0xd1, 0x00, 
00766         0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x0c, 0x50, 0x10, 0x10, 
00767         0x00, 0x00, 0xa0, 0x00, 0x20, 0x03, 0x05, 0x01, 0x20, 0x00, 
00768         0x00, 0x00, 0x01, 0xb8, 0x00, 0xd8, 0x00, 0x02, 0x06, 0xc0, 
00769         0x04, 0x0e, 0x06, 0xc0, 0x05, 0x64, 0x02, 0x08, 0x02, 0x71, 
00770         0x02, 0x08, 0x02, 0x71, 0x12, 0x0d, 0x17, 0x12, 0x5e, 0x1c, 
00771         0x00, 0x02, 0x00, 0x03, 0x00, 0x02, 0x78, 0x10, 0x83, 0x04, 
00772         0x00, 0x00, 0x00, 0x21
00773     };
00774         
00775 
00776     asize = ARRAY_SIZE(values_204);
00777 
00778     for(i=0; i<asize; i++) {
00779         usb_stk11xx_read_registry(dev, 0x02ff, &value);
00780         usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00781 
00782         usb_stk11xx_write_registry(dev, 0x0203, 0x00ba);
00783 
00784         usb_stk11xx_write_registry(dev, 0x0204, values_204[i]);
00785         usb_stk11xx_write_registry(dev, 0x0205, values_205[i]);
00786         usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
00787 
00788         retok = dev_stk11xx_check_device(dev, 500);
00789 
00790         if (retok != 1) {
00791             STK_ERROR("Load default sensor settings fail !\n");
00792             return -1;
00793         }
00794 
00795         usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00796     }
00797 
00798     retok = dev_stk11xx_check_device(dev, 500);
00799 
00800     return 0;
00801 }
00802 
00803 
00817 int dev_stk6a33_camera_settings(struct usb_stk11xx *dev)
00818 {
00819     int i;
00820     int value;
00821 
00822     int asize;
00823     static const int values_204[] = {
00824         0xf0, 0xf1, 0x2e, 0xf1, 0xf0, 0xf1, 0x5b, 0xf1, 0xf0, 0xf1, 0x36, 0xf1, 0x37, 0xf1, 0xf0, 0xf1, 0x08, 0xf1
00825     };
00826     static const int values_205[] = {
00827         0x00, 0x02, 0x0c, 0x3c, 0x00, 0x02, 0x00, 0x03, 0x00, 0x02, 0x78, 0x10, 0x83, 0x04, 0x00, 0x00, 0x00, 0x21
00828     };
00829 
00830 
00831     asize = ARRAY_SIZE(values_204);
00832 
00833     // Contrast register
00834     for (i=0; i<asize; i++) {
00835         usb_stk11xx_read_registry(dev, 0x02ff, &value);
00836         usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00837 
00838         usb_stk11xx_write_registry(dev, 0x0204, values_204[i]);
00839         usb_stk11xx_write_registry(dev, 0x0205, values_205[i]);
00840 
00841         usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
00842         dev_stk11xx_check_device(dev, 500);
00843         usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00844     }
00845 
00846     return 0;
00847 }
00848 
00849 
00868 int dev_stk6a33_set_camera_quality(struct usb_stk11xx *dev)
00869 {
00870     int value;
00871 
00872     // Contrast register
00873     usb_stk11xx_read_registry(dev, 0x02ff, &value);
00874     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00875 
00876     usb_stk11xx_write_registry(dev, 0x0204, 0x00b3);
00877     usb_stk11xx_write_registry(dev, 0x0205, (dev->vsettings.contrast >> 8));
00878 
00879     usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
00880     dev_stk11xx_check_device(dev, 500);
00881     usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
00882 
00883     STK_DEBUG("Set colour : %d\n", dev->vsettings.colour);
00884     STK_DEBUG("Set contrast : %d\n", dev->vsettings.contrast);
00885     STK_DEBUG("Set whiteness : %d\n", dev->vsettings.whiteness);
00886     STK_DEBUG("Set brightness : %d\n", dev->vsettings.brightness);
00887 
00888     return 0;
00889 }
00890 
00891 
00912 int dev_stk6a33_set_camera_fps(struct usb_stk11xx *dev)
00913 {
00914     return 0;
00915 }
00916 
00917 
00928 int dev_stk6a33_start_stream(struct usb_stk11xx *dev)
00929 {
00930     int value;
00931     int value_116, value_117;
00932 
00933     usb_stk11xx_read_registry(dev, 0x0114, &value); // read 0x80
00934     usb_stk11xx_read_registry(dev, 0x0115, &value); // read 0x02
00935 
00936     usb_stk11xx_read_registry(dev, 0x0116, &value_116);
00937     usb_stk11xx_read_registry(dev, 0x0117, &value_117);
00938 
00939     usb_stk11xx_write_registry(dev, 0x0116, 0x0000);
00940     usb_stk11xx_write_registry(dev, 0x0117, 0x0000);
00941 
00942     usb_stk11xx_read_registry(dev, 0x0100, &value); // read 0x21
00943     usb_stk11xx_write_registry(dev, 0x0100, 0x00a0);
00944 
00945     usb_stk11xx_write_registry(dev, 0x0116, value_116);
00946     usb_stk11xx_write_registry(dev, 0x0117, value_117);
00947 
00948     return 0;
00949 }
00950 
00951 
00961 int dev_stk6a33_reconf_camera(struct usb_stk11xx *dev)
00962 {
00963     dev_stk6a33_configure_device(dev, 16);
00964 
00965     dev_stk11xx_camera_settings(dev);
00966 
00967     return 0;
00968 }
00969 
00970 
00981 int dev_stk6a33_stop_stream(struct usb_stk11xx *dev)
00982 {
00983     int value;
00984 
00985     usb_stk11xx_read_registry(dev, 0x0100, &value);
00986     usb_stk11xx_write_registry(dev, 0x0100, 0x0021);
00987 
00988     return 0;
00989 }
00990