SyntekUSBVideoCamera
stk11xx-dev-a821.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-A821 API
53 //
54 //=============================================================================
55 
56 
71 {
72  int i;
73  int retok;
74  int value;
75 
76  STK_INFO("Initialize USB2.0 Syntek Camera\n");
77 
78  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
79  usb_stk11xx_write_registry(dev, 0x0002, 0x0068);
80  usb_stk11xx_write_registry(dev, 0x0003, 0x0080);
81 
82  usb_stk11xx_write_registry(dev, 0x0002, 0x006f);
83  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
84  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
85  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
86  usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
87  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
88  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
89  usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
90  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
91  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
92  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
93  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
94  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
95  usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
96  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
97  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
98  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
99  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
100  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
101  usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
102  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
103  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
104  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
105  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
106  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
107  usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
108  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
109  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
110  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
111  usb_stk11xx_write_registry(dev, 0x0002, 0x006d);
112  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
113 
114  for (i=0; i<16; i++) {
115  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
116  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
117  usb_stk11xx_read_registry(dev, 0x0000, &value);
118 
119  STK_DEBUG("Loop 1 : Read 0x0000 = %02X\n", value);
120  }
121 
122  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
123  usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
124 
125  usb_stk11xx_write_registry(dev, 0x0002, 0x006f);
126  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
127  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
128  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
129  usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
130  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
131  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
132  usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
133  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
134  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
135  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
136  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
137  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
138  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
139  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
140  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
141  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
142  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
143  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
144  usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
145  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
146  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
147  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
148  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
149  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
150  usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
151  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
152  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
153  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
154  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
155  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
156  usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
157  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
158  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
159  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
160  usb_stk11xx_write_registry(dev, 0x0002, 0x006d);
161  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
162 
163  for (i=0; i<16; i++) {
164  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
165  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
166  usb_stk11xx_read_registry(dev, 0x0000, &value);
167 
168  STK_DEBUG("Loop 2 : Read 0x0000 = %02X\n", value);
169  }
170 
171  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
172  usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
173 
174  usb_stk11xx_write_registry(dev, 0x0002, 0x006f);
175  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
176  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
177  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
178  usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
179  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
180  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
181  usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
182  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
183  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
184  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
185  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
186  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
187  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
188  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
189  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
190  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
191  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
192  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
193  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
194  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
195  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
196  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
197  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
198  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
199  usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
200  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
201  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
202  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
203  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
204  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
205  usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
206  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
207  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
208  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
209  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
210  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
211  usb_stk11xx_write_registry(dev, 0x0000, 0x0027);
212  usb_stk11xx_write_registry(dev, 0x0000, 0x0026);
213  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
214  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
215  usb_stk11xx_write_registry(dev, 0x0002, 0x006d);
216  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
217 
218  for (i=0; i<16; i++) {
219  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
220  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
221  usb_stk11xx_read_registry(dev, 0x0000, &value);
222 
223  STK_DEBUG("Loop 3 : Read 0x0000 = %02X\n", value);
224  }
225 
226  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
227  usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
228  usb_stk11xx_write_registry(dev, 0x0002, 0x006f);
229  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
230  usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
231 
232  usb_stk11xx_write_registry(dev, 0x0117, 0x0000);
233  usb_stk11xx_read_registry(dev, 0x0103, &value);
234  usb_stk11xx_write_registry(dev, 0x0103, 0x0001);
235  usb_stk11xx_read_registry(dev, 0x0103, &value);
236  usb_stk11xx_write_registry(dev, 0x0103, 0x0000);
237 
238  usb_stk11xx_write_registry(dev, 0x0000, 0x00e0);
239  usb_stk11xx_write_registry(dev, 0x0002, 0x00e8);
240  usb_stk11xx_write_registry(dev, 0x0002, 0x0068);
241  usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
242 
244  retok = dev_stk11xx_check_device(dev, 65);
245  usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
246 
248  retok = dev_stk11xx_check_device(dev, 65);
249  usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
250 
252  retok = dev_stk11xx_check_device(dev, 65);
253  usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
254 
256  retok = dev_stk11xx_check_device(dev, 65);
257  usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
258 
260  retok = dev_stk11xx_check_device(dev, 65);
261  usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
262 
264  retok = dev_stk11xx_check_device(dev, 65);
265  usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
266 
268  retok = dev_stk11xx_check_device(dev, 65);
269  usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
270 
272  retok = dev_stk11xx_check_device(dev, 65);
273  usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
274 
276  retok = dev_stk11xx_check_device(dev, 65);
277  usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
278 
280  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
281  usb_stk11xx_write_registry(dev, 0x0002, 0x006d);
282  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
283  usb_stk11xx_write_registry(dev, 0x0000, 0x0025);
284  usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
285 
287  usb_stk11xx_write_registry(dev, 0x0200, 0x0080);
288  usb_stk11xx_write_registry(dev, 0x0200, 0x0000);
289  usb_stk11xx_write_registry(dev, 0x02ff, 0x0001);
290  usb_stk11xx_write_registry(dev, 0x0203, 0x00a0);
291 
293 
294  usb_stk11xx_set_feature(dev, 0);
295 
296  // Device is initialized and is ready !!!
297  STK_INFO("Syntek USB2.0 Camera is ready\n");
298 
299  return 0;
300 }
301 
302 
316 int dev_stka821_configure_device(struct usb_stk11xx *dev, int step)
317 {
318  int retok;
319  int value;
320 
321  // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
322  static const int values_001B[] = {
323  0x0e, 0x03, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x07, 0x07, 0x07, 0x07, 0x07
324  };
325  static const int values_001C[] = {
326  0x06, 0x02, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06
327  };
328  static const int values_0202[] = {
329  0x1e, 0x0a, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e
330  };
331  static const int values_0110[] = {
332  0x07, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00
333  };
334  static const int values_0112[] = {
335  0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00
336  };
337  static const int values_0114[] = {
338  0x87, 0x80, 0x80, 0x80, 0x80, 0xbe, 0xbe, 0x80, 0x84, 0x80, 0x80, 0x80, 0x80, 0x80
339  };
340  static const int values_0116[] = {
341  0xe7, 0xe0, 0xe0, 0xe0, 0xe0, 0xe9, 0xe9, 0xe0, 0xe4, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0
342  };
343  static const int values_0100[] = {
344  0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20
345  };
346 
347  STK_DEBUG("dev_stka821_configure_device : %d\n", step);
348 
349  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
350  usb_stk11xx_write_registry(dev, 0x0002, 0x0068);
351  usb_stk11xx_write_registry(dev, 0x0003, 0x0080);
352  usb_stk11xx_write_registry(dev, 0x0005, 0x0000);
353 
354  usb_stk11xx_write_registry(dev, 0x0007, 0x0003);
355  usb_stk11xx_write_registry(dev, 0x000d, 0x0000);
356  usb_stk11xx_write_registry(dev, 0x000f, 0x0002);
357  usb_stk11xx_write_registry(dev, 0x0300, 0x0012);
358  usb_stk11xx_write_registry(dev, 0x0350, 0x0041);
359 
360  usb_stk11xx_write_registry(dev, 0x0351, 0x0000);
361  usb_stk11xx_write_registry(dev, 0x0352, 0x0000);
362  usb_stk11xx_write_registry(dev, 0x0353, 0x0000);
363  usb_stk11xx_write_registry(dev, 0x0018, 0x0010);
364  usb_stk11xx_write_registry(dev, 0x0019, 0x0000);
365 
366  usb_stk11xx_write_registry(dev, 0x001b, values_001B[step]);
367  usb_stk11xx_write_registry(dev, 0x001c, values_001C[step]);
368  usb_stk11xx_write_registry(dev, 0x0300, 0x0080);
369  usb_stk11xx_write_registry(dev, 0x001a, 0x0004);
370  usb_stk11xx_write_registry(dev, 0x0202, values_0202[step]);
371 
372  usb_stk11xx_write_registry(dev, 0x0110, values_0110[step]);
373  usb_stk11xx_write_registry(dev, 0x0111, 0x0000);
374  usb_stk11xx_write_registry(dev, 0x0112, values_0112[step]);
375  usb_stk11xx_write_registry(dev, 0x0113, 0x0000);
376  usb_stk11xx_write_registry(dev, 0x0114, values_0114[step]);
377 
378  usb_stk11xx_write_registry(dev, 0x0115, 0x0002);
379  usb_stk11xx_write_registry(dev, 0x0116, values_0116[step]);
380  usb_stk11xx_write_registry(dev, 0x0117, 0x0001);
381 
382  usb_stk11xx_read_registry(dev, 0x0100, &value);
383  usb_stk11xx_write_registry(dev, 0x0100, values_0100[step]);
384 
385  usb_stk11xx_write_registry(dev, 0x0200, 0x0080);
386  usb_stk11xx_write_registry(dev, 0x0200, 0x0000);
387  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
388 
389 
390  switch (step) {
391  case 0:
392  usb_stk11xx_write_registry(dev, 0x0203, 0x0040);
393 
394  usb_stk11xx_write_registry(dev, 0x0204, 0x0041);
395  usb_stk11xx_write_registry(dev, 0x0205, 0x0001);
396  usb_stk11xx_write_registry(dev, 0x0204, 0x001c);
397  usb_stk11xx_write_registry(dev, 0x0205, 0x0002);
398 
399  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
400 
401  break;
402 
403  case 1:
404  usb_stk11xx_write_registry(dev, 0x0203, 0x0022);
405 
406  usb_stk11xx_write_registry(dev, 0x0204, 0x0027);
407  usb_stk11xx_write_registry(dev, 0x0205, 0x00a5);
408 
409  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
410 
411  break;
412 
413  case 2:
414  usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
415 
416  usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
417  usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
418  usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
419  usb_stk11xx_write_registry(dev, 0x0205, 0x00bf);
420 
421  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
422 
423  break;
424 
425  case 3:
426  usb_stk11xx_write_registry(dev, 0x0203, 0x0042);
427 
428  usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
429  usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
430  usb_stk11xx_write_registry(dev, 0x0204, 0x0024);
431  usb_stk11xx_write_registry(dev, 0x0205, 0x00a5);
432 
433  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
434 
435  break;
436 
437  case 4:
438  usb_stk11xx_write_registry(dev, 0x0203, 0x0042);
439 
440  usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
441  usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
442  usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
443  usb_stk11xx_write_registry(dev, 0x0205, 0x00e0);
444  usb_stk11xx_write_registry(dev, 0x0204, 0x0024);
445  usb_stk11xx_write_registry(dev, 0x0205, 0x00a5);
446 
447  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
448 
449  break;
450 
451  case 5:
452  usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
453 
454  usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
455  usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
456  usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
457  usb_stk11xx_write_registry(dev, 0x0205, 0x00ff);
458 
459  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
460 
461  break;
462 
463  case 6:
464  usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
465 
466  usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
467  usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
468  usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
469  usb_stk11xx_write_registry(dev, 0x0205, 0x00ff);
470 
471  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
472 
473  break;
474 
475  case 7:
476  usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
477 
478  usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
479  usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
480  usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
481  usb_stk11xx_write_registry(dev, 0x0205, 0x00b7);
482 
483  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
484 
485  break;
486 
487  case 8:
488  usb_stk11xx_write_registry(dev, 0x0203, 0x0080);
489 
490  usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
491  usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
492  usb_stk11xx_write_registry(dev, 0x0204, 0x000a);
493  usb_stk11xx_write_registry(dev, 0x0205, 0x00ff);
494 
495  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
496 
497  break;
498 
499  case 9:
500  usb_stk11xx_write_registry(dev, 0x0203, 0x00dc);
501 
502  usb_stk11xx_write_registry(dev, 0x0204, 0x0015);
503  usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
504 
505  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
506 
507  retok = dev_stk11xx_check_device(dev, 500);
508  usb_stk11xx_read_registry(dev, 0x02ff, &value);
509  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
510  usb_stk11xx_write_registry(dev, 0x0208, 0x0000);
511  usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
512  retok = dev_stk11xx_check_device(dev, 500);
513  usb_stk11xx_read_registry(dev, 0x0209, &value);
514  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
515  usb_stk11xx_read_registry(dev, 0x02ff, &value);
516  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
517  usb_stk11xx_write_registry(dev, 0x0208, 0x0001);
518  usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
519  retok = dev_stk11xx_check_device(dev, 500);
520  usb_stk11xx_read_registry(dev, 0x0209, &value);
521  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
522  usb_stk11xx_read_registry(dev, 0x02ff, &value);
523  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
524  usb_stk11xx_write_registry(dev, 0x0208, 0x0002);
525  usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
526  retok = dev_stk11xx_check_device(dev, 500);
527  usb_stk11xx_read_registry(dev, 0x0209, &value);
528  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
529  usb_stk11xx_write_registry(dev, 0x0002, 0x006f);
530 
531  break;
532 
533  case 10:
534  usb_stk11xx_write_registry(dev, 0x0203, 0x00dc);
535 
537 
538  break;
539 
540  case 11:
541  usb_stk11xx_write_registry(dev, 0x0203, 0x00dc);
542 
544 
545  usb_stk11xx_write_registry(dev, 0x0104, 0x0000);
546  usb_stk11xx_write_registry(dev, 0x0105, 0x0000);
547  usb_stk11xx_write_registry(dev, 0x0106, 0x0000);
548 
549  break;
550 
551  case 12:
552  usb_stk11xx_write_registry(dev, 0x0203, 0x00dc);
553 
555 
556  usb_stk11xx_write_registry(dev, 0x0104, 0x0000);
557  usb_stk11xx_write_registry(dev, 0x0105, 0x0000);
558  usb_stk11xx_write_registry(dev, 0x0106, 0x0000);
559 
560  break;
561 
562  case 13:
563  usb_stk11xx_write_registry(dev, 0x0203, 0x00dc);
564 
566 
567  usb_stk11xx_write_registry(dev, 0x0106, 0x0000);
568  }
569 
570  return 0;
571 }
572 
573 
584 {
585  int value;
586 
587  usb_stk11xx_read_registry(dev, 0x0104, &value);
588  usb_stk11xx_read_registry(dev, 0x0105, &value);
589  usb_stk11xx_read_registry(dev, 0x0106, &value);
590 
591  usb_stk11xx_write_registry(dev, 0x0100, 0x0021);
592  usb_stk11xx_write_registry(dev, 0x0116, 0x0000);
593  usb_stk11xx_write_registry(dev, 0x0117, 0x0000);
594  usb_stk11xx_write_registry(dev, 0x0018, 0x0000);
595 
596  usb_stk11xx_read_registry(dev, 0x0000, &value);
597  usb_stk11xx_write_registry(dev, 0x0000, 0x0049);
598 
599  return 0;
600 }
601 
602 
614 {
615 // int retok;
616 // int value;
617 
619 
620  usb_stk11xx_set_feature(dev, 0);
621 
622  usb_stk11xx_write_registry(dev, 0x0000, 0x00e0);
623  usb_stk11xx_write_registry(dev, 0x0002, 0x00e8);
624  usb_stk11xx_write_registry(dev, 0x0002, 0x0068);
625  usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
626 
628 
630 
632 
634 
635  usb_stk11xx_set_feature(dev, 0);
636 
637  usb_stk11xx_write_registry(dev, 0x0000, 0x00e0);
638  usb_stk11xx_write_registry(dev, 0x0002, 0x00e8);
639  usb_stk11xx_write_registry(dev, 0x0002, 0x0068);
640  usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
641 
643 
645 
647 
648  return 0;
649 }
650 
651 
663 {
664  int i;
665  int retok;
666  int value;
667 
668  int asize;
669  static const int values_204[] = {
670  0x17, 0x19, 0xb4, 0xa6, 0x12, 0x13, 0x1e, 0x21, 0x24, 0x32,
671  0x36, 0x39, 0x4d, 0x53, 0x5d, 0x5f, 0x60, 0x61, 0x62, 0x63,
672  0x64, 0x65, 0x66, 0x82, 0x83, 0x85, 0x86, 0x89, 0x97, 0x98,
673  0xad, 0xae, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbf, 0x48, 0xd8,
674  0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
675  0x80, 0x81, 0xd8, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c,
676  0x7d, 0x7e, 0x7f, 0x80, 0x81, 0xd8, 0x76, 0x77, 0x78, 0x79,
677  0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x5c, 0xc0,
678  0x59, 0x5a, 0x5b, 0xd4, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93,
679  0x94, 0x95, 0x96, 0xb3, 0x73, 0x06, 0x07, 0x0b, 0x15, 0x20,
680  0x4e, 0x4f, 0x49, 0x4a, 0x4b, 0x4c, 0x46, 0x06, 0x07, 0xb9,
681  0xba, 0xbb, 0xbc, 0x61, 0x62, 0x65, 0x66
682  };
683  static const int values_205[] = {
684  0x41, 0x41, 0x03, 0x06, 0x06, 0x08, 0x06, 0x00, 0x02, 0x69,
685  0x35, 0x60, 0xfe, 0x1c, 0x04, 0x08, 0x08, 0x08, 0x08, 0x00,
686  0x00, 0x10, 0x14, 0x01, 0x80, 0x0c, 0xb6, 0x00, 0x25, 0x25,
687  0x3f, 0x24, 0x10, 0x07, 0xcc, 0x1f, 0x30, 0x02, 0x9c, 0x80,
688  0x00, 0x0d, 0x18, 0x22, 0x2c, 0x3e, 0x4f, 0x6f, 0x8e, 0xac,
689  0xc8, 0xe5, 0xa0, 0x00, 0x0d, 0x18, 0x22, 0x2c, 0x3e, 0x4f,
690  0x6f, 0x8e, 0xac, 0xc8, 0xe5, 0xc0, 0x00, 0x0d, 0x18, 0x22,
691  0x2c, 0x3e, 0x4f, 0x6f, 0x8e, 0xac, 0xc8, 0xe5, 0x70, 0x18,
692  0x09, 0x07, 0x07, 0x3c, 0x3d, 0x95, 0x88, 0x89, 0x47, 0x9c,
693  0x81, 0x9c, 0x3d, 0x76, 0x76, 0x01, 0xf3, 0x05, 0x00, 0x44,
694  0x06, 0x0a, 0x96, 0x00, 0x7d, 0x00, 0x20, 0x01, 0xf3, 0x04,
695  0xe4, 0x09, 0xc8, 0x08, 0x08, 0x10, 0x14
696  };
697 
698 
699  asize = ARRAY_SIZE(values_204);
700 
701  for(i=0; i<asize; i++) {
702  usb_stk11xx_read_registry(dev, 0x02ff, &value);
703  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
704 
705  usb_stk11xx_write_registry(dev, 0x0204, values_204[i]);
706  usb_stk11xx_write_registry(dev, 0x0205, values_205[i]);
707  usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
708 
709  retok = dev_stk11xx_check_device(dev, 500);
710 
711  if (retok != 1) {
712  STK_ERROR("Load default sensor settings fail !\n");
713  return -1;
714  }
715 
716  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
717  }
718 
719  retok = dev_stk11xx_check_device(dev, 500);
720 
721  return 0;
722 }
723 
724 
739 {
740  int i;
741  int ret;
742  int value;
743 
744  int asize;
745  static const int values_204[] = {
746  0xb3, 0x73, 0x46, 0x06, 0x07, 0xb9, 0xba, 0xbb, 0xbc, 0x61, 0x62, 0x65, 0x66
747  };
748  static const int values_205[] = {
749  0x76, 0x76, 0x20, 0x01, 0xf3, 0x04, 0xe4, 0x09, 0xc8, 0x08, 0x08, 0x10, 0x14
750  };
751 
752 
753  // Contrast register
754  usb_stk11xx_read_registry(dev, 0x02ff, &value);
755  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
756 
757  usb_stk11xx_write_registry(dev, 0x0204, 0x00b3);
758  usb_stk11xx_write_registry(dev, 0x0205, (dev->vsettings.contrast >> 8));
759 
760  usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
761  ret = dev_stk11xx_check_device(dev, 500);
762  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
763 
764  asize = ARRAY_SIZE(values_204);
765 
766  for (i=1; i<asize; i++) {
767  usb_stk11xx_read_registry(dev, 0x02ff, &value);
768  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
769 
770  usb_stk11xx_write_registry(dev, 0x0204, values_204[i]);
771  usb_stk11xx_write_registry(dev, 0x0205, values_205[i]);
772 
773  usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
774  ret = dev_stk11xx_check_device(dev, 500);
775  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
776  }
777 
778  return 0;
779 }
780 
781 
796 {
797  int ret;
798  int value;
799 
800  // Contrast register
801  usb_stk11xx_read_registry(dev, 0x02ff, &value);
802  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
803 
804  usb_stk11xx_write_registry(dev, 0x0204, 0x00b3);
805  usb_stk11xx_write_registry(dev, 0x0205, (dev->vsettings.contrast >> 8));
806 
807  usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
808  ret = dev_stk11xx_check_device(dev, 500);
809  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
810 
811  STK_DEBUG("Set colour : %d\n", dev->vsettings.colour);
812  STK_DEBUG("Set contrast : %d\n", dev->vsettings.contrast);
813  STK_DEBUG("Set whiteness : %d\n", dev->vsettings.whiteness);
814  STK_DEBUG("Set brightness : %d\n", dev->vsettings.brightness);
815 
816  return 0;
817 }
818 
819 
830 {
831  return 0;
832 }
833 
834 
846 {
847  int value;
848  int value_116, value_117;
849 
850  usb_stk11xx_read_registry(dev, 0x0116, &value_116);
851  usb_stk11xx_read_registry(dev, 0x0117, &value_117);
852 
853  usb_stk11xx_write_registry(dev, 0x0116, 0x0000);
854  usb_stk11xx_write_registry(dev, 0x0117, 0x0000);
855 
856  usb_stk11xx_read_registry(dev, 0x0100, &value); // read 0x21
857  usb_stk11xx_write_registry(dev, 0x0100, 0x00a0);
858 
859  usb_stk11xx_write_registry(dev, 0x0116, value_116);
860  usb_stk11xx_write_registry(dev, 0x0117, value_117);
861 
862  return 0;
863 }
864 
865 
876 {
878 
880 
881  return 0;
882 }
883 
884 
896 {
897  int value;
898 
899  usb_stk11xx_read_registry(dev, 0x0100, &value);
900  usb_stk11xx_write_registry(dev, 0x0100, 0x0020);
901 
902  return 0;
903 }
904 
dev_stka821_reconf_camera
int dev_stka821_reconf_camera(struct usb_stk11xx *dev)
Reconfigure the camera before the stream.
Definition: stk11xx-dev-a821.c:875
dev_stka821_sensor_settings
int dev_stka821_sensor_settings(struct usb_stk11xx *dev)
This function permits to set default sensor settings.
Definition: stk11xx-dev-a821.c:662
dev_stka821_stop_stream
int dev_stka821_stop_stream(struct usb_stk11xx *dev)
This function sets the device to stop the stream.
Definition: stk11xx-dev-a821.c:895
dev_stka821_configure_device
int dev_stka821_configure_device(struct usb_stk11xx *dev, int step)
This function permits to configure the device.
Definition: stk11xx-dev-a821.c:316
dev_stk11xx_camera_off
int dev_stk11xx_camera_off(struct usb_stk11xx *dev)
This function switchs off the camera.
Definition: stk11xx-dev.c:264
stk11xx_video::brightness
int brightness
Definition: stk11xx.h:278
stk11xx.h
Driver for Syntek USB video camera.
dev_stka821_set_camera_fps
int dev_stka821_set_camera_fps(struct usb_stk11xx *dev)
This function permits to modify the settings of the camera.
Definition: stk11xx-dev-a821.c:829
STK_DEBUG
#define STK_DEBUG(str, args...)
Definition: stk11xx.h:149
stk11xx_video::colour
int colour
Definition: stk11xx.h:281
dev_stka821_start_stream
int dev_stka821_start_stream(struct usb_stk11xx *dev)
This function sets the device to start the stream.
Definition: stk11xx-dev-a821.c:845
dev_stka821_camera_settings
int dev_stka821_camera_settings(struct usb_stk11xx *dev)
This function permits to modify the settings of the camera.
Definition: stk11xx-dev-a821.c:738
STK_ERROR
#define STK_ERROR(str, args...)
Definition: stk11xx.h:147
dev_stk11xx_camera_settings
int dev_stk11xx_camera_settings(struct usb_stk11xx *dev)
This function permits to modify the settings of the camera.
Definition: stk11xx-dev.c:342
usb_stk11xx_set_feature
int usb_stk11xx_set_feature(struct usb_stk11xx *dev, int index)
Send the message SET_FEATURE and choose the interface.
Definition: stk11xx-usb.c:474
usb_stk11xx_write_registry
int usb_stk11xx_write_registry(struct usb_stk11xx *dev, __u16 index, __u16 value)
Write a 16-bits value to a 16-bits register.
Definition: stk11xx-usb.c:540
dev_stka821_camera_asleep
int dev_stka821_camera_asleep(struct usb_stk11xx *dev)
Wake-up the camera.
Definition: stk11xx-dev-a821.c:583
usb_stk11xx_read_registry
int usb_stk11xx_read_registry(struct usb_stk11xx *dev, __u16 index, int *value)
Read a 16-bits value from a 16-bits register.
Definition: stk11xx-usb.c:572
STK_INFO
#define STK_INFO(str, args...)
Definition: stk11xx.h:146
dev_stka821_initialize_device
int dev_stka821_initialize_device(struct usb_stk11xx *dev)
This function permits to initialize the device.
Definition: stk11xx-dev-a821.c:70
stk11xx_video::contrast
int contrast
Definition: stk11xx.h:279
usb_stk11xx
Definition: stk11xx.h:301
usb_stk11xx::vsettings
struct stk11xx_video vsettings
Definition: stk11xx.h:319
dev_stka821_set_camera_quality
int dev_stka821_set_camera_quality(struct usb_stk11xx *dev)
This function permits to modify the settings of the camera.
Definition: stk11xx-dev-a821.c:795
stk11xx-dev.h
Driver for Syntek USB video camera.
stk11xx_video::whiteness
int whiteness
Definition: stk11xx.h:280
dev_stk11xx_check_device
int dev_stk11xx_check_device(struct usb_stk11xx *dev, int nbr)
This function permits to check the device in reading the register 0x0201.
Definition: stk11xx-dev.c:170
dev_stka821_init_camera
int dev_stka821_init_camera(struct usb_stk11xx *dev)
This function initializes the device for the stream.
Definition: stk11xx-dev-a821.c:613