Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
zc3xx.c
Go to the documentation of this file.
1 /*
2  * Z-Star/Vimicro zc301/zc302p/vc30x driver
3  *
4  * Copyright (C) 2009-2012 Jean-Francois Moine <http://moinejf.free.fr>
5  * Copyright (C) 2004 2005 2006 Michel Xhaard [email protected]
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  */
21 
22 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
23 
24 #include <linux/input.h>
25 #include "gspca.h"
26 #include "jpeg.h"
27 
28 MODULE_AUTHOR("Jean-Francois Moine <http://moinejf.free.fr>, "
29  "Serge A. Suchkov <[email protected]>");
30 MODULE_DESCRIPTION("GSPCA ZC03xx/VC3xx USB Camera Driver");
31 MODULE_LICENSE("GPL");
32 
33 static int force_sensor = -1;
34 
35 #define REG08_DEF 3 /* default JPEG compression (75%) */
36 #include "zc3xx-reg.h"
37 
38 /* specific webcam descriptor */
39 struct sd {
40  struct gspca_dev gspca_dev; /* !! must be the first item */
41 
42  struct { /* gamma/brightness/contrast control cluster */
43  struct v4l2_ctrl *gamma;
44  struct v4l2_ctrl *brightness;
45  struct v4l2_ctrl *contrast;
46  };
47  struct { /* autogain/exposure control cluster */
48  struct v4l2_ctrl *autogain;
49  struct v4l2_ctrl *exposure;
50  };
51  struct v4l2_ctrl *plfreq;
52  struct v4l2_ctrl *sharpness;
53  struct v4l2_ctrl *jpegqual;
54 
55  struct work_struct work;
57 
58  u8 reg08; /* webcam compression quality */
59 
60  u8 bridge;
61  u8 sensor; /* Type of image sensor chip */
63 
65 };
66 enum bridges {
69 };
70 enum sensors {
81  SENSOR_MT9V111_1, /* (mi360soc) zc301 */
82  SENSOR_MT9V111_3, /* (mi360soc) zc303 */
83  SENSOR_OV7620, /* OV7648 - same values */
91 };
92 
93 static const struct v4l2_pix_format vga_mode[] = {
95  .bytesperline = 320,
96  .sizeimage = 320 * 240 * 3 / 8 + 590,
97  .colorspace = V4L2_COLORSPACE_JPEG,
98  .priv = 1},
100  .bytesperline = 640,
101  .sizeimage = 640 * 480 * 3 / 8 + 590,
102  .colorspace = V4L2_COLORSPACE_JPEG,
103  .priv = 0},
104 };
105 
106 static const struct v4l2_pix_format broken_vga_mode[] = {
108  .bytesperline = 320,
109  .sizeimage = 320 * 232 * 4 / 8 + 590,
110  .colorspace = V4L2_COLORSPACE_JPEG,
111  .priv = 1},
113  .bytesperline = 640,
114  .sizeimage = 640 * 472 * 3 / 8 + 590,
115  .colorspace = V4L2_COLORSPACE_JPEG,
116  .priv = 0},
117 };
118 
119 static const struct v4l2_pix_format sif_mode[] = {
121  .bytesperline = 176,
122  .sizeimage = 176 * 144 * 3 / 8 + 590,
123  .colorspace = V4L2_COLORSPACE_JPEG,
124  .priv = 1},
126  .bytesperline = 352,
127  .sizeimage = 352 * 288 * 3 / 8 + 590,
128  .colorspace = V4L2_COLORSPACE_JPEG,
129  .priv = 0},
130 };
131 
132 /*
133  * Bridge reg08 bits 1-2 -> JPEG quality conversion table. Note the highest
134  * quality setting is not usable as USB 1 does not have enough bandwidth.
135  */
136 static u8 jpeg_qual[] = {50, 75, 87, /* 94 */};
137 
138 /* usb exchanges */
139 struct usb_action {
143 };
144 
145 static const struct usb_action adcm2700_Initial[] = {
146  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */
147  {0xa0, 0x04, ZC3XX_R002_CLOCKSELECT}, /* 00,02,04,cc */
148  {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */
149  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */
150  {0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,d3,cc */
151  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */
152  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */
153  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */
154  {0xa0, 0xd8, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d8,cc */
155  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */
156  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */
157  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */
158  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
159  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */
160  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */
161  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */
162  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */
163  {0xa0, 0xde, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,de,cc */
164  {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */
165  {0xbb, 0x00, 0x0400}, /* 04,00,00,bb */
166  {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */
167  {0xbb, 0x0f, 0x140f}, /* 14,0f,0f,bb */
168  {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */
169  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */
170  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */
171  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */
172  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */
173  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */
174  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */
175  {0xa0, 0x58, ZC3XX_R116_RGAIN}, /* 01,16,58,cc */
176  {0xa0, 0x5a, ZC3XX_R118_BGAIN}, /* 01,18,5a,cc */
177  {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */
178  {0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,d3,cc */
179  {0xbb, 0x00, 0x0408}, /* 04,00,08,bb */
180  {0xdd, 0x00, 0x0200}, /* 00,02,00,dd */
181  {0xbb, 0x00, 0x0400}, /* 04,00,00,bb */
182  {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */
183  {0xbb, 0x0f, 0x140f}, /* 14,0f,0f,bb */
184  {0xbb, 0xe0, 0x0c2e}, /* 0c,e0,2e,bb */
185  {0xbb, 0x01, 0x2000}, /* 20,01,00,bb */
186  {0xbb, 0x96, 0x2400}, /* 24,96,00,bb */
187  {0xbb, 0x06, 0x1006}, /* 10,06,06,bb */
188  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
189  {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */
190  {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */
191  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */
192  {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */
193  {0xbb, 0x5f, 0x2090}, /* 20,5f,90,bb */
194  {0xbb, 0x01, 0x8000}, /* 80,01,00,bb */
195  {0xbb, 0x09, 0x8400}, /* 84,09,00,bb */
196  {0xbb, 0x86, 0x0002}, /* 00,86,02,bb */
197  {0xbb, 0xe6, 0x0401}, /* 04,e6,01,bb */
198  {0xbb, 0x86, 0x0802}, /* 08,86,02,bb */
199  {0xbb, 0xe6, 0x0c01}, /* 0c,e6,01,bb */
200  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
201  {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */
202  {0xaa, 0xfe, 0x0000}, /* 00,fe,00,aa */
203  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */
204  {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */
205  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
206  {0xaa, 0xfe, 0x0020}, /* 00,fe,20,aa */
207 /*mswin+*/
208  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},
209  {0xaa, 0xfe, 0x0002},
210  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
211  {0xaa, 0xb4, 0xcd37},
212  {0xaa, 0xa4, 0x0004},
213  {0xaa, 0xa8, 0x0007},
214  {0xaa, 0xac, 0x0004},
215 /*mswin-*/
216  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */
217  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
218  {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */
219  {0xaa, 0xfe, 0x0000}, /* 00,fe,00,aa */
220  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */
221  {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */
222  {0xbb, 0x04, 0x0400}, /* 04,04,00,bb */
223  {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */
224  {0xbb, 0x01, 0x0400}, /* 04,01,00,bb */
225  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
226  {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */
227  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */
228  {0xbb, 0x41, 0x2803}, /* 28,41,03,bb */
229  {0xbb, 0x40, 0x2c03}, /* 2c,40,03,bb */
230  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
231  {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */
232  {}
233 };
234 static const struct usb_action adcm2700_InitialScale[] = {
235  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */
236  {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */
237  {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */
238  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */
239  {0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,d3,cc */
240  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */
241  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */
242  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */
243  {0xa0, 0xd0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d0,cc */
244  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */
245  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */
246  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */
247  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
248  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */
249  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */
250  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */
251  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */
252  {0xa0, 0xd8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,d8,cc */
253  {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */
254  {0xbb, 0x00, 0x0400}, /* 04,00,00,bb */
255  {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */
256  {0xbb, 0x0f, 0x140f}, /* 14,0f,0f,bb */
257  {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */
258  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */
259  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */
260  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */
261  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */
262  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */
263  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */
264  {0xa0, 0x58, ZC3XX_R116_RGAIN}, /* 01,16,58,cc */
265  {0xa0, 0x5a, ZC3XX_R118_BGAIN}, /* 01,18,5a,cc */
266  {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */
267  {0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,d3,cc */
268  {0xbb, 0x00, 0x0408}, /* 04,00,08,bb */
269  {0xdd, 0x00, 0x0200}, /* 00,02,00,dd */
270  {0xbb, 0x00, 0x0400}, /* 04,00,00,bb */
271  {0xdd, 0x00, 0x0050}, /* 00,00,50,dd */
272  {0xbb, 0x0f, 0x140f}, /* 14,0f,0f,bb */
273  {0xbb, 0xe0, 0x0c2e}, /* 0c,e0,2e,bb */
274  {0xbb, 0x01, 0x2000}, /* 20,01,00,bb */
275  {0xbb, 0x96, 0x2400}, /* 24,96,00,bb */
276  {0xbb, 0x06, 0x1006}, /* 10,06,06,bb */
277  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
278  {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */
279  {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */
280  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */
281  {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */
282  {0xbb, 0x5f, 0x2090}, /* 20,5f,90,bb */
283  {0xbb, 0x01, 0x8000}, /* 80,01,00,bb */
284  {0xbb, 0x09, 0x8400}, /* 84,09,00,bb */
285  {0xbb, 0x86, 0x0002}, /* 00,88,02,bb */
286  {0xbb, 0xe6, 0x0401}, /* 04,e6,01,bb */
287  {0xbb, 0x86, 0x0802}, /* 08,88,02,bb */
288  {0xbb, 0xe6, 0x0c01}, /* 0c,e6,01,bb */
289  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
290  {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */
291  {0xaa, 0xfe, 0x0000}, /* 00,fe,00,aa */
292  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */
293  {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */
294  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
295  {0xaa, 0xfe, 0x0020}, /* 00,fe,20,aa */
296  /*******/
297  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */
298  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
299  {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */
300  {0xaa, 0xfe, 0x0000}, /* 00,fe,00,aa */
301  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */
302  {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */
303  {0xbb, 0x04, 0x0400}, /* 04,04,00,bb */
304  {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */
305  {0xbb, 0x01, 0x0400}, /* 04,01,00,bb */
306  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
307  {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */
308  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */
309  {0xbb, 0x41, 0x2803}, /* 28,41,03,bb */
310  {0xbb, 0x40, 0x2c03}, /* 2c,40,03,bb */
311  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
312  {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */
313  {}
314 };
315 static const struct usb_action adcm2700_50HZ[] = {
316  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
317  {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */
318  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */
319  {0xbb, 0x05, 0x8400}, /* 84,05,00,bb */
320  {0xbb, 0xd0, 0xb007}, /* b0,d0,07,bb */
321  {0xbb, 0xa0, 0xb80f}, /* b8,a0,0f,bb */
322  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
323  {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */
324  {0xaa, 0x26, 0x00d0}, /* 00,26,d0,aa */
325  {0xaa, 0x28, 0x0002}, /* 00,28,02,aa */
326  {}
327 };
328 static const struct usb_action adcm2700_60HZ[] = {
329  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
330  {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */
331  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */
332  {0xbb, 0x07, 0x8400}, /* 84,07,00,bb */
333  {0xbb, 0x82, 0xb006}, /* b0,82,06,bb */
334  {0xbb, 0x04, 0xb80d}, /* b8,04,0d,bb */
335  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
336  {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */
337  {0xaa, 0x26, 0x0057}, /* 00,26,57,aa */
338  {0xaa, 0x28, 0x0002}, /* 00,28,02,aa */
339  {}
340 };
341 static const struct usb_action adcm2700_NoFliker[] = {
342  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
343  {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */
344  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */
345  {0xbb, 0x07, 0x8400}, /* 84,07,00,bb */
346  {0xbb, 0x05, 0xb000}, /* b0,05,00,bb */
347  {0xbb, 0xa0, 0xb801}, /* b8,a0,01,bb */
348  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
349  {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */
350  {}
351 };
352 static const struct usb_action cs2102_InitialScale[] = { /* 320x240 */
353  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
354  {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
355  {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT},
356  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
357  {0xa0, 0x20, ZC3XX_R080_HBLANKHIGH},
358  {0xa0, 0x21, ZC3XX_R081_HBLANKLOW},
359  {0xa0, 0x30, ZC3XX_R083_RGAINADDR},
360  {0xa0, 0x31, ZC3XX_R084_GGAINADDR},
361  {0xa0, 0x32, ZC3XX_R085_BGAINADDR},
362  {0xa0, 0x23, ZC3XX_R086_EXPTIMEHIGH},
363  {0xa0, 0x24, ZC3XX_R087_EXPTIMEMID},
364  {0xa0, 0x25, ZC3XX_R088_EXPTIMELOW},
365  {0xa0, 0xb3, ZC3XX_R08B_I2CDEVICEADDR},
366  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */
367  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
368  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
369  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
370  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
371  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
372  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
373  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
374  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
375  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
376  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
377  {0xaa, 0x02, 0x0008},
378  {0xaa, 0x03, 0x0000},
379  {0xaa, 0x11, 0x0000},
380  {0xaa, 0x12, 0x0089},
381  {0xaa, 0x13, 0x0000},
382  {0xaa, 0x14, 0x00e9},
383  {0xaa, 0x20, 0x0000},
384  {0xaa, 0x22, 0x0000},
385  {0xaa, 0x0b, 0x0004},
386  {0xaa, 0x30, 0x0030},
387  {0xaa, 0x31, 0x0030},
388  {0xaa, 0x32, 0x0030},
389  {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
390  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
391  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
392  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
393  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
394  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
395  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
396  {0xa0, 0x10, 0x01ae},
397  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
398  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
399  {0xa0, 0x68, ZC3XX_R18D_YTARGET},
400  {0xa0, 0x00, 0x01ad},
401  {}
402 };
403 
404 static const struct usb_action cs2102_Initial[] = { /* 640x480 */
405  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
406  {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
407  {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT},
408  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
409  {0xa0, 0x20, ZC3XX_R080_HBLANKHIGH},
410  {0xa0, 0x21, ZC3XX_R081_HBLANKLOW},
411  {0xa0, 0x30, ZC3XX_R083_RGAINADDR},
412  {0xa0, 0x31, ZC3XX_R084_GGAINADDR},
413  {0xa0, 0x32, ZC3XX_R085_BGAINADDR},
414  {0xa0, 0x23, ZC3XX_R086_EXPTIMEHIGH},
415  {0xa0, 0x24, ZC3XX_R087_EXPTIMEMID},
416  {0xa0, 0x25, ZC3XX_R088_EXPTIMELOW},
417  {0xa0, 0xb3, ZC3XX_R08B_I2CDEVICEADDR},
418  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */
419  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
420  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
421  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
422  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
423  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
424  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
425  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
426  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
427  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
428  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
429  {0xaa, 0x02, 0x0008},
430  {0xaa, 0x03, 0x0000},
431  {0xaa, 0x11, 0x0001},
432  {0xaa, 0x12, 0x0087},
433  {0xaa, 0x13, 0x0001},
434  {0xaa, 0x14, 0x00e7},
435  {0xaa, 0x20, 0x0000},
436  {0xaa, 0x22, 0x0000},
437  {0xaa, 0x0b, 0x0004},
438  {0xaa, 0x30, 0x0030},
439  {0xaa, 0x31, 0x0030},
440  {0xaa, 0x32, 0x0030},
441  {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION},
442  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
443  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
444  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
445  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
446  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
447  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
448  {0xa0, 0x15, 0x01ae},
449  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
450  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
451  {0xa0, 0x68, ZC3XX_R18D_YTARGET},
452  {0xa0, 0x00, 0x01ad},
453  {}
454 };
455 static const struct usb_action cs2102_50HZScale[] = {
456  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
457  {0xaa, 0x23, 0x0001},
458  {0xaa, 0x24, 0x005f},
459  {0xaa, 0x25, 0x0090},
460  {0xaa, 0x21, 0x00dd},
461  {0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH},
462  {0xa0, 0xbf, ZC3XX_R191_EXPOSURELIMITMID},
463  {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW},
464  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
465  {0xa0, 0x3a, ZC3XX_R196_ANTIFLICKERMID},
466  {0xa0, 0x98, ZC3XX_R197_ANTIFLICKERLOW},
467  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
468  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
469  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
470  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
471  {0xa0, 0xdd, ZC3XX_R01D_HSYNC_0},
472  {0xa0, 0xe4, ZC3XX_R01E_HSYNC_1},
473  {0xa0, 0xf0, ZC3XX_R01F_HSYNC_2},
474  {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
475  {}
476 };
477 static const struct usb_action cs2102_50HZ[] = {
478  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
479  {0xaa, 0x23, 0x0000},
480  {0xaa, 0x24, 0x00af},
481  {0xaa, 0x25, 0x00c8},
482  {0xaa, 0x21, 0x0068},
483  {0xa0, 0x01, ZC3XX_R190_EXPOSURELIMITHIGH},
484  {0xa0, 0x5f, ZC3XX_R191_EXPOSURELIMITMID},
485  {0xa0, 0x90, ZC3XX_R192_EXPOSURELIMITLOW},
486  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
487  {0xa0, 0x1d, ZC3XX_R196_ANTIFLICKERMID},
488  {0xa0, 0x4c, ZC3XX_R197_ANTIFLICKERLOW},
489  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
490  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
491  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
492  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
493  {0xa0, 0x68, ZC3XX_R01D_HSYNC_0},
494  {0xa0, 0xe3, ZC3XX_R01E_HSYNC_1},
495  {0xa0, 0xf0, ZC3XX_R01F_HSYNC_2},
496  {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
497  {}
498 };
499 static const struct usb_action cs2102_60HZScale[] = {
500  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
501  {0xaa, 0x23, 0x0001},
502  {0xaa, 0x24, 0x0055},
503  {0xaa, 0x25, 0x00cc},
504  {0xaa, 0x21, 0x003f},
505  {0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH},
506  {0xa0, 0xab, ZC3XX_R191_EXPOSURELIMITMID},
507  {0xa0, 0x98, ZC3XX_R192_EXPOSURELIMITLOW},
508  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
509  {0xa0, 0x30, ZC3XX_R196_ANTIFLICKERMID},
510  {0xa0, 0xd4, ZC3XX_R197_ANTIFLICKERLOW},
511  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
512  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
513  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
514  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
515  {0xa0, 0x39, ZC3XX_R01D_HSYNC_0},
516  {0xa0, 0x70, ZC3XX_R01E_HSYNC_1},
517  {0xa0, 0xb0, ZC3XX_R01F_HSYNC_2},
518  {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
519  {}
520 };
521 static const struct usb_action cs2102_60HZ[] = {
522  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
523  {0xaa, 0x23, 0x0000},
524  {0xaa, 0x24, 0x00aa},
525  {0xaa, 0x25, 0x00e6},
526  {0xaa, 0x21, 0x003f},
527  {0xa0, 0x01, ZC3XX_R190_EXPOSURELIMITHIGH},
528  {0xa0, 0x55, ZC3XX_R191_EXPOSURELIMITMID},
529  {0xa0, 0xcc, ZC3XX_R192_EXPOSURELIMITLOW},
530  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
531  {0xa0, 0x18, ZC3XX_R196_ANTIFLICKERMID},
532  {0xa0, 0x6a, ZC3XX_R197_ANTIFLICKERLOW},
533  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
534  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
535  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
536  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
537  {0xa0, 0x3f, ZC3XX_R01D_HSYNC_0},
538  {0xa0, 0xa5, ZC3XX_R01E_HSYNC_1},
539  {0xa0, 0xf0, ZC3XX_R01F_HSYNC_2},
540  {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
541  {}
542 };
543 static const struct usb_action cs2102_NoFlikerScale[] = {
544  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
545  {0xaa, 0x23, 0x0001},
546  {0xaa, 0x24, 0x005f},
547  {0xaa, 0x25, 0x0000},
548  {0xaa, 0x21, 0x0001},
549  {0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH},
550  {0xa0, 0xbf, ZC3XX_R191_EXPOSURELIMITMID},
551  {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW},
552  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
553  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
554  {0xa0, 0x80, ZC3XX_R197_ANTIFLICKERLOW},
555  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
556  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
557  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
558  {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
559  {0xa0, 0x01, ZC3XX_R01D_HSYNC_0},
560  {0xa0, 0x40, ZC3XX_R01E_HSYNC_1},
561  {0xa0, 0xa0, ZC3XX_R01F_HSYNC_2},
562  {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
563  {}
564 };
565 static const struct usb_action cs2102_NoFliker[] = {
566  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
567  {0xaa, 0x23, 0x0000},
568  {0xaa, 0x24, 0x00af},
569  {0xaa, 0x25, 0x0080},
570  {0xaa, 0x21, 0x0001},
571  {0xa0, 0x01, ZC3XX_R190_EXPOSURELIMITHIGH},
572  {0xa0, 0x5f, ZC3XX_R191_EXPOSURELIMITMID},
573  {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW},
574  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
575  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
576  {0xa0, 0x80, ZC3XX_R197_ANTIFLICKERLOW},
577  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
578  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
579  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
580  {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
581  {0xa0, 0x01, ZC3XX_R01D_HSYNC_0},
582  {0xa0, 0x40, ZC3XX_R01E_HSYNC_1},
583  {0xa0, 0xa0, ZC3XX_R01F_HSYNC_2},
584  {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
585  {}
586 };
587 
588 /* CS2102_KOCOM */
589 static const struct usb_action cs2102K_InitialScale[] = {
590  {0xa0, 0x11, ZC3XX_R002_CLOCKSELECT},
591  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
592  {0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT},
593  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
594  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
595  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
596  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
597  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
598  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
599  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
600  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
601  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
602  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
603  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
604  {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},
605  {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},
606  {0xa0, 0x55, ZC3XX_R08B_I2CDEVICEADDR},
607  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
608  {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
609  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
610  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
611  {0xa0, 0x0a, ZC3XX_R092_I2CADDRESSSELECT},
612  {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
613  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
614  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
615  {0xa0, 0x0b, ZC3XX_R092_I2CADDRESSSELECT},
616  {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
617  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
618  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
619  {0xa0, 0x0c, ZC3XX_R092_I2CADDRESSSELECT},
620  {0xa0, 0x7c, ZC3XX_R093_I2CSETVALUE},
621  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
622  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
623  {0xa0, 0x0d, ZC3XX_R092_I2CADDRESSSELECT},
624  {0xa0, 0xa3, ZC3XX_R093_I2CSETVALUE},
625  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
626  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
627  {0xa0, 0x03, ZC3XX_R092_I2CADDRESSSELECT},
628  {0xa0, 0xfb, ZC3XX_R093_I2CSETVALUE},
629  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
630  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
631  {0xa0, 0x05, ZC3XX_R092_I2CADDRESSSELECT},
632  {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
633  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
634  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
635  {0xa0, 0x06, ZC3XX_R092_I2CADDRESSSELECT},
636  {0xa0, 0x03, ZC3XX_R093_I2CSETVALUE},
637  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
638  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
639  {0xa0, 0x09, ZC3XX_R092_I2CADDRESSSELECT},
640  {0xa0, 0x08, ZC3XX_R093_I2CSETVALUE},
641  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
642  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
643  {0xa0, 0x0e, ZC3XX_R092_I2CADDRESSSELECT},
644  {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
645  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
646  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
647  {0xa0, 0x0f, ZC3XX_R092_I2CADDRESSSELECT},
648  {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE},
649  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
650  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
651  {0xa0, 0x10, ZC3XX_R092_I2CADDRESSSELECT},
652  {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE},
653  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
654  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
655  {0xa0, 0x11, ZC3XX_R092_I2CADDRESSSELECT},
656  {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE},
657  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
658  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
659  {0xa0, 0x12, ZC3XX_R092_I2CADDRESSSELECT},
660  {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE},
661  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
662  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
663  {0xa0, 0x15, ZC3XX_R092_I2CADDRESSSELECT},
664  {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
665  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
666  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
667  {0xa0, 0x16, ZC3XX_R092_I2CADDRESSSELECT},
668  {0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE},
669  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
670  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
671  {0xa0, 0x17, ZC3XX_R092_I2CADDRESSSELECT},
672  {0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE},
673  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
674  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
675  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
676  {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
677  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
678  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
679  {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},
680  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
681  {0xa0, 0x78, ZC3XX_R18D_YTARGET},
682  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
683  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
684  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
685  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
686  {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID},
687  {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW},
688  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
689  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
690  {0xa0, 0x00, 0x01ad},
691  {0xa0, 0x01, 0x01b1},
692  {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE},
693  {0xa0, 0x60, ZC3XX_R116_RGAIN},
694  {0xa0, 0x40, ZC3XX_R117_GGAIN},
695  {0xa0, 0x4c, ZC3XX_R118_BGAIN},
696  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */
697  {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */
698  {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */
699  {0xa0, 0x13, ZC3XX_R120_GAMMA00}, /* gamma 4 */
700  {0xa0, 0x38, ZC3XX_R121_GAMMA01},
701  {0xa0, 0x59, ZC3XX_R122_GAMMA02},
702  {0xa0, 0x79, ZC3XX_R123_GAMMA03},
703  {0xa0, 0x92, ZC3XX_R124_GAMMA04},
704  {0xa0, 0xa7, ZC3XX_R125_GAMMA05},
705  {0xa0, 0xb9, ZC3XX_R126_GAMMA06},
706  {0xa0, 0xc8, ZC3XX_R127_GAMMA07},
707  {0xa0, 0xd4, ZC3XX_R128_GAMMA08},
708  {0xa0, 0xdf, ZC3XX_R129_GAMMA09},
709  {0xa0, 0xe7, ZC3XX_R12A_GAMMA0A},
710  {0xa0, 0xee, ZC3XX_R12B_GAMMA0B},
711  {0xa0, 0xf4, ZC3XX_R12C_GAMMA0C},
712  {0xa0, 0xf9, ZC3XX_R12D_GAMMA0D},
713  {0xa0, 0xfc, ZC3XX_R12E_GAMMA0E},
714  {0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
715  {0xa0, 0x26, ZC3XX_R130_GAMMA10},
716  {0xa0, 0x22, ZC3XX_R131_GAMMA11},
717  {0xa0, 0x20, ZC3XX_R132_GAMMA12},
718  {0xa0, 0x1c, ZC3XX_R133_GAMMA13},
719  {0xa0, 0x16, ZC3XX_R134_GAMMA14},
720  {0xa0, 0x13, ZC3XX_R135_GAMMA15},
721  {0xa0, 0x10, ZC3XX_R136_GAMMA16},
722  {0xa0, 0x0d, ZC3XX_R137_GAMMA17},
723  {0xa0, 0x0b, ZC3XX_R138_GAMMA18},
724  {0xa0, 0x09, ZC3XX_R139_GAMMA19},
725  {0xa0, 0x07, ZC3XX_R13A_GAMMA1A},
726  {0xa0, 0x06, ZC3XX_R13B_GAMMA1B},
727  {0xa0, 0x05, ZC3XX_R13C_GAMMA1C},
728  {0xa0, 0x04, ZC3XX_R13D_GAMMA1D},
729  {0xa0, 0x03, ZC3XX_R13E_GAMMA1E},
730  {0xa0, 0x02, ZC3XX_R13F_GAMMA1F},
731  {0xa0, 0x58, ZC3XX_R10A_RGB00}, /* matrix */
732  {0xa0, 0xf4, ZC3XX_R10B_RGB01},
733  {0xa0, 0xf4, ZC3XX_R10C_RGB02},
734  {0xa0, 0xf4, ZC3XX_R10D_RGB10},
735  {0xa0, 0x58, ZC3XX_R10E_RGB11},
736  {0xa0, 0xf4, ZC3XX_R10F_RGB12},
737  {0xa0, 0xf4, ZC3XX_R110_RGB20},
738  {0xa0, 0xf4, ZC3XX_R111_RGB21},
739  {0xa0, 0x58, ZC3XX_R112_RGB22},
740  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
741  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
742  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
743  {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
744  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
745  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
746  {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
747  {0xa0, 0x22, ZC3XX_R093_I2CSETVALUE},
748  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
749  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
750  {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
751  {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
752  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
753  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
754  {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
755  {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
756  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
757  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
758  {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
759  {0xa0, 0x22, ZC3XX_R093_I2CSETVALUE},
760  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
761  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
762  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
763  {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
764  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
765  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
766  {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH},
767  {0xa0, 0x22, ZC3XX_R0A4_EXPOSURETIMELOW},
768  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
769  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
770  {0xa0, 0xee, ZC3XX_R192_EXPOSURELIMITLOW},
771  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
772  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
773  {0xa0, 0x3a, ZC3XX_R197_ANTIFLICKERLOW},
774  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
775  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
776  {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF},
777  {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP},
778  {0xa0, 0x04, ZC3XX_R01D_HSYNC_0},
779  {0xa0, 0x0f, ZC3XX_R01E_HSYNC_1},
780  {0xa0, 0x19, ZC3XX_R01F_HSYNC_2},
781  {0xa0, 0x1f, ZC3XX_R020_HSYNC_3},
782  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
783  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
784  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
785  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
786  {0xa0, 0x60, ZC3XX_R116_RGAIN},
787  {0xa0, 0x40, ZC3XX_R117_GGAIN},
788  {0xa0, 0x4c, ZC3XX_R118_BGAIN},
789  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
790  {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
791  {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
792  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
793  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
794  {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
795  {0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE},
796  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
797  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
798  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
799  {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
800  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
801  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
802  {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
803  {0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE},
804  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
805  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
806  {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
807  {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
808  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
809  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
810  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
811  {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
812  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
813  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
814  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
815  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
816  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
817  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
818  {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
819  {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
820  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
821  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
822  {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
823  {0xa0, 0x96, ZC3XX_R093_I2CSETVALUE},
824  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
825  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
826  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
827  {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
828  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
829  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
830  {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
831  {0xa0, 0x96, ZC3XX_R093_I2CSETVALUE},
832  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
833  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
834  {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
835  {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
836  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
837  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
838  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
839  {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
840  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
841  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
842  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
843  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
844  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
845  {}
846 };
847 
848 static const struct usb_action cs2102K_Initial[] = {
849  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
850  {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
851  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
852  {0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT},
853  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
854  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
855  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
856  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
857  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
858  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
859  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
860  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
861  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
862  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
863  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
864  {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},
865  {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},
866 /*fixme: next sequence = i2c exchanges*/
867  {0xa0, 0x55, ZC3XX_R08B_I2CDEVICEADDR},
868  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
869  {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
870  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
871  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
872  {0xa0, 0x0a, ZC3XX_R092_I2CADDRESSSELECT},
873  {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
874  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
875  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
876  {0xa0, 0x0b, ZC3XX_R092_I2CADDRESSSELECT},
877  {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
878  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
879  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
880  {0xa0, 0x0c, ZC3XX_R092_I2CADDRESSSELECT},
881  {0xa0, 0x7b, ZC3XX_R093_I2CSETVALUE},
882  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
883  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
884  {0xa0, 0x0d, ZC3XX_R092_I2CADDRESSSELECT},
885  {0xa0, 0xa3, ZC3XX_R093_I2CSETVALUE},
886  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
887  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
888  {0xa0, 0x03, ZC3XX_R092_I2CADDRESSSELECT},
889  {0xa0, 0xfb, ZC3XX_R093_I2CSETVALUE},
890  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
891  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
892  {0xa0, 0x05, ZC3XX_R092_I2CADDRESSSELECT},
893  {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
894  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
895  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
896  {0xa0, 0x06, ZC3XX_R092_I2CADDRESSSELECT},
897  {0xa0, 0x03, ZC3XX_R093_I2CSETVALUE},
898  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
899  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
900  {0xa0, 0x09, ZC3XX_R092_I2CADDRESSSELECT},
901  {0xa0, 0x08, ZC3XX_R093_I2CSETVALUE},
902  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
903  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
904  {0xa0, 0x0e, ZC3XX_R092_I2CADDRESSSELECT},
905  {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
906  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
907  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
908  {0xa0, 0x0f, ZC3XX_R092_I2CADDRESSSELECT},
909  {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE},
910  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
911  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
912  {0xa0, 0x10, ZC3XX_R092_I2CADDRESSSELECT},
913  {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE},
914  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
915  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
916  {0xa0, 0x11, ZC3XX_R092_I2CADDRESSSELECT},
917  {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE},
918  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
919  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
920  {0xa0, 0x12, ZC3XX_R092_I2CADDRESSSELECT},
921  {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE},
922  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
923  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
924  {0xa0, 0x15, ZC3XX_R092_I2CADDRESSSELECT},
925  {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
926  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
927  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
928  {0xa0, 0x16, ZC3XX_R092_I2CADDRESSSELECT},
929  {0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE},
930  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
931  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
932  {0xa0, 0x17, ZC3XX_R092_I2CADDRESSSELECT},
933  {0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE},
934  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
935  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
936  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
937  {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
938  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
939  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
940  {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION},
941  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
942  {0xa0, 0x78, ZC3XX_R18D_YTARGET},
943  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
944  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
945  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
946  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
947  {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID},
948  {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW},
949  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
950  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
951  {0xa0, 0x00, 0x01ad},
952  {0xa0, 0x01, 0x01b1},
953  {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE},
954  {0xa0, 0x60, ZC3XX_R116_RGAIN},
955  {0xa0, 0x40, ZC3XX_R117_GGAIN},
956  {0xa0, 0x4c, ZC3XX_R118_BGAIN},
957  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */
958  {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */
959  {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */
960  {0xa0, 0x13, ZC3XX_R120_GAMMA00}, /* gamma 4 */
961  {0xa0, 0x38, ZC3XX_R121_GAMMA01},
962  {0xa0, 0x59, ZC3XX_R122_GAMMA02},
963  {0xa0, 0x79, ZC3XX_R123_GAMMA03},
964  {0xa0, 0x92, ZC3XX_R124_GAMMA04},
965  {0xa0, 0xa7, ZC3XX_R125_GAMMA05},
966  {0xa0, 0xb9, ZC3XX_R126_GAMMA06},
967  {0xa0, 0xc8, ZC3XX_R127_GAMMA07},
968  {0xa0, 0xd4, ZC3XX_R128_GAMMA08},
969  {0xa0, 0xdf, ZC3XX_R129_GAMMA09},
970  {0xa0, 0xe7, ZC3XX_R12A_GAMMA0A},
971  {0xa0, 0xee, ZC3XX_R12B_GAMMA0B},
972  {0xa0, 0xf4, ZC3XX_R12C_GAMMA0C},
973  {0xa0, 0xf9, ZC3XX_R12D_GAMMA0D},
974  {0xa0, 0xfc, ZC3XX_R12E_GAMMA0E},
975  {0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
976  {0xa0, 0x26, ZC3XX_R130_GAMMA10},
977  {0xa0, 0x22, ZC3XX_R131_GAMMA11},
978  {0xa0, 0x20, ZC3XX_R132_GAMMA12},
979  {0xa0, 0x1c, ZC3XX_R133_GAMMA13},
980  {0xa0, 0x16, ZC3XX_R134_GAMMA14},
981  {0xa0, 0x13, ZC3XX_R135_GAMMA15},
982  {0xa0, 0x10, ZC3XX_R136_GAMMA16},
983  {0xa0, 0x0d, ZC3XX_R137_GAMMA17},
984  {0xa0, 0x0b, ZC3XX_R138_GAMMA18},
985  {0xa0, 0x09, ZC3XX_R139_GAMMA19},
986  {0xa0, 0x07, ZC3XX_R13A_GAMMA1A},
987  {0xa0, 0x06, ZC3XX_R13B_GAMMA1B},
988  {0xa0, 0x05, ZC3XX_R13C_GAMMA1C},
989  {0xa0, 0x04, ZC3XX_R13D_GAMMA1D},
990  {0xa0, 0x03, ZC3XX_R13E_GAMMA1E},
991  {0xa0, 0x02, ZC3XX_R13F_GAMMA1F},
992  {0xa0, 0x58, ZC3XX_R10A_RGB00}, /* matrix */
993  {0xa0, 0xf4, ZC3XX_R10B_RGB01},
994  {0xa0, 0xf4, ZC3XX_R10C_RGB02},
995  {0xa0, 0xf4, ZC3XX_R10D_RGB10},
996  {0xa0, 0x58, ZC3XX_R10E_RGB11},
997  {0xa0, 0xf4, ZC3XX_R10F_RGB12},
998  {0xa0, 0xf4, ZC3XX_R110_RGB20},
999  {0xa0, 0xf4, ZC3XX_R111_RGB21},
1000  {0xa0, 0x58, ZC3XX_R112_RGB22},
1001  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
1002  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
1003  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
1004  {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
1005  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1006  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1007  {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
1008  {0xa0, 0x22, ZC3XX_R093_I2CSETVALUE},
1009  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1010  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1011  {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
1012  {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
1013  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1014  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1015  {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
1016  {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
1017  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1018  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1019  {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
1020  {0xa0, 0x22, ZC3XX_R093_I2CSETVALUE},
1021  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1022  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1023  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
1024  {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
1025  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1026  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1027  {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH},
1028  {0xa0, 0x22, ZC3XX_R0A4_EXPOSURETIMELOW},
1029  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
1030  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
1031  {0xa0, 0xee, ZC3XX_R192_EXPOSURELIMITLOW},
1032  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
1033  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
1034  {0xa0, 0x3a, ZC3XX_R197_ANTIFLICKERLOW},
1035  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
1036  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
1037  {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF},
1038  {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP},
1039  {0xa0, 0x04, ZC3XX_R01D_HSYNC_0},
1040  {0xa0, 0x0f, ZC3XX_R01E_HSYNC_1},
1041  {0xa0, 0x19, ZC3XX_R01F_HSYNC_2},
1042  {0xa0, 0x1f, ZC3XX_R020_HSYNC_3},
1043  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
1044  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
1045  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
1046  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
1047  {0xa0, 0x60, ZC3XX_R116_RGAIN},
1048  {0xa0, 0x40, ZC3XX_R117_GGAIN},
1049  {0xa0, 0x4c, ZC3XX_R118_BGAIN},
1050  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
1051  {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
1052  {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
1053  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1054  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1055  {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
1056  {0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE},
1057  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1058  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1059  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
1060  {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
1061  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1062  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1063  {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
1064  {0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE},
1065  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1066  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1067  {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
1068  {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
1069  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1070  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1071  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
1072  {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
1073  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1074  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1075  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
1076  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
1077  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
1078  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
1079  {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
1080  {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
1081  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1082  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1083  {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
1084  {0xa0, 0x96, ZC3XX_R093_I2CSETVALUE},
1085  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1086  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1087  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
1088  {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
1089  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1090  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1091  {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
1092  {0xa0, 0x96, ZC3XX_R093_I2CSETVALUE},
1093  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1094  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1095  {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
1096  {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
1097  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1098  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1099  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
1100  {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
1101  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1102  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1103  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
1104  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
1105  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
1106 /*fixme:what does the next sequence?*/
1107  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
1108  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
1109  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
1110  {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
1111  {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
1112  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1113  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1114  {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
1115  {0xa0, 0xd0, ZC3XX_R093_I2CSETVALUE},
1116  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1117  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1118  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
1119  {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
1120  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1121  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1122  {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
1123  {0xa0, 0xd0, ZC3XX_R093_I2CSETVALUE},
1124  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1125  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1126  {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
1127  {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
1128  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1129  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1130  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
1131  {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
1132  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1133  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1134  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
1135  {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING},
1136  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
1137  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
1138  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
1139  {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
1140  {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
1141  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1142  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1143  {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
1144  {0xa0, 0x0a, ZC3XX_R093_I2CSETVALUE},
1145  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1146  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1147  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
1148  {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
1149  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1150  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1151  {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
1152  {0xa0, 0x0a, ZC3XX_R093_I2CSETVALUE},
1153  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1154  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1155  {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
1156  {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
1157  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1158  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1159  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
1160  {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
1161  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1162  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1163  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
1164  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
1165  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
1166  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
1167  {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
1168  {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
1169  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1170  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1171  {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
1172  {0xa0, 0x44, ZC3XX_R093_I2CSETVALUE},
1173  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1174  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1175  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
1176  {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
1177  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1178  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1179  {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
1180  {0xa0, 0x44, ZC3XX_R093_I2CSETVALUE},
1181  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1182  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1183  {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
1184  {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
1185  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1186  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1187  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
1188  {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
1189  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1190  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1191  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
1192  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
1193  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
1194  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
1195  {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
1196  {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
1197  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1198  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1199  {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
1200  {0xa0, 0x7e, ZC3XX_R093_I2CSETVALUE},
1201  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1202  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1203  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
1204  {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
1205  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1206  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1207  {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
1208  {0xa0, 0x7e, ZC3XX_R093_I2CSETVALUE},
1209  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1210  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1211  {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
1212  {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
1213  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1214  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1215  {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
1216  {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
1217  {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
1218  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
1219  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
1220  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
1221  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
1222  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
1223  {}
1224 };
1225 
1226 static const struct usb_action gc0305_Initial[] = { /* 640x480 */
1227  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */
1228  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */
1229  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
1230  {0xa0, 0x04, ZC3XX_R002_CLOCKSELECT}, /* 00,02,04,cc */
1231  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */
1232  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */
1233  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */
1234  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */
1235  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */
1236  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */
1237  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */
1238  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */
1239  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */
1240  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */
1241  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */
1242  {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e6,cc */
1243  {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */
1244  {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc */
1245  {0xaa, 0x13, 0x0002}, /* 00,13,02,aa */
1246  {0xaa, 0x15, 0x0003}, /* 00,15,03,aa */
1247  {0xaa, 0x01, 0x0000}, /* 00,01,00,aa */
1248  {0xaa, 0x02, 0x0000}, /* 00,02,00,aa */
1249  {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa */
1250  {0xaa, 0x1c, 0x0017}, /* 00,1c,17,aa */
1251  {0xaa, 0x1d, 0x0080}, /* 00,1d,80,aa */
1252  {0xaa, 0x1f, 0x0008}, /* 00,1f,08,aa */
1253  {0xaa, 0x21, 0x0012}, /* 00,21,12,aa */
1254  {0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,82,cc */
1255  {0xa0, 0x83, ZC3XX_R087_EXPTIMEMID}, /* 00,87,83,cc */
1256  {0xa0, 0x84, ZC3XX_R088_EXPTIMELOW}, /* 00,88,84,cc */
1257  {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */
1258  {0xaa, 0x0a, 0x0000}, /* 00,0a,00,aa */
1259  {0xaa, 0x0b, 0x00b0}, /* 00,0b,b0,aa */
1260  {0xaa, 0x0c, 0x0000}, /* 00,0c,00,aa */
1261  {0xaa, 0x0d, 0x00b0}, /* 00,0d,b0,aa */
1262  {0xaa, 0x0e, 0x0000}, /* 00,0e,00,aa */
1263  {0xaa, 0x0f, 0x00b0}, /* 00,0f,b0,aa */
1264  {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */
1265  {0xaa, 0x11, 0x00b0}, /* 00,11,b0,aa */
1266  {0xaa, 0x16, 0x0001}, /* 00,16,01,aa */
1267  {0xaa, 0x17, 0x00e6}, /* 00,17,e6,aa */
1268  {0xaa, 0x18, 0x0002}, /* 00,18,02,aa */
1269  {0xaa, 0x19, 0x0086}, /* 00,19,86,aa */
1270  {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */
1271  {0xaa, 0x1b, 0x0020}, /* 00,1b,20,aa */
1272  {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,b7,cc */
1273  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
1274  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */
1275  {0xa0, 0x76, ZC3XX_R189_AWBSTATUS}, /* 01,89,76,cc */
1276  {0xa0, 0x09, 0x01ad}, /* 01,ad,09,cc */
1277  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */
1278  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */
1279  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */
1280  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */
1281  {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,60,cc */
1282  {0xa0, 0x85, ZC3XX_R18D_YTARGET}, /* 01,8d,85,cc */
1283  {0xa0, 0x00, 0x011e}, /* 01,1e,00,cc */
1284  {0xa0, 0x52, ZC3XX_R116_RGAIN}, /* 01,16,52,cc */
1285  {0xa0, 0x40, ZC3XX_R117_GGAIN}, /* 01,17,40,cc */
1286  {0xa0, 0x52, ZC3XX_R118_BGAIN}, /* 01,18,52,cc */
1287  {0xa0, 0x03, ZC3XX_R113_RGB03}, /* 01,13,03,cc */
1288  {}
1289 };
1290 static const struct usb_action gc0305_InitialScale[] = { /* 320x240 */
1291  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */
1292  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */
1293  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
1294  {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */
1295  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */
1296  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */
1297  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */
1298  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */
1299  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */
1300  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */
1301  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */
1302  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */
1303  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */
1304  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */
1305  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */
1306  {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e8,cc */
1307  {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */
1308  {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc */
1309  {0xaa, 0x13, 0x0000}, /* 00,13,00,aa */
1310  {0xaa, 0x15, 0x0001}, /* 00,15,01,aa */
1311  {0xaa, 0x01, 0x0000}, /* 00,01,00,aa */
1312  {0xaa, 0x02, 0x0000}, /* 00,02,00,aa */
1313  {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa */
1314  {0xaa, 0x1c, 0x0017}, /* 00,1c,17,aa */
1315  {0xaa, 0x1d, 0x0080}, /* 00,1d,80,aa */
1316  {0xaa, 0x1f, 0x0008}, /* 00,1f,08,aa */
1317  {0xaa, 0x21, 0x0012}, /* 00,21,12,aa */
1318  {0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,82,cc */
1319  {0xa0, 0x83, ZC3XX_R087_EXPTIMEMID}, /* 00,87,83,cc */
1320  {0xa0, 0x84, ZC3XX_R088_EXPTIMELOW}, /* 00,88,84,cc */
1321  {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */
1322  {0xaa, 0x0a, 0x0000}, /* 00,0a,00,aa */
1323  {0xaa, 0x0b, 0x00b0}, /* 00,0b,b0,aa */
1324  {0xaa, 0x0c, 0x0000}, /* 00,0c,00,aa */
1325  {0xaa, 0x0d, 0x00b0}, /* 00,0d,b0,aa */
1326  {0xaa, 0x0e, 0x0000}, /* 00,0e,00,aa */
1327  {0xaa, 0x0f, 0x00b0}, /* 00,0f,b0,aa */
1328  {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */
1329  {0xaa, 0x11, 0x00b0}, /* 00,11,b0,aa */
1330  {0xaa, 0x16, 0x0001}, /* 00,16,01,aa */
1331  {0xaa, 0x17, 0x00e8}, /* 00,17,e8,aa */
1332  {0xaa, 0x18, 0x0002}, /* 00,18,02,aa */
1333  {0xaa, 0x19, 0x0088}, /* 00,19,88,aa */
1334  {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */
1335  {0xaa, 0x1b, 0x0020}, /* 00,1b,20,aa */
1336  {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,b7,cc */
1337  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
1338  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */
1339  {0xa0, 0x76, ZC3XX_R189_AWBSTATUS}, /* 01,89,76,cc */
1340  {0xa0, 0x09, 0x01ad}, /* 01,ad,09,cc */
1341  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */
1342  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */
1343  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */
1344  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */
1345  {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,60,cc */
1346  {0xa0, 0x00, 0x011e}, /* 01,1e,00,cc */
1347  {0xa0, 0x52, ZC3XX_R116_RGAIN}, /* 01,16,52,cc */
1348  {0xa0, 0x40, ZC3XX_R117_GGAIN}, /* 01,17,40,cc */
1349  {0xa0, 0x52, ZC3XX_R118_BGAIN}, /* 01,18,52,cc */
1350  {0xa0, 0x03, ZC3XX_R113_RGB03}, /* 01,13,03,cc */
1351  {}
1352 };
1353 static const struct usb_action gc0305_50HZ[] = {
1354  {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */
1355  {0xaa, 0x83, 0x0002}, /* 00,83,02,aa */
1356  {0xaa, 0x84, 0x0038}, /* 00,84,38,aa */ /* win: 00,84,ec */
1357  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
1358  {0xa0, 0x0b, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,0b,cc */
1359  {0xa0, 0x18, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,18,cc */
1360  /* win: 01,92,10 */
1361  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
1362  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
1363  {0xa0, 0x8e, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,8e,cc */
1364  /* win: 01,97,ec */
1365  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc */
1366  {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc */
1367  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */
1368  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */
1369  {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc */
1370  {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc */
1371  {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc */
1372  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
1373  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,60,cc */
1374  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */
1375 /* {0xa0, 0x85, ZC3XX_R18D_YTARGET}, * 01,8d,85,cc *
1376  * if 640x480 */
1377  {}
1378 };
1379 static const struct usb_action gc0305_60HZ[] = {
1380  {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */
1381  {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */
1382  {0xaa, 0x84, 0x00ec}, /* 00,84,ec,aa */
1383  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
1384  {0xa0, 0x0b, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,0b,cc */
1385  {0xa0, 0x10, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,10,cc */
1386  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
1387  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
1388  {0xa0, 0xec, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,ec,cc */
1389  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc */
1390  {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc */
1391  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */
1392  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */
1393  {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc */
1394  {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc */
1395  {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc */
1396  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
1397  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,60,cc */
1398  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */
1399  {0xa0, 0x80, ZC3XX_R18D_YTARGET}, /* 01,8d,80,cc */
1400  {}
1401 };
1402 
1403 static const struct usb_action gc0305_NoFliker[] = {
1404  {0xa0, 0x0c, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0c,cc */
1405  {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */
1406  {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */
1407  {0xaa, 0x84, 0x0020}, /* 00,84,20,aa */
1408  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
1409  {0xa0, 0x00, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,00,cc */
1410  {0xa0, 0x48, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,48,cc */
1411  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
1412  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
1413  {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */
1414  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc */
1415  {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc */
1416  {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc */
1417  {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc */
1418  {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc */
1419  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
1420  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,60,cc */
1421  {0xa0, 0x03, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,03,cc */
1422  {0xa0, 0x80, ZC3XX_R18D_YTARGET}, /* 01,8d,80,cc */
1423  {}
1424 };
1425 
1426 static const struct usb_action hdcs2020_InitialScale[] = {
1427  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
1428  {0xa0, 0x11, ZC3XX_R002_CLOCKSELECT},
1429  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* qtable 0x05 */
1430  {0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT},
1431  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
1432  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
1433  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
1434  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
1435  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
1436  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
1437  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
1438  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
1439  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
1440  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
1441  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
1442  {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},
1443  {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},
1444  {0xaa, 0x1c, 0x0000},
1445  {0xaa, 0x0a, 0x0001},
1446  {0xaa, 0x0b, 0x0006},
1447  {0xaa, 0x0c, 0x007b},
1448  {0xaa, 0x0d, 0x00a7},
1449  {0xaa, 0x03, 0x00fb},
1450  {0xaa, 0x05, 0x0000},
1451  {0xaa, 0x06, 0x0003},
1452  {0xaa, 0x09, 0x0008},
1453 
1454  {0xaa, 0x0f, 0x0018}, /* set sensor gain */
1455  {0xaa, 0x10, 0x0018},
1456  {0xaa, 0x11, 0x0018},
1457  {0xaa, 0x12, 0x0018},
1458 
1459  {0xaa, 0x15, 0x004e},
1460  {0xaa, 0x1c, 0x0004},
1461  {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},
1462  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
1463  {0xa0, 0x70, ZC3XX_R18D_YTARGET},
1464  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
1465  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
1466  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
1467  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
1468  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
1469  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
1470  {0xa1, 0x01, 0x0002},
1471  {0xa1, 0x01, 0x0008},
1472  {0xa1, 0x01, 0x0180},
1473  {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE},
1474  {0xa0, 0x40, ZC3XX_R116_RGAIN},
1475  {0xa0, 0x40, ZC3XX_R117_GGAIN},
1476  {0xa0, 0x40, ZC3XX_R118_BGAIN},
1477  {0xa1, 0x01, 0x0008},
1478  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */
1479  {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */
1480  {0xa1, 0x01, 0x01c8},
1481  {0xa1, 0x01, 0x01c9},
1482  {0xa1, 0x01, 0x01ca},
1483  {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */
1484  {0xa0, 0x13, ZC3XX_R120_GAMMA00}, /* gamma 4 */
1485  {0xa0, 0x38, ZC3XX_R121_GAMMA01},
1486  {0xa0, 0x59, ZC3XX_R122_GAMMA02},
1487  {0xa0, 0x79, ZC3XX_R123_GAMMA03},
1488  {0xa0, 0x92, ZC3XX_R124_GAMMA04},
1489  {0xa0, 0xa7, ZC3XX_R125_GAMMA05},
1490  {0xa0, 0xb9, ZC3XX_R126_GAMMA06},
1491  {0xa0, 0xc8, ZC3XX_R127_GAMMA07},
1492  {0xa0, 0xd4, ZC3XX_R128_GAMMA08},
1493  {0xa0, 0xdf, ZC3XX_R129_GAMMA09},
1494  {0xa0, 0xe7, ZC3XX_R12A_GAMMA0A},
1495  {0xa0, 0xee, ZC3XX_R12B_GAMMA0B},
1496  {0xa0, 0xf4, ZC3XX_R12C_GAMMA0C},
1497  {0xa0, 0xf9, ZC3XX_R12D_GAMMA0D},
1498  {0xa0, 0xfc, ZC3XX_R12E_GAMMA0E},
1499  {0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
1500  {0xa0, 0x26, ZC3XX_R130_GAMMA10},
1501  {0xa0, 0x22, ZC3XX_R131_GAMMA11},
1502  {0xa0, 0x20, ZC3XX_R132_GAMMA12},
1503  {0xa0, 0x1c, ZC3XX_R133_GAMMA13},
1504  {0xa0, 0x16, ZC3XX_R134_GAMMA14},
1505  {0xa0, 0x13, ZC3XX_R135_GAMMA15},
1506  {0xa0, 0x10, ZC3XX_R136_GAMMA16},
1507  {0xa0, 0x0d, ZC3XX_R137_GAMMA17},
1508  {0xa0, 0x0b, ZC3XX_R138_GAMMA18},
1509  {0xa0, 0x09, ZC3XX_R139_GAMMA19},
1510  {0xa0, 0x07, ZC3XX_R13A_GAMMA1A},
1511  {0xa0, 0x06, ZC3XX_R13B_GAMMA1B},
1512  {0xa0, 0x05, ZC3XX_R13C_GAMMA1C},
1513  {0xa0, 0x04, ZC3XX_R13D_GAMMA1D},
1514  {0xa0, 0x03, ZC3XX_R13E_GAMMA1E},
1515  {0xa0, 0x02, ZC3XX_R13F_GAMMA1F},
1516 
1517  {0xa0, 0x66, ZC3XX_R10A_RGB00}, /* matrix */
1518  {0xa0, 0xed, ZC3XX_R10B_RGB01},
1519  {0xa0, 0xed, ZC3XX_R10C_RGB02},
1520  {0xa0, 0xed, ZC3XX_R10D_RGB10},
1521  {0xa0, 0x66, ZC3XX_R10E_RGB11},
1522  {0xa0, 0xed, ZC3XX_R10F_RGB12},
1523  {0xa0, 0xed, ZC3XX_R110_RGB20},
1524  {0xa0, 0xed, ZC3XX_R111_RGB21},
1525  {0xa0, 0x66, ZC3XX_R112_RGB22},
1526 
1527  {0xa1, 0x01, 0x0180},
1528  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
1529  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
1530  {0xaa, 0x13, 0x0031},
1531  {0xaa, 0x14, 0x0001},
1532  {0xaa, 0x0e, 0x0004},
1533  {0xaa, 0x19, 0x00cd},
1534  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
1535  {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID},
1536  {0xa0, 0x62, ZC3XX_R192_EXPOSURELIMITLOW},
1537  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
1538  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
1539  {0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW},
1540  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
1541  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
1542 
1543  {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 0x14 */
1544  {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP},
1545  {0xa0, 0x04, ZC3XX_R01D_HSYNC_0},
1546  {0xa0, 0x18, ZC3XX_R01E_HSYNC_1},
1547  {0xa0, 0x2c, ZC3XX_R01F_HSYNC_2},
1548  {0xa0, 0x41, ZC3XX_R020_HSYNC_3},
1549  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
1550  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
1551  {0xa1, 0x01, 0x0180},
1552  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
1553  {0xa0, 0x40, ZC3XX_R116_RGAIN},
1554  {0xa0, 0x40, ZC3XX_R117_GGAIN},
1555  {0xa0, 0x40, ZC3XX_R118_BGAIN},
1556  {}
1557 };
1558 static const struct usb_action hdcs2020_Initial[] = {
1559  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
1560  {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
1561  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
1562  {0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT},
1563  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
1564  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
1565  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
1566  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
1567  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
1568  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
1569  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
1570  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
1571  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
1572  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
1573  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
1574  {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},
1575  {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},
1576  {0xaa, 0x1c, 0x0000},
1577  {0xaa, 0x0a, 0x0001},
1578  {0xaa, 0x0b, 0x0006},
1579  {0xaa, 0x0c, 0x007a},
1580  {0xaa, 0x0d, 0x00a7},
1581  {0xaa, 0x03, 0x00fb},
1582  {0xaa, 0x05, 0x0000},
1583  {0xaa, 0x06, 0x0003},
1584  {0xaa, 0x09, 0x0008},
1585  {0xaa, 0x0f, 0x0018}, /* original setting */
1586  {0xaa, 0x10, 0x0018},
1587  {0xaa, 0x11, 0x0018},
1588  {0xaa, 0x12, 0x0018},
1589  {0xaa, 0x15, 0x004e},
1590  {0xaa, 0x1c, 0x0004},
1591  {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION},
1592  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
1593  {0xa0, 0x70, ZC3XX_R18D_YTARGET},
1594  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
1595  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
1596  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
1597  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
1598  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
1599  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
1600  {0xa1, 0x01, 0x0002},
1601  {0xa1, 0x01, 0x0008},
1602  {0xa1, 0x01, 0x0180},
1603  {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE},
1604  {0xa0, 0x40, ZC3XX_R116_RGAIN},
1605  {0xa0, 0x40, ZC3XX_R117_GGAIN},
1606  {0xa0, 0x40, ZC3XX_R118_BGAIN},
1607  {0xa1, 0x01, 0x0008},
1608  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */
1609  {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */
1610  {0xa1, 0x01, 0x01c8},
1611  {0xa1, 0x01, 0x01c9},
1612  {0xa1, 0x01, 0x01ca},
1613  {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */
1614  {0xa0, 0x13, ZC3XX_R120_GAMMA00}, /* gamma 4 */
1615  {0xa0, 0x38, ZC3XX_R121_GAMMA01},
1616  {0xa0, 0x59, ZC3XX_R122_GAMMA02},
1617  {0xa0, 0x79, ZC3XX_R123_GAMMA03},
1618  {0xa0, 0x92, ZC3XX_R124_GAMMA04},
1619  {0xa0, 0xa7, ZC3XX_R125_GAMMA05},
1620  {0xa0, 0xb9, ZC3XX_R126_GAMMA06},
1621  {0xa0, 0xc8, ZC3XX_R127_GAMMA07},
1622  {0xa0, 0xd4, ZC3XX_R128_GAMMA08},
1623  {0xa0, 0xdf, ZC3XX_R129_GAMMA09},
1624  {0xa0, 0xe7, ZC3XX_R12A_GAMMA0A},
1625  {0xa0, 0xee, ZC3XX_R12B_GAMMA0B},
1626  {0xa0, 0xf4, ZC3XX_R12C_GAMMA0C},
1627  {0xa0, 0xf9, ZC3XX_R12D_GAMMA0D},
1628  {0xa0, 0xfc, ZC3XX_R12E_GAMMA0E},
1629  {0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
1630  {0xa0, 0x26, ZC3XX_R130_GAMMA10},
1631  {0xa0, 0x22, ZC3XX_R131_GAMMA11},
1632  {0xa0, 0x20, ZC3XX_R132_GAMMA12},
1633  {0xa0, 0x1c, ZC3XX_R133_GAMMA13},
1634  {0xa0, 0x16, ZC3XX_R134_GAMMA14},
1635  {0xa0, 0x13, ZC3XX_R135_GAMMA15},
1636  {0xa0, 0x10, ZC3XX_R136_GAMMA16},
1637  {0xa0, 0x0d, ZC3XX_R137_GAMMA17},
1638  {0xa0, 0x0b, ZC3XX_R138_GAMMA18},
1639  {0xa0, 0x09, ZC3XX_R139_GAMMA19},
1640  {0xa0, 0x07, ZC3XX_R13A_GAMMA1A},
1641  {0xa0, 0x06, ZC3XX_R13B_GAMMA1B},
1642  {0xa0, 0x05, ZC3XX_R13C_GAMMA1C},
1643  {0xa0, 0x04, ZC3XX_R13D_GAMMA1D},
1644  {0xa0, 0x03, ZC3XX_R13E_GAMMA1E},
1645  {0xa0, 0x02, ZC3XX_R13F_GAMMA1F},
1646  {0xa0, 0x66, ZC3XX_R10A_RGB00}, /* matrix */
1647  {0xa0, 0xed, ZC3XX_R10B_RGB01},
1648  {0xa0, 0xed, ZC3XX_R10C_RGB02},
1649  {0xa0, 0xed, ZC3XX_R10D_RGB10},
1650  {0xa0, 0x66, ZC3XX_R10E_RGB11},
1651  {0xa0, 0xed, ZC3XX_R10F_RGB12},
1652  {0xa0, 0xed, ZC3XX_R110_RGB20},
1653  {0xa0, 0xed, ZC3XX_R111_RGB21},
1654  {0xa0, 0x66, ZC3XX_R112_RGB22},
1655  {0xa1, 0x01, 0x0180},
1656  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
1657  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
1658  /**** set exposure ***/
1659  {0xaa, 0x13, 0x0031},
1660  {0xaa, 0x14, 0x0001},
1661  {0xaa, 0x0e, 0x0004},
1662  {0xaa, 0x19, 0x00cd},
1663  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
1664  {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID},
1665  {0xa0, 0x62, ZC3XX_R192_EXPOSURELIMITLOW},
1666  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
1667  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
1668  {0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW},
1669  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
1670  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
1671  {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF},
1672  {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP},
1673  {0xa0, 0x04, ZC3XX_R01D_HSYNC_0},
1674  {0xa0, 0x18, ZC3XX_R01E_HSYNC_1},
1675  {0xa0, 0x2c, ZC3XX_R01F_HSYNC_2},
1676  {0xa0, 0x41, ZC3XX_R020_HSYNC_3},
1677  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
1678  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
1679  {0xa1, 0x01, 0x0180},
1680  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
1681  {0xa0, 0x40, ZC3XX_R116_RGAIN},
1682  {0xa0, 0x40, ZC3XX_R117_GGAIN},
1683  {0xa0, 0x40, ZC3XX_R118_BGAIN},
1684  {}
1685 };
1686 static const struct usb_action hdcs2020_50HZ[] = {
1687  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
1688  {0xaa, 0x13, 0x0018}, /* 00,13,18,aa */
1689  {0xaa, 0x14, 0x0001}, /* 00,14,01,aa */
1690  {0xaa, 0x0e, 0x0005}, /* 00,0e,05,aa */
1691  {0xaa, 0x19, 0x001f}, /* 00,19,1f,aa */
1692  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
1693  {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,02,cc */
1694  {0xa0, 0x76, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,76,cc */
1695  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
1696  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
1697  {0xa0, 0x46, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,46,cc */
1698  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
1699  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
1700  {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */
1701  {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,28,cc */
1702  {0xa0, 0x05, ZC3XX_R01D_HSYNC_0}, /* 00,1d,05,cc */
1703  {0xa0, 0x1a, ZC3XX_R01E_HSYNC_1}, /* 00,1e,1a,cc */
1704  {0xa0, 0x2f, ZC3XX_R01F_HSYNC_2}, /* 00,1f,2f,cc */
1705  {}
1706 };
1707 static const struct usb_action hdcs2020_60HZ[] = {
1708  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
1709  {0xaa, 0x13, 0x0031}, /* 00,13,31,aa */
1710  {0xaa, 0x14, 0x0001}, /* 00,14,01,aa */
1711  {0xaa, 0x0e, 0x0004}, /* 00,0e,04,aa */
1712  {0xaa, 0x19, 0x00cd}, /* 00,19,cd,aa */
1713  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
1714  {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,02,cc */
1715  {0xa0, 0x62, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,62,cc */
1716  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
1717  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
1718  {0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,3d,cc */
1719  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
1720  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
1721  {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */
1722  {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,28,cc */
1723  {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, /* 00,1d,04,cc */
1724  {0xa0, 0x18, ZC3XX_R01E_HSYNC_1}, /* 00,1e,18,cc */
1725  {0xa0, 0x2c, ZC3XX_R01F_HSYNC_2}, /* 00,1f,2c,cc */
1726  {}
1727 };
1728 static const struct usb_action hdcs2020_NoFliker[] = {
1729  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
1730  {0xaa, 0x13, 0x0010}, /* 00,13,10,aa */
1731  {0xaa, 0x14, 0x0001}, /* 00,14,01,aa */
1732  {0xaa, 0x0e, 0x0004}, /* 00,0e,04,aa */
1733  {0xaa, 0x19, 0x0000}, /* 00,19,00,aa */
1734  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
1735  {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,02,cc */
1736  {0xa0, 0x70, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,70,cc */
1737  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
1738  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
1739  {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */
1740  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
1741  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
1742  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
1743  {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */
1744  {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, /* 00,1d,04,cc */
1745  {0xa0, 0x17, ZC3XX_R01E_HSYNC_1}, /* 00,1e,17,cc */
1746  {0xa0, 0x2a, ZC3XX_R01F_HSYNC_2}, /* 00,1f,2a,cc */
1747  {}
1748 };
1749 
1750 static const struct usb_action hv7131b_InitialScale[] = { /* 320x240 */
1751  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
1752  {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
1753  {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT},
1754  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
1755  {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION},
1756  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */
1757  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
1758  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
1759  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
1760  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
1761  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
1762  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
1763  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
1764  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
1765  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
1766  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
1767  {0xaa, 0x30, 0x002d},
1768  {0xaa, 0x01, 0x0005},
1769  {0xaa, 0x11, 0x0000},
1770  {0xaa, 0x13, 0x0001}, /* {0xaa, 0x13, 0x0000}, */
1771  {0xaa, 0x14, 0x0001},
1772  {0xaa, 0x15, 0x00e8},
1773  {0xaa, 0x16, 0x0002},
1774  {0xaa, 0x17, 0x0086}, /* 00,17,88,aa */
1775  {0xaa, 0x31, 0x0038},
1776  {0xaa, 0x32, 0x0038},
1777  {0xaa, 0x33, 0x0038},
1778  {0xaa, 0x5b, 0x0001},
1779  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
1780  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
1781  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
1782  {0xa0, 0x68, ZC3XX_R18D_YTARGET},
1783  {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
1784  {0xa0, 0x00, 0x01ad},
1785  {0xa0, 0xc0, 0x019b},
1786  {0xa0, 0xa0, 0x019c},
1787  {0xa0, 0x02, ZC3XX_R188_MINGAIN},
1788  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
1789  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
1790  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
1791  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
1792  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
1793  {0xaa, 0x02, 0x0090}, /* 00,02,80,aa */
1794  {}
1795 };
1796 
1797 static const struct usb_action hv7131b_Initial[] = { /* 640x480*/
1798  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
1799  {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
1800  {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT},
1801  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
1802  {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
1803  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */
1804  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
1805  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
1806  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
1807  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
1808  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
1809  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
1810  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
1811  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
1812  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
1813  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
1814  {0xaa, 0x30, 0x002d},
1815  {0xaa, 0x01, 0x0005},
1816  {0xaa, 0x11, 0x0001},
1817  {0xaa, 0x13, 0x0000}, /* {0xaa, 0x13, 0x0001}; */
1818  {0xaa, 0x14, 0x0001},
1819  {0xaa, 0x15, 0x00e6},
1820  {0xaa, 0x16, 0x0002},
1821  {0xaa, 0x17, 0x0086},
1822  {0xaa, 0x31, 0x0038},
1823  {0xaa, 0x32, 0x0038},
1824  {0xaa, 0x33, 0x0038},
1825  {0xaa, 0x5b, 0x0001},
1826  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
1827  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
1828  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
1829  {0xa0, 0x70, ZC3XX_R18D_YTARGET},
1830  {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
1831  {0xa0, 0x00, 0x01ad},
1832  {0xa0, 0xc0, 0x019b},
1833  {0xa0, 0xa0, 0x019c},
1834  {0xa0, 0x02, ZC3XX_R188_MINGAIN},
1835  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
1836  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
1837  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
1838  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
1839  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
1840  {0xaa, 0x02, 0x0090}, /* {0xaa, 0x02, 0x0080}, */
1841  {}
1842 };
1843 static const struct usb_action hv7131b_50HZ[] = { /* 640x480*/
1844  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
1845  {0xaa, 0x25, 0x0007}, /* 00,25,07,aa */
1846  {0xaa, 0x26, 0x0053}, /* 00,26,53,aa */
1847  {0xaa, 0x27, 0x0000}, /* 00,27,00,aa */
1848  {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */
1849  {0xaa, 0x21, 0x0050}, /* 00,21,50,aa */
1850  {0xaa, 0x22, 0x001b}, /* 00,22,1b,aa */
1851  {0xaa, 0x23, 0x00fc}, /* 00,23,fc,aa */
1852  {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */
1853  {0xa0, 0x9b, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,9b,cc */
1854  {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,80,cc */
1855  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
1856  {0xa0, 0xea, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,ea,cc */
1857  {0xa0, 0x60, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,60,cc */
1858  {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0c,cc */
1859  {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,18,cc */
1860  {0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,18,cc */
1861  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */
1862  {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */
1863  {0xa0, 0x50, ZC3XX_R01E_HSYNC_1}, /* 00,1e,50,cc */
1864  {0xa0, 0x1b, ZC3XX_R01F_HSYNC_2}, /* 00,1f,1b,cc */
1865  {0xa0, 0xfc, ZC3XX_R020_HSYNC_3}, /* 00,20,fc,cc */
1866  {}
1867 };
1868 static const struct usb_action hv7131b_50HZScale[] = { /* 320x240 */
1869  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
1870  {0xaa, 0x25, 0x0007}, /* 00,25,07,aa */
1871  {0xaa, 0x26, 0x0053}, /* 00,26,53,aa */
1872  {0xaa, 0x27, 0x0000}, /* 00,27,00,aa */
1873  {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */
1874  {0xaa, 0x21, 0x0050}, /* 00,21,50,aa */
1875  {0xaa, 0x22, 0x0012}, /* 00,22,12,aa */
1876  {0xaa, 0x23, 0x0080}, /* 00,23,80,aa */
1877  {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */
1878  {0xa0, 0x9b, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,9b,cc */
1879  {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,80,cc */
1880  {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,01,cc */
1881  {0xa0, 0xd4, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,d4,cc */
1882  {0xa0, 0xc0, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,c0,cc */
1883  {0xa0, 0x07, ZC3XX_R18C_AEFREEZE}, /* 01,8c,07,cc */
1884  {0xa0, 0x0f, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,0f,cc */
1885  {0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,18,cc */
1886  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */
1887  {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */
1888  {0xa0, 0x50, ZC3XX_R01E_HSYNC_1}, /* 00,1e,50,cc */
1889  {0xa0, 0x12, ZC3XX_R01F_HSYNC_2}, /* 00,1f,12,cc */
1890  {0xa0, 0x80, ZC3XX_R020_HSYNC_3}, /* 00,20,80,cc */
1891  {}
1892 };
1893 static const struct usb_action hv7131b_60HZ[] = { /* 640x480*/
1894  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
1895  {0xaa, 0x25, 0x0007}, /* 00,25,07,aa */
1896  {0xaa, 0x26, 0x00a1}, /* 00,26,a1,aa */
1897  {0xaa, 0x27, 0x0020}, /* 00,27,20,aa */
1898  {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */
1899  {0xaa, 0x21, 0x0040}, /* 00,21,40,aa */
1900  {0xaa, 0x22, 0x0013}, /* 00,22,13,aa */
1901  {0xaa, 0x23, 0x004c}, /* 00,23,4c,aa */
1902  {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */
1903  {0xa0, 0x4d, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,4d,cc */
1904  {0xa0, 0x60, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,60,cc */
1905  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
1906  {0xa0, 0xc3, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,c3,cc */
1907  {0xa0, 0x50, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,50,cc */
1908  {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0c,cc */
1909  {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,18,cc */
1910  {0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,18,cc */
1911  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */
1912  {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */
1913  {0xa0, 0x40, ZC3XX_R01E_HSYNC_1}, /* 00,1e,40,cc */
1914  {0xa0, 0x13, ZC3XX_R01F_HSYNC_2}, /* 00,1f,13,cc */
1915  {0xa0, 0x4c, ZC3XX_R020_HSYNC_3}, /* 00,20,4c,cc */
1916  {}
1917 };
1918 static const struct usb_action hv7131b_60HZScale[] = { /* 320x240 */
1919  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
1920  {0xaa, 0x25, 0x0007}, /* 00,25,07,aa */
1921  {0xaa, 0x26, 0x00a1}, /* 00,26,a1,aa */
1922  {0xaa, 0x27, 0x0020}, /* 00,27,20,aa */
1923  {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */
1924  {0xaa, 0x21, 0x00a0}, /* 00,21,a0,aa */
1925  {0xaa, 0x22, 0x0016}, /* 00,22,16,aa */
1926  {0xaa, 0x23, 0x0040}, /* 00,23,40,aa */
1927  {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */
1928  {0xa0, 0x4d, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,4d,cc */
1929  {0xa0, 0x60, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,60,cc */
1930  {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,01,cc */
1931  {0xa0, 0x86, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,86,cc */
1932  {0xa0, 0xa0, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,a0,cc */
1933  {0xa0, 0x07, ZC3XX_R18C_AEFREEZE}, /* 01,8c,07,cc */
1934  {0xa0, 0x0f, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,0f,cc */
1935  {0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,18,cc */
1936  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */
1937  {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */
1938  {0xa0, 0xa0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,a0,cc */
1939  {0xa0, 0x16, ZC3XX_R01F_HSYNC_2}, /* 00,1f,16,cc */
1940  {0xa0, 0x40, ZC3XX_R020_HSYNC_3}, /* 00,20,40,cc */
1941  {}
1942 };
1943 static const struct usb_action hv7131b_NoFliker[] = { /* 640x480*/
1944  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
1945  {0xaa, 0x25, 0x0003}, /* 00,25,03,aa */
1946  {0xaa, 0x26, 0x0000}, /* 00,26,00,aa */
1947  {0xaa, 0x27, 0x0000}, /* 00,27,00,aa */
1948  {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */
1949  {0xaa, 0x21, 0x0010}, /* 00,21,10,aa */
1950  {0xaa, 0x22, 0x0000}, /* 00,22,00,aa */
1951  {0xaa, 0x23, 0x0003}, /* 00,23,03,aa */
1952  {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */
1953  {0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,f8,cc */
1954  {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,00,cc */
1955  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
1956  {0xa0, 0x02, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,02,cc */
1957  {0xa0, 0x00, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,00,cc */
1958  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
1959  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
1960  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
1961  {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */
1962  {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */
1963  {0xa0, 0x10, ZC3XX_R01E_HSYNC_1}, /* 00,1e,10,cc */
1964  {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, /* 00,1f,00,cc */
1965  {0xa0, 0x03, ZC3XX_R020_HSYNC_3}, /* 00,20,03,cc */
1966  {}
1967 };
1968 static const struct usb_action hv7131b_NoFlikerScale[] = { /* 320x240 */
1969  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
1970  {0xaa, 0x25, 0x0003}, /* 00,25,03,aa */
1971  {0xaa, 0x26, 0x0000}, /* 00,26,00,aa */
1972  {0xaa, 0x27, 0x0000}, /* 00,27,00,aa */
1973  {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */
1974  {0xaa, 0x21, 0x00a0}, /* 00,21,a0,aa */
1975  {0xaa, 0x22, 0x0016}, /* 00,22,16,aa */
1976  {0xaa, 0x23, 0x0040}, /* 00,23,40,aa */
1977  {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */
1978  {0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,f8,cc */
1979  {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,00,cc */
1980  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
1981  {0xa0, 0x02, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,02,cc */
1982  {0xa0, 0x00, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,00,cc */
1983  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
1984  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
1985  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
1986  {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */
1987  {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */
1988  {0xa0, 0xa0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,a0,cc */
1989  {0xa0, 0x16, ZC3XX_R01F_HSYNC_2}, /* 00,1f,16,cc */
1990  {0xa0, 0x40, ZC3XX_R020_HSYNC_3}, /* 00,20,40,cc */
1991  {}
1992 };
1993 
1994 /* from lPEPI264v.inf (hv7131b!) */
1995 static const struct usb_action hv7131r_InitialScale[] = {
1996  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
1997  {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
1998  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},
1999  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
2000  {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION},
2001  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
2002  {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
2003  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
2004  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
2005  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
2006  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
2007  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
2008  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
2009  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
2010  {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH},
2011  {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},
2012  {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH},
2013  {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},
2014  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
2015  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
2016  {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
2017  {0xdd, 0x00, 0x0200},
2018  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
2019  {0xaa, 0x01, 0x000c},
2020  {0xaa, 0x11, 0x0000},
2021  {0xaa, 0x13, 0x0000},
2022  {0xaa, 0x14, 0x0001},
2023  {0xaa, 0x15, 0x00e8},
2024  {0xaa, 0x16, 0x0002},
2025  {0xaa, 0x17, 0x0088},
2026  {0xaa, 0x30, 0x000b},
2027  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
2028  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
2029  {0xa0, 0x78, ZC3XX_R18D_YTARGET},
2030  {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN},
2031  {0xa0, 0x00, 0x01ad},
2032  {0xa0, 0xc0, 0x019b},
2033  {0xa0, 0xa0, 0x019c},
2034  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
2035  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
2036  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
2037  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
2038  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
2039  {}
2040 };
2041 static const struct usb_action hv7131r_Initial[] = {
2042  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
2043  {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
2044  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},
2045  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
2046  {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION},
2047  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
2048  {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
2049  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
2050  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
2051  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
2052  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
2053  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
2054  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
2055  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
2056  {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH},
2057  {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW},
2058  {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH},
2059  {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW},
2060  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
2061  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
2062  {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
2063  {0xdd, 0x00, 0x0200},
2064  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
2065  {0xaa, 0x01, 0x000c},
2066  {0xaa, 0x11, 0x0000},
2067  {0xaa, 0x13, 0x0000},
2068  {0xaa, 0x14, 0x0001},
2069  {0xaa, 0x15, 0x00e6},
2070  {0xaa, 0x16, 0x0002},
2071  {0xaa, 0x17, 0x0086},
2072  {0xaa, 0x30, 0x000b},
2073  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
2074  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
2075  {0xa0, 0x78, ZC3XX_R18D_YTARGET},
2076  {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN},
2077  {0xa0, 0x00, 0x01ad},
2078  {0xa0, 0xc0, 0x019b},
2079  {0xa0, 0xa0, 0x019c},
2080  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
2081  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
2082  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
2083  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
2084  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
2085  {}
2086 };
2087 static const struct usb_action hv7131r_50HZ[] = {
2088  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
2089  {0xa0, 0x06, ZC3XX_R190_EXPOSURELIMITHIGH},
2090  {0xa0, 0x68, ZC3XX_R191_EXPOSURELIMITMID},
2091  {0xa0, 0xa0, ZC3XX_R192_EXPOSURELIMITLOW},
2092  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
2093  {0xa0, 0xea, ZC3XX_R196_ANTIFLICKERMID},
2094  {0xa0, 0x60, ZC3XX_R197_ANTIFLICKERLOW},
2095  {0xa0, 0x18, ZC3XX_R18C_AEFREEZE},
2096  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
2097  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
2098  {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
2099  {0xa0, 0x00, ZC3XX_R01D_HSYNC_0},
2100  {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1},
2101  {0xa0, 0x00, ZC3XX_R01F_HSYNC_2},
2102  {0xa0, 0x08, ZC3XX_R020_HSYNC_3},
2103  {}
2104 };
2105 static const struct usb_action hv7131r_50HZScale[] = {
2106  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
2107  {0xa0, 0x0c, ZC3XX_R190_EXPOSURELIMITHIGH},
2108  {0xa0, 0xd1, ZC3XX_R191_EXPOSURELIMITMID},
2109  {0xa0, 0x40, ZC3XX_R192_EXPOSURELIMITLOW},
2110  {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH},
2111  {0xa0, 0xd4, ZC3XX_R196_ANTIFLICKERMID},
2112  {0xa0, 0xc0, ZC3XX_R197_ANTIFLICKERLOW},
2113  {0xa0, 0x18, ZC3XX_R18C_AEFREEZE},
2114  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
2115  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
2116  {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
2117  {0xa0, 0x00, ZC3XX_R01D_HSYNC_0},
2118  {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1},
2119  {0xa0, 0x00, ZC3XX_R01F_HSYNC_2},
2120  {0xa0, 0x08, ZC3XX_R020_HSYNC_3},
2121  {}
2122 };
2123 static const struct usb_action hv7131r_60HZ[] = {
2124  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
2125  {0xa0, 0x06, ZC3XX_R190_EXPOSURELIMITHIGH},
2126  {0xa0, 0x1a, ZC3XX_R191_EXPOSURELIMITMID},
2127  {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW},
2128  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
2129  {0xa0, 0xc3, ZC3XX_R196_ANTIFLICKERMID},
2130  {0xa0, 0x50, ZC3XX_R197_ANTIFLICKERLOW},
2131  {0xa0, 0x18, ZC3XX_R18C_AEFREEZE},
2132  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
2133  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
2134  {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
2135  {0xa0, 0x00, ZC3XX_R01D_HSYNC_0},
2136  {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1},
2137  {0xa0, 0x00, ZC3XX_R01F_HSYNC_2},
2138  {0xa0, 0x08, ZC3XX_R020_HSYNC_3},
2139  {}
2140 };
2141 static const struct usb_action hv7131r_60HZScale[] = {
2142  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
2143  {0xa0, 0x0c, ZC3XX_R190_EXPOSURELIMITHIGH},
2144  {0xa0, 0x35, ZC3XX_R191_EXPOSURELIMITMID},
2145  {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW},
2146  {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH},
2147  {0xa0, 0x86, ZC3XX_R196_ANTIFLICKERMID},
2148  {0xa0, 0xa0, ZC3XX_R197_ANTIFLICKERLOW},
2149  {0xa0, 0x18, ZC3XX_R18C_AEFREEZE},
2150  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
2151  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
2152  {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
2153  {0xa0, 0x00, ZC3XX_R01D_HSYNC_0},
2154  {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1},
2155  {0xa0, 0x00, ZC3XX_R01F_HSYNC_2},
2156  {0xa0, 0x08, ZC3XX_R020_HSYNC_3},
2157  {}
2158 };
2159 static const struct usb_action hv7131r_NoFliker[] = {
2160  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
2161  {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH},
2162  {0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID},
2163  {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW},
2164  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
2165  {0xa0, 0x02, ZC3XX_R196_ANTIFLICKERMID},
2166  {0xa0, 0x58, ZC3XX_R197_ANTIFLICKERLOW},
2167  {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
2168  {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
2169  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
2170  {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
2171  {0xa0, 0x00, ZC3XX_R01D_HSYNC_0},
2172  {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1},
2173  {0xa0, 0x00, ZC3XX_R01F_HSYNC_2},
2174  {0xa0, 0x08, ZC3XX_R020_HSYNC_3},
2175  {}
2176 };
2177 static const struct usb_action hv7131r_NoFlikerScale[] = {
2178  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
2179  {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH},
2180  {0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID},
2181  {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW},
2182  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
2183  {0xa0, 0x04, ZC3XX_R196_ANTIFLICKERMID},
2184  {0xa0, 0xb0, ZC3XX_R197_ANTIFLICKERLOW},
2185  {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
2186  {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
2187  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
2188  {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
2189  {0xa0, 0x00, ZC3XX_R01D_HSYNC_0},
2190  {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1},
2191  {0xa0, 0x00, ZC3XX_R01F_HSYNC_2},
2192  {0xa0, 0x08, ZC3XX_R020_HSYNC_3},
2193  {}
2194 };
2195 
2196 static const struct usb_action icm105a_InitialScale[] = {
2197  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
2198  {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
2199  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
2200  {0xa0, 0x0c, ZC3XX_R010_CMOSSENSORSELECT},
2201  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
2202  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
2203  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
2204  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
2205  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
2206  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
2207  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
2208  {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR},
2209  {0xa0, 0x00, ZC3XX_R097_WINYSTARTHIGH},
2210  {0xa0, 0x01, ZC3XX_R098_WINYSTARTLOW},
2211  {0xa0, 0x00, ZC3XX_R099_WINXSTARTHIGH},
2212  {0xa0, 0x01, ZC3XX_R09A_WINXSTARTLOW},
2213  {0xa0, 0x01, ZC3XX_R11A_FIRSTYLOW},
2214  {0xa0, 0x01, ZC3XX_R11C_FIRSTXLOW},
2215  {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH},
2216  {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},
2217  {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH},
2218  {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},
2219  {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
2220  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
2221  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
2222  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
2223  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
2224  {0xaa, 0x01, 0x0010},
2225  {0xaa, 0x03, 0x0000},
2226  {0xaa, 0x04, 0x0001},
2227  {0xaa, 0x05, 0x0020},
2228  {0xaa, 0x06, 0x0001},
2229  {0xaa, 0x08, 0x0000},
2230  {0xaa, 0x03, 0x0001},
2231  {0xaa, 0x04, 0x0011},
2232  {0xaa, 0x05, 0x00a0},
2233  {0xaa, 0x06, 0x0001},
2234  {0xaa, 0x08, 0x0000},
2235  {0xaa, 0x03, 0x0002},
2236  {0xaa, 0x04, 0x0013},
2237  {0xaa, 0x05, 0x0020},
2238  {0xaa, 0x06, 0x0001},
2239  {0xaa, 0x08, 0x0000},
2240  {0xaa, 0x03, 0x0003},
2241  {0xaa, 0x04, 0x0015},
2242  {0xaa, 0x05, 0x0020},
2243  {0xaa, 0x06, 0x0005},
2244  {0xaa, 0x08, 0x0000},
2245  {0xaa, 0x03, 0x0004},
2246  {0xaa, 0x04, 0x0017},
2247  {0xaa, 0x05, 0x0020},
2248  {0xaa, 0x06, 0x000d},
2249  {0xaa, 0x08, 0x0000},
2250  {0xaa, 0x03, 0x0005},
2251  {0xaa, 0x04, 0x0019},
2252  {0xaa, 0x05, 0x0020},
2253  {0xaa, 0x06, 0x0005},
2254  {0xaa, 0x08, 0x0000},
2255  {0xaa, 0x03, 0x0006},
2256  {0xaa, 0x04, 0x0017},
2257  {0xaa, 0x05, 0x0026},
2258  {0xaa, 0x06, 0x0005},
2259  {0xaa, 0x08, 0x0000},
2260  {0xaa, 0x03, 0x0007},
2261  {0xaa, 0x04, 0x0019},
2262  {0xaa, 0x05, 0x0022},
2263  {0xaa, 0x06, 0x0005},
2264  {0xaa, 0x08, 0x0000},
2265  {0xaa, 0x03, 0x0008},
2266  {0xaa, 0x04, 0x0021},
2267  {0xaa, 0x05, 0x00aa},
2268  {0xaa, 0x06, 0x0005},
2269  {0xaa, 0x08, 0x0000},
2270  {0xaa, 0x03, 0x0009},
2271  {0xaa, 0x04, 0x0023},
2272  {0xaa, 0x05, 0x00aa},
2273  {0xaa, 0x06, 0x000d},
2274  {0xaa, 0x08, 0x0000},
2275  {0xaa, 0x03, 0x000a},
2276  {0xaa, 0x04, 0x0025},
2277  {0xaa, 0x05, 0x00aa},
2278  {0xaa, 0x06, 0x0005},
2279  {0xaa, 0x08, 0x0000},
2280  {0xaa, 0x03, 0x000b},
2281  {0xaa, 0x04, 0x00ec},
2282  {0xaa, 0x05, 0x002e},
2283  {0xaa, 0x06, 0x0005},
2284  {0xaa, 0x08, 0x0000},
2285  {0xaa, 0x03, 0x000c},
2286  {0xaa, 0x04, 0x00fa},
2287  {0xaa, 0x05, 0x002a},
2288  {0xaa, 0x06, 0x0005},
2289  {0xaa, 0x08, 0x0000},
2290  {0xaa, 0x07, 0x000d},
2291  {0xaa, 0x01, 0x0005},
2292  {0xaa, 0x94, 0x0002},
2293  {0xaa, 0x90, 0x0000},
2294  {0xaa, 0x91, 0x001f},
2295  {0xaa, 0x10, 0x0064},
2296  {0xaa, 0x9b, 0x00f0},
2297  {0xaa, 0x9c, 0x0002},
2298  {0xaa, 0x14, 0x001a},
2299  {0xaa, 0x20, 0x0080},
2300  {0xaa, 0x22, 0x0080},
2301  {0xaa, 0x24, 0x0080},
2302  {0xaa, 0x26, 0x0080},
2303  {0xaa, 0x00, 0x0084},
2304  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
2305  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
2306  {0xaa, 0xa8, 0x00c0},
2307  {0xa1, 0x01, 0x0002},
2308  {0xa1, 0x01, 0x0008},
2309  {0xa1, 0x01, 0x0180},
2310  {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE},
2311  {0xa0, 0x40, ZC3XX_R116_RGAIN},
2312  {0xa0, 0x40, ZC3XX_R117_GGAIN},
2313  {0xa0, 0x40, ZC3XX_R118_BGAIN},
2314  {0xa1, 0x01, 0x0008},
2315 
2316  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */
2317  {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */
2318  {0xa1, 0x01, 0x01c8},
2319  {0xa1, 0x01, 0x01c9},
2320  {0xa1, 0x01, 0x01ca},
2321  {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */
2322  {0xa0, 0x52, ZC3XX_R10A_RGB00}, /* matrix */
2323  {0xa0, 0xf7, ZC3XX_R10B_RGB01},
2324  {0xa0, 0xf7, ZC3XX_R10C_RGB02},
2325  {0xa0, 0xf7, ZC3XX_R10D_RGB10},
2326  {0xa0, 0x52, ZC3XX_R10E_RGB11},
2327  {0xa0, 0xf7, ZC3XX_R10F_RGB12},
2328  {0xa0, 0xf7, ZC3XX_R110_RGB20},
2329  {0xa0, 0xf7, ZC3XX_R111_RGB21},
2330  {0xa0, 0x52, ZC3XX_R112_RGB22},
2331  {0xa1, 0x01, 0x0180},
2332  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
2333  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
2334  {0xaa, 0x0d, 0x0003},
2335  {0xaa, 0x0c, 0x008c},
2336  {0xaa, 0x0e, 0x0095},
2337  {0xaa, 0x0f, 0x0002},
2338  {0xaa, 0x1c, 0x0094},
2339  {0xaa, 0x1d, 0x0002},
2340  {0xaa, 0x20, 0x0080},
2341  {0xaa, 0x22, 0x0080},
2342  {0xaa, 0x24, 0x0080},
2343  {0xaa, 0x26, 0x0080},
2344  {0xaa, 0x00, 0x0084},
2345  {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH},
2346  {0xa0, 0x94, ZC3XX_R0A4_EXPOSURETIMELOW},
2347  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
2348  {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID},
2349  {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW},
2350  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
2351  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
2352  {0xa0, 0x84, ZC3XX_R197_ANTIFLICKERLOW},
2353  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
2354  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
2355  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
2356  {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP},
2357  {0xa0, 0xe3, ZC3XX_R01D_HSYNC_0},
2358  {0xa0, 0xec, ZC3XX_R01E_HSYNC_1},
2359  {0xa0, 0xf5, ZC3XX_R01F_HSYNC_2},
2360  {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
2361  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
2362  {0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN},
2363  {0xa0, 0xc0, ZC3XX_R11D_GLOBALGAIN},
2364  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
2365  {0xa1, 0x01, 0x0180},
2366  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
2367  {0xa0, 0x40, ZC3XX_R116_RGAIN},
2368  {0xa0, 0x40, ZC3XX_R117_GGAIN},
2369  {0xa0, 0x40, ZC3XX_R118_BGAIN},
2370  {}
2371 };
2372 
2373 static const struct usb_action icm105a_Initial[] = {
2374  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
2375  {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
2376  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
2377  {0xa0, 0x0c, ZC3XX_R010_CMOSSENSORSELECT},
2378  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
2379  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
2380  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
2381  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
2382  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
2383  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
2384  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
2385  {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR},
2386  {0xa0, 0x00, ZC3XX_R097_WINYSTARTHIGH},
2387  {0xa0, 0x02, ZC3XX_R098_WINYSTARTLOW},
2388  {0xa0, 0x00, ZC3XX_R099_WINXSTARTHIGH},
2389  {0xa0, 0x02, ZC3XX_R09A_WINXSTARTLOW},
2390  {0xa0, 0x02, ZC3XX_R11A_FIRSTYLOW},
2391  {0xa0, 0x02, ZC3XX_R11C_FIRSTXLOW},
2392  {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH},
2393  {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW},
2394  {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH},
2395  {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW},
2396  {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION},
2397  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
2398  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
2399  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
2400  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
2401  {0xaa, 0x01, 0x0010},
2402  {0xaa, 0x03, 0x0000},
2403  {0xaa, 0x04, 0x0001},
2404  {0xaa, 0x05, 0x0020},
2405  {0xaa, 0x06, 0x0001},
2406  {0xaa, 0x08, 0x0000},
2407  {0xaa, 0x03, 0x0001},
2408  {0xaa, 0x04, 0x0011},
2409  {0xaa, 0x05, 0x00a0},
2410  {0xaa, 0x06, 0x0001},
2411  {0xaa, 0x08, 0x0000},
2412  {0xaa, 0x03, 0x0002},
2413  {0xaa, 0x04, 0x0013},
2414  {0xaa, 0x05, 0x0020},
2415  {0xaa, 0x06, 0x0001},
2416  {0xaa, 0x08, 0x0000},
2417  {0xaa, 0x03, 0x0003},
2418  {0xaa, 0x04, 0x0015},
2419  {0xaa, 0x05, 0x0020},
2420  {0xaa, 0x06, 0x0005},
2421  {0xaa, 0x08, 0x0000},
2422  {0xaa, 0x03, 0x0004},
2423  {0xaa, 0x04, 0x0017},
2424  {0xaa, 0x05, 0x0020},
2425  {0xaa, 0x06, 0x000d},
2426  {0xaa, 0x08, 0x0000},
2427  {0xaa, 0x03, 0x0005},
2428  {0xa0, 0x04, ZC3XX_R092_I2CADDRESSSELECT},
2429  {0xa0, 0x19, ZC3XX_R093_I2CSETVALUE},
2430  {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
2431  {0xa1, 0x01, 0x0091},
2432  {0xaa, 0x05, 0x0020},
2433  {0xaa, 0x06, 0x0005},
2434  {0xaa, 0x08, 0x0000},
2435  {0xaa, 0x03, 0x0006},
2436  {0xaa, 0x04, 0x0017},
2437  {0xaa, 0x05, 0x0026},
2438  {0xaa, 0x06, 0x0005},
2439  {0xaa, 0x08, 0x0000},
2440  {0xaa, 0x03, 0x0007},
2441  {0xaa, 0x04, 0x0019},
2442  {0xaa, 0x05, 0x0022},
2443  {0xaa, 0x06, 0x0005},
2444  {0xaa, 0x08, 0x0000},
2445  {0xaa, 0x03, 0x0008},
2446  {0xaa, 0x04, 0x0021},
2447  {0xaa, 0x05, 0x00aa},
2448  {0xaa, 0x06, 0x0005},
2449  {0xaa, 0x08, 0x0000},
2450  {0xaa, 0x03, 0x0009},
2451  {0xaa, 0x04, 0x0023},
2452  {0xaa, 0x05, 0x00aa},
2453  {0xaa, 0x06, 0x000d},
2454  {0xaa, 0x08, 0x0000},
2455  {0xaa, 0x03, 0x000a},
2456  {0xaa, 0x04, 0x0025},
2457  {0xaa, 0x05, 0x00aa},
2458  {0xaa, 0x06, 0x0005},
2459  {0xaa, 0x08, 0x0000},
2460  {0xaa, 0x03, 0x000b},
2461  {0xaa, 0x04, 0x00ec},
2462  {0xaa, 0x05, 0x002e},
2463  {0xaa, 0x06, 0x0005},
2464  {0xaa, 0x08, 0x0000},
2465  {0xaa, 0x03, 0x000c},
2466  {0xaa, 0x04, 0x00fa},
2467  {0xaa, 0x05, 0x002a},
2468  {0xaa, 0x06, 0x0005},
2469  {0xaa, 0x08, 0x0000},
2470  {0xaa, 0x07, 0x000d},
2471  {0xaa, 0x01, 0x0005},
2472  {0xaa, 0x94, 0x0002},
2473  {0xaa, 0x90, 0x0000},
2474  {0xaa, 0x91, 0x0010},
2475  {0xaa, 0x10, 0x0064},
2476  {0xaa, 0x9b, 0x00f0},
2477  {0xaa, 0x9c, 0x0002},
2478  {0xaa, 0x14, 0x001a},
2479  {0xaa, 0x20, 0x0080},
2480  {0xaa, 0x22, 0x0080},
2481  {0xaa, 0x24, 0x0080},
2482  {0xaa, 0x26, 0x0080},
2483  {0xaa, 0x00, 0x0084},
2484  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
2485  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
2486  {0xaa, 0xa8, 0x0080},
2487  {0xa0, 0x78, ZC3XX_R18D_YTARGET},
2488  {0xa1, 0x01, 0x0002},
2489  {0xa1, 0x01, 0x0008},
2490  {0xa1, 0x01, 0x0180},
2491  {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE},
2492  {0xa0, 0x40, ZC3XX_R116_RGAIN},
2493  {0xa0, 0x40, ZC3XX_R117_GGAIN},
2494  {0xa0, 0x40, ZC3XX_R118_BGAIN},
2495  {0xa1, 0x01, 0x0008},
2496 
2497  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */
2498  {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */
2499  {0xa1, 0x01, 0x01c8},
2500  {0xa1, 0x01, 0x01c9},
2501  {0xa1, 0x01, 0x01ca},
2502  {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */
2503 
2504  {0xa0, 0x52, ZC3XX_R10A_RGB00}, /* matrix */
2505  {0xa0, 0xf7, ZC3XX_R10B_RGB01},
2506  {0xa0, 0xf7, ZC3XX_R10C_RGB02},
2507  {0xa0, 0xf7, ZC3XX_R10D_RGB10},
2508  {0xa0, 0x52, ZC3XX_R10E_RGB11},
2509  {0xa0, 0xf7, ZC3XX_R10F_RGB12},
2510  {0xa0, 0xf7, ZC3XX_R110_RGB20},
2511  {0xa0, 0xf7, ZC3XX_R111_RGB21},
2512  {0xa0, 0x52, ZC3XX_R112_RGB22},
2513  {0xa1, 0x01, 0x0180},
2514  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
2515  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
2516  {0xaa, 0x0d, 0x0003},
2517  {0xaa, 0x0c, 0x0020},
2518  {0xaa, 0x0e, 0x000e},
2519  {0xaa, 0x0f, 0x0002},
2520  {0xaa, 0x1c, 0x000d},
2521  {0xaa, 0x1d, 0x0002},
2522  {0xaa, 0x20, 0x0080},
2523  {0xaa, 0x22, 0x0080},
2524  {0xaa, 0x24, 0x0080},
2525  {0xaa, 0x26, 0x0080},
2526  {0xaa, 0x00, 0x0084},
2527  {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH},
2528  {0xa0, 0x0d, ZC3XX_R0A4_EXPOSURETIMELOW},
2529  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
2530  {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID},
2531  {0xa0, 0x1a, ZC3XX_R192_EXPOSURELIMITLOW},
2532  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
2533  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
2534  {0xa0, 0x4b, ZC3XX_R197_ANTIFLICKERLOW},
2535  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
2536  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
2537  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
2538  {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP},
2539  {0xa0, 0xc8, ZC3XX_R01D_HSYNC_0},
2540  {0xa0, 0xd8, ZC3XX_R01E_HSYNC_1},
2541  {0xa0, 0xea, ZC3XX_R01F_HSYNC_2},
2542  {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
2543  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
2544  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
2545  {0xa1, 0x01, 0x0180},
2546  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
2547  {0xa0, 0x40, ZC3XX_R116_RGAIN},
2548  {0xa0, 0x40, ZC3XX_R117_GGAIN},
2549  {0xa0, 0x40, ZC3XX_R118_BGAIN},
2550  {}
2551 };
2552 static const struct usb_action icm105a_50HZScale[] = {
2553  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
2554  {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */
2555  {0xaa, 0x0c, 0x0020}, /* 00,0c,20,aa */
2556  {0xaa, 0x0e, 0x000e}, /* 00,0e,0e,aa */
2557  {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */
2558  {0xaa, 0x1c, 0x000d}, /* 00,1c,0d,aa */
2559  {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */
2560  {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */
2561  {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */
2562  {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */
2563  {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */
2564  {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */
2565  {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */
2566  {0xa0, 0x0d, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,0d,cc */
2567  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
2568  {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */
2569  {0xa0, 0x1a, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,1a,cc */
2570  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
2571  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
2572  {0xa0, 0x4b, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,4b,cc */
2573  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
2574  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
2575  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */
2576  {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */
2577  {0xa0, 0xc8, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c8,cc */
2578  {0xa0, 0xd8, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d8,cc */
2579  {0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ea,cc */
2580  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
2581  {}
2582 };
2583 static const struct usb_action icm105a_50HZ[] = {
2584  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
2585  {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */
2586  {0xaa, 0x0c, 0x008c}, /* 00,0c,8c,aa */
2587  {0xaa, 0x0e, 0x0095}, /* 00,0e,95,aa */
2588  {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */
2589  {0xaa, 0x1c, 0x0094}, /* 00,1c,94,aa */
2590  {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */
2591  {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */
2592  {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */
2593  {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */
2594  {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */
2595  {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */
2596  {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */
2597  {0xa0, 0x94, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,94,cc */
2598  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
2599  {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */
2600  {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,20,cc */
2601  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
2602  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
2603  {0xa0, 0x84, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,84,cc */
2604  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
2605  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
2606  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */
2607  {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */
2608  {0xa0, 0xe3, ZC3XX_R01D_HSYNC_0}, /* 00,1d,e3,cc */
2609  {0xa0, 0xec, ZC3XX_R01E_HSYNC_1}, /* 00,1e,ec,cc */
2610  {0xa0, 0xf5, ZC3XX_R01F_HSYNC_2}, /* 00,1f,f5,cc */
2611  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
2612  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, /* 01,a7,00,cc */
2613  {0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,c0,cc */
2614  {}
2615 };
2616 static const struct usb_action icm105a_60HZScale[] = {
2617  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
2618  {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */
2619  {0xaa, 0x0c, 0x0004}, /* 00,0c,04,aa */
2620  {0xaa, 0x0e, 0x000d}, /* 00,0e,0d,aa */
2621  {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */
2622  {0xaa, 0x1c, 0x0008}, /* 00,1c,08,aa */
2623  {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */
2624  {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */
2625  {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */
2626  {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */
2627  {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */
2628  {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */
2629  {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */
2630  {0xa0, 0x08, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,08,cc */
2631  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
2632  {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */
2633  {0xa0, 0x10, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,10,cc */
2634  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
2635  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
2636  {0xa0, 0x41, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,41,cc */
2637  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
2638  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
2639  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */
2640  {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */
2641  {0xa0, 0xc1, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c1,cc */
2642  {0xa0, 0xd4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d4,cc */
2643  {0xa0, 0xe8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e8,cc */
2644  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
2645  {}
2646 };
2647 static const struct usb_action icm105a_60HZ[] = {
2648  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
2649  {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */
2650  {0xaa, 0x0c, 0x0008}, /* 00,0c,08,aa */
2651  {0xaa, 0x0e, 0x0086}, /* 00,0e,86,aa */
2652  {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */
2653  {0xaa, 0x1c, 0x0085}, /* 00,1c,85,aa */
2654  {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */
2655  {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */
2656  {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */
2657  {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */
2658  {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */
2659  {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */
2660  {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */
2661  {0xa0, 0x85, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,85,cc */
2662  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
2663  {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */
2664  {0xa0, 0x08, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,08,cc */
2665  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
2666  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
2667  {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,81,cc */
2668  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
2669  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
2670  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */
2671  {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */
2672  {0xa0, 0xc2, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c2,cc */
2673  {0xa0, 0xd6, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d6,cc */
2674  {0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ea,cc */
2675  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
2676  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, /* 01,a7,00,cc */
2677  {0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,c0,cc */
2678  {}
2679 };
2680 static const struct usb_action icm105a_NoFlikerScale[] = {
2681  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
2682  {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */
2683  {0xaa, 0x0c, 0x0004}, /* 00,0c,04,aa */
2684  {0xaa, 0x0e, 0x000d}, /* 00,0e,0d,aa */
2685  {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */
2686  {0xaa, 0x1c, 0x0000}, /* 00,1c,00,aa */
2687  {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */
2688  {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */
2689  {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */
2690  {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */
2691  {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */
2692  {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */
2693  {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */
2694  {0xa0, 0x00, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,00,cc */
2695  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
2696  {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */
2697  {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,20,cc */
2698  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
2699  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
2700  {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */
2701  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
2702  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
2703  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
2704  {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */
2705  {0xa0, 0xc1, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c1,cc */
2706  {0xa0, 0xd4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d4,cc */
2707  {0xa0, 0xe8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e8,cc */
2708  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
2709  {}
2710 };
2711 static const struct usb_action icm105a_NoFliker[] = {
2712  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
2713  {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */
2714  {0xaa, 0x0c, 0x0004}, /* 00,0c,04,aa */
2715  {0xaa, 0x0e, 0x0081}, /* 00,0e,81,aa */
2716  {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */
2717  {0xaa, 0x1c, 0x0080}, /* 00,1c,80,aa */
2718  {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */
2719  {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */
2720  {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */
2721  {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */
2722  {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */
2723  {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */
2724  {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */
2725  {0xa0, 0x80, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,80,cc */
2726  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
2727  {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */
2728  {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,20,cc */
2729  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
2730  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
2731  {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */
2732  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
2733  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
2734  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
2735  {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */
2736  {0xa0, 0xc1, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c1,cc */
2737  {0xa0, 0xd4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d4,cc */
2738  {0xa0, 0xe8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e8,cc */
2739  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
2740  {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, /* 01,a7,00,cc */
2741  {0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,c0,cc */
2742  {}
2743 };
2744 
2745 static const struct usb_action mc501cb_Initial[] = {
2746  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */
2747  {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, /* 00,02,00,cc */
2748  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
2749  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */
2750  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */
2751  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */
2752  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
2753  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */
2754  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */
2755  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */
2756  {0xa0, 0xd8, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d8,cc */
2757  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */
2758  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */
2759  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */
2760  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */
2761  {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, /* 00,9b,01,cc */
2762  {0xa0, 0xde, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,de,cc */
2763  {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, /* 00,9d,02,cc */
2764  {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */
2765  {0xa0, 0x33, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,33,cc */
2766  {0xa0, 0x34, ZC3XX_R087_EXPTIMEMID}, /* 00,87,34,cc */
2767  {0xa0, 0x35, ZC3XX_R088_EXPTIMELOW}, /* 00,88,35,cc */
2768  {0xa0, 0xb0, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,b0,cc */
2769  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
2770  {0xaa, 0x01, 0x0001}, /* 00,01,01,aa */
2771  {0xaa, 0x01, 0x0003}, /* 00,01,03,aa */
2772  {0xaa, 0x01, 0x0001}, /* 00,01,01,aa */
2773  {0xaa, 0x03, 0x0000}, /* 00,03,00,aa */
2774  {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */
2775  {0xaa, 0x11, 0x0080}, /* 00,11,80,aa */
2776  {0xaa, 0x12, 0x0000}, /* 00,12,00,aa */
2777  {0xaa, 0x13, 0x0000}, /* 00,13,00,aa */
2778  {0xaa, 0x14, 0x0000}, /* 00,14,00,aa */
2779  {0xaa, 0x15, 0x0000}, /* 00,15,00,aa */
2780  {0xaa, 0x16, 0x0000}, /* 00,16,00,aa */
2781  {0xaa, 0x17, 0x0001}, /* 00,17,01,aa */
2782  {0xaa, 0x18, 0x00de}, /* 00,18,de,aa */
2783  {0xaa, 0x19, 0x0002}, /* 00,19,02,aa */
2784  {0xaa, 0x1a, 0x0086}, /* 00,1a,86,aa */
2785  {0xaa, 0x20, 0x00a8}, /* 00,20,a8,aa */
2786  {0xaa, 0x22, 0x0000}, /* 00,22,00,aa */
2787  {0xaa, 0x23, 0x0000}, /* 00,23,00,aa */
2788  {0xaa, 0x24, 0x0000}, /* 00,24,00,aa */
2789  {0xaa, 0x40, 0x0033}, /* 00,40,33,aa */
2790  {0xaa, 0x41, 0x0077}, /* 00,41,77,aa */
2791  {0xaa, 0x42, 0x0053}, /* 00,42,53,aa */
2792  {0xaa, 0x43, 0x00b0}, /* 00,43,b0,aa */
2793  {0xaa, 0x4b, 0x0001}, /* 00,4b,01,aa */
2794  {0xaa, 0x72, 0x0020}, /* 00,72,20,aa */
2795  {0xaa, 0x73, 0x0000}, /* 00,73,00,aa */
2796  {0xaa, 0x80, 0x0000}, /* 00,80,00,aa */
2797  {0xaa, 0x85, 0x0050}, /* 00,85,50,aa */
2798  {0xaa, 0x91, 0x0070}, /* 00,91,70,aa */
2799  {0xaa, 0x92, 0x0072}, /* 00,92,72,aa */
2800  {0xaa, 0x03, 0x0001}, /* 00,03,01,aa */
2801  {0xaa, 0x10, 0x00a0}, /* 00,10,a0,aa */
2802  {0xaa, 0x11, 0x0001}, /* 00,11,01,aa */
2803  {0xaa, 0x30, 0x0000}, /* 00,30,00,aa */
2804  {0xaa, 0x60, 0x0000}, /* 00,60,00,aa */
2805  {0xaa, 0xa0, 0x001a}, /* 00,a0,1a,aa */
2806  {0xaa, 0xa1, 0x0000}, /* 00,a1,00,aa */
2807  {0xaa, 0xa2, 0x003f}, /* 00,a2,3f,aa */
2808  {0xaa, 0xa3, 0x0028}, /* 00,a3,28,aa */
2809  {0xaa, 0xa4, 0x0010}, /* 00,a4,10,aa */
2810  {0xaa, 0xa5, 0x0020}, /* 00,a5,20,aa */
2811  {0xaa, 0xb1, 0x0044}, /* 00,b1,44,aa */
2812  {0xaa, 0xd0, 0x0001}, /* 00,d0,01,aa */
2813  {0xaa, 0xd1, 0x0085}, /* 00,d1,85,aa */
2814  {0xaa, 0xd2, 0x0080}, /* 00,d2,80,aa */
2815  {0xaa, 0xd3, 0x0080}, /* 00,d3,80,aa */
2816  {0xaa, 0xd4, 0x0080}, /* 00,d4,80,aa */
2817  {0xaa, 0xd5, 0x0080}, /* 00,d5,80,aa */
2818  {0xaa, 0xc0, 0x00c3}, /* 00,c0,c3,aa */
2819  {0xaa, 0xc2, 0x0044}, /* 00,c2,44,aa */
2820  {0xaa, 0xc4, 0x0040}, /* 00,c4,40,aa */
2821  {0xaa, 0xc5, 0x0020}, /* 00,c5,20,aa */
2822  {0xaa, 0xc6, 0x0008}, /* 00,c6,08,aa */
2823  {0xaa, 0x03, 0x0004}, /* 00,03,04,aa */
2824  {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */
2825  {0xaa, 0x40, 0x0030}, /* 00,40,30,aa */
2826  {0xaa, 0x41, 0x0020}, /* 00,41,20,aa */
2827  {0xaa, 0x42, 0x002d}, /* 00,42,2d,aa */
2828  {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
2829  {0xaa, 0x1c, 0x0050}, /* 00,1C,50,aa */
2830  {0xaa, 0x11, 0x0081}, /* 00,11,81,aa */
2831  {0xaa, 0x3b, 0x001d}, /* 00,3b,1D,aa */
2832  {0xaa, 0x3c, 0x004c}, /* 00,3c,4C,aa */
2833  {0xaa, 0x3d, 0x0018}, /* 00,3d,18,aa */
2834  {0xaa, 0x3e, 0x006a}, /* 00,3e,6A,aa */
2835  {0xaa, 0x01, 0x0000}, /* 00,01,00,aa */
2836  {0xaa, 0x52, 0x00ff}, /* 00,52,FF,aa */
2837  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
2838  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */
2839  {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */
2840  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */
2841  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */
2842  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */
2843  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */
2844  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */
2845  {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */
2846  {0xaa, 0x03, 0x0002}, /* 00,03,02,aa */
2847  {0xaa, 0x51, 0x0027}, /* 00,51,27,aa */
2848  {0xaa, 0x52, 0x0020}, /* 00,52,20,aa */
2849  {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
2850  {0xaa, 0x50, 0x0010}, /* 00,50,10,aa */
2851  {0xaa, 0x51, 0x0010}, /* 00,51,10,aa */
2852  {0xaa, 0x54, 0x0010}, /* 00,54,10,aa */
2853  {0xaa, 0x55, 0x0010}, /* 00,55,10,aa */
2854  {0xa0, 0xf0, 0x0199}, /* 01,99,F0,cc */
2855  {0xa0, 0x80, 0x019a}, /* 01,9A,80,cc */
2856 
2857  {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
2858  {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */
2859  {0xaa, 0x36, 0x001d}, /* 00,36,1D,aa */
2860  {0xaa, 0x37, 0x004c}, /* 00,37,4C,aa */
2861  {0xaa, 0x3b, 0x001d}, /* 00,3B,1D,aa */
2862  {}
2863 };
2864 
2865 static const struct usb_action mc501cb_InitialScale[] = { /* 320x240 */
2866  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */
2867  {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */
2868  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
2869  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */
2870  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */
2871  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */
2872  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
2873  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */
2874  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */
2875  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */
2876  {0xa0, 0xd0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d0,cc */
2877  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */
2878  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */
2879  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */
2880  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */
2881  {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, /* 00,9b,01,cc */
2882  {0xa0, 0xd8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,d8,cc */
2883  {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, /* 00,9d,02,cc */
2884  {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */
2885  {0xa0, 0x33, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,33,cc */
2886  {0xa0, 0x34, ZC3XX_R087_EXPTIMEMID}, /* 00,87,34,cc */
2887  {0xa0, 0x35, ZC3XX_R088_EXPTIMELOW}, /* 00,88,35,cc */
2888  {0xa0, 0xb0, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,b0,cc */
2889  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
2890  {0xaa, 0x01, 0x0001}, /* 00,01,01,aa */
2891  {0xaa, 0x01, 0x0003}, /* 00,01,03,aa */
2892  {0xaa, 0x01, 0x0001}, /* 00,01,01,aa */
2893  {0xaa, 0x03, 0x0000}, /* 00,03,00,aa */
2894  {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */
2895  {0xaa, 0x11, 0x0080}, /* 00,11,80,aa */
2896  {0xaa, 0x12, 0x0000}, /* 00,12,00,aa */
2897  {0xaa, 0x13, 0x0000}, /* 00,13,00,aa */
2898  {0xaa, 0x14, 0x0000}, /* 00,14,00,aa */
2899  {0xaa, 0x15, 0x0000}, /* 00,15,00,aa */
2900  {0xaa, 0x16, 0x0000}, /* 00,16,00,aa */
2901  {0xaa, 0x17, 0x0001}, /* 00,17,01,aa */
2902  {0xaa, 0x18, 0x00d8}, /* 00,18,d8,aa */
2903  {0xaa, 0x19, 0x0002}, /* 00,19,02,aa */
2904  {0xaa, 0x1a, 0x0088}, /* 00,1a,88,aa */
2905  {0xaa, 0x20, 0x00a8}, /* 00,20,a8,aa */
2906  {0xaa, 0x22, 0x0000}, /* 00,22,00,aa */
2907  {0xaa, 0x23, 0x0000}, /* 00,23,00,aa */
2908  {0xaa, 0x24, 0x0000}, /* 00,24,00,aa */
2909  {0xaa, 0x40, 0x0033}, /* 00,40,33,aa */
2910  {0xaa, 0x41, 0x0077}, /* 00,41,77,aa */
2911  {0xaa, 0x42, 0x0053}, /* 00,42,53,aa */
2912  {0xaa, 0x43, 0x00b0}, /* 00,43,b0,aa */
2913  {0xaa, 0x4b, 0x0001}, /* 00,4b,01,aa */
2914  {0xaa, 0x72, 0x0020}, /* 00,72,20,aa */
2915  {0xaa, 0x73, 0x0000}, /* 00,73,00,aa */
2916  {0xaa, 0x80, 0x0000}, /* 00,80,00,aa */
2917  {0xaa, 0x85, 0x0050}, /* 00,85,50,aa */
2918  {0xaa, 0x91, 0x0070}, /* 00,91,70,aa */
2919  {0xaa, 0x92, 0x0072}, /* 00,92,72,aa */
2920  {0xaa, 0x03, 0x0001}, /* 00,03,01,aa */
2921  {0xaa, 0x10, 0x00a0}, /* 00,10,a0,aa */
2922  {0xaa, 0x11, 0x0001}, /* 00,11,01,aa */
2923  {0xaa, 0x30, 0x0000}, /* 00,30,00,aa */
2924  {0xaa, 0x60, 0x0000}, /* 00,60,00,aa */
2925  {0xaa, 0xa0, 0x001a}, /* 00,a0,1a,aa */
2926  {0xaa, 0xa1, 0x0000}, /* 00,a1,00,aa */
2927  {0xaa, 0xa2, 0x003f}, /* 00,a2,3f,aa */
2928  {0xaa, 0xa3, 0x0028}, /* 00,a3,28,aa */
2929  {0xaa, 0xa4, 0x0010}, /* 00,a4,10,aa */
2930  {0xaa, 0xa5, 0x0020}, /* 00,a5,20,aa */
2931  {0xaa, 0xb1, 0x0044}, /* 00,b1,44,aa */
2932  {0xaa, 0xd0, 0x0001}, /* 00,d0,01,aa */
2933  {0xaa, 0xd1, 0x0085}, /* 00,d1,85,aa */
2934  {0xaa, 0xd2, 0x0080}, /* 00,d2,80,aa */
2935  {0xaa, 0xd3, 0x0080}, /* 00,d3,80,aa */
2936  {0xaa, 0xd4, 0x0080}, /* 00,d4,80,aa */
2937  {0xaa, 0xd5, 0x0080}, /* 00,d5,80,aa */
2938  {0xaa, 0xc0, 0x00c3}, /* 00,c0,c3,aa */
2939  {0xaa, 0xc2, 0x0044}, /* 00,c2,44,aa */
2940  {0xaa, 0xc4, 0x0040}, /* 00,c4,40,aa */
2941  {0xaa, 0xc5, 0x0020}, /* 00,c5,20,aa */
2942  {0xaa, 0xc6, 0x0008}, /* 00,c6,08,aa */
2943  {0xaa, 0x03, 0x0004}, /* 00,03,04,aa */
2944  {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */
2945  {0xaa, 0x40, 0x0030}, /* 00,40,30,aa */
2946  {0xaa, 0x41, 0x0020}, /* 00,41,20,aa */
2947  {0xaa, 0x42, 0x002d}, /* 00,42,2d,aa */
2948  {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
2949  {0xaa, 0x1c, 0x0050}, /* 00,1c,50,aa */
2950  {0xaa, 0x11, 0x0081}, /* 00,11,81,aa */
2951  {0xaa, 0x3b, 0x003a}, /* 00,3b,3A,aa */
2952  {0xaa, 0x3c, 0x0098}, /* 00,3c,98,aa */
2953  {0xaa, 0x3d, 0x0030}, /* 00,3d,30,aa */
2954  {0xaa, 0x3e, 0x00d4}, /* 00,3E,D4,aa */
2955  {0xaa, 0x01, 0x0000}, /* 00,01,00,aa */
2956  {0xaa, 0x52, 0x00ff}, /* 00,52,FF,aa */
2957  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
2958  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */
2959  {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */
2960  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */
2961  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */
2962  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */
2963  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */
2964  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */
2965  {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */
2966  {0xaa, 0x03, 0x0002}, /* 00,03,02,aa */
2967  {0xaa, 0x51, 0x004e}, /* 00,51,4E,aa */
2968  {0xaa, 0x52, 0x0041}, /* 00,52,41,aa */
2969  {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
2970  {0xaa, 0x50, 0x0010}, /* 00,50,10,aa */
2971  {0xaa, 0x51, 0x0010}, /* 00,51,10,aa */
2972  {0xaa, 0x54, 0x0010}, /* 00,54,10,aa */
2973  {0xaa, 0x55, 0x0010}, /* 00,55,10,aa */
2974  {0xa0, 0xf0, 0x0199}, /* 01,99,F0,cc */
2975  {0xa0, 0x80, 0x019a}, /* 01,9A,80,cc */
2976  {}
2977 };
2978 
2979 static const struct usb_action mc501cb_50HZ[] = {
2980  {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
2981  {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */
2982  {0xaa, 0x36, 0x001d}, /* 00,36,1D,aa */
2983  {0xaa, 0x37, 0x004c}, /* 00,37,4C,aa */
2984  {0xaa, 0x3b, 0x001d}, /* 00,3B,1D,aa */
2985  {0xaa, 0x3c, 0x004c}, /* 00,3C,4C,aa */
2986  {0xaa, 0x3d, 0x001d}, /* 00,3D,1D,aa */
2987  {0xaa, 0x3e, 0x004c}, /* 00,3E,4C,aa */
2988  {}
2989 };
2990 
2991 static const struct usb_action mc501cb_50HZScale[] = {
2992  {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
2993  {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */
2994  {0xaa, 0x36, 0x003a}, /* 00,36,3A,aa */
2995  {0xaa, 0x37, 0x0098}, /* 00,37,98,aa */
2996  {0xaa, 0x3b, 0x003a}, /* 00,3B,3A,aa */
2997  {0xaa, 0x3c, 0x0098}, /* 00,3C,98,aa */
2998  {0xaa, 0x3d, 0x003a}, /* 00,3D,3A,aa */
2999  {0xaa, 0x3e, 0x0098}, /* 00,3E,98,aa */
3000  {}
3001 };
3002 
3003 static const struct usb_action mc501cb_60HZ[] = {
3004  {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
3005  {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */
3006  {0xaa, 0x36, 0x0018}, /* 00,36,18,aa */
3007  {0xaa, 0x37, 0x006a}, /* 00,37,6A,aa */
3008  {0xaa, 0x3d, 0x0018}, /* 00,3D,18,aa */
3009  {0xaa, 0x3e, 0x006a}, /* 00,3E,6A,aa */
3010  {0xaa, 0x3b, 0x0018}, /* 00,3B,18,aa */
3011  {0xaa, 0x3c, 0x006a}, /* 00,3C,6A,aa */
3012  {}
3013 };
3014 
3015 static const struct usb_action mc501cb_60HZScale[] = {
3016  {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
3017  {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */
3018  {0xaa, 0x36, 0x0030}, /* 00,36,30,aa */
3019  {0xaa, 0x37, 0x00d4}, /* 00,37,D4,aa */
3020  {0xaa, 0x3d, 0x0030}, /* 00,3D,30,aa */
3021  {0xaa, 0x3e, 0x00d4}, /* 00,3E,D4,aa */
3022  {0xaa, 0x3b, 0x0030}, /* 00,3B,30,aa */
3023  {0xaa, 0x3c, 0x00d4}, /* 00,3C,D4,aa */
3024  {}
3025 };
3026 
3027 static const struct usb_action mc501cb_NoFliker[] = {
3028  {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
3029  {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */
3030  {0xaa, 0x36, 0x0018}, /* 00,36,18,aa */
3031  {0xaa, 0x37, 0x006a}, /* 00,37,6A,aa */
3032  {0xaa, 0x3d, 0x0018}, /* 00,3D,18,aa */
3033  {0xaa, 0x3e, 0x006a}, /* 00,3E,6A,aa */
3034  {0xaa, 0x3b, 0x0018}, /* 00,3B,18,aa */
3035  {0xaa, 0x3c, 0x006a}, /* 00,3C,6A,aa */
3036  {}
3037 };
3038 
3039 static const struct usb_action mc501cb_NoFlikerScale[] = {
3040  {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
3041  {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */
3042  {0xaa, 0x36, 0x0030}, /* 00,36,30,aa */
3043  {0xaa, 0x37, 0x00d4}, /* 00,37,D4,aa */
3044  {0xaa, 0x3d, 0x0030}, /* 00,3D,30,aa */
3045  {0xaa, 0x3e, 0x00d4}, /* 00,3E,D4,aa */
3046  {0xaa, 0x3b, 0x0030}, /* 00,3B,30,aa */
3047  {0xaa, 0x3c, 0x00d4}, /* 00,3C,D4,aa */
3048  {}
3049 };
3050 
3051 /* from zs211.inf */
3052 static const struct usb_action ov7620_Initial[] = { /* 640x480 */
3053  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */
3054  {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, /* 00,02,40,cc */
3055  {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING}, /* 00,08,00,cc */
3056  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */
3057  {0xa0, 0x06, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,06,cc */
3058  {0xa0, 0x02, ZC3XX_R083_RGAINADDR}, /* 00,83,02,cc */
3059  {0xa0, 0x01, ZC3XX_R085_BGAINADDR}, /* 00,85,01,cc */
3060  {0xa0, 0x80, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,80,cc */
3061  {0xa0, 0x81, ZC3XX_R087_EXPTIMEMID}, /* 00,87,81,cc */
3062  {0xa0, 0x10, ZC3XX_R088_EXPTIMELOW}, /* 00,88,10,cc */
3063  {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,a1,cc */
3064  {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, /* 00,8d,08,cc */
3065  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */
3066  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */
3067  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */
3068  {0xa0, 0xd8, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d8,cc */
3069  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */
3070  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */
3071  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */
3072  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */
3073  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */
3074  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */
3075  {0xa0, 0xde, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,de,cc */
3076  {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */
3077  {0xaa, 0x12, 0x0088}, /* 00,12,88,aa */
3078  {0xaa, 0x12, 0x0048}, /* 00,12,48,aa */
3079  {0xaa, 0x75, 0x008a}, /* 00,75,8a,aa */
3080  {0xaa, 0x13, 0x00a3}, /* 00,13,a3,aa */
3081  {0xaa, 0x04, 0x0000}, /* 00,04,00,aa */
3082  {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */
3083  {0xaa, 0x14, 0x0000}, /* 00,14,00,aa */
3084  {0xaa, 0x15, 0x0004}, /* 00,15,04,aa */
3085  {0xaa, 0x17, 0x0018}, /* 00,17,18,aa */
3086  {0xaa, 0x18, 0x00ba}, /* 00,18,ba,aa */
3087  {0xaa, 0x19, 0x0002}, /* 00,19,02,aa */
3088  {0xaa, 0x1a, 0x00f1}, /* 00,1a,f1,aa */
3089  {0xaa, 0x20, 0x0040}, /* 00,20,40,aa */
3090  {0xaa, 0x24, 0x0088}, /* 00,24,88,aa */
3091  {0xaa, 0x25, 0x0078}, /* 00,25,78,aa */
3092  {0xaa, 0x27, 0x00f6}, /* 00,27,f6,aa */
3093  {0xaa, 0x28, 0x00a0}, /* 00,28,a0,aa */
3094  {0xaa, 0x21, 0x0000}, /* 00,21,00,aa */
3095  {0xaa, 0x2a, 0x0083}, /* 00,2a,83,aa */
3096  {0xaa, 0x2b, 0x0096}, /* 00,2b,96,aa */
3097  {0xaa, 0x2d, 0x0005}, /* 00,2d,05,aa */
3098  {0xaa, 0x74, 0x0020}, /* 00,74,20,aa */
3099  {0xaa, 0x61, 0x0068}, /* 00,61,68,aa */
3100  {0xaa, 0x64, 0x0088}, /* 00,64,88,aa */
3101  {0xaa, 0x00, 0x0000}, /* 00,00,00,aa */
3102  {0xaa, 0x06, 0x0080}, /* 00,06,80,aa */
3103  {0xaa, 0x01, 0x0090}, /* 00,01,90,aa */
3104  {0xaa, 0x02, 0x0030}, /* 00,02,30,aa */
3105  {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,77,cc */
3106  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
3107  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */
3108  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */
3109  {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */
3110  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */
3111  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */
3112  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */
3113  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */
3114  {0xa0, 0x68, ZC3XX_R116_RGAIN}, /* 01,16,68,cc */
3115  {0xa0, 0x52, ZC3XX_R118_BGAIN}, /* 01,18,52,cc */
3116  {0xa0, 0x40, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,40,cc */
3117  {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */
3118  {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,50,cc */
3119  {}
3120 };
3121 static const struct usb_action ov7620_InitialScale[] = { /* 320x240 */
3122  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */
3123  {0xa0, 0x50, ZC3XX_R002_CLOCKSELECT}, /* 00,02,50,cc */
3124  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,00,cc */
3125  /* mx change? */
3126  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */
3127  {0xa0, 0x06, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,06,cc */
3128  {0xa0, 0x02, ZC3XX_R083_RGAINADDR}, /* 00,83,02,cc */
3129  {0xa0, 0x01, ZC3XX_R085_BGAINADDR}, /* 00,85,01,cc */
3130  {0xa0, 0x80, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,80,cc */
3131  {0xa0, 0x81, ZC3XX_R087_EXPTIMEMID}, /* 00,87,81,cc */
3132  {0xa0, 0x10, ZC3XX_R088_EXPTIMELOW}, /* 00,88,10,cc */
3133  {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,a1,cc */
3134  {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, /* 00,8d,08,cc */
3135  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */
3136  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */
3137  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */
3138  {0xa0, 0xd0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d0,cc */
3139  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */
3140  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */
3141  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */
3142  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */
3143  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */
3144  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */
3145  {0xa0, 0xd6, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,d6,cc */
3146  /* OV7648 00,9c,d8,cc */
3147  {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */
3148  {0xaa, 0x12, 0x0088}, /* 00,12,88,aa */
3149  {0xaa, 0x12, 0x0048}, /* 00,12,48,aa */
3150  {0xaa, 0x75, 0x008a}, /* 00,75,8a,aa */
3151  {0xaa, 0x13, 0x00a3}, /* 00,13,a3,aa */
3152  {0xaa, 0x04, 0x0000}, /* 00,04,00,aa */
3153  {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */
3154  {0xaa, 0x14, 0x0000}, /* 00,14,00,aa */
3155  {0xaa, 0x15, 0x0004}, /* 00,15,04,aa */
3156  {0xaa, 0x24, 0x0088}, /* 00,24,88,aa */
3157  {0xaa, 0x25, 0x0078}, /* 00,25,78,aa */
3158  {0xaa, 0x17, 0x0018}, /* 00,17,18,aa */
3159  {0xaa, 0x18, 0x00ba}, /* 00,18,ba,aa */
3160  {0xaa, 0x19, 0x0002}, /* 00,19,02,aa */
3161  {0xaa, 0x1a, 0x00f2}, /* 00,1a,f2,aa */
3162  {0xaa, 0x20, 0x0040}, /* 00,20,40,aa */
3163  {0xaa, 0x27, 0x00f6}, /* 00,27,f6,aa */
3164  {0xaa, 0x28, 0x00a0}, /* 00,28,a0,aa */
3165  {0xaa, 0x21, 0x0000}, /* 00,21,00,aa */
3166  {0xaa, 0x2a, 0x0083}, /* 00,2a,83,aa */
3167  {0xaa, 0x2b, 0x0096}, /* 00,2b,96,aa */
3168  {0xaa, 0x2d, 0x0005}, /* 00,2d,05,aa */
3169  {0xaa, 0x74, 0x0020}, /* 00,74,20,aa */
3170  {0xaa, 0x61, 0x0068}, /* 00,61,68,aa */
3171  {0xaa, 0x64, 0x0088}, /* 00,64,88,aa */
3172  {0xaa, 0x00, 0x0000}, /* 00,00,00,aa */
3173  {0xaa, 0x06, 0x0080}, /* 00,06,80,aa */
3174  {0xaa, 0x01, 0x0090}, /* 00,01,90,aa */
3175  {0xaa, 0x02, 0x0030}, /* 00,02,30,aa */
3176  {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,77,cc */
3177  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
3178  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */
3179  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */
3180  {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */
3181  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */
3182  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */
3183  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */
3184  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */
3185  {0xa0, 0x68, ZC3XX_R116_RGAIN}, /* 01,16,68,cc */
3186  {0xa0, 0x52, ZC3XX_R118_BGAIN}, /* 01,18,52,cc */
3187  {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,50,cc */
3188  {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */
3189  {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,50,cc */
3190  {}
3191 };
3192 static const struct usb_action ov7620_50HZ[] = {
3193  {0xaa, 0x13, 0x00a3}, /* 00,13,a3,aa */
3194  {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */
3195  {0xaa, 0x2b, 0x0096}, /* 00,2b,96,aa */
3196  {0xaa, 0x75, 0x008a}, /* 00,75,8a,aa */
3197  {0xaa, 0x2d, 0x0005}, /* 00,2d,05,aa */
3198  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
3199  {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */
3200  {0xa0, 0x18, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,18,cc */
3201  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
3202  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
3203  {0xa0, 0x83, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,83,cc */
3204  {0xaa, 0x10, 0x0082}, /* 00,10,82,aa */
3205  {0xaa, 0x76, 0x0003}, /* 00,76,03,aa */
3206 /* {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, * 00,02,40,cc
3207  * if mode0 (640x480) */
3208  {}
3209 };
3210 static const struct usb_action ov7620_60HZ[] = {
3211  {0xaa, 0x13, 0x00a3}, /* 00,13,a3,aa */
3212  /* (bug in zs211.inf) */
3213  {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */
3214  {0xaa, 0x2b, 0x0000}, /* 00,2b,00,aa */
3215  {0xaa, 0x75, 0x008a}, /* 00,75,8a,aa */
3216  {0xaa, 0x2d, 0x0005}, /* 00,2d,05,aa */
3217  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
3218  {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */
3219  {0xa0, 0x18, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,18,cc */
3220  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
3221  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
3222  {0xa0, 0x83, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,83,cc */
3223  {0xaa, 0x10, 0x0020}, /* 00,10,20,aa */
3224  {0xaa, 0x76, 0x0003}, /* 00,76,03,aa */
3225 /* {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, * 00,02,40,cc
3226  * if mode0 (640x480) */
3227 /* ?? in gspca v1, it was
3228  {0xa0, 0x00, 0x0039}, * 00,00,00,dd *
3229  {0xa1, 0x01, 0x0037}, */
3230  {}
3231 };
3232 static const struct usb_action ov7620_NoFliker[] = {
3233  {0xaa, 0x13, 0x00a3}, /* 00,13,a3,aa */
3234  /* (bug in zs211.inf) */
3235  {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */
3236  {0xaa, 0x2b, 0x0000}, /* 00,2b,00,aa */
3237  {0xaa, 0x75, 0x008e}, /* 00,75,8e,aa */
3238  {0xaa, 0x2d, 0x0001}, /* 00,2d,01,aa */
3239  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
3240  {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */
3241  {0xa0, 0x18, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,18,cc */
3242  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
3243  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
3244  {0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,01,cc */
3245 /* {0xa0, 0x44, ZC3XX_R002_CLOCKSELECT}, * 00,02,44,cc
3246  * if mode1 (320x240) */
3247 /* ?? was
3248  {0xa0, 0x00, 0x0039}, * 00,00,00,dd *
3249  {0xa1, 0x01, 0x0037}, */
3250  {}
3251 };
3252 
3253 static const struct usb_action ov7630c_InitialScale[] = {
3254  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
3255  {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
3256  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
3257  {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
3258  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
3259  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
3260  {0xa0, 0x06, ZC3XX_R010_CMOSSENSORSELECT},
3261  {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR},
3262  {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE},
3263  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
3264  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
3265  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
3266  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
3267  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
3268  {0xaa, 0x12, 0x0080},
3269  {0xa0, 0x02, ZC3XX_R083_RGAINADDR},
3270  {0xa0, 0x01, ZC3XX_R085_BGAINADDR},
3271  {0xa0, 0x90, ZC3XX_R086_EXPTIMEHIGH},
3272  {0xa0, 0x91, ZC3XX_R087_EXPTIMEMID},
3273  {0xa0, 0x10, ZC3XX_R088_EXPTIMELOW},
3274  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
3275  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
3276  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
3277  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
3278  {0xa0, 0xd8, ZC3XX_R09C_WINHEIGHTLOW},
3279  {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},
3280  {0xaa, 0x12, 0x0069},
3281  {0xaa, 0x04, 0x0020},
3282  {0xaa, 0x06, 0x0050},
3283  {0xaa, 0x13, 0x0083},
3284  {0xaa, 0x14, 0x0000},
3285  {0xaa, 0x15, 0x0024},
3286  {0xaa, 0x17, 0x0018},
3287  {0xaa, 0x18, 0x00ba},
3288  {0xaa, 0x19, 0x0002},
3289  {0xaa, 0x1a, 0x00f6},
3290  {0xaa, 0x1b, 0x0002},
3291  {0xaa, 0x20, 0x00c2},
3292  {0xaa, 0x24, 0x0060},
3293  {0xaa, 0x25, 0x0040},
3294  {0xaa, 0x26, 0x0030},
3295  {0xaa, 0x27, 0x00ea},
3296  {0xaa, 0x28, 0x00a0},
3297  {0xaa, 0x21, 0x0000},
3298  {0xaa, 0x2a, 0x0081},
3299  {0xaa, 0x2b, 0x0096},
3300  {0xaa, 0x2d, 0x0094},
3301  {0xaa, 0x2f, 0x003d},
3302  {0xaa, 0x30, 0x0024},
3303  {0xaa, 0x60, 0x0000},
3304  {0xaa, 0x61, 0x0040},
3305  {0xaa, 0x68, 0x007c},
3306  {0xaa, 0x6f, 0x0015},
3307  {0xaa, 0x75, 0x0088},
3308  {0xaa, 0x77, 0x00b5},
3309  {0xaa, 0x01, 0x0060},
3310  {0xaa, 0x02, 0x0060},
3311  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
3312  {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION},
3313  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
3314  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
3315  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
3316  {0xa0, 0x00, 0x01ad},
3317  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
3318  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
3319  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
3320  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
3321  {0xa0, 0x60, ZC3XX_R116_RGAIN},
3322  {0xa0, 0x46, ZC3XX_R118_BGAIN},
3323  {0xa0, 0x04, ZC3XX_R113_RGB03},
3324 /* 0x10, */
3325  {0xa1, 0x01, 0x0002},
3326  {0xa0, 0x50, ZC3XX_R10A_RGB00}, /* matrix */
3327  {0xa0, 0xf8, ZC3XX_R10B_RGB01},
3328  {0xa0, 0xf8, ZC3XX_R10C_RGB02},
3329  {0xa0, 0xf8, ZC3XX_R10D_RGB10},
3330  {0xa0, 0x50, ZC3XX_R10E_RGB11},
3331  {0xa0, 0xf8, ZC3XX_R10F_RGB12},
3332  {0xa0, 0xf8, ZC3XX_R110_RGB20},
3333  {0xa0, 0xf8, ZC3XX_R111_RGB21},
3334  {0xa0, 0x50, ZC3XX_R112_RGB22},
3335  {0xa1, 0x01, 0x0008},
3336  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */
3337  {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */
3338  {0xa1, 0x01, 0x01c8},
3339  {0xa1, 0x01, 0x01c9},
3340  {0xa1, 0x01, 0x01ca},
3341  {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */
3342  {0xa0, 0x01, ZC3XX_R120_GAMMA00}, /* gamma 2 ?*/
3343  {0xa0, 0x0c, ZC3XX_R121_GAMMA01},
3344  {0xa0, 0x1f, ZC3XX_R122_GAMMA02},
3345  {0xa0, 0x3a, ZC3XX_R123_GAMMA03},
3346  {0xa0, 0x53, ZC3XX_R124_GAMMA04},
3347  {0xa0, 0x6d, ZC3XX_R125_GAMMA05},
3348  {0xa0, 0x85, ZC3XX_R126_GAMMA06},
3349  {0xa0, 0x9c, ZC3XX_R127_GAMMA07},
3350  {0xa0, 0xb0, ZC3XX_R128_GAMMA08},
3351  {0xa0, 0xc2, ZC3XX_R129_GAMMA09},
3352  {0xa0, 0xd1, ZC3XX_R12A_GAMMA0A},
3353  {0xa0, 0xde, ZC3XX_R12B_GAMMA0B},
3354  {0xa0, 0xe9, ZC3XX_R12C_GAMMA0C},
3355  {0xa0, 0xf2, ZC3XX_R12D_GAMMA0D},
3356  {0xa0, 0xf9, ZC3XX_R12E_GAMMA0E},
3357  {0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
3358  {0xa0, 0x05, ZC3XX_R130_GAMMA10},
3359  {0xa0, 0x0f, ZC3XX_R131_GAMMA11},
3360  {0xa0, 0x16, ZC3XX_R132_GAMMA12},
3361  {0xa0, 0x1a, ZC3XX_R133_GAMMA13},
3362  {0xa0, 0x19, ZC3XX_R134_GAMMA14},
3363  {0xa0, 0x19, ZC3XX_R135_GAMMA15},
3364  {0xa0, 0x17, ZC3XX_R136_GAMMA16},
3365  {0xa0, 0x15, ZC3XX_R137_GAMMA17},
3366  {0xa0, 0x12, ZC3XX_R138_GAMMA18},
3367  {0xa0, 0x10, ZC3XX_R139_GAMMA19},
3368  {0xa0, 0x0e, ZC3XX_R13A_GAMMA1A},
3369  {0xa0, 0x0b, ZC3XX_R13B_GAMMA1B},
3370  {0xa0, 0x09, ZC3XX_R13C_GAMMA1C},
3371  {0xa0, 0x08, ZC3XX_R13D_GAMMA1D},
3372  {0xa0, 0x06, ZC3XX_R13E_GAMMA1E},
3373  {0xa0, 0x03, ZC3XX_R13F_GAMMA1F},
3374  {0xa0, 0x50, ZC3XX_R10A_RGB00}, /* matrix */
3375  {0xa0, 0xf8, ZC3XX_R10B_RGB01},
3376  {0xa0, 0xf8, ZC3XX_R10C_RGB02},
3377  {0xa0, 0xf8, ZC3XX_R10D_RGB10},
3378  {0xa0, 0x50, ZC3XX_R10E_RGB11},
3379  {0xa0, 0xf8, ZC3XX_R10F_RGB12},
3380  {0xa0, 0xf8, ZC3XX_R110_RGB20},
3381  {0xa0, 0xf8, ZC3XX_R111_RGB21},
3382  {0xa0, 0x50, ZC3XX_R112_RGB22},
3383 
3384  {0xa1, 0x01, 0x0180},
3385  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
3386  {0xaa, 0x10, 0x001b},
3387  {0xaa, 0x76, 0x0002},
3388  {0xaa, 0x2a, 0x0081},
3389  {0xaa, 0x2b, 0x0000},
3390  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
3391  {0xa0, 0x01, ZC3XX_R191_EXPOSURELIMITMID},
3392  {0xa0, 0xb8, ZC3XX_R192_EXPOSURELIMITLOW},
3393  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
3394  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
3395  {0xa0, 0x37, ZC3XX_R197_ANTIFLICKERLOW},
3396  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
3397  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
3398  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
3399  {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP},
3400  {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
3401  {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE},
3402  {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
3403  {0xaa, 0x13, 0x0083}, /* 40 */
3404  {0xa1, 0x01, 0x0180},
3405  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
3406  {}
3407 };
3408 
3409 static const struct usb_action ov7630c_Initial[] = {
3410  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
3411  {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
3412  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
3413  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
3414  {0xa0, 0x06, ZC3XX_R010_CMOSSENSORSELECT},
3415  {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR},
3416  {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE},
3417  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
3418  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
3419  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
3420  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
3421  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
3422 
3423  {0xaa, 0x12, 0x0080},
3424  {0xa0, 0x02, ZC3XX_R083_RGAINADDR},
3425  {0xa0, 0x01, ZC3XX_R085_BGAINADDR},
3426  {0xa0, 0x90, ZC3XX_R086_EXPTIMEHIGH},
3427  {0xa0, 0x91, ZC3XX_R087_EXPTIMEMID},
3428  {0xa0, 0x10, ZC3XX_R088_EXPTIMELOW},
3429  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
3430  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
3431  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
3432  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
3433  {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW},
3434  {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW},
3435  {0xaa, 0x12, 0x0069}, /* i2c */
3436  {0xaa, 0x04, 0x0020},
3437  {0xaa, 0x06, 0x0050},
3438  {0xaa, 0x13, 0x00c3},
3439  {0xaa, 0x14, 0x0000},
3440  {0xaa, 0x15, 0x0024},
3441  {0xaa, 0x19, 0x0003},
3442  {0xaa, 0x1a, 0x00f6},
3443  {0xaa, 0x1b, 0x0002},
3444  {0xaa, 0x20, 0x00c2},
3445  {0xaa, 0x24, 0x0060},
3446  {0xaa, 0x25, 0x0040},
3447  {0xaa, 0x26, 0x0030},
3448  {0xaa, 0x27, 0x00ea},
3449  {0xaa, 0x28, 0x00a0},
3450  {0xaa, 0x21, 0x0000},
3451  {0xaa, 0x2a, 0x0081},
3452  {0xaa, 0x2b, 0x0096},
3453  {0xaa, 0x2d, 0x0084},
3454  {0xaa, 0x2f, 0x003d},
3455  {0xaa, 0x30, 0x0024},
3456  {0xaa, 0x60, 0x0000},
3457  {0xaa, 0x61, 0x0040},
3458  {0xaa, 0x68, 0x007c},
3459  {0xaa, 0x6f, 0x0015},
3460  {0xaa, 0x75, 0x0088},
3461  {0xaa, 0x77, 0x00b5},
3462  {0xaa, 0x01, 0x0060},
3463  {0xaa, 0x02, 0x0060},
3464  {0xaa, 0x17, 0x0018},
3465  {0xaa, 0x18, 0x00ba},
3466  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
3467  {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION},
3468  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
3469  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
3470  {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
3471  {0xa0, 0x00, 0x01ad},
3472  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
3473  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
3474  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
3475  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
3476  {0xa0, 0x60, ZC3XX_R116_RGAIN},
3477  {0xa0, 0x46, ZC3XX_R118_BGAIN},
3478  {0xa0, 0x04, ZC3XX_R113_RGB03},
3479 
3480  {0xa1, 0x01, 0x0002},
3481  {0xa0, 0x4e, ZC3XX_R10A_RGB00}, /* matrix */
3482  {0xa0, 0xfe, ZC3XX_R10B_RGB01},
3483  {0xa0, 0xf4, ZC3XX_R10C_RGB02},
3484  {0xa0, 0xf7, ZC3XX_R10D_RGB10},
3485  {0xa0, 0x4d, ZC3XX_R10E_RGB11},
3486  {0xa0, 0xfc, ZC3XX_R10F_RGB12},
3487  {0xa0, 0x00, ZC3XX_R110_RGB20},
3488  {0xa0, 0xf6, ZC3XX_R111_RGB21},
3489  {0xa0, 0x4a, ZC3XX_R112_RGB22},
3490 
3491  {0xa1, 0x01, 0x0008},
3492  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */
3493  {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */
3494  {0xa1, 0x01, 0x01c8},
3495  {0xa1, 0x01, 0x01c9},
3496  {0xa1, 0x01, 0x01ca},
3497  {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */
3498  {0xa0, 0x16, ZC3XX_R120_GAMMA00}, /* gamma ~4 */
3499  {0xa0, 0x3a, ZC3XX_R121_GAMMA01},
3500  {0xa0, 0x5b, ZC3XX_R122_GAMMA02},
3501  {0xa0, 0x7c, ZC3XX_R123_GAMMA03},
3502  {0xa0, 0x94, ZC3XX_R124_GAMMA04},
3503  {0xa0, 0xa9, ZC3XX_R125_GAMMA05},
3504  {0xa0, 0xbb, ZC3XX_R126_GAMMA06},
3505  {0xa0, 0xca, ZC3XX_R127_GAMMA07},
3506  {0xa0, 0xd7, ZC3XX_R128_GAMMA08},
3507  {0xa0, 0xe1, ZC3XX_R129_GAMMA09},
3508  {0xa0, 0xea, ZC3XX_R12A_GAMMA0A},
3509  {0xa0, 0xf1, ZC3XX_R12B_GAMMA0B},
3510  {0xa0, 0xf7, ZC3XX_R12C_GAMMA0C},
3511  {0xa0, 0xfc, ZC3XX_R12D_GAMMA0D},
3512  {0xa0, 0xff, ZC3XX_R12E_GAMMA0E},
3513  {0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
3514  {0xa0, 0x20, ZC3XX_R130_GAMMA10},
3515  {0xa0, 0x22, ZC3XX_R131_GAMMA11},
3516  {0xa0, 0x20, ZC3XX_R132_GAMMA12},
3517  {0xa0, 0x1c, ZC3XX_R133_GAMMA13},
3518  {0xa0, 0x16, ZC3XX_R134_GAMMA14},
3519  {0xa0, 0x13, ZC3XX_R135_GAMMA15},
3520  {0xa0, 0x10, ZC3XX_R136_GAMMA16},
3521  {0xa0, 0x0d, ZC3XX_R137_GAMMA17},
3522  {0xa0, 0x0b, ZC3XX_R138_GAMMA18},
3523  {0xa0, 0x09, ZC3XX_R139_GAMMA19},
3524  {0xa0, 0x07, ZC3XX_R13A_GAMMA1A},
3525  {0xa0, 0x06, ZC3XX_R13B_GAMMA1B},
3526  {0xa0, 0x05, ZC3XX_R13C_GAMMA1C},
3527  {0xa0, 0x04, ZC3XX_R13D_GAMMA1D},
3528  {0xa0, 0x00, ZC3XX_R13E_GAMMA1E},
3529  {0xa0, 0x01, ZC3XX_R13F_GAMMA1F},
3530  {0xa0, 0x4e, ZC3XX_R10A_RGB00}, /* matrix */
3531  {0xa0, 0xfe, ZC3XX_R10B_RGB01},
3532  {0xa0, 0xf4, ZC3XX_R10C_RGB02},
3533  {0xa0, 0xf7, ZC3XX_R10D_RGB10},
3534  {0xa0, 0x4d, ZC3XX_R10E_RGB11},
3535  {0xa0, 0xfc, ZC3XX_R10F_RGB12},
3536  {0xa0, 0x00, ZC3XX_R110_RGB20},
3537  {0xa0, 0xf6, ZC3XX_R111_RGB21},
3538  {0xa0, 0x4a, ZC3XX_R112_RGB22},
3539 
3540  {0xa1, 0x01, 0x0180},
3541  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
3542  {0xaa, 0x10, 0x000d},
3543  {0xaa, 0x76, 0x0002},
3544  {0xaa, 0x2a, 0x0081},
3545  {0xaa, 0x2b, 0x0000},
3546  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
3547  {0xa0, 0x00, ZC3XX_R191_EXPOSURELIMITMID},
3548  {0xa0, 0xd8, ZC3XX_R192_EXPOSURELIMITLOW},
3549  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
3550  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
3551  {0xa0, 0x1b, ZC3XX_R197_ANTIFLICKERLOW},
3552  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
3553  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
3554  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
3555  {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP},
3556  {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
3557  {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE},
3558  {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
3559  {0xaa, 0x13, 0x00c3},
3560 
3561  {0xa1, 0x01, 0x0180},
3562  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
3563  {}
3564 };
3565 
3566 static const struct usb_action pas106b_Initial_com[] = {
3567 /* Sream and Sensor specific */
3568  {0xa1, 0x01, 0x0010}, /* CMOSSensorSelect */
3569 /* System */
3570  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* SystemControl */
3571  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* SystemControl */
3572 /* Picture size */
3573  {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, /* ClockSelect */
3574  {0xa0, 0x03, 0x003a},
3575  {0xa0, 0x0c, 0x003b},
3576  {0xa0, 0x04, 0x0038},
3577  {}
3578 };
3579 
3580 static const struct usb_action pas106b_InitialScale[] = { /* 176x144 */
3581 /* JPEG control */
3582  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
3583 /* Sream and Sensor specific */
3584  {0xa0, 0x0f, ZC3XX_R010_CMOSSENSORSELECT},
3585 /* Picture size */
3586  {0xa0, 0x00, ZC3XX_R003_FRAMEWIDTHHIGH},
3587  {0xa0, 0xb0, ZC3XX_R004_FRAMEWIDTHLOW},
3588  {0xa0, 0x00, ZC3XX_R005_FRAMEHEIGHTHIGH},
3589  {0xa0, 0x90, ZC3XX_R006_FRAMEHEIGHTLOW},
3590 /* System */
3591  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
3592 /* Sream and Sensor specific */
3593  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
3594  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
3595 /* Sensor Interface */
3596  {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE},
3597 /* Window inside sensor array */
3598  {0xa0, 0x03, ZC3XX_R09A_WINXSTARTLOW},
3599  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
3600  {0xa0, 0x03, ZC3XX_R11C_FIRSTXLOW},
3601  {0xa0, 0x28, ZC3XX_R09C_WINHEIGHTLOW},
3602  {0xa0, 0x68, ZC3XX_R09E_WINWIDTHLOW},
3603 /* Init the sensor */
3604  {0xaa, 0x02, 0x0004},
3605  {0xaa, 0x08, 0x0000},
3606  {0xaa, 0x09, 0x0005},
3607  {0xaa, 0x0a, 0x0002},
3608  {0xaa, 0x0b, 0x0002},
3609  {0xaa, 0x0c, 0x0005},
3610  {0xaa, 0x0d, 0x0000},
3611  {0xaa, 0x0e, 0x0002},
3612  {0xaa, 0x14, 0x0081},
3613 /* Other registers */
3614  {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
3615 /* Frame retreiving */
3616  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
3617 /* Gains */
3618  {0xa0, 0xa0, ZC3XX_R1A8_DIGITALGAIN},
3619 /* Unknown */
3620  {0xa0, 0x00, 0x01ad},
3621 /* Sharpness */
3622  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
3623  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
3624 /* Other registers */
3625  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
3626 /* Auto exposure and white balance */
3627  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
3628 /*Dead pixels */
3629  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
3630 /* EEPROM */
3631  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
3632 /* JPEG control */
3633  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
3634  {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},
3635  {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05},
3636 /* Other registers */
3637  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
3638 /* Auto exposure and white balance */
3639  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
3640 /*Dead pixels */
3641  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
3642 /* EEPROM */
3643  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
3644 /* JPEG control */
3645  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
3646  {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},
3647  {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05},
3648 
3649  {0xa0, 0x58, ZC3XX_R10A_RGB00}, /* matrix */
3650  {0xa0, 0xf4, ZC3XX_R10B_RGB01},
3651  {0xa0, 0xf4, ZC3XX_R10C_RGB02},
3652  {0xa0, 0xf4, ZC3XX_R10D_RGB10},
3653  {0xa0, 0x58, ZC3XX_R10E_RGB11},
3654  {0xa0, 0xf4, ZC3XX_R10F_RGB12},
3655  {0xa0, 0xf4, ZC3XX_R110_RGB20},
3656  {0xa0, 0xf4, ZC3XX_R111_RGB21},
3657  {0xa0, 0x58, ZC3XX_R112_RGB22},
3658 /* Auto correction */
3659  {0xa0, 0x03, ZC3XX_R181_WINXSTART},
3660  {0xa0, 0x08, ZC3XX_R182_WINXWIDTH},
3661  {0xa0, 0x16, ZC3XX_R183_WINXCENTER},
3662  {0xa0, 0x03, ZC3XX_R184_WINYSTART},
3663  {0xa0, 0x05, ZC3XX_R185_WINYWIDTH},
3664  {0xa0, 0x14, ZC3XX_R186_WINYCENTER},
3665  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
3666 /* Auto exposure and white balance */
3667  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
3668  {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID},
3669  {0xa0, 0xb1, ZC3XX_R192_EXPOSURELIMITLOW},
3670  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
3671  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
3672  {0xa0, 0x87, ZC3XX_R197_ANTIFLICKERLOW},
3673  {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
3674  {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
3675 /* sensor on */
3676  {0xaa, 0x07, 0x00b1},
3677  {0xaa, 0x05, 0x0003},
3678  {0xaa, 0x04, 0x0001},
3679  {0xaa, 0x03, 0x003b},
3680 /* Gains */
3681  {0xa0, 0x20, ZC3XX_R1A9_DIGITALLIMITDIFF},
3682  {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP},
3683  {0xa0, 0xa0, ZC3XX_R11D_GLOBALGAIN},
3684  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
3685 /* Auto correction */
3686  {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
3687  {0xa1, 0x01, 0x0180}, /* AutoCorrectEnable */
3688  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
3689 /* Gains */
3690  {0xa0, 0x40, ZC3XX_R116_RGAIN},
3691  {0xa0, 0x40, ZC3XX_R117_GGAIN},
3692  {0xa0, 0x40, ZC3XX_R118_BGAIN},
3693  {}
3694 };
3695 
3696 static const struct usb_action pas106b_Initial[] = { /* 352x288 */
3697 /* JPEG control */
3698  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
3699 /* Sream and Sensor specific */
3700  {0xa0, 0x0f, ZC3XX_R010_CMOSSENSORSELECT},
3701 /* Picture size */
3702  {0xa0, 0x01, ZC3XX_R003_FRAMEWIDTHHIGH},
3703  {0xa0, 0x60, ZC3XX_R004_FRAMEWIDTHLOW},
3704  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
3705  {0xa0, 0x20, ZC3XX_R006_FRAMEHEIGHTLOW},
3706 /* System */
3707  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
3708 /* Sream and Sensor specific */
3709  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
3710  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
3711 /* Sensor Interface */
3712  {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE},
3713 /* Window inside sensor array */
3714  {0xa0, 0x03, ZC3XX_R09A_WINXSTARTLOW},
3715  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
3716  {0xa0, 0x03, ZC3XX_R11C_FIRSTXLOW},
3717  {0xa0, 0x28, ZC3XX_R09C_WINHEIGHTLOW},
3718  {0xa0, 0x68, ZC3XX_R09E_WINWIDTHLOW},
3719 /* Init the sensor */
3720  {0xaa, 0x02, 0x0004},
3721  {0xaa, 0x08, 0x0000},
3722  {0xaa, 0x09, 0x0005},
3723  {0xaa, 0x0a, 0x0002},
3724  {0xaa, 0x0b, 0x0002},
3725  {0xaa, 0x0c, 0x0005},
3726  {0xaa, 0x0d, 0x0000},
3727  {0xaa, 0x0e, 0x0002},
3728  {0xaa, 0x14, 0x0081},
3729 /* Other registers */
3730  {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
3731 /* Frame retreiving */
3732  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
3733 /* Gains */
3734  {0xa0, 0xa0, ZC3XX_R1A8_DIGITALGAIN},
3735 /* Unknown */
3736  {0xa0, 0x00, 0x01ad},
3737 /* Sharpness */
3738  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
3739  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
3740 /* Other registers */
3741  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
3742 /* Auto exposure and white balance */
3743  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
3744  {0xa0, 0x80, ZC3XX_R18D_YTARGET},
3745 /*Dead pixels */
3746  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
3747 /* EEPROM */
3748  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
3749 /* JPEG control */
3750  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
3751  {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},
3752  {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05},
3753 /* Other registers */
3754  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
3755 /* Auto exposure and white balance */
3756  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
3757 /*Dead pixels */
3758  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
3759 /* EEPROM */
3760  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
3761 /* JPEG control */
3762  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
3763  {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},
3764  {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05},
3765 
3766  {0xa0, 0x58, ZC3XX_R10A_RGB00}, /* matrix */
3767  {0xa0, 0xf4, ZC3XX_R10B_RGB01},
3768  {0xa0, 0xf4, ZC3XX_R10C_RGB02},
3769  {0xa0, 0xf4, ZC3XX_R10D_RGB10},
3770  {0xa0, 0x58, ZC3XX_R10E_RGB11},
3771  {0xa0, 0xf4, ZC3XX_R10F_RGB12},
3772  {0xa0, 0xf4, ZC3XX_R110_RGB20},
3773  {0xa0, 0xf4, ZC3XX_R111_RGB21},
3774  {0xa0, 0x58, ZC3XX_R112_RGB22},
3775 /* Auto correction */
3776  {0xa0, 0x03, ZC3XX_R181_WINXSTART},
3777  {0xa0, 0x08, ZC3XX_R182_WINXWIDTH},
3778  {0xa0, 0x16, ZC3XX_R183_WINXCENTER},
3779  {0xa0, 0x03, ZC3XX_R184_WINYSTART},
3780  {0xa0, 0x05, ZC3XX_R185_WINYWIDTH},
3781  {0xa0, 0x14, ZC3XX_R186_WINYCENTER},
3782  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
3783 
3784 /* Auto exposure and white balance */
3785  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
3786  {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID},
3787  {0xa0, 0xb1, ZC3XX_R192_EXPOSURELIMITLOW},
3788 
3789  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
3790  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
3791  {0xa0, 0x87, ZC3XX_R197_ANTIFLICKERLOW},
3792 
3793  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
3794  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
3795 /* sensor on */
3796  {0xaa, 0x07, 0x00b1},
3797  {0xaa, 0x05, 0x0003},
3798  {0xaa, 0x04, 0x0001},
3799  {0xaa, 0x03, 0x003b},
3800 /* Gains */
3801  {0xa0, 0x20, ZC3XX_R1A9_DIGITALLIMITDIFF},
3802  {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP},
3803  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
3804 /* Auto correction */
3805  {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
3806  {0xa1, 0x01, 0x0180}, /* AutoCorrectEnable */
3807  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
3808 /* Gains */
3809  {0xa0, 0x40, ZC3XX_R116_RGAIN},
3810  {0xa0, 0x40, ZC3XX_R117_GGAIN},
3811  {0xa0, 0x40, ZC3XX_R118_BGAIN},
3812 
3813  {0xa0, 0x00, 0x0007}, /* AutoCorrectEnable */
3814  {0xa0, 0xff, ZC3XX_R018_FRAMELOST}, /* Frame adjust */
3815  {}
3816 };
3817 static const struct usb_action pas106b_50HZ[] = {
3818  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
3819  {0xa0, 0x06, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,06,cc */
3820  {0xa0, 0x54, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,54,cc */
3821  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
3822  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
3823  {0xa0, 0x87, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,87,cc */
3824  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
3825  {0xa0, 0x30, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,30,cc */
3826  {0xaa, 0x03, 0x0021}, /* 00,03,21,aa */
3827  {0xaa, 0x04, 0x000c}, /* 00,04,0c,aa */
3828  {0xaa, 0x05, 0x0002}, /* 00,05,02,aa */
3829  {0xaa, 0x07, 0x001c}, /* 00,07,1c,aa */
3830  {0xa0, 0x04, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,04,cc */
3831  {}
3832 };
3833 static const struct usb_action pas106b_60HZ[] = {
3834  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
3835  {0xa0, 0x06, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,06,cc */
3836  {0xa0, 0x2e, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,2e,cc */
3837  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
3838  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
3839  {0xa0, 0x71, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,71,cc */
3840  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
3841  {0xa0, 0x30, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,30,cc */
3842  {0xaa, 0x03, 0x001c}, /* 00,03,1c,aa */
3843  {0xaa, 0x04, 0x0004}, /* 00,04,04,aa */
3844  {0xaa, 0x05, 0x0001}, /* 00,05,01,aa */
3845  {0xaa, 0x07, 0x00c4}, /* 00,07,c4,aa */
3846  {0xa0, 0x04, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,04,cc */
3847  {}
3848 };
3849 static const struct usb_action pas106b_NoFliker[] = {
3850  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
3851  {0xa0, 0x06, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,06,cc */
3852  {0xa0, 0x50, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,50,cc */
3853  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
3854  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
3855  {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */
3856  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
3857  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
3858  {0xaa, 0x03, 0x0013}, /* 00,03,13,aa */
3859  {0xaa, 0x04, 0x0000}, /* 00,04,00,aa */
3860  {0xaa, 0x05, 0x0001}, /* 00,05,01,aa */
3861  {0xaa, 0x07, 0x0030}, /* 00,07,30,aa */
3862  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
3863  {}
3864 };
3865 
3866 /* from lvWIMv.inf 046d:08a2/:08aa 2007/06/03 */
3867 static const struct usb_action pas202b_Initial[] = { /* 640x480 */
3868  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */
3869  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
3870  {0xa0, 0x0e, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0e,cc */
3871  {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, /* 00,02,00,cc */
3872  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */
3873  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */
3874  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */
3875  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */
3876  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */
3877  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */
3878  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */
3879  {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, /* 00,8d,08,cc */
3880  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */
3881  {0xa0, 0x03, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,03,cc */
3882  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */
3883  {0xa0, 0x03, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,03,cc */
3884  {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, /* 00,9b,01,cc */
3885  {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e6,cc */
3886  {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, /* 00,9d,02,cc */
3887  {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */
3888  {0xaa, 0x02, 0x0002}, /* 00,02,04,aa --> 02 */
3889  {0xaa, 0x07, 0x0006}, /* 00,07,06,aa */
3890  {0xaa, 0x08, 0x0002}, /* 00,08,02,aa */
3891  {0xaa, 0x09, 0x0006}, /* 00,09,06,aa */
3892  {0xaa, 0x0a, 0x0001}, /* 00,0a,01,aa */
3893  {0xaa, 0x0b, 0x0001}, /* 00,0b,01,aa */
3894  {0xaa, 0x0c, 0x0006},
3895  {0xaa, 0x0d, 0x0000}, /* 00,0d,00,aa */
3896  {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */
3897  {0xaa, 0x12, 0x0005}, /* 00,12,05,aa */
3898  {0xaa, 0x13, 0x0063}, /* 00,13,63,aa */
3899  {0xaa, 0x15, 0x0070}, /* 00,15,70,aa */
3900  {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,b7,cc */
3901  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */
3902  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */
3903  {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */
3904  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */
3905  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */
3906  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */
3907  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */
3908  {0xa0, 0x70, ZC3XX_R18D_YTARGET}, /* 01,8d,70,cc */
3909  {}
3910 };
3911 static const struct usb_action pas202b_InitialScale[] = { /* 320x240 */
3912  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */
3913  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
3914  {0xa0, 0x0e, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0e,cc */
3915  {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */
3916  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */
3917  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */
3918  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */
3919  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
3920  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */
3921  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */
3922  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */
3923  {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, /* 00,8d,08,cc */
3924  {0xa0, 0x08, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,08,cc */
3925  {0xa0, 0x02, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,02,cc */
3926  {0xa0, 0x08, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,08,cc */
3927  {0xa0, 0x02, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,02,cc */
3928  {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, /* 00,9b,01,cc */
3929  {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},
3930  {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, /* 00,9d,02,cc */
3931  {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */
3932  {0xaa, 0x02, 0x0002}, /* 00,02,02,aa */
3933  {0xaa, 0x07, 0x0006}, /* 00,07,06,aa */
3934  {0xaa, 0x08, 0x0002}, /* 00,08,02,aa */
3935  {0xaa, 0x09, 0x0006}, /* 00,09,06,aa */
3936  {0xaa, 0x0a, 0x0001}, /* 00,0a,01,aa */
3937  {0xaa, 0x0b, 0x0001}, /* 00,0b,01,aa */
3938  {0xaa, 0x0c, 0x0006},
3939  {0xaa, 0x0d, 0x0000}, /* 00,0d,00,aa */
3940  {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */
3941  {0xaa, 0x12, 0x0005}, /* 00,12,05,aa */
3942  {0xaa, 0x13, 0x0063}, /* 00,13,63,aa */
3943  {0xaa, 0x15, 0x0070}, /* 00,15,70,aa */
3944  {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */
3945  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */
3946  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */
3947  {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */
3948  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */
3949  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */
3950  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */
3951  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */
3952  {0xa0, 0x70, ZC3XX_R18D_YTARGET}, /* 01,8d,70,cc */
3953  {0xa0, 0xff, ZC3XX_R097_WINYSTARTHIGH},
3954  {0xa0, 0xfe, ZC3XX_R098_WINYSTARTLOW},
3955  {}
3956 };
3957 static const struct usb_action pas202b_50HZ[] = {
3958  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
3959  {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, /* 00,87,20,cc */
3960  {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, /* 00,88,21,cc */
3961  {0xaa, 0x20, 0x0002}, /* 00,20,02,aa */
3962  {0xaa, 0x21, 0x001b},
3963  {0xaa, 0x03, 0x0044}, /* 00,03,44,aa */
3964  {0xaa, 0x04, 0x0008},
3965  {0xaa, 0x05, 0x001b},
3966  {0xaa, 0x0e, 0x0001}, /* 00,0e,01,aa */
3967  {0xaa, 0x0f, 0x0000}, /* 00,0f,00,aa */
3968  {0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF},
3969  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */
3970  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
3971  {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID},
3972  {0xa0, 0x1b, ZC3XX_R192_EXPOSURELIMITLOW},
3973  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
3974  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
3975  {0xa0, 0x4d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,4d,cc */
3976  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
3977  {0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE},
3978  {0xa0, 0x44, ZC3XX_R01D_HSYNC_0}, /* 00,1d,44,cc */
3979  {0xa0, 0x6f, ZC3XX_R01E_HSYNC_1}, /* 00,1e,6f,cc */
3980  {0xa0, 0xad, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ad,cc */
3981  {0xa0, 0xeb, ZC3XX_R020_HSYNC_3}, /* 00,20,eb,cc */
3982  {0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID}, /* 00,87,0f,cc */
3983  {0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW}, /* 00,88,0e,cc */
3984  {}
3985 };
3986 static const struct usb_action pas202b_50HZScale[] = {
3987  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
3988  {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, /* 00,87,20,cc */
3989  {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, /* 00,88,21,cc */
3990  {0xaa, 0x20, 0x0004},
3991  {0xaa, 0x21, 0x003d},
3992  {0xaa, 0x03, 0x0041}, /* 00,03,41,aa */
3993  {0xaa, 0x04, 0x0010},
3994  {0xaa, 0x05, 0x003d},
3995  {0xaa, 0x0e, 0x0001}, /* 00,0e,01,aa */
3996  {0xaa, 0x0f, 0x0000}, /* 00,0f,00,aa */
3997  {0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF},
3998  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */
3999  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
4000  {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID},
4001  {0xa0, 0x3d, ZC3XX_R192_EXPOSURELIMITLOW},
4002  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
4003  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
4004  {0xa0, 0x9b, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,9b,cc */
4005  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4006  {0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE},
4007  {0xa0, 0x41, ZC3XX_R01D_HSYNC_0}, /* 00,1d,41,cc */
4008  {0xa0, 0x6f, ZC3XX_R01E_HSYNC_1}, /* 00,1e,6f,cc */
4009  {0xa0, 0xad, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ad,cc */
4010  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
4011  {0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID}, /* 00,87,0f,cc */
4012  {0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW}, /* 00,88,0e,cc */
4013  {}
4014 };
4015 static const struct usb_action pas202b_60HZ[] = {
4016  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
4017  {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, /* 00,87,20,cc */
4018  {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, /* 00,88,21,cc */
4019  {0xaa, 0x20, 0x0002}, /* 00,20,02,aa */
4020  {0xaa, 0x21, 0x0000}, /* 00,21,00,aa */
4021  {0xaa, 0x03, 0x0045}, /* 00,03,45,aa */
4022  {0xaa, 0x04, 0x0008}, /* 00,04,08,aa */
4023  {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */
4024  {0xaa, 0x0e, 0x0001}, /* 00,0e,01,aa */
4025  {0xaa, 0x0f, 0x0000}, /* 00,0f,00,aa */
4026  {0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF},
4027  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */
4028  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
4029  {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID},
4030  {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW},
4031  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
4032  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
4033  {0xa0, 0x40, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,40,cc */
4034  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4035  {0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE},
4036  {0xa0, 0x45, ZC3XX_R01D_HSYNC_0}, /* 00,1d,45,cc */
4037  {0xa0, 0x8e, ZC3XX_R01E_HSYNC_1}, /* 00,1e,8e,cc */
4038  {0xa0, 0xc1, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c1,cc */
4039  {0xa0, 0xf5, ZC3XX_R020_HSYNC_3}, /* 00,20,f5,cc */
4040  {0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID}, /* 00,87,0f,cc */
4041  {0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW}, /* 00,88,0e,cc */
4042  {}
4043 };
4044 static const struct usb_action pas202b_60HZScale[] = {
4045  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
4046  {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, /* 00,87,20,cc */
4047  {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, /* 00,88,21,cc */
4048  {0xaa, 0x20, 0x0004},
4049  {0xaa, 0x21, 0x0008},
4050  {0xaa, 0x03, 0x0042}, /* 00,03,42,aa */
4051  {0xaa, 0x04, 0x0010},
4052  {0xaa, 0x05, 0x0008},
4053  {0xaa, 0x0e, 0x0001}, /* 00,0e,01,aa */
4054  {0xaa, 0x0f, 0x0000}, /* 00,0f,00,aa */
4055  {0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF},
4056  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */
4057  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
4058  {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID},
4059  {0xa0, 0x08, ZC3XX_R192_EXPOSURELIMITLOW},
4060  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
4061  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
4062  {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,81,cc */
4063  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4064  {0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE},
4065  {0xa0, 0x42, ZC3XX_R01D_HSYNC_0}, /* 00,1d,42,cc */
4066  {0xa0, 0x6f, ZC3XX_R01E_HSYNC_1}, /* 00,1e,6f,cc */
4067  {0xa0, 0xaf, ZC3XX_R01F_HSYNC_2}, /* 00,1f,af,cc */
4068  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
4069  {0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID}, /* 00,87,0f,cc */
4070  {0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW}, /* 00,88,0e,cc */
4071  {}
4072 };
4073 static const struct usb_action pas202b_NoFliker[] = {
4074  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
4075  {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, /* 00,87,20,cc */
4076  {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, /* 00,88,21,cc */
4077  {0xaa, 0x20, 0x0002}, /* 00,20,02,aa */
4078  {0xaa, 0x21, 0x0006},
4079  {0xaa, 0x03, 0x0040}, /* 00,03,40,aa */
4080  {0xaa, 0x04, 0x0008}, /* 00,04,08,aa */
4081  {0xaa, 0x05, 0x0006},
4082  {0xaa, 0x0e, 0x0001}, /* 00,0e,01,aa */
4083  {0xaa, 0x0f, 0x0000}, /* 00,0f,00,aa */
4084  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
4085  {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID},
4086  {0xa0, 0x06, ZC3XX_R192_EXPOSURELIMITLOW},
4087  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
4088  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
4089  {0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW},
4090  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
4091  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
4092  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
4093  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
4094  {0xa0, 0x40, ZC3XX_R01D_HSYNC_0}, /* 00,1d,40,cc */
4095  {0xa0, 0x60, ZC3XX_R01E_HSYNC_1}, /* 00,1e,60,cc */
4096  {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, /* 00,1f,90,cc */
4097  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
4098  {0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID}, /* 00,87,0f,cc */
4099  {0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW}, /* 00,88,0e,cc */
4100  {}
4101 };
4102 static const struct usb_action pas202b_NoFlikerScale[] = {
4103  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
4104  {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, /* 00,87,20,cc */
4105  {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, /* 00,88,21,cc */
4106  {0xaa, 0x20, 0x0004},
4107  {0xaa, 0x21, 0x000c},
4108  {0xaa, 0x03, 0x0040}, /* 00,03,40,aa */
4109  {0xaa, 0x04, 0x0010},
4110  {0xaa, 0x05, 0x000c},
4111  {0xaa, 0x0e, 0x0001}, /* 00,0e,01,aa */
4112  {0xaa, 0x0f, 0x0000}, /* 00,0f,00,aa */
4113  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
4114  {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID},
4115  {0xa0, 0x0c, ZC3XX_R192_EXPOSURELIMITLOW},
4116  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
4117  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
4118  {0xa0, 0x02, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,02,cc */
4119  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
4120  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
4121  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
4122  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
4123  {0xa0, 0x40, ZC3XX_R01D_HSYNC_0}, /* 00,1d,40,cc */
4124  {0xa0, 0x60, ZC3XX_R01E_HSYNC_1}, /* 00,1e,60,cc */
4125  {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, /* 00,1f,90,cc */
4126  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
4127  {0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID}, /* 00,87,0f,cc */
4128  {0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW}, /* 00,88,0e,cc */
4129  {}
4130 };
4131 
4132 /* mt9v111 (mi0360soc) and pb0330 from vm30x.inf 0ac8:301b 07/02/13 */
4133 static const struct usb_action mt9v111_1_Initial[] = { /* 640x480 */
4134  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
4135  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
4136  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
4137  {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
4138  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
4139  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
4140  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
4141  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
4142  {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4143  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
4144  {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
4145  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
4146  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
4147  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
4148  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
4149  {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4150  {0xdd, 0x00, 0x0200},
4151  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4152  {0xaa, 0x01, 0x0001},
4153  {0xaa, 0x06, 0x0000},
4154  {0xaa, 0x08, 0x0483},
4155  {0xaa, 0x01, 0x0004},
4156  {0xaa, 0x08, 0x0006},
4157  {0xaa, 0x02, 0x0011},
4158  {0xaa, 0x03, 0x01e5}, /*jfm: was 01e7*/
4159  {0xaa, 0x04, 0x0285}, /*jfm: was 0287*/
4160  {0xaa, 0x07, 0x3002},
4161  {0xaa, 0x20, 0x5100},
4162  {0xaa, 0x35, 0x507f},
4163  {0xaa, 0x30, 0x0005},
4164  {0xaa, 0x31, 0x0000},
4165  {0xaa, 0x58, 0x0078},
4166  {0xaa, 0x62, 0x0411},
4167  {0xaa, 0x2b, 0x007f},
4168  {0xaa, 0x2c, 0x007f}, /*jfm: was 0030*/
4169  {0xaa, 0x2d, 0x007f}, /*jfm: was 0030*/
4170  {0xaa, 0x2e, 0x007f}, /*jfm: was 0030*/
4171  {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
4172  {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},
4173  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4174  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
4175  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
4176  {0xa0, 0x09, 0x01ad}, /*jfm: was 00*/
4177  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
4178  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
4179  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
4180  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
4181  {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
4182  {0xa0, 0x6c, ZC3XX_R18D_YTARGET},
4183  {0xa0, 0x61, ZC3XX_R116_RGAIN},
4184  {0xa0, 0x65, ZC3XX_R118_BGAIN},
4185  {}
4186 };
4187 static const struct usb_action mt9v111_1_InitialScale[] = { /* 320x240 */
4188  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
4189  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
4190  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
4191  {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
4192  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
4193  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
4194  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
4195  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
4196  {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4197  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
4198  {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
4199  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
4200  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
4201  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
4202  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
4203  {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4204  {0xdd, 0x00, 0x0200},
4205  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4206  {0xaa, 0x01, 0x0001},
4207  {0xaa, 0x06, 0x0000},
4208  {0xaa, 0x08, 0x0483},
4209  {0xaa, 0x01, 0x0004},
4210  {0xaa, 0x08, 0x0006},
4211  {0xaa, 0x02, 0x0011},
4212  {0xaa, 0x03, 0x01e7},
4213  {0xaa, 0x04, 0x0287},
4214  {0xaa, 0x07, 0x3002},
4215  {0xaa, 0x20, 0x5100},
4216  {0xaa, 0x35, 0x007f}, /*jfm: was 0050*/
4217  {0xaa, 0x30, 0x0005},
4218  {0xaa, 0x31, 0x0000},
4219  {0xaa, 0x58, 0x0078},
4220  {0xaa, 0x62, 0x0411},
4221  {0xaa, 0x2b, 0x007f}, /*jfm: was 28*/
4222  {0xaa, 0x2c, 0x007f}, /*jfm: was 30*/
4223  {0xaa, 0x2d, 0x007f}, /*jfm: was 30*/
4224  {0xaa, 0x2e, 0x007f}, /*jfm: was 28*/
4225  {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
4226  {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},
4227  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4228  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
4229  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
4230  {0xa0, 0x09, 0x01ad}, /*jfm: was 00*/
4231  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
4232  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
4233  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
4234  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
4235  {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
4236  {0xa0, 0x6c, ZC3XX_R18D_YTARGET},
4237  {0xa0, 0x61, ZC3XX_R116_RGAIN},
4238  {0xa0, 0x65, ZC3XX_R118_BGAIN},
4239  {}
4240 };
4241 static const struct usb_action mt9v111_1_AE50HZ[] = {
4242  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4243  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4244  {0xbb, 0x00, 0x0562},
4245  {0xbb, 0x01, 0x09aa},
4246  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4247  {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID},
4248  {0xa0, 0x9b, ZC3XX_R192_EXPOSURELIMITLOW},
4249  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4250  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4251  {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW},
4252  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4253  {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4254  {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4255  {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
4256  {0xa0, 0x62, ZC3XX_R01D_HSYNC_0},
4257  {0xa0, 0x90, ZC3XX_R01E_HSYNC_1},
4258  {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},
4259  {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4260  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4261  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4262  {}
4263 };
4264 static const struct usb_action mt9v111_1_AE50HZScale[] = {
4265  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4266  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4267  {0xbb, 0x00, 0x0509},
4268  {0xbb, 0x01, 0x0934},
4269  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4270  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4271  {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW},
4272  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4273  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4274  {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW},
4275  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4276  {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4277  {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4278  {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
4279  {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
4280  {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
4281  {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
4282  {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4283  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4284  {}
4285 };
4286 static const struct usb_action mt9v111_1_AE60HZ[] = {
4287  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4288  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4289  {0xaa, 0x05, 0x003d},
4290  {0xaa, 0x09, 0x016e},
4291  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4292  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4293  {0xa0, 0xdd, ZC3XX_R192_EXPOSURELIMITLOW},
4294  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4295  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4296  {0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW},
4297  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4298  {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4299  {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4300  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
4301  {0xa0, 0x62, ZC3XX_R01D_HSYNC_0},
4302  {0xa0, 0x90, ZC3XX_R01E_HSYNC_1},
4303  {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},
4304  {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4305  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4306  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4307  {}
4308 };
4309 static const struct usb_action mt9v111_1_AE60HZScale[] = {
4310  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4311  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4312  {0xbb, 0x00, 0x0509},
4313  {0xbb, 0x01, 0x0983},
4314  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4315  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4316  {0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW},
4317  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4318  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4319  {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW},
4320  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4321  {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4322  {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4323  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
4324  {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
4325  {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
4326  {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
4327  {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4328  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4329  {}
4330 };
4331 static const struct usb_action mt9v111_1_AENoFliker[] = {
4332  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4333  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4334  {0xbb, 0x00, 0x0509},
4335  {0xbb, 0x01, 0x0960},
4336  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4337  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4338  {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
4339  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4340  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4341  {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
4342  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4343  {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4344  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
4345  {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
4346  {0xa0, 0x09, ZC3XX_R01D_HSYNC_0},
4347  {0xa0, 0x40, ZC3XX_R01E_HSYNC_1},
4348  {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
4349  {0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
4350  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4351  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4352  {}
4353 };
4354 static const struct usb_action mt9v111_1_AENoFlikerScale[] = {
4355  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4356  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4357  {0xbb, 0x00, 0x0534},
4358  {0xbb, 0x02, 0x0960},
4359  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4360  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4361  {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
4362  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4363  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4364  {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
4365  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4366  {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4367  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
4368  {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
4369  {0xa0, 0x34, ZC3XX_R01D_HSYNC_0},
4370  {0xa0, 0x60, ZC3XX_R01E_HSYNC_1},
4371  {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
4372  {0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
4373  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4374  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4375  {}
4376 };
4377 /* from usbvm303.inf 0ac8:303b 07/03/25 (3 - tas5130c) */
4378 static const struct usb_action mt9v111_3_Initial[] = {
4379  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
4380  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
4381  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
4382  {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
4383  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
4384  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
4385  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
4386  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
4387  {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4388  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
4389  {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
4390  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
4391  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
4392  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
4393  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
4394  {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4395  {0xdd, 0x00, 0x0200},
4396  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4397  {0xaa, 0x01, 0x0001}, /* select IFP/SOC registers */
4398  {0xaa, 0x06, 0x0000}, /* operating mode control */
4399  {0xaa, 0x08, 0x0483}, /* output format control */
4400  /* H red first, V red or blue first,
4401  * raw Bayer, auto flicker */
4402  {0xaa, 0x01, 0x0004}, /* select sensor core registers */
4403  {0xaa, 0x08, 0x0006}, /* row start */
4404  {0xaa, 0x02, 0x0011}, /* column start */
4405  {0xaa, 0x03, 0x01e5}, /* window height - 1 */
4406  {0xaa, 0x04, 0x0285}, /* window width - 1 */
4407  {0xaa, 0x07, 0x3002}, /* output control */
4408  {0xaa, 0x20, 0x1100}, /* read mode: bits 8 & 12 (?) */
4409  {0xaa, 0x35, 0x007f}, /* global gain */
4410  {0xaa, 0x30, 0x0005},
4411  {0xaa, 0x31, 0x0000},
4412  {0xaa, 0x58, 0x0078},
4413  {0xaa, 0x62, 0x0411},
4414  {0xaa, 0x2b, 0x007f}, /* green1 gain */
4415  {0xaa, 0x2c, 0x007f}, /* blue gain */
4416  {0xaa, 0x2d, 0x007f}, /* red gain */
4417  {0xaa, 0x2e, 0x007f}, /* green2 gain */
4418  {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
4419  {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
4420  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4421  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
4422  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
4423  {0xa0, 0x00, 0x01ad},
4424  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
4425  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
4426  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
4427  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
4428  {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
4429  {0xa0, 0x80, ZC3XX_R18D_YTARGET},
4430  {0xa0, 0x61, ZC3XX_R116_RGAIN},
4431  {0xa0, 0x65, ZC3XX_R118_BGAIN},
4432  {}
4433 };
4434 static const struct usb_action mt9v111_3_InitialScale[] = {
4435  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
4436  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
4437  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
4438  {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
4439  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
4440  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
4441  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
4442  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
4443  {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4444  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
4445  {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
4446  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
4447  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
4448  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
4449  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
4450  {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
4451  {0xdd, 0x00, 0x0200},
4452  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4453  {0xaa, 0x01, 0x0001},
4454  {0xaa, 0x06, 0x0000},
4455  {0xaa, 0x08, 0x0483},
4456  {0xaa, 0x01, 0x0004},
4457  {0xaa, 0x08, 0x0006},
4458  {0xaa, 0x02, 0x0011},
4459  {0xaa, 0x03, 0x01e7},
4460  {0xaa, 0x04, 0x0287},
4461  {0xaa, 0x07, 0x3002},
4462  {0xaa, 0x20, 0x1100},
4463  {0xaa, 0x35, 0x007f},
4464  {0xaa, 0x30, 0x0005},
4465  {0xaa, 0x31, 0x0000},
4466  {0xaa, 0x58, 0x0078},
4467  {0xaa, 0x62, 0x0411},
4468  {0xaa, 0x2b, 0x007f},
4469  {0xaa, 0x2c, 0x007f},
4470  {0xaa, 0x2d, 0x007f},
4471  {0xaa, 0x2e, 0x007f},
4472  {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
4473  {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
4474  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4475  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
4476  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
4477  {0xa0, 0x00, 0x01ad},
4478  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
4479  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
4480  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
4481  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
4482  {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
4483  {0xa0, 0x80, ZC3XX_R18D_YTARGET},
4484  {0xa0, 0x61, ZC3XX_R116_RGAIN},
4485  {0xa0, 0x65, ZC3XX_R118_BGAIN},
4486  {}
4487 };
4488 static const struct usb_action mt9v111_3_AE50HZ[] = {
4489  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4490  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4491  {0xaa, 0x05, 0x0009}, /* horizontal blanking */
4492  {0xaa, 0x09, 0x01ce}, /* shutter width */
4493  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4494  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4495  {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW},
4496  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4497  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4498  {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW},
4499  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4500  {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4501  {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4502  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
4503  {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
4504  {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
4505  {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
4506  {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4507  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4508  {}
4509 };
4510 static const struct usb_action mt9v111_3_AE50HZScale[] = {
4511  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4512  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4513  {0xaa, 0x05, 0x0009},
4514  {0xaa, 0x09, 0x01ce},
4515  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4516  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4517  {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW},
4518  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4519  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4520  {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW},
4521  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4522  {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4523  {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4524  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
4525  {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
4526  {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
4527  {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
4528  {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4529  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4530  {}
4531 };
4532 static const struct usb_action mt9v111_3_AE60HZ[] = {
4533  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4534  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4535  {0xaa, 0x05, 0x0009},
4536  {0xaa, 0x09, 0x0083},
4537  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4538  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4539  {0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW},
4540  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4541  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4542  {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW},
4543  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4544  {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4545  {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4546  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
4547  {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
4548  {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
4549  {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
4550  {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4551  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4552  {}
4553 };
4554 static const struct usb_action mt9v111_3_AE60HZScale[] = {
4555  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4556  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4557  {0xaa, 0x05, 0x0009},
4558  {0xaa, 0x09, 0x0083},
4559  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4560  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4561  {0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW},
4562  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4563  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4564  {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW},
4565  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4566  {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4567  {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4568  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
4569  {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
4570  {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
4571  {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
4572  {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4573  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4574  {}
4575 };
4576 static const struct usb_action mt9v111_3_AENoFliker[] = {
4577  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4578  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4579  {0xaa, 0x05, 0x0034},
4580  {0xaa, 0x09, 0x0260},
4581  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4582  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4583  {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
4584  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4585  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4586  {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
4587  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4588  {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4589  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
4590  {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
4591  {0xa0, 0x34, ZC3XX_R01D_HSYNC_0},
4592  {0xa0, 0x60, ZC3XX_R01E_HSYNC_1},
4593  {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
4594  {0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
4595  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4596  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4597  {}
4598 };
4599 static const struct usb_action mt9v111_3_AENoFlikerScale[] = {
4600  {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
4601  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4602  {0xaa, 0x05, 0x0034},
4603  {0xaa, 0x09, 0x0260},
4604  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4605  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4606  {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
4607  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4608  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4609  {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
4610  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4611  {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
4612  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
4613  {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
4614  {0xa0, 0x34, ZC3XX_R01D_HSYNC_0},
4615  {0xa0, 0x60, ZC3XX_R01E_HSYNC_1},
4616  {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
4617  {0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
4618  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4619  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
4620  {}
4621 };
4622 
4623 static const struct usb_action pb0330_Initial[] = { /* 640x480 */
4624  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
4625  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */
4626  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
4627  {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
4628  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
4629  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
4630  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
4631  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
4632  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
4633  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4634  {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
4635  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
4636  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
4637  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
4638  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
4639  {0xdd, 0x00, 0x0200},
4640  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4641  {0xaa, 0x01, 0x0006},
4642  {0xaa, 0x02, 0x0011},
4643  {0xaa, 0x03, 0x01e5}, /*jfm: was 1e7*/
4644  {0xaa, 0x04, 0x0285}, /*jfm: was 0287*/
4645  {0xaa, 0x06, 0x0003},
4646  {0xaa, 0x07, 0x3002},
4647  {0xaa, 0x20, 0x1100},
4648  {0xaa, 0x2f, 0xf7b0},
4649  {0xaa, 0x30, 0x0005},
4650  {0xaa, 0x31, 0x0000},
4651  {0xaa, 0x34, 0x0100},
4652  {0xaa, 0x35, 0x0060},
4653  {0xaa, 0x3d, 0x068f},
4654  {0xaa, 0x40, 0x01e0},
4655  {0xaa, 0x58, 0x0078},
4656  {0xaa, 0x62, 0x0411},
4657  {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
4658  {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
4659  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4660  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
4661  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
4662  {0xa0, 0x09, 0x01ad}, /*jfm: was 00 */
4663  {0xa0, 0x15, 0x01ae},
4664  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
4665  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
4666  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
4667  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
4668  {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
4669  {0xa0, 0x78, ZC3XX_R18D_YTARGET}, /*jfm: was 6c*/
4670  {}
4671 };
4672 static const struct usb_action pb0330_InitialScale[] = { /* 320x240 */
4673  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
4674  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */
4675  {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
4676  {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
4677  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
4678  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
4679  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
4680  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
4681  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
4682  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4683  {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
4684  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
4685  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
4686  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
4687  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
4688  {0xdd, 0x00, 0x0200},
4689  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4690  {0xaa, 0x01, 0x0006},
4691  {0xaa, 0x02, 0x0011},
4692  {0xaa, 0x03, 0x01e7},
4693  {0xaa, 0x04, 0x0287},
4694  {0xaa, 0x06, 0x0003},
4695  {0xaa, 0x07, 0x3002},
4696  {0xaa, 0x20, 0x1100},
4697  {0xaa, 0x2f, 0xf7b0},
4698  {0xaa, 0x30, 0x0005},
4699  {0xaa, 0x31, 0x0000},
4700  {0xaa, 0x34, 0x0100},
4701  {0xaa, 0x35, 0x0060},
4702  {0xaa, 0x3d, 0x068f},
4703  {0xaa, 0x40, 0x01e0},
4704  {0xaa, 0x58, 0x0078},
4705  {0xaa, 0x62, 0x0411},
4706  {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
4707  {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
4708  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
4709  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
4710  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
4711  {0xa0, 0x09, 0x01ad},
4712  {0xa0, 0x15, 0x01ae},
4713  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
4714  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
4715  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
4716  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
4717  {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
4718  {0xa0, 0x78, ZC3XX_R18D_YTARGET}, /*jfm: was 6c*/
4719  {}
4720 };
4721 static const struct usb_action pb0330_50HZ[] = {
4722  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4723  {0xbb, 0x00, 0x055c},
4724  {0xbb, 0x01, 0x09aa},
4725  {0xbb, 0x00, 0x1001},
4726  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4727  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4728  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4729  {0xa0, 0xc4, ZC3XX_R192_EXPOSURELIMITLOW},
4730  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4731  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4732  {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW},
4733  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4734  {0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE},
4735  {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4736  {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
4737  {0xa0, 0x5c, ZC3XX_R01D_HSYNC_0},
4738  {0xa0, 0x90, ZC3XX_R01E_HSYNC_1},
4739  {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},
4740  {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4741  {}
4742 };
4743 static const struct usb_action pb0330_50HZScale[] = {
4744  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4745  {0xbb, 0x00, 0x0566},
4746  {0xbb, 0x02, 0x09b2},
4747  {0xbb, 0x00, 0x1002},
4748  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4749  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4750  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4751  {0xa0, 0x8c, ZC3XX_R192_EXPOSURELIMITLOW},
4752  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4753  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4754  {0xa0, 0x8a, ZC3XX_R197_ANTIFLICKERLOW},
4755  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4756  {0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE},
4757  {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4758  {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
4759  {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
4760  {0xa0, 0xf0, ZC3XX_R01E_HSYNC_1},
4761  {0xa0, 0xf8, ZC3XX_R01F_HSYNC_2},
4762  {0xa0, 0xff, ZC3XX_R020_HSYNC_3},
4763  {}
4764 };
4765 static const struct usb_action pb0330_60HZ[] = {
4766  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4767  {0xbb, 0x00, 0x0535},
4768  {0xbb, 0x01, 0x0974},
4769  {0xbb, 0x00, 0x1001},
4770  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4771  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4772  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4773  {0xa0, 0xfe, ZC3XX_R192_EXPOSURELIMITLOW},
4774  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4775  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4776  {0xa0, 0x3e, ZC3XX_R197_ANTIFLICKERLOW},
4777  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4778  {0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE},
4779  {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4780  {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
4781  {0xa0, 0x35, ZC3XX_R01D_HSYNC_0},
4782  {0xa0, 0x50, ZC3XX_R01E_HSYNC_1},
4783  {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
4784  {0xa0, 0xd0, ZC3XX_R020_HSYNC_3},
4785  {}
4786 };
4787 static const struct usb_action pb0330_60HZScale[] = {
4788  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4789  {0xbb, 0x00, 0x0535},
4790  {0xbb, 0x02, 0x096c},
4791  {0xbb, 0x00, 0x1002},
4792  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4793  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4794  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4795  {0xa0, 0xc0, ZC3XX_R192_EXPOSURELIMITLOW},
4796  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4797  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4798  {0xa0, 0x7c, ZC3XX_R197_ANTIFLICKERLOW},
4799  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
4800  {0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE},
4801  {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
4802  {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
4803  {0xa0, 0x35, ZC3XX_R01D_HSYNC_0},
4804  {0xa0, 0x50, ZC3XX_R01E_HSYNC_1},
4805  {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
4806  {0xa0, 0xd0, ZC3XX_R020_HSYNC_3},
4807  {}
4808 };
4809 static const struct usb_action pb0330_NoFliker[] = {
4810  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4811  {0xbb, 0x00, 0x0509},
4812  {0xbb, 0x02, 0x0940},
4813  {0xbb, 0x00, 0x1002},
4814  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4815  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4816  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4817  {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
4818  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4819  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4820  {0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW},
4821  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
4822  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
4823  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
4824  {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
4825  {0xa0, 0x09, ZC3XX_R01D_HSYNC_0},
4826  {0xa0, 0x40, ZC3XX_R01E_HSYNC_1},
4827  {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
4828  {0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
4829  {}
4830 };
4831 static const struct usb_action pb0330_NoFlikerScale[] = {
4832  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
4833  {0xbb, 0x00, 0x0535},
4834  {0xbb, 0x01, 0x0980},
4835  {0xbb, 0x00, 0x1001},
4836  {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
4837  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
4838  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
4839  {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
4840  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
4841  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
4842  {0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW},
4843  {0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
4844  {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
4845  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
4846  {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
4847  {0xa0, 0x35, ZC3XX_R01D_HSYNC_0},
4848  {0xa0, 0x60, ZC3XX_R01E_HSYNC_1},
4849  {0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
4850  {0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
4851  {}
4852 };
4853 
4854 /* from oem9.inf */
4855 static const struct usb_action po2030_Initial[] = { /* 640x480 */
4856  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */
4857  {0xa0, 0x04, ZC3XX_R002_CLOCKSELECT}, /* 00,02,04,cc */
4858  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
4859  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */
4860  {0xa0, 0x04, ZC3XX_R080_HBLANKHIGH}, /* 00,80,04,cc */
4861  {0xa0, 0x05, ZC3XX_R081_HBLANKLOW}, /* 00,81,05,cc */
4862  {0xa0, 0x16, ZC3XX_R083_RGAINADDR}, /* 00,83,16,cc */
4863  {0xa0, 0x18, ZC3XX_R085_BGAINADDR}, /* 00,85,18,cc */
4864  {0xa0, 0x1a, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,1a,cc */
4865  {0xa0, 0x1b, ZC3XX_R087_EXPTIMEMID}, /* 00,87,1b,cc */
4866  {0xa0, 0x1c, ZC3XX_R088_EXPTIMELOW}, /* 00,88,1c,cc */
4867  {0xa0, 0xee, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,ee,cc */
4868  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */
4869  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */
4870  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */
4871  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */
4872  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */
4873  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */
4874  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */
4875  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */
4876  {0xaa, 0x8d, 0x0008}, /* 00,8d,08,aa */
4877  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */
4878  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */
4879  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */
4880  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */
4881  {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e6,cc */
4882  {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */
4883  {0xaa, 0x09, 0x00ce}, /* 00,09,ce,aa */
4884  {0xaa, 0x0b, 0x0005}, /* 00,0b,05,aa */
4885  {0xaa, 0x0d, 0x0054}, /* 00,0d,54,aa */
4886  {0xaa, 0x0f, 0x00eb}, /* 00,0f,eb,aa */
4887  {0xaa, 0x87, 0x0000}, /* 00,87,00,aa */
4888  {0xaa, 0x88, 0x0004}, /* 00,88,04,aa */
4889  {0xaa, 0x89, 0x0000}, /* 00,89,00,aa */
4890  {0xaa, 0x8a, 0x0005}, /* 00,8a,05,aa */
4891  {0xaa, 0x13, 0x0003}, /* 00,13,03,aa */
4892  {0xaa, 0x16, 0x0040}, /* 00,16,40,aa */
4893  {0xaa, 0x18, 0x0040}, /* 00,18,40,aa */
4894  {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */
4895  {0xaa, 0x29, 0x00e8}, /* 00,29,e8,aa */
4896  {0xaa, 0x45, 0x0045}, /* 00,45,45,aa */
4897  {0xaa, 0x50, 0x00ed}, /* 00,50,ed,aa */
4898  {0xaa, 0x51, 0x0025}, /* 00,51,25,aa */
4899  {0xaa, 0x52, 0x0042}, /* 00,52,42,aa */
4900  {0xaa, 0x53, 0x002f}, /* 00,53,2f,aa */
4901  {0xaa, 0x79, 0x0025}, /* 00,79,25,aa */
4902  {0xaa, 0x7b, 0x0000}, /* 00,7b,00,aa */
4903  {0xaa, 0x7e, 0x0025}, /* 00,7e,25,aa */
4904  {0xaa, 0x7f, 0x0025}, /* 00,7f,25,aa */
4905  {0xaa, 0x21, 0x0000}, /* 00,21,00,aa */
4906  {0xaa, 0x33, 0x0036}, /* 00,33,36,aa */
4907  {0xaa, 0x36, 0x0060}, /* 00,36,60,aa */
4908  {0xaa, 0x37, 0x0008}, /* 00,37,08,aa */
4909  {0xaa, 0x3b, 0x0031}, /* 00,3b,31,aa */
4910  {0xaa, 0x44, 0x000f}, /* 00,44,0f,aa */
4911  {0xaa, 0x58, 0x0002}, /* 00,58,02,aa */
4912  {0xaa, 0x66, 0x00c0}, /* 00,66,c0,aa */
4913  {0xaa, 0x67, 0x0044}, /* 00,67,44,aa */
4914  {0xaa, 0x6b, 0x00a0}, /* 00,6b,a0,aa */
4915  {0xaa, 0x6c, 0x0054}, /* 00,6c,54,aa */
4916  {0xaa, 0xd6, 0x0007}, /* 00,d6,07,aa */
4917  {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,f7,cc */
4918  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
4919  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */
4920  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */
4921  {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */
4922  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */
4923  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */
4924  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */
4925  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */
4926  {0xa0, 0x7a, ZC3XX_R116_RGAIN}, /* 01,16,7a,cc */
4927  {0xa0, 0x4a, ZC3XX_R118_BGAIN}, /* 01,18,4a,cc */
4928  {}
4929 };
4930 
4931 /* from oem9.inf */
4932 static const struct usb_action po2030_InitialScale[] = { /* 320x240 */
4933  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */
4934  {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */
4935  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
4936  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */
4937  {0xa0, 0x04, ZC3XX_R080_HBLANKHIGH}, /* 00,80,04,cc */
4938  {0xa0, 0x05, ZC3XX_R081_HBLANKLOW}, /* 00,81,05,cc */
4939  {0xa0, 0x16, ZC3XX_R083_RGAINADDR}, /* 00,83,16,cc */
4940  {0xa0, 0x18, ZC3XX_R085_BGAINADDR}, /* 00,85,18,cc */
4941  {0xa0, 0x1a, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,1a,cc */
4942  {0xa0, 0x1b, ZC3XX_R087_EXPTIMEMID}, /* 00,87,1b,cc */
4943  {0xa0, 0x1c, ZC3XX_R088_EXPTIMELOW}, /* 00,88,1c,cc */
4944  {0xa0, 0xee, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,ee,cc */
4945  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */
4946  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */
4947  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */
4948  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */
4949  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */
4950  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */
4951  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */
4952  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */
4953  {0xaa, 0x8d, 0x0008}, /* 00,8d,08,aa */
4954  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */
4955  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */
4956  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */
4957  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */
4958  {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e8,cc */
4959  {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */
4960  {0xaa, 0x09, 0x00cc}, /* 00,09,cc,aa */
4961  {0xaa, 0x0b, 0x0005}, /* 00,0b,05,aa */
4962  {0xaa, 0x0d, 0x0058}, /* 00,0d,58,aa */
4963  {0xaa, 0x0f, 0x00ed}, /* 00,0f,ed,aa */
4964  {0xaa, 0x87, 0x0000}, /* 00,87,00,aa */
4965  {0xaa, 0x88, 0x0004}, /* 00,88,04,aa */
4966  {0xaa, 0x89, 0x0000}, /* 00,89,00,aa */
4967  {0xaa, 0x8a, 0x0005}, /* 00,8a,05,aa */
4968  {0xaa, 0x13, 0x0003}, /* 00,13,03,aa */
4969  {0xaa, 0x16, 0x0040}, /* 00,16,40,aa */
4970  {0xaa, 0x18, 0x0040}, /* 00,18,40,aa */
4971  {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */
4972  {0xaa, 0x29, 0x00e8}, /* 00,29,e8,aa */
4973  {0xaa, 0x45, 0x0045}, /* 00,45,45,aa */
4974  {0xaa, 0x50, 0x00ed}, /* 00,50,ed,aa */
4975  {0xaa, 0x51, 0x0025}, /* 00,51,25,aa */
4976  {0xaa, 0x52, 0x0042}, /* 00,52,42,aa */
4977  {0xaa, 0x53, 0x002f}, /* 00,53,2f,aa */
4978  {0xaa, 0x79, 0x0025}, /* 00,79,25,aa */
4979  {0xaa, 0x7b, 0x0000}, /* 00,7b,00,aa */
4980  {0xaa, 0x7e, 0x0025}, /* 00,7e,25,aa */
4981  {0xaa, 0x7f, 0x0025}, /* 00,7f,25,aa */
4982  {0xaa, 0x21, 0x0000}, /* 00,21,00,aa */
4983  {0xaa, 0x33, 0x0036}, /* 00,33,36,aa */
4984  {0xaa, 0x36, 0x0060}, /* 00,36,60,aa */
4985  {0xaa, 0x37, 0x0008}, /* 00,37,08,aa */
4986  {0xaa, 0x3b, 0x0031}, /* 00,3b,31,aa */
4987  {0xaa, 0x44, 0x000f}, /* 00,44,0f,aa */
4988  {0xaa, 0x58, 0x0002}, /* 00,58,02,aa */
4989  {0xaa, 0x66, 0x00c0}, /* 00,66,c0,aa */
4990  {0xaa, 0x67, 0x0044}, /* 00,67,44,aa */
4991  {0xaa, 0x6b, 0x00a0}, /* 00,6b,a0,aa */
4992  {0xaa, 0x6c, 0x0054}, /* 00,6c,54,aa */
4993  {0xaa, 0xd6, 0x0007}, /* 00,d6,07,aa */
4994  {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,f7,cc */
4995  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
4996  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */
4997  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */
4998  {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */
4999  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */
5000  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */
5001  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */
5002  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */
5003  {0xa0, 0x7a, ZC3XX_R116_RGAIN}, /* 01,16,7a,cc */
5004  {0xa0, 0x4a, ZC3XX_R118_BGAIN}, /* 01,18,4a,cc */
5005  {}
5006 };
5007 
5008 static const struct usb_action po2030_50HZ[] = {
5009  {0xaa, 0x8d, 0x0008}, /* 00,8d,08,aa */
5010  {0xaa, 0x1a, 0x0001}, /* 00,1a,01,aa */
5011  {0xaa, 0x1b, 0x000a}, /* 00,1b,0a,aa */
5012  {0xaa, 0x1c, 0x00b0}, /* 00,1c,b0,aa */
5013  {0xa0, 0x05, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,05,cc */
5014  {0xa0, 0x35, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,35,cc */
5015  {0xa0, 0x70, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,70,cc */
5016  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
5017  {0xa0, 0x85, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,85,cc */
5018  {0xa0, 0x58, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,58,cc */
5019  {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0c,cc */
5020  {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,18,cc */
5021  {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,60,cc */
5022  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */
5023  {0xa0, 0x22, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,22,cc */
5024  {0xa0, 0x88, ZC3XX_R18D_YTARGET}, /* 01,8d,88,cc */
5025  {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,58,cc */
5026  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */
5027  {}
5028 };
5029 
5030 static const struct usb_action po2030_60HZ[] = {
5031  {0xaa, 0x8d, 0x0008}, /* 00,8d,08,aa */
5032  {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa */
5033  {0xaa, 0x1b, 0x00de}, /* 00,1b,de,aa */
5034  {0xaa, 0x1c, 0x0040}, /* 00,1c,40,aa */
5035  {0xa0, 0x08, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,08,cc */
5036  {0xa0, 0xae, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,ae,cc */
5037  {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,80,cc */
5038  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
5039  {0xa0, 0x6f, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,6f,cc */
5040  {0xa0, 0x20, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,20,cc */
5041  {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0c,cc */
5042  {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,18,cc */
5043  {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,60,cc */
5044  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */
5045  {0xa0, 0x22, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,22,cc */
5046  {0xa0, 0x88, ZC3XX_R18D_YTARGET}, /* 01,8d,88,cc */
5047  /* win: 01,8d,80 */
5048  {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,58,cc */
5049  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */
5050  {}
5051 };
5052 
5053 static const struct usb_action po2030_NoFliker[] = {
5054  {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */
5055  {0xaa, 0x8d, 0x000d}, /* 00,8d,0d,aa */
5056  {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa */
5057  {0xaa, 0x1b, 0x0002}, /* 00,1b,02,aa */
5058  {0xaa, 0x1c, 0x0078}, /* 00,1c,78,aa */
5059  {0xaa, 0x46, 0x0000}, /* 00,46,00,aa */
5060  {0xaa, 0x15, 0x0000}, /* 00,15,00,aa */
5061  {}
5062 };
5063 
5064 static const struct usb_action tas5130c_InitialScale[] = { /* 320x240 */
5065  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
5066  {0xa0, 0x50, ZC3XX_R002_CLOCKSELECT},
5067  {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
5068  {0xa0, 0x02, ZC3XX_R010_CMOSSENSORSELECT},
5069  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
5070  {0xa0, 0x00, ZC3XX_R001_SYSTEMOPERATING},
5071  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
5072  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
5073  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
5074  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
5075  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
5076  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
5077  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
5078 
5079  {0xa0, 0x04, ZC3XX_R098_WINYSTARTLOW},
5080  {0xa0, 0x0f, ZC3XX_R09A_WINXSTARTLOW},
5081  {0xa0, 0x04, ZC3XX_R11A_FIRSTYLOW},
5082  {0xa0, 0x0f, ZC3XX_R11C_FIRSTXLOW},
5083  {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},
5084  {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH},
5085  {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},
5086  {0xa0, 0x06, ZC3XX_R08D_COMPABILITYMODE},
5087  {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION},
5088  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
5089  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
5090  {0xa0, 0x70, ZC3XX_R18D_YTARGET},
5091  {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN},
5092  {0xa0, 0x00, 0x01ad},
5093  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
5094  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
5095  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
5096  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
5097  {0xa0, 0x07, ZC3XX_R0A5_EXPOSUREGAIN},
5098  {0xa0, 0x02, ZC3XX_R0A6_EXPOSUREBLACKLVL},
5099  {}
5100 };
5101 static const struct usb_action tas5130c_Initial[] = { /* 640x480 */
5102  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
5103  {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT},
5104  {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING},
5105  {0xa0, 0x02, ZC3XX_R010_CMOSSENSORSELECT},
5106  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
5107  {0xa0, 0x00, ZC3XX_R001_SYSTEMOPERATING},
5108  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
5109  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
5110  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
5111  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
5112  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
5113  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
5114  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
5115  {0xa0, 0x05, ZC3XX_R098_WINYSTARTLOW},
5116  {0xa0, 0x0f, ZC3XX_R09A_WINXSTARTLOW},
5117  {0xa0, 0x05, ZC3XX_R11A_FIRSTYLOW},
5118  {0xa0, 0x0f, ZC3XX_R11C_FIRSTXLOW},
5119  {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW},
5120  {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH},
5121  {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW},
5122  {0xa0, 0x06, ZC3XX_R08D_COMPABILITYMODE},
5123  {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
5124  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
5125  {0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
5126  {0xa0, 0x70, ZC3XX_R18D_YTARGET},
5127  {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN},
5128  {0xa0, 0x00, 0x01ad},
5129  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
5130  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
5131  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
5132  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
5133  {0xa0, 0x07, ZC3XX_R0A5_EXPOSUREGAIN},
5134  {0xa0, 0x02, ZC3XX_R0A6_EXPOSUREBLACKLVL},
5135  {}
5136 };
5137 static const struct usb_action tas5130c_50HZ[] = {
5138  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
5139  {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */
5140  {0xaa, 0xa4, 0x0063}, /* 00,a4,63,aa */
5141  {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
5142  {0xa0, 0x63, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,63,cc */
5143  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
5144  {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID},
5145  {0xa0, 0xfe, ZC3XX_R192_EXPOSURELIMITLOW},
5146  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
5147  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
5148  {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,47,cc */
5149  {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5150  {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5151  {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF},
5152  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
5153  {0xa0, 0xd3, ZC3XX_R01D_HSYNC_0}, /* 00,1d,d3,cc */
5154  {0xa0, 0xda, ZC3XX_R01E_HSYNC_1}, /* 00,1e,da,cc */
5155  {0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ea,cc */
5156  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
5157  {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */
5158  {0xa0, 0x4c, ZC3XX_R0A0_MAXXLOW},
5159  {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5160  {}
5161 };
5162 static const struct usb_action tas5130c_50HZScale[] = {
5163  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
5164  {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */
5165  {0xaa, 0xa4, 0x0077}, /* 00,a4,77,aa */
5166  {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
5167  {0xa0, 0x77, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,77,cc */
5168  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
5169  {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
5170  {0xa0, 0xd0, ZC3XX_R192_EXPOSURELIMITLOW},
5171  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
5172  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
5173  {0xa0, 0x7d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,7d,cc */
5174  {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5175  {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5176  {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF},
5177  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
5178  {0xa0, 0xf0, ZC3XX_R01D_HSYNC_0}, /* 00,1d,f0,cc */
5179  {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,f4,cc */
5180  {0xa0, 0xf8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,f8,cc */
5181  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
5182  {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */
5183  {0xa0, 0xc0, ZC3XX_R0A0_MAXXLOW},
5184  {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5185  {}
5186 };
5187 static const struct usb_action tas5130c_60HZ[] = {
5188  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
5189  {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */
5190  {0xaa, 0xa4, 0x0036}, /* 00,a4,36,aa */
5191  {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
5192  {0xa0, 0x36, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,36,cc */
5193  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
5194  {0xa0, 0x05, ZC3XX_R191_EXPOSURELIMITMID},
5195  {0xa0, 0x54, ZC3XX_R192_EXPOSURELIMITLOW},
5196  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
5197  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
5198  {0xa0, 0x3e, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,3e,cc */
5199  {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5200  {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5201  {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF},
5202  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
5203  {0xa0, 0xca, ZC3XX_R01D_HSYNC_0}, /* 00,1d,ca,cc */
5204  {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */
5205  {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */
5206  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
5207  {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */
5208  {0xa0, 0x28, ZC3XX_R0A0_MAXXLOW},
5209  {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5210  {}
5211 };
5212 static const struct usb_action tas5130c_60HZScale[] = {
5213  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
5214  {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */
5215  {0xaa, 0xa4, 0x0077}, /* 00,a4,77,aa */
5216  {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
5217  {0xa0, 0x77, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,77,cc */
5218  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
5219  {0xa0, 0x09, ZC3XX_R191_EXPOSURELIMITMID},
5220  {0xa0, 0x47, ZC3XX_R192_EXPOSURELIMITLOW},
5221  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
5222  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
5223  {0xa0, 0x7d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,7d,cc */
5224  {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5225  {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5226  {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF},
5227  {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
5228  {0xa0, 0xc8, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c8,cc */
5229  {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */
5230  {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */
5231  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
5232  {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */
5233  {0xa0, 0x20, ZC3XX_R0A0_MAXXLOW},
5234  {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5235  {}
5236 };
5237 static const struct usb_action tas5130c_NoFliker[] = {
5238  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
5239  {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */
5240  {0xaa, 0xa4, 0x0040}, /* 00,a4,40,aa */
5241  {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
5242  {0xa0, 0x40, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,40,cc */
5243  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
5244  {0xa0, 0x05, ZC3XX_R191_EXPOSURELIMITMID},
5245  {0xa0, 0xa0, ZC3XX_R192_EXPOSURELIMITLOW},
5246  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
5247  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
5248  {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
5249  {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5250  {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5251  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
5252  {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */
5253  {0xa0, 0xbc, ZC3XX_R01D_HSYNC_0}, /* 00,1d,bc,cc */
5254  {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */
5255  {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */
5256  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
5257  {0xa0, 0x02, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,02,cc */
5258  {0xa0, 0xf0, ZC3XX_R0A0_MAXXLOW},
5259  {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5260  {}
5261 };
5262 
5263 static const struct usb_action tas5130c_NoFlikerScale[] = {
5264  {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
5265  {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */
5266  {0xaa, 0xa4, 0x0090}, /* 00,a4,90,aa */
5267  {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
5268  {0xa0, 0x90, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,90,cc */
5269  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
5270  {0xa0, 0x0a, ZC3XX_R191_EXPOSURELIMITMID},
5271  {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW},
5272  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
5273  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
5274  {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
5275  {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
5276  {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
5277  {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
5278  {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */
5279  {0xa0, 0xbc, ZC3XX_R01D_HSYNC_0}, /* 00,1d,bc,cc */
5280  {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */
5281  {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */
5282  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
5283  {0xa0, 0x02, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,02,cc */
5284  {0xa0, 0xf0, ZC3XX_R0A0_MAXXLOW},
5285  {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
5286  {}
5287 };
5288 
5289 /* from usbvm305.inf 0ac8:305b 07/06/15 (3 - tas5130c) */
5290 static const struct usb_action gc0303_Initial[] = {
5291  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc, */
5292  {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING}, /* 00,08,02,cc, */
5293  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc, */
5294  {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
5295  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc, */
5296  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc, */
5297  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc, */
5298  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc, */
5299  {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc, */
5300  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc, */
5301  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc, */
5302  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc, */
5303  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc, */
5304  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc, */
5305  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc, */
5306  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc, */
5307  {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e6,cc,
5308  * 6<->8 */
5309  {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc,
5310  * 6<->8 */
5311  {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, /* 00,87,10,cc, */
5312  {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc, */
5313  {0xaa, 0x01, 0x0000},
5314  {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa, */
5315  {0xaa, 0x1c, 0x0017}, /* 00,1c,17,aa, */
5316  {0xaa, 0x1b, 0x0000},
5317  {0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,82,cc, */
5318  {0xa0, 0x83, ZC3XX_R087_EXPTIMEMID}, /* 00,87,83,cc, */
5319  {0xa0, 0x84, ZC3XX_R088_EXPTIMELOW}, /* 00,88,84,cc, */
5320  {0xaa, 0x05, 0x0010}, /* 00,05,10,aa, */
5321  {0xaa, 0x0a, 0x0002},
5322  {0xaa, 0x0b, 0x0000},
5323  {0xaa, 0x0c, 0x0002},
5324  {0xaa, 0x0d, 0x0000},
5325  {0xaa, 0x0e, 0x0002},
5326  {0xaa, 0x0f, 0x0000},
5327  {0xaa, 0x10, 0x0002},
5328  {0xaa, 0x11, 0x0000},
5329  {0xaa, 0x16, 0x0001}, /* 00,16,01,aa, */
5330  {0xaa, 0x17, 0x00e8}, /* 00,17,e6,aa, (e6 -> e8) */
5331  {0xaa, 0x18, 0x0002}, /* 00,18,02,aa, */
5332  {0xaa, 0x19, 0x0088}, /* 00,19,86,aa, */
5333  {0xaa, 0x20, 0x0020}, /* 00,20,20,aa, */
5334  {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,b7,cc, */
5335  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc, */
5336  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc, */
5337  {0xa0, 0x76, ZC3XX_R189_AWBSTATUS}, /* 01,89,76,cc, */
5338  {0xa0, 0x09, 0x01ad}, /* 01,ad,09,cc, */
5339  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc, */
5340  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc, */
5341  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc, */
5342  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc, */
5343  {0xa0, 0x58, ZC3XX_R1A8_DIGITALGAIN},
5344  {0xa0, 0x61, ZC3XX_R116_RGAIN}, /* 01,16,61,cc, */
5345  {0xa0, 0x65, ZC3XX_R118_BGAIN}, /* 01,18,65,cc */
5346  {0xaa, 0x1b, 0x0000},
5347  {}
5348 };
5349 
5350 static const struct usb_action gc0303_InitialScale[] = {
5351  {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc, */
5352  {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING}, /* 00,08,02,cc, */
5353  {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc, */
5354  {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
5355  {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc, */
5356  {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc, */
5357  {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc, */
5358  {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc, */
5359  {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc, */
5360  {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc, */
5361  {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc, */
5362  {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc, */
5363  {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc, */
5364  {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc, */
5365  {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc, */
5366  {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc, */
5367  {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e8,cc,
5368  * 8<->6 */
5369  {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc,
5370  * 8<->6 */
5371  {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, /* 00,87,10,cc, */
5372  {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc, */
5373  {0xaa, 0x01, 0x0000},
5374  {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa, */
5375  {0xaa, 0x1c, 0x0017}, /* 00,1c,17,aa, */
5376  {0xaa, 0x1b, 0x0000},
5377  {0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,82,cc, */
5378  {0xa0, 0x83, ZC3XX_R087_EXPTIMEMID}, /* 00,87,83,cc, */
5379  {0xa0, 0x84, ZC3XX_R088_EXPTIMELOW}, /* 00,88,84,cc, */
5380  {0xaa, 0x05, 0x0010}, /* 00,05,10,aa, */
5381  {0xaa, 0x0a, 0x0001},
5382  {0xaa, 0x0b, 0x0000},
5383  {0xaa, 0x0c, 0x0001},
5384  {0xaa, 0x0d, 0x0000},
5385  {0xaa, 0x0e, 0x0001},
5386  {0xaa, 0x0f, 0x0000},
5387  {0xaa, 0x10, 0x0001},
5388  {0xaa, 0x11, 0x0000},
5389  {0xaa, 0x16, 0x0001}, /* 00,16,01,aa, */
5390  {0xaa, 0x17, 0x00e8}, /* 00,17,e6,aa (e6 -> e8) */
5391  {0xaa, 0x18, 0x0002}, /* 00,18,02,aa, */
5392  {0xaa, 0x19, 0x0088}, /* 00,19,88,aa, */
5393  {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,b7,cc, */
5394  {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc, */
5395  {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc, */
5396  {0xa0, 0x76, ZC3XX_R189_AWBSTATUS}, /* 01,89,76,cc, */
5397  {0xa0, 0x09, 0x01ad}, /* 01,ad,09,cc, */
5398  {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc, */
5399  {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc, */
5400  {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc, */
5401  {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc, */
5402  {0xa0, 0x58, ZC3XX_R1A8_DIGITALGAIN},
5403  {0xa0, 0x61, ZC3XX_R116_RGAIN}, /* 01,16,61,cc, */
5404  {0xa0, 0x65, ZC3XX_R118_BGAIN}, /* 01,18,65,cc */
5405  {0xaa, 0x1b, 0x0000},
5406  {}
5407 };
5408 static const struct usb_action gc0303_50HZ[] = {
5409  {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */
5410  {0xaa, 0x83, 0x0001}, /* 00,83,01,aa */
5411  {0xaa, 0x84, 0x0063},
5412  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc, */
5413  {0xa0, 0x06, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,0d,cc, */
5414  {0xa0, 0xa8, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,50,cc, */
5415  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc, */
5416  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc, */
5417  {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,47,cc, */
5418  {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc, */
5419  {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc, */
5420  {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc, */
5421  {0xa0, 0x48, ZC3XX_R1AA_DIGITALGAINSTEP},
5422  {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc, */
5423  {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc, */
5424  {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc, */
5425  {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc, */
5426  {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,58,cc, */
5427  {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc, */
5428  {0xa0, 0x7f, ZC3XX_R18D_YTARGET},
5429  {}
5430 };
5431 
5432 static const struct usb_action gc0303_50HZScale[] = {
5433  {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */
5434  {0xaa, 0x83, 0x0003}, /* 00,83,03,aa */
5435  {0xaa, 0x84, 0x0054}, /* 00,84,54,aa */
5436  {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc, */
5437  {0xa0, 0x0d, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,0d,cc, */
5438  {0xa0, 0x50, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,50,cc, */
5439  {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc, */
5440  {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc, */
5441  {0xa0, 0x8e, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,8e,cc, */
5442  {0xa0, 0x0e,