Syntek USB Video Camera
stk11xx-dev-6a33.c
Go to the documentation of this file.
1
34#include <linux/module.h>
35#include <linux/init.h>
36#include <linux/kernel.h>
37#include <linux/version.h>
38#include <linux/errno.h>
39#include <linux/slab.h>
40#include <linux/kref.h>
41
42#include <linux/usb.h>
43#include <media/v4l2-common.h>
44#include <media/v4l2-ioctl.h>
45
46#include "stk11xx.h"
47#include "stk11xx-dev.h"
48
49
50//=============================================================================
51//
52// STK-6A33 API
53//
54//=============================================================================
55
56
71{
72 int i;
73 int value;
74
75 STK_INFO("Initialize USB2.0 Syntek Camera\n");
76
77 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
78 usb_stk11xx_write_registry(dev, 0x0002, 0x0078);
79 usb_stk11xx_write_registry(dev, 0x0003, 0x0080);
80
81 usb_stk11xx_write_registry(dev, 0x0002, 0x007f);
82 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
83 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
84 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
85 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
86 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
87 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
88 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
89 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
90 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
91 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
92 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
93 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
94 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
95 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
96 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
97 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
98 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
99 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
100 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
101 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
102 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
103 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
104 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
105 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
106 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
107 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
108 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
109 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
110 usb_stk11xx_write_registry(dev, 0x0002, 0x007d);
111 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
112
113 for (i=0; i<16; i++) {
114 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
115 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
116 usb_stk11xx_read_registry(dev, 0x0000, &value);
117
118 STK_DEBUG("Loop 1 : Read 0x0000 = %02X\n", value);
119 }
120
121 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
122 usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
123
124 usb_stk11xx_write_registry(dev, 0x0002, 0x007f);
125 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
126 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
127 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
128 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
129 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
130 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
131 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
132 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
133 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
134 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
135 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
136 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
137 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
138 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
139 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
140 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
141 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
142 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
143 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
144 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
145 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
146 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
147 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
148 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
149 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
150 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
151 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
152 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
153 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
154 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
155 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
156 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
157 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
158 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
159 usb_stk11xx_write_registry(dev, 0x0002, 0x007d);
160 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
161
162 for (i=0; i<16; i++) {
163 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
164 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
165 usb_stk11xx_read_registry(dev, 0x0000, &value);
166
167 STK_DEBUG("Loop 2 : Read 0x0000 = %02X\n", value);
168 }
169
170 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
171 usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
172
173 usb_stk11xx_write_registry(dev, 0x0002, 0x007f);
174 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
175 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
176 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
177 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
178 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
179 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
180 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
181 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
182 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
183 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
184 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
185 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
186 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
187 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
188 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
189 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
190 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
191 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
192 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
193 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
194 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
195 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
196 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
197 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
198 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
199 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
200 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
201 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
202 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
203 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
204 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
205 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
206 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
207 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
208 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
209 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
210 usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
211 usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
212 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
213 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
214 usb_stk11xx_write_registry(dev, 0x0002, 0x007d);
215 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
216
217 for (i=0; i<16; i++) {
218 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
219 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
220 usb_stk11xx_read_registry(dev, 0x0000, &value);
221
222 STK_DEBUG("Loop 3 : Read 0x0000 = %02X\n", value);
223 }
224
225 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
226 usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
227 usb_stk11xx_write_registry(dev, 0x0002, 0x007f);
228 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
229 usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
230
231 usb_stk11xx_write_registry(dev, 0x0117, 0x0000);
232 usb_stk11xx_read_registry(dev, 0x0103, &value);
233 usb_stk11xx_write_registry(dev, 0x0103, 0x0001);
234 usb_stk11xx_read_registry(dev, 0x0103, &value);
235 usb_stk11xx_write_registry(dev, 0x0103, 0x0000);
236
237 usb_stk11xx_write_registry(dev, 0x0000, 0x00e0);
238 usb_stk11xx_write_registry(dev, 0x0002, 0x00f8);
239 usb_stk11xx_write_registry(dev, 0x0002, 0x0078);
240 usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
241
244 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
245
248 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
249
252 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
253
256 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
257
260 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
261
264 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
265
268 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
269
272 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
273
276 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
277
280 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
281
284 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
285
288 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
289
291 usb_stk11xx_read_registry(dev, 0x02ff, &value);
292 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
293 usb_stk11xx_write_registry(dev, 0x0208, 0x0000);
294 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
295 dev_stk11xx_check_device(dev, 500);
296 usb_stk11xx_read_registry(dev, 0x0209, &value);
297 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
298
300 usb_stk11xx_read_registry(dev, 0x02ff, &value);
301 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
302 usb_stk11xx_write_registry(dev, 0x0208, 0x0000);
303 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
304 dev_stk11xx_check_device(dev, 500);
305 usb_stk11xx_read_registry(dev, 0x0209, &value);
306 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
307 usb_stk11xx_read_registry(dev, 0x02ff, &value);
308 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
309 usb_stk11xx_write_registry(dev, 0x0208, 0x00f1);
310 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
311 dev_stk11xx_check_device(dev, 500);
312 usb_stk11xx_read_registry(dev, 0x0209, &value);
313 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
314
316 dev_stk11xx_check_device(dev, 500);
317 usb_stk11xx_write_registry(dev, 0x0204, 0x00f1);
318 usb_stk11xx_write_registry(dev, 0x0205, 0x0000);
319 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
320 dev_stk11xx_check_device(dev, 500);
321 usb_stk11xx_read_registry(dev, 0x02ff, &value);
322 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
323 usb_stk11xx_write_registry(dev, 0x0208, 0x0000);
324 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
325 dev_stk11xx_check_device(dev, 500);
326 usb_stk11xx_read_registry(dev, 0x0209, &value);
327 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
328 usb_stk11xx_read_registry(dev, 0x02ff, &value);
329 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
330 usb_stk11xx_write_registry(dev, 0x0208, 0x00f1);
331 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
332 dev_stk11xx_check_device(dev, 500);
333 usb_stk11xx_read_registry(dev, 0x0209, &value);
334 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
335
337
339
341
342 // Device is initialized and is ready !!!
343 STK_INFO("Syntek USB2.0 Camera is ready\n");
344
345 return 0;
346}
347
348
365{
366 int value;
367
368 // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
369
370 static const int values_001B[] = {
371 0x0e, 0x03, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07
372 };
373 static const int values_001C[] = {
374 0x06, 0x02, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06
375 };
376 static const int values_0202[] = {
377 0x1e, 0x0a, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x14, 0x1e, 0x1f, 0x1f, 0x1f, 0x1f
378 };
379 static const int values_0110[] = {
380 0x07, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
381 };
382 static const int values_0112[] = {
383 0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
384 };
385 static const int values_0114[] = {
386 0x87, 0x80, 0x80, 0x80, 0x80, 0xbe, 0xbe, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80
387 };
388 static const int values_0115[] = {
389 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02
390 };
391 static const int values_0116[] = {
392 0xe7, 0xe0, 0xe0, 0xe0, 0xe0, 0xe9, 0xe9, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0
393 };
394 static const int values_0117[] = {
395 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01
396 };
397 static const int values_0100[] = {
398 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20
399 };
400
401 STK_DEBUG("dev_stk6a33_configure_device : %d\n", step);
402
403 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
404 usb_stk11xx_write_registry(dev, 0x0002, 0x0068);
405 usb_stk11xx_write_registry(dev, 0x0003, 0x0080);
406 usb_stk11xx_write_registry(dev, 0x0005, 0x0000);
407
408 usb_stk11xx_write_registry(dev, 0x0007, 0x0003);
409 usb_stk11xx_write_registry(dev, 0x000d, 0x0000);
410 usb_stk11xx_write_registry(dev, 0x000f, 0x0002);
411 usb_stk11xx_write_registry(dev, 0x0300, 0x0012);
412 usb_stk11xx_write_registry(dev, 0x0350, 0x0041);
413
414 usb_stk11xx_write_registry(dev, 0x0351, 0x0000);
415 usb_stk11xx_write_registry(dev, 0x0352, 0x0000);
416 usb_stk11xx_write_registry(dev, 0x0353, 0x0000);
417 usb_stk11xx_write_registry(dev, 0x0018, 0x0010);
418 usb_stk11xx_write_registry(dev, 0x0019, 0x0000);
419
420 usb_stk11xx_write_registry(dev, 0x001b, values_001B[step]);
421 usb_stk11xx_write_registry(dev, 0x001c, values_001C[step]);
422 usb_stk11xx_write_registry(dev, 0x0300, 0x0080);
423 usb_stk11xx_write_registry(dev, 0x001a, 0x0004);
424 usb_stk11xx_write_registry(dev, 0x0202, values_0202[step]);
425
426 usb_stk11xx_write_registry(dev, 0x0110, values_0110[step]);
427 usb_stk11xx_write_registry(dev, 0x0111, 0x0000);
428 usb_stk11xx_write_registry(dev, 0x0112, values_0112[step]);
429 usb_stk11xx_write_registry(dev, 0x0113, 0x0000);
430 usb_stk11xx_write_registry(dev, 0x0114, values_0114[step]);
431
432 usb_stk11xx_write_registry(dev, 0x0115, values_0115[step]);
433 usb_stk11xx_write_registry(dev, 0x0116, values_0116[step]);
434 usb_stk11xx_write_registry(dev, 0x0117, values_0117[step]);
435
436 usb_stk11xx_read_registry(dev, 0x0100, &value);
437 usb_stk11xx_write_registry(dev, 0x0100, values_0100[step]);
438
439 usb_stk11xx_write_registry(dev, 0x0200, 0x0080);
440 usb_stk11xx_write_registry(dev, 0x0200, 0x0000);
441 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
442
443
444 switch (step) {
445 case 0:
446 usb_stk11xx_write_registry(dev, 0x0203, 0x0040);
447
448 usb_stk11xx_write_registry(dev, 0x0204, 0x0041);
449 usb_stk11xx_write_registry(dev, 0x0205, 0x0001);
450 usb_stk11xx_write_registry(dev, 0x0204, 0x001c);
451 usb_stk11xx_write_registry(dev, 0x0205, 0x0002);
452
453 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
454
455 break;
456
457 case 1:
458 usb_stk11xx_write_registry(dev, 0x0203, 0x0022);
459
460 usb_stk11xx_write_registry(dev, 0x0204, 0x0027);
461 usb_stk11xx_write_registry(dev, 0x0205, 0x00a5);
462
463 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
464
465 break;
466
467 case 2:
468 usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
469
470 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
471 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
472 usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
473 usb_stk11xx_write_registry(dev, 0x0205, 0x00bf);
474
475 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
476
477 break;
478
479 case 3:
480 usb_stk11xx_write_registry(dev, 0x0203, 0x0042);
481
482 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
483 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
484 usb_stk11xx_write_registry(dev, 0x0204, 0x0024);
485 usb_stk11xx_write_registry(dev, 0x0205, 0x00a5);
486
487 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
488
489 break;
490
491 case 4:
492 usb_stk11xx_write_registry(dev, 0x0203, 0x0042);
493
494 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
495 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
496 usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
497 usb_stk11xx_write_registry(dev, 0x0205, 0x00e0);
498 usb_stk11xx_write_registry(dev, 0x0204, 0x0024);
499 usb_stk11xx_write_registry(dev, 0x0205, 0x00a5);
500
501 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
502
503 break;
504
505 case 5:
506 usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
507
508 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
509 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
510 usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
511 usb_stk11xx_write_registry(dev, 0x0205, 0x00ff);
512
513 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
514
515 break;
516
517 case 6:
518 usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
519
520 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
521 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
522 usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
523 usb_stk11xx_write_registry(dev, 0x0205, 0x00ff);
524
525 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
526
527 break;
528
529 case 7:
530 usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
531
532 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
533 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
534 usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
535 usb_stk11xx_write_registry(dev, 0x0205, 0x00b7);
536
537 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
538
539 break;
540
541 case 8:
542 usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
543
544 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
545 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
546 usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
547 usb_stk11xx_write_registry(dev, 0x0205, 0x00b7);
548
549 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
550
551 break;
552
553 case 9:
554 usb_stk11xx_write_registry(dev, 0x0203, 0x0080);
555
556 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
557 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
558 usb_stk11xx_write_registry(dev, 0x0204, 0x000a);
559 usb_stk11xx_write_registry(dev, 0x0205, 0x00ff);
560
561 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
562
563 break;
564
565 case 10:
566 usb_stk11xx_write_registry(dev, 0x0203, 0x00dc);
567
568 usb_stk11xx_write_registry(dev, 0x0204, 0x0015);
569 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
570
571 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
572
573 break;
574
575 case 11:
576 usb_stk11xx_write_registry(dev, 0x0203, 0x00ec);
577
578 usb_stk11xx_write_registry(dev, 0x0204, 0x0015);
579 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
580
581 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
582
583 break;
584
585 case 12:
586 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba);
587 break;
588
589 case 13:
590 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba);
591 break;
592
593 case 14:
594 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba);
595
596 usb_stk11xx_write_registry(dev, 0x0204, 0x0001);
597 usb_stk11xx_write_registry(dev, 0x0205, 0x0000);
598
599 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
600 break;
601
602 case 15:
603 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba);
604
606
607 usb_stk11xx_write_registry(dev, 0x0200, 0x0080);
608 usb_stk11xx_write_registry(dev, 0x0200, 0x0000);
609 usb_stk11xx_write_registry(dev, 0x02ff, 0x0001);
610 usb_stk11xx_write_registry(dev, 0x0203, 0x00a0);
611
612 break;
613
614 case 16:
615 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba);
616
618
619 usb_stk11xx_write_registry(dev, 0x0200, 0x0080);
620 usb_stk11xx_write_registry(dev, 0x0200, 0x0000);
621 usb_stk11xx_write_registry(dev, 0x02ff, 0x0001);
622 usb_stk11xx_write_registry(dev, 0x0203, 0x00a0);
623
624
625 break;
626
627 case 17:
628 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba);
629
631
632 break;
633 }
634
635 return 0;
636}
637
638
649{
650 int value;
651
652 usb_stk11xx_read_registry(dev, 0x0104, &value);
653 usb_stk11xx_read_registry(dev, 0x0105, &value);
654 usb_stk11xx_read_registry(dev, 0x0106, &value);
655
656 usb_stk11xx_write_registry(dev, 0x0100, 0x0021);
657 usb_stk11xx_write_registry(dev, 0x0116, 0x0000);
658 usb_stk11xx_write_registry(dev, 0x0117, 0x0000);
659 usb_stk11xx_write_registry(dev, 0x0018, 0x0000);
660
661 usb_stk11xx_read_registry(dev, 0x0000, &value);
662 usb_stk11xx_write_registry(dev, 0x0000, 0x0049);
663
664 return 0;
665}
666
667
679{
681
683
684 usb_stk11xx_write_registry(dev, 0x0000, 0x00e0);
685 usb_stk11xx_write_registry(dev, 0x0002, 0x00e8);
686 usb_stk11xx_write_registry(dev, 0x0002, 0x0078);
687 usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
688
690
692
693 return 0;
694}
695
696
708{
709 int i;
710 int retok;
711 int value;
712
713 int asize;
714 static const int values_204[] = {
715 0xf0, 0xf1, 0x0d, 0xf1, 0x0d, 0xf1, 0xf0, 0xf1, 0x35, 0xf1,
716 0xf0, 0xf1, 0x06, 0xf1, 0xf0, 0xf1, 0xdd, 0xf1, 0xf0, 0xf1,
717 0x1f, 0xf1, 0x20, 0xf1, 0x21, 0xf1, 0x22, 0xf1, 0x23, 0xf1,
718 0x24, 0xf1, 0x28, 0xf1, 0x29, 0xf1, 0x5e, 0xf1, 0x5f, 0xf1,
719 0x60, 0xf1, 0xef, 0xf1, 0xf2, 0xf1, 0x02, 0xf1, 0x03, 0xf1,
720 0x04, 0xf1, 0x09, 0xf1, 0x0a, 0xf1, 0x0b, 0xf1, 0x0c, 0xf1,
721 0x0d, 0xf1, 0x0e, 0xf1, 0x0f, 0xf1, 0x10, 0xf1, 0x11, 0xf1,
722 0x15, 0xf1, 0x16, 0xf1, 0x17, 0xf1, 0x18, 0xf1, 0x19, 0xf1,
723 0x1a, 0xf1, 0x1b, 0xf1, 0x1c, 0xf1, 0x1d, 0xf1, 0x1e, 0xf1,
724 0xf0, 0xf1, 0x06, 0xf1, 0x06, 0xf1, 0xf0, 0xf1, 0x80, 0xf1,
725 0x81, 0xf1, 0x82, 0xf1, 0x83, 0xf1, 0x84, 0xf1, 0x85, 0xf1,
726 0x86, 0xf1, 0x87, 0xf1, 0x88, 0xf1, 0x89, 0xf1, 0x8a, 0xf1,
727 0x8b, 0xf1, 0x8c, 0xf1, 0x8d, 0xf1, 0x8e, 0xf1, 0x8f, 0xf1,
728 0x90, 0xf1, 0x91, 0xf1, 0x92, 0xf1, 0x93, 0xf1, 0x94, 0xf1,
729 0x95, 0xf1, 0xb6, 0xf1, 0xb7, 0xf1, 0xb8, 0xf1, 0xb9, 0xf1,
730 0xba, 0xf1, 0xbb, 0xf1, 0xbc, 0xf1, 0xbd, 0xf1, 0xbe, 0xf1,
731 0xbf, 0xf1, 0xc0, 0xf1, 0xc1, 0xf1, 0xc2, 0xf1, 0xc3, 0xf1,
732 0xc4, 0xf1, 0x06, 0xf1, 0xf0, 0xf1, 0x53, 0xf1, 0x54, 0xf1,
733 0x55, 0xf1, 0x56, 0xf1, 0x57, 0xf1, 0x58, 0xf1, 0xf0, 0xf1,
734 0xa7, 0xf1, 0xaa, 0xf1, 0x3a, 0xf1, 0xa1, 0xf1, 0xa4, 0xf1,
735 0x9b, 0xf1, 0x08, 0xf1, 0xf0, 0xf1, 0x2f, 0xf1, 0x9c, 0xf1,
736 0xd2, 0xf1, 0xcc, 0xf1, 0xcb, 0xf1, 0x2e, 0xf1, 0x67, 0xf1,
737 0xf0, 0xf1, 0x65, 0xf1, 0x66, 0xf1, 0x67, 0xf1, 0x65, 0xf1,
738 0xf0, 0xf1, 0x05, 0xf1, 0x07, 0xf1, 0xf0, 0xf1, 0x39, 0xf1,
739 0x3b, 0xf1, 0x3a, 0xf1, 0x3c, 0xf1, 0x57, 0xf1, 0x58, 0xf1,
740 0x59, 0xf1, 0x5a, 0xf1, 0x5c, 0xf1, 0x5d, 0xf1, 0x64, 0xf1,
741 0xf0, 0xf1, 0x5b, 0xf1, 0xf0, 0xf1, 0x36, 0xf1, 0x37, 0xf1,
742 0xf0, 0xf1, 0x08, 0xf1
743 };
744 static const int values_205[] = {
745 0x00, 0x00, 0x00, 0x0b, 0x00, 0x08, 0x00, 0x00, 0x00, 0x22,
746 0x00, 0x01, 0x70, 0x0e, 0x00, 0x02, 0x18, 0xe0, 0x00, 0x02,
747 0x01, 0x80, 0xc8, 0x14, 0x80, 0x80, 0xa0, 0x78, 0xa0, 0x78,
748 0x5f, 0x20, 0xea, 0x02, 0x86, 0x7a, 0x59, 0x4c, 0x4d, 0x51,
749 0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0xee, 0x39, 0x23,
750 0x07, 0x24, 0x00, 0xcd, 0x00, 0x93, 0x00, 0x04, 0x00, 0x5c,
751 0x00, 0xd9, 0x00, 0x53, 0x00, 0x08, 0x00, 0x91, 0x00, 0xcf,
752 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
753 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
754 0x00, 0x01, 0xf0, 0x0e, 0x70, 0x0e, 0x00, 0x01, 0x00, 0x0b,
755 0xee, 0x08, 0xf8, 0xf3, 0x00, 0xfb, 0xee, 0x09, 0xf7, 0xf3,
756 0xff, 0xfa, 0xf2, 0x08, 0xf9, 0xf5, 0xff, 0xf9, 0xe4, 0x10,
757 0xf1, 0xea, 0xf8, 0xf6, 0x00, 0x00, 0xe9, 0x0f, 0xf2, 0xed,
758 0xf6, 0xf6, 0x00, 0x00, 0xea, 0x0d, 0xf4, 0xf1, 0xf8, 0xf8,
759 0x00, 0x00, 0x07, 0x06, 0x1c, 0x0b, 0x08, 0x06, 0x17, 0x0a,
760 0x05, 0x06, 0x1a, 0x07, 0x06, 0x04, 0x0a, 0x08, 0x00, 0x19,
761 0x06, 0x05, 0x07, 0x0a, 0x00, 0x1f, 0x04, 0x04, 0x04, 0x08,
762 0x00, 0x1b, 0x74, 0x0e, 0x00, 0x01, 0x0b, 0x03, 0x47, 0x22,
763 0xac, 0x82, 0xda, 0xc7, 0xf5, 0xe9, 0xff, 0x00, 0x00, 0x01,
764 0x02, 0x80, 0x01, 0xe0, 0x43, 0x00, 0x05, 0x00, 0x04, 0x00,
765 0x43, 0x00, 0x01, 0x80, 0x00, 0x02, 0xd1, 0x00, 0xd1, 0x00,
766 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x0c, 0x50, 0x10, 0x10,
767 0x00, 0x00, 0xa0, 0x00, 0x20, 0x03, 0x05, 0x01, 0x20, 0x00,
768 0x00, 0x00, 0x01, 0xb8, 0x00, 0xd8, 0x00, 0x02, 0x06, 0xc0,
769 0x04, 0x0e, 0x06, 0xc0, 0x05, 0x64, 0x02, 0x08, 0x02, 0x71,
770 0x02, 0x08, 0x02, 0x71, 0x12, 0x0d, 0x17, 0x12, 0x5e, 0x1c,
771 0x00, 0x02, 0x00, 0x03, 0x00, 0x02, 0x78, 0x10, 0x83, 0x04,
772 0x00, 0x00, 0x00, 0x21
773 };
774
775
776 asize = ARRAY_SIZE(values_204);
777
778 for(i=0; i<asize; i++) {
779 usb_stk11xx_read_registry(dev, 0x02ff, &value);
780 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
781
782 usb_stk11xx_write_registry(dev, 0x0203, 0x00ba);
783
784 usb_stk11xx_write_registry(dev, 0x0204, values_204[i]);
785 usb_stk11xx_write_registry(dev, 0x0205, values_205[i]);
786 usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
787
788 retok = dev_stk11xx_check_device(dev, 500);
789
790 if (retok != 1) {
791 STK_ERROR("Load default sensor settings fail !\n");
792 return -1;
793 }
794
795 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
796 }
797
798 retok = dev_stk11xx_check_device(dev, 500);
799
800 return 0;
801}
802
803
818{
819 int i;
820 int value;
821
822 int asize;
823 static const int values_204[] = {
824 0xf0, 0xf1, 0x2e, 0xf1, 0xf0, 0xf1, 0x5b, 0xf1, 0xf0, 0xf1, 0x36, 0xf1, 0x37, 0xf1, 0xf0, 0xf1, 0x08, 0xf1
825 };
826 static const int values_205[] = {
827 0x00, 0x02, 0x0c, 0x3c, 0x00, 0x02, 0x00, 0x03, 0x00, 0x02, 0x78, 0x10, 0x83, 0x04, 0x00, 0x00, 0x00, 0x21
828 };
829
830
831 asize = ARRAY_SIZE(values_204);
832
833 // Contrast register
834 for (i=0; i<asize; i++) {
835 usb_stk11xx_read_registry(dev, 0x02ff, &value);
836 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
837
838 usb_stk11xx_write_registry(dev, 0x0204, values_204[i]);
839 usb_stk11xx_write_registry(dev, 0x0205, values_205[i]);
840
841 usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
842 dev_stk11xx_check_device(dev, 500);
843 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
844 }
845
846 return 0;
847}
848
849
869{
870 int value;
871
872 // Contrast register
873 usb_stk11xx_read_registry(dev, 0x02ff, &value);
874 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
875
876 usb_stk11xx_write_registry(dev, 0x0204, 0x00b3);
877 usb_stk11xx_write_registry(dev, 0x0205, (dev->vsettings.contrast >> 8));
878
879 usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
880 dev_stk11xx_check_device(dev, 500);
881 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
882
883 STK_DEBUG("Set colour : %d\n", dev->vsettings.colour);
884 STK_DEBUG("Set contrast : %d\n", dev->vsettings.contrast);
885 STK_DEBUG("Set whiteness : %d\n", dev->vsettings.whiteness);
886 STK_DEBUG("Set brightness : %d\n", dev->vsettings.brightness);
887
888 return 0;
889}
890
891
913{
914 return 0;
915}
916
917
929{
930 int value;
931 int value_116, value_117;
932
933 usb_stk11xx_read_registry(dev, 0x0114, &value); // read 0x80
934 usb_stk11xx_read_registry(dev, 0x0115, &value); // read 0x02
935
936 usb_stk11xx_read_registry(dev, 0x0116, &value_116);
937 usb_stk11xx_read_registry(dev, 0x0117, &value_117);
938
939 usb_stk11xx_write_registry(dev, 0x0116, 0x0000);
940 usb_stk11xx_write_registry(dev, 0x0117, 0x0000);
941
942 usb_stk11xx_read_registry(dev, 0x0100, &value); // read 0x21
943 usb_stk11xx_write_registry(dev, 0x0100, 0x00a0);
944
945 usb_stk11xx_write_registry(dev, 0x0116, value_116);
946 usb_stk11xx_write_registry(dev, 0x0117, value_117);
947
948 return 0;
949}
950
951
962{
964
966
967 return 0;
968}
969
970
982{
983 int value;
984
985 usb_stk11xx_read_registry(dev, 0x0100, &value);
986 usb_stk11xx_write_registry(dev, 0x0100, 0x0021);
987
988 return 0;
989}
990
int dev_stk6a33_camera_settings(struct usb_stk11xx *dev)
This function permits to modify the settings of the camera.
int dev_stk6a33_stop_stream(struct usb_stk11xx *dev)
This function sets the device to stop the stream.
int dev_stk6a33_init_camera(struct usb_stk11xx *dev)
This function initializes the device for the stream.
int dev_stk6a33_camera_asleep(struct usb_stk11xx *dev)
Wake-up the camera.
int dev_stk6a33_configure_device(struct usb_stk11xx *dev, int step)
This function permits to configure the device.
int dev_stk6a33_sensor_settings(struct usb_stk11xx *dev)
This function permits to set default sensor settings.
int dev_stk6a33_reconf_camera(struct usb_stk11xx *dev)
Reconfigure the camera before the stream.
int dev_stk6a33_start_stream(struct usb_stk11xx *dev)
This function sets the device to start the stream.
int dev_stk6a33_initialize_device(struct usb_stk11xx *dev)
This function permits to initialize the device.
int dev_stk6a33_set_camera_quality(struct usb_stk11xx *dev)
This function permits to modify the settings of the camera.
int dev_stk6a33_set_camera_fps(struct usb_stk11xx *dev)
This function permits to modify the settings of the camera.
int dev_stk11xx_camera_off(struct usb_stk11xx *dev)
This function switchs off the camera.
int dev_stk11xx_camera_settings(struct usb_stk11xx *dev)
This function permits to modify the settings of the camera.
int dev_stk11xx_check_device(struct usb_stk11xx *dev, int nbr)
This function permits to check the device in reading the register 0x0201.
Driver for Syntek USB video camera.
int usb_stk11xx_write_registry(struct usb_stk11xx *dev, __u16 index, __u16 value)
Write a 16-bits value to a 16-bits register.
int usb_stk11xx_read_registry(struct usb_stk11xx *dev, __u16 index, int *value)
Read a 16-bits value from a 16-bits register.
int usb_stk11xx_set_feature(struct usb_stk11xx *dev, int index)
Send the message SET_FEATURE and choose the interface.
Driver for Syntek USB video camera.
#define STK_ERROR(str, args...)
Definition stk11xx.h:156
#define STK_INFO(str, args...)
Definition stk11xx.h:155
#define STK_DEBUG(str, args...)
Definition stk11xx.h:158
struct stk11xx_video vsettings
Definition stk11xx.h:336