Merge branch 'for-linus' of git://neil.brown.name/md
[pandora-kernel.git] / drivers / media / video / gspca / vc032x.c
1 /*
2  *              Z-star vc0321 library
3  *              Copyright (C) 2006 Koninski Artur takeshi87@o2.pl
4  *              Copyright (C) 2006 Michel Xhaard
5  *
6  * V4L2 by Jean-Francois Moine <http://moinejf.free.fr>
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  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21  */
22
23 #define MODULE_NAME "vc032x"
24
25 #include "gspca.h"
26
27 MODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>");
28 MODULE_DESCRIPTION("GSPCA/VC032X USB Camera Driver");
29 MODULE_LICENSE("GPL");
30
31 /* specific webcam descriptor */
32 struct sd {
33         struct gspca_dev gspca_dev;     /* !! must be the first item */
34
35         __u8 hflip;
36         __u8 vflip;
37         __u8 lightfreq;
38         __u8 sharpness;
39
40         u8 image_offset;
41
42         char bridge;
43 #define BRIDGE_VC0321 0
44 #define BRIDGE_VC0323 1
45         char sensor;
46 #define SENSOR_HV7131R 0
47 #define SENSOR_MI0360 1
48 #define SENSOR_MI1310_SOC 2
49 #define SENSOR_MI1320 3
50 #define SENSOR_MI1320_SOC 4
51 #define SENSOR_OV7660 5
52 #define SENSOR_OV7670 6
53 #define SENSOR_PO1200 7
54 #define SENSOR_PO3130NC 8
55 };
56
57 /* V4L2 controls supported by the driver */
58 static int sd_sethflip(struct gspca_dev *gspca_dev, __s32 val);
59 static int sd_gethflip(struct gspca_dev *gspca_dev, __s32 *val);
60 static int sd_setvflip(struct gspca_dev *gspca_dev, __s32 val);
61 static int sd_getvflip(struct gspca_dev *gspca_dev, __s32 *val);
62 static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 val);
63 static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val);
64 static int sd_setsharpness(struct gspca_dev *gspca_dev, __s32 val);
65 static int sd_getsharpness(struct gspca_dev *gspca_dev, __s32 *val);
66
67 static struct ctrl sd_ctrls[] = {
68 /* next 2 controls work with ov7660 and ov7670 only */
69 #define HFLIP_IDX 0
70         {
71             {
72                 .id      = V4L2_CID_HFLIP,
73                 .type    = V4L2_CTRL_TYPE_BOOLEAN,
74                 .name    = "Mirror",
75                 .minimum = 0,
76                 .maximum = 1,
77                 .step    = 1,
78 #define HFLIP_DEF 0
79                 .default_value = HFLIP_DEF,
80             },
81             .set = sd_sethflip,
82             .get = sd_gethflip,
83         },
84 #define VFLIP_IDX 1
85         {
86             {
87                 .id      = V4L2_CID_VFLIP,
88                 .type    = V4L2_CTRL_TYPE_BOOLEAN,
89                 .name    = "Vflip",
90                 .minimum = 0,
91                 .maximum = 1,
92                 .step    = 1,
93 #define VFLIP_DEF 0
94                 .default_value = VFLIP_DEF,
95             },
96             .set = sd_setvflip,
97             .get = sd_getvflip,
98         },
99 #define LIGHTFREQ_IDX 2
100         {
101             {
102                 .id      = V4L2_CID_POWER_LINE_FREQUENCY,
103                 .type    = V4L2_CTRL_TYPE_MENU,
104                 .name    = "Light frequency filter",
105                 .minimum = 0,
106                 .maximum = 2,   /* 0: No, 1: 50Hz, 2:60Hz */
107                 .step    = 1,
108 #define FREQ_DEF 1
109                 .default_value = FREQ_DEF,
110             },
111             .set = sd_setfreq,
112             .get = sd_getfreq,
113         },
114 /* po1200 only */
115 #define SHARPNESS_IDX 3
116         {
117          {
118           .id = V4L2_CID_SHARPNESS,
119           .type = V4L2_CTRL_TYPE_INTEGER,
120           .name = "Sharpness",
121           .minimum = 0,
122           .maximum = 2,
123           .step = 1,
124 #define SHARPNESS_DEF 1
125           .default_value = SHARPNESS_DEF,
126           },
127          .set = sd_setsharpness,
128          .get = sd_getsharpness,
129          },
130 };
131
132 static const struct v4l2_pix_format vc0321_mode[] = {
133         {320, 240, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE,
134                 .bytesperline = 320,
135                 .sizeimage = 320 * 240 * 2,
136                 .colorspace = V4L2_COLORSPACE_SRGB,
137                 .priv = 1},
138         {640, 480, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE,
139                 .bytesperline = 640,
140                 .sizeimage = 640 * 480 * 2,
141                 .colorspace = V4L2_COLORSPACE_SRGB,
142                 .priv = 0},
143 };
144 static const struct v4l2_pix_format vc0323_mode[] = {
145         {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
146                 .bytesperline = 320,
147                 .sizeimage = 320 * 240 * 3 / 8 + 590,
148                 .colorspace = V4L2_COLORSPACE_JPEG,
149                 .priv = 1},
150         {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
151                 .bytesperline = 640,
152                 .sizeimage = 640 * 480 * 3 / 8 + 590,
153                 .colorspace = V4L2_COLORSPACE_JPEG,
154                 .priv = 0},
155         {1280, 1024, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, /* mi13x0_soc only */
156                 .bytesperline = 1280,
157                 .sizeimage = 1280 * 1024 * 1 / 4 + 590,
158                 .colorspace = V4L2_COLORSPACE_JPEG,
159                 .priv = 2},
160 };
161 static const struct v4l2_pix_format bi_mode[] = {
162 /*fixme: jeg does not work
163         {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
164                 .bytesperline = 320,
165                 .sizeimage = 320 * 240 * 3 / 8 + 590,
166                 .colorspace = V4L2_COLORSPACE_JPEG,
167                 .priv = 5},
168 */
169         {320, 240, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE,
170                 .bytesperline = 320,
171                 .sizeimage = 320 * 240 * 2,
172                 .colorspace = V4L2_COLORSPACE_SRGB,
173                 .priv = 4},
174 /*
175         {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
176                 .bytesperline = 640,
177                 .sizeimage = 640 * 480 * 3 / 8 + 590,
178                 .colorspace = V4L2_COLORSPACE_JPEG,
179                 .priv = 3},
180 */
181         {640, 480, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE,
182                 .bytesperline = 640,
183                 .sizeimage = 640 * 480 * 2,
184                 .colorspace = V4L2_COLORSPACE_SRGB,
185                 .priv = 2},
186 /*
187         {1280, 1024, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
188                 .bytesperline = 1280,
189                 .sizeimage = 1280 * 1024 * 1 / 4 + 590,
190                 .colorspace = V4L2_COLORSPACE_JPEG,
191                 .priv = 1},
192 */
193         {1280, 1024, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE,
194                 .bytesperline = 1280,
195                 .sizeimage = 1280 * 1024 * 2,
196                 .colorspace = V4L2_COLORSPACE_SRGB,
197                 .priv = 0},
198 };
199 static const struct v4l2_pix_format svga_mode[] = {
200         {800, 600, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
201                 .bytesperline = 800,
202                 .sizeimage = 800 * 600 * 1 / 4 + 590,
203                 .colorspace = V4L2_COLORSPACE_JPEG,
204                 .priv = 0},
205 };
206
207 /* OV7660/7670 registers */
208 #define OV7660_REG_MVFP 0x1e
209 #define OV7660_MVFP_MIRROR      0x20
210 #define OV7660_MVFP_VFLIP       0x10
211
212 static const __u8 mi0360_matrix[9] = {
213         0x50, 0xf8, 0xf8, 0xf5, 0x50, 0xfb, 0xff, 0xf1, 0x50
214 };
215
216 static const __u8 mi0360_initVGA_JPG[][4] = {
217         {0xb0, 0x03, 0x19, 0xcc},
218         {0xb0, 0x04, 0x02, 0xcc},
219         {0xb3, 0x00, 0x24, 0xcc},
220         {0xb3, 0x00, 0x25, 0xcc},
221         {0xb3, 0x08, 0x01, 0xcc},
222         {0xb3, 0x09, 0x0c, 0xcc},
223         {0xb3, 0x05, 0x01, 0xcc},
224         {0xb3, 0x06, 0x03, 0xcc},
225         {0xb3, 0x03, 0x0a, 0xcc},
226         {0xb3, 0x20, 0x00, 0xcc},
227         {0xb3, 0x21, 0x00, 0xcc},
228         {0xb3, 0x22, 0x01, 0xcc},
229         {0xb3, 0x23, 0xe0, 0xcc},
230         {0xb3, 0x04, 0x05, 0xcc},
231         {0xb3, 0x14, 0x00, 0xcc},
232         {0xb3, 0x15, 0x00, 0xcc},
233         {0xb3, 0x16, 0x02, 0xcc},
234         {0xb3, 0x17, 0x7f, 0xcc},
235         {0xb3, 0x35, 0xdd, 0xcc},
236         {0xb3, 0x34, 0x02, 0xcc},
237         {0xb3, 0x00, 0x25, 0xcc},
238         {0xbc, 0x00, 0x71, 0xcc},
239         {0xb8, 0x00, 0x13, 0xcc},
240         {0xb8, 0x27, 0x20, 0xcc},
241         {0xb8, 0x2c, 0x50, 0xcc},
242         {0xb8, 0x2d, 0xf8, 0xcc},
243         {0xb8, 0x2e, 0xf8, 0xcc},
244         {0xb8, 0x2f, 0xf8, 0xcc},
245         {0xb8, 0x30, 0x50, 0xcc},
246         {0xb8, 0x31, 0xf8, 0xcc},
247         {0xb8, 0x32, 0xf8, 0xcc},
248         {0xb8, 0x33, 0xf8, 0xcc},
249         {0xb8, 0x34, 0x50, 0xcc},
250         {0xb8, 0x35, 0x00, 0xcc},
251         {0xb8, 0x36, 0x00, 0xcc},
252         {0xb8, 0x37, 0x00, 0xcc},
253         {0xb8, 0x01, 0x79, 0xcc},
254         {0xb8, 0x08, 0xe0, 0xcc},
255         {0xb3, 0x01, 0x41, 0xcc},
256         {0xb8, 0x01, 0x79, 0xcc},
257         {0xb8, 0x14, 0x18, 0xcc},
258         {0xb8, 0xb2, 0x0a, 0xcc},
259         {0xb8, 0xb4, 0x0a, 0xcc},
260         {0xb8, 0xb5, 0x0a, 0xcc},
261         {0xb8, 0xfe, 0x00, 0xcc},
262         {0xb8, 0xff, 0x28, 0xcc},
263         {0xb9, 0x00, 0x28, 0xcc},
264         {0xb9, 0x01, 0x28, 0xcc},
265         {0xb9, 0x02, 0x28, 0xcc},
266         {0xb9, 0x03, 0x00, 0xcc},
267         {0xb9, 0x04, 0x00, 0xcc},
268         {0xb9, 0x05, 0x3c, 0xcc},
269         {0xb9, 0x06, 0x3c, 0xcc},
270         {0xb9, 0x07, 0x3c, 0xcc},
271         {0xb9, 0x08, 0x3c, 0xcc},
272         {0xb8, 0x8e, 0x00, 0xcc},
273         {0xb8, 0x8f, 0xff, 0xcc},
274         {0xb8, 0x81, 0x09, 0xcc},
275         {0x31, 0x00, 0x00, 0xbb},
276         {0x09, 0x01, 0xc7, 0xbb},
277         {0x34, 0x01, 0x00, 0xbb},
278         {0x2b, 0x00, 0x28, 0xbb},
279         {0x2c, 0x00, 0x30, 0xbb},
280         {0x2d, 0x00, 0x30, 0xbb},
281         {0x2e, 0x00, 0x28, 0xbb},
282         {0x62, 0x04, 0x11, 0xbb},
283         {0x03, 0x01, 0xe0, 0xbb},
284         {0x2c, 0x00, 0x2c, 0xbb},
285         {0x20, 0xd0, 0x00, 0xbb},
286         {0x01, 0x00, 0x08, 0xbb},
287         {0x06, 0x00, 0x10, 0xbb},
288         {0x05, 0x00, 0x20, 0xbb},
289         {0x20, 0x00, 0x00, 0xbb},
290         {0xb6, 0x00, 0x00, 0xcc},
291         {0xb6, 0x03, 0x02, 0xcc},
292         {0xb6, 0x02, 0x80, 0xcc},
293         {0xb6, 0x05, 0x01, 0xcc},
294         {0xb6, 0x04, 0xe0, 0xcc},
295         {0xb6, 0x12, 0x78, 0xcc},
296         {0xb6, 0x18, 0x02, 0xcc},
297         {0xb6, 0x17, 0x58, 0xcc},
298         {0xb6, 0x16, 0x00, 0xcc},
299         {0xb6, 0x22, 0x12, 0xcc},
300         {0xb6, 0x23, 0x0b, 0xcc},
301         {0xb3, 0x02, 0x02, 0xcc},
302         {0xbf, 0xc0, 0x39, 0xcc},
303         {0xbf, 0xc1, 0x04, 0xcc},
304         {0xbf, 0xcc, 0x10, 0xcc},
305         {0xb9, 0x12, 0x00, 0xcc},
306         {0xb9, 0x13, 0x0a, 0xcc},
307         {0xb9, 0x14, 0x0a, 0xcc},
308         {0xb9, 0x15, 0x0a, 0xcc},
309         {0xb9, 0x16, 0x0a, 0xcc},
310         {0xb9, 0x18, 0x00, 0xcc},
311         {0xb9, 0x19, 0x0f, 0xcc},
312         {0xb9, 0x1a, 0x0f, 0xcc},
313         {0xb9, 0x1b, 0x0f, 0xcc},
314         {0xb9, 0x1c, 0x0f, 0xcc},
315         {0xb8, 0x8e, 0x00, 0xcc},
316         {0xb8, 0x8f, 0xff, 0xcc},
317         {0xb6, 0x12, 0xf8, 0xcc},
318         {0xb8, 0x0c, 0x20, 0xcc},
319         {0xb8, 0x0d, 0x70, 0xcc},
320         {0xb6, 0x13, 0x13, 0xcc},
321         {0x35, 0x00, 0x60, 0xbb},
322         {0xb3, 0x5c, 0x01, 0xcc},
323         {}
324 };
325 static const __u8 mi0360_initQVGA_JPG[][4] = {
326         {0xb0, 0x03, 0x19, 0xcc},
327         {0xb0, 0x04, 0x02, 0xcc},
328         {0xb3, 0x00, 0x24, 0xcc},
329         {0xb3, 0x00, 0x25, 0xcc},
330         {0xb3, 0x08, 0x01, 0xcc},
331         {0xb3, 0x09, 0x0c, 0xcc},
332         {0xb3, 0x05, 0x01, 0xcc},
333         {0xb3, 0x06, 0x03, 0xcc},
334         {0xb3, 0x03, 0x0a, 0xcc},
335         {0xb3, 0x20, 0x00, 0xcc},
336         {0xb3, 0x21, 0x00, 0xcc},
337         {0xb3, 0x22, 0x01, 0xcc},
338         {0xb3, 0x23, 0xe0, 0xcc},
339         {0xb3, 0x04, 0x05, 0xcc},
340         {0xb3, 0x14, 0x00, 0xcc},
341         {0xb3, 0x15, 0x00, 0xcc},
342         {0xb3, 0x16, 0x02, 0xcc},
343         {0xb3, 0x17, 0x7f, 0xcc},
344         {0xb3, 0x35, 0xdd, 0xcc},
345         {0xb3, 0x34, 0x02, 0xcc},
346         {0xb3, 0x00, 0x25, 0xcc},
347         {0xbc, 0x00, 0xd1, 0xcc},
348         {0xb8, 0x00, 0x13, 0xcc},
349         {0xb8, 0x27, 0x20, 0xcc},
350         {0xb8, 0x2c, 0x50, 0xcc},
351         {0xb8, 0x2d, 0xf8, 0xcc},
352         {0xb8, 0x2e, 0xf8, 0xcc},
353         {0xb8, 0x2f, 0xf8, 0xcc},
354         {0xb8, 0x30, 0x50, 0xcc},
355         {0xb8, 0x31, 0xf8, 0xcc},
356         {0xb8, 0x32, 0xf8, 0xcc},
357         {0xb8, 0x33, 0xf8, 0xcc},
358         {0xb8, 0x34, 0x50, 0xcc},
359         {0xb8, 0x35, 0x00, 0xcc},
360         {0xb8, 0x36, 0x00, 0xcc},
361         {0xb8, 0x37, 0x00, 0xcc},
362         {0xb8, 0x01, 0x79, 0xcc},
363         {0xb8, 0x08, 0xe0, 0xcc},
364         {0xb3, 0x01, 0x41, 0xcc},
365         {0xb8, 0x01, 0x79, 0xcc},
366         {0xb8, 0x14, 0x18, 0xcc},
367         {0xb8, 0xb2, 0x0a, 0xcc},
368         {0xb8, 0xb4, 0x0a, 0xcc},
369         {0xb8, 0xb5, 0x0a, 0xcc},
370         {0xb8, 0xfe, 0x00, 0xcc},
371         {0xb8, 0xff, 0x28, 0xcc},
372         {0xb9, 0x00, 0x28, 0xcc},
373         {0xb9, 0x01, 0x28, 0xcc},
374         {0xb9, 0x02, 0x28, 0xcc},
375         {0xb9, 0x03, 0x00, 0xcc},
376         {0xb9, 0x04, 0x00, 0xcc},
377         {0xb9, 0x05, 0x3c, 0xcc},
378         {0xb9, 0x06, 0x3c, 0xcc},
379         {0xb9, 0x07, 0x3c, 0xcc},
380         {0xb9, 0x08, 0x3c, 0xcc},
381         {0xb8, 0x8e, 0x00, 0xcc},
382         {0xb8, 0x8f, 0xff, 0xcc},
383         {0xb8, 0x81, 0x09, 0xcc},
384         {0x31, 0x00, 0x00, 0xbb},
385         {0x09, 0x01, 0xc7, 0xbb},
386         {0x34, 0x01, 0x00, 0xbb},
387         {0x2b, 0x00, 0x28, 0xbb},
388         {0x2c, 0x00, 0x30, 0xbb},
389         {0x2d, 0x00, 0x30, 0xbb},
390         {0x2e, 0x00, 0x28, 0xbb},
391         {0x62, 0x04, 0x11, 0xbb},
392         {0x03, 0x01, 0xe0, 0xbb},
393         {0x2c, 0x00, 0x2c, 0xbb},
394         {0x20, 0xd0, 0x00, 0xbb},
395         {0x01, 0x00, 0x08, 0xbb},
396         {0x06, 0x00, 0x10, 0xbb},
397         {0x05, 0x00, 0x20, 0xbb},
398         {0x20, 0x00, 0x00, 0xbb},
399         {0xb6, 0x00, 0x00, 0xcc},
400         {0xb6, 0x03, 0x01, 0xcc},
401         {0xb6, 0x02, 0x40, 0xcc},
402         {0xb6, 0x05, 0x00, 0xcc},
403         {0xb6, 0x04, 0xf0, 0xcc},
404         {0xb6, 0x12, 0x78, 0xcc},
405         {0xb6, 0x18, 0x00, 0xcc},
406         {0xb6, 0x17, 0x96, 0xcc},
407         {0xb6, 0x16, 0x00, 0xcc},
408         {0xb6, 0x22, 0x12, 0xcc},
409         {0xb6, 0x23, 0x0b, 0xcc},
410         {0xb3, 0x02, 0x02, 0xcc},
411         {0xbf, 0xc0, 0x39, 0xcc},
412         {0xbf, 0xc1, 0x04, 0xcc},
413         {0xbf, 0xcc, 0x10, 0xcc},
414         {0xb9, 0x12, 0x00, 0xcc},
415         {0xb9, 0x13, 0x0a, 0xcc},
416         {0xb9, 0x14, 0x0a, 0xcc},
417         {0xb9, 0x15, 0x0a, 0xcc},
418         {0xb9, 0x16, 0x0a, 0xcc},
419         {0xb9, 0x18, 0x00, 0xcc},
420         {0xb9, 0x19, 0x0f, 0xcc},
421         {0xb9, 0x1a, 0x0f, 0xcc},
422         {0xb9, 0x1b, 0x0f, 0xcc},
423         {0xb9, 0x1c, 0x0f, 0xcc},
424         {0xb8, 0x8e, 0x00, 0xcc},
425         {0xb8, 0x8f, 0xff, 0xcc},
426         {0xb6, 0x12, 0xf8, 0xcc},
427         {0xb6, 0x13, 0x13, 0xcc},
428         {0xbc, 0x02, 0x18, 0xcc},
429         {0xbc, 0x03, 0x50, 0xcc},
430         {0xbc, 0x04, 0x18, 0xcc},
431         {0xbc, 0x05, 0x00, 0xcc},
432         {0xbc, 0x06, 0x00, 0xcc},
433         {0xbc, 0x08, 0x30, 0xcc},
434         {0xbc, 0x09, 0x40, 0xcc},
435         {0xbc, 0x0a, 0x10, 0xcc},
436         {0xb8, 0x0c, 0x20, 0xcc},
437         {0xb8, 0x0d, 0x70, 0xcc},
438         {0xbc, 0x0b, 0x00, 0xcc},
439         {0xbc, 0x0c, 0x00, 0xcc},
440         {0x35, 0x00, 0xef, 0xbb},
441         {0xb3, 0x5c, 0x01, 0xcc},
442         {}
443 };
444
445 static const __u8 mi1310_socinitVGA_JPG[][4] = {
446         {0xb0, 0x03, 0x19, 0xcc},
447         {0xb0, 0x04, 0x02, 0xcc},
448         {0xb3, 0x00, 0x24, 0xcc},
449         {0xb3, 0x00, 0x25, 0xcc},
450         {0xb3, 0x05, 0x01, 0xcc},
451         {0xb3, 0x06, 0x03, 0xcc},
452         {0xb3, 0x5c, 0x01, 0xcc},
453         {0xb3, 0x08, 0x01, 0xcc},
454         {0xb3, 0x09, 0x0c, 0xcc},
455         {0xb3, 0x34, 0x02, 0xcc},
456         {0xb3, 0x35, 0xdd, 0xcc},
457         {0xb3, 0x03, 0x0a, 0xcc},
458         {0xb3, 0x04, 0x0d, 0xcc},
459         {0xb3, 0x20, 0x00, 0xcc},
460         {0xb3, 0x21, 0x00, 0xcc},
461         {0xb3, 0x22, 0x01, 0xcc},
462         {0xb3, 0x23, 0xe0, 0xcc},
463         {0xb3, 0x14, 0x00, 0xcc},
464         {0xb3, 0x15, 0x00, 0xcc},
465         {0xb3, 0x16, 0x02, 0xcc},
466         {0xb3, 0x17, 0x7f, 0xcc},
467         {0xb8, 0x01, 0x7d, 0xcc},
468         {0xb8, 0x81, 0x09, 0xcc},
469         {0xb8, 0x27, 0x20, 0xcc},
470         {0xb8, 0x26, 0x80, 0xcc},
471         {0xb3, 0x00, 0x25, 0xcc},
472         {0xb8, 0x00, 0x13, 0xcc},
473         {0xbc, 0x00, 0x71, 0xcc},
474         {0xb8, 0x81, 0x01, 0xcc},
475         {0xb8, 0x2c, 0x5a, 0xcc},
476         {0xb8, 0x2d, 0xff, 0xcc},
477         {0xb8, 0x2e, 0xee, 0xcc},
478         {0xb8, 0x2f, 0xfb, 0xcc},
479         {0xb8, 0x30, 0x52, 0xcc},
480         {0xb8, 0x31, 0xf8, 0xcc},
481         {0xb8, 0x32, 0xf1, 0xcc},
482         {0xb8, 0x33, 0xff, 0xcc},
483         {0xb8, 0x34, 0x54, 0xcc},
484         {0xb8, 0x35, 0x00, 0xcc},
485         {0xb8, 0x36, 0x00, 0xcc},
486         {0xb8, 0x37, 0x00, 0xcc},
487         {0xf0, 0x00, 0x00, 0xbb},
488         {0x00, 0x01, 0x00, 0xdd},
489         {0x0d, 0x00, 0x09, 0xbb},
490         {0x0d, 0x00, 0x08, 0xbb},
491         {0xf0, 0x00, 0x01, 0xbb},
492         {0x00, 0x01, 0x00, 0xdd},
493         {0x06, 0x00, 0x14, 0xbb},
494         {0x3a, 0x10, 0x00, 0xbb},
495         {0x00, 0x00, 0x10, 0xdd},
496         {0x9b, 0x10, 0x00, 0xbb},
497         {0x00, 0x00, 0x10, 0xdd},
498         {0xf0, 0x00, 0x00, 0xbb},
499         {0x00, 0x01, 0x00, 0xdd},
500         {0x2b, 0x00, 0x28, 0xbb},
501         {0x2c, 0x00, 0x30, 0xbb},
502         {0x2d, 0x00, 0x30, 0xbb},
503         {0x2e, 0x00, 0x28, 0xbb},
504         {0x41, 0x00, 0xd7, 0xbb},
505         {0x09, 0x02, 0x3a, 0xbb},
506         {0x0c, 0x00, 0x00, 0xbb},
507         {0x20, 0x00, 0x00, 0xbb},
508         {0x05, 0x00, 0x8c, 0xbb},
509         {0x06, 0x00, 0x32, 0xbb},
510         {0x07, 0x00, 0xc6, 0xbb},
511         {0x08, 0x00, 0x19, 0xbb},
512         {0x24, 0x80, 0x6f, 0xbb},
513         {0xc8, 0x00, 0x0f, 0xbb},
514         {0x20, 0x00, 0x0f, 0xbb},
515         {0xb6, 0x00, 0x00, 0xcc},
516         {0xb6, 0x03, 0x02, 0xcc},
517         {0xb6, 0x02, 0x80, 0xcc},
518         {0xb6, 0x05, 0x01, 0xcc},
519         {0xb6, 0x04, 0xe0, 0xcc},
520         {0xb6, 0x12, 0x78, 0xcc},
521         {0xb6, 0x18, 0x02, 0xcc},
522         {0xb6, 0x17, 0x58, 0xcc},
523         {0xb6, 0x16, 0x00, 0xcc},
524         {0xb6, 0x22, 0x12, 0xcc},
525         {0xb6, 0x23, 0x0b, 0xcc},
526         {0xb3, 0x02, 0x02, 0xcc},
527         {0xbf, 0xc0, 0x39, 0xcc},
528         {0xbf, 0xc1, 0x04, 0xcc},
529         {0xbf, 0xcc, 0x10, 0xcc},
530         {0xb9, 0x12, 0x00, 0xcc},
531         {0xb9, 0x13, 0x0a, 0xcc},
532         {0xb9, 0x14, 0x0a, 0xcc},
533         {0xb9, 0x15, 0x0a, 0xcc},
534         {0xb9, 0x16, 0x0a, 0xcc},
535         {0xb9, 0x18, 0x00, 0xcc},
536         {0xb9, 0x19, 0x0f, 0xcc},
537         {0xb9, 0x1a, 0x0f, 0xcc},
538         {0xb9, 0x1b, 0x0f, 0xcc},
539         {0xb9, 0x1c, 0x0f, 0xcc},
540         {0xb8, 0x8e, 0x00, 0xcc},
541         {0xb8, 0x8f, 0xff, 0xcc},
542         {0xb3, 0x01, 0x41, 0xcc},
543         {0x03, 0x03, 0xc0, 0xbb},
544         {0x06, 0x00, 0x10, 0xbb},
545         {0xb6, 0x12, 0xf8, 0xcc},
546         {0xb8, 0x0c, 0x20, 0xcc},
547         {0xb8, 0x0d, 0x70, 0xcc},
548         {0xb6, 0x13, 0x13, 0xcc},
549         {0x2f, 0x00, 0xC0, 0xbb},
550         {0xb8, 0xa0, 0x12, 0xcc},
551         {},
552 };
553 static const __u8 mi1310_socinitQVGA_JPG[][4] = {
554         {0xb0, 0x03, 0x19, 0xcc},
555         {0xb0, 0x04, 0x02, 0xcc},
556         {0xb3, 0x00, 0x24, 0xcc},
557         {0xb3, 0x00, 0x25, 0xcc},
558         {0xb3, 0x05, 0x01, 0xcc},
559         {0xb3, 0x06, 0x03, 0xcc},
560         {0xb3, 0x5c, 0x01, 0xcc},
561         {0xb3, 0x08, 0x01, 0xcc},
562         {0xb3, 0x09, 0x0c, 0xcc},
563         {0xb3, 0x34, 0x02, 0xcc},
564         {0xb3, 0x35, 0xdd, 0xcc},
565         {0xb3, 0x03, 0x0a, 0xcc},
566         {0xb3, 0x04, 0x0d, 0xcc},
567         {0xb3, 0x20, 0x00, 0xcc},
568         {0xb3, 0x21, 0x00, 0xcc},
569         {0xb3, 0x22, 0x01, 0xcc},
570         {0xb3, 0x23, 0xe0, 0xcc},
571         {0xb3, 0x14, 0x00, 0xcc},
572         {0xb3, 0x15, 0x00, 0xcc},
573         {0xb3, 0x16, 0x02, 0xcc},
574         {0xb3, 0x17, 0x7f, 0xcc},
575         {0xb8, 0x01, 0x7d, 0xcc},
576         {0xb8, 0x81, 0x09, 0xcc},
577         {0xb8, 0x27, 0x20, 0xcc},
578         {0xb8, 0x26, 0x80, 0xcc},
579         {0xb3, 0x00, 0x25, 0xcc},
580         {0xb8, 0x00, 0x13, 0xcc},
581         {0xbc, 0x00, 0xd1, 0xcc},
582         {0xb8, 0x81, 0x01, 0xcc},
583         {0xb8, 0x2c, 0x5a, 0xcc},
584         {0xb8, 0x2d, 0xff, 0xcc},
585         {0xb8, 0x2e, 0xee, 0xcc},
586         {0xb8, 0x2f, 0xfb, 0xcc},
587         {0xb8, 0x30, 0x52, 0xcc},
588         {0xb8, 0x31, 0xf8, 0xcc},
589         {0xb8, 0x32, 0xf1, 0xcc},
590         {0xb8, 0x33, 0xff, 0xcc},
591         {0xb8, 0x34, 0x54, 0xcc},
592         {0xb8, 0x35, 0x00, 0xcc},
593         {0xb8, 0x36, 0x00, 0xcc},
594         {0xb8, 0x37, 0x00, 0xcc},
595         {0xf0, 0x00, 0x00, 0xbb},
596         {0x00, 0x01, 0x00, 0xdd},
597         {0x0d, 0x00, 0x09, 0xbb},
598         {0x0d, 0x00, 0x08, 0xbb},
599         {0xf0, 0x00, 0x01, 0xbb},
600         {0x00, 0x01, 0x00, 0xdd},
601         {0x06, 0x00, 0x14, 0xbb},
602         {0x3a, 0x10, 0x00, 0xbb},
603         {0x00, 0x00, 0x10, 0xdd},
604         {0x9b, 0x10, 0x00, 0xbb},
605         {0x00, 0x00, 0x10, 0xdd},
606         {0xf0, 0x00, 0x00, 0xbb},
607         {0x00, 0x01, 0x00, 0xdd},
608         {0x2b, 0x00, 0x28, 0xbb},
609         {0x2c, 0x00, 0x30, 0xbb},
610         {0x2d, 0x00, 0x30, 0xbb},
611         {0x2e, 0x00, 0x28, 0xbb},
612         {0x41, 0x00, 0xd7, 0xbb},
613         {0x09, 0x02, 0x3a, 0xbb},
614         {0x0c, 0x00, 0x00, 0xbb},
615         {0x20, 0x00, 0x00, 0xbb},
616         {0x05, 0x00, 0x8c, 0xbb},
617         {0x06, 0x00, 0x32, 0xbb},
618         {0x07, 0x00, 0xc6, 0xbb},
619         {0x08, 0x00, 0x19, 0xbb},
620         {0x24, 0x80, 0x6f, 0xbb},
621         {0xc8, 0x00, 0x0f, 0xbb},
622         {0x20, 0x00, 0x0f, 0xbb},
623         {0xb6, 0x00, 0x00, 0xcc},
624         {0xb6, 0x03, 0x01, 0xcc},
625         {0xb6, 0x02, 0x40, 0xcc},
626         {0xb6, 0x05, 0x00, 0xcc},
627         {0xb6, 0x04, 0xf0, 0xcc},
628         {0xb6, 0x12, 0x78, 0xcc},
629         {0xb6, 0x18, 0x00, 0xcc},
630         {0xb6, 0x17, 0x96, 0xcc},
631         {0xb6, 0x16, 0x00, 0xcc},
632         {0xb6, 0x22, 0x12, 0xcc},
633         {0xb6, 0x23, 0x0b, 0xcc},
634         {0xb3, 0x02, 0x02, 0xcc},
635         {0xbf, 0xc0, 0x39, 0xcc},
636         {0xbf, 0xc1, 0x04, 0xcc},
637         {0xbf, 0xcc, 0x10, 0xcc},
638         {0xb9, 0x12, 0x00, 0xcc},
639         {0xb9, 0x13, 0x0a, 0xcc},
640         {0xb9, 0x14, 0x0a, 0xcc},
641         {0xb9, 0x15, 0x0a, 0xcc},
642         {0xb9, 0x16, 0x0a, 0xcc},
643         {0xb9, 0x18, 0x00, 0xcc},
644         {0xb9, 0x19, 0x0f, 0xcc},
645         {0xb9, 0x1a, 0x0f, 0xcc},
646         {0xb9, 0x1b, 0x0f, 0xcc},
647         {0xb9, 0x1c, 0x0f, 0xcc},
648         {0xb8, 0x8e, 0x00, 0xcc},
649         {0xb8, 0x8f, 0xff, 0xcc},
650         {0xbc, 0x02, 0x18, 0xcc},
651         {0xbc, 0x03, 0x50, 0xcc},
652         {0xbc, 0x04, 0x18, 0xcc},
653         {0xbc, 0x05, 0x00, 0xcc},
654         {0xbc, 0x06, 0x00, 0xcc},
655         {0xbc, 0x08, 0x30, 0xcc},
656         {0xbc, 0x09, 0x40, 0xcc},
657         {0xbc, 0x0a, 0x10, 0xcc},
658         {0xbc, 0x0b, 0x00, 0xcc},
659         {0xbc, 0x0c, 0x00, 0xcc},
660         {0xb3, 0x01, 0x41, 0xcc},
661         {0x03, 0x03, 0xc0, 0xbb},
662         {0x06, 0x00, 0x10, 0xbb},
663         {0xb6, 0x12, 0xf8, 0xcc},
664         {0xb8, 0x0c, 0x20, 0xcc},
665         {0xb8, 0x0d, 0x70, 0xcc},
666         {0xb6, 0x13, 0x13, 0xcc},
667         {0x2f, 0x00, 0xC0, 0xbb},
668         {0xb8, 0xa0, 0x12, 0xcc},
669         {},
670 };
671 static const u8 mi1310_soc_InitSXGA_JPG[][4] = {
672         {0xb0, 0x03, 0x19, 0xcc},
673         {0xb0, 0x04, 0x02, 0xcc},
674         {0xb3, 0x00, 0x24, 0xcc},
675         {0xb3, 0x00, 0x25, 0xcc},
676         {0xb3, 0x05, 0x00, 0xcc},
677         {0xb3, 0x06, 0x01, 0xcc},
678         {0xb3, 0x5c, 0x01, 0xcc},
679         {0xb3, 0x08, 0x01, 0xcc},
680         {0xb3, 0x09, 0x0c, 0xcc},
681         {0xb3, 0x34, 0x02, 0xcc},
682         {0xb3, 0x35, 0xdd, 0xcc},
683         {0xb3, 0x03, 0x0a, 0xcc},
684         {0xb3, 0x04, 0x0d, 0xcc},
685         {0xb3, 0x20, 0x00, 0xcc},
686         {0xb3, 0x21, 0x00, 0xcc},
687         {0xb3, 0x22, 0x04, 0xcc},
688         {0xb3, 0x23, 0x00, 0xcc},
689         {0xb3, 0x14, 0x00, 0xcc},
690         {0xb3, 0x15, 0x00, 0xcc},
691         {0xb3, 0x16, 0x04, 0xcc},
692         {0xb3, 0x17, 0xff, 0xcc},
693         {0xb8, 0x01, 0x7d, 0xcc},
694         {0xb8, 0x81, 0x09, 0xcc},
695         {0xb8, 0x27, 0x20, 0xcc},
696         {0xb8, 0x26, 0x80, 0xcc},
697         {0xb8, 0x06, 0x00, 0xcc},
698         {0xb8, 0x07, 0x05, 0xcc},
699         {0xb8, 0x08, 0x00, 0xcc},
700         {0xb8, 0x09, 0x04, 0xcc},
701         {0xb3, 0x00, 0x25, 0xcc},
702         {0xb8, 0x00, 0x11, 0xcc},
703         {0xbc, 0x00, 0x71, 0xcc},
704         {0xb8, 0x81, 0x01, 0xcc},
705         {0xb8, 0x2c, 0x5a, 0xcc},
706         {0xb8, 0x2d, 0xff, 0xcc},
707         {0xb8, 0x2e, 0xee, 0xcc},
708         {0xb8, 0x2f, 0xfb, 0xcc},
709         {0xb8, 0x30, 0x52, 0xcc},
710         {0xb8, 0x31, 0xf8, 0xcc},
711         {0xb8, 0x32, 0xf1, 0xcc},
712         {0xb8, 0x33, 0xff, 0xcc},
713         {0xb8, 0x34, 0x54, 0xcc},
714         {0xf0, 0x00, 0x00, 0xbb},
715         {0x00, 0x01, 0x00, 0xdd},
716         {0x0d, 0x00, 0x09, 0xbb},
717         {0x0d, 0x00, 0x08, 0xbb},
718         {0xf0, 0x00, 0x01, 0xbb},
719         {0x00, 0x01, 0x00, 0xdd},
720         {0x06, 0x00, 0x14, 0xbb},
721         {0x3a, 0x10, 0x00, 0xbb},
722         {0x00, 0x00, 0x10, 0xdd},
723         {0x9b, 0x10, 0x00, 0xbb},
724         {0x00, 0x00, 0x10, 0xdd},
725         {0xf0, 0x00, 0x00, 0xbb},
726         {0x00, 0x01, 0x00, 0xdd},
727         {0x2b, 0x00, 0x28, 0xbb},
728         {0x2c, 0x00, 0x30, 0xbb},
729         {0x2d, 0x00, 0x30, 0xbb},
730         {0x2e, 0x00, 0x28, 0xbb},
731         {0x41, 0x00, 0xd7, 0xbb},
732         {0x09, 0x02, 0x3a, 0xbb},
733         {0x0c, 0x00, 0x00, 0xbb},
734         {0x20, 0x00, 0x00, 0xbb},
735         {0x05, 0x00, 0x8c, 0xbb},
736         {0x06, 0x00, 0x32, 0xbb},
737         {0x07, 0x00, 0xc6, 0xbb},
738         {0x08, 0x00, 0x19, 0xbb},
739         {0x24, 0x80, 0x6f, 0xbb},
740         {0xc8, 0x00, 0x0f, 0xbb},
741         {0x20, 0x00, 0x03, 0xbb},
742         {0xb6, 0x00, 0x00, 0xcc},
743         {0xb6, 0x03, 0x05, 0xcc},
744         {0xb6, 0x02, 0x00, 0xcc},
745         {0xb6, 0x05, 0x04, 0xcc},
746         {0xb6, 0x04, 0x00, 0xcc},
747         {0xb6, 0x12, 0xf8, 0xcc},
748         {0xb6, 0x18, 0x0a, 0xcc},
749         {0xb6, 0x17, 0x00, 0xcc},
750         {0xb6, 0x16, 0x00, 0xcc},
751         {0xb6, 0x22, 0x12, 0xcc},
752         {0xb6, 0x23, 0x0b, 0xcc},
753         {0xb3, 0x02, 0x02, 0xcc},
754         {0xbf, 0xc0, 0x39, 0xcc},
755         {0xbf, 0xc1, 0x04, 0xcc},
756         {0xbf, 0xcc, 0x10, 0xcc},
757         {0xb9, 0x12, 0x00, 0xcc},
758         {0xb9, 0x13, 0x14, 0xcc},
759         {0xb9, 0x14, 0x14, 0xcc},
760         {0xb9, 0x15, 0x14, 0xcc},
761         {0xb9, 0x16, 0x14, 0xcc},
762         {0xb9, 0x18, 0x00, 0xcc},
763         {0xb9, 0x19, 0x1e, 0xcc},
764         {0xb9, 0x1a, 0x1e, 0xcc},
765         {0xb9, 0x1b, 0x1e, 0xcc},
766         {0xb9, 0x1c, 0x1e, 0xcc},
767         {0xb3, 0x01, 0x41, 0xcc},
768         {0xb8, 0x8e, 0x00, 0xcc},
769         {0xb8, 0x8f, 0xff, 0xcc},
770         {0xb6, 0x12, 0xf8, 0xcc},
771         {0xb8, 0x0c, 0x20, 0xcc},
772         {0xb8, 0x0d, 0x70, 0xcc},
773         {0xb6, 0x13, 0x13, 0xcc},
774         {0x2f, 0x00, 0xC0, 0xbb},
775         {0xb8, 0xa0, 0x12, 0xcc},
776         {}
777 };
778
779 static const __u8 mi1320_gamma[17] = {
780         0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,
781         0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff
782 };
783 static const __u8 mi1320_matrix[9] = {
784         0x54, 0xda, 0x06, 0xf1, 0x50, 0xf4, 0xf7, 0xea, 0x52
785 };
786 static const __u8 mi1320_initVGA_data[][4] = {
787         {0xb3, 0x01, 0x01, 0xcc},       {0x00, 0x00, 0x33, 0xdd},
788         {0xb0, 0x03, 0x19, 0xcc},       {0x00, 0x00, 0x33, 0xdd},
789         {0xb0, 0x04, 0x02, 0xcc},       {0x00, 0x00, 0x33, 0xdd},
790         {0xb3, 0x00, 0x64, 0xcc},       {0xb3, 0x00, 0x65, 0xcc},
791         {0xb0, 0x16, 0x03, 0xcc},       {0xb3, 0x05, 0x00, 0xcc},
792         {0xb3, 0x06, 0x00, 0xcc},       {0xb3, 0x08, 0x01, 0xcc},
793         {0xb3, 0x09, 0x0c, 0xcc},       {0xb3, 0x34, 0x02, 0xcc},
794         {0xb3, 0x35, 0xc8, 0xcc},       {0xb3, 0x02, 0x00, 0xcc},
795         {0xb3, 0x03, 0x0a, 0xcc},       {0xb3, 0x04, 0x05, 0xcc},
796         {0xb3, 0x20, 0x00, 0xcc},       {0xb3, 0x21, 0x00, 0xcc},
797         {0xb3, 0x22, 0x03, 0xcc},       {0xb3, 0x23, 0xc0, 0xcc},
798         {0xb3, 0x14, 0x00, 0xcc},       {0xb3, 0x15, 0x00, 0xcc},
799         {0xb3, 0x16, 0x04, 0xcc},       {0xb3, 0x17, 0xff, 0xcc},
800         {0xb3, 0x00, 0x67, 0xcc},       {0xbc, 0x00, 0xd0, 0xcc},
801         {0xbc, 0x01, 0x01, 0xcc},       {0xf0, 0x00, 0x00, 0xbb},
802         {0x0d, 0x00, 0x09, 0xbb},       {0x00, 0x01, 0x00, 0xdd},
803         {0x0d, 0x00, 0x08, 0xbb},       {0xf0, 0x00, 0x01, 0xbb},
804         {0xa1, 0x05, 0x00, 0xbb},       {0xa4, 0x03, 0xc0, 0xbb},
805         {0xf0, 0x00, 0x02, 0xbb},       {0x00, 0x00, 0x10, 0xdd},
806         {0xc8, 0x9f, 0x0b, 0xbb},       {0x00, 0x00, 0x10, 0xdd},
807         {0xf0, 0x00, 0x00, 0xbb},       {0x00, 0x00, 0x10, 0xdd},
808         {0x20, 0x01, 0x00, 0xbb},       {0x00, 0x00, 0x10, 0xdd},
809         {0xf0, 0x00, 0x01, 0xbb},       {0x9d, 0x3c, 0xa0, 0xbb},
810         {0x47, 0x30, 0x30, 0xbb},       {0xf0, 0x00, 0x00, 0xbb},
811         {0x0a, 0x80, 0x11, 0xbb},       {0x35, 0x00, 0x22, 0xbb},
812         {0xf0, 0x00, 0x02, 0xbb},       {0x9d, 0xc5, 0x05, 0xbb},
813         {0xdc, 0x0f, 0xfc, 0xbb},       {0xf0, 0x00, 0x01, 0xbb},
814         {0x06, 0x74, 0x0e, 0xbb},       {0x80, 0x00, 0x06, 0xbb},
815         {0x81, 0x04, 0x00, 0xbb},       {0x82, 0x01, 0x02, 0xbb},
816         {0x83, 0x03, 0x02, 0xbb},       {0x84, 0x05, 0x00, 0xbb},
817         {0x85, 0x01, 0x00, 0xbb},       {0x86, 0x03, 0x02, 0xbb},
818         {0x87, 0x05, 0x00, 0xbb},       {0x88, 0x01, 0x00, 0xbb},
819         {0x89, 0x02, 0x02, 0xbb},       {0x8a, 0xfd, 0x04, 0xbb},
820         {0x8b, 0xfc, 0xfd, 0xbb},       {0x8c, 0xff, 0xfd, 0xbb},
821         {0x8d, 0x00, 0x00, 0xbb},       {0x8e, 0xfe, 0x05, 0xbb},
822         {0x8f, 0xfc, 0xfd, 0xbb},       {0x90, 0xfe, 0xfd, 0xbb},
823         {0x91, 0x00, 0x00, 0xbb},       {0x92, 0xfe, 0x03, 0xbb},
824         {0x93, 0xfd, 0xfe, 0xbb},       {0x94, 0xff, 0xfd, 0xbb},
825         {0x95, 0x00, 0x00, 0xbb},       {0xb6, 0x07, 0x05, 0xbb},
826         {0xb7, 0x13, 0x06, 0xbb},       {0xb8, 0x08, 0x06, 0xbb},
827         {0xb9, 0x14, 0x08, 0xbb},       {0xba, 0x06, 0x05, 0xbb},
828         {0xbb, 0x13, 0x06, 0xbb},       {0xbc, 0x03, 0x01, 0xbb},
829         {0xbd, 0x03, 0x04, 0xbb},       {0xbe, 0x00, 0x02, 0xbb},
830         {0xbf, 0x03, 0x01, 0xbb},       {0xc0, 0x02, 0x04, 0xbb},
831         {0xc1, 0x00, 0x04, 0xbb},       {0xc2, 0x02, 0x01, 0xbb},
832         {0xc3, 0x01, 0x03, 0xbb},       {0xc4, 0x00, 0x04, 0xbb},
833         {0xf0, 0x00, 0x00, 0xbb},       {0x05, 0x01, 0x13, 0xbb},
834         {0x06, 0x00, 0x11, 0xbb},       {0x07, 0x00, 0x85, 0xbb},
835         {0x08, 0x00, 0x27, 0xbb},       {0x20, 0x01, 0x03, 0xbb},
836         {0x21, 0x80, 0x00, 0xbb},       {0x22, 0x0d, 0x0f, 0xbb},
837         {0x24, 0x80, 0x00, 0xbb},       {0x59, 0x00, 0xff, 0xbb},
838         {0xf0, 0x00, 0x02, 0xbb},       {0x39, 0x03, 0x0d, 0xbb},
839         {0x3a, 0x06, 0x1b, 0xbb},       {0x3b, 0x00, 0x95, 0xbb},
840         {0x3c, 0x04, 0xdb, 0xbb},       {0x57, 0x02, 0x00, 0xbb},
841         {0x58, 0x02, 0x66, 0xbb},       {0x59, 0x00, 0xff, 0xbb},
842         {0x5a, 0x01, 0x33, 0xbb},       {0x5c, 0x12, 0x0d, 0xbb},
843         {0x5d, 0x16, 0x11, 0xbb},       {0x64, 0x5e, 0x1c, 0xbb},
844         {0xf0, 0x00, 0x02, 0xbb},       {0x2f, 0xd1, 0x00, 0xbb},
845         {0x5b, 0x00, 0x01, 0xbb},       {0xf0, 0x00, 0x02, 0xbb},
846         {0x36, 0x68, 0x10, 0xbb},       {0x00, 0x00, 0x30, 0xdd},
847         {0x37, 0x82, 0x00, 0xbb},       {0xbc, 0x0e, 0x00, 0xcc},
848         {0xbc, 0x0f, 0x05, 0xcc},       {0xbc, 0x10, 0xc0, 0xcc},
849         {0xbc, 0x11, 0x03, 0xcc},       {0xb6, 0x00, 0x00, 0xcc},
850         {0xb6, 0x03, 0x05, 0xcc},       {0xb6, 0x02, 0x00, 0xcc},
851         {0xb6, 0x05, 0x04, 0xcc},       {0xb6, 0x04, 0x00, 0xcc},
852         {0xb6, 0x12, 0xf8, 0xcc},       {0xb6, 0x13, 0x29, 0xcc},
853         {0xb6, 0x18, 0x0a, 0xcc},       {0xb6, 0x17, 0x00, 0xcc},
854         {0xb6, 0x16, 0x00, 0xcc},       {0xb6, 0x22, 0x12, 0xcc},
855         {0xb6, 0x23, 0x0b, 0xcc},       {0xbf, 0xc0, 0x26, 0xcc},
856         {0xbf, 0xc1, 0x02, 0xcc},       {0xbf, 0xcc, 0x04, 0xcc},
857         {0xbc, 0x02, 0x18, 0xcc},       {0xbc, 0x03, 0x50, 0xcc},
858         {0xbc, 0x04, 0x18, 0xcc},       {0xbc, 0x05, 0x00, 0xcc},
859         {0xbc, 0x06, 0x00, 0xcc},       {0xbc, 0x08, 0x30, 0xcc},
860         {0xbc, 0x09, 0x40, 0xcc},       {0xbc, 0x0a, 0x10, 0xcc},
861         {0xbc, 0x0b, 0x00, 0xcc},       {0xbc, 0x0c, 0x00, 0xcc},
862         {0xb3, 0x5c, 0x01, 0xcc},       {0xb3, 0x01, 0x41, 0xcc},
863         {}
864 };
865 static const __u8 mi1320_initQVGA_data[][4] = {
866         {0xb3, 0x01, 0x01, 0xcc},       {0x00, 0x00, 0x33, 0xdd},
867         {0xb0, 0x03, 0x19, 0xcc},       {0x00, 0x00, 0x33, 0xdd},
868         {0xb0, 0x04, 0x02, 0xcc},       {0x00, 0x00, 0x33, 0xdd},
869         {0xb3, 0x00, 0x64, 0xcc},       {0xb3, 0x00, 0x65, 0xcc},
870         {0xb0, 0x16, 0x03, 0xcc},       {0xb3, 0x05, 0x01, 0xcc},
871         {0xb3, 0x06, 0x01, 0xcc},       {0xb3, 0x08, 0x01, 0xcc},
872         {0xb3, 0x09, 0x0c, 0xcc},       {0xb3, 0x34, 0x02, 0xcc},
873         {0xb3, 0x35, 0xc8, 0xcc},       {0xb3, 0x02, 0x00, 0xcc},
874         {0xb3, 0x03, 0x0a, 0xcc},       {0xb3, 0x04, 0x05, 0xcc},
875         {0xb3, 0x20, 0x00, 0xcc},       {0xb3, 0x21, 0x00, 0xcc},
876         {0xb3, 0x22, 0x01, 0xcc},       {0xb3, 0x23, 0xe0, 0xcc},
877         {0xb3, 0x14, 0x00, 0xcc},       {0xb3, 0x15, 0x00, 0xcc},
878         {0xb3, 0x16, 0x02, 0xcc},       {0xb3, 0x17, 0x7f, 0xcc},
879         {0xb3, 0x00, 0x65, 0xcc},       {0xb8, 0x00, 0x00, 0xcc},
880         {0xbc, 0x00, 0xd0, 0xcc},       {0xbc, 0x01, 0x01, 0xcc},
881         {0xf0, 0x00, 0x00, 0xbb},       {0x0d, 0x00, 0x09, 0xbb},
882         {0x00, 0x01, 0x00, 0xdd},       {0x0d, 0x00, 0x08, 0xbb},
883         {0xf0, 0x00, 0x00, 0xbb},       {0x02, 0x00, 0x64, 0xbb},
884         {0x05, 0x01, 0x78, 0xbb},       {0x06, 0x00, 0x11, 0xbb},
885         {0x07, 0x01, 0x42, 0xbb},       {0x08, 0x00, 0x11, 0xbb},
886         {0x20, 0x01, 0x00, 0xbb},       {0x21, 0x80, 0x00, 0xbb},
887         {0x22, 0x0d, 0x0f, 0xbb},       {0x24, 0x80, 0x00, 0xbb},
888         {0x59, 0x00, 0xff, 0xbb},       {0xf0, 0x00, 0x01, 0xbb},
889         {0x9d, 0x3c, 0xa0, 0xbb},       {0x47, 0x30, 0x30, 0xbb},
890         {0xf0, 0x00, 0x00, 0xbb},       {0x0a, 0x80, 0x11, 0xbb},
891         {0x35, 0x00, 0x22, 0xbb},       {0xf0, 0x00, 0x02, 0xbb},
892         {0x9d, 0xc5, 0x05, 0xbb},       {0xdc, 0x0f, 0xfc, 0xbb},
893         {0xf0, 0x00, 0x01, 0xbb},       {0x06, 0x74, 0x0e, 0xbb},
894         {0x80, 0x00, 0x06, 0xbb},       {0x81, 0x04, 0x00, 0xbb},
895         {0x82, 0x01, 0x02, 0xbb},       {0x83, 0x03, 0x02, 0xbb},
896         {0x84, 0x05, 0x00, 0xbb},       {0x85, 0x01, 0x00, 0xbb},
897         {0x86, 0x03, 0x02, 0xbb},       {0x87, 0x05, 0x00, 0xbb},
898         {0x88, 0x01, 0x00, 0xbb},       {0x89, 0x02, 0x02, 0xbb},
899         {0x8a, 0xfd, 0x04, 0xbb},       {0x8b, 0xfc, 0xfd, 0xbb},
900         {0x8c, 0xff, 0xfd, 0xbb},       {0x8d, 0x00, 0x00, 0xbb},
901         {0x8e, 0xfe, 0x05, 0xbb},       {0x8f, 0xfc, 0xfd, 0xbb},
902         {0x90, 0xfe, 0xfd, 0xbb},       {0x91, 0x00, 0x00, 0xbb},
903         {0x92, 0xfe, 0x03, 0xbb},       {0x93, 0xfd, 0xfe, 0xbb},
904         {0x94, 0xff, 0xfd, 0xbb},       {0x95, 0x00, 0x00, 0xbb},
905         {0xb6, 0x07, 0x05, 0xbb},       {0xb7, 0x13, 0x06, 0xbb},
906         {0xb8, 0x08, 0x06, 0xbb},       {0xb9, 0x14, 0x08, 0xbb},
907         {0xba, 0x06, 0x05, 0xbb},       {0xbb, 0x13, 0x06, 0xbb},
908         {0xbc, 0x03, 0x01, 0xbb},       {0xbd, 0x03, 0x04, 0xbb},
909         {0xbe, 0x00, 0x02, 0xbb},       {0xbf, 0x03, 0x01, 0xbb},
910         {0xc0, 0x02, 0x04, 0xbb},       {0xc1, 0x00, 0x04, 0xbb},
911         {0xc2, 0x02, 0x01, 0xbb},       {0xc3, 0x01, 0x03, 0xbb},
912         {0xc4, 0x00, 0x04, 0xbb},       {0xf0, 0x00, 0x02, 0xbb},
913         {0xc8, 0x00, 0x00, 0xbb},       {0x2e, 0x00, 0x00, 0xbb},
914         {0x2e, 0x0c, 0x5b, 0xbb},       {0x2f, 0xd1, 0x00, 0xbb},
915         {0x39, 0x03, 0xca, 0xbb},       {0x3a, 0x06, 0x80, 0xbb},
916         {0x3b, 0x01, 0x52, 0xbb},       {0x3c, 0x05, 0x40, 0xbb},
917         {0x57, 0x01, 0x9c, 0xbb},       {0x58, 0x01, 0xee, 0xbb},
918         {0x59, 0x00, 0xf0, 0xbb},       {0x5a, 0x01, 0x20, 0xbb},
919         {0x5c, 0x1d, 0x17, 0xbb},       {0x5d, 0x22, 0x1c, 0xbb},
920         {0x64, 0x1e, 0x1c, 0xbb},       {0x5b, 0x00, 0x01, 0xbb},
921         {0xf0, 0x00, 0x02, 0xbb},       {0x36, 0x68, 0x10, 0xbb},
922         {0x00, 0x00, 0x30, 0xdd},       {0x37, 0x81, 0x00, 0xbb},
923         {0xbc, 0x02, 0x18, 0xcc},       {0xbc, 0x03, 0x50, 0xcc},
924         {0xbc, 0x04, 0x18, 0xcc},       {0xbc, 0x05, 0x00, 0xcc},
925         {0xbc, 0x06, 0x00, 0xcc},       {0xbc, 0x08, 0x30, 0xcc},
926         {0xbc, 0x09, 0x40, 0xcc},       {0xbc, 0x0a, 0x10, 0xcc},
927         {0xbc, 0x0b, 0x00, 0xcc},       {0xbc, 0x0c, 0x00, 0xcc},
928         {0xbf, 0xc0, 0x26, 0xcc},       {0xbf, 0xc1, 0x02, 0xcc},
929         {0xbf, 0xcc, 0x04, 0xcc},       {0xb3, 0x5c, 0x01, 0xcc},
930         {0xb3, 0x01, 0x41, 0xcc},
931         {}
932 };
933
934 static const u8 mi1320_soc_InitVGA[][4] = {
935         {0xb3, 0x01, 0x01, 0xcc},
936         {0xb0, 0x03, 0x19, 0xcc},
937         {0xb0, 0x04, 0x02, 0xcc},
938         {0x00, 0x00, 0x30, 0xdd},
939         {0xb3, 0x00, 0x64, 0xcc},
940         {0xb3, 0x00, 0x67, 0xcc},
941         {0xb3, 0x05, 0x01, 0xcc},
942         {0xb3, 0x06, 0x01, 0xcc},
943         {0xb3, 0x08, 0x01, 0xcc},
944         {0xb3, 0x09, 0x0c, 0xcc},
945         {0xb3, 0x34, 0x02, 0xcc},
946         {0xb3, 0x35, 0xc8, 0xcc},
947         {0xb3, 0x02, 0x00, 0xcc},
948         {0xb3, 0x03, 0x0a, 0xcc},
949         {0xb3, 0x04, 0x05, 0xcc},
950         {0xb3, 0x20, 0x00, 0xcc},
951         {0xb3, 0x21, 0x00, 0xcc},
952         {0xb3, 0x22, 0x01, 0xcc},
953         {0xb3, 0x23, 0xe0, 0xcc},
954         {0xb3, 0x14, 0x00, 0xcc},
955         {0xb3, 0x15, 0x00, 0xcc},
956         {0xb3, 0x16, 0x02, 0xcc},
957         {0xb3, 0x17, 0x7f, 0xcc},
958         {0xb3, 0x00, 0x67, 0xcc},
959         {0xb8, 0x00, 0x00, 0xcc},
960         {0xbc, 0x00, 0x71, 0xcc},
961         {0xbc, 0x01, 0x01, 0xcc},
962         {0xb3, 0x5c, 0x01, 0xcc},
963         {0xf0, 0x00, 0x02, 0xbb},
964         {0x00, 0x00, 0x10, 0xdd},
965         {0xc8, 0x00, 0x00, 0xbb},
966         {0x00, 0x00, 0x30, 0xdd},
967         {0xf0, 0x00, 0x00, 0xbb},
968         {0x00, 0x00, 0x10, 0xdd},
969         {0x07, 0x00, 0xe0, 0xbb},
970         {0x08, 0x00, 0x0b, 0xbb},
971         {0x21, 0x00, 0x0c, 0xbb},
972         {0x20, 0x01, 0x03, 0xbb},
973         {0xbf, 0xc0, 0x26, 0xcc},
974         {0xbf, 0xc1, 0x02, 0xcc},
975         {0xbf, 0xcc, 0x04, 0xcc},
976         {0xb3, 0x01, 0x41, 0xcc},
977         {0xf0, 0x00, 0x00, 0xbb},
978         {0x05, 0x01, 0x78, 0xbb},
979         {0x06, 0x00, 0x11, 0xbb},
980         {0x07, 0x01, 0x42, 0xbb},
981         {0x08, 0x00, 0x11, 0xbb},
982         {0x20, 0x01, 0x03, 0xbb},
983         {0x21, 0x80, 0x00, 0xbb},
984         {0x22, 0x0d, 0x0f, 0xbb},
985         {0x24, 0x80, 0x00, 0xbb},
986         {0x59, 0x00, 0xff, 0xbb},
987         {0xf0, 0x00, 0x02, 0xbb},
988         {0x39, 0x03, 0xca, 0xbb},
989         {0x3a, 0x06, 0x80, 0xbb},
990         {0x3b, 0x01, 0x52, 0xbb},
991         {0x3c, 0x05, 0x40, 0xbb},
992         {0x57, 0x01, 0x9c, 0xbb},
993         {0x58, 0x01, 0xee, 0xbb},
994         {0x59, 0x00, 0xf0, 0xbb},
995         {0x5a, 0x01, 0x20, 0xbb},
996         {0x5c, 0x1d, 0x17, 0xbb},
997         {0x5d, 0x22, 0x1c, 0xbb},
998         {0x64, 0x1e, 0x1c, 0xbb},
999         {0x5b, 0x00, 0x00, 0xbb},
1000         {0xf0, 0x00, 0x02, 0xbb},
1001         {0x22, 0xa0, 0x78, 0xbb},
1002         {0x23, 0xa0, 0x78, 0xbb},
1003         {0x24, 0x7f, 0x00, 0xbb},
1004         {0x28, 0xea, 0x02, 0xbb},
1005         {0x29, 0x86, 0x7a, 0xbb},
1006         {0x5e, 0x52, 0x4c, 0xbb},
1007         {0x5f, 0x20, 0x24, 0xbb},
1008         {0x60, 0x00, 0x02, 0xbb},
1009         {0x02, 0x00, 0xee, 0xbb},
1010         {0x03, 0x39, 0x23, 0xbb},
1011         {0x04, 0x07, 0x24, 0xbb},
1012         {0x09, 0x00, 0xc0, 0xbb},
1013         {0x0a, 0x00, 0x79, 0xbb},
1014         {0x0b, 0x00, 0x04, 0xbb},
1015         {0x0c, 0x00, 0x5c, 0xbb},
1016         {0x0d, 0x00, 0xd9, 0xbb},
1017         {0x0e, 0x00, 0x53, 0xbb},
1018         {0x0f, 0x00, 0x21, 0xbb},
1019         {0x10, 0x00, 0xa4, 0xbb},
1020         {0x11, 0x00, 0xe5, 0xbb},
1021         {0x15, 0x00, 0x00, 0xbb},
1022         {0x16, 0x00, 0x00, 0xbb},
1023         {0x17, 0x00, 0x00, 0xbb},
1024         {0x18, 0x00, 0x00, 0xbb},
1025         {0x19, 0x00, 0x00, 0xbb},
1026         {0x1a, 0x00, 0x00, 0xbb},
1027         {0x1b, 0x00, 0x00, 0xbb},
1028         {0x1c, 0x00, 0x00, 0xbb},
1029         {0x1d, 0x00, 0x00, 0xbb},
1030         {0x1e, 0x00, 0x00, 0xbb},
1031         {0xf0, 0x00, 0x01, 0xbb},
1032         {0x06, 0xe0, 0x0e, 0xbb},
1033         {0x06, 0x60, 0x0e, 0xbb},
1034         {0xb3, 0x5c, 0x01, 0xcc},
1035         {}
1036 };
1037 static const u8 mi1320_soc_InitVGA_JPG[][4] = {
1038         {0xb3, 0x01, 0x01, 0xcc},
1039         {0xb0, 0x03, 0x19, 0xcc},
1040         {0xb0, 0x04, 0x02, 0xcc},
1041         {0x00, 0x00, 0x30, 0xdd},
1042         {0xb3, 0x00, 0x64, 0xcc},
1043         {0xb3, 0x00, 0x67, 0xcc},
1044         {0xb3, 0x05, 0x01, 0xcc},
1045         {0xb3, 0x06, 0x01, 0xcc},
1046         {0xb3, 0x08, 0x01, 0xcc},
1047         {0xb3, 0x09, 0x0c, 0xcc},
1048         {0xb3, 0x34, 0x02, 0xcc},
1049         {0xb3, 0x35, 0xc8, 0xcc},
1050         {0xb3, 0x02, 0x00, 0xcc},
1051         {0xb3, 0x03, 0x0a, 0xcc},
1052         {0xb3, 0x04, 0x05, 0xcc},
1053         {0xb3, 0x20, 0x00, 0xcc},
1054         {0xb3, 0x21, 0x00, 0xcc},
1055         {0xb3, 0x22, 0x01, 0xcc},
1056         {0xb3, 0x23, 0xe0, 0xcc},
1057         {0xb3, 0x14, 0x00, 0xcc},
1058         {0xb3, 0x15, 0x00, 0xcc},
1059         {0xb3, 0x16, 0x02, 0xcc},
1060         {0xb3, 0x17, 0x7f, 0xcc},
1061         {0xb3, 0x00, 0x67, 0xcc},
1062         {0xb8, 0x00, 0x00, 0xcc},
1063         {0xbc, 0x00, 0x71, 0xcc},
1064         {0xbc, 0x01, 0x01, 0xcc},
1065         {0xb3, 0x5c, 0x01, 0xcc},
1066         {0xf0, 0x00, 0x02, 0xbb},
1067         {0x00, 0x00, 0x10, 0xdd},
1068         {0xc8, 0x00, 0x00, 0xbb},
1069         {0x00, 0x00, 0x30, 0xdd},
1070         {0xf0, 0x00, 0x00, 0xbb},
1071         {0x00, 0x00, 0x10, 0xdd},
1072         {0x07, 0x00, 0xe0, 0xbb},
1073         {0x08, 0x00, 0x0b, 0xbb},
1074         {0x21, 0x00, 0x0c, 0xbb},
1075         {0x20, 0x01, 0x03, 0xbb},
1076         {0xb6, 0x00, 0x00, 0xcc},
1077         {0xb6, 0x03, 0x02, 0xcc},
1078         {0xb6, 0x02, 0x80, 0xcc},
1079         {0xb6, 0x05, 0x01, 0xcc},
1080         {0xb6, 0x04, 0xe0, 0xcc},
1081         {0xb6, 0x12, 0xf8, 0xcc},
1082         {0xb6, 0x13, 0x05, 0xcc},
1083         {0xb6, 0x18, 0x02, 0xcc},
1084         {0xb6, 0x17, 0x58, 0xcc},
1085         {0xb6, 0x16, 0x00, 0xcc},
1086         {0xb6, 0x22, 0x12, 0xcc},
1087         {0xb6, 0x23, 0x0b, 0xcc},
1088         {0xbf, 0xc0, 0x39, 0xcc},
1089         {0xbf, 0xc1, 0x04, 0xcc},
1090         {0xbf, 0xcc, 0x00, 0xcc},
1091         {0xb3, 0x01, 0x41, 0xcc},
1092         {0xf0, 0x00, 0x00, 0xbb},
1093         {0x05, 0x01, 0x78, 0xbb},
1094         {0x06, 0x00, 0x11, 0xbb},
1095         {0x07, 0x01, 0x42, 0xbb},
1096         {0x08, 0x00, 0x11, 0xbb},
1097         {0x20, 0x01, 0x03, 0xbb},
1098         {0x21, 0x80, 0x00, 0xbb},
1099         {0x22, 0x0d, 0x0f, 0xbb},
1100         {0x24, 0x80, 0x00, 0xbb},
1101         {0x59, 0x00, 0xff, 0xbb},
1102         {0xf0, 0x00, 0x02, 0xbb},
1103         {0x39, 0x03, 0xca, 0xbb},
1104         {0x3a, 0x06, 0x80, 0xbb},
1105         {0x3b, 0x01, 0x52, 0xbb},
1106         {0x3c, 0x05, 0x40, 0xbb},
1107         {0x57, 0x01, 0x9c, 0xbb},
1108         {0x58, 0x01, 0xee, 0xbb},
1109         {0x59, 0x00, 0xf0, 0xbb},
1110         {0x5a, 0x01, 0x20, 0xbb},
1111         {0x5c, 0x1d, 0x17, 0xbb},
1112         {0x5d, 0x22, 0x1c, 0xbb},
1113         {0x64, 0x1e, 0x1c, 0xbb},
1114         {0x5b, 0x00, 0x00, 0xbb},
1115         {0xf0, 0x00, 0x02, 0xbb},
1116         {0x22, 0xa0, 0x78, 0xbb},
1117         {0x23, 0xa0, 0x78, 0xbb},
1118         {0x24, 0x7f, 0x00, 0xbb},
1119         {0x28, 0xea, 0x02, 0xbb},
1120         {0x29, 0x86, 0x7a, 0xbb},
1121         {0x5e, 0x52, 0x4c, 0xbb},
1122         {0x5f, 0x20, 0x24, 0xbb},
1123         {0x60, 0x00, 0x02, 0xbb},
1124         {0x02, 0x00, 0xee, 0xbb},
1125         {0x03, 0x39, 0x23, 0xbb},
1126         {0x04, 0x07, 0x24, 0xbb},
1127         {0x09, 0x00, 0xc0, 0xbb},
1128         {0x0a, 0x00, 0x79, 0xbb},
1129         {0x0b, 0x00, 0x04, 0xbb},
1130         {0x0c, 0x00, 0x5c, 0xbb},
1131         {0x0d, 0x00, 0xd9, 0xbb},
1132         {0x0e, 0x00, 0x53, 0xbb},
1133         {0x0f, 0x00, 0x21, 0xbb},
1134         {0x10, 0x00, 0xa4, 0xbb},
1135         {0x11, 0x00, 0xe5, 0xbb},
1136         {0x15, 0x00, 0x00, 0xbb},
1137         {0x16, 0x00, 0x00, 0xbb},
1138         {0x17, 0x00, 0x00, 0xbb},
1139         {0x18, 0x00, 0x00, 0xbb},
1140         {0x19, 0x00, 0x00, 0xbb},
1141         {0x1a, 0x00, 0x00, 0xbb},
1142         {0x1b, 0x00, 0x00, 0xbb},
1143         {0x1c, 0x00, 0x00, 0xbb},
1144         {0x1d, 0x00, 0x00, 0xbb},
1145         {0x1e, 0x00, 0x00, 0xbb},
1146         {0xf0, 0x00, 0x01, 0xbb},
1147         {0x06, 0xe0, 0x0e, 0xbb},
1148         {0x06, 0x60, 0x0e, 0xbb},
1149         {0xb3, 0x5c, 0x01, 0xcc},
1150         {}
1151 };
1152 static const u8 mi1320_soc_InitQVGA[][4] = {
1153         {0xb3, 0x01, 0x01, 0xcc},
1154         {0xb0, 0x03, 0x19, 0xcc},
1155         {0xb0, 0x04, 0x02, 0xcc},
1156         {0x00, 0x00, 0x30, 0xdd},
1157         {0xb3, 0x00, 0x64, 0xcc},
1158         {0xb3, 0x00, 0x67, 0xcc},
1159         {0xb3, 0x05, 0x01, 0xcc},
1160         {0xb3, 0x06, 0x01, 0xcc},
1161         {0xb3, 0x08, 0x01, 0xcc},
1162         {0xb3, 0x09, 0x0c, 0xcc},
1163         {0xb3, 0x34, 0x02, 0xcc},
1164         {0xb3, 0x35, 0xc8, 0xcc},
1165         {0xb3, 0x02, 0x00, 0xcc},
1166         {0xb3, 0x03, 0x0a, 0xcc},
1167         {0xb3, 0x04, 0x05, 0xcc},
1168         {0xb3, 0x20, 0x00, 0xcc},
1169         {0xb3, 0x21, 0x00, 0xcc},
1170         {0xb3, 0x22, 0x01, 0xcc},
1171         {0xb3, 0x23, 0xe0, 0xcc},
1172         {0xb3, 0x14, 0x00, 0xcc},
1173         {0xb3, 0x15, 0x00, 0xcc},
1174         {0xb3, 0x16, 0x02, 0xcc},
1175         {0xb3, 0x17, 0x7f, 0xcc},
1176         {0xb3, 0x00, 0x67, 0xcc},
1177         {0xb8, 0x00, 0x00, 0xcc},
1178         {0xbc, 0x00, 0xd1, 0xcc},
1179         {0xbc, 0x01, 0x01, 0xcc},
1180         {0xb3, 0x5c, 0x01, 0xcc},
1181         {0xf0, 0x00, 0x02, 0xbb},
1182         {0x00, 0x00, 0x10, 0xdd},
1183         {0xc8, 0x00, 0x00, 0xbb},
1184         {0x00, 0x00, 0x30, 0xdd},
1185         {0xf0, 0x00, 0x00, 0xbb},
1186         {0x00, 0x00, 0x10, 0xdd},
1187         {0x07, 0x00, 0xe0, 0xbb},
1188         {0x08, 0x00, 0x0b, 0xbb},
1189         {0x21, 0x00, 0x0c, 0xbb},
1190         {0x20, 0x01, 0x03, 0xbb},
1191         {0xbf, 0xc0, 0x26, 0xcc},
1192         {0xbf, 0xc1, 0x02, 0xcc},
1193         {0xbf, 0xcc, 0x04, 0xcc},
1194         {0xbc, 0x02, 0x18, 0xcc},
1195         {0xbc, 0x03, 0x50, 0xcc},
1196         {0xbc, 0x04, 0x18, 0xcc},
1197         {0xbc, 0x05, 0x00, 0xcc},
1198         {0xbc, 0x06, 0x00, 0xcc},
1199         {0xbc, 0x08, 0x30, 0xcc},
1200         {0xbc, 0x09, 0x40, 0xcc},
1201         {0xbc, 0x0a, 0x10, 0xcc},
1202         {0xbc, 0x0b, 0x00, 0xcc},
1203         {0xbc, 0x0c, 0x00, 0xcc},
1204         {0xb3, 0x01, 0x41, 0xcc},
1205         {0xf0, 0x00, 0x00, 0xbb},
1206         {0x05, 0x01, 0x78, 0xbb},
1207         {0x06, 0x00, 0x11, 0xbb},
1208         {0x07, 0x01, 0x42, 0xbb},
1209         {0x08, 0x00, 0x11, 0xbb},
1210         {0x20, 0x01, 0x03, 0xbb},
1211         {0x21, 0x80, 0x00, 0xbb},
1212         {0x22, 0x0d, 0x0f, 0xbb},
1213         {0x24, 0x80, 0x00, 0xbb},
1214         {0x59, 0x00, 0xff, 0xbb},
1215         {0xf0, 0x00, 0x02, 0xbb},
1216         {0x39, 0x03, 0xca, 0xbb},
1217         {0x3a, 0x06, 0x80, 0xbb},
1218         {0x3b, 0x01, 0x52, 0xbb},
1219         {0x3c, 0x05, 0x40, 0xbb},
1220         {0x57, 0x01, 0x9c, 0xbb},
1221         {0x58, 0x01, 0xee, 0xbb},
1222         {0x59, 0x00, 0xf0, 0xbb},
1223         {0x5a, 0x01, 0x20, 0xbb},
1224         {0x5c, 0x1d, 0x17, 0xbb},
1225         {0x5d, 0x22, 0x1c, 0xbb},
1226         {0x64, 0x1e, 0x1c, 0xbb},
1227         {0x5b, 0x00, 0x00, 0xbb},
1228         {0xf0, 0x00, 0x02, 0xbb},
1229         {0x22, 0xa0, 0x78, 0xbb},
1230         {0x23, 0xa0, 0x78, 0xbb},
1231         {0x24, 0x7f, 0x00, 0xbb},
1232         {0x28, 0xea, 0x02, 0xbb},
1233         {0x29, 0x86, 0x7a, 0xbb},
1234         {0x5e, 0x52, 0x4c, 0xbb},
1235         {0x5f, 0x20, 0x24, 0xbb},
1236         {0x60, 0x00, 0x02, 0xbb},
1237         {0x02, 0x00, 0xee, 0xbb},
1238         {0x03, 0x39, 0x23, 0xbb},
1239         {0x04, 0x07, 0x24, 0xbb},
1240         {0x09, 0x00, 0xc0, 0xbb},
1241         {0x0a, 0x00, 0x79, 0xbb},
1242         {0x0b, 0x00, 0x04, 0xbb},
1243         {0x0c, 0x00, 0x5c, 0xbb},
1244         {0x0d, 0x00, 0xd9, 0xbb},
1245         {0x0e, 0x00, 0x53, 0xbb},
1246         {0x0f, 0x00, 0x21, 0xbb},
1247         {0x10, 0x00, 0xa4, 0xbb},
1248         {0x11, 0x00, 0xe5, 0xbb},
1249         {0x15, 0x00, 0x00, 0xbb},
1250         {0x16, 0x00, 0x00, 0xbb},
1251         {0x17, 0x00, 0x00, 0xbb},
1252         {0x18, 0x00, 0x00, 0xbb},
1253         {0x19, 0x00, 0x00, 0xbb},
1254         {0x1a, 0x00, 0x00, 0xbb},
1255         {0x1b, 0x00, 0x00, 0xbb},
1256         {0x1c, 0x00, 0x00, 0xbb},
1257         {0x1d, 0x00, 0x00, 0xbb},
1258         {0x1e, 0x00, 0x00, 0xbb},
1259         {0xf0, 0x00, 0x01, 0xbb},
1260         {0x06, 0xe0, 0x0e, 0xbb},
1261         {0x06, 0x60, 0x0e, 0xbb},
1262         {0xb3, 0x5c, 0x01, 0xcc},
1263         {}
1264 };
1265 static const u8 mi1320_soc_InitQVGA_JPG[][4] = {
1266         {0xb3, 0x01, 0x01, 0xcc},
1267         {0xb0, 0x03, 0x19, 0xcc},
1268         {0xb0, 0x04, 0x02, 0xcc},
1269         {0x00, 0x00, 0x30, 0xdd},
1270         {0xb3, 0x00, 0x64, 0xcc},
1271         {0xb3, 0x00, 0x67, 0xcc},
1272         {0xb3, 0x05, 0x01, 0xcc},
1273         {0xb3, 0x06, 0x01, 0xcc},
1274         {0xb3, 0x08, 0x01, 0xcc},
1275         {0xb3, 0x09, 0x0c, 0xcc},
1276         {0xb3, 0x34, 0x02, 0xcc},
1277         {0xb3, 0x35, 0xc8, 0xcc},
1278         {0xb3, 0x02, 0x00, 0xcc},
1279         {0xb3, 0x03, 0x0a, 0xcc},
1280         {0xb3, 0x04, 0x05, 0xcc},
1281         {0xb3, 0x20, 0x00, 0xcc},
1282         {0xb3, 0x21, 0x00, 0xcc},
1283         {0xb3, 0x22, 0x01, 0xcc},
1284         {0xb3, 0x23, 0xe0, 0xcc},
1285         {0xb3, 0x14, 0x00, 0xcc},
1286         {0xb3, 0x15, 0x00, 0xcc},
1287         {0xb3, 0x16, 0x02, 0xcc},
1288         {0xb3, 0x17, 0x7f, 0xcc},
1289         {0xb3, 0x00, 0x67, 0xcc},
1290         {0xb8, 0x00, 0x00, 0xcc},
1291         {0xbc, 0x00, 0xd1, 0xcc},
1292         {0xbc, 0x01, 0x01, 0xcc},
1293         {0xb3, 0x5c, 0x01, 0xcc},
1294         {0xf0, 0x00, 0x02, 0xbb},
1295         {0x00, 0x00, 0x10, 0xdd},
1296         {0xc8, 0x00, 0x00, 0xbb},
1297         {0x00, 0x00, 0x30, 0xdd},
1298         {0xf0, 0x00, 0x00, 0xbb},
1299         {0x00, 0x00, 0x10, 0xdd},
1300         {0x07, 0x00, 0xe0, 0xbb},
1301         {0x08, 0x00, 0x0b, 0xbb},
1302         {0x21, 0x00, 0x0c, 0xbb},
1303         {0x20, 0x01, 0x03, 0xbb},
1304         {0xb6, 0x00, 0x00, 0xcc},
1305         {0xb6, 0x03, 0x01, 0xcc},
1306         {0xb6, 0x02, 0x40, 0xcc},
1307         {0xb6, 0x05, 0x00, 0xcc},
1308         {0xb6, 0x04, 0xf0, 0xcc},
1309         {0xb6, 0x12, 0xf8, 0xcc},
1310         {0xb6, 0x13, 0x05, 0xcc},
1311         {0xb6, 0x18, 0x00, 0xcc},
1312         {0xb6, 0x17, 0x96, 0xcc},
1313         {0xb6, 0x16, 0x00, 0xcc},
1314         {0xb6, 0x22, 0x12, 0xcc},
1315         {0xb6, 0x23, 0x0b, 0xcc},
1316         {0xbf, 0xc0, 0x39, 0xcc},
1317         {0xbf, 0xc1, 0x04, 0xcc},
1318         {0xbf, 0xcc, 0x00, 0xcc},
1319         {0xbc, 0x02, 0x18, 0xcc},
1320         {0xbc, 0x03, 0x50, 0xcc},
1321         {0xbc, 0x04, 0x18, 0xcc},
1322         {0xbc, 0x05, 0x00, 0xcc},
1323         {0xbc, 0x06, 0x00, 0xcc},
1324         {0xbc, 0x08, 0x30, 0xcc},
1325         {0xbc, 0x09, 0x40, 0xcc},
1326         {0xbc, 0x0a, 0x10, 0xcc},
1327         {0xbc, 0x0b, 0x00, 0xcc},
1328         {0xbc, 0x0c, 0x00, 0xcc},
1329         {0xb3, 0x01, 0x41, 0xcc},
1330         {0xf0, 0x00, 0x00, 0xbb},
1331         {0x05, 0x01, 0x78, 0xbb},
1332         {0x06, 0x00, 0x11, 0xbb},
1333         {0x07, 0x01, 0x42, 0xbb},
1334         {0x08, 0x00, 0x11, 0xbb},
1335         {0x20, 0x01, 0x03, 0xbb},
1336         {0x21, 0x80, 0x00, 0xbb},
1337         {0x22, 0x0d, 0x0f, 0xbb},
1338         {0x24, 0x80, 0x00, 0xbb},
1339         {0x59, 0x00, 0xff, 0xbb},
1340         {0xf0, 0x00, 0x02, 0xbb},
1341         {0x39, 0x03, 0xca, 0xbb},
1342         {0x3a, 0x06, 0x80, 0xbb},
1343         {0x3b, 0x01, 0x52, 0xbb},
1344         {0x3c, 0x05, 0x40, 0xbb},
1345         {0x57, 0x01, 0x9c, 0xbb},
1346         {0x58, 0x01, 0xee, 0xbb},
1347         {0x59, 0x00, 0xf0, 0xbb},
1348         {0x5a, 0x01, 0x20, 0xbb},
1349         {0x5c, 0x1d, 0x17, 0xbb},
1350         {0x5d, 0x22, 0x1c, 0xbb},
1351         {0x64, 0x1e, 0x1c, 0xbb},
1352         {0x5b, 0x00, 0x00, 0xbb},
1353         {0xf0, 0x00, 0x02, 0xbb},
1354         {0x22, 0xa0, 0x78, 0xbb},
1355         {0x23, 0xa0, 0x78, 0xbb},
1356         {0x24, 0x7f, 0x00, 0xbb},
1357         {0x28, 0xea, 0x02, 0xbb},
1358         {0x29, 0x86, 0x7a, 0xbb},
1359         {0x5e, 0x52, 0x4c, 0xbb},
1360         {0x5f, 0x20, 0x24, 0xbb},
1361         {0x60, 0x00, 0x02, 0xbb},
1362         {0x02, 0x00, 0xee, 0xbb},
1363         {0x03, 0x39, 0x23, 0xbb},
1364         {0x04, 0x07, 0x24, 0xbb},
1365         {0x09, 0x00, 0xc0, 0xbb},
1366         {0x0a, 0x00, 0x79, 0xbb},
1367         {0x0b, 0x00, 0x04, 0xbb},
1368         {0x0c, 0x00, 0x5c, 0xbb},
1369         {0x0d, 0x00, 0xd9, 0xbb},
1370         {0x0e, 0x00, 0x53, 0xbb},
1371         {0x0f, 0x00, 0x21, 0xbb},
1372         {0x10, 0x00, 0xa4, 0xbb},
1373         {0x11, 0x00, 0xe5, 0xbb},
1374         {0x15, 0x00, 0x00, 0xbb},
1375         {0x16, 0x00, 0x00, 0xbb},
1376         {0x17, 0x00, 0x00, 0xbb},
1377         {0x18, 0x00, 0x00, 0xbb},
1378         {0x19, 0x00, 0x00, 0xbb},
1379         {0x1a, 0x00, 0x00, 0xbb},
1380         {0x1b, 0x00, 0x00, 0xbb},
1381         {0x1c, 0x00, 0x00, 0xbb},
1382         {0x1d, 0x00, 0x00, 0xbb},
1383         {0x1e, 0x00, 0x00, 0xbb},
1384         {0xf0, 0x00, 0x01, 0xbb},
1385         {0x06, 0xe0, 0x0e, 0xbb},
1386         {0x06, 0x60, 0x0e, 0xbb},
1387         {0xb3, 0x5c, 0x01, 0xcc},
1388         {}
1389 };
1390 static const u8 mi1320_soc_InitSXGA_JPG[][4] = {
1391         {0xb3, 0x01, 0x01, 0xcc},
1392         {0xb0, 0x03, 0x19, 0xcc},
1393         {0xb0, 0x04, 0x02, 0xcc},
1394         {0x00, 0x00, 0x33, 0xdd},
1395         {0xb3, 0x00, 0x64, 0xcc},
1396         {0xb3, 0x00, 0x67, 0xcc},
1397         {0xb3, 0x05, 0x00, 0xcc},
1398         {0xb3, 0x06, 0x00, 0xcc},
1399         {0xb3, 0x08, 0x01, 0xcc},
1400         {0xb3, 0x09, 0x0c, 0xcc},
1401         {0xb3, 0x34, 0x02, 0xcc},
1402         {0xb3, 0x35, 0xc8, 0xcc},
1403         {0xb3, 0x02, 0x00, 0xcc},
1404         {0xb3, 0x03, 0x0a, 0xcc},
1405         {0xb3, 0x04, 0x05, 0xcc},
1406         {0xb3, 0x20, 0x00, 0xcc},
1407         {0xb3, 0x21, 0x00, 0xcc},
1408         {0xb3, 0x22, 0x04, 0xcc},
1409         {0xb3, 0x23, 0x00, 0xcc},
1410         {0xb3, 0x14, 0x00, 0xcc},
1411         {0xb3, 0x15, 0x00, 0xcc},
1412         {0xb3, 0x16, 0x04, 0xcc},
1413         {0xb3, 0x17, 0xff, 0xcc},
1414         {0xb3, 0x00, 0x67, 0xcc},
1415         {0xbc, 0x00, 0x71, 0xcc},
1416         {0xbc, 0x01, 0x01, 0xcc},
1417         {0xf0, 0x00, 0x02, 0xbb},
1418         {0x00, 0x00, 0x30, 0xdd},
1419         {0xc8, 0x9f, 0x0b, 0xbb},
1420         {0x00, 0x00, 0x20, 0xdd},
1421         {0x5b, 0x00, 0x01, 0xbb},
1422         {0x00, 0x00, 0x20, 0xdd},
1423         {0xf0, 0x00, 0x00, 0xbb},
1424         {0x00, 0x00, 0x30, 0xdd},
1425         {0x20, 0x01, 0x03, 0xbb},
1426         {0x00, 0x00, 0x20, 0xdd},
1427         {0xb6, 0x00, 0x00, 0xcc},
1428         {0xb6, 0x03, 0x05, 0xcc},
1429         {0xb6, 0x02, 0x00, 0xcc},
1430         {0xb6, 0x05, 0x04, 0xcc},
1431         {0xb6, 0x04, 0x00, 0xcc},
1432         {0xb6, 0x12, 0xf8, 0xcc},
1433         {0xb6, 0x13, 0x29, 0xcc},
1434         {0xb6, 0x18, 0x0a, 0xcc},
1435         {0xb6, 0x17, 0x00, 0xcc},
1436         {0xb6, 0x16, 0x00, 0xcc},
1437         {0xb6, 0x22, 0x12, 0xcc},
1438         {0xb6, 0x23, 0x0b, 0xcc},
1439         {0xbf, 0xc0, 0x39, 0xcc},
1440         {0xbf, 0xc1, 0x04, 0xcc},
1441         {0xbf, 0xcc, 0x00, 0xcc},
1442         {0xb3, 0x5c, 0x01, 0xcc},
1443         {0xb3, 0x01, 0x41, 0xcc},
1444         {0xf0, 0x00, 0x00, 0xbb},
1445         {0x05, 0x01, 0x78, 0xbb},
1446         {0x06, 0x00, 0x11, 0xbb},
1447         {0x07, 0x01, 0x42, 0xbb},
1448         {0x08, 0x00, 0x11, 0xbb},
1449         {0x20, 0x01, 0x03, 0xbb},
1450         {0x21, 0x80, 0x00, 0xbb},
1451         {0x22, 0x0d, 0x0f, 0xbb},
1452         {0x24, 0x80, 0x00, 0xbb},
1453         {0x59, 0x00, 0xff, 0xbb},
1454         {0xf0, 0x00, 0x02, 0xbb},
1455         {0x39, 0x03, 0xca, 0xbb},
1456         {0x3a, 0x06, 0x80, 0xbb},
1457         {0x3b, 0x01, 0x52, 0xbb},
1458         {0x3c, 0x05, 0x40, 0xbb},
1459         {0x57, 0x01, 0x9c, 0xbb},
1460         {0x58, 0x01, 0xee, 0xbb},
1461         {0x59, 0x00, 0xf0, 0xbb},
1462         {0x5a, 0x01, 0x20, 0xbb},
1463         {0x5c, 0x1d, 0x17, 0xbb},
1464         {0x5d, 0x22, 0x1c, 0xbb},
1465         {0x64, 0x1e, 0x1c, 0xbb},
1466         {0x5b, 0x00, 0x00, 0xbb},
1467         {0xf0, 0x00, 0x02, 0xbb},
1468         {0x22, 0xa0, 0x78, 0xbb},
1469         {0x23, 0xa0, 0x78, 0xbb},
1470         {0x24, 0x7f, 0x00, 0xbb},
1471         {0x28, 0xea, 0x02, 0xbb},
1472         {0x29, 0x86, 0x7a, 0xbb},
1473         {0x5e, 0x52, 0x4c, 0xbb},
1474         {0x5f, 0x20, 0x24, 0xbb},
1475         {0x60, 0x00, 0x02, 0xbb},
1476         {0x02, 0x00, 0xee, 0xbb},
1477         {0x03, 0x39, 0x23, 0xbb},
1478         {0x04, 0x07, 0x24, 0xbb},
1479         {0x09, 0x00, 0xc0, 0xbb},
1480         {0x0a, 0x00, 0x79, 0xbb},
1481         {0x0b, 0x00, 0x04, 0xbb},
1482         {0x0c, 0x00, 0x5c, 0xbb},
1483         {0x0d, 0x00, 0xd9, 0xbb},
1484         {0x0e, 0x00, 0x53, 0xbb},
1485         {0x0f, 0x00, 0x21, 0xbb},
1486         {0x10, 0x00, 0xa4, 0xbb},
1487         {0x11, 0x00, 0xe5, 0xbb},
1488         {0x15, 0x00, 0x00, 0xbb},
1489         {0x16, 0x00, 0x00, 0xbb},
1490         {0x17, 0x00, 0x00, 0xbb},
1491         {0x18, 0x00, 0x00, 0xbb},
1492         {0x19, 0x00, 0x00, 0xbb},
1493         {0x1a, 0x00, 0x00, 0xbb},
1494         {0x1b, 0x00, 0x00, 0xbb},
1495         {0x1c, 0x00, 0x00, 0xbb},
1496         {0x1d, 0x00, 0x00, 0xbb},
1497         {0x1e, 0x00, 0x00, 0xbb},
1498         {0xf0, 0x00, 0x01, 0xbb},
1499         {0x06, 0xe0, 0x0e, 0xbb},
1500         {0x06, 0x60, 0x0e, 0xbb},
1501         {0xb3, 0x5c, 0x01, 0xcc},
1502         {0xf0, 0x00, 0x00, 0xbb},
1503         {0x05, 0x01, 0x13, 0xbb},
1504         {0x06, 0x00, 0x11, 0xbb},
1505         {0x07, 0x00, 0x85, 0xbb},
1506         {0x08, 0x00, 0x27, 0xbb},
1507         {0x20, 0x01, 0x03, 0xbb},
1508         {0x21, 0x80, 0x00, 0xbb},
1509         {0x22, 0x0d, 0x0f, 0xbb},
1510         {0x24, 0x80, 0x00, 0xbb},
1511         {0x59, 0x00, 0xff, 0xbb},
1512         {0xf0, 0x00, 0x02, 0xbb},
1513         {0x39, 0x03, 0x0d, 0xbb},
1514         {0x3a, 0x06, 0x1b, 0xbb},
1515         {0x3b, 0x00, 0x95, 0xbb},
1516         {0x3c, 0x04, 0xdb, 0xbb},
1517         {0x57, 0x02, 0x00, 0xbb},
1518         {0x58, 0x02, 0x66, 0xbb},
1519         {0x59, 0x00, 0xff, 0xbb},
1520         {0x5a, 0x01, 0x33, 0xbb},
1521         {0x5c, 0x12, 0x0d, 0xbb},
1522         {0x5d, 0x16, 0x11, 0xbb},
1523         {0x64, 0x5e, 0x1c, 0xbb},
1524         {0x2f, 0x90, 0x00, 0xbb},
1525         {}
1526 };
1527 static const u8 mi1320_soc_InitSXGA[][4] = {
1528         {0xb3, 0x01, 0x01, 0xcc},
1529         {0xb0, 0x03, 0x19, 0xcc},
1530         {0x00, 0x00, 0x30, 0xdd},
1531         {0xb3, 0x00, 0x64, 0xcc},
1532         {0xb3, 0x00, 0x67, 0xcc},
1533         {0xb3, 0x05, 0x01, 0xcc},
1534         {0xb3, 0x06, 0x01, 0xcc},
1535         {0xb3, 0x08, 0x01, 0xcc},
1536         {0xb3, 0x09, 0x0c, 0xcc},
1537         {0xb3, 0x34, 0x02, 0xcc},
1538         {0xb3, 0x35, 0xc8, 0xcc},
1539         {0xb3, 0x02, 0x00, 0xcc},
1540         {0xb3, 0x03, 0x0a, 0xcc},
1541         {0xb3, 0x04, 0x05, 0xcc},
1542         {0xb3, 0x20, 0x00, 0xcc},
1543         {0xb3, 0x21, 0x00, 0xcc},
1544         {0xb3, 0x22, 0x04, 0xcc},
1545         {0xb3, 0x23, 0x00, 0xcc},
1546         {0xb3, 0x14, 0x00, 0xcc},
1547         {0xb3, 0x15, 0x00, 0xcc},
1548         {0xb3, 0x16, 0x04, 0xcc},
1549         {0xb3, 0x17, 0xff, 0xcc},
1550         {0xb3, 0x00, 0x67, 0xcc},
1551         {0xbc, 0x00, 0x71, 0xcc},
1552         {0xbc, 0x01, 0x01, 0xcc},
1553         {0xb3, 0x5c, 0x01, 0xcc},
1554         {0xf0, 0x00, 0x02, 0xbb},
1555         {0x00, 0x00, 0x30, 0xdd},
1556         {0xc8, 0x9f, 0x0b, 0xbb},
1557         {0x00, 0x00, 0x20, 0xdd},
1558         {0x5b, 0x00, 0x01, 0xbb},
1559         {0x00, 0x00, 0x20, 0xdd},
1560         {0xf0, 0x00, 0x00, 0xbb},
1561         {0x00, 0x00, 0x30, 0xdd},
1562         {0x20, 0x01, 0x03, 0xbb},
1563         {0x00, 0x00, 0x20, 0xdd},
1564         {0xbf, 0xc0, 0x26, 0xcc},
1565         {0xbf, 0xc1, 0x02, 0xcc},
1566         {0xbf, 0xcc, 0x04, 0xcc},
1567         {0xb3, 0x01, 0x41, 0xcc},
1568         {0xf0, 0x00, 0x00, 0xbb},
1569         {0x05, 0x01, 0x78, 0xbb},
1570         {0x06, 0x00, 0x11, 0xbb},
1571         {0x07, 0x01, 0x42, 0xbb},
1572         {0x08, 0x00, 0x11, 0xbb},
1573         {0x20, 0x01, 0x03, 0xbb},
1574         {0x21, 0x80, 0x00, 0xbb},
1575         {0x22, 0x0d, 0x0f, 0xbb},
1576         {0x24, 0x80, 0x00, 0xbb},
1577         {0x59, 0x00, 0xff, 0xbb},
1578         {0xf0, 0x00, 0x02, 0xbb},
1579         {0x39, 0x03, 0xca, 0xbb},
1580         {0x3a, 0x06, 0x80, 0xbb},
1581         {0x3b, 0x01, 0x52, 0xbb},
1582         {0x3c, 0x05, 0x40, 0xbb},
1583         {0x57, 0x01, 0x9c, 0xbb},
1584         {0x58, 0x01, 0xee, 0xbb},
1585         {0x59, 0x00, 0xf0, 0xbb},
1586         {0x5a, 0x01, 0x20, 0xbb},
1587         {0x5c, 0x1d, 0x17, 0xbb},
1588         {0x5d, 0x22, 0x1c, 0xbb},
1589         {0x64, 0x1e, 0x1c, 0xbb},
1590         {0x5b, 0x00, 0x00, 0xbb},
1591         {0xf0, 0x00, 0x02, 0xbb},
1592         {0x22, 0xa0, 0x78, 0xbb},
1593         {0x23, 0xa0, 0x78, 0xbb},
1594         {0x24, 0x7f, 0x00, 0xbb},
1595         {0x28, 0xea, 0x02, 0xbb},
1596         {0x29, 0x86, 0x7a, 0xbb},
1597         {0x5e, 0x52, 0x4c, 0xbb},
1598         {0x5f, 0x20, 0x24, 0xbb},
1599         {0x60, 0x00, 0x02, 0xbb},
1600         {0x02, 0x00, 0xee, 0xbb},
1601         {0x03, 0x39, 0x23, 0xbb},
1602         {0x04, 0x07, 0x24, 0xbb},
1603         {0x09, 0x00, 0xc0, 0xbb},
1604         {0x0a, 0x00, 0x79, 0xbb},
1605         {0x0b, 0x00, 0x04, 0xbb},
1606         {0x0c, 0x00, 0x5c, 0xbb},
1607         {0x0d, 0x00, 0xd9, 0xbb},
1608         {0x0e, 0x00, 0x53, 0xbb},
1609         {0x0f, 0x00, 0x21, 0xbb},
1610         {0x10, 0x00, 0xa4, 0xbb},
1611         {0x11, 0x00, 0xe5, 0xbb},
1612         {0x15, 0x00, 0x00, 0xbb},
1613         {0x16, 0x00, 0x00, 0xbb},
1614         {0x17, 0x00, 0x00, 0xbb},
1615         {0x18, 0x00, 0x00, 0xbb},
1616         {0x19, 0x00, 0x00, 0xbb},
1617         {0x1a, 0x00, 0x00, 0xbb},
1618         {0x1b, 0x00, 0x00, 0xbb},
1619         {0x1c, 0x00, 0x00, 0xbb},
1620         {0x1d, 0x00, 0x00, 0xbb},
1621         {0x1e, 0x00, 0x00, 0xbb},
1622         {0xf0, 0x00, 0x01, 0xbb},
1623         {0x06, 0xe0, 0x0e, 0xbb},
1624         {0x06, 0x60, 0x0e, 0xbb},
1625         {0xb3, 0x5c, 0x01, 0xcc},
1626         {0xf0, 0x00, 0x00, 0xbb},
1627         {0x05, 0x01, 0x13, 0xbb},
1628         {0x06, 0x00, 0x11, 0xbb},
1629         {0x07, 0x00, 0x85, 0xbb},
1630         {0x08, 0x00, 0x27, 0xbb},
1631         {0x20, 0x01, 0x03, 0xbb},
1632         {0x21, 0x80, 0x00, 0xbb},
1633         {0x22, 0x0d, 0x0f, 0xbb},
1634         {0x24, 0x80, 0x00, 0xbb},
1635         {0x59, 0x00, 0xff, 0xbb},
1636         {0xf0, 0x00, 0x02, 0xbb},
1637         {0x39, 0x03, 0x0d, 0xbb},
1638         {0x3a, 0x06, 0x1b, 0xbb},
1639         {0x3b, 0x00, 0x95, 0xbb},
1640         {0x3c, 0x04, 0xdb, 0xbb},
1641         {0x57, 0x02, 0x00, 0xbb},
1642         {0x58, 0x02, 0x66, 0xbb},
1643         {0x59, 0x00, 0xff, 0xbb},
1644         {0x5a, 0x01, 0x33, 0xbb},
1645         {0x5c, 0x12, 0x0d, 0xbb},
1646         {0x5d, 0x16, 0x11, 0xbb},
1647         {0x64, 0x5e, 0x1c, 0xbb},
1648         {}
1649 };
1650 static const __u8 po3130_gamma[17] = {
1651         0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,
1652         0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff
1653 };
1654 static const __u8 po3130_matrix[9] = {
1655         0x5f, 0xec, 0xf5, 0xf1, 0x5a, 0xf5, 0xf1, 0xec, 0x63
1656 };
1657
1658 static const __u8 po3130_initVGA_data[][4] = {
1659         {0xb0, 0x4d, 0x00, 0xcc},       {0xb3, 0x01, 0x01, 0xcc},
1660         {0x00, 0x00, 0x50, 0xdd},       {0xb0, 0x03, 0x01, 0xcc},
1661         {0xb3, 0x00, 0x04, 0xcc},       {0xb3, 0x00, 0x24, 0xcc},
1662         {0xb3, 0x00, 0x25, 0xcc},       {0xb3, 0x08, 0x01, 0xcc},
1663         {0xb3, 0x09, 0x0c, 0xcc},       {0xb3, 0x05, 0x00, 0xcc},
1664         {0xb3, 0x06, 0x01, 0xcc},       {0xb3, 0x03, 0x1a, 0xcc},
1665         {0xb3, 0x04, 0x15, 0xcc},       {0xb3, 0x20, 0x00, 0xcc},
1666         {0xb3, 0x21, 0x00, 0xcc},       {0xb3, 0x22, 0x01, 0xcc},
1667         {0xb3, 0x23, 0xe8, 0xcc},       {0xb8, 0x08, 0xe8, 0xcc},
1668         {0xb3, 0x14, 0x00, 0xcc},       {0xb3, 0x15, 0x00, 0xcc},
1669         {0xb3, 0x16, 0x02, 0xcc},       {0xb3, 0x17, 0x7f, 0xcc},
1670         {0xb3, 0x34, 0x01, 0xcc},       {0xb3, 0x35, 0xf6, 0xcc},
1671         {0xb3, 0x00, 0x27, 0xcc},       {0xbc, 0x00, 0x71, 0xcc},
1672         {0xb8, 0x00, 0x21, 0xcc},       {0xb8, 0x27, 0x20, 0xcc},
1673         {0xb8, 0x01, 0x79, 0xcc},       {0xb8, 0x81, 0x09, 0xcc},
1674         {0xb8, 0x2c, 0x50, 0xcc},       {0xb8, 0x2d, 0xf8, 0xcc},
1675         {0xb8, 0x2e, 0xf8, 0xcc},       {0xb8, 0x2f, 0xf8, 0xcc},
1676         {0xb8, 0x30, 0x50, 0xcc},       {0xb8, 0x31, 0xf8, 0xcc},
1677         {0xb8, 0x32, 0xf8, 0xcc},       {0xb8, 0x33, 0xf8, 0xcc},
1678         {0xb8, 0x34, 0x50, 0xcc},       {0xb8, 0x35, 0x00, 0xcc},
1679         {0xb8, 0x36, 0x00, 0xcc},       {0xb8, 0x37, 0x00, 0xcc},
1680         {0x00, 0x1e, 0xc6, 0xaa},       {0x00, 0x20, 0x44, 0xaa},
1681         {0x00, 0xad, 0x02, 0xaa},       {0x00, 0xae, 0x2c, 0xaa},
1682         {0x00, 0x12, 0x08, 0xaa},       {0x00, 0x17, 0x41, 0xaa},
1683         {0x00, 0x19, 0x41, 0xaa},       {0x00, 0x1e, 0x06, 0xaa},
1684         {0x00, 0x21, 0x00, 0xaa},       {0x00, 0x36, 0xc0, 0xaa},
1685         {0x00, 0x37, 0xc8, 0xaa},       {0x00, 0x3b, 0x36, 0xaa},
1686         {0x00, 0x4b, 0xfe, 0xaa},       {0x00, 0x51, 0x1c, 0xaa},
1687         {0x00, 0x52, 0x01, 0xaa},       {0x00, 0x55, 0x0a, 0xaa},
1688         {0x00, 0x59, 0x02, 0xaa},       {0x00, 0x5a, 0x04, 0xaa},
1689         {0x00, 0x5c, 0x10, 0xaa},       {0x00, 0x5d, 0x10, 0xaa},
1690         {0x00, 0x5e, 0x10, 0xaa},       {0x00, 0x5f, 0x10, 0xaa},
1691         {0x00, 0x61, 0x00, 0xaa},       {0x00, 0x62, 0x18, 0xaa},
1692         {0x00, 0x63, 0x30, 0xaa},       {0x00, 0x70, 0x68, 0xaa},
1693         {0x00, 0x80, 0x71, 0xaa},       {0x00, 0x81, 0x08, 0xaa},
1694         {0x00, 0x82, 0x00, 0xaa},       {0x00, 0x83, 0x55, 0xaa},
1695         {0x00, 0x84, 0x06, 0xaa},       {0x00, 0x85, 0x06, 0xaa},
1696         {0x00, 0x86, 0x13, 0xaa},       {0x00, 0x87, 0x18, 0xaa},
1697         {0x00, 0xaa, 0x3f, 0xaa},       {0x00, 0xab, 0x44, 0xaa},
1698         {0x00, 0xb0, 0x68, 0xaa},       {0x00, 0xb5, 0x10, 0xaa},
1699         {0x00, 0xb8, 0x20, 0xaa},       {0x00, 0xb9, 0xa0, 0xaa},
1700         {0x00, 0xbc, 0x04, 0xaa},       {0x00, 0x8b, 0x40, 0xaa},
1701         {0x00, 0x8c, 0x91, 0xaa},       {0x00, 0x8d, 0x8f, 0xaa},
1702         {0x00, 0x8e, 0x91, 0xaa},       {0x00, 0x8f, 0x43, 0xaa},
1703         {0x00, 0x90, 0x92, 0xaa},       {0x00, 0x91, 0x89, 0xaa},
1704         {0x00, 0x92, 0x9d, 0xaa},       {0x00, 0x93, 0x46, 0xaa},
1705         {0x00, 0xd6, 0x22, 0xaa},       {0x00, 0x73, 0x00, 0xaa},
1706         {0x00, 0x74, 0x10, 0xaa},       {0x00, 0x75, 0x20, 0xaa},
1707         {0x00, 0x76, 0x2b, 0xaa},       {0x00, 0x77, 0x36, 0xaa},
1708         {0x00, 0x78, 0x49, 0xaa},       {0x00, 0x79, 0x5a, 0xaa},
1709         {0x00, 0x7a, 0x7f, 0xaa},       {0x00, 0x7b, 0x9b, 0xaa},
1710         {0x00, 0x7c, 0xba, 0xaa},       {0x00, 0x7d, 0xd4, 0xaa},
1711         {0x00, 0x7e, 0xea, 0xaa},       {0x00, 0xd6, 0x62, 0xaa},
1712         {0x00, 0x73, 0x00, 0xaa},       {0x00, 0x74, 0x10, 0xaa},
1713         {0x00, 0x75, 0x20, 0xaa},       {0x00, 0x76, 0x2b, 0xaa},
1714         {0x00, 0x77, 0x36, 0xaa},       {0x00, 0x78, 0x49, 0xaa},
1715         {0x00, 0x79, 0x5a, 0xaa},       {0x00, 0x7a, 0x7f, 0xaa},
1716         {0x00, 0x7b, 0x9b, 0xaa},       {0x00, 0x7c, 0xba, 0xaa},
1717         {0x00, 0x7d, 0xd4, 0xaa},       {0x00, 0x7e, 0xea, 0xaa},
1718         {0x00, 0xd6, 0xa2, 0xaa},       {0x00, 0x73, 0x00, 0xaa},
1719         {0x00, 0x74, 0x10, 0xaa},       {0x00, 0x75, 0x20, 0xaa},
1720         {0x00, 0x76, 0x2b, 0xaa},       {0x00, 0x77, 0x36, 0xaa},
1721         {0x00, 0x78, 0x49, 0xaa},       {0x00, 0x79, 0x5a, 0xaa},
1722         {0x00, 0x7a, 0x7f, 0xaa},       {0x00, 0x7b, 0x9b, 0xaa},
1723         {0x00, 0x7c, 0xba, 0xaa},       {0x00, 0x7d, 0xd4, 0xaa},
1724         {0x00, 0x7e, 0xea, 0xaa},
1725         {0x00, 0x4c, 0x07, 0xaa},
1726         {0x00, 0x4b, 0xe0, 0xaa},       {0x00, 0x4e, 0x77, 0xaa},
1727         {0x00, 0x59, 0x02, 0xaa},       {0x00, 0x4d, 0x0a, 0xaa},
1728 /*      {0x00, 0xd1, 0x00, 0xaa},       {0x00, 0x20, 0xc4, 0xaa},
1729         {0xb8, 0x8e, 0x00, 0xcc},       {0xb8, 0x8f, 0xff, 0xcc}, */
1730         {0x00, 0xd1, 0x3c, 0xaa},       {0x00, 0x20, 0xc4, 0xaa},
1731         {0xb8, 0x8e, 0x00, 0xcc},       {0xb8, 0x8f, 0xff, 0xcc},
1732         {0xb8, 0xfe, 0x00, 0xcc},       {0xb8, 0xff, 0x28, 0xcc},
1733         {0xb9, 0x00, 0x28, 0xcc},       {0xb9, 0x01, 0x28, 0xcc},
1734         {0xb9, 0x02, 0x28, 0xcc},       {0xb9, 0x03, 0x00, 0xcc},
1735         {0xb9, 0x04, 0x00, 0xcc},       {0xb9, 0x05, 0x3c, 0xcc},
1736         {0xb9, 0x06, 0x3c, 0xcc},       {0xb9, 0x07, 0x3c, 0xcc},
1737         {0xb9, 0x08, 0x3c, 0xcc},       {0x00, 0x05, 0x00, 0xaa},
1738         {0xb3, 0x5c, 0x00, 0xcc},       {0xb3, 0x01, 0x41, 0xcc},
1739         {}
1740 };
1741 static const __u8 po3130_rundata[][4] = {
1742         {0x00, 0x47, 0x45, 0xaa},       {0x00, 0x48, 0x9b, 0xaa},
1743         {0x00, 0x49, 0x3a, 0xaa},       {0x00, 0x4a, 0x01, 0xaa},
1744         {0x00, 0x44, 0x40, 0xaa},
1745 /*      {0x00, 0xd5, 0x7c, 0xaa}, */
1746         {0x00, 0xad, 0x04, 0xaa},       {0x00, 0xae, 0x00, 0xaa},
1747         {0x00, 0xb0, 0x78, 0xaa},       {0x00, 0x98, 0x02, 0xaa},
1748         {0x00, 0x94, 0x25, 0xaa},       {0x00, 0x95, 0x25, 0xaa},
1749         {0x00, 0x59, 0x68, 0xaa},       {0x00, 0x44, 0x20, 0xaa},
1750         {0x00, 0x17, 0x50, 0xaa},       {0x00, 0x19, 0x50, 0xaa},
1751         {0x00, 0xd1, 0x3c, 0xaa},       {0x00, 0xd1, 0x3c, 0xaa},
1752         {0x00, 0x1e, 0x06, 0xaa},       {0x00, 0x1e, 0x06, 0xaa},
1753         {}
1754 };
1755
1756 static const __u8 po3130_initQVGA_data[][4] = {
1757         {0xb0, 0x4d, 0x00, 0xcc},       {0xb3, 0x01, 0x01, 0xcc},
1758         {0x00, 0x00, 0x50, 0xdd},       {0xb0, 0x03, 0x09, 0xcc},
1759         {0xb3, 0x00, 0x04, 0xcc},       {0xb3, 0x00, 0x24, 0xcc},
1760         {0xb3, 0x00, 0x25, 0xcc},       {0xb3, 0x08, 0x01, 0xcc},
1761         {0xb3, 0x09, 0x0c, 0xcc},       {0xb3, 0x05, 0x00, 0xcc},
1762         {0xb3, 0x06, 0x01, 0xcc},       {0xb3, 0x03, 0x1a, 0xcc},
1763         {0xb3, 0x04, 0x15, 0xcc},       {0xb3, 0x20, 0x00, 0xcc},
1764         {0xb3, 0x21, 0x00, 0xcc},       {0xb3, 0x22, 0x01, 0xcc},
1765         {0xb3, 0x23, 0xe0, 0xcc},       {0xb8, 0x08, 0xe0, 0xcc},
1766         {0xb3, 0x14, 0x00, 0xcc},       {0xb3, 0x15, 0x00, 0xcc},
1767         {0xb3, 0x16, 0x02, 0xcc},       {0xb3, 0x17, 0x7f, 0xcc},
1768         {0xb3, 0x34, 0x01, 0xcc},       {0xb3, 0x35, 0xf6, 0xcc},
1769         {0xb3, 0x00, 0x27, 0xcc},       {0xbc, 0x00, 0xd1, 0xcc},
1770         {0xb8, 0x00, 0x21, 0xcc},       {0xb8, 0x27, 0x20, 0xcc},
1771         {0xb8, 0x01, 0x79, 0xcc},       {0xb8, 0x81, 0x09, 0xcc},
1772         {0xb8, 0x2c, 0x50, 0xcc},       {0xb8, 0x2d, 0xf8, 0xcc},
1773         {0xb8, 0x2e, 0xf8, 0xcc},       {0xb8, 0x2f, 0xf8, 0xcc},
1774         {0xb8, 0x30, 0x50, 0xcc},       {0xb8, 0x31, 0xf8, 0xcc},
1775         {0xb8, 0x32, 0xf8, 0xcc},       {0xb8, 0x33, 0xf8, 0xcc},
1776         {0xb8, 0x34, 0x50, 0xcc},       {0xb8, 0x35, 0x00, 0xcc},
1777         {0xb8, 0x36, 0x00, 0xcc},       {0xb8, 0x37, 0x00, 0xcc},
1778         {0x00, 0x1e, 0xc6, 0xaa},       {0x00, 0x20, 0x44, 0xaa},
1779         {0x00, 0xad, 0x02, 0xaa},       {0x00, 0xae, 0x2c, 0xaa},
1780         {0x00, 0x12, 0x08, 0xaa},       {0x00, 0x17, 0x41, 0xaa},
1781         {0x00, 0x19, 0x41, 0xaa},       {0x00, 0x1e, 0x06, 0xaa},
1782         {0x00, 0x21, 0x00, 0xaa},       {0x00, 0x36, 0xc0, 0xaa},
1783         {0x00, 0x37, 0xc8, 0xaa},       {0x00, 0x3b, 0x36, 0xaa},
1784         {0x00, 0x4b, 0xfe, 0xaa},       {0x00, 0x51, 0x1c, 0xaa},
1785         {0x00, 0x52, 0x01, 0xaa},       {0x00, 0x55, 0x0a, 0xaa},
1786         {0x00, 0x59, 0x6f, 0xaa},       {0x00, 0x5a, 0x04, 0xaa},
1787         {0x00, 0x5c, 0x10, 0xaa},       {0x00, 0x5d, 0x10, 0xaa},
1788         {0x00, 0x5e, 0x10, 0xaa},       {0x00, 0x5f, 0x10, 0xaa},
1789         {0x00, 0x61, 0x00, 0xaa},       {0x00, 0x62, 0x18, 0xaa},
1790         {0x00, 0x63, 0x30, 0xaa},       {0x00, 0x70, 0x68, 0xaa},
1791         {0x00, 0x80, 0x71, 0xaa},       {0x00, 0x81, 0x08, 0xaa},
1792         {0x00, 0x82, 0x00, 0xaa},       {0x00, 0x83, 0x55, 0xaa},
1793         {0x00, 0x84, 0x06, 0xaa},       {0x00, 0x85, 0x06, 0xaa},
1794         {0x00, 0x86, 0x13, 0xaa},       {0x00, 0x87, 0x18, 0xaa},
1795         {0x00, 0xaa, 0x3f, 0xaa},       {0x00, 0xab, 0x44, 0xaa},
1796         {0x00, 0xb0, 0x68, 0xaa},       {0x00, 0xb5, 0x10, 0xaa},
1797         {0x00, 0xb8, 0x20, 0xaa},       {0x00, 0xb9, 0xa0, 0xaa},
1798         {0x00, 0xbc, 0x04, 0xaa},       {0x00, 0x8b, 0x40, 0xaa},
1799         {0x00, 0x8c, 0x91, 0xaa},       {0x00, 0x8d, 0x8f, 0xaa},
1800         {0x00, 0x8e, 0x91, 0xaa},       {0x00, 0x8f, 0x43, 0xaa},
1801         {0x00, 0x90, 0x92, 0xaa},       {0x00, 0x91, 0x89, 0xaa},
1802         {0x00, 0x92, 0x9d, 0xaa},       {0x00, 0x93, 0x46, 0xaa},
1803         {0x00, 0xd6, 0x22, 0xaa},       {0x00, 0x73, 0x00, 0xaa},
1804         {0x00, 0x74, 0x10, 0xaa},       {0x00, 0x75, 0x20, 0xaa},
1805         {0x00, 0x76, 0x2b, 0xaa},       {0x00, 0x77, 0x36, 0xaa},
1806         {0x00, 0x78, 0x49, 0xaa},       {0x00, 0x79, 0x5a, 0xaa},
1807         {0x00, 0x7a, 0x7f, 0xaa},       {0x00, 0x7b, 0x9b, 0xaa},
1808         {0x00, 0x7c, 0xba, 0xaa},       {0x00, 0x7d, 0xd4, 0xaa},
1809         {0x00, 0x7e, 0xea, 0xaa},       {0x00, 0xd6, 0x62, 0xaa},
1810         {0x00, 0x73, 0x00, 0xaa},       {0x00, 0x74, 0x10, 0xaa},
1811         {0x00, 0x75, 0x20, 0xaa},       {0x00, 0x76, 0x2b, 0xaa},
1812         {0x00, 0x77, 0x36, 0xaa},       {0x00, 0x78, 0x49, 0xaa},
1813         {0x00, 0x79, 0x5a, 0xaa},       {0x00, 0x7a, 0x7f, 0xaa},
1814         {0x00, 0x7b, 0x9b, 0xaa},       {0x00, 0x7c, 0xba, 0xaa},
1815         {0x00, 0x7d, 0xd4, 0xaa},       {0x00, 0x7e, 0xea, 0xaa},
1816         {0x00, 0xd6, 0xa2, 0xaa},       {0x00, 0x73, 0x00, 0xaa},
1817         {0x00, 0x74, 0x10, 0xaa},       {0x00, 0x75, 0x20, 0xaa},
1818         {0x00, 0x76, 0x2b, 0xaa},       {0x00, 0x77, 0x36, 0xaa},
1819         {0x00, 0x78, 0x49, 0xaa},       {0x00, 0x79, 0x5a, 0xaa},
1820         {0x00, 0x7a, 0x7f, 0xaa},       {0x00, 0x7b, 0x9b, 0xaa},
1821         {0x00, 0x7c, 0xba, 0xaa},       {0x00, 0x7d, 0xd4, 0xaa},
1822         {0x00, 0x7e, 0xea, 0xaa},       {0x00, 0x4c, 0x07, 0xaa},
1823         {0x00, 0x4b, 0xe0, 0xaa},       {0x00, 0x4e, 0x77, 0xaa},
1824         {0x00, 0x59, 0x66, 0xaa},       {0x00, 0x4d, 0x0a, 0xaa},
1825         {0x00, 0xd1, 0x00, 0xaa},       {0x00, 0x20, 0xc4, 0xaa},
1826         {0xb8, 0x8e, 0x00, 0xcc},       {0xb8, 0x8f, 0xff, 0xcc},
1827         {0xb8, 0xfe, 0x00, 0xcc},       {0xb8, 0xff, 0x28, 0xcc},
1828         {0xb9, 0x00, 0x28, 0xcc},       {0xb9, 0x01, 0x28, 0xcc},
1829         {0xb9, 0x02, 0x28, 0xcc},       {0xb9, 0x03, 0x00, 0xcc},
1830         {0xb9, 0x04, 0x00, 0xcc},       {0xb9, 0x05, 0x3c, 0xcc},
1831         {0xb9, 0x06, 0x3c, 0xcc},       {0xb9, 0x07, 0x3c, 0xcc},
1832         {0xb9, 0x08, 0x3c, 0xcc},       {0xbc, 0x02, 0x18, 0xcc},
1833         {0xbc, 0x03, 0x50, 0xcc},       {0xbc, 0x04, 0x18, 0xcc},
1834         {0xbc, 0x05, 0x00, 0xcc},       {0xbc, 0x06, 0x00, 0xcc},
1835         {0xbc, 0x08, 0x30, 0xcc},       {0xbc, 0x09, 0x40, 0xcc},
1836         {0xbc, 0x0a, 0x10, 0xcc},       {0xbc, 0x0b, 0x00, 0xcc},
1837         {0xbc, 0x0c, 0x00, 0xcc},       {0x00, 0x05, 0x00, 0xaa},
1838         {0xb3, 0x5c, 0x00, 0xcc},       {0xb3, 0x01, 0x41, 0xcc},
1839         {}
1840 };
1841
1842 static const __u8 hv7131r_gamma[17] = {
1843 /*      0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,
1844  *      0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff */
1845         0x04, 0x1a, 0x36, 0x55, 0x6f, 0x87, 0x9d, 0xb0, 0xc1,
1846         0xcf, 0xda, 0xe4, 0xec, 0xf3, 0xf8, 0xfd, 0xff
1847 };
1848 static const __u8 hv7131r_matrix[9] = {
1849         0x5f, 0xec, 0xf5, 0xf1, 0x5a, 0xf5, 0xf1, 0xec, 0x63
1850 };
1851 static const __u8 hv7131r_initVGA_data[][4] = {
1852         {0xb0, 0x4d, 0x00, 0xcc},       {0xb3, 0x01, 0x01, 0xcc},
1853         {0x00, 0x00, 0x50, 0xdd},       {0xb0, 0x03, 0x01, 0xcc},
1854         {0xb3, 0x00, 0x24, 0xcc},
1855         {0xb3, 0x00, 0x25, 0xcc},       {0xb3, 0x08, 0x01, 0xcc},
1856         {0xb3, 0x09, 0x0c, 0xcc},       {0xb3, 0x05, 0x00, 0xcc},
1857         {0xb3, 0x06, 0x01, 0xcc},
1858         {0xb3, 0x01, 0x45, 0xcc},       {0xb3, 0x03, 0x0b, 0xcc},
1859         {0xb3, 0x04, 0x05, 0xcc},       {0xb3, 0x20, 0x00, 0xcc},
1860         {0xb3, 0x21, 0x00, 0xcc},
1861         {0xb3, 0x22, 0x01, 0xcc},       {0xb3, 0x23, 0xe0, 0xcc},
1862         {0xb3, 0x14, 0x00, 0xcc},       {0xb3, 0x15, 0x00, 0xcc},
1863         {0xb3, 0x16, 0x02, 0xcc},
1864         {0xb3, 0x17, 0x7f, 0xcc},       {0xb3, 0x34, 0x01, 0xcc},
1865         {0xb3, 0x35, 0x91, 0xcc},       {0xb3, 0x00, 0x27, 0xcc},
1866         {0xbc, 0x00, 0x73, 0xcc},
1867         {0xb8, 0x00, 0x23, 0xcc},       {0x00, 0x01, 0x0c, 0xaa},
1868         {0x00, 0x14, 0x01, 0xaa},       {0x00, 0x15, 0xe6, 0xaa},
1869         {0x00, 0x16, 0x02, 0xaa},
1870         {0x00, 0x17, 0x86, 0xaa},       {0x00, 0x23, 0x00, 0xaa},
1871         {0x00, 0x25, 0x09, 0xaa},       {0x00, 0x26, 0x27, 0xaa},
1872         {0x00, 0x27, 0xc0, 0xaa},
1873         {0xb8, 0x2c, 0x60, 0xcc},       {0xb8, 0x2d, 0xf8, 0xcc},
1874         {0xb8, 0x2e, 0xf8, 0xcc},       {0xb8, 0x2f, 0xf8, 0xcc},
1875         {0xb8, 0x30, 0x50, 0xcc},
1876         {0xb8, 0x31, 0xf8, 0xcc},       {0xb8, 0x32, 0xf8, 0xcc},
1877         {0xb8, 0x33, 0xf8, 0xcc},       {0xb8, 0x34, 0x65, 0xcc},
1878         {0xb8, 0x35, 0x00, 0xcc},
1879         {0xb8, 0x36, 0x00, 0xcc},       {0xb8, 0x37, 0x00, 0xcc},
1880         {0xb8, 0x27, 0x20, 0xcc},       {0xb8, 0x01, 0x7d, 0xcc},
1881         {0xb8, 0x81, 0x09, 0xcc},
1882         {0xb3, 0x01, 0x41, 0xcc},       {0xb8, 0xfe, 0x00, 0xcc},
1883         {0xb8, 0xff, 0x28, 0xcc},       {0xb9, 0x00, 0x28, 0xcc},
1884         {0xb9, 0x01, 0x28, 0xcc},
1885         {0xb9, 0x02, 0x28, 0xcc},       {0xb9, 0x03, 0x00, 0xcc},
1886         {0xb9, 0x04, 0x00, 0xcc},       {0xb9, 0x05, 0x3c, 0xcc},
1887         {0xb9, 0x06, 0x3c, 0xcc},
1888         {0xb9, 0x07, 0x3c, 0xcc},       {0xb9, 0x08, 0x3c, 0xcc},
1889         {0xb8, 0x8e, 0x00, 0xcc},       {0xb8, 0x8f, 0xff, 0xcc},
1890         {0x00, 0x30, 0x18, 0xaa},
1891         {}
1892 };
1893
1894 static const __u8 hv7131r_initQVGA_data[][4] = {
1895         {0xb0, 0x4d, 0x00, 0xcc},       {0xb3, 0x01, 0x01, 0xcc},
1896         {0x00, 0x00, 0x50, 0xdd},       {0xb0, 0x03, 0x01, 0xcc},
1897         {0xb3, 0x00, 0x24, 0xcc},
1898         {0xb3, 0x00, 0x25, 0xcc},       {0xb3, 0x08, 0x01, 0xcc},
1899         {0xb3, 0x09, 0x0c, 0xcc},       {0xb3, 0x05, 0x00, 0xcc},
1900         {0xb3, 0x06, 0x01, 0xcc},
1901         {0xb3, 0x03, 0x0b, 0xcc},       {0xb3, 0x04, 0x05, 0xcc},
1902         {0xb3, 0x20, 0x00, 0xcc},       {0xb3, 0x21, 0x00, 0xcc},
1903         {0xb3, 0x22, 0x01, 0xcc},
1904         {0xb3, 0x23, 0xe0, 0xcc},       {0xb3, 0x14, 0x00, 0xcc},
1905         {0xb3, 0x15, 0x00, 0xcc},       {0xb3, 0x16, 0x02, 0xcc},
1906         {0xb3, 0x17, 0x7f, 0xcc},
1907         {0xb3, 0x34, 0x01, 0xcc},       {0xb3, 0x35, 0x91, 0xcc},
1908         {0xb3, 0x00, 0x27, 0xcc},       {0xbc, 0x00, 0xd1, 0xcc},
1909         {0xb8, 0x00, 0x21, 0xcc},
1910         {0x00, 0x01, 0x0c, 0xaa},       {0x00, 0x14, 0x01, 0xaa},
1911         {0x00, 0x15, 0xe6, 0xaa},       {0x00, 0x16, 0x02, 0xaa},
1912         {0x00, 0x17, 0x86, 0xaa},
1913         {0x00, 0x23, 0x00, 0xaa},       {0x00, 0x25, 0x01, 0xaa},
1914         {0x00, 0x26, 0xd4, 0xaa},       {0x00, 0x27, 0xc0, 0xaa},
1915         {0xbc, 0x02, 0x08, 0xcc},
1916         {0xbc, 0x03, 0x70, 0xcc},       {0xbc, 0x04, 0x08, 0xcc},
1917         {0xbc, 0x05, 0x00, 0xcc},       {0xbc, 0x06, 0x00, 0xcc},
1918         {0xbc, 0x08, 0x3c, 0xcc},
1919         {0xbc, 0x09, 0x40, 0xcc},       {0xbc, 0x0a, 0x04, 0xcc},
1920         {0xbc, 0x0b, 0x00, 0xcc},       {0xbc, 0x0c, 0x00, 0xcc},
1921         {0xb8, 0xfe, 0x02, 0xcc},
1922         {0xb8, 0xff, 0x07, 0xcc},       {0xb9, 0x00, 0x14, 0xcc},
1923         {0xb9, 0x01, 0x14, 0xcc},       {0xb9, 0x02, 0x14, 0xcc},
1924         {0xb9, 0x03, 0x00, 0xcc},
1925         {0xb9, 0x04, 0x02, 0xcc},       {0xb9, 0x05, 0x05, 0xcc},
1926         {0xb9, 0x06, 0x0f, 0xcc},       {0xb9, 0x07, 0x0f, 0xcc},
1927         {0xb9, 0x08, 0x0f, 0xcc},
1928         {0xb8, 0x2c, 0x60, 0xcc},       {0xb8, 0x2d, 0xf8, 0xcc},
1929         {0xb8, 0x2e, 0xf8, 0xcc},       {0xb8, 0x2f, 0xf8, 0xcc},
1930         {0xb8, 0x30, 0x50, 0xcc},
1931         {0xb8, 0x31, 0xf8, 0xcc},       {0xb8, 0x32, 0xf8, 0xcc},
1932         {0xb8, 0x33, 0xf8, 0xcc},
1933         {0xb8, 0x34, 0x65, 0xcc},       {0xb8, 0x35, 0x00, 0xcc},
1934         {0xb8, 0x36, 0x00, 0xcc},       {0xb8, 0x37, 0x00, 0xcc},
1935         {0xb8, 0x27, 0x20, 0xcc},
1936         {0xb8, 0x01, 0x7d, 0xcc},       {0xb8, 0x81, 0x09, 0xcc},
1937         {0xb3, 0x01, 0x41, 0xcc},       {0xb8, 0xfe, 0x00, 0xcc},
1938         {0xb8, 0xff, 0x28, 0xcc},
1939         {0xb9, 0x00, 0x28, 0xcc},       {0xb9, 0x01, 0x28, 0xcc},
1940         {0xb9, 0x02, 0x28, 0xcc},       {0xb9, 0x03, 0x00, 0xcc},
1941         {0xb9, 0x04, 0x00, 0xcc},
1942         {0xb9, 0x05, 0x3c, 0xcc},       {0xb9, 0x06, 0x3c, 0xcc},
1943         {0xb9, 0x07, 0x3c, 0xcc},       {0xb9, 0x08, 0x3c, 0xcc},
1944         {0xb8, 0x8e, 0x00, 0xcc},
1945         {0xb8, 0x8f, 0xff, 0xcc},       {0x00, 0x30, 0x18, 0xaa},
1946         {}
1947 };
1948
1949 static const __u8 ov7660_gamma[17] = {
1950         0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,
1951         0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff
1952 };
1953 static const __u8 ov7660_matrix[9] = {
1954         0x5a, 0xf0, 0xf6, 0xf3, 0x57, 0xf6, 0xf3, 0xef, 0x62
1955 };
1956 static const __u8 ov7660_initVGA_data[][4] = {
1957         {0xb0, 0x4d, 0x00, 0xcc},       {0xb3, 0x01, 0x01, 0xcc},
1958         {0x00, 0x00, 0x50, 0xdd},
1959         {0xb0, 0x03, 0x01, 0xcc},
1960         {0xb3, 0x00, 0x21, 0xcc},       {0xb3, 0x00, 0x26, 0xcc},
1961         {0xb3, 0x05, 0x01, 0xcc},
1962         {0xb3, 0x06, 0x03, 0xcc},
1963         {0xb3, 0x03, 0x1f, 0xcc},       {0xb3, 0x04, 0x05, 0xcc},
1964         {0xb3, 0x05, 0x00, 0xcc},
1965         {0xb3, 0x06, 0x01, 0xcc},
1966         {0xb3, 0x15, 0x00, 0xcc},/* 0xb315  <-0 href startl */
1967         {0xb3, 0x16, 0x02, 0xcc},       {0xb3, 0x17, 0x7f, 0xcc},
1968         {0xb3, 0x21, 0x00, 0xcc},
1969         {0xb3, 0x23, 0xe0, 0xcc},       {0xb3, 0x1d, 0x01, 0xcc},
1970         {0xb3, 0x1f, 0x02, 0xcc},
1971         {0xb3, 0x34, 0x01, 0xcc},
1972         {0xb3, 0x35, 0xa1, 0xcc},       {0xb3, 0x00, 0x26, 0xcc},
1973         {0xb8, 0x00, 0x33, 0xcc}, /* 13 */
1974         {0xb8, 0x01, 0x7d, 0xcc},
1975         {0xbc, 0x00, 0x73, 0xcc},       {0xb8, 0x81, 0x09, 0xcc},
1976         {0xb8, 0x27, 0x20, 0xcc},
1977         {0xb8, 0x8f, 0x50, 0xcc},
1978         {0x00, 0x01, 0x80, 0xaa},       {0x00, 0x02, 0x80, 0xaa},
1979         {0x00, 0x12, 0x80, 0xaa},
1980         {0x00, 0x12, 0x05, 0xaa},
1981         {0x00, 0x1e, 0x01, 0xaa},       /* MVFP */
1982         {0x00, 0x3d, 0x40, 0xaa}, /* 0x3d <-40 gamma 01 */
1983         {0x00, 0x41, 0x00, 0xaa}, /* edge 00 */
1984         {0x00, 0x0d, 0x48, 0xaa},       {0x00, 0x0e, 0x04, 0xaa},
1985         {0x00, 0x13, 0xa7, 0xaa},
1986         {0x00, 0x40, 0xc1, 0xaa},       {0x00, 0x35, 0x00, 0xaa},
1987         {0x00, 0x36, 0x00, 0xaa},
1988         {0x00, 0x3c, 0x68, 0xaa},       {0x00, 0x1b, 0x05, 0xaa},
1989         {0x00, 0x39, 0x43, 0xaa},
1990         {0x00, 0x8d, 0xcf, 0xaa},
1991         {0x00, 0x8b, 0xcc, 0xaa},       {0x00, 0x8c, 0xcc, 0xaa},
1992         {0x00, 0x0f, 0x62, 0xaa},
1993         {0x00, 0x35, 0x84, 0xaa},
1994         {0x00, 0x3b, 0x08, 0xaa}, /* 0 * Nightframe 1/4 + 50Hz -> 0xC8 */
1995         {0x00, 0x3a, 0x00, 0xaa}, /* mx change yuyv format 00, 04, 01; 08, 0c*/
1996         {0x00, 0x14, 0x2a, 0xaa}, /* agc ampli */
1997         {0x00, 0x9e, 0x40, 0xaa},       {0xb8, 0x8f, 0x50, 0xcc},
1998         {0x00, 0x01, 0x80, 0xaa},
1999         {0x00, 0x02, 0x80, 0xaa},
2000         {0xb8, 0xfe, 0x00, 0xcc},       {0xb8, 0xff, 0x28, 0xcc},
2001         {0xb9, 0x00, 0x28, 0xcc},
2002         {0xb9, 0x01, 0x28, 0xcc},       {0xb9, 0x02, 0x28, 0xcc},
2003         {0xb9, 0x03, 0x00, 0xcc},
2004         {0xb9, 0x04, 0x00, 0xcc},
2005         {0xb9, 0x05, 0x3c, 0xcc},       {0xb9, 0x06, 0x3c, 0xcc},
2006         {0xb9, 0x07, 0x3c, 0xcc},
2007         {0xb9, 0x08, 0x3c, 0xcc},
2008
2009         {0xb8, 0x8e, 0x00, 0xcc},       {0xb8, 0x8f, 0xff, 0xcc},
2010
2011         {0x00, 0x29, 0x3c, 0xaa},       {0xb3, 0x01, 0x45, 0xcc},
2012         {}
2013 };
2014 static const __u8 ov7660_initQVGA_data[][4] = {
2015         {0xb0, 0x4d, 0x00, 0xcc},       {0xb3, 0x01, 0x01, 0xcc},
2016         {0x00, 0x00, 0x50, 0xdd},       {0xb0, 0x03, 0x01, 0xcc},
2017         {0xb3, 0x00, 0x21, 0xcc},       {0xb3, 0x00, 0x26, 0xcc},
2018         {0xb3, 0x05, 0x01, 0xcc},       {0xb3, 0x06, 0x03, 0xcc},
2019         {0xb3, 0x03, 0x1f, 0xcc},       {0xb3, 0x04, 0x05, 0xcc},
2020         {0xb3, 0x05, 0x00, 0xcc},       {0xb3, 0x06, 0x01, 0xcc},
2021         {0xb3, 0x15, 0x00, 0xcc},/* 0xb315  <-0 href startl */
2022         {0xb3, 0x16, 0x02, 0xcc},       {0xb3, 0x17, 0x7f, 0xcc},
2023         {0xb3, 0x21, 0x00, 0xcc},
2024         {0xb3, 0x23, 0xe0, 0xcc},       {0xb3, 0x1d, 0x01, 0xcc},
2025         {0xb3, 0x1f, 0x02, 0xcc},       {0xb3, 0x34, 0x01, 0xcc},
2026         {0xb3, 0x35, 0xa1, 0xcc},       {0xb3, 0x00, 0x26, 0xcc},
2027         {0xb8, 0x00, 0x33, 0xcc}, /* 13 */
2028         {0xb8, 0x01, 0x7d, 0xcc},
2029 /* sizer */
2030         {0xbc, 0x00, 0xd3, 0xcc},
2031         {0xb8, 0x81, 0x09, 0xcc},       {0xb8, 0x81, 0x09, 0xcc},
2032         {0xb8, 0x27, 0x20, 0xcc},       {0xb8, 0x8f, 0x50, 0xcc},
2033         {0x00, 0x01, 0x80, 0xaa},       {0x00, 0x02, 0x80, 0xaa},
2034         {0x00, 0x12, 0x80, 0xaa},       {0x00, 0x12, 0x05, 0xaa},
2035         {0x00, 0x1e, 0x01, 0xaa},       /* MVFP */
2036         {0x00, 0x3d, 0x40, 0xaa}, /* 0x3d <-40 gamma 01 */
2037         {0x00, 0x41, 0x00, 0xaa}, /* edge 00 */
2038         {0x00, 0x0d, 0x48, 0xaa},       {0x00, 0x0e, 0x04, 0xaa},
2039         {0x00, 0x13, 0xa7, 0xaa},
2040         {0x00, 0x40, 0xc1, 0xaa},       {0x00, 0x35, 0x00, 0xaa},
2041         {0x00, 0x36, 0x00, 0xaa},
2042         {0x00, 0x3c, 0x68, 0xaa},       {0x00, 0x1b, 0x05, 0xaa},
2043         {0x00, 0x39, 0x43, 0xaa},       {0x00, 0x8d, 0xcf, 0xaa},
2044         {0x00, 0x8b, 0xcc, 0xaa},       {0x00, 0x8c, 0xcc, 0xaa},
2045         {0x00, 0x0f, 0x62, 0xaa},       {0x00, 0x35, 0x84, 0xaa},
2046         {0x00, 0x3b, 0x08, 0xaa}, /* 0  * Nightframe 1/4 + 50Hz -> 0xC8 */
2047         {0x00, 0x3a, 0x00, 0xaa}, /* mx change yuyv format 00, 04, 01; 08, 0c*/
2048         {0x00, 0x14, 0x2a, 0xaa}, /* agc ampli */
2049         {0x00, 0x9e, 0x40, 0xaa},       {0xb8, 0x8f, 0x50, 0xcc},
2050         {0x00, 0x01, 0x80, 0xaa},
2051         {0x00, 0x02, 0x80, 0xaa},
2052 /* sizer filters */
2053         {0xbc, 0x02, 0x08, 0xcc},
2054         {0xbc, 0x03, 0x70, 0xcc},
2055         {0xb8, 0x35, 0x00, 0xcc},
2056         {0xb8, 0x36, 0x00, 0xcc},
2057         {0xb8, 0x37, 0x00, 0xcc},
2058         {0xbc, 0x04, 0x08, 0xcc},
2059         {0xbc, 0x05, 0x00, 0xcc},
2060         {0xbc, 0x06, 0x00, 0xcc},
2061         {0xbc, 0x08, 0x3c, 0xcc},
2062         {0xbc, 0x09, 0x40, 0xcc},
2063         {0xbc, 0x0a, 0x04, 0xcc},
2064         {0xbc, 0x0b, 0x00, 0xcc},
2065         {0xbc, 0x0c, 0x00, 0xcc},
2066 /* */
2067         {0xb8, 0xfe, 0x00, 0xcc},
2068         {0xb8, 0xff, 0x28, 0xcc},
2069 /* */
2070         {0xb9, 0x00, 0x28, 0xcc},       {0xb9, 0x01, 0x28, 0xcc},
2071         {0xb9, 0x02, 0x28, 0xcc},       {0xb9, 0x03, 0x00, 0xcc},
2072         {0xb9, 0x04, 0x00, 0xcc},       {0xb9, 0x05, 0x3c, 0xcc},
2073         {0xb9, 0x06, 0x3c, 0xcc},       {0xb9, 0x07, 0x3c, 0xcc},
2074         {0xb9, 0x08, 0x3c, 0xcc},
2075 /* */
2076         {0xb8, 0x8e, 0x00, 0xcc},
2077         {0xb8, 0x8f, 0xff, 0xcc}, /* ff */
2078         {0x00, 0x29, 0x3c, 0xaa},
2079         {0xb3, 0x01, 0x45, 0xcc}, /* 45 */
2080         {}
2081 };
2082
2083 static const __u8 ov7660_50HZ[][4] = {
2084         {0x00, 0x3b, 0x08, 0xaa},
2085         {0x00, 0x9d, 0x40, 0xaa},
2086         {0x00, 0x13, 0xa7, 0xaa},
2087         {}
2088 };
2089
2090 static const __u8 ov7660_60HZ[][4] = {
2091         {0x00, 0x3b, 0x00, 0xaa},
2092         {0x00, 0x9e, 0x40, 0xaa},
2093         {0x00, 0x13, 0xa7, 0xaa},
2094         {}
2095 };
2096
2097 static const __u8 ov7660_NoFliker[][4] = {
2098         {0x00, 0x13, 0x87, 0xaa},
2099         {}
2100 };
2101
2102 static const __u8 ov7670_initVGA_JPG[][4] = {
2103         {0xb3, 0x01, 0x05, 0xcc},
2104         {0x00, 0x00, 0x30, 0xdd},       {0xb0, 0x03, 0x19, 0xcc},
2105         {0x00, 0x00, 0x10, 0xdd},
2106         {0xb0, 0x04, 0x02, 0xcc},       {0x00, 0x00, 0x10, 0xdd},
2107         {0xb3, 0x00, 0x66, 0xcc},       {0xb3, 0x00, 0x67, 0xcc},
2108         {0xb3, 0x35, 0xa1, 0xcc},       {0xb3, 0x34, 0x01, 0xcc},
2109         {0xb3, 0x05, 0x01, 0xcc},       {0xb3, 0x06, 0x01, 0xcc},
2110         {0xb3, 0x08, 0x01, 0xcc},       {0xb3, 0x09, 0x0c, 0xcc},
2111         {0xb3, 0x02, 0x02, 0xcc},       {0xb3, 0x03, 0x1f, 0xcc},
2112         {0xb3, 0x14, 0x00, 0xcc},       {0xb3, 0x15, 0x00, 0xcc},
2113         {0xb3, 0x16, 0x02, 0xcc},       {0xb3, 0x17, 0x7f, 0xcc},
2114         {0xb3, 0x04, 0x05, 0xcc},       {0xb3, 0x20, 0x00, 0xcc},
2115         {0xb3, 0x21, 0x00, 0xcc},       {0xb3, 0x22, 0x01, 0xcc},
2116         {0xb3, 0x23, 0xe0, 0xcc},       {0xbc, 0x00, 0x41, 0xcc},
2117         {0xbc, 0x01, 0x01, 0xcc},       {0x00, 0x12, 0x80, 0xaa},
2118         {0x00, 0x00, 0x20, 0xdd},       {0x00, 0x12, 0x00, 0xaa},
2119         {0x00, 0x11, 0x40, 0xaa},       {0x00, 0x6b, 0x0a, 0xaa},
2120         {0x00, 0x3a, 0x04, 0xaa},       {0x00, 0x40, 0xc0, 0xaa},
2121         {0x00, 0x8c, 0x00, 0xaa},       {0x00, 0x7a, 0x29, 0xaa},
2122         {0x00, 0x7b, 0x0e, 0xaa},       {0x00, 0x7c, 0x1a, 0xaa},
2123         {0x00, 0x7d, 0x31, 0xaa},       {0x00, 0x7e, 0x53, 0xaa},
2124         {0x00, 0x7f, 0x60, 0xaa},       {0x00, 0x80, 0x6b, 0xaa},
2125         {0x00, 0x81, 0x73, 0xaa},       {0x00, 0x82, 0x7b, 0xaa},
2126         {0x00, 0x83, 0x82, 0xaa},       {0x00, 0x84, 0x89, 0xaa},
2127         {0x00, 0x85, 0x96, 0xaa},       {0x00, 0x86, 0xa1, 0xaa},
2128         {0x00, 0x87, 0xb7, 0xaa},       {0x00, 0x88, 0xcc, 0xaa},
2129         {0x00, 0x89, 0xe1, 0xaa},       {0x00, 0x13, 0xe0, 0xaa},
2130         {0x00, 0x00, 0x00, 0xaa},       {0x00, 0x10, 0x00, 0xaa},
2131         {0x00, 0x0d, 0x40, 0xaa},       {0x00, 0x14, 0x28, 0xaa},
2132         {0x00, 0xa5, 0x05, 0xaa},       {0x00, 0xab, 0x07, 0xaa},
2133         {0x00, 0x24, 0x95, 0xaa},       {0x00, 0x25, 0x33, 0xaa},
2134         {0x00, 0x26, 0xe3, 0xaa},       {0x00, 0x9f, 0x88, 0xaa},
2135         {0x00, 0xa0, 0x78, 0xaa},       {0x00, 0x55, 0x90, 0xaa},
2136         {0x00, 0xa1, 0x03, 0xaa},       {0x00, 0xa6, 0xe0, 0xaa},
2137         {0x00, 0xa7, 0xd8, 0xaa},       {0x00, 0xa8, 0xf0, 0xaa},
2138         {0x00, 0xa9, 0x90, 0xaa},       {0x00, 0xaa, 0x14, 0xaa},
2139         {0x00, 0x13, 0xe5, 0xaa},       {0x00, 0x0e, 0x61, 0xaa},
2140         {0x00, 0x0f, 0x4b, 0xaa},       {0x00, 0x16, 0x02, 0xaa},
2141         {0x00, 0x1e, 0x07, 0xaa},       /* MVFP */
2142         {0x00, 0x21, 0x02, 0xaa},
2143         {0x00, 0x22, 0x91, 0xaa},       {0x00, 0x29, 0x07, 0xaa},
2144         {0x00, 0x33, 0x0b, 0xaa},       {0x00, 0x35, 0x0b, 0xaa},
2145         {0x00, 0x37, 0x1d, 0xaa},       {0x00, 0x38, 0x71, 0xaa},
2146         {0x00, 0x39, 0x2a, 0xaa},       {0x00, 0x3c, 0x78, 0xaa},
2147         {0x00, 0x4d, 0x40, 0xaa},       {0x00, 0x4e, 0x20, 0xaa},
2148         {0x00, 0x74, 0x19, 0xaa},       {0x00, 0x8d, 0x4f, 0xaa},
2149         {0x00, 0x8e, 0x00, 0xaa},       {0x00, 0x8f, 0x00, 0xaa},
2150         {0x00, 0x90, 0x00, 0xaa},       {0x00, 0x91, 0x00, 0xaa},
2151         {0x00, 0x96, 0x00, 0xaa},       {0x00, 0x9a, 0x80, 0xaa},
2152         {0x00, 0xb0, 0x84, 0xaa},       {0x00, 0xb1, 0x0c, 0xaa},
2153         {0x00, 0xb2, 0x0e, 0xaa},       {0x00, 0xb3, 0x82, 0xaa},
2154         {0x00, 0xb8, 0x0a, 0xaa},       {0x00, 0x43, 0x14, 0xaa},
2155         {0x00, 0x44, 0xf0, 0xaa},       {0x00, 0x45, 0x45, 0xaa},
2156         {0x00, 0x46, 0x63, 0xaa},       {0x00, 0x47, 0x2d, 0xaa},
2157         {0x00, 0x48, 0x46, 0xaa},       {0x00, 0x59, 0x88, 0xaa},
2158         {0x00, 0x5a, 0xa0, 0xaa},       {0x00, 0x5b, 0xc6, 0xaa},
2159         {0x00, 0x5c, 0x7d, 0xaa},       {0x00, 0x5d, 0x5f, 0xaa},
2160         {0x00, 0x5e, 0x19, 0xaa},       {0x00, 0x6c, 0x0a, 0xaa},
2161         {0x00, 0x6d, 0x55, 0xaa},       {0x00, 0x6e, 0x11, 0xaa},
2162         {0x00, 0x6f, 0x9e, 0xaa},       {0x00, 0x69, 0x00, 0xaa},
2163         {0x00, 0x6a, 0x40, 0xaa},       {0x00, 0x01, 0x40, 0xaa},
2164         {0x00, 0x02, 0x40, 0xaa},       {0x00, 0x13, 0xe7, 0xaa},
2165         {0x00, 0x5f, 0xf0, 0xaa},       {0x00, 0x60, 0xf0, 0xaa},
2166         {0x00, 0x61, 0xf0, 0xaa},       {0x00, 0x27, 0xa0, 0xaa},
2167         {0x00, 0x28, 0x80, 0xaa},       {0x00, 0x2c, 0x90, 0xaa},
2168         {0x00, 0x4f, 0x66, 0xaa},       {0x00, 0x50, 0x66, 0xaa},
2169         {0x00, 0x51, 0x00, 0xaa},       {0x00, 0x52, 0x22, 0xaa},
2170         {0x00, 0x53, 0x5e, 0xaa},       {0x00, 0x54, 0x80, 0xaa},
2171         {0x00, 0x58, 0x9e, 0xaa},       {0x00, 0x41, 0x08, 0xaa},
2172         {0x00, 0x3f, 0x00, 0xaa},       {0x00, 0x75, 0x85, 0xaa},
2173         {0x00, 0x76, 0xe1, 0xaa},       {0x00, 0x4c, 0x00, 0xaa},
2174         {0x00, 0x77, 0x0a, 0xaa},       {0x00, 0x3d, 0x88, 0xaa},
2175         {0x00, 0x4b, 0x09, 0xaa},       {0x00, 0xc9, 0x60, 0xaa},
2176         {0x00, 0x41, 0x38, 0xaa},       {0x00, 0x62, 0x30, 0xaa},
2177         {0x00, 0x63, 0x30, 0xaa},       {0x00, 0x64, 0x08, 0xaa},
2178         {0x00, 0x94, 0x07, 0xaa},       {0x00, 0x95, 0x0b, 0xaa},
2179         {0x00, 0x65, 0x00, 0xaa},       {0x00, 0x66, 0x05, 0xaa},
2180         {0x00, 0x56, 0x50, 0xaa},       {0x00, 0x34, 0x11, 0xaa},
2181         {0x00, 0xa4, 0x88, 0xaa},       {0x00, 0x96, 0x00, 0xaa},
2182         {0x00, 0x97, 0x30, 0xaa},       {0x00, 0x98, 0x20, 0xaa},
2183         {0x00, 0x99, 0x30, 0xaa},       {0x00, 0x9a, 0x84, 0xaa},
2184         {0x00, 0x9b, 0x29, 0xaa},       {0x00, 0x9c, 0x03, 0xaa},
2185         {0x00, 0x78, 0x04, 0xaa},       {0x00, 0x79, 0x01, 0xaa},
2186         {0x00, 0xc8, 0xf0, 0xaa},       {0x00, 0x79, 0x0f, 0xaa},
2187         {0x00, 0xc8, 0x00, 0xaa},       {0x00, 0x79, 0x10, 0xaa},
2188         {0x00, 0xc8, 0x7e, 0xaa},       {0x00, 0x79, 0x0a, 0xaa},
2189         {0x00, 0xc8, 0x80, 0xaa},       {0x00, 0x79, 0x0b, 0xaa},
2190         {0x00, 0xc8, 0x01, 0xaa},       {0x00, 0x79, 0x0c, 0xaa},
2191         {0x00, 0xc8, 0x0f, 0xaa},       {0x00, 0x79, 0x0d, 0xaa},
2192         {0x00, 0xc8, 0x20, 0xaa},       {0x00, 0x79, 0x09, 0xaa},
2193         {0x00, 0xc8, 0x80, 0xaa},       {0x00, 0x79, 0x02, 0xaa},
2194         {0x00, 0xc8, 0xc0, 0xaa},       {0x00, 0x79, 0x03, 0xaa},
2195         {0x00, 0xc8, 0x40, 0xaa},       {0x00, 0x79, 0x05, 0xaa},
2196         {0x00, 0xc8, 0x30, 0xaa},       {0x00, 0x79, 0x26, 0xaa},
2197         {0x00, 0x11, 0x40, 0xaa},       {0x00, 0x3a, 0x04, 0xaa},
2198         {0x00, 0x12, 0x00, 0xaa},       {0x00, 0x40, 0xc0, 0xaa},
2199         {0x00, 0x8c, 0x00, 0xaa},       {0x00, 0x17, 0x14, 0xaa},
2200         {0x00, 0x18, 0x02, 0xaa},       {0x00, 0x32, 0x92, 0xaa},
2201         {0x00, 0x19, 0x02, 0xaa},       {0x00, 0x1a, 0x7a, 0xaa},
2202         {0x00, 0x03, 0x0a, 0xaa},       {0x00, 0x0c, 0x00, 0xaa},
2203         {0x00, 0x3e, 0x00, 0xaa},       {0x00, 0x70, 0x3a, 0xaa},
2204         {0x00, 0x71, 0x35, 0xaa},       {0x00, 0x72, 0x11, 0xaa},
2205         {0x00, 0x73, 0xf0, 0xaa},       {0x00, 0xa2, 0x02, 0xaa},
2206         {0x00, 0xb1, 0x00, 0xaa},       {0x00, 0xb1, 0x0c, 0xaa},
2207         {0x00, 0x1e, 0x37, 0xaa},       /* MVFP */
2208         {0x00, 0xaa, 0x14, 0xaa},
2209         {0x00, 0x24, 0x80, 0xaa},       {0x00, 0x25, 0x74, 0xaa},
2210         {0x00, 0x26, 0xd3, 0xaa},       {0x00, 0x0d, 0x00, 0xaa},
2211         {0x00, 0x14, 0x18, 0xaa},       {0x00, 0x9d, 0x99, 0xaa},
2212         {0x00, 0x9e, 0x7f, 0xaa},       {0x00, 0x64, 0x08, 0xaa},
2213         {0x00, 0x94, 0x07, 0xaa},       {0x00, 0x95, 0x06, 0xaa},
2214         {0x00, 0x66, 0x05, 0xaa},       {0x00, 0x41, 0x08, 0xaa},
2215         {0x00, 0x3f, 0x00, 0xaa},       {0x00, 0x75, 0x07, 0xaa},
2216         {0x00, 0x76, 0xe1, 0xaa},       {0x00, 0x4c, 0x00, 0xaa},
2217         {0x00, 0x77, 0x00, 0xaa},       {0x00, 0x3d, 0xc2, 0xaa},
2218         {0x00, 0x4b, 0x09, 0xaa},       {0x00, 0xc9, 0x60, 0xaa},
2219         {0x00, 0x41, 0x38, 0xaa},       {0xb6, 0x00, 0x00, 0xcc},
2220         {0xb6, 0x03, 0x02, 0xcc},       {0xb6, 0x02, 0x80, 0xcc},
2221         {0xb6, 0x05, 0x01, 0xcc},       {0xb6, 0x04, 0xe0, 0xcc},
2222         {0xb6, 0x12, 0xf8, 0xcc},       {0xb6, 0x13, 0x13, 0xcc},
2223         {0xb6, 0x18, 0x02, 0xcc},       {0xb6, 0x17, 0x58, 0xcc},
2224         {0xb6, 0x16, 0x00, 0xcc},       {0xb6, 0x22, 0x12, 0xcc},
2225         {0xb6, 0x23, 0x0b, 0xcc},       {0xbf, 0xc0, 0x39, 0xcc},
2226         {0xbf, 0xc1, 0x04, 0xcc},       {0xbf, 0xcc, 0x00, 0xcc},
2227         {0xb3, 0x5c, 0x01, 0xcc},       {0xb3, 0x01, 0x45, 0xcc},
2228         {0x00, 0x77, 0x05, 0xaa},
2229         {},
2230 };
2231
2232 static const __u8 ov7670_initQVGA_JPG[][4] = {
2233         {0xb3, 0x01, 0x05, 0xcc},       {0x00, 0x00, 0x30, 0xdd},
2234         {0xb0, 0x03, 0x19, 0xcc},       {0x00, 0x00, 0x10, 0xdd},
2235         {0xb0, 0x04, 0x02, 0xcc},       {0x00, 0x00, 0x10, 0xdd},
2236         {0xb3, 0x00, 0x66, 0xcc},       {0xb3, 0x00, 0x67, 0xcc},
2237         {0xb3, 0x35, 0xa1, 0xcc},       {0xb3, 0x34, 0x01, 0xcc},
2238         {0xb3, 0x05, 0x01, 0xcc},       {0xb3, 0x06, 0x01, 0xcc},
2239         {0xb3, 0x08, 0x01, 0xcc},       {0xb3, 0x09, 0x0c, 0xcc},
2240         {0xb3, 0x02, 0x02, 0xcc},       {0xb3, 0x03, 0x1f, 0xcc},
2241         {0xb3, 0x14, 0x00, 0xcc},       {0xb3, 0x15, 0x00, 0xcc},
2242         {0xb3, 0x16, 0x02, 0xcc},       {0xb3, 0x17, 0x7f, 0xcc},
2243         {0xb3, 0x04, 0x05, 0xcc},       {0xb3, 0x20, 0x00, 0xcc},
2244         {0xb3, 0x21, 0x00, 0xcc},       {0xb3, 0x22, 0x01, 0xcc},
2245         {0xb3, 0x23, 0xe0, 0xcc},       {0xbc, 0x00, 0xd1, 0xcc},
2246         {0xbc, 0x01, 0x01, 0xcc},       {0x00, 0x12, 0x80, 0xaa},
2247         {0x00, 0x00, 0x20, 0xdd},       {0x00, 0x12, 0x00, 0xaa},
2248         {0x00, 0x11, 0x40, 0xaa},       {0x00, 0x6b, 0x0a, 0xaa},
2249         {0x00, 0x3a, 0x04, 0xaa},       {0x00, 0x40, 0xc0, 0xaa},
2250         {0x00, 0x8c, 0x00, 0xaa},       {0x00, 0x7a, 0x29, 0xaa},
2251         {0x00, 0x7b, 0x0e, 0xaa},       {0x00, 0x7c, 0x1a, 0xaa},
2252         {0x00, 0x7d, 0x31, 0xaa},       {0x00, 0x7e, 0x53, 0xaa},
2253         {0x00, 0x7f, 0x60, 0xaa},       {0x00, 0x80, 0x6b, 0xaa},
2254         {0x00, 0x81, 0x73, 0xaa},       {0x00, 0x82, 0x7b, 0xaa},
2255         {0x00, 0x83, 0x82, 0xaa},       {0x00, 0x84, 0x89, 0xaa},
2256         {0x00, 0x85, 0x96, 0xaa},       {0x00, 0x86, 0xa1, 0xaa},
2257         {0x00, 0x87, 0xb7, 0xaa},       {0x00, 0x88, 0xcc, 0xaa},
2258         {0x00, 0x89, 0xe1, 0xaa},       {0x00, 0x13, 0xe0, 0xaa},
2259         {0x00, 0x00, 0x00, 0xaa},       {0x00, 0x10, 0x00, 0xaa},
2260         {0x00, 0x0d, 0x40, 0xaa},       {0x00, 0x14, 0x28, 0xaa},
2261         {0x00, 0xa5, 0x05, 0xaa},       {0x00, 0xab, 0x07, 0xaa},
2262         {0x00, 0x24, 0x95, 0xaa},       {0x00, 0x25, 0x33, 0xaa},
2263         {0x00, 0x26, 0xe3, 0xaa},       {0x00, 0x9f, 0x88, 0xaa},
2264         {0x00, 0xa0, 0x78, 0xaa},       {0x00, 0x55, 0x90, 0xaa},
2265         {0x00, 0xa1, 0x03, 0xaa},       {0x00, 0xa6, 0xe0, 0xaa},
2266         {0x00, 0xa7, 0xd8, 0xaa},       {0x00, 0xa8, 0xf0, 0xaa},
2267         {0x00, 0xa9, 0x90, 0xaa},       {0x00, 0xaa, 0x14, 0xaa},
2268         {0x00, 0x13, 0xe5, 0xaa},       {0x00, 0x0e, 0x61, 0xaa},
2269         {0x00, 0x0f, 0x4b, 0xaa},       {0x00, 0x16, 0x02, 0xaa},
2270         {0x00, 0x1e, 0x07, 0xaa},       /* MVFP */
2271         {0x00, 0x21, 0x02, 0xaa},
2272         {0x00, 0x22, 0x91, 0xaa},       {0x00, 0x29, 0x07, 0xaa},
2273         {0x00, 0x33, 0x0b, 0xaa},       {0x00, 0x35, 0x0b, 0xaa},
2274         {0x00, 0x37, 0x1d, 0xaa},       {0x00, 0x38, 0x71, 0xaa},
2275         {0x00, 0x39, 0x2a, 0xaa},       {0x00, 0x3c, 0x78, 0xaa},
2276         {0x00, 0x4d, 0x40, 0xaa},       {0x00, 0x4e, 0x20, 0xaa},
2277         {0x00, 0x74, 0x19, 0xaa},       {0x00, 0x8d, 0x4f, 0xaa},
2278         {0x00, 0x8e, 0x00, 0xaa},       {0x00, 0x8f, 0x00, 0xaa},
2279         {0x00, 0x90, 0x00, 0xaa},       {0x00, 0x91, 0x00, 0xaa},
2280         {0x00, 0x96, 0x00, 0xaa},       {0x00, 0x9a, 0x80, 0xaa},
2281         {0x00, 0xb0, 0x84, 0xaa},       {0x00, 0xb1, 0x0c, 0xaa},
2282         {0x00, 0xb2, 0x0e, 0xaa},       {0x00, 0xb3, 0x82, 0xaa},
2283         {0x00, 0xb8, 0x0a, 0xaa},       {0x00, 0x43, 0x14, 0xaa},
2284         {0x00, 0x44, 0xf0, 0xaa},       {0x00, 0x45, 0x45, 0xaa},
2285         {0x00, 0x46, 0x63, 0xaa},       {0x00, 0x47, 0x2d, 0xaa},
2286         {0x00, 0x48, 0x46, 0xaa},       {0x00, 0x59, 0x88, 0xaa},
2287         {0x00, 0x5a, 0xa0, 0xaa},       {0x00, 0x5b, 0xc6, 0xaa},
2288         {0x00, 0x5c, 0x7d, 0xaa},       {0x00, 0x5d, 0x5f, 0xaa},
2289         {0x00, 0x5e, 0x19, 0xaa},       {0x00, 0x6c, 0x0a, 0xaa},
2290         {0x00, 0x6d, 0x55, 0xaa},       {0x00, 0x6e, 0x11, 0xaa},
2291         {0x00, 0x6f, 0x9e, 0xaa},       {0x00, 0x69, 0x00, 0xaa},
2292         {0x00, 0x6a, 0x40, 0xaa},       {0x00, 0x01, 0x40, 0xaa},
2293         {0x00, 0x02, 0x40, 0xaa},       {0x00, 0x13, 0xe7, 0xaa},
2294         {0x00, 0x5f, 0xf0, 0xaa},       {0x00, 0x60, 0xf0, 0xaa},
2295         {0x00, 0x61, 0xf0, 0xaa},       {0x00, 0x27, 0xa0, 0xaa},
2296         {0x00, 0x28, 0x80, 0xaa},       {0x00, 0x2c, 0x90, 0xaa},
2297         {0x00, 0x4f, 0x66, 0xaa},       {0x00, 0x50, 0x66, 0xaa},
2298         {0x00, 0x51, 0x00, 0xaa},       {0x00, 0x52, 0x22, 0xaa},
2299         {0x00, 0x53, 0x5e, 0xaa},       {0x00, 0x54, 0x80, 0xaa},
2300         {0x00, 0x58, 0x9e, 0xaa},       {0x00, 0x41, 0x08, 0xaa},
2301         {0x00, 0x3f, 0x00, 0xaa},       {0x00, 0x75, 0x85, 0xaa},
2302         {0x00, 0x76, 0xe1, 0xaa},       {0x00, 0x4c, 0x00, 0xaa},
2303         {0x00, 0x77, 0x0a, 0xaa},       {0x00, 0x3d, 0x88, 0xaa},
2304         {0x00, 0x4b, 0x09, 0xaa},       {0x00, 0xc9, 0x60, 0xaa},
2305         {0x00, 0x41, 0x38, 0xaa},       {0x00, 0x62, 0x30, 0xaa},
2306         {0x00, 0x63, 0x30, 0xaa},       {0x00, 0x64, 0x08, 0xaa},
2307         {0x00, 0x94, 0x07, 0xaa},       {0x00, 0x95, 0x0b, 0xaa},
2308         {0x00, 0x65, 0x00, 0xaa},       {0x00, 0x66, 0x05, 0xaa},
2309         {0x00, 0x56, 0x50, 0xaa},       {0x00, 0x34, 0x11, 0xaa},
2310         {0x00, 0xa4, 0x88, 0xaa},       {0x00, 0x96, 0x00, 0xaa},
2311         {0x00, 0x97, 0x30, 0xaa},       {0x00, 0x98, 0x20, 0xaa},
2312         {0x00, 0x99, 0x30, 0xaa},       {0x00, 0x9a, 0x84, 0xaa},
2313         {0x00, 0x9b, 0x29, 0xaa},       {0x00, 0x9c, 0x03, 0xaa},
2314         {0x00, 0x78, 0x04, 0xaa},       {0x00, 0x79, 0x01, 0xaa},
2315         {0x00, 0xc8, 0xf0, 0xaa},       {0x00, 0x79, 0x0f, 0xaa},
2316         {0x00, 0xc8, 0x00, 0xaa},       {0x00, 0x79, 0x10, 0xaa},
2317         {0x00, 0xc8, 0x7e, 0xaa},       {0x00, 0x79, 0x0a, 0xaa},
2318         {0x00, 0xc8, 0x80, 0xaa},       {0x00, 0x79, 0x0b, 0xaa},
2319         {0x00, 0xc8, 0x01, 0xaa},       {0x00, 0x79, 0x0c, 0xaa},
2320         {0x00, 0xc8, 0x0f, 0xaa},       {0x00, 0x79, 0x0d, 0xaa},
2321         {0x00, 0xc8, 0x20, 0xaa},       {0x00, 0x79, 0x09, 0xaa},
2322         {0x00, 0xc8, 0x80, 0xaa},       {0x00, 0x79, 0x02, 0xaa},
2323         {0x00, 0xc8, 0xc0, 0xaa},       {0x00, 0x79, 0x03, 0xaa},
2324         {0x00, 0xc8, 0x40, 0xaa},       {0x00, 0x79, 0x05, 0xaa},
2325         {0x00, 0xc8, 0x30, 0xaa},       {0x00, 0x79, 0x26, 0xaa},
2326         {0x00, 0x11, 0x40, 0xaa},       {0x00, 0x3a, 0x04, 0xaa},
2327         {0x00, 0x12, 0x00, 0xaa},       {0x00, 0x40, 0xc0, 0xaa},
2328         {0x00, 0x8c, 0x00, 0xaa},       {0x00, 0x17, 0x14, 0xaa},
2329         {0x00, 0x18, 0x02, 0xaa},       {0x00, 0x32, 0x92, 0xaa},
2330         {0x00, 0x19, 0x02, 0xaa},       {0x00, 0x1a, 0x7a, 0xaa},
2331         {0x00, 0x03, 0x0a, 0xaa},       {0x00, 0x0c, 0x00, 0xaa},
2332         {0x00, 0x3e, 0x00, 0xaa},       {0x00, 0x70, 0x3a, 0xaa},
2333         {0x00, 0x71, 0x35, 0xaa},       {0x00, 0x72, 0x11, 0xaa},
2334         {0x00, 0x73, 0xf0, 0xaa},       {0x00, 0xa2, 0x02, 0xaa},
2335         {0x00, 0xb1, 0x00, 0xaa},       {0x00, 0xb1, 0x0c, 0xaa},
2336         {0x00, 0x1e, 0x37, 0xaa},       /* MVFP */
2337         {0x00, 0xaa, 0x14, 0xaa},
2338         {0x00, 0x24, 0x80, 0xaa},       {0x00, 0x25, 0x74, 0xaa},
2339         {0x00, 0x26, 0xd3, 0xaa},       {0x00, 0x0d, 0x00, 0xaa},
2340         {0x00, 0x14, 0x18, 0xaa},       {0x00, 0x9d, 0x99, 0xaa},
2341         {0x00, 0x9e, 0x7f, 0xaa},       {0x00, 0x64, 0x08, 0xaa},
2342         {0x00, 0x94, 0x07, 0xaa},       {0x00, 0x95, 0x06, 0xaa},
2343         {0x00, 0x66, 0x05, 0xaa},       {0x00, 0x41, 0x08, 0xaa},
2344         {0x00, 0x3f, 0x00, 0xaa},       {0x00, 0x75, 0x07, 0xaa},
2345         {0x00, 0x76, 0xe1, 0xaa},       {0x00, 0x4c, 0x00, 0xaa},
2346         {0x00, 0x77, 0x00, 0xaa},       {0x00, 0x3d, 0xc2, 0xaa},
2347         {0x00, 0x4b, 0x09, 0xaa},       {0x00, 0xc9, 0x60, 0xaa},
2348         {0x00, 0x41, 0x38, 0xaa},       {0xb6, 0x00, 0x00, 0xcc},
2349         {0xb6, 0x03, 0x01, 0xcc},       {0xb6, 0x02, 0x40, 0xcc},
2350         {0xb6, 0x05, 0x00, 0xcc},       {0xb6, 0x04, 0xf0, 0xcc},
2351         {0xb6, 0x12, 0xf8, 0xcc},       {0xb6, 0x13, 0x21, 0xcc},
2352         {0xb6, 0x18, 0x00, 0xcc},       {0xb6, 0x17, 0x96, 0xcc},
2353         {0xb6, 0x16, 0x00, 0xcc},       {0xb6, 0x22, 0x12, 0xcc},
2354         {0xb6, 0x23, 0x0b, 0xcc},       {0xbf, 0xc0, 0x39, 0xcc},
2355         {0xbf, 0xc1, 0x04, 0xcc},       {0xbf, 0xcc, 0x00, 0xcc},
2356         {0xbc, 0x02, 0x18, 0xcc},       {0xbc, 0x03, 0x50, 0xcc},
2357         {0xbc, 0x04, 0x18, 0xcc},       {0xbc, 0x05, 0x00, 0xcc},
2358         {0xbc, 0x06, 0x00, 0xcc},       {0xbc, 0x08, 0x30, 0xcc},
2359         {0xbc, 0x09, 0x40, 0xcc},       {0xbc, 0x0a, 0x10, 0xcc},
2360         {0xbc, 0x0b, 0x00, 0xcc},       {0xbc, 0x0c, 0x00, 0xcc},
2361         {0xb3, 0x5c, 0x01, 0xcc},       {0xb3, 0x01, 0x45, 0xcc},
2362         {0x00, 0x77, 0x05, 0xaa },
2363         {},
2364 };
2365
2366 /* PO1200 - values from usbvm326.inf and ms-win trace */
2367 static const __u8 po1200_gamma[17] = {
2368         0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,
2369         0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff
2370 };
2371 static const __u8 po1200_matrix[9] = {
2372         0x60, 0xf9, 0xe5, 0xe7, 0x50, 0x05, 0xf3, 0xe6, 0x5e
2373 };
2374 static const __u8 po1200_initVGA_data[][4] = {
2375         {0xb0, 0x03, 0x19, 0xcc},       /* reset? */
2376         {0xb0, 0x03, 0x19, 0xcc},
2377 /*      {0x00, 0x00, 0x33, 0xdd}, */
2378         {0xb0, 0x04, 0x02, 0xcc},
2379         {0xb0, 0x02, 0x02, 0xcc},
2380         {0xb3, 0x5d, 0x00, 0xcc},
2381         {0xb3, 0x01, 0x01, 0xcc},
2382         {0xb3, 0x00, 0x64, 0xcc},
2383         {0xb3, 0x00, 0x65, 0xcc},
2384         {0xb3, 0x05, 0x01, 0xcc},
2385         {0xb3, 0x06, 0x01, 0xcc},
2386         {0xb3, 0x5c, 0x01, 0xcc},
2387         {0xb3, 0x08, 0x01, 0xcc},
2388         {0xb3, 0x09, 0x0c, 0xcc},
2389         {0xb3, 0x00, 0x67, 0xcc},
2390         {0xb3, 0x02, 0xb2, 0xcc},
2391         {0xb3, 0x03, 0x18, 0xcc},
2392         {0xb3, 0x04, 0x15, 0xcc},
2393         {0xb3, 0x20, 0x00, 0xcc},
2394         {0xb3, 0x21, 0x00, 0xcc},
2395         {0xb3, 0x22, 0x02, 0xcc},
2396         {0xb3, 0x23, 0x58, 0xcc},
2397         {0xb3, 0x14, 0x00, 0xcc},
2398         {0xb3, 0x15, 0x00, 0xcc},
2399         {0xb3, 0x16, 0x03, 0xcc},
2400         {0xb3, 0x17, 0x1f, 0xcc},
2401         {0xbc, 0x00, 0x71, 0xcc},
2402         {0xbc, 0x01, 0x01, 0xcc},
2403         {0xb0, 0x54, 0x13, 0xcc},
2404         {0xb3, 0x00, 0x67, 0xcc},
2405         {0xb3, 0x34, 0x01, 0xcc},
2406         {0xb3, 0x35, 0xdc, 0xcc},
2407         {0x00, 0x03, 0x00, 0xaa},
2408         {0x00, 0x12, 0x05, 0xaa},
2409         {0x00, 0x13, 0x02, 0xaa},
2410         {0x00, 0x1e, 0xc6, 0xaa},       /* h/v flip */
2411         {0x00, 0x21, 0x00, 0xaa},
2412         {0x00, 0x25, 0x02, 0xaa},
2413         {0x00, 0x3c, 0x4f, 0xaa},
2414         {0x00, 0x3f, 0xe0, 0xaa},
2415         {0x00, 0x42, 0xff, 0xaa},
2416         {0x00, 0x45, 0x34, 0xaa},
2417         {0x00, 0x55, 0xfe, 0xaa},
2418         {0x00, 0x59, 0xd3, 0xaa},
2419         {0x00, 0x5e, 0x04, 0xaa},
2420         {0x00, 0x61, 0xb8, 0xaa},       /* sharpness */
2421         {0x00, 0x62, 0x02, 0xaa},
2422         {0x00, 0xa7, 0x31, 0xaa},
2423         {0x00, 0xa9, 0x66, 0xaa},
2424         {0x00, 0xb0, 0x00, 0xaa},
2425         {0x00, 0xb1, 0x00, 0xaa},
2426         {0x00, 0xb3, 0x11, 0xaa},
2427         {0x00, 0xb6, 0x26, 0xaa},
2428         {0x00, 0xb7, 0x20, 0xaa},
2429         {0x00, 0xba, 0x04, 0xaa},
2430         {0x00, 0x88, 0x42, 0xaa},
2431         {0x00, 0x89, 0x9a, 0xaa},
2432         {0x00, 0x8a, 0x88, 0xaa},
2433         {0x00, 0x8b, 0x8e, 0xaa},
2434         {0x00, 0x8c, 0x3e, 0xaa},
2435         {0x00, 0x8d, 0x90, 0xaa},
2436         {0x00, 0x8e, 0x87, 0xaa},
2437         {0x00, 0x8f, 0x96, 0xaa},
2438         {0x00, 0x90, 0x3d, 0xaa},
2439         {0x00, 0x64, 0x00, 0xaa},
2440         {0x00, 0x65, 0x10, 0xaa},
2441         {0x00, 0x66, 0x20, 0xaa},
2442         {0x00, 0x67, 0x2b, 0xaa},
2443         {0x00, 0x68, 0x36, 0xaa},
2444         {0x00, 0x69, 0x49, 0xaa},
2445         {0x00, 0x6a, 0x5a, 0xaa},
2446         {0x00, 0x6b, 0x7f, 0xaa},
2447         {0x00, 0x6c, 0x9b, 0xaa},
2448         {0x00, 0x6d, 0xba, 0xaa},
2449         {0x00, 0x6e, 0xd4, 0xaa},
2450         {0x00, 0x6f, 0xea, 0xaa},
2451         {0x00, 0x70, 0x00, 0xaa},
2452         {0x00, 0x71, 0x10, 0xaa},
2453         {0x00, 0x72, 0x20, 0xaa},
2454         {0x00, 0x73, 0x2b, 0xaa},
2455         {0x00, 0x74, 0x36, 0xaa},
2456         {0x00, 0x75, 0x49, 0xaa},
2457         {0x00, 0x76, 0x5a, 0xaa},
2458         {0x00, 0x77, 0x7f, 0xaa},
2459         {0x00, 0x78, 0x9b, 0xaa},
2460         {0x00, 0x79, 0xba, 0xaa},
2461         {0x00, 0x7a, 0xd4, 0xaa},
2462         {0x00, 0x7b, 0xea, 0xaa},
2463         {0x00, 0x7c, 0x00, 0xaa},
2464         {0x00, 0x7d, 0x10, 0xaa},
2465         {0x00, 0x7e, 0x20, 0xaa},
2466         {0x00, 0x7f, 0x2b, 0xaa},
2467         {0x00, 0x80, 0x36, 0xaa},
2468         {0x00, 0x81, 0x49, 0xaa},
2469         {0x00, 0x82, 0x5a, 0xaa},
2470         {0x00, 0x83, 0x7f, 0xaa},
2471         {0x00, 0x84, 0x9b, 0xaa},
2472         {0x00, 0x85, 0xba, 0xaa},
2473         {0x00, 0x86, 0xd4, 0xaa},
2474         {0x00, 0x87, 0xea, 0xaa},
2475         {0x00, 0x57, 0x2a, 0xaa},
2476         {0x00, 0x03, 0x01, 0xaa},
2477         {0x00, 0x04, 0x10, 0xaa},
2478         {0x00, 0x05, 0x10, 0xaa},
2479         {0x00, 0x06, 0x10, 0xaa},
2480         {0x00, 0x07, 0x10, 0xaa},
2481         {0x00, 0x08, 0x13, 0xaa},
2482         {0x00, 0x0a, 0x00, 0xaa},
2483         {0x00, 0x0b, 0x10, 0xaa},
2484         {0x00, 0x0c, 0x20, 0xaa},
2485         {0x00, 0x0d, 0x18, 0xaa},
2486         {0x00, 0x22, 0x01, 0xaa},
2487         {0x00, 0x23, 0x60, 0xaa},
2488         {0x00, 0x25, 0x08, 0xaa},
2489         {0x00, 0x26, 0x82, 0xaa},
2490         {0x00, 0x2e, 0x0f, 0xaa},
2491         {0x00, 0x2f, 0x1e, 0xaa},
2492         {0x00, 0x30, 0x2d, 0xaa},
2493         {0x00, 0x31, 0x3c, 0xaa},
2494         {0x00, 0x32, 0x4b, 0xaa},
2495         {0x00, 0x33, 0x5a, 0xaa},
2496         {0x00, 0x34, 0x69, 0xaa},
2497         {0x00, 0x35, 0x78, 0xaa},
2498         {0x00, 0x36, 0x87, 0xaa},
2499         {0x00, 0x37, 0x96, 0xaa},
2500         {0x00, 0x38, 0xa5, 0xaa},
2501         {0x00, 0x39, 0xb4, 0xaa},
2502         {0x00, 0x3a, 0xc3, 0xaa},
2503         {0x00, 0x3b, 0xd2, 0xaa},
2504         {0x00, 0x3c, 0xe1, 0xaa},
2505         {0x00, 0x3e, 0xff, 0xaa},
2506         {0x00, 0x3f, 0xff, 0xaa},
2507         {0x00, 0x40, 0xff, 0xaa},
2508         {0x00, 0x41, 0xff, 0xaa},
2509         {0x00, 0x42, 0xff, 0xaa},
2510         {0x00, 0x43, 0xff, 0xaa},
2511         {0x00, 0x03, 0x00, 0xaa},
2512         {0x00, 0x03, 0x00, 0xaa},
2513         {0x00, 0x20, 0xc4, 0xaa},
2514         {0x00, 0x13, 0x03, 0xaa},
2515         {0x00, 0x3c, 0x50, 0xaa},
2516         {0x00, 0x61, 0x6a, 0xaa},       /* sharpness? */
2517         {0x00, 0x51, 0x5b, 0xaa},
2518         {0x00, 0x52, 0x91, 0xaa},
2519         {0x00, 0x53, 0x4c, 0xaa},
2520         {0x00, 0x54, 0x50, 0xaa},
2521         {0x00, 0x56, 0x02, 0xaa},
2522         {0xb6, 0x00, 0x00, 0xcc},
2523         {0xb6, 0x03, 0x03, 0xcc},
2524         {0xb6, 0x02, 0x20, 0xcc},
2525         {0xb6, 0x05, 0x02, 0xcc},
2526         {0xb6, 0x04, 0x58, 0xcc},
2527         {0xb6, 0x12, 0xf8, 0xcc},
2528         {0xb6, 0x13, 0x21, 0xcc},
2529         {0xb6, 0x18, 0x03, 0xcc},
2530         {0xb6, 0x17, 0xa9, 0xcc},
2531         {0xb6, 0x16, 0x80, 0xcc},
2532         {0xb6, 0x22, 0x12, 0xcc},
2533         {0xb6, 0x23, 0x0b, 0xcc},
2534         {0xbf, 0xc0, 0x39, 0xcc},
2535         {0xbf, 0xc1, 0x04, 0xcc},
2536         {0xbf, 0xcc, 0x00, 0xcc},
2537         {0xb8, 0x06, 0x20, 0xcc},
2538         {0xb8, 0x07, 0x03, 0xcc},
2539         {0xb8, 0x08, 0x58, 0xcc},
2540         {0xb8, 0x09, 0x02, 0xcc},
2541         {0xb3, 0x01, 0x41, 0xcc},
2542         {0x00, 0x03, 0x00, 0xaa},
2543         {0x00, 0xd9, 0x0f, 0xaa},
2544         {0x00, 0xda, 0xaa, 0xaa},
2545         {0x00, 0xd9, 0x10, 0xaa},
2546         {0x00, 0xda, 0xaa, 0xaa},
2547         {0x00, 0xd9, 0x11, 0xaa},
2548         {0x00, 0xda, 0x00, 0xaa},
2549         {0x00, 0xd9, 0x12, 0xaa},
2550         {0x00, 0xda, 0xff, 0xaa},
2551         {0x00, 0xd9, 0x13, 0xaa},
2552         {0x00, 0xda, 0xff, 0xaa},
2553         {0x00, 0xe8, 0x11, 0xaa},
2554         {0x00, 0xe9, 0x12, 0xaa},
2555         {0x00, 0xea, 0x5c, 0xaa},
2556         {0x00, 0xeb, 0xff, 0xaa},
2557         {0x00, 0xd8, 0x80, 0xaa},
2558         {0x00, 0xe6, 0x02, 0xaa},
2559         {0x00, 0xd6, 0x40, 0xaa},
2560         {0x00, 0xe3, 0x05, 0xaa},
2561         {0x00, 0xe0, 0x40, 0xaa},
2562         {0x00, 0xde, 0x03, 0xaa},
2563         {0x00, 0xdf, 0x03, 0xaa},
2564         {0x00, 0xdb, 0x02, 0xaa},
2565         {0x00, 0xdc, 0x00, 0xaa},
2566         {0x00, 0xdd, 0x03, 0xaa},
2567         {0x00, 0xe1, 0x08, 0xaa},
2568         {0x00, 0xe2, 0x01, 0xaa},
2569         {0x00, 0xd6, 0x40, 0xaa},
2570         {0x00, 0xe4, 0x40, 0xaa},
2571         {0x00, 0xa8, 0x8f, 0xaa},
2572         {0x00, 0xb4, 0x16, 0xaa},
2573         {0xb0, 0x02, 0x06, 0xcc},
2574         {0xb0, 0x18, 0x06, 0xcc},
2575         {0xb0, 0x19, 0x06, 0xcc},
2576         {0xb3, 0x5d, 0x18, 0xcc},
2577         {0xb3, 0x05, 0x00, 0xcc},
2578         {0xb3, 0x06, 0x00, 0xcc},
2579         {0x00, 0xb4, 0x0e, 0xaa},
2580         {0x00, 0xb5, 0x49, 0xaa},
2581         {0x00, 0xb6, 0x1c, 0xaa},
2582         {0x00, 0xb7, 0x96, 0xaa},
2583 /* end of usbvm326.inf - start of ms-win trace */
2584         {0xb6, 0x12, 0xf8, 0xcc},
2585         {0xb6, 0x13, 0x3d, 0xcc},
2586 /*read b306*/
2587         {0x00, 0x03, 0x00, 0xaa},
2588         {0x00, 0x1a, 0x09, 0xaa},
2589         {0x00, 0x1b, 0x8a, 0xaa},
2590 /*read b827*/
2591         {0xb8, 0x27, 0x00, 0xcc},
2592         {0xb8, 0x26, 0x60, 0xcc},
2593         {0xb8, 0x26, 0x60, 0xcc},
2594 /*gamma - to do?*/
2595         {0x00, 0x03, 0x00, 0xaa},
2596         {0x00, 0xae, 0x84, 0xaa},
2597 /*gamma again*/
2598         {0x00, 0x03, 0x00, 0xaa},
2599         {0x00, 0x96, 0xa0, 0xaa},
2600 /*matrix*/
2601         {0x00, 0x03, 0x00, 0xaa},
2602         {0x00, 0x91, 0x35, 0xaa},
2603         {0x00, 0x92, 0x22, 0xaa},
2604 /*gamma*/
2605         {0x00, 0x03, 0x00, 0xaa},
2606         {0x00, 0x95, 0x85, 0xaa},
2607 /*matrix*/
2608         {0x00, 0x03, 0x00, 0xaa},
2609         {0x00, 0x4d, 0x20, 0xaa},
2610         {0xb8, 0x22, 0x40, 0xcc},
2611         {0xb8, 0x23, 0x40, 0xcc},
2612         {0xb8, 0x24, 0x40, 0xcc},
2613         {0xb8, 0x81, 0x09, 0xcc},
2614         {0x00, 0x00, 0x64, 0xdd},
2615         {0x00, 0x03, 0x01, 0xaa},
2616 /*read 46*/
2617         {0x00, 0x46, 0x3c, 0xaa},
2618         {0x00, 0x03, 0x00, 0xaa},
2619         {0x00, 0x16, 0x40, 0xaa},
2620         {0x00, 0x17, 0x40, 0xaa},
2621         {0x00, 0x18, 0x40, 0xaa},
2622         {0x00, 0x19, 0x41, 0xaa},
2623         {0x00, 0x03, 0x01, 0xaa},
2624         {0x00, 0x46, 0x3c, 0xaa},
2625         {0x00, 0x00, 0x18, 0xdd},
2626 /*read bfff*/
2627         {0x00, 0x03, 0x00, 0xaa},
2628         {0x00, 0xb4, 0x1c, 0xaa},
2629         {0x00, 0xb5, 0x92, 0xaa},
2630         {0x00, 0xb6, 0x39, 0xaa},
2631         {0x00, 0xb7, 0x24, 0xaa},
2632 /*write 89 0400 1415*/
2633 };
2634
2635 struct sensor_info {
2636         s8 sensorId;
2637         u8 I2cAdd;
2638         u8 IdAdd;
2639         u16 VpId;
2640         u8 m1;
2641         u8 m2;
2642         u8 op;
2643 };
2644
2645 static const struct sensor_info sensor_info_data[] = {
2646 /*      sensorId,         I2cAdd,       IdAdd,  VpId,  m1,    m2,  op */
2647         {-1,                0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05},
2648         {-1,                0x80 | 0x20, 0x82, 0x0000, 0x24, 0x25, 0x01},
2649 /* (tested in vc032x_probe_sensor) */
2650 /*      {-1,                0x80 | 0x20, 0x83, 0x0000, 0x24, 0x25, 0x01}, */
2651         {SENSOR_PO3130NC,   0x80 | 0x76, 0x00, 0x3130, 0x24, 0x25, 0x01},
2652         {SENSOR_MI1310_SOC, 0x80 | 0x5d, 0x00, 0x143a, 0x24, 0x25, 0x01},
2653 /* (tested in vc032x_probe_sensor) */
2654 /*      {SENSOR_MI0360,     0x80 | 0x5d, 0x00, 0x8243, 0x24, 0x25, 0x01}, */
2655         {SENSOR_HV7131R,    0x80 | 0x11, 0x00, 0x0209, 0x24, 0x25, 0x01},
2656         {-1,                0x80 | 0x21, 0x0a, 0x0000, 0x21, 0x20, 0x05},
2657         {-1,                0x80 | 0x40, 0x00, 0x0000, 0x20, 0x22, 0x05},
2658         {SENSOR_OV7660,     0x80 | 0x21, 0x0a, 0x7660, 0x26, 0x26, 0x05},
2659 /*      {SENSOR_PO3130NC,   0x80 | 0x76, 0x00, 0x0000, 0x24, 0x25, 0x01}, */
2660         {-1,                0x80 | 0x6e, 0x00, 0x0000, 0x24, 0x25, 0x01},
2661 /*      {SENSOR_MI1310_SOC, 0x80 | 0x5d, 0x00, 0x0000, 0x24, 0x25, 0x01}, */
2662 /*      {-1,                0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05}, */
2663         {-1,                0x80 | 0x11, 0x39, 0x0000, 0x24, 0x25, 0x01},
2664         {SENSOR_PO1200,     0x80 | 0x5c, 0x00, 0x1200, 0x67, 0x67, 0x01},
2665         {-1,                0x80 | 0x2d, 0x00, 0x0000, 0x65, 0x67, 0x01},
2666         {-1,                0x80 | 0x6e, 0x00, 0x0000, 0x24, 0x25, 0x01},
2667         {-1,                0x80 | 0x56, 0x01, 0x0000, 0x64, 0x67, 0x01},
2668         {SENSOR_MI1320_SOC, 0x80 | 0x48, 0x00, 0x148c, 0x64, 0x67, 0x01},
2669 /*fixme: previously detected?*/
2670         {SENSOR_MI1320,     0x80 | 0x48, 0x00, 0x148c, 0x64, 0x65, 0x01},
2671 /*fixme: not in the ms-win probe - may be found before?*/
2672         {SENSOR_OV7670,     0x80 | 0x21, 0x0a, 0x7673, 0x66, 0x67, 0x05},
2673 };
2674
2675 /* read 'len' bytes in gspca_dev->usb_buf */
2676 static void reg_r(struct gspca_dev *gspca_dev,
2677                   __u16 req,
2678                   __u16 index,
2679                   __u16 len)
2680 {
2681         usb_control_msg(gspca_dev->dev,
2682                         usb_rcvctrlpipe(gspca_dev->dev, 0),
2683                         req,
2684                         USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
2685                         1,                      /* value */
2686                         index, gspca_dev->usb_buf, len,
2687                         500);
2688 }
2689
2690 static void reg_w(struct usb_device *dev,
2691                             __u16 req,
2692                             __u16 value,
2693                             __u16 index)
2694 {
2695         usb_control_msg(dev,
2696                         usb_sndctrlpipe(dev, 0),
2697                         req,
2698                         USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
2699                         value, index, NULL, 0,
2700                         500);
2701 }
2702
2703 static u16 read_sensor_register(struct gspca_dev *gspca_dev,
2704                                 u16 address)
2705 {
2706         struct usb_device *dev = gspca_dev->dev;
2707         u8 ldata, mdata, hdata;
2708         int retry = 50;
2709
2710         reg_r(gspca_dev, 0xa1, 0xb33f, 1);
2711         if (!(gspca_dev->usb_buf[0] & 0x02)) {
2712                 PDEBUG(D_ERR, "I2c Bus Busy Wait %02x",
2713                         gspca_dev->usb_buf[0]);
2714                 return 0;
2715         }
2716         reg_w(dev, 0xa0, address, 0xb33a);
2717         reg_w(dev, 0xa0, 0x02, 0xb339);
2718
2719         do {
2720                 reg_r(gspca_dev, 0xa1, 0xb33b, 1);
2721                 if (gspca_dev->usb_buf[0] == 0x00)
2722                         break;
2723                 msleep(40);
2724         } while (--retry >= 0);
2725
2726         reg_r(gspca_dev, 0xa1, 0xb33e, 1);
2727         ldata = gspca_dev->usb_buf[0];
2728         reg_r(gspca_dev, 0xa1, 0xb33d, 1);
2729         mdata = gspca_dev->usb_buf[0];
2730         reg_r(gspca_dev, 0xa1, 0xb33c, 1);
2731         hdata = gspca_dev->usb_buf[0];
2732         if (hdata != 0 && mdata != 0 && ldata != 0)
2733                 PDEBUG(D_PROBE, "Read Sensor %02x%02x %02x",
2734                         hdata, mdata, ldata);
2735         reg_r(gspca_dev, 0xa1, 0xb334, 1);
2736         if (gspca_dev->usb_buf[0] == 0x02)
2737                 return (hdata << 8) + mdata;
2738         return hdata;
2739 }
2740
2741 static int vc032x_probe_sensor(struct gspca_dev *gspca_dev)
2742 {
2743         struct usb_device *dev = gspca_dev->dev;
2744         int i;
2745         u16 value;
2746         const struct sensor_info *ptsensor_info;
2747
2748         reg_r(gspca_dev, 0xa1, 0xbfcf, 1);
2749         PDEBUG(D_PROBE, "check sensor header %02x", gspca_dev->usb_buf[0]);
2750         for (i = 0; i < ARRAY_SIZE(sensor_info_data); i++) {
2751                 ptsensor_info = &sensor_info_data[i];
2752                 reg_w(dev, 0xa0, 0x02, 0xb334);
2753                 reg_w(dev, 0xa0, ptsensor_info->m1, 0xb300);
2754                 reg_w(dev, 0xa0, ptsensor_info->m2, 0xb300);
2755                 reg_w(dev, 0xa0, 0x01, 0xb308);
2756                 reg_w(dev, 0xa0, 0x0c, 0xb309);
2757                 reg_w(dev, 0xa0, ptsensor_info->I2cAdd, 0xb335);
2758                 reg_w(dev, 0xa0, ptsensor_info->op, 0xb301);
2759                 value = read_sensor_register(gspca_dev, ptsensor_info->IdAdd);
2760                 if (value == 0 && ptsensor_info->IdAdd == 0x82)
2761                         value = read_sensor_register(gspca_dev, 0x83);
2762                 if (value != 0) {
2763                         PDEBUG(D_ERR|D_PROBE, "Sensor ID %04x (%d)",
2764                                 value, i);
2765                         if (value == ptsensor_info->VpId)
2766                                 return ptsensor_info->sensorId;
2767
2768                         switch (value) {
2769                         case 0x7673:
2770                                 return SENSOR_OV7670;
2771                         case 0x8243:
2772                                 return SENSOR_MI0360;
2773                         }
2774 /*fixme: should return here*/
2775                 }
2776         }
2777         return -1;
2778 }
2779
2780 static void i2c_write(struct gspca_dev *gspca_dev,
2781                         u8 reg, const u8 *val,
2782                         u8 size)                /* 1 or 2 */
2783 {
2784         struct usb_device *dev = gspca_dev->dev;
2785         int retry;
2786
2787         reg_r(gspca_dev, 0xa1, 0xb33f, 1);
2788 /*fixme:should check if (!(gspca_dev->usb_buf[0] & 0x02)) error*/
2789         reg_w(dev, 0xa0, size, 0xb334);
2790         reg_w(dev, 0xa0, reg, 0xb33a);
2791         reg_w(dev, 0xa0, val[0], 0xb336);
2792         if (size > 1)
2793                 reg_w(dev, 0xa0, val[1], 0xb337);
2794         reg_w(dev, 0xa0, 0x01, 0xb339);
2795         retry = 4;
2796         do {
2797                 reg_r(gspca_dev, 0xa1, 0xb33b, 1);
2798                 if (gspca_dev->usb_buf[0] == 0)
2799                         break;
2800                 msleep(20);
2801         } while (--retry > 0);
2802         if (retry <= 0)
2803                 PDEBUG(D_ERR, "i2c_write failed");
2804 }
2805
2806 static void put_tab_to_reg(struct gspca_dev *gspca_dev,
2807                         const __u8 *tab, __u8 tabsize, __u16 addr)
2808 {
2809         int j;
2810         __u16 ad = addr;
2811
2812         for (j = 0; j < tabsize; j++)
2813                 reg_w(gspca_dev->dev, 0xa0, tab[j], ad++);
2814 }
2815
2816 static void usb_exchange(struct gspca_dev *gspca_dev,
2817                         const __u8 data[][4])
2818 {
2819         struct usb_device *dev = gspca_dev->dev;
2820         int i = 0;
2821
2822         for (;;) {
2823                 switch (data[i][3]) {
2824                 default:
2825                         return;
2826                 case 0xcc:                      /* normal write */
2827                         reg_w(dev, 0xa0, data[i][2],
2828                                         (data[i][0]) << 8 | data[i][1]);
2829                         break;
2830                 case 0xaa:                      /* i2c op */
2831                         i2c_write(gspca_dev, data[i][1], &data[i][2], 1);
2832                         break;
2833                 case 0xbb:                      /* i2c op */
2834                         i2c_write(gspca_dev, data[i][0], &data[i][1], 2);
2835                         break;
2836                 case 0xdd:
2837                         msleep(data[i][2] + 10);
2838                         break;
2839                 }
2840                 i++;
2841         }
2842         /*not reached*/
2843 }
2844
2845
2846 /* this function is called at probe time */
2847 static int sd_config(struct gspca_dev *gspca_dev,
2848                         const struct usb_device_id *id)
2849 {
2850         struct sd *sd = (struct sd *) gspca_dev;
2851         struct usb_device *dev = gspca_dev->dev;
2852         struct cam *cam;
2853         int sensor;
2854
2855         cam = &gspca_dev->cam;
2856         sd->bridge = id->driver_info;
2857         sensor = vc032x_probe_sensor(gspca_dev);
2858         switch (sensor) {
2859         case -1:
2860                 PDEBUG(D_PROBE, "Unknown sensor...");
2861                 return -EINVAL;
2862         case SENSOR_HV7131R:
2863                 PDEBUG(D_PROBE, "Find Sensor HV7131R");
2864                 break;
2865         case SENSOR_MI0360:
2866                 PDEBUG(D_PROBE, "Find Sensor MI0360");
2867                 sd->bridge = BRIDGE_VC0323;
2868                 break;
2869         case SENSOR_MI1310_SOC:
2870                 PDEBUG(D_PROBE, "Find Sensor MI1310_SOC");
2871                 break;
2872         case SENSOR_MI1320:
2873                 PDEBUG(D_PROBE, "Find Sensor MI1320");
2874                 break;
2875         case SENSOR_MI1320_SOC:
2876                 PDEBUG(D_PROBE, "Find Sensor MI1320_SOC");
2877                 break;
2878         case SENSOR_OV7660:
2879                 PDEBUG(D_PROBE, "Find Sensor OV7660");
2880                 break;
2881         case SENSOR_OV7670:
2882                 PDEBUG(D_PROBE, "Find Sensor OV7670");
2883                 break;
2884         case SENSOR_PO1200:
2885                 PDEBUG(D_PROBE, "Find Sensor PO1200");
2886                 break;
2887         case SENSOR_PO3130NC:
2888                 PDEBUG(D_PROBE, "Find Sensor PO3130NC");
2889                 break;
2890         }
2891         sd->sensor = sensor;
2892
2893         if (sd->bridge == BRIDGE_VC0321) {
2894                 cam->cam_mode = vc0321_mode;
2895                 cam->nmodes = ARRAY_SIZE(vc0321_mode);
2896         } else {
2897                 switch (sensor) {
2898                 case SENSOR_PO1200:
2899                         cam->cam_mode = svga_mode;
2900                         cam->nmodes = ARRAY_SIZE(svga_mode);
2901                         break;
2902                 case SENSOR_MI1310_SOC:
2903                         cam->cam_mode = vc0323_mode;
2904                         cam->nmodes = ARRAY_SIZE(vc0323_mode);
2905                         break;
2906                 case SENSOR_MI1320_SOC:
2907                         cam->cam_mode = bi_mode;
2908                         cam->nmodes = ARRAY_SIZE(bi_mode);
2909                         break;
2910                 default:
2911                         cam->cam_mode = vc0323_mode;
2912                         cam->nmodes = ARRAY_SIZE(vc0323_mode) - 1;
2913                         break;
2914                 }
2915         }
2916
2917         sd->hflip = HFLIP_DEF;
2918         sd->vflip = VFLIP_DEF;
2919         if (sd->sensor == SENSOR_OV7670) {
2920                 sd->hflip = 1;
2921                 sd->vflip = 1;
2922         }
2923         sd->lightfreq = FREQ_DEF;
2924         if (sd->sensor != SENSOR_OV7670)
2925                 gspca_dev->ctrl_dis = (1 << LIGHTFREQ_IDX);
2926         switch (sd->sensor) {
2927         case SENSOR_OV7660:
2928         case SENSOR_OV7670:
2929         case SENSOR_PO1200:
2930                 break;
2931         default:
2932                 gspca_dev->ctrl_dis = (1 << HFLIP_IDX)
2933                                         | (1 << VFLIP_IDX);
2934                 break;
2935         }
2936
2937         sd->sharpness = SHARPNESS_DEF;
2938
2939         if (sd->bridge == BRIDGE_VC0321) {
2940                 reg_r(gspca_dev, 0x8a, 0, 3);
2941                 reg_w(dev, 0x87, 0x00, 0x0f0f);
2942
2943                 reg_r(gspca_dev, 0x8b, 0, 3);
2944                 reg_w(dev, 0x88, 0x00, 0x0202);
2945         }
2946         return 0;
2947 }
2948
2949 /* this function is called at probe and resume time */
2950 static int sd_init(struct gspca_dev *gspca_dev)
2951 {
2952         return 0;
2953 }
2954
2955 /* for OV7660 and OV7670 only */
2956 static void sethvflip(struct gspca_dev *gspca_dev)
2957 {
2958         struct sd *sd = (struct sd *) gspca_dev;
2959         __u8 data;
2960
2961         switch (sd->sensor) {
2962         case SENSOR_OV7660:
2963                 data = 1;
2964                 break;
2965         case SENSOR_OV7670:
2966                 data = 7;
2967                 break;
2968         case SENSOR_PO1200:
2969                 data = 0;
2970                 i2c_write(gspca_dev, 0x03, &data, 1);
2971                 data = 0x80 * sd->hflip
2972                         | 0x40 * sd->vflip
2973                         | 0x06;
2974                 i2c_write(gspca_dev, 0x1e, &data, 1);
2975                 return;
2976         default:
2977                 return;
2978         }
2979         data |= OV7660_MVFP_MIRROR * sd->hflip
2980                 | OV7660_MVFP_VFLIP * sd->vflip;
2981         i2c_write(gspca_dev, OV7660_REG_MVFP, &data, 1);
2982 }
2983
2984 static void setlightfreq(struct gspca_dev *gspca_dev)
2985 {
2986         struct sd *sd = (struct sd *) gspca_dev;
2987         static const __u8 (*ov7660_freq_tb[3])[4] =
2988                 {ov7660_NoFliker, ov7660_50HZ, ov7660_60HZ};
2989
2990         if (sd->sensor != SENSOR_OV7660)
2991                 return;
2992         usb_exchange(gspca_dev, ov7660_freq_tb[sd->lightfreq]);
2993 }
2994
2995 /* po1200 only */
2996 static void setsharpness(struct gspca_dev *gspca_dev)
2997 {
2998         struct sd *sd = (struct sd *) gspca_dev;
2999         __u8 data;
3000
3001         if (sd->sensor != SENSOR_PO1200)
3002                 return;
3003         data = 0;
3004         i2c_write(gspca_dev, 0x03, &data, 1);
3005         data = 0xb5 + sd->sharpness * 3;
3006         i2c_write(gspca_dev, 0x61, &data, 1);
3007 }
3008
3009 static int sd_start(struct gspca_dev *gspca_dev)
3010 {
3011         struct sd *sd = (struct sd *) gspca_dev;
3012         const __u8 (*init)[4];
3013         const __u8 *GammaT = NULL;
3014         const __u8 *MatrixT = NULL;
3015         int mode;
3016         static const u8 (*mi1320_soc_init[])[4] = {
3017                 mi1320_soc_InitSXGA,
3018                 mi1320_soc_InitSXGA_JPG,
3019                 mi1320_soc_InitVGA,
3020                 mi1320_soc_InitVGA_JPG,
3021                 mi1320_soc_InitQVGA,
3022                 mi1320_soc_InitQVGA_JPG
3023         };
3024
3025         /* Assume start use the good resolution from gspca_dev->mode */
3026         if (sd->bridge == BRIDGE_VC0321) {
3027                 reg_w(gspca_dev->dev, 0xa0, 0xff, 0xbfec);
3028                 reg_w(gspca_dev->dev, 0xa0, 0xff, 0xbfed);
3029                 reg_w(gspca_dev->dev, 0xa0, 0xff, 0xbfee);
3030                 reg_w(gspca_dev->dev, 0xa0, 0xff, 0xbfef);
3031                 sd->image_offset = 46;
3032         } else {
3033                 if (gspca_dev->cam.cam_mode[gspca_dev->curr_mode].pixelformat
3034                                 == V4L2_PIX_FMT_JPEG)
3035                         sd->image_offset = 0;
3036                 else
3037                         sd->image_offset = 32;
3038         }
3039
3040         mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv;
3041         switch (sd->sensor) {
3042         case SENSOR_HV7131R:
3043                 GammaT = hv7131r_gamma;
3044                 MatrixT = hv7131r_matrix;
3045                 if (mode)
3046                         init = hv7131r_initQVGA_data;   /* 320x240 */
3047                 else
3048                         init = hv7131r_initVGA_data;    /* 640x480 */
3049                 break;
3050         case SENSOR_OV7660:
3051                 GammaT = ov7660_gamma;
3052                 MatrixT = ov7660_matrix;
3053                 if (mode)
3054                         init = ov7660_initQVGA_data;    /* 320x240 */
3055                 else
3056                         init = ov7660_initVGA_data;     /* 640x480 */
3057                 break;
3058         case SENSOR_OV7670:
3059                 /*GammaT = ov7660_gamma; */
3060                 /*MatrixT = ov7660_matrix; */
3061                 if (mode)
3062                         init = ov7670_initQVGA_JPG;     /* 320x240 */
3063                 else
3064                         init = ov7670_initVGA_JPG;      /* 640x480 */
3065                 break;
3066         case SENSOR_MI0360:
3067                 GammaT = mi1320_gamma;
3068                 MatrixT = mi0360_matrix;
3069                 if (mode)
3070                         init = mi0360_initQVGA_JPG;     /* 320x240 */
3071                 else
3072                         init = mi0360_initVGA_JPG;      /* 640x480 */
3073                 break;
3074         case SENSOR_MI1310_SOC:
3075                 GammaT = mi1320_gamma;
3076                 MatrixT = mi1320_matrix;
3077                 switch (mode) {
3078                 case 1:
3079                         init = mi1310_socinitQVGA_JPG;  /* 320x240 */
3080                         break;
3081                 case 0:
3082                         init = mi1310_socinitVGA_JPG;   /* 640x480 */
3083                         break;
3084                 default:
3085                         init = mi1310_soc_InitSXGA_JPG; /* 1280x1024 */
3086                         break;
3087                 }
3088                 break;
3089         case SENSOR_MI1320:
3090                 GammaT = mi1320_gamma;
3091                 MatrixT = mi1320_matrix;
3092                 if (mode)
3093                         init = mi1320_initQVGA_data;    /* 320x240 */
3094                 else
3095                         init = mi1320_initVGA_data;     /* 640x480 */
3096                 break;
3097         case SENSOR_MI1320_SOC:
3098                 GammaT = mi1320_gamma;
3099                 MatrixT = mi1320_matrix;
3100                 init = mi1320_soc_init[mode];
3101                 break;
3102         case SENSOR_PO3130NC:
3103                 GammaT = po3130_gamma;
3104                 MatrixT = po3130_matrix;
3105                 if (mode)
3106                         init = po3130_initQVGA_data;    /* 320x240 */
3107                 else
3108                         init = po3130_initVGA_data;     /* 640x480 */
3109                 usb_exchange(gspca_dev, init);
3110                 init = po3130_rundata;
3111                 break;
3112         default:
3113 /*      case SENSOR_PO1200: */
3114                 GammaT = po1200_gamma;
3115                 MatrixT = po1200_matrix;
3116                 init = po1200_initVGA_data;
3117                 break;
3118         }
3119         usb_exchange(gspca_dev, init);
3120         if (GammaT && MatrixT) {
3121                 put_tab_to_reg(gspca_dev, GammaT, 17, 0xb84a);
3122                 put_tab_to_reg(gspca_dev, GammaT, 17, 0xb85b);
3123                 put_tab_to_reg(gspca_dev, GammaT, 17, 0xb86c);
3124                 put_tab_to_reg(gspca_dev, MatrixT, 9, 0xb82c);
3125
3126                 /* set the led on 0x0892 0x0896 */
3127                 if (sd->sensor != SENSOR_PO1200) {
3128                         reg_w(gspca_dev->dev, 0x89, 0xffff, 0xfdff);
3129                         msleep(100);
3130                         sethvflip(gspca_dev);
3131                         setlightfreq(gspca_dev);
3132                 } else {
3133                         setsharpness(gspca_dev);
3134                         sethvflip(gspca_dev);
3135                         reg_w(gspca_dev->dev, 0x89, 0x0400, 0x1415);
3136                 }
3137         }
3138         return 0;
3139 }
3140
3141 static void sd_stopN(struct gspca_dev *gspca_dev)
3142 {
3143         struct usb_device *dev = gspca_dev->dev;
3144
3145         reg_w(dev, 0x89, 0xffff, 0xffff);
3146         reg_w(dev, 0xa0, 0x01, 0xb301);
3147         reg_w(dev, 0xa0, 0x09, 0xb003);
3148 }
3149
3150 /* called on streamoff with alt 0 and on disconnect */
3151 static void sd_stop0(struct gspca_dev *gspca_dev)
3152 {
3153         struct usb_device *dev = gspca_dev->dev;
3154
3155         if (!gspca_dev->present)
3156                 return;
3157         reg_w(dev, 0x89, 0xffff, 0xffff);
3158 }
3159
3160 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
3161                         struct gspca_frame *frame,      /* target */
3162                         __u8 *data,                     /* isoc packet */
3163                         int len)                        /* iso pkt length */
3164 {
3165         struct sd *sd = (struct sd *) gspca_dev;
3166
3167         if (data[0] == 0xff && data[1] == 0xd8) {
3168                 PDEBUG(D_PACK,
3169                         "vc032x header packet found len %d", len);
3170                 frame = gspca_frame_add(gspca_dev, LAST_PACKET, frame,
3171                                                 data, 0);
3172                 data += sd->image_offset;
3173                 len -= sd->image_offset;
3174                 gspca_frame_add(gspca_dev, FIRST_PACKET, frame,
3175                                 data, len);
3176                 return;
3177         }
3178
3179         /* The vc0321 sends some additional data after sending the complete
3180          * frame, we ignore this. */
3181         if (sd->bridge == BRIDGE_VC0321
3182             && len > frame->v4l2_buf.length - (frame->data_end - frame->data))
3183                 len = frame->v4l2_buf.length - (frame->data_end - frame->data);
3184         gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
3185 }
3186
3187 static int sd_sethflip(struct gspca_dev *gspca_dev, __s32 val)
3188 {
3189         struct sd *sd = (struct sd *) gspca_dev;
3190
3191         sd->hflip = val;
3192         if (gspca_dev->streaming)
3193                 sethvflip(gspca_dev);
3194         return 0;
3195 }
3196
3197 static int sd_gethflip(struct gspca_dev *gspca_dev, __s32 *val)
3198 {
3199         struct sd *sd = (struct sd *) gspca_dev;
3200
3201         *val = sd->hflip;
3202         return 0;
3203 }
3204
3205 static int sd_setvflip(struct gspca_dev *gspca_dev, __s32 val)
3206 {
3207         struct sd *sd = (struct sd *) gspca_dev;
3208
3209         sd->vflip = val;
3210         if (gspca_dev->streaming)
3211                 sethvflip(gspca_dev);
3212         return 0;
3213 }
3214
3215 static int sd_getvflip(struct gspca_dev *gspca_dev, __s32 *val)
3216 {
3217         struct sd *sd = (struct sd *) gspca_dev;
3218
3219         *val = sd->vflip;
3220         return 0;
3221 }
3222
3223 static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 val)
3224 {
3225         struct sd *sd = (struct sd *) gspca_dev;
3226
3227         sd->lightfreq = val;
3228         if (gspca_dev->streaming)
3229                 setlightfreq(gspca_dev);
3230         return 0;
3231 }
3232
3233 static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val)
3234 {
3235         struct sd *sd = (struct sd *) gspca_dev;
3236
3237         *val = sd->lightfreq;
3238         return 0;
3239 }
3240
3241 static int sd_setsharpness(struct gspca_dev *gspca_dev, __s32 val)
3242 {
3243         struct sd *sd = (struct sd *) gspca_dev;
3244
3245         sd->sharpness = val;
3246         if (gspca_dev->streaming)
3247                 setsharpness(gspca_dev);
3248         return 0;
3249 }
3250
3251 static int sd_getsharpness(struct gspca_dev *gspca_dev, __s32 *val)
3252 {
3253         struct sd *sd = (struct sd *) gspca_dev;
3254
3255         *val = sd->sharpness;
3256         return 0;
3257 }
3258
3259 static int sd_querymenu(struct gspca_dev *gspca_dev,
3260                         struct v4l2_querymenu *menu)
3261 {
3262         switch (menu->id) {
3263         case V4L2_CID_POWER_LINE_FREQUENCY:
3264                 switch (menu->index) {
3265                 case 0:         /* V4L2_CID_POWER_LINE_FREQUENCY_DISABLED */
3266                         strcpy((char *) menu->name, "NoFliker");
3267                         return 0;
3268                 case 1:         /* V4L2_CID_POWER_LINE_FREQUENCY_50HZ */
3269                         strcpy((char *) menu->name, "50 Hz");
3270                         return 0;
3271                 default:
3272 /*              case 2:          * V4L2_CID_POWER_LINE_FREQUENCY_60HZ */
3273                         strcpy((char *) menu->name, "60 Hz");
3274                         return 0;
3275                 }
3276                 break;
3277         }
3278         return -EINVAL;
3279 }
3280
3281 /* sub-driver description */
3282 static const struct sd_desc sd_desc = {
3283         .name = MODULE_NAME,
3284         .ctrls = sd_ctrls,
3285         .nctrls = ARRAY_SIZE(sd_ctrls),
3286         .config = sd_config,
3287         .init = sd_init,
3288         .start = sd_start,
3289         .stopN = sd_stopN,
3290         .stop0 = sd_stop0,
3291         .pkt_scan = sd_pkt_scan,
3292         .querymenu = sd_querymenu,
3293 };
3294
3295 /* -- module initialisation -- */
3296 static const __devinitdata struct usb_device_id device_table[] = {
3297         {USB_DEVICE(0x041e, 0x405b), .driver_info = BRIDGE_VC0323},
3298         {USB_DEVICE(0x046d, 0x0892), .driver_info = BRIDGE_VC0321},
3299         {USB_DEVICE(0x046d, 0x0896), .driver_info = BRIDGE_VC0321},
3300         {USB_DEVICE(0x046d, 0x0897), .driver_info = BRIDGE_VC0321},
3301         {USB_DEVICE(0x0ac8, 0x0321), .driver_info = BRIDGE_VC0321},
3302         {USB_DEVICE(0x0ac8, 0x0323), .driver_info = BRIDGE_VC0323},
3303         {USB_DEVICE(0x0ac8, 0x0328), .driver_info = BRIDGE_VC0321},
3304         {USB_DEVICE(0x0ac8, 0xc001), .driver_info = BRIDGE_VC0321},
3305         {USB_DEVICE(0x0ac8, 0xc002), .driver_info = BRIDGE_VC0321},
3306         {USB_DEVICE(0x15b8, 0x6001), .driver_info = BRIDGE_VC0323},
3307         {USB_DEVICE(0x15b8, 0x6002), .driver_info = BRIDGE_VC0323},
3308         {USB_DEVICE(0x17ef, 0x4802), .driver_info = BRIDGE_VC0323},
3309         {}
3310 };
3311 MODULE_DEVICE_TABLE(usb, device_table);
3312
3313 /* -- device connect -- */
3314 static int sd_probe(struct usb_interface *intf,
3315                         const struct usb_device_id *id)
3316 {
3317         return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd),
3318                                 THIS_MODULE);
3319 }
3320
3321 static struct usb_driver sd_driver = {
3322         .name = MODULE_NAME,
3323         .id_table = device_table,
3324         .probe = sd_probe,
3325         .disconnect = gspca_disconnect,
3326 #ifdef CONFIG_PM
3327         .suspend = gspca_suspend,
3328         .resume = gspca_resume,
3329 #endif
3330 };
3331
3332 /* -- module insert / remove -- */
3333 static int __init sd_mod_init(void)
3334 {
3335         int ret;
3336
3337         ret = usb_register(&sd_driver);
3338         if (ret < 0)
3339                 return ret;
3340         PDEBUG(D_PROBE, "registered");
3341         return 0;
3342 }
3343 static void __exit sd_mod_exit(void)
3344 {
3345         usb_deregister(&sd_driver);
3346         PDEBUG(D_PROBE, "deregistered");
3347 }
3348
3349 module_init(sd_mod_init);
3350 module_exit(sd_mod_exit);