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