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