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