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
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
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
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
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
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);
00940 usb_stk11xx_read_registry(dev, 0x0115, &value);
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);
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