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