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