18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Z-Star/Vimicro zc301/zc302p/vc30x driver 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2009-2012 Jean-Francois Moine <http://moinejf.free.fr> 68c2ecf20Sopenharmony_ci * Copyright (C) 2004 2005 2006 Michel Xhaard mxhaard@magic.fr 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#include <linux/input.h> 128c2ecf20Sopenharmony_ci#include "gspca.h" 138c2ecf20Sopenharmony_ci#include "jpeg.h" 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ciMODULE_AUTHOR("Jean-Francois Moine <http://moinejf.free.fr>, Serge A. Suchkov <Serge.A.S@tochka.ru>"); 168c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("GSPCA ZC03xx/VC3xx USB Camera Driver"); 178c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL"); 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_cistatic int force_sensor = -1; 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci#define REG08_DEF 3 /* default JPEG compression (75%) */ 228c2ecf20Sopenharmony_ci#include "zc3xx-reg.h" 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci/* specific webcam descriptor */ 258c2ecf20Sopenharmony_cistruct sd { 268c2ecf20Sopenharmony_ci struct gspca_dev gspca_dev; /* !! must be the first item */ 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci struct { /* gamma/brightness/contrast control cluster */ 298c2ecf20Sopenharmony_ci struct v4l2_ctrl *gamma; 308c2ecf20Sopenharmony_ci struct v4l2_ctrl *brightness; 318c2ecf20Sopenharmony_ci struct v4l2_ctrl *contrast; 328c2ecf20Sopenharmony_ci }; 338c2ecf20Sopenharmony_ci struct { /* autogain/exposure control cluster */ 348c2ecf20Sopenharmony_ci struct v4l2_ctrl *autogain; 358c2ecf20Sopenharmony_ci struct v4l2_ctrl *exposure; 368c2ecf20Sopenharmony_ci }; 378c2ecf20Sopenharmony_ci struct v4l2_ctrl *plfreq; 388c2ecf20Sopenharmony_ci struct v4l2_ctrl *sharpness; 398c2ecf20Sopenharmony_ci struct v4l2_ctrl *jpegqual; 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci struct work_struct work; 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci u8 reg08; /* webcam compression quality */ 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci u8 bridge; 468c2ecf20Sopenharmony_ci u8 sensor; /* Type of image sensor chip */ 478c2ecf20Sopenharmony_ci u16 chip_revision; 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ci u8 jpeg_hdr[JPEG_HDR_SZ]; 508c2ecf20Sopenharmony_ci}; 518c2ecf20Sopenharmony_cienum bridges { 528c2ecf20Sopenharmony_ci BRIDGE_ZC301, 538c2ecf20Sopenharmony_ci BRIDGE_ZC303, 548c2ecf20Sopenharmony_ci}; 558c2ecf20Sopenharmony_cienum sensors { 568c2ecf20Sopenharmony_ci SENSOR_ADCM2700, 578c2ecf20Sopenharmony_ci SENSOR_CS2102, 588c2ecf20Sopenharmony_ci SENSOR_CS2102K, 598c2ecf20Sopenharmony_ci SENSOR_GC0303, 608c2ecf20Sopenharmony_ci SENSOR_GC0305, 618c2ecf20Sopenharmony_ci SENSOR_HDCS2020, 628c2ecf20Sopenharmony_ci SENSOR_HV7131B, 638c2ecf20Sopenharmony_ci SENSOR_HV7131R, 648c2ecf20Sopenharmony_ci SENSOR_ICM105A, 658c2ecf20Sopenharmony_ci SENSOR_MC501CB, 668c2ecf20Sopenharmony_ci SENSOR_MT9V111_1, /* (mi360soc) zc301 */ 678c2ecf20Sopenharmony_ci SENSOR_MT9V111_3, /* (mi360soc) zc303 */ 688c2ecf20Sopenharmony_ci SENSOR_OV7620, /* OV7648 - same values */ 698c2ecf20Sopenharmony_ci SENSOR_OV7630C, 708c2ecf20Sopenharmony_ci SENSOR_PAS106, 718c2ecf20Sopenharmony_ci SENSOR_PAS202B, 728c2ecf20Sopenharmony_ci SENSOR_PB0330, 738c2ecf20Sopenharmony_ci SENSOR_PO2030, 748c2ecf20Sopenharmony_ci SENSOR_TAS5130C, 758c2ecf20Sopenharmony_ci SENSOR_MAX 768c2ecf20Sopenharmony_ci}; 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_cistatic const struct v4l2_pix_format vga_mode[] = { 798c2ecf20Sopenharmony_ci {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 808c2ecf20Sopenharmony_ci .bytesperline = 320, 818c2ecf20Sopenharmony_ci .sizeimage = 320 * 240 * 3 / 8 + 590, 828c2ecf20Sopenharmony_ci .colorspace = V4L2_COLORSPACE_JPEG, 838c2ecf20Sopenharmony_ci .priv = 1}, 848c2ecf20Sopenharmony_ci {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 858c2ecf20Sopenharmony_ci .bytesperline = 640, 868c2ecf20Sopenharmony_ci .sizeimage = 640 * 480 * 3 / 8 + 590, 878c2ecf20Sopenharmony_ci .colorspace = V4L2_COLORSPACE_JPEG, 888c2ecf20Sopenharmony_ci .priv = 0}, 898c2ecf20Sopenharmony_ci}; 908c2ecf20Sopenharmony_ci 918c2ecf20Sopenharmony_cistatic const struct v4l2_pix_format broken_vga_mode[] = { 928c2ecf20Sopenharmony_ci {320, 232, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 938c2ecf20Sopenharmony_ci .bytesperline = 320, 948c2ecf20Sopenharmony_ci .sizeimage = 320 * 232 * 4 / 8 + 590, 958c2ecf20Sopenharmony_ci .colorspace = V4L2_COLORSPACE_JPEG, 968c2ecf20Sopenharmony_ci .priv = 1}, 978c2ecf20Sopenharmony_ci {640, 472, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 988c2ecf20Sopenharmony_ci .bytesperline = 640, 998c2ecf20Sopenharmony_ci .sizeimage = 640 * 472 * 3 / 8 + 590, 1008c2ecf20Sopenharmony_ci .colorspace = V4L2_COLORSPACE_JPEG, 1018c2ecf20Sopenharmony_ci .priv = 0}, 1028c2ecf20Sopenharmony_ci}; 1038c2ecf20Sopenharmony_ci 1048c2ecf20Sopenharmony_cistatic const struct v4l2_pix_format sif_mode[] = { 1058c2ecf20Sopenharmony_ci {176, 144, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 1068c2ecf20Sopenharmony_ci .bytesperline = 176, 1078c2ecf20Sopenharmony_ci .sizeimage = 176 * 144 * 3 / 8 + 590, 1088c2ecf20Sopenharmony_ci .colorspace = V4L2_COLORSPACE_JPEG, 1098c2ecf20Sopenharmony_ci .priv = 1}, 1108c2ecf20Sopenharmony_ci {352, 288, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 1118c2ecf20Sopenharmony_ci .bytesperline = 352, 1128c2ecf20Sopenharmony_ci .sizeimage = 352 * 288 * 3 / 8 + 590, 1138c2ecf20Sopenharmony_ci .colorspace = V4L2_COLORSPACE_JPEG, 1148c2ecf20Sopenharmony_ci .priv = 0}, 1158c2ecf20Sopenharmony_ci}; 1168c2ecf20Sopenharmony_ci 1178c2ecf20Sopenharmony_ci/* 1188c2ecf20Sopenharmony_ci * Bridge reg08 bits 1-2 -> JPEG quality conversion table. Note the highest 1198c2ecf20Sopenharmony_ci * quality setting is not usable as USB 1 does not have enough bandwidth. 1208c2ecf20Sopenharmony_ci */ 1218c2ecf20Sopenharmony_cistatic u8 jpeg_qual[] = {50, 75, 87, /* 94 */}; 1228c2ecf20Sopenharmony_ci 1238c2ecf20Sopenharmony_ci/* usb exchanges */ 1248c2ecf20Sopenharmony_cistruct usb_action { 1258c2ecf20Sopenharmony_ci u8 req; 1268c2ecf20Sopenharmony_ci u8 val; 1278c2ecf20Sopenharmony_ci u16 idx; 1288c2ecf20Sopenharmony_ci}; 1298c2ecf20Sopenharmony_ci 1308c2ecf20Sopenharmony_cistatic const struct usb_action adcm2700_Initial[] = { 1318c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 1328c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R002_CLOCKSELECT}, /* 00,02,04,cc */ 1338c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 1348c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 1358c2ecf20Sopenharmony_ci {0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,d3,cc */ 1368c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 1378c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 1388c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 1398c2ecf20Sopenharmony_ci {0xa0, 0xd8, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d8,cc */ 1408c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 1418c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 1428c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 1438c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 1448c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 1458c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 1468c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 1478c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 1488c2ecf20Sopenharmony_ci {0xa0, 0xde, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,de,cc */ 1498c2ecf20Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */ 1508c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x0400}, /* 04,00,00,bb */ 1518c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 1528c2ecf20Sopenharmony_ci {0xbb, 0x0f, 0x140f}, /* 14,0f,0f,bb */ 1538c2ecf20Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */ 1548c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 1558c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 1568c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 1578c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 1588c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 1598c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 1608c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R116_RGAIN}, /* 01,16,58,cc */ 1618c2ecf20Sopenharmony_ci {0xa0, 0x5a, ZC3XX_R118_BGAIN}, /* 01,18,5a,cc */ 1628c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 1638c2ecf20Sopenharmony_ci {0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,d3,cc */ 1648c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x0408}, /* 04,00,08,bb */ 1658c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0200}, /* 00,02,00,dd */ 1668c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x0400}, /* 04,00,00,bb */ 1678c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 1688c2ecf20Sopenharmony_ci {0xbb, 0x0f, 0x140f}, /* 14,0f,0f,bb */ 1698c2ecf20Sopenharmony_ci {0xbb, 0xe0, 0x0c2e}, /* 0c,e0,2e,bb */ 1708c2ecf20Sopenharmony_ci {0xbb, 0x01, 0x2000}, /* 20,01,00,bb */ 1718c2ecf20Sopenharmony_ci {0xbb, 0x96, 0x2400}, /* 24,96,00,bb */ 1728c2ecf20Sopenharmony_ci {0xbb, 0x06, 0x1006}, /* 10,06,06,bb */ 1738c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 1748c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 1758c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 1768c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 1778c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 1788c2ecf20Sopenharmony_ci {0xbb, 0x5f, 0x2090}, /* 20,5f,90,bb */ 1798c2ecf20Sopenharmony_ci {0xbb, 0x01, 0x8000}, /* 80,01,00,bb */ 1808c2ecf20Sopenharmony_ci {0xbb, 0x09, 0x8400}, /* 84,09,00,bb */ 1818c2ecf20Sopenharmony_ci {0xbb, 0x86, 0x0002}, /* 00,86,02,bb */ 1828c2ecf20Sopenharmony_ci {0xbb, 0xe6, 0x0401}, /* 04,e6,01,bb */ 1838c2ecf20Sopenharmony_ci {0xbb, 0x86, 0x0802}, /* 08,86,02,bb */ 1848c2ecf20Sopenharmony_ci {0xbb, 0xe6, 0x0c01}, /* 0c,e6,01,bb */ 1858c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 1868c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 1878c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0000}, /* 00,fe,00,aa */ 1888c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 1898c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 1908c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 1918c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0020}, /* 00,fe,20,aa */ 1928c2ecf20Sopenharmony_ci/*mswin+*/ 1938c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, 1948c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0002}, 1958c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 1968c2ecf20Sopenharmony_ci {0xaa, 0xb4, 0xcd37}, 1978c2ecf20Sopenharmony_ci {0xaa, 0xa4, 0x0004}, 1988c2ecf20Sopenharmony_ci {0xaa, 0xa8, 0x0007}, 1998c2ecf20Sopenharmony_ci {0xaa, 0xac, 0x0004}, 2008c2ecf20Sopenharmony_ci/*mswin-*/ 2018c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 2028c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 2038c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 2048c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0000}, /* 00,fe,00,aa */ 2058c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 2068c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 2078c2ecf20Sopenharmony_ci {0xbb, 0x04, 0x0400}, /* 04,04,00,bb */ 2088c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */ 2098c2ecf20Sopenharmony_ci {0xbb, 0x01, 0x0400}, /* 04,01,00,bb */ 2108c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 2118c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 2128c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 2138c2ecf20Sopenharmony_ci {0xbb, 0x41, 0x2803}, /* 28,41,03,bb */ 2148c2ecf20Sopenharmony_ci {0xbb, 0x40, 0x2c03}, /* 2c,40,03,bb */ 2158c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 2168c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */ 2178c2ecf20Sopenharmony_ci {} 2188c2ecf20Sopenharmony_ci}; 2198c2ecf20Sopenharmony_cistatic const struct usb_action adcm2700_InitialScale[] = { 2208c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 2218c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */ 2228c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 2238c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 2248c2ecf20Sopenharmony_ci {0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,d3,cc */ 2258c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 2268c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 2278c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 2288c2ecf20Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d0,cc */ 2298c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 2308c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 2318c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 2328c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 2338c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 2348c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 2358c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 2368c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 2378c2ecf20Sopenharmony_ci {0xa0, 0xd8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,d8,cc */ 2388c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */ 2398c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x0400}, /* 04,00,00,bb */ 2408c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 2418c2ecf20Sopenharmony_ci {0xbb, 0x0f, 0x140f}, /* 14,0f,0f,bb */ 2428c2ecf20Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */ 2438c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 2448c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 2458c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 2468c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 2478c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 2488c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 2498c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R116_RGAIN}, /* 01,16,58,cc */ 2508c2ecf20Sopenharmony_ci {0xa0, 0x5a, ZC3XX_R118_BGAIN}, /* 01,18,5a,cc */ 2518c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 2528c2ecf20Sopenharmony_ci {0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,d3,cc */ 2538c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x0408}, /* 04,00,08,bb */ 2548c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0200}, /* 00,02,00,dd */ 2558c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x0400}, /* 04,00,00,bb */ 2568c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0050}, /* 00,00,50,dd */ 2578c2ecf20Sopenharmony_ci {0xbb, 0x0f, 0x140f}, /* 14,0f,0f,bb */ 2588c2ecf20Sopenharmony_ci {0xbb, 0xe0, 0x0c2e}, /* 0c,e0,2e,bb */ 2598c2ecf20Sopenharmony_ci {0xbb, 0x01, 0x2000}, /* 20,01,00,bb */ 2608c2ecf20Sopenharmony_ci {0xbb, 0x96, 0x2400}, /* 24,96,00,bb */ 2618c2ecf20Sopenharmony_ci {0xbb, 0x06, 0x1006}, /* 10,06,06,bb */ 2628c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 2638c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 2648c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 2658c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 2668c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 2678c2ecf20Sopenharmony_ci {0xbb, 0x5f, 0x2090}, /* 20,5f,90,bb */ 2688c2ecf20Sopenharmony_ci {0xbb, 0x01, 0x8000}, /* 80,01,00,bb */ 2698c2ecf20Sopenharmony_ci {0xbb, 0x09, 0x8400}, /* 84,09,00,bb */ 2708c2ecf20Sopenharmony_ci {0xbb, 0x86, 0x0002}, /* 00,88,02,bb */ 2718c2ecf20Sopenharmony_ci {0xbb, 0xe6, 0x0401}, /* 04,e6,01,bb */ 2728c2ecf20Sopenharmony_ci {0xbb, 0x86, 0x0802}, /* 08,88,02,bb */ 2738c2ecf20Sopenharmony_ci {0xbb, 0xe6, 0x0c01}, /* 0c,e6,01,bb */ 2748c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 2758c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 2768c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0000}, /* 00,fe,00,aa */ 2778c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 2788c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 2798c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 2808c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0020}, /* 00,fe,20,aa */ 2818c2ecf20Sopenharmony_ci /*******/ 2828c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 2838c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 2848c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 2858c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0000}, /* 00,fe,00,aa */ 2868c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 2878c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0010}, /* 00,00,10,dd */ 2888c2ecf20Sopenharmony_ci {0xbb, 0x04, 0x0400}, /* 04,04,00,bb */ 2898c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */ 2908c2ecf20Sopenharmony_ci {0xbb, 0x01, 0x0400}, /* 04,01,00,bb */ 2918c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 2928c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 2938c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 2948c2ecf20Sopenharmony_ci {0xbb, 0x41, 0x2803}, /* 28,41,03,bb */ 2958c2ecf20Sopenharmony_ci {0xbb, 0x40, 0x2c03}, /* 2c,40,03,bb */ 2968c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 2978c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */ 2988c2ecf20Sopenharmony_ci {} 2998c2ecf20Sopenharmony_ci}; 3008c2ecf20Sopenharmony_cistatic const struct usb_action adcm2700_50HZ[] = { 3018c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 3028c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 3038c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 3048c2ecf20Sopenharmony_ci {0xbb, 0x05, 0x8400}, /* 84,05,00,bb */ 3058c2ecf20Sopenharmony_ci {0xbb, 0xd0, 0xb007}, /* b0,d0,07,bb */ 3068c2ecf20Sopenharmony_ci {0xbb, 0xa0, 0xb80f}, /* b8,a0,0f,bb */ 3078c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 3088c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */ 3098c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x00d0}, /* 00,26,d0,aa */ 3108c2ecf20Sopenharmony_ci {0xaa, 0x28, 0x0002}, /* 00,28,02,aa */ 3118c2ecf20Sopenharmony_ci {} 3128c2ecf20Sopenharmony_ci}; 3138c2ecf20Sopenharmony_cistatic const struct usb_action adcm2700_60HZ[] = { 3148c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 3158c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 3168c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 3178c2ecf20Sopenharmony_ci {0xbb, 0x07, 0x8400}, /* 84,07,00,bb */ 3188c2ecf20Sopenharmony_ci {0xbb, 0x82, 0xb006}, /* b0,82,06,bb */ 3198c2ecf20Sopenharmony_ci {0xbb, 0x04, 0xb80d}, /* b8,04,0d,bb */ 3208c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 3218c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */ 3228c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x0057}, /* 00,26,57,aa */ 3238c2ecf20Sopenharmony_ci {0xaa, 0x28, 0x0002}, /* 00,28,02,aa */ 3248c2ecf20Sopenharmony_ci {} 3258c2ecf20Sopenharmony_ci}; 3268c2ecf20Sopenharmony_cistatic const struct usb_action adcm2700_NoFliker[] = { 3278c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 3288c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0002}, /* 00,fe,02,aa */ 3298c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0a,cc */ 3308c2ecf20Sopenharmony_ci {0xbb, 0x07, 0x8400}, /* 84,07,00,bb */ 3318c2ecf20Sopenharmony_ci {0xbb, 0x05, 0xb000}, /* b0,05,00,bb */ 3328c2ecf20Sopenharmony_ci {0xbb, 0xa0, 0xb801}, /* b8,a0,01,bb */ 3338c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 3348c2ecf20Sopenharmony_ci {0xaa, 0xfe, 0x0010}, /* 00,fe,10,aa */ 3358c2ecf20Sopenharmony_ci {} 3368c2ecf20Sopenharmony_ci}; 3378c2ecf20Sopenharmony_cistatic const struct usb_action cs2102_InitialScale[] = { /* 320x240 */ 3388c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 3398c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 3408c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT}, 3418c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 3428c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R080_HBLANKHIGH}, 3438c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R081_HBLANKLOW}, 3448c2ecf20Sopenharmony_ci {0xa0, 0x30, ZC3XX_R083_RGAINADDR}, 3458c2ecf20Sopenharmony_ci {0xa0, 0x31, ZC3XX_R084_GGAINADDR}, 3468c2ecf20Sopenharmony_ci {0xa0, 0x32, ZC3XX_R085_BGAINADDR}, 3478c2ecf20Sopenharmony_ci {0xa0, 0x23, ZC3XX_R086_EXPTIMEHIGH}, 3488c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R087_EXPTIMEMID}, 3498c2ecf20Sopenharmony_ci {0xa0, 0x25, ZC3XX_R088_EXPTIMELOW}, 3508c2ecf20Sopenharmony_ci {0xa0, 0xb3, ZC3XX_R08B_I2CDEVICEADDR}, 3518c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 3528c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 3538c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 3548c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 3558c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 3568c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 3578c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 3588c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 3598c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 3608c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 3618c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 3628c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0008}, 3638c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0000}, 3648c2ecf20Sopenharmony_ci {0xaa, 0x11, 0x0000}, 3658c2ecf20Sopenharmony_ci {0xaa, 0x12, 0x0089}, 3668c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0000}, 3678c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x00e9}, 3688c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0000}, 3698c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0000}, 3708c2ecf20Sopenharmony_ci {0xaa, 0x0b, 0x0004}, 3718c2ecf20Sopenharmony_ci {0xaa, 0x30, 0x0030}, 3728c2ecf20Sopenharmony_ci {0xaa, 0x31, 0x0030}, 3738c2ecf20Sopenharmony_ci {0xaa, 0x32, 0x0030}, 3748c2ecf20Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 3758c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 3768c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 3778c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 3788c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 3798c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 3808c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 3818c2ecf20Sopenharmony_ci {0xa0, 0x10, 0x01ae}, 3828c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 3838c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 3848c2ecf20Sopenharmony_ci {0xa0, 0x68, ZC3XX_R18D_YTARGET}, 3858c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 3868c2ecf20Sopenharmony_ci {} 3878c2ecf20Sopenharmony_ci}; 3888c2ecf20Sopenharmony_ci 3898c2ecf20Sopenharmony_cistatic const struct usb_action cs2102_Initial[] = { /* 640x480 */ 3908c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 3918c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 3928c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT}, 3938c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 3948c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R080_HBLANKHIGH}, 3958c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R081_HBLANKLOW}, 3968c2ecf20Sopenharmony_ci {0xa0, 0x30, ZC3XX_R083_RGAINADDR}, 3978c2ecf20Sopenharmony_ci {0xa0, 0x31, ZC3XX_R084_GGAINADDR}, 3988c2ecf20Sopenharmony_ci {0xa0, 0x32, ZC3XX_R085_BGAINADDR}, 3998c2ecf20Sopenharmony_ci {0xa0, 0x23, ZC3XX_R086_EXPTIMEHIGH}, 4008c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R087_EXPTIMEMID}, 4018c2ecf20Sopenharmony_ci {0xa0, 0x25, ZC3XX_R088_EXPTIMELOW}, 4028c2ecf20Sopenharmony_ci {0xa0, 0xb3, ZC3XX_R08B_I2CDEVICEADDR}, 4038c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 4048c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 4058c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 4068c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 4078c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 4088c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 4098c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 4108c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 4118c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 4128c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 4138c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 4148c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0008}, 4158c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0000}, 4168c2ecf20Sopenharmony_ci {0xaa, 0x11, 0x0001}, 4178c2ecf20Sopenharmony_ci {0xaa, 0x12, 0x0087}, 4188c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0001}, 4198c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x00e7}, 4208c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0000}, 4218c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0000}, 4228c2ecf20Sopenharmony_ci {0xaa, 0x0b, 0x0004}, 4238c2ecf20Sopenharmony_ci {0xaa, 0x30, 0x0030}, 4248c2ecf20Sopenharmony_ci {0xaa, 0x31, 0x0030}, 4258c2ecf20Sopenharmony_ci {0xaa, 0x32, 0x0030}, 4268c2ecf20Sopenharmony_ci {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 4278c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 4288c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 4298c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 4308c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 4318c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 4328c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 4338c2ecf20Sopenharmony_ci {0xa0, 0x15, 0x01ae}, 4348c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 4358c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 4368c2ecf20Sopenharmony_ci {0xa0, 0x68, ZC3XX_R18D_YTARGET}, 4378c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 4388c2ecf20Sopenharmony_ci {} 4398c2ecf20Sopenharmony_ci}; 4408c2ecf20Sopenharmony_cistatic const struct usb_action cs2102_50HZScale[] = { 4418c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 4428c2ecf20Sopenharmony_ci {0xaa, 0x23, 0x0001}, 4438c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x005f}, 4448c2ecf20Sopenharmony_ci {0xaa, 0x25, 0x0090}, 4458c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x00dd}, 4468c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH}, 4478c2ecf20Sopenharmony_ci {0xa0, 0xbf, ZC3XX_R191_EXPOSURELIMITMID}, 4488c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, 4498c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 4508c2ecf20Sopenharmony_ci {0xa0, 0x3a, ZC3XX_R196_ANTIFLICKERMID}, 4518c2ecf20Sopenharmony_ci {0xa0, 0x98, ZC3XX_R197_ANTIFLICKERLOW}, 4528c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 4538c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 4548c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 4558c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 4568c2ecf20Sopenharmony_ci {0xa0, 0xdd, ZC3XX_R01D_HSYNC_0}, 4578c2ecf20Sopenharmony_ci {0xa0, 0xe4, ZC3XX_R01E_HSYNC_1}, 4588c2ecf20Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R01F_HSYNC_2}, 4598c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 4608c2ecf20Sopenharmony_ci {} 4618c2ecf20Sopenharmony_ci}; 4628c2ecf20Sopenharmony_cistatic const struct usb_action cs2102_50HZ[] = { 4638c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 4648c2ecf20Sopenharmony_ci {0xaa, 0x23, 0x0000}, 4658c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x00af}, 4668c2ecf20Sopenharmony_ci {0xaa, 0x25, 0x00c8}, 4678c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x0068}, 4688c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R190_EXPOSURELIMITHIGH}, 4698c2ecf20Sopenharmony_ci {0xa0, 0x5f, ZC3XX_R191_EXPOSURELIMITMID}, 4708c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R192_EXPOSURELIMITLOW}, 4718c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 4728c2ecf20Sopenharmony_ci {0xa0, 0x1d, ZC3XX_R196_ANTIFLICKERMID}, 4738c2ecf20Sopenharmony_ci {0xa0, 0x4c, ZC3XX_R197_ANTIFLICKERLOW}, 4748c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 4758c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 4768c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 4778c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 4788c2ecf20Sopenharmony_ci {0xa0, 0x68, ZC3XX_R01D_HSYNC_0}, 4798c2ecf20Sopenharmony_ci {0xa0, 0xe3, ZC3XX_R01E_HSYNC_1}, 4808c2ecf20Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R01F_HSYNC_2}, 4818c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 4828c2ecf20Sopenharmony_ci {} 4838c2ecf20Sopenharmony_ci}; 4848c2ecf20Sopenharmony_cistatic const struct usb_action cs2102_60HZScale[] = { 4858c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 4868c2ecf20Sopenharmony_ci {0xaa, 0x23, 0x0001}, 4878c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x0055}, 4888c2ecf20Sopenharmony_ci {0xaa, 0x25, 0x00cc}, 4898c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x003f}, 4908c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH}, 4918c2ecf20Sopenharmony_ci {0xa0, 0xab, ZC3XX_R191_EXPOSURELIMITMID}, 4928c2ecf20Sopenharmony_ci {0xa0, 0x98, ZC3XX_R192_EXPOSURELIMITLOW}, 4938c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 4948c2ecf20Sopenharmony_ci {0xa0, 0x30, ZC3XX_R196_ANTIFLICKERMID}, 4958c2ecf20Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R197_ANTIFLICKERLOW}, 4968c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 4978c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 4988c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 4998c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 5008c2ecf20Sopenharmony_ci {0xa0, 0x39, ZC3XX_R01D_HSYNC_0}, 5018c2ecf20Sopenharmony_ci {0xa0, 0x70, ZC3XX_R01E_HSYNC_1}, 5028c2ecf20Sopenharmony_ci {0xa0, 0xb0, ZC3XX_R01F_HSYNC_2}, 5038c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 5048c2ecf20Sopenharmony_ci {} 5058c2ecf20Sopenharmony_ci}; 5068c2ecf20Sopenharmony_cistatic const struct usb_action cs2102_60HZ[] = { 5078c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 5088c2ecf20Sopenharmony_ci {0xaa, 0x23, 0x0000}, 5098c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x00aa}, 5108c2ecf20Sopenharmony_ci {0xaa, 0x25, 0x00e6}, 5118c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x003f}, 5128c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R190_EXPOSURELIMITHIGH}, 5138c2ecf20Sopenharmony_ci {0xa0, 0x55, ZC3XX_R191_EXPOSURELIMITMID}, 5148c2ecf20Sopenharmony_ci {0xa0, 0xcc, ZC3XX_R192_EXPOSURELIMITLOW}, 5158c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 5168c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R196_ANTIFLICKERMID}, 5178c2ecf20Sopenharmony_ci {0xa0, 0x6a, ZC3XX_R197_ANTIFLICKERLOW}, 5188c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 5198c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 5208c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 5218c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 5228c2ecf20Sopenharmony_ci {0xa0, 0x3f, ZC3XX_R01D_HSYNC_0}, 5238c2ecf20Sopenharmony_ci {0xa0, 0xa5, ZC3XX_R01E_HSYNC_1}, 5248c2ecf20Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R01F_HSYNC_2}, 5258c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 5268c2ecf20Sopenharmony_ci {} 5278c2ecf20Sopenharmony_ci}; 5288c2ecf20Sopenharmony_cistatic const struct usb_action cs2102_NoFlikerScale[] = { 5298c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 5308c2ecf20Sopenharmony_ci {0xaa, 0x23, 0x0001}, 5318c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x005f}, 5328c2ecf20Sopenharmony_ci {0xaa, 0x25, 0x0000}, 5338c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x0001}, 5348c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH}, 5358c2ecf20Sopenharmony_ci {0xa0, 0xbf, ZC3XX_R191_EXPOSURELIMITMID}, 5368c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, 5378c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 5388c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 5398c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R197_ANTIFLICKERLOW}, 5408c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 5418c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 5428c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 5438c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 5448c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R01D_HSYNC_0}, 5458c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R01E_HSYNC_1}, 5468c2ecf20Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R01F_HSYNC_2}, 5478c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 5488c2ecf20Sopenharmony_ci {} 5498c2ecf20Sopenharmony_ci}; 5508c2ecf20Sopenharmony_cistatic const struct usb_action cs2102_NoFliker[] = { 5518c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 5528c2ecf20Sopenharmony_ci {0xaa, 0x23, 0x0000}, 5538c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x00af}, 5548c2ecf20Sopenharmony_ci {0xaa, 0x25, 0x0080}, 5558c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x0001}, 5568c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R190_EXPOSURELIMITHIGH}, 5578c2ecf20Sopenharmony_ci {0xa0, 0x5f, ZC3XX_R191_EXPOSURELIMITMID}, 5588c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW}, 5598c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 5608c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 5618c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R197_ANTIFLICKERLOW}, 5628c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 5638c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 5648c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 5658c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 5668c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R01D_HSYNC_0}, 5678c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R01E_HSYNC_1}, 5688c2ecf20Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R01F_HSYNC_2}, 5698c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 5708c2ecf20Sopenharmony_ci {} 5718c2ecf20Sopenharmony_ci}; 5728c2ecf20Sopenharmony_ci 5738c2ecf20Sopenharmony_ci/* CS2102_KOCOM */ 5748c2ecf20Sopenharmony_cistatic const struct usb_action cs2102K_InitialScale[] = { 5758c2ecf20Sopenharmony_ci {0xa0, 0x11, ZC3XX_R002_CLOCKSELECT}, 5768c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 5778c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT}, 5788c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 5798c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 5808c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 5818c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 5828c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 5838c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 5848c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 5858c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 5868c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 5878c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 5888c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 5898c2ecf20Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 5908c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 5918c2ecf20Sopenharmony_ci {0xa0, 0x55, ZC3XX_R08B_I2CDEVICEADDR}, 5928c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 5938c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 5948c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 5958c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 5968c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R092_I2CADDRESSSELECT}, 5978c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 5988c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 5998c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 6008c2ecf20Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R092_I2CADDRESSSELECT}, 6018c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 6028c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 6038c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 6048c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R092_I2CADDRESSSELECT}, 6058c2ecf20Sopenharmony_ci {0xa0, 0x7c, ZC3XX_R093_I2CSETVALUE}, 6068c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 6078c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 6088c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R092_I2CADDRESSSELECT}, 6098c2ecf20Sopenharmony_ci {0xa0, 0xa3, ZC3XX_R093_I2CSETVALUE}, 6108c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 6118c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 6128c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R092_I2CADDRESSSELECT}, 6138c2ecf20Sopenharmony_ci {0xa0, 0xfb, ZC3XX_R093_I2CSETVALUE}, 6148c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 6158c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 6168c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R092_I2CADDRESSSELECT}, 6178c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 6188c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 6198c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 6208c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R092_I2CADDRESSSELECT}, 6218c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R093_I2CSETVALUE}, 6228c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 6238c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 6248c2ecf20Sopenharmony_ci {0xa0, 0x09, ZC3XX_R092_I2CADDRESSSELECT}, 6258c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R093_I2CSETVALUE}, 6268c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 6278c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 6288c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R092_I2CADDRESSSELECT}, 6298c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 6308c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 6318c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 6328c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R092_I2CADDRESSSELECT}, 6338c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 6348c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 6358c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 6368c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R092_I2CADDRESSSELECT}, 6378c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 6388c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 6398c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 6408c2ecf20Sopenharmony_ci {0xa0, 0x11, ZC3XX_R092_I2CADDRESSSELECT}, 6418c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 6428c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 6438c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 6448c2ecf20Sopenharmony_ci {0xa0, 0x12, ZC3XX_R092_I2CADDRESSSELECT}, 6458c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 6468c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 6478c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 6488c2ecf20Sopenharmony_ci {0xa0, 0x15, ZC3XX_R092_I2CADDRESSSELECT}, 6498c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 6508c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 6518c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 6528c2ecf20Sopenharmony_ci {0xa0, 0x16, ZC3XX_R092_I2CADDRESSSELECT}, 6538c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE}, 6548c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 6558c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 6568c2ecf20Sopenharmony_ci {0xa0, 0x17, ZC3XX_R092_I2CADDRESSSELECT}, 6578c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE}, 6588c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 6598c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 6608c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 6618c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 6628c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 6638c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 6648c2ecf20Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, 6658c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 6668c2ecf20Sopenharmony_ci {0xa0, 0x78, ZC3XX_R18D_YTARGET}, 6678c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 6688c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 6698c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 6708c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 6718c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, 6728c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, 6738c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 6748c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 6758c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 6768c2ecf20Sopenharmony_ci {0xa0, 0x01, 0x01b1}, 6778c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 6788c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R116_RGAIN}, 6798c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 6808c2ecf20Sopenharmony_ci {0xa0, 0x4c, ZC3XX_R118_BGAIN}, 6818c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 6828c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 6838c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 6848c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R120_GAMMA00}, /* gamma 4 */ 6858c2ecf20Sopenharmony_ci {0xa0, 0x38, ZC3XX_R121_GAMMA01}, 6868c2ecf20Sopenharmony_ci {0xa0, 0x59, ZC3XX_R122_GAMMA02}, 6878c2ecf20Sopenharmony_ci {0xa0, 0x79, ZC3XX_R123_GAMMA03}, 6888c2ecf20Sopenharmony_ci {0xa0, 0x92, ZC3XX_R124_GAMMA04}, 6898c2ecf20Sopenharmony_ci {0xa0, 0xa7, ZC3XX_R125_GAMMA05}, 6908c2ecf20Sopenharmony_ci {0xa0, 0xb9, ZC3XX_R126_GAMMA06}, 6918c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R127_GAMMA07}, 6928c2ecf20Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R128_GAMMA08}, 6938c2ecf20Sopenharmony_ci {0xa0, 0xdf, ZC3XX_R129_GAMMA09}, 6948c2ecf20Sopenharmony_ci {0xa0, 0xe7, ZC3XX_R12A_GAMMA0A}, 6958c2ecf20Sopenharmony_ci {0xa0, 0xee, ZC3XX_R12B_GAMMA0B}, 6968c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R12C_GAMMA0C}, 6978c2ecf20Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R12D_GAMMA0D}, 6988c2ecf20Sopenharmony_ci {0xa0, 0xfc, ZC3XX_R12E_GAMMA0E}, 6998c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, 7008c2ecf20Sopenharmony_ci {0xa0, 0x26, ZC3XX_R130_GAMMA10}, 7018c2ecf20Sopenharmony_ci {0xa0, 0x22, ZC3XX_R131_GAMMA11}, 7028c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R132_GAMMA12}, 7038c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R133_GAMMA13}, 7048c2ecf20Sopenharmony_ci {0xa0, 0x16, ZC3XX_R134_GAMMA14}, 7058c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R135_GAMMA15}, 7068c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R136_GAMMA16}, 7078c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R137_GAMMA17}, 7088c2ecf20Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R138_GAMMA18}, 7098c2ecf20Sopenharmony_ci {0xa0, 0x09, ZC3XX_R139_GAMMA19}, 7108c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R13A_GAMMA1A}, 7118c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R13B_GAMMA1B}, 7128c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R13C_GAMMA1C}, 7138c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R13D_GAMMA1D}, 7148c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R13E_GAMMA1E}, 7158c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R13F_GAMMA1F}, 7168c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R10A_RGB00}, /* matrix */ 7178c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10B_RGB01}, 7188c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10C_RGB02}, 7198c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10D_RGB10}, 7208c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R10E_RGB11}, 7218c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10F_RGB12}, 7228c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R110_RGB20}, 7238c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R111_RGB21}, 7248c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R112_RGB22}, 7258c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 7268c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 7278c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 7288c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 7298c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 7308c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 7318c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 7328c2ecf20Sopenharmony_ci {0xa0, 0x22, ZC3XX_R093_I2CSETVALUE}, 7338c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 7348c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 7358c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 7368c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 7378c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 7388c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 7398c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 7408c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 7418c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 7428c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 7438c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 7448c2ecf20Sopenharmony_ci {0xa0, 0x22, ZC3XX_R093_I2CSETVALUE}, 7458c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 7468c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 7478c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 7488c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 7498c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 7508c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 7518c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, 7528c2ecf20Sopenharmony_ci {0xa0, 0x22, ZC3XX_R0A4_EXPOSURETIMELOW}, 7538c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 7548c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 7558c2ecf20Sopenharmony_ci {0xa0, 0xee, ZC3XX_R192_EXPOSURELIMITLOW}, 7568c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 7578c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 7588c2ecf20Sopenharmony_ci {0xa0, 0x3a, ZC3XX_R197_ANTIFLICKERLOW}, 7598c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 7608c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 7618c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, 7628c2ecf20Sopenharmony_ci {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, 7638c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, 7648c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R01E_HSYNC_1}, 7658c2ecf20Sopenharmony_ci {0xa0, 0x19, ZC3XX_R01F_HSYNC_2}, 7668c2ecf20Sopenharmony_ci {0xa0, 0x1f, ZC3XX_R020_HSYNC_3}, 7678c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 7688c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 7698c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 7708c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 7718c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R116_RGAIN}, 7728c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 7738c2ecf20Sopenharmony_ci {0xa0, 0x4c, ZC3XX_R118_BGAIN}, 7748c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 7758c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 7768c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 7778c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 7788c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 7798c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 7808c2ecf20Sopenharmony_ci {0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE}, 7818c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 7828c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 7838c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 7848c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 7858c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 7868c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 7878c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 7888c2ecf20Sopenharmony_ci {0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE}, 7898c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 7908c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 7918c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 7928c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 7938c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 7948c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 7958c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 7968c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 7978c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 7988c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 7998c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 8008c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 8018c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 8028c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 8038c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 8048c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 8058c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 8068c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 8078c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 8088c2ecf20Sopenharmony_ci {0xa0, 0x96, ZC3XX_R093_I2CSETVALUE}, 8098c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 8108c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 8118c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 8128c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 8138c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 8148c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 8158c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 8168c2ecf20Sopenharmony_ci {0xa0, 0x96, ZC3XX_R093_I2CSETVALUE}, 8178c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 8188c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 8198c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 8208c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 8218c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 8228c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 8238c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 8248c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 8258c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 8268c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 8278c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 8288c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 8298c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 8308c2ecf20Sopenharmony_ci {} 8318c2ecf20Sopenharmony_ci}; 8328c2ecf20Sopenharmony_ci 8338c2ecf20Sopenharmony_cistatic const struct usb_action cs2102K_Initial[] = { 8348c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 8358c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 8368c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 8378c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT}, 8388c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 8398c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 8408c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 8418c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 8428c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 8438c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 8448c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 8458c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 8468c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 8478c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 8488c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 8498c2ecf20Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 8508c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 8518c2ecf20Sopenharmony_ci/*fixme: next sequence = i2c exchanges*/ 8528c2ecf20Sopenharmony_ci {0xa0, 0x55, ZC3XX_R08B_I2CDEVICEADDR}, 8538c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 8548c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 8558c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 8568c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 8578c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R092_I2CADDRESSSELECT}, 8588c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 8598c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 8608c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 8618c2ecf20Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R092_I2CADDRESSSELECT}, 8628c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 8638c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 8648c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 8658c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R092_I2CADDRESSSELECT}, 8668c2ecf20Sopenharmony_ci {0xa0, 0x7b, ZC3XX_R093_I2CSETVALUE}, 8678c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 8688c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 8698c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R092_I2CADDRESSSELECT}, 8708c2ecf20Sopenharmony_ci {0xa0, 0xa3, ZC3XX_R093_I2CSETVALUE}, 8718c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 8728c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 8738c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R092_I2CADDRESSSELECT}, 8748c2ecf20Sopenharmony_ci {0xa0, 0xfb, ZC3XX_R093_I2CSETVALUE}, 8758c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 8768c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 8778c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R092_I2CADDRESSSELECT}, 8788c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 8798c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 8808c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 8818c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R092_I2CADDRESSSELECT}, 8828c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R093_I2CSETVALUE}, 8838c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 8848c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 8858c2ecf20Sopenharmony_ci {0xa0, 0x09, ZC3XX_R092_I2CADDRESSSELECT}, 8868c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R093_I2CSETVALUE}, 8878c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 8888c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 8898c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R092_I2CADDRESSSELECT}, 8908c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 8918c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 8928c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 8938c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R092_I2CADDRESSSELECT}, 8948c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 8958c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 8968c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 8978c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R092_I2CADDRESSSELECT}, 8988c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 8998c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 9008c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 9018c2ecf20Sopenharmony_ci {0xa0, 0x11, ZC3XX_R092_I2CADDRESSSELECT}, 9028c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 9038c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 9048c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 9058c2ecf20Sopenharmony_ci {0xa0, 0x12, ZC3XX_R092_I2CADDRESSSELECT}, 9068c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R093_I2CSETVALUE}, 9078c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 9088c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 9098c2ecf20Sopenharmony_ci {0xa0, 0x15, ZC3XX_R092_I2CADDRESSSELECT}, 9108c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 9118c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 9128c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 9138c2ecf20Sopenharmony_ci {0xa0, 0x16, ZC3XX_R092_I2CADDRESSSELECT}, 9148c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE}, 9158c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 9168c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 9178c2ecf20Sopenharmony_ci {0xa0, 0x17, ZC3XX_R092_I2CADDRESSSELECT}, 9188c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE}, 9198c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 9208c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 9218c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 9228c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 9238c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 9248c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 9258c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION}, 9268c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 9278c2ecf20Sopenharmony_ci {0xa0, 0x78, ZC3XX_R18D_YTARGET}, 9288c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 9298c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 9308c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 9318c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 9328c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, 9338c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, 9348c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 9358c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 9368c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 9378c2ecf20Sopenharmony_ci {0xa0, 0x01, 0x01b1}, 9388c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 9398c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R116_RGAIN}, 9408c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 9418c2ecf20Sopenharmony_ci {0xa0, 0x4c, ZC3XX_R118_BGAIN}, 9428c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 9438c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 9448c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 9458c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R120_GAMMA00}, /* gamma 4 */ 9468c2ecf20Sopenharmony_ci {0xa0, 0x38, ZC3XX_R121_GAMMA01}, 9478c2ecf20Sopenharmony_ci {0xa0, 0x59, ZC3XX_R122_GAMMA02}, 9488c2ecf20Sopenharmony_ci {0xa0, 0x79, ZC3XX_R123_GAMMA03}, 9498c2ecf20Sopenharmony_ci {0xa0, 0x92, ZC3XX_R124_GAMMA04}, 9508c2ecf20Sopenharmony_ci {0xa0, 0xa7, ZC3XX_R125_GAMMA05}, 9518c2ecf20Sopenharmony_ci {0xa0, 0xb9, ZC3XX_R126_GAMMA06}, 9528c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R127_GAMMA07}, 9538c2ecf20Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R128_GAMMA08}, 9548c2ecf20Sopenharmony_ci {0xa0, 0xdf, ZC3XX_R129_GAMMA09}, 9558c2ecf20Sopenharmony_ci {0xa0, 0xe7, ZC3XX_R12A_GAMMA0A}, 9568c2ecf20Sopenharmony_ci {0xa0, 0xee, ZC3XX_R12B_GAMMA0B}, 9578c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R12C_GAMMA0C}, 9588c2ecf20Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R12D_GAMMA0D}, 9598c2ecf20Sopenharmony_ci {0xa0, 0xfc, ZC3XX_R12E_GAMMA0E}, 9608c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, 9618c2ecf20Sopenharmony_ci {0xa0, 0x26, ZC3XX_R130_GAMMA10}, 9628c2ecf20Sopenharmony_ci {0xa0, 0x22, ZC3XX_R131_GAMMA11}, 9638c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R132_GAMMA12}, 9648c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R133_GAMMA13}, 9658c2ecf20Sopenharmony_ci {0xa0, 0x16, ZC3XX_R134_GAMMA14}, 9668c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R135_GAMMA15}, 9678c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R136_GAMMA16}, 9688c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R137_GAMMA17}, 9698c2ecf20Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R138_GAMMA18}, 9708c2ecf20Sopenharmony_ci {0xa0, 0x09, ZC3XX_R139_GAMMA19}, 9718c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R13A_GAMMA1A}, 9728c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R13B_GAMMA1B}, 9738c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R13C_GAMMA1C}, 9748c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R13D_GAMMA1D}, 9758c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R13E_GAMMA1E}, 9768c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R13F_GAMMA1F}, 9778c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R10A_RGB00}, /* matrix */ 9788c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10B_RGB01}, 9798c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10C_RGB02}, 9808c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10D_RGB10}, 9818c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R10E_RGB11}, 9828c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10F_RGB12}, 9838c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R110_RGB20}, 9848c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R111_RGB21}, 9858c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R112_RGB22}, 9868c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 9878c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 9888c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 9898c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 9908c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 9918c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 9928c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 9938c2ecf20Sopenharmony_ci {0xa0, 0x22, ZC3XX_R093_I2CSETVALUE}, 9948c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 9958c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 9968c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 9978c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 9988c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 9998c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 10008c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 10018c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 10028c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 10038c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 10048c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 10058c2ecf20Sopenharmony_ci {0xa0, 0x22, ZC3XX_R093_I2CSETVALUE}, 10068c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 10078c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 10088c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 10098c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 10108c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 10118c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 10128c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, 10138c2ecf20Sopenharmony_ci {0xa0, 0x22, ZC3XX_R0A4_EXPOSURETIMELOW}, 10148c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 10158c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 10168c2ecf20Sopenharmony_ci {0xa0, 0xee, ZC3XX_R192_EXPOSURELIMITLOW}, 10178c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 10188c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 10198c2ecf20Sopenharmony_ci {0xa0, 0x3a, ZC3XX_R197_ANTIFLICKERLOW}, 10208c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 10218c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 10228c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, 10238c2ecf20Sopenharmony_ci {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, 10248c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, 10258c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R01E_HSYNC_1}, 10268c2ecf20Sopenharmony_ci {0xa0, 0x19, ZC3XX_R01F_HSYNC_2}, 10278c2ecf20Sopenharmony_ci {0xa0, 0x1f, ZC3XX_R020_HSYNC_3}, 10288c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 10298c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 10308c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 10318c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 10328c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R116_RGAIN}, 10338c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 10348c2ecf20Sopenharmony_ci {0xa0, 0x4c, ZC3XX_R118_BGAIN}, 10358c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 10368c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 10378c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 10388c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 10398c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 10408c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 10418c2ecf20Sopenharmony_ci {0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE}, 10428c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 10438c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 10448c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 10458c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 10468c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 10478c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 10488c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 10498c2ecf20Sopenharmony_ci {0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE}, 10508c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 10518c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 10528c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 10538c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 10548c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 10558c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 10568c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 10578c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 10588c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 10598c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 10608c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 10618c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 10628c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 10638c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 10648c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 10658c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 10668c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 10678c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 10688c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 10698c2ecf20Sopenharmony_ci {0xa0, 0x96, ZC3XX_R093_I2CSETVALUE}, 10708c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 10718c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 10728c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 10738c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 10748c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 10758c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 10768c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 10778c2ecf20Sopenharmony_ci {0xa0, 0x96, ZC3XX_R093_I2CSETVALUE}, 10788c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 10798c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 10808c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 10818c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 10828c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 10838c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 10848c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 10858c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 10868c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 10878c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 10888c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 10898c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 10908c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 10918c2ecf20Sopenharmony_ci/*fixme:what does the next sequence?*/ 10928c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 10938c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 10948c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 10958c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 10968c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 10978c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 10988c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 10998c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 11008c2ecf20Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R093_I2CSETVALUE}, 11018c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11028c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11038c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 11048c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 11058c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11068c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11078c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 11088c2ecf20Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R093_I2CSETVALUE}, 11098c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11108c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11118c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 11128c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R093_I2CSETVALUE}, 11138c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11148c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11158c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 11168c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 11178c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11188c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11198c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 11208c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING}, 11218c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 11228c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 11238c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 11248c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 11258c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 11268c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11278c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11288c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 11298c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R093_I2CSETVALUE}, 11308c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11318c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11328c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 11338c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 11348c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11358c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11368c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 11378c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R093_I2CSETVALUE}, 11388c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11398c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11408c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 11418c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 11428c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11438c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11448c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 11458c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 11468c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11478c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11488c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 11498c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 11508c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 11518c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 11528c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 11538c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 11548c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11558c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11568c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 11578c2ecf20Sopenharmony_ci {0xa0, 0x44, ZC3XX_R093_I2CSETVALUE}, 11588c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11598c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11608c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 11618c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 11628c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11638c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11648c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 11658c2ecf20Sopenharmony_ci {0xa0, 0x44, ZC3XX_R093_I2CSETVALUE}, 11668c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11678c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11688c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 11698c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 11708c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11718c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11728c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 11738c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 11748c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11758c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11768c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 11778c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 11788c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 11798c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 11808c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT}, 11818c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 11828c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11838c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11848c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT}, 11858c2ecf20Sopenharmony_ci {0xa0, 0x7e, ZC3XX_R093_I2CSETVALUE}, 11868c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11878c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11888c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 11898c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R093_I2CSETVALUE}, 11908c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11918c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11928c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT}, 11938c2ecf20Sopenharmony_ci {0xa0, 0x7e, ZC3XX_R093_I2CSETVALUE}, 11948c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11958c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 11968c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT}, 11978c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R093_I2CSETVALUE}, 11988c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 11998c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 12008c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT}, 12018c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R093_I2CSETVALUE}, 12028c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R094_I2CWRITEACK}, 12038c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 12048c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 12058c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 12068c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 12078c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 12088c2ecf20Sopenharmony_ci {} 12098c2ecf20Sopenharmony_ci}; 12108c2ecf20Sopenharmony_ci 12118c2ecf20Sopenharmony_cistatic const struct usb_action gc0305_Initial[] = { /* 640x480 */ 12128c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 12138c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 12148c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 12158c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R002_CLOCKSELECT}, /* 00,02,04,cc */ 12168c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 12178c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 12188c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 12198c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */ 12208c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 12218c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 12228c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 12238c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 12248c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 12258c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 12268c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 12278c2ecf20Sopenharmony_ci {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e6,cc */ 12288c2ecf20Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */ 12298c2ecf20Sopenharmony_ci {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc */ 12308c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0002}, /* 00,13,02,aa */ 12318c2ecf20Sopenharmony_ci {0xaa, 0x15, 0x0003}, /* 00,15,03,aa */ 12328c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0000}, /* 00,01,00,aa */ 12338c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0000}, /* 00,02,00,aa */ 12348c2ecf20Sopenharmony_ci {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa */ 12358c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x0017}, /* 00,1c,17,aa */ 12368c2ecf20Sopenharmony_ci {0xaa, 0x1d, 0x0080}, /* 00,1d,80,aa */ 12378c2ecf20Sopenharmony_ci {0xaa, 0x1f, 0x0008}, /* 00,1f,08,aa */ 12388c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x0012}, /* 00,21,12,aa */ 12398c2ecf20Sopenharmony_ci {0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,82,cc */ 12408c2ecf20Sopenharmony_ci {0xa0, 0x83, ZC3XX_R087_EXPTIMEMID}, /* 00,87,83,cc */ 12418c2ecf20Sopenharmony_ci {0xa0, 0x84, ZC3XX_R088_EXPTIMELOW}, /* 00,88,84,cc */ 12428c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */ 12438c2ecf20Sopenharmony_ci {0xaa, 0x0a, 0x0000}, /* 00,0a,00,aa */ 12448c2ecf20Sopenharmony_ci {0xaa, 0x0b, 0x00b0}, /* 00,0b,b0,aa */ 12458c2ecf20Sopenharmony_ci {0xaa, 0x0c, 0x0000}, /* 00,0c,00,aa */ 12468c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x00b0}, /* 00,0d,b0,aa */ 12478c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0000}, /* 00,0e,00,aa */ 12488c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x00b0}, /* 00,0f,b0,aa */ 12498c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 12508c2ecf20Sopenharmony_ci {0xaa, 0x11, 0x00b0}, /* 00,11,b0,aa */ 12518c2ecf20Sopenharmony_ci {0xaa, 0x16, 0x0001}, /* 00,16,01,aa */ 12528c2ecf20Sopenharmony_ci {0xaa, 0x17, 0x00e6}, /* 00,17,e6,aa */ 12538c2ecf20Sopenharmony_ci {0xaa, 0x18, 0x0002}, /* 00,18,02,aa */ 12548c2ecf20Sopenharmony_ci {0xaa, 0x19, 0x0086}, /* 00,19,86,aa */ 12558c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 12568c2ecf20Sopenharmony_ci {0xaa, 0x1b, 0x0020}, /* 00,1b,20,aa */ 12578c2ecf20Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,b7,cc */ 12588c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 12598c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 12608c2ecf20Sopenharmony_ci {0xa0, 0x76, ZC3XX_R189_AWBSTATUS}, /* 01,89,76,cc */ 12618c2ecf20Sopenharmony_ci {0xa0, 0x09, 0x01ad}, /* 01,ad,09,cc */ 12628c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 12638c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 12648c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 12658c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 12668c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,60,cc */ 12678c2ecf20Sopenharmony_ci {0xa0, 0x85, ZC3XX_R18D_YTARGET}, /* 01,8d,85,cc */ 12688c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x011e}, /* 01,1e,00,cc */ 12698c2ecf20Sopenharmony_ci {0xa0, 0x52, ZC3XX_R116_RGAIN}, /* 01,16,52,cc */ 12708c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, /* 01,17,40,cc */ 12718c2ecf20Sopenharmony_ci {0xa0, 0x52, ZC3XX_R118_BGAIN}, /* 01,18,52,cc */ 12728c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R113_RGB03}, /* 01,13,03,cc */ 12738c2ecf20Sopenharmony_ci {} 12748c2ecf20Sopenharmony_ci}; 12758c2ecf20Sopenharmony_cistatic const struct usb_action gc0305_InitialScale[] = { /* 320x240 */ 12768c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 12778c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 12788c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 12798c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */ 12808c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 12818c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 12828c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 12838c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */ 12848c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 12858c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 12868c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 12878c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 12888c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 12898c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 12908c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 12918c2ecf20Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e8,cc */ 12928c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */ 12938c2ecf20Sopenharmony_ci {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc */ 12948c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0000}, /* 00,13,00,aa */ 12958c2ecf20Sopenharmony_ci {0xaa, 0x15, 0x0001}, /* 00,15,01,aa */ 12968c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0000}, /* 00,01,00,aa */ 12978c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0000}, /* 00,02,00,aa */ 12988c2ecf20Sopenharmony_ci {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa */ 12998c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x0017}, /* 00,1c,17,aa */ 13008c2ecf20Sopenharmony_ci {0xaa, 0x1d, 0x0080}, /* 00,1d,80,aa */ 13018c2ecf20Sopenharmony_ci {0xaa, 0x1f, 0x0008}, /* 00,1f,08,aa */ 13028c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x0012}, /* 00,21,12,aa */ 13038c2ecf20Sopenharmony_ci {0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,82,cc */ 13048c2ecf20Sopenharmony_ci {0xa0, 0x83, ZC3XX_R087_EXPTIMEMID}, /* 00,87,83,cc */ 13058c2ecf20Sopenharmony_ci {0xa0, 0x84, ZC3XX_R088_EXPTIMELOW}, /* 00,88,84,cc */ 13068c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */ 13078c2ecf20Sopenharmony_ci {0xaa, 0x0a, 0x0000}, /* 00,0a,00,aa */ 13088c2ecf20Sopenharmony_ci {0xaa, 0x0b, 0x00b0}, /* 00,0b,b0,aa */ 13098c2ecf20Sopenharmony_ci {0xaa, 0x0c, 0x0000}, /* 00,0c,00,aa */ 13108c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x00b0}, /* 00,0d,b0,aa */ 13118c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0000}, /* 00,0e,00,aa */ 13128c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x00b0}, /* 00,0f,b0,aa */ 13138c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 13148c2ecf20Sopenharmony_ci {0xaa, 0x11, 0x00b0}, /* 00,11,b0,aa */ 13158c2ecf20Sopenharmony_ci {0xaa, 0x16, 0x0001}, /* 00,16,01,aa */ 13168c2ecf20Sopenharmony_ci {0xaa, 0x17, 0x00e8}, /* 00,17,e8,aa */ 13178c2ecf20Sopenharmony_ci {0xaa, 0x18, 0x0002}, /* 00,18,02,aa */ 13188c2ecf20Sopenharmony_ci {0xaa, 0x19, 0x0088}, /* 00,19,88,aa */ 13198c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 13208c2ecf20Sopenharmony_ci {0xaa, 0x1b, 0x0020}, /* 00,1b,20,aa */ 13218c2ecf20Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,b7,cc */ 13228c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 13238c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 13248c2ecf20Sopenharmony_ci {0xa0, 0x76, ZC3XX_R189_AWBSTATUS}, /* 01,89,76,cc */ 13258c2ecf20Sopenharmony_ci {0xa0, 0x09, 0x01ad}, /* 01,ad,09,cc */ 13268c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 13278c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 13288c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 13298c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 13308c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,60,cc */ 13318c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x011e}, /* 01,1e,00,cc */ 13328c2ecf20Sopenharmony_ci {0xa0, 0x52, ZC3XX_R116_RGAIN}, /* 01,16,52,cc */ 13338c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, /* 01,17,40,cc */ 13348c2ecf20Sopenharmony_ci {0xa0, 0x52, ZC3XX_R118_BGAIN}, /* 01,18,52,cc */ 13358c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R113_RGB03}, /* 01,13,03,cc */ 13368c2ecf20Sopenharmony_ci {} 13378c2ecf20Sopenharmony_ci}; 13388c2ecf20Sopenharmony_cistatic const struct usb_action gc0305_50HZ[] = { 13398c2ecf20Sopenharmony_ci {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 13408c2ecf20Sopenharmony_ci {0xaa, 0x83, 0x0002}, /* 00,83,02,aa */ 13418c2ecf20Sopenharmony_ci {0xaa, 0x84, 0x0038}, /* 00,84,38,aa */ /* win: 00,84,ec */ 13428c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 13438c2ecf20Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,0b,cc */ 13448c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,18,cc */ 13458c2ecf20Sopenharmony_ci /* win: 01,92,10 */ 13468c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 13478c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 13488c2ecf20Sopenharmony_ci {0xa0, 0x8e, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,8e,cc */ 13498c2ecf20Sopenharmony_ci /* win: 01,97,ec */ 13508c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc */ 13518c2ecf20Sopenharmony_ci {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc */ 13528c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 13538c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 13548c2ecf20Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc */ 13558c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc */ 13568c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc */ 13578c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 13588c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,60,cc */ 13598c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */ 13608c2ecf20Sopenharmony_ci/* {0xa0, 0x85, ZC3XX_R18D_YTARGET}, * 01,8d,85,cc * 13618c2ecf20Sopenharmony_ci * if 640x480 */ 13628c2ecf20Sopenharmony_ci {} 13638c2ecf20Sopenharmony_ci}; 13648c2ecf20Sopenharmony_cistatic const struct usb_action gc0305_60HZ[] = { 13658c2ecf20Sopenharmony_ci {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 13668c2ecf20Sopenharmony_ci {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */ 13678c2ecf20Sopenharmony_ci {0xaa, 0x84, 0x00ec}, /* 00,84,ec,aa */ 13688c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 13698c2ecf20Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,0b,cc */ 13708c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,10,cc */ 13718c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 13728c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 13738c2ecf20Sopenharmony_ci {0xa0, 0xec, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,ec,cc */ 13748c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc */ 13758c2ecf20Sopenharmony_ci {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc */ 13768c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 13778c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 13788c2ecf20Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc */ 13798c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc */ 13808c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc */ 13818c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 13828c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,60,cc */ 13838c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */ 13848c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R18D_YTARGET}, /* 01,8d,80,cc */ 13858c2ecf20Sopenharmony_ci {} 13868c2ecf20Sopenharmony_ci}; 13878c2ecf20Sopenharmony_ci 13888c2ecf20Sopenharmony_cistatic const struct usb_action gc0305_NoFliker[] = { 13898c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0c,cc */ 13908c2ecf20Sopenharmony_ci {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 13918c2ecf20Sopenharmony_ci {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */ 13928c2ecf20Sopenharmony_ci {0xaa, 0x84, 0x0020}, /* 00,84,20,aa */ 13938c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 13948c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,00,cc */ 13958c2ecf20Sopenharmony_ci {0xa0, 0x48, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,48,cc */ 13968c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 13978c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 13988c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 13998c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc */ 14008c2ecf20Sopenharmony_ci {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc */ 14018c2ecf20Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc */ 14028c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc */ 14038c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc */ 14048c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 14058c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,60,cc */ 14068c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,03,cc */ 14078c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R18D_YTARGET}, /* 01,8d,80,cc */ 14088c2ecf20Sopenharmony_ci {} 14098c2ecf20Sopenharmony_ci}; 14108c2ecf20Sopenharmony_ci 14118c2ecf20Sopenharmony_cistatic const struct usb_action hdcs2020_InitialScale[] = { 14128c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 14138c2ecf20Sopenharmony_ci {0xa0, 0x11, ZC3XX_R002_CLOCKSELECT}, 14148c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* qtable 0x05 */ 14158c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT}, 14168c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 14178c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 14188c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 14198c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 14208c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 14218c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 14228c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 14238c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 14248c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 14258c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 14268c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 14278c2ecf20Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 14288c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 14298c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x0000}, 14308c2ecf20Sopenharmony_ci {0xaa, 0x0a, 0x0001}, 14318c2ecf20Sopenharmony_ci {0xaa, 0x0b, 0x0006}, 14328c2ecf20Sopenharmony_ci {0xaa, 0x0c, 0x007b}, 14338c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x00a7}, 14348c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x00fb}, 14358c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0000}, 14368c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0003}, 14378c2ecf20Sopenharmony_ci {0xaa, 0x09, 0x0008}, 14388c2ecf20Sopenharmony_ci 14398c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x0018}, /* set sensor gain */ 14408c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x0018}, 14418c2ecf20Sopenharmony_ci {0xaa, 0x11, 0x0018}, 14428c2ecf20Sopenharmony_ci {0xaa, 0x12, 0x0018}, 14438c2ecf20Sopenharmony_ci 14448c2ecf20Sopenharmony_ci {0xaa, 0x15, 0x004e}, 14458c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x0004}, 14468c2ecf20Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, 14478c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 14488c2ecf20Sopenharmony_ci {0xa0, 0x70, ZC3XX_R18D_YTARGET}, 14498c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 14508c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 14518c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 14528c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 14538c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 14548c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 14558c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0002}, 14568c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0008}, 14578c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0180}, 14588c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 14598c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 14608c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 14618c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 14628c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0008}, 14638c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 14648c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 14658c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x01c8}, 14668c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x01c9}, 14678c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x01ca}, 14688c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 14698c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R120_GAMMA00}, /* gamma 4 */ 14708c2ecf20Sopenharmony_ci {0xa0, 0x38, ZC3XX_R121_GAMMA01}, 14718c2ecf20Sopenharmony_ci {0xa0, 0x59, ZC3XX_R122_GAMMA02}, 14728c2ecf20Sopenharmony_ci {0xa0, 0x79, ZC3XX_R123_GAMMA03}, 14738c2ecf20Sopenharmony_ci {0xa0, 0x92, ZC3XX_R124_GAMMA04}, 14748c2ecf20Sopenharmony_ci {0xa0, 0xa7, ZC3XX_R125_GAMMA05}, 14758c2ecf20Sopenharmony_ci {0xa0, 0xb9, ZC3XX_R126_GAMMA06}, 14768c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R127_GAMMA07}, 14778c2ecf20Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R128_GAMMA08}, 14788c2ecf20Sopenharmony_ci {0xa0, 0xdf, ZC3XX_R129_GAMMA09}, 14798c2ecf20Sopenharmony_ci {0xa0, 0xe7, ZC3XX_R12A_GAMMA0A}, 14808c2ecf20Sopenharmony_ci {0xa0, 0xee, ZC3XX_R12B_GAMMA0B}, 14818c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R12C_GAMMA0C}, 14828c2ecf20Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R12D_GAMMA0D}, 14838c2ecf20Sopenharmony_ci {0xa0, 0xfc, ZC3XX_R12E_GAMMA0E}, 14848c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, 14858c2ecf20Sopenharmony_ci {0xa0, 0x26, ZC3XX_R130_GAMMA10}, 14868c2ecf20Sopenharmony_ci {0xa0, 0x22, ZC3XX_R131_GAMMA11}, 14878c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R132_GAMMA12}, 14888c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R133_GAMMA13}, 14898c2ecf20Sopenharmony_ci {0xa0, 0x16, ZC3XX_R134_GAMMA14}, 14908c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R135_GAMMA15}, 14918c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R136_GAMMA16}, 14928c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R137_GAMMA17}, 14938c2ecf20Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R138_GAMMA18}, 14948c2ecf20Sopenharmony_ci {0xa0, 0x09, ZC3XX_R139_GAMMA19}, 14958c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R13A_GAMMA1A}, 14968c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R13B_GAMMA1B}, 14978c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R13C_GAMMA1C}, 14988c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R13D_GAMMA1D}, 14998c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R13E_GAMMA1E}, 15008c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R13F_GAMMA1F}, 15018c2ecf20Sopenharmony_ci 15028c2ecf20Sopenharmony_ci {0xa0, 0x66, ZC3XX_R10A_RGB00}, /* matrix */ 15038c2ecf20Sopenharmony_ci {0xa0, 0xed, ZC3XX_R10B_RGB01}, 15048c2ecf20Sopenharmony_ci {0xa0, 0xed, ZC3XX_R10C_RGB02}, 15058c2ecf20Sopenharmony_ci {0xa0, 0xed, ZC3XX_R10D_RGB10}, 15068c2ecf20Sopenharmony_ci {0xa0, 0x66, ZC3XX_R10E_RGB11}, 15078c2ecf20Sopenharmony_ci {0xa0, 0xed, ZC3XX_R10F_RGB12}, 15088c2ecf20Sopenharmony_ci {0xa0, 0xed, ZC3XX_R110_RGB20}, 15098c2ecf20Sopenharmony_ci {0xa0, 0xed, ZC3XX_R111_RGB21}, 15108c2ecf20Sopenharmony_ci {0xa0, 0x66, ZC3XX_R112_RGB22}, 15118c2ecf20Sopenharmony_ci 15128c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0180}, 15138c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 15148c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 15158c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0031}, 15168c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x0001}, 15178c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0004}, 15188c2ecf20Sopenharmony_ci {0xaa, 0x19, 0x00cd}, 15198c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 15208c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, 15218c2ecf20Sopenharmony_ci {0xa0, 0x62, ZC3XX_R192_EXPOSURELIMITLOW}, 15228c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 15238c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 15248c2ecf20Sopenharmony_ci {0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW}, 15258c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 15268c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 15278c2ecf20Sopenharmony_ci 15288c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 0x14 */ 15298c2ecf20Sopenharmony_ci {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, 15308c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, 15318c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R01E_HSYNC_1}, 15328c2ecf20Sopenharmony_ci {0xa0, 0x2c, ZC3XX_R01F_HSYNC_2}, 15338c2ecf20Sopenharmony_ci {0xa0, 0x41, ZC3XX_R020_HSYNC_3}, 15348c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 15358c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 15368c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0180}, 15378c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 15388c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 15398c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 15408c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 15418c2ecf20Sopenharmony_ci {} 15428c2ecf20Sopenharmony_ci}; 15438c2ecf20Sopenharmony_cistatic const struct usb_action hdcs2020_Initial[] = { 15448c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 15458c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 15468c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 15478c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT}, 15488c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 15498c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 15508c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 15518c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 15528c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 15538c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 15548c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 15558c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 15568c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 15578c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 15588c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 15598c2ecf20Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 15608c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 15618c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x0000}, 15628c2ecf20Sopenharmony_ci {0xaa, 0x0a, 0x0001}, 15638c2ecf20Sopenharmony_ci {0xaa, 0x0b, 0x0006}, 15648c2ecf20Sopenharmony_ci {0xaa, 0x0c, 0x007a}, 15658c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x00a7}, 15668c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x00fb}, 15678c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0000}, 15688c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0003}, 15698c2ecf20Sopenharmony_ci {0xaa, 0x09, 0x0008}, 15708c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x0018}, /* original setting */ 15718c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x0018}, 15728c2ecf20Sopenharmony_ci {0xaa, 0x11, 0x0018}, 15738c2ecf20Sopenharmony_ci {0xaa, 0x12, 0x0018}, 15748c2ecf20Sopenharmony_ci {0xaa, 0x15, 0x004e}, 15758c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x0004}, 15768c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION}, 15778c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 15788c2ecf20Sopenharmony_ci {0xa0, 0x70, ZC3XX_R18D_YTARGET}, 15798c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 15808c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 15818c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 15828c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 15838c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 15848c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 15858c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0002}, 15868c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0008}, 15878c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0180}, 15888c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 15898c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 15908c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 15918c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 15928c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0008}, 15938c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 15948c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 15958c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x01c8}, 15968c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x01c9}, 15978c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x01ca}, 15988c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 15998c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R120_GAMMA00}, /* gamma 4 */ 16008c2ecf20Sopenharmony_ci {0xa0, 0x38, ZC3XX_R121_GAMMA01}, 16018c2ecf20Sopenharmony_ci {0xa0, 0x59, ZC3XX_R122_GAMMA02}, 16028c2ecf20Sopenharmony_ci {0xa0, 0x79, ZC3XX_R123_GAMMA03}, 16038c2ecf20Sopenharmony_ci {0xa0, 0x92, ZC3XX_R124_GAMMA04}, 16048c2ecf20Sopenharmony_ci {0xa0, 0xa7, ZC3XX_R125_GAMMA05}, 16058c2ecf20Sopenharmony_ci {0xa0, 0xb9, ZC3XX_R126_GAMMA06}, 16068c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R127_GAMMA07}, 16078c2ecf20Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R128_GAMMA08}, 16088c2ecf20Sopenharmony_ci {0xa0, 0xdf, ZC3XX_R129_GAMMA09}, 16098c2ecf20Sopenharmony_ci {0xa0, 0xe7, ZC3XX_R12A_GAMMA0A}, 16108c2ecf20Sopenharmony_ci {0xa0, 0xee, ZC3XX_R12B_GAMMA0B}, 16118c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R12C_GAMMA0C}, 16128c2ecf20Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R12D_GAMMA0D}, 16138c2ecf20Sopenharmony_ci {0xa0, 0xfc, ZC3XX_R12E_GAMMA0E}, 16148c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, 16158c2ecf20Sopenharmony_ci {0xa0, 0x26, ZC3XX_R130_GAMMA10}, 16168c2ecf20Sopenharmony_ci {0xa0, 0x22, ZC3XX_R131_GAMMA11}, 16178c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R132_GAMMA12}, 16188c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R133_GAMMA13}, 16198c2ecf20Sopenharmony_ci {0xa0, 0x16, ZC3XX_R134_GAMMA14}, 16208c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R135_GAMMA15}, 16218c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R136_GAMMA16}, 16228c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R137_GAMMA17}, 16238c2ecf20Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R138_GAMMA18}, 16248c2ecf20Sopenharmony_ci {0xa0, 0x09, ZC3XX_R139_GAMMA19}, 16258c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R13A_GAMMA1A}, 16268c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R13B_GAMMA1B}, 16278c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R13C_GAMMA1C}, 16288c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R13D_GAMMA1D}, 16298c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R13E_GAMMA1E}, 16308c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R13F_GAMMA1F}, 16318c2ecf20Sopenharmony_ci {0xa0, 0x66, ZC3XX_R10A_RGB00}, /* matrix */ 16328c2ecf20Sopenharmony_ci {0xa0, 0xed, ZC3XX_R10B_RGB01}, 16338c2ecf20Sopenharmony_ci {0xa0, 0xed, ZC3XX_R10C_RGB02}, 16348c2ecf20Sopenharmony_ci {0xa0, 0xed, ZC3XX_R10D_RGB10}, 16358c2ecf20Sopenharmony_ci {0xa0, 0x66, ZC3XX_R10E_RGB11}, 16368c2ecf20Sopenharmony_ci {0xa0, 0xed, ZC3XX_R10F_RGB12}, 16378c2ecf20Sopenharmony_ci {0xa0, 0xed, ZC3XX_R110_RGB20}, 16388c2ecf20Sopenharmony_ci {0xa0, 0xed, ZC3XX_R111_RGB21}, 16398c2ecf20Sopenharmony_ci {0xa0, 0x66, ZC3XX_R112_RGB22}, 16408c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0180}, 16418c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 16428c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 16438c2ecf20Sopenharmony_ci /**** set exposure ***/ 16448c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0031}, 16458c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x0001}, 16468c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0004}, 16478c2ecf20Sopenharmony_ci {0xaa, 0x19, 0x00cd}, 16488c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 16498c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, 16508c2ecf20Sopenharmony_ci {0xa0, 0x62, ZC3XX_R192_EXPOSURELIMITLOW}, 16518c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 16528c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 16538c2ecf20Sopenharmony_ci {0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW}, 16548c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 16558c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 16568c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, 16578c2ecf20Sopenharmony_ci {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, 16588c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, 16598c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R01E_HSYNC_1}, 16608c2ecf20Sopenharmony_ci {0xa0, 0x2c, ZC3XX_R01F_HSYNC_2}, 16618c2ecf20Sopenharmony_ci {0xa0, 0x41, ZC3XX_R020_HSYNC_3}, 16628c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 16638c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 16648c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0180}, 16658c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 16668c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 16678c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 16688c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 16698c2ecf20Sopenharmony_ci {} 16708c2ecf20Sopenharmony_ci}; 16718c2ecf20Sopenharmony_cistatic const struct usb_action hdcs2020_50HZ[] = { 16728c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 16738c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0018}, /* 00,13,18,aa */ 16748c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x0001}, /* 00,14,01,aa */ 16758c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0005}, /* 00,0e,05,aa */ 16768c2ecf20Sopenharmony_ci {0xaa, 0x19, 0x001f}, /* 00,19,1f,aa */ 16778c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 16788c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,02,cc */ 16798c2ecf20Sopenharmony_ci {0xa0, 0x76, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,76,cc */ 16808c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 16818c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 16828c2ecf20Sopenharmony_ci {0xa0, 0x46, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,46,cc */ 16838c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 16848c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 16858c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */ 16868c2ecf20Sopenharmony_ci {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,28,cc */ 16878c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R01D_HSYNC_0}, /* 00,1d,05,cc */ 16888c2ecf20Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R01E_HSYNC_1}, /* 00,1e,1a,cc */ 16898c2ecf20Sopenharmony_ci {0xa0, 0x2f, ZC3XX_R01F_HSYNC_2}, /* 00,1f,2f,cc */ 16908c2ecf20Sopenharmony_ci {} 16918c2ecf20Sopenharmony_ci}; 16928c2ecf20Sopenharmony_cistatic const struct usb_action hdcs2020_60HZ[] = { 16938c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 16948c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0031}, /* 00,13,31,aa */ 16958c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x0001}, /* 00,14,01,aa */ 16968c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0004}, /* 00,0e,04,aa */ 16978c2ecf20Sopenharmony_ci {0xaa, 0x19, 0x00cd}, /* 00,19,cd,aa */ 16988c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 16998c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,02,cc */ 17008c2ecf20Sopenharmony_ci {0xa0, 0x62, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,62,cc */ 17018c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 17028c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 17038c2ecf20Sopenharmony_ci {0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,3d,cc */ 17048c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 17058c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 17068c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */ 17078c2ecf20Sopenharmony_ci {0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,28,cc */ 17088c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, /* 00,1d,04,cc */ 17098c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R01E_HSYNC_1}, /* 00,1e,18,cc */ 17108c2ecf20Sopenharmony_ci {0xa0, 0x2c, ZC3XX_R01F_HSYNC_2}, /* 00,1f,2c,cc */ 17118c2ecf20Sopenharmony_ci {} 17128c2ecf20Sopenharmony_ci}; 17138c2ecf20Sopenharmony_cistatic const struct usb_action hdcs2020_NoFliker[] = { 17148c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 17158c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0010}, /* 00,13,10,aa */ 17168c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x0001}, /* 00,14,01,aa */ 17178c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0004}, /* 00,0e,04,aa */ 17188c2ecf20Sopenharmony_ci {0xaa, 0x19, 0x0000}, /* 00,19,00,aa */ 17198c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 17208c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,02,cc */ 17218c2ecf20Sopenharmony_ci {0xa0, 0x70, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,70,cc */ 17228c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 17238c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 17248c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 17258c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 17268c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 17278c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 17288c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 17298c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, /* 00,1d,04,cc */ 17308c2ecf20Sopenharmony_ci {0xa0, 0x17, ZC3XX_R01E_HSYNC_1}, /* 00,1e,17,cc */ 17318c2ecf20Sopenharmony_ci {0xa0, 0x2a, ZC3XX_R01F_HSYNC_2}, /* 00,1f,2a,cc */ 17328c2ecf20Sopenharmony_ci {} 17338c2ecf20Sopenharmony_ci}; 17348c2ecf20Sopenharmony_ci 17358c2ecf20Sopenharmony_cistatic const struct usb_action hv7131b_InitialScale[] = { /* 320x240 */ 17368c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 17378c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 17388c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT}, 17398c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 17408c2ecf20Sopenharmony_ci {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 17418c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 17428c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 17438c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 17448c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 17458c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 17468c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 17478c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 17488c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 17498c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 17508c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 17518c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 17528c2ecf20Sopenharmony_ci {0xaa, 0x30, 0x002d}, 17538c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0005}, 17548c2ecf20Sopenharmony_ci {0xaa, 0x11, 0x0000}, 17558c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0001}, /* {0xaa, 0x13, 0x0000}, */ 17568c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x0001}, 17578c2ecf20Sopenharmony_ci {0xaa, 0x15, 0x00e8}, 17588c2ecf20Sopenharmony_ci {0xaa, 0x16, 0x0002}, 17598c2ecf20Sopenharmony_ci {0xaa, 0x17, 0x0086}, /* 00,17,88,aa */ 17608c2ecf20Sopenharmony_ci {0xaa, 0x31, 0x0038}, 17618c2ecf20Sopenharmony_ci {0xaa, 0x32, 0x0038}, 17628c2ecf20Sopenharmony_ci {0xaa, 0x33, 0x0038}, 17638c2ecf20Sopenharmony_ci {0xaa, 0x5b, 0x0001}, 17648c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 17658c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 17668c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 17678c2ecf20Sopenharmony_ci {0xa0, 0x68, ZC3XX_R18D_YTARGET}, 17688c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 17698c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 17708c2ecf20Sopenharmony_ci {0xa0, 0xc0, 0x019b}, 17718c2ecf20Sopenharmony_ci {0xa0, 0xa0, 0x019c}, 17728c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R188_MINGAIN}, 17738c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 17748c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 17758c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 17768c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 17778c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 17788c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0090}, /* 00,02,80,aa */ 17798c2ecf20Sopenharmony_ci {} 17808c2ecf20Sopenharmony_ci}; 17818c2ecf20Sopenharmony_ci 17828c2ecf20Sopenharmony_cistatic const struct usb_action hv7131b_Initial[] = { /* 640x480*/ 17838c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 17848c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 17858c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT}, 17868c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 17878c2ecf20Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 17888c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 17898c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 17908c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 17918c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 17928c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 17938c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 17948c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 17958c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 17968c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 17978c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 17988c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 17998c2ecf20Sopenharmony_ci {0xaa, 0x30, 0x002d}, 18008c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0005}, 18018c2ecf20Sopenharmony_ci {0xaa, 0x11, 0x0001}, 18028c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0000}, /* {0xaa, 0x13, 0x0001}; */ 18038c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x0001}, 18048c2ecf20Sopenharmony_ci {0xaa, 0x15, 0x00e6}, 18058c2ecf20Sopenharmony_ci {0xaa, 0x16, 0x0002}, 18068c2ecf20Sopenharmony_ci {0xaa, 0x17, 0x0086}, 18078c2ecf20Sopenharmony_ci {0xaa, 0x31, 0x0038}, 18088c2ecf20Sopenharmony_ci {0xaa, 0x32, 0x0038}, 18098c2ecf20Sopenharmony_ci {0xaa, 0x33, 0x0038}, 18108c2ecf20Sopenharmony_ci {0xaa, 0x5b, 0x0001}, 18118c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 18128c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 18138c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 18148c2ecf20Sopenharmony_ci {0xa0, 0x70, ZC3XX_R18D_YTARGET}, 18158c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 18168c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 18178c2ecf20Sopenharmony_ci {0xa0, 0xc0, 0x019b}, 18188c2ecf20Sopenharmony_ci {0xa0, 0xa0, 0x019c}, 18198c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R188_MINGAIN}, 18208c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 18218c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 18228c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 18238c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 18248c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 18258c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0090}, /* {0xaa, 0x02, 0x0080}, */ 18268c2ecf20Sopenharmony_ci {} 18278c2ecf20Sopenharmony_ci}; 18288c2ecf20Sopenharmony_cistatic const struct usb_action hv7131b_50HZ[] = { /* 640x480*/ 18298c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 18308c2ecf20Sopenharmony_ci {0xaa, 0x25, 0x0007}, /* 00,25,07,aa */ 18318c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x0053}, /* 00,26,53,aa */ 18328c2ecf20Sopenharmony_ci {0xaa, 0x27, 0x0000}, /* 00,27,00,aa */ 18338c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 18348c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x0050}, /* 00,21,50,aa */ 18358c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x001b}, /* 00,22,1b,aa */ 18368c2ecf20Sopenharmony_ci {0xaa, 0x23, 0x00fc}, /* 00,23,fc,aa */ 18378c2ecf20Sopenharmony_ci {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */ 18388c2ecf20Sopenharmony_ci {0xa0, 0x9b, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,9b,cc */ 18398c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,80,cc */ 18408c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 18418c2ecf20Sopenharmony_ci {0xa0, 0xea, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,ea,cc */ 18428c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,60,cc */ 18438c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0c,cc */ 18448c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,18,cc */ 18458c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,18,cc */ 18468c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 18478c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */ 18488c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R01E_HSYNC_1}, /* 00,1e,50,cc */ 18498c2ecf20Sopenharmony_ci {0xa0, 0x1b, ZC3XX_R01F_HSYNC_2}, /* 00,1f,1b,cc */ 18508c2ecf20Sopenharmony_ci {0xa0, 0xfc, ZC3XX_R020_HSYNC_3}, /* 00,20,fc,cc */ 18518c2ecf20Sopenharmony_ci {} 18528c2ecf20Sopenharmony_ci}; 18538c2ecf20Sopenharmony_cistatic const struct usb_action hv7131b_50HZScale[] = { /* 320x240 */ 18548c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 18558c2ecf20Sopenharmony_ci {0xaa, 0x25, 0x0007}, /* 00,25,07,aa */ 18568c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x0053}, /* 00,26,53,aa */ 18578c2ecf20Sopenharmony_ci {0xaa, 0x27, 0x0000}, /* 00,27,00,aa */ 18588c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 18598c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x0050}, /* 00,21,50,aa */ 18608c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0012}, /* 00,22,12,aa */ 18618c2ecf20Sopenharmony_ci {0xaa, 0x23, 0x0080}, /* 00,23,80,aa */ 18628c2ecf20Sopenharmony_ci {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */ 18638c2ecf20Sopenharmony_ci {0xa0, 0x9b, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,9b,cc */ 18648c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,80,cc */ 18658c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,01,cc */ 18668c2ecf20Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,d4,cc */ 18678c2ecf20Sopenharmony_ci {0xa0, 0xc0, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,c0,cc */ 18688c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R18C_AEFREEZE}, /* 01,8c,07,cc */ 18698c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,0f,cc */ 18708c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,18,cc */ 18718c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 18728c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */ 18738c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R01E_HSYNC_1}, /* 00,1e,50,cc */ 18748c2ecf20Sopenharmony_ci {0xa0, 0x12, ZC3XX_R01F_HSYNC_2}, /* 00,1f,12,cc */ 18758c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R020_HSYNC_3}, /* 00,20,80,cc */ 18768c2ecf20Sopenharmony_ci {} 18778c2ecf20Sopenharmony_ci}; 18788c2ecf20Sopenharmony_cistatic const struct usb_action hv7131b_60HZ[] = { /* 640x480*/ 18798c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 18808c2ecf20Sopenharmony_ci {0xaa, 0x25, 0x0007}, /* 00,25,07,aa */ 18818c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x00a1}, /* 00,26,a1,aa */ 18828c2ecf20Sopenharmony_ci {0xaa, 0x27, 0x0020}, /* 00,27,20,aa */ 18838c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 18848c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x0040}, /* 00,21,40,aa */ 18858c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0013}, /* 00,22,13,aa */ 18868c2ecf20Sopenharmony_ci {0xaa, 0x23, 0x004c}, /* 00,23,4c,aa */ 18878c2ecf20Sopenharmony_ci {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */ 18888c2ecf20Sopenharmony_ci {0xa0, 0x4d, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,4d,cc */ 18898c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,60,cc */ 18908c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 18918c2ecf20Sopenharmony_ci {0xa0, 0xc3, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,c3,cc */ 18928c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,50,cc */ 18938c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0c,cc */ 18948c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,18,cc */ 18958c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,18,cc */ 18968c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 18978c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */ 18988c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R01E_HSYNC_1}, /* 00,1e,40,cc */ 18998c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R01F_HSYNC_2}, /* 00,1f,13,cc */ 19008c2ecf20Sopenharmony_ci {0xa0, 0x4c, ZC3XX_R020_HSYNC_3}, /* 00,20,4c,cc */ 19018c2ecf20Sopenharmony_ci {} 19028c2ecf20Sopenharmony_ci}; 19038c2ecf20Sopenharmony_cistatic const struct usb_action hv7131b_60HZScale[] = { /* 320x240 */ 19048c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 19058c2ecf20Sopenharmony_ci {0xaa, 0x25, 0x0007}, /* 00,25,07,aa */ 19068c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x00a1}, /* 00,26,a1,aa */ 19078c2ecf20Sopenharmony_ci {0xaa, 0x27, 0x0020}, /* 00,27,20,aa */ 19088c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 19098c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x00a0}, /* 00,21,a0,aa */ 19108c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0016}, /* 00,22,16,aa */ 19118c2ecf20Sopenharmony_ci {0xaa, 0x23, 0x0040}, /* 00,23,40,aa */ 19128c2ecf20Sopenharmony_ci {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */ 19138c2ecf20Sopenharmony_ci {0xa0, 0x4d, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,4d,cc */ 19148c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,60,cc */ 19158c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,01,cc */ 19168c2ecf20Sopenharmony_ci {0xa0, 0x86, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,86,cc */ 19178c2ecf20Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,a0,cc */ 19188c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R18C_AEFREEZE}, /* 01,8c,07,cc */ 19198c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,0f,cc */ 19208c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,18,cc */ 19218c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 19228c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */ 19238c2ecf20Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,a0,cc */ 19248c2ecf20Sopenharmony_ci {0xa0, 0x16, ZC3XX_R01F_HSYNC_2}, /* 00,1f,16,cc */ 19258c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R020_HSYNC_3}, /* 00,20,40,cc */ 19268c2ecf20Sopenharmony_ci {} 19278c2ecf20Sopenharmony_ci}; 19288c2ecf20Sopenharmony_cistatic const struct usb_action hv7131b_NoFliker[] = { /* 640x480*/ 19298c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 19308c2ecf20Sopenharmony_ci {0xaa, 0x25, 0x0003}, /* 00,25,03,aa */ 19318c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x0000}, /* 00,26,00,aa */ 19328c2ecf20Sopenharmony_ci {0xaa, 0x27, 0x0000}, /* 00,27,00,aa */ 19338c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 19348c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x0010}, /* 00,21,10,aa */ 19358c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0000}, /* 00,22,00,aa */ 19368c2ecf20Sopenharmony_ci {0xaa, 0x23, 0x0003}, /* 00,23,03,aa */ 19378c2ecf20Sopenharmony_ci {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */ 19388c2ecf20Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,f8,cc */ 19398c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,00,cc */ 19408c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 19418c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,02,cc */ 19428c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,00,cc */ 19438c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 19448c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 19458c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 19468c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 19478c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */ 19488c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R01E_HSYNC_1}, /* 00,1e,10,cc */ 19498c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, /* 00,1f,00,cc */ 19508c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R020_HSYNC_3}, /* 00,20,03,cc */ 19518c2ecf20Sopenharmony_ci {} 19528c2ecf20Sopenharmony_ci}; 19538c2ecf20Sopenharmony_cistatic const struct usb_action hv7131b_NoFlikerScale[] = { /* 320x240 */ 19548c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 19558c2ecf20Sopenharmony_ci {0xaa, 0x25, 0x0003}, /* 00,25,03,aa */ 19568c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x0000}, /* 00,26,00,aa */ 19578c2ecf20Sopenharmony_ci {0xaa, 0x27, 0x0000}, /* 00,27,00,aa */ 19588c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0000}, /* 00,20,00,aa */ 19598c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x00a0}, /* 00,21,a0,aa */ 19608c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0016}, /* 00,22,16,aa */ 19618c2ecf20Sopenharmony_ci {0xaa, 0x23, 0x0040}, /* 00,23,40,aa */ 19628c2ecf20Sopenharmony_ci {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,2f,cc */ 19638c2ecf20Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,f8,cc */ 19648c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,00,cc */ 19658c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 19668c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,02,cc */ 19678c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,00,cc */ 19688c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 19698c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 19708c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 19718c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 19728c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, /* 00,1d,00,cc */ 19738c2ecf20Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,a0,cc */ 19748c2ecf20Sopenharmony_ci {0xa0, 0x16, ZC3XX_R01F_HSYNC_2}, /* 00,1f,16,cc */ 19758c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R020_HSYNC_3}, /* 00,20,40,cc */ 19768c2ecf20Sopenharmony_ci {} 19778c2ecf20Sopenharmony_ci}; 19788c2ecf20Sopenharmony_ci 19798c2ecf20Sopenharmony_ci/* from lPEPI264v.inf (hv7131b!) */ 19808c2ecf20Sopenharmony_cistatic const struct usb_action hv7131r_InitialScale[] = { 19818c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 19828c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 19838c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, 19848c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 19858c2ecf20Sopenharmony_ci {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 19868c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 19878c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 19888c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 19898c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 19908c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 19918c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 19928c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 19938c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 19948c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 19958c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, 19968c2ecf20Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 19978c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, 19988c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 19998c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 20008c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 20018c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 20028c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0200}, 20038c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 20048c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x000c}, 20058c2ecf20Sopenharmony_ci {0xaa, 0x11, 0x0000}, 20068c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0000}, 20078c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x0001}, 20088c2ecf20Sopenharmony_ci {0xaa, 0x15, 0x00e8}, 20098c2ecf20Sopenharmony_ci {0xaa, 0x16, 0x0002}, 20108c2ecf20Sopenharmony_ci {0xaa, 0x17, 0x0088}, 20118c2ecf20Sopenharmony_ci {0xaa, 0x30, 0x000b}, 20128c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 20138c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 20148c2ecf20Sopenharmony_ci {0xa0, 0x78, ZC3XX_R18D_YTARGET}, 20158c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, 20168c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 20178c2ecf20Sopenharmony_ci {0xa0, 0xc0, 0x019b}, 20188c2ecf20Sopenharmony_ci {0xa0, 0xa0, 0x019c}, 20198c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 20208c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 20218c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 20228c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 20238c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 20248c2ecf20Sopenharmony_ci {} 20258c2ecf20Sopenharmony_ci}; 20268c2ecf20Sopenharmony_cistatic const struct usb_action hv7131r_Initial[] = { 20278c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 20288c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 20298c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, 20308c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 20318c2ecf20Sopenharmony_ci {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 20328c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 20338c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 20348c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 20358c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 20368c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 20378c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 20388c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 20398c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 20408c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 20418c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, 20428c2ecf20Sopenharmony_ci {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, 20438c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, 20448c2ecf20Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, 20458c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 20468c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 20478c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 20488c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0200}, 20498c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 20508c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x000c}, 20518c2ecf20Sopenharmony_ci {0xaa, 0x11, 0x0000}, 20528c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0000}, 20538c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x0001}, 20548c2ecf20Sopenharmony_ci {0xaa, 0x15, 0x00e6}, 20558c2ecf20Sopenharmony_ci {0xaa, 0x16, 0x0002}, 20568c2ecf20Sopenharmony_ci {0xaa, 0x17, 0x0086}, 20578c2ecf20Sopenharmony_ci {0xaa, 0x30, 0x000b}, 20588c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 20598c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 20608c2ecf20Sopenharmony_ci {0xa0, 0x78, ZC3XX_R18D_YTARGET}, 20618c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, 20628c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 20638c2ecf20Sopenharmony_ci {0xa0, 0xc0, 0x019b}, 20648c2ecf20Sopenharmony_ci {0xa0, 0xa0, 0x019c}, 20658c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 20668c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 20678c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 20688c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 20698c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 20708c2ecf20Sopenharmony_ci {} 20718c2ecf20Sopenharmony_ci}; 20728c2ecf20Sopenharmony_cistatic const struct usb_action hv7131r_50HZ[] = { 20738c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 20748c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R190_EXPOSURELIMITHIGH}, 20758c2ecf20Sopenharmony_ci {0xa0, 0x68, ZC3XX_R191_EXPOSURELIMITMID}, 20768c2ecf20Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R192_EXPOSURELIMITLOW}, 20778c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 20788c2ecf20Sopenharmony_ci {0xa0, 0xea, ZC3XX_R196_ANTIFLICKERMID}, 20798c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R197_ANTIFLICKERLOW}, 20808c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18C_AEFREEZE}, 20818c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 20828c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 20838c2ecf20Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 20848c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, 20858c2ecf20Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, 20868c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, 20878c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R020_HSYNC_3}, 20888c2ecf20Sopenharmony_ci {} 20898c2ecf20Sopenharmony_ci}; 20908c2ecf20Sopenharmony_cistatic const struct usb_action hv7131r_50HZScale[] = { 20918c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 20928c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R190_EXPOSURELIMITHIGH}, 20938c2ecf20Sopenharmony_ci {0xa0, 0xd1, ZC3XX_R191_EXPOSURELIMITMID}, 20948c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R192_EXPOSURELIMITLOW}, 20958c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH}, 20968c2ecf20Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R196_ANTIFLICKERMID}, 20978c2ecf20Sopenharmony_ci {0xa0, 0xc0, ZC3XX_R197_ANTIFLICKERLOW}, 20988c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18C_AEFREEZE}, 20998c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 21008c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 21018c2ecf20Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 21028c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, 21038c2ecf20Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, 21048c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, 21058c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R020_HSYNC_3}, 21068c2ecf20Sopenharmony_ci {} 21078c2ecf20Sopenharmony_ci}; 21088c2ecf20Sopenharmony_cistatic const struct usb_action hv7131r_60HZ[] = { 21098c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 21108c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R190_EXPOSURELIMITHIGH}, 21118c2ecf20Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R191_EXPOSURELIMITMID}, 21128c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW}, 21138c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 21148c2ecf20Sopenharmony_ci {0xa0, 0xc3, ZC3XX_R196_ANTIFLICKERMID}, 21158c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R197_ANTIFLICKERLOW}, 21168c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18C_AEFREEZE}, 21178c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 21188c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 21198c2ecf20Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 21208c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, 21218c2ecf20Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, 21228c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, 21238c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R020_HSYNC_3}, 21248c2ecf20Sopenharmony_ci {} 21258c2ecf20Sopenharmony_ci}; 21268c2ecf20Sopenharmony_cistatic const struct usb_action hv7131r_60HZScale[] = { 21278c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 21288c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R190_EXPOSURELIMITHIGH}, 21298c2ecf20Sopenharmony_ci {0xa0, 0x35, ZC3XX_R191_EXPOSURELIMITMID}, 21308c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, 21318c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH}, 21328c2ecf20Sopenharmony_ci {0xa0, 0x86, ZC3XX_R196_ANTIFLICKERMID}, 21338c2ecf20Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R197_ANTIFLICKERLOW}, 21348c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18C_AEFREEZE}, 21358c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 21368c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 21378c2ecf20Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 21388c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, 21398c2ecf20Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, 21408c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, 21418c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R020_HSYNC_3}, 21428c2ecf20Sopenharmony_ci {} 21438c2ecf20Sopenharmony_ci}; 21448c2ecf20Sopenharmony_cistatic const struct usb_action hv7131r_NoFliker[] = { 21458c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 21468c2ecf20Sopenharmony_ci {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, 21478c2ecf20Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID}, 21488c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, 21498c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 21508c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R196_ANTIFLICKERMID}, 21518c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R197_ANTIFLICKERLOW}, 21528c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, 21538c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, 21548c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 21558c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 21568c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, 21578c2ecf20Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, 21588c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, 21598c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R020_HSYNC_3}, 21608c2ecf20Sopenharmony_ci {} 21618c2ecf20Sopenharmony_ci}; 21628c2ecf20Sopenharmony_cistatic const struct usb_action hv7131r_NoFlikerScale[] = { 21638c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 21648c2ecf20Sopenharmony_ci {0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH}, 21658c2ecf20Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID}, 21668c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, 21678c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 21688c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R196_ANTIFLICKERMID}, 21698c2ecf20Sopenharmony_ci {0xa0, 0xb0, ZC3XX_R197_ANTIFLICKERLOW}, 21708c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, 21718c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, 21728c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 21738c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 21748c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01D_HSYNC_0}, 21758c2ecf20Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, 21768c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R01F_HSYNC_2}, 21778c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R020_HSYNC_3}, 21788c2ecf20Sopenharmony_ci {} 21798c2ecf20Sopenharmony_ci}; 21808c2ecf20Sopenharmony_ci 21818c2ecf20Sopenharmony_cistatic const struct usb_action icm105a_InitialScale[] = { 21828c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 21838c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 21848c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 21858c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R010_CMOSSENSORSELECT}, 21868c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 21878c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 21888c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 21898c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 21908c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 21918c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 21928c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 21938c2ecf20Sopenharmony_ci {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, 21948c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R097_WINYSTARTHIGH}, 21958c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R098_WINYSTARTLOW}, 21968c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R099_WINXSTARTHIGH}, 21978c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R09A_WINXSTARTLOW}, 21988c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R11A_FIRSTYLOW}, 21998c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R11C_FIRSTXLOW}, 22008c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, 22018c2ecf20Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 22028c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, 22038c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 22048c2ecf20Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 22058c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 22068c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 22078c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 22088c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 22098c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0010}, 22108c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0000}, 22118c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0001}, 22128c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0020}, 22138c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0001}, 22148c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 22158c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0001}, 22168c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0011}, 22178c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x00a0}, 22188c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0001}, 22198c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 22208c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0002}, 22218c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0013}, 22228c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0020}, 22238c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0001}, 22248c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 22258c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0003}, 22268c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0015}, 22278c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0020}, 22288c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0005}, 22298c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 22308c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0004}, 22318c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0017}, 22328c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0020}, 22338c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x000d}, 22348c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 22358c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0005}, 22368c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0019}, 22378c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0020}, 22388c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0005}, 22398c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 22408c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0006}, 22418c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0017}, 22428c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0026}, 22438c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0005}, 22448c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 22458c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0007}, 22468c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0019}, 22478c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0022}, 22488c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0005}, 22498c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 22508c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0008}, 22518c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0021}, 22528c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x00aa}, 22538c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0005}, 22548c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 22558c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0009}, 22568c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0023}, 22578c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x00aa}, 22588c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x000d}, 22598c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 22608c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x000a}, 22618c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0025}, 22628c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x00aa}, 22638c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0005}, 22648c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 22658c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x000b}, 22668c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x00ec}, 22678c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x002e}, 22688c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0005}, 22698c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 22708c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x000c}, 22718c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x00fa}, 22728c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x002a}, 22738c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0005}, 22748c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 22758c2ecf20Sopenharmony_ci {0xaa, 0x07, 0x000d}, 22768c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0005}, 22778c2ecf20Sopenharmony_ci {0xaa, 0x94, 0x0002}, 22788c2ecf20Sopenharmony_ci {0xaa, 0x90, 0x0000}, 22798c2ecf20Sopenharmony_ci {0xaa, 0x91, 0x001f}, 22808c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x0064}, 22818c2ecf20Sopenharmony_ci {0xaa, 0x9b, 0x00f0}, 22828c2ecf20Sopenharmony_ci {0xaa, 0x9c, 0x0002}, 22838c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x001a}, 22848c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0080}, 22858c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0080}, 22868c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x0080}, 22878c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x0080}, 22888c2ecf20Sopenharmony_ci {0xaa, 0x00, 0x0084}, 22898c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 22908c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 22918c2ecf20Sopenharmony_ci {0xaa, 0xa8, 0x00c0}, 22928c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0002}, 22938c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0008}, 22948c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0180}, 22958c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 22968c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 22978c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 22988c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 22998c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0008}, 23008c2ecf20Sopenharmony_ci 23018c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 23028c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 23038c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x01c8}, 23048c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x01c9}, 23058c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x01ca}, 23068c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 23078c2ecf20Sopenharmony_ci {0xa0, 0x52, ZC3XX_R10A_RGB00}, /* matrix */ 23088c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10B_RGB01}, 23098c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10C_RGB02}, 23108c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10D_RGB10}, 23118c2ecf20Sopenharmony_ci {0xa0, 0x52, ZC3XX_R10E_RGB11}, 23128c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10F_RGB12}, 23138c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R110_RGB20}, 23148c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R111_RGB21}, 23158c2ecf20Sopenharmony_ci {0xa0, 0x52, ZC3XX_R112_RGB22}, 23168c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0180}, 23178c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 23188c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 23198c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x0003}, 23208c2ecf20Sopenharmony_ci {0xaa, 0x0c, 0x008c}, 23218c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0095}, 23228c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x0002}, 23238c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x0094}, 23248c2ecf20Sopenharmony_ci {0xaa, 0x1d, 0x0002}, 23258c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0080}, 23268c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0080}, 23278c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x0080}, 23288c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x0080}, 23298c2ecf20Sopenharmony_ci {0xaa, 0x00, 0x0084}, 23308c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, 23318c2ecf20Sopenharmony_ci {0xa0, 0x94, ZC3XX_R0A4_EXPOSURETIMELOW}, 23328c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 23338c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, 23348c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, 23358c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 23368c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 23378c2ecf20Sopenharmony_ci {0xa0, 0x84, ZC3XX_R197_ANTIFLICKERLOW}, 23388c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 23398c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 23408c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 23418c2ecf20Sopenharmony_ci {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, 23428c2ecf20Sopenharmony_ci {0xa0, 0xe3, ZC3XX_R01D_HSYNC_0}, 23438c2ecf20Sopenharmony_ci {0xa0, 0xec, ZC3XX_R01E_HSYNC_1}, 23448c2ecf20Sopenharmony_ci {0xa0, 0xf5, ZC3XX_R01F_HSYNC_2}, 23458c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 23468c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 23478c2ecf20Sopenharmony_ci {0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN}, 23488c2ecf20Sopenharmony_ci {0xa0, 0xc0, ZC3XX_R11D_GLOBALGAIN}, 23498c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 23508c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0180}, 23518c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 23528c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 23538c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 23548c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 23558c2ecf20Sopenharmony_ci {} 23568c2ecf20Sopenharmony_ci}; 23578c2ecf20Sopenharmony_ci 23588c2ecf20Sopenharmony_cistatic const struct usb_action icm105a_Initial[] = { 23598c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 23608c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 23618c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 23628c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R010_CMOSSENSORSELECT}, 23638c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 23648c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 23658c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 23668c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 23678c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 23688c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 23698c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 23708c2ecf20Sopenharmony_ci {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, 23718c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R097_WINYSTARTHIGH}, 23728c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R098_WINYSTARTLOW}, 23738c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R099_WINXSTARTHIGH}, 23748c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09A_WINXSTARTLOW}, 23758c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R11A_FIRSTYLOW}, 23768c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R11C_FIRSTXLOW}, 23778c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, 23788c2ecf20Sopenharmony_ci {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, 23798c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, 23808c2ecf20Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, 23818c2ecf20Sopenharmony_ci {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 23828c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 23838c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 23848c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 23858c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 23868c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0010}, 23878c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0000}, 23888c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0001}, 23898c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0020}, 23908c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0001}, 23918c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 23928c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0001}, 23938c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0011}, 23948c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x00a0}, 23958c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0001}, 23968c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 23978c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0002}, 23988c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0013}, 23998c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0020}, 24008c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0001}, 24018c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 24028c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0003}, 24038c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0015}, 24048c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0020}, 24058c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0005}, 24068c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 24078c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0004}, 24088c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0017}, 24098c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0020}, 24108c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x000d}, 24118c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 24128c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0005}, 24138c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R092_I2CADDRESSSELECT}, 24148c2ecf20Sopenharmony_ci {0xa0, 0x19, ZC3XX_R093_I2CSETVALUE}, 24158c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R090_I2CCOMMAND}, 24168c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0091}, 24178c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0020}, 24188c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0005}, 24198c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 24208c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0006}, 24218c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0017}, 24228c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0026}, 24238c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0005}, 24248c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 24258c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0007}, 24268c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0019}, 24278c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0022}, 24288c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0005}, 24298c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 24308c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0008}, 24318c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0021}, 24328c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x00aa}, 24338c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0005}, 24348c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 24358c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0009}, 24368c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0023}, 24378c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x00aa}, 24388c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x000d}, 24398c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 24408c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x000a}, 24418c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0025}, 24428c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x00aa}, 24438c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0005}, 24448c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 24458c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x000b}, 24468c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x00ec}, 24478c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x002e}, 24488c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0005}, 24498c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 24508c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x000c}, 24518c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x00fa}, 24528c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x002a}, 24538c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0005}, 24548c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 24558c2ecf20Sopenharmony_ci {0xaa, 0x07, 0x000d}, 24568c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0005}, 24578c2ecf20Sopenharmony_ci {0xaa, 0x94, 0x0002}, 24588c2ecf20Sopenharmony_ci {0xaa, 0x90, 0x0000}, 24598c2ecf20Sopenharmony_ci {0xaa, 0x91, 0x0010}, 24608c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x0064}, 24618c2ecf20Sopenharmony_ci {0xaa, 0x9b, 0x00f0}, 24628c2ecf20Sopenharmony_ci {0xaa, 0x9c, 0x0002}, 24638c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x001a}, 24648c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0080}, 24658c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0080}, 24668c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x0080}, 24678c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x0080}, 24688c2ecf20Sopenharmony_ci {0xaa, 0x00, 0x0084}, 24698c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 24708c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 24718c2ecf20Sopenharmony_ci {0xaa, 0xa8, 0x0080}, 24728c2ecf20Sopenharmony_ci {0xa0, 0x78, ZC3XX_R18D_YTARGET}, 24738c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0002}, 24748c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0008}, 24758c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0180}, 24768c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 24778c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 24788c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 24798c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 24808c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0008}, 24818c2ecf20Sopenharmony_ci 24828c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 24838c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 24848c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x01c8}, 24858c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x01c9}, 24868c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x01ca}, 24878c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 24888c2ecf20Sopenharmony_ci 24898c2ecf20Sopenharmony_ci {0xa0, 0x52, ZC3XX_R10A_RGB00}, /* matrix */ 24908c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10B_RGB01}, 24918c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10C_RGB02}, 24928c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10D_RGB10}, 24938c2ecf20Sopenharmony_ci {0xa0, 0x52, ZC3XX_R10E_RGB11}, 24948c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10F_RGB12}, 24958c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R110_RGB20}, 24968c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R111_RGB21}, 24978c2ecf20Sopenharmony_ci {0xa0, 0x52, ZC3XX_R112_RGB22}, 24988c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0180}, 24998c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 25008c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 25018c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x0003}, 25028c2ecf20Sopenharmony_ci {0xaa, 0x0c, 0x0020}, 25038c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x000e}, 25048c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x0002}, 25058c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x000d}, 25068c2ecf20Sopenharmony_ci {0xaa, 0x1d, 0x0002}, 25078c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0080}, 25088c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0080}, 25098c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x0080}, 25108c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x0080}, 25118c2ecf20Sopenharmony_ci {0xaa, 0x00, 0x0084}, 25128c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, 25138c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R0A4_EXPOSURETIMELOW}, 25148c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 25158c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, 25168c2ecf20Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R192_EXPOSURELIMITLOW}, 25178c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 25188c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 25198c2ecf20Sopenharmony_ci {0xa0, 0x4b, ZC3XX_R197_ANTIFLICKERLOW}, 25208c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 25218c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 25228c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 25238c2ecf20Sopenharmony_ci {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, 25248c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01D_HSYNC_0}, 25258c2ecf20Sopenharmony_ci {0xa0, 0xd8, ZC3XX_R01E_HSYNC_1}, 25268c2ecf20Sopenharmony_ci {0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, 25278c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 25288c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, 25298c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 25308c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0180}, 25318c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 25328c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 25338c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 25348c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 25358c2ecf20Sopenharmony_ci {} 25368c2ecf20Sopenharmony_ci}; 25378c2ecf20Sopenharmony_cistatic const struct usb_action icm105a_50HZScale[] = { 25388c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 25398c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ 25408c2ecf20Sopenharmony_ci {0xaa, 0x0c, 0x0020}, /* 00,0c,20,aa */ 25418c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x000e}, /* 00,0e,0e,aa */ 25428c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */ 25438c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x000d}, /* 00,1c,0d,aa */ 25448c2ecf20Sopenharmony_ci {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 25458c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */ 25468c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */ 25478c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */ 25488c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */ 25498c2ecf20Sopenharmony_ci {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */ 25508c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */ 25518c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,0d,cc */ 25528c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 25538c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 25548c2ecf20Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,1a,cc */ 25558c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 25568c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 25578c2ecf20Sopenharmony_ci {0xa0, 0x4b, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,4b,cc */ 25588c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 25598c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 25608c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 25618c2ecf20Sopenharmony_ci {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */ 25628c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c8,cc */ 25638c2ecf20Sopenharmony_ci {0xa0, 0xd8, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d8,cc */ 25648c2ecf20Sopenharmony_ci {0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ea,cc */ 25658c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 25668c2ecf20Sopenharmony_ci {} 25678c2ecf20Sopenharmony_ci}; 25688c2ecf20Sopenharmony_cistatic const struct usb_action icm105a_50HZ[] = { 25698c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 25708c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ 25718c2ecf20Sopenharmony_ci {0xaa, 0x0c, 0x008c}, /* 00,0c,8c,aa */ 25728c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0095}, /* 00,0e,95,aa */ 25738c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */ 25748c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x0094}, /* 00,1c,94,aa */ 25758c2ecf20Sopenharmony_ci {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 25768c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */ 25778c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */ 25788c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */ 25798c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */ 25808c2ecf20Sopenharmony_ci {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */ 25818c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */ 25828c2ecf20Sopenharmony_ci {0xa0, 0x94, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,94,cc */ 25838c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 25848c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 25858c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,20,cc */ 25868c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 25878c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 25888c2ecf20Sopenharmony_ci {0xa0, 0x84, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,84,cc */ 25898c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 25908c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 25918c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 25928c2ecf20Sopenharmony_ci {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */ 25938c2ecf20Sopenharmony_ci {0xa0, 0xe3, ZC3XX_R01D_HSYNC_0}, /* 00,1d,e3,cc */ 25948c2ecf20Sopenharmony_ci {0xa0, 0xec, ZC3XX_R01E_HSYNC_1}, /* 00,1e,ec,cc */ 25958c2ecf20Sopenharmony_ci {0xa0, 0xf5, ZC3XX_R01F_HSYNC_2}, /* 00,1f,f5,cc */ 25968c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 25978c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, /* 01,a7,00,cc */ 25988c2ecf20Sopenharmony_ci {0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,c0,cc */ 25998c2ecf20Sopenharmony_ci {} 26008c2ecf20Sopenharmony_ci}; 26018c2ecf20Sopenharmony_cistatic const struct usb_action icm105a_60HZScale[] = { 26028c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 26038c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ 26048c2ecf20Sopenharmony_ci {0xaa, 0x0c, 0x0004}, /* 00,0c,04,aa */ 26058c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x000d}, /* 00,0e,0d,aa */ 26068c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */ 26078c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x0008}, /* 00,1c,08,aa */ 26088c2ecf20Sopenharmony_ci {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 26098c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */ 26108c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */ 26118c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */ 26128c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */ 26138c2ecf20Sopenharmony_ci {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */ 26148c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */ 26158c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,08,cc */ 26168c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 26178c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 26188c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,10,cc */ 26198c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 26208c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 26218c2ecf20Sopenharmony_ci {0xa0, 0x41, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,41,cc */ 26228c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 26238c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 26248c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 26258c2ecf20Sopenharmony_ci {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */ 26268c2ecf20Sopenharmony_ci {0xa0, 0xc1, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c1,cc */ 26278c2ecf20Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d4,cc */ 26288c2ecf20Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e8,cc */ 26298c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 26308c2ecf20Sopenharmony_ci {} 26318c2ecf20Sopenharmony_ci}; 26328c2ecf20Sopenharmony_cistatic const struct usb_action icm105a_60HZ[] = { 26338c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 26348c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ 26358c2ecf20Sopenharmony_ci {0xaa, 0x0c, 0x0008}, /* 00,0c,08,aa */ 26368c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0086}, /* 00,0e,86,aa */ 26378c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */ 26388c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x0085}, /* 00,1c,85,aa */ 26398c2ecf20Sopenharmony_ci {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 26408c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */ 26418c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */ 26428c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */ 26438c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */ 26448c2ecf20Sopenharmony_ci {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */ 26458c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */ 26468c2ecf20Sopenharmony_ci {0xa0, 0x85, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,85,cc */ 26478c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 26488c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 26498c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,08,cc */ 26508c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 26518c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 26528c2ecf20Sopenharmony_ci {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,81,cc */ 26538c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 26548c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 26558c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 26568c2ecf20Sopenharmony_ci {0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */ 26578c2ecf20Sopenharmony_ci {0xa0, 0xc2, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c2,cc */ 26588c2ecf20Sopenharmony_ci {0xa0, 0xd6, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d6,cc */ 26598c2ecf20Sopenharmony_ci {0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ea,cc */ 26608c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 26618c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, /* 01,a7,00,cc */ 26628c2ecf20Sopenharmony_ci {0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,c0,cc */ 26638c2ecf20Sopenharmony_ci {} 26648c2ecf20Sopenharmony_ci}; 26658c2ecf20Sopenharmony_cistatic const struct usb_action icm105a_NoFlikerScale[] = { 26668c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 26678c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ 26688c2ecf20Sopenharmony_ci {0xaa, 0x0c, 0x0004}, /* 00,0c,04,aa */ 26698c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x000d}, /* 00,0e,0d,aa */ 26708c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */ 26718c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x0000}, /* 00,1c,00,aa */ 26728c2ecf20Sopenharmony_ci {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 26738c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */ 26748c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */ 26758c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */ 26768c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */ 26778c2ecf20Sopenharmony_ci {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */ 26788c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */ 26798c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,00,cc */ 26808c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 26818c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 26828c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,20,cc */ 26838c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 26848c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 26858c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 26868c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 26878c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 26888c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 26898c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 26908c2ecf20Sopenharmony_ci {0xa0, 0xc1, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c1,cc */ 26918c2ecf20Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d4,cc */ 26928c2ecf20Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e8,cc */ 26938c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 26948c2ecf20Sopenharmony_ci {} 26958c2ecf20Sopenharmony_ci}; 26968c2ecf20Sopenharmony_cistatic const struct usb_action icm105a_NoFliker[] = { 26978c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 26988c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */ 26998c2ecf20Sopenharmony_ci {0xaa, 0x0c, 0x0004}, /* 00,0c,04,aa */ 27008c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0081}, /* 00,0e,81,aa */ 27018c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */ 27028c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x0080}, /* 00,1c,80,aa */ 27038c2ecf20Sopenharmony_ci {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 27048c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0080}, /* 00,20,80,aa */ 27058c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0080}, /* 00,22,80,aa */ 27068c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x0080}, /* 00,24,80,aa */ 27078c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x0080}, /* 00,26,80,aa */ 27088c2ecf20Sopenharmony_ci {0xaa, 0x00, 0x0084}, /* 00,00,84,aa */ 27098c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */ 27108c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,80,cc */ 27118c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 27128c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 27138c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,20,cc */ 27148c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 27158c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 27168c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 27178c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 27188c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 27198c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 27208c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 27218c2ecf20Sopenharmony_ci {0xa0, 0xc1, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c1,cc */ 27228c2ecf20Sopenharmony_ci {0xa0, 0xd4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d4,cc */ 27238c2ecf20Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e8,cc */ 27248c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 27258c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, /* 01,a7,00,cc */ 27268c2ecf20Sopenharmony_ci {0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,c0,cc */ 27278c2ecf20Sopenharmony_ci {} 27288c2ecf20Sopenharmony_ci}; 27298c2ecf20Sopenharmony_ci 27308c2ecf20Sopenharmony_cistatic const struct usb_action mc501cb_Initial[] = { 27318c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 27328c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, /* 00,02,00,cc */ 27338c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 27348c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 27358c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 27368c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 27378c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 27388c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 27398c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 27408c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 27418c2ecf20Sopenharmony_ci {0xa0, 0xd8, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d8,cc */ 27428c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 27438c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 27448c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 27458c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 27468c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, /* 00,9b,01,cc */ 27478c2ecf20Sopenharmony_ci {0xa0, 0xde, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,de,cc */ 27488c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, /* 00,9d,02,cc */ 27498c2ecf20Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */ 27508c2ecf20Sopenharmony_ci {0xa0, 0x33, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,33,cc */ 27518c2ecf20Sopenharmony_ci {0xa0, 0x34, ZC3XX_R087_EXPTIMEMID}, /* 00,87,34,cc */ 27528c2ecf20Sopenharmony_ci {0xa0, 0x35, ZC3XX_R088_EXPTIMELOW}, /* 00,88,35,cc */ 27538c2ecf20Sopenharmony_ci {0xa0, 0xb0, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,b0,cc */ 27548c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 27558c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0001}, /* 00,01,01,aa */ 27568c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0003}, /* 00,01,03,aa */ 27578c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0001}, /* 00,01,01,aa */ 27588c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0000}, /* 00,03,00,aa */ 27598c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 27608c2ecf20Sopenharmony_ci {0xaa, 0x11, 0x0080}, /* 00,11,80,aa */ 27618c2ecf20Sopenharmony_ci {0xaa, 0x12, 0x0000}, /* 00,12,00,aa */ 27628c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0000}, /* 00,13,00,aa */ 27638c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x0000}, /* 00,14,00,aa */ 27648c2ecf20Sopenharmony_ci {0xaa, 0x15, 0x0000}, /* 00,15,00,aa */ 27658c2ecf20Sopenharmony_ci {0xaa, 0x16, 0x0000}, /* 00,16,00,aa */ 27668c2ecf20Sopenharmony_ci {0xaa, 0x17, 0x0001}, /* 00,17,01,aa */ 27678c2ecf20Sopenharmony_ci {0xaa, 0x18, 0x00de}, /* 00,18,de,aa */ 27688c2ecf20Sopenharmony_ci {0xaa, 0x19, 0x0002}, /* 00,19,02,aa */ 27698c2ecf20Sopenharmony_ci {0xaa, 0x1a, 0x0086}, /* 00,1a,86,aa */ 27708c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x00a8}, /* 00,20,a8,aa */ 27718c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0000}, /* 00,22,00,aa */ 27728c2ecf20Sopenharmony_ci {0xaa, 0x23, 0x0000}, /* 00,23,00,aa */ 27738c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x0000}, /* 00,24,00,aa */ 27748c2ecf20Sopenharmony_ci {0xaa, 0x40, 0x0033}, /* 00,40,33,aa */ 27758c2ecf20Sopenharmony_ci {0xaa, 0x41, 0x0077}, /* 00,41,77,aa */ 27768c2ecf20Sopenharmony_ci {0xaa, 0x42, 0x0053}, /* 00,42,53,aa */ 27778c2ecf20Sopenharmony_ci {0xaa, 0x43, 0x00b0}, /* 00,43,b0,aa */ 27788c2ecf20Sopenharmony_ci {0xaa, 0x4b, 0x0001}, /* 00,4b,01,aa */ 27798c2ecf20Sopenharmony_ci {0xaa, 0x72, 0x0020}, /* 00,72,20,aa */ 27808c2ecf20Sopenharmony_ci {0xaa, 0x73, 0x0000}, /* 00,73,00,aa */ 27818c2ecf20Sopenharmony_ci {0xaa, 0x80, 0x0000}, /* 00,80,00,aa */ 27828c2ecf20Sopenharmony_ci {0xaa, 0x85, 0x0050}, /* 00,85,50,aa */ 27838c2ecf20Sopenharmony_ci {0xaa, 0x91, 0x0070}, /* 00,91,70,aa */ 27848c2ecf20Sopenharmony_ci {0xaa, 0x92, 0x0072}, /* 00,92,72,aa */ 27858c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0001}, /* 00,03,01,aa */ 27868c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x00a0}, /* 00,10,a0,aa */ 27878c2ecf20Sopenharmony_ci {0xaa, 0x11, 0x0001}, /* 00,11,01,aa */ 27888c2ecf20Sopenharmony_ci {0xaa, 0x30, 0x0000}, /* 00,30,00,aa */ 27898c2ecf20Sopenharmony_ci {0xaa, 0x60, 0x0000}, /* 00,60,00,aa */ 27908c2ecf20Sopenharmony_ci {0xaa, 0xa0, 0x001a}, /* 00,a0,1a,aa */ 27918c2ecf20Sopenharmony_ci {0xaa, 0xa1, 0x0000}, /* 00,a1,00,aa */ 27928c2ecf20Sopenharmony_ci {0xaa, 0xa2, 0x003f}, /* 00,a2,3f,aa */ 27938c2ecf20Sopenharmony_ci {0xaa, 0xa3, 0x0028}, /* 00,a3,28,aa */ 27948c2ecf20Sopenharmony_ci {0xaa, 0xa4, 0x0010}, /* 00,a4,10,aa */ 27958c2ecf20Sopenharmony_ci {0xaa, 0xa5, 0x0020}, /* 00,a5,20,aa */ 27968c2ecf20Sopenharmony_ci {0xaa, 0xb1, 0x0044}, /* 00,b1,44,aa */ 27978c2ecf20Sopenharmony_ci {0xaa, 0xd0, 0x0001}, /* 00,d0,01,aa */ 27988c2ecf20Sopenharmony_ci {0xaa, 0xd1, 0x0085}, /* 00,d1,85,aa */ 27998c2ecf20Sopenharmony_ci {0xaa, 0xd2, 0x0080}, /* 00,d2,80,aa */ 28008c2ecf20Sopenharmony_ci {0xaa, 0xd3, 0x0080}, /* 00,d3,80,aa */ 28018c2ecf20Sopenharmony_ci {0xaa, 0xd4, 0x0080}, /* 00,d4,80,aa */ 28028c2ecf20Sopenharmony_ci {0xaa, 0xd5, 0x0080}, /* 00,d5,80,aa */ 28038c2ecf20Sopenharmony_ci {0xaa, 0xc0, 0x00c3}, /* 00,c0,c3,aa */ 28048c2ecf20Sopenharmony_ci {0xaa, 0xc2, 0x0044}, /* 00,c2,44,aa */ 28058c2ecf20Sopenharmony_ci {0xaa, 0xc4, 0x0040}, /* 00,c4,40,aa */ 28068c2ecf20Sopenharmony_ci {0xaa, 0xc5, 0x0020}, /* 00,c5,20,aa */ 28078c2ecf20Sopenharmony_ci {0xaa, 0xc6, 0x0008}, /* 00,c6,08,aa */ 28088c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0004}, /* 00,03,04,aa */ 28098c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 28108c2ecf20Sopenharmony_ci {0xaa, 0x40, 0x0030}, /* 00,40,30,aa */ 28118c2ecf20Sopenharmony_ci {0xaa, 0x41, 0x0020}, /* 00,41,20,aa */ 28128c2ecf20Sopenharmony_ci {0xaa, 0x42, 0x002d}, /* 00,42,2d,aa */ 28138c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 28148c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x0050}, /* 00,1C,50,aa */ 28158c2ecf20Sopenharmony_ci {0xaa, 0x11, 0x0081}, /* 00,11,81,aa */ 28168c2ecf20Sopenharmony_ci {0xaa, 0x3b, 0x001d}, /* 00,3b,1D,aa */ 28178c2ecf20Sopenharmony_ci {0xaa, 0x3c, 0x004c}, /* 00,3c,4C,aa */ 28188c2ecf20Sopenharmony_ci {0xaa, 0x3d, 0x0018}, /* 00,3d,18,aa */ 28198c2ecf20Sopenharmony_ci {0xaa, 0x3e, 0x006a}, /* 00,3e,6A,aa */ 28208c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0000}, /* 00,01,00,aa */ 28218c2ecf20Sopenharmony_ci {0xaa, 0x52, 0x00ff}, /* 00,52,FF,aa */ 28228c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 28238c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 28248c2ecf20Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */ 28258c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 28268c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 28278c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 28288c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 28298c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 28308c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 28318c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0002}, /* 00,03,02,aa */ 28328c2ecf20Sopenharmony_ci {0xaa, 0x51, 0x0027}, /* 00,51,27,aa */ 28338c2ecf20Sopenharmony_ci {0xaa, 0x52, 0x0020}, /* 00,52,20,aa */ 28348c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 28358c2ecf20Sopenharmony_ci {0xaa, 0x50, 0x0010}, /* 00,50,10,aa */ 28368c2ecf20Sopenharmony_ci {0xaa, 0x51, 0x0010}, /* 00,51,10,aa */ 28378c2ecf20Sopenharmony_ci {0xaa, 0x54, 0x0010}, /* 00,54,10,aa */ 28388c2ecf20Sopenharmony_ci {0xaa, 0x55, 0x0010}, /* 00,55,10,aa */ 28398c2ecf20Sopenharmony_ci {0xa0, 0xf0, 0x0199}, /* 01,99,F0,cc */ 28408c2ecf20Sopenharmony_ci {0xa0, 0x80, 0x019a}, /* 01,9A,80,cc */ 28418c2ecf20Sopenharmony_ci 28428c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 28438c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 28448c2ecf20Sopenharmony_ci {0xaa, 0x36, 0x001d}, /* 00,36,1D,aa */ 28458c2ecf20Sopenharmony_ci {0xaa, 0x37, 0x004c}, /* 00,37,4C,aa */ 28468c2ecf20Sopenharmony_ci {0xaa, 0x3b, 0x001d}, /* 00,3B,1D,aa */ 28478c2ecf20Sopenharmony_ci {} 28488c2ecf20Sopenharmony_ci}; 28498c2ecf20Sopenharmony_ci 28508c2ecf20Sopenharmony_cistatic const struct usb_action mc501cb_InitialScale[] = { /* 320x240 */ 28518c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 28528c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */ 28538c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 28548c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 28558c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 28568c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 28578c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 28588c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 28598c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 28608c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 28618c2ecf20Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d0,cc */ 28628c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 28638c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 28648c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 28658c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 28668c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, /* 00,9b,01,cc */ 28678c2ecf20Sopenharmony_ci {0xa0, 0xd8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,d8,cc */ 28688c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, /* 00,9d,02,cc */ 28698c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */ 28708c2ecf20Sopenharmony_ci {0xa0, 0x33, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,33,cc */ 28718c2ecf20Sopenharmony_ci {0xa0, 0x34, ZC3XX_R087_EXPTIMEMID}, /* 00,87,34,cc */ 28728c2ecf20Sopenharmony_ci {0xa0, 0x35, ZC3XX_R088_EXPTIMELOW}, /* 00,88,35,cc */ 28738c2ecf20Sopenharmony_ci {0xa0, 0xb0, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,b0,cc */ 28748c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 28758c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0001}, /* 00,01,01,aa */ 28768c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0003}, /* 00,01,03,aa */ 28778c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0001}, /* 00,01,01,aa */ 28788c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0000}, /* 00,03,00,aa */ 28798c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 28808c2ecf20Sopenharmony_ci {0xaa, 0x11, 0x0080}, /* 00,11,80,aa */ 28818c2ecf20Sopenharmony_ci {0xaa, 0x12, 0x0000}, /* 00,12,00,aa */ 28828c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0000}, /* 00,13,00,aa */ 28838c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x0000}, /* 00,14,00,aa */ 28848c2ecf20Sopenharmony_ci {0xaa, 0x15, 0x0000}, /* 00,15,00,aa */ 28858c2ecf20Sopenharmony_ci {0xaa, 0x16, 0x0000}, /* 00,16,00,aa */ 28868c2ecf20Sopenharmony_ci {0xaa, 0x17, 0x0001}, /* 00,17,01,aa */ 28878c2ecf20Sopenharmony_ci {0xaa, 0x18, 0x00d8}, /* 00,18,d8,aa */ 28888c2ecf20Sopenharmony_ci {0xaa, 0x19, 0x0002}, /* 00,19,02,aa */ 28898c2ecf20Sopenharmony_ci {0xaa, 0x1a, 0x0088}, /* 00,1a,88,aa */ 28908c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x00a8}, /* 00,20,a8,aa */ 28918c2ecf20Sopenharmony_ci {0xaa, 0x22, 0x0000}, /* 00,22,00,aa */ 28928c2ecf20Sopenharmony_ci {0xaa, 0x23, 0x0000}, /* 00,23,00,aa */ 28938c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x0000}, /* 00,24,00,aa */ 28948c2ecf20Sopenharmony_ci {0xaa, 0x40, 0x0033}, /* 00,40,33,aa */ 28958c2ecf20Sopenharmony_ci {0xaa, 0x41, 0x0077}, /* 00,41,77,aa */ 28968c2ecf20Sopenharmony_ci {0xaa, 0x42, 0x0053}, /* 00,42,53,aa */ 28978c2ecf20Sopenharmony_ci {0xaa, 0x43, 0x00b0}, /* 00,43,b0,aa */ 28988c2ecf20Sopenharmony_ci {0xaa, 0x4b, 0x0001}, /* 00,4b,01,aa */ 28998c2ecf20Sopenharmony_ci {0xaa, 0x72, 0x0020}, /* 00,72,20,aa */ 29008c2ecf20Sopenharmony_ci {0xaa, 0x73, 0x0000}, /* 00,73,00,aa */ 29018c2ecf20Sopenharmony_ci {0xaa, 0x80, 0x0000}, /* 00,80,00,aa */ 29028c2ecf20Sopenharmony_ci {0xaa, 0x85, 0x0050}, /* 00,85,50,aa */ 29038c2ecf20Sopenharmony_ci {0xaa, 0x91, 0x0070}, /* 00,91,70,aa */ 29048c2ecf20Sopenharmony_ci {0xaa, 0x92, 0x0072}, /* 00,92,72,aa */ 29058c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0001}, /* 00,03,01,aa */ 29068c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x00a0}, /* 00,10,a0,aa */ 29078c2ecf20Sopenharmony_ci {0xaa, 0x11, 0x0001}, /* 00,11,01,aa */ 29088c2ecf20Sopenharmony_ci {0xaa, 0x30, 0x0000}, /* 00,30,00,aa */ 29098c2ecf20Sopenharmony_ci {0xaa, 0x60, 0x0000}, /* 00,60,00,aa */ 29108c2ecf20Sopenharmony_ci {0xaa, 0xa0, 0x001a}, /* 00,a0,1a,aa */ 29118c2ecf20Sopenharmony_ci {0xaa, 0xa1, 0x0000}, /* 00,a1,00,aa */ 29128c2ecf20Sopenharmony_ci {0xaa, 0xa2, 0x003f}, /* 00,a2,3f,aa */ 29138c2ecf20Sopenharmony_ci {0xaa, 0xa3, 0x0028}, /* 00,a3,28,aa */ 29148c2ecf20Sopenharmony_ci {0xaa, 0xa4, 0x0010}, /* 00,a4,10,aa */ 29158c2ecf20Sopenharmony_ci {0xaa, 0xa5, 0x0020}, /* 00,a5,20,aa */ 29168c2ecf20Sopenharmony_ci {0xaa, 0xb1, 0x0044}, /* 00,b1,44,aa */ 29178c2ecf20Sopenharmony_ci {0xaa, 0xd0, 0x0001}, /* 00,d0,01,aa */ 29188c2ecf20Sopenharmony_ci {0xaa, 0xd1, 0x0085}, /* 00,d1,85,aa */ 29198c2ecf20Sopenharmony_ci {0xaa, 0xd2, 0x0080}, /* 00,d2,80,aa */ 29208c2ecf20Sopenharmony_ci {0xaa, 0xd3, 0x0080}, /* 00,d3,80,aa */ 29218c2ecf20Sopenharmony_ci {0xaa, 0xd4, 0x0080}, /* 00,d4,80,aa */ 29228c2ecf20Sopenharmony_ci {0xaa, 0xd5, 0x0080}, /* 00,d5,80,aa */ 29238c2ecf20Sopenharmony_ci {0xaa, 0xc0, 0x00c3}, /* 00,c0,c3,aa */ 29248c2ecf20Sopenharmony_ci {0xaa, 0xc2, 0x0044}, /* 00,c2,44,aa */ 29258c2ecf20Sopenharmony_ci {0xaa, 0xc4, 0x0040}, /* 00,c4,40,aa */ 29268c2ecf20Sopenharmony_ci {0xaa, 0xc5, 0x0020}, /* 00,c5,20,aa */ 29278c2ecf20Sopenharmony_ci {0xaa, 0xc6, 0x0008}, /* 00,c6,08,aa */ 29288c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0004}, /* 00,03,04,aa */ 29298c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 29308c2ecf20Sopenharmony_ci {0xaa, 0x40, 0x0030}, /* 00,40,30,aa */ 29318c2ecf20Sopenharmony_ci {0xaa, 0x41, 0x0020}, /* 00,41,20,aa */ 29328c2ecf20Sopenharmony_ci {0xaa, 0x42, 0x002d}, /* 00,42,2d,aa */ 29338c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 29348c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x0050}, /* 00,1c,50,aa */ 29358c2ecf20Sopenharmony_ci {0xaa, 0x11, 0x0081}, /* 00,11,81,aa */ 29368c2ecf20Sopenharmony_ci {0xaa, 0x3b, 0x003a}, /* 00,3b,3A,aa */ 29378c2ecf20Sopenharmony_ci {0xaa, 0x3c, 0x0098}, /* 00,3c,98,aa */ 29388c2ecf20Sopenharmony_ci {0xaa, 0x3d, 0x0030}, /* 00,3d,30,aa */ 29398c2ecf20Sopenharmony_ci {0xaa, 0x3e, 0x00d4}, /* 00,3E,D4,aa */ 29408c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0000}, /* 00,01,00,aa */ 29418c2ecf20Sopenharmony_ci {0xaa, 0x52, 0x00ff}, /* 00,52,FF,aa */ 29428c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 29438c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 29448c2ecf20Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */ 29458c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 29468c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 29478c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 29488c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 29498c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 29508c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 29518c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0002}, /* 00,03,02,aa */ 29528c2ecf20Sopenharmony_ci {0xaa, 0x51, 0x004e}, /* 00,51,4E,aa */ 29538c2ecf20Sopenharmony_ci {0xaa, 0x52, 0x0041}, /* 00,52,41,aa */ 29548c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 29558c2ecf20Sopenharmony_ci {0xaa, 0x50, 0x0010}, /* 00,50,10,aa */ 29568c2ecf20Sopenharmony_ci {0xaa, 0x51, 0x0010}, /* 00,51,10,aa */ 29578c2ecf20Sopenharmony_ci {0xaa, 0x54, 0x0010}, /* 00,54,10,aa */ 29588c2ecf20Sopenharmony_ci {0xaa, 0x55, 0x0010}, /* 00,55,10,aa */ 29598c2ecf20Sopenharmony_ci {0xa0, 0xf0, 0x0199}, /* 01,99,F0,cc */ 29608c2ecf20Sopenharmony_ci {0xa0, 0x80, 0x019a}, /* 01,9A,80,cc */ 29618c2ecf20Sopenharmony_ci {} 29628c2ecf20Sopenharmony_ci}; 29638c2ecf20Sopenharmony_ci 29648c2ecf20Sopenharmony_cistatic const struct usb_action mc501cb_50HZ[] = { 29658c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 29668c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 29678c2ecf20Sopenharmony_ci {0xaa, 0x36, 0x001d}, /* 00,36,1D,aa */ 29688c2ecf20Sopenharmony_ci {0xaa, 0x37, 0x004c}, /* 00,37,4C,aa */ 29698c2ecf20Sopenharmony_ci {0xaa, 0x3b, 0x001d}, /* 00,3B,1D,aa */ 29708c2ecf20Sopenharmony_ci {0xaa, 0x3c, 0x004c}, /* 00,3C,4C,aa */ 29718c2ecf20Sopenharmony_ci {0xaa, 0x3d, 0x001d}, /* 00,3D,1D,aa */ 29728c2ecf20Sopenharmony_ci {0xaa, 0x3e, 0x004c}, /* 00,3E,4C,aa */ 29738c2ecf20Sopenharmony_ci {} 29748c2ecf20Sopenharmony_ci}; 29758c2ecf20Sopenharmony_ci 29768c2ecf20Sopenharmony_cistatic const struct usb_action mc501cb_50HZScale[] = { 29778c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 29788c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 29798c2ecf20Sopenharmony_ci {0xaa, 0x36, 0x003a}, /* 00,36,3A,aa */ 29808c2ecf20Sopenharmony_ci {0xaa, 0x37, 0x0098}, /* 00,37,98,aa */ 29818c2ecf20Sopenharmony_ci {0xaa, 0x3b, 0x003a}, /* 00,3B,3A,aa */ 29828c2ecf20Sopenharmony_ci {0xaa, 0x3c, 0x0098}, /* 00,3C,98,aa */ 29838c2ecf20Sopenharmony_ci {0xaa, 0x3d, 0x003a}, /* 00,3D,3A,aa */ 29848c2ecf20Sopenharmony_ci {0xaa, 0x3e, 0x0098}, /* 00,3E,98,aa */ 29858c2ecf20Sopenharmony_ci {} 29868c2ecf20Sopenharmony_ci}; 29878c2ecf20Sopenharmony_ci 29888c2ecf20Sopenharmony_cistatic const struct usb_action mc501cb_60HZ[] = { 29898c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 29908c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 29918c2ecf20Sopenharmony_ci {0xaa, 0x36, 0x0018}, /* 00,36,18,aa */ 29928c2ecf20Sopenharmony_ci {0xaa, 0x37, 0x006a}, /* 00,37,6A,aa */ 29938c2ecf20Sopenharmony_ci {0xaa, 0x3d, 0x0018}, /* 00,3D,18,aa */ 29948c2ecf20Sopenharmony_ci {0xaa, 0x3e, 0x006a}, /* 00,3E,6A,aa */ 29958c2ecf20Sopenharmony_ci {0xaa, 0x3b, 0x0018}, /* 00,3B,18,aa */ 29968c2ecf20Sopenharmony_ci {0xaa, 0x3c, 0x006a}, /* 00,3C,6A,aa */ 29978c2ecf20Sopenharmony_ci {} 29988c2ecf20Sopenharmony_ci}; 29998c2ecf20Sopenharmony_ci 30008c2ecf20Sopenharmony_cistatic const struct usb_action mc501cb_60HZScale[] = { 30018c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 30028c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 30038c2ecf20Sopenharmony_ci {0xaa, 0x36, 0x0030}, /* 00,36,30,aa */ 30048c2ecf20Sopenharmony_ci {0xaa, 0x37, 0x00d4}, /* 00,37,D4,aa */ 30058c2ecf20Sopenharmony_ci {0xaa, 0x3d, 0x0030}, /* 00,3D,30,aa */ 30068c2ecf20Sopenharmony_ci {0xaa, 0x3e, 0x00d4}, /* 00,3E,D4,aa */ 30078c2ecf20Sopenharmony_ci {0xaa, 0x3b, 0x0030}, /* 00,3B,30,aa */ 30088c2ecf20Sopenharmony_ci {0xaa, 0x3c, 0x00d4}, /* 00,3C,D4,aa */ 30098c2ecf20Sopenharmony_ci {} 30108c2ecf20Sopenharmony_ci}; 30118c2ecf20Sopenharmony_ci 30128c2ecf20Sopenharmony_cistatic const struct usb_action mc501cb_NoFliker[] = { 30138c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 30148c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 30158c2ecf20Sopenharmony_ci {0xaa, 0x36, 0x0018}, /* 00,36,18,aa */ 30168c2ecf20Sopenharmony_ci {0xaa, 0x37, 0x006a}, /* 00,37,6A,aa */ 30178c2ecf20Sopenharmony_ci {0xaa, 0x3d, 0x0018}, /* 00,3D,18,aa */ 30188c2ecf20Sopenharmony_ci {0xaa, 0x3e, 0x006a}, /* 00,3E,6A,aa */ 30198c2ecf20Sopenharmony_ci {0xaa, 0x3b, 0x0018}, /* 00,3B,18,aa */ 30208c2ecf20Sopenharmony_ci {0xaa, 0x3c, 0x006a}, /* 00,3C,6A,aa */ 30218c2ecf20Sopenharmony_ci {} 30228c2ecf20Sopenharmony_ci}; 30238c2ecf20Sopenharmony_ci 30248c2ecf20Sopenharmony_cistatic const struct usb_action mc501cb_NoFlikerScale[] = { 30258c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0003}, /* 00,03,03,aa */ 30268c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */ 30278c2ecf20Sopenharmony_ci {0xaa, 0x36, 0x0030}, /* 00,36,30,aa */ 30288c2ecf20Sopenharmony_ci {0xaa, 0x37, 0x00d4}, /* 00,37,D4,aa */ 30298c2ecf20Sopenharmony_ci {0xaa, 0x3d, 0x0030}, /* 00,3D,30,aa */ 30308c2ecf20Sopenharmony_ci {0xaa, 0x3e, 0x00d4}, /* 00,3E,D4,aa */ 30318c2ecf20Sopenharmony_ci {0xaa, 0x3b, 0x0030}, /* 00,3B,30,aa */ 30328c2ecf20Sopenharmony_ci {0xaa, 0x3c, 0x00d4}, /* 00,3C,D4,aa */ 30338c2ecf20Sopenharmony_ci {} 30348c2ecf20Sopenharmony_ci}; 30358c2ecf20Sopenharmony_ci 30368c2ecf20Sopenharmony_ci/* from zs211.inf */ 30378c2ecf20Sopenharmony_cistatic const struct usb_action ov7620_Initial[] = { /* 640x480 */ 30388c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 30398c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, /* 00,02,40,cc */ 30408c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING}, /* 00,08,00,cc */ 30418c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 30428c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,06,cc */ 30438c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R083_RGAINADDR}, /* 00,83,02,cc */ 30448c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R085_BGAINADDR}, /* 00,85,01,cc */ 30458c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,80,cc */ 30468c2ecf20Sopenharmony_ci {0xa0, 0x81, ZC3XX_R087_EXPTIMEMID}, /* 00,87,81,cc */ 30478c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R088_EXPTIMELOW}, /* 00,88,10,cc */ 30488c2ecf20Sopenharmony_ci {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,a1,cc */ 30498c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, /* 00,8d,08,cc */ 30508c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 30518c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 30528c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 30538c2ecf20Sopenharmony_ci {0xa0, 0xd8, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d8,cc */ 30548c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 30558c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 30568c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 30578c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 30588c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 30598c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 30608c2ecf20Sopenharmony_ci {0xa0, 0xde, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,de,cc */ 30618c2ecf20Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */ 30628c2ecf20Sopenharmony_ci {0xaa, 0x12, 0x0088}, /* 00,12,88,aa */ 30638c2ecf20Sopenharmony_ci {0xaa, 0x12, 0x0048}, /* 00,12,48,aa */ 30648c2ecf20Sopenharmony_ci {0xaa, 0x75, 0x008a}, /* 00,75,8a,aa */ 30658c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x00a3}, /* 00,13,a3,aa */ 30668c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0000}, /* 00,04,00,aa */ 30678c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */ 30688c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x0000}, /* 00,14,00,aa */ 30698c2ecf20Sopenharmony_ci {0xaa, 0x15, 0x0004}, /* 00,15,04,aa */ 30708c2ecf20Sopenharmony_ci {0xaa, 0x17, 0x0018}, /* 00,17,18,aa */ 30718c2ecf20Sopenharmony_ci {0xaa, 0x18, 0x00ba}, /* 00,18,ba,aa */ 30728c2ecf20Sopenharmony_ci {0xaa, 0x19, 0x0002}, /* 00,19,02,aa */ 30738c2ecf20Sopenharmony_ci {0xaa, 0x1a, 0x00f1}, /* 00,1a,f1,aa */ 30748c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0040}, /* 00,20,40,aa */ 30758c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x0088}, /* 00,24,88,aa */ 30768c2ecf20Sopenharmony_ci {0xaa, 0x25, 0x0078}, /* 00,25,78,aa */ 30778c2ecf20Sopenharmony_ci {0xaa, 0x27, 0x00f6}, /* 00,27,f6,aa */ 30788c2ecf20Sopenharmony_ci {0xaa, 0x28, 0x00a0}, /* 00,28,a0,aa */ 30798c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x0000}, /* 00,21,00,aa */ 30808c2ecf20Sopenharmony_ci {0xaa, 0x2a, 0x0083}, /* 00,2a,83,aa */ 30818c2ecf20Sopenharmony_ci {0xaa, 0x2b, 0x0096}, /* 00,2b,96,aa */ 30828c2ecf20Sopenharmony_ci {0xaa, 0x2d, 0x0005}, /* 00,2d,05,aa */ 30838c2ecf20Sopenharmony_ci {0xaa, 0x74, 0x0020}, /* 00,74,20,aa */ 30848c2ecf20Sopenharmony_ci {0xaa, 0x61, 0x0068}, /* 00,61,68,aa */ 30858c2ecf20Sopenharmony_ci {0xaa, 0x64, 0x0088}, /* 00,64,88,aa */ 30868c2ecf20Sopenharmony_ci {0xaa, 0x00, 0x0000}, /* 00,00,00,aa */ 30878c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0080}, /* 00,06,80,aa */ 30888c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0090}, /* 00,01,90,aa */ 30898c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0030}, /* 00,02,30,aa */ 30908c2ecf20Sopenharmony_ci {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,77,cc */ 30918c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 30928c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 30938c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 30948c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */ 30958c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 30968c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 30978c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 30988c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 30998c2ecf20Sopenharmony_ci {0xa0, 0x68, ZC3XX_R116_RGAIN}, /* 01,16,68,cc */ 31008c2ecf20Sopenharmony_ci {0xa0, 0x52, ZC3XX_R118_BGAIN}, /* 01,18,52,cc */ 31018c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,40,cc */ 31028c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 31038c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,50,cc */ 31048c2ecf20Sopenharmony_ci {} 31058c2ecf20Sopenharmony_ci}; 31068c2ecf20Sopenharmony_cistatic const struct usb_action ov7620_InitialScale[] = { /* 320x240 */ 31078c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 31088c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R002_CLOCKSELECT}, /* 00,02,50,cc */ 31098c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,00,cc */ 31108c2ecf20Sopenharmony_ci /* mx change? */ 31118c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 31128c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,06,cc */ 31138c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R083_RGAINADDR}, /* 00,83,02,cc */ 31148c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R085_BGAINADDR}, /* 00,85,01,cc */ 31158c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,80,cc */ 31168c2ecf20Sopenharmony_ci {0xa0, 0x81, ZC3XX_R087_EXPTIMEMID}, /* 00,87,81,cc */ 31178c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R088_EXPTIMELOW}, /* 00,88,10,cc */ 31188c2ecf20Sopenharmony_ci {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,a1,cc */ 31198c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, /* 00,8d,08,cc */ 31208c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 31218c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 31228c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 31238c2ecf20Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d0,cc */ 31248c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 31258c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 31268c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 31278c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 31288c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 31298c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 31308c2ecf20Sopenharmony_ci {0xa0, 0xd6, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,d6,cc */ 31318c2ecf20Sopenharmony_ci /* OV7648 00,9c,d8,cc */ 31328c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */ 31338c2ecf20Sopenharmony_ci {0xaa, 0x12, 0x0088}, /* 00,12,88,aa */ 31348c2ecf20Sopenharmony_ci {0xaa, 0x12, 0x0048}, /* 00,12,48,aa */ 31358c2ecf20Sopenharmony_ci {0xaa, 0x75, 0x008a}, /* 00,75,8a,aa */ 31368c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x00a3}, /* 00,13,a3,aa */ 31378c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0000}, /* 00,04,00,aa */ 31388c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */ 31398c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x0000}, /* 00,14,00,aa */ 31408c2ecf20Sopenharmony_ci {0xaa, 0x15, 0x0004}, /* 00,15,04,aa */ 31418c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x0088}, /* 00,24,88,aa */ 31428c2ecf20Sopenharmony_ci {0xaa, 0x25, 0x0078}, /* 00,25,78,aa */ 31438c2ecf20Sopenharmony_ci {0xaa, 0x17, 0x0018}, /* 00,17,18,aa */ 31448c2ecf20Sopenharmony_ci {0xaa, 0x18, 0x00ba}, /* 00,18,ba,aa */ 31458c2ecf20Sopenharmony_ci {0xaa, 0x19, 0x0002}, /* 00,19,02,aa */ 31468c2ecf20Sopenharmony_ci {0xaa, 0x1a, 0x00f2}, /* 00,1a,f2,aa */ 31478c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0040}, /* 00,20,40,aa */ 31488c2ecf20Sopenharmony_ci {0xaa, 0x27, 0x00f6}, /* 00,27,f6,aa */ 31498c2ecf20Sopenharmony_ci {0xaa, 0x28, 0x00a0}, /* 00,28,a0,aa */ 31508c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x0000}, /* 00,21,00,aa */ 31518c2ecf20Sopenharmony_ci {0xaa, 0x2a, 0x0083}, /* 00,2a,83,aa */ 31528c2ecf20Sopenharmony_ci {0xaa, 0x2b, 0x0096}, /* 00,2b,96,aa */ 31538c2ecf20Sopenharmony_ci {0xaa, 0x2d, 0x0005}, /* 00,2d,05,aa */ 31548c2ecf20Sopenharmony_ci {0xaa, 0x74, 0x0020}, /* 00,74,20,aa */ 31558c2ecf20Sopenharmony_ci {0xaa, 0x61, 0x0068}, /* 00,61,68,aa */ 31568c2ecf20Sopenharmony_ci {0xaa, 0x64, 0x0088}, /* 00,64,88,aa */ 31578c2ecf20Sopenharmony_ci {0xaa, 0x00, 0x0000}, /* 00,00,00,aa */ 31588c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0080}, /* 00,06,80,aa */ 31598c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0090}, /* 00,01,90,aa */ 31608c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0030}, /* 00,02,30,aa */ 31618c2ecf20Sopenharmony_ci {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,77,cc */ 31628c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 31638c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 31648c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 31658c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */ 31668c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 31678c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 31688c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 31698c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 31708c2ecf20Sopenharmony_ci {0xa0, 0x68, ZC3XX_R116_RGAIN}, /* 01,16,68,cc */ 31718c2ecf20Sopenharmony_ci {0xa0, 0x52, ZC3XX_R118_BGAIN}, /* 01,18,52,cc */ 31728c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,50,cc */ 31738c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 31748c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,50,cc */ 31758c2ecf20Sopenharmony_ci {} 31768c2ecf20Sopenharmony_ci}; 31778c2ecf20Sopenharmony_cistatic const struct usb_action ov7620_50HZ[] = { 31788c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */ 31798c2ecf20Sopenharmony_ci {0xaa, 0x2b, 0x0096}, /* 00,2b,96,aa */ 31808c2ecf20Sopenharmony_ci /* enable 1/120s & 1/100s exposures for banding filter */ 31818c2ecf20Sopenharmony_ci {0xaa, 0x75, 0x008e}, 31828c2ecf20Sopenharmony_ci {0xaa, 0x2d, 0x0005}, /* 00,2d,05,aa */ 31838c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 31848c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 31858c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,18,cc */ 31868c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 31878c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 31888c2ecf20Sopenharmony_ci {0xa0, 0x83, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,83,cc */ 31898c2ecf20Sopenharmony_ci {0xaa, 0x76, 0x0003}, /* 00,76,03,aa */ 31908c2ecf20Sopenharmony_ci/* {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, * 00,02,40,cc 31918c2ecf20Sopenharmony_ci * if mode0 (640x480) */ 31928c2ecf20Sopenharmony_ci {} 31938c2ecf20Sopenharmony_ci}; 31948c2ecf20Sopenharmony_cistatic const struct usb_action ov7620_60HZ[] = { 31958c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */ 31968c2ecf20Sopenharmony_ci {0xaa, 0x2b, 0x0000}, /* 00,2b,00,aa */ 31978c2ecf20Sopenharmony_ci /* enable 1/120s & 1/100s exposures for banding filter */ 31988c2ecf20Sopenharmony_ci {0xaa, 0x75, 0x008e}, 31998c2ecf20Sopenharmony_ci {0xaa, 0x2d, 0x0005}, /* 00,2d,05,aa */ 32008c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 32018c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 32028c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,18,cc */ 32038c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 32048c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 32058c2ecf20Sopenharmony_ci {0xa0, 0x83, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,83,cc */ 32068c2ecf20Sopenharmony_ci {0xaa, 0x76, 0x0003}, /* 00,76,03,aa */ 32078c2ecf20Sopenharmony_ci/* {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, * 00,02,40,cc 32088c2ecf20Sopenharmony_ci * if mode0 (640x480) */ 32098c2ecf20Sopenharmony_ci/* ?? in gspca v1, it was 32108c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x0039}, * 00,00,00,dd * 32118c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0037}, */ 32128c2ecf20Sopenharmony_ci {} 32138c2ecf20Sopenharmony_ci}; 32148c2ecf20Sopenharmony_cistatic const struct usb_action ov7620_NoFliker[] = { 32158c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0100}, /* 00,01,00,dd */ 32168c2ecf20Sopenharmony_ci {0xaa, 0x2b, 0x0000}, /* 00,2b,00,aa */ 32178c2ecf20Sopenharmony_ci /* disable 1/120s & 1/100s exposures for banding filter */ 32188c2ecf20Sopenharmony_ci {0xaa, 0x75, 0x008a}, 32198c2ecf20Sopenharmony_ci {0xaa, 0x2d, 0x0001}, /* 00,2d,01,aa */ 32208c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 32218c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */ 32228c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,18,cc */ 32238c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 32248c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 32258c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,01,cc */ 32268c2ecf20Sopenharmony_ci/* {0xa0, 0x44, ZC3XX_R002_CLOCKSELECT}, * 00,02,44,cc 32278c2ecf20Sopenharmony_ci * if mode1 (320x240) */ 32288c2ecf20Sopenharmony_ci/* ?? was 32298c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x0039}, * 00,00,00,dd * 32308c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0037}, */ 32318c2ecf20Sopenharmony_ci {} 32328c2ecf20Sopenharmony_ci}; 32338c2ecf20Sopenharmony_ci 32348c2ecf20Sopenharmony_cistatic const struct usb_action ov7630c_InitialScale[] = { 32358c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 32368c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 32378c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 32388c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 32398c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 32408c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 32418c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R010_CMOSSENSORSELECT}, 32428c2ecf20Sopenharmony_ci {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, 32438c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, 32448c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 32458c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 32468c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 32478c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 32488c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 32498c2ecf20Sopenharmony_ci {0xaa, 0x12, 0x0080}, 32508c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R083_RGAINADDR}, 32518c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R085_BGAINADDR}, 32528c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R086_EXPTIMEHIGH}, 32538c2ecf20Sopenharmony_ci {0xa0, 0x91, ZC3XX_R087_EXPTIMEMID}, 32548c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R088_EXPTIMELOW}, 32558c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 32568c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 32578c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 32588c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 32598c2ecf20Sopenharmony_ci {0xa0, 0xd8, ZC3XX_R09C_WINHEIGHTLOW}, 32608c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 32618c2ecf20Sopenharmony_ci {0xaa, 0x12, 0x0069}, 32628c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0020}, 32638c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0050}, 32648c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0083}, 32658c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x0000}, 32668c2ecf20Sopenharmony_ci {0xaa, 0x15, 0x0024}, 32678c2ecf20Sopenharmony_ci {0xaa, 0x17, 0x0018}, 32688c2ecf20Sopenharmony_ci {0xaa, 0x18, 0x00ba}, 32698c2ecf20Sopenharmony_ci {0xaa, 0x19, 0x0002}, 32708c2ecf20Sopenharmony_ci {0xaa, 0x1a, 0x00f6}, 32718c2ecf20Sopenharmony_ci {0xaa, 0x1b, 0x0002}, 32728c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x00c2}, 32738c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x0060}, 32748c2ecf20Sopenharmony_ci {0xaa, 0x25, 0x0040}, 32758c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x0030}, 32768c2ecf20Sopenharmony_ci {0xaa, 0x27, 0x00ea}, 32778c2ecf20Sopenharmony_ci {0xaa, 0x28, 0x00a0}, 32788c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x0000}, 32798c2ecf20Sopenharmony_ci {0xaa, 0x2a, 0x0081}, 32808c2ecf20Sopenharmony_ci {0xaa, 0x2b, 0x0096}, 32818c2ecf20Sopenharmony_ci {0xaa, 0x2d, 0x0094}, 32828c2ecf20Sopenharmony_ci {0xaa, 0x2f, 0x003d}, 32838c2ecf20Sopenharmony_ci {0xaa, 0x30, 0x0024}, 32848c2ecf20Sopenharmony_ci {0xaa, 0x60, 0x0000}, 32858c2ecf20Sopenharmony_ci {0xaa, 0x61, 0x0040}, 32868c2ecf20Sopenharmony_ci {0xaa, 0x68, 0x007c}, 32878c2ecf20Sopenharmony_ci {0xaa, 0x6f, 0x0015}, 32888c2ecf20Sopenharmony_ci {0xaa, 0x75, 0x0088}, 32898c2ecf20Sopenharmony_ci {0xaa, 0x77, 0x00b5}, 32908c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0060}, 32918c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0060}, 32928c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 32938c2ecf20Sopenharmony_ci {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 32948c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 32958c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 32968c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 32978c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 32988c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 32998c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 33008c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 33018c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 33028c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R116_RGAIN}, 33038c2ecf20Sopenharmony_ci {0xa0, 0x46, ZC3XX_R118_BGAIN}, 33048c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R113_RGB03}, 33058c2ecf20Sopenharmony_ci/* 0x10, */ 33068c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0002}, 33078c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R10A_RGB00}, /* matrix */ 33088c2ecf20Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R10B_RGB01}, 33098c2ecf20Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R10C_RGB02}, 33108c2ecf20Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R10D_RGB10}, 33118c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R10E_RGB11}, 33128c2ecf20Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R10F_RGB12}, 33138c2ecf20Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R110_RGB20}, 33148c2ecf20Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R111_RGB21}, 33158c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R112_RGB22}, 33168c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0008}, 33178c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 33188c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 33198c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x01c8}, 33208c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x01c9}, 33218c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x01ca}, 33228c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 33238c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R120_GAMMA00}, /* gamma 2 ?*/ 33248c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R121_GAMMA01}, 33258c2ecf20Sopenharmony_ci {0xa0, 0x1f, ZC3XX_R122_GAMMA02}, 33268c2ecf20Sopenharmony_ci {0xa0, 0x3a, ZC3XX_R123_GAMMA03}, 33278c2ecf20Sopenharmony_ci {0xa0, 0x53, ZC3XX_R124_GAMMA04}, 33288c2ecf20Sopenharmony_ci {0xa0, 0x6d, ZC3XX_R125_GAMMA05}, 33298c2ecf20Sopenharmony_ci {0xa0, 0x85, ZC3XX_R126_GAMMA06}, 33308c2ecf20Sopenharmony_ci {0xa0, 0x9c, ZC3XX_R127_GAMMA07}, 33318c2ecf20Sopenharmony_ci {0xa0, 0xb0, ZC3XX_R128_GAMMA08}, 33328c2ecf20Sopenharmony_ci {0xa0, 0xc2, ZC3XX_R129_GAMMA09}, 33338c2ecf20Sopenharmony_ci {0xa0, 0xd1, ZC3XX_R12A_GAMMA0A}, 33348c2ecf20Sopenharmony_ci {0xa0, 0xde, ZC3XX_R12B_GAMMA0B}, 33358c2ecf20Sopenharmony_ci {0xa0, 0xe9, ZC3XX_R12C_GAMMA0C}, 33368c2ecf20Sopenharmony_ci {0xa0, 0xf2, ZC3XX_R12D_GAMMA0D}, 33378c2ecf20Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R12E_GAMMA0E}, 33388c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, 33398c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R130_GAMMA10}, 33408c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R131_GAMMA11}, 33418c2ecf20Sopenharmony_ci {0xa0, 0x16, ZC3XX_R132_GAMMA12}, 33428c2ecf20Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R133_GAMMA13}, 33438c2ecf20Sopenharmony_ci {0xa0, 0x19, ZC3XX_R134_GAMMA14}, 33448c2ecf20Sopenharmony_ci {0xa0, 0x19, ZC3XX_R135_GAMMA15}, 33458c2ecf20Sopenharmony_ci {0xa0, 0x17, ZC3XX_R136_GAMMA16}, 33468c2ecf20Sopenharmony_ci {0xa0, 0x15, ZC3XX_R137_GAMMA17}, 33478c2ecf20Sopenharmony_ci {0xa0, 0x12, ZC3XX_R138_GAMMA18}, 33488c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R139_GAMMA19}, 33498c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R13A_GAMMA1A}, 33508c2ecf20Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R13B_GAMMA1B}, 33518c2ecf20Sopenharmony_ci {0xa0, 0x09, ZC3XX_R13C_GAMMA1C}, 33528c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R13D_GAMMA1D}, 33538c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R13E_GAMMA1E}, 33548c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R13F_GAMMA1F}, 33558c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R10A_RGB00}, /* matrix */ 33568c2ecf20Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R10B_RGB01}, 33578c2ecf20Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R10C_RGB02}, 33588c2ecf20Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R10D_RGB10}, 33598c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R10E_RGB11}, 33608c2ecf20Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R10F_RGB12}, 33618c2ecf20Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R110_RGB20}, 33628c2ecf20Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R111_RGB21}, 33638c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R112_RGB22}, 33648c2ecf20Sopenharmony_ci 33658c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0180}, 33668c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 33678c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x001b}, 33688c2ecf20Sopenharmony_ci {0xaa, 0x76, 0x0002}, 33698c2ecf20Sopenharmony_ci {0xaa, 0x2a, 0x0081}, 33708c2ecf20Sopenharmony_ci {0xaa, 0x2b, 0x0000}, 33718c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 33728c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R191_EXPOSURELIMITMID}, 33738c2ecf20Sopenharmony_ci {0xa0, 0xb8, ZC3XX_R192_EXPOSURELIMITLOW}, 33748c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 33758c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 33768c2ecf20Sopenharmony_ci {0xa0, 0x37, ZC3XX_R197_ANTIFLICKERLOW}, 33778c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 33788c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 33798c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 33808c2ecf20Sopenharmony_ci {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, 33818c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, 33828c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 33838c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE}, 33848c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0083}, /* 40 */ 33858c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0180}, 33868c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 33878c2ecf20Sopenharmony_ci {} 33888c2ecf20Sopenharmony_ci}; 33898c2ecf20Sopenharmony_ci 33908c2ecf20Sopenharmony_cistatic const struct usb_action ov7630c_Initial[] = { 33918c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 33928c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 33938c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 33948c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 33958c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R010_CMOSSENSORSELECT}, 33968c2ecf20Sopenharmony_ci {0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, 33978c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, 33988c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 33998c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 34008c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 34018c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 34028c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 34038c2ecf20Sopenharmony_ci 34048c2ecf20Sopenharmony_ci {0xaa, 0x12, 0x0080}, 34058c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R083_RGAINADDR}, 34068c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R085_BGAINADDR}, 34078c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R086_EXPTIMEHIGH}, 34088c2ecf20Sopenharmony_ci {0xa0, 0x91, ZC3XX_R087_EXPTIMEMID}, 34098c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R088_EXPTIMELOW}, 34108c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 34118c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 34128c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 34138c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 34148c2ecf20Sopenharmony_ci {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, 34158c2ecf20Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, 34168c2ecf20Sopenharmony_ci {0xaa, 0x12, 0x0069}, /* i2c */ 34178c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0020}, 34188c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0050}, 34198c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x00c3}, 34208c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x0000}, 34218c2ecf20Sopenharmony_ci {0xaa, 0x15, 0x0024}, 34228c2ecf20Sopenharmony_ci {0xaa, 0x19, 0x0003}, 34238c2ecf20Sopenharmony_ci {0xaa, 0x1a, 0x00f6}, 34248c2ecf20Sopenharmony_ci {0xaa, 0x1b, 0x0002}, 34258c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x00c2}, 34268c2ecf20Sopenharmony_ci {0xaa, 0x24, 0x0060}, 34278c2ecf20Sopenharmony_ci {0xaa, 0x25, 0x0040}, 34288c2ecf20Sopenharmony_ci {0xaa, 0x26, 0x0030}, 34298c2ecf20Sopenharmony_ci {0xaa, 0x27, 0x00ea}, 34308c2ecf20Sopenharmony_ci {0xaa, 0x28, 0x00a0}, 34318c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x0000}, 34328c2ecf20Sopenharmony_ci {0xaa, 0x2a, 0x0081}, 34338c2ecf20Sopenharmony_ci {0xaa, 0x2b, 0x0096}, 34348c2ecf20Sopenharmony_ci {0xaa, 0x2d, 0x0084}, 34358c2ecf20Sopenharmony_ci {0xaa, 0x2f, 0x003d}, 34368c2ecf20Sopenharmony_ci {0xaa, 0x30, 0x0024}, 34378c2ecf20Sopenharmony_ci {0xaa, 0x60, 0x0000}, 34388c2ecf20Sopenharmony_ci {0xaa, 0x61, 0x0040}, 34398c2ecf20Sopenharmony_ci {0xaa, 0x68, 0x007c}, 34408c2ecf20Sopenharmony_ci {0xaa, 0x6f, 0x0015}, 34418c2ecf20Sopenharmony_ci {0xaa, 0x75, 0x0088}, 34428c2ecf20Sopenharmony_ci {0xaa, 0x77, 0x00b5}, 34438c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0060}, 34448c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0060}, 34458c2ecf20Sopenharmony_ci {0xaa, 0x17, 0x0018}, 34468c2ecf20Sopenharmony_ci {0xaa, 0x18, 0x00ba}, 34478c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 34488c2ecf20Sopenharmony_ci {0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, 34498c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 34508c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 34518c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN}, 34528c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 34538c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 34548c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 34558c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 34568c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 34578c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R116_RGAIN}, 34588c2ecf20Sopenharmony_ci {0xa0, 0x46, ZC3XX_R118_BGAIN}, 34598c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R113_RGB03}, 34608c2ecf20Sopenharmony_ci 34618c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0002}, 34628c2ecf20Sopenharmony_ci {0xa0, 0x4e, ZC3XX_R10A_RGB00}, /* matrix */ 34638c2ecf20Sopenharmony_ci {0xa0, 0xfe, ZC3XX_R10B_RGB01}, 34648c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10C_RGB02}, 34658c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10D_RGB10}, 34668c2ecf20Sopenharmony_ci {0xa0, 0x4d, ZC3XX_R10E_RGB11}, 34678c2ecf20Sopenharmony_ci {0xa0, 0xfc, ZC3XX_R10F_RGB12}, 34688c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R110_RGB20}, 34698c2ecf20Sopenharmony_ci {0xa0, 0xf6, ZC3XX_R111_RGB21}, 34708c2ecf20Sopenharmony_ci {0xa0, 0x4a, ZC3XX_R112_RGB22}, 34718c2ecf20Sopenharmony_ci 34728c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0008}, 34738c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* clock ? */ 34748c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, /* sharpness+ */ 34758c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x01c8}, 34768c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x01c9}, 34778c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x01ca}, 34788c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, /* sharpness- */ 34798c2ecf20Sopenharmony_ci {0xa0, 0x16, ZC3XX_R120_GAMMA00}, /* gamma ~4 */ 34808c2ecf20Sopenharmony_ci {0xa0, 0x3a, ZC3XX_R121_GAMMA01}, 34818c2ecf20Sopenharmony_ci {0xa0, 0x5b, ZC3XX_R122_GAMMA02}, 34828c2ecf20Sopenharmony_ci {0xa0, 0x7c, ZC3XX_R123_GAMMA03}, 34838c2ecf20Sopenharmony_ci {0xa0, 0x94, ZC3XX_R124_GAMMA04}, 34848c2ecf20Sopenharmony_ci {0xa0, 0xa9, ZC3XX_R125_GAMMA05}, 34858c2ecf20Sopenharmony_ci {0xa0, 0xbb, ZC3XX_R126_GAMMA06}, 34868c2ecf20Sopenharmony_ci {0xa0, 0xca, ZC3XX_R127_GAMMA07}, 34878c2ecf20Sopenharmony_ci {0xa0, 0xd7, ZC3XX_R128_GAMMA08}, 34888c2ecf20Sopenharmony_ci {0xa0, 0xe1, ZC3XX_R129_GAMMA09}, 34898c2ecf20Sopenharmony_ci {0xa0, 0xea, ZC3XX_R12A_GAMMA0A}, 34908c2ecf20Sopenharmony_ci {0xa0, 0xf1, ZC3XX_R12B_GAMMA0B}, 34918c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R12C_GAMMA0C}, 34928c2ecf20Sopenharmony_ci {0xa0, 0xfc, ZC3XX_R12D_GAMMA0D}, 34938c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R12E_GAMMA0E}, 34948c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R12F_GAMMA0F}, 34958c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R130_GAMMA10}, 34968c2ecf20Sopenharmony_ci {0xa0, 0x22, ZC3XX_R131_GAMMA11}, 34978c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R132_GAMMA12}, 34988c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R133_GAMMA13}, 34998c2ecf20Sopenharmony_ci {0xa0, 0x16, ZC3XX_R134_GAMMA14}, 35008c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R135_GAMMA15}, 35018c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R136_GAMMA16}, 35028c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R137_GAMMA17}, 35038c2ecf20Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R138_GAMMA18}, 35048c2ecf20Sopenharmony_ci {0xa0, 0x09, ZC3XX_R139_GAMMA19}, 35058c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R13A_GAMMA1A}, 35068c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R13B_GAMMA1B}, 35078c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R13C_GAMMA1C}, 35088c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R13D_GAMMA1D}, 35098c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R13E_GAMMA1E}, 35108c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R13F_GAMMA1F}, 35118c2ecf20Sopenharmony_ci {0xa0, 0x4e, ZC3XX_R10A_RGB00}, /* matrix */ 35128c2ecf20Sopenharmony_ci {0xa0, 0xfe, ZC3XX_R10B_RGB01}, 35138c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10C_RGB02}, 35148c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R10D_RGB10}, 35158c2ecf20Sopenharmony_ci {0xa0, 0x4d, ZC3XX_R10E_RGB11}, 35168c2ecf20Sopenharmony_ci {0xa0, 0xfc, ZC3XX_R10F_RGB12}, 35178c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R110_RGB20}, 35188c2ecf20Sopenharmony_ci {0xa0, 0xf6, ZC3XX_R111_RGB21}, 35198c2ecf20Sopenharmony_ci {0xa0, 0x4a, ZC3XX_R112_RGB22}, 35208c2ecf20Sopenharmony_ci 35218c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0180}, 35228c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 35238c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x000d}, 35248c2ecf20Sopenharmony_ci {0xaa, 0x76, 0x0002}, 35258c2ecf20Sopenharmony_ci {0xaa, 0x2a, 0x0081}, 35268c2ecf20Sopenharmony_ci {0xaa, 0x2b, 0x0000}, 35278c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 35288c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R191_EXPOSURELIMITMID}, 35298c2ecf20Sopenharmony_ci {0xa0, 0xd8, ZC3XX_R192_EXPOSURELIMITLOW}, 35308c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 35318c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 35328c2ecf20Sopenharmony_ci {0xa0, 0x1b, ZC3XX_R197_ANTIFLICKERLOW}, 35338c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 35348c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 35358c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, 35368c2ecf20Sopenharmony_ci {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, 35378c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, 35388c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, 35398c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE}, 35408c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x00c3}, 35418c2ecf20Sopenharmony_ci 35428c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0180}, 35438c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 35448c2ecf20Sopenharmony_ci {} 35458c2ecf20Sopenharmony_ci}; 35468c2ecf20Sopenharmony_ci 35478c2ecf20Sopenharmony_cistatic const struct usb_action pas106b_Initial_com[] = { 35488c2ecf20Sopenharmony_ci/* Sream and Sensor specific */ 35498c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0010}, /* CMOSSensorSelect */ 35508c2ecf20Sopenharmony_ci/* System */ 35518c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* SystemControl */ 35528c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* SystemControl */ 35538c2ecf20Sopenharmony_ci/* Picture size */ 35548c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, /* ClockSelect */ 35558c2ecf20Sopenharmony_ci {0xa0, 0x03, 0x003a}, 35568c2ecf20Sopenharmony_ci {0xa0, 0x0c, 0x003b}, 35578c2ecf20Sopenharmony_ci {0xa0, 0x04, 0x0038}, 35588c2ecf20Sopenharmony_ci {} 35598c2ecf20Sopenharmony_ci}; 35608c2ecf20Sopenharmony_ci 35618c2ecf20Sopenharmony_cistatic const struct usb_action pas106b_InitialScale[] = { /* 176x144 */ 35628c2ecf20Sopenharmony_ci/* JPEG control */ 35638c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 35648c2ecf20Sopenharmony_ci/* Sream and Sensor specific */ 35658c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R010_CMOSSENSORSELECT}, 35668c2ecf20Sopenharmony_ci/* Picture size */ 35678c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R003_FRAMEWIDTHHIGH}, 35688c2ecf20Sopenharmony_ci {0xa0, 0xb0, ZC3XX_R004_FRAMEWIDTHLOW}, 35698c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R005_FRAMEHEIGHTHIGH}, 35708c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R006_FRAMEHEIGHTLOW}, 35718c2ecf20Sopenharmony_ci/* System */ 35728c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 35738c2ecf20Sopenharmony_ci/* Sream and Sensor specific */ 35748c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 35758c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 35768c2ecf20Sopenharmony_ci/* Sensor Interface */ 35778c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, 35788c2ecf20Sopenharmony_ci/* Window inside sensor array */ 35798c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R09A_WINXSTARTLOW}, 35808c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 35818c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R11C_FIRSTXLOW}, 35828c2ecf20Sopenharmony_ci {0xa0, 0x28, ZC3XX_R09C_WINHEIGHTLOW}, 35838c2ecf20Sopenharmony_ci {0xa0, 0x68, ZC3XX_R09E_WINWIDTHLOW}, 35848c2ecf20Sopenharmony_ci/* Init the sensor */ 35858c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0004}, 35868c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 35878c2ecf20Sopenharmony_ci {0xaa, 0x09, 0x0005}, 35888c2ecf20Sopenharmony_ci {0xaa, 0x0a, 0x0002}, 35898c2ecf20Sopenharmony_ci {0xaa, 0x0b, 0x0002}, 35908c2ecf20Sopenharmony_ci {0xaa, 0x0c, 0x0005}, 35918c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x0000}, 35928c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0002}, 35938c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x0081}, 35948c2ecf20Sopenharmony_ci/* Other registers */ 35958c2ecf20Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 35968c2ecf20Sopenharmony_ci/* Frame retrieving */ 35978c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 35988c2ecf20Sopenharmony_ci/* Gains */ 35998c2ecf20Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R1A8_DIGITALGAIN}, 36008c2ecf20Sopenharmony_ci/* Unknown */ 36018c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 36028c2ecf20Sopenharmony_ci/* Sharpness */ 36038c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 36048c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 36058c2ecf20Sopenharmony_ci/* Other registers */ 36068c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 36078c2ecf20Sopenharmony_ci/* Auto exposure and white balance */ 36088c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 36098c2ecf20Sopenharmony_ci/*Dead pixels */ 36108c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 36118c2ecf20Sopenharmony_ci/* EEPROM */ 36128c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 36138c2ecf20Sopenharmony_ci/* JPEG control */ 36148c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 36158c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, 36168c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, 36178c2ecf20Sopenharmony_ci/* Other registers */ 36188c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 36198c2ecf20Sopenharmony_ci/* Auto exposure and white balance */ 36208c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 36218c2ecf20Sopenharmony_ci/*Dead pixels */ 36228c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 36238c2ecf20Sopenharmony_ci/* EEPROM */ 36248c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 36258c2ecf20Sopenharmony_ci/* JPEG control */ 36268c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 36278c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, 36288c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, 36298c2ecf20Sopenharmony_ci 36308c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R10A_RGB00}, /* matrix */ 36318c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10B_RGB01}, 36328c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10C_RGB02}, 36338c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10D_RGB10}, 36348c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R10E_RGB11}, 36358c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10F_RGB12}, 36368c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R110_RGB20}, 36378c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R111_RGB21}, 36388c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R112_RGB22}, 36398c2ecf20Sopenharmony_ci/* Auto correction */ 36408c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R181_WINXSTART}, 36418c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R182_WINXWIDTH}, 36428c2ecf20Sopenharmony_ci {0xa0, 0x16, ZC3XX_R183_WINXCENTER}, 36438c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R184_WINYSTART}, 36448c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R185_WINYWIDTH}, 36458c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R186_WINYCENTER}, 36468c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 36478c2ecf20Sopenharmony_ci/* Auto exposure and white balance */ 36488c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 36498c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID}, 36508c2ecf20Sopenharmony_ci {0xa0, 0xb1, ZC3XX_R192_EXPOSURELIMITLOW}, 36518c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 36528c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 36538c2ecf20Sopenharmony_ci {0xa0, 0x87, ZC3XX_R197_ANTIFLICKERLOW}, 36548c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, 36558c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, 36568c2ecf20Sopenharmony_ci/* sensor on */ 36578c2ecf20Sopenharmony_ci {0xaa, 0x07, 0x00b1}, 36588c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0003}, 36598c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0001}, 36608c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x003b}, 36618c2ecf20Sopenharmony_ci/* Gains */ 36628c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R1A9_DIGITALLIMITDIFF}, 36638c2ecf20Sopenharmony_ci {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, 36648c2ecf20Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R11D_GLOBALGAIN}, 36658c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 36668c2ecf20Sopenharmony_ci/* Auto correction */ 36678c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE}, 36688c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0180}, /* AutoCorrectEnable */ 36698c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 36708c2ecf20Sopenharmony_ci/* Gains */ 36718c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 36728c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 36738c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 36748c2ecf20Sopenharmony_ci {} 36758c2ecf20Sopenharmony_ci}; 36768c2ecf20Sopenharmony_ci 36778c2ecf20Sopenharmony_cistatic const struct usb_action pas106b_Initial[] = { /* 352x288 */ 36788c2ecf20Sopenharmony_ci/* JPEG control */ 36798c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 36808c2ecf20Sopenharmony_ci/* Sream and Sensor specific */ 36818c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R010_CMOSSENSORSELECT}, 36828c2ecf20Sopenharmony_ci/* Picture size */ 36838c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R003_FRAMEWIDTHHIGH}, 36848c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R004_FRAMEWIDTHLOW}, 36858c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 36868c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R006_FRAMEHEIGHTLOW}, 36878c2ecf20Sopenharmony_ci/* System */ 36888c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 36898c2ecf20Sopenharmony_ci/* Sream and Sensor specific */ 36908c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, 36918c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 36928c2ecf20Sopenharmony_ci/* Sensor Interface */ 36938c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, 36948c2ecf20Sopenharmony_ci/* Window inside sensor array */ 36958c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R09A_WINXSTARTLOW}, 36968c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 36978c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R11C_FIRSTXLOW}, 36988c2ecf20Sopenharmony_ci {0xa0, 0x28, ZC3XX_R09C_WINHEIGHTLOW}, 36998c2ecf20Sopenharmony_ci {0xa0, 0x68, ZC3XX_R09E_WINWIDTHLOW}, 37008c2ecf20Sopenharmony_ci/* Init the sensor */ 37018c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0004}, 37028c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0000}, 37038c2ecf20Sopenharmony_ci {0xaa, 0x09, 0x0005}, 37048c2ecf20Sopenharmony_ci {0xaa, 0x0a, 0x0002}, 37058c2ecf20Sopenharmony_ci {0xaa, 0x0b, 0x0002}, 37068c2ecf20Sopenharmony_ci {0xaa, 0x0c, 0x0005}, 37078c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x0000}, 37088c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0002}, 37098c2ecf20Sopenharmony_ci {0xaa, 0x14, 0x0081}, 37108c2ecf20Sopenharmony_ci/* Other registers */ 37118c2ecf20Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 37128c2ecf20Sopenharmony_ci/* Frame retrieving */ 37138c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 37148c2ecf20Sopenharmony_ci/* Gains */ 37158c2ecf20Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R1A8_DIGITALGAIN}, 37168c2ecf20Sopenharmony_ci/* Unknown */ 37178c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 37188c2ecf20Sopenharmony_ci/* Sharpness */ 37198c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 37208c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 37218c2ecf20Sopenharmony_ci/* Other registers */ 37228c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 37238c2ecf20Sopenharmony_ci/* Auto exposure and white balance */ 37248c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 37258c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R18D_YTARGET}, 37268c2ecf20Sopenharmony_ci/*Dead pixels */ 37278c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 37288c2ecf20Sopenharmony_ci/* EEPROM */ 37298c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 37308c2ecf20Sopenharmony_ci/* JPEG control */ 37318c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 37328c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, 37338c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, 37348c2ecf20Sopenharmony_ci/* Other registers */ 37358c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 37368c2ecf20Sopenharmony_ci/* Auto exposure and white balance */ 37378c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 37388c2ecf20Sopenharmony_ci/*Dead pixels */ 37398c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 37408c2ecf20Sopenharmony_ci/* EEPROM */ 37418c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 37428c2ecf20Sopenharmony_ci/* JPEG control */ 37438c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 37448c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00}, 37458c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05}, 37468c2ecf20Sopenharmony_ci 37478c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R10A_RGB00}, /* matrix */ 37488c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10B_RGB01}, 37498c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10C_RGB02}, 37508c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10D_RGB10}, 37518c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R10E_RGB11}, 37528c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R10F_RGB12}, 37538c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R110_RGB20}, 37548c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R111_RGB21}, 37558c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R112_RGB22}, 37568c2ecf20Sopenharmony_ci/* Auto correction */ 37578c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R181_WINXSTART}, 37588c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R182_WINXWIDTH}, 37598c2ecf20Sopenharmony_ci {0xa0, 0x16, ZC3XX_R183_WINXCENTER}, 37608c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R184_WINYSTART}, 37618c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R185_WINYWIDTH}, 37628c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R186_WINYCENTER}, 37638c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 37648c2ecf20Sopenharmony_ci 37658c2ecf20Sopenharmony_ci/* Auto exposure and white balance */ 37668c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 37678c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID}, 37688c2ecf20Sopenharmony_ci {0xa0, 0xb1, ZC3XX_R192_EXPOSURELIMITLOW}, 37698c2ecf20Sopenharmony_ci 37708c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 37718c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 37728c2ecf20Sopenharmony_ci {0xa0, 0x87, ZC3XX_R197_ANTIFLICKERLOW}, 37738c2ecf20Sopenharmony_ci 37748c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 37758c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 37768c2ecf20Sopenharmony_ci/* sensor on */ 37778c2ecf20Sopenharmony_ci {0xaa, 0x07, 0x00b1}, 37788c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0003}, 37798c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0001}, 37808c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x003b}, 37818c2ecf20Sopenharmony_ci/* Gains */ 37828c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R1A9_DIGITALLIMITDIFF}, 37838c2ecf20Sopenharmony_ci {0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP}, 37848c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 37858c2ecf20Sopenharmony_ci/* Auto correction */ 37868c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE}, 37878c2ecf20Sopenharmony_ci {0xa1, 0x01, 0x0180}, /* AutoCorrectEnable */ 37888c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 37898c2ecf20Sopenharmony_ci/* Gains */ 37908c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R116_RGAIN}, 37918c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R117_GGAIN}, 37928c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R118_BGAIN}, 37938c2ecf20Sopenharmony_ci 37948c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x0007}, /* AutoCorrectEnable */ 37958c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R018_FRAMELOST}, /* Frame adjust */ 37968c2ecf20Sopenharmony_ci {} 37978c2ecf20Sopenharmony_ci}; 37988c2ecf20Sopenharmony_cistatic const struct usb_action pas106b_50HZ[] = { 37998c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 38008c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,06,cc */ 38018c2ecf20Sopenharmony_ci {0xa0, 0x54, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,54,cc */ 38028c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 38038c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 38048c2ecf20Sopenharmony_ci {0xa0, 0x87, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,87,cc */ 38058c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 38068c2ecf20Sopenharmony_ci {0xa0, 0x30, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,30,cc */ 38078c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0021}, /* 00,03,21,aa */ 38088c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x000c}, /* 00,04,0c,aa */ 38098c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0002}, /* 00,05,02,aa */ 38108c2ecf20Sopenharmony_ci {0xaa, 0x07, 0x001c}, /* 00,07,1c,aa */ 38118c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,04,cc */ 38128c2ecf20Sopenharmony_ci {} 38138c2ecf20Sopenharmony_ci}; 38148c2ecf20Sopenharmony_cistatic const struct usb_action pas106b_60HZ[] = { 38158c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 38168c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,06,cc */ 38178c2ecf20Sopenharmony_ci {0xa0, 0x2e, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,2e,cc */ 38188c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 38198c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 38208c2ecf20Sopenharmony_ci {0xa0, 0x71, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,71,cc */ 38218c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 38228c2ecf20Sopenharmony_ci {0xa0, 0x30, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,30,cc */ 38238c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x001c}, /* 00,03,1c,aa */ 38248c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0004}, /* 00,04,04,aa */ 38258c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0001}, /* 00,05,01,aa */ 38268c2ecf20Sopenharmony_ci {0xaa, 0x07, 0x00c4}, /* 00,07,c4,aa */ 38278c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,04,cc */ 38288c2ecf20Sopenharmony_ci {} 38298c2ecf20Sopenharmony_ci}; 38308c2ecf20Sopenharmony_cistatic const struct usb_action pas106b_NoFliker[] = { 38318c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 38328c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,06,cc */ 38338c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,50,cc */ 38348c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 38358c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 38368c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */ 38378c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 38388c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 38398c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0013}, /* 00,03,13,aa */ 38408c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0000}, /* 00,04,00,aa */ 38418c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0001}, /* 00,05,01,aa */ 38428c2ecf20Sopenharmony_ci {0xaa, 0x07, 0x0030}, /* 00,07,30,aa */ 38438c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 38448c2ecf20Sopenharmony_ci {} 38458c2ecf20Sopenharmony_ci}; 38468c2ecf20Sopenharmony_ci 38478c2ecf20Sopenharmony_ci/* from lvWIMv.inf 046d:08a2/:08aa 2007/06/03 */ 38488c2ecf20Sopenharmony_cistatic const struct usb_action pas202b_Initial[] = { /* 640x480 */ 38498c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 38508c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 38518c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0e,cc */ 38528c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, /* 00,02,00,cc */ 38538c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 38548c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 38558c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 38568c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */ 38578c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 38588c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 38598c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 38608c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, /* 00,8d,08,cc */ 38618c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 38628c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,03,cc */ 38638c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 38648c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,03,cc */ 38658c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, /* 00,9b,01,cc */ 38668c2ecf20Sopenharmony_ci {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e6,cc */ 38678c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, /* 00,9d,02,cc */ 38688c2ecf20Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */ 38698c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0002}, /* 00,02,04,aa --> 02 */ 38708c2ecf20Sopenharmony_ci {0xaa, 0x07, 0x0006}, /* 00,07,06,aa */ 38718c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0002}, /* 00,08,02,aa */ 38728c2ecf20Sopenharmony_ci {0xaa, 0x09, 0x0006}, /* 00,09,06,aa */ 38738c2ecf20Sopenharmony_ci {0xaa, 0x0a, 0x0001}, /* 00,0a,01,aa */ 38748c2ecf20Sopenharmony_ci {0xaa, 0x0b, 0x0001}, /* 00,0b,01,aa */ 38758c2ecf20Sopenharmony_ci {0xaa, 0x0c, 0x0006}, 38768c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x0000}, /* 00,0d,00,aa */ 38778c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 38788c2ecf20Sopenharmony_ci {0xaa, 0x12, 0x0005}, /* 00,12,05,aa */ 38798c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0063}, /* 00,13,63,aa */ 38808c2ecf20Sopenharmony_ci {0xaa, 0x15, 0x0070}, /* 00,15,70,aa */ 38818c2ecf20Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,b7,cc */ 38828c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 38838c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 38848c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */ 38858c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 38868c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 38878c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 38888c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 38898c2ecf20Sopenharmony_ci {0xa0, 0x70, ZC3XX_R18D_YTARGET}, /* 01,8d,70,cc */ 38908c2ecf20Sopenharmony_ci {} 38918c2ecf20Sopenharmony_ci}; 38928c2ecf20Sopenharmony_cistatic const struct usb_action pas202b_InitialScale[] = { /* 320x240 */ 38938c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 38948c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 38958c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,0e,cc */ 38968c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */ 38978c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 38988c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 38998c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 39008c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 39018c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 39028c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 39038c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 39048c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, /* 00,8d,08,cc */ 39058c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,08,cc */ 39068c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,02,cc */ 39078c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,08,cc */ 39088c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,02,cc */ 39098c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, /* 00,9b,01,cc */ 39108c2ecf20Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 39118c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, /* 00,9d,02,cc */ 39128c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */ 39138c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0002}, /* 00,02,02,aa */ 39148c2ecf20Sopenharmony_ci {0xaa, 0x07, 0x0006}, /* 00,07,06,aa */ 39158c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0002}, /* 00,08,02,aa */ 39168c2ecf20Sopenharmony_ci {0xaa, 0x09, 0x0006}, /* 00,09,06,aa */ 39178c2ecf20Sopenharmony_ci {0xaa, 0x0a, 0x0001}, /* 00,0a,01,aa */ 39188c2ecf20Sopenharmony_ci {0xaa, 0x0b, 0x0001}, /* 00,0b,01,aa */ 39198c2ecf20Sopenharmony_ci {0xaa, 0x0c, 0x0006}, 39208c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x0000}, /* 00,0d,00,aa */ 39218c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x0000}, /* 00,10,00,aa */ 39228c2ecf20Sopenharmony_ci {0xaa, 0x12, 0x0005}, /* 00,12,05,aa */ 39238c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0063}, /* 00,13,63,aa */ 39248c2ecf20Sopenharmony_ci {0xaa, 0x15, 0x0070}, /* 00,15,70,aa */ 39258c2ecf20Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */ 39268c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 39278c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 39288c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */ 39298c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 39308c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 39318c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 39328c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 39338c2ecf20Sopenharmony_ci {0xa0, 0x70, ZC3XX_R18D_YTARGET}, /* 01,8d,70,cc */ 39348c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R097_WINYSTARTHIGH}, 39358c2ecf20Sopenharmony_ci {0xa0, 0xfe, ZC3XX_R098_WINYSTARTLOW}, 39368c2ecf20Sopenharmony_ci {} 39378c2ecf20Sopenharmony_ci}; 39388c2ecf20Sopenharmony_cistatic const struct usb_action pas202b_50HZ[] = { 39398c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 39408c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, /* 00,87,20,cc */ 39418c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, /* 00,88,21,cc */ 39428c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0002}, /* 00,20,02,aa */ 39438c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x001b}, 39448c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0044}, /* 00,03,44,aa */ 39458c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0008}, 39468c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x001b}, 39478c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0001}, /* 00,0e,01,aa */ 39488c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x0000}, /* 00,0f,00,aa */ 39498c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF}, 39508c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 39518c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 39528c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, 39538c2ecf20Sopenharmony_ci {0xa0, 0x1b, ZC3XX_R192_EXPOSURELIMITLOW}, 39548c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 39558c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 39568c2ecf20Sopenharmony_ci {0xa0, 0x4d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,4d,cc */ 39578c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 39588c2ecf20Sopenharmony_ci {0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE}, 39598c2ecf20Sopenharmony_ci {0xa0, 0x44, ZC3XX_R01D_HSYNC_0}, /* 00,1d,44,cc */ 39608c2ecf20Sopenharmony_ci {0xa0, 0x6f, ZC3XX_R01E_HSYNC_1}, /* 00,1e,6f,cc */ 39618c2ecf20Sopenharmony_ci {0xa0, 0xad, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ad,cc */ 39628c2ecf20Sopenharmony_ci {0xa0, 0xeb, ZC3XX_R020_HSYNC_3}, /* 00,20,eb,cc */ 39638c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID}, /* 00,87,0f,cc */ 39648c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW}, /* 00,88,0e,cc */ 39658c2ecf20Sopenharmony_ci {} 39668c2ecf20Sopenharmony_ci}; 39678c2ecf20Sopenharmony_cistatic const struct usb_action pas202b_50HZScale[] = { 39688c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 39698c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, /* 00,87,20,cc */ 39708c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, /* 00,88,21,cc */ 39718c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0004}, 39728c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x003d}, 39738c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0041}, /* 00,03,41,aa */ 39748c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0010}, 39758c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x003d}, 39768c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0001}, /* 00,0e,01,aa */ 39778c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x0000}, /* 00,0f,00,aa */ 39788c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF}, 39798c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 39808c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 39818c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, 39828c2ecf20Sopenharmony_ci {0xa0, 0x3d, ZC3XX_R192_EXPOSURELIMITLOW}, 39838c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 39848c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 39858c2ecf20Sopenharmony_ci {0xa0, 0x9b, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,9b,cc */ 39868c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 39878c2ecf20Sopenharmony_ci {0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE}, 39888c2ecf20Sopenharmony_ci {0xa0, 0x41, ZC3XX_R01D_HSYNC_0}, /* 00,1d,41,cc */ 39898c2ecf20Sopenharmony_ci {0xa0, 0x6f, ZC3XX_R01E_HSYNC_1}, /* 00,1e,6f,cc */ 39908c2ecf20Sopenharmony_ci {0xa0, 0xad, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ad,cc */ 39918c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 39928c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID}, /* 00,87,0f,cc */ 39938c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW}, /* 00,88,0e,cc */ 39948c2ecf20Sopenharmony_ci {} 39958c2ecf20Sopenharmony_ci}; 39968c2ecf20Sopenharmony_cistatic const struct usb_action pas202b_60HZ[] = { 39978c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 39988c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, /* 00,87,20,cc */ 39998c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, /* 00,88,21,cc */ 40008c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0002}, /* 00,20,02,aa */ 40018c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x0000}, /* 00,21,00,aa */ 40028c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0045}, /* 00,03,45,aa */ 40038c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0008}, /* 00,04,08,aa */ 40048c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0000}, /* 00,05,00,aa */ 40058c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0001}, /* 00,0e,01,aa */ 40068c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x0000}, /* 00,0f,00,aa */ 40078c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF}, 40088c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 40098c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 40108c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, 40118c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, 40128c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 40138c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 40148c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,40,cc */ 40158c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 40168c2ecf20Sopenharmony_ci {0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE}, 40178c2ecf20Sopenharmony_ci {0xa0, 0x45, ZC3XX_R01D_HSYNC_0}, /* 00,1d,45,cc */ 40188c2ecf20Sopenharmony_ci {0xa0, 0x8e, ZC3XX_R01E_HSYNC_1}, /* 00,1e,8e,cc */ 40198c2ecf20Sopenharmony_ci {0xa0, 0xc1, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c1,cc */ 40208c2ecf20Sopenharmony_ci {0xa0, 0xf5, ZC3XX_R020_HSYNC_3}, /* 00,20,f5,cc */ 40218c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID}, /* 00,87,0f,cc */ 40228c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW}, /* 00,88,0e,cc */ 40238c2ecf20Sopenharmony_ci {} 40248c2ecf20Sopenharmony_ci}; 40258c2ecf20Sopenharmony_cistatic const struct usb_action pas202b_60HZScale[] = { 40268c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 40278c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, /* 00,87,20,cc */ 40288c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, /* 00,88,21,cc */ 40298c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0004}, 40308c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x0008}, 40318c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0042}, /* 00,03,42,aa */ 40328c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0010}, 40338c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0008}, 40348c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0001}, /* 00,0e,01,aa */ 40358c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x0000}, /* 00,0f,00,aa */ 40368c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF}, 40378c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc */ 40388c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 40398c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, 40408c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R192_EXPOSURELIMITLOW}, 40418c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 40428c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 40438c2ecf20Sopenharmony_ci {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,81,cc */ 40448c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 40458c2ecf20Sopenharmony_ci {0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE}, 40468c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R01D_HSYNC_0}, /* 00,1d,42,cc */ 40478c2ecf20Sopenharmony_ci {0xa0, 0x6f, ZC3XX_R01E_HSYNC_1}, /* 00,1e,6f,cc */ 40488c2ecf20Sopenharmony_ci {0xa0, 0xaf, ZC3XX_R01F_HSYNC_2}, /* 00,1f,af,cc */ 40498c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 40508c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID}, /* 00,87,0f,cc */ 40518c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW}, /* 00,88,0e,cc */ 40528c2ecf20Sopenharmony_ci {} 40538c2ecf20Sopenharmony_ci}; 40548c2ecf20Sopenharmony_cistatic const struct usb_action pas202b_NoFliker[] = { 40558c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 40568c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, /* 00,87,20,cc */ 40578c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, /* 00,88,21,cc */ 40588c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0002}, /* 00,20,02,aa */ 40598c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x0006}, 40608c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0040}, /* 00,03,40,aa */ 40618c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0008}, /* 00,04,08,aa */ 40628c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0006}, 40638c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0001}, /* 00,0e,01,aa */ 40648c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x0000}, /* 00,0f,00,aa */ 40658c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 40668c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, 40678c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R192_EXPOSURELIMITLOW}, 40688c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 40698c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 40708c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW}, 40718c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 40728c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 40738c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 40748c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 40758c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R01D_HSYNC_0}, /* 00,1d,40,cc */ 40768c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R01E_HSYNC_1}, /* 00,1e,60,cc */ 40778c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, /* 00,1f,90,cc */ 40788c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 40798c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID}, /* 00,87,0f,cc */ 40808c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW}, /* 00,88,0e,cc */ 40818c2ecf20Sopenharmony_ci {} 40828c2ecf20Sopenharmony_ci}; 40838c2ecf20Sopenharmony_cistatic const struct usb_action pas202b_NoFlikerScale[] = { 40848c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 40858c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R087_EXPTIMEMID}, /* 00,87,20,cc */ 40868c2ecf20Sopenharmony_ci {0xa0, 0x21, ZC3XX_R088_EXPTIMELOW}, /* 00,88,21,cc */ 40878c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0004}, 40888c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x000c}, 40898c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x0040}, /* 00,03,40,aa */ 40908c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0010}, 40918c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x000c}, 40928c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0001}, /* 00,0e,01,aa */ 40938c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x0000}, /* 00,0f,00,aa */ 40948c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 40958c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, 40968c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R192_EXPOSURELIMITLOW}, 40978c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 40988c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 40998c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,02,cc */ 41008c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */ 41018c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */ 41028c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 41038c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 41048c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R01D_HSYNC_0}, /* 00,1d,40,cc */ 41058c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R01E_HSYNC_1}, /* 00,1e,60,cc */ 41068c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, /* 00,1f,90,cc */ 41078c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 41088c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID}, /* 00,87,0f,cc */ 41098c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW}, /* 00,88,0e,cc */ 41108c2ecf20Sopenharmony_ci {} 41118c2ecf20Sopenharmony_ci}; 41128c2ecf20Sopenharmony_ci 41138c2ecf20Sopenharmony_ci/* mt9v111 (mi0360soc) and pb0330 from vm30x.inf 0ac8:301b 07/02/13 */ 41148c2ecf20Sopenharmony_cistatic const struct usb_action mt9v111_1_Initial[] = { /* 640x480 */ 41158c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 41168c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 41178c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 41188c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 41198c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 41208c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 41218c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 41228c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 41238c2ecf20Sopenharmony_ci {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 41248c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 41258c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 41268c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 41278c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 41288c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 41298c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 41308c2ecf20Sopenharmony_ci {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 41318c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0200}, 41328c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 41338c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0001}, 41348c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0000}, 41358c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0483}, 41368c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0004}, 41378c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0006}, 41388c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0011}, 41398c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x01e5}, /*jfm: was 01e7*/ 41408c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0285}, /*jfm: was 0287*/ 41418c2ecf20Sopenharmony_ci {0xaa, 0x07, 0x3002}, 41428c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x5100}, 41438c2ecf20Sopenharmony_ci {0xaa, 0x35, 0x507f}, 41448c2ecf20Sopenharmony_ci {0xaa, 0x30, 0x0005}, 41458c2ecf20Sopenharmony_ci {0xaa, 0x31, 0x0000}, 41468c2ecf20Sopenharmony_ci {0xaa, 0x58, 0x0078}, 41478c2ecf20Sopenharmony_ci {0xaa, 0x62, 0x0411}, 41488c2ecf20Sopenharmony_ci {0xaa, 0x2b, 0x007f}, 41498c2ecf20Sopenharmony_ci {0xaa, 0x2c, 0x007f}, /*jfm: was 0030*/ 41508c2ecf20Sopenharmony_ci {0xaa, 0x2d, 0x007f}, /*jfm: was 0030*/ 41518c2ecf20Sopenharmony_ci {0xaa, 0x2e, 0x007f}, /*jfm: was 0030*/ 41528c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, 41538c2ecf20Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, 41548c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 41558c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 41568c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 41578c2ecf20Sopenharmony_ci {0xa0, 0x09, 0x01ad}, /*jfm: was 00*/ 41588c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 41598c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 41608c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 41618c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 41628c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 41638c2ecf20Sopenharmony_ci {0xa0, 0x6c, ZC3XX_R18D_YTARGET}, 41648c2ecf20Sopenharmony_ci {0xa0, 0x61, ZC3XX_R116_RGAIN}, 41658c2ecf20Sopenharmony_ci {0xa0, 0x65, ZC3XX_R118_BGAIN}, 41668c2ecf20Sopenharmony_ci {} 41678c2ecf20Sopenharmony_ci}; 41688c2ecf20Sopenharmony_cistatic const struct usb_action mt9v111_1_InitialScale[] = { /* 320x240 */ 41698c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 41708c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 41718c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 41728c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 41738c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 41748c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 41758c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 41768c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 41778c2ecf20Sopenharmony_ci {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 41788c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 41798c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 41808c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 41818c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 41828c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 41838c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 41848c2ecf20Sopenharmony_ci {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 41858c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0200}, 41868c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 41878c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0001}, 41888c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0000}, 41898c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0483}, 41908c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0004}, 41918c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0006}, 41928c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0011}, 41938c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x01e7}, 41948c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0287}, 41958c2ecf20Sopenharmony_ci {0xaa, 0x07, 0x3002}, 41968c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x5100}, 41978c2ecf20Sopenharmony_ci {0xaa, 0x35, 0x007f}, /*jfm: was 0050*/ 41988c2ecf20Sopenharmony_ci {0xaa, 0x30, 0x0005}, 41998c2ecf20Sopenharmony_ci {0xaa, 0x31, 0x0000}, 42008c2ecf20Sopenharmony_ci {0xaa, 0x58, 0x0078}, 42018c2ecf20Sopenharmony_ci {0xaa, 0x62, 0x0411}, 42028c2ecf20Sopenharmony_ci {0xaa, 0x2b, 0x007f}, /*jfm: was 28*/ 42038c2ecf20Sopenharmony_ci {0xaa, 0x2c, 0x007f}, /*jfm: was 30*/ 42048c2ecf20Sopenharmony_ci {0xaa, 0x2d, 0x007f}, /*jfm: was 30*/ 42058c2ecf20Sopenharmony_ci {0xaa, 0x2e, 0x007f}, /*jfm: was 28*/ 42068c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, 42078c2ecf20Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, 42088c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 42098c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 42108c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 42118c2ecf20Sopenharmony_ci {0xa0, 0x09, 0x01ad}, /*jfm: was 00*/ 42128c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 42138c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 42148c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 42158c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 42168c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 42178c2ecf20Sopenharmony_ci {0xa0, 0x6c, ZC3XX_R18D_YTARGET}, 42188c2ecf20Sopenharmony_ci {0xa0, 0x61, ZC3XX_R116_RGAIN}, 42198c2ecf20Sopenharmony_ci {0xa0, 0x65, ZC3XX_R118_BGAIN}, 42208c2ecf20Sopenharmony_ci {} 42218c2ecf20Sopenharmony_ci}; 42228c2ecf20Sopenharmony_cistatic const struct usb_action mt9v111_1_AE50HZ[] = { 42238c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 42248c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 42258c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x0562}, 42268c2ecf20Sopenharmony_ci {0xbb, 0x01, 0x09aa}, 42278c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 42288c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID}, 42298c2ecf20Sopenharmony_ci {0xa0, 0x9b, ZC3XX_R192_EXPOSURELIMITLOW}, 42308c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 42318c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 42328c2ecf20Sopenharmony_ci {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW}, 42338c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 42348c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 42358c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 42368c2ecf20Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 42378c2ecf20Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, 42388c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, 42398c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, 42408c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 42418c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 42428c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 42438c2ecf20Sopenharmony_ci {} 42448c2ecf20Sopenharmony_ci}; 42458c2ecf20Sopenharmony_cistatic const struct usb_action mt9v111_1_AE50HZScale[] = { 42468c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 42478c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 42488c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x0509}, 42498c2ecf20Sopenharmony_ci {0xbb, 0x01, 0x0934}, 42508c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 42518c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 42528c2ecf20Sopenharmony_ci {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW}, 42538c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 42548c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 42558c2ecf20Sopenharmony_ci {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW}, 42568c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 42578c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 42588c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 42598c2ecf20Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 42608c2ecf20Sopenharmony_ci {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, 42618c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, 42628c2ecf20Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2}, 42638c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 42648c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 42658c2ecf20Sopenharmony_ci {} 42668c2ecf20Sopenharmony_ci}; 42678c2ecf20Sopenharmony_cistatic const struct usb_action mt9v111_1_AE60HZ[] = { 42688c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 42698c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 42708c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x003d}, 42718c2ecf20Sopenharmony_ci {0xaa, 0x09, 0x016e}, 42728c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 42738c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 42748c2ecf20Sopenharmony_ci {0xa0, 0xdd, ZC3XX_R192_EXPOSURELIMITLOW}, 42758c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 42768c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 42778c2ecf20Sopenharmony_ci {0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW}, 42788c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 42798c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 42808c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 42818c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 42828c2ecf20Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, 42838c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, 42848c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, 42858c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 42868c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 42878c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 42888c2ecf20Sopenharmony_ci {} 42898c2ecf20Sopenharmony_ci}; 42908c2ecf20Sopenharmony_cistatic const struct usb_action mt9v111_1_AE60HZScale[] = { 42918c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 42928c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 42938c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x0509}, 42948c2ecf20Sopenharmony_ci {0xbb, 0x01, 0x0983}, 42958c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 42968c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 42978c2ecf20Sopenharmony_ci {0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW}, 42988c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 42998c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 43008c2ecf20Sopenharmony_ci {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW}, 43018c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 43028c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 43038c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 43048c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 43058c2ecf20Sopenharmony_ci {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, 43068c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, 43078c2ecf20Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2}, 43088c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 43098c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 43108c2ecf20Sopenharmony_ci {} 43118c2ecf20Sopenharmony_ci}; 43128c2ecf20Sopenharmony_cistatic const struct usb_action mt9v111_1_AENoFliker[] = { 43138c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 43148c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 43158c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x0509}, 43168c2ecf20Sopenharmony_ci {0xbb, 0x01, 0x0960}, 43178c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 43188c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 43198c2ecf20Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, 43208c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 43218c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 43228c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW}, 43238c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 43248c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 43258c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 43268c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 43278c2ecf20Sopenharmony_ci {0xa0, 0x09, ZC3XX_R01D_HSYNC_0}, 43288c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R01E_HSYNC_1}, 43298c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, 43308c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R020_HSYNC_3}, 43318c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 43328c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 43338c2ecf20Sopenharmony_ci {} 43348c2ecf20Sopenharmony_ci}; 43358c2ecf20Sopenharmony_cistatic const struct usb_action mt9v111_1_AENoFlikerScale[] = { 43368c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 43378c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 43388c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x0534}, 43398c2ecf20Sopenharmony_ci {0xbb, 0x02, 0x0960}, 43408c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 43418c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 43428c2ecf20Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, 43438c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 43448c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 43458c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW}, 43468c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 43478c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 43488c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 43498c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 43508c2ecf20Sopenharmony_ci {0xa0, 0x34, ZC3XX_R01D_HSYNC_0}, 43518c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R01E_HSYNC_1}, 43528c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, 43538c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R020_HSYNC_3}, 43548c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 43558c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 43568c2ecf20Sopenharmony_ci {} 43578c2ecf20Sopenharmony_ci}; 43588c2ecf20Sopenharmony_ci/* from usbvm303.inf 0ac8:303b 07/03/25 (3 - tas5130c) */ 43598c2ecf20Sopenharmony_cistatic const struct usb_action mt9v111_3_Initial[] = { 43608c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 43618c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 43628c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 43638c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 43648c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 43658c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 43668c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 43678c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 43688c2ecf20Sopenharmony_ci {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 43698c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 43708c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 43718c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 43728c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 43738c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 43748c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 43758c2ecf20Sopenharmony_ci {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 43768c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0200}, 43778c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 43788c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0001}, /* select IFP/SOC registers */ 43798c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0000}, /* operating mode control */ 43808c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0483}, /* output format control */ 43818c2ecf20Sopenharmony_ci /* H red first, V red or blue first, 43828c2ecf20Sopenharmony_ci * raw Bayer, auto flicker */ 43838c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0004}, /* select sensor core registers */ 43848c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0006}, /* row start */ 43858c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0011}, /* column start */ 43868c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x01e5}, /* window height - 1 */ 43878c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0285}, /* window width - 1 */ 43888c2ecf20Sopenharmony_ci {0xaa, 0x07, 0x3002}, /* output control */ 43898c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x1100}, /* read mode: bits 8 & 12 (?) */ 43908c2ecf20Sopenharmony_ci {0xaa, 0x35, 0x007f}, /* global gain */ 43918c2ecf20Sopenharmony_ci {0xaa, 0x30, 0x0005}, 43928c2ecf20Sopenharmony_ci {0xaa, 0x31, 0x0000}, 43938c2ecf20Sopenharmony_ci {0xaa, 0x58, 0x0078}, 43948c2ecf20Sopenharmony_ci {0xaa, 0x62, 0x0411}, 43958c2ecf20Sopenharmony_ci {0xaa, 0x2b, 0x007f}, /* green1 gain */ 43968c2ecf20Sopenharmony_ci {0xaa, 0x2c, 0x007f}, /* blue gain */ 43978c2ecf20Sopenharmony_ci {0xaa, 0x2d, 0x007f}, /* red gain */ 43988c2ecf20Sopenharmony_ci {0xaa, 0x2e, 0x007f}, /* green2 gain */ 43998c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, 44008c2ecf20Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 44018c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 44028c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 44038c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 44048c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 44058c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 44068c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 44078c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 44088c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 44098c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 44108c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R18D_YTARGET}, 44118c2ecf20Sopenharmony_ci {0xa0, 0x61, ZC3XX_R116_RGAIN}, 44128c2ecf20Sopenharmony_ci {0xa0, 0x65, ZC3XX_R118_BGAIN}, 44138c2ecf20Sopenharmony_ci {} 44148c2ecf20Sopenharmony_ci}; 44158c2ecf20Sopenharmony_cistatic const struct usb_action mt9v111_3_InitialScale[] = { 44168c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 44178c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 44188c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 44198c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 44208c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 44218c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 44228c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 44238c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 44248c2ecf20Sopenharmony_ci {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 44258c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 44268c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 44278c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 44288c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 44298c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 44308c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 44318c2ecf20Sopenharmony_ci {0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR}, 44328c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0200}, 44338c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 44348c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0001}, 44358c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0000}, 44368c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0483}, 44378c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0004}, 44388c2ecf20Sopenharmony_ci {0xaa, 0x08, 0x0006}, 44398c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0011}, 44408c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x01e7}, 44418c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0287}, 44428c2ecf20Sopenharmony_ci {0xaa, 0x07, 0x3002}, 44438c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x1100}, 44448c2ecf20Sopenharmony_ci {0xaa, 0x35, 0x007f}, 44458c2ecf20Sopenharmony_ci {0xaa, 0x30, 0x0005}, 44468c2ecf20Sopenharmony_ci {0xaa, 0x31, 0x0000}, 44478c2ecf20Sopenharmony_ci {0xaa, 0x58, 0x0078}, 44488c2ecf20Sopenharmony_ci {0xaa, 0x62, 0x0411}, 44498c2ecf20Sopenharmony_ci {0xaa, 0x2b, 0x007f}, 44508c2ecf20Sopenharmony_ci {0xaa, 0x2c, 0x007f}, 44518c2ecf20Sopenharmony_ci {0xaa, 0x2d, 0x007f}, 44528c2ecf20Sopenharmony_ci {0xaa, 0x2e, 0x007f}, 44538c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, 44548c2ecf20Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 44558c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 44568c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 44578c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 44588c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 44598c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 44608c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 44618c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 44628c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 44638c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 44648c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R18D_YTARGET}, 44658c2ecf20Sopenharmony_ci {0xa0, 0x61, ZC3XX_R116_RGAIN}, 44668c2ecf20Sopenharmony_ci {0xa0, 0x65, ZC3XX_R118_BGAIN}, 44678c2ecf20Sopenharmony_ci {} 44688c2ecf20Sopenharmony_ci}; 44698c2ecf20Sopenharmony_cistatic const struct usb_action mt9v111_3_AE50HZ[] = { 44708c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 44718c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 44728c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0009}, /* horizontal blanking */ 44738c2ecf20Sopenharmony_ci {0xaa, 0x09, 0x01ce}, /* shutter width */ 44748c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 44758c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 44768c2ecf20Sopenharmony_ci {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW}, 44778c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 44788c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 44798c2ecf20Sopenharmony_ci {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW}, 44808c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 44818c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 44828c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 44838c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 44848c2ecf20Sopenharmony_ci {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, 44858c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, 44868c2ecf20Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2}, 44878c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 44888c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 44898c2ecf20Sopenharmony_ci {} 44908c2ecf20Sopenharmony_ci}; 44918c2ecf20Sopenharmony_cistatic const struct usb_action mt9v111_3_AE50HZScale[] = { 44928c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 44938c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 44948c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0009}, 44958c2ecf20Sopenharmony_ci {0xaa, 0x09, 0x01ce}, 44968c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 44978c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 44988c2ecf20Sopenharmony_ci {0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW}, 44998c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 45008c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 45018c2ecf20Sopenharmony_ci {0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW}, 45028c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 45038c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 45048c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 45058c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 45068c2ecf20Sopenharmony_ci {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, 45078c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, 45088c2ecf20Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2}, 45098c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 45108c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 45118c2ecf20Sopenharmony_ci {} 45128c2ecf20Sopenharmony_ci}; 45138c2ecf20Sopenharmony_cistatic const struct usb_action mt9v111_3_AE60HZ[] = { 45148c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 45158c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 45168c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0009}, 45178c2ecf20Sopenharmony_ci {0xaa, 0x09, 0x0083}, 45188c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 45198c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 45208c2ecf20Sopenharmony_ci {0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW}, 45218c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 45228c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 45238c2ecf20Sopenharmony_ci {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW}, 45248c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 45258c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 45268c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 45278c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 45288c2ecf20Sopenharmony_ci {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, 45298c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, 45308c2ecf20Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2}, 45318c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 45328c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 45338c2ecf20Sopenharmony_ci {} 45348c2ecf20Sopenharmony_ci}; 45358c2ecf20Sopenharmony_cistatic const struct usb_action mt9v111_3_AE60HZScale[] = { 45368c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 45378c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 45388c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0009}, 45398c2ecf20Sopenharmony_ci {0xaa, 0x09, 0x0083}, 45408c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 45418c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 45428c2ecf20Sopenharmony_ci {0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW}, 45438c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 45448c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 45458c2ecf20Sopenharmony_ci {0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW}, 45468c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 45478c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 45488c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 45498c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 45508c2ecf20Sopenharmony_ci {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, 45518c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, 45528c2ecf20Sopenharmony_ci {0xa0, 0xf9, ZC3XX_R01F_HSYNC_2}, 45538c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 45548c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 45558c2ecf20Sopenharmony_ci {} 45568c2ecf20Sopenharmony_ci}; 45578c2ecf20Sopenharmony_cistatic const struct usb_action mt9v111_3_AENoFliker[] = { 45588c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 45598c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 45608c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0034}, 45618c2ecf20Sopenharmony_ci {0xaa, 0x09, 0x0260}, 45628c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 45638c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 45648c2ecf20Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, 45658c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 45668c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 45678c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW}, 45688c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 45698c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 45708c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 45718c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 45728c2ecf20Sopenharmony_ci {0xa0, 0x34, ZC3XX_R01D_HSYNC_0}, 45738c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R01E_HSYNC_1}, 45748c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, 45758c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R020_HSYNC_3}, 45768c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 45778c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 45788c2ecf20Sopenharmony_ci {} 45798c2ecf20Sopenharmony_ci}; 45808c2ecf20Sopenharmony_cistatic const struct usb_action mt9v111_3_AENoFlikerScale[] = { 45818c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE}, 45828c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 45838c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0034}, 45848c2ecf20Sopenharmony_ci {0xaa, 0x09, 0x0260}, 45858c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 45868c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 45878c2ecf20Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, 45888c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 45898c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 45908c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW}, 45918c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 45928c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE}, 45938c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 45948c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 45958c2ecf20Sopenharmony_ci {0xa0, 0x34, ZC3XX_R01D_HSYNC_0}, 45968c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R01E_HSYNC_1}, 45978c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, 45988c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R020_HSYNC_3}, 45998c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 46008c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, 46018c2ecf20Sopenharmony_ci {} 46028c2ecf20Sopenharmony_ci}; 46038c2ecf20Sopenharmony_ci 46048c2ecf20Sopenharmony_cistatic const struct usb_action pb0330_Initial[] = { /* 640x480 */ 46058c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 46068c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 46078c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 46088c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 46098c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 46108c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 46118c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 46128c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 46138c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 46148c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 46158c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 46168c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 46178c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 46188c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 46198c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 46208c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0200}, 46218c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 46228c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0006}, 46238c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0011}, 46248c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x01e5}, /*jfm: was 1e7*/ 46258c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0285}, /*jfm: was 0287*/ 46268c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0003}, 46278c2ecf20Sopenharmony_ci {0xaa, 0x07, 0x3002}, 46288c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x1100}, 46298c2ecf20Sopenharmony_ci {0xaa, 0x2f, 0xf7b0}, 46308c2ecf20Sopenharmony_ci {0xaa, 0x30, 0x0005}, 46318c2ecf20Sopenharmony_ci {0xaa, 0x31, 0x0000}, 46328c2ecf20Sopenharmony_ci {0xaa, 0x34, 0x0100}, 46338c2ecf20Sopenharmony_ci {0xaa, 0x35, 0x0060}, 46348c2ecf20Sopenharmony_ci {0xaa, 0x3d, 0x068f}, 46358c2ecf20Sopenharmony_ci {0xaa, 0x40, 0x01e0}, 46368c2ecf20Sopenharmony_ci {0xaa, 0x58, 0x0078}, 46378c2ecf20Sopenharmony_ci {0xaa, 0x62, 0x0411}, 46388c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, 46398c2ecf20Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 46408c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 46418c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 46428c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 46438c2ecf20Sopenharmony_ci {0xa0, 0x09, 0x01ad}, /*jfm: was 00 */ 46448c2ecf20Sopenharmony_ci {0xa0, 0x15, 0x01ae}, 46458c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 46468c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 46478c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 46488c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 46498c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 46508c2ecf20Sopenharmony_ci {0xa0, 0x78, ZC3XX_R18D_YTARGET}, /*jfm: was 6c*/ 46518c2ecf20Sopenharmony_ci {} 46528c2ecf20Sopenharmony_ci}; 46538c2ecf20Sopenharmony_cistatic const struct usb_action pb0330_InitialScale[] = { /* 320x240 */ 46548c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 46558c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00 */ 46568c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT}, 46578c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 46588c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 46598c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 46608c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 46618c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 46628c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 46638c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 46648c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC}, 46658c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, 46668c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, 46678c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, 46688c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, 46698c2ecf20Sopenharmony_ci {0xdd, 0x00, 0x0200}, 46708c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 46718c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0006}, 46728c2ecf20Sopenharmony_ci {0xaa, 0x02, 0x0011}, 46738c2ecf20Sopenharmony_ci {0xaa, 0x03, 0x01e7}, 46748c2ecf20Sopenharmony_ci {0xaa, 0x04, 0x0287}, 46758c2ecf20Sopenharmony_ci {0xaa, 0x06, 0x0003}, 46768c2ecf20Sopenharmony_ci {0xaa, 0x07, 0x3002}, 46778c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x1100}, 46788c2ecf20Sopenharmony_ci {0xaa, 0x2f, 0xf7b0}, 46798c2ecf20Sopenharmony_ci {0xaa, 0x30, 0x0005}, 46808c2ecf20Sopenharmony_ci {0xaa, 0x31, 0x0000}, 46818c2ecf20Sopenharmony_ci {0xaa, 0x34, 0x0100}, 46828c2ecf20Sopenharmony_ci {0xaa, 0x35, 0x0060}, 46838c2ecf20Sopenharmony_ci {0xaa, 0x3d, 0x068f}, 46848c2ecf20Sopenharmony_ci {0xaa, 0x40, 0x01e0}, 46858c2ecf20Sopenharmony_ci {0xaa, 0x58, 0x0078}, 46868c2ecf20Sopenharmony_ci {0xaa, 0x62, 0x0411}, 46878c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, 46888c2ecf20Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 46898c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 46908c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 46918c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 46928c2ecf20Sopenharmony_ci {0xa0, 0x09, 0x01ad}, 46938c2ecf20Sopenharmony_ci {0xa0, 0x15, 0x01ae}, 46948c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 46958c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 46968c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 46978c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 46988c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, 46998c2ecf20Sopenharmony_ci {0xa0, 0x78, ZC3XX_R18D_YTARGET}, /*jfm: was 6c*/ 47008c2ecf20Sopenharmony_ci {} 47018c2ecf20Sopenharmony_ci}; 47028c2ecf20Sopenharmony_cistatic const struct usb_action pb0330_50HZ[] = { 47038c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 47048c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x055c}, 47058c2ecf20Sopenharmony_ci {0xbb, 0x01, 0x09aa}, 47068c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x1001}, 47078c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 47088c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 47098c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 47108c2ecf20Sopenharmony_ci {0xa0, 0xc4, ZC3XX_R192_EXPOSURELIMITLOW}, 47118c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 47128c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 47138c2ecf20Sopenharmony_ci {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW}, 47148c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 47158c2ecf20Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE}, 47168c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 47178c2ecf20Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 47188c2ecf20Sopenharmony_ci {0xa0, 0x5c, ZC3XX_R01D_HSYNC_0}, 47198c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, 47208c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, 47218c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 47228c2ecf20Sopenharmony_ci {} 47238c2ecf20Sopenharmony_ci}; 47248c2ecf20Sopenharmony_cistatic const struct usb_action pb0330_50HZScale[] = { 47258c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 47268c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x0566}, 47278c2ecf20Sopenharmony_ci {0xbb, 0x02, 0x09b2}, 47288c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x1002}, 47298c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 47308c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 47318c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 47328c2ecf20Sopenharmony_ci {0xa0, 0x8c, ZC3XX_R192_EXPOSURELIMITLOW}, 47338c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 47348c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 47358c2ecf20Sopenharmony_ci {0xa0, 0x8a, ZC3XX_R197_ANTIFLICKERLOW}, 47368c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 47378c2ecf20Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE}, 47388c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 47398c2ecf20Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 47408c2ecf20Sopenharmony_ci {0xa0, 0xd7, ZC3XX_R01D_HSYNC_0}, 47418c2ecf20Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R01E_HSYNC_1}, 47428c2ecf20Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R01F_HSYNC_2}, 47438c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, 47448c2ecf20Sopenharmony_ci {} 47458c2ecf20Sopenharmony_ci}; 47468c2ecf20Sopenharmony_cistatic const struct usb_action pb0330_60HZ[] = { 47478c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 47488c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x0535}, 47498c2ecf20Sopenharmony_ci {0xbb, 0x01, 0x0974}, 47508c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x1001}, 47518c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 47528c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 47538c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 47548c2ecf20Sopenharmony_ci {0xa0, 0xfe, ZC3XX_R192_EXPOSURELIMITLOW}, 47558c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 47568c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 47578c2ecf20Sopenharmony_ci {0xa0, 0x3e, ZC3XX_R197_ANTIFLICKERLOW}, 47588c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 47598c2ecf20Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE}, 47608c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 47618c2ecf20Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 47628c2ecf20Sopenharmony_ci {0xa0, 0x35, ZC3XX_R01D_HSYNC_0}, 47638c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R01E_HSYNC_1}, 47648c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, 47658c2ecf20Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R020_HSYNC_3}, 47668c2ecf20Sopenharmony_ci {} 47678c2ecf20Sopenharmony_ci}; 47688c2ecf20Sopenharmony_cistatic const struct usb_action pb0330_60HZScale[] = { 47698c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 47708c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x0535}, 47718c2ecf20Sopenharmony_ci {0xbb, 0x02, 0x096c}, 47728c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x1002}, 47738c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 47748c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 47758c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 47768c2ecf20Sopenharmony_ci {0xa0, 0xc0, ZC3XX_R192_EXPOSURELIMITLOW}, 47778c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 47788c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 47798c2ecf20Sopenharmony_ci {0xa0, 0x7c, ZC3XX_R197_ANTIFLICKERLOW}, 47808c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, 47818c2ecf20Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE}, 47828c2ecf20Sopenharmony_ci {0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF}, 47838c2ecf20Sopenharmony_ci {0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP}, 47848c2ecf20Sopenharmony_ci {0xa0, 0x35, ZC3XX_R01D_HSYNC_0}, 47858c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R01E_HSYNC_1}, 47868c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, 47878c2ecf20Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R020_HSYNC_3}, 47888c2ecf20Sopenharmony_ci {} 47898c2ecf20Sopenharmony_ci}; 47908c2ecf20Sopenharmony_cistatic const struct usb_action pb0330_NoFliker[] = { 47918c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 47928c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x0509}, 47938c2ecf20Sopenharmony_ci {0xbb, 0x02, 0x0940}, 47948c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x1002}, 47958c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 47968c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 47978c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 47988c2ecf20Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, 47998c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 48008c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 48018c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW}, 48028c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 48038c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 48048c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 48058c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 48068c2ecf20Sopenharmony_ci {0xa0, 0x09, ZC3XX_R01D_HSYNC_0}, 48078c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R01E_HSYNC_1}, 48088c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, 48098c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R020_HSYNC_3}, 48108c2ecf20Sopenharmony_ci {} 48118c2ecf20Sopenharmony_ci}; 48128c2ecf20Sopenharmony_cistatic const struct usb_action pb0330_NoFlikerScale[] = { 48138c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, 48148c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x0535}, 48158c2ecf20Sopenharmony_ci {0xbb, 0x01, 0x0980}, 48168c2ecf20Sopenharmony_ci {0xbb, 0x00, 0x1001}, 48178c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN}, 48188c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, 48198c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 48208c2ecf20Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW}, 48218c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 48228c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 48238c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW}, 48248c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, 48258c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, 48268c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, 48278c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, 48288c2ecf20Sopenharmony_ci {0xa0, 0x35, ZC3XX_R01D_HSYNC_0}, 48298c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R01E_HSYNC_1}, 48308c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01F_HSYNC_2}, 48318c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R020_HSYNC_3}, 48328c2ecf20Sopenharmony_ci {} 48338c2ecf20Sopenharmony_ci}; 48348c2ecf20Sopenharmony_ci 48358c2ecf20Sopenharmony_ci/* from oem9.inf */ 48368c2ecf20Sopenharmony_cistatic const struct usb_action po2030_Initial[] = { /* 640x480 */ 48378c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 48388c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R002_CLOCKSELECT}, /* 00,02,04,cc */ 48398c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 48408c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 48418c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R080_HBLANKHIGH}, /* 00,80,04,cc */ 48428c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R081_HBLANKLOW}, /* 00,81,05,cc */ 48438c2ecf20Sopenharmony_ci {0xa0, 0x16, ZC3XX_R083_RGAINADDR}, /* 00,83,16,cc */ 48448c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R085_BGAINADDR}, /* 00,85,18,cc */ 48458c2ecf20Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,1a,cc */ 48468c2ecf20Sopenharmony_ci {0xa0, 0x1b, ZC3XX_R087_EXPTIMEMID}, /* 00,87,1b,cc */ 48478c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R088_EXPTIMELOW}, /* 00,88,1c,cc */ 48488c2ecf20Sopenharmony_ci {0xa0, 0xee, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,ee,cc */ 48498c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 48508c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 48518c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 48528c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 48538c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 48548c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 48558c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */ 48568c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */ 48578c2ecf20Sopenharmony_ci {0xaa, 0x8d, 0x0008}, /* 00,8d,08,aa */ 48588c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 48598c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 48608c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 48618c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 48628c2ecf20Sopenharmony_ci {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e6,cc */ 48638c2ecf20Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */ 48648c2ecf20Sopenharmony_ci {0xaa, 0x09, 0x00ce}, /* 00,09,ce,aa */ 48658c2ecf20Sopenharmony_ci {0xaa, 0x0b, 0x0005}, /* 00,0b,05,aa */ 48668c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x0054}, /* 00,0d,54,aa */ 48678c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x00eb}, /* 00,0f,eb,aa */ 48688c2ecf20Sopenharmony_ci {0xaa, 0x87, 0x0000}, /* 00,87,00,aa */ 48698c2ecf20Sopenharmony_ci {0xaa, 0x88, 0x0004}, /* 00,88,04,aa */ 48708c2ecf20Sopenharmony_ci {0xaa, 0x89, 0x0000}, /* 00,89,00,aa */ 48718c2ecf20Sopenharmony_ci {0xaa, 0x8a, 0x0005}, /* 00,8a,05,aa */ 48728c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0003}, /* 00,13,03,aa */ 48738c2ecf20Sopenharmony_ci {0xaa, 0x16, 0x0040}, /* 00,16,40,aa */ 48748c2ecf20Sopenharmony_ci {0xaa, 0x18, 0x0040}, /* 00,18,40,aa */ 48758c2ecf20Sopenharmony_ci {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 48768c2ecf20Sopenharmony_ci {0xaa, 0x29, 0x00e8}, /* 00,29,e8,aa */ 48778c2ecf20Sopenharmony_ci {0xaa, 0x45, 0x0045}, /* 00,45,45,aa */ 48788c2ecf20Sopenharmony_ci {0xaa, 0x50, 0x00ed}, /* 00,50,ed,aa */ 48798c2ecf20Sopenharmony_ci {0xaa, 0x51, 0x0025}, /* 00,51,25,aa */ 48808c2ecf20Sopenharmony_ci {0xaa, 0x52, 0x0042}, /* 00,52,42,aa */ 48818c2ecf20Sopenharmony_ci {0xaa, 0x53, 0x002f}, /* 00,53,2f,aa */ 48828c2ecf20Sopenharmony_ci {0xaa, 0x79, 0x0025}, /* 00,79,25,aa */ 48838c2ecf20Sopenharmony_ci {0xaa, 0x7b, 0x0000}, /* 00,7b,00,aa */ 48848c2ecf20Sopenharmony_ci {0xaa, 0x7e, 0x0025}, /* 00,7e,25,aa */ 48858c2ecf20Sopenharmony_ci {0xaa, 0x7f, 0x0025}, /* 00,7f,25,aa */ 48868c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x0000}, /* 00,21,00,aa */ 48878c2ecf20Sopenharmony_ci {0xaa, 0x33, 0x0036}, /* 00,33,36,aa */ 48888c2ecf20Sopenharmony_ci {0xaa, 0x36, 0x0060}, /* 00,36,60,aa */ 48898c2ecf20Sopenharmony_ci {0xaa, 0x37, 0x0008}, /* 00,37,08,aa */ 48908c2ecf20Sopenharmony_ci {0xaa, 0x3b, 0x0031}, /* 00,3b,31,aa */ 48918c2ecf20Sopenharmony_ci {0xaa, 0x44, 0x000f}, /* 00,44,0f,aa */ 48928c2ecf20Sopenharmony_ci {0xaa, 0x58, 0x0002}, /* 00,58,02,aa */ 48938c2ecf20Sopenharmony_ci {0xaa, 0x66, 0x00c0}, /* 00,66,c0,aa */ 48948c2ecf20Sopenharmony_ci {0xaa, 0x67, 0x0044}, /* 00,67,44,aa */ 48958c2ecf20Sopenharmony_ci {0xaa, 0x6b, 0x00a0}, /* 00,6b,a0,aa */ 48968c2ecf20Sopenharmony_ci {0xaa, 0x6c, 0x0054}, /* 00,6c,54,aa */ 48978c2ecf20Sopenharmony_ci {0xaa, 0xd6, 0x0007}, /* 00,d6,07,aa */ 48988c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,f7,cc */ 48998c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 49008c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 49018c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 49028c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */ 49038c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 49048c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 49058c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 49068c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 49078c2ecf20Sopenharmony_ci {0xa0, 0x7a, ZC3XX_R116_RGAIN}, /* 01,16,7a,cc */ 49088c2ecf20Sopenharmony_ci {0xa0, 0x4a, ZC3XX_R118_BGAIN}, /* 01,18,4a,cc */ 49098c2ecf20Sopenharmony_ci {} 49108c2ecf20Sopenharmony_ci}; 49118c2ecf20Sopenharmony_ci 49128c2ecf20Sopenharmony_ci/* from oem9.inf */ 49138c2ecf20Sopenharmony_cistatic const struct usb_action po2030_InitialScale[] = { /* 320x240 */ 49148c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */ 49158c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */ 49168c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */ 49178c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */ 49188c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R080_HBLANKHIGH}, /* 00,80,04,cc */ 49198c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R081_HBLANKLOW}, /* 00,81,05,cc */ 49208c2ecf20Sopenharmony_ci {0xa0, 0x16, ZC3XX_R083_RGAINADDR}, /* 00,83,16,cc */ 49218c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R085_BGAINADDR}, /* 00,85,18,cc */ 49228c2ecf20Sopenharmony_ci {0xa0, 0x1a, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,1a,cc */ 49238c2ecf20Sopenharmony_ci {0xa0, 0x1b, ZC3XX_R087_EXPTIMEMID}, /* 00,87,1b,cc */ 49248c2ecf20Sopenharmony_ci {0xa0, 0x1c, ZC3XX_R088_EXPTIMELOW}, /* 00,88,1c,cc */ 49258c2ecf20Sopenharmony_ci {0xa0, 0xee, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,ee,cc */ 49268c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */ 49278c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */ 49288c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */ 49298c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */ 49308c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */ 49318c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */ 49328c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */ 49338c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */ 49348c2ecf20Sopenharmony_ci {0xaa, 0x8d, 0x0008}, /* 00,8d,08,aa */ 49358c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */ 49368c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */ 49378c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */ 49388c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */ 49398c2ecf20Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e8,cc */ 49408c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */ 49418c2ecf20Sopenharmony_ci {0xaa, 0x09, 0x00cc}, /* 00,09,cc,aa */ 49428c2ecf20Sopenharmony_ci {0xaa, 0x0b, 0x0005}, /* 00,0b,05,aa */ 49438c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x0058}, /* 00,0d,58,aa */ 49448c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x00ed}, /* 00,0f,ed,aa */ 49458c2ecf20Sopenharmony_ci {0xaa, 0x87, 0x0000}, /* 00,87,00,aa */ 49468c2ecf20Sopenharmony_ci {0xaa, 0x88, 0x0004}, /* 00,88,04,aa */ 49478c2ecf20Sopenharmony_ci {0xaa, 0x89, 0x0000}, /* 00,89,00,aa */ 49488c2ecf20Sopenharmony_ci {0xaa, 0x8a, 0x0005}, /* 00,8a,05,aa */ 49498c2ecf20Sopenharmony_ci {0xaa, 0x13, 0x0003}, /* 00,13,03,aa */ 49508c2ecf20Sopenharmony_ci {0xaa, 0x16, 0x0040}, /* 00,16,40,aa */ 49518c2ecf20Sopenharmony_ci {0xaa, 0x18, 0x0040}, /* 00,18,40,aa */ 49528c2ecf20Sopenharmony_ci {0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */ 49538c2ecf20Sopenharmony_ci {0xaa, 0x29, 0x00e8}, /* 00,29,e8,aa */ 49548c2ecf20Sopenharmony_ci {0xaa, 0x45, 0x0045}, /* 00,45,45,aa */ 49558c2ecf20Sopenharmony_ci {0xaa, 0x50, 0x00ed}, /* 00,50,ed,aa */ 49568c2ecf20Sopenharmony_ci {0xaa, 0x51, 0x0025}, /* 00,51,25,aa */ 49578c2ecf20Sopenharmony_ci {0xaa, 0x52, 0x0042}, /* 00,52,42,aa */ 49588c2ecf20Sopenharmony_ci {0xaa, 0x53, 0x002f}, /* 00,53,2f,aa */ 49598c2ecf20Sopenharmony_ci {0xaa, 0x79, 0x0025}, /* 00,79,25,aa */ 49608c2ecf20Sopenharmony_ci {0xaa, 0x7b, 0x0000}, /* 00,7b,00,aa */ 49618c2ecf20Sopenharmony_ci {0xaa, 0x7e, 0x0025}, /* 00,7e,25,aa */ 49628c2ecf20Sopenharmony_ci {0xaa, 0x7f, 0x0025}, /* 00,7f,25,aa */ 49638c2ecf20Sopenharmony_ci {0xaa, 0x21, 0x0000}, /* 00,21,00,aa */ 49648c2ecf20Sopenharmony_ci {0xaa, 0x33, 0x0036}, /* 00,33,36,aa */ 49658c2ecf20Sopenharmony_ci {0xaa, 0x36, 0x0060}, /* 00,36,60,aa */ 49668c2ecf20Sopenharmony_ci {0xaa, 0x37, 0x0008}, /* 00,37,08,aa */ 49678c2ecf20Sopenharmony_ci {0xaa, 0x3b, 0x0031}, /* 00,3b,31,aa */ 49688c2ecf20Sopenharmony_ci {0xaa, 0x44, 0x000f}, /* 00,44,0f,aa */ 49698c2ecf20Sopenharmony_ci {0xaa, 0x58, 0x0002}, /* 00,58,02,aa */ 49708c2ecf20Sopenharmony_ci {0xaa, 0x66, 0x00c0}, /* 00,66,c0,aa */ 49718c2ecf20Sopenharmony_ci {0xaa, 0x67, 0x0044}, /* 00,67,44,aa */ 49728c2ecf20Sopenharmony_ci {0xaa, 0x6b, 0x00a0}, /* 00,6b,a0,aa */ 49738c2ecf20Sopenharmony_ci {0xaa, 0x6c, 0x0054}, /* 00,6c,54,aa */ 49748c2ecf20Sopenharmony_ci {0xaa, 0xd6, 0x0007}, /* 00,d6,07,aa */ 49758c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,f7,cc */ 49768c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */ 49778c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */ 49788c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */ 49798c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */ 49808c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */ 49818c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */ 49828c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */ 49838c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */ 49848c2ecf20Sopenharmony_ci {0xa0, 0x7a, ZC3XX_R116_RGAIN}, /* 01,16,7a,cc */ 49858c2ecf20Sopenharmony_ci {0xa0, 0x4a, ZC3XX_R118_BGAIN}, /* 01,18,4a,cc */ 49868c2ecf20Sopenharmony_ci {} 49878c2ecf20Sopenharmony_ci}; 49888c2ecf20Sopenharmony_ci 49898c2ecf20Sopenharmony_cistatic const struct usb_action po2030_50HZ[] = { 49908c2ecf20Sopenharmony_ci {0xaa, 0x8d, 0x0008}, /* 00,8d,08,aa */ 49918c2ecf20Sopenharmony_ci {0xaa, 0x1a, 0x0001}, /* 00,1a,01,aa */ 49928c2ecf20Sopenharmony_ci {0xaa, 0x1b, 0x000a}, /* 00,1b,0a,aa */ 49938c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x00b0}, /* 00,1c,b0,aa */ 49948c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,05,cc */ 49958c2ecf20Sopenharmony_ci {0xa0, 0x35, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,35,cc */ 49968c2ecf20Sopenharmony_ci {0xa0, 0x70, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,70,cc */ 49978c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 49988c2ecf20Sopenharmony_ci {0xa0, 0x85, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,85,cc */ 49998c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,58,cc */ 50008c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0c,cc */ 50018c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,18,cc */ 50028c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,60,cc */ 50038c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 50048c2ecf20Sopenharmony_ci {0xa0, 0x22, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,22,cc */ 50058c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R18D_YTARGET}, /* 01,8d,88,cc */ 50068c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,58,cc */ 50078c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */ 50088c2ecf20Sopenharmony_ci {} 50098c2ecf20Sopenharmony_ci}; 50108c2ecf20Sopenharmony_ci 50118c2ecf20Sopenharmony_cistatic const struct usb_action po2030_60HZ[] = { 50128c2ecf20Sopenharmony_ci {0xaa, 0x8d, 0x0008}, /* 00,8d,08,aa */ 50138c2ecf20Sopenharmony_ci {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa */ 50148c2ecf20Sopenharmony_ci {0xaa, 0x1b, 0x00de}, /* 00,1b,de,aa */ 50158c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x0040}, /* 00,1c,40,aa */ 50168c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,08,cc */ 50178c2ecf20Sopenharmony_ci {0xa0, 0xae, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,ae,cc */ 50188c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,80,cc */ 50198c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 50208c2ecf20Sopenharmony_ci {0xa0, 0x6f, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,6f,cc */ 50218c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,20,cc */ 50228c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0c,cc */ 50238c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,18,cc */ 50248c2ecf20Sopenharmony_ci {0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,60,cc */ 50258c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */ 50268c2ecf20Sopenharmony_ci {0xa0, 0x22, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,22,cc */ 50278c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R18D_YTARGET}, /* 01,8d,88,cc */ 50288c2ecf20Sopenharmony_ci /* win: 01,8d,80 */ 50298c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,58,cc */ 50308c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */ 50318c2ecf20Sopenharmony_ci {} 50328c2ecf20Sopenharmony_ci}; 50338c2ecf20Sopenharmony_ci 50348c2ecf20Sopenharmony_cistatic const struct usb_action po2030_NoFliker[] = { 50358c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */ 50368c2ecf20Sopenharmony_ci {0xaa, 0x8d, 0x000d}, /* 00,8d,0d,aa */ 50378c2ecf20Sopenharmony_ci {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa */ 50388c2ecf20Sopenharmony_ci {0xaa, 0x1b, 0x0002}, /* 00,1b,02,aa */ 50398c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x0078}, /* 00,1c,78,aa */ 50408c2ecf20Sopenharmony_ci {0xaa, 0x46, 0x0000}, /* 00,46,00,aa */ 50418c2ecf20Sopenharmony_ci {0xaa, 0x15, 0x0000}, /* 00,15,00,aa */ 50428c2ecf20Sopenharmony_ci {} 50438c2ecf20Sopenharmony_ci}; 50448c2ecf20Sopenharmony_ci 50458c2ecf20Sopenharmony_cistatic const struct usb_action tas5130c_InitialScale[] = { /* 320x240 */ 50468c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 50478c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R002_CLOCKSELECT}, 50488c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, 50498c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R010_CMOSSENSORSELECT}, 50508c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 50518c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R001_SYSTEMOPERATING}, 50528c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 50538c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 50548c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 50558c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 50568c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 50578c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 50588c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 50598c2ecf20Sopenharmony_ci 50608c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R098_WINYSTARTLOW}, 50618c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R09A_WINXSTARTLOW}, 50628c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R11A_FIRSTYLOW}, 50638c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R11C_FIRSTXLOW}, 50648c2ecf20Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, 50658c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, 50668c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, 50678c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R08D_COMPABILITYMODE}, 50688c2ecf20Sopenharmony_ci {0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION}, 50698c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 50708c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 50718c2ecf20Sopenharmony_ci {0xa0, 0x70, ZC3XX_R18D_YTARGET}, 50728c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, 50738c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 50748c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 50758c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 50768c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 50778c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 50788c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R0A5_EXPOSUREGAIN}, 50798c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A6_EXPOSUREBLACKLVL}, 50808c2ecf20Sopenharmony_ci {} 50818c2ecf20Sopenharmony_ci}; 50828c2ecf20Sopenharmony_cistatic const struct usb_action tas5130c_Initial[] = { /* 640x480 */ 50838c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, 50848c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, 50858c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R008_CLOCKSETTING}, 50868c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R010_CMOSSENSORSELECT}, 50878c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 50888c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R001_SYSTEMOPERATING}, 50898c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, 50908c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, 50918c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, 50928c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, 50938c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, 50948c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, 50958c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, 50968c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R098_WINYSTARTLOW}, 50978c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R09A_WINXSTARTLOW}, 50988c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R11A_FIRSTYLOW}, 50998c2ecf20Sopenharmony_ci {0xa0, 0x0f, ZC3XX_R11C_FIRSTXLOW}, 51008c2ecf20Sopenharmony_ci {0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW}, 51018c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, 51028c2ecf20Sopenharmony_ci {0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, 51038c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R08D_COMPABILITYMODE}, 51048c2ecf20Sopenharmony_ci {0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, 51058c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, 51068c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, 51078c2ecf20Sopenharmony_ci {0xa0, 0x70, ZC3XX_R18D_YTARGET}, 51088c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, 51098c2ecf20Sopenharmony_ci {0xa0, 0x00, 0x01ad}, 51108c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, 51118c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, 51128c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, 51138c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, 51148c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R0A5_EXPOSUREGAIN}, 51158c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R0A6_EXPOSUREBLACKLVL}, 51168c2ecf20Sopenharmony_ci {} 51178c2ecf20Sopenharmony_ci}; 51188c2ecf20Sopenharmony_cistatic const struct usb_action tas5130c_50HZ[] = { 51198c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 51208c2ecf20Sopenharmony_ci {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ 51218c2ecf20Sopenharmony_ci {0xaa, 0xa4, 0x0063}, /* 00,a4,63,aa */ 51228c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 51238c2ecf20Sopenharmony_ci {0xa0, 0x63, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,63,cc */ 51248c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 51258c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, 51268c2ecf20Sopenharmony_ci {0xa0, 0xfe, ZC3XX_R192_EXPOSURELIMITLOW}, 51278c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 51288c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 51298c2ecf20Sopenharmony_ci {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,47,cc */ 51308c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, 51318c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, 51328c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF}, 51338c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 51348c2ecf20Sopenharmony_ci {0xa0, 0xd3, ZC3XX_R01D_HSYNC_0}, /* 00,1d,d3,cc */ 51358c2ecf20Sopenharmony_ci {0xa0, 0xda, ZC3XX_R01E_HSYNC_1}, /* 00,1e,da,cc */ 51368c2ecf20Sopenharmony_ci {0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ea,cc */ 51378c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 51388c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */ 51398c2ecf20Sopenharmony_ci {0xa0, 0x4c, ZC3XX_R0A0_MAXXLOW}, 51408c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, 51418c2ecf20Sopenharmony_ci {} 51428c2ecf20Sopenharmony_ci}; 51438c2ecf20Sopenharmony_cistatic const struct usb_action tas5130c_50HZScale[] = { 51448c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 51458c2ecf20Sopenharmony_ci {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ 51468c2ecf20Sopenharmony_ci {0xaa, 0xa4, 0x0077}, /* 00,a4,77,aa */ 51478c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 51488c2ecf20Sopenharmony_ci {0xa0, 0x77, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,77,cc */ 51498c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 51508c2ecf20Sopenharmony_ci {0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID}, 51518c2ecf20Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R192_EXPOSURELIMITLOW}, 51528c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 51538c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 51548c2ecf20Sopenharmony_ci {0xa0, 0x7d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,7d,cc */ 51558c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, 51568c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, 51578c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF}, 51588c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 51598c2ecf20Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R01D_HSYNC_0}, /* 00,1d,f0,cc */ 51608c2ecf20Sopenharmony_ci {0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,f4,cc */ 51618c2ecf20Sopenharmony_ci {0xa0, 0xf8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,f8,cc */ 51628c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 51638c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */ 51648c2ecf20Sopenharmony_ci {0xa0, 0xc0, ZC3XX_R0A0_MAXXLOW}, 51658c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, 51668c2ecf20Sopenharmony_ci {} 51678c2ecf20Sopenharmony_ci}; 51688c2ecf20Sopenharmony_cistatic const struct usb_action tas5130c_60HZ[] = { 51698c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 51708c2ecf20Sopenharmony_ci {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ 51718c2ecf20Sopenharmony_ci {0xaa, 0xa4, 0x0036}, /* 00,a4,36,aa */ 51728c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 51738c2ecf20Sopenharmony_ci {0xa0, 0x36, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,36,cc */ 51748c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 51758c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R191_EXPOSURELIMITMID}, 51768c2ecf20Sopenharmony_ci {0xa0, 0x54, ZC3XX_R192_EXPOSURELIMITLOW}, 51778c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 51788c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 51798c2ecf20Sopenharmony_ci {0xa0, 0x3e, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,3e,cc */ 51808c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, 51818c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, 51828c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF}, 51838c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 51848c2ecf20Sopenharmony_ci {0xa0, 0xca, ZC3XX_R01D_HSYNC_0}, /* 00,1d,ca,cc */ 51858c2ecf20Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */ 51868c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */ 51878c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 51888c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */ 51898c2ecf20Sopenharmony_ci {0xa0, 0x28, ZC3XX_R0A0_MAXXLOW}, 51908c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, 51918c2ecf20Sopenharmony_ci {} 51928c2ecf20Sopenharmony_ci}; 51938c2ecf20Sopenharmony_cistatic const struct usb_action tas5130c_60HZScale[] = { 51948c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 51958c2ecf20Sopenharmony_ci {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ 51968c2ecf20Sopenharmony_ci {0xaa, 0xa4, 0x0077}, /* 00,a4,77,aa */ 51978c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 51988c2ecf20Sopenharmony_ci {0xa0, 0x77, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,77,cc */ 51998c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 52008c2ecf20Sopenharmony_ci {0xa0, 0x09, ZC3XX_R191_EXPOSURELIMITMID}, 52018c2ecf20Sopenharmony_ci {0xa0, 0x47, ZC3XX_R192_EXPOSURELIMITLOW}, 52028c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */ 52038c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */ 52048c2ecf20Sopenharmony_ci {0xa0, 0x7d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,7d,cc */ 52058c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, 52068c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, 52078c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF}, 52088c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, 52098c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c8,cc */ 52108c2ecf20Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */ 52118c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */ 52128c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 52138c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */ 52148c2ecf20Sopenharmony_ci {0xa0, 0x20, ZC3XX_R0A0_MAXXLOW}, 52158c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, 52168c2ecf20Sopenharmony_ci {} 52178c2ecf20Sopenharmony_ci}; 52188c2ecf20Sopenharmony_cistatic const struct usb_action tas5130c_NoFliker[] = { 52198c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 52208c2ecf20Sopenharmony_ci {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ 52218c2ecf20Sopenharmony_ci {0xaa, 0xa4, 0x0040}, /* 00,a4,40,aa */ 52228c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 52238c2ecf20Sopenharmony_ci {0xa0, 0x40, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,40,cc */ 52248c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 52258c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R191_EXPOSURELIMITMID}, 52268c2ecf20Sopenharmony_ci {0xa0, 0xa0, ZC3XX_R192_EXPOSURELIMITLOW}, 52278c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 52288c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 52298c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW}, 52308c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, 52318c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, 52328c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 52338c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 52348c2ecf20Sopenharmony_ci {0xa0, 0xbc, ZC3XX_R01D_HSYNC_0}, /* 00,1d,bc,cc */ 52358c2ecf20Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */ 52368c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */ 52378c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 52388c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,02,cc */ 52398c2ecf20Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R0A0_MAXXLOW}, 52408c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, 52418c2ecf20Sopenharmony_ci {} 52428c2ecf20Sopenharmony_ci}; 52438c2ecf20Sopenharmony_ci 52448c2ecf20Sopenharmony_cistatic const struct usb_action tas5130c_NoFlikerScale[] = { 52458c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */ 52468c2ecf20Sopenharmony_ci {0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */ 52478c2ecf20Sopenharmony_ci {0xaa, 0xa4, 0x0090}, /* 00,a4,90,aa */ 52488c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */ 52498c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,90,cc */ 52508c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */ 52518c2ecf20Sopenharmony_ci {0xa0, 0x0a, ZC3XX_R191_EXPOSURELIMITMID}, 52528c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW}, 52538c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, 52548c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, 52558c2ecf20Sopenharmony_ci {0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW}, 52568c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, 52578c2ecf20Sopenharmony_ci {0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, 52588c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */ 52598c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */ 52608c2ecf20Sopenharmony_ci {0xa0, 0xbc, ZC3XX_R01D_HSYNC_0}, /* 00,1d,bc,cc */ 52618c2ecf20Sopenharmony_ci {0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */ 52628c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */ 52638c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */ 52648c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,02,cc */ 52658c2ecf20Sopenharmony_ci {0xa0, 0xf0, ZC3XX_R0A0_MAXXLOW}, 52668c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN}, 52678c2ecf20Sopenharmony_ci {} 52688c2ecf20Sopenharmony_ci}; 52698c2ecf20Sopenharmony_ci 52708c2ecf20Sopenharmony_ci/* from usbvm305.inf 0ac8:305b 07/06/15 (3 - tas5130c) */ 52718c2ecf20Sopenharmony_cistatic const struct usb_action gc0303_Initial[] = { 52728c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc, */ 52738c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING}, /* 00,08,02,cc, */ 52748c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc, */ 52758c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, 52768c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc, */ 52778c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc, */ 52788c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc, */ 52798c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc, */ 52808c2ecf20Sopenharmony_ci {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc, */ 52818c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc, */ 52828c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc, */ 52838c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc, */ 52848c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc, */ 52858c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc, */ 52868c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc, */ 52878c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc, */ 52888c2ecf20Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e6,cc, 52898c2ecf20Sopenharmony_ci * 6<->8 */ 52908c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc, 52918c2ecf20Sopenharmony_ci * 6<->8 */ 52928c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, /* 00,87,10,cc, */ 52938c2ecf20Sopenharmony_ci {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc, */ 52948c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0000}, 52958c2ecf20Sopenharmony_ci {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa, */ 52968c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x0017}, /* 00,1c,17,aa, */ 52978c2ecf20Sopenharmony_ci {0xaa, 0x1b, 0x0000}, 52988c2ecf20Sopenharmony_ci {0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,82,cc, */ 52998c2ecf20Sopenharmony_ci {0xa0, 0x83, ZC3XX_R087_EXPTIMEMID}, /* 00,87,83,cc, */ 53008c2ecf20Sopenharmony_ci {0xa0, 0x84, ZC3XX_R088_EXPTIMELOW}, /* 00,88,84,cc, */ 53018c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0010}, /* 00,05,10,aa, */ 53028c2ecf20Sopenharmony_ci {0xaa, 0x0a, 0x0002}, 53038c2ecf20Sopenharmony_ci {0xaa, 0x0b, 0x0000}, 53048c2ecf20Sopenharmony_ci {0xaa, 0x0c, 0x0002}, 53058c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x0000}, 53068c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0002}, 53078c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x0000}, 53088c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x0002}, 53098c2ecf20Sopenharmony_ci {0xaa, 0x11, 0x0000}, 53108c2ecf20Sopenharmony_ci {0xaa, 0x16, 0x0001}, /* 00,16,01,aa, */ 53118c2ecf20Sopenharmony_ci {0xaa, 0x17, 0x00e8}, /* 00,17,e6,aa, (e6 -> e8) */ 53128c2ecf20Sopenharmony_ci {0xaa, 0x18, 0x0002}, /* 00,18,02,aa, */ 53138c2ecf20Sopenharmony_ci {0xaa, 0x19, 0x0088}, /* 00,19,86,aa, */ 53148c2ecf20Sopenharmony_ci {0xaa, 0x20, 0x0020}, /* 00,20,20,aa, */ 53158c2ecf20Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,b7,cc, */ 53168c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc, */ 53178c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc, */ 53188c2ecf20Sopenharmony_ci {0xa0, 0x76, ZC3XX_R189_AWBSTATUS}, /* 01,89,76,cc, */ 53198c2ecf20Sopenharmony_ci {0xa0, 0x09, 0x01ad}, /* 01,ad,09,cc, */ 53208c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc, */ 53218c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc, */ 53228c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc, */ 53238c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc, */ 53248c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R1A8_DIGITALGAIN}, 53258c2ecf20Sopenharmony_ci {0xa0, 0x61, ZC3XX_R116_RGAIN}, /* 01,16,61,cc, */ 53268c2ecf20Sopenharmony_ci {0xa0, 0x65, ZC3XX_R118_BGAIN}, /* 01,18,65,cc */ 53278c2ecf20Sopenharmony_ci {0xaa, 0x1b, 0x0000}, 53288c2ecf20Sopenharmony_ci {} 53298c2ecf20Sopenharmony_ci}; 53308c2ecf20Sopenharmony_ci 53318c2ecf20Sopenharmony_cistatic const struct usb_action gc0303_InitialScale[] = { 53328c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc, */ 53338c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R008_CLOCKSETTING}, /* 00,08,02,cc, */ 53348c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc, */ 53358c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, 53368c2ecf20Sopenharmony_ci {0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc, */ 53378c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc, */ 53388c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc, */ 53398c2ecf20Sopenharmony_ci {0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc, */ 53408c2ecf20Sopenharmony_ci {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc, */ 53418c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc, */ 53428c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc, */ 53438c2ecf20Sopenharmony_ci {0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc, */ 53448c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc, */ 53458c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc, */ 53468c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc, */ 53478c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc, */ 53488c2ecf20Sopenharmony_ci {0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e8,cc, 53498c2ecf20Sopenharmony_ci * 8<->6 */ 53508c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc, 53518c2ecf20Sopenharmony_ci * 8<->6 */ 53528c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R087_EXPTIMEMID}, /* 00,87,10,cc, */ 53538c2ecf20Sopenharmony_ci {0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,98,cc, */ 53548c2ecf20Sopenharmony_ci {0xaa, 0x01, 0x0000}, 53558c2ecf20Sopenharmony_ci {0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa, */ 53568c2ecf20Sopenharmony_ci {0xaa, 0x1c, 0x0017}, /* 00,1c,17,aa, */ 53578c2ecf20Sopenharmony_ci {0xaa, 0x1b, 0x0000}, 53588c2ecf20Sopenharmony_ci {0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,82,cc, */ 53598c2ecf20Sopenharmony_ci {0xa0, 0x83, ZC3XX_R087_EXPTIMEMID}, /* 00,87,83,cc, */ 53608c2ecf20Sopenharmony_ci {0xa0, 0x84, ZC3XX_R088_EXPTIMELOW}, /* 00,88,84,cc, */ 53618c2ecf20Sopenharmony_ci {0xaa, 0x05, 0x0010}, /* 00,05,10,aa, */ 53628c2ecf20Sopenharmony_ci {0xaa, 0x0a, 0x0001}, 53638c2ecf20Sopenharmony_ci {0xaa, 0x0b, 0x0000}, 53648c2ecf20Sopenharmony_ci {0xaa, 0x0c, 0x0001}, 53658c2ecf20Sopenharmony_ci {0xaa, 0x0d, 0x0000}, 53668c2ecf20Sopenharmony_ci {0xaa, 0x0e, 0x0001}, 53678c2ecf20Sopenharmony_ci {0xaa, 0x0f, 0x0000}, 53688c2ecf20Sopenharmony_ci {0xaa, 0x10, 0x0001}, 53698c2ecf20Sopenharmony_ci {0xaa, 0x11, 0x0000}, 53708c2ecf20Sopenharmony_ci {0xaa, 0x16, 0x0001}, /* 00,16,01,aa, */ 53718c2ecf20Sopenharmony_ci {0xaa, 0x17, 0x00e8}, /* 00,17,e6,aa (e6 -> e8) */ 53728c2ecf20Sopenharmony_ci {0xaa, 0x18, 0x0002}, /* 00,18,02,aa, */ 53738c2ecf20Sopenharmony_ci {0xaa, 0x19, 0x0088}, /* 00,19,88,aa, */ 53748c2ecf20Sopenharmony_ci {0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,b7,cc, */ 53758c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc, */ 53768c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc, */ 53778c2ecf20Sopenharmony_ci {0xa0, 0x76, ZC3XX_R189_AWBSTATUS}, /* 01,89,76,cc, */ 53788c2ecf20Sopenharmony_ci {0xa0, 0x09, 0x01ad}, /* 01,ad,09,cc, */ 53798c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc, */ 53808c2ecf20Sopenharmony_ci {0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc, */ 53818c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc, */ 53828c2ecf20Sopenharmony_ci {0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc, */ 53838c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R1A8_DIGITALGAIN}, 53848c2ecf20Sopenharmony_ci {0xa0, 0x61, ZC3XX_R116_RGAIN}, /* 01,16,61,cc, */ 53858c2ecf20Sopenharmony_ci {0xa0, 0x65, ZC3XX_R118_BGAIN}, /* 01,18,65,cc */ 53868c2ecf20Sopenharmony_ci {0xaa, 0x1b, 0x0000}, 53878c2ecf20Sopenharmony_ci {} 53888c2ecf20Sopenharmony_ci}; 53898c2ecf20Sopenharmony_cistatic const struct usb_action gc0303_50HZ[] = { 53908c2ecf20Sopenharmony_ci {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 53918c2ecf20Sopenharmony_ci {0xaa, 0x83, 0x0001}, /* 00,83,01,aa */ 53928c2ecf20Sopenharmony_ci {0xaa, 0x84, 0x0063}, 53938c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc, */ 53948c2ecf20Sopenharmony_ci {0xa0, 0x06, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,0d,cc, */ 53958c2ecf20Sopenharmony_ci {0xa0, 0xa8, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,50,cc, */ 53968c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc, */ 53978c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc, */ 53988c2ecf20Sopenharmony_ci {0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,47,cc, */ 53998c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc, */ 54008c2ecf20Sopenharmony_ci {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc, */ 54018c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc, */ 54028c2ecf20Sopenharmony_ci {0xa0, 0x48, ZC3XX_R1AA_DIGITALGAINSTEP}, 54038c2ecf20Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc, */ 54048c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc, */ 54058c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc, */ 54068c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc, */ 54078c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,58,cc, */ 54088c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc, */ 54098c2ecf20Sopenharmony_ci {0xa0, 0x7f, ZC3XX_R18D_YTARGET}, 54108c2ecf20Sopenharmony_ci {} 54118c2ecf20Sopenharmony_ci}; 54128c2ecf20Sopenharmony_ci 54138c2ecf20Sopenharmony_cistatic const struct usb_action gc0303_50HZScale[] = { 54148c2ecf20Sopenharmony_ci {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 54158c2ecf20Sopenharmony_ci {0xaa, 0x83, 0x0003}, /* 00,83,03,aa */ 54168c2ecf20Sopenharmony_ci {0xaa, 0x84, 0x0054}, /* 00,84,54,aa */ 54178c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc, */ 54188c2ecf20Sopenharmony_ci {0xa0, 0x0d, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,0d,cc, */ 54198c2ecf20Sopenharmony_ci {0xa0, 0x50, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,50,cc, */ 54208c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc, */ 54218c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc, */ 54228c2ecf20Sopenharmony_ci {0xa0, 0x8e, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,8e,cc, */ 54238c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc, */ 54248c2ecf20Sopenharmony_ci {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc, */ 54258c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc, */ 54268c2ecf20Sopenharmony_ci {0xa0, 0x48, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc, */ 54278c2ecf20Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc, */ 54288c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc, */ 54298c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc, */ 54308c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc, */ 54318c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,58,cc, */ 54328c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc, */ 54338c2ecf20Sopenharmony_ci {0xa0, 0x7f, ZC3XX_R18D_YTARGET}, 54348c2ecf20Sopenharmony_ci {} 54358c2ecf20Sopenharmony_ci}; 54368c2ecf20Sopenharmony_ci 54378c2ecf20Sopenharmony_cistatic const struct usb_action gc0303_60HZ[] = { 54388c2ecf20Sopenharmony_ci {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 54398c2ecf20Sopenharmony_ci {0xaa, 0x83, 0x0000}, 54408c2ecf20Sopenharmony_ci {0xaa, 0x84, 0x003b}, 54418c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc, */ 54428c2ecf20Sopenharmony_ci {0xa0, 0x05, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,05,cc, */ 54438c2ecf20Sopenharmony_ci {0xa0, 0x88, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,88,cc, */ 54448c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc, */ 54458c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc, */ 54468c2ecf20Sopenharmony_ci {0xa0, 0x3b, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,3b,cc, */ 54478c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc, */ 54488c2ecf20Sopenharmony_ci {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc, */ 54498c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc, */ 54508c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,24,cc, */ 54518c2ecf20Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc, */ 54528c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc, */ 54538c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc, */ 54548c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc, */ 54558c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,58,cc, */ 54568c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc, */ 54578c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R18D_YTARGET}, 54588c2ecf20Sopenharmony_ci {} 54598c2ecf20Sopenharmony_ci}; 54608c2ecf20Sopenharmony_ci 54618c2ecf20Sopenharmony_cistatic const struct usb_action gc0303_60HZScale[] = { 54628c2ecf20Sopenharmony_ci {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 54638c2ecf20Sopenharmony_ci {0xaa, 0x83, 0x0000}, 54648c2ecf20Sopenharmony_ci {0xaa, 0x84, 0x0076}, 54658c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc, */ 54668c2ecf20Sopenharmony_ci {0xa0, 0x0b, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,1,0b,cc, */ 54678c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,2,10,cc, */ 54688c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,5,00,cc, */ 54698c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,6,00,cc, */ 54708c2ecf20Sopenharmony_ci {0xa0, 0x76, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,7,76,cc, */ 54718c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,c,0e,cc, */ 54728c2ecf20Sopenharmony_ci {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,f,15,cc, */ 54738c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,9,10,cc, */ 54748c2ecf20Sopenharmony_ci {0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,a,24,cc, */ 54758c2ecf20Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,d,62,cc, */ 54768c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,e,90,cc, */ 54778c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,f,c8,cc, */ 54788c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,0,ff,cc, */ 54798c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,d,58,cc, */ 54808c2ecf20Sopenharmony_ci {0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc, */ 54818c2ecf20Sopenharmony_ci {0xa0, 0x80, ZC3XX_R18D_YTARGET}, 54828c2ecf20Sopenharmony_ci {} 54838c2ecf20Sopenharmony_ci}; 54848c2ecf20Sopenharmony_ci 54858c2ecf20Sopenharmony_cistatic const struct usb_action gc0303_NoFliker[] = { 54868c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0c,cc, */ 54878c2ecf20Sopenharmony_ci {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 54888c2ecf20Sopenharmony_ci {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */ 54898c2ecf20Sopenharmony_ci {0xaa, 0x84, 0x0020}, /* 00,84,20,aa */ 54908c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,0,00,cc, */ 54918c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R191_EXPOSURELIMITMID}, 54928c2ecf20Sopenharmony_ci {0xa0, 0x48, ZC3XX_R192_EXPOSURELIMITLOW}, 54938c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc, */ 54948c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc, */ 54958c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc, */ 54968c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc, */ 54978c2ecf20Sopenharmony_ci {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc, */ 54988c2ecf20Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc, */ 54998c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc, */ 55008c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc, */ 55018c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc, */ 55028c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,58,cc, */ 55038c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,03,cc */ 55048c2ecf20Sopenharmony_ci {} 55058c2ecf20Sopenharmony_ci}; 55068c2ecf20Sopenharmony_ci 55078c2ecf20Sopenharmony_cistatic const struct usb_action gc0303_NoFlikerScale[] = { 55088c2ecf20Sopenharmony_ci {0xa0, 0x0c, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0c,cc, */ 55098c2ecf20Sopenharmony_ci {0xaa, 0x82, 0x0000}, /* 00,82,00,aa */ 55108c2ecf20Sopenharmony_ci {0xaa, 0x83, 0x0000}, /* 00,83,00,aa */ 55118c2ecf20Sopenharmony_ci {0xaa, 0x84, 0x0020}, /* 00,84,20,aa */ 55128c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc, */ 55138c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R191_EXPOSURELIMITMID}, 55148c2ecf20Sopenharmony_ci {0xa0, 0x48, ZC3XX_R192_EXPOSURELIMITLOW}, 55158c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc, */ 55168c2ecf20Sopenharmony_ci {0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc, */ 55178c2ecf20Sopenharmony_ci {0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc, */ 55188c2ecf20Sopenharmony_ci {0xa0, 0x0e, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0e,cc, */ 55198c2ecf20Sopenharmony_ci {0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,15,cc, */ 55208c2ecf20Sopenharmony_ci {0xa0, 0x62, ZC3XX_R01D_HSYNC_0}, /* 00,1d,62,cc, */ 55218c2ecf20Sopenharmony_ci {0xa0, 0x90, ZC3XX_R01E_HSYNC_1}, /* 00,1e,90,cc, */ 55228c2ecf20Sopenharmony_ci {0xa0, 0xc8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,c8,cc, */ 55238c2ecf20Sopenharmony_ci {0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc, */ 55248c2ecf20Sopenharmony_ci {0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,58,cc, */ 55258c2ecf20Sopenharmony_ci {0xa0, 0x03, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,03,cc */ 55268c2ecf20Sopenharmony_ci {} 55278c2ecf20Sopenharmony_ci}; 55288c2ecf20Sopenharmony_ci 55298c2ecf20Sopenharmony_cistatic u8 reg_r(struct gspca_dev *gspca_dev, 55308c2ecf20Sopenharmony_ci u16 index) 55318c2ecf20Sopenharmony_ci{ 55328c2ecf20Sopenharmony_ci int ret; 55338c2ecf20Sopenharmony_ci 55348c2ecf20Sopenharmony_ci if (gspca_dev->usb_err < 0) 55358c2ecf20Sopenharmony_ci return 0; 55368c2ecf20Sopenharmony_ci ret = usb_control_msg(gspca_dev->dev, 55378c2ecf20Sopenharmony_ci usb_rcvctrlpipe(gspca_dev->dev, 0), 55388c2ecf20Sopenharmony_ci 0xa1, 55398c2ecf20Sopenharmony_ci USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 55408c2ecf20Sopenharmony_ci 0x01, /* value */ 55418c2ecf20Sopenharmony_ci index, gspca_dev->usb_buf, 1, 55428c2ecf20Sopenharmony_ci 500); 55438c2ecf20Sopenharmony_ci if (ret < 0) { 55448c2ecf20Sopenharmony_ci pr_err("reg_r err %d\n", ret); 55458c2ecf20Sopenharmony_ci gspca_dev->usb_err = ret; 55468c2ecf20Sopenharmony_ci return 0; 55478c2ecf20Sopenharmony_ci } 55488c2ecf20Sopenharmony_ci return gspca_dev->usb_buf[0]; 55498c2ecf20Sopenharmony_ci} 55508c2ecf20Sopenharmony_ci 55518c2ecf20Sopenharmony_cistatic void reg_w(struct gspca_dev *gspca_dev, 55528c2ecf20Sopenharmony_ci u8 value, 55538c2ecf20Sopenharmony_ci u16 index) 55548c2ecf20Sopenharmony_ci{ 55558c2ecf20Sopenharmony_ci int ret; 55568c2ecf20Sopenharmony_ci 55578c2ecf20Sopenharmony_ci if (gspca_dev->usb_err < 0) 55588c2ecf20Sopenharmony_ci return; 55598c2ecf20Sopenharmony_ci ret = usb_control_msg(gspca_dev->dev, 55608c2ecf20Sopenharmony_ci usb_sndctrlpipe(gspca_dev->dev, 0), 55618c2ecf20Sopenharmony_ci 0xa0, 55628c2ecf20Sopenharmony_ci USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 55638c2ecf20Sopenharmony_ci value, index, NULL, 0, 55648c2ecf20Sopenharmony_ci 500); 55658c2ecf20Sopenharmony_ci if (ret < 0) { 55668c2ecf20Sopenharmony_ci pr_err("reg_w_i err %d\n", ret); 55678c2ecf20Sopenharmony_ci gspca_dev->usb_err = ret; 55688c2ecf20Sopenharmony_ci } 55698c2ecf20Sopenharmony_ci} 55708c2ecf20Sopenharmony_ci 55718c2ecf20Sopenharmony_cistatic u16 i2c_read(struct gspca_dev *gspca_dev, 55728c2ecf20Sopenharmony_ci u8 reg) 55738c2ecf20Sopenharmony_ci{ 55748c2ecf20Sopenharmony_ci u8 retbyte; 55758c2ecf20Sopenharmony_ci u16 retval; 55768c2ecf20Sopenharmony_ci 55778c2ecf20Sopenharmony_ci if (gspca_dev->usb_err < 0) 55788c2ecf20Sopenharmony_ci return 0; 55798c2ecf20Sopenharmony_ci reg_w(gspca_dev, reg, 0x0092); 55808c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x02, 0x0090); /* <- read command */ 55818c2ecf20Sopenharmony_ci msleep(20); 55828c2ecf20Sopenharmony_ci retbyte = reg_r(gspca_dev, 0x0091); /* read status */ 55838c2ecf20Sopenharmony_ci if (retbyte != 0x00) 55848c2ecf20Sopenharmony_ci pr_err("i2c_r status error %02x\n", retbyte); 55858c2ecf20Sopenharmony_ci retval = reg_r(gspca_dev, 0x0095); /* read Lowbyte */ 55868c2ecf20Sopenharmony_ci retval |= reg_r(gspca_dev, 0x0096) << 8; /* read Hightbyte */ 55878c2ecf20Sopenharmony_ci return retval; 55888c2ecf20Sopenharmony_ci} 55898c2ecf20Sopenharmony_ci 55908c2ecf20Sopenharmony_cistatic u8 i2c_write(struct gspca_dev *gspca_dev, 55918c2ecf20Sopenharmony_ci u8 reg, 55928c2ecf20Sopenharmony_ci u8 valL, 55938c2ecf20Sopenharmony_ci u8 valH) 55948c2ecf20Sopenharmony_ci{ 55958c2ecf20Sopenharmony_ci u8 retbyte; 55968c2ecf20Sopenharmony_ci 55978c2ecf20Sopenharmony_ci if (gspca_dev->usb_err < 0) 55988c2ecf20Sopenharmony_ci return 0; 55998c2ecf20Sopenharmony_ci reg_w(gspca_dev, reg, 0x92); 56008c2ecf20Sopenharmony_ci reg_w(gspca_dev, valL, 0x93); 56018c2ecf20Sopenharmony_ci reg_w(gspca_dev, valH, 0x94); 56028c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x90); /* <- write command */ 56038c2ecf20Sopenharmony_ci msleep(1); 56048c2ecf20Sopenharmony_ci retbyte = reg_r(gspca_dev, 0x0091); /* read status */ 56058c2ecf20Sopenharmony_ci if (retbyte != 0x00) 56068c2ecf20Sopenharmony_ci pr_err("i2c_w status error %02x\n", retbyte); 56078c2ecf20Sopenharmony_ci return retbyte; 56088c2ecf20Sopenharmony_ci} 56098c2ecf20Sopenharmony_ci 56108c2ecf20Sopenharmony_cistatic void usb_exchange(struct gspca_dev *gspca_dev, 56118c2ecf20Sopenharmony_ci const struct usb_action *action) 56128c2ecf20Sopenharmony_ci{ 56138c2ecf20Sopenharmony_ci while (action->req) { 56148c2ecf20Sopenharmony_ci switch (action->req) { 56158c2ecf20Sopenharmony_ci case 0xa0: /* write register */ 56168c2ecf20Sopenharmony_ci reg_w(gspca_dev, action->val, action->idx); 56178c2ecf20Sopenharmony_ci break; 56188c2ecf20Sopenharmony_ci case 0xa1: /* read status */ 56198c2ecf20Sopenharmony_ci reg_r(gspca_dev, action->idx); 56208c2ecf20Sopenharmony_ci break; 56218c2ecf20Sopenharmony_ci case 0xaa: 56228c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 56238c2ecf20Sopenharmony_ci action->val, /* reg */ 56248c2ecf20Sopenharmony_ci action->idx & 0xff, /* valL */ 56258c2ecf20Sopenharmony_ci action->idx >> 8); /* valH */ 56268c2ecf20Sopenharmony_ci break; 56278c2ecf20Sopenharmony_ci case 0xbb: 56288c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 56298c2ecf20Sopenharmony_ci action->idx >> 8, /* reg */ 56308c2ecf20Sopenharmony_ci action->idx & 0xff, /* valL */ 56318c2ecf20Sopenharmony_ci action->val); /* valH */ 56328c2ecf20Sopenharmony_ci break; 56338c2ecf20Sopenharmony_ci default: 56348c2ecf20Sopenharmony_ci/* case 0xdd: * delay */ 56358c2ecf20Sopenharmony_ci msleep(action->idx); 56368c2ecf20Sopenharmony_ci break; 56378c2ecf20Sopenharmony_ci } 56388c2ecf20Sopenharmony_ci action++; 56398c2ecf20Sopenharmony_ci msleep(1); 56408c2ecf20Sopenharmony_ci } 56418c2ecf20Sopenharmony_ci} 56428c2ecf20Sopenharmony_ci 56438c2ecf20Sopenharmony_cistatic void setmatrix(struct gspca_dev *gspca_dev) 56448c2ecf20Sopenharmony_ci{ 56458c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 56468c2ecf20Sopenharmony_ci int i; 56478c2ecf20Sopenharmony_ci const u8 *matrix; 56488c2ecf20Sopenharmony_ci static const u8 adcm2700_matrix[9] = 56498c2ecf20Sopenharmony_ci/* {0x66, 0xed, 0xed, 0xed, 0x66, 0xed, 0xed, 0xed, 0x66}; */ 56508c2ecf20Sopenharmony_ci/*ms-win*/ 56518c2ecf20Sopenharmony_ci {0x74, 0xed, 0xed, 0xed, 0x74, 0xed, 0xed, 0xed, 0x74}; 56528c2ecf20Sopenharmony_ci static const u8 gc0305_matrix[9] = 56538c2ecf20Sopenharmony_ci {0x50, 0xf8, 0xf8, 0xf8, 0x50, 0xf8, 0xf8, 0xf8, 0x50}; 56548c2ecf20Sopenharmony_ci static const u8 ov7620_matrix[9] = 56558c2ecf20Sopenharmony_ci {0x58, 0xf4, 0xf4, 0xf4, 0x58, 0xf4, 0xf4, 0xf4, 0x58}; 56568c2ecf20Sopenharmony_ci static const u8 pas202b_matrix[9] = 56578c2ecf20Sopenharmony_ci {0x4c, 0xf5, 0xff, 0xf9, 0x51, 0xf5, 0xfb, 0xed, 0x5f}; 56588c2ecf20Sopenharmony_ci static const u8 po2030_matrix[9] = 56598c2ecf20Sopenharmony_ci {0x60, 0xf0, 0xf0, 0xf0, 0x60, 0xf0, 0xf0, 0xf0, 0x60}; 56608c2ecf20Sopenharmony_ci static const u8 tas5130c_matrix[9] = 56618c2ecf20Sopenharmony_ci {0x68, 0xec, 0xec, 0xec, 0x68, 0xec, 0xec, 0xec, 0x68}; 56628c2ecf20Sopenharmony_ci static const u8 gc0303_matrix[9] = 56638c2ecf20Sopenharmony_ci {0x6c, 0xea, 0xea, 0xea, 0x6c, 0xea, 0xea, 0xea, 0x6c}; 56648c2ecf20Sopenharmony_ci static const u8 *matrix_tb[SENSOR_MAX] = { 56658c2ecf20Sopenharmony_ci [SENSOR_ADCM2700] = adcm2700_matrix, 56668c2ecf20Sopenharmony_ci [SENSOR_CS2102] = ov7620_matrix, 56678c2ecf20Sopenharmony_ci [SENSOR_CS2102K] = NULL, 56688c2ecf20Sopenharmony_ci [SENSOR_GC0303] = gc0303_matrix, 56698c2ecf20Sopenharmony_ci [SENSOR_GC0305] = gc0305_matrix, 56708c2ecf20Sopenharmony_ci [SENSOR_HDCS2020] = NULL, 56718c2ecf20Sopenharmony_ci [SENSOR_HV7131B] = NULL, 56728c2ecf20Sopenharmony_ci [SENSOR_HV7131R] = po2030_matrix, 56738c2ecf20Sopenharmony_ci [SENSOR_ICM105A] = po2030_matrix, 56748c2ecf20Sopenharmony_ci [SENSOR_MC501CB] = NULL, 56758c2ecf20Sopenharmony_ci [SENSOR_MT9V111_1] = gc0305_matrix, 56768c2ecf20Sopenharmony_ci [SENSOR_MT9V111_3] = gc0305_matrix, 56778c2ecf20Sopenharmony_ci [SENSOR_OV7620] = ov7620_matrix, 56788c2ecf20Sopenharmony_ci [SENSOR_OV7630C] = NULL, 56798c2ecf20Sopenharmony_ci [SENSOR_PAS106] = NULL, 56808c2ecf20Sopenharmony_ci [SENSOR_PAS202B] = pas202b_matrix, 56818c2ecf20Sopenharmony_ci [SENSOR_PB0330] = gc0305_matrix, 56828c2ecf20Sopenharmony_ci [SENSOR_PO2030] = po2030_matrix, 56838c2ecf20Sopenharmony_ci [SENSOR_TAS5130C] = tas5130c_matrix, 56848c2ecf20Sopenharmony_ci }; 56858c2ecf20Sopenharmony_ci 56868c2ecf20Sopenharmony_ci matrix = matrix_tb[sd->sensor]; 56878c2ecf20Sopenharmony_ci if (matrix == NULL) 56888c2ecf20Sopenharmony_ci return; /* matrix already loaded */ 56898c2ecf20Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(ov7620_matrix); i++) 56908c2ecf20Sopenharmony_ci reg_w(gspca_dev, matrix[i], 0x010a + i); 56918c2ecf20Sopenharmony_ci} 56928c2ecf20Sopenharmony_ci 56938c2ecf20Sopenharmony_cistatic void setsharpness(struct gspca_dev *gspca_dev, s32 val) 56948c2ecf20Sopenharmony_ci{ 56958c2ecf20Sopenharmony_ci static const u8 sharpness_tb[][2] = { 56968c2ecf20Sopenharmony_ci {0x02, 0x03}, 56978c2ecf20Sopenharmony_ci {0x04, 0x07}, 56988c2ecf20Sopenharmony_ci {0x08, 0x0f}, 56998c2ecf20Sopenharmony_ci {0x10, 0x1e} 57008c2ecf20Sopenharmony_ci }; 57018c2ecf20Sopenharmony_ci 57028c2ecf20Sopenharmony_ci reg_w(gspca_dev, sharpness_tb[val][0], 0x01c6); 57038c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0x01c8); 57048c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0x01c9); 57058c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0x01ca); 57068c2ecf20Sopenharmony_ci reg_w(gspca_dev, sharpness_tb[val][1], 0x01cb); 57078c2ecf20Sopenharmony_ci} 57088c2ecf20Sopenharmony_ci 57098c2ecf20Sopenharmony_cistatic void setcontrast(struct gspca_dev *gspca_dev, 57108c2ecf20Sopenharmony_ci s32 gamma, s32 brightness, s32 contrast) 57118c2ecf20Sopenharmony_ci{ 57128c2ecf20Sopenharmony_ci const u8 *Tgamma; 57138c2ecf20Sopenharmony_ci int g, i, adj, gp1, gp2; 57148c2ecf20Sopenharmony_ci u8 gr[16]; 57158c2ecf20Sopenharmony_ci static const u8 delta_b[16] = /* delta for brightness */ 57168c2ecf20Sopenharmony_ci {0x50, 0x38, 0x2d, 0x28, 0x24, 0x21, 0x1e, 0x1d, 57178c2ecf20Sopenharmony_ci 0x1d, 0x1b, 0x1b, 0x1b, 0x19, 0x18, 0x18, 0x18}; 57188c2ecf20Sopenharmony_ci static const u8 delta_c[16] = /* delta for contrast */ 57198c2ecf20Sopenharmony_ci {0x2c, 0x1a, 0x12, 0x0c, 0x0a, 0x06, 0x06, 0x06, 57208c2ecf20Sopenharmony_ci 0x04, 0x06, 0x04, 0x04, 0x03, 0x03, 0x02, 0x02}; 57218c2ecf20Sopenharmony_ci static const u8 gamma_tb[6][16] = { 57228c2ecf20Sopenharmony_ci {0x00, 0x00, 0x03, 0x0d, 0x1b, 0x2e, 0x45, 0x5f, 57238c2ecf20Sopenharmony_ci 0x79, 0x93, 0xab, 0xc1, 0xd4, 0xe5, 0xf3, 0xff}, 57248c2ecf20Sopenharmony_ci {0x01, 0x0c, 0x1f, 0x3a, 0x53, 0x6d, 0x85, 0x9c, 57258c2ecf20Sopenharmony_ci 0xb0, 0xc2, 0xd1, 0xde, 0xe9, 0xf2, 0xf9, 0xff}, 57268c2ecf20Sopenharmony_ci {0x04, 0x16, 0x30, 0x4e, 0x68, 0x81, 0x98, 0xac, 57278c2ecf20Sopenharmony_ci 0xbe, 0xcd, 0xda, 0xe4, 0xed, 0xf5, 0xfb, 0xff}, 57288c2ecf20Sopenharmony_ci {0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8, 57298c2ecf20Sopenharmony_ci 0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff}, 57308c2ecf20Sopenharmony_ci {0x20, 0x4b, 0x6e, 0x8d, 0xa3, 0xb5, 0xc5, 0xd2, 57318c2ecf20Sopenharmony_ci 0xdc, 0xe5, 0xec, 0xf2, 0xf6, 0xfa, 0xfd, 0xff}, 57328c2ecf20Sopenharmony_ci {0x24, 0x44, 0x64, 0x84, 0x9d, 0xb2, 0xc4, 0xd3, 57338c2ecf20Sopenharmony_ci 0xe0, 0xeb, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff}, 57348c2ecf20Sopenharmony_ci }; 57358c2ecf20Sopenharmony_ci 57368c2ecf20Sopenharmony_ci Tgamma = gamma_tb[gamma - 1]; 57378c2ecf20Sopenharmony_ci 57388c2ecf20Sopenharmony_ci contrast -= 128; /* -128 / 127 */ 57398c2ecf20Sopenharmony_ci brightness -= 128; /* -128 / 92 */ 57408c2ecf20Sopenharmony_ci adj = 0; 57418c2ecf20Sopenharmony_ci gp1 = gp2 = 0; 57428c2ecf20Sopenharmony_ci for (i = 0; i < 16; i++) { 57438c2ecf20Sopenharmony_ci g = Tgamma[i] + delta_b[i] * brightness / 256 57448c2ecf20Sopenharmony_ci - delta_c[i] * contrast / 256 - adj / 2; 57458c2ecf20Sopenharmony_ci if (g > 0xff) 57468c2ecf20Sopenharmony_ci g = 0xff; 57478c2ecf20Sopenharmony_ci else if (g < 0) 57488c2ecf20Sopenharmony_ci g = 0; 57498c2ecf20Sopenharmony_ci reg_w(gspca_dev, g, 0x0120 + i); /* gamma */ 57508c2ecf20Sopenharmony_ci if (contrast > 0) 57518c2ecf20Sopenharmony_ci adj--; 57528c2ecf20Sopenharmony_ci else if (contrast < 0) 57538c2ecf20Sopenharmony_ci adj++; 57548c2ecf20Sopenharmony_ci if (i > 1) 57558c2ecf20Sopenharmony_ci gr[i - 1] = (g - gp2) / 2; 57568c2ecf20Sopenharmony_ci else if (i != 0) 57578c2ecf20Sopenharmony_ci gr[0] = gp1 == 0 ? 0 : (g - gp1); 57588c2ecf20Sopenharmony_ci gp2 = gp1; 57598c2ecf20Sopenharmony_ci gp1 = g; 57608c2ecf20Sopenharmony_ci } 57618c2ecf20Sopenharmony_ci gr[15] = (0xff - gp2) / 2; 57628c2ecf20Sopenharmony_ci for (i = 0; i < 16; i++) 57638c2ecf20Sopenharmony_ci reg_w(gspca_dev, gr[i], 0x0130 + i); /* gradient */ 57648c2ecf20Sopenharmony_ci} 57658c2ecf20Sopenharmony_ci 57668c2ecf20Sopenharmony_cistatic s32 getexposure(struct gspca_dev *gspca_dev) 57678c2ecf20Sopenharmony_ci{ 57688c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 57698c2ecf20Sopenharmony_ci 57708c2ecf20Sopenharmony_ci switch (sd->sensor) { 57718c2ecf20Sopenharmony_ci case SENSOR_HV7131R: 57728c2ecf20Sopenharmony_ci return (i2c_read(gspca_dev, 0x25) << 9) 57738c2ecf20Sopenharmony_ci | (i2c_read(gspca_dev, 0x26) << 1) 57748c2ecf20Sopenharmony_ci | (i2c_read(gspca_dev, 0x27) >> 7); 57758c2ecf20Sopenharmony_ci case SENSOR_OV7620: 57768c2ecf20Sopenharmony_ci return i2c_read(gspca_dev, 0x10); 57778c2ecf20Sopenharmony_ci default: 57788c2ecf20Sopenharmony_ci return -1; 57798c2ecf20Sopenharmony_ci } 57808c2ecf20Sopenharmony_ci} 57818c2ecf20Sopenharmony_ci 57828c2ecf20Sopenharmony_cistatic void setexposure(struct gspca_dev *gspca_dev, s32 val) 57838c2ecf20Sopenharmony_ci{ 57848c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 57858c2ecf20Sopenharmony_ci 57868c2ecf20Sopenharmony_ci switch (sd->sensor) { 57878c2ecf20Sopenharmony_ci case SENSOR_HV7131R: 57888c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x25, val >> 9, 0x00); 57898c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x26, val >> 1, 0x00); 57908c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x27, val << 7, 0x00); 57918c2ecf20Sopenharmony_ci break; 57928c2ecf20Sopenharmony_ci case SENSOR_OV7620: 57938c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x10, val, 0x00); 57948c2ecf20Sopenharmony_ci break; 57958c2ecf20Sopenharmony_ci } 57968c2ecf20Sopenharmony_ci} 57978c2ecf20Sopenharmony_ci 57988c2ecf20Sopenharmony_cistatic void setquality(struct gspca_dev *gspca_dev) 57998c2ecf20Sopenharmony_ci{ 58008c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 58018c2ecf20Sopenharmony_ci jpeg_set_qual(sd->jpeg_hdr, jpeg_qual[sd->reg08 >> 1]); 58028c2ecf20Sopenharmony_ci reg_w(gspca_dev, sd->reg08, ZC3XX_R008_CLOCKSETTING); 58038c2ecf20Sopenharmony_ci} 58048c2ecf20Sopenharmony_ci 58058c2ecf20Sopenharmony_ci/* Matches the sensor's internal frame rate to the lighting frequency. 58068c2ecf20Sopenharmony_ci * Valid frequencies are: 58078c2ecf20Sopenharmony_ci * 50Hz, for European and Asian lighting (default) 58088c2ecf20Sopenharmony_ci * 60Hz, for American lighting 58098c2ecf20Sopenharmony_ci * 0 = No Fliker (for outdoore usage) 58108c2ecf20Sopenharmony_ci */ 58118c2ecf20Sopenharmony_cistatic void setlightfreq(struct gspca_dev *gspca_dev, s32 val) 58128c2ecf20Sopenharmony_ci{ 58138c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 58148c2ecf20Sopenharmony_ci int i, mode; 58158c2ecf20Sopenharmony_ci const struct usb_action *zc3_freq; 58168c2ecf20Sopenharmony_ci static const struct usb_action *freq_tb[SENSOR_MAX][6] = { 58178c2ecf20Sopenharmony_ci [SENSOR_ADCM2700] = 58188c2ecf20Sopenharmony_ci {adcm2700_NoFliker, adcm2700_NoFliker, 58198c2ecf20Sopenharmony_ci adcm2700_50HZ, adcm2700_50HZ, 58208c2ecf20Sopenharmony_ci adcm2700_60HZ, adcm2700_60HZ}, 58218c2ecf20Sopenharmony_ci [SENSOR_CS2102] = 58228c2ecf20Sopenharmony_ci {cs2102_NoFliker, cs2102_NoFlikerScale, 58238c2ecf20Sopenharmony_ci cs2102_50HZ, cs2102_50HZScale, 58248c2ecf20Sopenharmony_ci cs2102_60HZ, cs2102_60HZScale}, 58258c2ecf20Sopenharmony_ci [SENSOR_CS2102K] = 58268c2ecf20Sopenharmony_ci {cs2102_NoFliker, cs2102_NoFlikerScale, 58278c2ecf20Sopenharmony_ci NULL, NULL, /* currently disabled */ 58288c2ecf20Sopenharmony_ci NULL, NULL}, 58298c2ecf20Sopenharmony_ci [SENSOR_GC0303] = 58308c2ecf20Sopenharmony_ci {gc0303_NoFliker, gc0303_NoFlikerScale, 58318c2ecf20Sopenharmony_ci gc0303_50HZ, gc0303_50HZScale, 58328c2ecf20Sopenharmony_ci gc0303_60HZ, gc0303_60HZScale}, 58338c2ecf20Sopenharmony_ci [SENSOR_GC0305] = 58348c2ecf20Sopenharmony_ci {gc0305_NoFliker, gc0305_NoFliker, 58358c2ecf20Sopenharmony_ci gc0305_50HZ, gc0305_50HZ, 58368c2ecf20Sopenharmony_ci gc0305_60HZ, gc0305_60HZ}, 58378c2ecf20Sopenharmony_ci [SENSOR_HDCS2020] = 58388c2ecf20Sopenharmony_ci {hdcs2020_NoFliker, hdcs2020_NoFliker, 58398c2ecf20Sopenharmony_ci hdcs2020_50HZ, hdcs2020_50HZ, 58408c2ecf20Sopenharmony_ci hdcs2020_60HZ, hdcs2020_60HZ}, 58418c2ecf20Sopenharmony_ci [SENSOR_HV7131B] = 58428c2ecf20Sopenharmony_ci {hv7131b_NoFliker, hv7131b_NoFlikerScale, 58438c2ecf20Sopenharmony_ci hv7131b_50HZ, hv7131b_50HZScale, 58448c2ecf20Sopenharmony_ci hv7131b_60HZ, hv7131b_60HZScale}, 58458c2ecf20Sopenharmony_ci [SENSOR_HV7131R] = 58468c2ecf20Sopenharmony_ci {hv7131r_NoFliker, hv7131r_NoFlikerScale, 58478c2ecf20Sopenharmony_ci hv7131r_50HZ, hv7131r_50HZScale, 58488c2ecf20Sopenharmony_ci hv7131r_60HZ, hv7131r_60HZScale}, 58498c2ecf20Sopenharmony_ci [SENSOR_ICM105A] = 58508c2ecf20Sopenharmony_ci {icm105a_NoFliker, icm105a_NoFlikerScale, 58518c2ecf20Sopenharmony_ci icm105a_50HZ, icm105a_50HZScale, 58528c2ecf20Sopenharmony_ci icm105a_60HZ, icm105a_60HZScale}, 58538c2ecf20Sopenharmony_ci [SENSOR_MC501CB] = 58548c2ecf20Sopenharmony_ci {mc501cb_NoFliker, mc501cb_NoFlikerScale, 58558c2ecf20Sopenharmony_ci mc501cb_50HZ, mc501cb_50HZScale, 58568c2ecf20Sopenharmony_ci mc501cb_60HZ, mc501cb_60HZScale}, 58578c2ecf20Sopenharmony_ci [SENSOR_MT9V111_1] = 58588c2ecf20Sopenharmony_ci {mt9v111_1_AENoFliker, mt9v111_1_AENoFlikerScale, 58598c2ecf20Sopenharmony_ci mt9v111_1_AE50HZ, mt9v111_1_AE50HZScale, 58608c2ecf20Sopenharmony_ci mt9v111_1_AE60HZ, mt9v111_1_AE60HZScale}, 58618c2ecf20Sopenharmony_ci [SENSOR_MT9V111_3] = 58628c2ecf20Sopenharmony_ci {mt9v111_3_AENoFliker, mt9v111_3_AENoFlikerScale, 58638c2ecf20Sopenharmony_ci mt9v111_3_AE50HZ, mt9v111_3_AE50HZScale, 58648c2ecf20Sopenharmony_ci mt9v111_3_AE60HZ, mt9v111_3_AE60HZScale}, 58658c2ecf20Sopenharmony_ci [SENSOR_OV7620] = 58668c2ecf20Sopenharmony_ci {ov7620_NoFliker, ov7620_NoFliker, 58678c2ecf20Sopenharmony_ci ov7620_50HZ, ov7620_50HZ, 58688c2ecf20Sopenharmony_ci ov7620_60HZ, ov7620_60HZ}, 58698c2ecf20Sopenharmony_ci [SENSOR_OV7630C] = 58708c2ecf20Sopenharmony_ci {NULL, NULL, 58718c2ecf20Sopenharmony_ci NULL, NULL, 58728c2ecf20Sopenharmony_ci NULL, NULL}, 58738c2ecf20Sopenharmony_ci [SENSOR_PAS106] = 58748c2ecf20Sopenharmony_ci {pas106b_NoFliker, pas106b_NoFliker, 58758c2ecf20Sopenharmony_ci pas106b_50HZ, pas106b_50HZ, 58768c2ecf20Sopenharmony_ci pas106b_60HZ, pas106b_60HZ}, 58778c2ecf20Sopenharmony_ci [SENSOR_PAS202B] = 58788c2ecf20Sopenharmony_ci {pas202b_NoFliker, pas202b_NoFlikerScale, 58798c2ecf20Sopenharmony_ci pas202b_50HZ, pas202b_50HZScale, 58808c2ecf20Sopenharmony_ci pas202b_60HZ, pas202b_60HZScale}, 58818c2ecf20Sopenharmony_ci [SENSOR_PB0330] = 58828c2ecf20Sopenharmony_ci {pb0330_NoFliker, pb0330_NoFlikerScale, 58838c2ecf20Sopenharmony_ci pb0330_50HZ, pb0330_50HZScale, 58848c2ecf20Sopenharmony_ci pb0330_60HZ, pb0330_60HZScale}, 58858c2ecf20Sopenharmony_ci [SENSOR_PO2030] = 58868c2ecf20Sopenharmony_ci {po2030_NoFliker, po2030_NoFliker, 58878c2ecf20Sopenharmony_ci po2030_50HZ, po2030_50HZ, 58888c2ecf20Sopenharmony_ci po2030_60HZ, po2030_60HZ}, 58898c2ecf20Sopenharmony_ci [SENSOR_TAS5130C] = 58908c2ecf20Sopenharmony_ci {tas5130c_NoFliker, tas5130c_NoFlikerScale, 58918c2ecf20Sopenharmony_ci tas5130c_50HZ, tas5130c_50HZScale, 58928c2ecf20Sopenharmony_ci tas5130c_60HZ, tas5130c_60HZScale}, 58938c2ecf20Sopenharmony_ci }; 58948c2ecf20Sopenharmony_ci 58958c2ecf20Sopenharmony_ci i = val * 2; 58968c2ecf20Sopenharmony_ci mode = gspca_dev->cam.cam_mode[gspca_dev->curr_mode].priv; 58978c2ecf20Sopenharmony_ci if (mode) 58988c2ecf20Sopenharmony_ci i++; /* 320x240 */ 58998c2ecf20Sopenharmony_ci zc3_freq = freq_tb[sd->sensor][i]; 59008c2ecf20Sopenharmony_ci if (zc3_freq == NULL) 59018c2ecf20Sopenharmony_ci return; 59028c2ecf20Sopenharmony_ci usb_exchange(gspca_dev, zc3_freq); 59038c2ecf20Sopenharmony_ci switch (sd->sensor) { 59048c2ecf20Sopenharmony_ci case SENSOR_GC0305: 59058c2ecf20Sopenharmony_ci if (mode /* if 320x240 */ 59068c2ecf20Sopenharmony_ci && val == 1) /* and 50Hz */ 59078c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x85, 0x018d); 59088c2ecf20Sopenharmony_ci /* win: 0x80, 0x018d */ 59098c2ecf20Sopenharmony_ci break; 59108c2ecf20Sopenharmony_ci case SENSOR_OV7620: 59118c2ecf20Sopenharmony_ci if (!mode) { /* if 640x480 */ 59128c2ecf20Sopenharmony_ci if (val != 0) /* and filter */ 59138c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x40, 0x0002); 59148c2ecf20Sopenharmony_ci else 59158c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x44, 0x0002); 59168c2ecf20Sopenharmony_ci } 59178c2ecf20Sopenharmony_ci break; 59188c2ecf20Sopenharmony_ci case SENSOR_PAS202B: 59198c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x00, 0x01a7); 59208c2ecf20Sopenharmony_ci break; 59218c2ecf20Sopenharmony_ci } 59228c2ecf20Sopenharmony_ci} 59238c2ecf20Sopenharmony_ci 59248c2ecf20Sopenharmony_cistatic void setautogain(struct gspca_dev *gspca_dev, s32 val) 59258c2ecf20Sopenharmony_ci{ 59268c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 59278c2ecf20Sopenharmony_ci 59288c2ecf20Sopenharmony_ci if (sd->sensor == SENSOR_OV7620) 59298c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x13, val ? 0xa3 : 0x80, 0x00); 59308c2ecf20Sopenharmony_ci else 59318c2ecf20Sopenharmony_ci reg_w(gspca_dev, val ? 0x42 : 0x02, 0x0180); 59328c2ecf20Sopenharmony_ci} 59338c2ecf20Sopenharmony_ci 59348c2ecf20Sopenharmony_ci/* 59358c2ecf20Sopenharmony_ci * Update the transfer parameters. 59368c2ecf20Sopenharmony_ci * This function is executed from a work queue. 59378c2ecf20Sopenharmony_ci */ 59388c2ecf20Sopenharmony_cistatic void transfer_update(struct work_struct *work) 59398c2ecf20Sopenharmony_ci{ 59408c2ecf20Sopenharmony_ci struct sd *sd = container_of(work, struct sd, work); 59418c2ecf20Sopenharmony_ci struct gspca_dev *gspca_dev = &sd->gspca_dev; 59428c2ecf20Sopenharmony_ci int change, good; 59438c2ecf20Sopenharmony_ci u8 reg07, reg11; 59448c2ecf20Sopenharmony_ci 59458c2ecf20Sopenharmony_ci /* reg07 gets set to 0 by sd_start before starting us */ 59468c2ecf20Sopenharmony_ci reg07 = 0; 59478c2ecf20Sopenharmony_ci 59488c2ecf20Sopenharmony_ci good = 0; 59498c2ecf20Sopenharmony_ci while (1) { 59508c2ecf20Sopenharmony_ci msleep(100); 59518c2ecf20Sopenharmony_ci 59528c2ecf20Sopenharmony_ci /* To protect gspca_dev->usb_buf and gspca_dev->usb_err */ 59538c2ecf20Sopenharmony_ci mutex_lock(&gspca_dev->usb_lock); 59548c2ecf20Sopenharmony_ci#ifdef CONFIG_PM 59558c2ecf20Sopenharmony_ci if (gspca_dev->frozen) 59568c2ecf20Sopenharmony_ci break; 59578c2ecf20Sopenharmony_ci#endif 59588c2ecf20Sopenharmony_ci if (!gspca_dev->present || !gspca_dev->streaming) 59598c2ecf20Sopenharmony_ci break; 59608c2ecf20Sopenharmony_ci 59618c2ecf20Sopenharmony_ci /* Bit 0 of register 11 indicates FIFO overflow */ 59628c2ecf20Sopenharmony_ci gspca_dev->usb_err = 0; 59638c2ecf20Sopenharmony_ci reg11 = reg_r(gspca_dev, 0x0011); 59648c2ecf20Sopenharmony_ci if (gspca_dev->usb_err) 59658c2ecf20Sopenharmony_ci break; 59668c2ecf20Sopenharmony_ci 59678c2ecf20Sopenharmony_ci change = reg11 & 0x01; 59688c2ecf20Sopenharmony_ci if (change) { /* overflow */ 59698c2ecf20Sopenharmony_ci good = 0; 59708c2ecf20Sopenharmony_ci 59718c2ecf20Sopenharmony_ci if (reg07 == 0) /* Bit Rate Control not enabled? */ 59728c2ecf20Sopenharmony_ci reg07 = 0x32; /* Allow 98 bytes / unit */ 59738c2ecf20Sopenharmony_ci else if (reg07 > 2) 59748c2ecf20Sopenharmony_ci reg07 -= 2; /* Decrease allowed bytes / unit */ 59758c2ecf20Sopenharmony_ci else 59768c2ecf20Sopenharmony_ci change = 0; 59778c2ecf20Sopenharmony_ci } else { /* no overflow */ 59788c2ecf20Sopenharmony_ci good++; 59798c2ecf20Sopenharmony_ci if (good >= 10) { 59808c2ecf20Sopenharmony_ci good = 0; 59818c2ecf20Sopenharmony_ci if (reg07) { /* BRC enabled? */ 59828c2ecf20Sopenharmony_ci change = 1; 59838c2ecf20Sopenharmony_ci if (reg07 < 0x32) 59848c2ecf20Sopenharmony_ci reg07 += 2; 59858c2ecf20Sopenharmony_ci else 59868c2ecf20Sopenharmony_ci reg07 = 0; 59878c2ecf20Sopenharmony_ci } 59888c2ecf20Sopenharmony_ci } 59898c2ecf20Sopenharmony_ci } 59908c2ecf20Sopenharmony_ci if (change) { 59918c2ecf20Sopenharmony_ci gspca_dev->usb_err = 0; 59928c2ecf20Sopenharmony_ci reg_w(gspca_dev, reg07, 0x0007); 59938c2ecf20Sopenharmony_ci if (gspca_dev->usb_err) 59948c2ecf20Sopenharmony_ci break; 59958c2ecf20Sopenharmony_ci } 59968c2ecf20Sopenharmony_ci mutex_unlock(&gspca_dev->usb_lock); 59978c2ecf20Sopenharmony_ci } 59988c2ecf20Sopenharmony_ci 59998c2ecf20Sopenharmony_ci /* Something went wrong. Unlock and return */ 60008c2ecf20Sopenharmony_ci mutex_unlock(&gspca_dev->usb_lock); 60018c2ecf20Sopenharmony_ci} 60028c2ecf20Sopenharmony_ci 60038c2ecf20Sopenharmony_cistatic void send_unknown(struct gspca_dev *gspca_dev, int sensor) 60048c2ecf20Sopenharmony_ci{ 60058c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); /* bridge reset */ 60068c2ecf20Sopenharmony_ci switch (sensor) { 60078c2ecf20Sopenharmony_ci case SENSOR_PAS106: 60088c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x003a); 60098c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x0c, 0x003b); 60108c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x08, 0x0038); 60118c2ecf20Sopenharmony_ci break; 60128c2ecf20Sopenharmony_ci case SENSOR_ADCM2700: 60138c2ecf20Sopenharmony_ci case SENSOR_GC0305: 60148c2ecf20Sopenharmony_ci case SENSOR_OV7620: 60158c2ecf20Sopenharmony_ci case SENSOR_MT9V111_1: 60168c2ecf20Sopenharmony_ci case SENSOR_MT9V111_3: 60178c2ecf20Sopenharmony_ci case SENSOR_PB0330: 60188c2ecf20Sopenharmony_ci case SENSOR_PO2030: 60198c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x0d, 0x003a); 60208c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x02, 0x003b); 60218c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x00, 0x0038); 60228c2ecf20Sopenharmony_ci break; 60238c2ecf20Sopenharmony_ci case SENSOR_HV7131R: 60248c2ecf20Sopenharmony_ci case SENSOR_PAS202B: 60258c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x003b); 60268c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x0c, 0x003a); 60278c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x0b, 0x0039); 60288c2ecf20Sopenharmony_ci if (sensor == SENSOR_PAS202B) 60298c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x0b, 0x0038); 60308c2ecf20Sopenharmony_ci break; 60318c2ecf20Sopenharmony_ci } 60328c2ecf20Sopenharmony_ci} 60338c2ecf20Sopenharmony_ci 60348c2ecf20Sopenharmony_ci/* start probe 2 wires */ 60358c2ecf20Sopenharmony_cistatic void start_2wr_probe(struct gspca_dev *gspca_dev, int sensor) 60368c2ecf20Sopenharmony_ci{ 60378c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); 60388c2ecf20Sopenharmony_ci reg_w(gspca_dev, sensor, 0x0010); 60398c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0001); 60408c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x0012); 60418c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0012); 60428c2ecf20Sopenharmony_ci/* msleep(2); */ 60438c2ecf20Sopenharmony_ci} 60448c2ecf20Sopenharmony_ci 60458c2ecf20Sopenharmony_cistatic int sif_probe(struct gspca_dev *gspca_dev) 60468c2ecf20Sopenharmony_ci{ 60478c2ecf20Sopenharmony_ci u16 checkword; 60488c2ecf20Sopenharmony_ci 60498c2ecf20Sopenharmony_ci start_2wr_probe(gspca_dev, 0x0f); /* PAS106 */ 60508c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x08, 0x008d); 60518c2ecf20Sopenharmony_ci msleep(150); 60528c2ecf20Sopenharmony_ci checkword = ((i2c_read(gspca_dev, 0x00) & 0x0f) << 4) 60538c2ecf20Sopenharmony_ci | ((i2c_read(gspca_dev, 0x01) & 0xf0) >> 4); 60548c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "probe sif 0x%04x\n", checkword); 60558c2ecf20Sopenharmony_ci if (checkword == 0x0007) { 60568c2ecf20Sopenharmony_ci send_unknown(gspca_dev, SENSOR_PAS106); 60578c2ecf20Sopenharmony_ci return 0x0f; /* PAS106 */ 60588c2ecf20Sopenharmony_ci } 60598c2ecf20Sopenharmony_ci return -1; 60608c2ecf20Sopenharmony_ci} 60618c2ecf20Sopenharmony_ci 60628c2ecf20Sopenharmony_cistatic int vga_2wr_probe(struct gspca_dev *gspca_dev) 60638c2ecf20Sopenharmony_ci{ 60648c2ecf20Sopenharmony_ci u16 retword; 60658c2ecf20Sopenharmony_ci 60668c2ecf20Sopenharmony_ci start_2wr_probe(gspca_dev, 0x00); /* HV7131B */ 60678c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x01, 0xaa, 0x00); 60688c2ecf20Sopenharmony_ci retword = i2c_read(gspca_dev, 0x01); 60698c2ecf20Sopenharmony_ci if (retword != 0) 60708c2ecf20Sopenharmony_ci return 0x00; /* HV7131B */ 60718c2ecf20Sopenharmony_ci 60728c2ecf20Sopenharmony_ci start_2wr_probe(gspca_dev, 0x04); /* CS2102 */ 60738c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x01, 0xaa, 0x00); 60748c2ecf20Sopenharmony_ci retword = i2c_read(gspca_dev, 0x01); 60758c2ecf20Sopenharmony_ci if (retword != 0) 60768c2ecf20Sopenharmony_ci return 0x04; /* CS2102 */ 60778c2ecf20Sopenharmony_ci 60788c2ecf20Sopenharmony_ci start_2wr_probe(gspca_dev, 0x06); /* OmniVision */ 60798c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x08, 0x008d); 60808c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x11, 0xaa, 0x00); 60818c2ecf20Sopenharmony_ci retword = i2c_read(gspca_dev, 0x11); 60828c2ecf20Sopenharmony_ci if (retword != 0) { 60838c2ecf20Sopenharmony_ci /* (should have returned 0xaa) --> Omnivision? */ 60848c2ecf20Sopenharmony_ci /* reg_r 0x10 -> 0x06 --> */ 60858c2ecf20Sopenharmony_ci goto ov_check; 60868c2ecf20Sopenharmony_ci } 60878c2ecf20Sopenharmony_ci 60888c2ecf20Sopenharmony_ci start_2wr_probe(gspca_dev, 0x08); /* HDCS2020 */ 60898c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x1c, 0x00, 0x00); 60908c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x15, 0xaa, 0x00); 60918c2ecf20Sopenharmony_ci retword = i2c_read(gspca_dev, 0x15); 60928c2ecf20Sopenharmony_ci if (retword != 0) 60938c2ecf20Sopenharmony_ci return 0x08; /* HDCS2020 */ 60948c2ecf20Sopenharmony_ci 60958c2ecf20Sopenharmony_ci start_2wr_probe(gspca_dev, 0x0a); /* PB0330 */ 60968c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x07, 0xaa, 0xaa); 60978c2ecf20Sopenharmony_ci retword = i2c_read(gspca_dev, 0x07); 60988c2ecf20Sopenharmony_ci if (retword != 0) 60998c2ecf20Sopenharmony_ci return 0x0a; /* PB0330 */ 61008c2ecf20Sopenharmony_ci retword = i2c_read(gspca_dev, 0x03); 61018c2ecf20Sopenharmony_ci if (retword != 0) 61028c2ecf20Sopenharmony_ci return 0x0a; /* PB0330 ?? */ 61038c2ecf20Sopenharmony_ci retword = i2c_read(gspca_dev, 0x04); 61048c2ecf20Sopenharmony_ci if (retword != 0) 61058c2ecf20Sopenharmony_ci return 0x0a; /* PB0330 ?? */ 61068c2ecf20Sopenharmony_ci 61078c2ecf20Sopenharmony_ci start_2wr_probe(gspca_dev, 0x0c); /* ICM105A */ 61088c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x01, 0x11, 0x00); 61098c2ecf20Sopenharmony_ci retword = i2c_read(gspca_dev, 0x01); 61108c2ecf20Sopenharmony_ci if (retword != 0) 61118c2ecf20Sopenharmony_ci return 0x0c; /* ICM105A */ 61128c2ecf20Sopenharmony_ci 61138c2ecf20Sopenharmony_ci start_2wr_probe(gspca_dev, 0x0e); /* PAS202BCB */ 61148c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x08, 0x008d); 61158c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x03, 0xaa, 0x00); 61168c2ecf20Sopenharmony_ci msleep(50); 61178c2ecf20Sopenharmony_ci retword = i2c_read(gspca_dev, 0x03); 61188c2ecf20Sopenharmony_ci if (retword != 0) { 61198c2ecf20Sopenharmony_ci send_unknown(gspca_dev, SENSOR_PAS202B); 61208c2ecf20Sopenharmony_ci return 0x0e; /* PAS202BCB */ 61218c2ecf20Sopenharmony_ci } 61228c2ecf20Sopenharmony_ci 61238c2ecf20Sopenharmony_ci start_2wr_probe(gspca_dev, 0x02); /* TAS5130C */ 61248c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x01, 0xaa, 0x00); 61258c2ecf20Sopenharmony_ci retword = i2c_read(gspca_dev, 0x01); 61268c2ecf20Sopenharmony_ci if (retword != 0) 61278c2ecf20Sopenharmony_ci return 0x02; /* TAS5130C */ 61288c2ecf20Sopenharmony_ciov_check: 61298c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0x0010); /* ?? */ 61308c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0x0010); 61318c2ecf20Sopenharmony_ci 61328c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); 61338c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0001); 61348c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x06, 0x0010); /* OmniVision */ 61358c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa1, 0x008b); 61368c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x08, 0x008d); 61378c2ecf20Sopenharmony_ci msleep(500); 61388c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0012); 61398c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x12, 0x80, 0x00); /* sensor reset */ 61408c2ecf20Sopenharmony_ci retword = i2c_read(gspca_dev, 0x0a) << 8; 61418c2ecf20Sopenharmony_ci retword |= i2c_read(gspca_dev, 0x0b); 61428c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "probe 2wr ov vga 0x%04x\n", retword); 61438c2ecf20Sopenharmony_ci switch (retword) { 61448c2ecf20Sopenharmony_ci case 0x7631: /* OV7630C */ 61458c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x06, 0x0010); 61468c2ecf20Sopenharmony_ci break; 61478c2ecf20Sopenharmony_ci case 0x7620: /* OV7620 */ 61488c2ecf20Sopenharmony_ci case 0x7648: /* OV7648 */ 61498c2ecf20Sopenharmony_ci break; 61508c2ecf20Sopenharmony_ci default: 61518c2ecf20Sopenharmony_ci return -1; /* not OmniVision */ 61528c2ecf20Sopenharmony_ci } 61538c2ecf20Sopenharmony_ci return retword; 61548c2ecf20Sopenharmony_ci} 61558c2ecf20Sopenharmony_ci 61568c2ecf20Sopenharmony_cistruct sensor_by_chipset_revision { 61578c2ecf20Sopenharmony_ci u16 revision; 61588c2ecf20Sopenharmony_ci u8 internal_sensor_id; 61598c2ecf20Sopenharmony_ci}; 61608c2ecf20Sopenharmony_cistatic const struct sensor_by_chipset_revision chipset_revision_sensor[] = { 61618c2ecf20Sopenharmony_ci {0xc000, 0x12}, /* TAS5130C */ 61628c2ecf20Sopenharmony_ci {0xc001, 0x13}, /* MT9V111 */ 61638c2ecf20Sopenharmony_ci {0xe001, 0x13}, 61648c2ecf20Sopenharmony_ci {0x8001, 0x13}, 61658c2ecf20Sopenharmony_ci {0x8000, 0x14}, /* CS2102K */ 61668c2ecf20Sopenharmony_ci {0x8400, 0x15}, /* MT9V111 */ 61678c2ecf20Sopenharmony_ci {0xe400, 0x15}, 61688c2ecf20Sopenharmony_ci}; 61698c2ecf20Sopenharmony_ci 61708c2ecf20Sopenharmony_cistatic int vga_3wr_probe(struct gspca_dev *gspca_dev) 61718c2ecf20Sopenharmony_ci{ 61728c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 61738c2ecf20Sopenharmony_ci int i; 61748c2ecf20Sopenharmony_ci u16 retword; 61758c2ecf20Sopenharmony_ci 61768c2ecf20Sopenharmony_ci/*fixme: lack of 8b=b3 (11,12)-> 10, 8b=e0 (14,15,16)-> 12 found in gspcav1*/ 61778c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x02, 0x0010); 61788c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0x0010); 61798c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); 61808c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x00, 0x0010); 61818c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0001); 61828c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x91, 0x008b); 61838c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x0012); 61848c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0012); 61858c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x05, 0x0012); 61868c2ecf20Sopenharmony_ci retword = i2c_read(gspca_dev, 0x14); 61878c2ecf20Sopenharmony_ci if (retword != 0) 61888c2ecf20Sopenharmony_ci return 0x11; /* HV7131R */ 61898c2ecf20Sopenharmony_ci retword = i2c_read(gspca_dev, 0x15); 61908c2ecf20Sopenharmony_ci if (retword != 0) 61918c2ecf20Sopenharmony_ci return 0x11; /* HV7131R */ 61928c2ecf20Sopenharmony_ci retword = i2c_read(gspca_dev, 0x16); 61938c2ecf20Sopenharmony_ci if (retword != 0) 61948c2ecf20Sopenharmony_ci return 0x11; /* HV7131R */ 61958c2ecf20Sopenharmony_ci 61968c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x02, 0x0010); 61978c2ecf20Sopenharmony_ci retword = reg_r(gspca_dev, 0x000b) << 8; 61988c2ecf20Sopenharmony_ci retword |= reg_r(gspca_dev, 0x000a); 61998c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "probe 3wr vga 1 0x%04x\n", retword); 62008c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0x0010); 62018c2ecf20Sopenharmony_ci if ((retword & 0xff00) == 0x6400) 62028c2ecf20Sopenharmony_ci return 0x02; /* TAS5130C */ 62038c2ecf20Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(chipset_revision_sensor); i++) { 62048c2ecf20Sopenharmony_ci if (chipset_revision_sensor[i].revision == retword) { 62058c2ecf20Sopenharmony_ci sd->chip_revision = retword; 62068c2ecf20Sopenharmony_ci send_unknown(gspca_dev, SENSOR_PB0330); 62078c2ecf20Sopenharmony_ci return chipset_revision_sensor[i].internal_sensor_id; 62088c2ecf20Sopenharmony_ci } 62098c2ecf20Sopenharmony_ci } 62108c2ecf20Sopenharmony_ci 62118c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); /* check PB0330 */ 62128c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0001); 62138c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xdd, 0x008b); 62148c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x0a, 0x0010); 62158c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x0012); 62168c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0012); 62178c2ecf20Sopenharmony_ci retword = i2c_read(gspca_dev, 0x00); 62188c2ecf20Sopenharmony_ci if (retword != 0) { 62198c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "probe 3wr vga type 0a\n"); 62208c2ecf20Sopenharmony_ci return 0x0a; /* PB0330 */ 62218c2ecf20Sopenharmony_ci } 62228c2ecf20Sopenharmony_ci 62238c2ecf20Sopenharmony_ci /* probe gc0303 / gc0305 */ 62248c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); 62258c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0001); 62268c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x98, 0x008b); 62278c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0010); 62288c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x0012); 62298c2ecf20Sopenharmony_ci msleep(2); 62308c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0012); 62318c2ecf20Sopenharmony_ci retword = i2c_read(gspca_dev, 0x00); 62328c2ecf20Sopenharmony_ci if (retword != 0) { 62338c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "probe 3wr vga type %02x\n", 62348c2ecf20Sopenharmony_ci retword); 62358c2ecf20Sopenharmony_ci if (retword == 0x0011) /* gc0303 */ 62368c2ecf20Sopenharmony_ci return 0x0303; 62378c2ecf20Sopenharmony_ci if (retword == 0x0029) /* gc0305 */ 62388c2ecf20Sopenharmony_ci send_unknown(gspca_dev, SENSOR_GC0305); 62398c2ecf20Sopenharmony_ci return retword; 62408c2ecf20Sopenharmony_ci } 62418c2ecf20Sopenharmony_ci 62428c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); /* check OmniVision */ 62438c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0001); 62448c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa1, 0x008b); 62458c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x08, 0x008d); 62468c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x06, 0x0010); 62478c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0012); 62488c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x05, 0x0012); 62498c2ecf20Sopenharmony_ci if (i2c_read(gspca_dev, 0x1c) == 0x007f /* OV7610 - manufacturer ID */ 62508c2ecf20Sopenharmony_ci && i2c_read(gspca_dev, 0x1d) == 0x00a2) { 62518c2ecf20Sopenharmony_ci send_unknown(gspca_dev, SENSOR_OV7620); 62528c2ecf20Sopenharmony_ci return 0x06; /* OmniVision confirm ? */ 62538c2ecf20Sopenharmony_ci } 62548c2ecf20Sopenharmony_ci 62558c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); 62568c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x00, 0x0002); 62578c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0010); 62588c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0001); 62598c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xee, 0x008b); 62608c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x0012); 62618c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0012); 62628c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x05, 0x0012); 62638c2ecf20Sopenharmony_ci retword = i2c_read(gspca_dev, 0x00) << 8; /* ID 0 */ 62648c2ecf20Sopenharmony_ci retword |= i2c_read(gspca_dev, 0x01); /* ID 1 */ 62658c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "probe 3wr vga 2 0x%04x\n", retword); 62668c2ecf20Sopenharmony_ci if (retword == 0x2030) { 62678c2ecf20Sopenharmony_ci u8 retbyte; 62688c2ecf20Sopenharmony_ci 62698c2ecf20Sopenharmony_ci retbyte = i2c_read(gspca_dev, 0x02); /* revision number */ 62708c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "sensor PO2030 rev 0x%02x\n", 62718c2ecf20Sopenharmony_ci retbyte); 62728c2ecf20Sopenharmony_ci 62738c2ecf20Sopenharmony_ci send_unknown(gspca_dev, SENSOR_PO2030); 62748c2ecf20Sopenharmony_ci return retword; 62758c2ecf20Sopenharmony_ci } 62768c2ecf20Sopenharmony_ci 62778c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); 62788c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x0a, 0x0010); 62798c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xd3, 0x008b); 62808c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0001); 62818c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x0012); 62828c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0012); 62838c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x05, 0x0012); 62848c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xd3, 0x008b); 62858c2ecf20Sopenharmony_ci retword = i2c_read(gspca_dev, 0x01); 62868c2ecf20Sopenharmony_ci if (retword != 0) { 62878c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "probe 3wr vga type 0a ? ret: %04x\n", 62888c2ecf20Sopenharmony_ci retword); 62898c2ecf20Sopenharmony_ci return 0x16; /* adcm2700 (6100/6200) */ 62908c2ecf20Sopenharmony_ci } 62918c2ecf20Sopenharmony_ci return -1; 62928c2ecf20Sopenharmony_ci} 62938c2ecf20Sopenharmony_ci 62948c2ecf20Sopenharmony_cistatic int zcxx_probeSensor(struct gspca_dev *gspca_dev) 62958c2ecf20Sopenharmony_ci{ 62968c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 62978c2ecf20Sopenharmony_ci int sensor; 62988c2ecf20Sopenharmony_ci 62998c2ecf20Sopenharmony_ci switch (sd->sensor) { 63008c2ecf20Sopenharmony_ci case SENSOR_MC501CB: 63018c2ecf20Sopenharmony_ci return -1; /* don't probe */ 63028c2ecf20Sopenharmony_ci case SENSOR_GC0303: 63038c2ecf20Sopenharmony_ci /* may probe but with no write in reg 0x0010 */ 63048c2ecf20Sopenharmony_ci return -1; /* don't probe */ 63058c2ecf20Sopenharmony_ci case SENSOR_PAS106: 63068c2ecf20Sopenharmony_ci sensor = sif_probe(gspca_dev); 63078c2ecf20Sopenharmony_ci if (sensor >= 0) 63088c2ecf20Sopenharmony_ci return sensor; 63098c2ecf20Sopenharmony_ci break; 63108c2ecf20Sopenharmony_ci } 63118c2ecf20Sopenharmony_ci sensor = vga_2wr_probe(gspca_dev); 63128c2ecf20Sopenharmony_ci if (sensor >= 0) 63138c2ecf20Sopenharmony_ci return sensor; 63148c2ecf20Sopenharmony_ci return vga_3wr_probe(gspca_dev); 63158c2ecf20Sopenharmony_ci} 63168c2ecf20Sopenharmony_ci 63178c2ecf20Sopenharmony_ci/* this function is called at probe time */ 63188c2ecf20Sopenharmony_cistatic int sd_config(struct gspca_dev *gspca_dev, 63198c2ecf20Sopenharmony_ci const struct usb_device_id *id) 63208c2ecf20Sopenharmony_ci{ 63218c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 63228c2ecf20Sopenharmony_ci 63238c2ecf20Sopenharmony_ci if (id->idProduct == 0x301b) 63248c2ecf20Sopenharmony_ci sd->bridge = BRIDGE_ZC301; 63258c2ecf20Sopenharmony_ci else 63268c2ecf20Sopenharmony_ci sd->bridge = BRIDGE_ZC303; 63278c2ecf20Sopenharmony_ci 63288c2ecf20Sopenharmony_ci /* define some sensors from the vendor/product */ 63298c2ecf20Sopenharmony_ci sd->sensor = id->driver_info; 63308c2ecf20Sopenharmony_ci 63318c2ecf20Sopenharmony_ci sd->reg08 = REG08_DEF; 63328c2ecf20Sopenharmony_ci 63338c2ecf20Sopenharmony_ci INIT_WORK(&sd->work, transfer_update); 63348c2ecf20Sopenharmony_ci 63358c2ecf20Sopenharmony_ci return 0; 63368c2ecf20Sopenharmony_ci} 63378c2ecf20Sopenharmony_ci 63388c2ecf20Sopenharmony_cistatic int zcxx_g_volatile_ctrl(struct v4l2_ctrl *ctrl) 63398c2ecf20Sopenharmony_ci{ 63408c2ecf20Sopenharmony_ci struct gspca_dev *gspca_dev = 63418c2ecf20Sopenharmony_ci container_of(ctrl->handler, struct gspca_dev, ctrl_handler); 63428c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *)gspca_dev; 63438c2ecf20Sopenharmony_ci 63448c2ecf20Sopenharmony_ci switch (ctrl->id) { 63458c2ecf20Sopenharmony_ci case V4L2_CID_AUTOGAIN: 63468c2ecf20Sopenharmony_ci gspca_dev->usb_err = 0; 63478c2ecf20Sopenharmony_ci if (ctrl->val && sd->exposure && gspca_dev->streaming) 63488c2ecf20Sopenharmony_ci sd->exposure->val = getexposure(gspca_dev); 63498c2ecf20Sopenharmony_ci return gspca_dev->usb_err; 63508c2ecf20Sopenharmony_ci } 63518c2ecf20Sopenharmony_ci return -EINVAL; 63528c2ecf20Sopenharmony_ci} 63538c2ecf20Sopenharmony_ci 63548c2ecf20Sopenharmony_cistatic int zcxx_s_ctrl(struct v4l2_ctrl *ctrl) 63558c2ecf20Sopenharmony_ci{ 63568c2ecf20Sopenharmony_ci struct gspca_dev *gspca_dev = 63578c2ecf20Sopenharmony_ci container_of(ctrl->handler, struct gspca_dev, ctrl_handler); 63588c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *)gspca_dev; 63598c2ecf20Sopenharmony_ci int i, qual; 63608c2ecf20Sopenharmony_ci 63618c2ecf20Sopenharmony_ci gspca_dev->usb_err = 0; 63628c2ecf20Sopenharmony_ci 63638c2ecf20Sopenharmony_ci if (ctrl->id == V4L2_CID_JPEG_COMPRESSION_QUALITY) { 63648c2ecf20Sopenharmony_ci qual = sd->reg08 >> 1; 63658c2ecf20Sopenharmony_ci 63668c2ecf20Sopenharmony_ci for (i = 0; i < ARRAY_SIZE(jpeg_qual); i++) { 63678c2ecf20Sopenharmony_ci if (ctrl->val <= jpeg_qual[i]) 63688c2ecf20Sopenharmony_ci break; 63698c2ecf20Sopenharmony_ci } 63708c2ecf20Sopenharmony_ci if (i == ARRAY_SIZE(jpeg_qual) || (i > 0 && i == qual && ctrl->val < jpeg_qual[i])) 63718c2ecf20Sopenharmony_ci i--; 63728c2ecf20Sopenharmony_ci 63738c2ecf20Sopenharmony_ci /* With high quality settings we need max bandwidth */ 63748c2ecf20Sopenharmony_ci if (i >= 2 && gspca_dev->streaming && 63758c2ecf20Sopenharmony_ci !gspca_dev->cam.needs_full_bandwidth) 63768c2ecf20Sopenharmony_ci return -EBUSY; 63778c2ecf20Sopenharmony_ci 63788c2ecf20Sopenharmony_ci sd->reg08 = (i << 1) | 1; 63798c2ecf20Sopenharmony_ci ctrl->val = jpeg_qual[i]; 63808c2ecf20Sopenharmony_ci } 63818c2ecf20Sopenharmony_ci 63828c2ecf20Sopenharmony_ci if (!gspca_dev->streaming) 63838c2ecf20Sopenharmony_ci return 0; 63848c2ecf20Sopenharmony_ci 63858c2ecf20Sopenharmony_ci switch (ctrl->id) { 63868c2ecf20Sopenharmony_ci /* gamma/brightness/contrast cluster */ 63878c2ecf20Sopenharmony_ci case V4L2_CID_GAMMA: 63888c2ecf20Sopenharmony_ci setcontrast(gspca_dev, sd->gamma->val, 63898c2ecf20Sopenharmony_ci sd->brightness->val, sd->contrast->val); 63908c2ecf20Sopenharmony_ci break; 63918c2ecf20Sopenharmony_ci /* autogain/exposure cluster */ 63928c2ecf20Sopenharmony_ci case V4L2_CID_AUTOGAIN: 63938c2ecf20Sopenharmony_ci setautogain(gspca_dev, ctrl->val); 63948c2ecf20Sopenharmony_ci if (!gspca_dev->usb_err && !ctrl->val && sd->exposure) 63958c2ecf20Sopenharmony_ci setexposure(gspca_dev, sd->exposure->val); 63968c2ecf20Sopenharmony_ci break; 63978c2ecf20Sopenharmony_ci case V4L2_CID_POWER_LINE_FREQUENCY: 63988c2ecf20Sopenharmony_ci setlightfreq(gspca_dev, ctrl->val); 63998c2ecf20Sopenharmony_ci break; 64008c2ecf20Sopenharmony_ci case V4L2_CID_SHARPNESS: 64018c2ecf20Sopenharmony_ci setsharpness(gspca_dev, ctrl->val); 64028c2ecf20Sopenharmony_ci break; 64038c2ecf20Sopenharmony_ci case V4L2_CID_JPEG_COMPRESSION_QUALITY: 64048c2ecf20Sopenharmony_ci setquality(gspca_dev); 64058c2ecf20Sopenharmony_ci break; 64068c2ecf20Sopenharmony_ci } 64078c2ecf20Sopenharmony_ci return gspca_dev->usb_err; 64088c2ecf20Sopenharmony_ci} 64098c2ecf20Sopenharmony_ci 64108c2ecf20Sopenharmony_cistatic const struct v4l2_ctrl_ops zcxx_ctrl_ops = { 64118c2ecf20Sopenharmony_ci .g_volatile_ctrl = zcxx_g_volatile_ctrl, 64128c2ecf20Sopenharmony_ci .s_ctrl = zcxx_s_ctrl, 64138c2ecf20Sopenharmony_ci}; 64148c2ecf20Sopenharmony_ci 64158c2ecf20Sopenharmony_cistatic int sd_init_controls(struct gspca_dev *gspca_dev) 64168c2ecf20Sopenharmony_ci{ 64178c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *)gspca_dev; 64188c2ecf20Sopenharmony_ci struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; 64198c2ecf20Sopenharmony_ci static const u8 gamma[SENSOR_MAX] = { 64208c2ecf20Sopenharmony_ci [SENSOR_ADCM2700] = 4, 64218c2ecf20Sopenharmony_ci [SENSOR_CS2102] = 4, 64228c2ecf20Sopenharmony_ci [SENSOR_CS2102K] = 5, 64238c2ecf20Sopenharmony_ci [SENSOR_GC0303] = 3, 64248c2ecf20Sopenharmony_ci [SENSOR_GC0305] = 4, 64258c2ecf20Sopenharmony_ci [SENSOR_HDCS2020] = 4, 64268c2ecf20Sopenharmony_ci [SENSOR_HV7131B] = 4, 64278c2ecf20Sopenharmony_ci [SENSOR_HV7131R] = 4, 64288c2ecf20Sopenharmony_ci [SENSOR_ICM105A] = 4, 64298c2ecf20Sopenharmony_ci [SENSOR_MC501CB] = 4, 64308c2ecf20Sopenharmony_ci [SENSOR_MT9V111_1] = 4, 64318c2ecf20Sopenharmony_ci [SENSOR_MT9V111_3] = 4, 64328c2ecf20Sopenharmony_ci [SENSOR_OV7620] = 3, 64338c2ecf20Sopenharmony_ci [SENSOR_OV7630C] = 4, 64348c2ecf20Sopenharmony_ci [SENSOR_PAS106] = 4, 64358c2ecf20Sopenharmony_ci [SENSOR_PAS202B] = 4, 64368c2ecf20Sopenharmony_ci [SENSOR_PB0330] = 4, 64378c2ecf20Sopenharmony_ci [SENSOR_PO2030] = 4, 64388c2ecf20Sopenharmony_ci [SENSOR_TAS5130C] = 3, 64398c2ecf20Sopenharmony_ci }; 64408c2ecf20Sopenharmony_ci 64418c2ecf20Sopenharmony_ci gspca_dev->vdev.ctrl_handler = hdl; 64428c2ecf20Sopenharmony_ci v4l2_ctrl_handler_init(hdl, 8); 64438c2ecf20Sopenharmony_ci sd->brightness = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops, 64448c2ecf20Sopenharmony_ci V4L2_CID_BRIGHTNESS, 0, 255, 1, 128); 64458c2ecf20Sopenharmony_ci sd->contrast = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops, 64468c2ecf20Sopenharmony_ci V4L2_CID_CONTRAST, 0, 255, 1, 128); 64478c2ecf20Sopenharmony_ci sd->gamma = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops, 64488c2ecf20Sopenharmony_ci V4L2_CID_GAMMA, 1, 6, 1, gamma[sd->sensor]); 64498c2ecf20Sopenharmony_ci if (sd->sensor == SENSOR_HV7131R) 64508c2ecf20Sopenharmony_ci sd->exposure = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops, 64518c2ecf20Sopenharmony_ci V4L2_CID_EXPOSURE, 0x30d, 0x493e, 1, 0x927); 64528c2ecf20Sopenharmony_ci else if (sd->sensor == SENSOR_OV7620) 64538c2ecf20Sopenharmony_ci sd->exposure = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops, 64548c2ecf20Sopenharmony_ci V4L2_CID_EXPOSURE, 0, 255, 1, 0x41); 64558c2ecf20Sopenharmony_ci sd->autogain = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops, 64568c2ecf20Sopenharmony_ci V4L2_CID_AUTOGAIN, 0, 1, 1, 1); 64578c2ecf20Sopenharmony_ci if (sd->sensor != SENSOR_OV7630C) 64588c2ecf20Sopenharmony_ci sd->plfreq = v4l2_ctrl_new_std_menu(hdl, &zcxx_ctrl_ops, 64598c2ecf20Sopenharmony_ci V4L2_CID_POWER_LINE_FREQUENCY, 64608c2ecf20Sopenharmony_ci V4L2_CID_POWER_LINE_FREQUENCY_60HZ, 0, 64618c2ecf20Sopenharmony_ci V4L2_CID_POWER_LINE_FREQUENCY_DISABLED); 64628c2ecf20Sopenharmony_ci sd->sharpness = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops, 64638c2ecf20Sopenharmony_ci V4L2_CID_SHARPNESS, 0, 3, 1, 64648c2ecf20Sopenharmony_ci sd->sensor == SENSOR_PO2030 ? 0 : 2); 64658c2ecf20Sopenharmony_ci sd->jpegqual = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops, 64668c2ecf20Sopenharmony_ci V4L2_CID_JPEG_COMPRESSION_QUALITY, 64678c2ecf20Sopenharmony_ci jpeg_qual[0], jpeg_qual[ARRAY_SIZE(jpeg_qual) - 1], 1, 64688c2ecf20Sopenharmony_ci jpeg_qual[REG08_DEF >> 1]); 64698c2ecf20Sopenharmony_ci if (hdl->error) { 64708c2ecf20Sopenharmony_ci pr_err("Could not initialize controls\n"); 64718c2ecf20Sopenharmony_ci return hdl->error; 64728c2ecf20Sopenharmony_ci } 64738c2ecf20Sopenharmony_ci v4l2_ctrl_cluster(3, &sd->gamma); 64748c2ecf20Sopenharmony_ci if (sd->sensor == SENSOR_HV7131R || sd->sensor == SENSOR_OV7620) 64758c2ecf20Sopenharmony_ci v4l2_ctrl_auto_cluster(2, &sd->autogain, 0, true); 64768c2ecf20Sopenharmony_ci return 0; 64778c2ecf20Sopenharmony_ci} 64788c2ecf20Sopenharmony_ci 64798c2ecf20Sopenharmony_ci/* this function is called at probe and resume time */ 64808c2ecf20Sopenharmony_cistatic int sd_init(struct gspca_dev *gspca_dev) 64818c2ecf20Sopenharmony_ci{ 64828c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 64838c2ecf20Sopenharmony_ci struct cam *cam; 64848c2ecf20Sopenharmony_ci int sensor; 64858c2ecf20Sopenharmony_ci static const u8 mode_tb[SENSOR_MAX] = { 64868c2ecf20Sopenharmony_ci [SENSOR_ADCM2700] = 2, 64878c2ecf20Sopenharmony_ci [SENSOR_CS2102] = 1, 64888c2ecf20Sopenharmony_ci [SENSOR_CS2102K] = 1, 64898c2ecf20Sopenharmony_ci [SENSOR_GC0303] = 1, 64908c2ecf20Sopenharmony_ci [SENSOR_GC0305] = 1, 64918c2ecf20Sopenharmony_ci [SENSOR_HDCS2020] = 1, 64928c2ecf20Sopenharmony_ci [SENSOR_HV7131B] = 1, 64938c2ecf20Sopenharmony_ci [SENSOR_HV7131R] = 1, 64948c2ecf20Sopenharmony_ci [SENSOR_ICM105A] = 1, 64958c2ecf20Sopenharmony_ci [SENSOR_MC501CB] = 2, 64968c2ecf20Sopenharmony_ci [SENSOR_MT9V111_1] = 1, 64978c2ecf20Sopenharmony_ci [SENSOR_MT9V111_3] = 1, 64988c2ecf20Sopenharmony_ci [SENSOR_OV7620] = 2, 64998c2ecf20Sopenharmony_ci [SENSOR_OV7630C] = 1, 65008c2ecf20Sopenharmony_ci [SENSOR_PAS106] = 0, 65018c2ecf20Sopenharmony_ci [SENSOR_PAS202B] = 1, 65028c2ecf20Sopenharmony_ci [SENSOR_PB0330] = 1, 65038c2ecf20Sopenharmony_ci [SENSOR_PO2030] = 1, 65048c2ecf20Sopenharmony_ci [SENSOR_TAS5130C] = 1, 65058c2ecf20Sopenharmony_ci }; 65068c2ecf20Sopenharmony_ci 65078c2ecf20Sopenharmony_ci sensor = zcxx_probeSensor(gspca_dev); 65088c2ecf20Sopenharmony_ci if (sensor >= 0) 65098c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "probe sensor -> %04x\n", sensor); 65108c2ecf20Sopenharmony_ci if ((unsigned) force_sensor < SENSOR_MAX) { 65118c2ecf20Sopenharmony_ci sd->sensor = force_sensor; 65128c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "sensor forced to %d\n", 65138c2ecf20Sopenharmony_ci force_sensor); 65148c2ecf20Sopenharmony_ci } else { 65158c2ecf20Sopenharmony_ci switch (sensor) { 65168c2ecf20Sopenharmony_ci case -1: 65178c2ecf20Sopenharmony_ci switch (sd->sensor) { 65188c2ecf20Sopenharmony_ci case SENSOR_MC501CB: 65198c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Sensor MC501CB\n"); 65208c2ecf20Sopenharmony_ci break; 65218c2ecf20Sopenharmony_ci case SENSOR_GC0303: 65228c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Sensor GC0303\n"); 65238c2ecf20Sopenharmony_ci break; 65248c2ecf20Sopenharmony_ci default: 65258c2ecf20Sopenharmony_ci pr_warn("Unknown sensor - set to TAS5130C\n"); 65268c2ecf20Sopenharmony_ci sd->sensor = SENSOR_TAS5130C; 65278c2ecf20Sopenharmony_ci } 65288c2ecf20Sopenharmony_ci break; 65298c2ecf20Sopenharmony_ci case 0: 65308c2ecf20Sopenharmony_ci /* check the sensor type */ 65318c2ecf20Sopenharmony_ci sensor = i2c_read(gspca_dev, 0x00); 65328c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Sensor hv7131 type %d\n", 65338c2ecf20Sopenharmony_ci sensor); 65348c2ecf20Sopenharmony_ci switch (sensor) { 65358c2ecf20Sopenharmony_ci case 0: /* hv7131b */ 65368c2ecf20Sopenharmony_ci case 1: /* hv7131e */ 65378c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor HV7131B\n"); 65388c2ecf20Sopenharmony_ci sd->sensor = SENSOR_HV7131B; 65398c2ecf20Sopenharmony_ci break; 65408c2ecf20Sopenharmony_ci default: 65418c2ecf20Sopenharmony_ci/* case 2: * hv7131r */ 65428c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor HV7131R\n"); 65438c2ecf20Sopenharmony_ci sd->sensor = SENSOR_HV7131R; 65448c2ecf20Sopenharmony_ci break; 65458c2ecf20Sopenharmony_ci } 65468c2ecf20Sopenharmony_ci break; 65478c2ecf20Sopenharmony_ci case 0x02: 65488c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Sensor TAS5130C\n"); 65498c2ecf20Sopenharmony_ci sd->sensor = SENSOR_TAS5130C; 65508c2ecf20Sopenharmony_ci break; 65518c2ecf20Sopenharmony_ci case 0x04: 65528c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor CS2102\n"); 65538c2ecf20Sopenharmony_ci sd->sensor = SENSOR_CS2102; 65548c2ecf20Sopenharmony_ci break; 65558c2ecf20Sopenharmony_ci case 0x08: 65568c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor HDCS2020\n"); 65578c2ecf20Sopenharmony_ci sd->sensor = SENSOR_HDCS2020; 65588c2ecf20Sopenharmony_ci break; 65598c2ecf20Sopenharmony_ci case 0x0a: 65608c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, 65618c2ecf20Sopenharmony_ci "Find Sensor PB0330. Chip revision %x\n", 65628c2ecf20Sopenharmony_ci sd->chip_revision); 65638c2ecf20Sopenharmony_ci sd->sensor = SENSOR_PB0330; 65648c2ecf20Sopenharmony_ci break; 65658c2ecf20Sopenharmony_ci case 0x0c: 65668c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor ICM105A\n"); 65678c2ecf20Sopenharmony_ci sd->sensor = SENSOR_ICM105A; 65688c2ecf20Sopenharmony_ci break; 65698c2ecf20Sopenharmony_ci case 0x0e: 65708c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor PAS202B\n"); 65718c2ecf20Sopenharmony_ci sd->sensor = SENSOR_PAS202B; 65728c2ecf20Sopenharmony_ci break; 65738c2ecf20Sopenharmony_ci case 0x0f: 65748c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor PAS106\n"); 65758c2ecf20Sopenharmony_ci sd->sensor = SENSOR_PAS106; 65768c2ecf20Sopenharmony_ci break; 65778c2ecf20Sopenharmony_ci case 0x10: 65788c2ecf20Sopenharmony_ci case 0x12: 65798c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor TAS5130C\n"); 65808c2ecf20Sopenharmony_ci sd->sensor = SENSOR_TAS5130C; 65818c2ecf20Sopenharmony_ci break; 65828c2ecf20Sopenharmony_ci case 0x11: 65838c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor HV7131R\n"); 65848c2ecf20Sopenharmony_ci sd->sensor = SENSOR_HV7131R; 65858c2ecf20Sopenharmony_ci break; 65868c2ecf20Sopenharmony_ci case 0x13: 65878c2ecf20Sopenharmony_ci case 0x15: 65888c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, 65898c2ecf20Sopenharmony_ci "Sensor MT9V111. Chip revision %04x\n", 65908c2ecf20Sopenharmony_ci sd->chip_revision); 65918c2ecf20Sopenharmony_ci sd->sensor = sd->bridge == BRIDGE_ZC301 65928c2ecf20Sopenharmony_ci ? SENSOR_MT9V111_1 65938c2ecf20Sopenharmony_ci : SENSOR_MT9V111_3; 65948c2ecf20Sopenharmony_ci break; 65958c2ecf20Sopenharmony_ci case 0x14: 65968c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, 65978c2ecf20Sopenharmony_ci "Find Sensor CS2102K?. Chip revision %x\n", 65988c2ecf20Sopenharmony_ci sd->chip_revision); 65998c2ecf20Sopenharmony_ci sd->sensor = SENSOR_CS2102K; 66008c2ecf20Sopenharmony_ci break; 66018c2ecf20Sopenharmony_ci case 0x16: 66028c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor ADCM2700\n"); 66038c2ecf20Sopenharmony_ci sd->sensor = SENSOR_ADCM2700; 66048c2ecf20Sopenharmony_ci break; 66058c2ecf20Sopenharmony_ci case 0x29: 66068c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor GC0305\n"); 66078c2ecf20Sopenharmony_ci sd->sensor = SENSOR_GC0305; 66088c2ecf20Sopenharmony_ci break; 66098c2ecf20Sopenharmony_ci case 0x0303: 66108c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Sensor GC0303\n"); 66118c2ecf20Sopenharmony_ci sd->sensor = SENSOR_GC0303; 66128c2ecf20Sopenharmony_ci break; 66138c2ecf20Sopenharmony_ci case 0x2030: 66148c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor PO2030\n"); 66158c2ecf20Sopenharmony_ci sd->sensor = SENSOR_PO2030; 66168c2ecf20Sopenharmony_ci break; 66178c2ecf20Sopenharmony_ci case 0x7620: 66188c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor OV7620\n"); 66198c2ecf20Sopenharmony_ci sd->sensor = SENSOR_OV7620; 66208c2ecf20Sopenharmony_ci break; 66218c2ecf20Sopenharmony_ci case 0x7631: 66228c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor OV7630C\n"); 66238c2ecf20Sopenharmony_ci sd->sensor = SENSOR_OV7630C; 66248c2ecf20Sopenharmony_ci break; 66258c2ecf20Sopenharmony_ci case 0x7648: 66268c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor OV7648\n"); 66278c2ecf20Sopenharmony_ci sd->sensor = SENSOR_OV7620; /* same sensor (?) */ 66288c2ecf20Sopenharmony_ci break; 66298c2ecf20Sopenharmony_ci default: 66308c2ecf20Sopenharmony_ci pr_err("Unknown sensor %04x\n", sensor); 66318c2ecf20Sopenharmony_ci return -EINVAL; 66328c2ecf20Sopenharmony_ci } 66338c2ecf20Sopenharmony_ci } 66348c2ecf20Sopenharmony_ci if (sensor < 0x20) { 66358c2ecf20Sopenharmony_ci if (sensor == -1 || sensor == 0x10 || sensor == 0x12) 66368c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x02, 0x0010); 66378c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0x0010); 66388c2ecf20Sopenharmony_ci } 66398c2ecf20Sopenharmony_ci 66408c2ecf20Sopenharmony_ci cam = &gspca_dev->cam; 66418c2ecf20Sopenharmony_ci switch (mode_tb[sd->sensor]) { 66428c2ecf20Sopenharmony_ci case 0: 66438c2ecf20Sopenharmony_ci cam->cam_mode = sif_mode; 66448c2ecf20Sopenharmony_ci cam->nmodes = ARRAY_SIZE(sif_mode); 66458c2ecf20Sopenharmony_ci break; 66468c2ecf20Sopenharmony_ci case 1: 66478c2ecf20Sopenharmony_ci cam->cam_mode = vga_mode; 66488c2ecf20Sopenharmony_ci cam->nmodes = ARRAY_SIZE(vga_mode); 66498c2ecf20Sopenharmony_ci break; 66508c2ecf20Sopenharmony_ci default: 66518c2ecf20Sopenharmony_ci/* case 2: */ 66528c2ecf20Sopenharmony_ci cam->cam_mode = broken_vga_mode; 66538c2ecf20Sopenharmony_ci cam->nmodes = ARRAY_SIZE(broken_vga_mode); 66548c2ecf20Sopenharmony_ci break; 66558c2ecf20Sopenharmony_ci } 66568c2ecf20Sopenharmony_ci 66578c2ecf20Sopenharmony_ci /* switch off the led */ 66588c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x01, 0x0000); 66598c2ecf20Sopenharmony_ci return gspca_dev->usb_err; 66608c2ecf20Sopenharmony_ci} 66618c2ecf20Sopenharmony_ci 66628c2ecf20Sopenharmony_cistatic int sd_pre_start(struct gspca_dev *gspca_dev) 66638c2ecf20Sopenharmony_ci{ 66648c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 66658c2ecf20Sopenharmony_ci gspca_dev->cam.needs_full_bandwidth = (sd->reg08 >= 4) ? 1 : 0; 66668c2ecf20Sopenharmony_ci return 0; 66678c2ecf20Sopenharmony_ci} 66688c2ecf20Sopenharmony_ci 66698c2ecf20Sopenharmony_cistatic int sd_start(struct gspca_dev *gspca_dev) 66708c2ecf20Sopenharmony_ci{ 66718c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 66728c2ecf20Sopenharmony_ci int mode; 66738c2ecf20Sopenharmony_ci static const struct usb_action *init_tb[SENSOR_MAX][2] = { 66748c2ecf20Sopenharmony_ci [SENSOR_ADCM2700] = 66758c2ecf20Sopenharmony_ci {adcm2700_Initial, adcm2700_InitialScale}, 66768c2ecf20Sopenharmony_ci [SENSOR_CS2102] = 66778c2ecf20Sopenharmony_ci {cs2102_Initial, cs2102_InitialScale}, 66788c2ecf20Sopenharmony_ci [SENSOR_CS2102K] = 66798c2ecf20Sopenharmony_ci {cs2102K_Initial, cs2102K_InitialScale}, 66808c2ecf20Sopenharmony_ci [SENSOR_GC0303] = 66818c2ecf20Sopenharmony_ci {gc0303_Initial, gc0303_InitialScale}, 66828c2ecf20Sopenharmony_ci [SENSOR_GC0305] = 66838c2ecf20Sopenharmony_ci {gc0305_Initial, gc0305_InitialScale}, 66848c2ecf20Sopenharmony_ci [SENSOR_HDCS2020] = 66858c2ecf20Sopenharmony_ci {hdcs2020_Initial, hdcs2020_InitialScale}, 66868c2ecf20Sopenharmony_ci [SENSOR_HV7131B] = 66878c2ecf20Sopenharmony_ci {hv7131b_Initial, hv7131b_InitialScale}, 66888c2ecf20Sopenharmony_ci [SENSOR_HV7131R] = 66898c2ecf20Sopenharmony_ci {hv7131r_Initial, hv7131r_InitialScale}, 66908c2ecf20Sopenharmony_ci [SENSOR_ICM105A] = 66918c2ecf20Sopenharmony_ci {icm105a_Initial, icm105a_InitialScale}, 66928c2ecf20Sopenharmony_ci [SENSOR_MC501CB] = 66938c2ecf20Sopenharmony_ci {mc501cb_Initial, mc501cb_InitialScale}, 66948c2ecf20Sopenharmony_ci [SENSOR_MT9V111_1] = 66958c2ecf20Sopenharmony_ci {mt9v111_1_Initial, mt9v111_1_InitialScale}, 66968c2ecf20Sopenharmony_ci [SENSOR_MT9V111_3] = 66978c2ecf20Sopenharmony_ci {mt9v111_3_Initial, mt9v111_3_InitialScale}, 66988c2ecf20Sopenharmony_ci [SENSOR_OV7620] = 66998c2ecf20Sopenharmony_ci {ov7620_Initial, ov7620_InitialScale}, 67008c2ecf20Sopenharmony_ci [SENSOR_OV7630C] = 67018c2ecf20Sopenharmony_ci {ov7630c_Initial, ov7630c_InitialScale}, 67028c2ecf20Sopenharmony_ci [SENSOR_PAS106] = 67038c2ecf20Sopenharmony_ci {pas106b_Initial, pas106b_InitialScale}, 67048c2ecf20Sopenharmony_ci [SENSOR_PAS202B] = 67058c2ecf20Sopenharmony_ci {pas202b_Initial, pas202b_InitialScale}, 67068c2ecf20Sopenharmony_ci [SENSOR_PB0330] = 67078c2ecf20Sopenharmony_ci {pb0330_Initial, pb0330_InitialScale}, 67088c2ecf20Sopenharmony_ci [SENSOR_PO2030] = 67098c2ecf20Sopenharmony_ci {po2030_Initial, po2030_InitialScale}, 67108c2ecf20Sopenharmony_ci [SENSOR_TAS5130C] = 67118c2ecf20Sopenharmony_ci {tas5130c_Initial, tas5130c_InitialScale}, 67128c2ecf20Sopenharmony_ci }; 67138c2ecf20Sopenharmony_ci 67148c2ecf20Sopenharmony_ci /* create the JPEG header */ 67158c2ecf20Sopenharmony_ci jpeg_define(sd->jpeg_hdr, gspca_dev->pixfmt.height, 67168c2ecf20Sopenharmony_ci gspca_dev->pixfmt.width, 67178c2ecf20Sopenharmony_ci 0x21); /* JPEG 422 */ 67188c2ecf20Sopenharmony_ci 67198c2ecf20Sopenharmony_ci mode = gspca_dev->cam.cam_mode[gspca_dev->curr_mode].priv; 67208c2ecf20Sopenharmony_ci switch (sd->sensor) { 67218c2ecf20Sopenharmony_ci case SENSOR_HV7131R: 67228c2ecf20Sopenharmony_ci zcxx_probeSensor(gspca_dev); 67238c2ecf20Sopenharmony_ci break; 67248c2ecf20Sopenharmony_ci case SENSOR_PAS106: 67258c2ecf20Sopenharmony_ci usb_exchange(gspca_dev, pas106b_Initial_com); 67268c2ecf20Sopenharmony_ci break; 67278c2ecf20Sopenharmony_ci } 67288c2ecf20Sopenharmony_ci usb_exchange(gspca_dev, init_tb[sd->sensor][mode]); 67298c2ecf20Sopenharmony_ci 67308c2ecf20Sopenharmony_ci switch (sd->sensor) { 67318c2ecf20Sopenharmony_ci case SENSOR_ADCM2700: 67328c2ecf20Sopenharmony_ci case SENSOR_GC0305: 67338c2ecf20Sopenharmony_ci case SENSOR_OV7620: 67348c2ecf20Sopenharmony_ci case SENSOR_PO2030: 67358c2ecf20Sopenharmony_ci case SENSOR_TAS5130C: 67368c2ecf20Sopenharmony_ci case SENSOR_GC0303: 67378c2ecf20Sopenharmony_ci/* msleep(100); * ?? */ 67388c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0x0002); /* --> 0x40 */ 67398c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x09, 0x01ad); /* (from win traces) */ 67408c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x15, 0x01ae); 67418c2ecf20Sopenharmony_ci if (sd->sensor == SENSOR_TAS5130C) 67428c2ecf20Sopenharmony_ci break; 67438c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x0d, 0x003a); 67448c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x02, 0x003b); 67458c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x00, 0x0038); 67468c2ecf20Sopenharmony_ci break; 67478c2ecf20Sopenharmony_ci case SENSOR_HV7131R: 67488c2ecf20Sopenharmony_ci case SENSOR_PAS202B: 67498c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x003b); 67508c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x0c, 0x003a); 67518c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x0b, 0x0039); 67528c2ecf20Sopenharmony_ci if (sd->sensor == SENSOR_HV7131R) 67538c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x50, ZC3XX_R11D_GLOBALGAIN); 67548c2ecf20Sopenharmony_ci break; 67558c2ecf20Sopenharmony_ci } 67568c2ecf20Sopenharmony_ci 67578c2ecf20Sopenharmony_ci setmatrix(gspca_dev); 67588c2ecf20Sopenharmony_ci switch (sd->sensor) { 67598c2ecf20Sopenharmony_ci case SENSOR_ADCM2700: 67608c2ecf20Sopenharmony_ci case SENSOR_OV7620: 67618c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0x0008); 67628c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x00, 0x0008); 67638c2ecf20Sopenharmony_ci break; 67648c2ecf20Sopenharmony_ci case SENSOR_PAS202B: 67658c2ecf20Sopenharmony_ci case SENSOR_GC0305: 67668c2ecf20Sopenharmony_ci case SENSOR_HV7131R: 67678c2ecf20Sopenharmony_ci case SENSOR_TAS5130C: 67688c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0x0008); 67698c2ecf20Sopenharmony_ci fallthrough; 67708c2ecf20Sopenharmony_ci case SENSOR_PO2030: 67718c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x03, 0x0008); 67728c2ecf20Sopenharmony_ci break; 67738c2ecf20Sopenharmony_ci } 67748c2ecf20Sopenharmony_ci setsharpness(gspca_dev, v4l2_ctrl_g_ctrl(sd->sharpness)); 67758c2ecf20Sopenharmony_ci 67768c2ecf20Sopenharmony_ci /* set the gamma tables when not set */ 67778c2ecf20Sopenharmony_ci switch (sd->sensor) { 67788c2ecf20Sopenharmony_ci case SENSOR_CS2102K: /* gamma set in xxx_Initial */ 67798c2ecf20Sopenharmony_ci case SENSOR_HDCS2020: 67808c2ecf20Sopenharmony_ci case SENSOR_OV7630C: 67818c2ecf20Sopenharmony_ci break; 67828c2ecf20Sopenharmony_ci default: 67838c2ecf20Sopenharmony_ci setcontrast(gspca_dev, v4l2_ctrl_g_ctrl(sd->gamma), 67848c2ecf20Sopenharmony_ci v4l2_ctrl_g_ctrl(sd->brightness), 67858c2ecf20Sopenharmony_ci v4l2_ctrl_g_ctrl(sd->contrast)); 67868c2ecf20Sopenharmony_ci break; 67878c2ecf20Sopenharmony_ci } 67888c2ecf20Sopenharmony_ci setmatrix(gspca_dev); /* one more time? */ 67898c2ecf20Sopenharmony_ci switch (sd->sensor) { 67908c2ecf20Sopenharmony_ci case SENSOR_OV7620: 67918c2ecf20Sopenharmony_ci case SENSOR_PAS202B: 67928c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0x0180); /* from win */ 67938c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x00, 0x0180); 67948c2ecf20Sopenharmony_ci break; 67958c2ecf20Sopenharmony_ci } 67968c2ecf20Sopenharmony_ci setquality(gspca_dev); 67978c2ecf20Sopenharmony_ci /* Start with BRC disabled, transfer_update will enable it if needed */ 67988c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x00, 0x0007); 67998c2ecf20Sopenharmony_ci if (sd->plfreq) 68008c2ecf20Sopenharmony_ci setlightfreq(gspca_dev, v4l2_ctrl_g_ctrl(sd->plfreq)); 68018c2ecf20Sopenharmony_ci 68028c2ecf20Sopenharmony_ci switch (sd->sensor) { 68038c2ecf20Sopenharmony_ci case SENSOR_ADCM2700: 68048c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x09, 0x01ad); /* (from win traces) */ 68058c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x15, 0x01ae); 68068c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x02, 0x0180); 68078c2ecf20Sopenharmony_ci /* ms-win + */ 68088c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x40, 0x0117); 68098c2ecf20Sopenharmony_ci break; 68108c2ecf20Sopenharmony_ci case SENSOR_HV7131R: 68118c2ecf20Sopenharmony_ci setexposure(gspca_dev, v4l2_ctrl_g_ctrl(sd->exposure)); 68128c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN); 68138c2ecf20Sopenharmony_ci break; 68148c2ecf20Sopenharmony_ci case SENSOR_GC0305: 68158c2ecf20Sopenharmony_ci case SENSOR_TAS5130C: 68168c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x09, 0x01ad); /* (from win traces) */ 68178c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x15, 0x01ae); 68188c2ecf20Sopenharmony_ci fallthrough; 68198c2ecf20Sopenharmony_ci case SENSOR_PAS202B: 68208c2ecf20Sopenharmony_ci case SENSOR_PO2030: 68218c2ecf20Sopenharmony_ci/* reg_w(gspca_dev, 0x40, ZC3XX_R117_GGAIN); in win traces */ 68228c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0x0180); 68238c2ecf20Sopenharmony_ci break; 68248c2ecf20Sopenharmony_ci case SENSOR_OV7620: 68258c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x09, 0x01ad); 68268c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x15, 0x01ae); 68278c2ecf20Sopenharmony_ci i2c_read(gspca_dev, 0x13); /*fixme: returns 0xa3 */ 68288c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x13, 0xa3, 0x00); 68298c2ecf20Sopenharmony_ci /*fixme: returned value to send? */ 68308c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x40, 0x0117); 68318c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0x0180); 68328c2ecf20Sopenharmony_ci break; 68338c2ecf20Sopenharmony_ci } 68348c2ecf20Sopenharmony_ci 68358c2ecf20Sopenharmony_ci setautogain(gspca_dev, v4l2_ctrl_g_ctrl(sd->autogain)); 68368c2ecf20Sopenharmony_ci 68378c2ecf20Sopenharmony_ci if (gspca_dev->usb_err < 0) 68388c2ecf20Sopenharmony_ci return gspca_dev->usb_err; 68398c2ecf20Sopenharmony_ci 68408c2ecf20Sopenharmony_ci /* Start the transfer parameters update thread */ 68418c2ecf20Sopenharmony_ci schedule_work(&sd->work); 68428c2ecf20Sopenharmony_ci 68438c2ecf20Sopenharmony_ci return 0; 68448c2ecf20Sopenharmony_ci} 68458c2ecf20Sopenharmony_ci 68468c2ecf20Sopenharmony_ci/* called on streamoff with alt==0 and on disconnect */ 68478c2ecf20Sopenharmony_ci/* the usb_lock is held at entry - restore on exit */ 68488c2ecf20Sopenharmony_cistatic void sd_stop0(struct gspca_dev *gspca_dev) 68498c2ecf20Sopenharmony_ci{ 68508c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 68518c2ecf20Sopenharmony_ci 68528c2ecf20Sopenharmony_ci mutex_unlock(&gspca_dev->usb_lock); 68538c2ecf20Sopenharmony_ci flush_work(&sd->work); 68548c2ecf20Sopenharmony_ci mutex_lock(&gspca_dev->usb_lock); 68558c2ecf20Sopenharmony_ci if (!gspca_dev->present) 68568c2ecf20Sopenharmony_ci return; 68578c2ecf20Sopenharmony_ci send_unknown(gspca_dev, sd->sensor); 68588c2ecf20Sopenharmony_ci} 68598c2ecf20Sopenharmony_ci 68608c2ecf20Sopenharmony_cistatic void sd_pkt_scan(struct gspca_dev *gspca_dev, 68618c2ecf20Sopenharmony_ci u8 *data, 68628c2ecf20Sopenharmony_ci int len) 68638c2ecf20Sopenharmony_ci{ 68648c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 68658c2ecf20Sopenharmony_ci 68668c2ecf20Sopenharmony_ci /* check the JPEG end of frame */ 68678c2ecf20Sopenharmony_ci if (len >= 3 68688c2ecf20Sopenharmony_ci && data[len - 3] == 0xff && data[len - 2] == 0xd9) { 68698c2ecf20Sopenharmony_ci/*fixme: what does the last byte mean?*/ 68708c2ecf20Sopenharmony_ci gspca_frame_add(gspca_dev, LAST_PACKET, 68718c2ecf20Sopenharmony_ci data, len - 1); 68728c2ecf20Sopenharmony_ci return; 68738c2ecf20Sopenharmony_ci } 68748c2ecf20Sopenharmony_ci 68758c2ecf20Sopenharmony_ci /* check the JPEG start of a frame */ 68768c2ecf20Sopenharmony_ci if (data[0] == 0xff && data[1] == 0xd8) { 68778c2ecf20Sopenharmony_ci /* put the JPEG header in the new frame */ 68788c2ecf20Sopenharmony_ci gspca_frame_add(gspca_dev, FIRST_PACKET, 68798c2ecf20Sopenharmony_ci sd->jpeg_hdr, JPEG_HDR_SZ); 68808c2ecf20Sopenharmony_ci 68818c2ecf20Sopenharmony_ci /* remove the webcam's header: 68828c2ecf20Sopenharmony_ci * ff d8 ff fe 00 0e 00 00 ss ss 00 01 ww ww hh hh pp pp 68838c2ecf20Sopenharmony_ci * - 'ss ss' is the frame sequence number (BE) 68848c2ecf20Sopenharmony_ci * - 'ww ww' and 'hh hh' are the window dimensions (BE) 68858c2ecf20Sopenharmony_ci * - 'pp pp' is the packet sequence number (BE) 68868c2ecf20Sopenharmony_ci */ 68878c2ecf20Sopenharmony_ci data += 18; 68888c2ecf20Sopenharmony_ci len -= 18; 68898c2ecf20Sopenharmony_ci } 68908c2ecf20Sopenharmony_ci gspca_frame_add(gspca_dev, INTER_PACKET, data, len); 68918c2ecf20Sopenharmony_ci} 68928c2ecf20Sopenharmony_ci 68938c2ecf20Sopenharmony_cistatic int sd_set_jcomp(struct gspca_dev *gspca_dev, 68948c2ecf20Sopenharmony_ci const struct v4l2_jpegcompression *jcomp) 68958c2ecf20Sopenharmony_ci{ 68968c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 68978c2ecf20Sopenharmony_ci 68988c2ecf20Sopenharmony_ci return v4l2_ctrl_s_ctrl(sd->jpegqual, jcomp->quality); 68998c2ecf20Sopenharmony_ci} 69008c2ecf20Sopenharmony_ci 69018c2ecf20Sopenharmony_cistatic int sd_get_jcomp(struct gspca_dev *gspca_dev, 69028c2ecf20Sopenharmony_ci struct v4l2_jpegcompression *jcomp) 69038c2ecf20Sopenharmony_ci{ 69048c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 69058c2ecf20Sopenharmony_ci 69068c2ecf20Sopenharmony_ci memset(jcomp, 0, sizeof *jcomp); 69078c2ecf20Sopenharmony_ci jcomp->quality = v4l2_ctrl_g_ctrl(sd->jpegqual); 69088c2ecf20Sopenharmony_ci jcomp->jpeg_markers = V4L2_JPEG_MARKER_DHT 69098c2ecf20Sopenharmony_ci | V4L2_JPEG_MARKER_DQT; 69108c2ecf20Sopenharmony_ci return 0; 69118c2ecf20Sopenharmony_ci} 69128c2ecf20Sopenharmony_ci 69138c2ecf20Sopenharmony_ci#if IS_ENABLED(CONFIG_INPUT) 69148c2ecf20Sopenharmony_cistatic int sd_int_pkt_scan(struct gspca_dev *gspca_dev, 69158c2ecf20Sopenharmony_ci u8 *data, /* interrupt packet data */ 69168c2ecf20Sopenharmony_ci int len) /* interrupt packet length */ 69178c2ecf20Sopenharmony_ci{ 69188c2ecf20Sopenharmony_ci if (len == 8 && data[4] == 1) { 69198c2ecf20Sopenharmony_ci input_report_key(gspca_dev->input_dev, KEY_CAMERA, 1); 69208c2ecf20Sopenharmony_ci input_sync(gspca_dev->input_dev); 69218c2ecf20Sopenharmony_ci input_report_key(gspca_dev->input_dev, KEY_CAMERA, 0); 69228c2ecf20Sopenharmony_ci input_sync(gspca_dev->input_dev); 69238c2ecf20Sopenharmony_ci } 69248c2ecf20Sopenharmony_ci 69258c2ecf20Sopenharmony_ci return 0; 69268c2ecf20Sopenharmony_ci} 69278c2ecf20Sopenharmony_ci#endif 69288c2ecf20Sopenharmony_ci 69298c2ecf20Sopenharmony_cistatic const struct sd_desc sd_desc = { 69308c2ecf20Sopenharmony_ci .name = KBUILD_MODNAME, 69318c2ecf20Sopenharmony_ci .config = sd_config, 69328c2ecf20Sopenharmony_ci .init = sd_init, 69338c2ecf20Sopenharmony_ci .init_controls = sd_init_controls, 69348c2ecf20Sopenharmony_ci .isoc_init = sd_pre_start, 69358c2ecf20Sopenharmony_ci .start = sd_start, 69368c2ecf20Sopenharmony_ci .stop0 = sd_stop0, 69378c2ecf20Sopenharmony_ci .pkt_scan = sd_pkt_scan, 69388c2ecf20Sopenharmony_ci .get_jcomp = sd_get_jcomp, 69398c2ecf20Sopenharmony_ci .set_jcomp = sd_set_jcomp, 69408c2ecf20Sopenharmony_ci#if IS_ENABLED(CONFIG_INPUT) 69418c2ecf20Sopenharmony_ci .int_pkt_scan = sd_int_pkt_scan, 69428c2ecf20Sopenharmony_ci#endif 69438c2ecf20Sopenharmony_ci}; 69448c2ecf20Sopenharmony_ci 69458c2ecf20Sopenharmony_cistatic const struct usb_device_id device_table[] = { 69468c2ecf20Sopenharmony_ci {USB_DEVICE(0x03f0, 0x1b07)}, 69478c2ecf20Sopenharmony_ci {USB_DEVICE(0x041e, 0x041e)}, 69488c2ecf20Sopenharmony_ci {USB_DEVICE(0x041e, 0x4017)}, 69498c2ecf20Sopenharmony_ci {USB_DEVICE(0x041e, 0x401c), .driver_info = SENSOR_PAS106}, 69508c2ecf20Sopenharmony_ci {USB_DEVICE(0x041e, 0x401e)}, 69518c2ecf20Sopenharmony_ci {USB_DEVICE(0x041e, 0x401f)}, 69528c2ecf20Sopenharmony_ci {USB_DEVICE(0x041e, 0x4022)}, 69538c2ecf20Sopenharmony_ci {USB_DEVICE(0x041e, 0x4029)}, 69548c2ecf20Sopenharmony_ci {USB_DEVICE(0x041e, 0x4034), .driver_info = SENSOR_PAS106}, 69558c2ecf20Sopenharmony_ci {USB_DEVICE(0x041e, 0x4035), .driver_info = SENSOR_PAS106}, 69568c2ecf20Sopenharmony_ci {USB_DEVICE(0x041e, 0x4036)}, 69578c2ecf20Sopenharmony_ci {USB_DEVICE(0x041e, 0x403a)}, 69588c2ecf20Sopenharmony_ci {USB_DEVICE(0x041e, 0x4051), .driver_info = SENSOR_GC0303}, 69598c2ecf20Sopenharmony_ci {USB_DEVICE(0x041e, 0x4053), .driver_info = SENSOR_GC0303}, 69608c2ecf20Sopenharmony_ci {USB_DEVICE(0x0458, 0x7007)}, 69618c2ecf20Sopenharmony_ci {USB_DEVICE(0x0458, 0x700c)}, 69628c2ecf20Sopenharmony_ci {USB_DEVICE(0x0458, 0x700f)}, 69638c2ecf20Sopenharmony_ci {USB_DEVICE(0x0461, 0x0a00)}, 69648c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x089d), .driver_info = SENSOR_MC501CB}, 69658c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x08a0)}, 69668c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x08a1)}, 69678c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x08a2)}, 69688c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x08a3)}, 69698c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x08a6)}, 69708c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x08a7)}, 69718c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x08a9)}, 69728c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x08aa)}, 69738c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x08ac)}, 69748c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x08ad)}, 69758c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x08ae)}, 69768c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x08af)}, 69778c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x08b9)}, 69788c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x08d7)}, 69798c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x08d8)}, 69808c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x08d9)}, 69818c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x08da)}, 69828c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x08dd), .driver_info = SENSOR_MC501CB}, 69838c2ecf20Sopenharmony_ci {USB_DEVICE(0x0471, 0x0325), .driver_info = SENSOR_PAS106}, 69848c2ecf20Sopenharmony_ci {USB_DEVICE(0x0471, 0x0326), .driver_info = SENSOR_PAS106}, 69858c2ecf20Sopenharmony_ci {USB_DEVICE(0x0471, 0x032d), .driver_info = SENSOR_PAS106}, 69868c2ecf20Sopenharmony_ci {USB_DEVICE(0x0471, 0x032e), .driver_info = SENSOR_PAS106}, 69878c2ecf20Sopenharmony_ci {USB_DEVICE(0x055f, 0xc005)}, 69888c2ecf20Sopenharmony_ci {USB_DEVICE(0x055f, 0xd003)}, 69898c2ecf20Sopenharmony_ci {USB_DEVICE(0x055f, 0xd004)}, 69908c2ecf20Sopenharmony_ci {USB_DEVICE(0x0698, 0x2003)}, 69918c2ecf20Sopenharmony_ci {USB_DEVICE(0x0ac8, 0x0301), .driver_info = SENSOR_PAS106}, 69928c2ecf20Sopenharmony_ci {USB_DEVICE(0x0ac8, 0x0302), .driver_info = SENSOR_PAS106}, 69938c2ecf20Sopenharmony_ci {USB_DEVICE(0x0ac8, 0x301b)}, 69948c2ecf20Sopenharmony_ci {USB_DEVICE(0x0ac8, 0x303b)}, 69958c2ecf20Sopenharmony_ci {USB_DEVICE(0x0ac8, 0x305b)}, 69968c2ecf20Sopenharmony_ci {USB_DEVICE(0x0ac8, 0x307b)}, 69978c2ecf20Sopenharmony_ci {USB_DEVICE(0x10fd, 0x0128)}, 69988c2ecf20Sopenharmony_ci {USB_DEVICE(0x10fd, 0x804d)}, 69998c2ecf20Sopenharmony_ci {USB_DEVICE(0x10fd, 0x8050)}, 70008c2ecf20Sopenharmony_ci {} /* end of entry */ 70018c2ecf20Sopenharmony_ci}; 70028c2ecf20Sopenharmony_ciMODULE_DEVICE_TABLE(usb, device_table); 70038c2ecf20Sopenharmony_ci 70048c2ecf20Sopenharmony_ci/* -- device connect -- */ 70058c2ecf20Sopenharmony_cistatic int sd_probe(struct usb_interface *intf, 70068c2ecf20Sopenharmony_ci const struct usb_device_id *id) 70078c2ecf20Sopenharmony_ci{ 70088c2ecf20Sopenharmony_ci return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd), 70098c2ecf20Sopenharmony_ci THIS_MODULE); 70108c2ecf20Sopenharmony_ci} 70118c2ecf20Sopenharmony_ci 70128c2ecf20Sopenharmony_ci/* USB driver */ 70138c2ecf20Sopenharmony_cistatic struct usb_driver sd_driver = { 70148c2ecf20Sopenharmony_ci .name = KBUILD_MODNAME, 70158c2ecf20Sopenharmony_ci .id_table = device_table, 70168c2ecf20Sopenharmony_ci .probe = sd_probe, 70178c2ecf20Sopenharmony_ci .disconnect = gspca_disconnect, 70188c2ecf20Sopenharmony_ci#ifdef CONFIG_PM 70198c2ecf20Sopenharmony_ci .suspend = gspca_suspend, 70208c2ecf20Sopenharmony_ci .resume = gspca_resume, 70218c2ecf20Sopenharmony_ci .reset_resume = gspca_resume, 70228c2ecf20Sopenharmony_ci#endif 70238c2ecf20Sopenharmony_ci}; 70248c2ecf20Sopenharmony_ci 70258c2ecf20Sopenharmony_cimodule_usb_driver(sd_driver); 70268c2ecf20Sopenharmony_ci 70278c2ecf20Sopenharmony_cimodule_param(force_sensor, int, 0644); 70288c2ecf20Sopenharmony_ciMODULE_PARM_DESC(force_sensor, 70298c2ecf20Sopenharmony_ci "Force sensor. Only for experts!!!"); 7030