• source navigation • diff markup • identifier search • freetext search •
Version: 2.6.24 2.6.25 2.6.26 2.6.27 2.6.28 2.6.29 2.6.30 2.6.31 2.6.32 2.6.33 2.6.34 2.6.35
Architecture: x86 arm avr32 blackfin m68k m68knommu microblaze mips powerpc sh
1 /* 2 * Z-Star/Vimicro zc301/zc302p/vc30x library 3 * 4 * Copyright (C) 2009-2010 Jean-Francois Moine <http://moinejf.free.fr> 5 * Copyright (C) 2004 2005 2006 Michel Xhaard mxhaard@magic.fr 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 MODULE_NAME "zc3xx" 23 24 #include <linux/input.h> 25 #include <linux/slab.h> 26 #include "gspca.h" 27 #include "jpeg.h" 28 29 MODULE_AUTHOR("Jean-Francois Moine <http://moinejf.free.fr>, " 30 "Serge A. Suchkov <Serge.A.S@tochka.ru>"); 31 MODULE_DESCRIPTION("GSPCA ZC03xx/VC3xx USB Camera Driver"); 32 MODULE_LICENSE("GPL"); 33 34 static int force_sensor = -1; 35 36 #define QUANT_VAL 1 /* quantization table */ 37 #include "zc3xx-reg.h" 38 39 /* specific webcam descriptor */ 40 struct sd { 41 struct gspca_dev gspca_dev; /* !! must be the first item */ 42 43 u8 contrast; 44 u8 gamma; 45 u8 autogain; 46 u8 lightfreq; 47 u8 sharpness; 48 u8 quality; /* image quality */ 49 #define QUALITY_MIN 40 50 #define QUALITY_MAX 60 51 #define QUALITY_DEF 50 52 53 u8 sensor; /* Type of image sensor chip */ 54 /* !! values used in different tables */ 55 #define SENSOR_ADCM2700 0 56 #define SENSOR_CS2102 1 57 #define SENSOR_CS2102K 2 58 #define SENSOR_GC0305 3 59 #define SENSOR_HDCS2020b 4 60 #define SENSOR_HV7131B 5 61 #define SENSOR_HV7131C 6 62 #define SENSOR_ICM105A 7 63 #define SENSOR_MC501CB 8 64 #define SENSOR_MI0360SOC 9 65 #define SENSOR_OV7620 10 66 /*#define SENSOR_OV7648 10 - same values */ 67 #define SENSOR_OV7630C 11 68 #define SENSOR_PAS106 12 69 #define SENSOR_PAS202B 13 70 #define SENSOR_PB0330 14 /* (MI0360) */ 71 #define SENSOR_PO2030 15 72 #define SENSOR_TAS5130CK 16 73 #define SENSOR_TAS5130CXX 17 74 #define SENSOR_TAS5130C_VF0250 18 75 #define SENSOR_MAX 19 76 unsigned short chip_revision; 77 78 u8 *jpeg_hdr; 79 }; 80 81 /* V4L2 controls supported by the driver */ 82 static int sd_setcontrast(struct gspca_dev *gspca_dev, __s32 val); 83 static int sd_getcontrast(struct gspca_dev *gspca_dev, __s32 *val); 84 static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val); 85 static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val); 86 static int sd_setgamma(struct gspca_dev *gspca_dev, __s32 val); 87 static int sd_getgamma(struct gspca_dev *gspca_dev, __s32 *val); 88 static int sd_setfreq(struct gspca_dev *gspca_dev, __s32 val); 89 static int sd_getfreq(struct gspca_dev *gspca_dev, __s32 *val); 90 static int sd_setsharpness(struct gspca_dev *gspca_dev, __s32 val); 91 static int sd_getsharpness(struct gspca_dev *gspca_dev, __s32 *val); 92 93 static const struct ctrl sd_ctrls[] = { 94 { 95 { 96 .id = V4L2_CID_CONTRAST, 97 .type = V4L2_CTRL_TYPE_INTEGER, 98 .name = "Contrast", 99 .minimum = 0, 100 .maximum = 255, 101 .step = 1, 102 #define CONTRAST_DEF 128 103 .default_value = CONTRAST_DEF, 104 }, 105 .set = sd_setcontrast, 106 .get = sd_getcontrast, 107 }, 108 { 109 { 110 .id = V4L2_CID_GAMMA, 111 .type = V4L2_CTRL_TYPE_INTEGER, 112 .name = "Gamma", 113 .minimum = 1, 114 .maximum = 6, 115 .step = 1, 116 .default_value = 4, 117 }, 118 .set = sd_setgamma, 119 .get = sd_getgamma, 120 }, 121 { 122 { 123 .id = V4L2_CID_AUTOGAIN, 124 .type = V4L2_CTRL_TYPE_BOOLEAN, 125 .name = "Auto Gain", 126 .minimum = 0, 127 .maximum = 1, 128 .step = 1, 129 #define AUTOGAIN_DEF 1 130 .default_value = AUTOGAIN_DEF, 131 }, 132 .set = sd_setautogain, 133 .get = sd_getautogain, 134 }, 135 #define LIGHTFREQ_IDX 3 136 { 137 { 138 .id = V4L2_CID_POWER_LINE_FREQUENCY, 139 .type = V4L2_CTRL_TYPE_MENU, 140 .name = "Light frequency filter", 141 .minimum = 0, 142 .maximum = 2, /* 0: 0, 1: 50Hz, 2:60Hz */ 143 .step = 1, 144 #define FREQ_DEF 0 145 .default_value = FREQ_DEF, 146 }, 147 .set = sd_setfreq, 148 .get = sd_getfreq, 149 }, 150 { 151 { 152 .id = V4L2_CID_SHARPNESS, 153 .type = V4L2_CTRL_TYPE_INTEGER, 154 .name = "Sharpness", 155 .minimum = 0, 156 .maximum = 3, 157 .step = 1, 158 #define SHARPNESS_DEF 2 159 .default_value = SHARPNESS_DEF, 160 }, 161 .set = sd_setsharpness, 162 .get = sd_getsharpness, 163 }, 164 }; 165 166 static const struct v4l2_pix_format vga_mode[] = { 167 {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 168 .bytesperline = 320, 169 .sizeimage = 320 * 240 * 3 / 8 + 590, 170 .colorspace = V4L2_COLORSPACE_JPEG, 171 .priv = 1}, 172 {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 173 .bytesperline = 640, 174 .sizeimage = 640 * 480 * 3 / 8 + 590, 175 .colorspace = V4L2_COLORSPACE_JPEG, 176 .priv = 0}, 177 }; 178 179 static const struct v4l2_pix_format broken_vga_mode[] = { 180 {320, 232, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 181 .bytesperline = 320, 182 .sizeimage = 320 * 232 * 4 / 8 + 590, 183 .colorspace = V4L2_COLORSPACE_JPEG, 184 .priv = 1}, 185 {640, 472, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 186 .bytesperline = 640, 187 .sizeimage = 640 * 472 * 3 / 8 + 590, 188 .colorspace = V4L2_COLORSPACE_JPEG, 189 .priv = 0}, 190 }; 191 192 static const struct v4l2_pix_format sif_mode[] = { 193 {176, 144, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 194 .bytesperline = 176, 195 .sizeimage = 176 * 144 * 3 / 8 + 590, 196 .colorspace = V4L2_COLORSPACE_JPEG, 197 .priv = 1}, 198 {352, 288, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 199 .bytesperline = 352, 200 .sizeimage = 352 * 288 * 3 / 8 + 590, 201 .colorspace = V4L2_COLORSPACE_JPEG, 202 .priv = 0}, 203 }; 204 205 /* usb exchanges */ 206 struct usb_action { 207 u8 req; 208 u8 val; 209 u16 idx; 210 }; 211 212 static const struct usb_action adcm2700_Initial[] = { 213 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 214 {0xa0, 0x04, ZC3XX_R002_CLOCKSELECT}, /* 00,02,04,cc */ 215 {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 216 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 217 {0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,d3,cc */ 218 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 219 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 220 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 221 {0xa0, 0xd8, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d8,cc */ 222 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 223 {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 224 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 225 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 226 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 227 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 228 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 229 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 230 {0xa0, 0xde, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,de,cc */ 231 {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */ 232 {0xbb, 0x00, 0x0400}, /* 04,00,00,bb */ 233 {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 234 {0xbb, 0x0f, 0x140f}, /* 14,0f,0f,bb */ 235 {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */ 236 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 237 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 238 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 239 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 240 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 241 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 242 {0xa0, 0x58, ZC3XX_R116_RGAIN}, /* 01,16,58,cc */ 243 {0xa0, 0x5a, ZC3XX_R118_BGAIN}, /* 01,18,5a,cc */ 244 {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 245 {0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,d3,cc */ 246 {0xbb, 0x00, 0x0408}, /* 04,00,08,bb */ 247 {0xdd, 0x00, 0x0200}, /* 00,02,00,dd */ 248 {0xbb, 0x00, 0x0400}, /* 04,00,00,bb */ 249 {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 250 {0xbb, 0x0f, 0x140f}, /* 14,0f,0f,bb */ 251 {0xbb, 0xe0, 0x0c2e}, /* 0c,e0,2e,bb */ 252 {0xbb, 0x01, 0x2000}, /* 20,01,00,bb */ 253 {0xbb, 0x96, 0x2400}, /* 24,96,00,bb */ 254 {0xbb, 0x06, 0x1006}, /* 10,06,06,bb */ 255 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 256 {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 257 {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 258 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 259 {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 260 {0xbb, 0x5f, 0x2090}, /* 20,5f,90,bb */ 261 {0xbb, 0x01, 0x8000}, /* 80,01,00,bb */ 262 {0xbb, 0x09, 0x8400}, /* 84,09,00,bb */ 263 {0xbb, 0x86, 0x0002}, /* 00,86,02,bb */ 264 {0xbb, 0xe6, 0x0401}, /* 04,e6,01,bb */ 265 {0xbb, 0x86, 0x0802}, /* 08,86,02,bb */ 266 {0xbb, 0xe6, 0x0c01}, /* 0c,e6,01,bb */ 267 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 268 {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 269 {0xaa, 0xfe, 0x0000}, /* 00,fe,00,aa */ 270 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 271 {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 272 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 273 {0xaa, 0xfe, 0x0020}, /* 00,fe,20,aa */ 274 /*mswin+*/ 275 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, 276 {0xaa, 0xfe, 0x0002}, 277 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 278 {0xaa, 0xb4, 0xcd37}, 279 {0xaa, 0xa4, 0x0004}, 280 {0xaa, 0xa8, 0x0007}, 281 {0xaa, 0xac, 0x0004}, 282 /*mswin-*/ 283 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 284 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 285 {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 286 {0xaa, 0xfe, 0x0000}, /* 00,fe,00,aa */ 287 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 288 {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 289 {0xbb, 0x04, 0x0400}, /* 04,04,00,bb */ 290 {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */ 291 {0xbb, 0x01, 0x0400}, /* 04,01,00,bb */ 292 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 293 {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 294 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 295 {0xbb, 0x41, 0x2803}, /* 28,41,03,bb */ 296 {0xbb, 0x40, 0x2c03}, /* 2c,40,03,bb */ 297 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 298 {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */ 299 {} 300 }; 301 static const struct usb_action adcm2700_InitialScale[] = { 302 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 303 {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */ 304 {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 305 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 306 {0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,d3,cc */ 307 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 308 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 309 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 310 {0xa0, 0xd0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d0,cc */ 311 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 312 {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 313 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 314 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 315 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 316 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 317 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 318 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 319 {0xa0, 0xd8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,d8,cc */ 320 {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */ 321 {0xbb, 0x00, 0x0400}, /* 04,00,00,bb */ 322 {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 323 {0xbb, 0x0f, 0x140f}, /* 14,0f,0f,bb */ 324 {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */ 325 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 326 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 327 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 328 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 329 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 330 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 331 {0xa0, 0x58, ZC3XX_R116_RGAIN}, /* 01,16,58,cc */ 332 {0xa0, 0x5a, ZC3XX_R118_BGAIN}, /* 01,18,5a,cc */ 333 {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 334 {0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,d3,cc */ 335 {0xbb, 0x00, 0x0408}, /* 04,00,08,bb */ 336 {0xdd, 0x00, 0x0200}, /* 00,02,00,dd */ 337 {0xbb, 0x00, 0x0400}, /* 04,00,00,bb */ 338 {0xdd, 0x00, 0x0050}, /* 00,00,50,dd */ 339 {0xbb, 0x0f, 0x140f}, /* 14,0f,0f,bb */ 340 {0xbb, 0xe0, 0x0c2e}, /* 0c,e0,2e,bb */ 341 {0xbb, 0x01, 0x2000}, /* 20,01,00,bb */ 342 {0xbb, 0x96, 0x2400}, /* 24,96,00,bb */ 343 {0xbb, 0x06, 0x1006}, /* 10,06,06,bb */ 344 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 345 {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 346 {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 347 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 348 {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 349 {0xbb, 0x5f, 0x2090}, /* 20,5f,90,bb */ 350 {0xbb, 0x01, 0x8000}, /* 80,01,00,bb */ 351 {0xbb, 0x09, 0x8400}, /* 84,09,00,bb */ 352 {0xbb, 0x86, 0x0002}, /* 00,88,02,bb */ 353 {0xbb, 0xe6, 0x0401}, /* 04,e6,01,bb */ 354 {0xbb, 0x86, 0x0802}, /* 08,88,02,bb */ 355 {0xbb, 0xe6, 0x0c01}, /* 0c,e6,01,bb */ 356 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 357 {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 358 {0xaa, 0xfe, 0x0000}, /* 00,fe,00,aa */ 359 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 360 {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 361 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 362 {0xaa, 0xfe, 0x0020}, /* 00,fe,20,aa */ 363 /*******/ 364 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 365 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 366 {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 367 {0xaa, 0xfe, 0x0000}, /* 00,fe,00,aa */ 368 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 369 {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 370 {0xbb, 0x04, 0x0400}, /* 04,04,00,bb */ 371 {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */ 372 {0xbb, 0x01, 0x0400}, /* 04,01,00,bb */ 373 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 374 {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 375 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 376 {0xbb, 0x41, 0x2803}, /* 28,41,03,bb */ 377 {0xbb, 0x40, 0x2c03}, /* 2c,40,03,bb */ 378 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 379 {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */ 380 {} 381 }; 382 static const struct usb_action adcm2700_50HZ[] = { 383 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 384 {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 385 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 386 {0xbb, 0x05, 0x8400}, /* 84,05,00,bb */ 387 {0xbb, 0xd0, 0xb007}, /* b0,d0,07,bb */ 388 {0xbb, 0xa0, 0xb80f}, /* b8,a0,0f,bb */ 389 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 390 {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */ 391 {0xaa, 0x26, 0x00d0}, /* 00,26,d0,aa */ 392 {0xaa, 0x28, 0x0002}, /* 00,28,02,aa */ 393 {} 394 }; 395 static const struct usb_action adcm2700_60HZ[] = { 396 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 397 {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 398 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 399 {0xbb, 0x07, 0x8400}, /* 84,07,00,bb */ 400 {0xbb, 0x82, 0xb006}, /* b0,82,06,bb */ 401 {0xbb, 0x04, 0xb80d}, /* b8,04,0d,bb */ 402 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 403 {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */ 404 {0xaa, 0x26, 0x0057}, /* 00,26,57,aa */ 405 {0xaa, 0x28, 0x0002}, /* 00,28,02,aa */ 406 {} 407 }; 408 static const struct usb_action adcm2700_NoFliker[] = { 409 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 410 {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 411 {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 412 {0xbb, 0x07, 0x8400}, /* 84,07,00,bb */ 413 {0xbb, 0x05, 0xb000}, /* b0,05,00,bb */ 414 {0xbb, 0xa0, 0xb801}, /* b8,a0,01,bb */ 415 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 416 {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */ 417 {} 418 }; 419 static const struct usb_action cs2102_InitialScale[] = { /* 320x240 */ 420 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 421 {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 422 {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT}, 423 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 424 {0xa0, 0x20, ZC3XX_R080_HBLANKHIGH}, 425 {0xa0, 0x21, ZC3XX_R081_HBLANKLOW}, 426 {0xa0, 0x30, ZC3XX_R083_RGAINADDR}, 427 {0xa0, 0x31, ZC3XX_R084_GGAINADDR}, 428 {0xa0, 0x32, ZC3XX_R085_BGAINADDR}, 429 {0xa0, 0x23, ZC3XX_R086_EXPTIMEHIGH}, 430 {0xa0, 0x24, ZC3XX_R087_EXPTIMEMID}, 431 {0xa0, 0x25, ZC3XX_R088_EXPTIMELOW}, 432 {0xa0, 0xb3, ZC3XX_R08B_I2CDEVICEADDR}, 433 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 434 {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 435 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 436 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 437 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 438 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 439 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 440 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 441 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 442 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 443 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 444 {0xaa, 0x02, 0x0008}, 445 {0xaa, 0x03, 0x0000}, 446 {0xaa, 0x11, 0x0000}, 447 {0xaa, 0x12, 0x0089}, 448 {0xaa, 0x13, 0x0000}, 449 {0xaa, 0x14, 0x00e9}, 450 {0xaa, 0x20, 0x0000}, 451 {0xaa, 0x22, 0x0000}, 452 {0xaa, 0x0b, 0x0004}, 453 {0xaa, 0x30, 0x0030}, 454 {0xaa, 0x31, 0x0030}, 455 {0xaa, 0x32, 0x0030}, 456 {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 457 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 458 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 459 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 460 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 461 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 462 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 463 {0xa0, 0x10, 0x01ae}, 464 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 465 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 466 {0xa0, 0x68, ZC3XX_R18D_YTARGET}, 467 {0xa0, 0x00, 0x01ad}, 468 {} 469 }; 470 471 static const struct usb_action cs2102_Initial[] = { /* 640x480 */ 472 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 473 {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 474 {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT}, 475 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 476 {0xa0, 0x20, ZC3XX_R080_HBLANKHIGH}, 477 {0xa0, 0x21, ZC3XX_R081_HBLANKLOW}, 478 {0xa0, 0x30, ZC3XX_R083_RGAINADDR}, 479 {0xa0, 0x31, ZC3XX_R084_GGAINADDR}, 480 {0xa0, 0x32, ZC3XX_R085_BGAINADDR}, 481 {0xa0, 0x23, ZC3XX_R086_EXPTIMEHIGH}, 482 {0xa0, 0x24, ZC3XX_R087_EXPTIMEMID}, 483 {0xa0, 0x25, ZC3XX_R088_EXPTIMELOW}, 484 {0xa0, 0xb3, ZC3XX_R08B_I2CDEVICEADDR}, 485 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 486 {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 487 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 488 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 489 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 490 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 491 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 492 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 493 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 494 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 495 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 496 {0xaa, 0x02, 0x0008}, 497 {0xaa, 0x03, 0x0000}, 498 {0xaa, 0x11, 0x0001}, 499 {0xaa, 0x12, 0x0087}, 500 {0xaa, 0x13, 0x0001}, 501 {0xaa, 0x14, 0x00e7}, 502 {0xaa, 0x20, 0x0000}, 503 {0xaa, 0x22, 0x0000}, 504 {0xaa, 0x0b, 0x0004}, 505 {0xaa, 0x30, 0x0030}, 506 {0xaa, 0x31, 0x0030}, 507 {0xaa, 0x32, 0x0030}, 508 {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 509 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 510 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 511 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 512 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 513 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 514 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 515 {0xa0, 0x15, 0x01ae}, 516 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 517 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 518 {0xa0, 0x68, ZC3XX_R18D_YTARGET}, 519 {0xa0, 0x00, 0x01ad}, 520 {} 521 }; 522 static const struct usb_action cs2102_50HZScale[] = { 523 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 524 {0xaa, 0x23, 0x0001}, 525 {0xaa, 0x24, 0x005f}, 526 {0xaa, 0x25, 0x0090}, 527 {0xaa, 0x21, 0x00dd}, 528 {0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH}, 529 {0xa0, 0xbf, ZC3XX_R191_EXPOSURELIMITMID}, 530 {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, 531 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 532 {0xa0, 0x3a, ZC3XX_R196_ANTIFLICKERMID}, 533 {0xa0, 0x98, ZC3XX_R197_ANTIFLICKERLOW}, 534 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 535 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 536 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 537 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 538 {0xa0, 0xdd, ZC3XX_R01D_HSYNC_0}, 539 {0xa0, 0xe4, ZC3XX_R01E_HSYNC_1}, 540 {0xa0, 0xf0, ZC3XX_R01F_HSYNC_2}, 541 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 542 {} 543 }; 544 static const struct usb_action cs2102_50HZ[] = { 545 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 546 {0xaa, 0x23, 0x0000}, 547 {0xaa, 0x24, 0x00af}, 548 {0xaa, 0x25, 0x00c8}, 549 {0xaa, 0x21, 0x0068}, 550 {0xa0, 0x01, ZC3XX_R190_EXPOSURELIMITHIGH}, 551 {0xa0, 0x5f, ZC3XX_R191_EXPOSURELIMITMID}, 552 {0xa0, 0x90, ZC3XX_R192_EXPOSURELIMITLOW}, 553 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 554 {0xa0, 0x1d, ZC3XX_R196_ANTIFLICKERMID}, 555 {0xa0, 0x4c, ZC3XX_R197_ANTIFLICKERLOW}, 556 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 557 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 558 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 559 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 560 {0xa0, 0x68, ZC3XX_R01D_HSYNC_0}, 561 {0xa0, 0xe3, ZC3XX_R01E_HSYNC_1}, 562 {0xa0, 0xf0, ZC3XX_R01F_HSYNC_2}, 563 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 564 {} 565 }; 566 static const struct usb_action cs2102_60HZScale[] = { 567 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 568 {0xaa, 0x23, 0x0001}, 569 {0xaa, 0x24, 0x0055}, 570 {0xaa, 0x25, 0x00cc}, 571 {0xaa, 0x21, 0x003f}, 572 {0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH}, 573 {0xa0, 0xab, ZC3XX_R191_EXPOSURELIMITMID}, 574 {0xa0, 0x98, ZC3XX_R192_EXPOSURELIMITLOW}, 575 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 576 {0xa0, 0x30, ZC3XX_R196_ANTIFLICKERMID}, 577 {0xa0, 0xd4, ZC3XX_R197_ANTIFLICKERLOW}, 578 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 579 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 580 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 581 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 582 {0xa0, 0x39, ZC3XX_R01D_HSYNC_0}, 583 {0xa0, 0x70, ZC3XX_R01E_HSYNC_1}, 584 {0xa0, 0xb0, ZC3XX_R01F_HSYNC_2}, 585 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 586 {} 587 }; 588 static const struct usb_action cs2102_60HZ[] = { 589 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 590 {0xaa, 0x23, 0x0000}, 591 {0xaa, 0x24, 0x00aa}, 592 {0xaa, 0x25, 0x00e6}, 593 {0xaa, 0x21, 0x003f}, 594 {0xa0, 0x01, ZC3XX_R190_EXPOSURELIMITHIGH}, 595 {0xa0, 0x55, ZC3XX_R191_EXPOSURELIMITMID}, 596 {0xa0, 0xcc, ZC3XX_R192_EXPOSURELIMITLOW}, 597 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 598 {0xa0, 0x18, ZC3XX_R196_ANTIFLICKERMID}, 599 {0xa0, 0x6a, ZC3XX_R197_ANTIFLICKERLOW}, 600 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 601 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 602 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 603 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 604 {0xa0, 0x3f, ZC3XX_R01D_HSYNC_0}, 605 {0xa0, 0xa5, ZC3XX_R01E_HSYNC_1}, 606 {0xa0, 0xf0, ZC3XX_R01F_HSYNC_2}, 607 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 608 {} 609 }; 610 static const struct usb_action cs2102_NoFlikerScale[] = { 611 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 612 {0xaa, 0x23, 0x0001}, 613 {0xaa, 0x24, 0x005f}, 614 {0xaa, 0x25, 0x0000}, 615 {0xaa, 0x21, 0x0001}, 616 {0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH}, 617 {0xa0, 0xbf, ZC3XX_R191_EXPOSURELIMITMID}, 618 {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, 619 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 620 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 621 {0xa0, 0x80, ZC3XX_R197_ANTIFLICKERLOW}, 622 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 623 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 624 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 625 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 626 {0xa0, 0x01, ZC3XX_R01D_HSYNC_0}, 627 {0xa0, 0x40, ZC3XX_R01E_HSYNC_1}, 628 {0xa0, 0xa0, ZC3XX_R01F_HSYNC_2}, 629 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 630 {} 631 }; 632 static const struct usb_action cs2102_NoFliker[] = { 633 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 634 {0xaa, 0x23, 0x0000}, 635 {0xaa, 0x24, 0x00af}, 636 {0xaa, 0x25, 0x0080}, 637 {0xaa, 0x21, 0x0001}, 638 {0xa0, 0x01, ZC3XX_R190_EXPOSURELIMITHIGH}, 639 {0xa0, 0x5f, ZC3XX_R191_EXPOSURELIMITMID}, 640 {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW}, 641 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 642 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 643 {0xa0, 0x80, ZC3XX_R197_ANTIFLICKERLOW}, 644 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 645 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 646 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 647 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 648 {0xa0, 0x01, ZC3XX_R01D_HSYNC_0}, 649 {0xa0, 0x40, ZC3XX_R01E_HSYNC_1}, 650 {0xa0, 0xa0, ZC3XX_R01F_HSYNC_2}, 651 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 652 {} 653 }; 654 655 /* CS2102_KOCOM */ 656 static const struct usb_action cs2102K_InitialScale[] = { 657 {0xa0, 0x11, ZC3XX_R002_CLOCKSELECT}, 658 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 659 {0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT}, 660 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 661 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 662 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 663 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 664 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 665 {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 666 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 667 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 668 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 669 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 670 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 671 {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 672 {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 673 {0xa0, 0x55, ZC3XX_R08B_I2CDEVICEADDR}, 674 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 675 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 676 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 677 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 678 {0xa0, 0x0a, ZC3XX_R092_I2CADDRESSSELECT}, 679 {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 680 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 681 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 682 {0xa0, 0x0b, ZC3XX_R092_I2CADDRESSSELECT}, 683 {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 684 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 685 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 686 {0xa0, 0x0c, ZC3XX_R092_I2CADDRESSSELECT}, 687 {0xa0, 0x7c, ZC3XX_R093_I2CSETVALUE}, 688 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 689 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 690 {0xa0, 0x0d, ZC3XX_R092_I2CADDRESSSELECT}, 691 {0xa0, 0xa3, ZC3XX_R093_I2CSETVALUE}, 692 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 693 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 694 {0xa0, 0x03, ZC3XX_R092_I2CADDRESSSELECT}, 695 {0xa0, 0xfb, ZC3XX_R093_I2CSETVALUE}, 696 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 697 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 698 {0xa0, 0x05, ZC3XX_R092_I2CADDRESSSELECT}, 699 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 700 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 701 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 702 {0xa0, 0x06, ZC3XX_R092_I2CADDRESSSELECT}, 703 {0xa0, 0x03, ZC3XX_R093_I2CSETVALUE}, 704 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 705 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 706 {0xa0, 0x09, ZC3XX_R092_I2CADDRESSSELECT}, 707 {0xa0, 0x08, ZC3XX_R093_I2CSETVALUE}, 708 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 709 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 710 {0xa0, 0x0e, ZC3XX_R092_I2CADDRESSSELECT}, 711 {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 712 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 713 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 714 {0xa0, 0x0f, ZC3XX_R092_I2CADDRESSSELECT}, 715 {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 716 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 717 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 718 {0xa0, 0x10, ZC3XX_R092_I2CADDRESSSELECT}, 719 {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 720 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 721 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 722 {0xa0, 0x11, ZC3XX_R092_I2CADDRESSSELECT}, 723 {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 724 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 725 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 726 {0xa0, 0x12, ZC3XX_R092_I2CADDRESSSELECT}, 727 {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 728 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 729 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 730 {0xa0, 0x15, ZC3XX_R092_I2CADDRESSSELECT}, 731 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 732 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 733 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 734 {0xa0, 0x16, ZC3XX_R092_I2CADDRESSSELECT}, 735 {0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE}, 736 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 737 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 738 {0xa0, 0x17, ZC3XX_R092_I2CADDRESSSELECT}, 739 {0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE}, 740 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 741 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 742 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 743 {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 744 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 745 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 746 {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, 747 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 748 {0xa0, 0x78, ZC3XX_R18D_YTARGET}, 749 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 750 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 751 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 752 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 753 {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, 754 {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, 755 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 756 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 757 {0xa0, 0x00, 0x01ad}, 758 {0xa0, 0x01, 0x01b1}, 759 {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 760 {0xa0, 0x60, ZC3XX_R116_RGAIN}, 761 {0xa0, 0x40, ZC3XX_R117_GGAIN}, 762 {0xa0, 0x4c, ZC3XX_R118_BGAIN}, 763 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 764 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 765 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 766 {0xa0, 0x13, ZC3XX_R120_GAMMA00}, /* gamma 4 */ 767 {0xa0, 0x38, ZC3XX_R121_GAMMA01}, 768 {0xa0, 0x59, ZC3XX_R122_GAMMA02}, 769 {0xa0, 0x79, ZC3XX_R123_GAMMA03}, 770 {0xa0, 0x92, ZC3XX_R124_GAMMA04}, 771 {0xa0, 0xa7, ZC3XX_R125_GAMMA05}, 772 {0xa0, 0xb9, ZC3XX_R126_GAMMA06}, 773 {0xa0, 0xc8, ZC3XX_R127_GAMMA07}, 774 {0xa0, 0xd4, ZC3XX_R128_GAMMA08}, 775 {0xa0, 0xdf, ZC3XX_R129_GAMMA09}, 776 {0xa0, 0xe7, ZC3XX_R12A_GAMMA0A}, 777 {0xa0, 0xee, ZC3XX_R12B_GAMMA0B}, 778 {0xa0, 0xf4, ZC3XX_R12C_GAMMA0C}, 779 {0xa0, 0xf9, ZC3XX_R12D_GAMMA0D}, 780 {0xa0, 0xfc, ZC3XX_R12E_GAMMA0E}, 781 {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, 782 {0xa0, 0x26, ZC3XX_R130_GAMMA10}, 783 {0xa0, 0x22, ZC3XX_R131_GAMMA11}, 784 {0xa0, 0x20, ZC3XX_R132_GAMMA12}, 785 {0xa0, 0x1c, ZC3XX_R133_GAMMA13}, 786 {0xa0, 0x16, ZC3XX_R134_GAMMA14}, 787 {0xa0, 0x13, ZC3XX_R135_GAMMA15}, 788 {0xa0, 0x10, ZC3XX_R136_GAMMA16}, 789 {0xa0, 0x0d, ZC3XX_R137_GAMMA17}, 790 {0xa0, 0x0b, ZC3XX_R138_GAMMA18}, 791 {0xa0, 0x09, ZC3XX_R139_GAMMA19}, 792 {0xa0, 0x07, ZC3XX_R13A_GAMMA1A}, 793 {0xa0, 0x06, ZC3XX_R13B_GAMMA1B}, 794 {0xa0, 0x05, ZC3XX_R13C_GAMMA1C}, 795 {0xa0, 0x04, ZC3XX_R13D_GAMMA1D}, 796 {0xa0, 0x03, ZC3XX_R13E_GAMMA1E}, 797 {0xa0, 0x02, ZC3XX_R13F_GAMMA1F}, 798 {0xa0, 0x58, ZC3XX_R10A_RGB00}, /* matrix */ 799 {0xa0, 0xf4, ZC3XX_R10B_RGB01}, 800 {0xa0, 0xf4, ZC3XX_R10C_RGB02}, 801 {0xa0, 0xf4, ZC3XX_R10D_RGB10}, 802 {0xa0, 0x58, ZC3XX_R10E_RGB11}, 803 {0xa0, 0xf4, ZC3XX_R10F_RGB12}, 804 {0xa0, 0xf4, ZC3XX_R110_RGB20}, 805 {0xa0, 0xf4, ZC3XX_R111_RGB21}, 806 {0xa0, 0x58, ZC3XX_R112_RGB22}, 807 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 808 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 809 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 810 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 811 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 812 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 813 {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 814 {0xa0, 0x22, ZC3XX_R093_I2CSETVALUE}, 815 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 816 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 817 {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 818 {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 819 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 820 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 821 {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 822 {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 823 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 824 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 825 {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 826 {0xa0, 0x22, ZC3XX_R093_I2CSETVALUE}, 827 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 828 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 829 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 830 {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 831 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 832 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 833 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, 834 {0xa0, 0x22, ZC3XX_R0A4_EXPOSURETIMELOW}, 835 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 836 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 837 {0xa0, 0xee, ZC3XX_R192_EXPOSURELIMITLOW}, 838 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 839 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 840 {0xa0, 0x3a, ZC3XX_R197_ANTIFLICKERLOW}, 841 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 842 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 843 {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, 844 {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, 845 {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, 846 {0xa0, 0x0f, ZC3XX_R01E_HSYNC_1}, 847 {0xa0, 0x19, ZC3XX_R01F_HSYNC_2}, 848 {0xa0, 0x1f, ZC3XX_R020_HSYNC_3}, 849 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 850 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 851 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 852 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 853 {0xa0, 0x60, ZC3XX_R116_RGAIN}, 854 {0xa0, 0x40, ZC3XX_R117_GGAIN}, 855 {0xa0, 0x4c, ZC3XX_R118_BGAIN}, 856 {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 857 {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 858 {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 859 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 860 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 861 {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 862 {0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE}, 863 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 864 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 865 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 866 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 867 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 868 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 869 {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 870 {0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE}, 871 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 872 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 873 {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 874 {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 875 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 876 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 877 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 878 {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 879 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 880 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 881 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 882 {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 883 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 884 {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 885 {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 886 {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 887 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 888 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 889 {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 890 {0xa0, 0x96, ZC3XX_R093_I2CSETVALUE}, 891 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 892 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 893 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 894 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 895 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 896 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 897 {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 898 {0xa0, 0x96, ZC3XX_R093_I2CSETVALUE}, 899 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 900 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 901 {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 902 {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 903 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 904 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 905 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 906 {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 907 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 908 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 909 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 910 {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 911 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 912 {} 913 }; 914 915 static const struct usb_action cs2102K_Initial[] = { 916 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 917 {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 918 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 919 {0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT}, 920 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 921 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 922 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 923 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 924 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 925 {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 926 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 927 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 928 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 929 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 930 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 931 {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 932 {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 933 /*fixme: next sequence = i2c exchanges*/ 934 {0xa0, 0x55, ZC3XX_R08B_I2CDEVICEADDR}, 935 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 936 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 937 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 938 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 939 {0xa0, 0x0a, ZC3XX_R092_I2CADDRESSSELECT}, 940 {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 941 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 942 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 943 {0xa0, 0x0b, ZC3XX_R092_I2CADDRESSSELECT}, 944 {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 945 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 946 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 947 {0xa0, 0x0c, ZC3XX_R092_I2CADDRESSSELECT}, 948 {0xa0, 0x7b, ZC3XX_R093_I2CSETVALUE}, 949 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 950 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 951 {0xa0, 0x0d, ZC3XX_R092_I2CADDRESSSELECT}, 952 {0xa0, 0xa3, ZC3XX_R093_I2CSETVALUE}, 953 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 954 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 955 {0xa0, 0x03, ZC3XX_R092_I2CADDRESSSELECT}, 956 {0xa0, 0xfb, ZC3XX_R093_I2CSETVALUE}, 957 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 958 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 959 {0xa0, 0x05, ZC3XX_R092_I2CADDRESSSELECT}, 960 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 961 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 962 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 963 {0xa0, 0x06, ZC3XX_R092_I2CADDRESSSELECT}, 964 {0xa0, 0x03, ZC3XX_R093_I2CSETVALUE}, 965 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 966 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 967 {0xa0, 0x09, ZC3XX_R092_I2CADDRESSSELECT}, 968 {0xa0, 0x08, ZC3XX_R093_I2CSETVALUE}, 969 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 970 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 971 {0xa0, 0x0e, ZC3XX_R092_I2CADDRESSSELECT}, 972 {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 973 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 974 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 975 {0xa0, 0x0f, ZC3XX_R092_I2CADDRESSSELECT}, 976 {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 977 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 978 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 979 {0xa0, 0x10, ZC3XX_R092_I2CADDRESSSELECT}, 980 {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 981 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 982 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 983 {0xa0, 0x11, ZC3XX_R092_I2CADDRESSSELECT}, 984 {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 985 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 986 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 987 {0xa0, 0x12, ZC3XX_R092_I2CADDRESSSELECT}, 988 {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 989 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 990 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 991 {0xa0, 0x15, ZC3XX_R092_I2CADDRESSSELECT}, 992 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 993 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 994 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 995 {0xa0, 0x16, ZC3XX_R092_I2CADDRESSSELECT}, 996 {0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE}, 997 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 998 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 999 {0xa0, 0x17, ZC3XX_R092_I2CADDRESSSELECT}, 1000 {0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE}, 1001 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1002 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1003 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 1004 {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 1005 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1006 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1007 {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION}, 1008 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 1009 {0xa0, 0x78, ZC3XX_R18D_YTARGET}, 1010 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 1011 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 1012 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 1013 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 1014 {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, 1015 {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, 1016 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 1017 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 1018 {0xa0, 0x00, 0x01ad}, 1019 {0xa0, 0x01, 0x01b1}, 1020 {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 1021 {0xa0, 0x60, ZC3XX_R116_RGAIN}, 1022 {0xa0, 0x40, ZC3XX_R117_GGAIN}, 1023 {0xa0, 0x4c, ZC3XX_R118_BGAIN}, 1024 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 1025 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 1026 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 1027 {0xa0, 0x13, ZC3XX_R120_GAMMA00}, /* gamma 4 */ 1028 {0xa0, 0x38, ZC3XX_R121_GAMMA01}, 1029 {0xa0, 0x59, ZC3XX_R122_GAMMA02}, 1030 {0xa0, 0x79, ZC3XX_R123_GAMMA03}, 1031 {0xa0, 0x92, ZC3XX_R124_GAMMA04}, 1032 {0xa0, 0xa7, ZC3XX_R125_GAMMA05}, 1033 {0xa0, 0xb9, ZC3XX_R126_GAMMA06}, 1034 {0xa0, 0xc8, ZC3XX_R127_GAMMA07}, 1035 {0xa0, 0xd4, ZC3XX_R128_GAMMA08}, 1036 {0xa0, 0xdf, ZC3XX_R129_GAMMA09}, 1037 {0xa0, 0xe7, ZC3XX_R12A_GAMMA0A}, 1038 {0xa0, 0xee, ZC3XX_R12B_GAMMA0B}, 1039 {0xa0, 0xf4, ZC3XX_R12C_GAMMA0C}, 1040 {0xa0, 0xf9, ZC3XX_R12D_GAMMA0D}, 1041 {0xa0, 0xfc, ZC3XX_R12E_GAMMA0E}, 1042 {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, 1043 {0xa0, 0x26, ZC3XX_R130_GAMMA10}, 1044 {0xa0, 0x22, ZC3XX_R131_GAMMA11}, 1045 {0xa0, 0x20, ZC3XX_R132_GAMMA12}, 1046 {0xa0, 0x1c, ZC3XX_R133_GAMMA13}, 1047 {0xa0, 0x16, ZC3XX_R134_GAMMA14}, 1048 {0xa0, 0x13, ZC3XX_R135_GAMMA15}, 1049 {0xa0, 0x10, ZC3XX_R136_GAMMA16}, 1050 {0xa0, 0x0d, ZC3XX_R137_GAMMA17}, 1051 {0xa0, 0x0b, ZC3XX_R138_GAMMA18}, 1052 {0xa0, 0x09, ZC3XX_R139_GAMMA19}, 1053 {0xa0, 0x07, ZC3XX_R13A_GAMMA1A}, 1054 {0xa0, 0x06, ZC3XX_R13B_GAMMA1B}, 1055 {0xa0, 0x05, ZC3XX_R13C_GAMMA1C}, 1056 {0xa0, 0x04, ZC3XX_R13D_GAMMA1D}, 1057 {0xa0, 0x03, ZC3XX_R13E_GAMMA1E}, 1058 {0xa0, 0x02, ZC3XX_R13F_GAMMA1F}, 1059 {0xa0, 0x58, ZC3XX_R10A_RGB00}, /* matrix */ 1060 {0xa0, 0xf4, ZC3XX_R10B_RGB01}, 1061 {0xa0, 0xf4, ZC3XX_R10C_RGB02}, 1062 {0xa0, 0xf4, ZC3XX_R10D_RGB10}, 1063 {0xa0, 0x58, ZC3XX_R10E_RGB11}, 1064 {0xa0, 0xf4, ZC3XX_R10F_RGB12}, 1065 {0xa0, 0xf4, ZC3XX_R110_RGB20}, 1066 {0xa0, 0xf4, ZC3XX_R111_RGB21}, 1067 {0xa0, 0x58, ZC3XX_R112_RGB22}, 1068 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 1069 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 1070 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 1071 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 1072 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1073 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1074 {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 1075 {0xa0, 0x22, ZC3XX_R093_I2CSETVALUE}, 1076 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1077 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1078 {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 1079 {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 1080 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1081 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1082 {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 1083 {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 1084 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1085 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1086 {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 1087 {0xa0, 0x22, ZC3XX_R093_I2CSETVALUE}, 1088 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1089 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1090 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 1091 {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 1092 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1093 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1094 {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, 1095 {0xa0, 0x22, ZC3XX_R0A4_EXPOSURETIMELOW}, 1096 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 1097 {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 1098 {0xa0, 0xee, ZC3XX_R192_EXPOSURELIMITLOW}, 1099 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 1100 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 1101 {0xa0, 0x3a, ZC3XX_R197_ANTIFLICKERLOW}, 1102 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 1103 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 1104 {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, 1105 {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, 1106 {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, 1107 {0xa0, 0x0f, ZC3XX_R01E_HSYNC_1}, 1108 {0xa0, 0x19, ZC3XX_R01F_HSYNC_2}, 1109 {0xa0, 0x1f, ZC3XX_R020_HSYNC_3}, 1110 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 1111 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 1112 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 1113 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 1114 {0xa0, 0x60, ZC3XX_R116_RGAIN}, 1115 {0xa0, 0x40, ZC3XX_R117_GGAIN}, 1116 {0xa0, 0x4c, ZC3XX_R118_BGAIN}, 1117 {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 1118 {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 1119 {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 1120 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1121 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1122 {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 1123 {0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE}, 1124 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1125 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1126 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 1127 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 1128 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1129 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1130 {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 1131 {0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE}, 1132 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1133 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1134 {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 1135 {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 1136 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1137 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1138 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 1139 {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 1140 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1141 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1142 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 1143 {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 1144 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 1145 {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 1146 {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 1147 {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 1148 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1149 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1150 {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 1151 {0xa0, 0x96, ZC3XX_R093_I2CSETVALUE}, 1152 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1153 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1154 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 1155 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 1156 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1157 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1158 {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 1159 {0xa0, 0x96, ZC3XX_R093_I2CSETVALUE}, 1160 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1161 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1162 {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 1163 {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 1164 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1165 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1166 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 1167 {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 1168 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1169 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1170 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 1171 {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 1172 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 1173 /*fixme:what does the next sequence?*/ 1174 {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 1175 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 1176 {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 1177 {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 1178 {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 1179 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1180 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1181 {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 1182 {0xa0, 0xd0, ZC3XX_R093_I2CSETVALUE}, 1183 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1184 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1185 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 1186 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 1187 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1188 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1189 {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 1190 {0xa0, 0xd0, ZC3XX_R093_I2CSETVALUE}, 1191 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1192 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1193 {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 1194 {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 1195 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1196 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1197 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 1198 {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 1199 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1200 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1201 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 1202 {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING}, 1203 {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 1204 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 1205 {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 1206 {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 1207 {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 1208 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1209 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1210 {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 1211 {0xa0, 0x0a, ZC3XX_R093_I2CSETVALUE}, 1212 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1213 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1214 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 1215 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 1216 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1217 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1218 {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 1219 {0xa0, 0x0a, ZC3XX_R093_I2CSETVALUE}, 1220 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1221 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1222 {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 1223 {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 1224 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1225 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1226 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 1227 {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 1228 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1229 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1230 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 1231 {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 1232 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 1233 {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 1234 {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 1235 {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 1236 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1237 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1238 {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 1239 {0xa0, 0x44, ZC3XX_R093_I2CSETVALUE}, 1240 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1241 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1242 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 1243 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 1244 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1245 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1246 {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 1247 {0xa0, 0x44, ZC3XX_R093_I2CSETVALUE}, 1248 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1249 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1250 {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 1251 {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 1252 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1253 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1254 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 1255 {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 1256 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1257 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1258 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 1259 {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 1260 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 1261 {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 1262 {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 1263 {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 1264 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1265 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1266 {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 1267 {0xa0, 0x7e, ZC3XX_R093_I2CSETVALUE}, 1268 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1269 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1270 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 1271 {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 1272 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1273 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1274 {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 1275 {0xa0, 0x7e, ZC3XX_R093_I2CSETVALUE}, 1276 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1277 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1278 {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 1279 {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 1280 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1281 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1282 {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 1283 {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 1284 {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 1285 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 1286 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 1287 {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 1288 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 1289 {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 1290 {} 1291 }; 1292 1293 static const struct usb_action gc0305_Initial[] = { /* 640x480 */ 1294 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 1295 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 1296 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 1297 {0xa0, 0x04, ZC3XX_R002_CLOCKSELECT}, /* 00,02,04,cc */ 1298 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 1299 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 1300 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 1301 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */ 1302 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 1303 {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 1304 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 1305 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 1306 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 1307 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 1308 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 1309 {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e6,cc */ 1310 {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */ 1311 {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc */ 1312 {0xaa, 0x13, 0x0002}, /* 00,13,02,aa */ 1313 {0xaa, 0x15, 0x0003}, /* 00,15,03,aa */ 1314 {0xaa, 0x01, 0x0000}, /* 00,01,00,aa */ 1315 {0xaa, 0x02, 0x0000}, /* 00,02,00,aa */ 1316 {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa */ 1317 {0xaa, 0x1c, 0x0017}, /* 00,1c,17,aa */ 1318 {0xaa, 0x1d, 0x0080}, /* 00,1d,80,aa */ 1319 {0xaa, 0x1f, 0x0008}, /* 00,1f,08,aa */ 1320 {0xaa, 0x21, 0x0012}, /* 00,21,12,aa */ 1321 {0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,82,cc */ 1322 {0xa0, 0x83, ZC3XX_R087_EXPTIMEMID}, /* 00,87,83,cc */ 1323 {0xa0, 0x84, ZC3XX_R088_EXPTIMELOW}, /* 00,88,84,cc */ 1324 {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */ 1325 {0xaa, 0x0a, 0x0000}, /* 00,0a,00,aa */ 1326 {0xaa, 0x0b, 0x00b0}, /* 00,0b,b0,aa */ 1327 {0xaa, 0x0c, 0x0000}, /* 00,0c,00,aa */ 1328 {0xaa, 0x0d, 0x00b0}, /* 00,0d,b0,aa */ 1329 {0xaa, 0x0e, 0x0000}, /* 00,0e,00,aa */ 1330 {0xaa, 0x0f, 0x00b0}, /* 00,0f,b0,aa */ 1331 {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 1332 {0xaa, 0x11, 0x00b0}, /* 00,11,b0,aa */ 1333 {0xaa, 0x16, 0x0001}, /* 00,16,01,aa */ 1334 {0xaa, 0x17, 0x00e6}, /* 00,17,e6,aa */ 1335 {0xaa, 0x18, 0x0002}, /* 00,18,02,aa */ 1336 {0xaa, 0x19, 0x0086}, /* 00,19,86,aa */ 1337 {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 1338 {0xaa, 0x1b, 0x0020}, /* 00,1b,20,aa */ 1339 {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,b7,cc */ 1340 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 1341 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 1342 {0xa0, 0x76, ZC3XX_R189_AWBSTATUS}, /* 01,89,76,cc */ 1343 {0xa0, 0x09, 0x01ad}, /* 01,ad,09,cc */ 1344 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 1345 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 1346 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 1347 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 1348 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,60,cc */ 1349 {0xa0, 0x85, ZC3XX_R18D_YTARGET}, /* 01,8d,85,cc */ 1350 {0xa0, 0x00, 0x011e}, /* 01,1e,00,cc */ 1351 {0xa0, 0x52, ZC3XX_R116_RGAIN}, /* 01,16,52,cc */ 1352 {0xa0, 0x40, ZC3XX_R117_GGAIN}, /* 01,17,40,cc */ 1353 {0xa0, 0x52, ZC3XX_R118_BGAIN}, /* 01,18,52,cc */ 1354 {0xa0, 0x03, ZC3XX_R113_RGB03}, /* 01,13,03,cc */ 1355 {} 1356 }; 1357 static const struct usb_action gc0305_InitialScale[] = { /* 320x240 */ 1358 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 1359 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 1360 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 1361 {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */ 1362 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 1363 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 1364 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 1365 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */ 1366 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 1367 {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 1368 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 1369 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 1370 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 1371 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 1372 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 1373 {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e8,cc */ 1374 {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */ 1375 {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc */ 1376 {0xaa, 0x13, 0x0000}, /* 00,13,00,aa */ 1377 {0xaa, 0x15, 0x0001}, /* 00,15,01,aa */ 1378 {0xaa, 0x01, 0x0000}, /* 00,01,00,aa */ 1379 {0xaa, 0x02, 0x0000}, /* 00,02,00,aa */ 1380 {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa */ 1381 {0xaa, 0x1c, 0x0017}, /* 00,1c,17,aa */ 1382 {0xaa, 0x1d, 0x0080}, /* 00,1d,80,aa */ 1383 {0xaa, 0x1f, 0x0008}, /* 00,1f,08,aa */ 1384 {0xaa, 0x21, 0x0012}, /* 00,21,12,aa */ 1385 {0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,82,cc */ 1386 {0xa0, 0x83, ZC3XX_R087_EXPTIMEMID}, /* 00,87,83,cc */ 1387 {0xa0, 0x84, ZC3XX_R088_EXPTIMELOW}, /* 00,88,84,cc */ 1388 {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */ 1389 {0xaa, 0x0a, 0x0000}, /* 00,0a,00,aa */ 1390 {0xaa, 0x0b, 0x00b0}, /* 00,0b,b0,aa */ 1391 {0xaa, 0x0c, 0x0000}, /* 00,0c,00,aa */ 1392 {0xaa, 0x0d, 0x00b0}, /* 00,0d,b0,aa */ 1393 {0xaa, 0x0e, 0x0000}, /* 00,0e,00,aa */ 1394 {0xaa, 0x0f, 0x00b0}, /* 00,0f,b0,aa */ 1395 {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 1396 {0xaa, 0x11, 0x00b0}, /* 00,11,b0,aa */ 1397 {0xaa, 0x16, 0x0001}, /* 00,16,01,aa */ 1398 {0xaa, 0x17, 0x00e8}, /* 00,17,e8,aa */ 1399 {0xaa, 0x18, 0x0002}, /* 00,18,02,aa */ 1400 {0xaa, 0x19, 0x0088}, /* 00,19,88,aa */ 1401 {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 1402 {0xaa, 0x1b, 0x0020}, /* 00,1b,20,aa */ 1403 {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,b7,cc */ 1404 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 1405 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 1406 {0xa0, 0x76, ZC3XX_R189_AWBSTATUS}, /* 01,89,76,cc */ 1407 {0xa0, 0x09, 0x01ad}, /* 01,ad,09,cc */ 1408 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 1409 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 1410 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 1411 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 1412 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,60,cc */ 1413 {0xa0, 0x00, 0x011e}, /* 01,1e,00,cc */ 1414 {0xa0, 0x52, ZC3XX_R116_RGAIN}, /* 01,16,52,cc */ 1415 {0xa0, 0x40, ZC3XX_R117_GGAIN}, /* 01,17,40,cc */ 1416 {0xa0, 0x52, ZC3XX_R118_BGAIN}, /* 01,18,52,cc */ 1417 {0xa0, 0x03, ZC3XX_R113_RGB03}, /* 01,13,03,cc */ 1418 {} 1419 }; 1420 static const struct usb_action gc0305_50HZ[] = { 1421 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 1422 {0xaa, 0x83, 0x0002}, /* 00,83,02,aa */ 1423 {0xaa, 0x84, 0x0038}, /* 00,84,38,aa */ /* win: 00,84,ec */ 1424 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 1425 {0xa0, 0x0b, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,0b,cc */ 1426 {0xa0, 0x18, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,18,cc */ 1427 /* win: 01,92,10 */ 1428 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 1429 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 1430 {0xa0, 0x8e, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,8e,cc */ 1431 /* win: 01,97,ec */ 1432 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc */ 1433 {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc */ 1434 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 1435 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 1436 {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc */ 1437 {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc */ 1438 {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc */ 1439 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 1440 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,60,cc */ 1441 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */ 1442 /* {0xa0, 0x85, ZC3XX_R18D_YTARGET}, * 01,8d,85,cc * 1443 * if 640x480 */ 1444 {} 1445 }; 1446 static const struct usb_action gc0305_60HZ[] = { 1447 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 1448 {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */ 1449 {0xaa, 0x84, 0x00ec}, /* 00,84,ec,aa */ 1450 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 1451 {0xa0, 0x0b, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,0b,cc */ 1452 {0xa0, 0x10, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,10,cc */ 1453 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 1454 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 1455 {0xa0, 0xec, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,ec,cc */ 1456 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc */ 1457 {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc */ 1458 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 1459 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 1460 {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc */ 1461 {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc */ 1462 {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc */ 1463 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 1464 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,60,cc */ 1465 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */ 1466 {0xa0, 0x80, ZC3XX_R18D_YTARGET}, /* 01,8d,80,cc */ 1467 {} 1468 }; 1469 1470 static const struct usb_action gc0305_NoFliker[] = { 1471 {0xa0, 0x0c, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0c,cc */ 1472 {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 1473 {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */ 1474 {0xaa, 0x84, 0x0020}, /* 00,84,20,aa */ 1475 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 1476 {0xa0, 0x00, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,00,cc */ 1477 {0xa0, 0x48, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,48,cc */ 1478 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 1479 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 1480 {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 1481 {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc */ 1482 {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc */ 1483 {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc */ 1484 {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc */ 1485 {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc */ 1486 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 1487 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,60,cc */ 1488 {0xa0, 0x03, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,03,cc */ 1489 {0xa0, 0x80, ZC3XX_R18D_YTARGET}, /* 01,8d,80,cc */ 1490 {} 1491 }; 1492 1493 static const struct usb_action hdcs2020b_InitialScale[] = { 1494 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 1495 {0xa0, 0x11, ZC3XX_R002_CLOCKSELECT}, 1496 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* qtable 0x05 */ 1497 {0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT}, 1498 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 1499 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 1500 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 1501 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 1502 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 1503 {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 1504 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 1505 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 1506 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 1507 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 1508 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 1509 {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 1510 {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 1511 {0xaa, 0x1c, 0x0000}, 1512 {0xaa, 0x0a, 0x0001}, 1513 {0xaa, 0x0b, 0x0006}, 1514 {0xaa, 0x0c, 0x007b}, 1515 {0xaa, 0x0d, 0x00a7}, 1516 {0xaa, 0x03, 0x00fb}, 1517 {0xaa, 0x05, 0x0000}, 1518 {0xaa, 0x06, 0x0003}, 1519 {0xaa, 0x09, 0x0008}, 1520 1521 {0xaa, 0x0f, 0x0018}, /* set sensor gain */ 1522 {0xaa, 0x10, 0x0018}, 1523 {0xaa, 0x11, 0x0018}, 1524 {0xaa, 0x12, 0x0018}, 1525 1526 {0xaa, 0x15, 0x004e}, 1527 {0xaa, 0x1c, 0x0004}, 1528 {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, 1529 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 1530 {0xa0, 0x70, ZC3XX_R18D_YTARGET}, 1531 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 1532 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 1533 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 1534 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 1535 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 1536 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 1537 {0xa1, 0x01, 0x0002}, 1538 {0xa1, 0x01, 0x0008}, 1539 {0xa1, 0x01, 0x0180}, 1540 {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 1541 {0xa0, 0x40, ZC3XX_R116_RGAIN}, 1542 {0xa0, 0x40, ZC3XX_R117_GGAIN}, 1543 {0xa0, 0x40, ZC3XX_R118_BGAIN}, 1544 {0xa1, 0x01, 0x0008}, 1545 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 1546 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 1547 {0xa1, 0x01, 0x01c8}, 1548 {0xa1, 0x01, 0x01c9}, 1549 {0xa1, 0x01, 0x01ca}, 1550 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 1551 {0xa0, 0x13, ZC3XX_R120_GAMMA00}, /* gamma 4 */ 1552 {0xa0, 0x38, ZC3XX_R121_GAMMA01}, 1553 {0xa0, 0x59, ZC3XX_R122_GAMMA02}, 1554 {0xa0, 0x79, ZC3XX_R123_GAMMA03}, 1555 {0xa0, 0x92, ZC3XX_R124_GAMMA04}, 1556 {0xa0, 0xa7, ZC3XX_R125_GAMMA05}, 1557 {0xa0, 0xb9, ZC3XX_R126_GAMMA06}, 1558 {0xa0, 0xc8, ZC3XX_R127_GAMMA07}, 1559 {0xa0, 0xd4, ZC3XX_R128_GAMMA08}, 1560 {0xa0, 0xdf, ZC3XX_R129_GAMMA09}, 1561 {0xa0, 0xe7, ZC3XX_R12A_GAMMA0A}, 1562 {0xa0, 0xee, ZC3XX_R12B_GAMMA0B}, 1563 {0xa0, 0xf4, ZC3XX_R12C_GAMMA0C}, 1564 {0xa0, 0xf9, ZC3XX_R12D_GAMMA0D}, 1565 {0xa0, 0xfc, ZC3XX_R12E_GAMMA0E}, 1566 {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, 1567 {0xa0, 0x26, ZC3XX_R130_GAMMA10}, 1568 {0xa0, 0x22, ZC3XX_R131_GAMMA11}, 1569 {0xa0, 0x20, ZC3XX_R132_GAMMA12}, 1570 {0xa0, 0x1c, ZC3XX_R133_GAMMA13}, 1571 {0xa0, 0x16, ZC3XX_R134_GAMMA14}, 1572 {0xa0, 0x13, ZC3XX_R135_GAMMA15}, 1573 {0xa0, 0x10, ZC3XX_R136_GAMMA16}, 1574 {0xa0, 0x0d, ZC3XX_R137_GAMMA17}, 1575 {0xa0, 0x0b, ZC3XX_R138_GAMMA18}, 1576 {0xa0, 0x09, ZC3XX_R139_GAMMA19}, 1577 {0xa0, 0x07, ZC3XX_R13A_GAMMA1A}, 1578 {0xa0, 0x06, ZC3XX_R13B_GAMMA1B}, 1579 {0xa0, 0x05, ZC3XX_R13C_GAMMA1C}, 1580 {0xa0, 0x04, ZC3XX_R13D_GAMMA1D}, 1581 {0xa0, 0x03, ZC3XX_R13E_GAMMA1E}, 1582 {0xa0, 0x02, ZC3XX_R13F_GAMMA1F}, 1583 1584 {0xa0, 0x66, ZC3XX_R10A_RGB00}, /* matrix */ 1585 {0xa0, 0xed, ZC3XX_R10B_RGB01}, 1586 {0xa0, 0xed, ZC3XX_R10C_RGB02}, 1587 {0xa0, 0xed, ZC3XX_R10D_RGB10}, 1588 {0xa0, 0x66, ZC3XX_R10E_RGB11}, 1589 {0xa0, 0xed, ZC3XX_R10F_RGB12}, 1590 {0xa0, 0xed, ZC3XX_R110_RGB20}, 1591 {0xa0, 0xed, ZC3XX_R111_RGB21}, 1592 {0xa0, 0x66, ZC3XX_R112_RGB22}, 1593 1594 {0xa1, 0x01, 0x0180}, 1595 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 1596 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 1597 {0xaa, 0x13, 0x0031}, 1598 {0xaa, 0x14, 0x0001}, 1599 {0xaa, 0x0e, 0x0004}, 1600 {0xaa, 0x19, 0x00cd}, 1601 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 1602 {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, 1603 {0xa0, 0x62, ZC3XX_R192_EXPOSURELIMITLOW}, 1604 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 1605 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 1606 {0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW}, 1607 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 1608 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 1609 1610 {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 0x14 */ 1611 {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, 1612 {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, 1613 {0xa0, 0x18, ZC3XX_R01E_HSYNC_1}, 1614 {0xa0, 0x2c, ZC3XX_R01F_HSYNC_2}, 1615 {0xa0, 0x41, ZC3XX_R020_HSYNC_3}, 1616 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 1617 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 1618 {0xa1, 0x01, 0x0180}, 1619 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 1620 {0xa0, 0x40, ZC3XX_R116_RGAIN}, 1621 {0xa0, 0x40, ZC3XX_R117_GGAIN}, 1622 {0xa0, 0x40, ZC3XX_R118_BGAIN}, 1623 {} 1624 }; 1625 static const struct usb_action hdcs2020b_Initial[] = { 1626 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 1627 {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 1628 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 1629 {0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT}, 1630 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 1631 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 1632 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 1633 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 1634 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 1635 {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 1636 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 1637 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 1638 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 1639 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 1640 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 1641 {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 1642 {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 1643 {0xaa, 0x1c, 0x0000}, 1644 {0xaa, 0x0a, 0x0001}, 1645 {0xaa, 0x0b, 0x0006}, 1646 {0xaa, 0x0c, 0x007a}, 1647 {0xaa, 0x0d, 0x00a7}, 1648 {0xaa, 0x03, 0x00fb}, 1649 {0xaa, 0x05, 0x0000}, 1650 {0xaa, 0x06, 0x0003}, 1651 {0xaa, 0x09, 0x0008}, 1652 {0xaa, 0x0f, 0x0018}, /* original setting */ 1653 {0xaa, 0x10, 0x0018}, 1654 {0xaa, 0x11, 0x0018}, 1655 {0xaa, 0x12, 0x0018}, 1656 {0xaa, 0x15, 0x004e}, 1657 {0xaa, 0x1c, 0x0004}, 1658 {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION}, 1659 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 1660 {0xa0, 0x70, ZC3XX_R18D_YTARGET}, 1661 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 1662 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 1663 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 1664 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 1665 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 1666 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 1667 {0xa1, 0x01, 0x0002}, 1668 {0xa1, 0x01, 0x0008}, 1669 {0xa1, 0x01, 0x0180}, 1670 {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 1671 {0xa0, 0x40, ZC3XX_R116_RGAIN}, 1672 {0xa0, 0x40, ZC3XX_R117_GGAIN}, 1673 {0xa0, 0x40, ZC3XX_R118_BGAIN}, 1674 {0xa1, 0x01, 0x0008}, 1675 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 1676 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 1677 {0xa1, 0x01, 0x01c8}, 1678 {0xa1, 0x01, 0x01c9}, 1679 {0xa1, 0x01, 0x01ca}, 1680 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 1681 {0xa0, 0x13, ZC3XX_R120_GAMMA00}, /* gamma 4 */ 1682 {0xa0, 0x38, ZC3XX_R121_GAMMA01}, 1683 {0xa0, 0x59, ZC3XX_R122_GAMMA02}, 1684 {0xa0, 0x79, ZC3XX_R123_GAMMA03}, 1685 {0xa0, 0x92, ZC3XX_R124_GAMMA04}, 1686 {0xa0, 0xa7, ZC3XX_R125_GAMMA05}, 1687 {0xa0, 0xb9, ZC3XX_R126_GAMMA06}, 1688 {0xa0, 0xc8, ZC3XX_R127_GAMMA07}, 1689 {0xa0, 0xd4, ZC3XX_R128_GAMMA08}, 1690 {0xa0, 0xdf, ZC3XX_R129_GAMMA09}, 1691 {0xa0, 0xe7, ZC3XX_R12A_GAMMA0A}, 1692 {0xa0, 0xee, ZC3XX_R12B_GAMMA0B}, 1693 {0xa0, 0xf4, ZC3XX_R12C_GAMMA0C}, 1694 {0xa0, 0xf9, ZC3XX_R12D_GAMMA0D}, 1695 {0xa0, 0xfc, ZC3XX_R12E_GAMMA0E}, 1696 {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, 1697 {0xa0, 0x26, ZC3XX_R130_GAMMA10}, 1698 {0xa0, 0x22, ZC3XX_R131_GAMMA11}, 1699 {0xa0, 0x20, ZC3XX_R132_GAMMA12}, 1700 {0xa0, 0x1c, ZC3XX_R133_GAMMA13}, 1701 {0xa0, 0x16, ZC3XX_R134_GAMMA14}, 1702 {0xa0, 0x13, ZC3XX_R135_GAMMA15}, 1703 {0xa0, 0x10, ZC3XX_R136_GAMMA16}, 1704 {0xa0, 0x0d, ZC3XX_R137_GAMMA17}, 1705 {0xa0, 0x0b, ZC3XX_R138_GAMMA18}, 1706 {0xa0, 0x09, ZC3XX_R139_GAMMA19}, 1707 {0xa0, 0x07, ZC3XX_R13A_GAMMA1A}, 1708 {0xa0, 0x06, ZC3XX_R13B_GAMMA1B}, 1709 {0xa0, 0x05, ZC3XX_R13C_GAMMA1C}, 1710 {0xa0, 0x04, ZC3XX_R13D_GAMMA1D}, 1711 {0xa0, 0x03, ZC3XX_R13E_GAMMA1E}, 1712 {0xa0, 0x02, ZC3XX_R13F_GAMMA1F}, 1713 {0xa0, 0x66, ZC3XX_R10A_RGB00}, /* matrix */ 1714 {0xa0, 0xed, ZC3XX_R10B_RGB01}, 1715 {0xa0, 0xed, ZC3XX_R10C_RGB02}, 1716 {0xa0, 0xed, ZC3XX_R10D_RGB10}, 1717 {0xa0, 0x66, ZC3XX_R10E_RGB11}, 1718 {0xa0, 0xed, ZC3XX_R10F_RGB12}, 1719 {0xa0, 0xed, ZC3XX_R110_RGB20}, 1720 {0xa0, 0xed, ZC3XX_R111_RGB21}, 1721 {0xa0, 0x66, ZC3XX_R112_RGB22}, 1722 {0xa1, 0x01, 0x0180}, 1723 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 1724 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 1725 /**** set exposure ***/ 1726 {0xaa, 0x13, 0x0031}, 1727 {0xaa, 0x14, 0x0001}, 1728 {0xaa, 0x0e, 0x0004}, 1729 {0xaa, 0x19, 0x00cd}, 1730 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 1731 {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, 1732 {0xa0, 0x62, ZC3XX_R192_EXPOSURELIMITLOW}, 1733 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 1734 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 1735 {0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW}, 1736 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 1737 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 1738 {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, 1739 {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, 1740 {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, 1741 {0xa0, 0x18, ZC3XX_R01E_HSYNC_1}, 1742 {0xa0, 0x2c, ZC3XX_R01F_HSYNC_2}, 1743 {0xa0, 0x41, ZC3XX_R020_HSYNC_3}, 1744 {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 1745 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 1746 {0xa1, 0x01, 0x0180}, 1747 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 1748 {0xa0, 0x40, ZC3XX_R116_RGAIN}, 1749 {0xa0, 0x40, ZC3XX_R117_GGAIN}, 1750 {0xa0, 0x40, ZC3XX_R118_BGAIN}, 1751 {} 1752 }; 1753 static const struct usb_action hdcs2020b_50HZ[] = { 1754 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 1755 {0xaa, 0x13, 0x0018}, /* 00,13,18,aa */ 1756 {0xaa, 0x14, 0x0001}, /* 00,14,01,aa */ 1757 {0xaa, 0x0e, 0x0005}, /* 00,0e,05,aa */ 1758 {0xaa, 0x19, 0x001f}, /* 00,19,1f,aa */ 1759 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 1760 {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,02,cc */ 1761 {0xa0, 0x76, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,76,cc */ 1762 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 1763 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 1764 {0xa0, 0x46, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,46,cc */ 1765 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 1766 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 1767 {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */ 1768 {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,28,cc */ 1769 {0xa0, 0x05, ZC3XX_R01D_HSYNC_0}, /* 00,1d,05,cc */ 1770 {0xa0, 0x1a, ZC3XX_R01E_HSYNC_1}, /* 00,1e,1a,cc */ 1771 {0xa0, 0x2f, ZC3XX_R01F_HSYNC_2}, /* 00,1f,2f,cc */ 1772 {} 1773 }; 1774 static const struct usb_action hdcs2020b_60HZ[] = { 1775 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 1776 {0xaa, 0x13, 0x0031}, /* 00,13,31,aa */ 1777 {0xaa, 0x14, 0x0001}, /* 00,14,01,aa */ 1778 {0xaa, 0x0e, 0x0004}, /* 00,0e,04,aa */ 1779 {0xaa, 0x19, 0x00cd}, /* 00,19,cd,aa */ 1780 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 1781 {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,02,cc */ 1782 {0xa0, 0x62, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,62,cc */ 1783 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 1784 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 1785 {0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,3d,cc */ 1786 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 1787 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 1788 {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */ 1789 {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,28,cc */ 1790 {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, /* 00,1d,04,cc */ 1791 {0xa0, 0x18, ZC3XX_R01E_HSYNC_1}, /* 00,1e,18,cc */ 1792 {0xa0, 0x2c, ZC3XX_R01F_HSYNC_2}, /* 00,1f,2c,cc */ 1793 {} 1794 }; 1795 static const struct usb_action hdcs2020b_NoFliker[] = { 1796 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 1797 {0xaa, 0x13, 0x0010}, /* 00,13,10,aa */ 1798 {0xaa, 0x14, 0x0001}, /* 00,14,01,aa */ 1799 {0xaa, 0x0e, 0x0004}, /* 00,0e,04,aa */ 1800 {0xaa, 0x19, 0x0000}, /* 00,19,00,aa */ 1801 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 1802 {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,02,cc */ 1803 {0xa0, 0x70, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,70,cc */ 1804 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 1805 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 1806 {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 1807 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 1808 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 1809 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 1810 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 1811 {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, /* 00,1d,04,cc */ 1812 {0xa0, 0x17, ZC3XX_R01E_HSYNC_1}, /* 00,1e,17,cc */ 1813 {0xa0, 0x2a, ZC3XX_R01F_HSYNC_2}, /* 00,1f,2a,cc */ 1814 {} 1815 }; 1816 1817 static const struct usb_action hv7131b_InitialScale[] = { /* 320x240 */ 1818 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 1819 {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 1820 {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT}, 1821 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 1822 {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 1823 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 1824 {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 1825 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 1826 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 1827 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 1828 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 1829 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 1830 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 1831 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 1832 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 1833 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 1834 {0xaa, 0x30, 0x002d}, 1835 {0xaa, 0x01, 0x0005}, 1836 {0xaa, 0x11, 0x0000}, 1837 {0xaa, 0x13, 0x0001}, /* {0xaa, 0x13, 0x0000}, */ 1838 {0xaa, 0x14, 0x0001}, 1839 {0xaa, 0x15, 0x00e8}, 1840 {0xaa, 0x16, 0x0002}, 1841 {0xaa, 0x17, 0x0086}, /* 00,17,88,aa */ 1842 {0xaa, 0x31, 0x0038}, 1843 {0xaa, 0x32, 0x0038}, 1844 {0xaa, 0x33, 0x0038}, 1845 {0xaa, 0x5b, 0x0001}, 1846 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 1847 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 1848 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 1849 {0xa0, 0x68, ZC3XX_R18D_YTARGET}, 1850 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 1851 {0xa0, 0x00, 0x01ad}, 1852 {0xa0, 0xc0, 0x019b}, 1853 {0xa0, 0xa0, 0x019c}, 1854 {0xa0, 0x02, ZC3XX_R188_MINGAIN}, 1855 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 1856 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 1857 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 1858 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 1859 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 1860 {0xaa, 0x02, 0x0090}, /* 00,02,80,aa */ 1861 {} 1862 }; 1863 1864 static const struct usb_action hv7131b_Initial[] = { /* 640x480*/ 1865 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 1866 {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 1867 {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT}, 1868 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 1869 {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 1870 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 1871 {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 1872 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 1873 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 1874 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 1875 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 1876 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 1877 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 1878 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 1879 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 1880 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 1881 {0xaa, 0x30, 0x002d}, 1882 {0xaa, 0x01, 0x0005}, 1883 {0xaa, 0x11, 0x0001}, 1884 {0xaa, 0x13, 0x0000}, /* {0xaa, 0x13, 0x0001}; */ 1885 {0xaa, 0x14, 0x0001}, 1886 {0xaa, 0x15, 0x00e6}, 1887 {0xaa, 0x16, 0x0002}, 1888 {0xaa, 0x17, 0x0086}, 1889 {0xaa, 0x31, 0x0038}, 1890 {0xaa, 0x32, 0x0038}, 1891 {0xaa, 0x33, 0x0038}, 1892 {0xaa, 0x5b, 0x0001}, 1893 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 1894 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 1895 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 1896 {0xa0, 0x70, ZC3XX_R18D_YTARGET}, 1897 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 1898 {0xa0, 0x00, 0x01ad}, 1899 {0xa0, 0xc0, 0x019b}, 1900 {0xa0, 0xa0, 0x019c}, 1901 {0xa0, 0x02, ZC3XX_R188_MINGAIN}, 1902 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 1903 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 1904 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 1905 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 1906 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 1907 {0xaa, 0x02, 0x0090}, /* {0xaa, 0x02, 0x0080}, */ 1908 {} 1909 }; 1910 static const struct usb_action hv7131b_50HZ[] = { /* 640x480*/ 1911 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 1912 {0xaa, 0x25, 0x0007}, /* 00,25,07,aa */ 1913 {0xaa, 0x26, 0x0053}, /* 00,26,53,aa */ 1914 {0xaa, 0x27, 0x0000}, /* 00,27,00,aa */ 1915 {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 1916 {0xaa, 0x21, 0x0050}, /* 00,21,50,aa */ 1917 {0xaa, 0x22, 0x001b}, /* 00,22,1b,aa */ 1918 {0xaa, 0x23, 0x00fc}, /* 00,23,fc,aa */ 1919 {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */ 1920 {0xa0, 0x9b, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,9b,cc */ 1921 {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,80,cc */ 1922 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 1923 {0xa0, 0xea, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,ea,cc */ 1924 {0xa0, 0x60, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,60,cc */ 1925 {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0c,cc */ 1926 {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,18,cc */ 1927 {0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,18,cc */ 1928 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 1929 {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */ 1930 {0xa0, 0x50, ZC3XX_R01E_HSYNC_1}, /* 00,1e,50,cc */ 1931 {0xa0, 0x1b, ZC3XX_R01F_HSYNC_2}, /* 00,1f,1b,cc */ 1932 {0xa0, 0xfc, ZC3XX_R020_HSYNC_3}, /* 00,20,fc,cc */ 1933 {} 1934 }; 1935 static const struct usb_action hv7131b_50HZScale[] = { /* 320x240 */ 1936 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 1937 {0xaa, 0x25, 0x0007}, /* 00,25,07,aa */ 1938 {0xaa, 0x26, 0x0053}, /* 00,26,53,aa */ 1939 {0xaa, 0x27, 0x0000}, /* 00,27,00,aa */ 1940 {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 1941 {0xaa, 0x21, 0x0050}, /* 00,21,50,aa */ 1942 {0xaa, 0x22, 0x0012}, /* 00,22,12,aa */ 1943 {0xaa, 0x23, 0x0080}, /* 00,23,80,aa */ 1944 {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */ 1945 {0xa0, 0x9b, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,9b,cc */ 1946 {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,80,cc */ 1947 {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,01,cc */ 1948 {0xa0, 0xd4, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,d4,cc */ 1949 {0xa0, 0xc0, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,c0,cc */ 1950 {0xa0, 0x07, ZC3XX_R18C_AEFREEZE}, /* 01,8c,07,cc */ 1951 {0xa0, 0x0f, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,0f,cc */ 1952 {0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,18,cc */ 1953 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 1954 {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */ 1955 {0xa0, 0x50, ZC3XX_R01E_HSYNC_1}, /* 00,1e,50,cc */ 1956 {0xa0, 0x12, ZC3XX_R01F_HSYNC_2}, /* 00,1f,12,cc */ 1957 {0xa0, 0x80, ZC3XX_R020_HSYNC_3}, /* 00,20,80,cc */ 1958 {} 1959 }; 1960 static const struct usb_action hv7131b_60HZ[] = { /* 640x480*/ 1961 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 1962 {0xaa, 0x25, 0x0007}, /* 00,25,07,aa */ 1963 {0xaa, 0x26, 0x00a1}, /* 00,26,a1,aa */ 1964 {0xaa, 0x27, 0x0020}, /* 00,27,20,aa */ 1965 {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 1966 {0xaa, 0x21, 0x0040}, /* 00,21,40,aa */ 1967 {0xaa, 0x22, 0x0013}, /* 00,22,13,aa */ 1968 {0xaa, 0x23, 0x004c}, /* 00,23,4c,aa */ 1969 {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */ 1970 {0xa0, 0x4d, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,4d,cc */ 1971 {0xa0, 0x60, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,60,cc */ 1972 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 1973 {0xa0, 0xc3, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,c3,cc */ 1974 {0xa0, 0x50, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,50,cc */ 1975 {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0c,cc */ 1976 {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,18,cc */ 1977 {0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,18,cc */ 1978 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 1979 {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */ 1980 {0xa0, 0x40, ZC3XX_R01E_HSYNC_1}, /* 00,1e,40,cc */ 1981 {0xa0, 0x13, ZC3XX_R01F_HSYNC_2}, /* 00,1f,13,cc */ 1982 {0xa0, 0x4c, ZC3XX_R020_HSYNC_3}, /* 00,20,4c,cc */ 1983 {} 1984 }; 1985 static const struct usb_action hv7131b_60HZScale[] = { /* 320x240 */ 1986 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 1987 {0xaa, 0x25, 0x0007}, /* 00,25,07,aa */ 1988 {0xaa, 0x26, 0x00a1}, /* 00,26,a1,aa */ 1989 {0xaa, 0x27, 0x0020}, /* 00,27,20,aa */ 1990 {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 1991 {0xaa, 0x21, 0x00a0}, /* 00,21,a0,aa */ 1992 {0xaa, 0x22, 0x0016}, /* 00,22,16,aa */ 1993 {0xaa, 0x23, 0x0040}, /* 00,23,40,aa */ 1994 {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */ 1995 {0xa0, 0x4d, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,4d,cc */ 1996 {0xa0, 0x60, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,60,cc */ 1997 {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,01,cc */ 1998 {0xa0, 0x86, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,86,cc */ 1999 {0xa0, 0xa0, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,a0,cc */ 2000 {0xa0, 0x07, ZC3XX_R18C_AEFREEZE}, /* 01,8c,07,cc */ 2001 {0xa0, 0x0f, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,0f,cc */ 2002 {0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,18,cc */ 2003 {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 2004 {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */ 2005 {0xa0, 0xa0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,a0,cc */ 2006 {0xa0, 0x16, ZC3XX_R01F_HSYNC_2}, /* 00,1f,16,cc */ 2007 {0xa0, 0x40, ZC3XX_R020_HSYNC_3}, /* 00,20,40,cc */ 2008 {} 2009 }; 2010 static const struct usb_action hv7131b_NoFliker[] = { /* 640x480*/ 2011 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 2012 {0xaa, 0x25, 0x0003}, /* 00,25,03,aa */ 2013 {0xaa, 0x26, 0x0000}, /* 00,26,00,aa */ 2014 {0xaa, 0x27, 0x0000}, /* 00,27,00,aa */ 2015 {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 2016 {0xaa, 0x21, 0x0010}, /* 00,21,10,aa */ 2017 {0xaa, 0x22, 0x0000}, /* 00,22,00,aa */ 2018 {0xaa, 0x23, 0x0003}, /* 00,23,03,aa */ 2019 {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */ 2020 {0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,f8,cc */ 2021 {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,00,cc */ 2022 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 2023 {0xa0, 0x02, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,02,cc */ 2024 {0xa0, 0x00, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,00,cc */ 2025 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 2026 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 2027 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 2028 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 2029 {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */ 2030 {0xa0, 0x10, ZC3XX_R01E_HSYNC_1}, /* 00,1e,10,cc */ 2031 {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, /* 00,1f,00,cc */ 2032 {0xa0, 0x03, ZC3XX_R020_HSYNC_3}, /* 00,20,03,cc */ 2033 {} 2034 }; 2035 static const struct usb_action hv7131b_NoFlikerScale[] = { /* 320x240 */ 2036 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 2037 {0xaa, 0x25, 0x0003}, /* 00,25,03,aa */ 2038 {0xaa, 0x26, 0x0000}, /* 00,26,00,aa */ 2039 {0xaa, 0x27, 0x0000}, /* 00,27,00,aa */ 2040 {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 2041 {0xaa, 0x21, 0x00a0}, /* 00,21,a0,aa */ 2042 {0xaa, 0x22, 0x0016}, /* 00,22,16,aa */ 2043 {0xaa, 0x23, 0x0040}, /* 00,23,40,aa */ 2044 {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */ 2045 {0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,f8,cc */ 2046 {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,00,cc */ 2047 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 2048 {0xa0, 0x02, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,02,cc */ 2049 {0xa0, 0x00, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,00,cc */ 2050 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 2051 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 2052 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 2053 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 2054 {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */ 2055 {0xa0, 0xa0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,a0,cc */ 2056 {0xa0, 0x16, ZC3XX_R01F_HSYNC_2}, /* 00,1f,16,cc */ 2057 {0xa0, 0x40, ZC3XX_R020_HSYNC_3}, /* 00,20,40,cc */ 2058 {} 2059 }; 2060 2061 static const struct usb_action hv7131r_InitialScale[] = { 2062 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 2063 {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 2064 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, 2065 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 2066 {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 2067 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 2068 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 2069 {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 2070 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 2071 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 2072 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 2073 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 2074 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 2075 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 2076 {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, 2077 {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 2078 {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, 2079 {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 2080 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 2081 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 2082 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 2083 {0xaa, 0x01, 0x000c}, 2084 {0xaa, 0x11, 0x0000}, 2085 {0xaa, 0x13, 0x0000}, 2086 {0xaa, 0x14, 0x0001}, 2087 {0xaa, 0x15, 0x00e8}, 2088 {0xaa, 0x16, 0x0002}, 2089 {0xaa, 0x17, 0x0088}, 2090 2091 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 2092 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 2093 {0xa0, 0x89, ZC3XX_R18D_YTARGET}, 2094 {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, 2095 {0xa0, 0x00, 0x01ad}, 2096 {0xa0, 0xc0, 0x019b}, 2097 {0xa0, 0xa0, 0x019c}, 2098 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 2099 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 2100 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 2101 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 2102 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 2103 {0xa1, 0x01, 0x0002}, 2104 {0xa0, 0x00, ZC3XX_R092_I2CADDRESSSELECT}, 2105 {0xa0, 0x02, ZC3XX_R090_I2CCOMMAND}, 2106 {0xa1, 0x01, 0x0091}, 2107 {0xa1, 0x01, 0x0095}, 2108 {0xa1, 0x01, 0x0096}, 2109 2110 {0xa1, 0x01, 0x0008}, 2111 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 2112 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 2113 {0xa1, 0x01, 0x01c8}, 2114 {0xa1, 0x01, 0x01c9}, 2115 {0xa1, 0x01, 0x01ca}, 2116 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 2117 2118 {0xa0, 0x60, ZC3XX_R10A_RGB00}, /* matrix */ 2119 {0xa0, 0xf0, ZC3XX_R10B_RGB01}, 2120 {0xa0, 0xf0, ZC3XX_R10C_RGB02}, 2121 {0xa0, 0xf0, ZC3XX_R10D_RGB10}, 2122 {0xa0, 0x60, ZC3XX_R10E_RGB11}, 2123 {0xa0, 0xf0, ZC3XX_R10F_RGB12}, 2124 {0xa0, 0xf0, ZC3XX_R110_RGB20}, 2125 {0xa0, 0xf0, ZC3XX_R111_RGB21}, 2126 {0xa0, 0x60, ZC3XX_R112_RGB22}, 2127 {0xa1, 0x01, 0x0180}, 2128 {0xa0, 0x10, ZC3XX_R180_AUTOCORRECTENABLE}, 2129 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 2130 {0xaa, 0x25, 0x0007}, 2131 {0xaa, 0x26, 0x0053}, 2132 {0xaa, 0x27, 0x0000}, 2133 2134 {0xa0, 0x10, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 2f */ 2135 {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 9b */ 2136 {0xa0, 0x60, ZC3XX_R192_EXPOSURELIMITLOW}, /* 80 */ 2137 {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH}, 2138 {0xa0, 0xd4, ZC3XX_R196_ANTIFLICKERMID}, 2139 {0xa0, 0xc0, ZC3XX_R197_ANTIFLICKERLOW}, 2140 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 2141 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 2142 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 2143 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 2144 {0xa0, 0x13, ZC3XX_R1AA_DIGITALGAINSTEP}, 2145 {0xa1, 0x01, 0x001d}, 2146 {0xa1, 0x01, 0x001e}, 2147 {0xa1, 0x01, 0x001f}, 2148 {0xa1, 0x01, 0x0020}, 2149 {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE}, 2150 {0xa1, 0x01, 0x0180}, 2151 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 2152 {} 2153 }; 2154 2155 static const struct usb_action hv7131r_Initial[] = { 2156 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 2157 2158 {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, /* diff */ 2159 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, 2160 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 2161 {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 2162 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 2163 2164 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 2165 {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 2166 2167 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 2168 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 2169 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 2170 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 1e0 */ 2171 2172 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 2173 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 2174 {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, 2175 {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 2176 {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, 2177 {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 2178 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 2179 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 2180 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 2181 {0xaa, 0x01, 0x000c}, 2182 {0xaa, 0x11, 0x0000}, 2183 {0xaa, 0x13, 0x0000}, 2184 {0xaa, 0x14, 0x0001}, 2185 {0xaa, 0x15, 0x00e8}, 2186 {0xaa, 0x16, 0x0002}, 2187 {0xaa, 0x17, 0x0088}, 2188 2189 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00 */ 2190 2191 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 2192 {0xa0, 0x89, ZC3XX_R18D_YTARGET}, 2193 {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, 2194 {0xa0, 0x00, 0x01ad}, 2195 {0xa0, 0xc0, 0x019b}, 2196 {0xa0, 0xa0, 0x019c}, 2197 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 2198 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 2199 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 2200 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 2201 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 2202 {0xa1, 0x01, 0x0002}, 2203 {0xa0, 0x00, ZC3XX_R092_I2CADDRESSSELECT}, 2204 /* read the i2c chips ident */ 2205 {0xa0, 0x02, ZC3XX_R090_I2CCOMMAND}, 2206 {0xa1, 0x01, 0x0091}, 2207 {0xa1, 0x01, 0x0095}, 2208 {0xa1, 0x01, 0x0096}, 2209 2210 {0xa1, 0x01, 0x0008}, 2211 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 2212 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 2213 {0xa1, 0x01, 0x01c8}, 2214 {0xa1, 0x01, 0x01c9}, 2215 {0xa1, 0x01, 0x01ca}, 2216 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 2217 2218 {0xa0, 0x60, ZC3XX_R10A_RGB00}, /* matrix */ 2219 {0xa0, 0xf0, ZC3XX_R10B_RGB01}, 2220 {0xa0, 0xf0, ZC3XX_R10C_RGB02}, 2221 {0xa0, 0xf0, ZC3XX_R10D_RGB10}, 2222 {0xa0, 0x60, ZC3XX_R10E_RGB11}, 2223 {0xa0, 0xf0, ZC3XX_R10F_RGB12}, 2224 {0xa0, 0xf0, ZC3XX_R110_RGB20}, 2225 {0xa0, 0xf0, ZC3XX_R111_RGB21}, 2226 {0xa0, 0x60, ZC3XX_R112_RGB22}, 2227 {0xa1, 0x01, 0x0180}, 2228 {0xa0, 0x10, ZC3XX_R180_AUTOCORRECTENABLE}, 2229 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 2230 {0xaa, 0x25, 0x0007}, 2231 {0xaa, 0x26, 0x0053}, 2232 {0xaa, 0x27, 0x0000}, 2233 2234 {0xa0, 0x10, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 2f */ 2235 {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 9b */ 2236 {0xa0, 0x60, ZC3XX_R192_EXPOSURELIMITLOW}, /* 80 */ 2237 2238 {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH}, 2239 {0xa0, 0xd4, ZC3XX_R196_ANTIFLICKERMID}, 2240 {0xa0, 0xc0, ZC3XX_R197_ANTIFLICKERLOW}, 2241 2242 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 2243 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 2244 {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 2245 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 2246 {0xa0, 0x13, ZC3XX_R1AA_DIGITALGAINSTEP}, 2247 {0xa1, 0x01, 0x001d}, 2248 {0xa1, 0x01, 0x001e}, 2249 {0xa1, 0x01, 0x001f}, 2250 {0xa1, 0x01, 0x0020}, 2251 {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE}, 2252 {0xa1, 0x01, 0x0180}, 2253 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 2254 {} 2255 }; 2256 2257 static const struct usb_action icm105a_InitialScale[] = { 2258 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 2259 {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 2260 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 2261 {0xa0, 0x0c, ZC3XX_R010_CMOSSENSORSELECT}, 2262 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 2263 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 2264 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 2265 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 2266 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 2267 {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 2268 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 2269 {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, 2270 {0xa0, 0x00, ZC3XX_R097_WINYSTARTHIGH}, 2271 {0xa0, 0x01, ZC3XX_R098_WINYSTARTLOW}, 2272 {0xa0, 0x00, ZC3XX_R099_WINXSTARTHIGH}, 2273 {0xa0, 0x01, ZC3XX_R09A_WINXSTARTLOW}, 2274 {0xa0, 0x01, ZC3XX_R11A_FIRSTYLOW}, 2275 {0xa0, 0x01, ZC3XX_R11C_FIRSTXLOW}, 2276 {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, 2277 {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 2278 {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, 2279 {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 2280 {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 2281 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 2282 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 2283 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 2284 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 2285 {0xaa, 0x01, 0x0010}, 2286 {0xaa, 0x03, 0x0000}, 2287 {0xaa, 0x04, 0x0001}, 2288 {0xaa, 0x05, 0x0020}, 2289 {0xaa, 0x06, 0x0001}, 2290 {0xaa, 0x08, 0x0000}, 2291 {0xaa, 0x03, 0x0001}, 2292 {0xaa, 0x04, 0x0011}, 2293 {0xaa, 0x05, 0x00a0}, 2294 {0xaa, 0x06, 0x0001}, 2295 {0xaa, 0x08, 0x0000}, 2296 {0xaa, 0x03, 0x0002}, 2297 {0xaa, 0x04, 0x0013}, 2298 {0xaa, 0x05, 0x0020}, 2299 {0xaa, 0x06, 0x0001}, 2300 {0xaa, 0x08, 0x0000}, 2301 {0xaa, 0x03, 0x0003}, 2302 {0xaa, 0x04, 0x0015}, 2303 {0xaa, 0x05, 0x0020}, 2304 {0xaa, 0x06, 0x0005}, 2305 {0xaa, 0x08, 0x0000}, 2306 {0xaa, 0x03, 0x0004}, 2307 {0xaa, 0x04, 0x0017}, 2308 {0xaa, 0x05, 0x0020}, 2309 {0xaa, 0x06, 0x000d}, 2310 {0xaa, 0x08, 0x0000}, 2311 {0xaa, 0x03, 0x0005}, 2312 {0xaa, 0x04, 0x0019}, 2313 {0xaa, 0x05, 0x0020}, 2314 {0xaa, 0x06, 0x0005}, 2315 {0xaa, 0x08, 0x0000}, 2316 {0xaa, 0x03, 0x0006}, 2317 {0xaa, 0x04, 0x0017}, 2318 {0xaa, 0x05, 0x0026}, 2319 {0xaa, 0x06, 0x0005}, 2320 {0xaa, 0x08, 0x0000}, 2321 {0xaa, 0x03, 0x0007}, 2322 {0xaa, 0x04, 0x0019}, 2323 {0xaa, 0x05, 0x0022}, 2324 {0xaa, 0x06, 0x0005}, 2325 {0xaa, 0x08, 0x0000}, 2326 {0xaa, 0x03, 0x0008}, 2327 {0xaa, 0x04, 0x0021}, 2328 {0xaa, 0x05, 0x00aa}, 2329 {0xaa, 0x06, 0x0005}, 2330 {0xaa, 0x08, 0x0000}, 2331 {0xaa, 0x03, 0x0009}, 2332 {0xaa, 0x04, 0x0023}, 2333 {0xaa, 0x05, 0x00aa}, 2334 {0xaa, 0x06, 0x000d}, 2335 {0xaa, 0x08, 0x0000}, 2336 {0xaa, 0x03, 0x000a}, 2337 {0xaa, 0x04, 0x0025}, 2338 {0xaa, 0x05, 0x00aa}, 2339 {0xaa, 0x06, 0x0005}, 2340 {0xaa, 0x08, 0x0000}, 2341 {0xaa, 0x03, 0x000b}, 2342 {0xaa, 0x04, 0x00ec}, 2343 {0xaa, 0x05, 0x002e}, 2344 {0xaa, 0x06, 0x0005}, 2345 {0xaa, 0x08, 0x0000}, 2346 {0xaa, 0x03, 0x000c}, 2347 {0xaa, 0x04, 0x00fa}, 2348 {0xaa, 0x05, 0x002a}, 2349 {0xaa, 0x06, 0x0005}, 2350 {0xaa, 0x08, 0x0000}, 2351 {0xaa, 0x07, 0x000d}, 2352 {0xaa, 0x01, 0x0005}, 2353 {0xaa, 0x94, 0x0002}, 2354 {0xaa, 0x90, 0x0000}, 2355 {0xaa, 0x91, 0x001f}, 2356 {0xaa, 0x10, 0x0064}, 2357 {0xaa, 0x9b, 0x00f0}, 2358 {0xaa, 0x9c, 0x0002}, 2359 {0xaa, 0x14, 0x001a}, 2360 {0xaa, 0x20, 0x0080}, 2361 {0xaa, 0x22, 0x0080}, 2362 {0xaa, 0x24, 0x0080}, 2363 {0xaa, 0x26, 0x0080}, 2364 {0xaa, 0x00, 0x0084}, 2365 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 2366 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 2367 {0xaa, 0xa8, 0x00c0}, 2368 {0xa1, 0x01, 0x0002}, 2369 {0xa1, 0x01, 0x0008}, 2370 {0xa1, 0x01, 0x0180}, 2371 {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 2372 {0xa0, 0x40, ZC3XX_R116_RGAIN}, 2373 {0xa0, 0x40, ZC3XX_R117_GGAIN}, 2374 {0xa0, 0x40, ZC3XX_R118_BGAIN}, 2375 {0xa1, 0x01, 0x0008}, 2376 2377 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 2378 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 2379 {0xa1, 0x01, 0x01c8}, 2380 {0xa1, 0x01, 0x01c9}, 2381 {0xa1, 0x01, 0x01ca}, 2382 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 2383 {0xa0, 0x52, ZC3XX_R10A_RGB00}, /* matrix */ 2384 {0xa0, 0xf7, ZC3XX_R10B_RGB01}, 2385 {0xa0, 0xf7, ZC3XX_R10C_RGB02}, 2386 {0xa0, 0xf7, ZC3XX_R10D_RGB10}, 2387 {0xa0, 0x52, ZC3XX_R10E_RGB11}, 2388 {0xa0, 0xf7, ZC3XX_R10F_RGB12}, 2389 {0xa0, 0xf7, ZC3XX_R110_RGB20}, 2390 {0xa0, 0xf7, ZC3XX_R111_RGB21}, 2391 {0xa0, 0x52, ZC3XX_R112_RGB22}, 2392 {0xa1, 0x01, 0x0180}, 2393 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 2394 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 2395 {0xaa, 0x0d, 0x0003}, 2396 {0xaa, 0x0c, 0x008c}, 2397 {0xaa, 0x0e, 0x0095}, 2398 {0xaa, 0x0f, 0x0002}, 2399 {0xaa, 0x1c, 0x0094}, 2400 {0xaa, 0x1d, 0x0002}, 2401 {0xaa, 0x20, 0x0080}, 2402 {0xaa, 0x22, 0x0080}, 2403 {0xaa, 0x24, 0x0080}, 2404 {0xaa, 0x26, 0x0080}, 2405 {0xaa, 0x00, 0x0084}, 2406 {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, 2407 {0xa0, 0x94, ZC3XX_R0A4_EXPOSURETIMELOW}, 2408 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 2409 {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, 2410 {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, 2411 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 2412 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 2413 {0xa0, 0x84, ZC3XX_R197_ANTIFLICKERLOW}, 2414 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 2415 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 2416 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 2417 {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, 2418 {0xa0, 0xe3, ZC3XX_R01D_HSYNC_0}, 2419 {0xa0, 0xec, ZC3XX_R01E_HSYNC_1}, 2420 {0xa0, 0xf5, ZC3XX_R01F_HSYNC_2}, 2421 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 2422 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 2423 {0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN}, 2424 {0xa0, 0xc0, ZC3XX_R11D_GLOBALGAIN}, 2425 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 2426 {0xa1, 0x01, 0x0180}, 2427 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 2428 {0xa0, 0x40, ZC3XX_R116_RGAIN}, 2429 {0xa0, 0x40, ZC3XX_R117_GGAIN}, 2430 {0xa0, 0x40, ZC3XX_R118_BGAIN}, 2431 {} 2432 }; 2433 2434 static const struct usb_action icm105a_Initial[] = { 2435 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 2436 {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 2437 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 2438 {0xa0, 0x0c, ZC3XX_R010_CMOSSENSORSELECT}, 2439 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 2440 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 2441 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 2442 {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 2443 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 2444 {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 2445 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 2446 {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, 2447 {0xa0, 0x00, ZC3XX_R097_WINYSTARTHIGH}, 2448 {0xa0, 0x02, ZC3XX_R098_WINYSTARTLOW}, 2449 {0xa0, 0x00, ZC3XX_R099_WINXSTARTHIGH}, 2450 {0xa0, 0x02, ZC3XX_R09A_WINXSTARTLOW}, 2451 {0xa0, 0x02, ZC3XX_R11A_FIRSTYLOW}, 2452 {0xa0, 0x02, ZC3XX_R11C_FIRSTXLOW}, 2453 {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, 2454 {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, 2455 {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, 2456 {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, 2457 {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 2458 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 2459 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 2460 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 2461 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 2462 {0xaa, 0x01, 0x0010}, 2463 {0xaa, 0x03, 0x0000}, 2464 {0xaa, 0x04, 0x0001}, 2465 {0xaa, 0x05, 0x0020}, 2466 {0xaa, 0x06, 0x0001}, 2467 {0xaa, 0x08, 0x0000}, 2468 {0xaa, 0x03, 0x0001}, 2469 {0xaa, 0x04, 0x0011}, 2470 {0xaa, 0x05, 0x00a0}, 2471 {0xaa, 0x06, 0x0001}, 2472 {0xaa, 0x08, 0x0000}, 2473 {0xaa, 0x03, 0x0002}, 2474 {0xaa, 0x04, 0x0013}, 2475 {0xaa, 0x05, 0x0020}, 2476 {0xaa, 0x06, 0x0001}, 2477 {0xaa, 0x08, 0x0000}, 2478 {0xaa, 0x03, 0x0003}, 2479 {0xaa, 0x04, 0x0015}, 2480 {0xaa, 0x05, 0x0020}, 2481 {0xaa, 0x06, 0x0005}, 2482 {0xaa, 0x08, 0x0000}, 2483 {0xaa, 0x03, 0x0004}, 2484 {0xaa, 0x04, 0x0017}, 2485 {0xaa, 0x05, 0x0020}, 2486 {0xaa, 0x06, 0x000d}, 2487 {0xaa, 0x08, 0x0000}, 2488 {0xaa, 0x03, 0x0005}, 2489 {0xa0, 0x04, ZC3XX_R092_I2CADDRESSSELECT}, 2490 {0xa0, 0x19, ZC3XX_R093_I2CSETVALUE}, 2491 {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 2492 {0xa1, 0x01, 0x0091}, 2493 {0xaa, 0x05, 0x0020}, 2494 {0xaa, 0x06, 0x0005}, 2495 {0xaa, 0x08, 0x0000}, 2496 {0xaa, 0x03, 0x0006}, 2497 {0xaa, 0x04, 0x0017}, 2498 {0xaa, 0x05, 0x0026}, 2499 {0xaa, 0x06, 0x0005}, 2500 {0xaa, 0x08, 0x0000}, 2501 {0xaa, 0x03, 0x0007}, 2502 {0xaa, 0x04, 0x0019}, 2503 {0xaa, 0x05, 0x0022}, 2504 {0xaa, 0x06, 0x0005}, 2505 {0xaa, 0x08, 0x0000}, 2506 {0xaa, 0x03, 0x0008}, 2507 {0xaa, 0x04, 0x0021}, 2508 {0xaa, 0x05, 0x00aa}, 2509 {0xaa, 0x06, 0x0005}, 2510 {0xaa, 0x08, 0x0000}, 2511 {0xaa, 0x03, 0x0009}, 2512 {0xaa, 0x04, 0x0023}, 2513 {0xaa, 0x05, 0x00aa}, 2514 {0xaa, 0x06, 0x000d}, 2515 {0xaa, 0x08, 0x0000}, 2516 {0xaa, 0x03, 0x000a}, 2517 {0xaa, 0x04, 0x0025}, 2518 {0xaa, 0x05, 0x00aa}, 2519 {0xaa, 0x06, 0x0005}, 2520 {0xaa, 0x08, 0x0000}, 2521 {0xaa, 0x03, 0x000b}, 2522 {0xaa, 0x04, 0x00ec}, 2523 {0xaa, 0x05, 0x002e}, 2524 {0xaa, 0x06, 0x0005}, 2525 {0xaa, 0x08, 0x0000}, 2526 {0xaa, 0x03, 0x000c}, 2527 {0xaa, 0x04, 0x00fa}, 2528 {0xaa, 0x05, 0x002a}, 2529 {0xaa, 0x06, 0x0005}, 2530 {0xaa, 0x08, 0x0000}, 2531 {0xaa, 0x07, 0x000d}, 2532 {0xaa, 0x01, 0x0005}, 2533 {0xaa, 0x94, 0x0002}, 2534 {0xaa, 0x90, 0x0000}, 2535 {0xaa, 0x91, 0x0010}, 2536 {0xaa, 0x10, 0x0064}, 2537 {0xaa, 0x9b, 0x00f0}, 2538 {0xaa, 0x9c, 0x0002}, 2539 {0xaa, 0x14, 0x001a}, 2540 {0xaa, 0x20, 0x0080}, 2541 {0xaa, 0x22, 0x0080}, 2542 {0xaa, 0x24, 0x0080}, 2543 {0xaa, 0x26, 0x0080}, 2544 {0xaa, 0x00, 0x0084}, 2545 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 2546 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 2547 {0xaa, 0xa8, 0x0080}, 2548 {0xa0, 0x78, ZC3XX_R18D_YTARGET}, 2549 {0xa1, 0x01, 0x0002}, 2550 {0xa1, 0x01, 0x0008}, 2551 {0xa1, 0x01, 0x0180}, 2552 {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 2553 {0xa0, 0x40, ZC3XX_R116_RGAIN}, 2554 {0xa0, 0x40, ZC3XX_R117_GGAIN}, 2555 {0xa0, 0x40, ZC3XX_R118_BGAIN}, 2556 {0xa1, 0x01, 0x0008}, 2557 2558 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 2559 {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 2560 {0xa1, 0x01, 0x01c8}, 2561 {0xa1, 0x01, 0x01c9}, 2562 {0xa1, 0x01, 0x01ca}, 2563 {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 2564 2565 {0xa0, 0x52, ZC3XX_R10A_RGB00}, /* matrix */ 2566 {0xa0, 0xf7, ZC3XX_R10B_RGB01}, 2567 {0xa0, 0xf7, ZC3XX_R10C_RGB02}, 2568 {0xa0, 0xf7, ZC3XX_R10D_RGB10}, 2569 {0xa0, 0x52, ZC3XX_R10E_RGB11}, 2570 {0xa0, 0xf7, ZC3XX_R10F_RGB12}, 2571 {0xa0, 0xf7, ZC3XX_R110_RGB20}, 2572 {0xa0, 0xf7, ZC3XX_R111_RGB21}, 2573 {0xa0, 0x52, ZC3XX_R112_RGB22}, 2574 {0xa1, 0x01, 0x0180}, 2575 {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 2576 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 2577 {0xaa, 0x0d, 0x0003}, 2578 {0xaa, 0x0c, 0x0020}, 2579 {0xaa, 0x0e, 0x000e}, 2580 {0xaa, 0x0f, 0x0002}, 2581 {0xaa, 0x1c, 0x000d}, 2582 {0xaa, 0x1d, 0x0002}, 2583 {0xaa, 0x20, 0x0080}, 2584 {0xaa, 0x22, 0x0080}, 2585 {0xaa, 0x24, 0x0080}, 2586 {0xaa, 0x26, 0x0080}, 2587 {0xaa, 0x00, 0x0084}, 2588 {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, 2589 {0xa0, 0x0d, ZC3XX_R0A4_EXPOSURETIMELOW}, 2590 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 2591 {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, 2592 {0xa0, 0x1a, ZC3XX_R192_EXPOSURELIMITLOW}, 2593 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 2594 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 2595 {0xa0, 0x4b, ZC3XX_R197_ANTIFLICKERLOW}, 2596 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 2597 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 2598 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 2599 {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, 2600 {0xa0, 0xc8, ZC3XX_R01D_HSYNC_0}, 2601 {0xa0, 0xd8, ZC3XX_R01E_HSYNC_1}, 2602 {0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, 2603 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 2604 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 2605 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 2606 {0xa1, 0x01, 0x0180}, 2607 {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 2608 {0xa0, 0x40, ZC3XX_R116_RGAIN}, 2609 {0xa0, 0x40, ZC3XX_R117_GGAIN}, 2610 {0xa0, 0x40, ZC3XX_R118_BGAIN}, 2611 {} 2612 }; 2613 static const struct usb_action icm105a_50HZScale[] = { 2614 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 2615 {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ 2616 {0xaa, 0x0c, 0x0020}, /* 00,0c,20,aa */ 2617 {0xaa, 0x0e, 0x000e}, /* 00,0e,0e,aa */ 2618 {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */ 2619 {0xaa, 0x1c, 0x000d}, /* 00,1c,0d,aa */ 2620 {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 2621 {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */ 2622 {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */ 2623 {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */ 2624 {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */ 2625 {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */ 2626 {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */ 2627 {0xa0, 0x0d, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,0d,cc */ 2628 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 2629 {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 2630 {0xa0, 0x1a, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,1a,cc */ 2631 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 2632 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 2633 {0xa0, 0x4b, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,4b,cc */ 2634 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 2635 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 2636 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 2637 {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */ 2638 {0xa0, 0xc8, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c8,cc */ 2639 {0xa0, 0xd8, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d8,cc */ 2640 {0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ea,cc */ 2641 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 2642 {} 2643 }; 2644 static const struct usb_action icm105a_50HZ[] = { 2645 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 2646 {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ 2647 {0xaa, 0x0c, 0x008c}, /* 00,0c,8c,aa */ 2648 {0xaa, 0x0e, 0x0095}, /* 00,0e,95,aa */ 2649 {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */ 2650 {0xaa, 0x1c, 0x0094}, /* 00,1c,94,aa */ 2651 {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 2652 {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */ 2653 {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */ 2654 {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */ 2655 {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */ 2656 {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */ 2657 {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */ 2658 {0xa0, 0x94, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,94,cc */ 2659 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 2660 {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 2661 {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,20,cc */ 2662 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 2663 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 2664 {0xa0, 0x84, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,84,cc */ 2665 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 2666 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 2667 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 2668 {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */ 2669 {0xa0, 0xe3, ZC3XX_R01D_HSYNC_0}, /* 00,1d,e3,cc */ 2670 {0xa0, 0xec, ZC3XX_R01E_HSYNC_1}, /* 00,1e,ec,cc */ 2671 {0xa0, 0xf5, ZC3XX_R01F_HSYNC_2}, /* 00,1f,f5,cc */ 2672 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 2673 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, /* 01,a7,00,cc */ 2674 {0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,c0,cc */ 2675 {} 2676 }; 2677 static const struct usb_action icm105a_60HZScale[] = { 2678 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 2679 {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ 2680 {0xaa, 0x0c, 0x0004}, /* 00,0c,04,aa */ 2681 {0xaa, 0x0e, 0x000d}, /* 00,0e,0d,aa */ 2682 {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */ 2683 {0xaa, 0x1c, 0x0008}, /* 00,1c,08,aa */ 2684 {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 2685 {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */ 2686 {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */ 2687 {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */ 2688 {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */ 2689 {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */ 2690 {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */ 2691 {0xa0, 0x08, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,08,cc */ 2692 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 2693 {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 2694 {0xa0, 0x10, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,10,cc */ 2695 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 2696 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 2697 {0xa0, 0x41, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,41,cc */ 2698 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 2699 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 2700 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 2701 {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */ 2702 {0xa0, 0xc1, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c1,cc */ 2703 {0xa0, 0xd4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d4,cc */ 2704 {0xa0, 0xe8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e8,cc */ 2705 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 2706 {} 2707 }; 2708 static const struct usb_action icm105a_60HZ[] = { 2709 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 2710 {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ 2711 {0xaa, 0x0c, 0x0008}, /* 00,0c,08,aa */ 2712 {0xaa, 0x0e, 0x0086}, /* 00,0e,86,aa */ 2713 {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */ 2714 {0xaa, 0x1c, 0x0085}, /* 00,1c,85,aa */ 2715 {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 2716 {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */ 2717 {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */ 2718 {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */ 2719 {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */ 2720 {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */ 2721 {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */ 2722 {0xa0, 0x85, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,85,cc */ 2723 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 2724 {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 2725 {0xa0, 0x08, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,08,cc */ 2726 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 2727 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 2728 {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,81,cc */ 2729 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 2730 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 2731 {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 2732 {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */ 2733 {0xa0, 0xc2, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c2,cc */ 2734 {0xa0, 0xd6, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d6,cc */ 2735 {0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ea,cc */ 2736 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 2737 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, /* 01,a7,00,cc */ 2738 {0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,c0,cc */ 2739 {} 2740 }; 2741 static const struct usb_action icm105a_NoFlikerScale[] = { 2742 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 2743 {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ 2744 {0xaa, 0x0c, 0x0004}, /* 00,0c,04,aa */ 2745 {0xaa, 0x0e, 0x000d}, /* 00,0e,0d,aa */ 2746 {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */ 2747 {0xaa, 0x1c, 0x0000}, /* 00,1c,00,aa */ 2748 {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 2749 {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */ 2750 {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */ 2751 {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */ 2752 {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */ 2753 {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */ 2754 {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */ 2755 {0xa0, 0x00, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,00,cc */ 2756 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 2757 {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 2758 {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,20,cc */ 2759 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 2760 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 2761 {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 2762 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 2763 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 2764 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 2765 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 2766 {0xa0, 0xc1, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c1,cc */ 2767 {0xa0, 0xd4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d4,cc */ 2768 {0xa0, 0xe8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e8,cc */ 2769 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 2770 {} 2771 }; 2772 static const struct usb_action icm105a_NoFliker[] = { 2773 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 2774 {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ 2775 {0xaa, 0x0c, 0x0004}, /* 00,0c,04,aa */ 2776 {0xaa, 0x0e, 0x0081}, /* 00,0e,81,aa */ 2777 {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */ 2778 {0xaa, 0x1c, 0x0080}, /* 00,1c,80,aa */ 2779 {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 2780 {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */ 2781 {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */ 2782 {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */ 2783 {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */ 2784 {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */ 2785 {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */ 2786 {0xa0, 0x80, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,80,cc */ 2787 {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 2788 {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 2789 {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,20,cc */ 2790 {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 2791 {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 2792 {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 2793 {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 2794 {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 2795 {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 2796 {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 2797 {0xa0, 0xc1, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c1,cc */ 2798 {0xa0, 0xd4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d4,cc */ 2799 {0xa0, 0xe8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e8,cc */ 2800 {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 2801 {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, /* 01,a7,00,cc */ 2802 {0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,c0,cc */ 2803 {} 2804 }; 2805 2806 static const struct usb_action mc501cb_Initial[] = { 2807 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 2808 {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, /* 00,02,00,cc */ 2809 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 2810 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 2811 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 2812 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 2813 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 2814 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 2815 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 2816 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 2817 {0xa0, 0xd8, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d8,cc */ 2818 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 2819 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 2820 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 2821 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 2822 {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, /* 00,9b,01,cc */ 2823 {0xa0, 0xde, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,de,cc */ 2824 {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, /* 00,9d,02,cc */ 2825 {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */ 2826 {0xa0, 0x33, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,33,cc */ 2827 {0xa0, 0x34, ZC3XX_R087_EXPTIMEMID}, /* 00,87,34,cc */ 2828 {0xa0, 0x35, ZC3XX_R088_EXPTIMELOW}, /* 00,88,35,cc */ 2829 {0xa0, 0xb0, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,b0,cc */ 2830 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 2831 {0xaa, 0x01, 0x0001}, /* 00,01,01,aa */ 2832 {0xaa, 0x01, 0x0003}, /* 00,01,03,aa */ 2833 {0xaa, 0x01, 0x0001}, /* 00,01,01,aa */ 2834 {0xaa, 0x03, 0x0000}, /* 00,03,00,aa */ 2835 {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 2836 {0xaa, 0x11, 0x0080}, /* 00,11,80,aa */ 2837 {0xaa, 0x12, 0x0000}, /* 00,12,00,aa */ 2838 {0xaa, 0x13, 0x0000}, /* 00,13,00,aa */ 2839 {0xaa, 0x14, 0x0000}, /* 00,14,00,aa */ 2840 {0xaa, 0x15, 0x0000}, /* 00,15,00,aa */ 2841 {0xaa, 0x16, 0x0000}, /* 00,16,00,aa */ 2842 {0xaa, 0x17, 0x0001}, /* 00,17,01,aa */ 2843 {0xaa, 0x18, 0x00de}, /* 00,18,de,aa */ 2844 {0xaa, 0x19, 0x0002}, /* 00,19,02,aa */ 2845 {0xaa, 0x1a, 0x0086}, /* 00,1a,86,aa */ 2846 {0xaa, 0x20, 0x00a8}, /* 00,20,a8,aa */ 2847 {0xaa, 0x22, 0x0000}, /* 00,22,00,aa */ 2848 {0xaa, 0x23, 0x0000}, /* 00,23,00,aa */ 2849 {0xaa, 0x24, 0x0000}, /* 00,24,00,aa */ 2850 {0xaa, 0x40, 0x0033}, /* 00,40,33,aa */ 2851 {0xaa, 0x41, 0x0077}, /* 00,41,77,aa */ 2852 {0xaa, 0x42, 0x0053}, /* 00,42,53,aa */ 2853 {0xaa, 0x43, 0x00b0}, /* 00,43,b0,aa */ 2854 {0xaa, 0x4b, 0x0001}, /* 00,4b,01,aa */ 2855 {0xaa, 0x72, 0x0020}, /* 00,72,20,aa */ 2856 {0xaa, 0x73, 0x0000}, /* 00,73,00,aa */ 2857 {0xaa, 0x80, 0x0000}, /* 00,80,00,aa */ 2858 {0xaa, 0x85, 0x0050}, /* 00,85,50,aa */ 2859 {0xaa, 0x91, 0x0070}, /* 00,91,70,aa */ 2860 {0xaa, 0x92, 0x0072}, /* 00,92,72,aa */ 2861 {0xaa, 0x03, 0x0001}, /* 00,03,01,aa */ 2862 {0xaa, 0x10, 0x00a0}, /* 00,10,a0,aa */ 2863 {0xaa, 0x11, 0x0001}, /* 00,11,01,aa */ 2864 {0xaa, 0x30, 0x0000}, /* 00,30,00,aa */ 2865 {0xaa, 0x60, 0x0000}, /* 00,60,00,aa */ 2866 {0xaa, 0xa0, ZC3XX_R01A_LASTFRAMESTATE}, /* 00,a0,1a,aa */ 2867 {0xaa, 0xa1, 0x0000}, /* 00,a1,00,aa */ 2868 {0xaa, 0xa2, 0x003f}, /* 00,a2,3f,aa */ 2869 {0xaa, 0xa3, 0x0028}, /* 00,a3,28,aa */ 2870 {0xaa, 0xa4, 0x0010}, /* 00,a4,10,aa */ 2871 {0xaa, 0xa5, 0x0020}, /* 00,a5,20,aa */ 2872 {0xaa, 0xb1, 0x0044}, /* 00,b1,44,aa */ 2873 {0xaa, 0xd0, 0x0001}, /* 00,d0,01,aa */ 2874 {0xaa, 0xd1, 0x0085}, /* 00,d1,85,aa */ 2875 {0xaa, 0xd2, 0x0080}, /* 00,d2,80,aa */ 2876 {0xaa, 0xd3, 0x0080}, /* 00,d3,80,aa */ 2877 {0xaa, 0xd4, 0x0080}, /* 00,d4,80,aa */ 2878 {0xaa, 0xd5, 0x0080}, /* 00,d5,80,aa */ 2879 {0xaa, 0xc0, 0x00c3}, /* 00,c0,c3,aa */ 2880 {0xaa, 0xc2, 0x0044}, /* 00,c2,44,aa */ 2881 {0xaa, 0xc4, 0x0040}, /* 00,c4,40,aa */ 2882 {0xaa, 0xc5, 0x0020}, /* 00,c5,20,aa */ 2883 {0xaa, 0xc6, 0x0008}, /* 00,c6,08,aa */ 2884 {0xaa, 0x03, 0x0004}, /* 00,03,04,aa */ 2885 {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 2886 {0xaa, 0x40, 0x0030}, /* 00,40,30,aa */ 2887 {0xaa, 0x41, 0x0020}, /* 00,41,20,aa */ 2888 {0xaa, 0x42, 0x002d}, /* 00,42,2d,aa */ 2889 {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 2890 {0xaa, 0x1c, 0x0050}, /* 00,1C,50,aa */ 2891 {0xaa, 0x11, 0x0081}, /* 00,11,81,aa */ 2892 {0xaa, 0x3b, 0x001d}, /* 00,3b,1D,aa */ 2893 {0xaa, 0x3c, 0x004c}, /* 00,3c,4C,aa */ 2894 {0xaa, 0x3d, 0x0018}, /* 00,3d,18,aa */ 2895 {0xaa, 0x3e, 0x006a}, /* 00,3e,6A,aa */ 2896 {0xaa, 0x01, 0x0000}, /* 00,01,00,aa */ 2897 {0xaa, 0x52, 0x00ff}, /* 00,52,FF,aa */ 2898 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 2899 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 2900 {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */ 2901 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 2902 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 2903 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 2904 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 2905 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 2906 {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 2907 {0xaa, 0x03, 0x0002}, /* 00,03,02,aa */ 2908 {0xaa, 0x51, 0x0027}, /* 00,51,27,aa */ 2909 {0xaa, 0x52, 0x0020}, /* 00,52,20,aa */ 2910 {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 2911 {0xaa, 0x50, 0x0010}, /* 00,50,10,aa */ 2912 {0xaa, 0x51, 0x0010}, /* 00,51,10,aa */ 2913 {0xaa, 0x54, 0x0010}, /* 00,54,10,aa */ 2914 {0xaa, 0x55, 0x0010}, /* 00,55,10,aa */ 2915 {0xa0, 0xf0, 0x0199}, /* 01,99,F0,cc */ 2916 {0xa0, 0x80, 0x019a}, /* 01,9A,80,cc */ 2917 2918 {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 2919 {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 2920 {0xaa, 0x36, 0x001d}, /* 00,36,1D,aa */ 2921 {0xaa, 0x37, 0x004c}, /* 00,37,4C,aa */ 2922 {0xaa, 0x3b, 0x001d}, /* 00,3B,1D,aa */ 2923 {} 2924 }; 2925 2926 static const struct usb_action mc501cb_InitialScale[] = { /* 320x240 */ 2927 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 2928 {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */ 2929 {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 2930 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 2931 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 2932 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 2933 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 2934 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 2935 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 2936 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 2937 {0xa0, 0xd0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d0,cc */ 2938 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 2939 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 2940 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 2941 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 2942 {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, /* 00,9b,01,cc */ 2943 {0xa0, 0xd8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,d8,cc */ 2944 {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, /* 00,9d,02,cc */ 2945 {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */ 2946 {0xa0, 0x33, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,33,cc */ 2947 {0xa0, 0x34, ZC3XX_R087_EXPTIMEMID}, /* 00,87,34,cc */ 2948 {0xa0, 0x35, ZC3XX_R088_EXPTIMELOW}, /* 00,88,35,cc */ 2949 {0xa0, 0xb0, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,b0,cc */ 2950 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 2951 {0xaa, 0x01, 0x0001}, /* 00,01,01,aa */ 2952 {0xaa, 0x01, 0x0003}, /* 00,01,03,aa */ 2953 {0xaa, 0x01, 0x0001}, /* 00,01,01,aa */ 2954 {0xaa, 0x03, 0x0000}, /* 00,03,00,aa */ 2955 {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 2956 {0xaa, 0x11, 0x0080}, /* 00,11,80,aa */ 2957 {0xaa, 0x12, 0x0000}, /* 00,12,00,aa */ 2958 {0xaa, 0x13, 0x0000}, /* 00,13,00,aa */ 2959 {0xaa, 0x14, 0x0000}, /* 00,14,00,aa */ 2960 {0xaa, 0x15, 0x0000}, /* 00,15,00,aa */ 2961 {0xaa, 0x16, 0x0000}, /* 00,16,00,aa */ 2962 {0xaa, 0x17, 0x0001}, /* 00,17,01,aa */ 2963 {0xaa, 0x18, 0x00d8}, /* 00,18,d8,aa */ 2964 {0xaa, 0x19, 0x0002}, /* 00,19,02,aa */ 2965 {0xaa, 0x1a, 0x0088}, /* 00,1a,88,aa */ 2966 {0xaa, 0x20, 0x00a8}, /* 00,20,a8,aa */ 2967 {0xaa, 0x22, 0x0000}, /* 00,22,00,aa */ 2968 {0xaa, 0x23, 0x0000}, /* 00,23,00,aa */ 2969 {0xaa, 0x24, 0x0000}, /* 00,24,00,aa */ 2970 {0xaa, 0x40, 0x0033}, /* 00,40,33,aa */ 2971 {0xaa, 0x41, 0x0077}, /* 00,41,77,aa */ 2972 {0xaa, 0x42, 0x0053}, /* 00,42,53,aa */ 2973 {0xaa, 0x43, 0x00b0}, /* 00,43,b0,aa */ 2974 {0xaa, 0x4b, 0x0001}, /* 00,4b,01,aa */ 2975 {0xaa, 0x72, 0x0020}, /* 00,72,20,aa */ 2976 {0xaa, 0x73, 0x0000}, /* 00,73,00,aa */ 2977 {0xaa, 0x80, 0x0000}, /* 00,80,00,aa */ 2978 {0xaa, 0x85, 0x0050}, /* 00,85,50,aa */ 2979 {0xaa, 0x91, 0x0070}, /* 00,91,70,aa */ 2980 {0xaa, 0x92, 0x0072}, /* 00,92,72,aa */ 2981 {0xaa, 0x03, 0x0001}, /* 00,03,01,aa */ 2982 {0xaa, 0x10, 0x00a0}, /* 00,10,a0,aa */ 2983 {0xaa, 0x11, 0x0001}, /* 00,11,01,aa */ 2984 {0xaa, 0x30, 0x0000}, /* 00,30,00,aa */ 2985 {0xaa, 0x60, 0x0000}, /* 00,60,00,aa */ 2986 {0xaa, 0xa0, ZC3XX_R01A_LASTFRAMESTATE}, /* 00,a0,1a,aa */ 2987 {0xaa, 0xa1, 0x0000}, /* 00,a1,00,aa */ 2988 {0xaa, 0xa2, 0x003f}, /* 00,a2,3f,aa */ 2989 {0xaa, 0xa3, 0x0028}, /* 00,a3,28,aa */ 2990 {0xaa, 0xa4, 0x0010}, /* 00,a4,10,aa */ 2991 {0xaa, 0xa5, 0x0020}, /* 00,a5,20,aa */ 2992 {0xaa, 0xb1, 0x0044}, /* 00,b1,44,aa */ 2993 {0xaa, 0xd0, 0x0001}, /* 00,d0,01,aa */ 2994 {0xaa, 0xd1, 0x0085}, /* 00,d1,85,aa */ 2995 {0xaa, 0xd2, 0x0080}, /* 00,d2,80,aa */ 2996 {0xaa, 0xd3, 0x0080}, /* 00,d3,80,aa */ 2997 {0xaa, 0xd4, 0x0080}, /* 00,d4,80,aa */ 2998 {0xaa, 0xd5, 0x0080}, /* 00,d5,80,aa */ 2999 {0xaa, 0xc0, 0x00c3}, /* 00,c0,c3,aa */ 3000 {0xaa, 0xc2, 0x0044}, /* 00,c2,44,aa */ 3001 {0xaa, 0xc4, 0x0040}, /* 00,c4,40,aa */ 3002 {0xaa, 0xc5, 0x0020}, /* 00,c5,20,aa */ 3003 {0xaa, 0xc6, 0x0008}, /* 00,c6,08,aa */ 3004 {0xaa, 0x03, 0x0004}, /* 00,03,04,aa */ 3005 {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 3006 {0xaa, 0x40, 0x0030}, /* 00,40,30,aa */ 3007 {0xaa, 0x41, 0x0020}, /* 00,41,20,aa */ 3008 {0xaa, 0x42, 0x002d}, /* 00,42,2d,aa */ 3009 {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 3010 {0xaa, 0x1c, 0x0050}, /* 00,1c,50,aa */ 3011 {0xaa, 0x11, 0x0081}, /* 00,11,81,aa */ 3012 {0xaa, 0x3b, 0x003a}, /* 00,3b,3A,aa */ 3013 {0xaa, 0x3c, 0x0098}, /* 00,3c,98,aa */ 3014 {0xaa, 0x3d, 0x0030}, /* 00,3d,30,aa */ 3015 {0xaa, 0x3e, 0x00d4}, /* 00,3E,D4,aa */ 3016 {0xaa, 0x01, 0x0000}, /* 00,01,00,aa */ 3017 {0xaa, 0x52, 0x00ff}, /* 00,52,FF,aa */ 3018 {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 3019 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 3020 {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */ 3021 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 3022 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 3023 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 3024 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 3025 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 3026 {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 3027 {0xaa, 0x03, 0x0002}, /* 00,03,02,aa */ 3028 {0xaa, 0x51, 0x004e}, /* 00,51,4E,aa */ 3029 {0xaa, 0x52, 0x0041}, /* 00,52,41,aa */ 3030 {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 3031 {0xaa, 0x50, 0x0010}, /* 00,50,10,aa */ 3032 {0xaa, 0x51, 0x0010}, /* 00,51,10,aa */ 3033 {0xaa, 0x54, 0x0010}, /* 00,54,10,aa */ 3034 {0xaa, 0x55, 0x0010}, /* 00,55,10,aa */ 3035 {0xa0, 0xf0, 0x0199}, /* 01,99,F0,cc */ 3036 {0xa0, 0x80, 0x019a}, /* 01,9A,80,cc */ 3037 {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 3038 {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 3039 {0xaa, 0x36, 0x001d}, /* 00,36,1D,aa */ 3040 {0xaa, 0x37, 0x004c}, /* 00,37,4C,aa */ 3041 {0xaa, 0x3b, 0x001d}, /* 00,3B,1D,aa */ 3042 {} 3043 }; 3044 3045 static const struct usb_action mc501cb_50HZScale[] = { 3046 {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 3047 {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 3048 {0xaa, 0x36, 0x001d}, /* 00,36,1D,aa */ 3049 {0xaa, 0x37, 0x004c}, /* 00,37,4C,aa */ 3050 {0xaa, 0x3b, 0x001d}, /* 00,3B,1D,aa */ 3051 {0xaa, 0x3c, 0x004c}, /* 00,3C,4C,aa */ 3052 {0xaa, 0x3d, 0x001d}, /* 00,3D,1D,aa */ 3053 {0xaa, 0x3e, 0x004c}, /* 00,3E,4C,aa */ 3054 {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 3055 {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 3056 {0xaa, 0x36, 0x003a}, /* 00,36,3A,aa */ 3057 {0xaa, 0x37, 0x0098}, /* 00,37,98,aa */ 3058 {0xaa, 0x3b, 0x003a}, /* 00,3B,3A,aa */ 3059 {} 3060 }; 3061 3062 static const struct usb_action mc501cb_50HZ[] = { 3063 {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 3064 {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 3065 {0xaa, 0x36, 0x003a}, /* 00,36,3A,aa */ 3066 {0xaa, 0x37, 0x0098}, /* 00,37,98,aa */ 3067 {0xaa, 0x3b, 0x003a}, /* 00,3B,3A,aa */ 3068 {0xaa, 0x3c, 0x0098}, /* 00,3C,98,aa */ 3069 {0xaa, 0x3d, 0x003a}, /* 00,3D,3A,aa */ 3070 {0xaa, 0x3e, 0x0098}, /* 00,3E,98,aa */ 3071 {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 3072 {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 3073 {0xaa, 0x36, 0x0018}, /* 00,36,18,aa */ 3074 {0xaa, 0x37, 0x006a}, /* 00,37,6A,aa */ 3075 {0xaa, 0x3d, 0x0018}, /* 00,3D,18,aa */ 3076 {} 3077 }; 3078 3079 static const struct usb_action mc501cb_60HZScale[] = { 3080 {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 3081 {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 3082 {0xaa, 0x36, 0x0018}, /* 00,36,18,aa */ 3083 {0xaa, 0x37, 0x006a}, /* 00,37,6A,aa */ 3084 {0xaa, 0x3d, 0x0018}, /* 00,3D,18,aa */ 3085 {0xaa, 0x3e, 0x006a}, /* 00,3E,6A,aa */ 3086 {0xaa, 0x3b, 0x0018}, /* 00,3B,18,aa */ 3087 {0xaa, 0x3c, 0x006a}, /* 00,3C,6A,aa */ 3088 {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 3089 {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 3090 {0xaa, 0x36, 0x0030}, /* 00,36,30,aa */ 3091 {0xaa, 0x37, 0x00d4}, /* 00,37,D4,aa */ 3092 {0xaa, 0x3d, 0x0030}, /* 00,3D,30,aa */ 3093 {} 3094 }; 3095 3096 static const struct usb_action mc501cb_60HZ[] = { 3097 {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 3098 {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 3099 {0xaa, 0x36, 0x0030}, /* 00,36,30,aa */ 3100 {0xaa, 0x37, 0x00d4}, /* 00,37,D4,aa */ 3101 {0xaa, 0x3d, 0x0030}, /* 00,3D,30,aa */ 3102 {0xaa, 0x3e, 0x00d4}, /* 00,3E,D4,aa */ 3103 {0xaa, 0x3b, 0x0030}, /* 00,3B,30,aa */ 3104 {0xaa, 0x3c, 0x00d4}, /* 00,3C,D4,aa */ 3105 {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 3106 {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 3107 {0xaa, 0x36, 0x0018}, /* 00,36,18,aa */ 3108 {0xaa, 0x37, 0x006a}, /* 00,37,6A,aa */ 3109 {0xaa, 0x3d, 0x0018}, /* 00,3D,18,aa */ 3110 {} 3111 }; 3112 3113 static const struct usb_action mc501cb_NoFlikerScale[] = { 3114 {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 3115 {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 3116 {0xaa, 0x36, 0x0018}, /* 00,36,18,aa */ 3117 {0xaa, 0x37, 0x006a}, /* 00,37,6A,aa */ 3118 {0xaa, 0x3d, 0x0018}, /* 00,3D,18,aa */ 3119 {0xaa, 0x3e, 0x006a}, /* 00,3E,6A,aa */ 3120 {0xaa, 0x3b, 0x0018}, /* 00,3B,18,aa */ 3121 {0xaa, 0x3c, 0x006a}, /* 00,3C,6A,aa */ 3122 {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 3123 {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 3124 {0xaa, 0x36, 0x0030}, /* 00,36,30,aa */ 3125 {0xaa, 0x37, 0x00d4}, /* 00,37,D4,aa */ 3126 {0xaa, 0x3d, 0x0030}, /* 00,3D,30,aa */ 3127 {} 3128 }; 3129 3130 static const struct usb_action mc501cb_NoFliker[] = { 3131 {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 3132 {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 3133 {0xaa, 0x36, 0x0030}, /* 00,36,30,aa */ 3134 {0xaa, 0x37, 0x00d4}, /* 00,37,D4,aa */ 3135 {0xaa, 0x3d, 0x0030}, /* 00,3D,30,aa */ 3136 {0xaa, 0x3e, 0x00d4}, /* 00,3E,D4,aa */ 3137 {0xaa, 0x3b, 0x0030}, /* 00,3B,30,aa */ 3138 {0xaa, 0x3c, 0x00d4}, /* 00,3C,D4,aa */ 3139 {} 3140 }; 3141 3142 /* from zs211.inf */ 3143 static const struct usb_action ov7620_Initial[] = { /* 640x480 */ 3144 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 3145 {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, /* 00,02,40,cc */ 3146 {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING}, /* 00,08,00,cc */ 3147 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 3148 {0xa0, 0x06, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,06,cc */ 3149 {0xa0, 0x02, ZC3XX_R083_RGAINADDR}, /* 00,83,02,cc */ 3150 {0xa0, 0x01, ZC3XX_R085_BGAINADDR}, /* 00,85,01,cc */ 3151 {0xa0, 0x80, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,80,cc */ 3152 {0xa0, 0x81, ZC3XX_R087_EXPTIMEMID}, /* 00,87,81,cc */ 3153 {0xa0, 0x10, ZC3XX_R088_EXPTIMELOW}, /* 00,88,10,cc */ 3154 {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,a1,cc */ 3155 {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, /* 00,8d,08,cc */ 3156 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 3157 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 3158 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 3159 {0xa0, 0xd8, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d8,cc */ 3160 {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 3161 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 3162 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 3163 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 3164 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 3165 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 3166 {0xa0, 0xde, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,de,cc */ 3167 {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */ 3168 {0xaa, 0x12, 0x0088}, /* 00,12,88,aa */ 3169 {0xaa, 0x12, 0x0048}, /* 00,12,48,aa */ 3170 {0xaa, 0x75, 0x008a}, /* 00,75,8a,aa */ 3171 {0xaa, 0x13, 0x00a3}, /* 00,13,a3,aa */ 3172 {0xaa, 0x04, 0x0000}, /* 00,04,00,aa */ 3173 {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */ 3174 {0xaa, 0x14, 0x0000}, /* 00,14,00,aa */ 3175 {0xaa, 0x15, 0x0004}, /* 00,15,04,aa */ 3176 {0xaa, 0x17, 0x0018}, /* 00,17,18,aa */ 3177 {0xaa, 0x18, 0x00ba}, /* 00,18,ba,aa */ 3178 {0xaa, 0x19, 0x0002}, /* 00,19,02,aa */ 3179 {0xaa, 0x1a, 0x00f1}, /* 00,1a,f1,aa */ 3180 {0xaa, 0x20, 0x0040}, /* 00,20,40,aa */ 3181 {0xaa, 0x24, 0x0088}, /* 00,24,88,aa */ 3182 {0xaa, 0x25, 0x0078}, /* 00,25,78,aa */ 3183 {0xaa, 0x27, 0x00f6}, /* 00,27,f6,aa */ 3184 {0xaa, 0x28, 0x00a0}, /* 00,28,a0,aa */ 3185 {0xaa, 0x21, 0x0000}, /* 00,21,00,aa */ 3186 {0xaa, 0x2a, 0x0083}, /* 00,2a,83,aa */ 3187 {0xaa, 0x2b, 0x0096}, /* 00,2b,96,aa */ 3188 {0xaa, 0x2d, 0x0005}, /* 00,2d,05,aa */ 3189 {0xaa, 0x74, 0x0020}, /* 00,74,20,aa */ 3190 {0xaa, 0x61, 0x0068}, /* 00,61,68,aa */ 3191 {0xaa, 0x64, 0x0088}, /* 00,64,88,aa */ 3192 {0xaa, 0x00, 0x0000}, /* 00,00,00,aa */ 3193 {0xaa, 0x06, 0x0080}, /* 00,06,80,aa */ 3194 {0xaa, 0x01, 0x0090}, /* 00,01,90,aa */ 3195 {0xaa, 0x02, 0x0030}, /* 00,02,30,aa */ 3196 {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,77,cc */ 3197 {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 3198 {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 3199 {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 3200 {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */ 3201 {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 3202 {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 3203 {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 3204 {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 3205 {0xa0, 0x68, ZC3XX_R116_RGAIN}, /* 01,16,68,cc */ 3206 {0xa0, 0x52, ZC3XX_R118_BGAIN}, /* 01,18,52,cc */ 3207 {0xa0, 0x40, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,40,cc */ 3208 {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 3209 {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,50,cc */ 3210 {} 3211 }; 3212 static const struct usb_action ov7620_InitialScale[] = { /* 320x240 */ 3213 {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 3214 {0xa0, 0x50, ZC3XX_R002_CLOCKSELECT}, /* 00,02,50,cc */ 3215 {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,00,cc */ 3216 /* mx change? */ 3217 {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 3218 {0xa0, 0x06, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,06,cc */ 3219 {0xa0, 0x02, ZC3XX_R083_RGAINADDR}, /* 00,83,02,cc */ 3220 {0xa0, 0x01, ZC3XX_R085_BGAINADDR}, /* 00,85,01,cc */ 3221 {0xa0, 0x80, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,80,cc */ 3222 {0xa0, 0x81, ZC3XX_R087_EXPTIMEMID}, /* 00,87,81,cc */ 3223 {0xa0, 0x10, ZC3XX_R088_EXPTIMELOW}, /* 00,88,10,cc */ 3224 {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,a1,cc */ 3225 {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, /* 00,8d,08,cc */ 3226 {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 3227 {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 3228 {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 3229 {0xa0, 0xd0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d0,cc */ 3230 {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 3231 {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 3232 {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 3233 {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 3234 {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 3235 {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 3236 {0xa0, 0xd6, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,d6,cc */ 3237 /* OV7648 00,9c,d8,cc */ 3238 {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */ 3239 {0xaa, 0x12, 0x0088}, /* 00,12,88,aa */ 3240 {0xaa, 0x12, 0x0048}, /* 00,12,48,aa */ 3241 {0xaa, 0x75, 0x008a}, /* 00,75,8a,aa */ 3242 {0xaa, 0x13, 0x00a3}, /* 00,13,a3,aa */ 3243 {0xaa, 0x04, 0x0000}, /* 00,04,00,aa */ 3244 {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */ 3245 {0xaa, 0x14, 0x0000}, /* 00,14,00,aa */ 3246 {0xaa, 0x15, 0x0004}, /* 00,15,04,aa */ 3247 {0xaa, 0x24, 0x0088}, /* 00,24,88,aa */ 3248 {0xaa, 0x25, 0x0078}, /* 00,25,78,aa */ 3249 {0xaa, 0x17, 0x0018}, /* 00,17,18,aa */ 3250 {0xaa, 0x18, 0x00ba}, /* 00,18,ba,aa */ 3251 {0xaa, 0x19, 0x0002}, /* 00,19,02,aa */ 3252 {0xaa, 0x1a, 0x00f2}, /* 00,1a,f2,aa */ 3253 {0xaa, 0x20, 0x0040}, /* 00,20,40,aa */ 3254 {0xaa, 0x27, 0x00f6}, /* 00,27,f6,aa */ 3255 {0xaa, 0x28, 0x00a0}, /* 00,28