Syntek USB Video Camera
stk11xx-dev-a311.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-M811 API / STK-A311 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, 0x0068);
79 usb_stk11xx_write_registry(dev, 0x0003, 0x0080);
80
81 usb_stk11xx_write_registry(dev, 0x0002, 0x006f);
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, 0x006d);
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, 0x006f);
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, 0x006d);
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, 0x006f);
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, 0x006d);
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, 0x006f);
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, 0x00e8);
239 usb_stk11xx_write_registry(dev, 0x0002, 0x0068);
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
251 dev_stk11xx_check_device(dev, 500);
252 usb_stk11xx_read_registry(dev, 0x02ff, &value);
253 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
254 usb_stk11xx_write_registry(dev, 0x0208, 0x0013);
255 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
256 dev_stk11xx_check_device(dev, 500);
257 usb_stk11xx_read_registry(dev, 0x0209, &value);
258 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
259 usb_stk11xx_read_registry(dev, 0x02ff, &value);
260 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
261 usb_stk11xx_write_registry(dev, 0x0208, 0x000a);
262 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
263 dev_stk11xx_check_device(dev, 500);
264 usb_stk11xx_read_registry(dev, 0x0209, &value);
265 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
266 usb_stk11xx_read_registry(dev, 0x02ff, &value);
267 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
268 usb_stk11xx_write_registry(dev, 0x0208, 0x000b);
269 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
270 dev_stk11xx_check_device(dev, 500);
271 usb_stk11xx_read_registry(dev, 0x0209, &value);
272 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
273
276 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
277
280 usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
281
283 dev_stk11xx_check_device(dev, 500);
284 usb_stk11xx_read_registry(dev, 0x02ff, &value);
285 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
286 usb_stk11xx_write_registry(dev, 0x0208, 0x0013);
287 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
288 dev_stk11xx_check_device(dev, 500);
289 usb_stk11xx_read_registry(dev, 0x0209, &value);
290 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
291 usb_stk11xx_read_registry(dev, 0x02ff, &value);
292 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
293 usb_stk11xx_write_registry(dev, 0x0208, 0x000a);
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 usb_stk11xx_read_registry(dev, 0x02ff, &value);
299 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
300 usb_stk11xx_write_registry(dev, 0x0208, 0x000b);
301 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
302 dev_stk11xx_check_device(dev, 500);
303 usb_stk11xx_read_registry(dev, 0x0209, &value);
304 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
305
307 dev_stk11xx_check_device(dev, 500);
308 usb_stk11xx_read_registry(dev, 0x02ff, &value);
309 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
310 usb_stk11xx_write_registry(dev, 0x0208, 0x0013);
311 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
312 dev_stk11xx_check_device(dev, 500);
313 usb_stk11xx_read_registry(dev, 0x0209, &value);
314 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
315 usb_stk11xx_read_registry(dev, 0x02ff, &value);
316 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
317 usb_stk11xx_write_registry(dev, 0x0208, 0x000a);
318 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
319 dev_stk11xx_check_device(dev, 500);
320 usb_stk11xx_read_registry(dev, 0x0209, &value);
321 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
322 usb_stk11xx_read_registry(dev, 0x02ff, &value);
323 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
324 usb_stk11xx_write_registry(dev, 0x0208, 0x000b);
325 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
326 dev_stk11xx_check_device(dev, 500);
327 usb_stk11xx_read_registry(dev, 0x0209, &value);
328 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
329
331 dev_stk11xx_check_device(dev, 500);
332 usb_stk11xx_read_registry(dev, 0x02ff, &value);
333 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
334 usb_stk11xx_write_registry(dev, 0x0208, 0x0013);
335 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
336 dev_stk11xx_check_device(dev, 500);
337 usb_stk11xx_read_registry(dev, 0x0209, &value);
338 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
339 usb_stk11xx_read_registry(dev, 0x02ff, &value);
340 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
341 usb_stk11xx_write_registry(dev, 0x0208, 0x000a);
342 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
343 dev_stk11xx_check_device(dev, 500);
344 usb_stk11xx_read_registry(dev, 0x0209, &value);
345 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
346 usb_stk11xx_read_registry(dev, 0x02ff, &value);
347 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
348 usb_stk11xx_write_registry(dev, 0x0208, 0x000b);
349 usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
350 dev_stk11xx_check_device(dev, 500);
351 usb_stk11xx_read_registry(dev, 0x0209, &value);
352 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
353
354 usb_stk11xx_write_registry(dev, 0x0002, 0x006f);
355 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
356 usb_stk11xx_write_registry(dev, 0x0002, 0x006d);
357 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
358 usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
359 usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
360
362
364
366
367 // Device is initialized and is ready !!!
368 STK_INFO("Syntek USB2.0 Camera is ready\n");
369
370 return 0;
371}
372
373
393{
394 int value;
395
396 // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
397
398 static const int values_001B[] = {
399 0x0e, 0x03, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e
400 };
401 static const int values_001C[] = {
402 0x06, 0x02, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x0e
403 };
404 static const int values_0202[] = {
405 0x1e, 0x0a, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e
406 };
407 static const int values_0110[] = {
408 0x07, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00
409 };
410 static const int values_0112[] = {
411 0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00
412 };
413 static const int values_0114[] = {
414 0x87, 0x80, 0x80, 0x80, 0x80, 0xbe, 0xbe, 0x80, 0x80, 0x80, 0x80, 0x00
415 };
416 static const int values_0115[] = {
417 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05
418 };
419 static const int values_0116[] = {
420 0xe7, 0xe0, 0xe0, 0xe0, 0xe0, 0xe9, 0xe9, 0xe0, 0xe0, 0xe0, 0xe0, 0x00
421 };
422 static const int values_0117[] = {
423 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04
424 };
425 static const int values_0100[] = {
426 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21
427 };
428
429 STK_DEBUG("dev_stka311_configure_device : %d\n", step);
430
431 usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
432 usb_stk11xx_write_registry(dev, 0x0002, 0x0068);
433 usb_stk11xx_write_registry(dev, 0x0003, 0x0080);
434 usb_stk11xx_write_registry(dev, 0x0005, 0x0000);
435
436 usb_stk11xx_write_registry(dev, 0x0007, 0x0003);
437 usb_stk11xx_write_registry(dev, 0x000d, 0x0000);
438 usb_stk11xx_write_registry(dev, 0x000f, 0x0002);
439 usb_stk11xx_write_registry(dev, 0x0300, 0x0012);
440 usb_stk11xx_write_registry(dev, 0x0350, 0x0041);
441
442 usb_stk11xx_write_registry(dev, 0x0351, 0x0000);
443 usb_stk11xx_write_registry(dev, 0x0352, 0x0000);
444 usb_stk11xx_write_registry(dev, 0x0353, 0x0000);
445 usb_stk11xx_write_registry(dev, 0x0018, 0x0010);
446 usb_stk11xx_write_registry(dev, 0x0019, 0x0000);
447
448 usb_stk11xx_write_registry(dev, 0x001b, values_001B[step]);
449 usb_stk11xx_write_registry(dev, 0x001c, values_001C[step]);
450 usb_stk11xx_write_registry(dev, 0x0300, 0x0080);
451 usb_stk11xx_write_registry(dev, 0x001a, 0x0004);
452 usb_stk11xx_write_registry(dev, 0x0202, values_0202[step]);
453
454 usb_stk11xx_write_registry(dev, 0x0110, values_0110[step]);
455 usb_stk11xx_write_registry(dev, 0x0111, 0x0000);
456 usb_stk11xx_write_registry(dev, 0x0112, values_0112[step]);
457 usb_stk11xx_write_registry(dev, 0x0113, 0x0000);
458 usb_stk11xx_write_registry(dev, 0x0114, values_0114[step]);
459
460 usb_stk11xx_write_registry(dev, 0x0115, values_0115[step]);
461 usb_stk11xx_write_registry(dev, 0x0116, values_0116[step]);
462 usb_stk11xx_write_registry(dev, 0x0117, values_0117[step]);
463
464 usb_stk11xx_read_registry(dev, 0x0100, &value);
465 usb_stk11xx_write_registry(dev, 0x0100, values_0100[step]);
466
467 usb_stk11xx_write_registry(dev, 0x0200, 0x0080);
468 usb_stk11xx_write_registry(dev, 0x0200, 0x0000);
469 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
470
471
472 switch (step) {
473 case 0:
474 usb_stk11xx_write_registry(dev, 0x0203, 0x0040);
475
476 usb_stk11xx_write_registry(dev, 0x0204, 0x0041);
477 usb_stk11xx_write_registry(dev, 0x0205, 0x0001);
478 usb_stk11xx_write_registry(dev, 0x0204, 0x001c);
479 usb_stk11xx_write_registry(dev, 0x0205, 0x0002);
480
481 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
482
483 break;
484
485 case 1:
486 usb_stk11xx_write_registry(dev, 0x0203, 0x0022);
487
488 usb_stk11xx_write_registry(dev, 0x0204, 0x0027);
489 usb_stk11xx_write_registry(dev, 0x0205, 0x00a5);
490
491 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
492
493 break;
494
495 case 2:
496 usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
497
498 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
499 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
500 usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
501 usb_stk11xx_write_registry(dev, 0x0205, 0x00bf);
502
503 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
504
505 break;
506
507 case 3:
508 usb_stk11xx_write_registry(dev, 0x0203, 0x0042);
509
510 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
511 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
512 usb_stk11xx_write_registry(dev, 0x0204, 0x0024);
513 usb_stk11xx_write_registry(dev, 0x0205, 0x00a5);
514
515 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
516
517 break;
518
519 case 4:
520 usb_stk11xx_write_registry(dev, 0x0203, 0x0042);
521
522 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
523 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
524 usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
525 usb_stk11xx_write_registry(dev, 0x0205, 0x00e0);
526 usb_stk11xx_write_registry(dev, 0x0204, 0x0024);
527 usb_stk11xx_write_registry(dev, 0x0205, 0x00a5);
528
529 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
530
531 break;
532
533 case 5:
534 usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
535
536 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
537 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
538 usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
539 usb_stk11xx_write_registry(dev, 0x0205, 0x00ff);
540
541 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
542
543 break;
544
545 case 6:
546 usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
547
548 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
549 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
550 usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
551 usb_stk11xx_write_registry(dev, 0x0205, 0x00ff);
552
553 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
554
555 break;
556
557 case 7:
558 usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
559
560 usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
561 usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
562 usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
563 usb_stk11xx_write_registry(dev, 0x0205, 0x00b7);
564
565 usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
566
567 break;
568
569 case 8:
570 usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
571
573
574 usb_stk11xx_write_registry(dev, 0x0200, 0x0080);
575 usb_stk11xx_write_registry(dev, 0x0200, 0x0000);
576 usb_stk11xx_write_registry(dev, 0x02ff, 0x0001);
577 usb_stk11xx_write_registry(dev, 0x0203, 0x00a0);
578
579 break;
580
581 case 9:
582 usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
583
585
586 usb_stk11xx_write_registry(dev, 0x0104, 0x0000);
587 usb_stk11xx_write_registry(dev, 0x0105, 0x0000);
588 usb_stk11xx_write_registry(dev, 0x0106, 0x0000);
589
590 break;
591
592 case 10:
593 case 11:
594 usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
595
597
598 usb_stk11xx_write_registry(dev, 0x0106, 0x0000);
599 usb_stk11xx_read_registry(dev, 0x02ff, &value);
600 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
601 usb_stk11xx_write_registry(dev, 0x0204, 0x002a);
602 usb_stk11xx_write_registry(dev, 0x0205, 0x0000);
603 usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
604 dev_stk11xx_check_device(dev, 500);
605 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
606 usb_stk11xx_read_registry(dev, 0x02ff, &value);
607 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
608 usb_stk11xx_write_registry(dev, 0x0204, 0x002b);
609 usb_stk11xx_write_registry(dev, 0x0205, 0x0000);
610 usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
611 dev_stk11xx_check_device(dev, 500);
612 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
613
614 break;
615 }
616
617 return 0;
618}
619
620
631{
632 int value;
633
634 usb_stk11xx_read_registry(dev, 0x0104, &value);
635 usb_stk11xx_read_registry(dev, 0x0105, &value);
636 usb_stk11xx_read_registry(dev, 0x0106, &value);
637
638 usb_stk11xx_write_registry(dev, 0x0100, 0x0021);
639 usb_stk11xx_write_registry(dev, 0x0116, 0x0000);
640 usb_stk11xx_write_registry(dev, 0x0117, 0x0000);
641 usb_stk11xx_write_registry(dev, 0x0018, 0x0000);
642
643 usb_stk11xx_read_registry(dev, 0x0000, &value);
644 usb_stk11xx_write_registry(dev, 0x0000, 0x004c);
645
646 return 0;
647}
648
649
661{
662 int value;
663
665
667
668 usb_stk11xx_write_registry(dev, 0x0000, 0x00e0);
669 usb_stk11xx_write_registry(dev, 0x0002, 0x00e8);
670 usb_stk11xx_write_registry(dev, 0x0002, 0x0068);
671 usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
672
674
676
677 usb_stk11xx_read_registry(dev, 0x02ff, &value);
678 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
679 usb_stk11xx_write_registry(dev, 0x0204, 0x002a);
680 usb_stk11xx_write_registry(dev, 0x0205, 0x0000);
681 usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
682 dev_stk11xx_check_device(dev, 500);
683 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
684 usb_stk11xx_read_registry(dev, 0x02ff, &value);
685 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
686 usb_stk11xx_write_registry(dev, 0x0204, 0x002b);
687 usb_stk11xx_write_registry(dev, 0x0205, 0x0000);
688 usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
689 dev_stk11xx_check_device(dev, 500);
690 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
691
693
694 return 0;
695}
696
697
709{
710 int i;
711 int retok;
712 int value;
713
714 int asize;
715 int *values_204 = NULL;
716 int *values_205 = NULL;
717
718 // From 80x60 to 640x480
719 static const int values_1_204[] = {
720 0x12, 0x11, 0x3b, 0x6a, 0x13, 0x10, 0x00, 0x01, 0x02, 0x13,
721 0x39, 0x38, 0x37, 0x35, 0x0e, 0x12, 0x04, 0x0c, 0x0d, 0x17,
722 0x18, 0x32, 0x19, 0x1a, 0x03, 0x1b, 0x16, 0x33, 0x34, 0x41,
723 0x96, 0x3d, 0x69, 0x3a, 0x8e, 0x3c, 0x8f, 0x8b, 0x8c, 0x94,
724 0x95, 0x40, 0x29, 0x0f, 0xa5, 0x1e, 0xa9, 0xaa, 0xab, 0x90,
725 0x91, 0x9f, 0xa0, 0x24, 0x25, 0x26, 0x14, 0x2a, 0x2b
726 };
727 static const int values_1_205[] = {
728 0x45, 0x80, 0x01, 0x7d, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80,
729 0x50, 0x93, 0x00, 0x81, 0x20, 0x45, 0x00, 0x00, 0x00, 0x24,
730 0xc4, 0xb6, 0x00, 0x3c, 0x36, 0x00, 0x07, 0xe2, 0xbf, 0x00,
731 0x04, 0x19, 0x40, 0x0d, 0x00, 0x73, 0xdf, 0x06, 0x20, 0x88,
732 0x88, 0xc1, 0x3f, 0x42, 0x80, 0x04, 0xb8, 0x92, 0x0a, 0x00,
733 0x00, 0x00, 0x00, 0x68, 0x5c, 0xc3, 0x2e, 0x00, 0x00
734 };
735
736 // From 800x600 to 1280x1024
737 static const int values_2_204[] = {
738 0x12, 0x11, 0x3b, 0x6a, 0x13, 0x10, 0x00, 0x01, 0x02, 0x13,
739 0x39, 0x38, 0x37, 0x35, 0x0e, 0x12, 0x04, 0x0c, 0x0d, 0x17,
740 0x18, 0x32, 0x19, 0x1a, 0x03, 0x1b, 0x16, 0x33, 0x34, 0x41,
741 0x96, 0x3d, 0x69, 0x3a, 0x8e, 0x3c, 0x8f, 0x8b, 0x8c, 0x94,
742 0x95, 0x40, 0x29, 0x0f, 0xa5, 0x1e, 0xa9, 0xaa, 0xab, 0x90,
743 0x91, 0x9f, 0xa0, 0x24, 0x25, 0x26, 0x14, 0x2a, 0x2b
744 };
745 static const int values_2_205[] = {
746 0x05, 0x80, 0x01, 0x7d, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80,
747 0x50, 0x93, 0x00, 0x81, 0x20, 0x05, 0x00, 0x00, 0x00, 0x1b,
748 0xbb, 0xa4, 0x01, 0x81, 0x12, 0x00, 0x07, 0xe2, 0xbf, 0x00,
749 0x04, 0x19, 0x40, 0x0d, 0x00, 0x73, 0xdf, 0x06, 0x20, 0x88,
750 0x88, 0xc1, 0x3f, 0x42, 0x80, 0x04, 0xb8, 0x92, 0x0a, 0x00,
751 0x00, 0x00, 0x00, 0x68, 0x5c, 0xc3, 0x2e, 0x00, 0x00
752 };
753
754
755 // From the resolution
756 switch (dev->resolution) {
757 case STK11XX_1280x1024:
758 case STK11XX_1024x768:
759 case STK11XX_800x600:
760 case STK11XX_720x576:
761 asize = ARRAY_SIZE(values_2_204);
762 values_204 = (int *) values_2_204;
763 values_205 = (int *) values_2_205;
764 break;
765
766 case STK11XX_640x480:
767 case STK11XX_320x240:
768 case STK11XX_160x120:
769 case STK11XX_213x160:
770 case STK11XX_128x96:
771 case STK11XX_80x60:
772 default:
773 asize = ARRAY_SIZE(values_1_204);
774 values_204 = (int *) values_1_204;
775 values_205 = (int *) values_1_205;
776 break;
777 }
778
779
780 for(i=0; i<asize; i++) {
781 usb_stk11xx_read_registry(dev, 0x02ff, &value);
782 usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
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 ret;
820
822
823 ret = dev_stk11xx_check_device(dev, 500);
824
825 if (!ret)
826 STK_DEBUG("Find not 0x4... seems OK\n");
827
829
830 ret = dev_stk11xx_check_device(dev, 500);
831
832 if (!ret)
833 STK_DEBUG("Find not 0x4... seems OK\n");
834
835 return 0;
836}
837
838
858{
859 usb_stk11xx_write_registry(dev, 0x0200, 0x0000);
860
861 // Colour registers
862 usb_stk11xx_write_registry(dev, 0x0204, 0x0001);
863 usb_stk11xx_write_registry(dev, 0x0205, (255 - (dev->vsettings.colour >> 8)));
864 usb_stk11xx_write_registry(dev, 0x0204, 0x0002);
865 usb_stk11xx_write_registry(dev, 0x0205, (dev->vsettings.colour >> 8));
866
867 // Unknown register
868 usb_stk11xx_write_registry(dev, 0x0204, 0x00a1);
869 usb_stk11xx_write_registry(dev, 0x0205, 0x0000);
870
871 // Contrast register
872 usb_stk11xx_write_registry(dev, 0x0204, 0x0010);
873 usb_stk11xx_write_registry(dev, 0x0205, (dev->vsettings.contrast >> 9));
874
875 // Unknown register
876 usb_stk11xx_write_registry(dev, 0x0204, 0x0004);
877 usb_stk11xx_write_registry(dev, 0x0205, 0x0000);
878
879 // Whiteness register
880 usb_stk11xx_write_registry(dev, 0x0204, 0x0000);
881 usb_stk11xx_write_registry(dev, 0x0205, (dev->vsettings.whiteness >> 11) | 0x20);
882
883 usb_stk11xx_write_registry(dev, 0x0200, 0x0006);
884
885 STK_DEBUG("Set colour : %d\n", dev->vsettings.colour);
886 STK_DEBUG("Set contrast : %d\n", dev->vsettings.contrast);
887 STK_DEBUG("Set whiteness : %d\n", dev->vsettings.whiteness);
888 STK_DEBUG("Set brightness : %d\n", dev->vsettings.brightness);
889
890 return 0;
891}
892
893
915{
916 usb_stk11xx_write_registry(dev, 0x0200, 0x0000);
917
918 // FPS register
919 switch (dev->vsettings.fps) {
920 case 10:
921 usb_stk11xx_write_registry(dev, 0x0204, 0x002e);
922 usb_stk11xx_write_registry(dev, 0x0205, 0x0004);
923 usb_stk11xx_write_registry(dev, 0x0204, 0x002d);
924 usb_stk11xx_write_registry(dev, 0x0205, 0x0000);
925 break;
926
927 case 15:
928 usb_stk11xx_write_registry(dev, 0x0204, 0x002e);
929 usb_stk11xx_write_registry(dev, 0x0205, 0x0002);
930 usb_stk11xx_write_registry(dev, 0x0204, 0x002d);
931 usb_stk11xx_write_registry(dev, 0x0205, 0x0000);
932 break;
933
934 case 20:
935 usb_stk11xx_write_registry(dev, 0x0204, 0x002e);
936 usb_stk11xx_write_registry(dev, 0x0205, 0x0001);
937 usb_stk11xx_write_registry(dev, 0x0204, 0x002d);
938 usb_stk11xx_write_registry(dev, 0x0205, 0x0000);
939 break;
940
941 default:
942 case 25:
943 usb_stk11xx_write_registry(dev, 0x0204, 0x002e);
944 usb_stk11xx_write_registry(dev, 0x0205, 0x0000);
945 usb_stk11xx_write_registry(dev, 0x0204, 0x002d);
946 usb_stk11xx_write_registry(dev, 0x0205, 0x0064);
947 break;
948
949 case 30:
950 usb_stk11xx_write_registry(dev, 0x0204, 0x002e);
951 usb_stk11xx_write_registry(dev, 0x0205, 0x0000);
952 usb_stk11xx_write_registry(dev, 0x0204, 0x002d);
953 usb_stk11xx_write_registry(dev, 0x0205, 0x0000);
954 break;
955 }
956
957 usb_stk11xx_write_registry(dev, 0x0200, 0x0006);
958
959 return 0;
960}
961
962
974{
975 int value;
976 int value_116, value_117;
977
978 usb_stk11xx_read_registry(dev, 0x0116, &value_116);
979 usb_stk11xx_read_registry(dev, 0x0117, &value_117);
980
981 usb_stk11xx_write_registry(dev, 0x0116, 0x0000);
982 usb_stk11xx_write_registry(dev, 0x0117, 0x0000);
983
984 usb_stk11xx_read_registry(dev, 0x0100, &value); // read 0x21
985 usb_stk11xx_write_registry(dev, 0x0100, 0x00a1);
986
987 usb_stk11xx_write_registry(dev, 0x0116, value_116);
988 usb_stk11xx_write_registry(dev, 0x0117, value_117);
989
990 return 0;
991}
992
993
1004{
1005 int step = 10;
1006
1007 // Choose the step from the resolution
1008 switch (dev->resolution) {
1009 case STK11XX_1280x1024:
1010 case STK11XX_1024x768:
1011 case STK11XX_800x600:
1012 case STK11XX_720x576:
1013 step = 11;
1014 break;
1015
1016 case STK11XX_640x480:
1017 case STK11XX_320x240:
1018 case STK11XX_160x120:
1019 case STK11XX_213x160:
1020 case STK11XX_128x96:
1021 case STK11XX_80x60:
1022 default:
1023 step = 10;
1024 break;
1025 }
1026
1028
1030
1031 return 0;
1032}
1033
1034
1046{
1047 int value;
1048
1049 usb_stk11xx_read_registry(dev, 0x0100, &value);
1050 usb_stk11xx_write_registry(dev, 0x0100, 0x0021);
1051
1052 return 0;
1053}
1054
int dev_stka311_start_stream(struct usb_stk11xx *dev)
This function sets the device to start the stream.
int dev_stka311_sensor_settings(struct usb_stk11xx *dev)
This function permits to set default sensor settings.
int dev_stka311_initialize_device(struct usb_stk11xx *dev)
This function permits to initialize the device.
int dev_stka311_reconf_camera(struct usb_stk11xx *dev)
Reconfigure the camera before the stream.
int dev_stka311_init_camera(struct usb_stk11xx *dev)
This function initializes the device for the stream.
int dev_stka311_camera_settings(struct usb_stk11xx *dev)
This function permits to modify the settings of the camera.
int dev_stka311_camera_asleep(struct usb_stk11xx *dev)
Wake-up the camera.
int dev_stka311_set_camera_fps(struct usb_stk11xx *dev)
This function permits to modify the settings of the camera.
int dev_stka311_set_camera_quality(struct usb_stk11xx *dev)
This function permits to modify the settings of the camera.
int dev_stka311_configure_device(struct usb_stk11xx *dev, int step)
This function permits to configure the device.
int dev_stka311_stop_stream(struct usb_stk11xx *dev)
This function sets the device to stop the stream.
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