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