162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Z-Star/Vimicro zc301/zc302p/vc30x driver 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2009-2012 Jean-Francois Moine <http://moinejf.free.fr> 662306a36Sopenharmony_ci * Copyright (C) 2004 2005 2006 Michel Xhaard mxhaard@magic.fr 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <linux/input.h> 1262306a36Sopenharmony_ci#include "gspca.h" 1362306a36Sopenharmony_ci#include "jpeg.h" 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ciMODULE_AUTHOR("Jean-Francois Moine <http://moinejf.free.fr>, Serge A. Suchkov <Serge.A.S@tochka.ru>"); 1662306a36Sopenharmony_ciMODULE_DESCRIPTION("GSPCA ZC03xx/VC3xx USB Camera Driver"); 1762306a36Sopenharmony_ciMODULE_LICENSE("GPL"); 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_cistatic int force_sensor = -1; 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#define REG08_DEF 3 /* default JPEG compression (75%) */ 2262306a36Sopenharmony_ci#include "zc3xx-reg.h" 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci/* specific webcam descriptor */ 2562306a36Sopenharmony_cistruct sd { 2662306a36Sopenharmony_ci struct gspca_dev gspca_dev; /* !! must be the first item */ 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci struct { /* gamma/brightness/contrast control cluster */ 2962306a36Sopenharmony_ci struct v4l2_ctrl *gamma; 3062306a36Sopenharmony_ci struct v4l2_ctrl *brightness; 3162306a36Sopenharmony_ci struct v4l2_ctrl *contrast; 3262306a36Sopenharmony_ci }; 3362306a36Sopenharmony_ci struct { /* autogain/exposure control cluster */ 3462306a36Sopenharmony_ci struct v4l2_ctrl *autogain; 3562306a36Sopenharmony_ci struct v4l2_ctrl *exposure; 3662306a36Sopenharmony_ci }; 3762306a36Sopenharmony_ci struct v4l2_ctrl *plfreq; 3862306a36Sopenharmony_ci struct v4l2_ctrl *sharpness; 3962306a36Sopenharmony_ci struct v4l2_ctrl *jpegqual; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci struct work_struct work; 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci u8 reg08; /* webcam compression quality */ 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci u8 bridge; 4662306a36Sopenharmony_ci u8 sensor; /* Type of image sensor chip */ 4762306a36Sopenharmony_ci u16 chip_revision; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci u8 jpeg_hdr[JPEG_HDR_SZ]; 5062306a36Sopenharmony_ci}; 5162306a36Sopenharmony_cienum bridges { 5262306a36Sopenharmony_ci BRIDGE_ZC301, 5362306a36Sopenharmony_ci BRIDGE_ZC303, 5462306a36Sopenharmony_ci}; 5562306a36Sopenharmony_cienum sensors { 5662306a36Sopenharmony_ci SENSOR_ADCM2700, 5762306a36Sopenharmony_ci SENSOR_CS2102, 5862306a36Sopenharmony_ci SENSOR_CS2102K, 5962306a36Sopenharmony_ci SENSOR_GC0303, 6062306a36Sopenharmony_ci SENSOR_GC0305, 6162306a36Sopenharmony_ci SENSOR_HDCS2020, 6262306a36Sopenharmony_ci SENSOR_HV7131B, 6362306a36Sopenharmony_ci SENSOR_HV7131R, 6462306a36Sopenharmony_ci SENSOR_ICM105A, 6562306a36Sopenharmony_ci SENSOR_MC501CB, 6662306a36Sopenharmony_ci SENSOR_MT9V111_1, /* (mi360soc) zc301 */ 6762306a36Sopenharmony_ci SENSOR_MT9V111_3, /* (mi360soc) zc303 */ 6862306a36Sopenharmony_ci SENSOR_OV7620, /* OV7648 - same values */ 6962306a36Sopenharmony_ci SENSOR_OV7630C, 7062306a36Sopenharmony_ci SENSOR_PAS106, 7162306a36Sopenharmony_ci SENSOR_PAS202B, 7262306a36Sopenharmony_ci SENSOR_PB0330, 7362306a36Sopenharmony_ci SENSOR_PO2030, 7462306a36Sopenharmony_ci SENSOR_TAS5130C, 7562306a36Sopenharmony_ci SENSOR_MAX 7662306a36Sopenharmony_ci}; 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_cistatic const struct v4l2_pix_format vga_mode[] = { 7962306a36Sopenharmony_ci {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 8062306a36Sopenharmony_ci .bytesperline = 320, 8162306a36Sopenharmony_ci .sizeimage = 320 * 240 * 3 / 8 + 590, 8262306a36Sopenharmony_ci .colorspace = V4L2_COLORSPACE_JPEG, 8362306a36Sopenharmony_ci .priv = 1}, 8462306a36Sopenharmony_ci {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 8562306a36Sopenharmony_ci .bytesperline = 640, 8662306a36Sopenharmony_ci .sizeimage = 640 * 480 * 3 / 8 + 590, 8762306a36Sopenharmony_ci .colorspace = V4L2_COLORSPACE_JPEG, 8862306a36Sopenharmony_ci .priv = 0}, 8962306a36Sopenharmony_ci}; 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_cistatic const struct v4l2_pix_format broken_vga_mode[] = { 9262306a36Sopenharmony_ci {320, 232, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 9362306a36Sopenharmony_ci .bytesperline = 320, 9462306a36Sopenharmony_ci .sizeimage = 320 * 232 * 4 / 8 + 590, 9562306a36Sopenharmony_ci .colorspace = V4L2_COLORSPACE_JPEG, 9662306a36Sopenharmony_ci .priv = 1}, 9762306a36Sopenharmony_ci {640, 472, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 9862306a36Sopenharmony_ci .bytesperline = 640, 9962306a36Sopenharmony_ci .sizeimage = 640 * 472 * 3 / 8 + 590, 10062306a36Sopenharmony_ci .colorspace = V4L2_COLORSPACE_JPEG, 10162306a36Sopenharmony_ci .priv = 0}, 10262306a36Sopenharmony_ci}; 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_cistatic const struct v4l2_pix_format sif_mode[] = { 10562306a36Sopenharmony_ci {176, 144, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 10662306a36Sopenharmony_ci .bytesperline = 176, 10762306a36Sopenharmony_ci .sizeimage = 176 * 144 * 3 / 8 + 590, 10862306a36Sopenharmony_ci .colorspace = V4L2_COLORSPACE_JPEG, 10962306a36Sopenharmony_ci .priv = 1}, 11062306a36Sopenharmony_ci {352, 288, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 11162306a36Sopenharmony_ci .bytesperline = 352, 11262306a36Sopenharmony_ci .sizeimage = 352 * 288 * 3 / 8 + 590, 11362306a36Sopenharmony_ci .colorspace = V4L2_COLORSPACE_JPEG, 11462306a36Sopenharmony_ci .priv = 0}, 11562306a36Sopenharmony_ci}; 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci/* 11862306a36Sopenharmony_ci * Bridge reg08 bits 1-2 -> JPEG quality conversion table. Note the highest 11962306a36Sopenharmony_ci * quality setting is not usable as USB 1 does not have enough bandwidth. 12062306a36Sopenharmony_ci */ 12162306a36Sopenharmony_cistatic u8 jpeg_qual[] = {50, 75, 87, /* 94 */}; 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci/* usb exchanges */ 12462306a36Sopenharmony_cistruct usb_action { 12562306a36Sopenharmony_ci u8 req; 12662306a36Sopenharmony_ci u8 val; 12762306a36Sopenharmony_ci u16 idx; 12862306a36Sopenharmony_ci}; 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_cistatic const struct usb_action adcm2700_Initial[] = { 13162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 13262306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R002_CLOCKSELECT}, /* 00,02,04,cc */ 13362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 13462306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 13562306a36Sopenharmony_ci {0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,d3,cc */ 13662306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 13762306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 13862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 13962306a36Sopenharmony_ci {0xa0, 0xd8, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d8,cc */ 14062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 14162306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 14262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 14362306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 14462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 14562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 14662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 14762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 14862306a36Sopenharmony_ci {0xa0, 0xde, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,de,cc */ 14962306a36Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */ 15062306a36Sopenharmony_ci {0xbb, 0x00, 0x0400}, /* 04,00,00,bb */ 15162306a36Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 15262306a36Sopenharmony_ci {0xbb, 0x0f, 0x140f}, /* 14,0f,0f,bb */ 15362306a36Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */ 15462306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 15562306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 15662306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 15762306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 15862306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 15962306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 16062306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R116_RGAIN}, /* 01,16,58,cc */ 16162306a36Sopenharmony_ci {0xa0, 0x5a, ZC3XX_R118_BGAIN}, /* 01,18,5a,cc */ 16262306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 16362306a36Sopenharmony_ci {0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,d3,cc */ 16462306a36Sopenharmony_ci {0xbb, 0x00, 0x0408}, /* 04,00,08,bb */ 16562306a36Sopenharmony_ci {0xdd, 0x00, 0x0200}, /* 00,02,00,dd */ 16662306a36Sopenharmony_ci {0xbb, 0x00, 0x0400}, /* 04,00,00,bb */ 16762306a36Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 16862306a36Sopenharmony_ci {0xbb, 0x0f, 0x140f}, /* 14,0f,0f,bb */ 16962306a36Sopenharmony_ci {0xbb, 0xe0, 0x0c2e}, /* 0c,e0,2e,bb */ 17062306a36Sopenharmony_ci {0xbb, 0x01, 0x2000}, /* 20,01,00,bb */ 17162306a36Sopenharmony_ci {0xbb, 0x96, 0x2400}, /* 24,96,00,bb */ 17262306a36Sopenharmony_ci {0xbb, 0x06, 0x1006}, /* 10,06,06,bb */ 17362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 17462306a36Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 17562306a36Sopenharmony_ci {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 17662306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 17762306a36Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 17862306a36Sopenharmony_ci {0xbb, 0x5f, 0x2090}, /* 20,5f,90,bb */ 17962306a36Sopenharmony_ci {0xbb, 0x01, 0x8000}, /* 80,01,00,bb */ 18062306a36Sopenharmony_ci {0xbb, 0x09, 0x8400}, /* 84,09,00,bb */ 18162306a36Sopenharmony_ci {0xbb, 0x86, 0x0002}, /* 00,86,02,bb */ 18262306a36Sopenharmony_ci {0xbb, 0xe6, 0x0401}, /* 04,e6,01,bb */ 18362306a36Sopenharmony_ci {0xbb, 0x86, 0x0802}, /* 08,86,02,bb */ 18462306a36Sopenharmony_ci {0xbb, 0xe6, 0x0c01}, /* 0c,e6,01,bb */ 18562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 18662306a36Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 18762306a36Sopenharmony_ci {0xaa, 0xfe, 0x0000}, /* 00,fe,00,aa */ 18862306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 18962306a36Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 19062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 19162306a36Sopenharmony_ci {0xaa, 0xfe, 0x0020}, /* 00,fe,20,aa */ 19262306a36Sopenharmony_ci/*mswin+*/ 19362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, 19462306a36Sopenharmony_ci {0xaa, 0xfe, 0x0002}, 19562306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 19662306a36Sopenharmony_ci {0xaa, 0xb4, 0xcd37}, 19762306a36Sopenharmony_ci {0xaa, 0xa4, 0x0004}, 19862306a36Sopenharmony_ci {0xaa, 0xa8, 0x0007}, 19962306a36Sopenharmony_ci {0xaa, 0xac, 0x0004}, 20062306a36Sopenharmony_ci/*mswin-*/ 20162306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 20262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 20362306a36Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 20462306a36Sopenharmony_ci {0xaa, 0xfe, 0x0000}, /* 00,fe,00,aa */ 20562306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 20662306a36Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 20762306a36Sopenharmony_ci {0xbb, 0x04, 0x0400}, /* 04,04,00,bb */ 20862306a36Sopenharmony_ci {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */ 20962306a36Sopenharmony_ci {0xbb, 0x01, 0x0400}, /* 04,01,00,bb */ 21062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 21162306a36Sopenharmony_ci {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 21262306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 21362306a36Sopenharmony_ci {0xbb, 0x41, 0x2803}, /* 28,41,03,bb */ 21462306a36Sopenharmony_ci {0xbb, 0x40, 0x2c03}, /* 2c,40,03,bb */ 21562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 21662306a36Sopenharmony_ci {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */ 21762306a36Sopenharmony_ci {} 21862306a36Sopenharmony_ci}; 21962306a36Sopenharmony_cistatic const struct usb_action adcm2700_InitialScale[] = { 22062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 22162306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */ 22262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 22362306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 22462306a36Sopenharmony_ci {0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,d3,cc */ 22562306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 22662306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 22762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 22862306a36Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d0,cc */ 22962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 23062306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 23162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 23262306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 23362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 23462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 23562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 23662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 23762306a36Sopenharmony_ci {0xa0, 0xd8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,d8,cc */ 23862306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */ 23962306a36Sopenharmony_ci {0xbb, 0x00, 0x0400}, /* 04,00,00,bb */ 24062306a36Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 24162306a36Sopenharmony_ci {0xbb, 0x0f, 0x140f}, /* 14,0f,0f,bb */ 24262306a36Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */ 24362306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 24462306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 24562306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 24662306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 24762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 24862306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 24962306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R116_RGAIN}, /* 01,16,58,cc */ 25062306a36Sopenharmony_ci {0xa0, 0x5a, ZC3XX_R118_BGAIN}, /* 01,18,5a,cc */ 25162306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 25262306a36Sopenharmony_ci {0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,d3,cc */ 25362306a36Sopenharmony_ci {0xbb, 0x00, 0x0408}, /* 04,00,08,bb */ 25462306a36Sopenharmony_ci {0xdd, 0x00, 0x0200}, /* 00,02,00,dd */ 25562306a36Sopenharmony_ci {0xbb, 0x00, 0x0400}, /* 04,00,00,bb */ 25662306a36Sopenharmony_ci {0xdd, 0x00, 0x0050}, /* 00,00,50,dd */ 25762306a36Sopenharmony_ci {0xbb, 0x0f, 0x140f}, /* 14,0f,0f,bb */ 25862306a36Sopenharmony_ci {0xbb, 0xe0, 0x0c2e}, /* 0c,e0,2e,bb */ 25962306a36Sopenharmony_ci {0xbb, 0x01, 0x2000}, /* 20,01,00,bb */ 26062306a36Sopenharmony_ci {0xbb, 0x96, 0x2400}, /* 24,96,00,bb */ 26162306a36Sopenharmony_ci {0xbb, 0x06, 0x1006}, /* 10,06,06,bb */ 26262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 26362306a36Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 26462306a36Sopenharmony_ci {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 26562306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 26662306a36Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 26762306a36Sopenharmony_ci {0xbb, 0x5f, 0x2090}, /* 20,5f,90,bb */ 26862306a36Sopenharmony_ci {0xbb, 0x01, 0x8000}, /* 80,01,00,bb */ 26962306a36Sopenharmony_ci {0xbb, 0x09, 0x8400}, /* 84,09,00,bb */ 27062306a36Sopenharmony_ci {0xbb, 0x86, 0x0002}, /* 00,88,02,bb */ 27162306a36Sopenharmony_ci {0xbb, 0xe6, 0x0401}, /* 04,e6,01,bb */ 27262306a36Sopenharmony_ci {0xbb, 0x86, 0x0802}, /* 08,88,02,bb */ 27362306a36Sopenharmony_ci {0xbb, 0xe6, 0x0c01}, /* 0c,e6,01,bb */ 27462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 27562306a36Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 27662306a36Sopenharmony_ci {0xaa, 0xfe, 0x0000}, /* 00,fe,00,aa */ 27762306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 27862306a36Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 27962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 28062306a36Sopenharmony_ci {0xaa, 0xfe, 0x0020}, /* 00,fe,20,aa */ 28162306a36Sopenharmony_ci /*******/ 28262306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 28362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 28462306a36Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 28562306a36Sopenharmony_ci {0xaa, 0xfe, 0x0000}, /* 00,fe,00,aa */ 28662306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 28762306a36Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 28862306a36Sopenharmony_ci {0xbb, 0x04, 0x0400}, /* 04,04,00,bb */ 28962306a36Sopenharmony_ci {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */ 29062306a36Sopenharmony_ci {0xbb, 0x01, 0x0400}, /* 04,01,00,bb */ 29162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 29262306a36Sopenharmony_ci {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 29362306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 29462306a36Sopenharmony_ci {0xbb, 0x41, 0x2803}, /* 28,41,03,bb */ 29562306a36Sopenharmony_ci {0xbb, 0x40, 0x2c03}, /* 2c,40,03,bb */ 29662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 29762306a36Sopenharmony_ci {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */ 29862306a36Sopenharmony_ci {} 29962306a36Sopenharmony_ci}; 30062306a36Sopenharmony_cistatic const struct usb_action adcm2700_50HZ[] = { 30162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 30262306a36Sopenharmony_ci {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 30362306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 30462306a36Sopenharmony_ci {0xbb, 0x05, 0x8400}, /* 84,05,00,bb */ 30562306a36Sopenharmony_ci {0xbb, 0xd0, 0xb007}, /* b0,d0,07,bb */ 30662306a36Sopenharmony_ci {0xbb, 0xa0, 0xb80f}, /* b8,a0,0f,bb */ 30762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 30862306a36Sopenharmony_ci {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */ 30962306a36Sopenharmony_ci {0xaa, 0x26, 0x00d0}, /* 00,26,d0,aa */ 31062306a36Sopenharmony_ci {0xaa, 0x28, 0x0002}, /* 00,28,02,aa */ 31162306a36Sopenharmony_ci {} 31262306a36Sopenharmony_ci}; 31362306a36Sopenharmony_cistatic const struct usb_action adcm2700_60HZ[] = { 31462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 31562306a36Sopenharmony_ci {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 31662306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 31762306a36Sopenharmony_ci {0xbb, 0x07, 0x8400}, /* 84,07,00,bb */ 31862306a36Sopenharmony_ci {0xbb, 0x82, 0xb006}, /* b0,82,06,bb */ 31962306a36Sopenharmony_ci {0xbb, 0x04, 0xb80d}, /* b8,04,0d,bb */ 32062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 32162306a36Sopenharmony_ci {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */ 32262306a36Sopenharmony_ci {0xaa, 0x26, 0x0057}, /* 00,26,57,aa */ 32362306a36Sopenharmony_ci {0xaa, 0x28, 0x0002}, /* 00,28,02,aa */ 32462306a36Sopenharmony_ci {} 32562306a36Sopenharmony_ci}; 32662306a36Sopenharmony_cistatic const struct usb_action adcm2700_NoFlicker[] = { 32762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 32862306a36Sopenharmony_ci {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 32962306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 33062306a36Sopenharmony_ci {0xbb, 0x07, 0x8400}, /* 84,07,00,bb */ 33162306a36Sopenharmony_ci {0xbb, 0x05, 0xb000}, /* b0,05,00,bb */ 33262306a36Sopenharmony_ci {0xbb, 0xa0, 0xb801}, /* b8,a0,01,bb */ 33362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 33462306a36Sopenharmony_ci {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */ 33562306a36Sopenharmony_ci {} 33662306a36Sopenharmony_ci}; 33762306a36Sopenharmony_cistatic const struct usb_action cs2102_InitialScale[] = { /* 320x240 */ 33862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 33962306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 34062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT}, 34162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 34262306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R080_HBLANKHIGH}, 34362306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R081_HBLANKLOW}, 34462306a36Sopenharmony_ci {0xa0, 0x30, ZC3XX_R083_RGAINADDR}, 34562306a36Sopenharmony_ci {0xa0, 0x31, ZC3XX_R084_GGAINADDR}, 34662306a36Sopenharmony_ci {0xa0, 0x32, ZC3XX_R085_BGAINADDR}, 34762306a36Sopenharmony_ci {0xa0, 0x23, ZC3XX_R086_EXPTIMEHIGH}, 34862306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R087_EXPTIMEMID}, 34962306a36Sopenharmony_ci {0xa0, 0x25, ZC3XX_R088_EXPTIMELOW}, 35062306a36Sopenharmony_ci {0xa0, 0xb3, ZC3XX_R08B_I2CDEVICEADDR}, 35162306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 35262306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 35362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 35462306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 35562306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 35662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 35762306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 35862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 35962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 36062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 36162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 36262306a36Sopenharmony_ci {0xaa, 0x02, 0x0008}, 36362306a36Sopenharmony_ci {0xaa, 0x03, 0x0000}, 36462306a36Sopenharmony_ci {0xaa, 0x11, 0x0000}, 36562306a36Sopenharmony_ci {0xaa, 0x12, 0x0089}, 36662306a36Sopenharmony_ci {0xaa, 0x13, 0x0000}, 36762306a36Sopenharmony_ci {0xaa, 0x14, 0x00e9}, 36862306a36Sopenharmony_ci {0xaa, 0x20, 0x0000}, 36962306a36Sopenharmony_ci {0xaa, 0x22, 0x0000}, 37062306a36Sopenharmony_ci {0xaa, 0x0b, 0x0004}, 37162306a36Sopenharmony_ci {0xaa, 0x30, 0x0030}, 37262306a36Sopenharmony_ci {0xaa, 0x31, 0x0030}, 37362306a36Sopenharmony_ci {0xaa, 0x32, 0x0030}, 37462306a36Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 37562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 37662306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 37762306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 37862306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 37962306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 38062306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 38162306a36Sopenharmony_ci {0xa0, 0x10, 0x01ae}, 38262306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 38362306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 38462306a36Sopenharmony_ci {0xa0, 0x68, ZC3XX_R18D_YTARGET}, 38562306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 38662306a36Sopenharmony_ci {} 38762306a36Sopenharmony_ci}; 38862306a36Sopenharmony_ci 38962306a36Sopenharmony_cistatic const struct usb_action cs2102_Initial[] = { /* 640x480 */ 39062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 39162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 39262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT}, 39362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 39462306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R080_HBLANKHIGH}, 39562306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R081_HBLANKLOW}, 39662306a36Sopenharmony_ci {0xa0, 0x30, ZC3XX_R083_RGAINADDR}, 39762306a36Sopenharmony_ci {0xa0, 0x31, ZC3XX_R084_GGAINADDR}, 39862306a36Sopenharmony_ci {0xa0, 0x32, ZC3XX_R085_BGAINADDR}, 39962306a36Sopenharmony_ci {0xa0, 0x23, ZC3XX_R086_EXPTIMEHIGH}, 40062306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R087_EXPTIMEMID}, 40162306a36Sopenharmony_ci {0xa0, 0x25, ZC3XX_R088_EXPTIMELOW}, 40262306a36Sopenharmony_ci {0xa0, 0xb3, ZC3XX_R08B_I2CDEVICEADDR}, 40362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 40462306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 40562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 40662306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 40762306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 40862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 40962306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 41062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 41162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 41262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 41362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 41462306a36Sopenharmony_ci {0xaa, 0x02, 0x0008}, 41562306a36Sopenharmony_ci {0xaa, 0x03, 0x0000}, 41662306a36Sopenharmony_ci {0xaa, 0x11, 0x0001}, 41762306a36Sopenharmony_ci {0xaa, 0x12, 0x0087}, 41862306a36Sopenharmony_ci {0xaa, 0x13, 0x0001}, 41962306a36Sopenharmony_ci {0xaa, 0x14, 0x00e7}, 42062306a36Sopenharmony_ci {0xaa, 0x20, 0x0000}, 42162306a36Sopenharmony_ci {0xaa, 0x22, 0x0000}, 42262306a36Sopenharmony_ci {0xaa, 0x0b, 0x0004}, 42362306a36Sopenharmony_ci {0xaa, 0x30, 0x0030}, 42462306a36Sopenharmony_ci {0xaa, 0x31, 0x0030}, 42562306a36Sopenharmony_ci {0xaa, 0x32, 0x0030}, 42662306a36Sopenharmony_ci {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 42762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 42862306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 42962306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 43062306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 43162306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 43262306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 43362306a36Sopenharmony_ci {0xa0, 0x15, 0x01ae}, 43462306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 43562306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 43662306a36Sopenharmony_ci {0xa0, 0x68, ZC3XX_R18D_YTARGET}, 43762306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 43862306a36Sopenharmony_ci {} 43962306a36Sopenharmony_ci}; 44062306a36Sopenharmony_cistatic const struct usb_action cs2102_50HZScale[] = { 44162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 44262306a36Sopenharmony_ci {0xaa, 0x23, 0x0001}, 44362306a36Sopenharmony_ci {0xaa, 0x24, 0x005f}, 44462306a36Sopenharmony_ci {0xaa, 0x25, 0x0090}, 44562306a36Sopenharmony_ci {0xaa, 0x21, 0x00dd}, 44662306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH}, 44762306a36Sopenharmony_ci {0xa0, 0xbf, ZC3XX_R191_EXPOSURELIMITMID}, 44862306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, 44962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 45062306a36Sopenharmony_ci {0xa0, 0x3a, ZC3XX_R196_ANTIFLICKERMID}, 45162306a36Sopenharmony_ci {0xa0, 0x98, ZC3XX_R197_ANTIFLICKERLOW}, 45262306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 45362306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 45462306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 45562306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 45662306a36Sopenharmony_ci {0xa0, 0xdd, ZC3XX_R01D_HSYNC_0}, 45762306a36Sopenharmony_ci {0xa0, 0xe4, ZC3XX_R01E_HSYNC_1}, 45862306a36Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R01F_HSYNC_2}, 45962306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 46062306a36Sopenharmony_ci {} 46162306a36Sopenharmony_ci}; 46262306a36Sopenharmony_cistatic const struct usb_action cs2102_50HZ[] = { 46362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 46462306a36Sopenharmony_ci {0xaa, 0x23, 0x0000}, 46562306a36Sopenharmony_ci {0xaa, 0x24, 0x00af}, 46662306a36Sopenharmony_ci {0xaa, 0x25, 0x00c8}, 46762306a36Sopenharmony_ci {0xaa, 0x21, 0x0068}, 46862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R190_EXPOSURELIMITHIGH}, 46962306a36Sopenharmony_ci {0xa0, 0x5f, ZC3XX_R191_EXPOSURELIMITMID}, 47062306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R192_EXPOSURELIMITLOW}, 47162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 47262306a36Sopenharmony_ci {0xa0, 0x1d, ZC3XX_R196_ANTIFLICKERMID}, 47362306a36Sopenharmony_ci {0xa0, 0x4c, ZC3XX_R197_ANTIFLICKERLOW}, 47462306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 47562306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 47662306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 47762306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 47862306a36Sopenharmony_ci {0xa0, 0x68, ZC3XX_R01D_HSYNC_0}, 47962306a36Sopenharmony_ci {0xa0, 0xe3, ZC3XX_R01E_HSYNC_1}, 48062306a36Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R01F_HSYNC_2}, 48162306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 48262306a36Sopenharmony_ci {} 48362306a36Sopenharmony_ci}; 48462306a36Sopenharmony_cistatic const struct usb_action cs2102_60HZScale[] = { 48562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 48662306a36Sopenharmony_ci {0xaa, 0x23, 0x0001}, 48762306a36Sopenharmony_ci {0xaa, 0x24, 0x0055}, 48862306a36Sopenharmony_ci {0xaa, 0x25, 0x00cc}, 48962306a36Sopenharmony_ci {0xaa, 0x21, 0x003f}, 49062306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH}, 49162306a36Sopenharmony_ci {0xa0, 0xab, ZC3XX_R191_EXPOSURELIMITMID}, 49262306a36Sopenharmony_ci {0xa0, 0x98, ZC3XX_R192_EXPOSURELIMITLOW}, 49362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 49462306a36Sopenharmony_ci {0xa0, 0x30, ZC3XX_R196_ANTIFLICKERMID}, 49562306a36Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R197_ANTIFLICKERLOW}, 49662306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 49762306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 49862306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 49962306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 50062306a36Sopenharmony_ci {0xa0, 0x39, ZC3XX_R01D_HSYNC_0}, 50162306a36Sopenharmony_ci {0xa0, 0x70, ZC3XX_R01E_HSYNC_1}, 50262306a36Sopenharmony_ci {0xa0, 0xb0, ZC3XX_R01F_HSYNC_2}, 50362306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 50462306a36Sopenharmony_ci {} 50562306a36Sopenharmony_ci}; 50662306a36Sopenharmony_cistatic const struct usb_action cs2102_60HZ[] = { 50762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 50862306a36Sopenharmony_ci {0xaa, 0x23, 0x0000}, 50962306a36Sopenharmony_ci {0xaa, 0x24, 0x00aa}, 51062306a36Sopenharmony_ci {0xaa, 0x25, 0x00e6}, 51162306a36Sopenharmony_ci {0xaa, 0x21, 0x003f}, 51262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R190_EXPOSURELIMITHIGH}, 51362306a36Sopenharmony_ci {0xa0, 0x55, ZC3XX_R191_EXPOSURELIMITMID}, 51462306a36Sopenharmony_ci {0xa0, 0xcc, ZC3XX_R192_EXPOSURELIMITLOW}, 51562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 51662306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R196_ANTIFLICKERMID}, 51762306a36Sopenharmony_ci {0xa0, 0x6a, ZC3XX_R197_ANTIFLICKERLOW}, 51862306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 51962306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 52062306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 52162306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 52262306a36Sopenharmony_ci {0xa0, 0x3f, ZC3XX_R01D_HSYNC_0}, 52362306a36Sopenharmony_ci {0xa0, 0xa5, ZC3XX_R01E_HSYNC_1}, 52462306a36Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R01F_HSYNC_2}, 52562306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 52662306a36Sopenharmony_ci {} 52762306a36Sopenharmony_ci}; 52862306a36Sopenharmony_cistatic const struct usb_action cs2102_NoFlickerScale[] = { 52962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 53062306a36Sopenharmony_ci {0xaa, 0x23, 0x0001}, 53162306a36Sopenharmony_ci {0xaa, 0x24, 0x005f}, 53262306a36Sopenharmony_ci {0xaa, 0x25, 0x0000}, 53362306a36Sopenharmony_ci {0xaa, 0x21, 0x0001}, 53462306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH}, 53562306a36Sopenharmony_ci {0xa0, 0xbf, ZC3XX_R191_EXPOSURELIMITMID}, 53662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, 53762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 53862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 53962306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R197_ANTIFLICKERLOW}, 54062306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 54162306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 54262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 54362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 54462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R01D_HSYNC_0}, 54562306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R01E_HSYNC_1}, 54662306a36Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R01F_HSYNC_2}, 54762306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 54862306a36Sopenharmony_ci {} 54962306a36Sopenharmony_ci}; 55062306a36Sopenharmony_cistatic const struct usb_action cs2102_NoFlicker[] = { 55162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 55262306a36Sopenharmony_ci {0xaa, 0x23, 0x0000}, 55362306a36Sopenharmony_ci {0xaa, 0x24, 0x00af}, 55462306a36Sopenharmony_ci {0xaa, 0x25, 0x0080}, 55562306a36Sopenharmony_ci {0xaa, 0x21, 0x0001}, 55662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R190_EXPOSURELIMITHIGH}, 55762306a36Sopenharmony_ci {0xa0, 0x5f, ZC3XX_R191_EXPOSURELIMITMID}, 55862306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW}, 55962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 56062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 56162306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R197_ANTIFLICKERLOW}, 56262306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 56362306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 56462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 56562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 56662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R01D_HSYNC_0}, 56762306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R01E_HSYNC_1}, 56862306a36Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R01F_HSYNC_2}, 56962306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 57062306a36Sopenharmony_ci {} 57162306a36Sopenharmony_ci}; 57262306a36Sopenharmony_ci 57362306a36Sopenharmony_ci/* CS2102_KOCOM */ 57462306a36Sopenharmony_cistatic const struct usb_action cs2102K_InitialScale[] = { 57562306a36Sopenharmony_ci {0xa0, 0x11, ZC3XX_R002_CLOCKSELECT}, 57662306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 57762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT}, 57862306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 57962306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 58062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 58162306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 58262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 58362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 58462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 58562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 58662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 58762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 58862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 58962306a36Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 59062306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 59162306a36Sopenharmony_ci {0xa0, 0x55, ZC3XX_R08B_I2CDEVICEADDR}, 59262306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 59362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 59462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 59562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 59662306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R092_I2CADDRESSSELECT}, 59762306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 59862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 59962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 60062306a36Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R092_I2CADDRESSSELECT}, 60162306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 60262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 60362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 60462306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R092_I2CADDRESSSELECT}, 60562306a36Sopenharmony_ci {0xa0, 0x7c, ZC3XX_R093_I2CSETVALUE}, 60662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 60762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 60862306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R092_I2CADDRESSSELECT}, 60962306a36Sopenharmony_ci {0xa0, 0xa3, ZC3XX_R093_I2CSETVALUE}, 61062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 61162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 61262306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R092_I2CADDRESSSELECT}, 61362306a36Sopenharmony_ci {0xa0, 0xfb, ZC3XX_R093_I2CSETVALUE}, 61462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 61562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 61662306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R092_I2CADDRESSSELECT}, 61762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 61862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 61962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 62062306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R092_I2CADDRESSSELECT}, 62162306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R093_I2CSETVALUE}, 62262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 62362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 62462306a36Sopenharmony_ci {0xa0, 0x09, ZC3XX_R092_I2CADDRESSSELECT}, 62562306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R093_I2CSETVALUE}, 62662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 62762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 62862306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R092_I2CADDRESSSELECT}, 62962306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 63062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 63162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 63262306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R092_I2CADDRESSSELECT}, 63362306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 63462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 63562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 63662306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R092_I2CADDRESSSELECT}, 63762306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 63862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 63962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 64062306a36Sopenharmony_ci {0xa0, 0x11, ZC3XX_R092_I2CADDRESSSELECT}, 64162306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 64262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 64362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 64462306a36Sopenharmony_ci {0xa0, 0x12, ZC3XX_R092_I2CADDRESSSELECT}, 64562306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 64662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 64762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 64862306a36Sopenharmony_ci {0xa0, 0x15, ZC3XX_R092_I2CADDRESSSELECT}, 64962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 65062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 65162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 65262306a36Sopenharmony_ci {0xa0, 0x16, ZC3XX_R092_I2CADDRESSSELECT}, 65362306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE}, 65462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 65562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 65662306a36Sopenharmony_ci {0xa0, 0x17, ZC3XX_R092_I2CADDRESSSELECT}, 65762306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE}, 65862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 65962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 66062306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 66162306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 66262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 66362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 66462306a36Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, 66562306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 66662306a36Sopenharmony_ci {0xa0, 0x78, ZC3XX_R18D_YTARGET}, 66762306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 66862306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 66962306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 67062306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 67162306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, 67262306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, 67362306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 67462306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 67562306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 67662306a36Sopenharmony_ci {0xa0, 0x01, 0x01b1}, 67762306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 67862306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R116_RGAIN}, 67962306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 68062306a36Sopenharmony_ci {0xa0, 0x4c, ZC3XX_R118_BGAIN}, 68162306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 68262306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 68362306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 68462306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R120_GAMMA00}, /* gamma 4 */ 68562306a36Sopenharmony_ci {0xa0, 0x38, ZC3XX_R121_GAMMA01}, 68662306a36Sopenharmony_ci {0xa0, 0x59, ZC3XX_R122_GAMMA02}, 68762306a36Sopenharmony_ci {0xa0, 0x79, ZC3XX_R123_GAMMA03}, 68862306a36Sopenharmony_ci {0xa0, 0x92, ZC3XX_R124_GAMMA04}, 68962306a36Sopenharmony_ci {0xa0, 0xa7, ZC3XX_R125_GAMMA05}, 69062306a36Sopenharmony_ci {0xa0, 0xb9, ZC3XX_R126_GAMMA06}, 69162306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R127_GAMMA07}, 69262306a36Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R128_GAMMA08}, 69362306a36Sopenharmony_ci {0xa0, 0xdf, ZC3XX_R129_GAMMA09}, 69462306a36Sopenharmony_ci {0xa0, 0xe7, ZC3XX_R12A_GAMMA0A}, 69562306a36Sopenharmony_ci {0xa0, 0xee, ZC3XX_R12B_GAMMA0B}, 69662306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R12C_GAMMA0C}, 69762306a36Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R12D_GAMMA0D}, 69862306a36Sopenharmony_ci {0xa0, 0xfc, ZC3XX_R12E_GAMMA0E}, 69962306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, 70062306a36Sopenharmony_ci {0xa0, 0x26, ZC3XX_R130_GAMMA10}, 70162306a36Sopenharmony_ci {0xa0, 0x22, ZC3XX_R131_GAMMA11}, 70262306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R132_GAMMA12}, 70362306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R133_GAMMA13}, 70462306a36Sopenharmony_ci {0xa0, 0x16, ZC3XX_R134_GAMMA14}, 70562306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R135_GAMMA15}, 70662306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R136_GAMMA16}, 70762306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R137_GAMMA17}, 70862306a36Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R138_GAMMA18}, 70962306a36Sopenharmony_ci {0xa0, 0x09, ZC3XX_R139_GAMMA19}, 71062306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R13A_GAMMA1A}, 71162306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R13B_GAMMA1B}, 71262306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R13C_GAMMA1C}, 71362306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R13D_GAMMA1D}, 71462306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R13E_GAMMA1E}, 71562306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R13F_GAMMA1F}, 71662306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R10A_RGB00}, /* matrix */ 71762306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10B_RGB01}, 71862306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10C_RGB02}, 71962306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10D_RGB10}, 72062306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R10E_RGB11}, 72162306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10F_RGB12}, 72262306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R110_RGB20}, 72362306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R111_RGB21}, 72462306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R112_RGB22}, 72562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 72662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 72762306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 72862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 72962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 73062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 73162306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 73262306a36Sopenharmony_ci {0xa0, 0x22, ZC3XX_R093_I2CSETVALUE}, 73362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 73462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 73562306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 73662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 73762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 73862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 73962306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 74062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 74162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 74262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 74362306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 74462306a36Sopenharmony_ci {0xa0, 0x22, ZC3XX_R093_I2CSETVALUE}, 74562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 74662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 74762306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 74862306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 74962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 75062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 75162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, 75262306a36Sopenharmony_ci {0xa0, 0x22, ZC3XX_R0A4_EXPOSURETIMELOW}, 75362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 75462306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 75562306a36Sopenharmony_ci {0xa0, 0xee, ZC3XX_R192_EXPOSURELIMITLOW}, 75662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 75762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 75862306a36Sopenharmony_ci {0xa0, 0x3a, ZC3XX_R197_ANTIFLICKERLOW}, 75962306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 76062306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 76162306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, 76262306a36Sopenharmony_ci {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, 76362306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, 76462306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R01E_HSYNC_1}, 76562306a36Sopenharmony_ci {0xa0, 0x19, ZC3XX_R01F_HSYNC_2}, 76662306a36Sopenharmony_ci {0xa0, 0x1f, ZC3XX_R020_HSYNC_3}, 76762306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 76862306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 76962306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 77062306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 77162306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R116_RGAIN}, 77262306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 77362306a36Sopenharmony_ci {0xa0, 0x4c, ZC3XX_R118_BGAIN}, 77462306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 77562306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 77662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 77762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 77862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 77962306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 78062306a36Sopenharmony_ci {0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE}, 78162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 78262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 78362306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 78462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 78562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 78662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 78762306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 78862306a36Sopenharmony_ci {0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE}, 78962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 79062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 79162306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 79262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 79362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 79462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 79562306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 79662306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 79762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 79862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 79962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 80062306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 80162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 80262306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 80362306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 80462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 80562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 80662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 80762306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 80862306a36Sopenharmony_ci {0xa0, 0x96, ZC3XX_R093_I2CSETVALUE}, 80962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 81062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 81162306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 81262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 81362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 81462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 81562306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 81662306a36Sopenharmony_ci {0xa0, 0x96, ZC3XX_R093_I2CSETVALUE}, 81762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 81862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 81962306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 82062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 82162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 82262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 82362306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 82462306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 82562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 82662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 82762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 82862306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 82962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 83062306a36Sopenharmony_ci {} 83162306a36Sopenharmony_ci}; 83262306a36Sopenharmony_ci 83362306a36Sopenharmony_cistatic const struct usb_action cs2102K_Initial[] = { 83462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 83562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 83662306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 83762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT}, 83862306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 83962306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 84062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 84162306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 84262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 84362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 84462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 84562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 84662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 84762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 84862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 84962306a36Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 85062306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 85162306a36Sopenharmony_ci/*fixme: next sequence = i2c exchanges*/ 85262306a36Sopenharmony_ci {0xa0, 0x55, ZC3XX_R08B_I2CDEVICEADDR}, 85362306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 85462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 85562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 85662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 85762306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R092_I2CADDRESSSELECT}, 85862306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 85962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 86062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 86162306a36Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R092_I2CADDRESSSELECT}, 86262306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 86362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 86462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 86562306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R092_I2CADDRESSSELECT}, 86662306a36Sopenharmony_ci {0xa0, 0x7b, ZC3XX_R093_I2CSETVALUE}, 86762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 86862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 86962306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R092_I2CADDRESSSELECT}, 87062306a36Sopenharmony_ci {0xa0, 0xa3, ZC3XX_R093_I2CSETVALUE}, 87162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 87262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 87362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R092_I2CADDRESSSELECT}, 87462306a36Sopenharmony_ci {0xa0, 0xfb, ZC3XX_R093_I2CSETVALUE}, 87562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 87662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 87762306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R092_I2CADDRESSSELECT}, 87862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 87962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 88062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 88162306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R092_I2CADDRESSSELECT}, 88262306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R093_I2CSETVALUE}, 88362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 88462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 88562306a36Sopenharmony_ci {0xa0, 0x09, ZC3XX_R092_I2CADDRESSSELECT}, 88662306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R093_I2CSETVALUE}, 88762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 88862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 88962306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R092_I2CADDRESSSELECT}, 89062306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 89162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 89262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 89362306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R092_I2CADDRESSSELECT}, 89462306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 89562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 89662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 89762306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R092_I2CADDRESSSELECT}, 89862306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 89962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 90062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 90162306a36Sopenharmony_ci {0xa0, 0x11, ZC3XX_R092_I2CADDRESSSELECT}, 90262306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 90362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 90462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 90562306a36Sopenharmony_ci {0xa0, 0x12, ZC3XX_R092_I2CADDRESSSELECT}, 90662306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 90762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 90862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 90962306a36Sopenharmony_ci {0xa0, 0x15, ZC3XX_R092_I2CADDRESSSELECT}, 91062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 91162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 91262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 91362306a36Sopenharmony_ci {0xa0, 0x16, ZC3XX_R092_I2CADDRESSSELECT}, 91462306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE}, 91562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 91662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 91762306a36Sopenharmony_ci {0xa0, 0x17, ZC3XX_R092_I2CADDRESSSELECT}, 91862306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE}, 91962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 92062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 92162306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 92262306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 92362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 92462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 92562306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION}, 92662306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 92762306a36Sopenharmony_ci {0xa0, 0x78, ZC3XX_R18D_YTARGET}, 92862306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 92962306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 93062306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 93162306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 93262306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, 93362306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, 93462306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 93562306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 93662306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 93762306a36Sopenharmony_ci {0xa0, 0x01, 0x01b1}, 93862306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 93962306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R116_RGAIN}, 94062306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 94162306a36Sopenharmony_ci {0xa0, 0x4c, ZC3XX_R118_BGAIN}, 94262306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 94362306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 94462306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 94562306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R120_GAMMA00}, /* gamma 4 */ 94662306a36Sopenharmony_ci {0xa0, 0x38, ZC3XX_R121_GAMMA01}, 94762306a36Sopenharmony_ci {0xa0, 0x59, ZC3XX_R122_GAMMA02}, 94862306a36Sopenharmony_ci {0xa0, 0x79, ZC3XX_R123_GAMMA03}, 94962306a36Sopenharmony_ci {0xa0, 0x92, ZC3XX_R124_GAMMA04}, 95062306a36Sopenharmony_ci {0xa0, 0xa7, ZC3XX_R125_GAMMA05}, 95162306a36Sopenharmony_ci {0xa0, 0xb9, ZC3XX_R126_GAMMA06}, 95262306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R127_GAMMA07}, 95362306a36Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R128_GAMMA08}, 95462306a36Sopenharmony_ci {0xa0, 0xdf, ZC3XX_R129_GAMMA09}, 95562306a36Sopenharmony_ci {0xa0, 0xe7, ZC3XX_R12A_GAMMA0A}, 95662306a36Sopenharmony_ci {0xa0, 0xee, ZC3XX_R12B_GAMMA0B}, 95762306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R12C_GAMMA0C}, 95862306a36Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R12D_GAMMA0D}, 95962306a36Sopenharmony_ci {0xa0, 0xfc, ZC3XX_R12E_GAMMA0E}, 96062306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, 96162306a36Sopenharmony_ci {0xa0, 0x26, ZC3XX_R130_GAMMA10}, 96262306a36Sopenharmony_ci {0xa0, 0x22, ZC3XX_R131_GAMMA11}, 96362306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R132_GAMMA12}, 96462306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R133_GAMMA13}, 96562306a36Sopenharmony_ci {0xa0, 0x16, ZC3XX_R134_GAMMA14}, 96662306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R135_GAMMA15}, 96762306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R136_GAMMA16}, 96862306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R137_GAMMA17}, 96962306a36Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R138_GAMMA18}, 97062306a36Sopenharmony_ci {0xa0, 0x09, ZC3XX_R139_GAMMA19}, 97162306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R13A_GAMMA1A}, 97262306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R13B_GAMMA1B}, 97362306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R13C_GAMMA1C}, 97462306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R13D_GAMMA1D}, 97562306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R13E_GAMMA1E}, 97662306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R13F_GAMMA1F}, 97762306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R10A_RGB00}, /* matrix */ 97862306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10B_RGB01}, 97962306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10C_RGB02}, 98062306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10D_RGB10}, 98162306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R10E_RGB11}, 98262306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10F_RGB12}, 98362306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R110_RGB20}, 98462306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R111_RGB21}, 98562306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R112_RGB22}, 98662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 98762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 98862306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 98962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 99062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 99162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 99262306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 99362306a36Sopenharmony_ci {0xa0, 0x22, ZC3XX_R093_I2CSETVALUE}, 99462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 99562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 99662306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 99762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 99862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 99962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 100062306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 100162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 100262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 100362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 100462306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 100562306a36Sopenharmony_ci {0xa0, 0x22, ZC3XX_R093_I2CSETVALUE}, 100662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 100762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 100862306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 100962306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 101062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 101162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 101262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, 101362306a36Sopenharmony_ci {0xa0, 0x22, ZC3XX_R0A4_EXPOSURETIMELOW}, 101462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 101562306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 101662306a36Sopenharmony_ci {0xa0, 0xee, ZC3XX_R192_EXPOSURELIMITLOW}, 101762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 101862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 101962306a36Sopenharmony_ci {0xa0, 0x3a, ZC3XX_R197_ANTIFLICKERLOW}, 102062306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 102162306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 102262306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, 102362306a36Sopenharmony_ci {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, 102462306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, 102562306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R01E_HSYNC_1}, 102662306a36Sopenharmony_ci {0xa0, 0x19, ZC3XX_R01F_HSYNC_2}, 102762306a36Sopenharmony_ci {0xa0, 0x1f, ZC3XX_R020_HSYNC_3}, 102862306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 102962306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 103062306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 103162306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 103262306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R116_RGAIN}, 103362306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 103462306a36Sopenharmony_ci {0xa0, 0x4c, ZC3XX_R118_BGAIN}, 103562306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 103662306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 103762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 103862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 103962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 104062306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 104162306a36Sopenharmony_ci {0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE}, 104262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 104362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 104462306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 104562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 104662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 104762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 104862306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 104962306a36Sopenharmony_ci {0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE}, 105062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 105162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 105262306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 105362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 105462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 105562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 105662306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 105762306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 105862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 105962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 106062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 106162306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 106262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 106362306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 106462306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 106562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 106662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 106762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 106862306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 106962306a36Sopenharmony_ci {0xa0, 0x96, ZC3XX_R093_I2CSETVALUE}, 107062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 107162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 107262306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 107362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 107462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 107562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 107662306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 107762306a36Sopenharmony_ci {0xa0, 0x96, ZC3XX_R093_I2CSETVALUE}, 107862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 107962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 108062306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 108162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 108262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 108362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 108462306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 108562306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 108662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 108762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 108862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 108962306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 109062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 109162306a36Sopenharmony_ci/*fixme:what does the next sequence?*/ 109262306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 109362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 109462306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 109562306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 109662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 109762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 109862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 109962306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 110062306a36Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R093_I2CSETVALUE}, 110162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 110262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 110362306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 110462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 110562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 110662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 110762306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 110862306a36Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R093_I2CSETVALUE}, 110962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 111062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 111162306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 111262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 111362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 111462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 111562306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 111662306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 111762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 111862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 111962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 112062306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING}, 112162306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 112262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 112362306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 112462306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 112562306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 112662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 112762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 112862306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 112962306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R093_I2CSETVALUE}, 113062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 113162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 113262306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 113362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 113462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 113562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 113662306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 113762306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R093_I2CSETVALUE}, 113862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 113962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 114062306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 114162306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 114262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 114362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 114462306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 114562306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 114662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 114762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 114862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 114962306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 115062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 115162306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 115262306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 115362306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 115462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 115562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 115662306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 115762306a36Sopenharmony_ci {0xa0, 0x44, ZC3XX_R093_I2CSETVALUE}, 115862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 115962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 116062306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 116162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 116262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 116362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 116462306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 116562306a36Sopenharmony_ci {0xa0, 0x44, ZC3XX_R093_I2CSETVALUE}, 116662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 116762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 116862306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 116962306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 117062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 117162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 117262306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 117362306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 117462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 117562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 117662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 117762306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 117862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 117962306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 118062306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 118162306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 118262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 118362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 118462306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 118562306a36Sopenharmony_ci {0xa0, 0x7e, ZC3XX_R093_I2CSETVALUE}, 118662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 118762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 118862306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 118962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 119062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 119162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 119262306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 119362306a36Sopenharmony_ci {0xa0, 0x7e, ZC3XX_R093_I2CSETVALUE}, 119462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 119562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 119662306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 119762306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 119862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 119962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 120062306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 120162306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 120262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 120362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 120462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 120562306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 120662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 120762306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 120862306a36Sopenharmony_ci {} 120962306a36Sopenharmony_ci}; 121062306a36Sopenharmony_ci 121162306a36Sopenharmony_cistatic const struct usb_action gc0305_Initial[] = { /* 640x480 */ 121262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 121362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 121462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 121562306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R002_CLOCKSELECT}, /* 00,02,04,cc */ 121662306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 121762306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 121862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 121962306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */ 122062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 122162306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 122262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 122362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 122462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 122562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 122662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 122762306a36Sopenharmony_ci {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e6,cc */ 122862306a36Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */ 122962306a36Sopenharmony_ci {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc */ 123062306a36Sopenharmony_ci {0xaa, 0x13, 0x0002}, /* 00,13,02,aa */ 123162306a36Sopenharmony_ci {0xaa, 0x15, 0x0003}, /* 00,15,03,aa */ 123262306a36Sopenharmony_ci {0xaa, 0x01, 0x0000}, /* 00,01,00,aa */ 123362306a36Sopenharmony_ci {0xaa, 0x02, 0x0000}, /* 00,02,00,aa */ 123462306a36Sopenharmony_ci {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa */ 123562306a36Sopenharmony_ci {0xaa, 0x1c, 0x0017}, /* 00,1c,17,aa */ 123662306a36Sopenharmony_ci {0xaa, 0x1d, 0x0080}, /* 00,1d,80,aa */ 123762306a36Sopenharmony_ci {0xaa, 0x1f, 0x0008}, /* 00,1f,08,aa */ 123862306a36Sopenharmony_ci {0xaa, 0x21, 0x0012}, /* 00,21,12,aa */ 123962306a36Sopenharmony_ci {0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,82,cc */ 124062306a36Sopenharmony_ci {0xa0, 0x83, ZC3XX_R087_EXPTIMEMID}, /* 00,87,83,cc */ 124162306a36Sopenharmony_ci {0xa0, 0x84, ZC3XX_R088_EXPTIMELOW}, /* 00,88,84,cc */ 124262306a36Sopenharmony_ci {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */ 124362306a36Sopenharmony_ci {0xaa, 0x0a, 0x0000}, /* 00,0a,00,aa */ 124462306a36Sopenharmony_ci {0xaa, 0x0b, 0x00b0}, /* 00,0b,b0,aa */ 124562306a36Sopenharmony_ci {0xaa, 0x0c, 0x0000}, /* 00,0c,00,aa */ 124662306a36Sopenharmony_ci {0xaa, 0x0d, 0x00b0}, /* 00,0d,b0,aa */ 124762306a36Sopenharmony_ci {0xaa, 0x0e, 0x0000}, /* 00,0e,00,aa */ 124862306a36Sopenharmony_ci {0xaa, 0x0f, 0x00b0}, /* 00,0f,b0,aa */ 124962306a36Sopenharmony_ci {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 125062306a36Sopenharmony_ci {0xaa, 0x11, 0x00b0}, /* 00,11,b0,aa */ 125162306a36Sopenharmony_ci {0xaa, 0x16, 0x0001}, /* 00,16,01,aa */ 125262306a36Sopenharmony_ci {0xaa, 0x17, 0x00e6}, /* 00,17,e6,aa */ 125362306a36Sopenharmony_ci {0xaa, 0x18, 0x0002}, /* 00,18,02,aa */ 125462306a36Sopenharmony_ci {0xaa, 0x19, 0x0086}, /* 00,19,86,aa */ 125562306a36Sopenharmony_ci {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 125662306a36Sopenharmony_ci {0xaa, 0x1b, 0x0020}, /* 00,1b,20,aa */ 125762306a36Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,b7,cc */ 125862306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 125962306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 126062306a36Sopenharmony_ci {0xa0, 0x76, ZC3XX_R189_AWBSTATUS}, /* 01,89,76,cc */ 126162306a36Sopenharmony_ci {0xa0, 0x09, 0x01ad}, /* 01,ad,09,cc */ 126262306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 126362306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 126462306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 126562306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 126662306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,60,cc */ 126762306a36Sopenharmony_ci {0xa0, 0x85, ZC3XX_R18D_YTARGET}, /* 01,8d,85,cc */ 126862306a36Sopenharmony_ci {0xa0, 0x00, 0x011e}, /* 01,1e,00,cc */ 126962306a36Sopenharmony_ci {0xa0, 0x52, ZC3XX_R116_RGAIN}, /* 01,16,52,cc */ 127062306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, /* 01,17,40,cc */ 127162306a36Sopenharmony_ci {0xa0, 0x52, ZC3XX_R118_BGAIN}, /* 01,18,52,cc */ 127262306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R113_RGB03}, /* 01,13,03,cc */ 127362306a36Sopenharmony_ci {} 127462306a36Sopenharmony_ci}; 127562306a36Sopenharmony_cistatic const struct usb_action gc0305_InitialScale[] = { /* 320x240 */ 127662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 127762306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 127862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 127962306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */ 128062306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 128162306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 128262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 128362306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */ 128462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 128562306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 128662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 128762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 128862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 128962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 129062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 129162306a36Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e8,cc */ 129262306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */ 129362306a36Sopenharmony_ci {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc */ 129462306a36Sopenharmony_ci {0xaa, 0x13, 0x0000}, /* 00,13,00,aa */ 129562306a36Sopenharmony_ci {0xaa, 0x15, 0x0001}, /* 00,15,01,aa */ 129662306a36Sopenharmony_ci {0xaa, 0x01, 0x0000}, /* 00,01,00,aa */ 129762306a36Sopenharmony_ci {0xaa, 0x02, 0x0000}, /* 00,02,00,aa */ 129862306a36Sopenharmony_ci {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa */ 129962306a36Sopenharmony_ci {0xaa, 0x1c, 0x0017}, /* 00,1c,17,aa */ 130062306a36Sopenharmony_ci {0xaa, 0x1d, 0x0080}, /* 00,1d,80,aa */ 130162306a36Sopenharmony_ci {0xaa, 0x1f, 0x0008}, /* 00,1f,08,aa */ 130262306a36Sopenharmony_ci {0xaa, 0x21, 0x0012}, /* 00,21,12,aa */ 130362306a36Sopenharmony_ci {0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,82,cc */ 130462306a36Sopenharmony_ci {0xa0, 0x83, ZC3XX_R087_EXPTIMEMID}, /* 00,87,83,cc */ 130562306a36Sopenharmony_ci {0xa0, 0x84, ZC3XX_R088_EXPTIMELOW}, /* 00,88,84,cc */ 130662306a36Sopenharmony_ci {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */ 130762306a36Sopenharmony_ci {0xaa, 0x0a, 0x0000}, /* 00,0a,00,aa */ 130862306a36Sopenharmony_ci {0xaa, 0x0b, 0x00b0}, /* 00,0b,b0,aa */ 130962306a36Sopenharmony_ci {0xaa, 0x0c, 0x0000}, /* 00,0c,00,aa */ 131062306a36Sopenharmony_ci {0xaa, 0x0d, 0x00b0}, /* 00,0d,b0,aa */ 131162306a36Sopenharmony_ci {0xaa, 0x0e, 0x0000}, /* 00,0e,00,aa */ 131262306a36Sopenharmony_ci {0xaa, 0x0f, 0x00b0}, /* 00,0f,b0,aa */ 131362306a36Sopenharmony_ci {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 131462306a36Sopenharmony_ci {0xaa, 0x11, 0x00b0}, /* 00,11,b0,aa */ 131562306a36Sopenharmony_ci {0xaa, 0x16, 0x0001}, /* 00,16,01,aa */ 131662306a36Sopenharmony_ci {0xaa, 0x17, 0x00e8}, /* 00,17,e8,aa */ 131762306a36Sopenharmony_ci {0xaa, 0x18, 0x0002}, /* 00,18,02,aa */ 131862306a36Sopenharmony_ci {0xaa, 0x19, 0x0088}, /* 00,19,88,aa */ 131962306a36Sopenharmony_ci {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 132062306a36Sopenharmony_ci {0xaa, 0x1b, 0x0020}, /* 00,1b,20,aa */ 132162306a36Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,b7,cc */ 132262306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 132362306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 132462306a36Sopenharmony_ci {0xa0, 0x76, ZC3XX_R189_AWBSTATUS}, /* 01,89,76,cc */ 132562306a36Sopenharmony_ci {0xa0, 0x09, 0x01ad}, /* 01,ad,09,cc */ 132662306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 132762306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 132862306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 132962306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 133062306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,60,cc */ 133162306a36Sopenharmony_ci {0xa0, 0x00, 0x011e}, /* 01,1e,00,cc */ 133262306a36Sopenharmony_ci {0xa0, 0x52, ZC3XX_R116_RGAIN}, /* 01,16,52,cc */ 133362306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, /* 01,17,40,cc */ 133462306a36Sopenharmony_ci {0xa0, 0x52, ZC3XX_R118_BGAIN}, /* 01,18,52,cc */ 133562306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R113_RGB03}, /* 01,13,03,cc */ 133662306a36Sopenharmony_ci {} 133762306a36Sopenharmony_ci}; 133862306a36Sopenharmony_cistatic const struct usb_action gc0305_50HZ[] = { 133962306a36Sopenharmony_ci {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 134062306a36Sopenharmony_ci {0xaa, 0x83, 0x0002}, /* 00,83,02,aa */ 134162306a36Sopenharmony_ci {0xaa, 0x84, 0x0038}, /* 00,84,38,aa */ /* win: 00,84,ec */ 134262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 134362306a36Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,0b,cc */ 134462306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,18,cc */ 134562306a36Sopenharmony_ci /* win: 01,92,10 */ 134662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 134762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 134862306a36Sopenharmony_ci {0xa0, 0x8e, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,8e,cc */ 134962306a36Sopenharmony_ci /* win: 01,97,ec */ 135062306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc */ 135162306a36Sopenharmony_ci {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc */ 135262306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 135362306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 135462306a36Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc */ 135562306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc */ 135662306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc */ 135762306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 135862306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,60,cc */ 135962306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */ 136062306a36Sopenharmony_ci/* {0xa0, 0x85, ZC3XX_R18D_YTARGET}, * 01,8d,85,cc * 136162306a36Sopenharmony_ci * if 640x480 */ 136262306a36Sopenharmony_ci {} 136362306a36Sopenharmony_ci}; 136462306a36Sopenharmony_cistatic const struct usb_action gc0305_60HZ[] = { 136562306a36Sopenharmony_ci {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 136662306a36Sopenharmony_ci {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */ 136762306a36Sopenharmony_ci {0xaa, 0x84, 0x00ec}, /* 00,84,ec,aa */ 136862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 136962306a36Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,0b,cc */ 137062306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,10,cc */ 137162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 137262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 137362306a36Sopenharmony_ci {0xa0, 0xec, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,ec,cc */ 137462306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc */ 137562306a36Sopenharmony_ci {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc */ 137662306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 137762306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 137862306a36Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc */ 137962306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc */ 138062306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc */ 138162306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 138262306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,60,cc */ 138362306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */ 138462306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R18D_YTARGET}, /* 01,8d,80,cc */ 138562306a36Sopenharmony_ci {} 138662306a36Sopenharmony_ci}; 138762306a36Sopenharmony_ci 138862306a36Sopenharmony_cistatic const struct usb_action gc0305_NoFlicker[] = { 138962306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0c,cc */ 139062306a36Sopenharmony_ci {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 139162306a36Sopenharmony_ci {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */ 139262306a36Sopenharmony_ci {0xaa, 0x84, 0x0020}, /* 00,84,20,aa */ 139362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 139462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,00,cc */ 139562306a36Sopenharmony_ci {0xa0, 0x48, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,48,cc */ 139662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 139762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 139862306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 139962306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc */ 140062306a36Sopenharmony_ci {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc */ 140162306a36Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc */ 140262306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc */ 140362306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc */ 140462306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 140562306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,60,cc */ 140662306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,03,cc */ 140762306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R18D_YTARGET}, /* 01,8d,80,cc */ 140862306a36Sopenharmony_ci {} 140962306a36Sopenharmony_ci}; 141062306a36Sopenharmony_ci 141162306a36Sopenharmony_cistatic const struct usb_action hdcs2020_InitialScale[] = { 141262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 141362306a36Sopenharmony_ci {0xa0, 0x11, ZC3XX_R002_CLOCKSELECT}, 141462306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* qtable 0x05 */ 141562306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT}, 141662306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 141762306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 141862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 141962306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 142062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 142162306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 142262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 142362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 142462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 142562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 142662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 142762306a36Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 142862306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 142962306a36Sopenharmony_ci {0xaa, 0x1c, 0x0000}, 143062306a36Sopenharmony_ci {0xaa, 0x0a, 0x0001}, 143162306a36Sopenharmony_ci {0xaa, 0x0b, 0x0006}, 143262306a36Sopenharmony_ci {0xaa, 0x0c, 0x007b}, 143362306a36Sopenharmony_ci {0xaa, 0x0d, 0x00a7}, 143462306a36Sopenharmony_ci {0xaa, 0x03, 0x00fb}, 143562306a36Sopenharmony_ci {0xaa, 0x05, 0x0000}, 143662306a36Sopenharmony_ci {0xaa, 0x06, 0x0003}, 143762306a36Sopenharmony_ci {0xaa, 0x09, 0x0008}, 143862306a36Sopenharmony_ci 143962306a36Sopenharmony_ci {0xaa, 0x0f, 0x0018}, /* set sensor gain */ 144062306a36Sopenharmony_ci {0xaa, 0x10, 0x0018}, 144162306a36Sopenharmony_ci {0xaa, 0x11, 0x0018}, 144262306a36Sopenharmony_ci {0xaa, 0x12, 0x0018}, 144362306a36Sopenharmony_ci 144462306a36Sopenharmony_ci {0xaa, 0x15, 0x004e}, 144562306a36Sopenharmony_ci {0xaa, 0x1c, 0x0004}, 144662306a36Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, 144762306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 144862306a36Sopenharmony_ci {0xa0, 0x70, ZC3XX_R18D_YTARGET}, 144962306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 145062306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 145162306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 145262306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 145362306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 145462306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 145562306a36Sopenharmony_ci {0xa1, 0x01, 0x0002}, 145662306a36Sopenharmony_ci {0xa1, 0x01, 0x0008}, 145762306a36Sopenharmony_ci {0xa1, 0x01, 0x0180}, 145862306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 145962306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 146062306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 146162306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 146262306a36Sopenharmony_ci {0xa1, 0x01, 0x0008}, 146362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 146462306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 146562306a36Sopenharmony_ci {0xa1, 0x01, 0x01c8}, 146662306a36Sopenharmony_ci {0xa1, 0x01, 0x01c9}, 146762306a36Sopenharmony_ci {0xa1, 0x01, 0x01ca}, 146862306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 146962306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R120_GAMMA00}, /* gamma 4 */ 147062306a36Sopenharmony_ci {0xa0, 0x38, ZC3XX_R121_GAMMA01}, 147162306a36Sopenharmony_ci {0xa0, 0x59, ZC3XX_R122_GAMMA02}, 147262306a36Sopenharmony_ci {0xa0, 0x79, ZC3XX_R123_GAMMA03}, 147362306a36Sopenharmony_ci {0xa0, 0x92, ZC3XX_R124_GAMMA04}, 147462306a36Sopenharmony_ci {0xa0, 0xa7, ZC3XX_R125_GAMMA05}, 147562306a36Sopenharmony_ci {0xa0, 0xb9, ZC3XX_R126_GAMMA06}, 147662306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R127_GAMMA07}, 147762306a36Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R128_GAMMA08}, 147862306a36Sopenharmony_ci {0xa0, 0xdf, ZC3XX_R129_GAMMA09}, 147962306a36Sopenharmony_ci {0xa0, 0xe7, ZC3XX_R12A_GAMMA0A}, 148062306a36Sopenharmony_ci {0xa0, 0xee, ZC3XX_R12B_GAMMA0B}, 148162306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R12C_GAMMA0C}, 148262306a36Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R12D_GAMMA0D}, 148362306a36Sopenharmony_ci {0xa0, 0xfc, ZC3XX_R12E_GAMMA0E}, 148462306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, 148562306a36Sopenharmony_ci {0xa0, 0x26, ZC3XX_R130_GAMMA10}, 148662306a36Sopenharmony_ci {0xa0, 0x22, ZC3XX_R131_GAMMA11}, 148762306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R132_GAMMA12}, 148862306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R133_GAMMA13}, 148962306a36Sopenharmony_ci {0xa0, 0x16, ZC3XX_R134_GAMMA14}, 149062306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R135_GAMMA15}, 149162306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R136_GAMMA16}, 149262306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R137_GAMMA17}, 149362306a36Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R138_GAMMA18}, 149462306a36Sopenharmony_ci {0xa0, 0x09, ZC3XX_R139_GAMMA19}, 149562306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R13A_GAMMA1A}, 149662306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R13B_GAMMA1B}, 149762306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R13C_GAMMA1C}, 149862306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R13D_GAMMA1D}, 149962306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R13E_GAMMA1E}, 150062306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R13F_GAMMA1F}, 150162306a36Sopenharmony_ci 150262306a36Sopenharmony_ci {0xa0, 0x66, ZC3XX_R10A_RGB00}, /* matrix */ 150362306a36Sopenharmony_ci {0xa0, 0xed, ZC3XX_R10B_RGB01}, 150462306a36Sopenharmony_ci {0xa0, 0xed, ZC3XX_R10C_RGB02}, 150562306a36Sopenharmony_ci {0xa0, 0xed, ZC3XX_R10D_RGB10}, 150662306a36Sopenharmony_ci {0xa0, 0x66, ZC3XX_R10E_RGB11}, 150762306a36Sopenharmony_ci {0xa0, 0xed, ZC3XX_R10F_RGB12}, 150862306a36Sopenharmony_ci {0xa0, 0xed, ZC3XX_R110_RGB20}, 150962306a36Sopenharmony_ci {0xa0, 0xed, ZC3XX_R111_RGB21}, 151062306a36Sopenharmony_ci {0xa0, 0x66, ZC3XX_R112_RGB22}, 151162306a36Sopenharmony_ci 151262306a36Sopenharmony_ci {0xa1, 0x01, 0x0180}, 151362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 151462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 151562306a36Sopenharmony_ci {0xaa, 0x13, 0x0031}, 151662306a36Sopenharmony_ci {0xaa, 0x14, 0x0001}, 151762306a36Sopenharmony_ci {0xaa, 0x0e, 0x0004}, 151862306a36Sopenharmony_ci {0xaa, 0x19, 0x00cd}, 151962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 152062306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, 152162306a36Sopenharmony_ci {0xa0, 0x62, ZC3XX_R192_EXPOSURELIMITLOW}, 152262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 152362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 152462306a36Sopenharmony_ci {0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW}, 152562306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 152662306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 152762306a36Sopenharmony_ci 152862306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 0x14 */ 152962306a36Sopenharmony_ci {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, 153062306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, 153162306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R01E_HSYNC_1}, 153262306a36Sopenharmony_ci {0xa0, 0x2c, ZC3XX_R01F_HSYNC_2}, 153362306a36Sopenharmony_ci {0xa0, 0x41, ZC3XX_R020_HSYNC_3}, 153462306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 153562306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 153662306a36Sopenharmony_ci {0xa1, 0x01, 0x0180}, 153762306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 153862306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 153962306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 154062306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 154162306a36Sopenharmony_ci {} 154262306a36Sopenharmony_ci}; 154362306a36Sopenharmony_cistatic const struct usb_action hdcs2020_Initial[] = { 154462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 154562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 154662306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 154762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT}, 154862306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 154962306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 155062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 155162306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 155262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 155362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 155462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 155562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 155662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 155762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 155862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 155962306a36Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 156062306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 156162306a36Sopenharmony_ci {0xaa, 0x1c, 0x0000}, 156262306a36Sopenharmony_ci {0xaa, 0x0a, 0x0001}, 156362306a36Sopenharmony_ci {0xaa, 0x0b, 0x0006}, 156462306a36Sopenharmony_ci {0xaa, 0x0c, 0x007a}, 156562306a36Sopenharmony_ci {0xaa, 0x0d, 0x00a7}, 156662306a36Sopenharmony_ci {0xaa, 0x03, 0x00fb}, 156762306a36Sopenharmony_ci {0xaa, 0x05, 0x0000}, 156862306a36Sopenharmony_ci {0xaa, 0x06, 0x0003}, 156962306a36Sopenharmony_ci {0xaa, 0x09, 0x0008}, 157062306a36Sopenharmony_ci {0xaa, 0x0f, 0x0018}, /* original setting */ 157162306a36Sopenharmony_ci {0xaa, 0x10, 0x0018}, 157262306a36Sopenharmony_ci {0xaa, 0x11, 0x0018}, 157362306a36Sopenharmony_ci {0xaa, 0x12, 0x0018}, 157462306a36Sopenharmony_ci {0xaa, 0x15, 0x004e}, 157562306a36Sopenharmony_ci {0xaa, 0x1c, 0x0004}, 157662306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION}, 157762306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 157862306a36Sopenharmony_ci {0xa0, 0x70, ZC3XX_R18D_YTARGET}, 157962306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 158062306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 158162306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 158262306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 158362306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 158462306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 158562306a36Sopenharmony_ci {0xa1, 0x01, 0x0002}, 158662306a36Sopenharmony_ci {0xa1, 0x01, 0x0008}, 158762306a36Sopenharmony_ci {0xa1, 0x01, 0x0180}, 158862306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 158962306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 159062306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 159162306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 159262306a36Sopenharmony_ci {0xa1, 0x01, 0x0008}, 159362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 159462306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 159562306a36Sopenharmony_ci {0xa1, 0x01, 0x01c8}, 159662306a36Sopenharmony_ci {0xa1, 0x01, 0x01c9}, 159762306a36Sopenharmony_ci {0xa1, 0x01, 0x01ca}, 159862306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 159962306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R120_GAMMA00}, /* gamma 4 */ 160062306a36Sopenharmony_ci {0xa0, 0x38, ZC3XX_R121_GAMMA01}, 160162306a36Sopenharmony_ci {0xa0, 0x59, ZC3XX_R122_GAMMA02}, 160262306a36Sopenharmony_ci {0xa0, 0x79, ZC3XX_R123_GAMMA03}, 160362306a36Sopenharmony_ci {0xa0, 0x92, ZC3XX_R124_GAMMA04}, 160462306a36Sopenharmony_ci {0xa0, 0xa7, ZC3XX_R125_GAMMA05}, 160562306a36Sopenharmony_ci {0xa0, 0xb9, ZC3XX_R126_GAMMA06}, 160662306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R127_GAMMA07}, 160762306a36Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R128_GAMMA08}, 160862306a36Sopenharmony_ci {0xa0, 0xdf, ZC3XX_R129_GAMMA09}, 160962306a36Sopenharmony_ci {0xa0, 0xe7, ZC3XX_R12A_GAMMA0A}, 161062306a36Sopenharmony_ci {0xa0, 0xee, ZC3XX_R12B_GAMMA0B}, 161162306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R12C_GAMMA0C}, 161262306a36Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R12D_GAMMA0D}, 161362306a36Sopenharmony_ci {0xa0, 0xfc, ZC3XX_R12E_GAMMA0E}, 161462306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, 161562306a36Sopenharmony_ci {0xa0, 0x26, ZC3XX_R130_GAMMA10}, 161662306a36Sopenharmony_ci {0xa0, 0x22, ZC3XX_R131_GAMMA11}, 161762306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R132_GAMMA12}, 161862306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R133_GAMMA13}, 161962306a36Sopenharmony_ci {0xa0, 0x16, ZC3XX_R134_GAMMA14}, 162062306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R135_GAMMA15}, 162162306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R136_GAMMA16}, 162262306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R137_GAMMA17}, 162362306a36Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R138_GAMMA18}, 162462306a36Sopenharmony_ci {0xa0, 0x09, ZC3XX_R139_GAMMA19}, 162562306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R13A_GAMMA1A}, 162662306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R13B_GAMMA1B}, 162762306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R13C_GAMMA1C}, 162862306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R13D_GAMMA1D}, 162962306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R13E_GAMMA1E}, 163062306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R13F_GAMMA1F}, 163162306a36Sopenharmony_ci {0xa0, 0x66, ZC3XX_R10A_RGB00}, /* matrix */ 163262306a36Sopenharmony_ci {0xa0, 0xed, ZC3XX_R10B_RGB01}, 163362306a36Sopenharmony_ci {0xa0, 0xed, ZC3XX_R10C_RGB02}, 163462306a36Sopenharmony_ci {0xa0, 0xed, ZC3XX_R10D_RGB10}, 163562306a36Sopenharmony_ci {0xa0, 0x66, ZC3XX_R10E_RGB11}, 163662306a36Sopenharmony_ci {0xa0, 0xed, ZC3XX_R10F_RGB12}, 163762306a36Sopenharmony_ci {0xa0, 0xed, ZC3XX_R110_RGB20}, 163862306a36Sopenharmony_ci {0xa0, 0xed, ZC3XX_R111_RGB21}, 163962306a36Sopenharmony_ci {0xa0, 0x66, ZC3XX_R112_RGB22}, 164062306a36Sopenharmony_ci {0xa1, 0x01, 0x0180}, 164162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 164262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 164362306a36Sopenharmony_ci /**** set exposure ***/ 164462306a36Sopenharmony_ci {0xaa, 0x13, 0x0031}, 164562306a36Sopenharmony_ci {0xaa, 0x14, 0x0001}, 164662306a36Sopenharmony_ci {0xaa, 0x0e, 0x0004}, 164762306a36Sopenharmony_ci {0xaa, 0x19, 0x00cd}, 164862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 164962306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, 165062306a36Sopenharmony_ci {0xa0, 0x62, ZC3XX_R192_EXPOSURELIMITLOW}, 165162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 165262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 165362306a36Sopenharmony_ci {0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW}, 165462306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 165562306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 165662306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, 165762306a36Sopenharmony_ci {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, 165862306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, 165962306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R01E_HSYNC_1}, 166062306a36Sopenharmony_ci {0xa0, 0x2c, ZC3XX_R01F_HSYNC_2}, 166162306a36Sopenharmony_ci {0xa0, 0x41, ZC3XX_R020_HSYNC_3}, 166262306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 166362306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 166462306a36Sopenharmony_ci {0xa1, 0x01, 0x0180}, 166562306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 166662306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 166762306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 166862306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 166962306a36Sopenharmony_ci {} 167062306a36Sopenharmony_ci}; 167162306a36Sopenharmony_cistatic const struct usb_action hdcs2020_50HZ[] = { 167262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 167362306a36Sopenharmony_ci {0xaa, 0x13, 0x0018}, /* 00,13,18,aa */ 167462306a36Sopenharmony_ci {0xaa, 0x14, 0x0001}, /* 00,14,01,aa */ 167562306a36Sopenharmony_ci {0xaa, 0x0e, 0x0005}, /* 00,0e,05,aa */ 167662306a36Sopenharmony_ci {0xaa, 0x19, 0x001f}, /* 00,19,1f,aa */ 167762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 167862306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,02,cc */ 167962306a36Sopenharmony_ci {0xa0, 0x76, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,76,cc */ 168062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 168162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 168262306a36Sopenharmony_ci {0xa0, 0x46, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,46,cc */ 168362306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 168462306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 168562306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */ 168662306a36Sopenharmony_ci {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,28,cc */ 168762306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R01D_HSYNC_0}, /* 00,1d,05,cc */ 168862306a36Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R01E_HSYNC_1}, /* 00,1e,1a,cc */ 168962306a36Sopenharmony_ci {0xa0, 0x2f, ZC3XX_R01F_HSYNC_2}, /* 00,1f,2f,cc */ 169062306a36Sopenharmony_ci {} 169162306a36Sopenharmony_ci}; 169262306a36Sopenharmony_cistatic const struct usb_action hdcs2020_60HZ[] = { 169362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 169462306a36Sopenharmony_ci {0xaa, 0x13, 0x0031}, /* 00,13,31,aa */ 169562306a36Sopenharmony_ci {0xaa, 0x14, 0x0001}, /* 00,14,01,aa */ 169662306a36Sopenharmony_ci {0xaa, 0x0e, 0x0004}, /* 00,0e,04,aa */ 169762306a36Sopenharmony_ci {0xaa, 0x19, 0x00cd}, /* 00,19,cd,aa */ 169862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 169962306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,02,cc */ 170062306a36Sopenharmony_ci {0xa0, 0x62, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,62,cc */ 170162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 170262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 170362306a36Sopenharmony_ci {0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,3d,cc */ 170462306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 170562306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 170662306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */ 170762306a36Sopenharmony_ci {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,28,cc */ 170862306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, /* 00,1d,04,cc */ 170962306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R01E_HSYNC_1}, /* 00,1e,18,cc */ 171062306a36Sopenharmony_ci {0xa0, 0x2c, ZC3XX_R01F_HSYNC_2}, /* 00,1f,2c,cc */ 171162306a36Sopenharmony_ci {} 171262306a36Sopenharmony_ci}; 171362306a36Sopenharmony_cistatic const struct usb_action hdcs2020_NoFlicker[] = { 171462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 171562306a36Sopenharmony_ci {0xaa, 0x13, 0x0010}, /* 00,13,10,aa */ 171662306a36Sopenharmony_ci {0xaa, 0x14, 0x0001}, /* 00,14,01,aa */ 171762306a36Sopenharmony_ci {0xaa, 0x0e, 0x0004}, /* 00,0e,04,aa */ 171862306a36Sopenharmony_ci {0xaa, 0x19, 0x0000}, /* 00,19,00,aa */ 171962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 172062306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,02,cc */ 172162306a36Sopenharmony_ci {0xa0, 0x70, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,70,cc */ 172262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 172362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 172462306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 172562306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 172662306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 172762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 172862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 172962306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, /* 00,1d,04,cc */ 173062306a36Sopenharmony_ci {0xa0, 0x17, ZC3XX_R01E_HSYNC_1}, /* 00,1e,17,cc */ 173162306a36Sopenharmony_ci {0xa0, 0x2a, ZC3XX_R01F_HSYNC_2}, /* 00,1f,2a,cc */ 173262306a36Sopenharmony_ci {} 173362306a36Sopenharmony_ci}; 173462306a36Sopenharmony_ci 173562306a36Sopenharmony_cistatic const struct usb_action hv7131b_InitialScale[] = { /* 320x240 */ 173662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 173762306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 173862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT}, 173962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 174062306a36Sopenharmony_ci {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 174162306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 174262306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 174362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 174462306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 174562306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 174662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 174762306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 174862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 174962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 175062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 175162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 175262306a36Sopenharmony_ci {0xaa, 0x30, 0x002d}, 175362306a36Sopenharmony_ci {0xaa, 0x01, 0x0005}, 175462306a36Sopenharmony_ci {0xaa, 0x11, 0x0000}, 175562306a36Sopenharmony_ci {0xaa, 0x13, 0x0001}, /* {0xaa, 0x13, 0x0000}, */ 175662306a36Sopenharmony_ci {0xaa, 0x14, 0x0001}, 175762306a36Sopenharmony_ci {0xaa, 0x15, 0x00e8}, 175862306a36Sopenharmony_ci {0xaa, 0x16, 0x0002}, 175962306a36Sopenharmony_ci {0xaa, 0x17, 0x0086}, /* 00,17,88,aa */ 176062306a36Sopenharmony_ci {0xaa, 0x31, 0x0038}, 176162306a36Sopenharmony_ci {0xaa, 0x32, 0x0038}, 176262306a36Sopenharmony_ci {0xaa, 0x33, 0x0038}, 176362306a36Sopenharmony_ci {0xaa, 0x5b, 0x0001}, 176462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 176562306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 176662306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 176762306a36Sopenharmony_ci {0xa0, 0x68, ZC3XX_R18D_YTARGET}, 176862306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 176962306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 177062306a36Sopenharmony_ci {0xa0, 0xc0, 0x019b}, 177162306a36Sopenharmony_ci {0xa0, 0xa0, 0x019c}, 177262306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R188_MINGAIN}, 177362306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 177462306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 177562306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 177662306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 177762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 177862306a36Sopenharmony_ci {0xaa, 0x02, 0x0090}, /* 00,02,80,aa */ 177962306a36Sopenharmony_ci {} 178062306a36Sopenharmony_ci}; 178162306a36Sopenharmony_ci 178262306a36Sopenharmony_cistatic const struct usb_action hv7131b_Initial[] = { /* 640x480*/ 178362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 178462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 178562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT}, 178662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 178762306a36Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 178862306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 178962306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 179062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 179162306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 179262306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 179362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 179462306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 179562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 179662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 179762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 179862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 179962306a36Sopenharmony_ci {0xaa, 0x30, 0x002d}, 180062306a36Sopenharmony_ci {0xaa, 0x01, 0x0005}, 180162306a36Sopenharmony_ci {0xaa, 0x11, 0x0001}, 180262306a36Sopenharmony_ci {0xaa, 0x13, 0x0000}, /* {0xaa, 0x13, 0x0001}; */ 180362306a36Sopenharmony_ci {0xaa, 0x14, 0x0001}, 180462306a36Sopenharmony_ci {0xaa, 0x15, 0x00e6}, 180562306a36Sopenharmony_ci {0xaa, 0x16, 0x0002}, 180662306a36Sopenharmony_ci {0xaa, 0x17, 0x0086}, 180762306a36Sopenharmony_ci {0xaa, 0x31, 0x0038}, 180862306a36Sopenharmony_ci {0xaa, 0x32, 0x0038}, 180962306a36Sopenharmony_ci {0xaa, 0x33, 0x0038}, 181062306a36Sopenharmony_ci {0xaa, 0x5b, 0x0001}, 181162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 181262306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 181362306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 181462306a36Sopenharmony_ci {0xa0, 0x70, ZC3XX_R18D_YTARGET}, 181562306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 181662306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 181762306a36Sopenharmony_ci {0xa0, 0xc0, 0x019b}, 181862306a36Sopenharmony_ci {0xa0, 0xa0, 0x019c}, 181962306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R188_MINGAIN}, 182062306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 182162306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 182262306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 182362306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 182462306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 182562306a36Sopenharmony_ci {0xaa, 0x02, 0x0090}, /* {0xaa, 0x02, 0x0080}, */ 182662306a36Sopenharmony_ci {} 182762306a36Sopenharmony_ci}; 182862306a36Sopenharmony_cistatic const struct usb_action hv7131b_50HZ[] = { /* 640x480*/ 182962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 183062306a36Sopenharmony_ci {0xaa, 0x25, 0x0007}, /* 00,25,07,aa */ 183162306a36Sopenharmony_ci {0xaa, 0x26, 0x0053}, /* 00,26,53,aa */ 183262306a36Sopenharmony_ci {0xaa, 0x27, 0x0000}, /* 00,27,00,aa */ 183362306a36Sopenharmony_ci {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 183462306a36Sopenharmony_ci {0xaa, 0x21, 0x0050}, /* 00,21,50,aa */ 183562306a36Sopenharmony_ci {0xaa, 0x22, 0x001b}, /* 00,22,1b,aa */ 183662306a36Sopenharmony_ci {0xaa, 0x23, 0x00fc}, /* 00,23,fc,aa */ 183762306a36Sopenharmony_ci {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */ 183862306a36Sopenharmony_ci {0xa0, 0x9b, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,9b,cc */ 183962306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,80,cc */ 184062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 184162306a36Sopenharmony_ci {0xa0, 0xea, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,ea,cc */ 184262306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,60,cc */ 184362306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0c,cc */ 184462306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,18,cc */ 184562306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,18,cc */ 184662306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 184762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */ 184862306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R01E_HSYNC_1}, /* 00,1e,50,cc */ 184962306a36Sopenharmony_ci {0xa0, 0x1b, ZC3XX_R01F_HSYNC_2}, /* 00,1f,1b,cc */ 185062306a36Sopenharmony_ci {0xa0, 0xfc, ZC3XX_R020_HSYNC_3}, /* 00,20,fc,cc */ 185162306a36Sopenharmony_ci {} 185262306a36Sopenharmony_ci}; 185362306a36Sopenharmony_cistatic const struct usb_action hv7131b_50HZScale[] = { /* 320x240 */ 185462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 185562306a36Sopenharmony_ci {0xaa, 0x25, 0x0007}, /* 00,25,07,aa */ 185662306a36Sopenharmony_ci {0xaa, 0x26, 0x0053}, /* 00,26,53,aa */ 185762306a36Sopenharmony_ci {0xaa, 0x27, 0x0000}, /* 00,27,00,aa */ 185862306a36Sopenharmony_ci {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 185962306a36Sopenharmony_ci {0xaa, 0x21, 0x0050}, /* 00,21,50,aa */ 186062306a36Sopenharmony_ci {0xaa, 0x22, 0x0012}, /* 00,22,12,aa */ 186162306a36Sopenharmony_ci {0xaa, 0x23, 0x0080}, /* 00,23,80,aa */ 186262306a36Sopenharmony_ci {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */ 186362306a36Sopenharmony_ci {0xa0, 0x9b, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,9b,cc */ 186462306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,80,cc */ 186562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,01,cc */ 186662306a36Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,d4,cc */ 186762306a36Sopenharmony_ci {0xa0, 0xc0, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,c0,cc */ 186862306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R18C_AEFREEZE}, /* 01,8c,07,cc */ 186962306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,0f,cc */ 187062306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,18,cc */ 187162306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 187262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */ 187362306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R01E_HSYNC_1}, /* 00,1e,50,cc */ 187462306a36Sopenharmony_ci {0xa0, 0x12, ZC3XX_R01F_HSYNC_2}, /* 00,1f,12,cc */ 187562306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R020_HSYNC_3}, /* 00,20,80,cc */ 187662306a36Sopenharmony_ci {} 187762306a36Sopenharmony_ci}; 187862306a36Sopenharmony_cistatic const struct usb_action hv7131b_60HZ[] = { /* 640x480*/ 187962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 188062306a36Sopenharmony_ci {0xaa, 0x25, 0x0007}, /* 00,25,07,aa */ 188162306a36Sopenharmony_ci {0xaa, 0x26, 0x00a1}, /* 00,26,a1,aa */ 188262306a36Sopenharmony_ci {0xaa, 0x27, 0x0020}, /* 00,27,20,aa */ 188362306a36Sopenharmony_ci {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 188462306a36Sopenharmony_ci {0xaa, 0x21, 0x0040}, /* 00,21,40,aa */ 188562306a36Sopenharmony_ci {0xaa, 0x22, 0x0013}, /* 00,22,13,aa */ 188662306a36Sopenharmony_ci {0xaa, 0x23, 0x004c}, /* 00,23,4c,aa */ 188762306a36Sopenharmony_ci {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */ 188862306a36Sopenharmony_ci {0xa0, 0x4d, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,4d,cc */ 188962306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,60,cc */ 189062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 189162306a36Sopenharmony_ci {0xa0, 0xc3, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,c3,cc */ 189262306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,50,cc */ 189362306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0c,cc */ 189462306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,18,cc */ 189562306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,18,cc */ 189662306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 189762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */ 189862306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R01E_HSYNC_1}, /* 00,1e,40,cc */ 189962306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R01F_HSYNC_2}, /* 00,1f,13,cc */ 190062306a36Sopenharmony_ci {0xa0, 0x4c, ZC3XX_R020_HSYNC_3}, /* 00,20,4c,cc */ 190162306a36Sopenharmony_ci {} 190262306a36Sopenharmony_ci}; 190362306a36Sopenharmony_cistatic const struct usb_action hv7131b_60HZScale[] = { /* 320x240 */ 190462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 190562306a36Sopenharmony_ci {0xaa, 0x25, 0x0007}, /* 00,25,07,aa */ 190662306a36Sopenharmony_ci {0xaa, 0x26, 0x00a1}, /* 00,26,a1,aa */ 190762306a36Sopenharmony_ci {0xaa, 0x27, 0x0020}, /* 00,27,20,aa */ 190862306a36Sopenharmony_ci {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 190962306a36Sopenharmony_ci {0xaa, 0x21, 0x00a0}, /* 00,21,a0,aa */ 191062306a36Sopenharmony_ci {0xaa, 0x22, 0x0016}, /* 00,22,16,aa */ 191162306a36Sopenharmony_ci {0xaa, 0x23, 0x0040}, /* 00,23,40,aa */ 191262306a36Sopenharmony_ci {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */ 191362306a36Sopenharmony_ci {0xa0, 0x4d, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,4d,cc */ 191462306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,60,cc */ 191562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,01,cc */ 191662306a36Sopenharmony_ci {0xa0, 0x86, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,86,cc */ 191762306a36Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,a0,cc */ 191862306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R18C_AEFREEZE}, /* 01,8c,07,cc */ 191962306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,0f,cc */ 192062306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,18,cc */ 192162306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 192262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */ 192362306a36Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,a0,cc */ 192462306a36Sopenharmony_ci {0xa0, 0x16, ZC3XX_R01F_HSYNC_2}, /* 00,1f,16,cc */ 192562306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R020_HSYNC_3}, /* 00,20,40,cc */ 192662306a36Sopenharmony_ci {} 192762306a36Sopenharmony_ci}; 192862306a36Sopenharmony_cistatic const struct usb_action hv7131b_NoFlicker[] = { /* 640x480*/ 192962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 193062306a36Sopenharmony_ci {0xaa, 0x25, 0x0003}, /* 00,25,03,aa */ 193162306a36Sopenharmony_ci {0xaa, 0x26, 0x0000}, /* 00,26,00,aa */ 193262306a36Sopenharmony_ci {0xaa, 0x27, 0x0000}, /* 00,27,00,aa */ 193362306a36Sopenharmony_ci {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 193462306a36Sopenharmony_ci {0xaa, 0x21, 0x0010}, /* 00,21,10,aa */ 193562306a36Sopenharmony_ci {0xaa, 0x22, 0x0000}, /* 00,22,00,aa */ 193662306a36Sopenharmony_ci {0xaa, 0x23, 0x0003}, /* 00,23,03,aa */ 193762306a36Sopenharmony_ci {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */ 193862306a36Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,f8,cc */ 193962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,00,cc */ 194062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 194162306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,02,cc */ 194262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,00,cc */ 194362306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 194462306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 194562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 194662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 194762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */ 194862306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R01E_HSYNC_1}, /* 00,1e,10,cc */ 194962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, /* 00,1f,00,cc */ 195062306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R020_HSYNC_3}, /* 00,20,03,cc */ 195162306a36Sopenharmony_ci {} 195262306a36Sopenharmony_ci}; 195362306a36Sopenharmony_cistatic const struct usb_action hv7131b_NoFlickerScale[] = { /* 320x240 */ 195462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 195562306a36Sopenharmony_ci {0xaa, 0x25, 0x0003}, /* 00,25,03,aa */ 195662306a36Sopenharmony_ci {0xaa, 0x26, 0x0000}, /* 00,26,00,aa */ 195762306a36Sopenharmony_ci {0xaa, 0x27, 0x0000}, /* 00,27,00,aa */ 195862306a36Sopenharmony_ci {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 195962306a36Sopenharmony_ci {0xaa, 0x21, 0x00a0}, /* 00,21,a0,aa */ 196062306a36Sopenharmony_ci {0xaa, 0x22, 0x0016}, /* 00,22,16,aa */ 196162306a36Sopenharmony_ci {0xaa, 0x23, 0x0040}, /* 00,23,40,aa */ 196262306a36Sopenharmony_ci {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */ 196362306a36Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,f8,cc */ 196462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,00,cc */ 196562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 196662306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,02,cc */ 196762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,00,cc */ 196862306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 196962306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 197062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 197162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 197262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */ 197362306a36Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,a0,cc */ 197462306a36Sopenharmony_ci {0xa0, 0x16, ZC3XX_R01F_HSYNC_2}, /* 00,1f,16,cc */ 197562306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R020_HSYNC_3}, /* 00,20,40,cc */ 197662306a36Sopenharmony_ci {} 197762306a36Sopenharmony_ci}; 197862306a36Sopenharmony_ci 197962306a36Sopenharmony_ci/* from lPEPI264v.inf (hv7131b!) */ 198062306a36Sopenharmony_cistatic const struct usb_action hv7131r_InitialScale[] = { 198162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 198262306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 198362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, 198462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 198562306a36Sopenharmony_ci {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 198662306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 198762306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 198862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 198962306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 199062306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 199162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 199262306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 199362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 199462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 199562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, 199662306a36Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 199762306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, 199862306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 199962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 200062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 200162306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 200262306a36Sopenharmony_ci {0xdd, 0x00, 0x0200}, 200362306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 200462306a36Sopenharmony_ci {0xaa, 0x01, 0x000c}, 200562306a36Sopenharmony_ci {0xaa, 0x11, 0x0000}, 200662306a36Sopenharmony_ci {0xaa, 0x13, 0x0000}, 200762306a36Sopenharmony_ci {0xaa, 0x14, 0x0001}, 200862306a36Sopenharmony_ci {0xaa, 0x15, 0x00e8}, 200962306a36Sopenharmony_ci {0xaa, 0x16, 0x0002}, 201062306a36Sopenharmony_ci {0xaa, 0x17, 0x0088}, 201162306a36Sopenharmony_ci {0xaa, 0x30, 0x000b}, 201262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 201362306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 201462306a36Sopenharmony_ci {0xa0, 0x78, ZC3XX_R18D_YTARGET}, 201562306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, 201662306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 201762306a36Sopenharmony_ci {0xa0, 0xc0, 0x019b}, 201862306a36Sopenharmony_ci {0xa0, 0xa0, 0x019c}, 201962306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 202062306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 202162306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 202262306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 202362306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 202462306a36Sopenharmony_ci {} 202562306a36Sopenharmony_ci}; 202662306a36Sopenharmony_cistatic const struct usb_action hv7131r_Initial[] = { 202762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 202862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 202962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, 203062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 203162306a36Sopenharmony_ci {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 203262306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 203362306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 203462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 203562306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 203662306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 203762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 203862306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 203962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 204062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 204162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, 204262306a36Sopenharmony_ci {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, 204362306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, 204462306a36Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, 204562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 204662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 204762306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 204862306a36Sopenharmony_ci {0xdd, 0x00, 0x0200}, 204962306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 205062306a36Sopenharmony_ci {0xaa, 0x01, 0x000c}, 205162306a36Sopenharmony_ci {0xaa, 0x11, 0x0000}, 205262306a36Sopenharmony_ci {0xaa, 0x13, 0x0000}, 205362306a36Sopenharmony_ci {0xaa, 0x14, 0x0001}, 205462306a36Sopenharmony_ci {0xaa, 0x15, 0x00e6}, 205562306a36Sopenharmony_ci {0xaa, 0x16, 0x0002}, 205662306a36Sopenharmony_ci {0xaa, 0x17, 0x0086}, 205762306a36Sopenharmony_ci {0xaa, 0x30, 0x000b}, 205862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 205962306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 206062306a36Sopenharmony_ci {0xa0, 0x78, ZC3XX_R18D_YTARGET}, 206162306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, 206262306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 206362306a36Sopenharmony_ci {0xa0, 0xc0, 0x019b}, 206462306a36Sopenharmony_ci {0xa0, 0xa0, 0x019c}, 206562306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 206662306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 206762306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 206862306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 206962306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 207062306a36Sopenharmony_ci {} 207162306a36Sopenharmony_ci}; 207262306a36Sopenharmony_cistatic const struct usb_action hv7131r_50HZ[] = { 207362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 207462306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R190_EXPOSURELIMITHIGH}, 207562306a36Sopenharmony_ci {0xa0, 0x68, ZC3XX_R191_EXPOSURELIMITMID}, 207662306a36Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R192_EXPOSURELIMITLOW}, 207762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 207862306a36Sopenharmony_ci {0xa0, 0xea, ZC3XX_R196_ANTIFLICKERMID}, 207962306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R197_ANTIFLICKERLOW}, 208062306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18C_AEFREEZE}, 208162306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 208262306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 208362306a36Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 208462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, 208562306a36Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, 208662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, 208762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R020_HSYNC_3}, 208862306a36Sopenharmony_ci {} 208962306a36Sopenharmony_ci}; 209062306a36Sopenharmony_cistatic const struct usb_action hv7131r_50HZScale[] = { 209162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 209262306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R190_EXPOSURELIMITHIGH}, 209362306a36Sopenharmony_ci {0xa0, 0xd1, ZC3XX_R191_EXPOSURELIMITMID}, 209462306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R192_EXPOSURELIMITLOW}, 209562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH}, 209662306a36Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R196_ANTIFLICKERMID}, 209762306a36Sopenharmony_ci {0xa0, 0xc0, ZC3XX_R197_ANTIFLICKERLOW}, 209862306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18C_AEFREEZE}, 209962306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 210062306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 210162306a36Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 210262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, 210362306a36Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, 210462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, 210562306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R020_HSYNC_3}, 210662306a36Sopenharmony_ci {} 210762306a36Sopenharmony_ci}; 210862306a36Sopenharmony_cistatic const struct usb_action hv7131r_60HZ[] = { 210962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 211062306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R190_EXPOSURELIMITHIGH}, 211162306a36Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R191_EXPOSURELIMITMID}, 211262306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW}, 211362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 211462306a36Sopenharmony_ci {0xa0, 0xc3, ZC3XX_R196_ANTIFLICKERMID}, 211562306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R197_ANTIFLICKERLOW}, 211662306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18C_AEFREEZE}, 211762306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 211862306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 211962306a36Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 212062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, 212162306a36Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, 212262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, 212362306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R020_HSYNC_3}, 212462306a36Sopenharmony_ci {} 212562306a36Sopenharmony_ci}; 212662306a36Sopenharmony_cistatic const struct usb_action hv7131r_60HZScale[] = { 212762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 212862306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R190_EXPOSURELIMITHIGH}, 212962306a36Sopenharmony_ci {0xa0, 0x35, ZC3XX_R191_EXPOSURELIMITMID}, 213062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, 213162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH}, 213262306a36Sopenharmony_ci {0xa0, 0x86, ZC3XX_R196_ANTIFLICKERMID}, 213362306a36Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R197_ANTIFLICKERLOW}, 213462306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18C_AEFREEZE}, 213562306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 213662306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 213762306a36Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 213862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, 213962306a36Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, 214062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, 214162306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R020_HSYNC_3}, 214262306a36Sopenharmony_ci {} 214362306a36Sopenharmony_ci}; 214462306a36Sopenharmony_cistatic const struct usb_action hv7131r_NoFlicker[] = { 214562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 214662306a36Sopenharmony_ci {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, 214762306a36Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID}, 214862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, 214962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 215062306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R196_ANTIFLICKERMID}, 215162306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R197_ANTIFLICKERLOW}, 215262306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, 215362306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, 215462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 215562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 215662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, 215762306a36Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, 215862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, 215962306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R020_HSYNC_3}, 216062306a36Sopenharmony_ci {} 216162306a36Sopenharmony_ci}; 216262306a36Sopenharmony_cistatic const struct usb_action hv7131r_NoFlickerScale[] = { 216362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 216462306a36Sopenharmony_ci {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, 216562306a36Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID}, 216662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, 216762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 216862306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R196_ANTIFLICKERMID}, 216962306a36Sopenharmony_ci {0xa0, 0xb0, ZC3XX_R197_ANTIFLICKERLOW}, 217062306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, 217162306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, 217262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 217362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 217462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, 217562306a36Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, 217662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, 217762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R020_HSYNC_3}, 217862306a36Sopenharmony_ci {} 217962306a36Sopenharmony_ci}; 218062306a36Sopenharmony_ci 218162306a36Sopenharmony_cistatic const struct usb_action icm105a_InitialScale[] = { 218262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 218362306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 218462306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 218562306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R010_CMOSSENSORSELECT}, 218662306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 218762306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 218862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 218962306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 219062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 219162306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 219262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 219362306a36Sopenharmony_ci {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, 219462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R097_WINYSTARTHIGH}, 219562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R098_WINYSTARTLOW}, 219662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R099_WINXSTARTHIGH}, 219762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R09A_WINXSTARTLOW}, 219862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R11A_FIRSTYLOW}, 219962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R11C_FIRSTXLOW}, 220062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, 220162306a36Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 220262306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, 220362306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 220462306a36Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 220562306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 220662306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 220762306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 220862306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 220962306a36Sopenharmony_ci {0xaa, 0x01, 0x0010}, 221062306a36Sopenharmony_ci {0xaa, 0x03, 0x0000}, 221162306a36Sopenharmony_ci {0xaa, 0x04, 0x0001}, 221262306a36Sopenharmony_ci {0xaa, 0x05, 0x0020}, 221362306a36Sopenharmony_ci {0xaa, 0x06, 0x0001}, 221462306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 221562306a36Sopenharmony_ci {0xaa, 0x03, 0x0001}, 221662306a36Sopenharmony_ci {0xaa, 0x04, 0x0011}, 221762306a36Sopenharmony_ci {0xaa, 0x05, 0x00a0}, 221862306a36Sopenharmony_ci {0xaa, 0x06, 0x0001}, 221962306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 222062306a36Sopenharmony_ci {0xaa, 0x03, 0x0002}, 222162306a36Sopenharmony_ci {0xaa, 0x04, 0x0013}, 222262306a36Sopenharmony_ci {0xaa, 0x05, 0x0020}, 222362306a36Sopenharmony_ci {0xaa, 0x06, 0x0001}, 222462306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 222562306a36Sopenharmony_ci {0xaa, 0x03, 0x0003}, 222662306a36Sopenharmony_ci {0xaa, 0x04, 0x0015}, 222762306a36Sopenharmony_ci {0xaa, 0x05, 0x0020}, 222862306a36Sopenharmony_ci {0xaa, 0x06, 0x0005}, 222962306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 223062306a36Sopenharmony_ci {0xaa, 0x03, 0x0004}, 223162306a36Sopenharmony_ci {0xaa, 0x04, 0x0017}, 223262306a36Sopenharmony_ci {0xaa, 0x05, 0x0020}, 223362306a36Sopenharmony_ci {0xaa, 0x06, 0x000d}, 223462306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 223562306a36Sopenharmony_ci {0xaa, 0x03, 0x0005}, 223662306a36Sopenharmony_ci {0xaa, 0x04, 0x0019}, 223762306a36Sopenharmony_ci {0xaa, 0x05, 0x0020}, 223862306a36Sopenharmony_ci {0xaa, 0x06, 0x0005}, 223962306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 224062306a36Sopenharmony_ci {0xaa, 0x03, 0x0006}, 224162306a36Sopenharmony_ci {0xaa, 0x04, 0x0017}, 224262306a36Sopenharmony_ci {0xaa, 0x05, 0x0026}, 224362306a36Sopenharmony_ci {0xaa, 0x06, 0x0005}, 224462306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 224562306a36Sopenharmony_ci {0xaa, 0x03, 0x0007}, 224662306a36Sopenharmony_ci {0xaa, 0x04, 0x0019}, 224762306a36Sopenharmony_ci {0xaa, 0x05, 0x0022}, 224862306a36Sopenharmony_ci {0xaa, 0x06, 0x0005}, 224962306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 225062306a36Sopenharmony_ci {0xaa, 0x03, 0x0008}, 225162306a36Sopenharmony_ci {0xaa, 0x04, 0x0021}, 225262306a36Sopenharmony_ci {0xaa, 0x05, 0x00aa}, 225362306a36Sopenharmony_ci {0xaa, 0x06, 0x0005}, 225462306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 225562306a36Sopenharmony_ci {0xaa, 0x03, 0x0009}, 225662306a36Sopenharmony_ci {0xaa, 0x04, 0x0023}, 225762306a36Sopenharmony_ci {0xaa, 0x05, 0x00aa}, 225862306a36Sopenharmony_ci {0xaa, 0x06, 0x000d}, 225962306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 226062306a36Sopenharmony_ci {0xaa, 0x03, 0x000a}, 226162306a36Sopenharmony_ci {0xaa, 0x04, 0x0025}, 226262306a36Sopenharmony_ci {0xaa, 0x05, 0x00aa}, 226362306a36Sopenharmony_ci {0xaa, 0x06, 0x0005}, 226462306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 226562306a36Sopenharmony_ci {0xaa, 0x03, 0x000b}, 226662306a36Sopenharmony_ci {0xaa, 0x04, 0x00ec}, 226762306a36Sopenharmony_ci {0xaa, 0x05, 0x002e}, 226862306a36Sopenharmony_ci {0xaa, 0x06, 0x0005}, 226962306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 227062306a36Sopenharmony_ci {0xaa, 0x03, 0x000c}, 227162306a36Sopenharmony_ci {0xaa, 0x04, 0x00fa}, 227262306a36Sopenharmony_ci {0xaa, 0x05, 0x002a}, 227362306a36Sopenharmony_ci {0xaa, 0x06, 0x0005}, 227462306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 227562306a36Sopenharmony_ci {0xaa, 0x07, 0x000d}, 227662306a36Sopenharmony_ci {0xaa, 0x01, 0x0005}, 227762306a36Sopenharmony_ci {0xaa, 0x94, 0x0002}, 227862306a36Sopenharmony_ci {0xaa, 0x90, 0x0000}, 227962306a36Sopenharmony_ci {0xaa, 0x91, 0x001f}, 228062306a36Sopenharmony_ci {0xaa, 0x10, 0x0064}, 228162306a36Sopenharmony_ci {0xaa, 0x9b, 0x00f0}, 228262306a36Sopenharmony_ci {0xaa, 0x9c, 0x0002}, 228362306a36Sopenharmony_ci {0xaa, 0x14, 0x001a}, 228462306a36Sopenharmony_ci {0xaa, 0x20, 0x0080}, 228562306a36Sopenharmony_ci {0xaa, 0x22, 0x0080}, 228662306a36Sopenharmony_ci {0xaa, 0x24, 0x0080}, 228762306a36Sopenharmony_ci {0xaa, 0x26, 0x0080}, 228862306a36Sopenharmony_ci {0xaa, 0x00, 0x0084}, 228962306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 229062306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 229162306a36Sopenharmony_ci {0xaa, 0xa8, 0x00c0}, 229262306a36Sopenharmony_ci {0xa1, 0x01, 0x0002}, 229362306a36Sopenharmony_ci {0xa1, 0x01, 0x0008}, 229462306a36Sopenharmony_ci {0xa1, 0x01, 0x0180}, 229562306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 229662306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 229762306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 229862306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 229962306a36Sopenharmony_ci {0xa1, 0x01, 0x0008}, 230062306a36Sopenharmony_ci 230162306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 230262306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 230362306a36Sopenharmony_ci {0xa1, 0x01, 0x01c8}, 230462306a36Sopenharmony_ci {0xa1, 0x01, 0x01c9}, 230562306a36Sopenharmony_ci {0xa1, 0x01, 0x01ca}, 230662306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 230762306a36Sopenharmony_ci {0xa0, 0x52, ZC3XX_R10A_RGB00}, /* matrix */ 230862306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10B_RGB01}, 230962306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10C_RGB02}, 231062306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10D_RGB10}, 231162306a36Sopenharmony_ci {0xa0, 0x52, ZC3XX_R10E_RGB11}, 231262306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10F_RGB12}, 231362306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R110_RGB20}, 231462306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R111_RGB21}, 231562306a36Sopenharmony_ci {0xa0, 0x52, ZC3XX_R112_RGB22}, 231662306a36Sopenharmony_ci {0xa1, 0x01, 0x0180}, 231762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 231862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 231962306a36Sopenharmony_ci {0xaa, 0x0d, 0x0003}, 232062306a36Sopenharmony_ci {0xaa, 0x0c, 0x008c}, 232162306a36Sopenharmony_ci {0xaa, 0x0e, 0x0095}, 232262306a36Sopenharmony_ci {0xaa, 0x0f, 0x0002}, 232362306a36Sopenharmony_ci {0xaa, 0x1c, 0x0094}, 232462306a36Sopenharmony_ci {0xaa, 0x1d, 0x0002}, 232562306a36Sopenharmony_ci {0xaa, 0x20, 0x0080}, 232662306a36Sopenharmony_ci {0xaa, 0x22, 0x0080}, 232762306a36Sopenharmony_ci {0xaa, 0x24, 0x0080}, 232862306a36Sopenharmony_ci {0xaa, 0x26, 0x0080}, 232962306a36Sopenharmony_ci {0xaa, 0x00, 0x0084}, 233062306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, 233162306a36Sopenharmony_ci {0xa0, 0x94, ZC3XX_R0A4_EXPOSURETIMELOW}, 233262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 233362306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, 233462306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, 233562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 233662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 233762306a36Sopenharmony_ci {0xa0, 0x84, ZC3XX_R197_ANTIFLICKERLOW}, 233862306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 233962306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 234062306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 234162306a36Sopenharmony_ci {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, 234262306a36Sopenharmony_ci {0xa0, 0xe3, ZC3XX_R01D_HSYNC_0}, 234362306a36Sopenharmony_ci {0xa0, 0xec, ZC3XX_R01E_HSYNC_1}, 234462306a36Sopenharmony_ci {0xa0, 0xf5, ZC3XX_R01F_HSYNC_2}, 234562306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 234662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 234762306a36Sopenharmony_ci {0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN}, 234862306a36Sopenharmony_ci {0xa0, 0xc0, ZC3XX_R11D_GLOBALGAIN}, 234962306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 235062306a36Sopenharmony_ci {0xa1, 0x01, 0x0180}, 235162306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 235262306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 235362306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 235462306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 235562306a36Sopenharmony_ci {} 235662306a36Sopenharmony_ci}; 235762306a36Sopenharmony_ci 235862306a36Sopenharmony_cistatic const struct usb_action icm105a_Initial[] = { 235962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 236062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 236162306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 236262306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R010_CMOSSENSORSELECT}, 236362306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 236462306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 236562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 236662306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 236762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 236862306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 236962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 237062306a36Sopenharmony_ci {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, 237162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R097_WINYSTARTHIGH}, 237262306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R098_WINYSTARTLOW}, 237362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R099_WINXSTARTHIGH}, 237462306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09A_WINXSTARTLOW}, 237562306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R11A_FIRSTYLOW}, 237662306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R11C_FIRSTXLOW}, 237762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, 237862306a36Sopenharmony_ci {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, 237962306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, 238062306a36Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, 238162306a36Sopenharmony_ci {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 238262306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 238362306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 238462306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 238562306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 238662306a36Sopenharmony_ci {0xaa, 0x01, 0x0010}, 238762306a36Sopenharmony_ci {0xaa, 0x03, 0x0000}, 238862306a36Sopenharmony_ci {0xaa, 0x04, 0x0001}, 238962306a36Sopenharmony_ci {0xaa, 0x05, 0x0020}, 239062306a36Sopenharmony_ci {0xaa, 0x06, 0x0001}, 239162306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 239262306a36Sopenharmony_ci {0xaa, 0x03, 0x0001}, 239362306a36Sopenharmony_ci {0xaa, 0x04, 0x0011}, 239462306a36Sopenharmony_ci {0xaa, 0x05, 0x00a0}, 239562306a36Sopenharmony_ci {0xaa, 0x06, 0x0001}, 239662306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 239762306a36Sopenharmony_ci {0xaa, 0x03, 0x0002}, 239862306a36Sopenharmony_ci {0xaa, 0x04, 0x0013}, 239962306a36Sopenharmony_ci {0xaa, 0x05, 0x0020}, 240062306a36Sopenharmony_ci {0xaa, 0x06, 0x0001}, 240162306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 240262306a36Sopenharmony_ci {0xaa, 0x03, 0x0003}, 240362306a36Sopenharmony_ci {0xaa, 0x04, 0x0015}, 240462306a36Sopenharmony_ci {0xaa, 0x05, 0x0020}, 240562306a36Sopenharmony_ci {0xaa, 0x06, 0x0005}, 240662306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 240762306a36Sopenharmony_ci {0xaa, 0x03, 0x0004}, 240862306a36Sopenharmony_ci {0xaa, 0x04, 0x0017}, 240962306a36Sopenharmony_ci {0xaa, 0x05, 0x0020}, 241062306a36Sopenharmony_ci {0xaa, 0x06, 0x000d}, 241162306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 241262306a36Sopenharmony_ci {0xaa, 0x03, 0x0005}, 241362306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R092_I2CADDRESSSELECT}, 241462306a36Sopenharmony_ci {0xa0, 0x19, ZC3XX_R093_I2CSETVALUE}, 241562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 241662306a36Sopenharmony_ci {0xa1, 0x01, 0x0091}, 241762306a36Sopenharmony_ci {0xaa, 0x05, 0x0020}, 241862306a36Sopenharmony_ci {0xaa, 0x06, 0x0005}, 241962306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 242062306a36Sopenharmony_ci {0xaa, 0x03, 0x0006}, 242162306a36Sopenharmony_ci {0xaa, 0x04, 0x0017}, 242262306a36Sopenharmony_ci {0xaa, 0x05, 0x0026}, 242362306a36Sopenharmony_ci {0xaa, 0x06, 0x0005}, 242462306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 242562306a36Sopenharmony_ci {0xaa, 0x03, 0x0007}, 242662306a36Sopenharmony_ci {0xaa, 0x04, 0x0019}, 242762306a36Sopenharmony_ci {0xaa, 0x05, 0x0022}, 242862306a36Sopenharmony_ci {0xaa, 0x06, 0x0005}, 242962306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 243062306a36Sopenharmony_ci {0xaa, 0x03, 0x0008}, 243162306a36Sopenharmony_ci {0xaa, 0x04, 0x0021}, 243262306a36Sopenharmony_ci {0xaa, 0x05, 0x00aa}, 243362306a36Sopenharmony_ci {0xaa, 0x06, 0x0005}, 243462306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 243562306a36Sopenharmony_ci {0xaa, 0x03, 0x0009}, 243662306a36Sopenharmony_ci {0xaa, 0x04, 0x0023}, 243762306a36Sopenharmony_ci {0xaa, 0x05, 0x00aa}, 243862306a36Sopenharmony_ci {0xaa, 0x06, 0x000d}, 243962306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 244062306a36Sopenharmony_ci {0xaa, 0x03, 0x000a}, 244162306a36Sopenharmony_ci {0xaa, 0x04, 0x0025}, 244262306a36Sopenharmony_ci {0xaa, 0x05, 0x00aa}, 244362306a36Sopenharmony_ci {0xaa, 0x06, 0x0005}, 244462306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 244562306a36Sopenharmony_ci {0xaa, 0x03, 0x000b}, 244662306a36Sopenharmony_ci {0xaa, 0x04, 0x00ec}, 244762306a36Sopenharmony_ci {0xaa, 0x05, 0x002e}, 244862306a36Sopenharmony_ci {0xaa, 0x06, 0x0005}, 244962306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 245062306a36Sopenharmony_ci {0xaa, 0x03, 0x000c}, 245162306a36Sopenharmony_ci {0xaa, 0x04, 0x00fa}, 245262306a36Sopenharmony_ci {0xaa, 0x05, 0x002a}, 245362306a36Sopenharmony_ci {0xaa, 0x06, 0x0005}, 245462306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 245562306a36Sopenharmony_ci {0xaa, 0x07, 0x000d}, 245662306a36Sopenharmony_ci {0xaa, 0x01, 0x0005}, 245762306a36Sopenharmony_ci {0xaa, 0x94, 0x0002}, 245862306a36Sopenharmony_ci {0xaa, 0x90, 0x0000}, 245962306a36Sopenharmony_ci {0xaa, 0x91, 0x0010}, 246062306a36Sopenharmony_ci {0xaa, 0x10, 0x0064}, 246162306a36Sopenharmony_ci {0xaa, 0x9b, 0x00f0}, 246262306a36Sopenharmony_ci {0xaa, 0x9c, 0x0002}, 246362306a36Sopenharmony_ci {0xaa, 0x14, 0x001a}, 246462306a36Sopenharmony_ci {0xaa, 0x20, 0x0080}, 246562306a36Sopenharmony_ci {0xaa, 0x22, 0x0080}, 246662306a36Sopenharmony_ci {0xaa, 0x24, 0x0080}, 246762306a36Sopenharmony_ci {0xaa, 0x26, 0x0080}, 246862306a36Sopenharmony_ci {0xaa, 0x00, 0x0084}, 246962306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 247062306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 247162306a36Sopenharmony_ci {0xaa, 0xa8, 0x0080}, 247262306a36Sopenharmony_ci {0xa0, 0x78, ZC3XX_R18D_YTARGET}, 247362306a36Sopenharmony_ci {0xa1, 0x01, 0x0002}, 247462306a36Sopenharmony_ci {0xa1, 0x01, 0x0008}, 247562306a36Sopenharmony_ci {0xa1, 0x01, 0x0180}, 247662306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 247762306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 247862306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 247962306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 248062306a36Sopenharmony_ci {0xa1, 0x01, 0x0008}, 248162306a36Sopenharmony_ci 248262306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 248362306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 248462306a36Sopenharmony_ci {0xa1, 0x01, 0x01c8}, 248562306a36Sopenharmony_ci {0xa1, 0x01, 0x01c9}, 248662306a36Sopenharmony_ci {0xa1, 0x01, 0x01ca}, 248762306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 248862306a36Sopenharmony_ci 248962306a36Sopenharmony_ci {0xa0, 0x52, ZC3XX_R10A_RGB00}, /* matrix */ 249062306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10B_RGB01}, 249162306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10C_RGB02}, 249262306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10D_RGB10}, 249362306a36Sopenharmony_ci {0xa0, 0x52, ZC3XX_R10E_RGB11}, 249462306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10F_RGB12}, 249562306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R110_RGB20}, 249662306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R111_RGB21}, 249762306a36Sopenharmony_ci {0xa0, 0x52, ZC3XX_R112_RGB22}, 249862306a36Sopenharmony_ci {0xa1, 0x01, 0x0180}, 249962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 250062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 250162306a36Sopenharmony_ci {0xaa, 0x0d, 0x0003}, 250262306a36Sopenharmony_ci {0xaa, 0x0c, 0x0020}, 250362306a36Sopenharmony_ci {0xaa, 0x0e, 0x000e}, 250462306a36Sopenharmony_ci {0xaa, 0x0f, 0x0002}, 250562306a36Sopenharmony_ci {0xaa, 0x1c, 0x000d}, 250662306a36Sopenharmony_ci {0xaa, 0x1d, 0x0002}, 250762306a36Sopenharmony_ci {0xaa, 0x20, 0x0080}, 250862306a36Sopenharmony_ci {0xaa, 0x22, 0x0080}, 250962306a36Sopenharmony_ci {0xaa, 0x24, 0x0080}, 251062306a36Sopenharmony_ci {0xaa, 0x26, 0x0080}, 251162306a36Sopenharmony_ci {0xaa, 0x00, 0x0084}, 251262306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, 251362306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R0A4_EXPOSURETIMELOW}, 251462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 251562306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, 251662306a36Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R192_EXPOSURELIMITLOW}, 251762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 251862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 251962306a36Sopenharmony_ci {0xa0, 0x4b, ZC3XX_R197_ANTIFLICKERLOW}, 252062306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 252162306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 252262306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 252362306a36Sopenharmony_ci {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, 252462306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01D_HSYNC_0}, 252562306a36Sopenharmony_ci {0xa0, 0xd8, ZC3XX_R01E_HSYNC_1}, 252662306a36Sopenharmony_ci {0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, 252762306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 252862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 252962306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 253062306a36Sopenharmony_ci {0xa1, 0x01, 0x0180}, 253162306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 253262306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 253362306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 253462306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 253562306a36Sopenharmony_ci {} 253662306a36Sopenharmony_ci}; 253762306a36Sopenharmony_cistatic const struct usb_action icm105a_50HZScale[] = { 253862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 253962306a36Sopenharmony_ci {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ 254062306a36Sopenharmony_ci {0xaa, 0x0c, 0x0020}, /* 00,0c,20,aa */ 254162306a36Sopenharmony_ci {0xaa, 0x0e, 0x000e}, /* 00,0e,0e,aa */ 254262306a36Sopenharmony_ci {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */ 254362306a36Sopenharmony_ci {0xaa, 0x1c, 0x000d}, /* 00,1c,0d,aa */ 254462306a36Sopenharmony_ci {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 254562306a36Sopenharmony_ci {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */ 254662306a36Sopenharmony_ci {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */ 254762306a36Sopenharmony_ci {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */ 254862306a36Sopenharmony_ci {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */ 254962306a36Sopenharmony_ci {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */ 255062306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */ 255162306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,0d,cc */ 255262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 255362306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 255462306a36Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,1a,cc */ 255562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 255662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 255762306a36Sopenharmony_ci {0xa0, 0x4b, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,4b,cc */ 255862306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 255962306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 256062306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 256162306a36Sopenharmony_ci {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */ 256262306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c8,cc */ 256362306a36Sopenharmony_ci {0xa0, 0xd8, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d8,cc */ 256462306a36Sopenharmony_ci {0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ea,cc */ 256562306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 256662306a36Sopenharmony_ci {} 256762306a36Sopenharmony_ci}; 256862306a36Sopenharmony_cistatic const struct usb_action icm105a_50HZ[] = { 256962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 257062306a36Sopenharmony_ci {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ 257162306a36Sopenharmony_ci {0xaa, 0x0c, 0x008c}, /* 00,0c,8c,aa */ 257262306a36Sopenharmony_ci {0xaa, 0x0e, 0x0095}, /* 00,0e,95,aa */ 257362306a36Sopenharmony_ci {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */ 257462306a36Sopenharmony_ci {0xaa, 0x1c, 0x0094}, /* 00,1c,94,aa */ 257562306a36Sopenharmony_ci {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 257662306a36Sopenharmony_ci {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */ 257762306a36Sopenharmony_ci {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */ 257862306a36Sopenharmony_ci {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */ 257962306a36Sopenharmony_ci {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */ 258062306a36Sopenharmony_ci {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */ 258162306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */ 258262306a36Sopenharmony_ci {0xa0, 0x94, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,94,cc */ 258362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 258462306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 258562306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,20,cc */ 258662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 258762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 258862306a36Sopenharmony_ci {0xa0, 0x84, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,84,cc */ 258962306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 259062306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 259162306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 259262306a36Sopenharmony_ci {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */ 259362306a36Sopenharmony_ci {0xa0, 0xe3, ZC3XX_R01D_HSYNC_0}, /* 00,1d,e3,cc */ 259462306a36Sopenharmony_ci {0xa0, 0xec, ZC3XX_R01E_HSYNC_1}, /* 00,1e,ec,cc */ 259562306a36Sopenharmony_ci {0xa0, 0xf5, ZC3XX_R01F_HSYNC_2}, /* 00,1f,f5,cc */ 259662306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 259762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, /* 01,a7,00,cc */ 259862306a36Sopenharmony_ci {0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,c0,cc */ 259962306a36Sopenharmony_ci {} 260062306a36Sopenharmony_ci}; 260162306a36Sopenharmony_cistatic const struct usb_action icm105a_60HZScale[] = { 260262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 260362306a36Sopenharmony_ci {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ 260462306a36Sopenharmony_ci {0xaa, 0x0c, 0x0004}, /* 00,0c,04,aa */ 260562306a36Sopenharmony_ci {0xaa, 0x0e, 0x000d}, /* 00,0e,0d,aa */ 260662306a36Sopenharmony_ci {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */ 260762306a36Sopenharmony_ci {0xaa, 0x1c, 0x0008}, /* 00,1c,08,aa */ 260862306a36Sopenharmony_ci {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 260962306a36Sopenharmony_ci {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */ 261062306a36Sopenharmony_ci {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */ 261162306a36Sopenharmony_ci {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */ 261262306a36Sopenharmony_ci {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */ 261362306a36Sopenharmony_ci {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */ 261462306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */ 261562306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,08,cc */ 261662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 261762306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 261862306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,10,cc */ 261962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 262062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 262162306a36Sopenharmony_ci {0xa0, 0x41, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,41,cc */ 262262306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 262362306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 262462306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 262562306a36Sopenharmony_ci {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */ 262662306a36Sopenharmony_ci {0xa0, 0xc1, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c1,cc */ 262762306a36Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d4,cc */ 262862306a36Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e8,cc */ 262962306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 263062306a36Sopenharmony_ci {} 263162306a36Sopenharmony_ci}; 263262306a36Sopenharmony_cistatic const struct usb_action icm105a_60HZ[] = { 263362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 263462306a36Sopenharmony_ci {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ 263562306a36Sopenharmony_ci {0xaa, 0x0c, 0x0008}, /* 00,0c,08,aa */ 263662306a36Sopenharmony_ci {0xaa, 0x0e, 0x0086}, /* 00,0e,86,aa */ 263762306a36Sopenharmony_ci {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */ 263862306a36Sopenharmony_ci {0xaa, 0x1c, 0x0085}, /* 00,1c,85,aa */ 263962306a36Sopenharmony_ci {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 264062306a36Sopenharmony_ci {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */ 264162306a36Sopenharmony_ci {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */ 264262306a36Sopenharmony_ci {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */ 264362306a36Sopenharmony_ci {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */ 264462306a36Sopenharmony_ci {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */ 264562306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */ 264662306a36Sopenharmony_ci {0xa0, 0x85, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,85,cc */ 264762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 264862306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 264962306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,08,cc */ 265062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 265162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 265262306a36Sopenharmony_ci {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,81,cc */ 265362306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 265462306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 265562306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 265662306a36Sopenharmony_ci {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */ 265762306a36Sopenharmony_ci {0xa0, 0xc2, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c2,cc */ 265862306a36Sopenharmony_ci {0xa0, 0xd6, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d6,cc */ 265962306a36Sopenharmony_ci {0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ea,cc */ 266062306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 266162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, /* 01,a7,00,cc */ 266262306a36Sopenharmony_ci {0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,c0,cc */ 266362306a36Sopenharmony_ci {} 266462306a36Sopenharmony_ci}; 266562306a36Sopenharmony_cistatic const struct usb_action icm105a_NoFlickerScale[] = { 266662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 266762306a36Sopenharmony_ci {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ 266862306a36Sopenharmony_ci {0xaa, 0x0c, 0x0004}, /* 00,0c,04,aa */ 266962306a36Sopenharmony_ci {0xaa, 0x0e, 0x000d}, /* 00,0e,0d,aa */ 267062306a36Sopenharmony_ci {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */ 267162306a36Sopenharmony_ci {0xaa, 0x1c, 0x0000}, /* 00,1c,00,aa */ 267262306a36Sopenharmony_ci {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 267362306a36Sopenharmony_ci {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */ 267462306a36Sopenharmony_ci {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */ 267562306a36Sopenharmony_ci {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */ 267662306a36Sopenharmony_ci {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */ 267762306a36Sopenharmony_ci {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */ 267862306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */ 267962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,00,cc */ 268062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 268162306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 268262306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,20,cc */ 268362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 268462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 268562306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 268662306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 268762306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 268862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 268962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 269062306a36Sopenharmony_ci {0xa0, 0xc1, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c1,cc */ 269162306a36Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d4,cc */ 269262306a36Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e8,cc */ 269362306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 269462306a36Sopenharmony_ci {} 269562306a36Sopenharmony_ci}; 269662306a36Sopenharmony_cistatic const struct usb_action icm105a_NoFlicker[] = { 269762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 269862306a36Sopenharmony_ci {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ 269962306a36Sopenharmony_ci {0xaa, 0x0c, 0x0004}, /* 00,0c,04,aa */ 270062306a36Sopenharmony_ci {0xaa, 0x0e, 0x0081}, /* 00,0e,81,aa */ 270162306a36Sopenharmony_ci {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */ 270262306a36Sopenharmony_ci {0xaa, 0x1c, 0x0080}, /* 00,1c,80,aa */ 270362306a36Sopenharmony_ci {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 270462306a36Sopenharmony_ci {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */ 270562306a36Sopenharmony_ci {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */ 270662306a36Sopenharmony_ci {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */ 270762306a36Sopenharmony_ci {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */ 270862306a36Sopenharmony_ci {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */ 270962306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */ 271062306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,80,cc */ 271162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 271262306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 271362306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,20,cc */ 271462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 271562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 271662306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 271762306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 271862306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 271962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 272062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 272162306a36Sopenharmony_ci {0xa0, 0xc1, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c1,cc */ 272262306a36Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d4,cc */ 272362306a36Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e8,cc */ 272462306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 272562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, /* 01,a7,00,cc */ 272662306a36Sopenharmony_ci {0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,c0,cc */ 272762306a36Sopenharmony_ci {} 272862306a36Sopenharmony_ci}; 272962306a36Sopenharmony_ci 273062306a36Sopenharmony_cistatic const struct usb_action mc501cb_Initial[] = { 273162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 273262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, /* 00,02,00,cc */ 273362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 273462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 273562306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 273662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 273762306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 273862306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 273962306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 274062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 274162306a36Sopenharmony_ci {0xa0, 0xd8, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d8,cc */ 274262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 274362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 274462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 274562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 274662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, /* 00,9b,01,cc */ 274762306a36Sopenharmony_ci {0xa0, 0xde, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,de,cc */ 274862306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, /* 00,9d,02,cc */ 274962306a36Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */ 275062306a36Sopenharmony_ci {0xa0, 0x33, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,33,cc */ 275162306a36Sopenharmony_ci {0xa0, 0x34, ZC3XX_R087_EXPTIMEMID}, /* 00,87,34,cc */ 275262306a36Sopenharmony_ci {0xa0, 0x35, ZC3XX_R088_EXPTIMELOW}, /* 00,88,35,cc */ 275362306a36Sopenharmony_ci {0xa0, 0xb0, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,b0,cc */ 275462306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 275562306a36Sopenharmony_ci {0xaa, 0x01, 0x0001}, /* 00,01,01,aa */ 275662306a36Sopenharmony_ci {0xaa, 0x01, 0x0003}, /* 00,01,03,aa */ 275762306a36Sopenharmony_ci {0xaa, 0x01, 0x0001}, /* 00,01,01,aa */ 275862306a36Sopenharmony_ci {0xaa, 0x03, 0x0000}, /* 00,03,00,aa */ 275962306a36Sopenharmony_ci {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 276062306a36Sopenharmony_ci {0xaa, 0x11, 0x0080}, /* 00,11,80,aa */ 276162306a36Sopenharmony_ci {0xaa, 0x12, 0x0000}, /* 00,12,00,aa */ 276262306a36Sopenharmony_ci {0xaa, 0x13, 0x0000}, /* 00,13,00,aa */ 276362306a36Sopenharmony_ci {0xaa, 0x14, 0x0000}, /* 00,14,00,aa */ 276462306a36Sopenharmony_ci {0xaa, 0x15, 0x0000}, /* 00,15,00,aa */ 276562306a36Sopenharmony_ci {0xaa, 0x16, 0x0000}, /* 00,16,00,aa */ 276662306a36Sopenharmony_ci {0xaa, 0x17, 0x0001}, /* 00,17,01,aa */ 276762306a36Sopenharmony_ci {0xaa, 0x18, 0x00de}, /* 00,18,de,aa */ 276862306a36Sopenharmony_ci {0xaa, 0x19, 0x0002}, /* 00,19,02,aa */ 276962306a36Sopenharmony_ci {0xaa, 0x1a, 0x0086}, /* 00,1a,86,aa */ 277062306a36Sopenharmony_ci {0xaa, 0x20, 0x00a8}, /* 00,20,a8,aa */ 277162306a36Sopenharmony_ci {0xaa, 0x22, 0x0000}, /* 00,22,00,aa */ 277262306a36Sopenharmony_ci {0xaa, 0x23, 0x0000}, /* 00,23,00,aa */ 277362306a36Sopenharmony_ci {0xaa, 0x24, 0x0000}, /* 00,24,00,aa */ 277462306a36Sopenharmony_ci {0xaa, 0x40, 0x0033}, /* 00,40,33,aa */ 277562306a36Sopenharmony_ci {0xaa, 0x41, 0x0077}, /* 00,41,77,aa */ 277662306a36Sopenharmony_ci {0xaa, 0x42, 0x0053}, /* 00,42,53,aa */ 277762306a36Sopenharmony_ci {0xaa, 0x43, 0x00b0}, /* 00,43,b0,aa */ 277862306a36Sopenharmony_ci {0xaa, 0x4b, 0x0001}, /* 00,4b,01,aa */ 277962306a36Sopenharmony_ci {0xaa, 0x72, 0x0020}, /* 00,72,20,aa */ 278062306a36Sopenharmony_ci {0xaa, 0x73, 0x0000}, /* 00,73,00,aa */ 278162306a36Sopenharmony_ci {0xaa, 0x80, 0x0000}, /* 00,80,00,aa */ 278262306a36Sopenharmony_ci {0xaa, 0x85, 0x0050}, /* 00,85,50,aa */ 278362306a36Sopenharmony_ci {0xaa, 0x91, 0x0070}, /* 00,91,70,aa */ 278462306a36Sopenharmony_ci {0xaa, 0x92, 0x0072}, /* 00,92,72,aa */ 278562306a36Sopenharmony_ci {0xaa, 0x03, 0x0001}, /* 00,03,01,aa */ 278662306a36Sopenharmony_ci {0xaa, 0x10, 0x00a0}, /* 00,10,a0,aa */ 278762306a36Sopenharmony_ci {0xaa, 0x11, 0x0001}, /* 00,11,01,aa */ 278862306a36Sopenharmony_ci {0xaa, 0x30, 0x0000}, /* 00,30,00,aa */ 278962306a36Sopenharmony_ci {0xaa, 0x60, 0x0000}, /* 00,60,00,aa */ 279062306a36Sopenharmony_ci {0xaa, 0xa0, 0x001a}, /* 00,a0,1a,aa */ 279162306a36Sopenharmony_ci {0xaa, 0xa1, 0x0000}, /* 00,a1,00,aa */ 279262306a36Sopenharmony_ci {0xaa, 0xa2, 0x003f}, /* 00,a2,3f,aa */ 279362306a36Sopenharmony_ci {0xaa, 0xa3, 0x0028}, /* 00,a3,28,aa */ 279462306a36Sopenharmony_ci {0xaa, 0xa4, 0x0010}, /* 00,a4,10,aa */ 279562306a36Sopenharmony_ci {0xaa, 0xa5, 0x0020}, /* 00,a5,20,aa */ 279662306a36Sopenharmony_ci {0xaa, 0xb1, 0x0044}, /* 00,b1,44,aa */ 279762306a36Sopenharmony_ci {0xaa, 0xd0, 0x0001}, /* 00,d0,01,aa */ 279862306a36Sopenharmony_ci {0xaa, 0xd1, 0x0085}, /* 00,d1,85,aa */ 279962306a36Sopenharmony_ci {0xaa, 0xd2, 0x0080}, /* 00,d2,80,aa */ 280062306a36Sopenharmony_ci {0xaa, 0xd3, 0x0080}, /* 00,d3,80,aa */ 280162306a36Sopenharmony_ci {0xaa, 0xd4, 0x0080}, /* 00,d4,80,aa */ 280262306a36Sopenharmony_ci {0xaa, 0xd5, 0x0080}, /* 00,d5,80,aa */ 280362306a36Sopenharmony_ci {0xaa, 0xc0, 0x00c3}, /* 00,c0,c3,aa */ 280462306a36Sopenharmony_ci {0xaa, 0xc2, 0x0044}, /* 00,c2,44,aa */ 280562306a36Sopenharmony_ci {0xaa, 0xc4, 0x0040}, /* 00,c4,40,aa */ 280662306a36Sopenharmony_ci {0xaa, 0xc5, 0x0020}, /* 00,c5,20,aa */ 280762306a36Sopenharmony_ci {0xaa, 0xc6, 0x0008}, /* 00,c6,08,aa */ 280862306a36Sopenharmony_ci {0xaa, 0x03, 0x0004}, /* 00,03,04,aa */ 280962306a36Sopenharmony_ci {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 281062306a36Sopenharmony_ci {0xaa, 0x40, 0x0030}, /* 00,40,30,aa */ 281162306a36Sopenharmony_ci {0xaa, 0x41, 0x0020}, /* 00,41,20,aa */ 281262306a36Sopenharmony_ci {0xaa, 0x42, 0x002d}, /* 00,42,2d,aa */ 281362306a36Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 281462306a36Sopenharmony_ci {0xaa, 0x1c, 0x0050}, /* 00,1C,50,aa */ 281562306a36Sopenharmony_ci {0xaa, 0x11, 0x0081}, /* 00,11,81,aa */ 281662306a36Sopenharmony_ci {0xaa, 0x3b, 0x001d}, /* 00,3b,1D,aa */ 281762306a36Sopenharmony_ci {0xaa, 0x3c, 0x004c}, /* 00,3c,4C,aa */ 281862306a36Sopenharmony_ci {0xaa, 0x3d, 0x0018}, /* 00,3d,18,aa */ 281962306a36Sopenharmony_ci {0xaa, 0x3e, 0x006a}, /* 00,3e,6A,aa */ 282062306a36Sopenharmony_ci {0xaa, 0x01, 0x0000}, /* 00,01,00,aa */ 282162306a36Sopenharmony_ci {0xaa, 0x52, 0x00ff}, /* 00,52,FF,aa */ 282262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 282362306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 282462306a36Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */ 282562306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 282662306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 282762306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 282862306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 282962306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 283062306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 283162306a36Sopenharmony_ci {0xaa, 0x03, 0x0002}, /* 00,03,02,aa */ 283262306a36Sopenharmony_ci {0xaa, 0x51, 0x0027}, /* 00,51,27,aa */ 283362306a36Sopenharmony_ci {0xaa, 0x52, 0x0020}, /* 00,52,20,aa */ 283462306a36Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 283562306a36Sopenharmony_ci {0xaa, 0x50, 0x0010}, /* 00,50,10,aa */ 283662306a36Sopenharmony_ci {0xaa, 0x51, 0x0010}, /* 00,51,10,aa */ 283762306a36Sopenharmony_ci {0xaa, 0x54, 0x0010}, /* 00,54,10,aa */ 283862306a36Sopenharmony_ci {0xaa, 0x55, 0x0010}, /* 00,55,10,aa */ 283962306a36Sopenharmony_ci {0xa0, 0xf0, 0x0199}, /* 01,99,F0,cc */ 284062306a36Sopenharmony_ci {0xa0, 0x80, 0x019a}, /* 01,9A,80,cc */ 284162306a36Sopenharmony_ci 284262306a36Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 284362306a36Sopenharmony_ci {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 284462306a36Sopenharmony_ci {0xaa, 0x36, 0x001d}, /* 00,36,1D,aa */ 284562306a36Sopenharmony_ci {0xaa, 0x37, 0x004c}, /* 00,37,4C,aa */ 284662306a36Sopenharmony_ci {0xaa, 0x3b, 0x001d}, /* 00,3B,1D,aa */ 284762306a36Sopenharmony_ci {} 284862306a36Sopenharmony_ci}; 284962306a36Sopenharmony_ci 285062306a36Sopenharmony_cistatic const struct usb_action mc501cb_InitialScale[] = { /* 320x240 */ 285162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 285262306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */ 285362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 285462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 285562306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 285662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 285762306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 285862306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 285962306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 286062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 286162306a36Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d0,cc */ 286262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 286362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 286462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 286562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 286662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, /* 00,9b,01,cc */ 286762306a36Sopenharmony_ci {0xa0, 0xd8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,d8,cc */ 286862306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, /* 00,9d,02,cc */ 286962306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */ 287062306a36Sopenharmony_ci {0xa0, 0x33, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,33,cc */ 287162306a36Sopenharmony_ci {0xa0, 0x34, ZC3XX_R087_EXPTIMEMID}, /* 00,87,34,cc */ 287262306a36Sopenharmony_ci {0xa0, 0x35, ZC3XX_R088_EXPTIMELOW}, /* 00,88,35,cc */ 287362306a36Sopenharmony_ci {0xa0, 0xb0, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,b0,cc */ 287462306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 287562306a36Sopenharmony_ci {0xaa, 0x01, 0x0001}, /* 00,01,01,aa */ 287662306a36Sopenharmony_ci {0xaa, 0x01, 0x0003}, /* 00,01,03,aa */ 287762306a36Sopenharmony_ci {0xaa, 0x01, 0x0001}, /* 00,01,01,aa */ 287862306a36Sopenharmony_ci {0xaa, 0x03, 0x0000}, /* 00,03,00,aa */ 287962306a36Sopenharmony_ci {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 288062306a36Sopenharmony_ci {0xaa, 0x11, 0x0080}, /* 00,11,80,aa */ 288162306a36Sopenharmony_ci {0xaa, 0x12, 0x0000}, /* 00,12,00,aa */ 288262306a36Sopenharmony_ci {0xaa, 0x13, 0x0000}, /* 00,13,00,aa */ 288362306a36Sopenharmony_ci {0xaa, 0x14, 0x0000}, /* 00,14,00,aa */ 288462306a36Sopenharmony_ci {0xaa, 0x15, 0x0000}, /* 00,15,00,aa */ 288562306a36Sopenharmony_ci {0xaa, 0x16, 0x0000}, /* 00,16,00,aa */ 288662306a36Sopenharmony_ci {0xaa, 0x17, 0x0001}, /* 00,17,01,aa */ 288762306a36Sopenharmony_ci {0xaa, 0x18, 0x00d8}, /* 00,18,d8,aa */ 288862306a36Sopenharmony_ci {0xaa, 0x19, 0x0002}, /* 00,19,02,aa */ 288962306a36Sopenharmony_ci {0xaa, 0x1a, 0x0088}, /* 00,1a,88,aa */ 289062306a36Sopenharmony_ci {0xaa, 0x20, 0x00a8}, /* 00,20,a8,aa */ 289162306a36Sopenharmony_ci {0xaa, 0x22, 0x0000}, /* 00,22,00,aa */ 289262306a36Sopenharmony_ci {0xaa, 0x23, 0x0000}, /* 00,23,00,aa */ 289362306a36Sopenharmony_ci {0xaa, 0x24, 0x0000}, /* 00,24,00,aa */ 289462306a36Sopenharmony_ci {0xaa, 0x40, 0x0033}, /* 00,40,33,aa */ 289562306a36Sopenharmony_ci {0xaa, 0x41, 0x0077}, /* 00,41,77,aa */ 289662306a36Sopenharmony_ci {0xaa, 0x42, 0x0053}, /* 00,42,53,aa */ 289762306a36Sopenharmony_ci {0xaa, 0x43, 0x00b0}, /* 00,43,b0,aa */ 289862306a36Sopenharmony_ci {0xaa, 0x4b, 0x0001}, /* 00,4b,01,aa */ 289962306a36Sopenharmony_ci {0xaa, 0x72, 0x0020}, /* 00,72,20,aa */ 290062306a36Sopenharmony_ci {0xaa, 0x73, 0x0000}, /* 00,73,00,aa */ 290162306a36Sopenharmony_ci {0xaa, 0x80, 0x0000}, /* 00,80,00,aa */ 290262306a36Sopenharmony_ci {0xaa, 0x85, 0x0050}, /* 00,85,50,aa */ 290362306a36Sopenharmony_ci {0xaa, 0x91, 0x0070}, /* 00,91,70,aa */ 290462306a36Sopenharmony_ci {0xaa, 0x92, 0x0072}, /* 00,92,72,aa */ 290562306a36Sopenharmony_ci {0xaa, 0x03, 0x0001}, /* 00,03,01,aa */ 290662306a36Sopenharmony_ci {0xaa, 0x10, 0x00a0}, /* 00,10,a0,aa */ 290762306a36Sopenharmony_ci {0xaa, 0x11, 0x0001}, /* 00,11,01,aa */ 290862306a36Sopenharmony_ci {0xaa, 0x30, 0x0000}, /* 00,30,00,aa */ 290962306a36Sopenharmony_ci {0xaa, 0x60, 0x0000}, /* 00,60,00,aa */ 291062306a36Sopenharmony_ci {0xaa, 0xa0, 0x001a}, /* 00,a0,1a,aa */ 291162306a36Sopenharmony_ci {0xaa, 0xa1, 0x0000}, /* 00,a1,00,aa */ 291262306a36Sopenharmony_ci {0xaa, 0xa2, 0x003f}, /* 00,a2,3f,aa */ 291362306a36Sopenharmony_ci {0xaa, 0xa3, 0x0028}, /* 00,a3,28,aa */ 291462306a36Sopenharmony_ci {0xaa, 0xa4, 0x0010}, /* 00,a4,10,aa */ 291562306a36Sopenharmony_ci {0xaa, 0xa5, 0x0020}, /* 00,a5,20,aa */ 291662306a36Sopenharmony_ci {0xaa, 0xb1, 0x0044}, /* 00,b1,44,aa */ 291762306a36Sopenharmony_ci {0xaa, 0xd0, 0x0001}, /* 00,d0,01,aa */ 291862306a36Sopenharmony_ci {0xaa, 0xd1, 0x0085}, /* 00,d1,85,aa */ 291962306a36Sopenharmony_ci {0xaa, 0xd2, 0x0080}, /* 00,d2,80,aa */ 292062306a36Sopenharmony_ci {0xaa, 0xd3, 0x0080}, /* 00,d3,80,aa */ 292162306a36Sopenharmony_ci {0xaa, 0xd4, 0x0080}, /* 00,d4,80,aa */ 292262306a36Sopenharmony_ci {0xaa, 0xd5, 0x0080}, /* 00,d5,80,aa */ 292362306a36Sopenharmony_ci {0xaa, 0xc0, 0x00c3}, /* 00,c0,c3,aa */ 292462306a36Sopenharmony_ci {0xaa, 0xc2, 0x0044}, /* 00,c2,44,aa */ 292562306a36Sopenharmony_ci {0xaa, 0xc4, 0x0040}, /* 00,c4,40,aa */ 292662306a36Sopenharmony_ci {0xaa, 0xc5, 0x0020}, /* 00,c5,20,aa */ 292762306a36Sopenharmony_ci {0xaa, 0xc6, 0x0008}, /* 00,c6,08,aa */ 292862306a36Sopenharmony_ci {0xaa, 0x03, 0x0004}, /* 00,03,04,aa */ 292962306a36Sopenharmony_ci {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 293062306a36Sopenharmony_ci {0xaa, 0x40, 0x0030}, /* 00,40,30,aa */ 293162306a36Sopenharmony_ci {0xaa, 0x41, 0x0020}, /* 00,41,20,aa */ 293262306a36Sopenharmony_ci {0xaa, 0x42, 0x002d}, /* 00,42,2d,aa */ 293362306a36Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 293462306a36Sopenharmony_ci {0xaa, 0x1c, 0x0050}, /* 00,1c,50,aa */ 293562306a36Sopenharmony_ci {0xaa, 0x11, 0x0081}, /* 00,11,81,aa */ 293662306a36Sopenharmony_ci {0xaa, 0x3b, 0x003a}, /* 00,3b,3A,aa */ 293762306a36Sopenharmony_ci {0xaa, 0x3c, 0x0098}, /* 00,3c,98,aa */ 293862306a36Sopenharmony_ci {0xaa, 0x3d, 0x0030}, /* 00,3d,30,aa */ 293962306a36Sopenharmony_ci {0xaa, 0x3e, 0x00d4}, /* 00,3E,D4,aa */ 294062306a36Sopenharmony_ci {0xaa, 0x01, 0x0000}, /* 00,01,00,aa */ 294162306a36Sopenharmony_ci {0xaa, 0x52, 0x00ff}, /* 00,52,FF,aa */ 294262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 294362306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 294462306a36Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */ 294562306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 294662306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 294762306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 294862306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 294962306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 295062306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 295162306a36Sopenharmony_ci {0xaa, 0x03, 0x0002}, /* 00,03,02,aa */ 295262306a36Sopenharmony_ci {0xaa, 0x51, 0x004e}, /* 00,51,4E,aa */ 295362306a36Sopenharmony_ci {0xaa, 0x52, 0x0041}, /* 00,52,41,aa */ 295462306a36Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 295562306a36Sopenharmony_ci {0xaa, 0x50, 0x0010}, /* 00,50,10,aa */ 295662306a36Sopenharmony_ci {0xaa, 0x51, 0x0010}, /* 00,51,10,aa */ 295762306a36Sopenharmony_ci {0xaa, 0x54, 0x0010}, /* 00,54,10,aa */ 295862306a36Sopenharmony_ci {0xaa, 0x55, 0x0010}, /* 00,55,10,aa */ 295962306a36Sopenharmony_ci {0xa0, 0xf0, 0x0199}, /* 01,99,F0,cc */ 296062306a36Sopenharmony_ci {0xa0, 0x80, 0x019a}, /* 01,9A,80,cc */ 296162306a36Sopenharmony_ci {} 296262306a36Sopenharmony_ci}; 296362306a36Sopenharmony_ci 296462306a36Sopenharmony_cistatic const struct usb_action mc501cb_50HZ[] = { 296562306a36Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 296662306a36Sopenharmony_ci {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 296762306a36Sopenharmony_ci {0xaa, 0x36, 0x001d}, /* 00,36,1D,aa */ 296862306a36Sopenharmony_ci {0xaa, 0x37, 0x004c}, /* 00,37,4C,aa */ 296962306a36Sopenharmony_ci {0xaa, 0x3b, 0x001d}, /* 00,3B,1D,aa */ 297062306a36Sopenharmony_ci {0xaa, 0x3c, 0x004c}, /* 00,3C,4C,aa */ 297162306a36Sopenharmony_ci {0xaa, 0x3d, 0x001d}, /* 00,3D,1D,aa */ 297262306a36Sopenharmony_ci {0xaa, 0x3e, 0x004c}, /* 00,3E,4C,aa */ 297362306a36Sopenharmony_ci {} 297462306a36Sopenharmony_ci}; 297562306a36Sopenharmony_ci 297662306a36Sopenharmony_cistatic const struct usb_action mc501cb_50HZScale[] = { 297762306a36Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 297862306a36Sopenharmony_ci {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 297962306a36Sopenharmony_ci {0xaa, 0x36, 0x003a}, /* 00,36,3A,aa */ 298062306a36Sopenharmony_ci {0xaa, 0x37, 0x0098}, /* 00,37,98,aa */ 298162306a36Sopenharmony_ci {0xaa, 0x3b, 0x003a}, /* 00,3B,3A,aa */ 298262306a36Sopenharmony_ci {0xaa, 0x3c, 0x0098}, /* 00,3C,98,aa */ 298362306a36Sopenharmony_ci {0xaa, 0x3d, 0x003a}, /* 00,3D,3A,aa */ 298462306a36Sopenharmony_ci {0xaa, 0x3e, 0x0098}, /* 00,3E,98,aa */ 298562306a36Sopenharmony_ci {} 298662306a36Sopenharmony_ci}; 298762306a36Sopenharmony_ci 298862306a36Sopenharmony_cistatic const struct usb_action mc501cb_60HZ[] = { 298962306a36Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 299062306a36Sopenharmony_ci {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 299162306a36Sopenharmony_ci {0xaa, 0x36, 0x0018}, /* 00,36,18,aa */ 299262306a36Sopenharmony_ci {0xaa, 0x37, 0x006a}, /* 00,37,6A,aa */ 299362306a36Sopenharmony_ci {0xaa, 0x3d, 0x0018}, /* 00,3D,18,aa */ 299462306a36Sopenharmony_ci {0xaa, 0x3e, 0x006a}, /* 00,3E,6A,aa */ 299562306a36Sopenharmony_ci {0xaa, 0x3b, 0x0018}, /* 00,3B,18,aa */ 299662306a36Sopenharmony_ci {0xaa, 0x3c, 0x006a}, /* 00,3C,6A,aa */ 299762306a36Sopenharmony_ci {} 299862306a36Sopenharmony_ci}; 299962306a36Sopenharmony_ci 300062306a36Sopenharmony_cistatic const struct usb_action mc501cb_60HZScale[] = { 300162306a36Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 300262306a36Sopenharmony_ci {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 300362306a36Sopenharmony_ci {0xaa, 0x36, 0x0030}, /* 00,36,30,aa */ 300462306a36Sopenharmony_ci {0xaa, 0x37, 0x00d4}, /* 00,37,D4,aa */ 300562306a36Sopenharmony_ci {0xaa, 0x3d, 0x0030}, /* 00,3D,30,aa */ 300662306a36Sopenharmony_ci {0xaa, 0x3e, 0x00d4}, /* 00,3E,D4,aa */ 300762306a36Sopenharmony_ci {0xaa, 0x3b, 0x0030}, /* 00,3B,30,aa */ 300862306a36Sopenharmony_ci {0xaa, 0x3c, 0x00d4}, /* 00,3C,D4,aa */ 300962306a36Sopenharmony_ci {} 301062306a36Sopenharmony_ci}; 301162306a36Sopenharmony_ci 301262306a36Sopenharmony_cistatic const struct usb_action mc501cb_NoFlicker[] = { 301362306a36Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 301462306a36Sopenharmony_ci {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 301562306a36Sopenharmony_ci {0xaa, 0x36, 0x0018}, /* 00,36,18,aa */ 301662306a36Sopenharmony_ci {0xaa, 0x37, 0x006a}, /* 00,37,6A,aa */ 301762306a36Sopenharmony_ci {0xaa, 0x3d, 0x0018}, /* 00,3D,18,aa */ 301862306a36Sopenharmony_ci {0xaa, 0x3e, 0x006a}, /* 00,3E,6A,aa */ 301962306a36Sopenharmony_ci {0xaa, 0x3b, 0x0018}, /* 00,3B,18,aa */ 302062306a36Sopenharmony_ci {0xaa, 0x3c, 0x006a}, /* 00,3C,6A,aa */ 302162306a36Sopenharmony_ci {} 302262306a36Sopenharmony_ci}; 302362306a36Sopenharmony_ci 302462306a36Sopenharmony_cistatic const struct usb_action mc501cb_NoFlickerScale[] = { 302562306a36Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 302662306a36Sopenharmony_ci {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 302762306a36Sopenharmony_ci {0xaa, 0x36, 0x0030}, /* 00,36,30,aa */ 302862306a36Sopenharmony_ci {0xaa, 0x37, 0x00d4}, /* 00,37,D4,aa */ 302962306a36Sopenharmony_ci {0xaa, 0x3d, 0x0030}, /* 00,3D,30,aa */ 303062306a36Sopenharmony_ci {0xaa, 0x3e, 0x00d4}, /* 00,3E,D4,aa */ 303162306a36Sopenharmony_ci {0xaa, 0x3b, 0x0030}, /* 00,3B,30,aa */ 303262306a36Sopenharmony_ci {0xaa, 0x3c, 0x00d4}, /* 00,3C,D4,aa */ 303362306a36Sopenharmony_ci {} 303462306a36Sopenharmony_ci}; 303562306a36Sopenharmony_ci 303662306a36Sopenharmony_ci/* from zs211.inf */ 303762306a36Sopenharmony_cistatic const struct usb_action ov7620_Initial[] = { /* 640x480 */ 303862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 303962306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, /* 00,02,40,cc */ 304062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING}, /* 00,08,00,cc */ 304162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 304262306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,06,cc */ 304362306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R083_RGAINADDR}, /* 00,83,02,cc */ 304462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R085_BGAINADDR}, /* 00,85,01,cc */ 304562306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,80,cc */ 304662306a36Sopenharmony_ci {0xa0, 0x81, ZC3XX_R087_EXPTIMEMID}, /* 00,87,81,cc */ 304762306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R088_EXPTIMELOW}, /* 00,88,10,cc */ 304862306a36Sopenharmony_ci {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,a1,cc */ 304962306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, /* 00,8d,08,cc */ 305062306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 305162306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 305262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 305362306a36Sopenharmony_ci {0xa0, 0xd8, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d8,cc */ 305462306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 305562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 305662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 305762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 305862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 305962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 306062306a36Sopenharmony_ci {0xa0, 0xde, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,de,cc */ 306162306a36Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */ 306262306a36Sopenharmony_ci {0xaa, 0x12, 0x0088}, /* 00,12,88,aa */ 306362306a36Sopenharmony_ci {0xaa, 0x12, 0x0048}, /* 00,12,48,aa */ 306462306a36Sopenharmony_ci {0xaa, 0x75, 0x008a}, /* 00,75,8a,aa */ 306562306a36Sopenharmony_ci {0xaa, 0x13, 0x00a3}, /* 00,13,a3,aa */ 306662306a36Sopenharmony_ci {0xaa, 0x04, 0x0000}, /* 00,04,00,aa */ 306762306a36Sopenharmony_ci {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */ 306862306a36Sopenharmony_ci {0xaa, 0x14, 0x0000}, /* 00,14,00,aa */ 306962306a36Sopenharmony_ci {0xaa, 0x15, 0x0004}, /* 00,15,04,aa */ 307062306a36Sopenharmony_ci {0xaa, 0x17, 0x0018}, /* 00,17,18,aa */ 307162306a36Sopenharmony_ci {0xaa, 0x18, 0x00ba}, /* 00,18,ba,aa */ 307262306a36Sopenharmony_ci {0xaa, 0x19, 0x0002}, /* 00,19,02,aa */ 307362306a36Sopenharmony_ci {0xaa, 0x1a, 0x00f1}, /* 00,1a,f1,aa */ 307462306a36Sopenharmony_ci {0xaa, 0x20, 0x0040}, /* 00,20,40,aa */ 307562306a36Sopenharmony_ci {0xaa, 0x24, 0x0088}, /* 00,24,88,aa */ 307662306a36Sopenharmony_ci {0xaa, 0x25, 0x0078}, /* 00,25,78,aa */ 307762306a36Sopenharmony_ci {0xaa, 0x27, 0x00f6}, /* 00,27,f6,aa */ 307862306a36Sopenharmony_ci {0xaa, 0x28, 0x00a0}, /* 00,28,a0,aa */ 307962306a36Sopenharmony_ci {0xaa, 0x21, 0x0000}, /* 00,21,00,aa */ 308062306a36Sopenharmony_ci {0xaa, 0x2a, 0x0083}, /* 00,2a,83,aa */ 308162306a36Sopenharmony_ci {0xaa, 0x2b, 0x0096}, /* 00,2b,96,aa */ 308262306a36Sopenharmony_ci {0xaa, 0x2d, 0x0005}, /* 00,2d,05,aa */ 308362306a36Sopenharmony_ci {0xaa, 0x74, 0x0020}, /* 00,74,20,aa */ 308462306a36Sopenharmony_ci {0xaa, 0x61, 0x0068}, /* 00,61,68,aa */ 308562306a36Sopenharmony_ci {0xaa, 0x64, 0x0088}, /* 00,64,88,aa */ 308662306a36Sopenharmony_ci {0xaa, 0x00, 0x0000}, /* 00,00,00,aa */ 308762306a36Sopenharmony_ci {0xaa, 0x06, 0x0080}, /* 00,06,80,aa */ 308862306a36Sopenharmony_ci {0xaa, 0x01, 0x0090}, /* 00,01,90,aa */ 308962306a36Sopenharmony_ci {0xaa, 0x02, 0x0030}, /* 00,02,30,aa */ 309062306a36Sopenharmony_ci {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,77,cc */ 309162306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 309262306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 309362306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 309462306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */ 309562306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 309662306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 309762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 309862306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 309962306a36Sopenharmony_ci {0xa0, 0x68, ZC3XX_R116_RGAIN}, /* 01,16,68,cc */ 310062306a36Sopenharmony_ci {0xa0, 0x52, ZC3XX_R118_BGAIN}, /* 01,18,52,cc */ 310162306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,40,cc */ 310262306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 310362306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,50,cc */ 310462306a36Sopenharmony_ci {} 310562306a36Sopenharmony_ci}; 310662306a36Sopenharmony_cistatic const struct usb_action ov7620_InitialScale[] = { /* 320x240 */ 310762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 310862306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R002_CLOCKSELECT}, /* 00,02,50,cc */ 310962306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,00,cc */ 311062306a36Sopenharmony_ci /* mx change? */ 311162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 311262306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,06,cc */ 311362306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R083_RGAINADDR}, /* 00,83,02,cc */ 311462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R085_BGAINADDR}, /* 00,85,01,cc */ 311562306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,80,cc */ 311662306a36Sopenharmony_ci {0xa0, 0x81, ZC3XX_R087_EXPTIMEMID}, /* 00,87,81,cc */ 311762306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R088_EXPTIMELOW}, /* 00,88,10,cc */ 311862306a36Sopenharmony_ci {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,a1,cc */ 311962306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, /* 00,8d,08,cc */ 312062306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 312162306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 312262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 312362306a36Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d0,cc */ 312462306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 312562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 312662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 312762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 312862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 312962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 313062306a36Sopenharmony_ci {0xa0, 0xd6, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,d6,cc */ 313162306a36Sopenharmony_ci /* OV7648 00,9c,d8,cc */ 313262306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */ 313362306a36Sopenharmony_ci {0xaa, 0x12, 0x0088}, /* 00,12,88,aa */ 313462306a36Sopenharmony_ci {0xaa, 0x12, 0x0048}, /* 00,12,48,aa */ 313562306a36Sopenharmony_ci {0xaa, 0x75, 0x008a}, /* 00,75,8a,aa */ 313662306a36Sopenharmony_ci {0xaa, 0x13, 0x00a3}, /* 00,13,a3,aa */ 313762306a36Sopenharmony_ci {0xaa, 0x04, 0x0000}, /* 00,04,00,aa */ 313862306a36Sopenharmony_ci {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */ 313962306a36Sopenharmony_ci {0xaa, 0x14, 0x0000}, /* 00,14,00,aa */ 314062306a36Sopenharmony_ci {0xaa, 0x15, 0x0004}, /* 00,15,04,aa */ 314162306a36Sopenharmony_ci {0xaa, 0x24, 0x0088}, /* 00,24,88,aa */ 314262306a36Sopenharmony_ci {0xaa, 0x25, 0x0078}, /* 00,25,78,aa */ 314362306a36Sopenharmony_ci {0xaa, 0x17, 0x0018}, /* 00,17,18,aa */ 314462306a36Sopenharmony_ci {0xaa, 0x18, 0x00ba}, /* 00,18,ba,aa */ 314562306a36Sopenharmony_ci {0xaa, 0x19, 0x0002}, /* 00,19,02,aa */ 314662306a36Sopenharmony_ci {0xaa, 0x1a, 0x00f2}, /* 00,1a,f2,aa */ 314762306a36Sopenharmony_ci {0xaa, 0x20, 0x0040}, /* 00,20,40,aa */ 314862306a36Sopenharmony_ci {0xaa, 0x27, 0x00f6}, /* 00,27,f6,aa */ 314962306a36Sopenharmony_ci {0xaa, 0x28, 0x00a0}, /* 00,28,a0,aa */ 315062306a36Sopenharmony_ci {0xaa, 0x21, 0x0000}, /* 00,21,00,aa */ 315162306a36Sopenharmony_ci {0xaa, 0x2a, 0x0083}, /* 00,2a,83,aa */ 315262306a36Sopenharmony_ci {0xaa, 0x2b, 0x0096}, /* 00,2b,96,aa */ 315362306a36Sopenharmony_ci {0xaa, 0x2d, 0x0005}, /* 00,2d,05,aa */ 315462306a36Sopenharmony_ci {0xaa, 0x74, 0x0020}, /* 00,74,20,aa */ 315562306a36Sopenharmony_ci {0xaa, 0x61, 0x0068}, /* 00,61,68,aa */ 315662306a36Sopenharmony_ci {0xaa, 0x64, 0x0088}, /* 00,64,88,aa */ 315762306a36Sopenharmony_ci {0xaa, 0x00, 0x0000}, /* 00,00,00,aa */ 315862306a36Sopenharmony_ci {0xaa, 0x06, 0x0080}, /* 00,06,80,aa */ 315962306a36Sopenharmony_ci {0xaa, 0x01, 0x0090}, /* 00,01,90,aa */ 316062306a36Sopenharmony_ci {0xaa, 0x02, 0x0030}, /* 00,02,30,aa */ 316162306a36Sopenharmony_ci {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,77,cc */ 316262306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 316362306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 316462306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 316562306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */ 316662306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 316762306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 316862306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 316962306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 317062306a36Sopenharmony_ci {0xa0, 0x68, ZC3XX_R116_RGAIN}, /* 01,16,68,cc */ 317162306a36Sopenharmony_ci {0xa0, 0x52, ZC3XX_R118_BGAIN}, /* 01,18,52,cc */ 317262306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,50,cc */ 317362306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 317462306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,50,cc */ 317562306a36Sopenharmony_ci {} 317662306a36Sopenharmony_ci}; 317762306a36Sopenharmony_cistatic const struct usb_action ov7620_50HZ[] = { 317862306a36Sopenharmony_ci {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */ 317962306a36Sopenharmony_ci {0xaa, 0x2b, 0x0096}, /* 00,2b,96,aa */ 318062306a36Sopenharmony_ci /* enable 1/120s & 1/100s exposures for banding filter */ 318162306a36Sopenharmony_ci {0xaa, 0x75, 0x008e}, 318262306a36Sopenharmony_ci {0xaa, 0x2d, 0x0005}, /* 00,2d,05,aa */ 318362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 318462306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 318562306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,18,cc */ 318662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 318762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 318862306a36Sopenharmony_ci {0xa0, 0x83, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,83,cc */ 318962306a36Sopenharmony_ci {0xaa, 0x76, 0x0003}, /* 00,76,03,aa */ 319062306a36Sopenharmony_ci/* {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, * 00,02,40,cc 319162306a36Sopenharmony_ci * if mode0 (640x480) */ 319262306a36Sopenharmony_ci {} 319362306a36Sopenharmony_ci}; 319462306a36Sopenharmony_cistatic const struct usb_action ov7620_60HZ[] = { 319562306a36Sopenharmony_ci {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */ 319662306a36Sopenharmony_ci {0xaa, 0x2b, 0x0000}, /* 00,2b,00,aa */ 319762306a36Sopenharmony_ci /* enable 1/120s & 1/100s exposures for banding filter */ 319862306a36Sopenharmony_ci {0xaa, 0x75, 0x008e}, 319962306a36Sopenharmony_ci {0xaa, 0x2d, 0x0005}, /* 00,2d,05,aa */ 320062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 320162306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 320262306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,18,cc */ 320362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 320462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 320562306a36Sopenharmony_ci {0xa0, 0x83, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,83,cc */ 320662306a36Sopenharmony_ci {0xaa, 0x76, 0x0003}, /* 00,76,03,aa */ 320762306a36Sopenharmony_ci/* {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, * 00,02,40,cc 320862306a36Sopenharmony_ci * if mode0 (640x480) */ 320962306a36Sopenharmony_ci/* ?? in gspca v1, it was 321062306a36Sopenharmony_ci {0xa0, 0x00, 0x0039}, * 00,00,00,dd * 321162306a36Sopenharmony_ci {0xa1, 0x01, 0x0037}, */ 321262306a36Sopenharmony_ci {} 321362306a36Sopenharmony_ci}; 321462306a36Sopenharmony_cistatic const struct usb_action ov7620_NoFlicker[] = { 321562306a36Sopenharmony_ci {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */ 321662306a36Sopenharmony_ci {0xaa, 0x2b, 0x0000}, /* 00,2b,00,aa */ 321762306a36Sopenharmony_ci /* disable 1/120s & 1/100s exposures for banding filter */ 321862306a36Sopenharmony_ci {0xaa, 0x75, 0x008a}, 321962306a36Sopenharmony_ci {0xaa, 0x2d, 0x0001}, /* 00,2d,01,aa */ 322062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 322162306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 322262306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,18,cc */ 322362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 322462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 322562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,01,cc */ 322662306a36Sopenharmony_ci/* {0xa0, 0x44, ZC3XX_R002_CLOCKSELECT}, * 00,02,44,cc 322762306a36Sopenharmony_ci * if mode1 (320x240) */ 322862306a36Sopenharmony_ci/* ?? was 322962306a36Sopenharmony_ci {0xa0, 0x00, 0x0039}, * 00,00,00,dd * 323062306a36Sopenharmony_ci {0xa1, 0x01, 0x0037}, */ 323162306a36Sopenharmony_ci {} 323262306a36Sopenharmony_ci}; 323362306a36Sopenharmony_ci 323462306a36Sopenharmony_cistatic const struct usb_action ov7630c_InitialScale[] = { 323562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 323662306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 323762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 323862306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 323962306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 324062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 324162306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R010_CMOSSENSORSELECT}, 324262306a36Sopenharmony_ci {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, 324362306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, 324462306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 324562306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 324662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 324762306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 324862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 324962306a36Sopenharmony_ci {0xaa, 0x12, 0x0080}, 325062306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R083_RGAINADDR}, 325162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R085_BGAINADDR}, 325262306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R086_EXPTIMEHIGH}, 325362306a36Sopenharmony_ci {0xa0, 0x91, ZC3XX_R087_EXPTIMEMID}, 325462306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R088_EXPTIMELOW}, 325562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 325662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 325762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 325862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 325962306a36Sopenharmony_ci {0xa0, 0xd8, ZC3XX_R09C_WINHEIGHTLOW}, 326062306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 326162306a36Sopenharmony_ci {0xaa, 0x12, 0x0069}, 326262306a36Sopenharmony_ci {0xaa, 0x04, 0x0020}, 326362306a36Sopenharmony_ci {0xaa, 0x06, 0x0050}, 326462306a36Sopenharmony_ci {0xaa, 0x13, 0x0083}, 326562306a36Sopenharmony_ci {0xaa, 0x14, 0x0000}, 326662306a36Sopenharmony_ci {0xaa, 0x15, 0x0024}, 326762306a36Sopenharmony_ci {0xaa, 0x17, 0x0018}, 326862306a36Sopenharmony_ci {0xaa, 0x18, 0x00ba}, 326962306a36Sopenharmony_ci {0xaa, 0x19, 0x0002}, 327062306a36Sopenharmony_ci {0xaa, 0x1a, 0x00f6}, 327162306a36Sopenharmony_ci {0xaa, 0x1b, 0x0002}, 327262306a36Sopenharmony_ci {0xaa, 0x20, 0x00c2}, 327362306a36Sopenharmony_ci {0xaa, 0x24, 0x0060}, 327462306a36Sopenharmony_ci {0xaa, 0x25, 0x0040}, 327562306a36Sopenharmony_ci {0xaa, 0x26, 0x0030}, 327662306a36Sopenharmony_ci {0xaa, 0x27, 0x00ea}, 327762306a36Sopenharmony_ci {0xaa, 0x28, 0x00a0}, 327862306a36Sopenharmony_ci {0xaa, 0x21, 0x0000}, 327962306a36Sopenharmony_ci {0xaa, 0x2a, 0x0081}, 328062306a36Sopenharmony_ci {0xaa, 0x2b, 0x0096}, 328162306a36Sopenharmony_ci {0xaa, 0x2d, 0x0094}, 328262306a36Sopenharmony_ci {0xaa, 0x2f, 0x003d}, 328362306a36Sopenharmony_ci {0xaa, 0x30, 0x0024}, 328462306a36Sopenharmony_ci {0xaa, 0x60, 0x0000}, 328562306a36Sopenharmony_ci {0xaa, 0x61, 0x0040}, 328662306a36Sopenharmony_ci {0xaa, 0x68, 0x007c}, 328762306a36Sopenharmony_ci {0xaa, 0x6f, 0x0015}, 328862306a36Sopenharmony_ci {0xaa, 0x75, 0x0088}, 328962306a36Sopenharmony_ci {0xaa, 0x77, 0x00b5}, 329062306a36Sopenharmony_ci {0xaa, 0x01, 0x0060}, 329162306a36Sopenharmony_ci {0xaa, 0x02, 0x0060}, 329262306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 329362306a36Sopenharmony_ci {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 329462306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 329562306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 329662306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 329762306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 329862306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 329962306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 330062306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 330162306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 330262306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R116_RGAIN}, 330362306a36Sopenharmony_ci {0xa0, 0x46, ZC3XX_R118_BGAIN}, 330462306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R113_RGB03}, 330562306a36Sopenharmony_ci/* 0x10, */ 330662306a36Sopenharmony_ci {0xa1, 0x01, 0x0002}, 330762306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R10A_RGB00}, /* matrix */ 330862306a36Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R10B_RGB01}, 330962306a36Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R10C_RGB02}, 331062306a36Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R10D_RGB10}, 331162306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R10E_RGB11}, 331262306a36Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R10F_RGB12}, 331362306a36Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R110_RGB20}, 331462306a36Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R111_RGB21}, 331562306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R112_RGB22}, 331662306a36Sopenharmony_ci {0xa1, 0x01, 0x0008}, 331762306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 331862306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 331962306a36Sopenharmony_ci {0xa1, 0x01, 0x01c8}, 332062306a36Sopenharmony_ci {0xa1, 0x01, 0x01c9}, 332162306a36Sopenharmony_ci {0xa1, 0x01, 0x01ca}, 332262306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 332362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R120_GAMMA00}, /* gamma 2 ?*/ 332462306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R121_GAMMA01}, 332562306a36Sopenharmony_ci {0xa0, 0x1f, ZC3XX_R122_GAMMA02}, 332662306a36Sopenharmony_ci {0xa0, 0x3a, ZC3XX_R123_GAMMA03}, 332762306a36Sopenharmony_ci {0xa0, 0x53, ZC3XX_R124_GAMMA04}, 332862306a36Sopenharmony_ci {0xa0, 0x6d, ZC3XX_R125_GAMMA05}, 332962306a36Sopenharmony_ci {0xa0, 0x85, ZC3XX_R126_GAMMA06}, 333062306a36Sopenharmony_ci {0xa0, 0x9c, ZC3XX_R127_GAMMA07}, 333162306a36Sopenharmony_ci {0xa0, 0xb0, ZC3XX_R128_GAMMA08}, 333262306a36Sopenharmony_ci {0xa0, 0xc2, ZC3XX_R129_GAMMA09}, 333362306a36Sopenharmony_ci {0xa0, 0xd1, ZC3XX_R12A_GAMMA0A}, 333462306a36Sopenharmony_ci {0xa0, 0xde, ZC3XX_R12B_GAMMA0B}, 333562306a36Sopenharmony_ci {0xa0, 0xe9, ZC3XX_R12C_GAMMA0C}, 333662306a36Sopenharmony_ci {0xa0, 0xf2, ZC3XX_R12D_GAMMA0D}, 333762306a36Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R12E_GAMMA0E}, 333862306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, 333962306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R130_GAMMA10}, 334062306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R131_GAMMA11}, 334162306a36Sopenharmony_ci {0xa0, 0x16, ZC3XX_R132_GAMMA12}, 334262306a36Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R133_GAMMA13}, 334362306a36Sopenharmony_ci {0xa0, 0x19, ZC3XX_R134_GAMMA14}, 334462306a36Sopenharmony_ci {0xa0, 0x19, ZC3XX_R135_GAMMA15}, 334562306a36Sopenharmony_ci {0xa0, 0x17, ZC3XX_R136_GAMMA16}, 334662306a36Sopenharmony_ci {0xa0, 0x15, ZC3XX_R137_GAMMA17}, 334762306a36Sopenharmony_ci {0xa0, 0x12, ZC3XX_R138_GAMMA18}, 334862306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R139_GAMMA19}, 334962306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R13A_GAMMA1A}, 335062306a36Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R13B_GAMMA1B}, 335162306a36Sopenharmony_ci {0xa0, 0x09, ZC3XX_R13C_GAMMA1C}, 335262306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R13D_GAMMA1D}, 335362306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R13E_GAMMA1E}, 335462306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R13F_GAMMA1F}, 335562306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R10A_RGB00}, /* matrix */ 335662306a36Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R10B_RGB01}, 335762306a36Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R10C_RGB02}, 335862306a36Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R10D_RGB10}, 335962306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R10E_RGB11}, 336062306a36Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R10F_RGB12}, 336162306a36Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R110_RGB20}, 336262306a36Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R111_RGB21}, 336362306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R112_RGB22}, 336462306a36Sopenharmony_ci 336562306a36Sopenharmony_ci {0xa1, 0x01, 0x0180}, 336662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 336762306a36Sopenharmony_ci {0xaa, 0x10, 0x001b}, 336862306a36Sopenharmony_ci {0xaa, 0x76, 0x0002}, 336962306a36Sopenharmony_ci {0xaa, 0x2a, 0x0081}, 337062306a36Sopenharmony_ci {0xaa, 0x2b, 0x0000}, 337162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 337262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R191_EXPOSURELIMITMID}, 337362306a36Sopenharmony_ci {0xa0, 0xb8, ZC3XX_R192_EXPOSURELIMITLOW}, 337462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 337562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 337662306a36Sopenharmony_ci {0xa0, 0x37, ZC3XX_R197_ANTIFLICKERLOW}, 337762306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 337862306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 337962306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 338062306a36Sopenharmony_ci {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, 338162306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, 338262306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 338362306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE}, 338462306a36Sopenharmony_ci {0xaa, 0x13, 0x0083}, /* 40 */ 338562306a36Sopenharmony_ci {0xa1, 0x01, 0x0180}, 338662306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 338762306a36Sopenharmony_ci {} 338862306a36Sopenharmony_ci}; 338962306a36Sopenharmony_ci 339062306a36Sopenharmony_cistatic const struct usb_action ov7630c_Initial[] = { 339162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 339262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 339362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 339462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 339562306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R010_CMOSSENSORSELECT}, 339662306a36Sopenharmony_ci {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, 339762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, 339862306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 339962306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 340062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 340162306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 340262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 340362306a36Sopenharmony_ci 340462306a36Sopenharmony_ci {0xaa, 0x12, 0x0080}, 340562306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R083_RGAINADDR}, 340662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R085_BGAINADDR}, 340762306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R086_EXPTIMEHIGH}, 340862306a36Sopenharmony_ci {0xa0, 0x91, ZC3XX_R087_EXPTIMEMID}, 340962306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R088_EXPTIMELOW}, 341062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 341162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 341262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 341362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 341462306a36Sopenharmony_ci {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, 341562306a36Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, 341662306a36Sopenharmony_ci {0xaa, 0x12, 0x0069}, /* i2c */ 341762306a36Sopenharmony_ci {0xaa, 0x04, 0x0020}, 341862306a36Sopenharmony_ci {0xaa, 0x06, 0x0050}, 341962306a36Sopenharmony_ci {0xaa, 0x13, 0x00c3}, 342062306a36Sopenharmony_ci {0xaa, 0x14, 0x0000}, 342162306a36Sopenharmony_ci {0xaa, 0x15, 0x0024}, 342262306a36Sopenharmony_ci {0xaa, 0x19, 0x0003}, 342362306a36Sopenharmony_ci {0xaa, 0x1a, 0x00f6}, 342462306a36Sopenharmony_ci {0xaa, 0x1b, 0x0002}, 342562306a36Sopenharmony_ci {0xaa, 0x20, 0x00c2}, 342662306a36Sopenharmony_ci {0xaa, 0x24, 0x0060}, 342762306a36Sopenharmony_ci {0xaa, 0x25, 0x0040}, 342862306a36Sopenharmony_ci {0xaa, 0x26, 0x0030}, 342962306a36Sopenharmony_ci {0xaa, 0x27, 0x00ea}, 343062306a36Sopenharmony_ci {0xaa, 0x28, 0x00a0}, 343162306a36Sopenharmony_ci {0xaa, 0x21, 0x0000}, 343262306a36Sopenharmony_ci {0xaa, 0x2a, 0x0081}, 343362306a36Sopenharmony_ci {0xaa, 0x2b, 0x0096}, 343462306a36Sopenharmony_ci {0xaa, 0x2d, 0x0084}, 343562306a36Sopenharmony_ci {0xaa, 0x2f, 0x003d}, 343662306a36Sopenharmony_ci {0xaa, 0x30, 0x0024}, 343762306a36Sopenharmony_ci {0xaa, 0x60, 0x0000}, 343862306a36Sopenharmony_ci {0xaa, 0x61, 0x0040}, 343962306a36Sopenharmony_ci {0xaa, 0x68, 0x007c}, 344062306a36Sopenharmony_ci {0xaa, 0x6f, 0x0015}, 344162306a36Sopenharmony_ci {0xaa, 0x75, 0x0088}, 344262306a36Sopenharmony_ci {0xaa, 0x77, 0x00b5}, 344362306a36Sopenharmony_ci {0xaa, 0x01, 0x0060}, 344462306a36Sopenharmony_ci {0xaa, 0x02, 0x0060}, 344562306a36Sopenharmony_ci {0xaa, 0x17, 0x0018}, 344662306a36Sopenharmony_ci {0xaa, 0x18, 0x00ba}, 344762306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 344862306a36Sopenharmony_ci {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 344962306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 345062306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 345162306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 345262306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 345362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 345462306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 345562306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 345662306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 345762306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R116_RGAIN}, 345862306a36Sopenharmony_ci {0xa0, 0x46, ZC3XX_R118_BGAIN}, 345962306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R113_RGB03}, 346062306a36Sopenharmony_ci 346162306a36Sopenharmony_ci {0xa1, 0x01, 0x0002}, 346262306a36Sopenharmony_ci {0xa0, 0x4e, ZC3XX_R10A_RGB00}, /* matrix */ 346362306a36Sopenharmony_ci {0xa0, 0xfe, ZC3XX_R10B_RGB01}, 346462306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10C_RGB02}, 346562306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10D_RGB10}, 346662306a36Sopenharmony_ci {0xa0, 0x4d, ZC3XX_R10E_RGB11}, 346762306a36Sopenharmony_ci {0xa0, 0xfc, ZC3XX_R10F_RGB12}, 346862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R110_RGB20}, 346962306a36Sopenharmony_ci {0xa0, 0xf6, ZC3XX_R111_RGB21}, 347062306a36Sopenharmony_ci {0xa0, 0x4a, ZC3XX_R112_RGB22}, 347162306a36Sopenharmony_ci 347262306a36Sopenharmony_ci {0xa1, 0x01, 0x0008}, 347362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 347462306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 347562306a36Sopenharmony_ci {0xa1, 0x01, 0x01c8}, 347662306a36Sopenharmony_ci {0xa1, 0x01, 0x01c9}, 347762306a36Sopenharmony_ci {0xa1, 0x01, 0x01ca}, 347862306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 347962306a36Sopenharmony_ci {0xa0, 0x16, ZC3XX_R120_GAMMA00}, /* gamma ~4 */ 348062306a36Sopenharmony_ci {0xa0, 0x3a, ZC3XX_R121_GAMMA01}, 348162306a36Sopenharmony_ci {0xa0, 0x5b, ZC3XX_R122_GAMMA02}, 348262306a36Sopenharmony_ci {0xa0, 0x7c, ZC3XX_R123_GAMMA03}, 348362306a36Sopenharmony_ci {0xa0, 0x94, ZC3XX_R124_GAMMA04}, 348462306a36Sopenharmony_ci {0xa0, 0xa9, ZC3XX_R125_GAMMA05}, 348562306a36Sopenharmony_ci {0xa0, 0xbb, ZC3XX_R126_GAMMA06}, 348662306a36Sopenharmony_ci {0xa0, 0xca, ZC3XX_R127_GAMMA07}, 348762306a36Sopenharmony_ci {0xa0, 0xd7, ZC3XX_R128_GAMMA08}, 348862306a36Sopenharmony_ci {0xa0, 0xe1, ZC3XX_R129_GAMMA09}, 348962306a36Sopenharmony_ci {0xa0, 0xea, ZC3XX_R12A_GAMMA0A}, 349062306a36Sopenharmony_ci {0xa0, 0xf1, ZC3XX_R12B_GAMMA0B}, 349162306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R12C_GAMMA0C}, 349262306a36Sopenharmony_ci {0xa0, 0xfc, ZC3XX_R12D_GAMMA0D}, 349362306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R12E_GAMMA0E}, 349462306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, 349562306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R130_GAMMA10}, 349662306a36Sopenharmony_ci {0xa0, 0x22, ZC3XX_R131_GAMMA11}, 349762306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R132_GAMMA12}, 349862306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R133_GAMMA13}, 349962306a36Sopenharmony_ci {0xa0, 0x16, ZC3XX_R134_GAMMA14}, 350062306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R135_GAMMA15}, 350162306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R136_GAMMA16}, 350262306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R137_GAMMA17}, 350362306a36Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R138_GAMMA18}, 350462306a36Sopenharmony_ci {0xa0, 0x09, ZC3XX_R139_GAMMA19}, 350562306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R13A_GAMMA1A}, 350662306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R13B_GAMMA1B}, 350762306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R13C_GAMMA1C}, 350862306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R13D_GAMMA1D}, 350962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R13E_GAMMA1E}, 351062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R13F_GAMMA1F}, 351162306a36Sopenharmony_ci {0xa0, 0x4e, ZC3XX_R10A_RGB00}, /* matrix */ 351262306a36Sopenharmony_ci {0xa0, 0xfe, ZC3XX_R10B_RGB01}, 351362306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10C_RGB02}, 351462306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10D_RGB10}, 351562306a36Sopenharmony_ci {0xa0, 0x4d, ZC3XX_R10E_RGB11}, 351662306a36Sopenharmony_ci {0xa0, 0xfc, ZC3XX_R10F_RGB12}, 351762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R110_RGB20}, 351862306a36Sopenharmony_ci {0xa0, 0xf6, ZC3XX_R111_RGB21}, 351962306a36Sopenharmony_ci {0xa0, 0x4a, ZC3XX_R112_RGB22}, 352062306a36Sopenharmony_ci 352162306a36Sopenharmony_ci {0xa1, 0x01, 0x0180}, 352262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 352362306a36Sopenharmony_ci {0xaa, 0x10, 0x000d}, 352462306a36Sopenharmony_ci {0xaa, 0x76, 0x0002}, 352562306a36Sopenharmony_ci {0xaa, 0x2a, 0x0081}, 352662306a36Sopenharmony_ci {0xaa, 0x2b, 0x0000}, 352762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 352862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R191_EXPOSURELIMITMID}, 352962306a36Sopenharmony_ci {0xa0, 0xd8, ZC3XX_R192_EXPOSURELIMITLOW}, 353062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 353162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 353262306a36Sopenharmony_ci {0xa0, 0x1b, ZC3XX_R197_ANTIFLICKERLOW}, 353362306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 353462306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 353562306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 353662306a36Sopenharmony_ci {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, 353762306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, 353862306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 353962306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE}, 354062306a36Sopenharmony_ci {0xaa, 0x13, 0x00c3}, 354162306a36Sopenharmony_ci 354262306a36Sopenharmony_ci {0xa1, 0x01, 0x0180}, 354362306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 354462306a36Sopenharmony_ci {} 354562306a36Sopenharmony_ci}; 354662306a36Sopenharmony_ci 354762306a36Sopenharmony_cistatic const struct usb_action pas106b_Initial_com[] = { 354862306a36Sopenharmony_ci/* Sream and Sensor specific */ 354962306a36Sopenharmony_ci {0xa1, 0x01, 0x0010}, /* CMOSSensorSelect */ 355062306a36Sopenharmony_ci/* System */ 355162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* SystemControl */ 355262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* SystemControl */ 355362306a36Sopenharmony_ci/* Picture size */ 355462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, /* ClockSelect */ 355562306a36Sopenharmony_ci {0xa0, 0x03, 0x003a}, 355662306a36Sopenharmony_ci {0xa0, 0x0c, 0x003b}, 355762306a36Sopenharmony_ci {0xa0, 0x04, 0x0038}, 355862306a36Sopenharmony_ci {} 355962306a36Sopenharmony_ci}; 356062306a36Sopenharmony_ci 356162306a36Sopenharmony_cistatic const struct usb_action pas106b_InitialScale[] = { /* 176x144 */ 356262306a36Sopenharmony_ci/* JPEG control */ 356362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 356462306a36Sopenharmony_ci/* Sream and Sensor specific */ 356562306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R010_CMOSSENSORSELECT}, 356662306a36Sopenharmony_ci/* Picture size */ 356762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R003_FRAMEWIDTHHIGH}, 356862306a36Sopenharmony_ci {0xa0, 0xb0, ZC3XX_R004_FRAMEWIDTHLOW}, 356962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R005_FRAMEHEIGHTHIGH}, 357062306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R006_FRAMEHEIGHTLOW}, 357162306a36Sopenharmony_ci/* System */ 357262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 357362306a36Sopenharmony_ci/* Sream and Sensor specific */ 357462306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 357562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 357662306a36Sopenharmony_ci/* Sensor Interface */ 357762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, 357862306a36Sopenharmony_ci/* Window inside sensor array */ 357962306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R09A_WINXSTARTLOW}, 358062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 358162306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R11C_FIRSTXLOW}, 358262306a36Sopenharmony_ci {0xa0, 0x28, ZC3XX_R09C_WINHEIGHTLOW}, 358362306a36Sopenharmony_ci {0xa0, 0x68, ZC3XX_R09E_WINWIDTHLOW}, 358462306a36Sopenharmony_ci/* Init the sensor */ 358562306a36Sopenharmony_ci {0xaa, 0x02, 0x0004}, 358662306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 358762306a36Sopenharmony_ci {0xaa, 0x09, 0x0005}, 358862306a36Sopenharmony_ci {0xaa, 0x0a, 0x0002}, 358962306a36Sopenharmony_ci {0xaa, 0x0b, 0x0002}, 359062306a36Sopenharmony_ci {0xaa, 0x0c, 0x0005}, 359162306a36Sopenharmony_ci {0xaa, 0x0d, 0x0000}, 359262306a36Sopenharmony_ci {0xaa, 0x0e, 0x0002}, 359362306a36Sopenharmony_ci {0xaa, 0x14, 0x0081}, 359462306a36Sopenharmony_ci/* Other registers */ 359562306a36Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 359662306a36Sopenharmony_ci/* Frame retrieving */ 359762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 359862306a36Sopenharmony_ci/* Gains */ 359962306a36Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R1A8_DIGITALGAIN}, 360062306a36Sopenharmony_ci/* Unknown */ 360162306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 360262306a36Sopenharmony_ci/* Sharpness */ 360362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 360462306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 360562306a36Sopenharmony_ci/* Other registers */ 360662306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 360762306a36Sopenharmony_ci/* Auto exposure and white balance */ 360862306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 360962306a36Sopenharmony_ci/*Dead pixels */ 361062306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 361162306a36Sopenharmony_ci/* EEPROM */ 361262306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 361362306a36Sopenharmony_ci/* JPEG control */ 361462306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 361562306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, 361662306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, 361762306a36Sopenharmony_ci/* Other registers */ 361862306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 361962306a36Sopenharmony_ci/* Auto exposure and white balance */ 362062306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 362162306a36Sopenharmony_ci/*Dead pixels */ 362262306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 362362306a36Sopenharmony_ci/* EEPROM */ 362462306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 362562306a36Sopenharmony_ci/* JPEG control */ 362662306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 362762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, 362862306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, 362962306a36Sopenharmony_ci 363062306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R10A_RGB00}, /* matrix */ 363162306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10B_RGB01}, 363262306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10C_RGB02}, 363362306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10D_RGB10}, 363462306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R10E_RGB11}, 363562306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10F_RGB12}, 363662306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R110_RGB20}, 363762306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R111_RGB21}, 363862306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R112_RGB22}, 363962306a36Sopenharmony_ci/* Auto correction */ 364062306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R181_WINXSTART}, 364162306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R182_WINXWIDTH}, 364262306a36Sopenharmony_ci {0xa0, 0x16, ZC3XX_R183_WINXCENTER}, 364362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R184_WINYSTART}, 364462306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R185_WINYWIDTH}, 364562306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R186_WINYCENTER}, 364662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 364762306a36Sopenharmony_ci/* Auto exposure and white balance */ 364862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 364962306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID}, 365062306a36Sopenharmony_ci {0xa0, 0xb1, ZC3XX_R192_EXPOSURELIMITLOW}, 365162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 365262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 365362306a36Sopenharmony_ci {0xa0, 0x87, ZC3XX_R197_ANTIFLICKERLOW}, 365462306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, 365562306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, 365662306a36Sopenharmony_ci/* sensor on */ 365762306a36Sopenharmony_ci {0xaa, 0x07, 0x00b1}, 365862306a36Sopenharmony_ci {0xaa, 0x05, 0x0003}, 365962306a36Sopenharmony_ci {0xaa, 0x04, 0x0001}, 366062306a36Sopenharmony_ci {0xaa, 0x03, 0x003b}, 366162306a36Sopenharmony_ci/* Gains */ 366262306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R1A9_DIGITALLIMITDIFF}, 366362306a36Sopenharmony_ci {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, 366462306a36Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R11D_GLOBALGAIN}, 366562306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 366662306a36Sopenharmony_ci/* Auto correction */ 366762306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE}, 366862306a36Sopenharmony_ci {0xa1, 0x01, 0x0180}, /* AutoCorrectEnable */ 366962306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 367062306a36Sopenharmony_ci/* Gains */ 367162306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 367262306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 367362306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 367462306a36Sopenharmony_ci {} 367562306a36Sopenharmony_ci}; 367662306a36Sopenharmony_ci 367762306a36Sopenharmony_cistatic const struct usb_action pas106b_Initial[] = { /* 352x288 */ 367862306a36Sopenharmony_ci/* JPEG control */ 367962306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 368062306a36Sopenharmony_ci/* Sream and Sensor specific */ 368162306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R010_CMOSSENSORSELECT}, 368262306a36Sopenharmony_ci/* Picture size */ 368362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R003_FRAMEWIDTHHIGH}, 368462306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R004_FRAMEWIDTHLOW}, 368562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 368662306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R006_FRAMEHEIGHTLOW}, 368762306a36Sopenharmony_ci/* System */ 368862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 368962306a36Sopenharmony_ci/* Sream and Sensor specific */ 369062306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 369162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 369262306a36Sopenharmony_ci/* Sensor Interface */ 369362306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, 369462306a36Sopenharmony_ci/* Window inside sensor array */ 369562306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R09A_WINXSTARTLOW}, 369662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 369762306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R11C_FIRSTXLOW}, 369862306a36Sopenharmony_ci {0xa0, 0x28, ZC3XX_R09C_WINHEIGHTLOW}, 369962306a36Sopenharmony_ci {0xa0, 0x68, ZC3XX_R09E_WINWIDTHLOW}, 370062306a36Sopenharmony_ci/* Init the sensor */ 370162306a36Sopenharmony_ci {0xaa, 0x02, 0x0004}, 370262306a36Sopenharmony_ci {0xaa, 0x08, 0x0000}, 370362306a36Sopenharmony_ci {0xaa, 0x09, 0x0005}, 370462306a36Sopenharmony_ci {0xaa, 0x0a, 0x0002}, 370562306a36Sopenharmony_ci {0xaa, 0x0b, 0x0002}, 370662306a36Sopenharmony_ci {0xaa, 0x0c, 0x0005}, 370762306a36Sopenharmony_ci {0xaa, 0x0d, 0x0000}, 370862306a36Sopenharmony_ci {0xaa, 0x0e, 0x0002}, 370962306a36Sopenharmony_ci {0xaa, 0x14, 0x0081}, 371062306a36Sopenharmony_ci/* Other registers */ 371162306a36Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 371262306a36Sopenharmony_ci/* Frame retrieving */ 371362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 371462306a36Sopenharmony_ci/* Gains */ 371562306a36Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R1A8_DIGITALGAIN}, 371662306a36Sopenharmony_ci/* Unknown */ 371762306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 371862306a36Sopenharmony_ci/* Sharpness */ 371962306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 372062306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 372162306a36Sopenharmony_ci/* Other registers */ 372262306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 372362306a36Sopenharmony_ci/* Auto exposure and white balance */ 372462306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 372562306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R18D_YTARGET}, 372662306a36Sopenharmony_ci/*Dead pixels */ 372762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 372862306a36Sopenharmony_ci/* EEPROM */ 372962306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 373062306a36Sopenharmony_ci/* JPEG control */ 373162306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 373262306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, 373362306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, 373462306a36Sopenharmony_ci/* Other registers */ 373562306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 373662306a36Sopenharmony_ci/* Auto exposure and white balance */ 373762306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 373862306a36Sopenharmony_ci/*Dead pixels */ 373962306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 374062306a36Sopenharmony_ci/* EEPROM */ 374162306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 374262306a36Sopenharmony_ci/* JPEG control */ 374362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 374462306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, 374562306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, 374662306a36Sopenharmony_ci 374762306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R10A_RGB00}, /* matrix */ 374862306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10B_RGB01}, 374962306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10C_RGB02}, 375062306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10D_RGB10}, 375162306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R10E_RGB11}, 375262306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10F_RGB12}, 375362306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R110_RGB20}, 375462306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R111_RGB21}, 375562306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R112_RGB22}, 375662306a36Sopenharmony_ci/* Auto correction */ 375762306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R181_WINXSTART}, 375862306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R182_WINXWIDTH}, 375962306a36Sopenharmony_ci {0xa0, 0x16, ZC3XX_R183_WINXCENTER}, 376062306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R184_WINYSTART}, 376162306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R185_WINYWIDTH}, 376262306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R186_WINYCENTER}, 376362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 376462306a36Sopenharmony_ci 376562306a36Sopenharmony_ci/* Auto exposure and white balance */ 376662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 376762306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID}, 376862306a36Sopenharmony_ci {0xa0, 0xb1, ZC3XX_R192_EXPOSURELIMITLOW}, 376962306a36Sopenharmony_ci 377062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 377162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 377262306a36Sopenharmony_ci {0xa0, 0x87, ZC3XX_R197_ANTIFLICKERLOW}, 377362306a36Sopenharmony_ci 377462306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 377562306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 377662306a36Sopenharmony_ci/* sensor on */ 377762306a36Sopenharmony_ci {0xaa, 0x07, 0x00b1}, 377862306a36Sopenharmony_ci {0xaa, 0x05, 0x0003}, 377962306a36Sopenharmony_ci {0xaa, 0x04, 0x0001}, 378062306a36Sopenharmony_ci {0xaa, 0x03, 0x003b}, 378162306a36Sopenharmony_ci/* Gains */ 378262306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R1A9_DIGITALLIMITDIFF}, 378362306a36Sopenharmony_ci {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, 378462306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 378562306a36Sopenharmony_ci/* Auto correction */ 378662306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE}, 378762306a36Sopenharmony_ci {0xa1, 0x01, 0x0180}, /* AutoCorrectEnable */ 378862306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 378962306a36Sopenharmony_ci/* Gains */ 379062306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 379162306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 379262306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 379362306a36Sopenharmony_ci 379462306a36Sopenharmony_ci {0xa0, 0x00, 0x0007}, /* AutoCorrectEnable */ 379562306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R018_FRAMELOST}, /* Frame adjust */ 379662306a36Sopenharmony_ci {} 379762306a36Sopenharmony_ci}; 379862306a36Sopenharmony_cistatic const struct usb_action pas106b_50HZ[] = { 379962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 380062306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,06,cc */ 380162306a36Sopenharmony_ci {0xa0, 0x54, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,54,cc */ 380262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 380362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 380462306a36Sopenharmony_ci {0xa0, 0x87, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,87,cc */ 380562306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 380662306a36Sopenharmony_ci {0xa0, 0x30, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,30,cc */ 380762306a36Sopenharmony_ci {0xaa, 0x03, 0x0021}, /* 00,03,21,aa */ 380862306a36Sopenharmony_ci {0xaa, 0x04, 0x000c}, /* 00,04,0c,aa */ 380962306a36Sopenharmony_ci {0xaa, 0x05, 0x0002}, /* 00,05,02,aa */ 381062306a36Sopenharmony_ci {0xaa, 0x07, 0x001c}, /* 00,07,1c,aa */ 381162306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,04,cc */ 381262306a36Sopenharmony_ci {} 381362306a36Sopenharmony_ci}; 381462306a36Sopenharmony_cistatic const struct usb_action pas106b_60HZ[] = { 381562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 381662306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,06,cc */ 381762306a36Sopenharmony_ci {0xa0, 0x2e, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,2e,cc */ 381862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 381962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 382062306a36Sopenharmony_ci {0xa0, 0x71, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,71,cc */ 382162306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 382262306a36Sopenharmony_ci {0xa0, 0x30, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,30,cc */ 382362306a36Sopenharmony_ci {0xaa, 0x03, 0x001c}, /* 00,03,1c,aa */ 382462306a36Sopenharmony_ci {0xaa, 0x04, 0x0004}, /* 00,04,04,aa */ 382562306a36Sopenharmony_ci {0xaa, 0x05, 0x0001}, /* 00,05,01,aa */ 382662306a36Sopenharmony_ci {0xaa, 0x07, 0x00c4}, /* 00,07,c4,aa */ 382762306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,04,cc */ 382862306a36Sopenharmony_ci {} 382962306a36Sopenharmony_ci}; 383062306a36Sopenharmony_cistatic const struct usb_action pas106b_NoFlicker[] = { 383162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 383262306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,06,cc */ 383362306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,50,cc */ 383462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 383562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 383662306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 383762306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 383862306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 383962306a36Sopenharmony_ci {0xaa, 0x03, 0x0013}, /* 00,03,13,aa */ 384062306a36Sopenharmony_ci {0xaa, 0x04, 0x0000}, /* 00,04,00,aa */ 384162306a36Sopenharmony_ci {0xaa, 0x05, 0x0001}, /* 00,05,01,aa */ 384262306a36Sopenharmony_ci {0xaa, 0x07, 0x0030}, /* 00,07,30,aa */ 384362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 384462306a36Sopenharmony_ci {} 384562306a36Sopenharmony_ci}; 384662306a36Sopenharmony_ci 384762306a36Sopenharmony_ci/* from lvWIMv.inf 046d:08a2/:08aa 2007/06/03 */ 384862306a36Sopenharmony_cistatic const struct usb_action pas202b_Initial[] = { /* 640x480 */ 384962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 385062306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 385162306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0e,cc */ 385262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, /* 00,02,00,cc */ 385362306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 385462306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 385562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 385662306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */ 385762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 385862306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 385962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 386062306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, /* 00,8d,08,cc */ 386162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 386262306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,03,cc */ 386362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 386462306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,03,cc */ 386562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, /* 00,9b,01,cc */ 386662306a36Sopenharmony_ci {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e6,cc */ 386762306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, /* 00,9d,02,cc */ 386862306a36Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */ 386962306a36Sopenharmony_ci {0xaa, 0x02, 0x0002}, /* 00,02,04,aa --> 02 */ 387062306a36Sopenharmony_ci {0xaa, 0x07, 0x0006}, /* 00,07,06,aa */ 387162306a36Sopenharmony_ci {0xaa, 0x08, 0x0002}, /* 00,08,02,aa */ 387262306a36Sopenharmony_ci {0xaa, 0x09, 0x0006}, /* 00,09,06,aa */ 387362306a36Sopenharmony_ci {0xaa, 0x0a, 0x0001}, /* 00,0a,01,aa */ 387462306a36Sopenharmony_ci {0xaa, 0x0b, 0x0001}, /* 00,0b,01,aa */ 387562306a36Sopenharmony_ci {0xaa, 0x0c, 0x0006}, 387662306a36Sopenharmony_ci {0xaa, 0x0d, 0x0000}, /* 00,0d,00,aa */ 387762306a36Sopenharmony_ci {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 387862306a36Sopenharmony_ci {0xaa, 0x12, 0x0005}, /* 00,12,05,aa */ 387962306a36Sopenharmony_ci {0xaa, 0x13, 0x0063}, /* 00,13,63,aa */ 388062306a36Sopenharmony_ci {0xaa, 0x15, 0x0070}, /* 00,15,70,aa */ 388162306a36Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,b7,cc */ 388262306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 388362306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 388462306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */ 388562306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 388662306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 388762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 388862306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 388962306a36Sopenharmony_ci {0xa0, 0x70, ZC3XX_R18D_YTARGET}, /* 01,8d,70,cc */ 389062306a36Sopenharmony_ci {} 389162306a36Sopenharmony_ci}; 389262306a36Sopenharmony_cistatic const struct usb_action pas202b_InitialScale[] = { /* 320x240 */ 389362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 389462306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 389562306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0e,cc */ 389662306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */ 389762306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 389862306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 389962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 390062306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 390162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 390262306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 390362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 390462306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, /* 00,8d,08,cc */ 390562306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,08,cc */ 390662306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,02,cc */ 390762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,08,cc */ 390862306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,02,cc */ 390962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, /* 00,9b,01,cc */ 391062306a36Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 391162306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, /* 00,9d,02,cc */ 391262306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */ 391362306a36Sopenharmony_ci {0xaa, 0x02, 0x0002}, /* 00,02,02,aa */ 391462306a36Sopenharmony_ci {0xaa, 0x07, 0x0006}, /* 00,07,06,aa */ 391562306a36Sopenharmony_ci {0xaa, 0x08, 0x0002}, /* 00,08,02,aa */ 391662306a36Sopenharmony_ci {0xaa, 0x09, 0x0006}, /* 00,09,06,aa */ 391762306a36Sopenharmony_ci {0xaa, 0x0a, 0x0001}, /* 00,0a,01,aa */ 391862306a36Sopenharmony_ci {0xaa, 0x0b, 0x0001}, /* 00,0b,01,aa */ 391962306a36Sopenharmony_ci {0xaa, 0x0c, 0x0006}, 392062306a36Sopenharmony_ci {0xaa, 0x0d, 0x0000}, /* 00,0d,00,aa */ 392162306a36Sopenharmony_ci {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 392262306a36Sopenharmony_ci {0xaa, 0x12, 0x0005}, /* 00,12,05,aa */ 392362306a36Sopenharmony_ci {0xaa, 0x13, 0x0063}, /* 00,13,63,aa */ 392462306a36Sopenharmony_ci {0xaa, 0x15, 0x0070}, /* 00,15,70,aa */ 392562306a36Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */ 392662306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 392762306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 392862306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */ 392962306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 393062306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 393162306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 393262306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 393362306a36Sopenharmony_ci {0xa0, 0x70, ZC3XX_R18D_YTARGET}, /* 01,8d,70,cc */ 393462306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R097_WINYSTARTHIGH}, 393562306a36Sopenharmony_ci {0xa0, 0xfe, ZC3XX_R098_WINYSTARTLOW}, 393662306a36Sopenharmony_ci {} 393762306a36Sopenharmony_ci}; 393862306a36Sopenharmony_cistatic const struct usb_action pas202b_50HZ[] = { 393962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 394062306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, /* 00,87,20,cc */ 394162306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, /* 00,88,21,cc */ 394262306a36Sopenharmony_ci {0xaa, 0x20, 0x0002}, /* 00,20,02,aa */ 394362306a36Sopenharmony_ci {0xaa, 0x21, 0x001b}, 394462306a36Sopenharmony_ci {0xaa, 0x03, 0x0044}, /* 00,03,44,aa */ 394562306a36Sopenharmony_ci {0xaa, 0x04, 0x0008}, 394662306a36Sopenharmony_ci {0xaa, 0x05, 0x001b}, 394762306a36Sopenharmony_ci {0xaa, 0x0e, 0x0001}, /* 00,0e,01,aa */ 394862306a36Sopenharmony_ci {0xaa, 0x0f, 0x0000}, /* 00,0f,00,aa */ 394962306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF}, 395062306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 395162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 395262306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, 395362306a36Sopenharmony_ci {0xa0, 0x1b, ZC3XX_R192_EXPOSURELIMITLOW}, 395462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 395562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 395662306a36Sopenharmony_ci {0xa0, 0x4d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,4d,cc */ 395762306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 395862306a36Sopenharmony_ci {0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE}, 395962306a36Sopenharmony_ci {0xa0, 0x44, ZC3XX_R01D_HSYNC_0}, /* 00,1d,44,cc */ 396062306a36Sopenharmony_ci {0xa0, 0x6f, ZC3XX_R01E_HSYNC_1}, /* 00,1e,6f,cc */ 396162306a36Sopenharmony_ci {0xa0, 0xad, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ad,cc */ 396262306a36Sopenharmony_ci {0xa0, 0xeb, ZC3XX_R020_HSYNC_3}, /* 00,20,eb,cc */ 396362306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID}, /* 00,87,0f,cc */ 396462306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW}, /* 00,88,0e,cc */ 396562306a36Sopenharmony_ci {} 396662306a36Sopenharmony_ci}; 396762306a36Sopenharmony_cistatic const struct usb_action pas202b_50HZScale[] = { 396862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 396962306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, /* 00,87,20,cc */ 397062306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, /* 00,88,21,cc */ 397162306a36Sopenharmony_ci {0xaa, 0x20, 0x0004}, 397262306a36Sopenharmony_ci {0xaa, 0x21, 0x003d}, 397362306a36Sopenharmony_ci {0xaa, 0x03, 0x0041}, /* 00,03,41,aa */ 397462306a36Sopenharmony_ci {0xaa, 0x04, 0x0010}, 397562306a36Sopenharmony_ci {0xaa, 0x05, 0x003d}, 397662306a36Sopenharmony_ci {0xaa, 0x0e, 0x0001}, /* 00,0e,01,aa */ 397762306a36Sopenharmony_ci {0xaa, 0x0f, 0x0000}, /* 00,0f,00,aa */ 397862306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF}, 397962306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 398062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 398162306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, 398262306a36Sopenharmony_ci {0xa0, 0x3d, ZC3XX_R192_EXPOSURELIMITLOW}, 398362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 398462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 398562306a36Sopenharmony_ci {0xa0, 0x9b, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,9b,cc */ 398662306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 398762306a36Sopenharmony_ci {0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE}, 398862306a36Sopenharmony_ci {0xa0, 0x41, ZC3XX_R01D_HSYNC_0}, /* 00,1d,41,cc */ 398962306a36Sopenharmony_ci {0xa0, 0x6f, ZC3XX_R01E_HSYNC_1}, /* 00,1e,6f,cc */ 399062306a36Sopenharmony_ci {0xa0, 0xad, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ad,cc */ 399162306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 399262306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID}, /* 00,87,0f,cc */ 399362306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW}, /* 00,88,0e,cc */ 399462306a36Sopenharmony_ci {} 399562306a36Sopenharmony_ci}; 399662306a36Sopenharmony_cistatic const struct usb_action pas202b_60HZ[] = { 399762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 399862306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, /* 00,87,20,cc */ 399962306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, /* 00,88,21,cc */ 400062306a36Sopenharmony_ci {0xaa, 0x20, 0x0002}, /* 00,20,02,aa */ 400162306a36Sopenharmony_ci {0xaa, 0x21, 0x0000}, /* 00,21,00,aa */ 400262306a36Sopenharmony_ci {0xaa, 0x03, 0x0045}, /* 00,03,45,aa */ 400362306a36Sopenharmony_ci {0xaa, 0x04, 0x0008}, /* 00,04,08,aa */ 400462306a36Sopenharmony_ci {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */ 400562306a36Sopenharmony_ci {0xaa, 0x0e, 0x0001}, /* 00,0e,01,aa */ 400662306a36Sopenharmony_ci {0xaa, 0x0f, 0x0000}, /* 00,0f,00,aa */ 400762306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF}, 400862306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 400962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 401062306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, 401162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, 401262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 401362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 401462306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,40,cc */ 401562306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 401662306a36Sopenharmony_ci {0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE}, 401762306a36Sopenharmony_ci {0xa0, 0x45, ZC3XX_R01D_HSYNC_0}, /* 00,1d,45,cc */ 401862306a36Sopenharmony_ci {0xa0, 0x8e, ZC3XX_R01E_HSYNC_1}, /* 00,1e,8e,cc */ 401962306a36Sopenharmony_ci {0xa0, 0xc1, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c1,cc */ 402062306a36Sopenharmony_ci {0xa0, 0xf5, ZC3XX_R020_HSYNC_3}, /* 00,20,f5,cc */ 402162306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID}, /* 00,87,0f,cc */ 402262306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW}, /* 00,88,0e,cc */ 402362306a36Sopenharmony_ci {} 402462306a36Sopenharmony_ci}; 402562306a36Sopenharmony_cistatic const struct usb_action pas202b_60HZScale[] = { 402662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 402762306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, /* 00,87,20,cc */ 402862306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, /* 00,88,21,cc */ 402962306a36Sopenharmony_ci {0xaa, 0x20, 0x0004}, 403062306a36Sopenharmony_ci {0xaa, 0x21, 0x0008}, 403162306a36Sopenharmony_ci {0xaa, 0x03, 0x0042}, /* 00,03,42,aa */ 403262306a36Sopenharmony_ci {0xaa, 0x04, 0x0010}, 403362306a36Sopenharmony_ci {0xaa, 0x05, 0x0008}, 403462306a36Sopenharmony_ci {0xaa, 0x0e, 0x0001}, /* 00,0e,01,aa */ 403562306a36Sopenharmony_ci {0xaa, 0x0f, 0x0000}, /* 00,0f,00,aa */ 403662306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF}, 403762306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 403862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 403962306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, 404062306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R192_EXPOSURELIMITLOW}, 404162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 404262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 404362306a36Sopenharmony_ci {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,81,cc */ 404462306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 404562306a36Sopenharmony_ci {0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE}, 404662306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R01D_HSYNC_0}, /* 00,1d,42,cc */ 404762306a36Sopenharmony_ci {0xa0, 0x6f, ZC3XX_R01E_HSYNC_1}, /* 00,1e,6f,cc */ 404862306a36Sopenharmony_ci {0xa0, 0xaf, ZC3XX_R01F_HSYNC_2}, /* 00,1f,af,cc */ 404962306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 405062306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID}, /* 00,87,0f,cc */ 405162306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW}, /* 00,88,0e,cc */ 405262306a36Sopenharmony_ci {} 405362306a36Sopenharmony_ci}; 405462306a36Sopenharmony_cistatic const struct usb_action pas202b_NoFlicker[] = { 405562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 405662306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, /* 00,87,20,cc */ 405762306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, /* 00,88,21,cc */ 405862306a36Sopenharmony_ci {0xaa, 0x20, 0x0002}, /* 00,20,02,aa */ 405962306a36Sopenharmony_ci {0xaa, 0x21, 0x0006}, 406062306a36Sopenharmony_ci {0xaa, 0x03, 0x0040}, /* 00,03,40,aa */ 406162306a36Sopenharmony_ci {0xaa, 0x04, 0x0008}, /* 00,04,08,aa */ 406262306a36Sopenharmony_ci {0xaa, 0x05, 0x0006}, 406362306a36Sopenharmony_ci {0xaa, 0x0e, 0x0001}, /* 00,0e,01,aa */ 406462306a36Sopenharmony_ci {0xaa, 0x0f, 0x0000}, /* 00,0f,00,aa */ 406562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 406662306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, 406762306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R192_EXPOSURELIMITLOW}, 406862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 406962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 407062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW}, 407162306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 407262306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 407362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 407462306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 407562306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R01D_HSYNC_0}, /* 00,1d,40,cc */ 407662306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R01E_HSYNC_1}, /* 00,1e,60,cc */ 407762306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, /* 00,1f,90,cc */ 407862306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 407962306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID}, /* 00,87,0f,cc */ 408062306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW}, /* 00,88,0e,cc */ 408162306a36Sopenharmony_ci {} 408262306a36Sopenharmony_ci}; 408362306a36Sopenharmony_cistatic const struct usb_action pas202b_NoFlickerScale[] = { 408462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 408562306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, /* 00,87,20,cc */ 408662306a36Sopenharmony_ci {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, /* 00,88,21,cc */ 408762306a36Sopenharmony_ci {0xaa, 0x20, 0x0004}, 408862306a36Sopenharmony_ci {0xaa, 0x21, 0x000c}, 408962306a36Sopenharmony_ci {0xaa, 0x03, 0x0040}, /* 00,03,40,aa */ 409062306a36Sopenharmony_ci {0xaa, 0x04, 0x0010}, 409162306a36Sopenharmony_ci {0xaa, 0x05, 0x000c}, 409262306a36Sopenharmony_ci {0xaa, 0x0e, 0x0001}, /* 00,0e,01,aa */ 409362306a36Sopenharmony_ci {0xaa, 0x0f, 0x0000}, /* 00,0f,00,aa */ 409462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 409562306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, 409662306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R192_EXPOSURELIMITLOW}, 409762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 409862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 409962306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,02,cc */ 410062306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 410162306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 410262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 410362306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 410462306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R01D_HSYNC_0}, /* 00,1d,40,cc */ 410562306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R01E_HSYNC_1}, /* 00,1e,60,cc */ 410662306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, /* 00,1f,90,cc */ 410762306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 410862306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID}, /* 00,87,0f,cc */ 410962306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW}, /* 00,88,0e,cc */ 411062306a36Sopenharmony_ci {} 411162306a36Sopenharmony_ci}; 411262306a36Sopenharmony_ci 411362306a36Sopenharmony_ci/* mt9v111 (mi0360soc) and pb0330 from vm30x.inf 0ac8:301b 07/02/13 */ 411462306a36Sopenharmony_cistatic const struct usb_action mt9v111_1_Initial[] = { /* 640x480 */ 411562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 411662306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 411762306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 411862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 411962306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 412062306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 412162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 412262306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 412362306a36Sopenharmony_ci {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 412462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 412562306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 412662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 412762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 412862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 412962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 413062306a36Sopenharmony_ci {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 413162306a36Sopenharmony_ci {0xdd, 0x00, 0x0200}, 413262306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 413362306a36Sopenharmony_ci {0xaa, 0x01, 0x0001}, 413462306a36Sopenharmony_ci {0xaa, 0x06, 0x0000}, 413562306a36Sopenharmony_ci {0xaa, 0x08, 0x0483}, 413662306a36Sopenharmony_ci {0xaa, 0x01, 0x0004}, 413762306a36Sopenharmony_ci {0xaa, 0x08, 0x0006}, 413862306a36Sopenharmony_ci {0xaa, 0x02, 0x0011}, 413962306a36Sopenharmony_ci {0xaa, 0x03, 0x01e5}, /*jfm: was 01e7*/ 414062306a36Sopenharmony_ci {0xaa, 0x04, 0x0285}, /*jfm: was 0287*/ 414162306a36Sopenharmony_ci {0xaa, 0x07, 0x3002}, 414262306a36Sopenharmony_ci {0xaa, 0x20, 0x5100}, 414362306a36Sopenharmony_ci {0xaa, 0x35, 0x507f}, 414462306a36Sopenharmony_ci {0xaa, 0x30, 0x0005}, 414562306a36Sopenharmony_ci {0xaa, 0x31, 0x0000}, 414662306a36Sopenharmony_ci {0xaa, 0x58, 0x0078}, 414762306a36Sopenharmony_ci {0xaa, 0x62, 0x0411}, 414862306a36Sopenharmony_ci {0xaa, 0x2b, 0x007f}, 414962306a36Sopenharmony_ci {0xaa, 0x2c, 0x007f}, /*jfm: was 0030*/ 415062306a36Sopenharmony_ci {0xaa, 0x2d, 0x007f}, /*jfm: was 0030*/ 415162306a36Sopenharmony_ci {0xaa, 0x2e, 0x007f}, /*jfm: was 0030*/ 415262306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, 415362306a36Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, 415462306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 415562306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 415662306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 415762306a36Sopenharmony_ci {0xa0, 0x09, 0x01ad}, /*jfm: was 00*/ 415862306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 415962306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 416062306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 416162306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 416262306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 416362306a36Sopenharmony_ci {0xa0, 0x6c, ZC3XX_R18D_YTARGET}, 416462306a36Sopenharmony_ci {0xa0, 0x61, ZC3XX_R116_RGAIN}, 416562306a36Sopenharmony_ci {0xa0, 0x65, ZC3XX_R118_BGAIN}, 416662306a36Sopenharmony_ci {} 416762306a36Sopenharmony_ci}; 416862306a36Sopenharmony_cistatic const struct usb_action mt9v111_1_InitialScale[] = { /* 320x240 */ 416962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 417062306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 417162306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 417262306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 417362306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 417462306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 417562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 417662306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 417762306a36Sopenharmony_ci {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 417862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 417962306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 418062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 418162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 418262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 418362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 418462306a36Sopenharmony_ci {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 418562306a36Sopenharmony_ci {0xdd, 0x00, 0x0200}, 418662306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 418762306a36Sopenharmony_ci {0xaa, 0x01, 0x0001}, 418862306a36Sopenharmony_ci {0xaa, 0x06, 0x0000}, 418962306a36Sopenharmony_ci {0xaa, 0x08, 0x0483}, 419062306a36Sopenharmony_ci {0xaa, 0x01, 0x0004}, 419162306a36Sopenharmony_ci {0xaa, 0x08, 0x0006}, 419262306a36Sopenharmony_ci {0xaa, 0x02, 0x0011}, 419362306a36Sopenharmony_ci {0xaa, 0x03, 0x01e7}, 419462306a36Sopenharmony_ci {0xaa, 0x04, 0x0287}, 419562306a36Sopenharmony_ci {0xaa, 0x07, 0x3002}, 419662306a36Sopenharmony_ci {0xaa, 0x20, 0x5100}, 419762306a36Sopenharmony_ci {0xaa, 0x35, 0x007f}, /*jfm: was 0050*/ 419862306a36Sopenharmony_ci {0xaa, 0x30, 0x0005}, 419962306a36Sopenharmony_ci {0xaa, 0x31, 0x0000}, 420062306a36Sopenharmony_ci {0xaa, 0x58, 0x0078}, 420162306a36Sopenharmony_ci {0xaa, 0x62, 0x0411}, 420262306a36Sopenharmony_ci {0xaa, 0x2b, 0x007f}, /*jfm: was 28*/ 420362306a36Sopenharmony_ci {0xaa, 0x2c, 0x007f}, /*jfm: was 30*/ 420462306a36Sopenharmony_ci {0xaa, 0x2d, 0x007f}, /*jfm: was 30*/ 420562306a36Sopenharmony_ci {0xaa, 0x2e, 0x007f}, /*jfm: was 28*/ 420662306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, 420762306a36Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, 420862306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 420962306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 421062306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 421162306a36Sopenharmony_ci {0xa0, 0x09, 0x01ad}, /*jfm: was 00*/ 421262306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 421362306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 421462306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 421562306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 421662306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 421762306a36Sopenharmony_ci {0xa0, 0x6c, ZC3XX_R18D_YTARGET}, 421862306a36Sopenharmony_ci {0xa0, 0x61, ZC3XX_R116_RGAIN}, 421962306a36Sopenharmony_ci {0xa0, 0x65, ZC3XX_R118_BGAIN}, 422062306a36Sopenharmony_ci {} 422162306a36Sopenharmony_ci}; 422262306a36Sopenharmony_cistatic const struct usb_action mt9v111_1_AE50HZ[] = { 422362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 422462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 422562306a36Sopenharmony_ci {0xbb, 0x00, 0x0562}, 422662306a36Sopenharmony_ci {0xbb, 0x01, 0x09aa}, 422762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 422862306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID}, 422962306a36Sopenharmony_ci {0xa0, 0x9b, ZC3XX_R192_EXPOSURELIMITLOW}, 423062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 423162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 423262306a36Sopenharmony_ci {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW}, 423362306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 423462306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 423562306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 423662306a36Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 423762306a36Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, 423862306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, 423962306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, 424062306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 424162306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 424262306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 424362306a36Sopenharmony_ci {} 424462306a36Sopenharmony_ci}; 424562306a36Sopenharmony_cistatic const struct usb_action mt9v111_1_AE50HZScale[] = { 424662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 424762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 424862306a36Sopenharmony_ci {0xbb, 0x00, 0x0509}, 424962306a36Sopenharmony_ci {0xbb, 0x01, 0x0934}, 425062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 425162306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 425262306a36Sopenharmony_ci {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW}, 425362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 425462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 425562306a36Sopenharmony_ci {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW}, 425662306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 425762306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 425862306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 425962306a36Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 426062306a36Sopenharmony_ci {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, 426162306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, 426262306a36Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2}, 426362306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 426462306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 426562306a36Sopenharmony_ci {} 426662306a36Sopenharmony_ci}; 426762306a36Sopenharmony_cistatic const struct usb_action mt9v111_1_AE60HZ[] = { 426862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 426962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 427062306a36Sopenharmony_ci {0xaa, 0x05, 0x003d}, 427162306a36Sopenharmony_ci {0xaa, 0x09, 0x016e}, 427262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 427362306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 427462306a36Sopenharmony_ci {0xa0, 0xdd, ZC3XX_R192_EXPOSURELIMITLOW}, 427562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 427662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 427762306a36Sopenharmony_ci {0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW}, 427862306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 427962306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 428062306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 428162306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 428262306a36Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, 428362306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, 428462306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, 428562306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 428662306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 428762306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 428862306a36Sopenharmony_ci {} 428962306a36Sopenharmony_ci}; 429062306a36Sopenharmony_cistatic const struct usb_action mt9v111_1_AE60HZScale[] = { 429162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 429262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 429362306a36Sopenharmony_ci {0xbb, 0x00, 0x0509}, 429462306a36Sopenharmony_ci {0xbb, 0x01, 0x0983}, 429562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 429662306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 429762306a36Sopenharmony_ci {0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW}, 429862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 429962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 430062306a36Sopenharmony_ci {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW}, 430162306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 430262306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 430362306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 430462306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 430562306a36Sopenharmony_ci {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, 430662306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, 430762306a36Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2}, 430862306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 430962306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 431062306a36Sopenharmony_ci {} 431162306a36Sopenharmony_ci}; 431262306a36Sopenharmony_cistatic const struct usb_action mt9v111_1_AENoFlicker[] = { 431362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 431462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 431562306a36Sopenharmony_ci {0xbb, 0x00, 0x0509}, 431662306a36Sopenharmony_ci {0xbb, 0x01, 0x0960}, 431762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 431862306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 431962306a36Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, 432062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 432162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 432262306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW}, 432362306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 432462306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 432562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 432662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 432762306a36Sopenharmony_ci {0xa0, 0x09, ZC3XX_R01D_HSYNC_0}, 432862306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R01E_HSYNC_1}, 432962306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, 433062306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R020_HSYNC_3}, 433162306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 433262306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 433362306a36Sopenharmony_ci {} 433462306a36Sopenharmony_ci}; 433562306a36Sopenharmony_cistatic const struct usb_action mt9v111_1_AENoFlickerScale[] = { 433662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 433762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 433862306a36Sopenharmony_ci {0xbb, 0x00, 0x0534}, 433962306a36Sopenharmony_ci {0xbb, 0x02, 0x0960}, 434062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 434162306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 434262306a36Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, 434362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 434462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 434562306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW}, 434662306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 434762306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 434862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 434962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 435062306a36Sopenharmony_ci {0xa0, 0x34, ZC3XX_R01D_HSYNC_0}, 435162306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R01E_HSYNC_1}, 435262306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, 435362306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R020_HSYNC_3}, 435462306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 435562306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 435662306a36Sopenharmony_ci {} 435762306a36Sopenharmony_ci}; 435862306a36Sopenharmony_ci/* from usbvm303.inf 0ac8:303b 07/03/25 (3 - tas5130c) */ 435962306a36Sopenharmony_cistatic const struct usb_action mt9v111_3_Initial[] = { 436062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 436162306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 436262306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 436362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 436462306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 436562306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 436662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 436762306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 436862306a36Sopenharmony_ci {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 436962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 437062306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 437162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 437262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 437362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 437462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 437562306a36Sopenharmony_ci {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 437662306a36Sopenharmony_ci {0xdd, 0x00, 0x0200}, 437762306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 437862306a36Sopenharmony_ci {0xaa, 0x01, 0x0001}, /* select IFP/SOC registers */ 437962306a36Sopenharmony_ci {0xaa, 0x06, 0x0000}, /* operating mode control */ 438062306a36Sopenharmony_ci {0xaa, 0x08, 0x0483}, /* output format control */ 438162306a36Sopenharmony_ci /* H red first, V red or blue first, 438262306a36Sopenharmony_ci * raw Bayer, auto flicker */ 438362306a36Sopenharmony_ci {0xaa, 0x01, 0x0004}, /* select sensor core registers */ 438462306a36Sopenharmony_ci {0xaa, 0x08, 0x0006}, /* row start */ 438562306a36Sopenharmony_ci {0xaa, 0x02, 0x0011}, /* column start */ 438662306a36Sopenharmony_ci {0xaa, 0x03, 0x01e5}, /* window height - 1 */ 438762306a36Sopenharmony_ci {0xaa, 0x04, 0x0285}, /* window width - 1 */ 438862306a36Sopenharmony_ci {0xaa, 0x07, 0x3002}, /* output control */ 438962306a36Sopenharmony_ci {0xaa, 0x20, 0x1100}, /* read mode: bits 8 & 12 (?) */ 439062306a36Sopenharmony_ci {0xaa, 0x35, 0x007f}, /* global gain */ 439162306a36Sopenharmony_ci {0xaa, 0x30, 0x0005}, 439262306a36Sopenharmony_ci {0xaa, 0x31, 0x0000}, 439362306a36Sopenharmony_ci {0xaa, 0x58, 0x0078}, 439462306a36Sopenharmony_ci {0xaa, 0x62, 0x0411}, 439562306a36Sopenharmony_ci {0xaa, 0x2b, 0x007f}, /* green1 gain */ 439662306a36Sopenharmony_ci {0xaa, 0x2c, 0x007f}, /* blue gain */ 439762306a36Sopenharmony_ci {0xaa, 0x2d, 0x007f}, /* red gain */ 439862306a36Sopenharmony_ci {0xaa, 0x2e, 0x007f}, /* green2 gain */ 439962306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, 440062306a36Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 440162306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 440262306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 440362306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 440462306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 440562306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 440662306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 440762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 440862306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 440962306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 441062306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R18D_YTARGET}, 441162306a36Sopenharmony_ci {0xa0, 0x61, ZC3XX_R116_RGAIN}, 441262306a36Sopenharmony_ci {0xa0, 0x65, ZC3XX_R118_BGAIN}, 441362306a36Sopenharmony_ci {} 441462306a36Sopenharmony_ci}; 441562306a36Sopenharmony_cistatic const struct usb_action mt9v111_3_InitialScale[] = { 441662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 441762306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 441862306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 441962306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 442062306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 442162306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 442262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 442362306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 442462306a36Sopenharmony_ci {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 442562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 442662306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 442762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 442862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 442962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 443062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 443162306a36Sopenharmony_ci {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 443262306a36Sopenharmony_ci {0xdd, 0x00, 0x0200}, 443362306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 443462306a36Sopenharmony_ci {0xaa, 0x01, 0x0001}, 443562306a36Sopenharmony_ci {0xaa, 0x06, 0x0000}, 443662306a36Sopenharmony_ci {0xaa, 0x08, 0x0483}, 443762306a36Sopenharmony_ci {0xaa, 0x01, 0x0004}, 443862306a36Sopenharmony_ci {0xaa, 0x08, 0x0006}, 443962306a36Sopenharmony_ci {0xaa, 0x02, 0x0011}, 444062306a36Sopenharmony_ci {0xaa, 0x03, 0x01e7}, 444162306a36Sopenharmony_ci {0xaa, 0x04, 0x0287}, 444262306a36Sopenharmony_ci {0xaa, 0x07, 0x3002}, 444362306a36Sopenharmony_ci {0xaa, 0x20, 0x1100}, 444462306a36Sopenharmony_ci {0xaa, 0x35, 0x007f}, 444562306a36Sopenharmony_ci {0xaa, 0x30, 0x0005}, 444662306a36Sopenharmony_ci {0xaa, 0x31, 0x0000}, 444762306a36Sopenharmony_ci {0xaa, 0x58, 0x0078}, 444862306a36Sopenharmony_ci {0xaa, 0x62, 0x0411}, 444962306a36Sopenharmony_ci {0xaa, 0x2b, 0x007f}, 445062306a36Sopenharmony_ci {0xaa, 0x2c, 0x007f}, 445162306a36Sopenharmony_ci {0xaa, 0x2d, 0x007f}, 445262306a36Sopenharmony_ci {0xaa, 0x2e, 0x007f}, 445362306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, 445462306a36Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 445562306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 445662306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 445762306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 445862306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 445962306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 446062306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 446162306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 446262306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 446362306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 446462306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R18D_YTARGET}, 446562306a36Sopenharmony_ci {0xa0, 0x61, ZC3XX_R116_RGAIN}, 446662306a36Sopenharmony_ci {0xa0, 0x65, ZC3XX_R118_BGAIN}, 446762306a36Sopenharmony_ci {} 446862306a36Sopenharmony_ci}; 446962306a36Sopenharmony_cistatic const struct usb_action mt9v111_3_AE50HZ[] = { 447062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 447162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 447262306a36Sopenharmony_ci {0xaa, 0x05, 0x0009}, /* horizontal blanking */ 447362306a36Sopenharmony_ci {0xaa, 0x09, 0x01ce}, /* shutter width */ 447462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 447562306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 447662306a36Sopenharmony_ci {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW}, 447762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 447862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 447962306a36Sopenharmony_ci {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW}, 448062306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 448162306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 448262306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 448362306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 448462306a36Sopenharmony_ci {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, 448562306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, 448662306a36Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2}, 448762306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 448862306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 448962306a36Sopenharmony_ci {} 449062306a36Sopenharmony_ci}; 449162306a36Sopenharmony_cistatic const struct usb_action mt9v111_3_AE50HZScale[] = { 449262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 449362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 449462306a36Sopenharmony_ci {0xaa, 0x05, 0x0009}, 449562306a36Sopenharmony_ci {0xaa, 0x09, 0x01ce}, 449662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 449762306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 449862306a36Sopenharmony_ci {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW}, 449962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 450062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 450162306a36Sopenharmony_ci {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW}, 450262306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 450362306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 450462306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 450562306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 450662306a36Sopenharmony_ci {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, 450762306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, 450862306a36Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2}, 450962306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 451062306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 451162306a36Sopenharmony_ci {} 451262306a36Sopenharmony_ci}; 451362306a36Sopenharmony_cistatic const struct usb_action mt9v111_3_AE60HZ[] = { 451462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 451562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 451662306a36Sopenharmony_ci {0xaa, 0x05, 0x0009}, 451762306a36Sopenharmony_ci {0xaa, 0x09, 0x0083}, 451862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 451962306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 452062306a36Sopenharmony_ci {0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW}, 452162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 452262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 452362306a36Sopenharmony_ci {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW}, 452462306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 452562306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 452662306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 452762306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 452862306a36Sopenharmony_ci {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, 452962306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, 453062306a36Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2}, 453162306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 453262306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 453362306a36Sopenharmony_ci {} 453462306a36Sopenharmony_ci}; 453562306a36Sopenharmony_cistatic const struct usb_action mt9v111_3_AE60HZScale[] = { 453662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 453762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 453862306a36Sopenharmony_ci {0xaa, 0x05, 0x0009}, 453962306a36Sopenharmony_ci {0xaa, 0x09, 0x0083}, 454062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 454162306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 454262306a36Sopenharmony_ci {0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW}, 454362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 454462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 454562306a36Sopenharmony_ci {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW}, 454662306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 454762306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 454862306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 454962306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 455062306a36Sopenharmony_ci {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, 455162306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, 455262306a36Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2}, 455362306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 455462306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 455562306a36Sopenharmony_ci {} 455662306a36Sopenharmony_ci}; 455762306a36Sopenharmony_cistatic const struct usb_action mt9v111_3_AENoFlicker[] = { 455862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 455962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 456062306a36Sopenharmony_ci {0xaa, 0x05, 0x0034}, 456162306a36Sopenharmony_ci {0xaa, 0x09, 0x0260}, 456262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 456362306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 456462306a36Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, 456562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 456662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 456762306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW}, 456862306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 456962306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 457062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 457162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 457262306a36Sopenharmony_ci {0xa0, 0x34, ZC3XX_R01D_HSYNC_0}, 457362306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R01E_HSYNC_1}, 457462306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, 457562306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R020_HSYNC_3}, 457662306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 457762306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 457862306a36Sopenharmony_ci {} 457962306a36Sopenharmony_ci}; 458062306a36Sopenharmony_cistatic const struct usb_action mt9v111_3_AENoFlickerScale[] = { 458162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 458262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 458362306a36Sopenharmony_ci {0xaa, 0x05, 0x0034}, 458462306a36Sopenharmony_ci {0xaa, 0x09, 0x0260}, 458562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 458662306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 458762306a36Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, 458862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 458962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 459062306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW}, 459162306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 459262306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 459362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 459462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 459562306a36Sopenharmony_ci {0xa0, 0x34, ZC3XX_R01D_HSYNC_0}, 459662306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R01E_HSYNC_1}, 459762306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, 459862306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R020_HSYNC_3}, 459962306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 460062306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 460162306a36Sopenharmony_ci {} 460262306a36Sopenharmony_ci}; 460362306a36Sopenharmony_ci 460462306a36Sopenharmony_cistatic const struct usb_action pb0330_Initial[] = { /* 640x480 */ 460562306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 460662306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 460762306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 460862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 460962306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 461062306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 461162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 461262306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 461362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 461462306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 461562306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 461662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 461762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 461862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 461962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 462062306a36Sopenharmony_ci {0xdd, 0x00, 0x0200}, 462162306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 462262306a36Sopenharmony_ci {0xaa, 0x01, 0x0006}, 462362306a36Sopenharmony_ci {0xaa, 0x02, 0x0011}, 462462306a36Sopenharmony_ci {0xaa, 0x03, 0x01e5}, /*jfm: was 1e7*/ 462562306a36Sopenharmony_ci {0xaa, 0x04, 0x0285}, /*jfm: was 0287*/ 462662306a36Sopenharmony_ci {0xaa, 0x06, 0x0003}, 462762306a36Sopenharmony_ci {0xaa, 0x07, 0x3002}, 462862306a36Sopenharmony_ci {0xaa, 0x20, 0x1100}, 462962306a36Sopenharmony_ci {0xaa, 0x2f, 0xf7b0}, 463062306a36Sopenharmony_ci {0xaa, 0x30, 0x0005}, 463162306a36Sopenharmony_ci {0xaa, 0x31, 0x0000}, 463262306a36Sopenharmony_ci {0xaa, 0x34, 0x0100}, 463362306a36Sopenharmony_ci {0xaa, 0x35, 0x0060}, 463462306a36Sopenharmony_ci {0xaa, 0x3d, 0x068f}, 463562306a36Sopenharmony_ci {0xaa, 0x40, 0x01e0}, 463662306a36Sopenharmony_ci {0xaa, 0x58, 0x0078}, 463762306a36Sopenharmony_ci {0xaa, 0x62, 0x0411}, 463862306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, 463962306a36Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 464062306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 464162306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 464262306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 464362306a36Sopenharmony_ci {0xa0, 0x09, 0x01ad}, /*jfm: was 00 */ 464462306a36Sopenharmony_ci {0xa0, 0x15, 0x01ae}, 464562306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 464662306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 464762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 464862306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 464962306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 465062306a36Sopenharmony_ci {0xa0, 0x78, ZC3XX_R18D_YTARGET}, /*jfm: was 6c*/ 465162306a36Sopenharmony_ci {} 465262306a36Sopenharmony_ci}; 465362306a36Sopenharmony_cistatic const struct usb_action pb0330_InitialScale[] = { /* 320x240 */ 465462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 465562306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 465662306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 465762306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 465862306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 465962306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 466062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 466162306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 466262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 466362306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 466462306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 466562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 466662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 466762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 466862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 466962306a36Sopenharmony_ci {0xdd, 0x00, 0x0200}, 467062306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 467162306a36Sopenharmony_ci {0xaa, 0x01, 0x0006}, 467262306a36Sopenharmony_ci {0xaa, 0x02, 0x0011}, 467362306a36Sopenharmony_ci {0xaa, 0x03, 0x01e7}, 467462306a36Sopenharmony_ci {0xaa, 0x04, 0x0287}, 467562306a36Sopenharmony_ci {0xaa, 0x06, 0x0003}, 467662306a36Sopenharmony_ci {0xaa, 0x07, 0x3002}, 467762306a36Sopenharmony_ci {0xaa, 0x20, 0x1100}, 467862306a36Sopenharmony_ci {0xaa, 0x2f, 0xf7b0}, 467962306a36Sopenharmony_ci {0xaa, 0x30, 0x0005}, 468062306a36Sopenharmony_ci {0xaa, 0x31, 0x0000}, 468162306a36Sopenharmony_ci {0xaa, 0x34, 0x0100}, 468262306a36Sopenharmony_ci {0xaa, 0x35, 0x0060}, 468362306a36Sopenharmony_ci {0xaa, 0x3d, 0x068f}, 468462306a36Sopenharmony_ci {0xaa, 0x40, 0x01e0}, 468562306a36Sopenharmony_ci {0xaa, 0x58, 0x0078}, 468662306a36Sopenharmony_ci {0xaa, 0x62, 0x0411}, 468762306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, 468862306a36Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 468962306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 469062306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 469162306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 469262306a36Sopenharmony_ci {0xa0, 0x09, 0x01ad}, 469362306a36Sopenharmony_ci {0xa0, 0x15, 0x01ae}, 469462306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 469562306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 469662306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 469762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 469862306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 469962306a36Sopenharmony_ci {0xa0, 0x78, ZC3XX_R18D_YTARGET}, /*jfm: was 6c*/ 470062306a36Sopenharmony_ci {} 470162306a36Sopenharmony_ci}; 470262306a36Sopenharmony_cistatic const struct usb_action pb0330_50HZ[] = { 470362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 470462306a36Sopenharmony_ci {0xbb, 0x00, 0x055c}, 470562306a36Sopenharmony_ci {0xbb, 0x01, 0x09aa}, 470662306a36Sopenharmony_ci {0xbb, 0x00, 0x1001}, 470762306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 470862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 470962306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 471062306a36Sopenharmony_ci {0xa0, 0xc4, ZC3XX_R192_EXPOSURELIMITLOW}, 471162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 471262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 471362306a36Sopenharmony_ci {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW}, 471462306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 471562306a36Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE}, 471662306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 471762306a36Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 471862306a36Sopenharmony_ci {0xa0, 0x5c, ZC3XX_R01D_HSYNC_0}, 471962306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, 472062306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, 472162306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 472262306a36Sopenharmony_ci {} 472362306a36Sopenharmony_ci}; 472462306a36Sopenharmony_cistatic const struct usb_action pb0330_50HZScale[] = { 472562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 472662306a36Sopenharmony_ci {0xbb, 0x00, 0x0566}, 472762306a36Sopenharmony_ci {0xbb, 0x02, 0x09b2}, 472862306a36Sopenharmony_ci {0xbb, 0x00, 0x1002}, 472962306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 473062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 473162306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 473262306a36Sopenharmony_ci {0xa0, 0x8c, ZC3XX_R192_EXPOSURELIMITLOW}, 473362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 473462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 473562306a36Sopenharmony_ci {0xa0, 0x8a, ZC3XX_R197_ANTIFLICKERLOW}, 473662306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 473762306a36Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE}, 473862306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 473962306a36Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 474062306a36Sopenharmony_ci {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, 474162306a36Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R01E_HSYNC_1}, 474262306a36Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R01F_HSYNC_2}, 474362306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 474462306a36Sopenharmony_ci {} 474562306a36Sopenharmony_ci}; 474662306a36Sopenharmony_cistatic const struct usb_action pb0330_60HZ[] = { 474762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 474862306a36Sopenharmony_ci {0xbb, 0x00, 0x0535}, 474962306a36Sopenharmony_ci {0xbb, 0x01, 0x0974}, 475062306a36Sopenharmony_ci {0xbb, 0x00, 0x1001}, 475162306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 475262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 475362306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 475462306a36Sopenharmony_ci {0xa0, 0xfe, ZC3XX_R192_EXPOSURELIMITLOW}, 475562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 475662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 475762306a36Sopenharmony_ci {0xa0, 0x3e, ZC3XX_R197_ANTIFLICKERLOW}, 475862306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 475962306a36Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE}, 476062306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 476162306a36Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 476262306a36Sopenharmony_ci {0xa0, 0x35, ZC3XX_R01D_HSYNC_0}, 476362306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R01E_HSYNC_1}, 476462306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, 476562306a36Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R020_HSYNC_3}, 476662306a36Sopenharmony_ci {} 476762306a36Sopenharmony_ci}; 476862306a36Sopenharmony_cistatic const struct usb_action pb0330_60HZScale[] = { 476962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 477062306a36Sopenharmony_ci {0xbb, 0x00, 0x0535}, 477162306a36Sopenharmony_ci {0xbb, 0x02, 0x096c}, 477262306a36Sopenharmony_ci {0xbb, 0x00, 0x1002}, 477362306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 477462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 477562306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 477662306a36Sopenharmony_ci {0xa0, 0xc0, ZC3XX_R192_EXPOSURELIMITLOW}, 477762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 477862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 477962306a36Sopenharmony_ci {0xa0, 0x7c, ZC3XX_R197_ANTIFLICKERLOW}, 478062306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 478162306a36Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE}, 478262306a36Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 478362306a36Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 478462306a36Sopenharmony_ci {0xa0, 0x35, ZC3XX_R01D_HSYNC_0}, 478562306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R01E_HSYNC_1}, 478662306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, 478762306a36Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R020_HSYNC_3}, 478862306a36Sopenharmony_ci {} 478962306a36Sopenharmony_ci}; 479062306a36Sopenharmony_cistatic const struct usb_action pb0330_NoFlicker[] = { 479162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 479262306a36Sopenharmony_ci {0xbb, 0x00, 0x0509}, 479362306a36Sopenharmony_ci {0xbb, 0x02, 0x0940}, 479462306a36Sopenharmony_ci {0xbb, 0x00, 0x1002}, 479562306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 479662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 479762306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 479862306a36Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, 479962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 480062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 480162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW}, 480262306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 480362306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 480462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 480562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 480662306a36Sopenharmony_ci {0xa0, 0x09, ZC3XX_R01D_HSYNC_0}, 480762306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R01E_HSYNC_1}, 480862306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, 480962306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R020_HSYNC_3}, 481062306a36Sopenharmony_ci {} 481162306a36Sopenharmony_ci}; 481262306a36Sopenharmony_cistatic const struct usb_action pb0330_NoFlickerScale[] = { 481362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 481462306a36Sopenharmony_ci {0xbb, 0x00, 0x0535}, 481562306a36Sopenharmony_ci {0xbb, 0x01, 0x0980}, 481662306a36Sopenharmony_ci {0xbb, 0x00, 0x1001}, 481762306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 481862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 481962306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 482062306a36Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, 482162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 482262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 482362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW}, 482462306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 482562306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 482662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 482762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 482862306a36Sopenharmony_ci {0xa0, 0x35, ZC3XX_R01D_HSYNC_0}, 482962306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R01E_HSYNC_1}, 483062306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, 483162306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R020_HSYNC_3}, 483262306a36Sopenharmony_ci {} 483362306a36Sopenharmony_ci}; 483462306a36Sopenharmony_ci 483562306a36Sopenharmony_ci/* from oem9.inf */ 483662306a36Sopenharmony_cistatic const struct usb_action po2030_Initial[] = { /* 640x480 */ 483762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 483862306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R002_CLOCKSELECT}, /* 00,02,04,cc */ 483962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 484062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 484162306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R080_HBLANKHIGH}, /* 00,80,04,cc */ 484262306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R081_HBLANKLOW}, /* 00,81,05,cc */ 484362306a36Sopenharmony_ci {0xa0, 0x16, ZC3XX_R083_RGAINADDR}, /* 00,83,16,cc */ 484462306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R085_BGAINADDR}, /* 00,85,18,cc */ 484562306a36Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,1a,cc */ 484662306a36Sopenharmony_ci {0xa0, 0x1b, ZC3XX_R087_EXPTIMEMID}, /* 00,87,1b,cc */ 484762306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R088_EXPTIMELOW}, /* 00,88,1c,cc */ 484862306a36Sopenharmony_ci {0xa0, 0xee, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,ee,cc */ 484962306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 485062306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 485162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 485262306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 485362306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 485462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 485562306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */ 485662306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */ 485762306a36Sopenharmony_ci {0xaa, 0x8d, 0x0008}, /* 00,8d,08,aa */ 485862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 485962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 486062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 486162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 486262306a36Sopenharmony_ci {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e6,cc */ 486362306a36Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */ 486462306a36Sopenharmony_ci {0xaa, 0x09, 0x00ce}, /* 00,09,ce,aa */ 486562306a36Sopenharmony_ci {0xaa, 0x0b, 0x0005}, /* 00,0b,05,aa */ 486662306a36Sopenharmony_ci {0xaa, 0x0d, 0x0054}, /* 00,0d,54,aa */ 486762306a36Sopenharmony_ci {0xaa, 0x0f, 0x00eb}, /* 00,0f,eb,aa */ 486862306a36Sopenharmony_ci {0xaa, 0x87, 0x0000}, /* 00,87,00,aa */ 486962306a36Sopenharmony_ci {0xaa, 0x88, 0x0004}, /* 00,88,04,aa */ 487062306a36Sopenharmony_ci {0xaa, 0x89, 0x0000}, /* 00,89,00,aa */ 487162306a36Sopenharmony_ci {0xaa, 0x8a, 0x0005}, /* 00,8a,05,aa */ 487262306a36Sopenharmony_ci {0xaa, 0x13, 0x0003}, /* 00,13,03,aa */ 487362306a36Sopenharmony_ci {0xaa, 0x16, 0x0040}, /* 00,16,40,aa */ 487462306a36Sopenharmony_ci {0xaa, 0x18, 0x0040}, /* 00,18,40,aa */ 487562306a36Sopenharmony_ci {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 487662306a36Sopenharmony_ci {0xaa, 0x29, 0x00e8}, /* 00,29,e8,aa */ 487762306a36Sopenharmony_ci {0xaa, 0x45, 0x0045}, /* 00,45,45,aa */ 487862306a36Sopenharmony_ci {0xaa, 0x50, 0x00ed}, /* 00,50,ed,aa */ 487962306a36Sopenharmony_ci {0xaa, 0x51, 0x0025}, /* 00,51,25,aa */ 488062306a36Sopenharmony_ci {0xaa, 0x52, 0x0042}, /* 00,52,42,aa */ 488162306a36Sopenharmony_ci {0xaa, 0x53, 0x002f}, /* 00,53,2f,aa */ 488262306a36Sopenharmony_ci {0xaa, 0x79, 0x0025}, /* 00,79,25,aa */ 488362306a36Sopenharmony_ci {0xaa, 0x7b, 0x0000}, /* 00,7b,00,aa */ 488462306a36Sopenharmony_ci {0xaa, 0x7e, 0x0025}, /* 00,7e,25,aa */ 488562306a36Sopenharmony_ci {0xaa, 0x7f, 0x0025}, /* 00,7f,25,aa */ 488662306a36Sopenharmony_ci {0xaa, 0x21, 0x0000}, /* 00,21,00,aa */ 488762306a36Sopenharmony_ci {0xaa, 0x33, 0x0036}, /* 00,33,36,aa */ 488862306a36Sopenharmony_ci {0xaa, 0x36, 0x0060}, /* 00,36,60,aa */ 488962306a36Sopenharmony_ci {0xaa, 0x37, 0x0008}, /* 00,37,08,aa */ 489062306a36Sopenharmony_ci {0xaa, 0x3b, 0x0031}, /* 00,3b,31,aa */ 489162306a36Sopenharmony_ci {0xaa, 0x44, 0x000f}, /* 00,44,0f,aa */ 489262306a36Sopenharmony_ci {0xaa, 0x58, 0x0002}, /* 00,58,02,aa */ 489362306a36Sopenharmony_ci {0xaa, 0x66, 0x00c0}, /* 00,66,c0,aa */ 489462306a36Sopenharmony_ci {0xaa, 0x67, 0x0044}, /* 00,67,44,aa */ 489562306a36Sopenharmony_ci {0xaa, 0x6b, 0x00a0}, /* 00,6b,a0,aa */ 489662306a36Sopenharmony_ci {0xaa, 0x6c, 0x0054}, /* 00,6c,54,aa */ 489762306a36Sopenharmony_ci {0xaa, 0xd6, 0x0007}, /* 00,d6,07,aa */ 489862306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,f7,cc */ 489962306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 490062306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 490162306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 490262306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */ 490362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 490462306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 490562306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 490662306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 490762306a36Sopenharmony_ci {0xa0, 0x7a, ZC3XX_R116_RGAIN}, /* 01,16,7a,cc */ 490862306a36Sopenharmony_ci {0xa0, 0x4a, ZC3XX_R118_BGAIN}, /* 01,18,4a,cc */ 490962306a36Sopenharmony_ci {} 491062306a36Sopenharmony_ci}; 491162306a36Sopenharmony_ci 491262306a36Sopenharmony_ci/* from oem9.inf */ 491362306a36Sopenharmony_cistatic const struct usb_action po2030_InitialScale[] = { /* 320x240 */ 491462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 491562306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */ 491662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 491762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 491862306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R080_HBLANKHIGH}, /* 00,80,04,cc */ 491962306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R081_HBLANKLOW}, /* 00,81,05,cc */ 492062306a36Sopenharmony_ci {0xa0, 0x16, ZC3XX_R083_RGAINADDR}, /* 00,83,16,cc */ 492162306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R085_BGAINADDR}, /* 00,85,18,cc */ 492262306a36Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,1a,cc */ 492362306a36Sopenharmony_ci {0xa0, 0x1b, ZC3XX_R087_EXPTIMEMID}, /* 00,87,1b,cc */ 492462306a36Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R088_EXPTIMELOW}, /* 00,88,1c,cc */ 492562306a36Sopenharmony_ci {0xa0, 0xee, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,ee,cc */ 492662306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 492762306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 492862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 492962306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 493062306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 493162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 493262306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */ 493362306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */ 493462306a36Sopenharmony_ci {0xaa, 0x8d, 0x0008}, /* 00,8d,08,aa */ 493562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 493662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 493762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 493862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 493962306a36Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e8,cc */ 494062306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */ 494162306a36Sopenharmony_ci {0xaa, 0x09, 0x00cc}, /* 00,09,cc,aa */ 494262306a36Sopenharmony_ci {0xaa, 0x0b, 0x0005}, /* 00,0b,05,aa */ 494362306a36Sopenharmony_ci {0xaa, 0x0d, 0x0058}, /* 00,0d,58,aa */ 494462306a36Sopenharmony_ci {0xaa, 0x0f, 0x00ed}, /* 00,0f,ed,aa */ 494562306a36Sopenharmony_ci {0xaa, 0x87, 0x0000}, /* 00,87,00,aa */ 494662306a36Sopenharmony_ci {0xaa, 0x88, 0x0004}, /* 00,88,04,aa */ 494762306a36Sopenharmony_ci {0xaa, 0x89, 0x0000}, /* 00,89,00,aa */ 494862306a36Sopenharmony_ci {0xaa, 0x8a, 0x0005}, /* 00,8a,05,aa */ 494962306a36Sopenharmony_ci {0xaa, 0x13, 0x0003}, /* 00,13,03,aa */ 495062306a36Sopenharmony_ci {0xaa, 0x16, 0x0040}, /* 00,16,40,aa */ 495162306a36Sopenharmony_ci {0xaa, 0x18, 0x0040}, /* 00,18,40,aa */ 495262306a36Sopenharmony_ci {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 495362306a36Sopenharmony_ci {0xaa, 0x29, 0x00e8}, /* 00,29,e8,aa */ 495462306a36Sopenharmony_ci {0xaa, 0x45, 0x0045}, /* 00,45,45,aa */ 495562306a36Sopenharmony_ci {0xaa, 0x50, 0x00ed}, /* 00,50,ed,aa */ 495662306a36Sopenharmony_ci {0xaa, 0x51, 0x0025}, /* 00,51,25,aa */ 495762306a36Sopenharmony_ci {0xaa, 0x52, 0x0042}, /* 00,52,42,aa */ 495862306a36Sopenharmony_ci {0xaa, 0x53, 0x002f}, /* 00,53,2f,aa */ 495962306a36Sopenharmony_ci {0xaa, 0x79, 0x0025}, /* 00,79,25,aa */ 496062306a36Sopenharmony_ci {0xaa, 0x7b, 0x0000}, /* 00,7b,00,aa */ 496162306a36Sopenharmony_ci {0xaa, 0x7e, 0x0025}, /* 00,7e,25,aa */ 496262306a36Sopenharmony_ci {0xaa, 0x7f, 0x0025}, /* 00,7f,25,aa */ 496362306a36Sopenharmony_ci {0xaa, 0x21, 0x0000}, /* 00,21,00,aa */ 496462306a36Sopenharmony_ci {0xaa, 0x33, 0x0036}, /* 00,33,36,aa */ 496562306a36Sopenharmony_ci {0xaa, 0x36, 0x0060}, /* 00,36,60,aa */ 496662306a36Sopenharmony_ci {0xaa, 0x37, 0x0008}, /* 00,37,08,aa */ 496762306a36Sopenharmony_ci {0xaa, 0x3b, 0x0031}, /* 00,3b,31,aa */ 496862306a36Sopenharmony_ci {0xaa, 0x44, 0x000f}, /* 00,44,0f,aa */ 496962306a36Sopenharmony_ci {0xaa, 0x58, 0x0002}, /* 00,58,02,aa */ 497062306a36Sopenharmony_ci {0xaa, 0x66, 0x00c0}, /* 00,66,c0,aa */ 497162306a36Sopenharmony_ci {0xaa, 0x67, 0x0044}, /* 00,67,44,aa */ 497262306a36Sopenharmony_ci {0xaa, 0x6b, 0x00a0}, /* 00,6b,a0,aa */ 497362306a36Sopenharmony_ci {0xaa, 0x6c, 0x0054}, /* 00,6c,54,aa */ 497462306a36Sopenharmony_ci {0xaa, 0xd6, 0x0007}, /* 00,d6,07,aa */ 497562306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,f7,cc */ 497662306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 497762306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 497862306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 497962306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */ 498062306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 498162306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 498262306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 498362306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 498462306a36Sopenharmony_ci {0xa0, 0x7a, ZC3XX_R116_RGAIN}, /* 01,16,7a,cc */ 498562306a36Sopenharmony_ci {0xa0, 0x4a, ZC3XX_R118_BGAIN}, /* 01,18,4a,cc */ 498662306a36Sopenharmony_ci {} 498762306a36Sopenharmony_ci}; 498862306a36Sopenharmony_ci 498962306a36Sopenharmony_cistatic const struct usb_action po2030_50HZ[] = { 499062306a36Sopenharmony_ci {0xaa, 0x8d, 0x0008}, /* 00,8d,08,aa */ 499162306a36Sopenharmony_ci {0xaa, 0x1a, 0x0001}, /* 00,1a,01,aa */ 499262306a36Sopenharmony_ci {0xaa, 0x1b, 0x000a}, /* 00,1b,0a,aa */ 499362306a36Sopenharmony_ci {0xaa, 0x1c, 0x00b0}, /* 00,1c,b0,aa */ 499462306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,05,cc */ 499562306a36Sopenharmony_ci {0xa0, 0x35, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,35,cc */ 499662306a36Sopenharmony_ci {0xa0, 0x70, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,70,cc */ 499762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 499862306a36Sopenharmony_ci {0xa0, 0x85, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,85,cc */ 499962306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,58,cc */ 500062306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0c,cc */ 500162306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,18,cc */ 500262306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,60,cc */ 500362306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 500462306a36Sopenharmony_ci {0xa0, 0x22, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,22,cc */ 500562306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R18D_YTARGET}, /* 01,8d,88,cc */ 500662306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,58,cc */ 500762306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */ 500862306a36Sopenharmony_ci {} 500962306a36Sopenharmony_ci}; 501062306a36Sopenharmony_ci 501162306a36Sopenharmony_cistatic const struct usb_action po2030_60HZ[] = { 501262306a36Sopenharmony_ci {0xaa, 0x8d, 0x0008}, /* 00,8d,08,aa */ 501362306a36Sopenharmony_ci {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa */ 501462306a36Sopenharmony_ci {0xaa, 0x1b, 0x00de}, /* 00,1b,de,aa */ 501562306a36Sopenharmony_ci {0xaa, 0x1c, 0x0040}, /* 00,1c,40,aa */ 501662306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,08,cc */ 501762306a36Sopenharmony_ci {0xa0, 0xae, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,ae,cc */ 501862306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,80,cc */ 501962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 502062306a36Sopenharmony_ci {0xa0, 0x6f, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,6f,cc */ 502162306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,20,cc */ 502262306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0c,cc */ 502362306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,18,cc */ 502462306a36Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,60,cc */ 502562306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 502662306a36Sopenharmony_ci {0xa0, 0x22, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,22,cc */ 502762306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R18D_YTARGET}, /* 01,8d,88,cc */ 502862306a36Sopenharmony_ci /* win: 01,8d,80 */ 502962306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,58,cc */ 503062306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */ 503162306a36Sopenharmony_ci {} 503262306a36Sopenharmony_ci}; 503362306a36Sopenharmony_ci 503462306a36Sopenharmony_cistatic const struct usb_action po2030_NoFlicker[] = { 503562306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 503662306a36Sopenharmony_ci {0xaa, 0x8d, 0x000d}, /* 00,8d,0d,aa */ 503762306a36Sopenharmony_ci {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa */ 503862306a36Sopenharmony_ci {0xaa, 0x1b, 0x0002}, /* 00,1b,02,aa */ 503962306a36Sopenharmony_ci {0xaa, 0x1c, 0x0078}, /* 00,1c,78,aa */ 504062306a36Sopenharmony_ci {0xaa, 0x46, 0x0000}, /* 00,46,00,aa */ 504162306a36Sopenharmony_ci {0xaa, 0x15, 0x0000}, /* 00,15,00,aa */ 504262306a36Sopenharmony_ci {} 504362306a36Sopenharmony_ci}; 504462306a36Sopenharmony_ci 504562306a36Sopenharmony_cistatic const struct usb_action tas5130c_InitialScale[] = { /* 320x240 */ 504662306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 504762306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R002_CLOCKSELECT}, 504862306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 504962306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R010_CMOSSENSORSELECT}, 505062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 505162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R001_SYSTEMOPERATING}, 505262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 505362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 505462306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 505562306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 505662306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 505762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 505862306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 505962306a36Sopenharmony_ci 506062306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R098_WINYSTARTLOW}, 506162306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R09A_WINXSTARTLOW}, 506262306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R11A_FIRSTYLOW}, 506362306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R11C_FIRSTXLOW}, 506462306a36Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 506562306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, 506662306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 506762306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R08D_COMPABILITYMODE}, 506862306a36Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION}, 506962306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 507062306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 507162306a36Sopenharmony_ci {0xa0, 0x70, ZC3XX_R18D_YTARGET}, 507262306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, 507362306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 507462306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 507562306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 507662306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 507762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 507862306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R0A5_EXPOSUREGAIN}, 507962306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A6_EXPOSUREBLACKLVL}, 508062306a36Sopenharmony_ci {} 508162306a36Sopenharmony_ci}; 508262306a36Sopenharmony_cistatic const struct usb_action tas5130c_Initial[] = { /* 640x480 */ 508362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 508462306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, 508562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING}, 508662306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R010_CMOSSENSORSELECT}, 508762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 508862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R001_SYSTEMOPERATING}, 508962306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 509062306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 509162306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 509262306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 509362306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 509462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 509562306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 509662306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R098_WINYSTARTLOW}, 509762306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R09A_WINXSTARTLOW}, 509862306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R11A_FIRSTYLOW}, 509962306a36Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R11C_FIRSTXLOW}, 510062306a36Sopenharmony_ci {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, 510162306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, 510262306a36Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, 510362306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R08D_COMPABILITYMODE}, 510462306a36Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 510562306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 510662306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 510762306a36Sopenharmony_ci {0xa0, 0x70, ZC3XX_R18D_YTARGET}, 510862306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, 510962306a36Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 511062306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 511162306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 511262306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 511362306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 511462306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R0A5_EXPOSUREGAIN}, 511562306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A6_EXPOSUREBLACKLVL}, 511662306a36Sopenharmony_ci {} 511762306a36Sopenharmony_ci}; 511862306a36Sopenharmony_cistatic const struct usb_action tas5130c_50HZ[] = { 511962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 512062306a36Sopenharmony_ci {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ 512162306a36Sopenharmony_ci {0xaa, 0xa4, 0x0063}, /* 00,a4,63,aa */ 512262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 512362306a36Sopenharmony_ci {0xa0, 0x63, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,63,cc */ 512462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 512562306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, 512662306a36Sopenharmony_ci {0xa0, 0xfe, ZC3XX_R192_EXPOSURELIMITLOW}, 512762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 512862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 512962306a36Sopenharmony_ci {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,47,cc */ 513062306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, 513162306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, 513262306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF}, 513362306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 513462306a36Sopenharmony_ci {0xa0, 0xd3, ZC3XX_R01D_HSYNC_0}, /* 00,1d,d3,cc */ 513562306a36Sopenharmony_ci {0xa0, 0xda, ZC3XX_R01E_HSYNC_1}, /* 00,1e,da,cc */ 513662306a36Sopenharmony_ci {0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ea,cc */ 513762306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 513862306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */ 513962306a36Sopenharmony_ci {0xa0, 0x4c, ZC3XX_R0A0_MAXXLOW}, 514062306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, 514162306a36Sopenharmony_ci {} 514262306a36Sopenharmony_ci}; 514362306a36Sopenharmony_cistatic const struct usb_action tas5130c_50HZScale[] = { 514462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 514562306a36Sopenharmony_ci {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ 514662306a36Sopenharmony_ci {0xaa, 0xa4, 0x0077}, /* 00,a4,77,aa */ 514762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 514862306a36Sopenharmony_ci {0xa0, 0x77, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,77,cc */ 514962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 515062306a36Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 515162306a36Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R192_EXPOSURELIMITLOW}, 515262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 515362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 515462306a36Sopenharmony_ci {0xa0, 0x7d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,7d,cc */ 515562306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, 515662306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, 515762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF}, 515862306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 515962306a36Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R01D_HSYNC_0}, /* 00,1d,f0,cc */ 516062306a36Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,f4,cc */ 516162306a36Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,f8,cc */ 516262306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 516362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */ 516462306a36Sopenharmony_ci {0xa0, 0xc0, ZC3XX_R0A0_MAXXLOW}, 516562306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, 516662306a36Sopenharmony_ci {} 516762306a36Sopenharmony_ci}; 516862306a36Sopenharmony_cistatic const struct usb_action tas5130c_60HZ[] = { 516962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 517062306a36Sopenharmony_ci {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ 517162306a36Sopenharmony_ci {0xaa, 0xa4, 0x0036}, /* 00,a4,36,aa */ 517262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 517362306a36Sopenharmony_ci {0xa0, 0x36, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,36,cc */ 517462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 517562306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R191_EXPOSURELIMITMID}, 517662306a36Sopenharmony_ci {0xa0, 0x54, ZC3XX_R192_EXPOSURELIMITLOW}, 517762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 517862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 517962306a36Sopenharmony_ci {0xa0, 0x3e, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,3e,cc */ 518062306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, 518162306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, 518262306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF}, 518362306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 518462306a36Sopenharmony_ci {0xa0, 0xca, ZC3XX_R01D_HSYNC_0}, /* 00,1d,ca,cc */ 518562306a36Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */ 518662306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */ 518762306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 518862306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */ 518962306a36Sopenharmony_ci {0xa0, 0x28, ZC3XX_R0A0_MAXXLOW}, 519062306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, 519162306a36Sopenharmony_ci {} 519262306a36Sopenharmony_ci}; 519362306a36Sopenharmony_cistatic const struct usb_action tas5130c_60HZScale[] = { 519462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 519562306a36Sopenharmony_ci {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ 519662306a36Sopenharmony_ci {0xaa, 0xa4, 0x0077}, /* 00,a4,77,aa */ 519762306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 519862306a36Sopenharmony_ci {0xa0, 0x77, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,77,cc */ 519962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 520062306a36Sopenharmony_ci {0xa0, 0x09, ZC3XX_R191_EXPOSURELIMITMID}, 520162306a36Sopenharmony_ci {0xa0, 0x47, ZC3XX_R192_EXPOSURELIMITLOW}, 520262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 520362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 520462306a36Sopenharmony_ci {0xa0, 0x7d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,7d,cc */ 520562306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, 520662306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, 520762306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF}, 520862306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 520962306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c8,cc */ 521062306a36Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */ 521162306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */ 521262306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 521362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */ 521462306a36Sopenharmony_ci {0xa0, 0x20, ZC3XX_R0A0_MAXXLOW}, 521562306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, 521662306a36Sopenharmony_ci {} 521762306a36Sopenharmony_ci}; 521862306a36Sopenharmony_cistatic const struct usb_action tas5130c_NoFlicker[] = { 521962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 522062306a36Sopenharmony_ci {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ 522162306a36Sopenharmony_ci {0xaa, 0xa4, 0x0040}, /* 00,a4,40,aa */ 522262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 522362306a36Sopenharmony_ci {0xa0, 0x40, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,40,cc */ 522462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 522562306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R191_EXPOSURELIMITMID}, 522662306a36Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R192_EXPOSURELIMITLOW}, 522762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 522862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 522962306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW}, 523062306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, 523162306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, 523262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 523362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 523462306a36Sopenharmony_ci {0xa0, 0xbc, ZC3XX_R01D_HSYNC_0}, /* 00,1d,bc,cc */ 523562306a36Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */ 523662306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */ 523762306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 523862306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,02,cc */ 523962306a36Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R0A0_MAXXLOW}, 524062306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, 524162306a36Sopenharmony_ci {} 524262306a36Sopenharmony_ci}; 524362306a36Sopenharmony_ci 524462306a36Sopenharmony_cistatic const struct usb_action tas5130c_NoFlickerScale[] = { 524562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 524662306a36Sopenharmony_ci {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ 524762306a36Sopenharmony_ci {0xaa, 0xa4, 0x0090}, /* 00,a4,90,aa */ 524862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 524962306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,90,cc */ 525062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 525162306a36Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R191_EXPOSURELIMITMID}, 525262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, 525362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 525462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 525562306a36Sopenharmony_ci {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW}, 525662306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, 525762306a36Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, 525862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 525962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 526062306a36Sopenharmony_ci {0xa0, 0xbc, ZC3XX_R01D_HSYNC_0}, /* 00,1d,bc,cc */ 526162306a36Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */ 526262306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */ 526362306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 526462306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,02,cc */ 526562306a36Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R0A0_MAXXLOW}, 526662306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, 526762306a36Sopenharmony_ci {} 526862306a36Sopenharmony_ci}; 526962306a36Sopenharmony_ci 527062306a36Sopenharmony_ci/* from usbvm305.inf 0ac8:305b 07/06/15 (3 - tas5130c) */ 527162306a36Sopenharmony_cistatic const struct usb_action gc0303_Initial[] = { 527262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc, */ 527362306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING}, /* 00,08,02,cc, */ 527462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc, */ 527562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 527662306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc, */ 527762306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc, */ 527862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc, */ 527962306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc, */ 528062306a36Sopenharmony_ci {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc, */ 528162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc, */ 528262306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc, */ 528362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc, */ 528462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc, */ 528562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc, */ 528662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc, */ 528762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc, */ 528862306a36Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e6,cc, 528962306a36Sopenharmony_ci * 6<->8 */ 529062306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc, 529162306a36Sopenharmony_ci * 6<->8 */ 529262306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, /* 00,87,10,cc, */ 529362306a36Sopenharmony_ci {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc, */ 529462306a36Sopenharmony_ci {0xaa, 0x01, 0x0000}, 529562306a36Sopenharmony_ci {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa, */ 529662306a36Sopenharmony_ci {0xaa, 0x1c, 0x0017}, /* 00,1c,17,aa, */ 529762306a36Sopenharmony_ci {0xaa, 0x1b, 0x0000}, 529862306a36Sopenharmony_ci {0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,82,cc, */ 529962306a36Sopenharmony_ci {0xa0, 0x83, ZC3XX_R087_EXPTIMEMID}, /* 00,87,83,cc, */ 530062306a36Sopenharmony_ci {0xa0, 0x84, ZC3XX_R088_EXPTIMELOW}, /* 00,88,84,cc, */ 530162306a36Sopenharmony_ci {0xaa, 0x05, 0x0010}, /* 00,05,10,aa, */ 530262306a36Sopenharmony_ci {0xaa, 0x0a, 0x0002}, 530362306a36Sopenharmony_ci {0xaa, 0x0b, 0x0000}, 530462306a36Sopenharmony_ci {0xaa, 0x0c, 0x0002}, 530562306a36Sopenharmony_ci {0xaa, 0x0d, 0x0000}, 530662306a36Sopenharmony_ci {0xaa, 0x0e, 0x0002}, 530762306a36Sopenharmony_ci {0xaa, 0x0f, 0x0000}, 530862306a36Sopenharmony_ci {0xaa, 0x10, 0x0002}, 530962306a36Sopenharmony_ci {0xaa, 0x11, 0x0000}, 531062306a36Sopenharmony_ci {0xaa, 0x16, 0x0001}, /* 00,16,01,aa, */ 531162306a36Sopenharmony_ci {0xaa, 0x17, 0x00e8}, /* 00,17,e6,aa, (e6 -> e8) */ 531262306a36Sopenharmony_ci {0xaa, 0x18, 0x0002}, /* 00,18,02,aa, */ 531362306a36Sopenharmony_ci {0xaa, 0x19, 0x0088}, /* 00,19,86,aa, */ 531462306a36Sopenharmony_ci {0xaa, 0x20, 0x0020}, /* 00,20,20,aa, */ 531562306a36Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,b7,cc, */ 531662306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc, */ 531762306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc, */ 531862306a36Sopenharmony_ci {0xa0, 0x76, ZC3XX_R189_AWBSTATUS}, /* 01,89,76,cc, */ 531962306a36Sopenharmony_ci {0xa0, 0x09, 0x01ad}, /* 01,ad,09,cc, */ 532062306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc, */ 532162306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc, */ 532262306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc, */ 532362306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc, */ 532462306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R1A8_DIGITALGAIN}, 532562306a36Sopenharmony_ci {0xa0, 0x61, ZC3XX_R116_RGAIN}, /* 01,16,61,cc, */ 532662306a36Sopenharmony_ci {0xa0, 0x65, ZC3XX_R118_BGAIN}, /* 01,18,65,cc */ 532762306a36Sopenharmony_ci {0xaa, 0x1b, 0x0000}, 532862306a36Sopenharmony_ci {} 532962306a36Sopenharmony_ci}; 533062306a36Sopenharmony_ci 533162306a36Sopenharmony_cistatic const struct usb_action gc0303_InitialScale[] = { 533262306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc, */ 533362306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING}, /* 00,08,02,cc, */ 533462306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc, */ 533562306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 533662306a36Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc, */ 533762306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc, */ 533862306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc, */ 533962306a36Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc, */ 534062306a36Sopenharmony_ci {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc, */ 534162306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc, */ 534262306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc, */ 534362306a36Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc, */ 534462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc, */ 534562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc, */ 534662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc, */ 534762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc, */ 534862306a36Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e8,cc, 534962306a36Sopenharmony_ci * 8<->6 */ 535062306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc, 535162306a36Sopenharmony_ci * 8<->6 */ 535262306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, /* 00,87,10,cc, */ 535362306a36Sopenharmony_ci {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc, */ 535462306a36Sopenharmony_ci {0xaa, 0x01, 0x0000}, 535562306a36Sopenharmony_ci {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa, */ 535662306a36Sopenharmony_ci {0xaa, 0x1c, 0x0017}, /* 00,1c,17,aa, */ 535762306a36Sopenharmony_ci {0xaa, 0x1b, 0x0000}, 535862306a36Sopenharmony_ci {0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,82,cc, */ 535962306a36Sopenharmony_ci {0xa0, 0x83, ZC3XX_R087_EXPTIMEMID}, /* 00,87,83,cc, */ 536062306a36Sopenharmony_ci {0xa0, 0x84, ZC3XX_R088_EXPTIMELOW}, /* 00,88,84,cc, */ 536162306a36Sopenharmony_ci {0xaa, 0x05, 0x0010}, /* 00,05,10,aa, */ 536262306a36Sopenharmony_ci {0xaa, 0x0a, 0x0001}, 536362306a36Sopenharmony_ci {0xaa, 0x0b, 0x0000}, 536462306a36Sopenharmony_ci {0xaa, 0x0c, 0x0001}, 536562306a36Sopenharmony_ci {0xaa, 0x0d, 0x0000}, 536662306a36Sopenharmony_ci {0xaa, 0x0e, 0x0001}, 536762306a36Sopenharmony_ci {0xaa, 0x0f, 0x0000}, 536862306a36Sopenharmony_ci {0xaa, 0x10, 0x0001}, 536962306a36Sopenharmony_ci {0xaa, 0x11, 0x0000}, 537062306a36Sopenharmony_ci {0xaa, 0x16, 0x0001}, /* 00,16,01,aa, */ 537162306a36Sopenharmony_ci {0xaa, 0x17, 0x00e8}, /* 00,17,e6,aa (e6 -> e8) */ 537262306a36Sopenharmony_ci {0xaa, 0x18, 0x0002}, /* 00,18,02,aa, */ 537362306a36Sopenharmony_ci {0xaa, 0x19, 0x0088}, /* 00,19,88,aa, */ 537462306a36Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,b7,cc, */ 537562306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc, */ 537662306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc, */ 537762306a36Sopenharmony_ci {0xa0, 0x76, ZC3XX_R189_AWBSTATUS}, /* 01,89,76,cc, */ 537862306a36Sopenharmony_ci {0xa0, 0x09, 0x01ad}, /* 01,ad,09,cc, */ 537962306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc, */ 538062306a36Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc, */ 538162306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc, */ 538262306a36Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc, */ 538362306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R1A8_DIGITALGAIN}, 538462306a36Sopenharmony_ci {0xa0, 0x61, ZC3XX_R116_RGAIN}, /* 01,16,61,cc, */ 538562306a36Sopenharmony_ci {0xa0, 0x65, ZC3XX_R118_BGAIN}, /* 01,18,65,cc */ 538662306a36Sopenharmony_ci {0xaa, 0x1b, 0x0000}, 538762306a36Sopenharmony_ci {} 538862306a36Sopenharmony_ci}; 538962306a36Sopenharmony_cistatic const struct usb_action gc0303_50HZ[] = { 539062306a36Sopenharmony_ci {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 539162306a36Sopenharmony_ci {0xaa, 0x83, 0x0001}, /* 00,83,01,aa */ 539262306a36Sopenharmony_ci {0xaa, 0x84, 0x0063}, 539362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc, */ 539462306a36Sopenharmony_ci {0xa0, 0x06, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,0d,cc, */ 539562306a36Sopenharmony_ci {0xa0, 0xa8, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,50,cc, */ 539662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc, */ 539762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc, */ 539862306a36Sopenharmony_ci {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,47,cc, */ 539962306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc, */ 540062306a36Sopenharmony_ci {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc, */ 540162306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc, */ 540262306a36Sopenharmony_ci {0xa0, 0x48, ZC3XX_R1AA_DIGITALGAINSTEP}, 540362306a36Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc, */ 540462306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc, */ 540562306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc, */ 540662306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc, */ 540762306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,58,cc, */ 540862306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc, */ 540962306a36Sopenharmony_ci {0xa0, 0x7f, ZC3XX_R18D_YTARGET}, 541062306a36Sopenharmony_ci {} 541162306a36Sopenharmony_ci}; 541262306a36Sopenharmony_ci 541362306a36Sopenharmony_cistatic const struct usb_action gc0303_50HZScale[] = { 541462306a36Sopenharmony_ci {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 541562306a36Sopenharmony_ci {0xaa, 0x83, 0x0003}, /* 00,83,03,aa */ 541662306a36Sopenharmony_ci {0xaa, 0x84, 0x0054}, /* 00,84,54,aa */ 541762306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc, */ 541862306a36Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,0d,cc, */ 541962306a36Sopenharmony_ci {0xa0, 0x50, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,50,cc, */ 542062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc, */ 542162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc, */ 542262306a36Sopenharmony_ci {0xa0, 0x8e, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,8e,cc, */ 542362306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc, */ 542462306a36Sopenharmony_ci {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc, */ 542562306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc, */ 542662306a36Sopenharmony_ci {0xa0, 0x48, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc, */ 542762306a36Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc, */ 542862306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc, */ 542962306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc, */ 543062306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc, */ 543162306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,58,cc, */ 543262306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc, */ 543362306a36Sopenharmony_ci {0xa0, 0x7f, ZC3XX_R18D_YTARGET}, 543462306a36Sopenharmony_ci {} 543562306a36Sopenharmony_ci}; 543662306a36Sopenharmony_ci 543762306a36Sopenharmony_cistatic const struct usb_action gc0303_60HZ[] = { 543862306a36Sopenharmony_ci {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 543962306a36Sopenharmony_ci {0xaa, 0x83, 0x0000}, 544062306a36Sopenharmony_ci {0xaa, 0x84, 0x003b}, 544162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc, */ 544262306a36Sopenharmony_ci {0xa0, 0x05, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,05,cc, */ 544362306a36Sopenharmony_ci {0xa0, 0x88, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,88,cc, */ 544462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc, */ 544562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc, */ 544662306a36Sopenharmony_ci {0xa0, 0x3b, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,3b,cc, */ 544762306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc, */ 544862306a36Sopenharmony_ci {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc, */ 544962306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc, */ 545062306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc, */ 545162306a36Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc, */ 545262306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc, */ 545362306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc, */ 545462306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc, */ 545562306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,58,cc, */ 545662306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc, */ 545762306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R18D_YTARGET}, 545862306a36Sopenharmony_ci {} 545962306a36Sopenharmony_ci}; 546062306a36Sopenharmony_ci 546162306a36Sopenharmony_cistatic const struct usb_action gc0303_60HZScale[] = { 546262306a36Sopenharmony_ci {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 546362306a36Sopenharmony_ci {0xaa, 0x83, 0x0000}, 546462306a36Sopenharmony_ci {0xaa, 0x84, 0x0076}, 546562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc, */ 546662306a36Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,1,0b,cc, */ 546762306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,2,10,cc, */ 546862306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,5,00,cc, */ 546962306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,6,00,cc, */ 547062306a36Sopenharmony_ci {0xa0, 0x76, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,7,76,cc, */ 547162306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,c,0e,cc, */ 547262306a36Sopenharmony_ci {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,f,15,cc, */ 547362306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,9,10,cc, */ 547462306a36Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,a,24,cc, */ 547562306a36Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,d,62,cc, */ 547662306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,e,90,cc, */ 547762306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,f,c8,cc, */ 547862306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,0,ff,cc, */ 547962306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,d,58,cc, */ 548062306a36Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc, */ 548162306a36Sopenharmony_ci {0xa0, 0x80, ZC3XX_R18D_YTARGET}, 548262306a36Sopenharmony_ci {} 548362306a36Sopenharmony_ci}; 548462306a36Sopenharmony_ci 548562306a36Sopenharmony_cistatic const struct usb_action gc0303_NoFlicker[] = { 548662306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0c,cc, */ 548762306a36Sopenharmony_ci {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 548862306a36Sopenharmony_ci {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */ 548962306a36Sopenharmony_ci {0xaa, 0x84, 0x0020}, /* 00,84,20,aa */ 549062306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,0,00,cc, */ 549162306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R191_EXPOSURELIMITMID}, 549262306a36Sopenharmony_ci {0xa0, 0x48, ZC3XX_R192_EXPOSURELIMITLOW}, 549362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc, */ 549462306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc, */ 549562306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc, */ 549662306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc, */ 549762306a36Sopenharmony_ci {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc, */ 549862306a36Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc, */ 549962306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc, */ 550062306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc, */ 550162306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc, */ 550262306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,58,cc, */ 550362306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,03,cc */ 550462306a36Sopenharmony_ci {} 550562306a36Sopenharmony_ci}; 550662306a36Sopenharmony_ci 550762306a36Sopenharmony_cistatic const struct usb_action gc0303_NoFlickerScale[] = { 550862306a36Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0c,cc, */ 550962306a36Sopenharmony_ci {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 551062306a36Sopenharmony_ci {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */ 551162306a36Sopenharmony_ci {0xaa, 0x84, 0x0020}, /* 00,84,20,aa */ 551262306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc, */ 551362306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R191_EXPOSURELIMITMID}, 551462306a36Sopenharmony_ci {0xa0, 0x48, ZC3XX_R192_EXPOSURELIMITLOW}, 551562306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc, */ 551662306a36Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc, */ 551762306a36Sopenharmony_ci {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc, */ 551862306a36Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc, */ 551962306a36Sopenharmony_ci {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc, */ 552062306a36Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc, */ 552162306a36Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc, */ 552262306a36Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc, */ 552362306a36Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc, */ 552462306a36Sopenharmony_ci {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,58,cc, */ 552562306a36Sopenharmony_ci {0xa0, 0x03, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,03,cc */ 552662306a36Sopenharmony_ci {} 552762306a36Sopenharmony_ci}; 552862306a36Sopenharmony_ci 552962306a36Sopenharmony_cistatic u8 reg_r(struct gspca_dev *gspca_dev, 553062306a36Sopenharmony_ci u16 index) 553162306a36Sopenharmony_ci{ 553262306a36Sopenharmony_ci int ret; 553362306a36Sopenharmony_ci 553462306a36Sopenharmony_ci if (gspca_dev->usb_err < 0) 553562306a36Sopenharmony_ci return 0; 553662306a36Sopenharmony_ci ret = usb_control_msg(gspca_dev->dev, 553762306a36Sopenharmony_ci usb_rcvctrlpipe(gspca_dev->dev, 0), 553862306a36Sopenharmony_ci 0xa1, 553962306a36Sopenharmony_ci USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 554062306a36Sopenharmony_ci 0x01, /* value */ 554162306a36Sopenharmony_ci index, gspca_dev->usb_buf, 1, 554262306a36Sopenharmony_ci 500); 554362306a36Sopenharmony_ci if (ret < 0) { 554462306a36Sopenharmony_ci pr_err("reg_r err %d\n", ret); 554562306a36Sopenharmony_ci gspca_dev->usb_err = ret; 554662306a36Sopenharmony_ci return 0; 554762306a36Sopenharmony_ci } 554862306a36Sopenharmony_ci return gspca_dev->usb_buf[0]; 554962306a36Sopenharmony_ci} 555062306a36Sopenharmony_ci 555162306a36Sopenharmony_cistatic void reg_w(struct gspca_dev *gspca_dev, 555262306a36Sopenharmony_ci u8 value, 555362306a36Sopenharmony_ci u16 index) 555462306a36Sopenharmony_ci{ 555562306a36Sopenharmony_ci int ret; 555662306a36Sopenharmony_ci 555762306a36Sopenharmony_ci if (gspca_dev->usb_err < 0) 555862306a36Sopenharmony_ci return; 555962306a36Sopenharmony_ci ret = usb_control_msg(gspca_dev->dev, 556062306a36Sopenharmony_ci usb_sndctrlpipe(gspca_dev->dev, 0), 556162306a36Sopenharmony_ci 0xa0, 556262306a36Sopenharmony_ci USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 556362306a36Sopenharmony_ci value, index, NULL, 0, 556462306a36Sopenharmony_ci 500); 556562306a36Sopenharmony_ci if (ret < 0) { 556662306a36Sopenharmony_ci pr_err("reg_w_i err %d\n", ret); 556762306a36Sopenharmony_ci gspca_dev->usb_err = ret; 556862306a36Sopenharmony_ci } 556962306a36Sopenharmony_ci} 557062306a36Sopenharmony_ci 557162306a36Sopenharmony_cistatic u16 i2c_read(struct gspca_dev *gspca_dev, 557262306a36Sopenharmony_ci u8 reg) 557362306a36Sopenharmony_ci{ 557462306a36Sopenharmony_ci u8 retbyte; 557562306a36Sopenharmony_ci u16 retval; 557662306a36Sopenharmony_ci 557762306a36Sopenharmony_ci if (gspca_dev->usb_err < 0) 557862306a36Sopenharmony_ci return 0; 557962306a36Sopenharmony_ci reg_w(gspca_dev, reg, 0x0092); 558062306a36Sopenharmony_ci reg_w(gspca_dev, 0x02, 0x0090); /* <- read command */ 558162306a36Sopenharmony_ci msleep(20); 558262306a36Sopenharmony_ci retbyte = reg_r(gspca_dev, 0x0091); /* read status */ 558362306a36Sopenharmony_ci if (retbyte != 0x00) 558462306a36Sopenharmony_ci pr_err("i2c_r status error %02x\n", retbyte); 558562306a36Sopenharmony_ci retval = reg_r(gspca_dev, 0x0095); /* read Lowbyte */ 558662306a36Sopenharmony_ci retval |= reg_r(gspca_dev, 0x0096) << 8; /* read Hightbyte */ 558762306a36Sopenharmony_ci return retval; 558862306a36Sopenharmony_ci} 558962306a36Sopenharmony_ci 559062306a36Sopenharmony_cistatic u8 i2c_write(struct gspca_dev *gspca_dev, 559162306a36Sopenharmony_ci u8 reg, 559262306a36Sopenharmony_ci u8 valL, 559362306a36Sopenharmony_ci u8 valH) 559462306a36Sopenharmony_ci{ 559562306a36Sopenharmony_ci u8 retbyte; 559662306a36Sopenharmony_ci 559762306a36Sopenharmony_ci if (gspca_dev->usb_err < 0) 559862306a36Sopenharmony_ci return 0; 559962306a36Sopenharmony_ci reg_w(gspca_dev, reg, 0x92); 560062306a36Sopenharmony_ci reg_w(gspca_dev, valL, 0x93); 560162306a36Sopenharmony_ci reg_w(gspca_dev, valH, 0x94); 560262306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x90); /* <- write command */ 560362306a36Sopenharmony_ci msleep(1); 560462306a36Sopenharmony_ci retbyte = reg_r(gspca_dev, 0x0091); /* read status */ 560562306a36Sopenharmony_ci if (retbyte != 0x00) 560662306a36Sopenharmony_ci pr_err("i2c_w status error %02x\n", retbyte); 560762306a36Sopenharmony_ci return retbyte; 560862306a36Sopenharmony_ci} 560962306a36Sopenharmony_ci 561062306a36Sopenharmony_cistatic void usb_exchange(struct gspca_dev *gspca_dev, 561162306a36Sopenharmony_ci const struct usb_action *action) 561262306a36Sopenharmony_ci{ 561362306a36Sopenharmony_ci while (action->req) { 561462306a36Sopenharmony_ci switch (action->req) { 561562306a36Sopenharmony_ci case 0xa0: /* write register */ 561662306a36Sopenharmony_ci reg_w(gspca_dev, action->val, action->idx); 561762306a36Sopenharmony_ci break; 561862306a36Sopenharmony_ci case 0xa1: /* read status */ 561962306a36Sopenharmony_ci reg_r(gspca_dev, action->idx); 562062306a36Sopenharmony_ci break; 562162306a36Sopenharmony_ci case 0xaa: 562262306a36Sopenharmony_ci i2c_write(gspca_dev, 562362306a36Sopenharmony_ci action->val, /* reg */ 562462306a36Sopenharmony_ci action->idx & 0xff, /* valL */ 562562306a36Sopenharmony_ci action->idx >> 8); /* valH */ 562662306a36Sopenharmony_ci break; 562762306a36Sopenharmony_ci case 0xbb: 562862306a36Sopenharmony_ci i2c_write(gspca_dev, 562962306a36Sopenharmony_ci action->idx >> 8, /* reg */ 563062306a36Sopenharmony_ci action->idx & 0xff, /* valL */ 563162306a36Sopenharmony_ci action->val); /* valH */ 563262306a36Sopenharmony_ci break; 563362306a36Sopenharmony_ci default: 563462306a36Sopenharmony_ci/* case 0xdd: * delay */ 563562306a36Sopenharmony_ci msleep(action->idx); 563662306a36Sopenharmony_ci break; 563762306a36Sopenharmony_ci } 563862306a36Sopenharmony_ci action++; 563962306a36Sopenharmony_ci msleep(1); 564062306a36Sopenharmony_ci } 564162306a36Sopenharmony_ci} 564262306a36Sopenharmony_ci 564362306a36Sopenharmony_cistatic void setmatrix(struct gspca_dev *gspca_dev) 564462306a36Sopenharmony_ci{ 564562306a36Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 564662306a36Sopenharmony_ci int i; 564762306a36Sopenharmony_ci const u8 *matrix; 564862306a36Sopenharmony_ci static const u8 adcm2700_matrix[9] = 564962306a36Sopenharmony_ci/* {0x66, 0xed, 0xed, 0xed, 0x66, 0xed, 0xed, 0xed, 0x66}; */ 565062306a36Sopenharmony_ci/*ms-win*/ 565162306a36Sopenharmony_ci {0x74, 0xed, 0xed, 0xed, 0x74, 0xed, 0xed, 0xed, 0x74}; 565262306a36Sopenharmony_ci static const u8 gc0305_matrix[9] = 565362306a36Sopenharmony_ci {0x50, 0xf8, 0xf8, 0xf8, 0x50, 0xf8, 0xf8, 0xf8, 0x50}; 565462306a36Sopenharmony_ci static const u8 ov7620_matrix[9] = 565562306a36Sopenharmony_ci {0x58, 0xf4, 0xf4, 0xf4, 0x58, 0xf4, 0xf4, 0xf4, 0x58}; 565662306a36Sopenharmony_ci static const u8 pas202b_matrix[9] = 565762306a36Sopenharmony_ci {0x4c, 0xf5, 0xff, 0xf9, 0x51, 0xf5, 0xfb, 0xed, 0x5f}; 565862306a36Sopenharmony_ci static const u8 po2030_matrix[9] = 565962306a36Sopenharmony_ci {0x60, 0xf0, 0xf0, 0xf0, 0x60, 0xf0, 0xf0, 0xf0, 0x60}; 566062306a36Sopenharmony_ci static const u8 tas5130c_matrix[9] = 566162306a36Sopenharmony_ci {0x68, 0xec, 0xec, 0xec, 0x68, 0xec, 0xec, 0xec, 0x68}; 566262306a36Sopenharmony_ci static const u8 gc0303_matrix[9] = 566362306a36Sopenharmony_ci {0x6c, 0xea, 0xea, 0xea, 0x6c, 0xea, 0xea, 0xea, 0x6c}; 566462306a36Sopenharmony_ci static const u8 *matrix_tb[SENSOR_MAX] = { 566562306a36Sopenharmony_ci [SENSOR_ADCM2700] = adcm2700_matrix, 566662306a36Sopenharmony_ci [SENSOR_CS2102] = ov7620_matrix, 566762306a36Sopenharmony_ci [SENSOR_CS2102K] = NULL, 566862306a36Sopenharmony_ci [SENSOR_GC0303] = gc0303_matrix, 566962306a36Sopenharmony_ci [SENSOR_GC0305] = gc0305_matrix, 567062306a36Sopenharmony_ci [SENSOR_HDCS2020] = NULL, 567162306a36Sopenharmony_ci [SENSOR_HV7131B] = NULL, 567262306a36Sopenharmony_ci [SENSOR_HV7131R] = po2030_matrix, 567362306a36Sopenharmony_ci [SENSOR_ICM105A] = po2030_matrix, 567462306a36Sopenharmony_ci [SENSOR_MC501CB] = NULL, 567562306a36Sopenharmony_ci [SENSOR_MT9V111_1] = gc0305_matrix, 567662306a36Sopenharmony_ci [SENSOR_MT9V111_3] = gc0305_matrix, 567762306a36Sopenharmony_ci [SENSOR_OV7620] = ov7620_matrix, 567862306a36Sopenharmony_ci [SENSOR_OV7630C] = NULL, 567962306a36Sopenharmony_ci [SENSOR_PAS106] = NULL, 568062306a36Sopenharmony_ci [SENSOR_PAS202B] = pas202b_matrix, 568162306a36Sopenharmony_ci [SENSOR_PB0330] = gc0305_matrix, 568262306a36Sopenharmony_ci [SENSOR_PO2030] = po2030_matrix, 568362306a36Sopenharmony_ci [SENSOR_TAS5130C] = tas5130c_matrix, 568462306a36Sopenharmony_ci }; 568562306a36Sopenharmony_ci 568662306a36Sopenharmony_ci matrix = matrix_tb[sd->sensor]; 568762306a36Sopenharmony_ci if (matrix == NULL) 568862306a36Sopenharmony_ci return; /* matrix already loaded */ 568962306a36Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(ov7620_matrix); i++) 569062306a36Sopenharmony_ci reg_w(gspca_dev, matrix[i], 0x010a + i); 569162306a36Sopenharmony_ci} 569262306a36Sopenharmony_ci 569362306a36Sopenharmony_cistatic void setsharpness(struct gspca_dev *gspca_dev, s32 val) 569462306a36Sopenharmony_ci{ 569562306a36Sopenharmony_ci static const u8 sharpness_tb[][2] = { 569662306a36Sopenharmony_ci {0x02, 0x03}, 569762306a36Sopenharmony_ci {0x04, 0x07}, 569862306a36Sopenharmony_ci {0x08, 0x0f}, 569962306a36Sopenharmony_ci {0x10, 0x1e} 570062306a36Sopenharmony_ci }; 570162306a36Sopenharmony_ci 570262306a36Sopenharmony_ci reg_w(gspca_dev, sharpness_tb[val][0], 0x01c6); 570362306a36Sopenharmony_ci reg_r(gspca_dev, 0x01c8); 570462306a36Sopenharmony_ci reg_r(gspca_dev, 0x01c9); 570562306a36Sopenharmony_ci reg_r(gspca_dev, 0x01ca); 570662306a36Sopenharmony_ci reg_w(gspca_dev, sharpness_tb[val][1], 0x01cb); 570762306a36Sopenharmony_ci} 570862306a36Sopenharmony_ci 570962306a36Sopenharmony_cistatic void setcontrast(struct gspca_dev *gspca_dev, 571062306a36Sopenharmony_ci s32 gamma, s32 brightness, s32 contrast) 571162306a36Sopenharmony_ci{ 571262306a36Sopenharmony_ci const u8 *Tgamma; 571362306a36Sopenharmony_ci int g, i, adj, gp1, gp2; 571462306a36Sopenharmony_ci u8 gr[16]; 571562306a36Sopenharmony_ci static const u8 delta_b[16] = /* delta for brightness */ 571662306a36Sopenharmony_ci {0x50, 0x38, 0x2d, 0x28, 0x24, 0x21, 0x1e, 0x1d, 571762306a36Sopenharmony_ci 0x1d, 0x1b, 0x1b, 0x1b, 0x19, 0x18, 0x18, 0x18}; 571862306a36Sopenharmony_ci static const u8 delta_c[16] = /* delta for contrast */ 571962306a36Sopenharmony_ci {0x2c, 0x1a, 0x12, 0x0c, 0x0a, 0x06, 0x06, 0x06, 572062306a36Sopenharmony_ci 0x04, 0x06, 0x04, 0x04, 0x03, 0x03, 0x02, 0x02}; 572162306a36Sopenharmony_ci static const u8 gamma_tb[6][16] = { 572262306a36Sopenharmony_ci {0x00, 0x00, 0x03, 0x0d, 0x1b, 0x2e, 0x45, 0x5f, 572362306a36Sopenharmony_ci 0x79, 0x93, 0xab, 0xc1, 0xd4, 0xe5, 0xf3, 0xff}, 572462306a36Sopenharmony_ci {0x01, 0x0c, 0x1f, 0x3a, 0x53, 0x6d, 0x85, 0x9c, 572562306a36Sopenharmony_ci 0xb0, 0xc2, 0xd1, 0xde, 0xe9, 0xf2, 0xf9, 0xff}, 572662306a36Sopenharmony_ci {0x04, 0x16, 0x30, 0x4e, 0x68, 0x81, 0x98, 0xac, 572762306a36Sopenharmony_ci 0xbe, 0xcd, 0xda, 0xe4, 0xed, 0xf5, 0xfb, 0xff}, 572862306a36Sopenharmony_ci {0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8, 572962306a36Sopenharmony_ci 0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff}, 573062306a36Sopenharmony_ci {0x20, 0x4b, 0x6e, 0x8d, 0xa3, 0xb5, 0xc5, 0xd2, 573162306a36Sopenharmony_ci 0xdc, 0xe5, 0xec, 0xf2, 0xf6, 0xfa, 0xfd, 0xff}, 573262306a36Sopenharmony_ci {0x24, 0x44, 0x64, 0x84, 0x9d, 0xb2, 0xc4, 0xd3, 573362306a36Sopenharmony_ci 0xe0, 0xeb, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff}, 573462306a36Sopenharmony_ci }; 573562306a36Sopenharmony_ci 573662306a36Sopenharmony_ci Tgamma = gamma_tb[gamma - 1]; 573762306a36Sopenharmony_ci 573862306a36Sopenharmony_ci contrast -= 128; /* -128 / 127 */ 573962306a36Sopenharmony_ci brightness -= 128; /* -128 / 92 */ 574062306a36Sopenharmony_ci adj = 0; 574162306a36Sopenharmony_ci gp1 = gp2 = 0; 574262306a36Sopenharmony_ci for (i = 0; i < 16; i++) { 574362306a36Sopenharmony_ci g = Tgamma[i] + delta_b[i] * brightness / 256 574462306a36Sopenharmony_ci - delta_c[i] * contrast / 256 - adj / 2; 574562306a36Sopenharmony_ci if (g > 0xff) 574662306a36Sopenharmony_ci g = 0xff; 574762306a36Sopenharmony_ci else if (g < 0) 574862306a36Sopenharmony_ci g = 0; 574962306a36Sopenharmony_ci reg_w(gspca_dev, g, 0x0120 + i); /* gamma */ 575062306a36Sopenharmony_ci if (contrast > 0) 575162306a36Sopenharmony_ci adj--; 575262306a36Sopenharmony_ci else if (contrast < 0) 575362306a36Sopenharmony_ci adj++; 575462306a36Sopenharmony_ci if (i > 1) 575562306a36Sopenharmony_ci gr[i - 1] = (g - gp2) / 2; 575662306a36Sopenharmony_ci else if (i != 0) 575762306a36Sopenharmony_ci gr[0] = gp1 == 0 ? 0 : (g - gp1); 575862306a36Sopenharmony_ci gp2 = gp1; 575962306a36Sopenharmony_ci gp1 = g; 576062306a36Sopenharmony_ci } 576162306a36Sopenharmony_ci gr[15] = (0xff - gp2) / 2; 576262306a36Sopenharmony_ci for (i = 0; i < 16; i++) 576362306a36Sopenharmony_ci reg_w(gspca_dev, gr[i], 0x0130 + i); /* gradient */ 576462306a36Sopenharmony_ci} 576562306a36Sopenharmony_ci 576662306a36Sopenharmony_cistatic s32 getexposure(struct gspca_dev *gspca_dev) 576762306a36Sopenharmony_ci{ 576862306a36Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 576962306a36Sopenharmony_ci 577062306a36Sopenharmony_ci switch (sd->sensor) { 577162306a36Sopenharmony_ci case SENSOR_HV7131R: 577262306a36Sopenharmony_ci return (i2c_read(gspca_dev, 0x25) << 9) 577362306a36Sopenharmony_ci | (i2c_read(gspca_dev, 0x26) << 1) 577462306a36Sopenharmony_ci | (i2c_read(gspca_dev, 0x27) >> 7); 577562306a36Sopenharmony_ci case SENSOR_OV7620: 577662306a36Sopenharmony_ci return i2c_read(gspca_dev, 0x10); 577762306a36Sopenharmony_ci default: 577862306a36Sopenharmony_ci return -1; 577962306a36Sopenharmony_ci } 578062306a36Sopenharmony_ci} 578162306a36Sopenharmony_ci 578262306a36Sopenharmony_cistatic void setexposure(struct gspca_dev *gspca_dev, s32 val) 578362306a36Sopenharmony_ci{ 578462306a36Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 578562306a36Sopenharmony_ci 578662306a36Sopenharmony_ci switch (sd->sensor) { 578762306a36Sopenharmony_ci case SENSOR_HV7131R: 578862306a36Sopenharmony_ci i2c_write(gspca_dev, 0x25, val >> 9, 0x00); 578962306a36Sopenharmony_ci i2c_write(gspca_dev, 0x26, val >> 1, 0x00); 579062306a36Sopenharmony_ci i2c_write(gspca_dev, 0x27, val << 7, 0x00); 579162306a36Sopenharmony_ci break; 579262306a36Sopenharmony_ci case SENSOR_OV7620: 579362306a36Sopenharmony_ci i2c_write(gspca_dev, 0x10, val, 0x00); 579462306a36Sopenharmony_ci break; 579562306a36Sopenharmony_ci } 579662306a36Sopenharmony_ci} 579762306a36Sopenharmony_ci 579862306a36Sopenharmony_cistatic void setquality(struct gspca_dev *gspca_dev) 579962306a36Sopenharmony_ci{ 580062306a36Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 580162306a36Sopenharmony_ci jpeg_set_qual(sd->jpeg_hdr, jpeg_qual[sd->reg08 >> 1]); 580262306a36Sopenharmony_ci reg_w(gspca_dev, sd->reg08, ZC3XX_R008_CLOCKSETTING); 580362306a36Sopenharmony_ci} 580462306a36Sopenharmony_ci 580562306a36Sopenharmony_ci/* Matches the sensor's internal frame rate to the lighting frequency. 580662306a36Sopenharmony_ci * Valid frequencies are: 580762306a36Sopenharmony_ci * 50Hz, for European and Asian lighting (default) 580862306a36Sopenharmony_ci * 60Hz, for American lighting 580962306a36Sopenharmony_ci * 0 = No Flicker (for outdoor usage) 581062306a36Sopenharmony_ci */ 581162306a36Sopenharmony_cistatic void setlightfreq(struct gspca_dev *gspca_dev, s32 val) 581262306a36Sopenharmony_ci{ 581362306a36Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 581462306a36Sopenharmony_ci int i, mode; 581562306a36Sopenharmony_ci const struct usb_action *zc3_freq; 581662306a36Sopenharmony_ci static const struct usb_action *freq_tb[SENSOR_MAX][6] = { 581762306a36Sopenharmony_ci [SENSOR_ADCM2700] = { 581862306a36Sopenharmony_ci adcm2700_NoFlicker, adcm2700_NoFlicker, 581962306a36Sopenharmony_ci adcm2700_50HZ, adcm2700_50HZ, 582062306a36Sopenharmony_ci adcm2700_60HZ, adcm2700_60HZ}, 582162306a36Sopenharmony_ci [SENSOR_CS2102] = { 582262306a36Sopenharmony_ci cs2102_NoFlicker, cs2102_NoFlickerScale, 582362306a36Sopenharmony_ci cs2102_50HZ, cs2102_50HZScale, 582462306a36Sopenharmony_ci cs2102_60HZ, cs2102_60HZScale}, 582562306a36Sopenharmony_ci [SENSOR_CS2102K] = { 582662306a36Sopenharmony_ci cs2102_NoFlicker, cs2102_NoFlickerScale, 582762306a36Sopenharmony_ci NULL, NULL, /* currently disabled */ 582862306a36Sopenharmony_ci NULL, NULL}, 582962306a36Sopenharmony_ci [SENSOR_GC0303] = { 583062306a36Sopenharmony_ci gc0303_NoFlicker, gc0303_NoFlickerScale, 583162306a36Sopenharmony_ci gc0303_50HZ, gc0303_50HZScale, 583262306a36Sopenharmony_ci gc0303_60HZ, gc0303_60HZScale}, 583362306a36Sopenharmony_ci [SENSOR_GC0305] = { 583462306a36Sopenharmony_ci gc0305_NoFlicker, gc0305_NoFlicker, 583562306a36Sopenharmony_ci gc0305_50HZ, gc0305_50HZ, 583662306a36Sopenharmony_ci gc0305_60HZ, gc0305_60HZ}, 583762306a36Sopenharmony_ci [SENSOR_HDCS2020] = { 583862306a36Sopenharmony_ci hdcs2020_NoFlicker, hdcs2020_NoFlicker, 583962306a36Sopenharmony_ci hdcs2020_50HZ, hdcs2020_50HZ, 584062306a36Sopenharmony_ci hdcs2020_60HZ, hdcs2020_60HZ}, 584162306a36Sopenharmony_ci [SENSOR_HV7131B] = { 584262306a36Sopenharmony_ci hv7131b_NoFlicker, hv7131b_NoFlickerScale, 584362306a36Sopenharmony_ci hv7131b_50HZ, hv7131b_50HZScale, 584462306a36Sopenharmony_ci hv7131b_60HZ, hv7131b_60HZScale}, 584562306a36Sopenharmony_ci [SENSOR_HV7131R] = { 584662306a36Sopenharmony_ci hv7131r_NoFlicker, hv7131r_NoFlickerScale, 584762306a36Sopenharmony_ci hv7131r_50HZ, hv7131r_50HZScale, 584862306a36Sopenharmony_ci hv7131r_60HZ, hv7131r_60HZScale}, 584962306a36Sopenharmony_ci [SENSOR_ICM105A] = { 585062306a36Sopenharmony_ci icm105a_NoFlicker, icm105a_NoFlickerScale, 585162306a36Sopenharmony_ci icm105a_50HZ, icm105a_50HZScale, 585262306a36Sopenharmony_ci icm105a_60HZ, icm105a_60HZScale}, 585362306a36Sopenharmony_ci [SENSOR_MC501CB] = { 585462306a36Sopenharmony_ci mc501cb_NoFlicker, mc501cb_NoFlickerScale, 585562306a36Sopenharmony_ci mc501cb_50HZ, mc501cb_50HZScale, 585662306a36Sopenharmony_ci mc501cb_60HZ, mc501cb_60HZScale}, 585762306a36Sopenharmony_ci [SENSOR_MT9V111_1] = { 585862306a36Sopenharmony_ci mt9v111_1_AENoFlicker, mt9v111_1_AENoFlickerScale, 585962306a36Sopenharmony_ci mt9v111_1_AE50HZ, mt9v111_1_AE50HZScale, 586062306a36Sopenharmony_ci mt9v111_1_AE60HZ, mt9v111_1_AE60HZScale}, 586162306a36Sopenharmony_ci [SENSOR_MT9V111_3] = { 586262306a36Sopenharmony_ci mt9v111_3_AENoFlicker, mt9v111_3_AENoFlickerScale, 586362306a36Sopenharmony_ci mt9v111_3_AE50HZ, mt9v111_3_AE50HZScale, 586462306a36Sopenharmony_ci mt9v111_3_AE60HZ, mt9v111_3_AE60HZScale}, 586562306a36Sopenharmony_ci [SENSOR_OV7620] = { 586662306a36Sopenharmony_ci ov7620_NoFlicker, ov7620_NoFlicker, 586762306a36Sopenharmony_ci ov7620_50HZ, ov7620_50HZ, 586862306a36Sopenharmony_ci ov7620_60HZ, ov7620_60HZ}, 586962306a36Sopenharmony_ci [SENSOR_OV7630C] = { 587062306a36Sopenharmony_ci NULL, NULL, 587162306a36Sopenharmony_ci NULL, NULL, 587262306a36Sopenharmony_ci NULL, NULL}, 587362306a36Sopenharmony_ci [SENSOR_PAS106] = { 587462306a36Sopenharmony_ci pas106b_NoFlicker, pas106b_NoFlicker, 587562306a36Sopenharmony_ci pas106b_50HZ, pas106b_50HZ, 587662306a36Sopenharmony_ci pas106b_60HZ, pas106b_60HZ}, 587762306a36Sopenharmony_ci [SENSOR_PAS202B] = { 587862306a36Sopenharmony_ci pas202b_NoFlicker, pas202b_NoFlickerScale, 587962306a36Sopenharmony_ci pas202b_50HZ, pas202b_50HZScale, 588062306a36Sopenharmony_ci pas202b_60HZ, pas202b_60HZScale}, 588162306a36Sopenharmony_ci [SENSOR_PB0330] = { 588262306a36Sopenharmony_ci pb0330_NoFlicker, pb0330_NoFlickerScale, 588362306a36Sopenharmony_ci pb0330_50HZ, pb0330_50HZScale, 588462306a36Sopenharmony_ci pb0330_60HZ, pb0330_60HZScale}, 588562306a36Sopenharmony_ci [SENSOR_PO2030] = { 588662306a36Sopenharmony_ci po2030_NoFlicker, po2030_NoFlicker, 588762306a36Sopenharmony_ci po2030_50HZ, po2030_50HZ, 588862306a36Sopenharmony_ci po2030_60HZ, po2030_60HZ}, 588962306a36Sopenharmony_ci [SENSOR_TAS5130C] = { 589062306a36Sopenharmony_ci tas5130c_NoFlicker, tas5130c_NoFlickerScale, 589162306a36Sopenharmony_ci tas5130c_50HZ, tas5130c_50HZScale, 589262306a36Sopenharmony_ci tas5130c_60HZ, tas5130c_60HZScale}, 589362306a36Sopenharmony_ci }; 589462306a36Sopenharmony_ci 589562306a36Sopenharmony_ci i = val * 2; 589662306a36Sopenharmony_ci mode = gspca_dev->cam.cam_mode[gspca_dev->curr_mode].priv; 589762306a36Sopenharmony_ci if (mode) 589862306a36Sopenharmony_ci i++; /* 320x240 */ 589962306a36Sopenharmony_ci zc3_freq = freq_tb[sd->sensor][i]; 590062306a36Sopenharmony_ci if (zc3_freq == NULL) 590162306a36Sopenharmony_ci return; 590262306a36Sopenharmony_ci usb_exchange(gspca_dev, zc3_freq); 590362306a36Sopenharmony_ci switch (sd->sensor) { 590462306a36Sopenharmony_ci case SENSOR_GC0305: 590562306a36Sopenharmony_ci if (mode /* if 320x240 */ 590662306a36Sopenharmony_ci && val == 1) /* and 50Hz */ 590762306a36Sopenharmony_ci reg_w(gspca_dev, 0x85, 0x018d); 590862306a36Sopenharmony_ci /* win: 0x80, 0x018d */ 590962306a36Sopenharmony_ci break; 591062306a36Sopenharmony_ci case SENSOR_OV7620: 591162306a36Sopenharmony_ci if (!mode) { /* if 640x480 */ 591262306a36Sopenharmony_ci if (val != 0) /* and filter */ 591362306a36Sopenharmony_ci reg_w(gspca_dev, 0x40, 0x0002); 591462306a36Sopenharmony_ci else 591562306a36Sopenharmony_ci reg_w(gspca_dev, 0x44, 0x0002); 591662306a36Sopenharmony_ci } 591762306a36Sopenharmony_ci break; 591862306a36Sopenharmony_ci case SENSOR_PAS202B: 591962306a36Sopenharmony_ci reg_w(gspca_dev, 0x00, 0x01a7); 592062306a36Sopenharmony_ci break; 592162306a36Sopenharmony_ci } 592262306a36Sopenharmony_ci} 592362306a36Sopenharmony_ci 592462306a36Sopenharmony_cistatic void setautogain(struct gspca_dev *gspca_dev, s32 val) 592562306a36Sopenharmony_ci{ 592662306a36Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 592762306a36Sopenharmony_ci 592862306a36Sopenharmony_ci if (sd->sensor == SENSOR_OV7620) 592962306a36Sopenharmony_ci i2c_write(gspca_dev, 0x13, val ? 0xa3 : 0x80, 0x00); 593062306a36Sopenharmony_ci else 593162306a36Sopenharmony_ci reg_w(gspca_dev, val ? 0x42 : 0x02, 0x0180); 593262306a36Sopenharmony_ci} 593362306a36Sopenharmony_ci 593462306a36Sopenharmony_ci/* 593562306a36Sopenharmony_ci * Update the transfer parameters. 593662306a36Sopenharmony_ci * This function is executed from a work queue. 593762306a36Sopenharmony_ci */ 593862306a36Sopenharmony_cistatic void transfer_update(struct work_struct *work) 593962306a36Sopenharmony_ci{ 594062306a36Sopenharmony_ci struct sd *sd = container_of(work, struct sd, work); 594162306a36Sopenharmony_ci struct gspca_dev *gspca_dev = &sd->gspca_dev; 594262306a36Sopenharmony_ci int change, good; 594362306a36Sopenharmony_ci u8 reg07, reg11; 594462306a36Sopenharmony_ci 594562306a36Sopenharmony_ci /* reg07 gets set to 0 by sd_start before starting us */ 594662306a36Sopenharmony_ci reg07 = 0; 594762306a36Sopenharmony_ci 594862306a36Sopenharmony_ci good = 0; 594962306a36Sopenharmony_ci while (1) { 595062306a36Sopenharmony_ci msleep(100); 595162306a36Sopenharmony_ci 595262306a36Sopenharmony_ci /* To protect gspca_dev->usb_buf and gspca_dev->usb_err */ 595362306a36Sopenharmony_ci mutex_lock(&gspca_dev->usb_lock); 595462306a36Sopenharmony_ci#ifdef CONFIG_PM 595562306a36Sopenharmony_ci if (gspca_dev->frozen) 595662306a36Sopenharmony_ci break; 595762306a36Sopenharmony_ci#endif 595862306a36Sopenharmony_ci if (!gspca_dev->present || !gspca_dev->streaming) 595962306a36Sopenharmony_ci break; 596062306a36Sopenharmony_ci 596162306a36Sopenharmony_ci /* Bit 0 of register 11 indicates FIFO overflow */ 596262306a36Sopenharmony_ci gspca_dev->usb_err = 0; 596362306a36Sopenharmony_ci reg11 = reg_r(gspca_dev, 0x0011); 596462306a36Sopenharmony_ci if (gspca_dev->usb_err) 596562306a36Sopenharmony_ci break; 596662306a36Sopenharmony_ci 596762306a36Sopenharmony_ci change = reg11 & 0x01; 596862306a36Sopenharmony_ci if (change) { /* overflow */ 596962306a36Sopenharmony_ci good = 0; 597062306a36Sopenharmony_ci 597162306a36Sopenharmony_ci if (reg07 == 0) /* Bit Rate Control not enabled? */ 597262306a36Sopenharmony_ci reg07 = 0x32; /* Allow 98 bytes / unit */ 597362306a36Sopenharmony_ci else if (reg07 > 2) 597462306a36Sopenharmony_ci reg07 -= 2; /* Decrease allowed bytes / unit */ 597562306a36Sopenharmony_ci else 597662306a36Sopenharmony_ci change = 0; 597762306a36Sopenharmony_ci } else { /* no overflow */ 597862306a36Sopenharmony_ci good++; 597962306a36Sopenharmony_ci if (good >= 10) { 598062306a36Sopenharmony_ci good = 0; 598162306a36Sopenharmony_ci if (reg07) { /* BRC enabled? */ 598262306a36Sopenharmony_ci change = 1; 598362306a36Sopenharmony_ci if (reg07 < 0x32) 598462306a36Sopenharmony_ci reg07 += 2; 598562306a36Sopenharmony_ci else 598662306a36Sopenharmony_ci reg07 = 0; 598762306a36Sopenharmony_ci } 598862306a36Sopenharmony_ci } 598962306a36Sopenharmony_ci } 599062306a36Sopenharmony_ci if (change) { 599162306a36Sopenharmony_ci gspca_dev->usb_err = 0; 599262306a36Sopenharmony_ci reg_w(gspca_dev, reg07, 0x0007); 599362306a36Sopenharmony_ci if (gspca_dev->usb_err) 599462306a36Sopenharmony_ci break; 599562306a36Sopenharmony_ci } 599662306a36Sopenharmony_ci mutex_unlock(&gspca_dev->usb_lock); 599762306a36Sopenharmony_ci } 599862306a36Sopenharmony_ci 599962306a36Sopenharmony_ci /* Something went wrong. Unlock and return */ 600062306a36Sopenharmony_ci mutex_unlock(&gspca_dev->usb_lock); 600162306a36Sopenharmony_ci} 600262306a36Sopenharmony_ci 600362306a36Sopenharmony_cistatic void send_unknown(struct gspca_dev *gspca_dev, int sensor) 600462306a36Sopenharmony_ci{ 600562306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); /* bridge reset */ 600662306a36Sopenharmony_ci switch (sensor) { 600762306a36Sopenharmony_ci case SENSOR_PAS106: 600862306a36Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x003a); 600962306a36Sopenharmony_ci reg_w(gspca_dev, 0x0c, 0x003b); 601062306a36Sopenharmony_ci reg_w(gspca_dev, 0x08, 0x0038); 601162306a36Sopenharmony_ci break; 601262306a36Sopenharmony_ci case SENSOR_ADCM2700: 601362306a36Sopenharmony_ci case SENSOR_GC0305: 601462306a36Sopenharmony_ci case SENSOR_OV7620: 601562306a36Sopenharmony_ci case SENSOR_MT9V111_1: 601662306a36Sopenharmony_ci case SENSOR_MT9V111_3: 601762306a36Sopenharmony_ci case SENSOR_PB0330: 601862306a36Sopenharmony_ci case SENSOR_PO2030: 601962306a36Sopenharmony_ci reg_w(gspca_dev, 0x0d, 0x003a); 602062306a36Sopenharmony_ci reg_w(gspca_dev, 0x02, 0x003b); 602162306a36Sopenharmony_ci reg_w(gspca_dev, 0x00, 0x0038); 602262306a36Sopenharmony_ci break; 602362306a36Sopenharmony_ci case SENSOR_HV7131R: 602462306a36Sopenharmony_ci case SENSOR_PAS202B: 602562306a36Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x003b); 602662306a36Sopenharmony_ci reg_w(gspca_dev, 0x0c, 0x003a); 602762306a36Sopenharmony_ci reg_w(gspca_dev, 0x0b, 0x0039); 602862306a36Sopenharmony_ci if (sensor == SENSOR_PAS202B) 602962306a36Sopenharmony_ci reg_w(gspca_dev, 0x0b, 0x0038); 603062306a36Sopenharmony_ci break; 603162306a36Sopenharmony_ci } 603262306a36Sopenharmony_ci} 603362306a36Sopenharmony_ci 603462306a36Sopenharmony_ci/* start probe 2 wires */ 603562306a36Sopenharmony_cistatic void start_2wr_probe(struct gspca_dev *gspca_dev, int sensor) 603662306a36Sopenharmony_ci{ 603762306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); 603862306a36Sopenharmony_ci reg_w(gspca_dev, sensor, 0x0010); 603962306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0001); 604062306a36Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x0012); 604162306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0012); 604262306a36Sopenharmony_ci/* msleep(2); */ 604362306a36Sopenharmony_ci} 604462306a36Sopenharmony_ci 604562306a36Sopenharmony_cistatic int sif_probe(struct gspca_dev *gspca_dev) 604662306a36Sopenharmony_ci{ 604762306a36Sopenharmony_ci u16 checkword; 604862306a36Sopenharmony_ci 604962306a36Sopenharmony_ci start_2wr_probe(gspca_dev, 0x0f); /* PAS106 */ 605062306a36Sopenharmony_ci reg_w(gspca_dev, 0x08, 0x008d); 605162306a36Sopenharmony_ci msleep(150); 605262306a36Sopenharmony_ci checkword = ((i2c_read(gspca_dev, 0x00) & 0x0f) << 4) 605362306a36Sopenharmony_ci | ((i2c_read(gspca_dev, 0x01) & 0xf0) >> 4); 605462306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "probe sif 0x%04x\n", checkword); 605562306a36Sopenharmony_ci if (checkword == 0x0007) { 605662306a36Sopenharmony_ci send_unknown(gspca_dev, SENSOR_PAS106); 605762306a36Sopenharmony_ci return 0x0f; /* PAS106 */ 605862306a36Sopenharmony_ci } 605962306a36Sopenharmony_ci return -1; 606062306a36Sopenharmony_ci} 606162306a36Sopenharmony_ci 606262306a36Sopenharmony_cistatic int vga_2wr_probe(struct gspca_dev *gspca_dev) 606362306a36Sopenharmony_ci{ 606462306a36Sopenharmony_ci u16 retword; 606562306a36Sopenharmony_ci 606662306a36Sopenharmony_ci start_2wr_probe(gspca_dev, 0x00); /* HV7131B */ 606762306a36Sopenharmony_ci i2c_write(gspca_dev, 0x01, 0xaa, 0x00); 606862306a36Sopenharmony_ci retword = i2c_read(gspca_dev, 0x01); 606962306a36Sopenharmony_ci if (retword != 0) 607062306a36Sopenharmony_ci return 0x00; /* HV7131B */ 607162306a36Sopenharmony_ci 607262306a36Sopenharmony_ci start_2wr_probe(gspca_dev, 0x04); /* CS2102 */ 607362306a36Sopenharmony_ci i2c_write(gspca_dev, 0x01, 0xaa, 0x00); 607462306a36Sopenharmony_ci retword = i2c_read(gspca_dev, 0x01); 607562306a36Sopenharmony_ci if (retword != 0) 607662306a36Sopenharmony_ci return 0x04; /* CS2102 */ 607762306a36Sopenharmony_ci 607862306a36Sopenharmony_ci start_2wr_probe(gspca_dev, 0x06); /* OmniVision */ 607962306a36Sopenharmony_ci reg_w(gspca_dev, 0x08, 0x008d); 608062306a36Sopenharmony_ci i2c_write(gspca_dev, 0x11, 0xaa, 0x00); 608162306a36Sopenharmony_ci retword = i2c_read(gspca_dev, 0x11); 608262306a36Sopenharmony_ci if (retword != 0) { 608362306a36Sopenharmony_ci /* (should have returned 0xaa) --> Omnivision? */ 608462306a36Sopenharmony_ci /* reg_r 0x10 -> 0x06 --> */ 608562306a36Sopenharmony_ci goto ov_check; 608662306a36Sopenharmony_ci } 608762306a36Sopenharmony_ci 608862306a36Sopenharmony_ci start_2wr_probe(gspca_dev, 0x08); /* HDCS2020 */ 608962306a36Sopenharmony_ci i2c_write(gspca_dev, 0x1c, 0x00, 0x00); 609062306a36Sopenharmony_ci i2c_write(gspca_dev, 0x15, 0xaa, 0x00); 609162306a36Sopenharmony_ci retword = i2c_read(gspca_dev, 0x15); 609262306a36Sopenharmony_ci if (retword != 0) 609362306a36Sopenharmony_ci return 0x08; /* HDCS2020 */ 609462306a36Sopenharmony_ci 609562306a36Sopenharmony_ci start_2wr_probe(gspca_dev, 0x0a); /* PB0330 */ 609662306a36Sopenharmony_ci i2c_write(gspca_dev, 0x07, 0xaa, 0xaa); 609762306a36Sopenharmony_ci retword = i2c_read(gspca_dev, 0x07); 609862306a36Sopenharmony_ci if (retword != 0) 609962306a36Sopenharmony_ci return 0x0a; /* PB0330 */ 610062306a36Sopenharmony_ci retword = i2c_read(gspca_dev, 0x03); 610162306a36Sopenharmony_ci if (retword != 0) 610262306a36Sopenharmony_ci return 0x0a; /* PB0330 ?? */ 610362306a36Sopenharmony_ci retword = i2c_read(gspca_dev, 0x04); 610462306a36Sopenharmony_ci if (retword != 0) 610562306a36Sopenharmony_ci return 0x0a; /* PB0330 ?? */ 610662306a36Sopenharmony_ci 610762306a36Sopenharmony_ci start_2wr_probe(gspca_dev, 0x0c); /* ICM105A */ 610862306a36Sopenharmony_ci i2c_write(gspca_dev, 0x01, 0x11, 0x00); 610962306a36Sopenharmony_ci retword = i2c_read(gspca_dev, 0x01); 611062306a36Sopenharmony_ci if (retword != 0) 611162306a36Sopenharmony_ci return 0x0c; /* ICM105A */ 611262306a36Sopenharmony_ci 611362306a36Sopenharmony_ci start_2wr_probe(gspca_dev, 0x0e); /* PAS202BCB */ 611462306a36Sopenharmony_ci reg_w(gspca_dev, 0x08, 0x008d); 611562306a36Sopenharmony_ci i2c_write(gspca_dev, 0x03, 0xaa, 0x00); 611662306a36Sopenharmony_ci msleep(50); 611762306a36Sopenharmony_ci retword = i2c_read(gspca_dev, 0x03); 611862306a36Sopenharmony_ci if (retword != 0) { 611962306a36Sopenharmony_ci send_unknown(gspca_dev, SENSOR_PAS202B); 612062306a36Sopenharmony_ci return 0x0e; /* PAS202BCB */ 612162306a36Sopenharmony_ci } 612262306a36Sopenharmony_ci 612362306a36Sopenharmony_ci start_2wr_probe(gspca_dev, 0x02); /* TAS5130C */ 612462306a36Sopenharmony_ci i2c_write(gspca_dev, 0x01, 0xaa, 0x00); 612562306a36Sopenharmony_ci retword = i2c_read(gspca_dev, 0x01); 612662306a36Sopenharmony_ci if (retword != 0) 612762306a36Sopenharmony_ci return 0x02; /* TAS5130C */ 612862306a36Sopenharmony_ciov_check: 612962306a36Sopenharmony_ci reg_r(gspca_dev, 0x0010); /* ?? */ 613062306a36Sopenharmony_ci reg_r(gspca_dev, 0x0010); 613162306a36Sopenharmony_ci 613262306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); 613362306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0001); 613462306a36Sopenharmony_ci reg_w(gspca_dev, 0x06, 0x0010); /* OmniVision */ 613562306a36Sopenharmony_ci reg_w(gspca_dev, 0xa1, 0x008b); 613662306a36Sopenharmony_ci reg_w(gspca_dev, 0x08, 0x008d); 613762306a36Sopenharmony_ci msleep(500); 613862306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0012); 613962306a36Sopenharmony_ci i2c_write(gspca_dev, 0x12, 0x80, 0x00); /* sensor reset */ 614062306a36Sopenharmony_ci retword = i2c_read(gspca_dev, 0x0a) << 8; 614162306a36Sopenharmony_ci retword |= i2c_read(gspca_dev, 0x0b); 614262306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "probe 2wr ov vga 0x%04x\n", retword); 614362306a36Sopenharmony_ci switch (retword) { 614462306a36Sopenharmony_ci case 0x7631: /* OV7630C */ 614562306a36Sopenharmony_ci reg_w(gspca_dev, 0x06, 0x0010); 614662306a36Sopenharmony_ci break; 614762306a36Sopenharmony_ci case 0x7620: /* OV7620 */ 614862306a36Sopenharmony_ci case 0x7648: /* OV7648 */ 614962306a36Sopenharmony_ci break; 615062306a36Sopenharmony_ci default: 615162306a36Sopenharmony_ci return -1; /* not OmniVision */ 615262306a36Sopenharmony_ci } 615362306a36Sopenharmony_ci return retword; 615462306a36Sopenharmony_ci} 615562306a36Sopenharmony_ci 615662306a36Sopenharmony_cistruct sensor_by_chipset_revision { 615762306a36Sopenharmony_ci u16 revision; 615862306a36Sopenharmony_ci u8 internal_sensor_id; 615962306a36Sopenharmony_ci}; 616062306a36Sopenharmony_cistatic const struct sensor_by_chipset_revision chipset_revision_sensor[] = { 616162306a36Sopenharmony_ci {0xc000, 0x12}, /* TAS5130C */ 616262306a36Sopenharmony_ci {0xc001, 0x13}, /* MT9V111 */ 616362306a36Sopenharmony_ci {0xe001, 0x13}, 616462306a36Sopenharmony_ci {0x8001, 0x13}, 616562306a36Sopenharmony_ci {0x8000, 0x14}, /* CS2102K */ 616662306a36Sopenharmony_ci {0x8400, 0x15}, /* MT9V111 */ 616762306a36Sopenharmony_ci {0xe400, 0x15}, 616862306a36Sopenharmony_ci}; 616962306a36Sopenharmony_ci 617062306a36Sopenharmony_cistatic int vga_3wr_probe(struct gspca_dev *gspca_dev) 617162306a36Sopenharmony_ci{ 617262306a36Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 617362306a36Sopenharmony_ci int i; 617462306a36Sopenharmony_ci u16 retword; 617562306a36Sopenharmony_ci 617662306a36Sopenharmony_ci/*fixme: lack of 8b=b3 (11,12)-> 10, 8b=e0 (14,15,16)-> 12 found in gspcav1*/ 617762306a36Sopenharmony_ci reg_w(gspca_dev, 0x02, 0x0010); 617862306a36Sopenharmony_ci reg_r(gspca_dev, 0x0010); 617962306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); 618062306a36Sopenharmony_ci reg_w(gspca_dev, 0x00, 0x0010); 618162306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0001); 618262306a36Sopenharmony_ci reg_w(gspca_dev, 0x91, 0x008b); 618362306a36Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x0012); 618462306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0012); 618562306a36Sopenharmony_ci reg_w(gspca_dev, 0x05, 0x0012); 618662306a36Sopenharmony_ci retword = i2c_read(gspca_dev, 0x14); 618762306a36Sopenharmony_ci if (retword != 0) 618862306a36Sopenharmony_ci return 0x11; /* HV7131R */ 618962306a36Sopenharmony_ci retword = i2c_read(gspca_dev, 0x15); 619062306a36Sopenharmony_ci if (retword != 0) 619162306a36Sopenharmony_ci return 0x11; /* HV7131R */ 619262306a36Sopenharmony_ci retword = i2c_read(gspca_dev, 0x16); 619362306a36Sopenharmony_ci if (retword != 0) 619462306a36Sopenharmony_ci return 0x11; /* HV7131R */ 619562306a36Sopenharmony_ci 619662306a36Sopenharmony_ci reg_w(gspca_dev, 0x02, 0x0010); 619762306a36Sopenharmony_ci retword = reg_r(gspca_dev, 0x000b) << 8; 619862306a36Sopenharmony_ci retword |= reg_r(gspca_dev, 0x000a); 619962306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "probe 3wr vga 1 0x%04x\n", retword); 620062306a36Sopenharmony_ci reg_r(gspca_dev, 0x0010); 620162306a36Sopenharmony_ci if ((retword & 0xff00) == 0x6400) 620262306a36Sopenharmony_ci return 0x02; /* TAS5130C */ 620362306a36Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(chipset_revision_sensor); i++) { 620462306a36Sopenharmony_ci if (chipset_revision_sensor[i].revision == retword) { 620562306a36Sopenharmony_ci sd->chip_revision = retword; 620662306a36Sopenharmony_ci send_unknown(gspca_dev, SENSOR_PB0330); 620762306a36Sopenharmony_ci return chipset_revision_sensor[i].internal_sensor_id; 620862306a36Sopenharmony_ci } 620962306a36Sopenharmony_ci } 621062306a36Sopenharmony_ci 621162306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); /* check PB0330 */ 621262306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0001); 621362306a36Sopenharmony_ci reg_w(gspca_dev, 0xdd, 0x008b); 621462306a36Sopenharmony_ci reg_w(gspca_dev, 0x0a, 0x0010); 621562306a36Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x0012); 621662306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0012); 621762306a36Sopenharmony_ci retword = i2c_read(gspca_dev, 0x00); 621862306a36Sopenharmony_ci if (retword != 0) { 621962306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "probe 3wr vga type 0a\n"); 622062306a36Sopenharmony_ci return 0x0a; /* PB0330 */ 622162306a36Sopenharmony_ci } 622262306a36Sopenharmony_ci 622362306a36Sopenharmony_ci /* probe gc0303 / gc0305 */ 622462306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); 622562306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0001); 622662306a36Sopenharmony_ci reg_w(gspca_dev, 0x98, 0x008b); 622762306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0010); 622862306a36Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x0012); 622962306a36Sopenharmony_ci msleep(2); 623062306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0012); 623162306a36Sopenharmony_ci retword = i2c_read(gspca_dev, 0x00); 623262306a36Sopenharmony_ci if (retword != 0) { 623362306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "probe 3wr vga type %02x\n", 623462306a36Sopenharmony_ci retword); 623562306a36Sopenharmony_ci if (retword == 0x0011) /* gc0303 */ 623662306a36Sopenharmony_ci return 0x0303; 623762306a36Sopenharmony_ci if (retword == 0x0029) /* gc0305 */ 623862306a36Sopenharmony_ci send_unknown(gspca_dev, SENSOR_GC0305); 623962306a36Sopenharmony_ci return retword; 624062306a36Sopenharmony_ci } 624162306a36Sopenharmony_ci 624262306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); /* check OmniVision */ 624362306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0001); 624462306a36Sopenharmony_ci reg_w(gspca_dev, 0xa1, 0x008b); 624562306a36Sopenharmony_ci reg_w(gspca_dev, 0x08, 0x008d); 624662306a36Sopenharmony_ci reg_w(gspca_dev, 0x06, 0x0010); 624762306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0012); 624862306a36Sopenharmony_ci reg_w(gspca_dev, 0x05, 0x0012); 624962306a36Sopenharmony_ci if (i2c_read(gspca_dev, 0x1c) == 0x007f /* OV7610 - manufacturer ID */ 625062306a36Sopenharmony_ci && i2c_read(gspca_dev, 0x1d) == 0x00a2) { 625162306a36Sopenharmony_ci send_unknown(gspca_dev, SENSOR_OV7620); 625262306a36Sopenharmony_ci return 0x06; /* OmniVision confirm ? */ 625362306a36Sopenharmony_ci } 625462306a36Sopenharmony_ci 625562306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); 625662306a36Sopenharmony_ci reg_w(gspca_dev, 0x00, 0x0002); 625762306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0010); 625862306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0001); 625962306a36Sopenharmony_ci reg_w(gspca_dev, 0xee, 0x008b); 626062306a36Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x0012); 626162306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0012); 626262306a36Sopenharmony_ci reg_w(gspca_dev, 0x05, 0x0012); 626362306a36Sopenharmony_ci retword = i2c_read(gspca_dev, 0x00) << 8; /* ID 0 */ 626462306a36Sopenharmony_ci retword |= i2c_read(gspca_dev, 0x01); /* ID 1 */ 626562306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "probe 3wr vga 2 0x%04x\n", retword); 626662306a36Sopenharmony_ci if (retword == 0x2030) { 626762306a36Sopenharmony_ci u8 retbyte; 626862306a36Sopenharmony_ci 626962306a36Sopenharmony_ci retbyte = i2c_read(gspca_dev, 0x02); /* revision number */ 627062306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "sensor PO2030 rev 0x%02x\n", 627162306a36Sopenharmony_ci retbyte); 627262306a36Sopenharmony_ci 627362306a36Sopenharmony_ci send_unknown(gspca_dev, SENSOR_PO2030); 627462306a36Sopenharmony_ci return retword; 627562306a36Sopenharmony_ci } 627662306a36Sopenharmony_ci 627762306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); 627862306a36Sopenharmony_ci reg_w(gspca_dev, 0x0a, 0x0010); 627962306a36Sopenharmony_ci reg_w(gspca_dev, 0xd3, 0x008b); 628062306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0001); 628162306a36Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x0012); 628262306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0012); 628362306a36Sopenharmony_ci reg_w(gspca_dev, 0x05, 0x0012); 628462306a36Sopenharmony_ci reg_w(gspca_dev, 0xd3, 0x008b); 628562306a36Sopenharmony_ci retword = i2c_read(gspca_dev, 0x01); 628662306a36Sopenharmony_ci if (retword != 0) { 628762306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "probe 3wr vga type 0a ? ret: %04x\n", 628862306a36Sopenharmony_ci retword); 628962306a36Sopenharmony_ci return 0x16; /* adcm2700 (6100/6200) */ 629062306a36Sopenharmony_ci } 629162306a36Sopenharmony_ci return -1; 629262306a36Sopenharmony_ci} 629362306a36Sopenharmony_ci 629462306a36Sopenharmony_cistatic int zcxx_probeSensor(struct gspca_dev *gspca_dev) 629562306a36Sopenharmony_ci{ 629662306a36Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 629762306a36Sopenharmony_ci int sensor; 629862306a36Sopenharmony_ci 629962306a36Sopenharmony_ci switch (sd->sensor) { 630062306a36Sopenharmony_ci case SENSOR_MC501CB: 630162306a36Sopenharmony_ci return -1; /* don't probe */ 630262306a36Sopenharmony_ci case SENSOR_GC0303: 630362306a36Sopenharmony_ci /* may probe but with no write in reg 0x0010 */ 630462306a36Sopenharmony_ci return -1; /* don't probe */ 630562306a36Sopenharmony_ci case SENSOR_PAS106: 630662306a36Sopenharmony_ci sensor = sif_probe(gspca_dev); 630762306a36Sopenharmony_ci if (sensor >= 0) 630862306a36Sopenharmony_ci return sensor; 630962306a36Sopenharmony_ci break; 631062306a36Sopenharmony_ci } 631162306a36Sopenharmony_ci sensor = vga_2wr_probe(gspca_dev); 631262306a36Sopenharmony_ci if (sensor >= 0) 631362306a36Sopenharmony_ci return sensor; 631462306a36Sopenharmony_ci return vga_3wr_probe(gspca_dev); 631562306a36Sopenharmony_ci} 631662306a36Sopenharmony_ci 631762306a36Sopenharmony_ci/* this function is called at probe time */ 631862306a36Sopenharmony_cistatic int sd_config(struct gspca_dev *gspca_dev, 631962306a36Sopenharmony_ci const struct usb_device_id *id) 632062306a36Sopenharmony_ci{ 632162306a36Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 632262306a36Sopenharmony_ci 632362306a36Sopenharmony_ci if (id->idProduct == 0x301b) 632462306a36Sopenharmony_ci sd->bridge = BRIDGE_ZC301; 632562306a36Sopenharmony_ci else 632662306a36Sopenharmony_ci sd->bridge = BRIDGE_ZC303; 632762306a36Sopenharmony_ci 632862306a36Sopenharmony_ci /* define some sensors from the vendor/product */ 632962306a36Sopenharmony_ci sd->sensor = id->driver_info; 633062306a36Sopenharmony_ci 633162306a36Sopenharmony_ci sd->reg08 = REG08_DEF; 633262306a36Sopenharmony_ci 633362306a36Sopenharmony_ci INIT_WORK(&sd->work, transfer_update); 633462306a36Sopenharmony_ci 633562306a36Sopenharmony_ci return 0; 633662306a36Sopenharmony_ci} 633762306a36Sopenharmony_ci 633862306a36Sopenharmony_cistatic int zcxx_g_volatile_ctrl(struct v4l2_ctrl *ctrl) 633962306a36Sopenharmony_ci{ 634062306a36Sopenharmony_ci struct gspca_dev *gspca_dev = 634162306a36Sopenharmony_ci container_of(ctrl->handler, struct gspca_dev, ctrl_handler); 634262306a36Sopenharmony_ci struct sd *sd = (struct sd *)gspca_dev; 634362306a36Sopenharmony_ci 634462306a36Sopenharmony_ci switch (ctrl->id) { 634562306a36Sopenharmony_ci case V4L2_CID_AUTOGAIN: 634662306a36Sopenharmony_ci gspca_dev->usb_err = 0; 634762306a36Sopenharmony_ci if (ctrl->val && sd->exposure && gspca_dev->streaming) 634862306a36Sopenharmony_ci sd->exposure->val = getexposure(gspca_dev); 634962306a36Sopenharmony_ci return gspca_dev->usb_err; 635062306a36Sopenharmony_ci } 635162306a36Sopenharmony_ci return -EINVAL; 635262306a36Sopenharmony_ci} 635362306a36Sopenharmony_ci 635462306a36Sopenharmony_cistatic int zcxx_s_ctrl(struct v4l2_ctrl *ctrl) 635562306a36Sopenharmony_ci{ 635662306a36Sopenharmony_ci struct gspca_dev *gspca_dev = 635762306a36Sopenharmony_ci container_of(ctrl->handler, struct gspca_dev, ctrl_handler); 635862306a36Sopenharmony_ci struct sd *sd = (struct sd *)gspca_dev; 635962306a36Sopenharmony_ci int i, qual; 636062306a36Sopenharmony_ci 636162306a36Sopenharmony_ci gspca_dev->usb_err = 0; 636262306a36Sopenharmony_ci 636362306a36Sopenharmony_ci if (ctrl->id == V4L2_CID_JPEG_COMPRESSION_QUALITY) { 636462306a36Sopenharmony_ci qual = sd->reg08 >> 1; 636562306a36Sopenharmony_ci 636662306a36Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(jpeg_qual); i++) { 636762306a36Sopenharmony_ci if (ctrl->val <= jpeg_qual[i]) 636862306a36Sopenharmony_ci break; 636962306a36Sopenharmony_ci } 637062306a36Sopenharmony_ci if (i == ARRAY_SIZE(jpeg_qual) || (i > 0 && i == qual && ctrl->val < jpeg_qual[i])) 637162306a36Sopenharmony_ci i--; 637262306a36Sopenharmony_ci 637362306a36Sopenharmony_ci /* With high quality settings we need max bandwidth */ 637462306a36Sopenharmony_ci if (i >= 2 && gspca_dev->streaming && 637562306a36Sopenharmony_ci !gspca_dev->cam.needs_full_bandwidth) 637662306a36Sopenharmony_ci return -EBUSY; 637762306a36Sopenharmony_ci 637862306a36Sopenharmony_ci sd->reg08 = (i << 1) | 1; 637962306a36Sopenharmony_ci ctrl->val = jpeg_qual[i]; 638062306a36Sopenharmony_ci } 638162306a36Sopenharmony_ci 638262306a36Sopenharmony_ci if (!gspca_dev->streaming) 638362306a36Sopenharmony_ci return 0; 638462306a36Sopenharmony_ci 638562306a36Sopenharmony_ci switch (ctrl->id) { 638662306a36Sopenharmony_ci /* gamma/brightness/contrast cluster */ 638762306a36Sopenharmony_ci case V4L2_CID_GAMMA: 638862306a36Sopenharmony_ci setcontrast(gspca_dev, sd->gamma->val, 638962306a36Sopenharmony_ci sd->brightness->val, sd->contrast->val); 639062306a36Sopenharmony_ci break; 639162306a36Sopenharmony_ci /* autogain/exposure cluster */ 639262306a36Sopenharmony_ci case V4L2_CID_AUTOGAIN: 639362306a36Sopenharmony_ci setautogain(gspca_dev, ctrl->val); 639462306a36Sopenharmony_ci if (!gspca_dev->usb_err && !ctrl->val && sd->exposure) 639562306a36Sopenharmony_ci setexposure(gspca_dev, sd->exposure->val); 639662306a36Sopenharmony_ci break; 639762306a36Sopenharmony_ci case V4L2_CID_POWER_LINE_FREQUENCY: 639862306a36Sopenharmony_ci setlightfreq(gspca_dev, ctrl->val); 639962306a36Sopenharmony_ci break; 640062306a36Sopenharmony_ci case V4L2_CID_SHARPNESS: 640162306a36Sopenharmony_ci setsharpness(gspca_dev, ctrl->val); 640262306a36Sopenharmony_ci break; 640362306a36Sopenharmony_ci case V4L2_CID_JPEG_COMPRESSION_QUALITY: 640462306a36Sopenharmony_ci setquality(gspca_dev); 640562306a36Sopenharmony_ci break; 640662306a36Sopenharmony_ci } 640762306a36Sopenharmony_ci return gspca_dev->usb_err; 640862306a36Sopenharmony_ci} 640962306a36Sopenharmony_ci 641062306a36Sopenharmony_cistatic const struct v4l2_ctrl_ops zcxx_ctrl_ops = { 641162306a36Sopenharmony_ci .g_volatile_ctrl = zcxx_g_volatile_ctrl, 641262306a36Sopenharmony_ci .s_ctrl = zcxx_s_ctrl, 641362306a36Sopenharmony_ci}; 641462306a36Sopenharmony_ci 641562306a36Sopenharmony_cistatic int sd_init_controls(struct gspca_dev *gspca_dev) 641662306a36Sopenharmony_ci{ 641762306a36Sopenharmony_ci struct sd *sd = (struct sd *)gspca_dev; 641862306a36Sopenharmony_ci struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; 641962306a36Sopenharmony_ci static const u8 gamma[SENSOR_MAX] = { 642062306a36Sopenharmony_ci [SENSOR_ADCM2700] = 4, 642162306a36Sopenharmony_ci [SENSOR_CS2102] = 4, 642262306a36Sopenharmony_ci [SENSOR_CS2102K] = 5, 642362306a36Sopenharmony_ci [SENSOR_GC0303] = 3, 642462306a36Sopenharmony_ci [SENSOR_GC0305] = 4, 642562306a36Sopenharmony_ci [SENSOR_HDCS2020] = 4, 642662306a36Sopenharmony_ci [SENSOR_HV7131B] = 4, 642762306a36Sopenharmony_ci [SENSOR_HV7131R] = 4, 642862306a36Sopenharmony_ci [SENSOR_ICM105A] = 4, 642962306a36Sopenharmony_ci [SENSOR_MC501CB] = 4, 643062306a36Sopenharmony_ci [SENSOR_MT9V111_1] = 4, 643162306a36Sopenharmony_ci [SENSOR_MT9V111_3] = 4, 643262306a36Sopenharmony_ci [SENSOR_OV7620] = 3, 643362306a36Sopenharmony_ci [SENSOR_OV7630C] = 4, 643462306a36Sopenharmony_ci [SENSOR_PAS106] = 4, 643562306a36Sopenharmony_ci [SENSOR_PAS202B] = 4, 643662306a36Sopenharmony_ci [SENSOR_PB0330] = 4, 643762306a36Sopenharmony_ci [SENSOR_PO2030] = 4, 643862306a36Sopenharmony_ci [SENSOR_TAS5130C] = 3, 643962306a36Sopenharmony_ci }; 644062306a36Sopenharmony_ci 644162306a36Sopenharmony_ci gspca_dev->vdev.ctrl_handler = hdl; 644262306a36Sopenharmony_ci v4l2_ctrl_handler_init(hdl, 8); 644362306a36Sopenharmony_ci sd->brightness = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops, 644462306a36Sopenharmony_ci V4L2_CID_BRIGHTNESS, 0, 255, 1, 128); 644562306a36Sopenharmony_ci sd->contrast = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops, 644662306a36Sopenharmony_ci V4L2_CID_CONTRAST, 0, 255, 1, 128); 644762306a36Sopenharmony_ci sd->gamma = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops, 644862306a36Sopenharmony_ci V4L2_CID_GAMMA, 1, 6, 1, gamma[sd->sensor]); 644962306a36Sopenharmony_ci if (sd->sensor == SENSOR_HV7131R) 645062306a36Sopenharmony_ci sd->exposure = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops, 645162306a36Sopenharmony_ci V4L2_CID_EXPOSURE, 0x30d, 0x493e, 1, 0x927); 645262306a36Sopenharmony_ci else if (sd->sensor == SENSOR_OV7620) 645362306a36Sopenharmony_ci sd->exposure = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops, 645462306a36Sopenharmony_ci V4L2_CID_EXPOSURE, 0, 255, 1, 0x41); 645562306a36Sopenharmony_ci sd->autogain = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops, 645662306a36Sopenharmony_ci V4L2_CID_AUTOGAIN, 0, 1, 1, 1); 645762306a36Sopenharmony_ci if (sd->sensor != SENSOR_OV7630C) 645862306a36Sopenharmony_ci sd->plfreq = v4l2_ctrl_new_std_menu(hdl, &zcxx_ctrl_ops, 645962306a36Sopenharmony_ci V4L2_CID_POWER_LINE_FREQUENCY, 646062306a36Sopenharmony_ci V4L2_CID_POWER_LINE_FREQUENCY_60HZ, 0, 646162306a36Sopenharmony_ci V4L2_CID_POWER_LINE_FREQUENCY_DISABLED); 646262306a36Sopenharmony_ci sd->sharpness = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops, 646362306a36Sopenharmony_ci V4L2_CID_SHARPNESS, 0, 3, 1, 646462306a36Sopenharmony_ci sd->sensor == SENSOR_PO2030 ? 0 : 2); 646562306a36Sopenharmony_ci sd->jpegqual = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops, 646662306a36Sopenharmony_ci V4L2_CID_JPEG_COMPRESSION_QUALITY, 646762306a36Sopenharmony_ci jpeg_qual[0], jpeg_qual[ARRAY_SIZE(jpeg_qual) - 1], 1, 646862306a36Sopenharmony_ci jpeg_qual[REG08_DEF >> 1]); 646962306a36Sopenharmony_ci if (hdl->error) { 647062306a36Sopenharmony_ci pr_err("Could not initialize controls\n"); 647162306a36Sopenharmony_ci return hdl->error; 647262306a36Sopenharmony_ci } 647362306a36Sopenharmony_ci v4l2_ctrl_cluster(3, &sd->gamma); 647462306a36Sopenharmony_ci if (sd->sensor == SENSOR_HV7131R || sd->sensor == SENSOR_OV7620) 647562306a36Sopenharmony_ci v4l2_ctrl_auto_cluster(2, &sd->autogain, 0, true); 647662306a36Sopenharmony_ci return 0; 647762306a36Sopenharmony_ci} 647862306a36Sopenharmony_ci 647962306a36Sopenharmony_ci/* this function is called at probe and resume time */ 648062306a36Sopenharmony_cistatic int sd_init(struct gspca_dev *gspca_dev) 648162306a36Sopenharmony_ci{ 648262306a36Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 648362306a36Sopenharmony_ci struct cam *cam; 648462306a36Sopenharmony_ci int sensor; 648562306a36Sopenharmony_ci static const u8 mode_tb[SENSOR_MAX] = { 648662306a36Sopenharmony_ci [SENSOR_ADCM2700] = 2, 648762306a36Sopenharmony_ci [SENSOR_CS2102] = 1, 648862306a36Sopenharmony_ci [SENSOR_CS2102K] = 1, 648962306a36Sopenharmony_ci [SENSOR_GC0303] = 1, 649062306a36Sopenharmony_ci [SENSOR_GC0305] = 1, 649162306a36Sopenharmony_ci [SENSOR_HDCS2020] = 1, 649262306a36Sopenharmony_ci [SENSOR_HV7131B] = 1, 649362306a36Sopenharmony_ci [SENSOR_HV7131R] = 1, 649462306a36Sopenharmony_ci [SENSOR_ICM105A] = 1, 649562306a36Sopenharmony_ci [SENSOR_MC501CB] = 2, 649662306a36Sopenharmony_ci [SENSOR_MT9V111_1] = 1, 649762306a36Sopenharmony_ci [SENSOR_MT9V111_3] = 1, 649862306a36Sopenharmony_ci [SENSOR_OV7620] = 2, 649962306a36Sopenharmony_ci [SENSOR_OV7630C] = 1, 650062306a36Sopenharmony_ci [SENSOR_PAS106] = 0, 650162306a36Sopenharmony_ci [SENSOR_PAS202B] = 1, 650262306a36Sopenharmony_ci [SENSOR_PB0330] = 1, 650362306a36Sopenharmony_ci [SENSOR_PO2030] = 1, 650462306a36Sopenharmony_ci [SENSOR_TAS5130C] = 1, 650562306a36Sopenharmony_ci }; 650662306a36Sopenharmony_ci 650762306a36Sopenharmony_ci sensor = zcxx_probeSensor(gspca_dev); 650862306a36Sopenharmony_ci if (sensor >= 0) 650962306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "probe sensor -> %04x\n", sensor); 651062306a36Sopenharmony_ci if ((unsigned) force_sensor < SENSOR_MAX) { 651162306a36Sopenharmony_ci sd->sensor = force_sensor; 651262306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "sensor forced to %d\n", 651362306a36Sopenharmony_ci force_sensor); 651462306a36Sopenharmony_ci } else { 651562306a36Sopenharmony_ci switch (sensor) { 651662306a36Sopenharmony_ci case -1: 651762306a36Sopenharmony_ci switch (sd->sensor) { 651862306a36Sopenharmony_ci case SENSOR_MC501CB: 651962306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Sensor MC501CB\n"); 652062306a36Sopenharmony_ci break; 652162306a36Sopenharmony_ci case SENSOR_GC0303: 652262306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Sensor GC0303\n"); 652362306a36Sopenharmony_ci break; 652462306a36Sopenharmony_ci default: 652562306a36Sopenharmony_ci pr_warn("Unknown sensor - set to TAS5130C\n"); 652662306a36Sopenharmony_ci sd->sensor = SENSOR_TAS5130C; 652762306a36Sopenharmony_ci } 652862306a36Sopenharmony_ci break; 652962306a36Sopenharmony_ci case 0: 653062306a36Sopenharmony_ci /* check the sensor type */ 653162306a36Sopenharmony_ci sensor = i2c_read(gspca_dev, 0x00); 653262306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Sensor hv7131 type %d\n", 653362306a36Sopenharmony_ci sensor); 653462306a36Sopenharmony_ci switch (sensor) { 653562306a36Sopenharmony_ci case 0: /* hv7131b */ 653662306a36Sopenharmony_ci case 1: /* hv7131e */ 653762306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor HV7131B\n"); 653862306a36Sopenharmony_ci sd->sensor = SENSOR_HV7131B; 653962306a36Sopenharmony_ci break; 654062306a36Sopenharmony_ci default: 654162306a36Sopenharmony_ci/* case 2: * hv7131r */ 654262306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor HV7131R\n"); 654362306a36Sopenharmony_ci sd->sensor = SENSOR_HV7131R; 654462306a36Sopenharmony_ci break; 654562306a36Sopenharmony_ci } 654662306a36Sopenharmony_ci break; 654762306a36Sopenharmony_ci case 0x02: 654862306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Sensor TAS5130C\n"); 654962306a36Sopenharmony_ci sd->sensor = SENSOR_TAS5130C; 655062306a36Sopenharmony_ci break; 655162306a36Sopenharmony_ci case 0x04: 655262306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor CS2102\n"); 655362306a36Sopenharmony_ci sd->sensor = SENSOR_CS2102; 655462306a36Sopenharmony_ci break; 655562306a36Sopenharmony_ci case 0x08: 655662306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor HDCS2020\n"); 655762306a36Sopenharmony_ci sd->sensor = SENSOR_HDCS2020; 655862306a36Sopenharmony_ci break; 655962306a36Sopenharmony_ci case 0x0a: 656062306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, 656162306a36Sopenharmony_ci "Find Sensor PB0330. Chip revision %x\n", 656262306a36Sopenharmony_ci sd->chip_revision); 656362306a36Sopenharmony_ci sd->sensor = SENSOR_PB0330; 656462306a36Sopenharmony_ci break; 656562306a36Sopenharmony_ci case 0x0c: 656662306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor ICM105A\n"); 656762306a36Sopenharmony_ci sd->sensor = SENSOR_ICM105A; 656862306a36Sopenharmony_ci break; 656962306a36Sopenharmony_ci case 0x0e: 657062306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor PAS202B\n"); 657162306a36Sopenharmony_ci sd->sensor = SENSOR_PAS202B; 657262306a36Sopenharmony_ci break; 657362306a36Sopenharmony_ci case 0x0f: 657462306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor PAS106\n"); 657562306a36Sopenharmony_ci sd->sensor = SENSOR_PAS106; 657662306a36Sopenharmony_ci break; 657762306a36Sopenharmony_ci case 0x10: 657862306a36Sopenharmony_ci case 0x12: 657962306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor TAS5130C\n"); 658062306a36Sopenharmony_ci sd->sensor = SENSOR_TAS5130C; 658162306a36Sopenharmony_ci break; 658262306a36Sopenharmony_ci case 0x11: 658362306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor HV7131R\n"); 658462306a36Sopenharmony_ci sd->sensor = SENSOR_HV7131R; 658562306a36Sopenharmony_ci break; 658662306a36Sopenharmony_ci case 0x13: 658762306a36Sopenharmony_ci case 0x15: 658862306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, 658962306a36Sopenharmony_ci "Sensor MT9V111. Chip revision %04x\n", 659062306a36Sopenharmony_ci sd->chip_revision); 659162306a36Sopenharmony_ci sd->sensor = sd->bridge == BRIDGE_ZC301 659262306a36Sopenharmony_ci ? SENSOR_MT9V111_1 659362306a36Sopenharmony_ci : SENSOR_MT9V111_3; 659462306a36Sopenharmony_ci break; 659562306a36Sopenharmony_ci case 0x14: 659662306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, 659762306a36Sopenharmony_ci "Find Sensor CS2102K?. Chip revision %x\n", 659862306a36Sopenharmony_ci sd->chip_revision); 659962306a36Sopenharmony_ci sd->sensor = SENSOR_CS2102K; 660062306a36Sopenharmony_ci break; 660162306a36Sopenharmony_ci case 0x16: 660262306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor ADCM2700\n"); 660362306a36Sopenharmony_ci sd->sensor = SENSOR_ADCM2700; 660462306a36Sopenharmony_ci break; 660562306a36Sopenharmony_ci case 0x29: 660662306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor GC0305\n"); 660762306a36Sopenharmony_ci sd->sensor = SENSOR_GC0305; 660862306a36Sopenharmony_ci break; 660962306a36Sopenharmony_ci case 0x0303: 661062306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Sensor GC0303\n"); 661162306a36Sopenharmony_ci sd->sensor = SENSOR_GC0303; 661262306a36Sopenharmony_ci break; 661362306a36Sopenharmony_ci case 0x2030: 661462306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor PO2030\n"); 661562306a36Sopenharmony_ci sd->sensor = SENSOR_PO2030; 661662306a36Sopenharmony_ci break; 661762306a36Sopenharmony_ci case 0x7620: 661862306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor OV7620\n"); 661962306a36Sopenharmony_ci sd->sensor = SENSOR_OV7620; 662062306a36Sopenharmony_ci break; 662162306a36Sopenharmony_ci case 0x7631: 662262306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor OV7630C\n"); 662362306a36Sopenharmony_ci sd->sensor = SENSOR_OV7630C; 662462306a36Sopenharmony_ci break; 662562306a36Sopenharmony_ci case 0x7648: 662662306a36Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor OV7648\n"); 662762306a36Sopenharmony_ci sd->sensor = SENSOR_OV7620; /* same sensor (?) */ 662862306a36Sopenharmony_ci break; 662962306a36Sopenharmony_ci default: 663062306a36Sopenharmony_ci pr_err("Unknown sensor %04x\n", sensor); 663162306a36Sopenharmony_ci return -EINVAL; 663262306a36Sopenharmony_ci } 663362306a36Sopenharmony_ci } 663462306a36Sopenharmony_ci if (sensor < 0x20) { 663562306a36Sopenharmony_ci if (sensor == -1 || sensor == 0x10 || sensor == 0x12) 663662306a36Sopenharmony_ci reg_w(gspca_dev, 0x02, 0x0010); 663762306a36Sopenharmony_ci reg_r(gspca_dev, 0x0010); 663862306a36Sopenharmony_ci } 663962306a36Sopenharmony_ci 664062306a36Sopenharmony_ci cam = &gspca_dev->cam; 664162306a36Sopenharmony_ci switch (mode_tb[sd->sensor]) { 664262306a36Sopenharmony_ci case 0: 664362306a36Sopenharmony_ci cam->cam_mode = sif_mode; 664462306a36Sopenharmony_ci cam->nmodes = ARRAY_SIZE(sif_mode); 664562306a36Sopenharmony_ci break; 664662306a36Sopenharmony_ci case 1: 664762306a36Sopenharmony_ci cam->cam_mode = vga_mode; 664862306a36Sopenharmony_ci cam->nmodes = ARRAY_SIZE(vga_mode); 664962306a36Sopenharmony_ci break; 665062306a36Sopenharmony_ci default: 665162306a36Sopenharmony_ci/* case 2: */ 665262306a36Sopenharmony_ci cam->cam_mode = broken_vga_mode; 665362306a36Sopenharmony_ci cam->nmodes = ARRAY_SIZE(broken_vga_mode); 665462306a36Sopenharmony_ci break; 665562306a36Sopenharmony_ci } 665662306a36Sopenharmony_ci 665762306a36Sopenharmony_ci /* switch off the led */ 665862306a36Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); 665962306a36Sopenharmony_ci return gspca_dev->usb_err; 666062306a36Sopenharmony_ci} 666162306a36Sopenharmony_ci 666262306a36Sopenharmony_cistatic int sd_pre_start(struct gspca_dev *gspca_dev) 666362306a36Sopenharmony_ci{ 666462306a36Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 666562306a36Sopenharmony_ci gspca_dev->cam.needs_full_bandwidth = (sd->reg08 >= 4) ? 1 : 0; 666662306a36Sopenharmony_ci return 0; 666762306a36Sopenharmony_ci} 666862306a36Sopenharmony_ci 666962306a36Sopenharmony_cistatic int sd_start(struct gspca_dev *gspca_dev) 667062306a36Sopenharmony_ci{ 667162306a36Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 667262306a36Sopenharmony_ci int mode; 667362306a36Sopenharmony_ci static const struct usb_action *init_tb[SENSOR_MAX][2] = { 667462306a36Sopenharmony_ci [SENSOR_ADCM2700] = 667562306a36Sopenharmony_ci {adcm2700_Initial, adcm2700_InitialScale}, 667662306a36Sopenharmony_ci [SENSOR_CS2102] = 667762306a36Sopenharmony_ci {cs2102_Initial, cs2102_InitialScale}, 667862306a36Sopenharmony_ci [SENSOR_CS2102K] = 667962306a36Sopenharmony_ci {cs2102K_Initial, cs2102K_InitialScale}, 668062306a36Sopenharmony_ci [SENSOR_GC0303] = 668162306a36Sopenharmony_ci {gc0303_Initial, gc0303_InitialScale}, 668262306a36Sopenharmony_ci [SENSOR_GC0305] = 668362306a36Sopenharmony_ci {gc0305_Initial, gc0305_InitialScale}, 668462306a36Sopenharmony_ci [SENSOR_HDCS2020] = 668562306a36Sopenharmony_ci {hdcs2020_Initial, hdcs2020_InitialScale}, 668662306a36Sopenharmony_ci [SENSOR_HV7131B] = 668762306a36Sopenharmony_ci {hv7131b_Initial, hv7131b_InitialScale}, 668862306a36Sopenharmony_ci [SENSOR_HV7131R] = 668962306a36Sopenharmony_ci {hv7131r_Initial, hv7131r_InitialScale}, 669062306a36Sopenharmony_ci [SENSOR_ICM105A] = 669162306a36Sopenharmony_ci {icm105a_Initial, icm105a_InitialScale}, 669262306a36Sopenharmony_ci [SENSOR_MC501CB] = 669362306a36Sopenharmony_ci {mc501cb_Initial, mc501cb_InitialScale}, 669462306a36Sopenharmony_ci [SENSOR_MT9V111_1] = 669562306a36Sopenharmony_ci {mt9v111_1_Initial, mt9v111_1_InitialScale}, 669662306a36Sopenharmony_ci [SENSOR_MT9V111_3] = 669762306a36Sopenharmony_ci {mt9v111_3_Initial, mt9v111_3_InitialScale}, 669862306a36Sopenharmony_ci [SENSOR_OV7620] = 669962306a36Sopenharmony_ci {ov7620_Initial, ov7620_InitialScale}, 670062306a36Sopenharmony_ci [SENSOR_OV7630C] = 670162306a36Sopenharmony_ci {ov7630c_Initial, ov7630c_InitialScale}, 670262306a36Sopenharmony_ci [SENSOR_PAS106] = 670362306a36Sopenharmony_ci {pas106b_Initial, pas106b_InitialScale}, 670462306a36Sopenharmony_ci [SENSOR_PAS202B] = 670562306a36Sopenharmony_ci {pas202b_Initial, pas202b_InitialScale}, 670662306a36Sopenharmony_ci [SENSOR_PB0330] = 670762306a36Sopenharmony_ci {pb0330_Initial, pb0330_InitialScale}, 670862306a36Sopenharmony_ci [SENSOR_PO2030] = 670962306a36Sopenharmony_ci {po2030_Initial, po2030_InitialScale}, 671062306a36Sopenharmony_ci [SENSOR_TAS5130C] = 671162306a36Sopenharmony_ci {tas5130c_Initial, tas5130c_InitialScale}, 671262306a36Sopenharmony_ci }; 671362306a36Sopenharmony_ci 671462306a36Sopenharmony_ci /* create the JPEG header */ 671562306a36Sopenharmony_ci jpeg_define(sd->jpeg_hdr, gspca_dev->pixfmt.height, 671662306a36Sopenharmony_ci gspca_dev->pixfmt.width, 671762306a36Sopenharmony_ci 0x21); /* JPEG 422 */ 671862306a36Sopenharmony_ci 671962306a36Sopenharmony_ci mode = gspca_dev->cam.cam_mode[gspca_dev->curr_mode].priv; 672062306a36Sopenharmony_ci switch (sd->sensor) { 672162306a36Sopenharmony_ci case SENSOR_HV7131R: 672262306a36Sopenharmony_ci zcxx_probeSensor(gspca_dev); 672362306a36Sopenharmony_ci break; 672462306a36Sopenharmony_ci case SENSOR_PAS106: 672562306a36Sopenharmony_ci usb_exchange(gspca_dev, pas106b_Initial_com); 672662306a36Sopenharmony_ci break; 672762306a36Sopenharmony_ci } 672862306a36Sopenharmony_ci usb_exchange(gspca_dev, init_tb[sd->sensor][mode]); 672962306a36Sopenharmony_ci 673062306a36Sopenharmony_ci switch (sd->sensor) { 673162306a36Sopenharmony_ci case SENSOR_ADCM2700: 673262306a36Sopenharmony_ci case SENSOR_GC0305: 673362306a36Sopenharmony_ci case SENSOR_OV7620: 673462306a36Sopenharmony_ci case SENSOR_PO2030: 673562306a36Sopenharmony_ci case SENSOR_TAS5130C: 673662306a36Sopenharmony_ci case SENSOR_GC0303: 673762306a36Sopenharmony_ci/* msleep(100); * ?? */ 673862306a36Sopenharmony_ci reg_r(gspca_dev, 0x0002); /* --> 0x40 */ 673962306a36Sopenharmony_ci reg_w(gspca_dev, 0x09, 0x01ad); /* (from win traces) */ 674062306a36Sopenharmony_ci reg_w(gspca_dev, 0x15, 0x01ae); 674162306a36Sopenharmony_ci if (sd->sensor == SENSOR_TAS5130C) 674262306a36Sopenharmony_ci break; 674362306a36Sopenharmony_ci reg_w(gspca_dev, 0x0d, 0x003a); 674462306a36Sopenharmony_ci reg_w(gspca_dev, 0x02, 0x003b); 674562306a36Sopenharmony_ci reg_w(gspca_dev, 0x00, 0x0038); 674662306a36Sopenharmony_ci break; 674762306a36Sopenharmony_ci case SENSOR_HV7131R: 674862306a36Sopenharmony_ci case SENSOR_PAS202B: 674962306a36Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x003b); 675062306a36Sopenharmony_ci reg_w(gspca_dev, 0x0c, 0x003a); 675162306a36Sopenharmony_ci reg_w(gspca_dev, 0x0b, 0x0039); 675262306a36Sopenharmony_ci if (sd->sensor == SENSOR_HV7131R) 675362306a36Sopenharmony_ci reg_w(gspca_dev, 0x50, ZC3XX_R11D_GLOBALGAIN); 675462306a36Sopenharmony_ci break; 675562306a36Sopenharmony_ci } 675662306a36Sopenharmony_ci 675762306a36Sopenharmony_ci setmatrix(gspca_dev); 675862306a36Sopenharmony_ci switch (sd->sensor) { 675962306a36Sopenharmony_ci case SENSOR_ADCM2700: 676062306a36Sopenharmony_ci case SENSOR_OV7620: 676162306a36Sopenharmony_ci reg_r(gspca_dev, 0x0008); 676262306a36Sopenharmony_ci reg_w(gspca_dev, 0x00, 0x0008); 676362306a36Sopenharmony_ci break; 676462306a36Sopenharmony_ci case SENSOR_PAS202B: 676562306a36Sopenharmony_ci case SENSOR_GC0305: 676662306a36Sopenharmony_ci case SENSOR_HV7131R: 676762306a36Sopenharmony_ci case SENSOR_TAS5130C: 676862306a36Sopenharmony_ci reg_r(gspca_dev, 0x0008); 676962306a36Sopenharmony_ci fallthrough; 677062306a36Sopenharmony_ci case SENSOR_PO2030: 677162306a36Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x0008); 677262306a36Sopenharmony_ci break; 677362306a36Sopenharmony_ci } 677462306a36Sopenharmony_ci setsharpness(gspca_dev, v4l2_ctrl_g_ctrl(sd->sharpness)); 677562306a36Sopenharmony_ci 677662306a36Sopenharmony_ci /* set the gamma tables when not set */ 677762306a36Sopenharmony_ci switch (sd->sensor) { 677862306a36Sopenharmony_ci case SENSOR_CS2102K: /* gamma set in xxx_Initial */ 677962306a36Sopenharmony_ci case SENSOR_HDCS2020: 678062306a36Sopenharmony_ci case SENSOR_OV7630C: 678162306a36Sopenharmony_ci break; 678262306a36Sopenharmony_ci default: 678362306a36Sopenharmony_ci setcontrast(gspca_dev, v4l2_ctrl_g_ctrl(sd->gamma), 678462306a36Sopenharmony_ci v4l2_ctrl_g_ctrl(sd->brightness), 678562306a36Sopenharmony_ci v4l2_ctrl_g_ctrl(sd->contrast)); 678662306a36Sopenharmony_ci break; 678762306a36Sopenharmony_ci } 678862306a36Sopenharmony_ci setmatrix(gspca_dev); /* one more time? */ 678962306a36Sopenharmony_ci switch (sd->sensor) { 679062306a36Sopenharmony_ci case SENSOR_OV7620: 679162306a36Sopenharmony_ci case SENSOR_PAS202B: 679262306a36Sopenharmony_ci reg_r(gspca_dev, 0x0180); /* from win */ 679362306a36Sopenharmony_ci reg_w(gspca_dev, 0x00, 0x0180); 679462306a36Sopenharmony_ci break; 679562306a36Sopenharmony_ci } 679662306a36Sopenharmony_ci setquality(gspca_dev); 679762306a36Sopenharmony_ci /* Start with BRC disabled, transfer_update will enable it if needed */ 679862306a36Sopenharmony_ci reg_w(gspca_dev, 0x00, 0x0007); 679962306a36Sopenharmony_ci if (sd->plfreq) 680062306a36Sopenharmony_ci setlightfreq(gspca_dev, v4l2_ctrl_g_ctrl(sd->plfreq)); 680162306a36Sopenharmony_ci 680262306a36Sopenharmony_ci switch (sd->sensor) { 680362306a36Sopenharmony_ci case SENSOR_ADCM2700: 680462306a36Sopenharmony_ci reg_w(gspca_dev, 0x09, 0x01ad); /* (from win traces) */ 680562306a36Sopenharmony_ci reg_w(gspca_dev, 0x15, 0x01ae); 680662306a36Sopenharmony_ci reg_w(gspca_dev, 0x02, 0x0180); 680762306a36Sopenharmony_ci /* ms-win + */ 680862306a36Sopenharmony_ci reg_w(gspca_dev, 0x40, 0x0117); 680962306a36Sopenharmony_ci break; 681062306a36Sopenharmony_ci case SENSOR_HV7131R: 681162306a36Sopenharmony_ci setexposure(gspca_dev, v4l2_ctrl_g_ctrl(sd->exposure)); 681262306a36Sopenharmony_ci reg_w(gspca_dev, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN); 681362306a36Sopenharmony_ci break; 681462306a36Sopenharmony_ci case SENSOR_GC0305: 681562306a36Sopenharmony_ci case SENSOR_TAS5130C: 681662306a36Sopenharmony_ci reg_w(gspca_dev, 0x09, 0x01ad); /* (from win traces) */ 681762306a36Sopenharmony_ci reg_w(gspca_dev, 0x15, 0x01ae); 681862306a36Sopenharmony_ci fallthrough; 681962306a36Sopenharmony_ci case SENSOR_PAS202B: 682062306a36Sopenharmony_ci case SENSOR_PO2030: 682162306a36Sopenharmony_ci/* reg_w(gspca_dev, 0x40, ZC3XX_R117_GGAIN); in win traces */ 682262306a36Sopenharmony_ci reg_r(gspca_dev, 0x0180); 682362306a36Sopenharmony_ci break; 682462306a36Sopenharmony_ci case SENSOR_OV7620: 682562306a36Sopenharmony_ci reg_w(gspca_dev, 0x09, 0x01ad); 682662306a36Sopenharmony_ci reg_w(gspca_dev, 0x15, 0x01ae); 682762306a36Sopenharmony_ci i2c_read(gspca_dev, 0x13); /*fixme: returns 0xa3 */ 682862306a36Sopenharmony_ci i2c_write(gspca_dev, 0x13, 0xa3, 0x00); 682962306a36Sopenharmony_ci /*fixme: returned value to send? */ 683062306a36Sopenharmony_ci reg_w(gspca_dev, 0x40, 0x0117); 683162306a36Sopenharmony_ci reg_r(gspca_dev, 0x0180); 683262306a36Sopenharmony_ci break; 683362306a36Sopenharmony_ci } 683462306a36Sopenharmony_ci 683562306a36Sopenharmony_ci setautogain(gspca_dev, v4l2_ctrl_g_ctrl(sd->autogain)); 683662306a36Sopenharmony_ci 683762306a36Sopenharmony_ci if (gspca_dev->usb_err < 0) 683862306a36Sopenharmony_ci return gspca_dev->usb_err; 683962306a36Sopenharmony_ci 684062306a36Sopenharmony_ci /* Start the transfer parameters update thread */ 684162306a36Sopenharmony_ci schedule_work(&sd->work); 684262306a36Sopenharmony_ci 684362306a36Sopenharmony_ci return 0; 684462306a36Sopenharmony_ci} 684562306a36Sopenharmony_ci 684662306a36Sopenharmony_ci/* called on streamoff with alt==0 and on disconnect */ 684762306a36Sopenharmony_ci/* the usb_lock is held at entry - restore on exit */ 684862306a36Sopenharmony_cistatic void sd_stop0(struct gspca_dev *gspca_dev) 684962306a36Sopenharmony_ci{ 685062306a36Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 685162306a36Sopenharmony_ci 685262306a36Sopenharmony_ci mutex_unlock(&gspca_dev->usb_lock); 685362306a36Sopenharmony_ci flush_work(&sd->work); 685462306a36Sopenharmony_ci mutex_lock(&gspca_dev->usb_lock); 685562306a36Sopenharmony_ci if (!gspca_dev->present) 685662306a36Sopenharmony_ci return; 685762306a36Sopenharmony_ci send_unknown(gspca_dev, sd->sensor); 685862306a36Sopenharmony_ci} 685962306a36Sopenharmony_ci 686062306a36Sopenharmony_cistatic void sd_pkt_scan(struct gspca_dev *gspca_dev, 686162306a36Sopenharmony_ci u8 *data, 686262306a36Sopenharmony_ci int len) 686362306a36Sopenharmony_ci{ 686462306a36Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 686562306a36Sopenharmony_ci 686662306a36Sopenharmony_ci /* check the JPEG end of frame */ 686762306a36Sopenharmony_ci if (len >= 3 686862306a36Sopenharmony_ci && data[len - 3] == 0xff && data[len - 2] == 0xd9) { 686962306a36Sopenharmony_ci/*fixme: what does the last byte mean?*/ 687062306a36Sopenharmony_ci gspca_frame_add(gspca_dev, LAST_PACKET, 687162306a36Sopenharmony_ci data, len - 1); 687262306a36Sopenharmony_ci return; 687362306a36Sopenharmony_ci } 687462306a36Sopenharmony_ci 687562306a36Sopenharmony_ci /* check the JPEG start of a frame */ 687662306a36Sopenharmony_ci if (data[0] == 0xff && data[1] == 0xd8) { 687762306a36Sopenharmony_ci /* put the JPEG header in the new frame */ 687862306a36Sopenharmony_ci gspca_frame_add(gspca_dev, FIRST_PACKET, 687962306a36Sopenharmony_ci sd->jpeg_hdr, JPEG_HDR_SZ); 688062306a36Sopenharmony_ci 688162306a36Sopenharmony_ci /* remove the webcam's header: 688262306a36Sopenharmony_ci * ff d8 ff fe 00 0e 00 00 ss ss 00 01 ww ww hh hh pp pp 688362306a36Sopenharmony_ci * - 'ss ss' is the frame sequence number (BE) 688462306a36Sopenharmony_ci * - 'ww ww' and 'hh hh' are the window dimensions (BE) 688562306a36Sopenharmony_ci * - 'pp pp' is the packet sequence number (BE) 688662306a36Sopenharmony_ci */ 688762306a36Sopenharmony_ci data += 18; 688862306a36Sopenharmony_ci len -= 18; 688962306a36Sopenharmony_ci } 689062306a36Sopenharmony_ci gspca_frame_add(gspca_dev, INTER_PACKET, data, len); 689162306a36Sopenharmony_ci} 689262306a36Sopenharmony_ci 689362306a36Sopenharmony_cistatic int sd_set_jcomp(struct gspca_dev *gspca_dev, 689462306a36Sopenharmony_ci const struct v4l2_jpegcompression *jcomp) 689562306a36Sopenharmony_ci{ 689662306a36Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 689762306a36Sopenharmony_ci 689862306a36Sopenharmony_ci return v4l2_ctrl_s_ctrl(sd->jpegqual, jcomp->quality); 689962306a36Sopenharmony_ci} 690062306a36Sopenharmony_ci 690162306a36Sopenharmony_cistatic int sd_get_jcomp(struct gspca_dev *gspca_dev, 690262306a36Sopenharmony_ci struct v4l2_jpegcompression *jcomp) 690362306a36Sopenharmony_ci{ 690462306a36Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 690562306a36Sopenharmony_ci 690662306a36Sopenharmony_ci memset(jcomp, 0, sizeof *jcomp); 690762306a36Sopenharmony_ci jcomp->quality = v4l2_ctrl_g_ctrl(sd->jpegqual); 690862306a36Sopenharmony_ci jcomp->jpeg_markers = V4L2_JPEG_MARKER_DHT 690962306a36Sopenharmony_ci | V4L2_JPEG_MARKER_DQT; 691062306a36Sopenharmony_ci return 0; 691162306a36Sopenharmony_ci} 691262306a36Sopenharmony_ci 691362306a36Sopenharmony_ci#if IS_ENABLED(CONFIG_INPUT) 691462306a36Sopenharmony_cistatic int sd_int_pkt_scan(struct gspca_dev *gspca_dev, 691562306a36Sopenharmony_ci u8 *data, /* interrupt packet data */ 691662306a36Sopenharmony_ci int len) /* interrupt packet length */ 691762306a36Sopenharmony_ci{ 691862306a36Sopenharmony_ci if (len == 8 && data[4] == 1) { 691962306a36Sopenharmony_ci input_report_key(gspca_dev->input_dev, KEY_CAMERA, 1); 692062306a36Sopenharmony_ci input_sync(gspca_dev->input_dev); 692162306a36Sopenharmony_ci input_report_key(gspca_dev->input_dev, KEY_CAMERA, 0); 692262306a36Sopenharmony_ci input_sync(gspca_dev->input_dev); 692362306a36Sopenharmony_ci } 692462306a36Sopenharmony_ci 692562306a36Sopenharmony_ci return 0; 692662306a36Sopenharmony_ci} 692762306a36Sopenharmony_ci#endif 692862306a36Sopenharmony_ci 692962306a36Sopenharmony_cistatic const struct sd_desc sd_desc = { 693062306a36Sopenharmony_ci .name = KBUILD_MODNAME, 693162306a36Sopenharmony_ci .config = sd_config, 693262306a36Sopenharmony_ci .init = sd_init, 693362306a36Sopenharmony_ci .init_controls = sd_init_controls, 693462306a36Sopenharmony_ci .isoc_init = sd_pre_start, 693562306a36Sopenharmony_ci .start = sd_start, 693662306a36Sopenharmony_ci .stop0 = sd_stop0, 693762306a36Sopenharmony_ci .pkt_scan = sd_pkt_scan, 693862306a36Sopenharmony_ci .get_jcomp = sd_get_jcomp, 693962306a36Sopenharmony_ci .set_jcomp = sd_set_jcomp, 694062306a36Sopenharmony_ci#if IS_ENABLED(CONFIG_INPUT) 694162306a36Sopenharmony_ci .int_pkt_scan = sd_int_pkt_scan, 694262306a36Sopenharmony_ci#endif 694362306a36Sopenharmony_ci}; 694462306a36Sopenharmony_ci 694562306a36Sopenharmony_cistatic const struct usb_device_id device_table[] = { 694662306a36Sopenharmony_ci {USB_DEVICE(0x03f0, 0x1b07)}, 694762306a36Sopenharmony_ci {USB_DEVICE(0x041e, 0x041e)}, 694862306a36Sopenharmony_ci {USB_DEVICE(0x041e, 0x4017)}, 694962306a36Sopenharmony_ci {USB_DEVICE(0x041e, 0x401c), .driver_info = SENSOR_PAS106}, 695062306a36Sopenharmony_ci {USB_DEVICE(0x041e, 0x401e)}, 695162306a36Sopenharmony_ci {USB_DEVICE(0x041e, 0x401f)}, 695262306a36Sopenharmony_ci {USB_DEVICE(0x041e, 0x4022)}, 695362306a36Sopenharmony_ci {USB_DEVICE(0x041e, 0x4029)}, 695462306a36Sopenharmony_ci {USB_DEVICE(0x041e, 0x4034), .driver_info = SENSOR_PAS106}, 695562306a36Sopenharmony_ci {USB_DEVICE(0x041e, 0x4035), .driver_info = SENSOR_PAS106}, 695662306a36Sopenharmony_ci {USB_DEVICE(0x041e, 0x4036)}, 695762306a36Sopenharmony_ci {USB_DEVICE(0x041e, 0x403a)}, 695862306a36Sopenharmony_ci {USB_DEVICE(0x041e, 0x4051), .driver_info = SENSOR_GC0303}, 695962306a36Sopenharmony_ci {USB_DEVICE(0x041e, 0x4053), .driver_info = SENSOR_GC0303}, 696062306a36Sopenharmony_ci {USB_DEVICE(0x0458, 0x7007)}, 696162306a36Sopenharmony_ci {USB_DEVICE(0x0458, 0x700c)}, 696262306a36Sopenharmony_ci {USB_DEVICE(0x0458, 0x700f)}, 696362306a36Sopenharmony_ci {USB_DEVICE(0x0461, 0x0a00)}, 696462306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x089d), .driver_info = SENSOR_MC501CB}, 696562306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x08a0)}, 696662306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x08a1)}, 696762306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x08a2)}, 696862306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x08a3)}, 696962306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x08a6)}, 697062306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x08a7)}, 697162306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x08a9)}, 697262306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x08aa)}, 697362306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x08ac)}, 697462306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x08ad)}, 697562306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x08ae)}, 697662306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x08af)}, 697762306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x08b9)}, 697862306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x08d7)}, 697962306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x08d8)}, 698062306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x08d9)}, 698162306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x08da)}, 698262306a36Sopenharmony_ci {USB_DEVICE(0x046d, 0x08dd), .driver_info = SENSOR_MC501CB}, 698362306a36Sopenharmony_ci {USB_DEVICE(0x0471, 0x0325), .driver_info = SENSOR_PAS106}, 698462306a36Sopenharmony_ci {USB_DEVICE(0x0471, 0x0326), .driver_info = SENSOR_PAS106}, 698562306a36Sopenharmony_ci {USB_DEVICE(0x0471, 0x032d), .driver_info = SENSOR_PAS106}, 698662306a36Sopenharmony_ci {USB_DEVICE(0x0471, 0x032e), .driver_info = SENSOR_PAS106}, 698762306a36Sopenharmony_ci {USB_DEVICE(0x055f, 0xc005)}, 698862306a36Sopenharmony_ci {USB_DEVICE(0x055f, 0xd003)}, 698962306a36Sopenharmony_ci {USB_DEVICE(0x055f, 0xd004)}, 699062306a36Sopenharmony_ci {USB_DEVICE(0x0698, 0x2003)}, 699162306a36Sopenharmony_ci {USB_DEVICE(0x0ac8, 0x0301), .driver_info = SENSOR_PAS106}, 699262306a36Sopenharmony_ci {USB_DEVICE(0x0ac8, 0x0302), .driver_info = SENSOR_PAS106}, 699362306a36Sopenharmony_ci {USB_DEVICE(0x0ac8, 0x301b)}, 699462306a36Sopenharmony_ci {USB_DEVICE(0x0ac8, 0x303b)}, 699562306a36Sopenharmony_ci {USB_DEVICE(0x0ac8, 0x305b)}, 699662306a36Sopenharmony_ci {USB_DEVICE(0x0ac8, 0x307b)}, 699762306a36Sopenharmony_ci {USB_DEVICE(0x10fd, 0x0128)}, 699862306a36Sopenharmony_ci {USB_DEVICE(0x10fd, 0x804d)}, 699962306a36Sopenharmony_ci {USB_DEVICE(0x10fd, 0x8050)}, 700062306a36Sopenharmony_ci {} /* end of entry */ 700162306a36Sopenharmony_ci}; 700262306a36Sopenharmony_ciMODULE_DEVICE_TABLE(usb, device_table); 700362306a36Sopenharmony_ci 700462306a36Sopenharmony_ci/* -- device connect -- */ 700562306a36Sopenharmony_cistatic int sd_probe(struct usb_interface *intf, 700662306a36Sopenharmony_ci const struct usb_device_id *id) 700762306a36Sopenharmony_ci{ 700862306a36Sopenharmony_ci return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd), 700962306a36Sopenharmony_ci THIS_MODULE); 701062306a36Sopenharmony_ci} 701162306a36Sopenharmony_ci 701262306a36Sopenharmony_ci/* USB driver */ 701362306a36Sopenharmony_cistatic struct usb_driver sd_driver = { 701462306a36Sopenharmony_ci .name = KBUILD_MODNAME, 701562306a36Sopenharmony_ci .id_table = device_table, 701662306a36Sopenharmony_ci .probe = sd_probe, 701762306a36Sopenharmony_ci .disconnect = gspca_disconnect, 701862306a36Sopenharmony_ci#ifdef CONFIG_PM 701962306a36Sopenharmony_ci .suspend = gspca_suspend, 702062306a36Sopenharmony_ci .resume = gspca_resume, 702162306a36Sopenharmony_ci .reset_resume = gspca_resume, 702262306a36Sopenharmony_ci#endif 702362306a36Sopenharmony_ci}; 702462306a36Sopenharmony_ci 702562306a36Sopenharmony_cimodule_usb_driver(sd_driver); 702662306a36Sopenharmony_ci 702762306a36Sopenharmony_cimodule_param(force_sensor, int, 0644); 702862306a36Sopenharmony_ciMODULE_PARM_DESC(force_sensor, 702962306a36Sopenharmony_ci "Force sensor. Only for experts!!!"); 7030