SyntekUSBVideoCamera
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 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, 0x0078);
80  usb_stk11xx_write_registry(dev, 0x0003, 0x0080);
81 
82  usb_stk11xx_write_registry(dev, 0x0002, 0x007f);
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, 0x007d);
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, 0x007f);
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, 0x007d);
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, 0x007f);
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, 0x007d);
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, 0x007f);
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, 0x00f8);
240  usb_stk11xx_write_registry(dev, 0x0002, 0x0078);
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  retok = dev_stk11xx_check_device(dev, 65);
281  usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
282 
284  retok = dev_stk11xx_check_device(dev, 65);
285  usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
286 
288  retok = dev_stk11xx_check_device(dev, 65);
289  usb_stk11xx_write_registry(dev, 0x0200, 0x0008);
290 
292  usb_stk11xx_read_registry(dev, 0x02ff, &value);
293  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
294  usb_stk11xx_write_registry(dev, 0x0208, 0x0000);
295  usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
296  retok = dev_stk11xx_check_device(dev, 500);
297  usb_stk11xx_read_registry(dev, 0x0209, &value);
298  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
299 
301  usb_stk11xx_read_registry(dev, 0x02ff, &value);
302  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
303  usb_stk11xx_write_registry(dev, 0x0208, 0x0000);
304  usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
305  retok = dev_stk11xx_check_device(dev, 500);
306  usb_stk11xx_read_registry(dev, 0x0209, &value);
307  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
308  usb_stk11xx_read_registry(dev, 0x02ff, &value);
309  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
310  usb_stk11xx_write_registry(dev, 0x0208, 0x00f1);
311  usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
312  retok = dev_stk11xx_check_device(dev, 500);
313  usb_stk11xx_read_registry(dev, 0x0209, &value);
314  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
315 
317  retok = dev_stk11xx_check_device(dev, 500);
318  usb_stk11xx_write_registry(dev, 0x0204, 0x00f1);
319  usb_stk11xx_write_registry(dev, 0x0205, 0x0000);
320  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
321  retok = dev_stk11xx_check_device(dev, 500);
322  usb_stk11xx_read_registry(dev, 0x02ff, &value);
323  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
324  usb_stk11xx_write_registry(dev, 0x0208, 0x0000);
325  usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
326  retok = dev_stk11xx_check_device(dev, 500);
327  usb_stk11xx_read_registry(dev, 0x0209, &value);
328  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
329  usb_stk11xx_read_registry(dev, 0x02ff, &value);
330  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
331  usb_stk11xx_write_registry(dev, 0x0208, 0x00f1);
332  usb_stk11xx_write_registry(dev, 0x0200, 0x0020);
333  retok = dev_stk11xx_check_device(dev, 500);
334  usb_stk11xx_read_registry(dev, 0x0209, &value);
335  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
336 
338 
340 
341  usb_stk11xx_set_feature(dev, 0);
342 
343  // Device is initialized and is ready !!!
344  STK_INFO("Syntek USB2.0 Camera is ready\n");
345 
346  return 0;
347 }
348 
349 
368 int dev_stk6a33_configure_device(struct usb_stk11xx *dev, int step)
369 {
370  int value;
371 
372  // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
373 
374  static const int values_001B[] = {
375  0x0e, 0x03, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07
376  };
377  static const int values_001C[] = {
378  0x06, 0x02, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06
379  };
380  static const int values_0202[] = {
381  0x1e, 0x0a, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x1e, 0x14, 0x1e, 0x1f, 0x1f, 0x1f, 0x1f
382  };
383  static const int values_0110[] = {
384  0x07, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
385  };
386  static const int values_0112[] = {
387  0x07, 0x00, 0x00, 0x00, 0x00, 0x09, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
388  };
389  static const int values_0114[] = {
390  0x87, 0x80, 0x80, 0x80, 0x80, 0xbe, 0xbe, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80
391  };
392  static const int values_0115[] = {
393  0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02
394  };
395  static const int values_0116[] = {
396  0xe7, 0xe0, 0xe0, 0xe0, 0xe0, 0xe9, 0xe9, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0
397  };
398  static const int values_0117[] = {
399  0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01
400  };
401  static const int values_0100[] = {
402  0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20
403  };
404 
405  STK_DEBUG("dev_stk6a33_configure_device : %d\n", step);
406 
407  usb_stk11xx_write_registry(dev, 0x0000, 0x0024);
408  usb_stk11xx_write_registry(dev, 0x0002, 0x0068);
409  usb_stk11xx_write_registry(dev, 0x0003, 0x0080);
410  usb_stk11xx_write_registry(dev, 0x0005, 0x0000);
411 
412  usb_stk11xx_write_registry(dev, 0x0007, 0x0003);
413  usb_stk11xx_write_registry(dev, 0x000d, 0x0000);
414  usb_stk11xx_write_registry(dev, 0x000f, 0x0002);
415  usb_stk11xx_write_registry(dev, 0x0300, 0x0012);
416  usb_stk11xx_write_registry(dev, 0x0350, 0x0041);
417 
418  usb_stk11xx_write_registry(dev, 0x0351, 0x0000);
419  usb_stk11xx_write_registry(dev, 0x0352, 0x0000);
420  usb_stk11xx_write_registry(dev, 0x0353, 0x0000);
421  usb_stk11xx_write_registry(dev, 0x0018, 0x0010);
422  usb_stk11xx_write_registry(dev, 0x0019, 0x0000);
423 
424  usb_stk11xx_write_registry(dev, 0x001b, values_001B[step]);
425  usb_stk11xx_write_registry(dev, 0x001c, values_001C[step]);
426  usb_stk11xx_write_registry(dev, 0x0300, 0x0080);
427  usb_stk11xx_write_registry(dev, 0x001a, 0x0004);
428  usb_stk11xx_write_registry(dev, 0x0202, values_0202[step]);
429 
430  usb_stk11xx_write_registry(dev, 0x0110, values_0110[step]);
431  usb_stk11xx_write_registry(dev, 0x0111, 0x0000);
432  usb_stk11xx_write_registry(dev, 0x0112, values_0112[step]);
433  usb_stk11xx_write_registry(dev, 0x0113, 0x0000);
434  usb_stk11xx_write_registry(dev, 0x0114, values_0114[step]);
435 
436  usb_stk11xx_write_registry(dev, 0x0115, values_0115[step]);
437  usb_stk11xx_write_registry(dev, 0x0116, values_0116[step]);
438  usb_stk11xx_write_registry(dev, 0x0117, values_0117[step]);
439 
440  usb_stk11xx_read_registry(dev, 0x0100, &value);
441  usb_stk11xx_write_registry(dev, 0x0100, values_0100[step]);
442 
443  usb_stk11xx_write_registry(dev, 0x0200, 0x0080);
444  usb_stk11xx_write_registry(dev, 0x0200, 0x0000);
445  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
446 
447 
448  switch (step) {
449  case 0:
450  usb_stk11xx_write_registry(dev, 0x0203, 0x0040);
451 
452  usb_stk11xx_write_registry(dev, 0x0204, 0x0041);
453  usb_stk11xx_write_registry(dev, 0x0205, 0x0001);
454  usb_stk11xx_write_registry(dev, 0x0204, 0x001c);
455  usb_stk11xx_write_registry(dev, 0x0205, 0x0002);
456 
457  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
458 
459  break;
460 
461  case 1:
462  usb_stk11xx_write_registry(dev, 0x0203, 0x0022);
463 
464  usb_stk11xx_write_registry(dev, 0x0204, 0x0027);
465  usb_stk11xx_write_registry(dev, 0x0205, 0x00a5);
466 
467  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
468 
469  break;
470 
471  case 2:
472  usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
473 
474  usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
475  usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
476  usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
477  usb_stk11xx_write_registry(dev, 0x0205, 0x00bf);
478 
479  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
480 
481  break;
482 
483  case 3:
484  usb_stk11xx_write_registry(dev, 0x0203, 0x0042);
485 
486  usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
487  usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
488  usb_stk11xx_write_registry(dev, 0x0204, 0x0024);
489  usb_stk11xx_write_registry(dev, 0x0205, 0x00a5);
490 
491  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
492 
493  break;
494 
495  case 4:
496  usb_stk11xx_write_registry(dev, 0x0203, 0x0042);
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, 0x00e0);
502  usb_stk11xx_write_registry(dev, 0x0204, 0x0024);
503  usb_stk11xx_write_registry(dev, 0x0205, 0x00a5);
504 
505  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
506 
507  break;
508 
509  case 5:
510  usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
511 
512  usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
513  usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
514  usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
515  usb_stk11xx_write_registry(dev, 0x0205, 0x00ff);
516 
517  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
518 
519  break;
520 
521  case 6:
522  usb_stk11xx_write_registry(dev, 0x0203, 0x0060);
523 
524  usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
525  usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
526  usb_stk11xx_write_registry(dev, 0x0204, 0x0013);
527  usb_stk11xx_write_registry(dev, 0x0205, 0x00ff);
528 
529  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
530 
531  break;
532 
533  case 7:
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, 0x00b7);
540 
541  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
542 
543  break;
544 
545  case 8:
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, 0x00b7);
552 
553  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
554 
555  break;
556 
557  case 9:
558  usb_stk11xx_write_registry(dev, 0x0203, 0x0080);
559 
560  usb_stk11xx_write_registry(dev, 0x0204, 0x0012);
561  usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
562  usb_stk11xx_write_registry(dev, 0x0204, 0x000a);
563  usb_stk11xx_write_registry(dev, 0x0205, 0x00ff);
564 
565  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
566 
567  break;
568 
569  case 10:
570  usb_stk11xx_write_registry(dev, 0x0203, 0x00dc);
571 
572  usb_stk11xx_write_registry(dev, 0x0204, 0x0015);
573  usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
574 
575  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
576 
577  break;
578 
579  case 11:
580  usb_stk11xx_write_registry(dev, 0x0203, 0x00ec);
581 
582  usb_stk11xx_write_registry(dev, 0x0204, 0x0015);
583  usb_stk11xx_write_registry(dev, 0x0205, 0x0080);
584 
585  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
586 
587  break;
588 
589  case 12:
590  usb_stk11xx_write_registry(dev, 0x0203, 0x00ba);
591  break;
592 
593  case 13:
594  usb_stk11xx_write_registry(dev, 0x0203, 0x00ba);
595  break;
596 
597  case 14:
598  usb_stk11xx_write_registry(dev, 0x0203, 0x00ba);
599 
600  usb_stk11xx_write_registry(dev, 0x0204, 0x0001);
601  usb_stk11xx_write_registry(dev, 0x0205, 0x0000);
602 
603  usb_stk11xx_write_registry(dev, 0x0200, 0x0005);
604  break;
605 
606  case 15:
607  usb_stk11xx_write_registry(dev, 0x0203, 0x00ba);
608 
610 
611  usb_stk11xx_write_registry(dev, 0x0200, 0x0080);
612  usb_stk11xx_write_registry(dev, 0x0200, 0x0000);
613  usb_stk11xx_write_registry(dev, 0x02ff, 0x0001);
614  usb_stk11xx_write_registry(dev, 0x0203, 0x00a0);
615 
616  break;
617 
618  case 16:
619  usb_stk11xx_write_registry(dev, 0x0203, 0x00ba);
620 
622 
623  usb_stk11xx_write_registry(dev, 0x0200, 0x0080);
624  usb_stk11xx_write_registry(dev, 0x0200, 0x0000);
625  usb_stk11xx_write_registry(dev, 0x02ff, 0x0001);
626  usb_stk11xx_write_registry(dev, 0x0203, 0x00a0);
627 
628 
629  break;
630 
631  case 17:
632  usb_stk11xx_write_registry(dev, 0x0203, 0x00ba);
633 
635 
636  break;
637  }
638 
639  return 0;
640 }
641 
642 
653 {
654  int value;
655 
656  usb_stk11xx_read_registry(dev, 0x0104, &value);
657  usb_stk11xx_read_registry(dev, 0x0105, &value);
658  usb_stk11xx_read_registry(dev, 0x0106, &value);
659 
660  usb_stk11xx_write_registry(dev, 0x0100, 0x0021);
661  usb_stk11xx_write_registry(dev, 0x0116, 0x0000);
662  usb_stk11xx_write_registry(dev, 0x0117, 0x0000);
663  usb_stk11xx_write_registry(dev, 0x0018, 0x0000);
664 
665  usb_stk11xx_read_registry(dev, 0x0000, &value);
666  usb_stk11xx_write_registry(dev, 0x0000, 0x0049);
667 
668  return 0;
669 }
670 
671 
683 {
685 
686  usb_stk11xx_set_feature(dev, 0);
687 
688  usb_stk11xx_write_registry(dev, 0x0000, 0x00e0);
689  usb_stk11xx_write_registry(dev, 0x0002, 0x00e8);
690  usb_stk11xx_write_registry(dev, 0x0002, 0x0078);
691  usb_stk11xx_write_registry(dev, 0x0000, 0x0020);
692 
694 
696 
697  return 0;
698 }
699 
700 
712 {
713  int i;
714  int retok;
715  int value;
716 
717  int asize;
718  static const int values_204[] = {
719  0xf0, 0xf1, 0x0d, 0xf1, 0x0d, 0xf1, 0xf0, 0xf1, 0x35, 0xf1,
720  0xf0, 0xf1, 0x06, 0xf1, 0xf0, 0xf1, 0xdd, 0xf1, 0xf0, 0xf1,
721  0x1f, 0xf1, 0x20, 0xf1, 0x21, 0xf1, 0x22, 0xf1, 0x23, 0xf1,
722  0x24, 0xf1, 0x28, 0xf1, 0x29, 0xf1, 0x5e, 0xf1, 0x5f, 0xf1,
723  0x60, 0xf1, 0xef, 0xf1, 0xf2, 0xf1, 0x02, 0xf1, 0x03, 0xf1,
724  0x04, 0xf1, 0x09, 0xf1, 0x0a, 0xf1, 0x0b, 0xf1, 0x0c, 0xf1,
725  0x0d, 0xf1, 0x0e, 0xf1, 0x0f, 0xf1, 0x10, 0xf1, 0x11, 0xf1,
726  0x15, 0xf1, 0x16, 0xf1, 0x17, 0xf1, 0x18, 0xf1, 0x19, 0xf1,
727  0x1a, 0xf1, 0x1b, 0xf1, 0x1c, 0xf1, 0x1d, 0xf1, 0x1e, 0xf1,
728  0xf0, 0xf1, 0x06, 0xf1, 0x06, 0xf1, 0xf0, 0xf1, 0x80, 0xf1,
729  0x81, 0xf1, 0x82, 0xf1, 0x83, 0xf1, 0x84, 0xf1, 0x85, 0xf1,
730  0x86, 0xf1, 0x87, 0xf1, 0x88, 0xf1, 0x89, 0xf1, 0x8a, 0xf1,
731  0x8b, 0xf1, 0x8c, 0xf1, 0x8d, 0xf1, 0x8e, 0xf1, 0x8f, 0xf1,
732  0x90, 0xf1, 0x91, 0xf1, 0x92, 0xf1, 0x93, 0xf1, 0x94, 0xf1,
733  0x95, 0xf1, 0xb6, 0xf1, 0xb7, 0xf1, 0xb8, 0xf1, 0xb9, 0xf1,
734  0xba, 0xf1, 0xbb, 0xf1, 0xbc, 0xf1, 0xbd, 0xf1, 0xbe, 0xf1,
735  0xbf, 0xf1, 0xc0, 0xf1, 0xc1, 0xf1, 0xc2, 0xf1, 0xc3, 0xf1,
736  0xc4, 0xf1, 0x06, 0xf1, 0xf0, 0xf1, 0x53, 0xf1, 0x54, 0xf1,
737  0x55, 0xf1, 0x56, 0xf1, 0x57, 0xf1, 0x58, 0xf1, 0xf0, 0xf1,
738  0xa7, 0xf1, 0xaa, 0xf1, 0x3a, 0xf1, 0xa1, 0xf1, 0xa4, 0xf1,
739  0x9b, 0xf1, 0x08, 0xf1, 0xf0, 0xf1, 0x2f, 0xf1, 0x9c, 0xf1,
740  0xd2, 0xf1, 0xcc, 0xf1, 0xcb, 0xf1, 0x2e, 0xf1, 0x67, 0xf1,
741  0xf0, 0xf1, 0x65, 0xf1, 0x66, 0xf1, 0x67, 0xf1, 0x65, 0xf1,
742  0xf0, 0xf1, 0x05, 0xf1, 0x07, 0xf1, 0xf0, 0xf1, 0x39, 0xf1,
743  0x3b, 0xf1, 0x3a, 0xf1, 0x3c, 0xf1, 0x57, 0xf1, 0x58, 0xf1,
744  0x59, 0xf1, 0x5a, 0xf1, 0x5c, 0xf1, 0x5d, 0xf1, 0x64, 0xf1,
745  0xf0, 0xf1, 0x5b, 0xf1, 0xf0, 0xf1, 0x36, 0xf1, 0x37, 0xf1,
746  0xf0, 0xf1, 0x08, 0xf1
747  };
748  static const int values_205[] = {
749  0x00, 0x00, 0x00, 0x0b, 0x00, 0x08, 0x00, 0x00, 0x00, 0x22,
750  0x00, 0x01, 0x70, 0x0e, 0x00, 0x02, 0x18, 0xe0, 0x00, 0x02,
751  0x01, 0x80, 0xc8, 0x14, 0x80, 0x80, 0xa0, 0x78, 0xa0, 0x78,
752  0x5f, 0x20, 0xea, 0x02, 0x86, 0x7a, 0x59, 0x4c, 0x4d, 0x51,
753  0x00, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0xee, 0x39, 0x23,
754  0x07, 0x24, 0x00, 0xcd, 0x00, 0x93, 0x00, 0x04, 0x00, 0x5c,
755  0x00, 0xd9, 0x00, 0x53, 0x00, 0x08, 0x00, 0x91, 0x00, 0xcf,
756  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
757  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
758  0x00, 0x01, 0xf0, 0x0e, 0x70, 0x0e, 0x00, 0x01, 0x00, 0x0b,
759  0xee, 0x08, 0xf8, 0xf3, 0x00, 0xfb, 0xee, 0x09, 0xf7, 0xf3,
760  0xff, 0xfa, 0xf2, 0x08, 0xf9, 0xf5, 0xff, 0xf9, 0xe4, 0x10,
761  0xf1, 0xea, 0xf8, 0xf6, 0x00, 0x00, 0xe9, 0x0f, 0xf2, 0xed,
762  0xf6, 0xf6, 0x00, 0x00, 0xea, 0x0d, 0xf4, 0xf1, 0xf8, 0xf8,
763  0x00, 0x00, 0x07, 0x06, 0x1c, 0x0b, 0x08, 0x06, 0x17, 0x0a,
764  0x05, 0x06, 0x1a, 0x07, 0x06, 0x04, 0x0a, 0x08, 0x00, 0x19,
765  0x06, 0x05, 0x07, 0x0a, 0x00, 0x1f, 0x04, 0x04, 0x04, 0x08,
766  0x00, 0x1b, 0x74, 0x0e, 0x00, 0x01, 0x0b, 0x03, 0x47, 0x22,
767  0xac, 0x82, 0xda, 0xc7, 0xf5, 0xe9, 0xff, 0x00, 0x00, 0x01,
768  0x02, 0x80, 0x01, 0xe0, 0x43, 0x00, 0x05, 0x00, 0x04, 0x00,
769  0x43, 0x00, 0x01, 0x80, 0x00, 0x02, 0xd1, 0x00, 0xd1, 0x00,
770  0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x0c, 0x50, 0x10, 0x10,
771  0x00, 0x00, 0xa0, 0x00, 0x20, 0x03, 0x05, 0x01, 0x20, 0x00,
772  0x00, 0x00, 0x01, 0xb8, 0x00, 0xd8, 0x00, 0x02, 0x06, 0xc0,
773  0x04, 0x0e, 0x06, 0xc0, 0x05, 0x64, 0x02, 0x08, 0x02, 0x71,
774  0x02, 0x08, 0x02, 0x71, 0x12, 0x0d, 0x17, 0x12, 0x5e, 0x1c,
775  0x00, 0x02, 0x00, 0x03, 0x00, 0x02, 0x78, 0x10, 0x83, 0x04,
776  0x00, 0x00, 0x00, 0x21
777  };
778 
779 
780  asize = ARRAY_SIZE(values_204);
781 
782  for(i=0; i<asize; i++) {
783  usb_stk11xx_read_registry(dev, 0x02ff, &value);
784  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
785 
786  usb_stk11xx_write_registry(dev, 0x0203, 0x00ba);
787 
788  usb_stk11xx_write_registry(dev, 0x0204, values_204[i]);
789  usb_stk11xx_write_registry(dev, 0x0205, values_205[i]);
790  usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
791 
792  retok = dev_stk11xx_check_device(dev, 500);
793 
794  if (retok != 1) {
795  STK_ERROR("Load default sensor settings fail !\n");
796  return -1;
797  }
798 
799  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
800  }
801 
802  retok = dev_stk11xx_check_device(dev, 500);
803 
804  return 0;
805 }
806 
807 
822 {
823  int i;
824  int ret;
825  int value;
826 
827  int asize;
828  static const int values_204[] = {
829  0xf0, 0xf1, 0x2e, 0xf1, 0xf0, 0xf1, 0x5b, 0xf1, 0xf0, 0xf1, 0x36, 0xf1, 0x37, 0xf1, 0xf0, 0xf1, 0x08, 0xf1
830  };
831  static const int values_205[] = {
832  0x00, 0x02, 0x0c, 0x3c, 0x00, 0x02, 0x00, 0x03, 0x00, 0x02, 0x78, 0x10, 0x83, 0x04, 0x00, 0x00, 0x00, 0x21
833  };
834 
835 
836  asize = ARRAY_SIZE(values_204);
837 
838  // Contrast register
839  for (i=0; i<asize; i++) {
840  usb_stk11xx_read_registry(dev, 0x02ff, &value);
841  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
842 
843  usb_stk11xx_write_registry(dev, 0x0204, values_204[i]);
844  usb_stk11xx_write_registry(dev, 0x0205, values_205[i]);
845 
846  usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
847  ret = dev_stk11xx_check_device(dev, 500);
848  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
849  }
850 
851  return 0;
852 }
853 
854 
874 {
875  int ret;
876  int value;
877 
878  // Contrast register
879  usb_stk11xx_read_registry(dev, 0x02ff, &value);
880  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
881 
882  usb_stk11xx_write_registry(dev, 0x0204, 0x00b3);
883  usb_stk11xx_write_registry(dev, 0x0205, (dev->vsettings.contrast >> 8));
884 
885  usb_stk11xx_write_registry(dev, 0x0200, 0x0001);
886  ret = dev_stk11xx_check_device(dev, 500);
887  usb_stk11xx_write_registry(dev, 0x02ff, 0x0000);
888 
889  STK_DEBUG("Set colour : %d\n", dev->vsettings.colour);
890  STK_DEBUG("Set contrast : %d\n", dev->vsettings.contrast);
891  STK_DEBUG("Set whiteness : %d\n", dev->vsettings.whiteness);
892  STK_DEBUG("Set brightness : %d\n", dev->vsettings.brightness);
893 
894  return 0;
895 }
896 
897 
919 {
920  return 0;
921 }
922 
923 
935 {
936  int value;
937  int value_116, value_117;
938 
939  usb_stk11xx_read_registry(dev, 0x0114, &value); // read 0x80
940  usb_stk11xx_read_registry(dev, 0x0115, &value); // read 0x02
941 
942  usb_stk11xx_read_registry(dev, 0x0116, &value_116);
943  usb_stk11xx_read_registry(dev, 0x0117, &value_117);
944 
945  usb_stk11xx_write_registry(dev, 0x0116, 0x0000);
946  usb_stk11xx_write_registry(dev, 0x0117, 0x0000);
947 
948  usb_stk11xx_read_registry(dev, 0x0100, &value); // read 0x21
949  usb_stk11xx_write_registry(dev, 0x0100, 0x00a0);
950 
951  usb_stk11xx_write_registry(dev, 0x0116, value_116);
952  usb_stk11xx_write_registry(dev, 0x0117, value_117);
953 
954  return 0;
955 }
956 
957 
968 {
970 
972 
973  return 0;
974 }
975 
976 
988 {
989  int value;
990 
991  usb_stk11xx_read_registry(dev, 0x0100, &value);
992  usb_stk11xx_write_registry(dev, 0x0100, 0x0021);
993 
994  return 0;
995 }
996 
dev_stk6a33_set_camera_quality
int dev_stk6a33_set_camera_quality(struct usb_stk11xx *dev)
This function permits to modify the settings of the camera.
Definition: stk11xx-dev-6a33.c:873
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
dev_stk6a33_camera_asleep
int dev_stk6a33_camera_asleep(struct usb_stk11xx *dev)
Wake-up the camera.
Definition: stk11xx-dev-6a33.c:652
stk11xx.h
Driver for Syntek USB video camera.
STK_DEBUG
#define STK_DEBUG(str, args...)
Definition: stk11xx.h:149
dev_stk6a33_camera_settings
int dev_stk6a33_camera_settings(struct usb_stk11xx *dev)
This function permits to modify the settings of the camera.
Definition: stk11xx-dev-6a33.c:821
dev_stk6a33_set_camera_fps
int dev_stk6a33_set_camera_fps(struct usb_stk11xx *dev)
This function permits to modify the settings of the camera.
Definition: stk11xx-dev-6a33.c:918
stk11xx_video::colour
int colour
Definition: stk11xx.h:281
dev_stk6a33_reconf_camera
int dev_stk6a33_reconf_camera(struct usb_stk11xx *dev)
Reconfigure the camera before the stream.
Definition: stk11xx-dev-6a33.c:967
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
dev_stk6a33_init_camera
int dev_stk6a33_init_camera(struct usb_stk11xx *dev)
This function initializes the device for the stream.
Definition: stk11xx-dev-6a33.c:682
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_stk6a33_configure_device
int dev_stk6a33_configure_device(struct usb_stk11xx *dev, int step)
This function permits to configure the device.
Definition: stk11xx-dev-6a33.c:368
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_stk6a33_start_stream
int dev_stk6a33_start_stream(struct usb_stk11xx *dev)
This function sets the device to start the stream.
Definition: stk11xx-dev-6a33.c:934
stk11xx_video::contrast
int contrast
Definition: stk11xx.h:279
dev_stk6a33_initialize_device
int dev_stk6a33_initialize_device(struct usb_stk11xx *dev)
This function permits to initialize the device.
Definition: stk11xx-dev-6a33.c:70
usb_stk11xx
Definition: stk11xx.h:301
usb_stk11xx::vsettings
struct stk11xx_video vsettings
Definition: stk11xx.h:319
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_stk6a33_sensor_settings
int dev_stk6a33_sensor_settings(struct usb_stk11xx *dev)
This function permits to set default sensor settings.
Definition: stk11xx-dev-6a33.c:711
dev_stk6a33_stop_stream
int dev_stk6a33_stop_stream(struct usb_stk11xx *dev)
This function sets the device to stop the stream.
Definition: stk11xx-dev-6a33.c:987