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