Merge tag 'gvt-next-2017-02-24' of https://github.com/01org/gvt-linux into drm-intel...
[sfrench/cifs-2.6.git] / drivers / media / usb / gspca / sonixb.c
1 /*
2  *              sonix sn9c102 (bayer) library
3  *
4  * Copyright (C) 2009-2011 Jean-François Moine <http://moinejf.free.fr>
5  * Copyright (C) 2003 2004 Michel Xhaard mxhaard@magic.fr
6  * Add Pas106 Stefano Mozzi (C) 2004
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  */
18
19 /* Some documentation on known sonixb registers:
20
21 Reg     Use
22 sn9c101 / sn9c102:
23 0x10    high nibble red gain low nibble blue gain
24 0x11    low nibble green gain
25 sn9c103:
26 0x05    red gain 0-127
27 0x06    blue gain 0-127
28 0x07    green gain 0-127
29 all:
30 0x08-0x0f i2c / 3wire registers
31 0x12    hstart
32 0x13    vstart
33 0x15    hsize (hsize = register-value * 16)
34 0x16    vsize (vsize = register-value * 16)
35 0x17    bit 0 toggle compression quality (according to sn9c102 driver)
36 0x18    bit 7 enables compression, bit 4-5 set image down scaling:
37         00 scale 1, 01 scale 1/2, 10, scale 1/4
38 0x19    high-nibble is sensor clock divider, changes exposure on sensors which
39         use a clock generated by the bridge. Some sensors have their own clock.
40 0x1c    auto_exposure area (for avg_lum) startx (startx = register-value * 32)
41 0x1d    auto_exposure area (for avg_lum) starty (starty = register-value * 32)
42 0x1e    auto_exposure area (for avg_lum) stopx (hsize = (0x1e - 0x1c) * 32)
43 0x1f    auto_exposure area (for avg_lum) stopy (vsize = (0x1f - 0x1d) * 32)
44 */
45
46 #define MODULE_NAME "sonixb"
47
48 #include <linux/input.h>
49 #include "gspca.h"
50
51 MODULE_AUTHOR("Jean-François Moine <http://moinejf.free.fr>");
52 MODULE_DESCRIPTION("GSPCA/SN9C102 USB Camera Driver");
53 MODULE_LICENSE("GPL");
54
55 /* specific webcam descriptor */
56 struct sd {
57         struct gspca_dev gspca_dev;     /* !! must be the first item */
58
59         struct v4l2_ctrl *brightness;
60         struct v4l2_ctrl *plfreq;
61
62         atomic_t avg_lum;
63         int prev_avg_lum;
64         int exposure_knee;
65         int header_read;
66         u8 header[12]; /* Header without sof marker */
67
68         unsigned char autogain_ignore_frames;
69         unsigned char frames_to_drop;
70
71         __u8 bridge;                    /* Type of bridge */
72 #define BRIDGE_101 0
73 #define BRIDGE_102 0 /* We make no difference between 101 and 102 */
74 #define BRIDGE_103 1
75
76         __u8 sensor;                    /* Type of image sensor chip */
77 #define SENSOR_HV7131D 0
78 #define SENSOR_HV7131R 1
79 #define SENSOR_OV6650 2
80 #define SENSOR_OV7630 3
81 #define SENSOR_PAS106 4
82 #define SENSOR_PAS202 5
83 #define SENSOR_TAS5110C 6
84 #define SENSOR_TAS5110D 7
85 #define SENSOR_TAS5130CXX 8
86         __u8 reg11;
87 };
88
89 typedef const __u8 sensor_init_t[8];
90
91 struct sensor_data {
92         const __u8 *bridge_init;
93         sensor_init_t *sensor_init;
94         int sensor_init_size;
95         int flags;
96         __u8 sensor_addr;
97 };
98
99 /* sensor_data flags */
100 #define F_SIF           0x01    /* sif or vga */
101
102 /* priv field of struct v4l2_pix_format flags (do not use low nibble!) */
103 #define MODE_RAW 0x10           /* raw bayer mode */
104 #define MODE_REDUCED_SIF 0x20   /* vga mode (320x240 / 160x120) on sif cam */
105
106 #define COMP 0xc7               /* 0x87 //0x07 */
107 #define COMP1 0xc9              /* 0x89 //0x09 */
108
109 #define MCK_INIT 0x63
110 #define MCK_INIT1 0x20          /*fixme: Bayer - 0x50 for JPEG ??*/
111
112 #define SYS_CLK 0x04
113
114 #define SENS(bridge, sensor, _flags, _sensor_addr) \
115 { \
116         .bridge_init = bridge, \
117         .sensor_init = sensor, \
118         .sensor_init_size = sizeof(sensor), \
119         .flags = _flags, .sensor_addr = _sensor_addr \
120 }
121
122 /* We calculate the autogain at the end of the transfer of a frame, at this
123    moment a frame with the old settings is being captured and transmitted. So
124    if we adjust the gain or exposure we must ignore atleast the next frame for
125    the new settings to come into effect before doing any other adjustments. */
126 #define AUTOGAIN_IGNORE_FRAMES 1
127
128 static const struct v4l2_pix_format vga_mode[] = {
129         {160, 120, V4L2_PIX_FMT_SBGGR8, V4L2_FIELD_NONE,
130                 .bytesperline = 160,
131                 .sizeimage = 160 * 120,
132                 .colorspace = V4L2_COLORSPACE_SRGB,
133                 .priv = 2 | MODE_RAW},
134         {160, 120, V4L2_PIX_FMT_SN9C10X, V4L2_FIELD_NONE,
135                 .bytesperline = 160,
136                 .sizeimage = 160 * 120 * 5 / 4,
137                 .colorspace = V4L2_COLORSPACE_SRGB,
138                 .priv = 2},
139         {320, 240, V4L2_PIX_FMT_SN9C10X, V4L2_FIELD_NONE,
140                 .bytesperline = 320,
141                 .sizeimage = 320 * 240 * 5 / 4,
142                 .colorspace = V4L2_COLORSPACE_SRGB,
143                 .priv = 1},
144         {640, 480, V4L2_PIX_FMT_SN9C10X, V4L2_FIELD_NONE,
145                 .bytesperline = 640,
146                 .sizeimage = 640 * 480 * 5 / 4,
147                 .colorspace = V4L2_COLORSPACE_SRGB,
148                 .priv = 0},
149 };
150 static const struct v4l2_pix_format sif_mode[] = {
151         {160, 120, V4L2_PIX_FMT_SBGGR8, V4L2_FIELD_NONE,
152                 .bytesperline = 160,
153                 .sizeimage = 160 * 120,
154                 .colorspace = V4L2_COLORSPACE_SRGB,
155                 .priv = 1 | MODE_RAW | MODE_REDUCED_SIF},
156         {160, 120, V4L2_PIX_FMT_SN9C10X, V4L2_FIELD_NONE,
157                 .bytesperline = 160,
158                 .sizeimage = 160 * 120 * 5 / 4,
159                 .colorspace = V4L2_COLORSPACE_SRGB,
160                 .priv = 1 | MODE_REDUCED_SIF},
161         {176, 144, V4L2_PIX_FMT_SBGGR8, V4L2_FIELD_NONE,
162                 .bytesperline = 176,
163                 .sizeimage = 176 * 144,
164                 .colorspace = V4L2_COLORSPACE_SRGB,
165                 .priv = 1 | MODE_RAW},
166         {176, 144, V4L2_PIX_FMT_SN9C10X, V4L2_FIELD_NONE,
167                 .bytesperline = 176,
168                 .sizeimage = 176 * 144 * 5 / 4,
169                 .colorspace = V4L2_COLORSPACE_SRGB,
170                 .priv = 1},
171         {320, 240, V4L2_PIX_FMT_SN9C10X, V4L2_FIELD_NONE,
172                 .bytesperline = 320,
173                 .sizeimage = 320 * 240 * 5 / 4,
174                 .colorspace = V4L2_COLORSPACE_SRGB,
175                 .priv = 0 | MODE_REDUCED_SIF},
176         {352, 288, V4L2_PIX_FMT_SN9C10X, V4L2_FIELD_NONE,
177                 .bytesperline = 352,
178                 .sizeimage = 352 * 288 * 5 / 4,
179                 .colorspace = V4L2_COLORSPACE_SRGB,
180                 .priv = 0},
181 };
182
183 static const __u8 initHv7131d[] = {
184         0x04, 0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x11, 0x00, 0x00, 0x00,
185         0x00, 0x00,
186         0x00, 0x00, 0x00, 0x02, 0x02, 0x00,
187         0x28, 0x1e, 0x60, 0x8e, 0x42,
188 };
189 static const __u8 hv7131d_sensor_init[][8] = {
190         {0xa0, 0x11, 0x01, 0x04, 0x00, 0x00, 0x00, 0x17},
191         {0xa0, 0x11, 0x02, 0x00, 0x00, 0x00, 0x00, 0x17},
192         {0xa0, 0x11, 0x28, 0x00, 0x00, 0x00, 0x00, 0x17},
193         {0xa0, 0x11, 0x30, 0x30, 0x00, 0x00, 0x00, 0x17}, /* reset level */
194         {0xa0, 0x11, 0x34, 0x02, 0x00, 0x00, 0x00, 0x17}, /* pixel bias volt */
195 };
196
197 static const __u8 initHv7131r[] = {
198         0x46, 0x77, 0x00, 0x04, 0x00, 0x00, 0x00, 0x80, 0x11, 0x00, 0x00, 0x00,
199         0x00, 0x00,
200         0x00, 0x00, 0x00, 0x02, 0x01, 0x00,
201         0x28, 0x1e, 0x60, 0x8a, 0x20,
202 };
203 static const __u8 hv7131r_sensor_init[][8] = {
204         {0xc0, 0x11, 0x31, 0x38, 0x2a, 0x2e, 0x00, 0x10},
205         {0xa0, 0x11, 0x01, 0x08, 0x2a, 0x2e, 0x00, 0x10},
206         {0xb0, 0x11, 0x20, 0x00, 0xd0, 0x2e, 0x00, 0x10},
207         {0xc0, 0x11, 0x25, 0x03, 0x0e, 0x28, 0x00, 0x16},
208         {0xa0, 0x11, 0x30, 0x10, 0x0e, 0x28, 0x00, 0x15},
209 };
210 static const __u8 initOv6650[] = {
211         0x44, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
212         0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
213         0x00, 0x01, 0x01, 0x0a, 0x16, 0x12, 0x68, 0x8b,
214         0x10,
215 };
216 static const __u8 ov6650_sensor_init[][8] = {
217         /* Bright, contrast, etc are set through SCBB interface.
218          * AVCAP on win2 do not send any data on this controls. */
219         /* Anyway, some registers appears to alter bright and constrat */
220
221         /* Reset sensor */
222         {0xa0, 0x60, 0x12, 0x80, 0x00, 0x00, 0x00, 0x10},
223         /* Set clock register 0x11 low nibble is clock divider */
224         {0xd0, 0x60, 0x11, 0xc0, 0x1b, 0x18, 0xc1, 0x10},
225         /* Next some unknown stuff */
226         {0xb0, 0x60, 0x15, 0x00, 0x02, 0x18, 0xc1, 0x10},
227 /*      {0xa0, 0x60, 0x1b, 0x01, 0x02, 0x18, 0xc1, 0x10},
228                  * THIS SET GREEN SCREEN
229                  * (pixels could be innverted in decode kind of "brg",
230                  * but blue wont be there. Avoid this data ... */
231         {0xd0, 0x60, 0x26, 0x01, 0x14, 0xd8, 0xa4, 0x10}, /* format out? */
232         {0xd0, 0x60, 0x26, 0x01, 0x14, 0xd8, 0xa4, 0x10},
233         {0xa0, 0x60, 0x30, 0x3d, 0x0a, 0xd8, 0xa4, 0x10},
234         /* Enable rgb brightness control */
235         {0xa0, 0x60, 0x61, 0x08, 0x00, 0x00, 0x00, 0x10},
236         /* HDG: Note windows uses the line below, which sets both register 0x60
237            and 0x61 I believe these registers of the ov6650 are identical as
238            those of the ov7630, because if this is true the windows settings
239            add a bit additional red gain and a lot additional blue gain, which
240            matches my findings that the windows settings make blue much too
241            blue and red a little too red.
242         {0xb0, 0x60, 0x60, 0x66, 0x68, 0xd8, 0xa4, 0x10}, */
243         /* Some more unknown stuff */
244         {0xa0, 0x60, 0x68, 0x04, 0x68, 0xd8, 0xa4, 0x10},
245         {0xd0, 0x60, 0x17, 0x24, 0xd6, 0x04, 0x94, 0x10}, /* Clipreg */
246 };
247
248 static const __u8 initOv7630[] = {
249         0x04, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* r01 .. r08 */
250         0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* r09 .. r10 */
251         0x00, 0x01, 0x01, 0x0a,                         /* r11 .. r14 */
252         0x28, 0x1e,                     /* H & V sizes     r15 .. r16 */
253         0x68, 0x8f, MCK_INIT1,                          /* r17 .. r19 */
254 };
255 static const __u8 ov7630_sensor_init[][8] = {
256         {0xa0, 0x21, 0x12, 0x80, 0x00, 0x00, 0x00, 0x10},
257         {0xb0, 0x21, 0x01, 0x77, 0x3a, 0x00, 0x00, 0x10},
258 /*      {0xd0, 0x21, 0x12, 0x7c, 0x01, 0x80, 0x34, 0x10},          jfm */
259         {0xd0, 0x21, 0x12, 0x5c, 0x00, 0x80, 0x34, 0x10},       /* jfm */
260         {0xa0, 0x21, 0x1b, 0x04, 0x00, 0x80, 0x34, 0x10},
261         {0xa0, 0x21, 0x20, 0x44, 0x00, 0x80, 0x34, 0x10},
262         {0xa0, 0x21, 0x23, 0xee, 0x00, 0x80, 0x34, 0x10},
263         {0xd0, 0x21, 0x26, 0xa0, 0x9a, 0xa0, 0x30, 0x10},
264         {0xb0, 0x21, 0x2a, 0x80, 0x00, 0xa0, 0x30, 0x10},
265         {0xb0, 0x21, 0x2f, 0x3d, 0x24, 0xa0, 0x30, 0x10},
266         {0xa0, 0x21, 0x32, 0x86, 0x24, 0xa0, 0x30, 0x10},
267         {0xb0, 0x21, 0x60, 0xa9, 0x4a, 0xa0, 0x30, 0x10},
268 /*      {0xb0, 0x21, 0x60, 0xa9, 0x42, 0xa0, 0x30, 0x10},        * jfm */
269         {0xa0, 0x21, 0x65, 0x00, 0x42, 0xa0, 0x30, 0x10},
270         {0xa0, 0x21, 0x69, 0x38, 0x42, 0xa0, 0x30, 0x10},
271         {0xc0, 0x21, 0x6f, 0x88, 0x0b, 0x00, 0x30, 0x10},
272         {0xc0, 0x21, 0x74, 0x21, 0x8e, 0x00, 0x30, 0x10},
273         {0xa0, 0x21, 0x7d, 0xf7, 0x8e, 0x00, 0x30, 0x10},
274         {0xd0, 0x21, 0x17, 0x1c, 0xbd, 0x06, 0xf6, 0x10},
275 };
276
277 static const __u8 initPas106[] = {
278         0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x40, 0x00, 0x00, 0x00,
279         0x00, 0x00,
280         0x00, 0x00, 0x00, 0x04, 0x01, 0x00,
281         0x16, 0x12, 0x24, COMP1, MCK_INIT1,
282 };
283 /* compression 0x86 mckinit1 0x2b */
284
285 /* "Known" PAS106B registers:
286   0x02 clock divider
287   0x03 Variable framerate bits 4-11
288   0x04 Var framerate bits 0-3, one must leave the 4 msb's at 0 !!
289        The variable framerate control must never be set lower then 300,
290        which sets the framerate at 90 / reg02, otherwise vsync is lost.
291   0x05 Shutter Time Line Offset, this can be used as an exposure control:
292        0 = use full frame time, 255 = no exposure at all
293        Note this may never be larger then "var-framerate control" / 2 - 2.
294        When var-framerate control is < 514, no exposure is reached at the max
295        allowed value for the framerate control value, rather then at 255.
296   0x06 Shutter Time Pixel Offset, like reg05 this influences exposure, but
297        only a very little bit, leave at 0xcd
298   0x07 offset sign bit (bit0 1 > negative offset)
299   0x08 offset
300   0x09 Blue Gain
301   0x0a Green1 Gain
302   0x0b Green2 Gain
303   0x0c Red Gain
304   0x0e Global gain
305   0x13 Write 1 to commit settings to sensor
306 */
307
308 static const __u8 pas106_sensor_init[][8] = {
309         /* Pixel Clock Divider 6 */
310         { 0xa1, 0x40, 0x02, 0x04, 0x00, 0x00, 0x00, 0x14 },
311         /* Frame Time MSB (also seen as 0x12) */
312         { 0xa1, 0x40, 0x03, 0x13, 0x00, 0x00, 0x00, 0x14 },
313         /* Frame Time LSB (also seen as 0x05) */
314         { 0xa1, 0x40, 0x04, 0x06, 0x00, 0x00, 0x00, 0x14 },
315         /* Shutter Time Line Offset (also seen as 0x6d) */
316         { 0xa1, 0x40, 0x05, 0x65, 0x00, 0x00, 0x00, 0x14 },
317         /* Shutter Time Pixel Offset (also seen as 0xb1) */
318         { 0xa1, 0x40, 0x06, 0xcd, 0x00, 0x00, 0x00, 0x14 },
319         /* Black Level Subtract Sign (also seen 0x00) */
320         { 0xa1, 0x40, 0x07, 0xc1, 0x00, 0x00, 0x00, 0x14 },
321         /* Black Level Subtract Level (also seen 0x01) */
322         { 0xa1, 0x40, 0x08, 0x06, 0x00, 0x00, 0x00, 0x14 },
323         { 0xa1, 0x40, 0x08, 0x06, 0x00, 0x00, 0x00, 0x14 },
324         /* Color Gain B Pixel 5 a */
325         { 0xa1, 0x40, 0x09, 0x05, 0x00, 0x00, 0x00, 0x14 },
326         /* Color Gain G1 Pixel 1 5 */
327         { 0xa1, 0x40, 0x0a, 0x04, 0x00, 0x00, 0x00, 0x14 },
328         /* Color Gain G2 Pixel 1 0 5 */
329         { 0xa1, 0x40, 0x0b, 0x04, 0x00, 0x00, 0x00, 0x14 },
330         /* Color Gain R Pixel 3 1 */
331         { 0xa1, 0x40, 0x0c, 0x05, 0x00, 0x00, 0x00, 0x14 },
332         /* Color GainH  Pixel */
333         { 0xa1, 0x40, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x14 },
334         /* Global Gain */
335         { 0xa1, 0x40, 0x0e, 0x0e, 0x00, 0x00, 0x00, 0x14 },
336         /* Contrast */
337         { 0xa1, 0x40, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x14 },
338         /* H&V synchro polarity */
339         { 0xa1, 0x40, 0x10, 0x06, 0x00, 0x00, 0x00, 0x14 },
340         /* ?default */
341         { 0xa1, 0x40, 0x11, 0x06, 0x00, 0x00, 0x00, 0x14 },
342         /* DAC scale */
343         { 0xa1, 0x40, 0x12, 0x06, 0x00, 0x00, 0x00, 0x14 },
344         /* ?default */
345         { 0xa1, 0x40, 0x14, 0x02, 0x00, 0x00, 0x00, 0x14 },
346         /* Validate Settings */
347         { 0xa1, 0x40, 0x13, 0x01, 0x00, 0x00, 0x00, 0x14 },
348 };
349
350 static const __u8 initPas202[] = {
351         0x44, 0x44, 0x21, 0x30, 0x00, 0x00, 0x00, 0x80, 0x40, 0x00, 0x00, 0x00,
352         0x00, 0x00,
353         0x00, 0x00, 0x00, 0x06, 0x03, 0x0a,
354         0x28, 0x1e, 0x20, 0x89, 0x20,
355 };
356
357 /* "Known" PAS202BCB registers:
358   0x02 clock divider
359   0x04 Variable framerate bits 6-11 (*)
360   0x05 Var framerate  bits 0-5, one must leave the 2 msb's at 0 !!
361   0x07 Blue Gain
362   0x08 Green Gain
363   0x09 Red Gain
364   0x0b offset sign bit (bit0 1 > negative offset)
365   0x0c offset
366   0x0e Unknown image is slightly brighter when bit 0 is 0, if reg0f is 0 too,
367        leave at 1 otherwise we get a jump in our exposure control
368   0x0f Exposure 0-255, 0 = use full frame time, 255 = no exposure at all
369   0x10 Master gain 0 - 31
370   0x11 write 1 to apply changes
371   (*) The variable framerate control must never be set lower then 500
372       which sets the framerate at 30 / reg02, otherwise vsync is lost.
373 */
374 static const __u8 pas202_sensor_init[][8] = {
375         /* Set the clock divider to 4 -> 30 / 4 = 7.5 fps, we would like
376            to set it lower, but for some reason the bridge starts missing
377            vsync's then */
378         {0xa0, 0x40, 0x02, 0x04, 0x00, 0x00, 0x00, 0x10},
379         {0xd0, 0x40, 0x04, 0x07, 0x34, 0x00, 0x09, 0x10},
380         {0xd0, 0x40, 0x08, 0x01, 0x00, 0x00, 0x01, 0x10},
381         {0xd0, 0x40, 0x0c, 0x00, 0x0c, 0x01, 0x32, 0x10},
382         {0xd0, 0x40, 0x10, 0x00, 0x01, 0x00, 0x63, 0x10},
383         {0xa0, 0x40, 0x15, 0x70, 0x01, 0x00, 0x63, 0x10},
384         {0xa0, 0x40, 0x18, 0x00, 0x01, 0x00, 0x63, 0x10},
385         {0xa0, 0x40, 0x11, 0x01, 0x01, 0x00, 0x63, 0x10},
386         {0xa0, 0x40, 0x03, 0x56, 0x01, 0x00, 0x63, 0x10},
387         {0xa0, 0x40, 0x11, 0x01, 0x01, 0x00, 0x63, 0x10},
388 };
389
390 static const __u8 initTas5110c[] = {
391         0x44, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x11, 0x00, 0x00, 0x00,
392         0x00, 0x00,
393         0x00, 0x00, 0x00, 0x45, 0x09, 0x0a,
394         0x16, 0x12, 0x60, 0x86, 0x2b,
395 };
396 /* Same as above, except a different hstart */
397 static const __u8 initTas5110d[] = {
398         0x44, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x11, 0x00, 0x00, 0x00,
399         0x00, 0x00,
400         0x00, 0x00, 0x00, 0x41, 0x09, 0x0a,
401         0x16, 0x12, 0x60, 0x86, 0x2b,
402 };
403 /* tas5110c is 3 wire, tas5110d is 2 wire (regular i2c) */
404 static const __u8 tas5110c_sensor_init[][8] = {
405         {0x30, 0x11, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x10},
406         {0x30, 0x11, 0x02, 0x20, 0xa9, 0x00, 0x00, 0x10},
407 };
408 /* Known TAS5110D registers
409  * reg02: gain, bit order reversed!! 0 == max gain, 255 == min gain
410  * reg03: bit3: vflip, bit4: ~hflip, bit7: ~gainboost (~ == inverted)
411  *        Note: writing reg03 seems to only work when written together with 02
412  */
413 static const __u8 tas5110d_sensor_init[][8] = {
414         {0xa0, 0x61, 0x9a, 0xca, 0x00, 0x00, 0x00, 0x17}, /* reset */
415 };
416
417 static const __u8 initTas5130[] = {
418         0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x11, 0x00, 0x00, 0x00,
419         0x00, 0x00,
420         0x00, 0x00, 0x00, 0x68, 0x0c, 0x0a,
421         0x28, 0x1e, 0x60, COMP, MCK_INIT,
422 };
423 static const __u8 tas5130_sensor_init[][8] = {
424 /*      {0x30, 0x11, 0x00, 0x40, 0x47, 0x00, 0x00, 0x10},
425                                         * shutter 0x47 short exposure? */
426         {0x30, 0x11, 0x00, 0x40, 0x01, 0x00, 0x00, 0x10},
427                                         /* shutter 0x01 long exposure */
428         {0x30, 0x11, 0x02, 0x20, 0x70, 0x00, 0x00, 0x10},
429 };
430
431 static const struct sensor_data sensor_data[] = {
432         SENS(initHv7131d, hv7131d_sensor_init, 0, 0),
433         SENS(initHv7131r, hv7131r_sensor_init, 0, 0),
434         SENS(initOv6650, ov6650_sensor_init, F_SIF, 0x60),
435         SENS(initOv7630, ov7630_sensor_init, 0, 0x21),
436         SENS(initPas106, pas106_sensor_init, F_SIF, 0),
437         SENS(initPas202, pas202_sensor_init, 0, 0),
438         SENS(initTas5110c, tas5110c_sensor_init, F_SIF, 0),
439         SENS(initTas5110d, tas5110d_sensor_init, F_SIF, 0),
440         SENS(initTas5130, tas5130_sensor_init, 0, 0),
441 };
442
443 /* get one byte in gspca_dev->usb_buf */
444 static void reg_r(struct gspca_dev *gspca_dev,
445                   __u16 value)
446 {
447         int res;
448
449         if (gspca_dev->usb_err < 0)
450                 return;
451
452         res = usb_control_msg(gspca_dev->dev,
453                         usb_rcvctrlpipe(gspca_dev->dev, 0),
454                         0,                      /* request */
455                         USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
456                         value,
457                         0,                      /* index */
458                         gspca_dev->usb_buf, 1,
459                         500);
460
461         if (res < 0) {
462                 dev_err(gspca_dev->v4l2_dev.dev,
463                         "Error reading register %02x: %d\n", value, res);
464                 gspca_dev->usb_err = res;
465         }
466 }
467
468 static void reg_w(struct gspca_dev *gspca_dev,
469                   __u16 value,
470                   const __u8 *buffer,
471                   int len)
472 {
473         int res;
474
475         if (gspca_dev->usb_err < 0)
476                 return;
477
478         memcpy(gspca_dev->usb_buf, buffer, len);
479         res = usb_control_msg(gspca_dev->dev,
480                         usb_sndctrlpipe(gspca_dev->dev, 0),
481                         0x08,                   /* request */
482                         USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE,
483                         value,
484                         0,                      /* index */
485                         gspca_dev->usb_buf, len,
486                         500);
487
488         if (res < 0) {
489                 dev_err(gspca_dev->v4l2_dev.dev,
490                         "Error writing register %02x: %d\n", value, res);
491                 gspca_dev->usb_err = res;
492         }
493 }
494
495 static void i2c_w(struct gspca_dev *gspca_dev, const u8 *buf)
496 {
497         int retry = 60;
498
499         if (gspca_dev->usb_err < 0)
500                 return;
501
502         /* is i2c ready */
503         reg_w(gspca_dev, 0x08, buf, 8);
504         while (retry--) {
505                 if (gspca_dev->usb_err < 0)
506                         return;
507                 msleep(1);
508                 reg_r(gspca_dev, 0x08);
509                 if (gspca_dev->usb_buf[0] & 0x04) {
510                         if (gspca_dev->usb_buf[0] & 0x08) {
511                                 dev_err(gspca_dev->v4l2_dev.dev,
512                                         "i2c error writing %8ph\n", buf);
513                                 gspca_dev->usb_err = -EIO;
514                         }
515                         return;
516                 }
517         }
518
519         dev_err(gspca_dev->v4l2_dev.dev, "i2c write timeout\n");
520         gspca_dev->usb_err = -EIO;
521 }
522
523 static void i2c_w_vector(struct gspca_dev *gspca_dev,
524                         const __u8 buffer[][8], int len)
525 {
526         for (;;) {
527                 if (gspca_dev->usb_err < 0)
528                         return;
529                 i2c_w(gspca_dev, *buffer);
530                 len -= 8;
531                 if (len <= 0)
532                         break;
533                 buffer++;
534         }
535 }
536
537 static void setbrightness(struct gspca_dev *gspca_dev)
538 {
539         struct sd *sd = (struct sd *) gspca_dev;
540
541         switch (sd->sensor) {
542         case  SENSOR_OV6650:
543         case  SENSOR_OV7630: {
544                 __u8 i2cOV[] =
545                         {0xa0, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x10};
546
547                 /* change reg 0x06 */
548                 i2cOV[1] = sensor_data[sd->sensor].sensor_addr;
549                 i2cOV[3] = sd->brightness->val;
550                 i2c_w(gspca_dev, i2cOV);
551                 break;
552         }
553         case SENSOR_PAS106:
554         case SENSOR_PAS202: {
555                 __u8 i2cpbright[] =
556                         {0xb0, 0x40, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x16};
557                 __u8 i2cpdoit[] =
558                         {0xa0, 0x40, 0x11, 0x01, 0x00, 0x00, 0x00, 0x16};
559
560                 /* PAS106 uses reg 7 and 8 instead of b and c */
561                 if (sd->sensor == SENSOR_PAS106) {
562                         i2cpbright[2] = 7;
563                         i2cpdoit[2] = 0x13;
564                 }
565
566                 if (sd->brightness->val < 127) {
567                         /* change reg 0x0b, signreg */
568                         i2cpbright[3] = 0x01;
569                         /* set reg 0x0c, offset */
570                         i2cpbright[4] = 127 - sd->brightness->val;
571                 } else
572                         i2cpbright[4] = sd->brightness->val - 127;
573
574                 i2c_w(gspca_dev, i2cpbright);
575                 i2c_w(gspca_dev, i2cpdoit);
576                 break;
577         }
578         default:
579                 break;
580         }
581 }
582
583 static void setgain(struct gspca_dev *gspca_dev)
584 {
585         struct sd *sd = (struct sd *) gspca_dev;
586         u8 gain = gspca_dev->gain->val;
587
588         switch (sd->sensor) {
589         case SENSOR_HV7131D: {
590                 __u8 i2c[] =
591                         {0xc0, 0x11, 0x31, 0x00, 0x00, 0x00, 0x00, 0x17};
592
593                 i2c[3] = 0x3f - gain;
594                 i2c[4] = 0x3f - gain;
595                 i2c[5] = 0x3f - gain;
596
597                 i2c_w(gspca_dev, i2c);
598                 break;
599         }
600         case SENSOR_TAS5110C:
601         case SENSOR_TAS5130CXX: {
602                 __u8 i2c[] =
603                         {0x30, 0x11, 0x02, 0x20, 0x70, 0x00, 0x00, 0x10};
604
605                 i2c[4] = 255 - gain;
606                 i2c_w(gspca_dev, i2c);
607                 break;
608         }
609         case SENSOR_TAS5110D: {
610                 __u8 i2c[] = {
611                         0xb0, 0x61, 0x02, 0x00, 0x10, 0x00, 0x00, 0x17 };
612                 gain = 255 - gain;
613                 /* The bits in the register are the wrong way around!! */
614                 i2c[3] |= (gain & 0x80) >> 7;
615                 i2c[3] |= (gain & 0x40) >> 5;
616                 i2c[3] |= (gain & 0x20) >> 3;
617                 i2c[3] |= (gain & 0x10) >> 1;
618                 i2c[3] |= (gain & 0x08) << 1;
619                 i2c[3] |= (gain & 0x04) << 3;
620                 i2c[3] |= (gain & 0x02) << 5;
621                 i2c[3] |= (gain & 0x01) << 7;
622                 i2c_w(gspca_dev, i2c);
623                 break;
624         }
625         case SENSOR_OV6650:
626         case SENSOR_OV7630: {
627                 __u8 i2c[] = {0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10};
628
629                 /*
630                  * The ov7630's gain is weird, at 32 the gain drops to the
631                  * same level as at 16, so skip 32-47 (of the 0-63 scale).
632                  */
633                 if (sd->sensor == SENSOR_OV7630 && gain >= 32)
634                         gain += 16;
635
636                 i2c[1] = sensor_data[sd->sensor].sensor_addr;
637                 i2c[3] = gain;
638                 i2c_w(gspca_dev, i2c);
639                 break;
640         }
641         case SENSOR_PAS106:
642         case SENSOR_PAS202: {
643                 __u8 i2cpgain[] =
644                         {0xa0, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00, 0x15};
645                 __u8 i2cpcolorgain[] =
646                         {0xc0, 0x40, 0x07, 0x00, 0x00, 0x00, 0x00, 0x15};
647                 __u8 i2cpdoit[] =
648                         {0xa0, 0x40, 0x11, 0x01, 0x00, 0x00, 0x00, 0x16};
649
650                 /* PAS106 uses different regs (and has split green gains) */
651                 if (sd->sensor == SENSOR_PAS106) {
652                         i2cpgain[2] = 0x0e;
653                         i2cpcolorgain[0] = 0xd0;
654                         i2cpcolorgain[2] = 0x09;
655                         i2cpdoit[2] = 0x13;
656                 }
657
658                 i2cpgain[3] = gain;
659                 i2cpcolorgain[3] = gain >> 1;
660                 i2cpcolorgain[4] = gain >> 1;
661                 i2cpcolorgain[5] = gain >> 1;
662                 i2cpcolorgain[6] = gain >> 1;
663
664                 i2c_w(gspca_dev, i2cpgain);
665                 i2c_w(gspca_dev, i2cpcolorgain);
666                 i2c_w(gspca_dev, i2cpdoit);
667                 break;
668         }
669         default:
670                 if (sd->bridge == BRIDGE_103) {
671                         u8 buf[3] = { gain, gain, gain }; /* R, G, B */
672                         reg_w(gspca_dev, 0x05, buf, 3);
673                 } else {
674                         u8 buf[2];
675                         buf[0] = gain << 4 | gain; /* Red and blue */
676                         buf[1] = gain; /* Green */
677                         reg_w(gspca_dev, 0x10, buf, 2);
678                 }
679         }
680 }
681
682 static void setexposure(struct gspca_dev *gspca_dev)
683 {
684         struct sd *sd = (struct sd *) gspca_dev;
685
686         switch (sd->sensor) {
687         case SENSOR_HV7131D: {
688                 /* Note the datasheet wrongly says line mode exposure uses reg
689                    0x26 and 0x27, testing has shown 0x25 + 0x26 */
690                 __u8 i2c[] = {0xc0, 0x11, 0x25, 0x00, 0x00, 0x00, 0x00, 0x17};
691                 u16 reg = gspca_dev->exposure->val;
692
693                 i2c[3] = reg >> 8;
694                 i2c[4] = reg & 0xff;
695                 i2c_w(gspca_dev, i2c);
696                 break;
697         }
698         case SENSOR_TAS5110C:
699         case SENSOR_TAS5110D: {
700                 /* register 19's high nibble contains the sn9c10x clock divider
701                    The high nibble configures the no fps according to the
702                    formula: 60 / high_nibble. With a maximum of 30 fps */
703                 u8 reg = gspca_dev->exposure->val;
704
705                 reg = (reg << 4) | 0x0b;
706                 reg_w(gspca_dev, 0x19, &reg, 1);
707                 break;
708         }
709         case SENSOR_OV6650:
710         case SENSOR_OV7630: {
711                 /* The ov6650 / ov7630 have 2 registers which both influence
712                    exposure, register 11, whose low nibble sets the nr off fps
713                    according to: fps = 30 / (low_nibble + 1)
714
715                    The fps configures the maximum exposure setting, but it is
716                    possible to use less exposure then what the fps maximum
717                    allows by setting register 10. register 10 configures the
718                    actual exposure as quotient of the full exposure, with 0
719                    being no exposure at all (not very useful) and reg10_max
720                    being max exposure possible at that framerate.
721
722                    The code maps our 0 - 510 ms exposure ctrl to these 2
723                    registers, trying to keep fps as high as possible.
724                 */
725                 __u8 i2c[] = {0xb0, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10};
726                 int reg10, reg11, reg10_max;
727
728                 /* ov6645 datasheet says reg10_max is 9a, but that uses
729                    tline * 2 * reg10 as formula for calculating texpo, the
730                    ov6650 probably uses the same formula as the 7730 which uses
731                    tline * 4 * reg10, which explains why the reg10max we've
732                    found experimentally for the ov6650 is exactly half that of
733                    the ov6645. The ov7630 datasheet says the max is 0x41. */
734                 if (sd->sensor == SENSOR_OV6650) {
735                         reg10_max = 0x4d;
736                         i2c[4] = 0xc0; /* OV6650 needs non default vsync pol */
737                 } else
738                         reg10_max = 0x41;
739
740                 reg11 = (15 * gspca_dev->exposure->val + 999) / 1000;
741                 if (reg11 < 1)
742                         reg11 = 1;
743                 else if (reg11 > 16)
744                         reg11 = 16;
745
746                 /* In 640x480, if the reg11 has less than 4, the image is
747                    unstable (the bridge goes into a higher compression mode
748                    which we have not reverse engineered yet). */
749                 if (gspca_dev->pixfmt.width == 640 && reg11 < 4)
750                         reg11 = 4;
751
752                 /* frame exposure time in ms = 1000 * reg11 / 30    ->
753                 reg10 = (gspca_dev->exposure->val / 2) * reg10_max
754                                 / (1000 * reg11 / 30) */
755                 reg10 = (gspca_dev->exposure->val * 15 * reg10_max)
756                                 / (1000 * reg11);
757
758                 /* Don't allow this to get below 10 when using autogain, the
759                    steps become very large (relatively) when below 10 causing
760                    the image to oscilate from much too dark, to much too bright
761                    and back again. */
762                 if (gspca_dev->autogain->val && reg10 < 10)
763                         reg10 = 10;
764                 else if (reg10 > reg10_max)
765                         reg10 = reg10_max;
766
767                 /* Write reg 10 and reg11 low nibble */
768                 i2c[1] = sensor_data[sd->sensor].sensor_addr;
769                 i2c[3] = reg10;
770                 i2c[4] |= reg11 - 1;
771
772                 /* If register 11 didn't change, don't change it */
773                 if (sd->reg11 == reg11)
774                         i2c[0] = 0xa0;
775
776                 i2c_w(gspca_dev, i2c);
777                 if (gspca_dev->usb_err == 0)
778                         sd->reg11 = reg11;
779                 break;
780         }
781         case SENSOR_PAS202: {
782                 __u8 i2cpframerate[] =
783                         {0xb0, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x16};
784                 __u8 i2cpexpo[] =
785                         {0xa0, 0x40, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x16};
786                 const __u8 i2cpdoit[] =
787                         {0xa0, 0x40, 0x11, 0x01, 0x00, 0x00, 0x00, 0x16};
788                 int framerate_ctrl;
789
790                 /* The exposure knee for the autogain algorithm is 200
791                    (100 ms / 10 fps on other sensors), for values below this
792                    use the control for setting the partial frame expose time,
793                    above that use variable framerate. This way we run at max
794                    framerate (640x480@7.5 fps, 320x240@10fps) until the knee
795                    is reached. Using the variable framerate control above 200
796                    is better then playing around with both clockdiv + partial
797                    frame exposure times (like we are doing with the ov chips),
798                    as that sometimes leads to jumps in the exposure control,
799                    which are bad for auto exposure. */
800                 if (gspca_dev->exposure->val < 200) {
801                         i2cpexpo[3] = 255 - (gspca_dev->exposure->val * 255)
802                                                 / 200;
803                         framerate_ctrl = 500;
804                 } else {
805                         /* The PAS202's exposure control goes from 0 - 4095,
806                            but anything below 500 causes vsync issues, so scale
807                            our 200-1023 to 500-4095 */
808                         framerate_ctrl = (gspca_dev->exposure->val - 200)
809                                                         * 1000 / 229 +  500;
810                 }
811
812                 i2cpframerate[3] = framerate_ctrl >> 6;
813                 i2cpframerate[4] = framerate_ctrl & 0x3f;
814                 i2c_w(gspca_dev, i2cpframerate);
815                 i2c_w(gspca_dev, i2cpexpo);
816                 i2c_w(gspca_dev, i2cpdoit);
817                 break;
818         }
819         case SENSOR_PAS106: {
820                 __u8 i2cpframerate[] =
821                         {0xb1, 0x40, 0x03, 0x00, 0x00, 0x00, 0x00, 0x14};
822                 __u8 i2cpexpo[] =
823                         {0xa1, 0x40, 0x05, 0x00, 0x00, 0x00, 0x00, 0x14};
824                 const __u8 i2cpdoit[] =
825                         {0xa1, 0x40, 0x13, 0x01, 0x00, 0x00, 0x00, 0x14};
826                 int framerate_ctrl;
827
828                 /* For values below 150 use partial frame exposure, above
829                    that use framerate ctrl */
830                 if (gspca_dev->exposure->val < 150) {
831                         i2cpexpo[3] = 150 - gspca_dev->exposure->val;
832                         framerate_ctrl = 300;
833                 } else {
834                         /* The PAS106's exposure control goes from 0 - 4095,
835                            but anything below 300 causes vsync issues, so scale
836                            our 150-1023 to 300-4095 */
837                         framerate_ctrl = (gspca_dev->exposure->val - 150)
838                                                 * 1000 / 230 + 300;
839                 }
840
841                 i2cpframerate[3] = framerate_ctrl >> 4;
842                 i2cpframerate[4] = framerate_ctrl & 0x0f;
843                 i2c_w(gspca_dev, i2cpframerate);
844                 i2c_w(gspca_dev, i2cpexpo);
845                 i2c_w(gspca_dev, i2cpdoit);
846                 break;
847         }
848         default:
849                 break;
850         }
851 }
852
853 static void setfreq(struct gspca_dev *gspca_dev)
854 {
855         struct sd *sd = (struct sd *) gspca_dev;
856
857         if (sd->sensor == SENSOR_OV6650 || sd->sensor == SENSOR_OV7630) {
858                 /* Framerate adjust register for artificial light 50 hz flicker
859                    compensation, for the ov6650 this is identical to ov6630
860                    0x2b register, see ov6630 datasheet.
861                    0x4f / 0x8a -> (30 fps -> 25 fps), 0x00 -> no adjustment */
862                 __u8 i2c[] = {0xa0, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x10};
863                 switch (sd->plfreq->val) {
864                 default:
865 /*              case 0:                  * no filter*/
866 /*              case 2:                  * 60 hz */
867                         i2c[3] = 0;
868                         break;
869                 case 1:                 /* 50 hz */
870                         i2c[3] = (sd->sensor == SENSOR_OV6650)
871                                         ? 0x4f : 0x8a;
872                         break;
873                 }
874                 i2c[1] = sensor_data[sd->sensor].sensor_addr;
875                 i2c_w(gspca_dev, i2c);
876         }
877 }
878
879 static void do_autogain(struct gspca_dev *gspca_dev)
880 {
881         struct sd *sd = (struct sd *) gspca_dev;
882         int deadzone, desired_avg_lum, avg_lum;
883
884         avg_lum = atomic_read(&sd->avg_lum);
885         if (avg_lum == -1)
886                 return;
887
888         if (sd->autogain_ignore_frames > 0) {
889                 sd->autogain_ignore_frames--;
890                 return;
891         }
892
893         /* SIF / VGA sensors have a different autoexposure area and thus
894            different avg_lum values for the same picture brightness */
895         if (sensor_data[sd->sensor].flags & F_SIF) {
896                 deadzone = 500;
897                 /* SIF sensors tend to overexpose, so keep this small */
898                 desired_avg_lum = 5000;
899         } else {
900                 deadzone = 1500;
901                 desired_avg_lum = 13000;
902         }
903
904         if (sd->brightness)
905                 desired_avg_lum = sd->brightness->val * desired_avg_lum / 127;
906
907         if (gspca_dev->exposure->maximum < 500) {
908                 if (gspca_coarse_grained_expo_autogain(gspca_dev, avg_lum,
909                                 desired_avg_lum, deadzone))
910                         sd->autogain_ignore_frames = AUTOGAIN_IGNORE_FRAMES;
911         } else {
912                 int gain_knee = (s32)gspca_dev->gain->maximum * 9 / 10;
913                 if (gspca_expo_autogain(gspca_dev, avg_lum, desired_avg_lum,
914                                 deadzone, gain_knee, sd->exposure_knee))
915                         sd->autogain_ignore_frames = AUTOGAIN_IGNORE_FRAMES;
916         }
917 }
918
919 /* this function is called at probe time */
920 static int sd_config(struct gspca_dev *gspca_dev,
921                         const struct usb_device_id *id)
922 {
923         struct sd *sd = (struct sd *) gspca_dev;
924         struct cam *cam;
925
926         reg_r(gspca_dev, 0x00);
927         if (gspca_dev->usb_buf[0] != 0x10)
928                 return -ENODEV;
929
930         /* copy the webcam info from the device id */
931         sd->sensor = id->driver_info >> 8;
932         sd->bridge = id->driver_info & 0xff;
933
934         cam = &gspca_dev->cam;
935         if (!(sensor_data[sd->sensor].flags & F_SIF)) {
936                 cam->cam_mode = vga_mode;
937                 cam->nmodes = ARRAY_SIZE(vga_mode);
938         } else {
939                 cam->cam_mode = sif_mode;
940                 cam->nmodes = ARRAY_SIZE(sif_mode);
941         }
942         cam->npkt = 36;                 /* 36 packets per ISOC message */
943
944         return 0;
945 }
946
947 /* this function is called at probe and resume time */
948 static int sd_init(struct gspca_dev *gspca_dev)
949 {
950         const __u8 stop = 0x09; /* Disable stream turn of LED */
951
952         reg_w(gspca_dev, 0x01, &stop, 1);
953
954         return gspca_dev->usb_err;
955 }
956
957 static int sd_s_ctrl(struct v4l2_ctrl *ctrl)
958 {
959         struct gspca_dev *gspca_dev =
960                 container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
961         struct sd *sd = (struct sd *)gspca_dev;
962
963         gspca_dev->usb_err = 0;
964
965         if (ctrl->id == V4L2_CID_AUTOGAIN && ctrl->is_new && ctrl->val) {
966                 /* when switching to autogain set defaults to make sure
967                    we are on a valid point of the autogain gain /
968                    exposure knee graph, and give this change time to
969                    take effect before doing autogain. */
970                 gspca_dev->gain->val = gspca_dev->gain->default_value;
971                 gspca_dev->exposure->val = gspca_dev->exposure->default_value;
972                 sd->autogain_ignore_frames = AUTOGAIN_IGNORE_FRAMES;
973         }
974
975         if (!gspca_dev->streaming)
976                 return 0;
977
978         switch (ctrl->id) {
979         case V4L2_CID_BRIGHTNESS:
980                 setbrightness(gspca_dev);
981                 break;
982         case V4L2_CID_AUTOGAIN:
983                 if (gspca_dev->exposure->is_new || (ctrl->is_new && ctrl->val))
984                         setexposure(gspca_dev);
985                 if (gspca_dev->gain->is_new || (ctrl->is_new && ctrl->val))
986                         setgain(gspca_dev);
987                 break;
988         case V4L2_CID_POWER_LINE_FREQUENCY:
989                 setfreq(gspca_dev);
990                 break;
991         default:
992                 return -EINVAL;
993         }
994         return gspca_dev->usb_err;
995 }
996
997 static const struct v4l2_ctrl_ops sd_ctrl_ops = {
998         .s_ctrl = sd_s_ctrl,
999 };
1000
1001 /* this function is called at probe time */
1002 static int sd_init_controls(struct gspca_dev *gspca_dev)
1003 {
1004         struct sd *sd = (struct sd *) gspca_dev;
1005         struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
1006
1007         gspca_dev->vdev.ctrl_handler = hdl;
1008         v4l2_ctrl_handler_init(hdl, 5);
1009
1010         if (sd->sensor == SENSOR_OV6650 || sd->sensor == SENSOR_OV7630 ||
1011             sd->sensor == SENSOR_PAS106 || sd->sensor == SENSOR_PAS202)
1012                 sd->brightness = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
1013                                         V4L2_CID_BRIGHTNESS, 0, 255, 1, 127);
1014
1015         /* Gain range is sensor dependent */
1016         switch (sd->sensor) {
1017         case SENSOR_OV6650:
1018         case SENSOR_PAS106:
1019         case SENSOR_PAS202:
1020                 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
1021                                         V4L2_CID_GAIN, 0, 31, 1, 15);
1022                 break;
1023         case SENSOR_OV7630:
1024                 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
1025                                         V4L2_CID_GAIN, 0, 47, 1, 31);
1026                 break;
1027         case SENSOR_HV7131D:
1028                 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
1029                                         V4L2_CID_GAIN, 0, 63, 1, 31);
1030                 break;
1031         case SENSOR_TAS5110C:
1032         case SENSOR_TAS5110D:
1033         case SENSOR_TAS5130CXX:
1034                 gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
1035                                         V4L2_CID_GAIN, 0, 255, 1, 127);
1036                 break;
1037         default:
1038                 if (sd->bridge == BRIDGE_103) {
1039                         gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
1040                                                 V4L2_CID_GAIN, 0, 127, 1, 63);
1041                 } else {
1042                         gspca_dev->gain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
1043                                                 V4L2_CID_GAIN, 0, 15, 1, 7);
1044                 }
1045         }
1046
1047         /* Exposure range is sensor dependent, and not all have exposure */
1048         switch (sd->sensor) {
1049         case SENSOR_HV7131D:
1050                 gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
1051                                         V4L2_CID_EXPOSURE, 0, 8191, 1, 482);
1052                 sd->exposure_knee = 964;
1053                 break;
1054         case SENSOR_OV6650:
1055         case SENSOR_OV7630:
1056         case SENSOR_PAS106:
1057         case SENSOR_PAS202:
1058                 gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
1059                                         V4L2_CID_EXPOSURE, 0, 1023, 1, 66);
1060                 sd->exposure_knee = 200;
1061                 break;
1062         case SENSOR_TAS5110C:
1063         case SENSOR_TAS5110D:
1064                 gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
1065                                         V4L2_CID_EXPOSURE, 2, 15, 1, 2);
1066                 break;
1067         }
1068
1069         if (gspca_dev->exposure) {
1070                 gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
1071                                                 V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
1072         }
1073
1074         if (sd->sensor == SENSOR_OV6650 || sd->sensor == SENSOR_OV7630)
1075                 sd->plfreq = v4l2_ctrl_new_std_menu(hdl, &sd_ctrl_ops,
1076                         V4L2_CID_POWER_LINE_FREQUENCY,
1077                         V4L2_CID_POWER_LINE_FREQUENCY_60HZ, 0,
1078                         V4L2_CID_POWER_LINE_FREQUENCY_DISABLED);
1079
1080         if (hdl->error) {
1081                 pr_err("Could not initialize controls\n");
1082                 return hdl->error;
1083         }
1084
1085         if (gspca_dev->autogain)
1086                 v4l2_ctrl_auto_cluster(3, &gspca_dev->autogain, 0, false);
1087
1088         return 0;
1089 }
1090
1091 /* -- start the camera -- */
1092 static int sd_start(struct gspca_dev *gspca_dev)
1093 {
1094         struct sd *sd = (struct sd *) gspca_dev;
1095         struct cam *cam = &gspca_dev->cam;
1096         int i, mode;
1097         __u8 regs[0x31];
1098
1099         mode = cam->cam_mode[gspca_dev->curr_mode].priv & 0x07;
1100         /* Copy registers 0x01 - 0x19 from the template */
1101         memcpy(&regs[0x01], sensor_data[sd->sensor].bridge_init, 0x19);
1102         /* Set the mode */
1103         regs[0x18] |= mode << 4;
1104
1105         /* Set bridge gain to 1.0 */
1106         if (sd->bridge == BRIDGE_103) {
1107                 regs[0x05] = 0x20; /* Red */
1108                 regs[0x06] = 0x20; /* Green */
1109                 regs[0x07] = 0x20; /* Blue */
1110         } else {
1111                 regs[0x10] = 0x00; /* Red and blue */
1112                 regs[0x11] = 0x00; /* Green */
1113         }
1114
1115         /* Setup pixel numbers and auto exposure window */
1116         if (sensor_data[sd->sensor].flags & F_SIF) {
1117                 regs[0x1a] = 0x14; /* HO_SIZE 640, makes no sense */
1118                 regs[0x1b] = 0x0a; /* VO_SIZE 320, makes no sense */
1119                 regs[0x1c] = 0x02; /* AE H-start 64 */
1120                 regs[0x1d] = 0x02; /* AE V-start 64 */
1121                 regs[0x1e] = 0x09; /* AE H-end 288 */
1122                 regs[0x1f] = 0x07; /* AE V-end 224 */
1123         } else {
1124                 regs[0x1a] = 0x1d; /* HO_SIZE 960, makes no sense */
1125                 regs[0x1b] = 0x10; /* VO_SIZE 512, makes no sense */
1126                 regs[0x1c] = 0x05; /* AE H-start 160 */
1127                 regs[0x1d] = 0x03; /* AE V-start 96 */
1128                 regs[0x1e] = 0x0f; /* AE H-end 480 */
1129                 regs[0x1f] = 0x0c; /* AE V-end 384 */
1130         }
1131
1132         /* Setup the gamma table (only used with the sn9c103 bridge) */
1133         for (i = 0; i < 16; i++)
1134                 regs[0x20 + i] = i * 16;
1135         regs[0x20 + i] = 255;
1136
1137         /* Special cases where some regs depend on mode or bridge */
1138         switch (sd->sensor) {
1139         case SENSOR_TAS5130CXX:
1140                 /* FIXME / TESTME
1141                    probably not mode specific at all most likely the upper
1142                    nibble of 0x19 is exposure (clock divider) just as with
1143                    the tas5110, we need someone to test this. */
1144                 regs[0x19] = mode ? 0x23 : 0x43;
1145                 break;
1146         case SENSOR_OV7630:
1147                 /* FIXME / TESTME for some reason with the 101/102 bridge the
1148                    clock is set to 12 Mhz (reg1 == 0x04), rather then 24.
1149                    Also the hstart needs to go from 1 to 2 when using a 103,
1150                    which is likely related. This does not seem right. */
1151                 if (sd->bridge == BRIDGE_103) {
1152                         regs[0x01] = 0x44; /* Select 24 Mhz clock */
1153                         regs[0x12] = 0x02; /* Set hstart to 2 */
1154                 }
1155                 break;
1156         case SENSOR_PAS202:
1157                 /* For some unknown reason we need to increase hstart by 1 on
1158                    the sn9c103, otherwise we get wrong colors (bayer shift). */
1159                 if (sd->bridge == BRIDGE_103)
1160                         regs[0x12] += 1;
1161                 break;
1162         }
1163         /* Disable compression when the raw bayer format has been selected */
1164         if (cam->cam_mode[gspca_dev->curr_mode].priv & MODE_RAW)
1165                 regs[0x18] &= ~0x80;
1166
1167         /* Vga mode emulation on SIF sensor? */
1168         if (cam->cam_mode[gspca_dev->curr_mode].priv & MODE_REDUCED_SIF) {
1169                 regs[0x12] += 16;       /* hstart adjust */
1170                 regs[0x13] += 24;       /* vstart adjust */
1171                 regs[0x15]  = 320 / 16; /* hsize */
1172                 regs[0x16]  = 240 / 16; /* vsize */
1173         }
1174
1175         /* reg 0x01 bit 2 video transfert on */
1176         reg_w(gspca_dev, 0x01, &regs[0x01], 1);
1177         /* reg 0x17 SensorClk enable inv Clk 0x60 */
1178         reg_w(gspca_dev, 0x17, &regs[0x17], 1);
1179         /* Set the registers from the template */
1180         reg_w(gspca_dev, 0x01, &regs[0x01],
1181               (sd->bridge == BRIDGE_103) ? 0x30 : 0x1f);
1182
1183         /* Init the sensor */
1184         i2c_w_vector(gspca_dev, sensor_data[sd->sensor].sensor_init,
1185                         sensor_data[sd->sensor].sensor_init_size);
1186
1187         /* Mode / bridge specific sensor setup */
1188         switch (sd->sensor) {
1189         case SENSOR_PAS202: {
1190                 const __u8 i2cpclockdiv[] =
1191                         {0xa0, 0x40, 0x02, 0x03, 0x00, 0x00, 0x00, 0x10};
1192                 /* clockdiv from 4 to 3 (7.5 -> 10 fps) when in low res mode */
1193                 if (mode)
1194                         i2c_w(gspca_dev, i2cpclockdiv);
1195                 break;
1196             }
1197         case SENSOR_OV7630:
1198                 /* FIXME / TESTME We should be able to handle this identical
1199                    for the 101/102 and the 103 case */
1200                 if (sd->bridge == BRIDGE_103) {
1201                         const __u8 i2c[] = { 0xa0, 0x21, 0x13,
1202                                              0x80, 0x00, 0x00, 0x00, 0x10 };
1203                         i2c_w(gspca_dev, i2c);
1204                 }
1205                 break;
1206         }
1207         /* H_size V_size 0x28, 0x1e -> 640x480. 0x16, 0x12 -> 352x288 */
1208         reg_w(gspca_dev, 0x15, &regs[0x15], 2);
1209         /* compression register */
1210         reg_w(gspca_dev, 0x18, &regs[0x18], 1);
1211         /* H_start */
1212         reg_w(gspca_dev, 0x12, &regs[0x12], 1);
1213         /* V_START */
1214         reg_w(gspca_dev, 0x13, &regs[0x13], 1);
1215         /* reset 0x17 SensorClk enable inv Clk 0x60 */
1216                                 /*fixme: ov7630 [17]=68 8f (+20 if 102)*/
1217         reg_w(gspca_dev, 0x17, &regs[0x17], 1);
1218         /*MCKSIZE ->3 */        /*fixme: not ov7630*/
1219         reg_w(gspca_dev, 0x19, &regs[0x19], 1);
1220         /* AE_STRX AE_STRY AE_ENDX AE_ENDY */
1221         reg_w(gspca_dev, 0x1c, &regs[0x1c], 4);
1222         /* Enable video transfert */
1223         reg_w(gspca_dev, 0x01, &regs[0x01], 1);
1224         /* Compression */
1225         reg_w(gspca_dev, 0x18, &regs[0x18], 2);
1226         msleep(20);
1227
1228         sd->reg11 = -1;
1229
1230         setgain(gspca_dev);
1231         setbrightness(gspca_dev);
1232         setexposure(gspca_dev);
1233         setfreq(gspca_dev);
1234
1235         sd->frames_to_drop = 0;
1236         sd->autogain_ignore_frames = 0;
1237         gspca_dev->exp_too_high_cnt = 0;
1238         gspca_dev->exp_too_low_cnt = 0;
1239         atomic_set(&sd->avg_lum, -1);
1240         return gspca_dev->usb_err;
1241 }
1242
1243 static void sd_stopN(struct gspca_dev *gspca_dev)
1244 {
1245         sd_init(gspca_dev);
1246 }
1247
1248 static u8* find_sof(struct gspca_dev *gspca_dev, u8 *data, int len)
1249 {
1250         struct sd *sd = (struct sd *) gspca_dev;
1251         int i, header_size = (sd->bridge == BRIDGE_103) ? 18 : 12;
1252
1253         /* frames start with:
1254          *      ff ff 00 c4 c4 96       synchro
1255          *      00              (unknown)
1256          *      xx              (frame sequence / size / compression)
1257          *      (xx)            (idem - extra byte for sn9c103)
1258          *      ll mm           brightness sum inside auto exposure
1259          *      ll mm           brightness sum outside auto exposure
1260          *      (xx xx xx xx xx)        audio values for snc103
1261          */
1262         for (i = 0; i < len; i++) {
1263                 switch (sd->header_read) {
1264                 case 0:
1265                         if (data[i] == 0xff)
1266                                 sd->header_read++;
1267                         break;
1268                 case 1:
1269                         if (data[i] == 0xff)
1270                                 sd->header_read++;
1271                         else
1272                                 sd->header_read = 0;
1273                         break;
1274                 case 2:
1275                         if (data[i] == 0x00)
1276                                 sd->header_read++;
1277                         else if (data[i] != 0xff)
1278                                 sd->header_read = 0;
1279                         break;
1280                 case 3:
1281                         if (data[i] == 0xc4)
1282                                 sd->header_read++;
1283                         else if (data[i] == 0xff)
1284                                 sd->header_read = 1;
1285                         else
1286                                 sd->header_read = 0;
1287                         break;
1288                 case 4:
1289                         if (data[i] == 0xc4)
1290                                 sd->header_read++;
1291                         else if (data[i] == 0xff)
1292                                 sd->header_read = 1;
1293                         else
1294                                 sd->header_read = 0;
1295                         break;
1296                 case 5:
1297                         if (data[i] == 0x96)
1298                                 sd->header_read++;
1299                         else if (data[i] == 0xff)
1300                                 sd->header_read = 1;
1301                         else
1302                                 sd->header_read = 0;
1303                         break;
1304                 default:
1305                         sd->header[sd->header_read - 6] = data[i];
1306                         sd->header_read++;
1307                         if (sd->header_read == header_size) {
1308                                 sd->header_read = 0;
1309                                 return data + i + 1;
1310                         }
1311                 }
1312         }
1313         return NULL;
1314 }
1315
1316 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
1317                         u8 *data,                       /* isoc packet */
1318                         int len)                        /* iso packet length */
1319 {
1320         int fr_h_sz = 0, lum_offset = 0, len_after_sof = 0;
1321         struct sd *sd = (struct sd *) gspca_dev;
1322         struct cam *cam = &gspca_dev->cam;
1323         u8 *sof;
1324
1325         sof = find_sof(gspca_dev, data, len);
1326         if (sof) {
1327                 if (sd->bridge == BRIDGE_103) {
1328                         fr_h_sz = 18;
1329                         lum_offset = 3;
1330                 } else {
1331                         fr_h_sz = 12;
1332                         lum_offset = 2;
1333                 }
1334
1335                 len_after_sof = len - (sof - data);
1336                 len = (sof - data) - fr_h_sz;
1337                 if (len < 0)
1338                         len = 0;
1339         }
1340
1341         if (cam->cam_mode[gspca_dev->curr_mode].priv & MODE_RAW) {
1342                 /* In raw mode we sometimes get some garbage after the frame
1343                    ignore this */
1344                 int used;
1345                 int size = cam->cam_mode[gspca_dev->curr_mode].sizeimage;
1346
1347                 used = gspca_dev->image_len;
1348                 if (used + len > size)
1349                         len = size - used;
1350         }
1351
1352         gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
1353
1354         if (sof) {
1355                 int  lum = sd->header[lum_offset] +
1356                           (sd->header[lum_offset + 1] << 8);
1357
1358                 /* When exposure changes midway a frame we
1359                    get a lum of 0 in this case drop 2 frames
1360                    as the frames directly after an exposure
1361                    change have an unstable image. Sometimes lum
1362                    *really* is 0 (cam used in low light with
1363                    low exposure setting), so do not drop frames
1364                    if the previous lum was 0 too. */
1365                 if (lum == 0 && sd->prev_avg_lum != 0) {
1366                         lum = -1;
1367                         sd->frames_to_drop = 2;
1368                         sd->prev_avg_lum = 0;
1369                 } else
1370                         sd->prev_avg_lum = lum;
1371                 atomic_set(&sd->avg_lum, lum);
1372
1373                 if (sd->frames_to_drop)
1374                         sd->frames_to_drop--;
1375                 else
1376                         gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
1377
1378                 gspca_frame_add(gspca_dev, FIRST_PACKET, sof, len_after_sof);
1379         }
1380 }
1381
1382 #if IS_ENABLED(CONFIG_INPUT)
1383 static int sd_int_pkt_scan(struct gspca_dev *gspca_dev,
1384                         u8 *data,               /* interrupt packet data */
1385                         int len)                /* interrupt packet length */
1386 {
1387         int ret = -EINVAL;
1388
1389         if (len == 1 && data[0] == 1) {
1390                 input_report_key(gspca_dev->input_dev, KEY_CAMERA, 1);
1391                 input_sync(gspca_dev->input_dev);
1392                 input_report_key(gspca_dev->input_dev, KEY_CAMERA, 0);
1393                 input_sync(gspca_dev->input_dev);
1394                 ret = 0;
1395         }
1396
1397         return ret;
1398 }
1399 #endif
1400
1401 /* sub-driver description */
1402 static const struct sd_desc sd_desc = {
1403         .name = MODULE_NAME,
1404         .config = sd_config,
1405         .init = sd_init,
1406         .init_controls = sd_init_controls,
1407         .start = sd_start,
1408         .stopN = sd_stopN,
1409         .pkt_scan = sd_pkt_scan,
1410         .dq_callback = do_autogain,
1411 #if IS_ENABLED(CONFIG_INPUT)
1412         .int_pkt_scan = sd_int_pkt_scan,
1413 #endif
1414 };
1415
1416 /* -- module initialisation -- */
1417 #define SB(sensor, bridge) \
1418         .driver_info = (SENSOR_ ## sensor << 8) | BRIDGE_ ## bridge
1419
1420
1421 static const struct usb_device_id device_table[] = {
1422         {USB_DEVICE(0x0c45, 0x6001), SB(TAS5110C, 102)}, /* TAS5110C1B */
1423         {USB_DEVICE(0x0c45, 0x6005), SB(TAS5110C, 101)}, /* TAS5110C1B */
1424         {USB_DEVICE(0x0c45, 0x6007), SB(TAS5110D, 101)}, /* TAS5110D */
1425         {USB_DEVICE(0x0c45, 0x6009), SB(PAS106, 101)},
1426         {USB_DEVICE(0x0c45, 0x600d), SB(PAS106, 101)},
1427         {USB_DEVICE(0x0c45, 0x6011), SB(OV6650, 101)},
1428         {USB_DEVICE(0x0c45, 0x6019), SB(OV7630, 101)},
1429         {USB_DEVICE(0x0c45, 0x6024), SB(TAS5130CXX, 102)},
1430         {USB_DEVICE(0x0c45, 0x6025), SB(TAS5130CXX, 102)},
1431         {USB_DEVICE(0x0c45, 0x6027), SB(OV7630, 101)}, /* Genius Eye 310 */
1432         {USB_DEVICE(0x0c45, 0x6028), SB(PAS202, 102)},
1433         {USB_DEVICE(0x0c45, 0x6029), SB(PAS106, 102)},
1434         {USB_DEVICE(0x0c45, 0x602a), SB(HV7131D, 102)},
1435         /* {USB_DEVICE(0x0c45, 0x602b), SB(MI0343, 102)}, */
1436         {USB_DEVICE(0x0c45, 0x602c), SB(OV7630, 102)},
1437         {USB_DEVICE(0x0c45, 0x602d), SB(HV7131R, 102)},
1438         {USB_DEVICE(0x0c45, 0x602e), SB(OV7630, 102)},
1439         /* {USB_DEVICE(0x0c45, 0x6030), SB(MI03XX, 102)}, */ /* MI0343 MI0360 MI0330 */
1440         /* {USB_DEVICE(0x0c45, 0x6082), SB(MI03XX, 103)}, */ /* MI0343 MI0360 */
1441         {USB_DEVICE(0x0c45, 0x6083), SB(HV7131D, 103)},
1442         {USB_DEVICE(0x0c45, 0x608c), SB(HV7131R, 103)},
1443         /* {USB_DEVICE(0x0c45, 0x608e), SB(CISVF10, 103)}, */
1444         {USB_DEVICE(0x0c45, 0x608f), SB(OV7630, 103)},
1445         {USB_DEVICE(0x0c45, 0x60a8), SB(PAS106, 103)},
1446         {USB_DEVICE(0x0c45, 0x60aa), SB(TAS5130CXX, 103)},
1447         {USB_DEVICE(0x0c45, 0x60af), SB(PAS202, 103)},
1448         {USB_DEVICE(0x0c45, 0x60b0), SB(OV7630, 103)},
1449         {}
1450 };
1451 MODULE_DEVICE_TABLE(usb, device_table);
1452
1453 /* -- device connect -- */
1454 static int sd_probe(struct usb_interface *intf,
1455                         const struct usb_device_id *id)
1456 {
1457         return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd),
1458                                 THIS_MODULE);
1459 }
1460
1461 static struct usb_driver sd_driver = {
1462         .name = MODULE_NAME,
1463         .id_table = device_table,
1464         .probe = sd_probe,
1465         .disconnect = gspca_disconnect,
1466 #ifdef CONFIG_PM
1467         .suspend = gspca_suspend,
1468         .resume = gspca_resume,
1469         .reset_resume = gspca_resume,
1470 #endif
1471 };
1472
1473 module_usb_driver(sd_driver);