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