162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Z-Star/Vimicro zc301/zc302p/vc30x driver
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2009-2012 Jean-Francois Moine <http://moinejf.free.fr>
662306a36Sopenharmony_ci * Copyright (C) 2004 2005 2006 Michel Xhaard mxhaard@magic.fr
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/input.h>
1262306a36Sopenharmony_ci#include "gspca.h"
1362306a36Sopenharmony_ci#include "jpeg.h"
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ciMODULE_AUTHOR("Jean-Francois Moine <http://moinejf.free.fr>, Serge A. Suchkov <Serge.A.S@tochka.ru>");
1662306a36Sopenharmony_ciMODULE_DESCRIPTION("GSPCA ZC03xx/VC3xx USB Camera Driver");
1762306a36Sopenharmony_ciMODULE_LICENSE("GPL");
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_cistatic int force_sensor = -1;
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci#define REG08_DEF 3		/* default JPEG compression (75%) */
2262306a36Sopenharmony_ci#include "zc3xx-reg.h"
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci/* specific webcam descriptor */
2562306a36Sopenharmony_cistruct sd {
2662306a36Sopenharmony_ci	struct gspca_dev gspca_dev;	/* !! must be the first item */
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci	struct { /* gamma/brightness/contrast control cluster */
2962306a36Sopenharmony_ci		struct v4l2_ctrl *gamma;
3062306a36Sopenharmony_ci		struct v4l2_ctrl *brightness;
3162306a36Sopenharmony_ci		struct v4l2_ctrl *contrast;
3262306a36Sopenharmony_ci	};
3362306a36Sopenharmony_ci	struct { /* autogain/exposure control cluster */
3462306a36Sopenharmony_ci		struct v4l2_ctrl *autogain;
3562306a36Sopenharmony_ci		struct v4l2_ctrl *exposure;
3662306a36Sopenharmony_ci	};
3762306a36Sopenharmony_ci	struct v4l2_ctrl *plfreq;
3862306a36Sopenharmony_ci	struct v4l2_ctrl *sharpness;
3962306a36Sopenharmony_ci	struct v4l2_ctrl *jpegqual;
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci	struct work_struct work;
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci	u8 reg08;		/* webcam compression quality */
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci	u8 bridge;
4662306a36Sopenharmony_ci	u8 sensor;		/* Type of image sensor chip */
4762306a36Sopenharmony_ci	u16 chip_revision;
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci	u8 jpeg_hdr[JPEG_HDR_SZ];
5062306a36Sopenharmony_ci};
5162306a36Sopenharmony_cienum bridges {
5262306a36Sopenharmony_ci	BRIDGE_ZC301,
5362306a36Sopenharmony_ci	BRIDGE_ZC303,
5462306a36Sopenharmony_ci};
5562306a36Sopenharmony_cienum sensors {
5662306a36Sopenharmony_ci	SENSOR_ADCM2700,
5762306a36Sopenharmony_ci	SENSOR_CS2102,
5862306a36Sopenharmony_ci	SENSOR_CS2102K,
5962306a36Sopenharmony_ci	SENSOR_GC0303,
6062306a36Sopenharmony_ci	SENSOR_GC0305,
6162306a36Sopenharmony_ci	SENSOR_HDCS2020,
6262306a36Sopenharmony_ci	SENSOR_HV7131B,
6362306a36Sopenharmony_ci	SENSOR_HV7131R,
6462306a36Sopenharmony_ci	SENSOR_ICM105A,
6562306a36Sopenharmony_ci	SENSOR_MC501CB,
6662306a36Sopenharmony_ci	SENSOR_MT9V111_1,	/* (mi360soc) zc301 */
6762306a36Sopenharmony_ci	SENSOR_MT9V111_3,	/* (mi360soc) zc303 */
6862306a36Sopenharmony_ci	SENSOR_OV7620,		/* OV7648 - same values */
6962306a36Sopenharmony_ci	SENSOR_OV7630C,
7062306a36Sopenharmony_ci	SENSOR_PAS106,
7162306a36Sopenharmony_ci	SENSOR_PAS202B,
7262306a36Sopenharmony_ci	SENSOR_PB0330,
7362306a36Sopenharmony_ci	SENSOR_PO2030,
7462306a36Sopenharmony_ci	SENSOR_TAS5130C,
7562306a36Sopenharmony_ci	SENSOR_MAX
7662306a36Sopenharmony_ci};
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_cistatic const struct v4l2_pix_format vga_mode[] = {
7962306a36Sopenharmony_ci	{320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
8062306a36Sopenharmony_ci		.bytesperline = 320,
8162306a36Sopenharmony_ci		.sizeimage = 320 * 240 * 3 / 8 + 590,
8262306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_JPEG,
8362306a36Sopenharmony_ci		.priv = 1},
8462306a36Sopenharmony_ci	{640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
8562306a36Sopenharmony_ci		.bytesperline = 640,
8662306a36Sopenharmony_ci		.sizeimage = 640 * 480 * 3 / 8 + 590,
8762306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_JPEG,
8862306a36Sopenharmony_ci		.priv = 0},
8962306a36Sopenharmony_ci};
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_cistatic const struct v4l2_pix_format broken_vga_mode[] = {
9262306a36Sopenharmony_ci	{320, 232, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
9362306a36Sopenharmony_ci		.bytesperline = 320,
9462306a36Sopenharmony_ci		.sizeimage = 320 * 232 * 4 / 8 + 590,
9562306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_JPEG,
9662306a36Sopenharmony_ci		.priv = 1},
9762306a36Sopenharmony_ci	{640, 472, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
9862306a36Sopenharmony_ci		.bytesperline = 640,
9962306a36Sopenharmony_ci		.sizeimage = 640 * 472 * 3 / 8 + 590,
10062306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_JPEG,
10162306a36Sopenharmony_ci		.priv = 0},
10262306a36Sopenharmony_ci};
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_cistatic const struct v4l2_pix_format sif_mode[] = {
10562306a36Sopenharmony_ci	{176, 144, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
10662306a36Sopenharmony_ci		.bytesperline = 176,
10762306a36Sopenharmony_ci		.sizeimage = 176 * 144 * 3 / 8 + 590,
10862306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_JPEG,
10962306a36Sopenharmony_ci		.priv = 1},
11062306a36Sopenharmony_ci	{352, 288, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
11162306a36Sopenharmony_ci		.bytesperline = 352,
11262306a36Sopenharmony_ci		.sizeimage = 352 * 288 * 3 / 8 + 590,
11362306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_JPEG,
11462306a36Sopenharmony_ci		.priv = 0},
11562306a36Sopenharmony_ci};
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci/*
11862306a36Sopenharmony_ci * Bridge reg08 bits 1-2 -> JPEG quality conversion table. Note the highest
11962306a36Sopenharmony_ci * quality setting is not usable as USB 1 does not have enough bandwidth.
12062306a36Sopenharmony_ci */
12162306a36Sopenharmony_cistatic u8 jpeg_qual[] = {50, 75, 87, /* 94 */};
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_ci/* usb exchanges */
12462306a36Sopenharmony_cistruct usb_action {
12562306a36Sopenharmony_ci	u8	req;
12662306a36Sopenharmony_ci	u8	val;
12762306a36Sopenharmony_ci	u16	idx;
12862306a36Sopenharmony_ci};
12962306a36Sopenharmony_ci
13062306a36Sopenharmony_cistatic const struct usb_action adcm2700_Initial[] = {
13162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},		/* 00,00,01,cc */
13262306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R002_CLOCKSELECT},		/* 00,02,04,cc */
13362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R008_CLOCKSETTING},		/* 00,08,03,cc */
13462306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,0a,cc */
13562306a36Sopenharmony_ci	{0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR},		/* 00,8b,d3,cc */
13662306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},	/* 00,03,02,cc */
13762306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},		/* 00,04,80,cc */
13862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},	/* 00,05,01,cc */
13962306a36Sopenharmony_ci	{0xa0, 0xd8, ZC3XX_R006_FRAMEHEIGHTLOW},	/* 00,06,d8,cc */
14062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},	/* 00,01,01,cc */
14162306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,03,cc */
14262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,01,cc */
14362306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,05,cc */
14462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},		/* 00,98,00,cc */
14562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},		/* 00,9a,00,cc */
14662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},		/* 01,1a,00,cc */
14762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},		/* 01,1c,00,cc */
14862306a36Sopenharmony_ci	{0xa0, 0xde, ZC3XX_R09C_WINHEIGHTLOW},		/* 00,9c,de,cc */
14962306a36Sopenharmony_ci	{0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW},		/* 00,9e,86,cc */
15062306a36Sopenharmony_ci	{0xbb, 0x00, 0x0400},				/* 04,00,00,bb */
15162306a36Sopenharmony_ci	{0xdd, 0x00, 0x0010},				/* 00,00,10,dd */
15262306a36Sopenharmony_ci	{0xbb, 0x0f, 0x140f},				/* 14,0f,0f,bb */
15362306a36Sopenharmony_ci	{0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},	/* 01,01,37,cc */
15462306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},		/* 01,00,0d,cc */
15562306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},		/* 01,89,06,cc */
15662306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},		/* 01,c5,03,cc */
15762306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},		/* 01,cb,13,cc */
15862306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},	/* 02,50,08,cc */
15962306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},		/* 03,01,08,cc */
16062306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R116_RGAIN},			/* 01,16,58,cc */
16162306a36Sopenharmony_ci	{0xa0, 0x5a, ZC3XX_R118_BGAIN},			/* 01,18,5a,cc */
16262306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE},	/* 01,80,02,cc */
16362306a36Sopenharmony_ci	{0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR},		/* 00,8b,d3,cc */
16462306a36Sopenharmony_ci	{0xbb, 0x00, 0x0408},				/* 04,00,08,bb */
16562306a36Sopenharmony_ci	{0xdd, 0x00, 0x0200},				/* 00,02,00,dd */
16662306a36Sopenharmony_ci	{0xbb, 0x00, 0x0400},				/* 04,00,00,bb */
16762306a36Sopenharmony_ci	{0xdd, 0x00, 0x0010},				/* 00,00,10,dd */
16862306a36Sopenharmony_ci	{0xbb, 0x0f, 0x140f},				/* 14,0f,0f,bb */
16962306a36Sopenharmony_ci	{0xbb, 0xe0, 0x0c2e},				/* 0c,e0,2e,bb */
17062306a36Sopenharmony_ci	{0xbb, 0x01, 0x2000},				/* 20,01,00,bb */
17162306a36Sopenharmony_ci	{0xbb, 0x96, 0x2400},				/* 24,96,00,bb */
17262306a36Sopenharmony_ci	{0xbb, 0x06, 0x1006},				/* 10,06,06,bb */
17362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
17462306a36Sopenharmony_ci	{0xdd, 0x00, 0x0010},				/* 00,00,10,dd */
17562306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0002},				/* 00,fe,02,aa */
17662306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,0a,cc */
17762306a36Sopenharmony_ci	{0xdd, 0x00, 0x0010},				/* 00,00,10,dd */
17862306a36Sopenharmony_ci	{0xbb, 0x5f, 0x2090},				/* 20,5f,90,bb */
17962306a36Sopenharmony_ci	{0xbb, 0x01, 0x8000},				/* 80,01,00,bb */
18062306a36Sopenharmony_ci	{0xbb, 0x09, 0x8400},				/* 84,09,00,bb */
18162306a36Sopenharmony_ci	{0xbb, 0x86, 0x0002},				/* 00,86,02,bb */
18262306a36Sopenharmony_ci	{0xbb, 0xe6, 0x0401},				/* 04,e6,01,bb */
18362306a36Sopenharmony_ci	{0xbb, 0x86, 0x0802},				/* 08,86,02,bb */
18462306a36Sopenharmony_ci	{0xbb, 0xe6, 0x0c01},				/* 0c,e6,01,bb */
18562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
18662306a36Sopenharmony_ci	{0xdd, 0x00, 0x0010},				/* 00,00,10,dd */
18762306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0000},				/* 00,fe,00,aa */
18862306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,0a,cc */
18962306a36Sopenharmony_ci	{0xdd, 0x00, 0x0010},				/* 00,00,10,dd */
19062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
19162306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0020},				/* 00,fe,20,aa */
19262306a36Sopenharmony_ci/*mswin+*/
19362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},
19462306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0002},
19562306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
19662306a36Sopenharmony_ci	{0xaa, 0xb4, 0xcd37},
19762306a36Sopenharmony_ci	{0xaa, 0xa4, 0x0004},
19862306a36Sopenharmony_ci	{0xaa, 0xa8, 0x0007},
19962306a36Sopenharmony_ci	{0xaa, 0xac, 0x0004},
20062306a36Sopenharmony_ci/*mswin-*/
20162306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,0a,cc */
20262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
20362306a36Sopenharmony_ci	{0xdd, 0x00, 0x0010},				/* 00,00,10,dd */
20462306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0000},				/* 00,fe,00,aa */
20562306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,0a,cc */
20662306a36Sopenharmony_ci	{0xdd, 0x00, 0x0010},				/* 00,00,10,dd */
20762306a36Sopenharmony_ci	{0xbb, 0x04, 0x0400},				/* 04,04,00,bb */
20862306a36Sopenharmony_ci	{0xdd, 0x00, 0x0100},				/* 00,01,00,dd */
20962306a36Sopenharmony_ci	{0xbb, 0x01, 0x0400},				/* 04,01,00,bb */
21062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
21162306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0002},				/* 00,fe,02,aa */
21262306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,0a,cc */
21362306a36Sopenharmony_ci	{0xbb, 0x41, 0x2803},				/* 28,41,03,bb */
21462306a36Sopenharmony_ci	{0xbb, 0x40, 0x2c03},				/* 2c,40,03,bb */
21562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
21662306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0010},				/* 00,fe,10,aa */
21762306a36Sopenharmony_ci	{}
21862306a36Sopenharmony_ci};
21962306a36Sopenharmony_cistatic const struct usb_action adcm2700_InitialScale[] = {
22062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},		/* 00,00,01,cc */
22162306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},		/* 00,02,10,cc */
22262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R008_CLOCKSETTING},		/* 00,08,03,cc */
22362306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,0a,cc */
22462306a36Sopenharmony_ci	{0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR},		/* 00,8b,d3,cc */
22562306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},	/* 00,03,02,cc */
22662306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},		/* 00,04,80,cc */
22762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},	/* 00,05,01,cc */
22862306a36Sopenharmony_ci	{0xa0, 0xd0, ZC3XX_R006_FRAMEHEIGHTLOW},	/* 00,06,d0,cc */
22962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},	/* 00,01,01,cc */
23062306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,03,cc */
23162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,01,cc */
23262306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,05,cc */
23362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},		/* 00,98,00,cc */
23462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},		/* 00,9a,00,cc */
23562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},		/* 01,1a,00,cc */
23662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},		/* 01,1c,00,cc */
23762306a36Sopenharmony_ci	{0xa0, 0xd8, ZC3XX_R09C_WINHEIGHTLOW},		/* 00,9c,d8,cc */
23862306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},		/* 00,9e,88,cc */
23962306a36Sopenharmony_ci	{0xbb, 0x00, 0x0400},				/* 04,00,00,bb */
24062306a36Sopenharmony_ci	{0xdd, 0x00, 0x0010},				/* 00,00,10,dd */
24162306a36Sopenharmony_ci	{0xbb, 0x0f, 0x140f},				/* 14,0f,0f,bb */
24262306a36Sopenharmony_ci	{0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},	/* 01,01,37,cc */
24362306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},		/* 01,00,0d,cc */
24462306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},		/* 01,89,06,cc */
24562306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},		/* 01,c5,03,cc */
24662306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},		/* 01,cb,13,cc */
24762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},	/* 02,50,08,cc */
24862306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},		/* 03,01,08,cc */
24962306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R116_RGAIN},			/* 01,16,58,cc */
25062306a36Sopenharmony_ci	{0xa0, 0x5a, ZC3XX_R118_BGAIN},			/* 01,18,5a,cc */
25162306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE},	/* 01,80,02,cc */
25262306a36Sopenharmony_ci	{0xa0, 0xd3, ZC3XX_R08B_I2CDEVICEADDR},		/* 00,8b,d3,cc */
25362306a36Sopenharmony_ci	{0xbb, 0x00, 0x0408},				/* 04,00,08,bb */
25462306a36Sopenharmony_ci	{0xdd, 0x00, 0x0200},				/* 00,02,00,dd */
25562306a36Sopenharmony_ci	{0xbb, 0x00, 0x0400},				/* 04,00,00,bb */
25662306a36Sopenharmony_ci	{0xdd, 0x00, 0x0050},				/* 00,00,50,dd */
25762306a36Sopenharmony_ci	{0xbb, 0x0f, 0x140f},				/* 14,0f,0f,bb */
25862306a36Sopenharmony_ci	{0xbb, 0xe0, 0x0c2e},				/* 0c,e0,2e,bb */
25962306a36Sopenharmony_ci	{0xbb, 0x01, 0x2000},				/* 20,01,00,bb */
26062306a36Sopenharmony_ci	{0xbb, 0x96, 0x2400},				/* 24,96,00,bb */
26162306a36Sopenharmony_ci	{0xbb, 0x06, 0x1006},				/* 10,06,06,bb */
26262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
26362306a36Sopenharmony_ci	{0xdd, 0x00, 0x0010},				/* 00,00,10,dd */
26462306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0002},				/* 00,fe,02,aa */
26562306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,0a,cc */
26662306a36Sopenharmony_ci	{0xdd, 0x00, 0x0010},				/* 00,00,10,dd */
26762306a36Sopenharmony_ci	{0xbb, 0x5f, 0x2090},				/* 20,5f,90,bb */
26862306a36Sopenharmony_ci	{0xbb, 0x01, 0x8000},				/* 80,01,00,bb */
26962306a36Sopenharmony_ci	{0xbb, 0x09, 0x8400},				/* 84,09,00,bb */
27062306a36Sopenharmony_ci	{0xbb, 0x86, 0x0002},				/* 00,88,02,bb */
27162306a36Sopenharmony_ci	{0xbb, 0xe6, 0x0401},				/* 04,e6,01,bb */
27262306a36Sopenharmony_ci	{0xbb, 0x86, 0x0802},				/* 08,88,02,bb */
27362306a36Sopenharmony_ci	{0xbb, 0xe6, 0x0c01},				/* 0c,e6,01,bb */
27462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
27562306a36Sopenharmony_ci	{0xdd, 0x00, 0x0010},				/* 00,00,10,dd */
27662306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0000},				/* 00,fe,00,aa */
27762306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,0a,cc */
27862306a36Sopenharmony_ci	{0xdd, 0x00, 0x0010},				/* 00,00,10,dd */
27962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
28062306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0020},				/* 00,fe,20,aa */
28162306a36Sopenharmony_ci	/*******/
28262306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,0a,cc */
28362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
28462306a36Sopenharmony_ci	{0xdd, 0x00, 0x0010},				/* 00,00,10,dd */
28562306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0000},				/* 00,fe,00,aa */
28662306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,0a,cc */
28762306a36Sopenharmony_ci	{0xdd, 0x00, 0x0010},				/* 00,00,10,dd */
28862306a36Sopenharmony_ci	{0xbb, 0x04, 0x0400},				/* 04,04,00,bb */
28962306a36Sopenharmony_ci	{0xdd, 0x00, 0x0100},				/* 00,01,00,dd */
29062306a36Sopenharmony_ci	{0xbb, 0x01, 0x0400},				/* 04,01,00,bb */
29162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
29262306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0002},				/* 00,fe,02,aa */
29362306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,0a,cc */
29462306a36Sopenharmony_ci	{0xbb, 0x41, 0x2803},				/* 28,41,03,bb */
29562306a36Sopenharmony_ci	{0xbb, 0x40, 0x2c03},				/* 2c,40,03,bb */
29662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
29762306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0010},				/* 00,fe,10,aa */
29862306a36Sopenharmony_ci	{}
29962306a36Sopenharmony_ci};
30062306a36Sopenharmony_cistatic const struct usb_action adcm2700_50HZ[] = {
30162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
30262306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0002},				/* 00,fe,02,aa */
30362306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,0a,cc */
30462306a36Sopenharmony_ci	{0xbb, 0x05, 0x8400},				/* 84,05,00,bb */
30562306a36Sopenharmony_ci	{0xbb, 0xd0, 0xb007},				/* b0,d0,07,bb */
30662306a36Sopenharmony_ci	{0xbb, 0xa0, 0xb80f},				/* b8,a0,0f,bb */
30762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
30862306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0010},				/* 00,fe,10,aa */
30962306a36Sopenharmony_ci	{0xaa, 0x26, 0x00d0},				/* 00,26,d0,aa */
31062306a36Sopenharmony_ci	{0xaa, 0x28, 0x0002},				/* 00,28,02,aa */
31162306a36Sopenharmony_ci	{}
31262306a36Sopenharmony_ci};
31362306a36Sopenharmony_cistatic const struct usb_action adcm2700_60HZ[] = {
31462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
31562306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0002},				/* 00,fe,02,aa */
31662306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,0a,cc */
31762306a36Sopenharmony_ci	{0xbb, 0x07, 0x8400},				/* 84,07,00,bb */
31862306a36Sopenharmony_ci	{0xbb, 0x82, 0xb006},				/* b0,82,06,bb */
31962306a36Sopenharmony_ci	{0xbb, 0x04, 0xb80d},				/* b8,04,0d,bb */
32062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
32162306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0010},				/* 00,fe,10,aa */
32262306a36Sopenharmony_ci	{0xaa, 0x26, 0x0057},				/* 00,26,57,aa */
32362306a36Sopenharmony_ci	{0xaa, 0x28, 0x0002},				/* 00,28,02,aa */
32462306a36Sopenharmony_ci	{}
32562306a36Sopenharmony_ci};
32662306a36Sopenharmony_cistatic const struct usb_action adcm2700_NoFlicker[] = {
32762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
32862306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0002},				/* 00,fe,02,aa */
32962306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,0a,cc */
33062306a36Sopenharmony_ci	{0xbb, 0x07, 0x8400},				/* 84,07,00,bb */
33162306a36Sopenharmony_ci	{0xbb, 0x05, 0xb000},				/* b0,05,00,bb */
33262306a36Sopenharmony_ci	{0xbb, 0xa0, 0xb801},				/* b8,a0,01,bb */
33362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
33462306a36Sopenharmony_ci	{0xaa, 0xfe, 0x0010},				/* 00,fe,10,aa */
33562306a36Sopenharmony_ci	{}
33662306a36Sopenharmony_ci};
33762306a36Sopenharmony_cistatic const struct usb_action cs2102_InitialScale[] = {	/* 320x240 */
33862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
33962306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
34062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT},
34162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
34262306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R080_HBLANKHIGH},
34362306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R081_HBLANKLOW},
34462306a36Sopenharmony_ci	{0xa0, 0x30, ZC3XX_R083_RGAINADDR},
34562306a36Sopenharmony_ci	{0xa0, 0x31, ZC3XX_R084_GGAINADDR},
34662306a36Sopenharmony_ci	{0xa0, 0x32, ZC3XX_R085_BGAINADDR},
34762306a36Sopenharmony_ci	{0xa0, 0x23, ZC3XX_R086_EXPTIMEHIGH},
34862306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R087_EXPTIMEMID},
34962306a36Sopenharmony_ci	{0xa0, 0x25, ZC3XX_R088_EXPTIMELOW},
35062306a36Sopenharmony_ci	{0xa0, 0xb3, ZC3XX_R08B_I2CDEVICEADDR},
35162306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},	/* 00 */
35262306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
35362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
35462306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
35562306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
35662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
35762306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
35862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
35962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
36062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
36162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
36262306a36Sopenharmony_ci	{0xaa, 0x02, 0x0008},
36362306a36Sopenharmony_ci	{0xaa, 0x03, 0x0000},
36462306a36Sopenharmony_ci	{0xaa, 0x11, 0x0000},
36562306a36Sopenharmony_ci	{0xaa, 0x12, 0x0089},
36662306a36Sopenharmony_ci	{0xaa, 0x13, 0x0000},
36762306a36Sopenharmony_ci	{0xaa, 0x14, 0x00e9},
36862306a36Sopenharmony_ci	{0xaa, 0x20, 0x0000},
36962306a36Sopenharmony_ci	{0xaa, 0x22, 0x0000},
37062306a36Sopenharmony_ci	{0xaa, 0x0b, 0x0004},
37162306a36Sopenharmony_ci	{0xaa, 0x30, 0x0030},
37262306a36Sopenharmony_ci	{0xaa, 0x31, 0x0030},
37362306a36Sopenharmony_ci	{0xaa, 0x32, 0x0030},
37462306a36Sopenharmony_ci	{0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
37562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
37662306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
37762306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
37862306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
37962306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
38062306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
38162306a36Sopenharmony_ci	{0xa0, 0x10, 0x01ae},
38262306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
38362306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
38462306a36Sopenharmony_ci	{0xa0, 0x68, ZC3XX_R18D_YTARGET},
38562306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},
38662306a36Sopenharmony_ci	{}
38762306a36Sopenharmony_ci};
38862306a36Sopenharmony_ci
38962306a36Sopenharmony_cistatic const struct usb_action cs2102_Initial[] = {	/* 640x480 */
39062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
39162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
39262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT},
39362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
39462306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R080_HBLANKHIGH},
39562306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R081_HBLANKLOW},
39662306a36Sopenharmony_ci	{0xa0, 0x30, ZC3XX_R083_RGAINADDR},
39762306a36Sopenharmony_ci	{0xa0, 0x31, ZC3XX_R084_GGAINADDR},
39862306a36Sopenharmony_ci	{0xa0, 0x32, ZC3XX_R085_BGAINADDR},
39962306a36Sopenharmony_ci	{0xa0, 0x23, ZC3XX_R086_EXPTIMEHIGH},
40062306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R087_EXPTIMEMID},
40162306a36Sopenharmony_ci	{0xa0, 0x25, ZC3XX_R088_EXPTIMELOW},
40262306a36Sopenharmony_ci	{0xa0, 0xb3, ZC3XX_R08B_I2CDEVICEADDR},
40362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},	/* 00 */
40462306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
40562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
40662306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
40762306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
40862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
40962306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
41062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
41162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
41262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
41362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
41462306a36Sopenharmony_ci	{0xaa, 0x02, 0x0008},
41562306a36Sopenharmony_ci	{0xaa, 0x03, 0x0000},
41662306a36Sopenharmony_ci	{0xaa, 0x11, 0x0001},
41762306a36Sopenharmony_ci	{0xaa, 0x12, 0x0087},
41862306a36Sopenharmony_ci	{0xaa, 0x13, 0x0001},
41962306a36Sopenharmony_ci	{0xaa, 0x14, 0x00e7},
42062306a36Sopenharmony_ci	{0xaa, 0x20, 0x0000},
42162306a36Sopenharmony_ci	{0xaa, 0x22, 0x0000},
42262306a36Sopenharmony_ci	{0xaa, 0x0b, 0x0004},
42362306a36Sopenharmony_ci	{0xaa, 0x30, 0x0030},
42462306a36Sopenharmony_ci	{0xaa, 0x31, 0x0030},
42562306a36Sopenharmony_ci	{0xaa, 0x32, 0x0030},
42662306a36Sopenharmony_ci	{0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION},
42762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
42862306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
42962306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
43062306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
43162306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
43262306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
43362306a36Sopenharmony_ci	{0xa0, 0x15, 0x01ae},
43462306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
43562306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
43662306a36Sopenharmony_ci	{0xa0, 0x68, ZC3XX_R18D_YTARGET},
43762306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},
43862306a36Sopenharmony_ci	{}
43962306a36Sopenharmony_ci};
44062306a36Sopenharmony_cistatic const struct usb_action cs2102_50HZScale[] = {
44162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
44262306a36Sopenharmony_ci	{0xaa, 0x23, 0x0001},
44362306a36Sopenharmony_ci	{0xaa, 0x24, 0x005f},
44462306a36Sopenharmony_ci	{0xaa, 0x25, 0x0090},
44562306a36Sopenharmony_ci	{0xaa, 0x21, 0x00dd},
44662306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH},
44762306a36Sopenharmony_ci	{0xa0, 0xbf, ZC3XX_R191_EXPOSURELIMITMID},
44862306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW},
44962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
45062306a36Sopenharmony_ci	{0xa0, 0x3a, ZC3XX_R196_ANTIFLICKERMID},
45162306a36Sopenharmony_ci	{0xa0, 0x98, ZC3XX_R197_ANTIFLICKERLOW},
45262306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
45362306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
45462306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
45562306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
45662306a36Sopenharmony_ci	{0xa0, 0xdd, ZC3XX_R01D_HSYNC_0},
45762306a36Sopenharmony_ci	{0xa0, 0xe4, ZC3XX_R01E_HSYNC_1},
45862306a36Sopenharmony_ci	{0xa0, 0xf0, ZC3XX_R01F_HSYNC_2},
45962306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},
46062306a36Sopenharmony_ci	{}
46162306a36Sopenharmony_ci};
46262306a36Sopenharmony_cistatic const struct usb_action cs2102_50HZ[] = {
46362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
46462306a36Sopenharmony_ci	{0xaa, 0x23, 0x0000},
46562306a36Sopenharmony_ci	{0xaa, 0x24, 0x00af},
46662306a36Sopenharmony_ci	{0xaa, 0x25, 0x00c8},
46762306a36Sopenharmony_ci	{0xaa, 0x21, 0x0068},
46862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R190_EXPOSURELIMITHIGH},
46962306a36Sopenharmony_ci	{0xa0, 0x5f, ZC3XX_R191_EXPOSURELIMITMID},
47062306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R192_EXPOSURELIMITLOW},
47162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
47262306a36Sopenharmony_ci	{0xa0, 0x1d, ZC3XX_R196_ANTIFLICKERMID},
47362306a36Sopenharmony_ci	{0xa0, 0x4c, ZC3XX_R197_ANTIFLICKERLOW},
47462306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
47562306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
47662306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
47762306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
47862306a36Sopenharmony_ci	{0xa0, 0x68, ZC3XX_R01D_HSYNC_0},
47962306a36Sopenharmony_ci	{0xa0, 0xe3, ZC3XX_R01E_HSYNC_1},
48062306a36Sopenharmony_ci	{0xa0, 0xf0, ZC3XX_R01F_HSYNC_2},
48162306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},
48262306a36Sopenharmony_ci	{}
48362306a36Sopenharmony_ci};
48462306a36Sopenharmony_cistatic const struct usb_action cs2102_60HZScale[] = {
48562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
48662306a36Sopenharmony_ci	{0xaa, 0x23, 0x0001},
48762306a36Sopenharmony_ci	{0xaa, 0x24, 0x0055},
48862306a36Sopenharmony_ci	{0xaa, 0x25, 0x00cc},
48962306a36Sopenharmony_ci	{0xaa, 0x21, 0x003f},
49062306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH},
49162306a36Sopenharmony_ci	{0xa0, 0xab, ZC3XX_R191_EXPOSURELIMITMID},
49262306a36Sopenharmony_ci	{0xa0, 0x98, ZC3XX_R192_EXPOSURELIMITLOW},
49362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
49462306a36Sopenharmony_ci	{0xa0, 0x30, ZC3XX_R196_ANTIFLICKERMID},
49562306a36Sopenharmony_ci	{0xa0, 0xd4, ZC3XX_R197_ANTIFLICKERLOW},
49662306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
49762306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
49862306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
49962306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
50062306a36Sopenharmony_ci	{0xa0, 0x39, ZC3XX_R01D_HSYNC_0},
50162306a36Sopenharmony_ci	{0xa0, 0x70, ZC3XX_R01E_HSYNC_1},
50262306a36Sopenharmony_ci	{0xa0, 0xb0, ZC3XX_R01F_HSYNC_2},
50362306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},
50462306a36Sopenharmony_ci	{}
50562306a36Sopenharmony_ci};
50662306a36Sopenharmony_cistatic const struct usb_action cs2102_60HZ[] = {
50762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
50862306a36Sopenharmony_ci	{0xaa, 0x23, 0x0000},
50962306a36Sopenharmony_ci	{0xaa, 0x24, 0x00aa},
51062306a36Sopenharmony_ci	{0xaa, 0x25, 0x00e6},
51162306a36Sopenharmony_ci	{0xaa, 0x21, 0x003f},
51262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R190_EXPOSURELIMITHIGH},
51362306a36Sopenharmony_ci	{0xa0, 0x55, ZC3XX_R191_EXPOSURELIMITMID},
51462306a36Sopenharmony_ci	{0xa0, 0xcc, ZC3XX_R192_EXPOSURELIMITLOW},
51562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
51662306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R196_ANTIFLICKERMID},
51762306a36Sopenharmony_ci	{0xa0, 0x6a, ZC3XX_R197_ANTIFLICKERLOW},
51862306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
51962306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
52062306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
52162306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
52262306a36Sopenharmony_ci	{0xa0, 0x3f, ZC3XX_R01D_HSYNC_0},
52362306a36Sopenharmony_ci	{0xa0, 0xa5, ZC3XX_R01E_HSYNC_1},
52462306a36Sopenharmony_ci	{0xa0, 0xf0, ZC3XX_R01F_HSYNC_2},
52562306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},
52662306a36Sopenharmony_ci	{}
52762306a36Sopenharmony_ci};
52862306a36Sopenharmony_cistatic const struct usb_action cs2102_NoFlickerScale[] = {
52962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
53062306a36Sopenharmony_ci	{0xaa, 0x23, 0x0001},
53162306a36Sopenharmony_ci	{0xaa, 0x24, 0x005f},
53262306a36Sopenharmony_ci	{0xaa, 0x25, 0x0000},
53362306a36Sopenharmony_ci	{0xaa, 0x21, 0x0001},
53462306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R190_EXPOSURELIMITHIGH},
53562306a36Sopenharmony_ci	{0xa0, 0xbf, ZC3XX_R191_EXPOSURELIMITMID},
53662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW},
53762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
53862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
53962306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R197_ANTIFLICKERLOW},
54062306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
54162306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
54262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
54362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
54462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R01D_HSYNC_0},
54562306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R01E_HSYNC_1},
54662306a36Sopenharmony_ci	{0xa0, 0xa0, ZC3XX_R01F_HSYNC_2},
54762306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},
54862306a36Sopenharmony_ci	{}
54962306a36Sopenharmony_ci};
55062306a36Sopenharmony_cistatic const struct usb_action cs2102_NoFlicker[] = {
55162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
55262306a36Sopenharmony_ci	{0xaa, 0x23, 0x0000},
55362306a36Sopenharmony_ci	{0xaa, 0x24, 0x00af},
55462306a36Sopenharmony_ci	{0xaa, 0x25, 0x0080},
55562306a36Sopenharmony_ci	{0xaa, 0x21, 0x0001},
55662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R190_EXPOSURELIMITHIGH},
55762306a36Sopenharmony_ci	{0xa0, 0x5f, ZC3XX_R191_EXPOSURELIMITMID},
55862306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW},
55962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
56062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
56162306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R197_ANTIFLICKERLOW},
56262306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
56362306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
56462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
56562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
56662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R01D_HSYNC_0},
56762306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R01E_HSYNC_1},
56862306a36Sopenharmony_ci	{0xa0, 0xa0, ZC3XX_R01F_HSYNC_2},
56962306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},
57062306a36Sopenharmony_ci	{}
57162306a36Sopenharmony_ci};
57262306a36Sopenharmony_ci
57362306a36Sopenharmony_ci/* CS2102_KOCOM */
57462306a36Sopenharmony_cistatic const struct usb_action cs2102K_InitialScale[] = {
57562306a36Sopenharmony_ci	{0xa0, 0x11, ZC3XX_R002_CLOCKSELECT},
57662306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
57762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT},
57862306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
57962306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
58062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
58162306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
58262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
58362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
58462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
58562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
58662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
58762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
58862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
58962306a36Sopenharmony_ci	{0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},
59062306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},
59162306a36Sopenharmony_ci	{0xa0, 0x55, ZC3XX_R08B_I2CDEVICEADDR},
59262306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
59362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
59462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
59562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
59662306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R092_I2CADDRESSSELECT},
59762306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
59862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
59962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
60062306a36Sopenharmony_ci	{0xa0, 0x0b, ZC3XX_R092_I2CADDRESSSELECT},
60162306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
60262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
60362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
60462306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R092_I2CADDRESSSELECT},
60562306a36Sopenharmony_ci	{0xa0, 0x7c, ZC3XX_R093_I2CSETVALUE},
60662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
60762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
60862306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R092_I2CADDRESSSELECT},
60962306a36Sopenharmony_ci	{0xa0, 0xa3, ZC3XX_R093_I2CSETVALUE},
61062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
61162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
61262306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R092_I2CADDRESSSELECT},
61362306a36Sopenharmony_ci	{0xa0, 0xfb, ZC3XX_R093_I2CSETVALUE},
61462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
61562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
61662306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R092_I2CADDRESSSELECT},
61762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
61862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
61962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
62062306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R092_I2CADDRESSSELECT},
62162306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R093_I2CSETVALUE},
62262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
62362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
62462306a36Sopenharmony_ci	{0xa0, 0x09, ZC3XX_R092_I2CADDRESSSELECT},
62562306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R093_I2CSETVALUE},
62662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
62762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
62862306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R092_I2CADDRESSSELECT},
62962306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
63062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
63162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
63262306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R092_I2CADDRESSSELECT},
63362306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R093_I2CSETVALUE},
63462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
63562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
63662306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R092_I2CADDRESSSELECT},
63762306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R093_I2CSETVALUE},
63862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
63962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
64062306a36Sopenharmony_ci	{0xa0, 0x11, ZC3XX_R092_I2CADDRESSSELECT},
64162306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R093_I2CSETVALUE},
64262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
64362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
64462306a36Sopenharmony_ci	{0xa0, 0x12, ZC3XX_R092_I2CADDRESSSELECT},
64562306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R093_I2CSETVALUE},
64662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
64762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
64862306a36Sopenharmony_ci	{0xa0, 0x15, ZC3XX_R092_I2CADDRESSSELECT},
64962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
65062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
65162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
65262306a36Sopenharmony_ci	{0xa0, 0x16, ZC3XX_R092_I2CADDRESSSELECT},
65362306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE},
65462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
65562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
65662306a36Sopenharmony_ci	{0xa0, 0x17, ZC3XX_R092_I2CADDRESSSELECT},
65762306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE},
65862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
65962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
66062306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
66162306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
66262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
66362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
66462306a36Sopenharmony_ci	{0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},
66562306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
66662306a36Sopenharmony_ci	{0xa0, 0x78, ZC3XX_R18D_YTARGET},
66762306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
66862306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
66962306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
67062306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
67162306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R087_EXPTIMEMID},
67262306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R088_EXPTIMELOW},
67362306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
67462306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
67562306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},
67662306a36Sopenharmony_ci	{0xa0, 0x01, 0x01b1},
67762306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE},
67862306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R116_RGAIN},
67962306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R117_GGAIN},
68062306a36Sopenharmony_ci	{0xa0, 0x4c, ZC3XX_R118_BGAIN},
68162306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},	/* clock ? */
68262306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},	/* sharpness+ */
68362306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05},	/* sharpness- */
68462306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R120_GAMMA00},	/* gamma 4 */
68562306a36Sopenharmony_ci	{0xa0, 0x38, ZC3XX_R121_GAMMA01},
68662306a36Sopenharmony_ci	{0xa0, 0x59, ZC3XX_R122_GAMMA02},
68762306a36Sopenharmony_ci	{0xa0, 0x79, ZC3XX_R123_GAMMA03},
68862306a36Sopenharmony_ci	{0xa0, 0x92, ZC3XX_R124_GAMMA04},
68962306a36Sopenharmony_ci	{0xa0, 0xa7, ZC3XX_R125_GAMMA05},
69062306a36Sopenharmony_ci	{0xa0, 0xb9, ZC3XX_R126_GAMMA06},
69162306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R127_GAMMA07},
69262306a36Sopenharmony_ci	{0xa0, 0xd4, ZC3XX_R128_GAMMA08},
69362306a36Sopenharmony_ci	{0xa0, 0xdf, ZC3XX_R129_GAMMA09},
69462306a36Sopenharmony_ci	{0xa0, 0xe7, ZC3XX_R12A_GAMMA0A},
69562306a36Sopenharmony_ci	{0xa0, 0xee, ZC3XX_R12B_GAMMA0B},
69662306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R12C_GAMMA0C},
69762306a36Sopenharmony_ci	{0xa0, 0xf9, ZC3XX_R12D_GAMMA0D},
69862306a36Sopenharmony_ci	{0xa0, 0xfc, ZC3XX_R12E_GAMMA0E},
69962306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
70062306a36Sopenharmony_ci	{0xa0, 0x26, ZC3XX_R130_GAMMA10},
70162306a36Sopenharmony_ci	{0xa0, 0x22, ZC3XX_R131_GAMMA11},
70262306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R132_GAMMA12},
70362306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R133_GAMMA13},
70462306a36Sopenharmony_ci	{0xa0, 0x16, ZC3XX_R134_GAMMA14},
70562306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R135_GAMMA15},
70662306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R136_GAMMA16},
70762306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R137_GAMMA17},
70862306a36Sopenharmony_ci	{0xa0, 0x0b, ZC3XX_R138_GAMMA18},
70962306a36Sopenharmony_ci	{0xa0, 0x09, ZC3XX_R139_GAMMA19},
71062306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R13A_GAMMA1A},
71162306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R13B_GAMMA1B},
71262306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R13C_GAMMA1C},
71362306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R13D_GAMMA1D},
71462306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R13E_GAMMA1E},
71562306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R13F_GAMMA1F},
71662306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R10A_RGB00},	/* matrix */
71762306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R10B_RGB01},
71862306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R10C_RGB02},
71962306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R10D_RGB10},
72062306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R10E_RGB11},
72162306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R10F_RGB12},
72262306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R110_RGB20},
72362306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R111_RGB21},
72462306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R112_RGB22},
72562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
72662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
72762306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
72862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
72962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
73062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
73162306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
73262306a36Sopenharmony_ci	{0xa0, 0x22, ZC3XX_R093_I2CSETVALUE},
73362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
73462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
73562306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
73662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
73762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
73862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
73962306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
74062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
74162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
74262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
74362306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
74462306a36Sopenharmony_ci	{0xa0, 0x22, ZC3XX_R093_I2CSETVALUE},
74562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
74662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
74762306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
74862306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
74962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
75062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
75162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH},
75262306a36Sopenharmony_ci	{0xa0, 0x22, ZC3XX_R0A4_EXPOSURETIMELOW},
75362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
75462306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
75562306a36Sopenharmony_ci	{0xa0, 0xee, ZC3XX_R192_EXPOSURELIMITLOW},
75662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
75762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
75862306a36Sopenharmony_ci	{0xa0, 0x3a, ZC3XX_R197_ANTIFLICKERLOW},
75962306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
76062306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
76162306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF},
76262306a36Sopenharmony_ci	{0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP},
76362306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R01D_HSYNC_0},
76462306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R01E_HSYNC_1},
76562306a36Sopenharmony_ci	{0xa0, 0x19, ZC3XX_R01F_HSYNC_2},
76662306a36Sopenharmony_ci	{0xa0, 0x1f, ZC3XX_R020_HSYNC_3},
76762306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
76862306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
76962306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
77062306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
77162306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R116_RGAIN},
77262306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R117_GGAIN},
77362306a36Sopenharmony_ci	{0xa0, 0x4c, ZC3XX_R118_BGAIN},
77462306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
77562306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
77662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
77762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
77862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
77962306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
78062306a36Sopenharmony_ci	{0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE},
78162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
78262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
78362306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
78462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
78562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
78662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
78762306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
78862306a36Sopenharmony_ci	{0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE},
78962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
79062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
79162306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
79262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
79362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
79462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
79562306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
79662306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
79762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
79862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
79962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
80062306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
80162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
80262306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
80362306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
80462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
80562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
80662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
80762306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
80862306a36Sopenharmony_ci	{0xa0, 0x96, ZC3XX_R093_I2CSETVALUE},
80962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
81062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
81162306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
81262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
81362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
81462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
81562306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
81662306a36Sopenharmony_ci	{0xa0, 0x96, ZC3XX_R093_I2CSETVALUE},
81762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
81862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
81962306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
82062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
82162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
82262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
82362306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
82462306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
82562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
82662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
82762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
82862306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
82962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
83062306a36Sopenharmony_ci	{}
83162306a36Sopenharmony_ci};
83262306a36Sopenharmony_ci
83362306a36Sopenharmony_cistatic const struct usb_action cs2102K_Initial[] = {
83462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
83562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
83662306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
83762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT},
83862306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
83962306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
84062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
84162306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
84262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
84362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
84462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
84562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
84662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
84762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
84862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
84962306a36Sopenharmony_ci	{0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},
85062306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},
85162306a36Sopenharmony_ci/*fixme: next sequence = i2c exchanges*/
85262306a36Sopenharmony_ci	{0xa0, 0x55, ZC3XX_R08B_I2CDEVICEADDR},
85362306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
85462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
85562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
85662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
85762306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R092_I2CADDRESSSELECT},
85862306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
85962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
86062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
86162306a36Sopenharmony_ci	{0xa0, 0x0b, ZC3XX_R092_I2CADDRESSSELECT},
86262306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
86362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
86462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
86562306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R092_I2CADDRESSSELECT},
86662306a36Sopenharmony_ci	{0xa0, 0x7b, ZC3XX_R093_I2CSETVALUE},
86762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
86862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
86962306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R092_I2CADDRESSSELECT},
87062306a36Sopenharmony_ci	{0xa0, 0xa3, ZC3XX_R093_I2CSETVALUE},
87162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
87262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
87362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R092_I2CADDRESSSELECT},
87462306a36Sopenharmony_ci	{0xa0, 0xfb, ZC3XX_R093_I2CSETVALUE},
87562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
87662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
87762306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R092_I2CADDRESSSELECT},
87862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
87962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
88062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
88162306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R092_I2CADDRESSSELECT},
88262306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R093_I2CSETVALUE},
88362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
88462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
88562306a36Sopenharmony_ci	{0xa0, 0x09, ZC3XX_R092_I2CADDRESSSELECT},
88662306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R093_I2CSETVALUE},
88762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
88862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
88962306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R092_I2CADDRESSSELECT},
89062306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
89162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
89262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
89362306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R092_I2CADDRESSSELECT},
89462306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R093_I2CSETVALUE},
89562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
89662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
89762306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R092_I2CADDRESSSELECT},
89862306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R093_I2CSETVALUE},
89962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
90062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
90162306a36Sopenharmony_ci	{0xa0, 0x11, ZC3XX_R092_I2CADDRESSSELECT},
90262306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R093_I2CSETVALUE},
90362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
90462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
90562306a36Sopenharmony_ci	{0xa0, 0x12, ZC3XX_R092_I2CADDRESSSELECT},
90662306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R093_I2CSETVALUE},
90762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
90862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
90962306a36Sopenharmony_ci	{0xa0, 0x15, ZC3XX_R092_I2CADDRESSSELECT},
91062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
91162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
91262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
91362306a36Sopenharmony_ci	{0xa0, 0x16, ZC3XX_R092_I2CADDRESSSELECT},
91462306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE},
91562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
91662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
91762306a36Sopenharmony_ci	{0xa0, 0x17, ZC3XX_R092_I2CADDRESSSELECT},
91862306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R093_I2CSETVALUE},
91962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
92062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
92162306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
92262306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
92362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
92462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
92562306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION},
92662306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
92762306a36Sopenharmony_ci	{0xa0, 0x78, ZC3XX_R18D_YTARGET},
92862306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
92962306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
93062306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
93162306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
93262306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R087_EXPTIMEMID},
93362306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R088_EXPTIMELOW},
93462306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
93562306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
93662306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},
93762306a36Sopenharmony_ci	{0xa0, 0x01, 0x01b1},
93862306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE},
93962306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R116_RGAIN},
94062306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R117_GGAIN},
94162306a36Sopenharmony_ci	{0xa0, 0x4c, ZC3XX_R118_BGAIN},
94262306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},	/* clock ? */
94362306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},	/* sharpness+ */
94462306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05},	/* sharpness- */
94562306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R120_GAMMA00},	/* gamma 4 */
94662306a36Sopenharmony_ci	{0xa0, 0x38, ZC3XX_R121_GAMMA01},
94762306a36Sopenharmony_ci	{0xa0, 0x59, ZC3XX_R122_GAMMA02},
94862306a36Sopenharmony_ci	{0xa0, 0x79, ZC3XX_R123_GAMMA03},
94962306a36Sopenharmony_ci	{0xa0, 0x92, ZC3XX_R124_GAMMA04},
95062306a36Sopenharmony_ci	{0xa0, 0xa7, ZC3XX_R125_GAMMA05},
95162306a36Sopenharmony_ci	{0xa0, 0xb9, ZC3XX_R126_GAMMA06},
95262306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R127_GAMMA07},
95362306a36Sopenharmony_ci	{0xa0, 0xd4, ZC3XX_R128_GAMMA08},
95462306a36Sopenharmony_ci	{0xa0, 0xdf, ZC3XX_R129_GAMMA09},
95562306a36Sopenharmony_ci	{0xa0, 0xe7, ZC3XX_R12A_GAMMA0A},
95662306a36Sopenharmony_ci	{0xa0, 0xee, ZC3XX_R12B_GAMMA0B},
95762306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R12C_GAMMA0C},
95862306a36Sopenharmony_ci	{0xa0, 0xf9, ZC3XX_R12D_GAMMA0D},
95962306a36Sopenharmony_ci	{0xa0, 0xfc, ZC3XX_R12E_GAMMA0E},
96062306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
96162306a36Sopenharmony_ci	{0xa0, 0x26, ZC3XX_R130_GAMMA10},
96262306a36Sopenharmony_ci	{0xa0, 0x22, ZC3XX_R131_GAMMA11},
96362306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R132_GAMMA12},
96462306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R133_GAMMA13},
96562306a36Sopenharmony_ci	{0xa0, 0x16, ZC3XX_R134_GAMMA14},
96662306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R135_GAMMA15},
96762306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R136_GAMMA16},
96862306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R137_GAMMA17},
96962306a36Sopenharmony_ci	{0xa0, 0x0b, ZC3XX_R138_GAMMA18},
97062306a36Sopenharmony_ci	{0xa0, 0x09, ZC3XX_R139_GAMMA19},
97162306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R13A_GAMMA1A},
97262306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R13B_GAMMA1B},
97362306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R13C_GAMMA1C},
97462306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R13D_GAMMA1D},
97562306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R13E_GAMMA1E},
97662306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R13F_GAMMA1F},
97762306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R10A_RGB00},	/* matrix */
97862306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R10B_RGB01},
97962306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R10C_RGB02},
98062306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R10D_RGB10},
98162306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R10E_RGB11},
98262306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R10F_RGB12},
98362306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R110_RGB20},
98462306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R111_RGB21},
98562306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R112_RGB22},
98662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
98762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
98862306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
98962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
99062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
99162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
99262306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
99362306a36Sopenharmony_ci	{0xa0, 0x22, ZC3XX_R093_I2CSETVALUE},
99462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
99562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
99662306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
99762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
99862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
99962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
100062306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
100162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
100262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
100362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
100462306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
100562306a36Sopenharmony_ci	{0xa0, 0x22, ZC3XX_R093_I2CSETVALUE},
100662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
100762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
100862306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
100962306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
101062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
101162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
101262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH},
101362306a36Sopenharmony_ci	{0xa0, 0x22, ZC3XX_R0A4_EXPOSURETIMELOW},
101462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
101562306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
101662306a36Sopenharmony_ci	{0xa0, 0xee, ZC3XX_R192_EXPOSURELIMITLOW},
101762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
101862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
101962306a36Sopenharmony_ci	{0xa0, 0x3a, ZC3XX_R197_ANTIFLICKERLOW},
102062306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
102162306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
102262306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF},
102362306a36Sopenharmony_ci	{0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP},
102462306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R01D_HSYNC_0},
102562306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R01E_HSYNC_1},
102662306a36Sopenharmony_ci	{0xa0, 0x19, ZC3XX_R01F_HSYNC_2},
102762306a36Sopenharmony_ci	{0xa0, 0x1f, ZC3XX_R020_HSYNC_3},
102862306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
102962306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
103062306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
103162306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
103262306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R116_RGAIN},
103362306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R117_GGAIN},
103462306a36Sopenharmony_ci	{0xa0, 0x4c, ZC3XX_R118_BGAIN},
103562306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
103662306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
103762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
103862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
103962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
104062306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
104162306a36Sopenharmony_ci	{0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE},
104262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
104362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
104462306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
104562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
104662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
104762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
104862306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
104962306a36Sopenharmony_ci	{0xa0, 0x5c, ZC3XX_R093_I2CSETVALUE},
105062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
105162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
105262306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
105362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
105462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
105562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
105662306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
105762306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
105862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
105962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
106062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
106162306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
106262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
106362306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
106462306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
106562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
106662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
106762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
106862306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
106962306a36Sopenharmony_ci	{0xa0, 0x96, ZC3XX_R093_I2CSETVALUE},
107062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
107162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
107262306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
107362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
107462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
107562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
107662306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
107762306a36Sopenharmony_ci	{0xa0, 0x96, ZC3XX_R093_I2CSETVALUE},
107862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
107962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
108062306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
108162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
108262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
108362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
108462306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
108562306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
108662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
108762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
108862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
108962306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
109062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
109162306a36Sopenharmony_ci/*fixme:what does the next sequence?*/
109262306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
109362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
109462306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
109562306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
109662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
109762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
109862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
109962306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
110062306a36Sopenharmony_ci	{0xa0, 0xd0, ZC3XX_R093_I2CSETVALUE},
110162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
110262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
110362306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
110462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
110562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
110662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
110762306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
110862306a36Sopenharmony_ci	{0xa0, 0xd0, ZC3XX_R093_I2CSETVALUE},
110962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
111062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
111162306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
111262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R093_I2CSETVALUE},
111362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
111462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
111562306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
111662306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
111762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
111862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
111962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
112062306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R008_CLOCKSETTING},
112162306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
112262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
112362306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
112462306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
112562306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
112662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
112762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
112862306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
112962306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R093_I2CSETVALUE},
113062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
113162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
113262306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
113362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
113462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
113562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
113662306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
113762306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R093_I2CSETVALUE},
113862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
113962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
114062306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
114162306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
114262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
114362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
114462306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
114562306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
114662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
114762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
114862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
114962306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
115062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
115162306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
115262306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
115362306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
115462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
115562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
115662306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
115762306a36Sopenharmony_ci	{0xa0, 0x44, ZC3XX_R093_I2CSETVALUE},
115862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
115962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
116062306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
116162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
116262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
116362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
116462306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
116562306a36Sopenharmony_ci	{0xa0, 0x44, ZC3XX_R093_I2CSETVALUE},
116662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
116762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
116862306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
116962306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
117062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
117162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
117262306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
117362306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
117462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
117562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
117662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
117762306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
117862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
117962306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
118062306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R092_I2CADDRESSSELECT},
118162306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
118262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
118362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
118462306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R092_I2CADDRESSSELECT},
118562306a36Sopenharmony_ci	{0xa0, 0x7e, ZC3XX_R093_I2CSETVALUE},
118662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
118762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
118862306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
118962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R093_I2CSETVALUE},
119062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
119162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
119262306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R092_I2CADDRESSSELECT},
119362306a36Sopenharmony_ci	{0xa0, 0x7e, ZC3XX_R093_I2CSETVALUE},
119462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
119562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
119662306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R092_I2CADDRESSSELECT},
119762306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R093_I2CSETVALUE},
119862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
119962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
120062306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R092_I2CADDRESSSELECT},
120162306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R093_I2CSETVALUE},
120262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R094_I2CWRITEACK},
120362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
120462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
120562306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
120662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
120762306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
120862306a36Sopenharmony_ci	{}
120962306a36Sopenharmony_ci};
121062306a36Sopenharmony_ci
121162306a36Sopenharmony_cistatic const struct usb_action gc0305_Initial[] = {	/* 640x480 */
121262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},	/* 00,00,01,cc */
121362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},	/* 00,08,03,cc */
121462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
121562306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R002_CLOCKSELECT},	/* 00,02,04,cc */
121662306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},	/* 00,03,02,cc */
121762306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},	/* 00,04,80,cc */
121862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},	/* 00,05,01,cc */
121962306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},	/* 00,06,e0,cc */
122062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},	/* 00,01,01,cc */
122162306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,03,cc */
122262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,01,cc */
122362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},	/* 00,98,00,cc */
122462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},	/* 00,9a,00,cc */
122562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},	/* 01,1a,00,cc */
122662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},	/* 01,1c,00,cc */
122762306a36Sopenharmony_ci	{0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW},	/* 00,9c,e6,cc */
122862306a36Sopenharmony_ci	{0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW},	/* 00,9e,86,cc */
122962306a36Sopenharmony_ci	{0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR},	/* 00,8b,98,cc */
123062306a36Sopenharmony_ci	{0xaa, 0x13, 0x0002},	/* 00,13,02,aa */
123162306a36Sopenharmony_ci	{0xaa, 0x15, 0x0003},	/* 00,15,03,aa */
123262306a36Sopenharmony_ci	{0xaa, 0x01, 0x0000},	/* 00,01,00,aa */
123362306a36Sopenharmony_ci	{0xaa, 0x02, 0x0000},	/* 00,02,00,aa */
123462306a36Sopenharmony_ci	{0xaa, 0x1a, 0x0000},	/* 00,1a,00,aa */
123562306a36Sopenharmony_ci	{0xaa, 0x1c, 0x0017},	/* 00,1c,17,aa */
123662306a36Sopenharmony_ci	{0xaa, 0x1d, 0x0080},	/* 00,1d,80,aa */
123762306a36Sopenharmony_ci	{0xaa, 0x1f, 0x0008},	/* 00,1f,08,aa */
123862306a36Sopenharmony_ci	{0xaa, 0x21, 0x0012},	/* 00,21,12,aa */
123962306a36Sopenharmony_ci	{0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH},	/* 00,86,82,cc */
124062306a36Sopenharmony_ci	{0xa0, 0x83, ZC3XX_R087_EXPTIMEMID},	/* 00,87,83,cc */
124162306a36Sopenharmony_ci	{0xa0, 0x84, ZC3XX_R088_EXPTIMELOW},	/* 00,88,84,cc */
124262306a36Sopenharmony_ci	{0xaa, 0x05, 0x0000},	/* 00,05,00,aa */
124362306a36Sopenharmony_ci	{0xaa, 0x0a, 0x0000},	/* 00,0a,00,aa */
124462306a36Sopenharmony_ci	{0xaa, 0x0b, 0x00b0},	/* 00,0b,b0,aa */
124562306a36Sopenharmony_ci	{0xaa, 0x0c, 0x0000},	/* 00,0c,00,aa */
124662306a36Sopenharmony_ci	{0xaa, 0x0d, 0x00b0},	/* 00,0d,b0,aa */
124762306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0000},	/* 00,0e,00,aa */
124862306a36Sopenharmony_ci	{0xaa, 0x0f, 0x00b0},	/* 00,0f,b0,aa */
124962306a36Sopenharmony_ci	{0xaa, 0x10, 0x0000},	/* 00,10,00,aa */
125062306a36Sopenharmony_ci	{0xaa, 0x11, 0x00b0},	/* 00,11,b0,aa */
125162306a36Sopenharmony_ci	{0xaa, 0x16, 0x0001},	/* 00,16,01,aa */
125262306a36Sopenharmony_ci	{0xaa, 0x17, 0x00e6},	/* 00,17,e6,aa */
125362306a36Sopenharmony_ci	{0xaa, 0x18, 0x0002},	/* 00,18,02,aa */
125462306a36Sopenharmony_ci	{0xaa, 0x19, 0x0086},	/* 00,19,86,aa */
125562306a36Sopenharmony_ci	{0xaa, 0x20, 0x0000},	/* 00,20,00,aa */
125662306a36Sopenharmony_ci	{0xaa, 0x1b, 0x0020},	/* 00,1b,20,aa */
125762306a36Sopenharmony_ci	{0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},	/* 01,01,b7,cc */
125862306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,05,cc */
125962306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},	/* 01,00,0d,cc */
126062306a36Sopenharmony_ci	{0xa0, 0x76, ZC3XX_R189_AWBSTATUS},	/* 01,89,76,cc */
126162306a36Sopenharmony_ci	{0xa0, 0x09, 0x01ad},	/* 01,ad,09,cc */
126262306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},	/* 01,c5,03,cc */
126362306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},	/* 01,cb,13,cc */
126462306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},	/* 02,50,08,cc */
126562306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},	/* 03,01,08,cc */
126662306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},	/* 01,a8,60,cc */
126762306a36Sopenharmony_ci	{0xa0, 0x85, ZC3XX_R18D_YTARGET},	/* 01,8d,85,cc */
126862306a36Sopenharmony_ci	{0xa0, 0x00, 0x011e},	/* 01,1e,00,cc */
126962306a36Sopenharmony_ci	{0xa0, 0x52, ZC3XX_R116_RGAIN},	/* 01,16,52,cc */
127062306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R117_GGAIN},	/* 01,17,40,cc */
127162306a36Sopenharmony_ci	{0xa0, 0x52, ZC3XX_R118_BGAIN},	/* 01,18,52,cc */
127262306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R113_RGB03},	/* 01,13,03,cc */
127362306a36Sopenharmony_ci	{}
127462306a36Sopenharmony_ci};
127562306a36Sopenharmony_cistatic const struct usb_action gc0305_InitialScale[] = { /* 320x240 */
127662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},	/* 00,00,01,cc */
127762306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},	/* 00,08,03,cc */
127862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc */
127962306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},	/* 00,02,10,cc */
128062306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},	/* 00,03,02,cc */
128162306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},	/* 00,04,80,cc */
128262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},	/* 00,05,01,cc */
128362306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},	/* 00,06,e0,cc */
128462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},	/* 00,01,01,cc */
128562306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,03,cc */
128662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,01,cc */
128762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},	/* 00,98,00,cc */
128862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},	/* 00,9a,00,cc */
128962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},	/* 01,1a,00,cc */
129062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},	/* 01,1c,00,cc */
129162306a36Sopenharmony_ci	{0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},	/* 00,9c,e8,cc */
129262306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},	/* 00,9e,88,cc */
129362306a36Sopenharmony_ci	{0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR},	/* 00,8b,98,cc */
129462306a36Sopenharmony_ci	{0xaa, 0x13, 0x0000},	/* 00,13,00,aa */
129562306a36Sopenharmony_ci	{0xaa, 0x15, 0x0001},	/* 00,15,01,aa */
129662306a36Sopenharmony_ci	{0xaa, 0x01, 0x0000},	/* 00,01,00,aa */
129762306a36Sopenharmony_ci	{0xaa, 0x02, 0x0000},	/* 00,02,00,aa */
129862306a36Sopenharmony_ci	{0xaa, 0x1a, 0x0000},	/* 00,1a,00,aa */
129962306a36Sopenharmony_ci	{0xaa, 0x1c, 0x0017},	/* 00,1c,17,aa */
130062306a36Sopenharmony_ci	{0xaa, 0x1d, 0x0080},	/* 00,1d,80,aa */
130162306a36Sopenharmony_ci	{0xaa, 0x1f, 0x0008},	/* 00,1f,08,aa */
130262306a36Sopenharmony_ci	{0xaa, 0x21, 0x0012},	/* 00,21,12,aa */
130362306a36Sopenharmony_ci	{0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH},	/* 00,86,82,cc */
130462306a36Sopenharmony_ci	{0xa0, 0x83, ZC3XX_R087_EXPTIMEMID},	/* 00,87,83,cc */
130562306a36Sopenharmony_ci	{0xa0, 0x84, ZC3XX_R088_EXPTIMELOW},	/* 00,88,84,cc */
130662306a36Sopenharmony_ci	{0xaa, 0x05, 0x0000},	/* 00,05,00,aa */
130762306a36Sopenharmony_ci	{0xaa, 0x0a, 0x0000},	/* 00,0a,00,aa */
130862306a36Sopenharmony_ci	{0xaa, 0x0b, 0x00b0},	/* 00,0b,b0,aa */
130962306a36Sopenharmony_ci	{0xaa, 0x0c, 0x0000},	/* 00,0c,00,aa */
131062306a36Sopenharmony_ci	{0xaa, 0x0d, 0x00b0},	/* 00,0d,b0,aa */
131162306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0000},	/* 00,0e,00,aa */
131262306a36Sopenharmony_ci	{0xaa, 0x0f, 0x00b0},	/* 00,0f,b0,aa */
131362306a36Sopenharmony_ci	{0xaa, 0x10, 0x0000},	/* 00,10,00,aa */
131462306a36Sopenharmony_ci	{0xaa, 0x11, 0x00b0},	/* 00,11,b0,aa */
131562306a36Sopenharmony_ci	{0xaa, 0x16, 0x0001},	/* 00,16,01,aa */
131662306a36Sopenharmony_ci	{0xaa, 0x17, 0x00e8},	/* 00,17,e8,aa */
131762306a36Sopenharmony_ci	{0xaa, 0x18, 0x0002},	/* 00,18,02,aa */
131862306a36Sopenharmony_ci	{0xaa, 0x19, 0x0088},	/* 00,19,88,aa */
131962306a36Sopenharmony_ci	{0xaa, 0x20, 0x0000},	/* 00,20,00,aa */
132062306a36Sopenharmony_ci	{0xaa, 0x1b, 0x0020},	/* 00,1b,20,aa */
132162306a36Sopenharmony_ci	{0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},	/* 01,01,b7,cc */
132262306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,05,cc */
132362306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},	/* 01,00,0d,cc */
132462306a36Sopenharmony_ci	{0xa0, 0x76, ZC3XX_R189_AWBSTATUS},	/* 01,89,76,cc */
132562306a36Sopenharmony_ci	{0xa0, 0x09, 0x01ad},	/* 01,ad,09,cc */
132662306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},	/* 01,c5,03,cc */
132762306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},	/* 01,cb,13,cc */
132862306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},	/* 02,50,08,cc */
132962306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},	/* 03,01,08,cc */
133062306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},	/* 01,a8,60,cc */
133162306a36Sopenharmony_ci	{0xa0, 0x00, 0x011e},	/* 01,1e,00,cc */
133262306a36Sopenharmony_ci	{0xa0, 0x52, ZC3XX_R116_RGAIN},	/* 01,16,52,cc */
133362306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R117_GGAIN},	/* 01,17,40,cc */
133462306a36Sopenharmony_ci	{0xa0, 0x52, ZC3XX_R118_BGAIN},	/* 01,18,52,cc */
133562306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R113_RGB03},	/* 01,13,03,cc */
133662306a36Sopenharmony_ci	{}
133762306a36Sopenharmony_ci};
133862306a36Sopenharmony_cistatic const struct usb_action gc0305_50HZ[] = {
133962306a36Sopenharmony_ci	{0xaa, 0x82, 0x0000},	/* 00,82,00,aa */
134062306a36Sopenharmony_ci	{0xaa, 0x83, 0x0002},	/* 00,83,02,aa */
134162306a36Sopenharmony_ci	{0xaa, 0x84, 0x0038},	/* 00,84,38,aa */	/* win: 00,84,ec */
134262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,00,cc */
134362306a36Sopenharmony_ci	{0xa0, 0x0b, ZC3XX_R191_EXPOSURELIMITMID},	/* 01,91,0b,cc */
134462306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R192_EXPOSURELIMITLOW},	/* 01,92,18,cc */
134562306a36Sopenharmony_ci							/* win: 01,92,10 */
134662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc */
134762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,00,cc */
134862306a36Sopenharmony_ci	{0xa0, 0x8e, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,8e,cc */
134962306a36Sopenharmony_ci							/* win: 01,97,ec */
135062306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},	/* 01,8c,0e,cc */
135162306a36Sopenharmony_ci	{0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE},	/* 01,8f,15,cc */
135262306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},	/* 01,a9,10,cc */
135362306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},	/* 01,aa,24,cc */
135462306a36Sopenharmony_ci	{0xa0, 0x62, ZC3XX_R01D_HSYNC_0},	/* 00,1d,62,cc */
135562306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01E_HSYNC_1},	/* 00,1e,90,cc */
135662306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},	/* 00,1f,c8,cc */
135762306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},	/* 00,20,ff,cc */
135862306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},	/* 01,1d,60,cc */
135962306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},	/* 01,80,42,cc */
136062306a36Sopenharmony_ci/*	{0xa0, 0x85, ZC3XX_R18D_YTARGET},	 * 01,8d,85,cc *
136162306a36Sopenharmony_ci						 * if 640x480 */
136262306a36Sopenharmony_ci	{}
136362306a36Sopenharmony_ci};
136462306a36Sopenharmony_cistatic const struct usb_action gc0305_60HZ[] = {
136562306a36Sopenharmony_ci	{0xaa, 0x82, 0x0000},	/* 00,82,00,aa */
136662306a36Sopenharmony_ci	{0xaa, 0x83, 0x0000},	/* 00,83,00,aa */
136762306a36Sopenharmony_ci	{0xaa, 0x84, 0x00ec},	/* 00,84,ec,aa */
136862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,00,cc */
136962306a36Sopenharmony_ci	{0xa0, 0x0b, ZC3XX_R191_EXPOSURELIMITMID},	/* 01,91,0b,cc */
137062306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R192_EXPOSURELIMITLOW},	/* 01,92,10,cc */
137162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc */
137262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,00,cc */
137362306a36Sopenharmony_ci	{0xa0, 0xec, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,ec,cc */
137462306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},	/* 01,8c,0e,cc */
137562306a36Sopenharmony_ci	{0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE},	/* 01,8f,15,cc */
137662306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},	/* 01,a9,10,cc */
137762306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},	/* 01,aa,24,cc */
137862306a36Sopenharmony_ci	{0xa0, 0x62, ZC3XX_R01D_HSYNC_0},	/* 00,1d,62,cc */
137962306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01E_HSYNC_1},	/* 00,1e,90,cc */
138062306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},	/* 00,1f,c8,cc */
138162306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},	/* 00,20,ff,cc */
138262306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},	/* 01,1d,60,cc */
138362306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},	/* 01,80,42,cc */
138462306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R18D_YTARGET},	/* 01,8d,80,cc */
138562306a36Sopenharmony_ci	{}
138662306a36Sopenharmony_ci};
138762306a36Sopenharmony_ci
138862306a36Sopenharmony_cistatic const struct usb_action gc0305_NoFlicker[] = {
138962306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R100_OPERATIONMODE},	/* 01,00,0c,cc */
139062306a36Sopenharmony_ci	{0xaa, 0x82, 0x0000},	/* 00,82,00,aa */
139162306a36Sopenharmony_ci	{0xaa, 0x83, 0x0000},	/* 00,83,00,aa */
139262306a36Sopenharmony_ci	{0xaa, 0x84, 0x0020},	/* 00,84,20,aa */
139362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,00,cc */
139462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R191_EXPOSURELIMITMID},	/* 01,91,00,cc */
139562306a36Sopenharmony_ci	{0xa0, 0x48, ZC3XX_R192_EXPOSURELIMITLOW},	/* 01,92,48,cc */
139662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc */
139762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,00,cc */
139862306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,10,cc */
139962306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},	/* 01,8c,0e,cc */
140062306a36Sopenharmony_ci	{0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE},	/* 01,8f,15,cc */
140162306a36Sopenharmony_ci	{0xa0, 0x62, ZC3XX_R01D_HSYNC_0},	/* 00,1d,62,cc */
140262306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01E_HSYNC_1},	/* 00,1e,90,cc */
140362306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},	/* 00,1f,c8,cc */
140462306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},	/* 00,20,ff,cc */
140562306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},	/* 01,1d,60,cc */
140662306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R180_AUTOCORRECTENABLE},	/* 01,80,03,cc */
140762306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R18D_YTARGET},	/* 01,8d,80,cc */
140862306a36Sopenharmony_ci	{}
140962306a36Sopenharmony_ci};
141062306a36Sopenharmony_ci
141162306a36Sopenharmony_cistatic const struct usb_action hdcs2020_InitialScale[] = {
141262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
141362306a36Sopenharmony_ci	{0xa0, 0x11, ZC3XX_R002_CLOCKSELECT},
141462306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},	/* qtable 0x05 */
141562306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT},
141662306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
141762306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
141862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
141962306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
142062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
142162306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
142262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
142362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
142462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
142562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
142662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
142762306a36Sopenharmony_ci	{0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},
142862306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},
142962306a36Sopenharmony_ci	{0xaa, 0x1c, 0x0000},
143062306a36Sopenharmony_ci	{0xaa, 0x0a, 0x0001},
143162306a36Sopenharmony_ci	{0xaa, 0x0b, 0x0006},
143262306a36Sopenharmony_ci	{0xaa, 0x0c, 0x007b},
143362306a36Sopenharmony_ci	{0xaa, 0x0d, 0x00a7},
143462306a36Sopenharmony_ci	{0xaa, 0x03, 0x00fb},
143562306a36Sopenharmony_ci	{0xaa, 0x05, 0x0000},
143662306a36Sopenharmony_ci	{0xaa, 0x06, 0x0003},
143762306a36Sopenharmony_ci	{0xaa, 0x09, 0x0008},
143862306a36Sopenharmony_ci
143962306a36Sopenharmony_ci	{0xaa, 0x0f, 0x0018},	/* set sensor gain */
144062306a36Sopenharmony_ci	{0xaa, 0x10, 0x0018},
144162306a36Sopenharmony_ci	{0xaa, 0x11, 0x0018},
144262306a36Sopenharmony_ci	{0xaa, 0x12, 0x0018},
144362306a36Sopenharmony_ci
144462306a36Sopenharmony_ci	{0xaa, 0x15, 0x004e},
144562306a36Sopenharmony_ci	{0xaa, 0x1c, 0x0004},
144662306a36Sopenharmony_ci	{0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},
144762306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
144862306a36Sopenharmony_ci	{0xa0, 0x70, ZC3XX_R18D_YTARGET},
144962306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
145062306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
145162306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
145262306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
145362306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
145462306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
145562306a36Sopenharmony_ci	{0xa1, 0x01, 0x0002},
145662306a36Sopenharmony_ci	{0xa1, 0x01, 0x0008},
145762306a36Sopenharmony_ci	{0xa1, 0x01, 0x0180},
145862306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE},
145962306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R116_RGAIN},
146062306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R117_GGAIN},
146162306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R118_BGAIN},
146262306a36Sopenharmony_ci	{0xa1, 0x01, 0x0008},
146362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},	/* clock ? */
146462306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},	/* sharpness+ */
146562306a36Sopenharmony_ci	{0xa1, 0x01, 0x01c8},
146662306a36Sopenharmony_ci	{0xa1, 0x01, 0x01c9},
146762306a36Sopenharmony_ci	{0xa1, 0x01, 0x01ca},
146862306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05},	/* sharpness- */
146962306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R120_GAMMA00},	/* gamma 4 */
147062306a36Sopenharmony_ci	{0xa0, 0x38, ZC3XX_R121_GAMMA01},
147162306a36Sopenharmony_ci	{0xa0, 0x59, ZC3XX_R122_GAMMA02},
147262306a36Sopenharmony_ci	{0xa0, 0x79, ZC3XX_R123_GAMMA03},
147362306a36Sopenharmony_ci	{0xa0, 0x92, ZC3XX_R124_GAMMA04},
147462306a36Sopenharmony_ci	{0xa0, 0xa7, ZC3XX_R125_GAMMA05},
147562306a36Sopenharmony_ci	{0xa0, 0xb9, ZC3XX_R126_GAMMA06},
147662306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R127_GAMMA07},
147762306a36Sopenharmony_ci	{0xa0, 0xd4, ZC3XX_R128_GAMMA08},
147862306a36Sopenharmony_ci	{0xa0, 0xdf, ZC3XX_R129_GAMMA09},
147962306a36Sopenharmony_ci	{0xa0, 0xe7, ZC3XX_R12A_GAMMA0A},
148062306a36Sopenharmony_ci	{0xa0, 0xee, ZC3XX_R12B_GAMMA0B},
148162306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R12C_GAMMA0C},
148262306a36Sopenharmony_ci	{0xa0, 0xf9, ZC3XX_R12D_GAMMA0D},
148362306a36Sopenharmony_ci	{0xa0, 0xfc, ZC3XX_R12E_GAMMA0E},
148462306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
148562306a36Sopenharmony_ci	{0xa0, 0x26, ZC3XX_R130_GAMMA10},
148662306a36Sopenharmony_ci	{0xa0, 0x22, ZC3XX_R131_GAMMA11},
148762306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R132_GAMMA12},
148862306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R133_GAMMA13},
148962306a36Sopenharmony_ci	{0xa0, 0x16, ZC3XX_R134_GAMMA14},
149062306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R135_GAMMA15},
149162306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R136_GAMMA16},
149262306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R137_GAMMA17},
149362306a36Sopenharmony_ci	{0xa0, 0x0b, ZC3XX_R138_GAMMA18},
149462306a36Sopenharmony_ci	{0xa0, 0x09, ZC3XX_R139_GAMMA19},
149562306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R13A_GAMMA1A},
149662306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R13B_GAMMA1B},
149762306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R13C_GAMMA1C},
149862306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R13D_GAMMA1D},
149962306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R13E_GAMMA1E},
150062306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R13F_GAMMA1F},
150162306a36Sopenharmony_ci
150262306a36Sopenharmony_ci	{0xa0, 0x66, ZC3XX_R10A_RGB00},	/* matrix */
150362306a36Sopenharmony_ci	{0xa0, 0xed, ZC3XX_R10B_RGB01},
150462306a36Sopenharmony_ci	{0xa0, 0xed, ZC3XX_R10C_RGB02},
150562306a36Sopenharmony_ci	{0xa0, 0xed, ZC3XX_R10D_RGB10},
150662306a36Sopenharmony_ci	{0xa0, 0x66, ZC3XX_R10E_RGB11},
150762306a36Sopenharmony_ci	{0xa0, 0xed, ZC3XX_R10F_RGB12},
150862306a36Sopenharmony_ci	{0xa0, 0xed, ZC3XX_R110_RGB20},
150962306a36Sopenharmony_ci	{0xa0, 0xed, ZC3XX_R111_RGB21},
151062306a36Sopenharmony_ci	{0xa0, 0x66, ZC3XX_R112_RGB22},
151162306a36Sopenharmony_ci
151262306a36Sopenharmony_ci	{0xa1, 0x01, 0x0180},
151362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
151462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
151562306a36Sopenharmony_ci	{0xaa, 0x13, 0x0031},
151662306a36Sopenharmony_ci	{0xaa, 0x14, 0x0001},
151762306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0004},
151862306a36Sopenharmony_ci	{0xaa, 0x19, 0x00cd},
151962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
152062306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID},
152162306a36Sopenharmony_ci	{0xa0, 0x62, ZC3XX_R192_EXPOSURELIMITLOW},
152262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
152362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
152462306a36Sopenharmony_ci	{0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW},
152562306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
152662306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
152762306a36Sopenharmony_ci
152862306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF},	/* 0x14 */
152962306a36Sopenharmony_ci	{0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP},
153062306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R01D_HSYNC_0},
153162306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R01E_HSYNC_1},
153262306a36Sopenharmony_ci	{0xa0, 0x2c, ZC3XX_R01F_HSYNC_2},
153362306a36Sopenharmony_ci	{0xa0, 0x41, ZC3XX_R020_HSYNC_3},
153462306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
153562306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
153662306a36Sopenharmony_ci	{0xa1, 0x01, 0x0180},
153762306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
153862306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R116_RGAIN},
153962306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R117_GGAIN},
154062306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R118_BGAIN},
154162306a36Sopenharmony_ci	{}
154262306a36Sopenharmony_ci};
154362306a36Sopenharmony_cistatic const struct usb_action hdcs2020_Initial[] = {
154462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
154562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
154662306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
154762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R010_CMOSSENSORSELECT},
154862306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
154962306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
155062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
155162306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
155262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
155362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
155462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
155562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
155662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
155762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
155862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
155962306a36Sopenharmony_ci	{0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},
156062306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},
156162306a36Sopenharmony_ci	{0xaa, 0x1c, 0x0000},
156262306a36Sopenharmony_ci	{0xaa, 0x0a, 0x0001},
156362306a36Sopenharmony_ci	{0xaa, 0x0b, 0x0006},
156462306a36Sopenharmony_ci	{0xaa, 0x0c, 0x007a},
156562306a36Sopenharmony_ci	{0xaa, 0x0d, 0x00a7},
156662306a36Sopenharmony_ci	{0xaa, 0x03, 0x00fb},
156762306a36Sopenharmony_ci	{0xaa, 0x05, 0x0000},
156862306a36Sopenharmony_ci	{0xaa, 0x06, 0x0003},
156962306a36Sopenharmony_ci	{0xaa, 0x09, 0x0008},
157062306a36Sopenharmony_ci	{0xaa, 0x0f, 0x0018},	/* original setting */
157162306a36Sopenharmony_ci	{0xaa, 0x10, 0x0018},
157262306a36Sopenharmony_ci	{0xaa, 0x11, 0x0018},
157362306a36Sopenharmony_ci	{0xaa, 0x12, 0x0018},
157462306a36Sopenharmony_ci	{0xaa, 0x15, 0x004e},
157562306a36Sopenharmony_ci	{0xaa, 0x1c, 0x0004},
157662306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION},
157762306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
157862306a36Sopenharmony_ci	{0xa0, 0x70, ZC3XX_R18D_YTARGET},
157962306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
158062306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
158162306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
158262306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
158362306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
158462306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
158562306a36Sopenharmony_ci	{0xa1, 0x01, 0x0002},
158662306a36Sopenharmony_ci	{0xa1, 0x01, 0x0008},
158762306a36Sopenharmony_ci	{0xa1, 0x01, 0x0180},
158862306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE},
158962306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R116_RGAIN},
159062306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R117_GGAIN},
159162306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R118_BGAIN},
159262306a36Sopenharmony_ci	{0xa1, 0x01, 0x0008},
159362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},	/* clock ? */
159462306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},	/* sharpness+ */
159562306a36Sopenharmony_ci	{0xa1, 0x01, 0x01c8},
159662306a36Sopenharmony_ci	{0xa1, 0x01, 0x01c9},
159762306a36Sopenharmony_ci	{0xa1, 0x01, 0x01ca},
159862306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05},	/* sharpness- */
159962306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R120_GAMMA00},	/* gamma 4 */
160062306a36Sopenharmony_ci	{0xa0, 0x38, ZC3XX_R121_GAMMA01},
160162306a36Sopenharmony_ci	{0xa0, 0x59, ZC3XX_R122_GAMMA02},
160262306a36Sopenharmony_ci	{0xa0, 0x79, ZC3XX_R123_GAMMA03},
160362306a36Sopenharmony_ci	{0xa0, 0x92, ZC3XX_R124_GAMMA04},
160462306a36Sopenharmony_ci	{0xa0, 0xa7, ZC3XX_R125_GAMMA05},
160562306a36Sopenharmony_ci	{0xa0, 0xb9, ZC3XX_R126_GAMMA06},
160662306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R127_GAMMA07},
160762306a36Sopenharmony_ci	{0xa0, 0xd4, ZC3XX_R128_GAMMA08},
160862306a36Sopenharmony_ci	{0xa0, 0xdf, ZC3XX_R129_GAMMA09},
160962306a36Sopenharmony_ci	{0xa0, 0xe7, ZC3XX_R12A_GAMMA0A},
161062306a36Sopenharmony_ci	{0xa0, 0xee, ZC3XX_R12B_GAMMA0B},
161162306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R12C_GAMMA0C},
161262306a36Sopenharmony_ci	{0xa0, 0xf9, ZC3XX_R12D_GAMMA0D},
161362306a36Sopenharmony_ci	{0xa0, 0xfc, ZC3XX_R12E_GAMMA0E},
161462306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
161562306a36Sopenharmony_ci	{0xa0, 0x26, ZC3XX_R130_GAMMA10},
161662306a36Sopenharmony_ci	{0xa0, 0x22, ZC3XX_R131_GAMMA11},
161762306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R132_GAMMA12},
161862306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R133_GAMMA13},
161962306a36Sopenharmony_ci	{0xa0, 0x16, ZC3XX_R134_GAMMA14},
162062306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R135_GAMMA15},
162162306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R136_GAMMA16},
162262306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R137_GAMMA17},
162362306a36Sopenharmony_ci	{0xa0, 0x0b, ZC3XX_R138_GAMMA18},
162462306a36Sopenharmony_ci	{0xa0, 0x09, ZC3XX_R139_GAMMA19},
162562306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R13A_GAMMA1A},
162662306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R13B_GAMMA1B},
162762306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R13C_GAMMA1C},
162862306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R13D_GAMMA1D},
162962306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R13E_GAMMA1E},
163062306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R13F_GAMMA1F},
163162306a36Sopenharmony_ci	{0xa0, 0x66, ZC3XX_R10A_RGB00},	/* matrix */
163262306a36Sopenharmony_ci	{0xa0, 0xed, ZC3XX_R10B_RGB01},
163362306a36Sopenharmony_ci	{0xa0, 0xed, ZC3XX_R10C_RGB02},
163462306a36Sopenharmony_ci	{0xa0, 0xed, ZC3XX_R10D_RGB10},
163562306a36Sopenharmony_ci	{0xa0, 0x66, ZC3XX_R10E_RGB11},
163662306a36Sopenharmony_ci	{0xa0, 0xed, ZC3XX_R10F_RGB12},
163762306a36Sopenharmony_ci	{0xa0, 0xed, ZC3XX_R110_RGB20},
163862306a36Sopenharmony_ci	{0xa0, 0xed, ZC3XX_R111_RGB21},
163962306a36Sopenharmony_ci	{0xa0, 0x66, ZC3XX_R112_RGB22},
164062306a36Sopenharmony_ci	{0xa1, 0x01, 0x0180},
164162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
164262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
164362306a36Sopenharmony_ci /**** set exposure ***/
164462306a36Sopenharmony_ci	{0xaa, 0x13, 0x0031},
164562306a36Sopenharmony_ci	{0xaa, 0x14, 0x0001},
164662306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0004},
164762306a36Sopenharmony_ci	{0xaa, 0x19, 0x00cd},
164862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
164962306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID},
165062306a36Sopenharmony_ci	{0xa0, 0x62, ZC3XX_R192_EXPOSURELIMITLOW},
165162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
165262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
165362306a36Sopenharmony_ci	{0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW},
165462306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
165562306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
165662306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF},
165762306a36Sopenharmony_ci	{0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP},
165862306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R01D_HSYNC_0},
165962306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R01E_HSYNC_1},
166062306a36Sopenharmony_ci	{0xa0, 0x2c, ZC3XX_R01F_HSYNC_2},
166162306a36Sopenharmony_ci	{0xa0, 0x41, ZC3XX_R020_HSYNC_3},
166262306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
166362306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
166462306a36Sopenharmony_ci	{0xa1, 0x01, 0x0180},
166562306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
166662306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R116_RGAIN},
166762306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R117_GGAIN},
166862306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R118_BGAIN},
166962306a36Sopenharmony_ci	{}
167062306a36Sopenharmony_ci};
167162306a36Sopenharmony_cistatic const struct usb_action hdcs2020_50HZ[] = {
167262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
167362306a36Sopenharmony_ci	{0xaa, 0x13, 0x0018},			/* 00,13,18,aa */
167462306a36Sopenharmony_ci	{0xaa, 0x14, 0x0001},			/* 00,14,01,aa */
167562306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0005},			/* 00,0e,05,aa */
167662306a36Sopenharmony_ci	{0xaa, 0x19, 0x001f},			/* 00,19,1f,aa */
167762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
167862306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,02,cc */
167962306a36Sopenharmony_ci	{0xa0, 0x76, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,76,cc */
168062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
168162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
168262306a36Sopenharmony_ci	{0xa0, 0x46, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,46,cc */
168362306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
168462306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
168562306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */
168662306a36Sopenharmony_ci	{0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,28,cc */
168762306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R01D_HSYNC_0}, /* 00,1d,05,cc */
168862306a36Sopenharmony_ci	{0xa0, 0x1a, ZC3XX_R01E_HSYNC_1}, /* 00,1e,1a,cc */
168962306a36Sopenharmony_ci	{0xa0, 0x2f, ZC3XX_R01F_HSYNC_2}, /* 00,1f,2f,cc */
169062306a36Sopenharmony_ci	{}
169162306a36Sopenharmony_ci};
169262306a36Sopenharmony_cistatic const struct usb_action hdcs2020_60HZ[] = {
169362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
169462306a36Sopenharmony_ci	{0xaa, 0x13, 0x0031},			/* 00,13,31,aa */
169562306a36Sopenharmony_ci	{0xaa, 0x14, 0x0001},			/* 00,14,01,aa */
169662306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0004},			/* 00,0e,04,aa */
169762306a36Sopenharmony_ci	{0xaa, 0x19, 0x00cd},			/* 00,19,cd,aa */
169862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
169962306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,02,cc */
170062306a36Sopenharmony_ci	{0xa0, 0x62, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,62,cc */
170162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
170262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
170362306a36Sopenharmony_ci	{0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,3d,cc */
170462306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
170562306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
170662306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,0c,cc */
170762306a36Sopenharmony_ci	{0xa0, 0x28, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,28,cc */
170862306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, /* 00,1d,04,cc */
170962306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R01E_HSYNC_1}, /* 00,1e,18,cc */
171062306a36Sopenharmony_ci	{0xa0, 0x2c, ZC3XX_R01F_HSYNC_2}, /* 00,1f,2c,cc */
171162306a36Sopenharmony_ci	{}
171262306a36Sopenharmony_ci};
171362306a36Sopenharmony_cistatic const struct usb_action hdcs2020_NoFlicker[] = {
171462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
171562306a36Sopenharmony_ci	{0xaa, 0x13, 0x0010},			/* 00,13,10,aa */
171662306a36Sopenharmony_ci	{0xaa, 0x14, 0x0001},			/* 00,14,01,aa */
171762306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0004},			/* 00,0e,04,aa */
171862306a36Sopenharmony_ci	{0xaa, 0x19, 0x0000},			/* 00,19,00,aa */
171962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
172062306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,02,cc */
172162306a36Sopenharmony_ci	{0xa0, 0x70, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,70,cc */
172262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
172362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
172462306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */
172562306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
172662306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
172762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
172862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */
172962306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R01D_HSYNC_0}, /* 00,1d,04,cc */
173062306a36Sopenharmony_ci	{0xa0, 0x17, ZC3XX_R01E_HSYNC_1}, /* 00,1e,17,cc */
173162306a36Sopenharmony_ci	{0xa0, 0x2a, ZC3XX_R01F_HSYNC_2}, /* 00,1f,2a,cc */
173262306a36Sopenharmony_ci	{}
173362306a36Sopenharmony_ci};
173462306a36Sopenharmony_ci
173562306a36Sopenharmony_cistatic const struct usb_action hv7131b_InitialScale[] = {	/* 320x240 */
173662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
173762306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
173862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT},
173962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
174062306a36Sopenharmony_ci	{0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION},
174162306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},	/* 00 */
174262306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
174362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
174462306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
174562306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
174662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
174762306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
174862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
174962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
175062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
175162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
175262306a36Sopenharmony_ci	{0xaa, 0x30, 0x002d},
175362306a36Sopenharmony_ci	{0xaa, 0x01, 0x0005},
175462306a36Sopenharmony_ci	{0xaa, 0x11, 0x0000},
175562306a36Sopenharmony_ci	{0xaa, 0x13, 0x0001},	/* {0xaa, 0x13, 0x0000}, */
175662306a36Sopenharmony_ci	{0xaa, 0x14, 0x0001},
175762306a36Sopenharmony_ci	{0xaa, 0x15, 0x00e8},
175862306a36Sopenharmony_ci	{0xaa, 0x16, 0x0002},
175962306a36Sopenharmony_ci	{0xaa, 0x17, 0x0086},		/* 00,17,88,aa */
176062306a36Sopenharmony_ci	{0xaa, 0x31, 0x0038},
176162306a36Sopenharmony_ci	{0xaa, 0x32, 0x0038},
176262306a36Sopenharmony_ci	{0xaa, 0x33, 0x0038},
176362306a36Sopenharmony_ci	{0xaa, 0x5b, 0x0001},
176462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
176562306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
176662306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
176762306a36Sopenharmony_ci	{0xa0, 0x68, ZC3XX_R18D_YTARGET},
176862306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
176962306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},
177062306a36Sopenharmony_ci	{0xa0, 0xc0, 0x019b},
177162306a36Sopenharmony_ci	{0xa0, 0xa0, 0x019c},
177262306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R188_MINGAIN},
177362306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
177462306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
177562306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
177662306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
177762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
177862306a36Sopenharmony_ci	{0xaa, 0x02, 0x0090},			/* 00,02,80,aa */
177962306a36Sopenharmony_ci	{}
178062306a36Sopenharmony_ci};
178162306a36Sopenharmony_ci
178262306a36Sopenharmony_cistatic const struct usb_action hv7131b_Initial[] = {	/* 640x480*/
178362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
178462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
178562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R010_CMOSSENSORSELECT},
178662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
178762306a36Sopenharmony_ci	{0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
178862306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},	/* 00 */
178962306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
179062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
179162306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
179262306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
179362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
179462306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
179562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
179662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
179762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
179862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
179962306a36Sopenharmony_ci	{0xaa, 0x30, 0x002d},
180062306a36Sopenharmony_ci	{0xaa, 0x01, 0x0005},
180162306a36Sopenharmony_ci	{0xaa, 0x11, 0x0001},
180262306a36Sopenharmony_ci	{0xaa, 0x13, 0x0000},	/* {0xaa, 0x13, 0x0001}; */
180362306a36Sopenharmony_ci	{0xaa, 0x14, 0x0001},
180462306a36Sopenharmony_ci	{0xaa, 0x15, 0x00e6},
180562306a36Sopenharmony_ci	{0xaa, 0x16, 0x0002},
180662306a36Sopenharmony_ci	{0xaa, 0x17, 0x0086},
180762306a36Sopenharmony_ci	{0xaa, 0x31, 0x0038},
180862306a36Sopenharmony_ci	{0xaa, 0x32, 0x0038},
180962306a36Sopenharmony_ci	{0xaa, 0x33, 0x0038},
181062306a36Sopenharmony_ci	{0xaa, 0x5b, 0x0001},
181162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
181262306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
181362306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
181462306a36Sopenharmony_ci	{0xa0, 0x70, ZC3XX_R18D_YTARGET},
181562306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
181662306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},
181762306a36Sopenharmony_ci	{0xa0, 0xc0, 0x019b},
181862306a36Sopenharmony_ci	{0xa0, 0xa0, 0x019c},
181962306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R188_MINGAIN},
182062306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
182162306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
182262306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
182362306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
182462306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
182562306a36Sopenharmony_ci	{0xaa, 0x02, 0x0090},	/* {0xaa, 0x02, 0x0080}, */
182662306a36Sopenharmony_ci	{}
182762306a36Sopenharmony_ci};
182862306a36Sopenharmony_cistatic const struct usb_action hv7131b_50HZ[] = {	/* 640x480*/
182962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},	/* 00,19,00,cc */
183062306a36Sopenharmony_ci	{0xaa, 0x25, 0x0007},			/* 00,25,07,aa */
183162306a36Sopenharmony_ci	{0xaa, 0x26, 0x0053},			/* 00,26,53,aa */
183262306a36Sopenharmony_ci	{0xaa, 0x27, 0x0000},			/* 00,27,00,aa */
183362306a36Sopenharmony_ci	{0xaa, 0x20, 0x0000},			/* 00,20,00,aa */
183462306a36Sopenharmony_ci	{0xaa, 0x21, 0x0050},			/* 00,21,50,aa */
183562306a36Sopenharmony_ci	{0xaa, 0x22, 0x001b},			/* 00,22,1b,aa */
183662306a36Sopenharmony_ci	{0xaa, 0x23, 0x00fc},			/* 00,23,fc,aa */
183762306a36Sopenharmony_ci	{0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,2f,cc */
183862306a36Sopenharmony_ci	{0xa0, 0x9b, ZC3XX_R191_EXPOSURELIMITMID},	/* 01,91,9b,cc */
183962306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW},	/* 01,92,80,cc */
184062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc */
184162306a36Sopenharmony_ci	{0xa0, 0xea, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,ea,cc */
184262306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,60,cc */
184362306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},	/* 01,8c,0c,cc */
184462306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},	/* 01,8f,18,cc */
184562306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF},	/* 01,a9,18,cc */
184662306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},	/* 01,aa,24,cc */
184762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01D_HSYNC_0},	/* 00,1d,00,cc */
184862306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R01E_HSYNC_1},	/* 00,1e,50,cc */
184962306a36Sopenharmony_ci	{0xa0, 0x1b, ZC3XX_R01F_HSYNC_2},	/* 00,1f,1b,cc */
185062306a36Sopenharmony_ci	{0xa0, 0xfc, ZC3XX_R020_HSYNC_3},	/* 00,20,fc,cc */
185162306a36Sopenharmony_ci	{}
185262306a36Sopenharmony_ci};
185362306a36Sopenharmony_cistatic const struct usb_action hv7131b_50HZScale[] = {	/* 320x240 */
185462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},	/* 00,19,00,cc */
185562306a36Sopenharmony_ci	{0xaa, 0x25, 0x0007},			/* 00,25,07,aa */
185662306a36Sopenharmony_ci	{0xaa, 0x26, 0x0053},			/* 00,26,53,aa */
185762306a36Sopenharmony_ci	{0xaa, 0x27, 0x0000},			/* 00,27,00,aa */
185862306a36Sopenharmony_ci	{0xaa, 0x20, 0x0000},			/* 00,20,00,aa */
185962306a36Sopenharmony_ci	{0xaa, 0x21, 0x0050},			/* 00,21,50,aa */
186062306a36Sopenharmony_ci	{0xaa, 0x22, 0x0012},			/* 00,22,12,aa */
186162306a36Sopenharmony_ci	{0xaa, 0x23, 0x0080},			/* 00,23,80,aa */
186262306a36Sopenharmony_ci	{0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,2f,cc */
186362306a36Sopenharmony_ci	{0xa0, 0x9b, ZC3XX_R191_EXPOSURELIMITMID},	/* 01,91,9b,cc */
186462306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW},	/* 01,92,80,cc */
186562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,01,cc */
186662306a36Sopenharmony_ci	{0xa0, 0xd4, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,d4,cc */
186762306a36Sopenharmony_ci	{0xa0, 0xc0, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,c0,cc */
186862306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R18C_AEFREEZE},	/* 01,8c,07,cc */
186962306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R18F_AEUNFREEZE},	/* 01,8f,0f,cc */
187062306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF},	/* 01,a9,18,cc */
187162306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},	/* 01,aa,24,cc */
187262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01D_HSYNC_0},	/* 00,1d,00,cc */
187362306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R01E_HSYNC_1},	/* 00,1e,50,cc */
187462306a36Sopenharmony_ci	{0xa0, 0x12, ZC3XX_R01F_HSYNC_2},	/* 00,1f,12,cc */
187562306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R020_HSYNC_3},	/* 00,20,80,cc */
187662306a36Sopenharmony_ci	{}
187762306a36Sopenharmony_ci};
187862306a36Sopenharmony_cistatic const struct usb_action hv7131b_60HZ[] = {	/* 640x480*/
187962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},	/* 00,19,00,cc */
188062306a36Sopenharmony_ci	{0xaa, 0x25, 0x0007},			/* 00,25,07,aa */
188162306a36Sopenharmony_ci	{0xaa, 0x26, 0x00a1},			/* 00,26,a1,aa */
188262306a36Sopenharmony_ci	{0xaa, 0x27, 0x0020},			/* 00,27,20,aa */
188362306a36Sopenharmony_ci	{0xaa, 0x20, 0x0000},			/* 00,20,00,aa */
188462306a36Sopenharmony_ci	{0xaa, 0x21, 0x0040},			/* 00,21,40,aa */
188562306a36Sopenharmony_ci	{0xaa, 0x22, 0x0013},			/* 00,22,13,aa */
188662306a36Sopenharmony_ci	{0xaa, 0x23, 0x004c},			/* 00,23,4c,aa */
188762306a36Sopenharmony_ci	{0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,2f,cc */
188862306a36Sopenharmony_ci	{0xa0, 0x4d, ZC3XX_R191_EXPOSURELIMITMID},	/* 01,91,4d,cc */
188962306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R192_EXPOSURELIMITLOW},	/* 01,92,60,cc */
189062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc */
189162306a36Sopenharmony_ci	{0xa0, 0xc3, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,c3,cc */
189262306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,50,cc */
189362306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},	/* 01,8c,0c,cc */
189462306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},	/* 01,8f,18,cc */
189562306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF},	/* 01,a9,18,cc */
189662306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},	/* 01,aa,24,cc */
189762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01D_HSYNC_0},	/* 00,1d,00,cc */
189862306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R01E_HSYNC_1},	/* 00,1e,40,cc */
189962306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R01F_HSYNC_2},	/* 00,1f,13,cc */
190062306a36Sopenharmony_ci	{0xa0, 0x4c, ZC3XX_R020_HSYNC_3},	/* 00,20,4c,cc */
190162306a36Sopenharmony_ci	{}
190262306a36Sopenharmony_ci};
190362306a36Sopenharmony_cistatic const struct usb_action hv7131b_60HZScale[] = {	/* 320x240 */
190462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},	/* 00,19,00,cc */
190562306a36Sopenharmony_ci	{0xaa, 0x25, 0x0007},			/* 00,25,07,aa */
190662306a36Sopenharmony_ci	{0xaa, 0x26, 0x00a1},			/* 00,26,a1,aa */
190762306a36Sopenharmony_ci	{0xaa, 0x27, 0x0020},			/* 00,27,20,aa */
190862306a36Sopenharmony_ci	{0xaa, 0x20, 0x0000},			/* 00,20,00,aa */
190962306a36Sopenharmony_ci	{0xaa, 0x21, 0x00a0},			/* 00,21,a0,aa */
191062306a36Sopenharmony_ci	{0xaa, 0x22, 0x0016},			/* 00,22,16,aa */
191162306a36Sopenharmony_ci	{0xaa, 0x23, 0x0040},			/* 00,23,40,aa */
191262306a36Sopenharmony_ci	{0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,2f,cc */
191362306a36Sopenharmony_ci	{0xa0, 0x4d, ZC3XX_R191_EXPOSURELIMITMID},	/* 01,91,4d,cc */
191462306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R192_EXPOSURELIMITLOW},	/* 01,92,60,cc */
191562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,01,cc */
191662306a36Sopenharmony_ci	{0xa0, 0x86, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,86,cc */
191762306a36Sopenharmony_ci	{0xa0, 0xa0, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,a0,cc */
191862306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R18C_AEFREEZE},	/* 01,8c,07,cc */
191962306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R18F_AEUNFREEZE},	/* 01,8f,0f,cc */
192062306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R1A9_DIGITALLIMITDIFF},	/* 01,a9,18,cc */
192162306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},	/* 01,aa,24,cc */
192262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01D_HSYNC_0},	/* 00,1d,00,cc */
192362306a36Sopenharmony_ci	{0xa0, 0xa0, ZC3XX_R01E_HSYNC_1},	/* 00,1e,a0,cc */
192462306a36Sopenharmony_ci	{0xa0, 0x16, ZC3XX_R01F_HSYNC_2},	/* 00,1f,16,cc */
192562306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R020_HSYNC_3},	/* 00,20,40,cc */
192662306a36Sopenharmony_ci	{}
192762306a36Sopenharmony_ci};
192862306a36Sopenharmony_cistatic const struct usb_action hv7131b_NoFlicker[] = {	/* 640x480*/
192962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},	/* 00,19,00,cc */
193062306a36Sopenharmony_ci	{0xaa, 0x25, 0x0003},			/* 00,25,03,aa */
193162306a36Sopenharmony_ci	{0xaa, 0x26, 0x0000},			/* 00,26,00,aa */
193262306a36Sopenharmony_ci	{0xaa, 0x27, 0x0000},			/* 00,27,00,aa */
193362306a36Sopenharmony_ci	{0xaa, 0x20, 0x0000},			/* 00,20,00,aa */
193462306a36Sopenharmony_ci	{0xaa, 0x21, 0x0010},			/* 00,21,10,aa */
193562306a36Sopenharmony_ci	{0xaa, 0x22, 0x0000},			/* 00,22,00,aa */
193662306a36Sopenharmony_ci	{0xaa, 0x23, 0x0003},			/* 00,23,03,aa */
193762306a36Sopenharmony_ci	{0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,2f,cc */
193862306a36Sopenharmony_ci	{0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID},	/* 01,91,f8,cc */
193962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW},	/* 01,92,00,cc */
194062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc */
194162306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,02,cc */
194262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,00,cc */
194362306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},	/* 01,8c,10,cc */
194462306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},	/* 01,8f,20,cc */
194562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},	/* 01,a9,00,cc */
194662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},	/* 01,aa,00,cc */
194762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01D_HSYNC_0},	/* 00,1d,00,cc */
194862306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R01E_HSYNC_1},	/* 00,1e,10,cc */
194962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01F_HSYNC_2},	/* 00,1f,00,cc */
195062306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R020_HSYNC_3},	/* 00,20,03,cc */
195162306a36Sopenharmony_ci	{}
195262306a36Sopenharmony_ci};
195362306a36Sopenharmony_cistatic const struct usb_action hv7131b_NoFlickerScale[] = { /* 320x240 */
195462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},	/* 00,19,00,cc */
195562306a36Sopenharmony_ci	{0xaa, 0x25, 0x0003},			/* 00,25,03,aa */
195662306a36Sopenharmony_ci	{0xaa, 0x26, 0x0000},			/* 00,26,00,aa */
195762306a36Sopenharmony_ci	{0xaa, 0x27, 0x0000},			/* 00,27,00,aa */
195862306a36Sopenharmony_ci	{0xaa, 0x20, 0x0000},			/* 00,20,00,aa */
195962306a36Sopenharmony_ci	{0xaa, 0x21, 0x00a0},			/* 00,21,a0,aa */
196062306a36Sopenharmony_ci	{0xaa, 0x22, 0x0016},			/* 00,22,16,aa */
196162306a36Sopenharmony_ci	{0xaa, 0x23, 0x0040},			/* 00,23,40,aa */
196262306a36Sopenharmony_ci	{0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,2f,cc */
196362306a36Sopenharmony_ci	{0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID},	/* 01,91,f8,cc */
196462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW},	/* 01,92,00,cc */
196562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc */
196662306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,02,cc */
196762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,00,cc */
196862306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},	/* 01,8c,10,cc */
196962306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},	/* 01,8f,20,cc */
197062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},	/* 01,a9,00,cc */
197162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},	/* 01,aa,00,cc */
197262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01D_HSYNC_0},	/* 00,1d,00,cc */
197362306a36Sopenharmony_ci	{0xa0, 0xa0, ZC3XX_R01E_HSYNC_1},	/* 00,1e,a0,cc */
197462306a36Sopenharmony_ci	{0xa0, 0x16, ZC3XX_R01F_HSYNC_2},	/* 00,1f,16,cc */
197562306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R020_HSYNC_3},	/* 00,20,40,cc */
197662306a36Sopenharmony_ci	{}
197762306a36Sopenharmony_ci};
197862306a36Sopenharmony_ci
197962306a36Sopenharmony_ci/* from lPEPI264v.inf (hv7131b!) */
198062306a36Sopenharmony_cistatic const struct usb_action hv7131r_InitialScale[] = {
198162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
198262306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
198362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},
198462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
198562306a36Sopenharmony_ci	{0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION},
198662306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
198762306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
198862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
198962306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
199062306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
199162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
199262306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
199362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
199462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
199562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH},
199662306a36Sopenharmony_ci	{0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},
199762306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH},
199862306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},
199962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
200062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
200162306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
200262306a36Sopenharmony_ci	{0xdd, 0x00, 0x0200},
200362306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
200462306a36Sopenharmony_ci	{0xaa, 0x01, 0x000c},
200562306a36Sopenharmony_ci	{0xaa, 0x11, 0x0000},
200662306a36Sopenharmony_ci	{0xaa, 0x13, 0x0000},
200762306a36Sopenharmony_ci	{0xaa, 0x14, 0x0001},
200862306a36Sopenharmony_ci	{0xaa, 0x15, 0x00e8},
200962306a36Sopenharmony_ci	{0xaa, 0x16, 0x0002},
201062306a36Sopenharmony_ci	{0xaa, 0x17, 0x0088},
201162306a36Sopenharmony_ci	{0xaa, 0x30, 0x000b},
201262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
201362306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
201462306a36Sopenharmony_ci	{0xa0, 0x78, ZC3XX_R18D_YTARGET},
201562306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN},
201662306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},
201762306a36Sopenharmony_ci	{0xa0, 0xc0, 0x019b},
201862306a36Sopenharmony_ci	{0xa0, 0xa0, 0x019c},
201962306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
202062306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
202162306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
202262306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
202362306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
202462306a36Sopenharmony_ci	{}
202562306a36Sopenharmony_ci};
202662306a36Sopenharmony_cistatic const struct usb_action hv7131r_Initial[] = {
202762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
202862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
202962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},
203062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
203162306a36Sopenharmony_ci	{0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION},
203262306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
203362306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
203462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
203562306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
203662306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
203762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
203862306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
203962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
204062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
204162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH},
204262306a36Sopenharmony_ci	{0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW},
204362306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH},
204462306a36Sopenharmony_ci	{0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW},
204562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
204662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
204762306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
204862306a36Sopenharmony_ci	{0xdd, 0x00, 0x0200},
204962306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
205062306a36Sopenharmony_ci	{0xaa, 0x01, 0x000c},
205162306a36Sopenharmony_ci	{0xaa, 0x11, 0x0000},
205262306a36Sopenharmony_ci	{0xaa, 0x13, 0x0000},
205362306a36Sopenharmony_ci	{0xaa, 0x14, 0x0001},
205462306a36Sopenharmony_ci	{0xaa, 0x15, 0x00e6},
205562306a36Sopenharmony_ci	{0xaa, 0x16, 0x0002},
205662306a36Sopenharmony_ci	{0xaa, 0x17, 0x0086},
205762306a36Sopenharmony_ci	{0xaa, 0x30, 0x000b},
205862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
205962306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
206062306a36Sopenharmony_ci	{0xa0, 0x78, ZC3XX_R18D_YTARGET},
206162306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN},
206262306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},
206362306a36Sopenharmony_ci	{0xa0, 0xc0, 0x019b},
206462306a36Sopenharmony_ci	{0xa0, 0xa0, 0x019c},
206562306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
206662306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
206762306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
206862306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
206962306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
207062306a36Sopenharmony_ci	{}
207162306a36Sopenharmony_ci};
207262306a36Sopenharmony_cistatic const struct usb_action hv7131r_50HZ[] = {
207362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
207462306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R190_EXPOSURELIMITHIGH},
207562306a36Sopenharmony_ci	{0xa0, 0x68, ZC3XX_R191_EXPOSURELIMITMID},
207662306a36Sopenharmony_ci	{0xa0, 0xa0, ZC3XX_R192_EXPOSURELIMITLOW},
207762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
207862306a36Sopenharmony_ci	{0xa0, 0xea, ZC3XX_R196_ANTIFLICKERMID},
207962306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R197_ANTIFLICKERLOW},
208062306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R18C_AEFREEZE},
208162306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
208262306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
208362306a36Sopenharmony_ci	{0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
208462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01D_HSYNC_0},
208562306a36Sopenharmony_ci	{0xa0, 0xd0, ZC3XX_R01E_HSYNC_1},
208662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01F_HSYNC_2},
208762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R020_HSYNC_3},
208862306a36Sopenharmony_ci	{}
208962306a36Sopenharmony_ci};
209062306a36Sopenharmony_cistatic const struct usb_action hv7131r_50HZScale[] = {
209162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
209262306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R190_EXPOSURELIMITHIGH},
209362306a36Sopenharmony_ci	{0xa0, 0xd1, ZC3XX_R191_EXPOSURELIMITMID},
209462306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R192_EXPOSURELIMITLOW},
209562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH},
209662306a36Sopenharmony_ci	{0xa0, 0xd4, ZC3XX_R196_ANTIFLICKERMID},
209762306a36Sopenharmony_ci	{0xa0, 0xc0, ZC3XX_R197_ANTIFLICKERLOW},
209862306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R18C_AEFREEZE},
209962306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
210062306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
210162306a36Sopenharmony_ci	{0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
210262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01D_HSYNC_0},
210362306a36Sopenharmony_ci	{0xa0, 0xd0, ZC3XX_R01E_HSYNC_1},
210462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01F_HSYNC_2},
210562306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R020_HSYNC_3},
210662306a36Sopenharmony_ci	{}
210762306a36Sopenharmony_ci};
210862306a36Sopenharmony_cistatic const struct usb_action hv7131r_60HZ[] = {
210962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
211062306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R190_EXPOSURELIMITHIGH},
211162306a36Sopenharmony_ci	{0xa0, 0x1a, ZC3XX_R191_EXPOSURELIMITMID},
211262306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW},
211362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
211462306a36Sopenharmony_ci	{0xa0, 0xc3, ZC3XX_R196_ANTIFLICKERMID},
211562306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R197_ANTIFLICKERLOW},
211662306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R18C_AEFREEZE},
211762306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
211862306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
211962306a36Sopenharmony_ci	{0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
212062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01D_HSYNC_0},
212162306a36Sopenharmony_ci	{0xa0, 0xd0, ZC3XX_R01E_HSYNC_1},
212262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01F_HSYNC_2},
212362306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R020_HSYNC_3},
212462306a36Sopenharmony_ci	{}
212562306a36Sopenharmony_ci};
212662306a36Sopenharmony_cistatic const struct usb_action hv7131r_60HZScale[] = {
212762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
212862306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R190_EXPOSURELIMITHIGH},
212962306a36Sopenharmony_ci	{0xa0, 0x35, ZC3XX_R191_EXPOSURELIMITMID},
213062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW},
213162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R195_ANTIFLICKERHIGH},
213262306a36Sopenharmony_ci	{0xa0, 0x86, ZC3XX_R196_ANTIFLICKERMID},
213362306a36Sopenharmony_ci	{0xa0, 0xa0, ZC3XX_R197_ANTIFLICKERLOW},
213462306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R18C_AEFREEZE},
213562306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
213662306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
213762306a36Sopenharmony_ci	{0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
213862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01D_HSYNC_0},
213962306a36Sopenharmony_ci	{0xa0, 0xd0, ZC3XX_R01E_HSYNC_1},
214062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01F_HSYNC_2},
214162306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R020_HSYNC_3},
214262306a36Sopenharmony_ci	{}
214362306a36Sopenharmony_ci};
214462306a36Sopenharmony_cistatic const struct usb_action hv7131r_NoFlicker[] = {
214562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
214662306a36Sopenharmony_ci	{0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH},
214762306a36Sopenharmony_ci	{0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID},
214862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW},
214962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
215062306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R196_ANTIFLICKERMID},
215162306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R197_ANTIFLICKERLOW},
215262306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
215362306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
215462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
215562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
215662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01D_HSYNC_0},
215762306a36Sopenharmony_ci	{0xa0, 0xd0, ZC3XX_R01E_HSYNC_1},
215862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01F_HSYNC_2},
215962306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R020_HSYNC_3},
216062306a36Sopenharmony_ci	{}
216162306a36Sopenharmony_ci};
216262306a36Sopenharmony_cistatic const struct usb_action hv7131r_NoFlickerScale[] = {
216362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
216462306a36Sopenharmony_ci	{0xa0, 0x2f, ZC3XX_R190_EXPOSURELIMITHIGH},
216562306a36Sopenharmony_ci	{0xa0, 0xf8, ZC3XX_R191_EXPOSURELIMITMID},
216662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW},
216762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
216862306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R196_ANTIFLICKERMID},
216962306a36Sopenharmony_ci	{0xa0, 0xb0, ZC3XX_R197_ANTIFLICKERLOW},
217062306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
217162306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
217262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
217362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
217462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01D_HSYNC_0},
217562306a36Sopenharmony_ci	{0xa0, 0xd0, ZC3XX_R01E_HSYNC_1},
217662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R01F_HSYNC_2},
217762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R020_HSYNC_3},
217862306a36Sopenharmony_ci	{}
217962306a36Sopenharmony_ci};
218062306a36Sopenharmony_ci
218162306a36Sopenharmony_cistatic const struct usb_action icm105a_InitialScale[] = {
218262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
218362306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
218462306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
218562306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R010_CMOSSENSORSELECT},
218662306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
218762306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
218862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
218962306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
219062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
219162306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
219262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
219362306a36Sopenharmony_ci	{0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR},
219462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R097_WINYSTARTHIGH},
219562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R098_WINYSTARTLOW},
219662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R099_WINXSTARTHIGH},
219762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R09A_WINXSTARTLOW},
219862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R11A_FIRSTYLOW},
219962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R11C_FIRSTXLOW},
220062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH},
220162306a36Sopenharmony_ci	{0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},
220262306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH},
220362306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},
220462306a36Sopenharmony_ci	{0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
220562306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
220662306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
220762306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
220862306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
220962306a36Sopenharmony_ci	{0xaa, 0x01, 0x0010},
221062306a36Sopenharmony_ci	{0xaa, 0x03, 0x0000},
221162306a36Sopenharmony_ci	{0xaa, 0x04, 0x0001},
221262306a36Sopenharmony_ci	{0xaa, 0x05, 0x0020},
221362306a36Sopenharmony_ci	{0xaa, 0x06, 0x0001},
221462306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
221562306a36Sopenharmony_ci	{0xaa, 0x03, 0x0001},
221662306a36Sopenharmony_ci	{0xaa, 0x04, 0x0011},
221762306a36Sopenharmony_ci	{0xaa, 0x05, 0x00a0},
221862306a36Sopenharmony_ci	{0xaa, 0x06, 0x0001},
221962306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
222062306a36Sopenharmony_ci	{0xaa, 0x03, 0x0002},
222162306a36Sopenharmony_ci	{0xaa, 0x04, 0x0013},
222262306a36Sopenharmony_ci	{0xaa, 0x05, 0x0020},
222362306a36Sopenharmony_ci	{0xaa, 0x06, 0x0001},
222462306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
222562306a36Sopenharmony_ci	{0xaa, 0x03, 0x0003},
222662306a36Sopenharmony_ci	{0xaa, 0x04, 0x0015},
222762306a36Sopenharmony_ci	{0xaa, 0x05, 0x0020},
222862306a36Sopenharmony_ci	{0xaa, 0x06, 0x0005},
222962306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
223062306a36Sopenharmony_ci	{0xaa, 0x03, 0x0004},
223162306a36Sopenharmony_ci	{0xaa, 0x04, 0x0017},
223262306a36Sopenharmony_ci	{0xaa, 0x05, 0x0020},
223362306a36Sopenharmony_ci	{0xaa, 0x06, 0x000d},
223462306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
223562306a36Sopenharmony_ci	{0xaa, 0x03, 0x0005},
223662306a36Sopenharmony_ci	{0xaa, 0x04, 0x0019},
223762306a36Sopenharmony_ci	{0xaa, 0x05, 0x0020},
223862306a36Sopenharmony_ci	{0xaa, 0x06, 0x0005},
223962306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
224062306a36Sopenharmony_ci	{0xaa, 0x03, 0x0006},
224162306a36Sopenharmony_ci	{0xaa, 0x04, 0x0017},
224262306a36Sopenharmony_ci	{0xaa, 0x05, 0x0026},
224362306a36Sopenharmony_ci	{0xaa, 0x06, 0x0005},
224462306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
224562306a36Sopenharmony_ci	{0xaa, 0x03, 0x0007},
224662306a36Sopenharmony_ci	{0xaa, 0x04, 0x0019},
224762306a36Sopenharmony_ci	{0xaa, 0x05, 0x0022},
224862306a36Sopenharmony_ci	{0xaa, 0x06, 0x0005},
224962306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
225062306a36Sopenharmony_ci	{0xaa, 0x03, 0x0008},
225162306a36Sopenharmony_ci	{0xaa, 0x04, 0x0021},
225262306a36Sopenharmony_ci	{0xaa, 0x05, 0x00aa},
225362306a36Sopenharmony_ci	{0xaa, 0x06, 0x0005},
225462306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
225562306a36Sopenharmony_ci	{0xaa, 0x03, 0x0009},
225662306a36Sopenharmony_ci	{0xaa, 0x04, 0x0023},
225762306a36Sopenharmony_ci	{0xaa, 0x05, 0x00aa},
225862306a36Sopenharmony_ci	{0xaa, 0x06, 0x000d},
225962306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
226062306a36Sopenharmony_ci	{0xaa, 0x03, 0x000a},
226162306a36Sopenharmony_ci	{0xaa, 0x04, 0x0025},
226262306a36Sopenharmony_ci	{0xaa, 0x05, 0x00aa},
226362306a36Sopenharmony_ci	{0xaa, 0x06, 0x0005},
226462306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
226562306a36Sopenharmony_ci	{0xaa, 0x03, 0x000b},
226662306a36Sopenharmony_ci	{0xaa, 0x04, 0x00ec},
226762306a36Sopenharmony_ci	{0xaa, 0x05, 0x002e},
226862306a36Sopenharmony_ci	{0xaa, 0x06, 0x0005},
226962306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
227062306a36Sopenharmony_ci	{0xaa, 0x03, 0x000c},
227162306a36Sopenharmony_ci	{0xaa, 0x04, 0x00fa},
227262306a36Sopenharmony_ci	{0xaa, 0x05, 0x002a},
227362306a36Sopenharmony_ci	{0xaa, 0x06, 0x0005},
227462306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
227562306a36Sopenharmony_ci	{0xaa, 0x07, 0x000d},
227662306a36Sopenharmony_ci	{0xaa, 0x01, 0x0005},
227762306a36Sopenharmony_ci	{0xaa, 0x94, 0x0002},
227862306a36Sopenharmony_ci	{0xaa, 0x90, 0x0000},
227962306a36Sopenharmony_ci	{0xaa, 0x91, 0x001f},
228062306a36Sopenharmony_ci	{0xaa, 0x10, 0x0064},
228162306a36Sopenharmony_ci	{0xaa, 0x9b, 0x00f0},
228262306a36Sopenharmony_ci	{0xaa, 0x9c, 0x0002},
228362306a36Sopenharmony_ci	{0xaa, 0x14, 0x001a},
228462306a36Sopenharmony_ci	{0xaa, 0x20, 0x0080},
228562306a36Sopenharmony_ci	{0xaa, 0x22, 0x0080},
228662306a36Sopenharmony_ci	{0xaa, 0x24, 0x0080},
228762306a36Sopenharmony_ci	{0xaa, 0x26, 0x0080},
228862306a36Sopenharmony_ci	{0xaa, 0x00, 0x0084},
228962306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
229062306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
229162306a36Sopenharmony_ci	{0xaa, 0xa8, 0x00c0},
229262306a36Sopenharmony_ci	{0xa1, 0x01, 0x0002},
229362306a36Sopenharmony_ci	{0xa1, 0x01, 0x0008},
229462306a36Sopenharmony_ci	{0xa1, 0x01, 0x0180},
229562306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE},
229662306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R116_RGAIN},
229762306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R117_GGAIN},
229862306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R118_BGAIN},
229962306a36Sopenharmony_ci	{0xa1, 0x01, 0x0008},
230062306a36Sopenharmony_ci
230162306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},	/* clock ? */
230262306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},	/* sharpness+ */
230362306a36Sopenharmony_ci	{0xa1, 0x01, 0x01c8},
230462306a36Sopenharmony_ci	{0xa1, 0x01, 0x01c9},
230562306a36Sopenharmony_ci	{0xa1, 0x01, 0x01ca},
230662306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05},	/* sharpness- */
230762306a36Sopenharmony_ci	{0xa0, 0x52, ZC3XX_R10A_RGB00},	/* matrix */
230862306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R10B_RGB01},
230962306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R10C_RGB02},
231062306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R10D_RGB10},
231162306a36Sopenharmony_ci	{0xa0, 0x52, ZC3XX_R10E_RGB11},
231262306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R10F_RGB12},
231362306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R110_RGB20},
231462306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R111_RGB21},
231562306a36Sopenharmony_ci	{0xa0, 0x52, ZC3XX_R112_RGB22},
231662306a36Sopenharmony_ci	{0xa1, 0x01, 0x0180},
231762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
231862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
231962306a36Sopenharmony_ci	{0xaa, 0x0d, 0x0003},
232062306a36Sopenharmony_ci	{0xaa, 0x0c, 0x008c},
232162306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0095},
232262306a36Sopenharmony_ci	{0xaa, 0x0f, 0x0002},
232362306a36Sopenharmony_ci	{0xaa, 0x1c, 0x0094},
232462306a36Sopenharmony_ci	{0xaa, 0x1d, 0x0002},
232562306a36Sopenharmony_ci	{0xaa, 0x20, 0x0080},
232662306a36Sopenharmony_ci	{0xaa, 0x22, 0x0080},
232762306a36Sopenharmony_ci	{0xaa, 0x24, 0x0080},
232862306a36Sopenharmony_ci	{0xaa, 0x26, 0x0080},
232962306a36Sopenharmony_ci	{0xaa, 0x00, 0x0084},
233062306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH},
233162306a36Sopenharmony_ci	{0xa0, 0x94, ZC3XX_R0A4_EXPOSURETIMELOW},
233262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
233362306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID},
233462306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW},
233562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
233662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
233762306a36Sopenharmony_ci	{0xa0, 0x84, ZC3XX_R197_ANTIFLICKERLOW},
233862306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
233962306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
234062306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
234162306a36Sopenharmony_ci	{0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP},
234262306a36Sopenharmony_ci	{0xa0, 0xe3, ZC3XX_R01D_HSYNC_0},
234362306a36Sopenharmony_ci	{0xa0, 0xec, ZC3XX_R01E_HSYNC_1},
234462306a36Sopenharmony_ci	{0xa0, 0xf5, ZC3XX_R01F_HSYNC_2},
234562306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},
234662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
234762306a36Sopenharmony_ci	{0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN},
234862306a36Sopenharmony_ci	{0xa0, 0xc0, ZC3XX_R11D_GLOBALGAIN},
234962306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
235062306a36Sopenharmony_ci	{0xa1, 0x01, 0x0180},
235162306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
235262306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R116_RGAIN},
235362306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R117_GGAIN},
235462306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R118_BGAIN},
235562306a36Sopenharmony_ci	{}
235662306a36Sopenharmony_ci};
235762306a36Sopenharmony_ci
235862306a36Sopenharmony_cistatic const struct usb_action icm105a_Initial[] = {
235962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
236062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
236162306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
236262306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R010_CMOSSENSORSELECT},
236362306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
236462306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
236562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
236662306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
236762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
236862306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
236962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
237062306a36Sopenharmony_ci	{0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR},
237162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R097_WINYSTARTHIGH},
237262306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R098_WINYSTARTLOW},
237362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R099_WINXSTARTHIGH},
237462306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R09A_WINXSTARTLOW},
237562306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R11A_FIRSTYLOW},
237662306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R11C_FIRSTXLOW},
237762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH},
237862306a36Sopenharmony_ci	{0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW},
237962306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH},
238062306a36Sopenharmony_ci	{0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW},
238162306a36Sopenharmony_ci	{0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION},
238262306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
238362306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
238462306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
238562306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
238662306a36Sopenharmony_ci	{0xaa, 0x01, 0x0010},
238762306a36Sopenharmony_ci	{0xaa, 0x03, 0x0000},
238862306a36Sopenharmony_ci	{0xaa, 0x04, 0x0001},
238962306a36Sopenharmony_ci	{0xaa, 0x05, 0x0020},
239062306a36Sopenharmony_ci	{0xaa, 0x06, 0x0001},
239162306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
239262306a36Sopenharmony_ci	{0xaa, 0x03, 0x0001},
239362306a36Sopenharmony_ci	{0xaa, 0x04, 0x0011},
239462306a36Sopenharmony_ci	{0xaa, 0x05, 0x00a0},
239562306a36Sopenharmony_ci	{0xaa, 0x06, 0x0001},
239662306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
239762306a36Sopenharmony_ci	{0xaa, 0x03, 0x0002},
239862306a36Sopenharmony_ci	{0xaa, 0x04, 0x0013},
239962306a36Sopenharmony_ci	{0xaa, 0x05, 0x0020},
240062306a36Sopenharmony_ci	{0xaa, 0x06, 0x0001},
240162306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
240262306a36Sopenharmony_ci	{0xaa, 0x03, 0x0003},
240362306a36Sopenharmony_ci	{0xaa, 0x04, 0x0015},
240462306a36Sopenharmony_ci	{0xaa, 0x05, 0x0020},
240562306a36Sopenharmony_ci	{0xaa, 0x06, 0x0005},
240662306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
240762306a36Sopenharmony_ci	{0xaa, 0x03, 0x0004},
240862306a36Sopenharmony_ci	{0xaa, 0x04, 0x0017},
240962306a36Sopenharmony_ci	{0xaa, 0x05, 0x0020},
241062306a36Sopenharmony_ci	{0xaa, 0x06, 0x000d},
241162306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
241262306a36Sopenharmony_ci	{0xaa, 0x03, 0x0005},
241362306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R092_I2CADDRESSSELECT},
241462306a36Sopenharmony_ci	{0xa0, 0x19, ZC3XX_R093_I2CSETVALUE},
241562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R090_I2CCOMMAND},
241662306a36Sopenharmony_ci	{0xa1, 0x01, 0x0091},
241762306a36Sopenharmony_ci	{0xaa, 0x05, 0x0020},
241862306a36Sopenharmony_ci	{0xaa, 0x06, 0x0005},
241962306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
242062306a36Sopenharmony_ci	{0xaa, 0x03, 0x0006},
242162306a36Sopenharmony_ci	{0xaa, 0x04, 0x0017},
242262306a36Sopenharmony_ci	{0xaa, 0x05, 0x0026},
242362306a36Sopenharmony_ci	{0xaa, 0x06, 0x0005},
242462306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
242562306a36Sopenharmony_ci	{0xaa, 0x03, 0x0007},
242662306a36Sopenharmony_ci	{0xaa, 0x04, 0x0019},
242762306a36Sopenharmony_ci	{0xaa, 0x05, 0x0022},
242862306a36Sopenharmony_ci	{0xaa, 0x06, 0x0005},
242962306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
243062306a36Sopenharmony_ci	{0xaa, 0x03, 0x0008},
243162306a36Sopenharmony_ci	{0xaa, 0x04, 0x0021},
243262306a36Sopenharmony_ci	{0xaa, 0x05, 0x00aa},
243362306a36Sopenharmony_ci	{0xaa, 0x06, 0x0005},
243462306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
243562306a36Sopenharmony_ci	{0xaa, 0x03, 0x0009},
243662306a36Sopenharmony_ci	{0xaa, 0x04, 0x0023},
243762306a36Sopenharmony_ci	{0xaa, 0x05, 0x00aa},
243862306a36Sopenharmony_ci	{0xaa, 0x06, 0x000d},
243962306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
244062306a36Sopenharmony_ci	{0xaa, 0x03, 0x000a},
244162306a36Sopenharmony_ci	{0xaa, 0x04, 0x0025},
244262306a36Sopenharmony_ci	{0xaa, 0x05, 0x00aa},
244362306a36Sopenharmony_ci	{0xaa, 0x06, 0x0005},
244462306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
244562306a36Sopenharmony_ci	{0xaa, 0x03, 0x000b},
244662306a36Sopenharmony_ci	{0xaa, 0x04, 0x00ec},
244762306a36Sopenharmony_ci	{0xaa, 0x05, 0x002e},
244862306a36Sopenharmony_ci	{0xaa, 0x06, 0x0005},
244962306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
245062306a36Sopenharmony_ci	{0xaa, 0x03, 0x000c},
245162306a36Sopenharmony_ci	{0xaa, 0x04, 0x00fa},
245262306a36Sopenharmony_ci	{0xaa, 0x05, 0x002a},
245362306a36Sopenharmony_ci	{0xaa, 0x06, 0x0005},
245462306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
245562306a36Sopenharmony_ci	{0xaa, 0x07, 0x000d},
245662306a36Sopenharmony_ci	{0xaa, 0x01, 0x0005},
245762306a36Sopenharmony_ci	{0xaa, 0x94, 0x0002},
245862306a36Sopenharmony_ci	{0xaa, 0x90, 0x0000},
245962306a36Sopenharmony_ci	{0xaa, 0x91, 0x0010},
246062306a36Sopenharmony_ci	{0xaa, 0x10, 0x0064},
246162306a36Sopenharmony_ci	{0xaa, 0x9b, 0x00f0},
246262306a36Sopenharmony_ci	{0xaa, 0x9c, 0x0002},
246362306a36Sopenharmony_ci	{0xaa, 0x14, 0x001a},
246462306a36Sopenharmony_ci	{0xaa, 0x20, 0x0080},
246562306a36Sopenharmony_ci	{0xaa, 0x22, 0x0080},
246662306a36Sopenharmony_ci	{0xaa, 0x24, 0x0080},
246762306a36Sopenharmony_ci	{0xaa, 0x26, 0x0080},
246862306a36Sopenharmony_ci	{0xaa, 0x00, 0x0084},
246962306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
247062306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
247162306a36Sopenharmony_ci	{0xaa, 0xa8, 0x0080},
247262306a36Sopenharmony_ci	{0xa0, 0x78, ZC3XX_R18D_YTARGET},
247362306a36Sopenharmony_ci	{0xa1, 0x01, 0x0002},
247462306a36Sopenharmony_ci	{0xa1, 0x01, 0x0008},
247562306a36Sopenharmony_ci	{0xa1, 0x01, 0x0180},
247662306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE},
247762306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R116_RGAIN},
247862306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R117_GGAIN},
247962306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R118_BGAIN},
248062306a36Sopenharmony_ci	{0xa1, 0x01, 0x0008},
248162306a36Sopenharmony_ci
248262306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},	/* clock ? */
248362306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},	/* sharpness+ */
248462306a36Sopenharmony_ci	{0xa1, 0x01, 0x01c8},
248562306a36Sopenharmony_ci	{0xa1, 0x01, 0x01c9},
248662306a36Sopenharmony_ci	{0xa1, 0x01, 0x01ca},
248762306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05},	/* sharpness- */
248862306a36Sopenharmony_ci
248962306a36Sopenharmony_ci	{0xa0, 0x52, ZC3XX_R10A_RGB00},	/* matrix */
249062306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R10B_RGB01},
249162306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R10C_RGB02},
249262306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R10D_RGB10},
249362306a36Sopenharmony_ci	{0xa0, 0x52, ZC3XX_R10E_RGB11},
249462306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R10F_RGB12},
249562306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R110_RGB20},
249662306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R111_RGB21},
249762306a36Sopenharmony_ci	{0xa0, 0x52, ZC3XX_R112_RGB22},
249862306a36Sopenharmony_ci	{0xa1, 0x01, 0x0180},
249962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
250062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
250162306a36Sopenharmony_ci	{0xaa, 0x0d, 0x0003},
250262306a36Sopenharmony_ci	{0xaa, 0x0c, 0x0020},
250362306a36Sopenharmony_ci	{0xaa, 0x0e, 0x000e},
250462306a36Sopenharmony_ci	{0xaa, 0x0f, 0x0002},
250562306a36Sopenharmony_ci	{0xaa, 0x1c, 0x000d},
250662306a36Sopenharmony_ci	{0xaa, 0x1d, 0x0002},
250762306a36Sopenharmony_ci	{0xaa, 0x20, 0x0080},
250862306a36Sopenharmony_ci	{0xaa, 0x22, 0x0080},
250962306a36Sopenharmony_ci	{0xaa, 0x24, 0x0080},
251062306a36Sopenharmony_ci	{0xaa, 0x26, 0x0080},
251162306a36Sopenharmony_ci	{0xaa, 0x00, 0x0084},
251262306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH},
251362306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R0A4_EXPOSURETIMELOW},
251462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
251562306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID},
251662306a36Sopenharmony_ci	{0xa0, 0x1a, ZC3XX_R192_EXPOSURELIMITLOW},
251762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
251862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
251962306a36Sopenharmony_ci	{0xa0, 0x4b, ZC3XX_R197_ANTIFLICKERLOW},
252062306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
252162306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
252262306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
252362306a36Sopenharmony_ci	{0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP},
252462306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R01D_HSYNC_0},
252562306a36Sopenharmony_ci	{0xa0, 0xd8, ZC3XX_R01E_HSYNC_1},
252662306a36Sopenharmony_ci	{0xa0, 0xea, ZC3XX_R01F_HSYNC_2},
252762306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},
252862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN},
252962306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
253062306a36Sopenharmony_ci	{0xa1, 0x01, 0x0180},
253162306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
253262306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R116_RGAIN},
253362306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R117_GGAIN},
253462306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R118_BGAIN},
253562306a36Sopenharmony_ci	{}
253662306a36Sopenharmony_ci};
253762306a36Sopenharmony_cistatic const struct usb_action icm105a_50HZScale[] = {
253862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
253962306a36Sopenharmony_ci	{0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */
254062306a36Sopenharmony_ci	{0xaa, 0x0c, 0x0020}, /* 00,0c,20,aa */
254162306a36Sopenharmony_ci	{0xaa, 0x0e, 0x000e}, /* 00,0e,0e,aa */
254262306a36Sopenharmony_ci	{0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */
254362306a36Sopenharmony_ci	{0xaa, 0x1c, 0x000d}, /* 00,1c,0d,aa */
254462306a36Sopenharmony_ci	{0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */
254562306a36Sopenharmony_ci	{0xaa, 0x20, 0x0080}, /* 00,20,80,aa */
254662306a36Sopenharmony_ci	{0xaa, 0x22, 0x0080}, /* 00,22,80,aa */
254762306a36Sopenharmony_ci	{0xaa, 0x24, 0x0080}, /* 00,24,80,aa */
254862306a36Sopenharmony_ci	{0xaa, 0x26, 0x0080}, /* 00,26,80,aa */
254962306a36Sopenharmony_ci	{0xaa, 0x00, 0x0084}, /* 00,00,84,aa */
255062306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */
255162306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,0d,cc */
255262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
255362306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */
255462306a36Sopenharmony_ci	{0xa0, 0x1a, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,1a,cc */
255562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
255662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
255762306a36Sopenharmony_ci	{0xa0, 0x4b, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,4b,cc */
255862306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
255962306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
256062306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */
256162306a36Sopenharmony_ci	{0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */
256262306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c8,cc */
256362306a36Sopenharmony_ci	{0xa0, 0xd8, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d8,cc */
256462306a36Sopenharmony_ci	{0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ea,cc */
256562306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
256662306a36Sopenharmony_ci	{}
256762306a36Sopenharmony_ci};
256862306a36Sopenharmony_cistatic const struct usb_action icm105a_50HZ[] = {
256962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
257062306a36Sopenharmony_ci	{0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */
257162306a36Sopenharmony_ci	{0xaa, 0x0c, 0x008c}, /* 00,0c,8c,aa */
257262306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0095}, /* 00,0e,95,aa */
257362306a36Sopenharmony_ci	{0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */
257462306a36Sopenharmony_ci	{0xaa, 0x1c, 0x0094}, /* 00,1c,94,aa */
257562306a36Sopenharmony_ci	{0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */
257662306a36Sopenharmony_ci	{0xaa, 0x20, 0x0080}, /* 00,20,80,aa */
257762306a36Sopenharmony_ci	{0xaa, 0x22, 0x0080}, /* 00,22,80,aa */
257862306a36Sopenharmony_ci	{0xaa, 0x24, 0x0080}, /* 00,24,80,aa */
257962306a36Sopenharmony_ci	{0xaa, 0x26, 0x0080}, /* 00,26,80,aa */
258062306a36Sopenharmony_ci	{0xaa, 0x00, 0x0084}, /* 00,00,84,aa */
258162306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */
258262306a36Sopenharmony_ci	{0xa0, 0x94, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,94,cc */
258362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
258462306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */
258562306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,20,cc */
258662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
258762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
258862306a36Sopenharmony_ci	{0xa0, 0x84, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,84,cc */
258962306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
259062306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
259162306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */
259262306a36Sopenharmony_ci	{0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */
259362306a36Sopenharmony_ci	{0xa0, 0xe3, ZC3XX_R01D_HSYNC_0}, /* 00,1d,e3,cc */
259462306a36Sopenharmony_ci	{0xa0, 0xec, ZC3XX_R01E_HSYNC_1}, /* 00,1e,ec,cc */
259562306a36Sopenharmony_ci	{0xa0, 0xf5, ZC3XX_R01F_HSYNC_2}, /* 00,1f,f5,cc */
259662306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
259762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, /* 01,a7,00,cc */
259862306a36Sopenharmony_ci	{0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,c0,cc */
259962306a36Sopenharmony_ci	{}
260062306a36Sopenharmony_ci};
260162306a36Sopenharmony_cistatic const struct usb_action icm105a_60HZScale[] = {
260262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
260362306a36Sopenharmony_ci	{0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */
260462306a36Sopenharmony_ci	{0xaa, 0x0c, 0x0004}, /* 00,0c,04,aa */
260562306a36Sopenharmony_ci	{0xaa, 0x0e, 0x000d}, /* 00,0e,0d,aa */
260662306a36Sopenharmony_ci	{0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */
260762306a36Sopenharmony_ci	{0xaa, 0x1c, 0x0008}, /* 00,1c,08,aa */
260862306a36Sopenharmony_ci	{0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */
260962306a36Sopenharmony_ci	{0xaa, 0x20, 0x0080}, /* 00,20,80,aa */
261062306a36Sopenharmony_ci	{0xaa, 0x22, 0x0080}, /* 00,22,80,aa */
261162306a36Sopenharmony_ci	{0xaa, 0x24, 0x0080}, /* 00,24,80,aa */
261262306a36Sopenharmony_ci	{0xaa, 0x26, 0x0080}, /* 00,26,80,aa */
261362306a36Sopenharmony_ci	{0xaa, 0x00, 0x0084}, /* 00,00,84,aa */
261462306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */
261562306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,08,cc */
261662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
261762306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */
261862306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,10,cc */
261962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
262062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
262162306a36Sopenharmony_ci	{0xa0, 0x41, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,41,cc */
262262306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
262362306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
262462306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */
262562306a36Sopenharmony_ci	{0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */
262662306a36Sopenharmony_ci	{0xa0, 0xc1, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c1,cc */
262762306a36Sopenharmony_ci	{0xa0, 0xd4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d4,cc */
262862306a36Sopenharmony_ci	{0xa0, 0xe8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e8,cc */
262962306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
263062306a36Sopenharmony_ci	{}
263162306a36Sopenharmony_ci};
263262306a36Sopenharmony_cistatic const struct usb_action icm105a_60HZ[] = {
263362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
263462306a36Sopenharmony_ci	{0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */
263562306a36Sopenharmony_ci	{0xaa, 0x0c, 0x0008}, /* 00,0c,08,aa */
263662306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0086}, /* 00,0e,86,aa */
263762306a36Sopenharmony_ci	{0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */
263862306a36Sopenharmony_ci	{0xaa, 0x1c, 0x0085}, /* 00,1c,85,aa */
263962306a36Sopenharmony_ci	{0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */
264062306a36Sopenharmony_ci	{0xaa, 0x20, 0x0080}, /* 00,20,80,aa */
264162306a36Sopenharmony_ci	{0xaa, 0x22, 0x0080}, /* 00,22,80,aa */
264262306a36Sopenharmony_ci	{0xaa, 0x24, 0x0080}, /* 00,24,80,aa */
264362306a36Sopenharmony_ci	{0xaa, 0x26, 0x0080}, /* 00,26,80,aa */
264462306a36Sopenharmony_ci	{0xaa, 0x00, 0x0084}, /* 00,00,84,aa */
264562306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */
264662306a36Sopenharmony_ci	{0xa0, 0x85, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,85,cc */
264762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
264862306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */
264962306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,08,cc */
265062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
265162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
265262306a36Sopenharmony_ci	{0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,81,cc */
265362306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
265462306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
265562306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */
265662306a36Sopenharmony_ci	{0xa0, 0x12, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,12,cc */
265762306a36Sopenharmony_ci	{0xa0, 0xc2, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c2,cc */
265862306a36Sopenharmony_ci	{0xa0, 0xd6, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d6,cc */
265962306a36Sopenharmony_ci	{0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ea,cc */
266062306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
266162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, /* 01,a7,00,cc */
266262306a36Sopenharmony_ci	{0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,c0,cc */
266362306a36Sopenharmony_ci	{}
266462306a36Sopenharmony_ci};
266562306a36Sopenharmony_cistatic const struct usb_action icm105a_NoFlickerScale[] = {
266662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
266762306a36Sopenharmony_ci	{0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */
266862306a36Sopenharmony_ci	{0xaa, 0x0c, 0x0004}, /* 00,0c,04,aa */
266962306a36Sopenharmony_ci	{0xaa, 0x0e, 0x000d}, /* 00,0e,0d,aa */
267062306a36Sopenharmony_ci	{0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */
267162306a36Sopenharmony_ci	{0xaa, 0x1c, 0x0000}, /* 00,1c,00,aa */
267262306a36Sopenharmony_ci	{0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */
267362306a36Sopenharmony_ci	{0xaa, 0x20, 0x0080}, /* 00,20,80,aa */
267462306a36Sopenharmony_ci	{0xaa, 0x22, 0x0080}, /* 00,22,80,aa */
267562306a36Sopenharmony_ci	{0xaa, 0x24, 0x0080}, /* 00,24,80,aa */
267662306a36Sopenharmony_ci	{0xaa, 0x26, 0x0080}, /* 00,26,80,aa */
267762306a36Sopenharmony_ci	{0xaa, 0x00, 0x0084}, /* 00,00,84,aa */
267862306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */
267962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,00,cc */
268062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
268162306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */
268262306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,20,cc */
268362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
268462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
268562306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */
268662306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
268762306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
268862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
268962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */
269062306a36Sopenharmony_ci	{0xa0, 0xc1, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c1,cc */
269162306a36Sopenharmony_ci	{0xa0, 0xd4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d4,cc */
269262306a36Sopenharmony_ci	{0xa0, 0xe8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e8,cc */
269362306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
269462306a36Sopenharmony_ci	{}
269562306a36Sopenharmony_ci};
269662306a36Sopenharmony_cistatic const struct usb_action icm105a_NoFlicker[] = {
269762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
269862306a36Sopenharmony_ci	{0xaa, 0x0d, 0x0003}, /* 00,0d,03,aa */
269962306a36Sopenharmony_ci	{0xaa, 0x0c, 0x0004}, /* 00,0c,04,aa */
270062306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0081}, /* 00,0e,81,aa */
270162306a36Sopenharmony_ci	{0xaa, 0x0f, 0x0002}, /* 00,0f,02,aa */
270262306a36Sopenharmony_ci	{0xaa, 0x1c, 0x0080}, /* 00,1c,80,aa */
270362306a36Sopenharmony_ci	{0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */
270462306a36Sopenharmony_ci	{0xaa, 0x20, 0x0080}, /* 00,20,80,aa */
270562306a36Sopenharmony_ci	{0xaa, 0x22, 0x0080}, /* 00,22,80,aa */
270662306a36Sopenharmony_ci	{0xaa, 0x24, 0x0080}, /* 00,24,80,aa */
270762306a36Sopenharmony_ci	{0xaa, 0x26, 0x0080}, /* 00,26,80,aa */
270862306a36Sopenharmony_ci	{0xaa, 0x00, 0x0084}, /* 00,00,84,aa */
270962306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,02,cc */
271062306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,80,cc */
271162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
271262306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */
271362306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,20,cc */
271462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
271562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
271662306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */
271762306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE}, /* 01,8c,10,cc */
271862306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,20,cc */
271962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
272062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */
272162306a36Sopenharmony_ci	{0xa0, 0xc1, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c1,cc */
272262306a36Sopenharmony_ci	{0xa0, 0xd4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d4,cc */
272362306a36Sopenharmony_ci	{0xa0, 0xe8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e8,cc */
272462306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
272562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN}, /* 01,a7,00,cc */
272662306a36Sopenharmony_ci	{0xa0, 0xc0, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,c0,cc */
272762306a36Sopenharmony_ci	{}
272862306a36Sopenharmony_ci};
272962306a36Sopenharmony_ci
273062306a36Sopenharmony_cistatic const struct usb_action mc501cb_Initial[] = {
273162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */
273262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R002_CLOCKSELECT}, /* 00,02,00,cc */
273362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
273462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */
273562306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */
273662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */
273762306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
273862306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */
273962306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */
274062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */
274162306a36Sopenharmony_ci	{0xa0, 0xd8, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d8,cc */
274262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */
274362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */
274462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */
274562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */
274662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, /* 00,9b,01,cc */
274762306a36Sopenharmony_ci	{0xa0, 0xde, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,de,cc */
274862306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, /* 00,9d,02,cc */
274962306a36Sopenharmony_ci	{0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */
275062306a36Sopenharmony_ci	{0xa0, 0x33, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,33,cc */
275162306a36Sopenharmony_ci	{0xa0, 0x34, ZC3XX_R087_EXPTIMEMID}, /* 00,87,34,cc */
275262306a36Sopenharmony_ci	{0xa0, 0x35, ZC3XX_R088_EXPTIMELOW}, /* 00,88,35,cc */
275362306a36Sopenharmony_ci	{0xa0, 0xb0, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,b0,cc */
275462306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
275562306a36Sopenharmony_ci	{0xaa, 0x01, 0x0001}, /* 00,01,01,aa */
275662306a36Sopenharmony_ci	{0xaa, 0x01, 0x0003}, /* 00,01,03,aa */
275762306a36Sopenharmony_ci	{0xaa, 0x01, 0x0001}, /* 00,01,01,aa */
275862306a36Sopenharmony_ci	{0xaa, 0x03, 0x0000}, /* 00,03,00,aa */
275962306a36Sopenharmony_ci	{0xaa, 0x10, 0x0000}, /* 00,10,00,aa */
276062306a36Sopenharmony_ci	{0xaa, 0x11, 0x0080}, /* 00,11,80,aa */
276162306a36Sopenharmony_ci	{0xaa, 0x12, 0x0000}, /* 00,12,00,aa */
276262306a36Sopenharmony_ci	{0xaa, 0x13, 0x0000}, /* 00,13,00,aa */
276362306a36Sopenharmony_ci	{0xaa, 0x14, 0x0000}, /* 00,14,00,aa */
276462306a36Sopenharmony_ci	{0xaa, 0x15, 0x0000}, /* 00,15,00,aa */
276562306a36Sopenharmony_ci	{0xaa, 0x16, 0x0000}, /* 00,16,00,aa */
276662306a36Sopenharmony_ci	{0xaa, 0x17, 0x0001}, /* 00,17,01,aa */
276762306a36Sopenharmony_ci	{0xaa, 0x18, 0x00de}, /* 00,18,de,aa */
276862306a36Sopenharmony_ci	{0xaa, 0x19, 0x0002}, /* 00,19,02,aa */
276962306a36Sopenharmony_ci	{0xaa, 0x1a, 0x0086}, /* 00,1a,86,aa */
277062306a36Sopenharmony_ci	{0xaa, 0x20, 0x00a8}, /* 00,20,a8,aa */
277162306a36Sopenharmony_ci	{0xaa, 0x22, 0x0000}, /* 00,22,00,aa */
277262306a36Sopenharmony_ci	{0xaa, 0x23, 0x0000}, /* 00,23,00,aa */
277362306a36Sopenharmony_ci	{0xaa, 0x24, 0x0000}, /* 00,24,00,aa */
277462306a36Sopenharmony_ci	{0xaa, 0x40, 0x0033}, /* 00,40,33,aa */
277562306a36Sopenharmony_ci	{0xaa, 0x41, 0x0077}, /* 00,41,77,aa */
277662306a36Sopenharmony_ci	{0xaa, 0x42, 0x0053}, /* 00,42,53,aa */
277762306a36Sopenharmony_ci	{0xaa, 0x43, 0x00b0}, /* 00,43,b0,aa */
277862306a36Sopenharmony_ci	{0xaa, 0x4b, 0x0001}, /* 00,4b,01,aa */
277962306a36Sopenharmony_ci	{0xaa, 0x72, 0x0020}, /* 00,72,20,aa */
278062306a36Sopenharmony_ci	{0xaa, 0x73, 0x0000}, /* 00,73,00,aa */
278162306a36Sopenharmony_ci	{0xaa, 0x80, 0x0000}, /* 00,80,00,aa */
278262306a36Sopenharmony_ci	{0xaa, 0x85, 0x0050}, /* 00,85,50,aa */
278362306a36Sopenharmony_ci	{0xaa, 0x91, 0x0070}, /* 00,91,70,aa */
278462306a36Sopenharmony_ci	{0xaa, 0x92, 0x0072}, /* 00,92,72,aa */
278562306a36Sopenharmony_ci	{0xaa, 0x03, 0x0001}, /* 00,03,01,aa */
278662306a36Sopenharmony_ci	{0xaa, 0x10, 0x00a0}, /* 00,10,a0,aa */
278762306a36Sopenharmony_ci	{0xaa, 0x11, 0x0001}, /* 00,11,01,aa */
278862306a36Sopenharmony_ci	{0xaa, 0x30, 0x0000}, /* 00,30,00,aa */
278962306a36Sopenharmony_ci	{0xaa, 0x60, 0x0000}, /* 00,60,00,aa */
279062306a36Sopenharmony_ci	{0xaa, 0xa0, 0x001a}, /* 00,a0,1a,aa */
279162306a36Sopenharmony_ci	{0xaa, 0xa1, 0x0000}, /* 00,a1,00,aa */
279262306a36Sopenharmony_ci	{0xaa, 0xa2, 0x003f}, /* 00,a2,3f,aa */
279362306a36Sopenharmony_ci	{0xaa, 0xa3, 0x0028}, /* 00,a3,28,aa */
279462306a36Sopenharmony_ci	{0xaa, 0xa4, 0x0010}, /* 00,a4,10,aa */
279562306a36Sopenharmony_ci	{0xaa, 0xa5, 0x0020}, /* 00,a5,20,aa */
279662306a36Sopenharmony_ci	{0xaa, 0xb1, 0x0044}, /* 00,b1,44,aa */
279762306a36Sopenharmony_ci	{0xaa, 0xd0, 0x0001}, /* 00,d0,01,aa */
279862306a36Sopenharmony_ci	{0xaa, 0xd1, 0x0085}, /* 00,d1,85,aa */
279962306a36Sopenharmony_ci	{0xaa, 0xd2, 0x0080}, /* 00,d2,80,aa */
280062306a36Sopenharmony_ci	{0xaa, 0xd3, 0x0080}, /* 00,d3,80,aa */
280162306a36Sopenharmony_ci	{0xaa, 0xd4, 0x0080}, /* 00,d4,80,aa */
280262306a36Sopenharmony_ci	{0xaa, 0xd5, 0x0080}, /* 00,d5,80,aa */
280362306a36Sopenharmony_ci	{0xaa, 0xc0, 0x00c3}, /* 00,c0,c3,aa */
280462306a36Sopenharmony_ci	{0xaa, 0xc2, 0x0044}, /* 00,c2,44,aa */
280562306a36Sopenharmony_ci	{0xaa, 0xc4, 0x0040}, /* 00,c4,40,aa */
280662306a36Sopenharmony_ci	{0xaa, 0xc5, 0x0020}, /* 00,c5,20,aa */
280762306a36Sopenharmony_ci	{0xaa, 0xc6, 0x0008}, /* 00,c6,08,aa */
280862306a36Sopenharmony_ci	{0xaa, 0x03, 0x0004}, /* 00,03,04,aa */
280962306a36Sopenharmony_ci	{0xaa, 0x10, 0x0000}, /* 00,10,00,aa */
281062306a36Sopenharmony_ci	{0xaa, 0x40, 0x0030}, /* 00,40,30,aa */
281162306a36Sopenharmony_ci	{0xaa, 0x41, 0x0020}, /* 00,41,20,aa */
281262306a36Sopenharmony_ci	{0xaa, 0x42, 0x002d}, /* 00,42,2d,aa */
281362306a36Sopenharmony_ci	{0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
281462306a36Sopenharmony_ci	{0xaa, 0x1c, 0x0050}, /* 00,1C,50,aa */
281562306a36Sopenharmony_ci	{0xaa, 0x11, 0x0081}, /* 00,11,81,aa */
281662306a36Sopenharmony_ci	{0xaa, 0x3b, 0x001d}, /* 00,3b,1D,aa */
281762306a36Sopenharmony_ci	{0xaa, 0x3c, 0x004c}, /* 00,3c,4C,aa */
281862306a36Sopenharmony_ci	{0xaa, 0x3d, 0x0018}, /* 00,3d,18,aa */
281962306a36Sopenharmony_ci	{0xaa, 0x3e, 0x006a}, /* 00,3e,6A,aa */
282062306a36Sopenharmony_ci	{0xaa, 0x01, 0x0000}, /* 00,01,00,aa */
282162306a36Sopenharmony_ci	{0xaa, 0x52, 0x00ff}, /* 00,52,FF,aa */
282262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
282362306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */
282462306a36Sopenharmony_ci	{0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */
282562306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */
282662306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */
282762306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */
282862306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */
282962306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */
283062306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */
283162306a36Sopenharmony_ci	{0xaa, 0x03, 0x0002}, /* 00,03,02,aa */
283262306a36Sopenharmony_ci	{0xaa, 0x51, 0x0027}, /* 00,51,27,aa */
283362306a36Sopenharmony_ci	{0xaa, 0x52, 0x0020}, /* 00,52,20,aa */
283462306a36Sopenharmony_ci	{0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
283562306a36Sopenharmony_ci	{0xaa, 0x50, 0x0010}, /* 00,50,10,aa */
283662306a36Sopenharmony_ci	{0xaa, 0x51, 0x0010}, /* 00,51,10,aa */
283762306a36Sopenharmony_ci	{0xaa, 0x54, 0x0010}, /* 00,54,10,aa */
283862306a36Sopenharmony_ci	{0xaa, 0x55, 0x0010}, /* 00,55,10,aa */
283962306a36Sopenharmony_ci	{0xa0, 0xf0, 0x0199}, /* 01,99,F0,cc */
284062306a36Sopenharmony_ci	{0xa0, 0x80, 0x019a}, /* 01,9A,80,cc */
284162306a36Sopenharmony_ci
284262306a36Sopenharmony_ci	{0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
284362306a36Sopenharmony_ci	{0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */
284462306a36Sopenharmony_ci	{0xaa, 0x36, 0x001d}, /* 00,36,1D,aa */
284562306a36Sopenharmony_ci	{0xaa, 0x37, 0x004c}, /* 00,37,4C,aa */
284662306a36Sopenharmony_ci	{0xaa, 0x3b, 0x001d}, /* 00,3B,1D,aa */
284762306a36Sopenharmony_ci	{}
284862306a36Sopenharmony_ci};
284962306a36Sopenharmony_ci
285062306a36Sopenharmony_cistatic const struct usb_action mc501cb_InitialScale[] = {	/* 320x240 */
285162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */
285262306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */
285362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
285462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */
285562306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */
285662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */
285762306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
285862306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */
285962306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */
286062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */
286162306a36Sopenharmony_ci	{0xa0, 0xd0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d0,cc */
286262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */
286362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */
286462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */
286562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */
286662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH}, /* 00,9b,01,cc */
286762306a36Sopenharmony_ci	{0xa0, 0xd8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,d8,cc */
286862306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH}, /* 00,9d,02,cc */
286962306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */
287062306a36Sopenharmony_ci	{0xa0, 0x33, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,33,cc */
287162306a36Sopenharmony_ci	{0xa0, 0x34, ZC3XX_R087_EXPTIMEMID}, /* 00,87,34,cc */
287262306a36Sopenharmony_ci	{0xa0, 0x35, ZC3XX_R088_EXPTIMELOW}, /* 00,88,35,cc */
287362306a36Sopenharmony_ci	{0xa0, 0xb0, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,b0,cc */
287462306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
287562306a36Sopenharmony_ci	{0xaa, 0x01, 0x0001}, /* 00,01,01,aa */
287662306a36Sopenharmony_ci	{0xaa, 0x01, 0x0003}, /* 00,01,03,aa */
287762306a36Sopenharmony_ci	{0xaa, 0x01, 0x0001}, /* 00,01,01,aa */
287862306a36Sopenharmony_ci	{0xaa, 0x03, 0x0000}, /* 00,03,00,aa */
287962306a36Sopenharmony_ci	{0xaa, 0x10, 0x0000}, /* 00,10,00,aa */
288062306a36Sopenharmony_ci	{0xaa, 0x11, 0x0080}, /* 00,11,80,aa */
288162306a36Sopenharmony_ci	{0xaa, 0x12, 0x0000}, /* 00,12,00,aa */
288262306a36Sopenharmony_ci	{0xaa, 0x13, 0x0000}, /* 00,13,00,aa */
288362306a36Sopenharmony_ci	{0xaa, 0x14, 0x0000}, /* 00,14,00,aa */
288462306a36Sopenharmony_ci	{0xaa, 0x15, 0x0000}, /* 00,15,00,aa */
288562306a36Sopenharmony_ci	{0xaa, 0x16, 0x0000}, /* 00,16,00,aa */
288662306a36Sopenharmony_ci	{0xaa, 0x17, 0x0001}, /* 00,17,01,aa */
288762306a36Sopenharmony_ci	{0xaa, 0x18, 0x00d8}, /* 00,18,d8,aa */
288862306a36Sopenharmony_ci	{0xaa, 0x19, 0x0002}, /* 00,19,02,aa */
288962306a36Sopenharmony_ci	{0xaa, 0x1a, 0x0088}, /* 00,1a,88,aa */
289062306a36Sopenharmony_ci	{0xaa, 0x20, 0x00a8}, /* 00,20,a8,aa */
289162306a36Sopenharmony_ci	{0xaa, 0x22, 0x0000}, /* 00,22,00,aa */
289262306a36Sopenharmony_ci	{0xaa, 0x23, 0x0000}, /* 00,23,00,aa */
289362306a36Sopenharmony_ci	{0xaa, 0x24, 0x0000}, /* 00,24,00,aa */
289462306a36Sopenharmony_ci	{0xaa, 0x40, 0x0033}, /* 00,40,33,aa */
289562306a36Sopenharmony_ci	{0xaa, 0x41, 0x0077}, /* 00,41,77,aa */
289662306a36Sopenharmony_ci	{0xaa, 0x42, 0x0053}, /* 00,42,53,aa */
289762306a36Sopenharmony_ci	{0xaa, 0x43, 0x00b0}, /* 00,43,b0,aa */
289862306a36Sopenharmony_ci	{0xaa, 0x4b, 0x0001}, /* 00,4b,01,aa */
289962306a36Sopenharmony_ci	{0xaa, 0x72, 0x0020}, /* 00,72,20,aa */
290062306a36Sopenharmony_ci	{0xaa, 0x73, 0x0000}, /* 00,73,00,aa */
290162306a36Sopenharmony_ci	{0xaa, 0x80, 0x0000}, /* 00,80,00,aa */
290262306a36Sopenharmony_ci	{0xaa, 0x85, 0x0050}, /* 00,85,50,aa */
290362306a36Sopenharmony_ci	{0xaa, 0x91, 0x0070}, /* 00,91,70,aa */
290462306a36Sopenharmony_ci	{0xaa, 0x92, 0x0072}, /* 00,92,72,aa */
290562306a36Sopenharmony_ci	{0xaa, 0x03, 0x0001}, /* 00,03,01,aa */
290662306a36Sopenharmony_ci	{0xaa, 0x10, 0x00a0}, /* 00,10,a0,aa */
290762306a36Sopenharmony_ci	{0xaa, 0x11, 0x0001}, /* 00,11,01,aa */
290862306a36Sopenharmony_ci	{0xaa, 0x30, 0x0000}, /* 00,30,00,aa */
290962306a36Sopenharmony_ci	{0xaa, 0x60, 0x0000}, /* 00,60,00,aa */
291062306a36Sopenharmony_ci	{0xaa, 0xa0, 0x001a}, /* 00,a0,1a,aa */
291162306a36Sopenharmony_ci	{0xaa, 0xa1, 0x0000}, /* 00,a1,00,aa */
291262306a36Sopenharmony_ci	{0xaa, 0xa2, 0x003f}, /* 00,a2,3f,aa */
291362306a36Sopenharmony_ci	{0xaa, 0xa3, 0x0028}, /* 00,a3,28,aa */
291462306a36Sopenharmony_ci	{0xaa, 0xa4, 0x0010}, /* 00,a4,10,aa */
291562306a36Sopenharmony_ci	{0xaa, 0xa5, 0x0020}, /* 00,a5,20,aa */
291662306a36Sopenharmony_ci	{0xaa, 0xb1, 0x0044}, /* 00,b1,44,aa */
291762306a36Sopenharmony_ci	{0xaa, 0xd0, 0x0001}, /* 00,d0,01,aa */
291862306a36Sopenharmony_ci	{0xaa, 0xd1, 0x0085}, /* 00,d1,85,aa */
291962306a36Sopenharmony_ci	{0xaa, 0xd2, 0x0080}, /* 00,d2,80,aa */
292062306a36Sopenharmony_ci	{0xaa, 0xd3, 0x0080}, /* 00,d3,80,aa */
292162306a36Sopenharmony_ci	{0xaa, 0xd4, 0x0080}, /* 00,d4,80,aa */
292262306a36Sopenharmony_ci	{0xaa, 0xd5, 0x0080}, /* 00,d5,80,aa */
292362306a36Sopenharmony_ci	{0xaa, 0xc0, 0x00c3}, /* 00,c0,c3,aa */
292462306a36Sopenharmony_ci	{0xaa, 0xc2, 0x0044}, /* 00,c2,44,aa */
292562306a36Sopenharmony_ci	{0xaa, 0xc4, 0x0040}, /* 00,c4,40,aa */
292662306a36Sopenharmony_ci	{0xaa, 0xc5, 0x0020}, /* 00,c5,20,aa */
292762306a36Sopenharmony_ci	{0xaa, 0xc6, 0x0008}, /* 00,c6,08,aa */
292862306a36Sopenharmony_ci	{0xaa, 0x03, 0x0004}, /* 00,03,04,aa */
292962306a36Sopenharmony_ci	{0xaa, 0x10, 0x0000}, /* 00,10,00,aa */
293062306a36Sopenharmony_ci	{0xaa, 0x40, 0x0030}, /* 00,40,30,aa */
293162306a36Sopenharmony_ci	{0xaa, 0x41, 0x0020}, /* 00,41,20,aa */
293262306a36Sopenharmony_ci	{0xaa, 0x42, 0x002d}, /* 00,42,2d,aa */
293362306a36Sopenharmony_ci	{0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
293462306a36Sopenharmony_ci	{0xaa, 0x1c, 0x0050}, /* 00,1c,50,aa */
293562306a36Sopenharmony_ci	{0xaa, 0x11, 0x0081}, /* 00,11,81,aa */
293662306a36Sopenharmony_ci	{0xaa, 0x3b, 0x003a}, /* 00,3b,3A,aa */
293762306a36Sopenharmony_ci	{0xaa, 0x3c, 0x0098}, /* 00,3c,98,aa */
293862306a36Sopenharmony_ci	{0xaa, 0x3d, 0x0030}, /* 00,3d,30,aa */
293962306a36Sopenharmony_ci	{0xaa, 0x3e, 0x00d4}, /* 00,3E,D4,aa */
294062306a36Sopenharmony_ci	{0xaa, 0x01, 0x0000}, /* 00,01,00,aa */
294162306a36Sopenharmony_ci	{0xaa, 0x52, 0x00ff}, /* 00,52,FF,aa */
294262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
294362306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */
294462306a36Sopenharmony_ci	{0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,37,cc */
294562306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */
294662306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */
294762306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */
294862306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */
294962306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */
295062306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */
295162306a36Sopenharmony_ci	{0xaa, 0x03, 0x0002}, /* 00,03,02,aa */
295262306a36Sopenharmony_ci	{0xaa, 0x51, 0x004e}, /* 00,51,4E,aa */
295362306a36Sopenharmony_ci	{0xaa, 0x52, 0x0041}, /* 00,52,41,aa */
295462306a36Sopenharmony_ci	{0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
295562306a36Sopenharmony_ci	{0xaa, 0x50, 0x0010}, /* 00,50,10,aa */
295662306a36Sopenharmony_ci	{0xaa, 0x51, 0x0010}, /* 00,51,10,aa */
295762306a36Sopenharmony_ci	{0xaa, 0x54, 0x0010}, /* 00,54,10,aa */
295862306a36Sopenharmony_ci	{0xaa, 0x55, 0x0010}, /* 00,55,10,aa */
295962306a36Sopenharmony_ci	{0xa0, 0xf0, 0x0199}, /* 01,99,F0,cc */
296062306a36Sopenharmony_ci	{0xa0, 0x80, 0x019a}, /* 01,9A,80,cc */
296162306a36Sopenharmony_ci	{}
296262306a36Sopenharmony_ci};
296362306a36Sopenharmony_ci
296462306a36Sopenharmony_cistatic const struct usb_action mc501cb_50HZ[] = {
296562306a36Sopenharmony_ci	{0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
296662306a36Sopenharmony_ci	{0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */
296762306a36Sopenharmony_ci	{0xaa, 0x36, 0x001d}, /* 00,36,1D,aa */
296862306a36Sopenharmony_ci	{0xaa, 0x37, 0x004c}, /* 00,37,4C,aa */
296962306a36Sopenharmony_ci	{0xaa, 0x3b, 0x001d}, /* 00,3B,1D,aa */
297062306a36Sopenharmony_ci	{0xaa, 0x3c, 0x004c}, /* 00,3C,4C,aa */
297162306a36Sopenharmony_ci	{0xaa, 0x3d, 0x001d}, /* 00,3D,1D,aa */
297262306a36Sopenharmony_ci	{0xaa, 0x3e, 0x004c}, /* 00,3E,4C,aa */
297362306a36Sopenharmony_ci	{}
297462306a36Sopenharmony_ci};
297562306a36Sopenharmony_ci
297662306a36Sopenharmony_cistatic const struct usb_action mc501cb_50HZScale[] = {
297762306a36Sopenharmony_ci	{0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
297862306a36Sopenharmony_ci	{0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */
297962306a36Sopenharmony_ci	{0xaa, 0x36, 0x003a}, /* 00,36,3A,aa */
298062306a36Sopenharmony_ci	{0xaa, 0x37, 0x0098}, /* 00,37,98,aa */
298162306a36Sopenharmony_ci	{0xaa, 0x3b, 0x003a}, /* 00,3B,3A,aa */
298262306a36Sopenharmony_ci	{0xaa, 0x3c, 0x0098}, /* 00,3C,98,aa */
298362306a36Sopenharmony_ci	{0xaa, 0x3d, 0x003a}, /* 00,3D,3A,aa */
298462306a36Sopenharmony_ci	{0xaa, 0x3e, 0x0098}, /* 00,3E,98,aa */
298562306a36Sopenharmony_ci	{}
298662306a36Sopenharmony_ci};
298762306a36Sopenharmony_ci
298862306a36Sopenharmony_cistatic const struct usb_action mc501cb_60HZ[] = {
298962306a36Sopenharmony_ci	{0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
299062306a36Sopenharmony_ci	{0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */
299162306a36Sopenharmony_ci	{0xaa, 0x36, 0x0018}, /* 00,36,18,aa */
299262306a36Sopenharmony_ci	{0xaa, 0x37, 0x006a}, /* 00,37,6A,aa */
299362306a36Sopenharmony_ci	{0xaa, 0x3d, 0x0018}, /* 00,3D,18,aa */
299462306a36Sopenharmony_ci	{0xaa, 0x3e, 0x006a}, /* 00,3E,6A,aa */
299562306a36Sopenharmony_ci	{0xaa, 0x3b, 0x0018}, /* 00,3B,18,aa */
299662306a36Sopenharmony_ci	{0xaa, 0x3c, 0x006a}, /* 00,3C,6A,aa */
299762306a36Sopenharmony_ci	{}
299862306a36Sopenharmony_ci};
299962306a36Sopenharmony_ci
300062306a36Sopenharmony_cistatic const struct usb_action mc501cb_60HZScale[] = {
300162306a36Sopenharmony_ci	{0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
300262306a36Sopenharmony_ci	{0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */
300362306a36Sopenharmony_ci	{0xaa, 0x36, 0x0030}, /* 00,36,30,aa */
300462306a36Sopenharmony_ci	{0xaa, 0x37, 0x00d4}, /* 00,37,D4,aa */
300562306a36Sopenharmony_ci	{0xaa, 0x3d, 0x0030}, /* 00,3D,30,aa */
300662306a36Sopenharmony_ci	{0xaa, 0x3e, 0x00d4}, /* 00,3E,D4,aa */
300762306a36Sopenharmony_ci	{0xaa, 0x3b, 0x0030}, /* 00,3B,30,aa */
300862306a36Sopenharmony_ci	{0xaa, 0x3c, 0x00d4}, /* 00,3C,D4,aa */
300962306a36Sopenharmony_ci	{}
301062306a36Sopenharmony_ci};
301162306a36Sopenharmony_ci
301262306a36Sopenharmony_cistatic const struct usb_action mc501cb_NoFlicker[] = {
301362306a36Sopenharmony_ci	{0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
301462306a36Sopenharmony_ci	{0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */
301562306a36Sopenharmony_ci	{0xaa, 0x36, 0x0018}, /* 00,36,18,aa */
301662306a36Sopenharmony_ci	{0xaa, 0x37, 0x006a}, /* 00,37,6A,aa */
301762306a36Sopenharmony_ci	{0xaa, 0x3d, 0x0018}, /* 00,3D,18,aa */
301862306a36Sopenharmony_ci	{0xaa, 0x3e, 0x006a}, /* 00,3E,6A,aa */
301962306a36Sopenharmony_ci	{0xaa, 0x3b, 0x0018}, /* 00,3B,18,aa */
302062306a36Sopenharmony_ci	{0xaa, 0x3c, 0x006a}, /* 00,3C,6A,aa */
302162306a36Sopenharmony_ci	{}
302262306a36Sopenharmony_ci};
302362306a36Sopenharmony_ci
302462306a36Sopenharmony_cistatic const struct usb_action mc501cb_NoFlickerScale[] = {
302562306a36Sopenharmony_ci	{0xaa, 0x03, 0x0003}, /* 00,03,03,aa */
302662306a36Sopenharmony_ci	{0xaa, 0x10, 0x00fc}, /* 00,10,fc,aa */
302762306a36Sopenharmony_ci	{0xaa, 0x36, 0x0030}, /* 00,36,30,aa */
302862306a36Sopenharmony_ci	{0xaa, 0x37, 0x00d4}, /* 00,37,D4,aa */
302962306a36Sopenharmony_ci	{0xaa, 0x3d, 0x0030}, /* 00,3D,30,aa */
303062306a36Sopenharmony_ci	{0xaa, 0x3e, 0x00d4}, /* 00,3E,D4,aa */
303162306a36Sopenharmony_ci	{0xaa, 0x3b, 0x0030}, /* 00,3B,30,aa */
303262306a36Sopenharmony_ci	{0xaa, 0x3c, 0x00d4}, /* 00,3C,D4,aa */
303362306a36Sopenharmony_ci	{}
303462306a36Sopenharmony_ci};
303562306a36Sopenharmony_ci
303662306a36Sopenharmony_ci/* from zs211.inf */
303762306a36Sopenharmony_cistatic const struct usb_action ov7620_Initial[] = {	/* 640x480 */
303862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */
303962306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R002_CLOCKSELECT}, /* 00,02,40,cc */
304062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R008_CLOCKSETTING}, /* 00,08,00,cc */
304162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */
304262306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,06,cc */
304362306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R083_RGAINADDR}, /* 00,83,02,cc */
304462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R085_BGAINADDR}, /* 00,85,01,cc */
304562306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,80,cc */
304662306a36Sopenharmony_ci	{0xa0, 0x81, ZC3XX_R087_EXPTIMEMID}, /* 00,87,81,cc */
304762306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R088_EXPTIMELOW}, /* 00,88,10,cc */
304862306a36Sopenharmony_ci	{0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,a1,cc */
304962306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, /* 00,8d,08,cc */
305062306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */
305162306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */
305262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */
305362306a36Sopenharmony_ci	{0xa0, 0xd8, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d8,cc */
305462306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */
305562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */
305662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */
305762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */
305862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */
305962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */
306062306a36Sopenharmony_ci	{0xa0, 0xde, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,de,cc */
306162306a36Sopenharmony_ci	{0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,86,cc */
306262306a36Sopenharmony_ci	{0xaa, 0x12, 0x0088}, /* 00,12,88,aa */
306362306a36Sopenharmony_ci	{0xaa, 0x12, 0x0048}, /* 00,12,48,aa */
306462306a36Sopenharmony_ci	{0xaa, 0x75, 0x008a}, /* 00,75,8a,aa */
306562306a36Sopenharmony_ci	{0xaa, 0x13, 0x00a3}, /* 00,13,a3,aa */
306662306a36Sopenharmony_ci	{0xaa, 0x04, 0x0000}, /* 00,04,00,aa */
306762306a36Sopenharmony_ci	{0xaa, 0x05, 0x0000}, /* 00,05,00,aa */
306862306a36Sopenharmony_ci	{0xaa, 0x14, 0x0000}, /* 00,14,00,aa */
306962306a36Sopenharmony_ci	{0xaa, 0x15, 0x0004}, /* 00,15,04,aa */
307062306a36Sopenharmony_ci	{0xaa, 0x17, 0x0018}, /* 00,17,18,aa */
307162306a36Sopenharmony_ci	{0xaa, 0x18, 0x00ba}, /* 00,18,ba,aa */
307262306a36Sopenharmony_ci	{0xaa, 0x19, 0x0002}, /* 00,19,02,aa */
307362306a36Sopenharmony_ci	{0xaa, 0x1a, 0x00f1}, /* 00,1a,f1,aa */
307462306a36Sopenharmony_ci	{0xaa, 0x20, 0x0040}, /* 00,20,40,aa */
307562306a36Sopenharmony_ci	{0xaa, 0x24, 0x0088}, /* 00,24,88,aa */
307662306a36Sopenharmony_ci	{0xaa, 0x25, 0x0078}, /* 00,25,78,aa */
307762306a36Sopenharmony_ci	{0xaa, 0x27, 0x00f6}, /* 00,27,f6,aa */
307862306a36Sopenharmony_ci	{0xaa, 0x28, 0x00a0}, /* 00,28,a0,aa */
307962306a36Sopenharmony_ci	{0xaa, 0x21, 0x0000}, /* 00,21,00,aa */
308062306a36Sopenharmony_ci	{0xaa, 0x2a, 0x0083}, /* 00,2a,83,aa */
308162306a36Sopenharmony_ci	{0xaa, 0x2b, 0x0096}, /* 00,2b,96,aa */
308262306a36Sopenharmony_ci	{0xaa, 0x2d, 0x0005}, /* 00,2d,05,aa */
308362306a36Sopenharmony_ci	{0xaa, 0x74, 0x0020}, /* 00,74,20,aa */
308462306a36Sopenharmony_ci	{0xaa, 0x61, 0x0068}, /* 00,61,68,aa */
308562306a36Sopenharmony_ci	{0xaa, 0x64, 0x0088}, /* 00,64,88,aa */
308662306a36Sopenharmony_ci	{0xaa, 0x00, 0x0000}, /* 00,00,00,aa */
308762306a36Sopenharmony_ci	{0xaa, 0x06, 0x0080}, /* 00,06,80,aa */
308862306a36Sopenharmony_ci	{0xaa, 0x01, 0x0090}, /* 00,01,90,aa */
308962306a36Sopenharmony_ci	{0xaa, 0x02, 0x0030}, /* 00,02,30,aa */
309062306a36Sopenharmony_ci	{0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,77,cc */
309162306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
309262306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */
309362306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */
309462306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */
309562306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */
309662306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */
309762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */
309862306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */
309962306a36Sopenharmony_ci	{0xa0, 0x68, ZC3XX_R116_RGAIN}, /* 01,16,68,cc */
310062306a36Sopenharmony_ci	{0xa0, 0x52, ZC3XX_R118_BGAIN}, /* 01,18,52,cc */
310162306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,40,cc */
310262306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */
310362306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,50,cc */
310462306a36Sopenharmony_ci	{}
310562306a36Sopenharmony_ci};
310662306a36Sopenharmony_cistatic const struct usb_action ov7620_InitialScale[] = {	/* 320x240 */
310762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */
310862306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R002_CLOCKSELECT},	/* 00,02,50,cc */
310962306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},	/* 00,08,00,cc */
311062306a36Sopenharmony_ci						/* mx change? */
311162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */
311262306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,06,cc */
311362306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R083_RGAINADDR},	/* 00,83,02,cc */
311462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R085_BGAINADDR},	/* 00,85,01,cc */
311562306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R086_EXPTIMEHIGH},	/* 00,86,80,cc */
311662306a36Sopenharmony_ci	{0xa0, 0x81, ZC3XX_R087_EXPTIMEMID},	/* 00,87,81,cc */
311762306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R088_EXPTIMELOW},	/* 00,88,10,cc */
311862306a36Sopenharmony_ci	{0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,a1,cc */
311962306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE}, /* 00,8d,08,cc */
312062306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */
312162306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */
312262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */
312362306a36Sopenharmony_ci	{0xa0, 0xd0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,d0,cc */
312462306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */
312562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */
312662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},	/* 00,98,00,cc */
312762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},	/* 00,9a,00,cc */
312862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},	/* 01,1a,00,cc */
312962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},	/* 01,1c,00,cc */
313062306a36Sopenharmony_ci	{0xa0, 0xd6, ZC3XX_R09C_WINHEIGHTLOW},	/* 00,9c,d6,cc */
313162306a36Sopenharmony_ci						/* OV7648 00,9c,d8,cc */
313262306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},	/* 00,9e,88,cc */
313362306a36Sopenharmony_ci	{0xaa, 0x12, 0x0088}, /* 00,12,88,aa */
313462306a36Sopenharmony_ci	{0xaa, 0x12, 0x0048}, /* 00,12,48,aa */
313562306a36Sopenharmony_ci	{0xaa, 0x75, 0x008a}, /* 00,75,8a,aa */
313662306a36Sopenharmony_ci	{0xaa, 0x13, 0x00a3}, /* 00,13,a3,aa */
313762306a36Sopenharmony_ci	{0xaa, 0x04, 0x0000}, /* 00,04,00,aa */
313862306a36Sopenharmony_ci	{0xaa, 0x05, 0x0000}, /* 00,05,00,aa */
313962306a36Sopenharmony_ci	{0xaa, 0x14, 0x0000}, /* 00,14,00,aa */
314062306a36Sopenharmony_ci	{0xaa, 0x15, 0x0004}, /* 00,15,04,aa */
314162306a36Sopenharmony_ci	{0xaa, 0x24, 0x0088}, /* 00,24,88,aa */
314262306a36Sopenharmony_ci	{0xaa, 0x25, 0x0078}, /* 00,25,78,aa */
314362306a36Sopenharmony_ci	{0xaa, 0x17, 0x0018}, /* 00,17,18,aa */
314462306a36Sopenharmony_ci	{0xaa, 0x18, 0x00ba}, /* 00,18,ba,aa */
314562306a36Sopenharmony_ci	{0xaa, 0x19, 0x0002}, /* 00,19,02,aa */
314662306a36Sopenharmony_ci	{0xaa, 0x1a, 0x00f2}, /* 00,1a,f2,aa */
314762306a36Sopenharmony_ci	{0xaa, 0x20, 0x0040}, /* 00,20,40,aa */
314862306a36Sopenharmony_ci	{0xaa, 0x27, 0x00f6}, /* 00,27,f6,aa */
314962306a36Sopenharmony_ci	{0xaa, 0x28, 0x00a0}, /* 00,28,a0,aa */
315062306a36Sopenharmony_ci	{0xaa, 0x21, 0x0000}, /* 00,21,00,aa */
315162306a36Sopenharmony_ci	{0xaa, 0x2a, 0x0083}, /* 00,2a,83,aa */
315262306a36Sopenharmony_ci	{0xaa, 0x2b, 0x0096}, /* 00,2b,96,aa */
315362306a36Sopenharmony_ci	{0xaa, 0x2d, 0x0005}, /* 00,2d,05,aa */
315462306a36Sopenharmony_ci	{0xaa, 0x74, 0x0020}, /* 00,74,20,aa */
315562306a36Sopenharmony_ci	{0xaa, 0x61, 0x0068}, /* 00,61,68,aa */
315662306a36Sopenharmony_ci	{0xaa, 0x64, 0x0088}, /* 00,64,88,aa */
315762306a36Sopenharmony_ci	{0xaa, 0x00, 0x0000}, /* 00,00,00,aa */
315862306a36Sopenharmony_ci	{0xaa, 0x06, 0x0080}, /* 00,06,80,aa */
315962306a36Sopenharmony_ci	{0xaa, 0x01, 0x0090}, /* 00,01,90,aa */
316062306a36Sopenharmony_ci	{0xaa, 0x02, 0x0030}, /* 00,02,30,aa */
316162306a36Sopenharmony_ci	{0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,77,cc */
316262306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
316362306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */
316462306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},	/* 01,89,06,cc */
316562306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},			/* 01,ad,00,cc */
316662306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */
316762306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},	/* 01,cb,13,cc */
316862306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */
316962306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},	/* 03,01,08,cc */
317062306a36Sopenharmony_ci	{0xa0, 0x68, ZC3XX_R116_RGAIN},		/* 01,16,68,cc */
317162306a36Sopenharmony_ci	{0xa0, 0x52, ZC3XX_R118_BGAIN},		/* 01,18,52,cc */
317262306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},	/* 01,1d,50,cc */
317362306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */
317462306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN},	/* 01,a8,50,cc */
317562306a36Sopenharmony_ci	{}
317662306a36Sopenharmony_ci};
317762306a36Sopenharmony_cistatic const struct usb_action ov7620_50HZ[] = {
317862306a36Sopenharmony_ci	{0xdd, 0x00, 0x0100},	/* 00,01,00,dd */
317962306a36Sopenharmony_ci	{0xaa, 0x2b, 0x0096},	/* 00,2b,96,aa */
318062306a36Sopenharmony_ci	/* enable 1/120s & 1/100s exposures for banding filter */
318162306a36Sopenharmony_ci	{0xaa, 0x75, 0x008e},
318262306a36Sopenharmony_ci	{0xaa, 0x2d, 0x0005},	/* 00,2d,05,aa */
318362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,00,cc */
318462306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID},	/* 01,91,04,cc */
318562306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R192_EXPOSURELIMITLOW},	/* 01,92,18,cc */
318662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc */
318762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,00,cc */
318862306a36Sopenharmony_ci	{0xa0, 0x83, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,83,cc */
318962306a36Sopenharmony_ci	{0xaa, 0x76, 0x0003},				/* 00,76,03,aa */
319062306a36Sopenharmony_ci/*	{0xa0, 0x40, ZC3XX_R002_CLOCKSELECT},		 * 00,02,40,cc
319162306a36Sopenharmony_ci							 * if mode0 (640x480) */
319262306a36Sopenharmony_ci	{}
319362306a36Sopenharmony_ci};
319462306a36Sopenharmony_cistatic const struct usb_action ov7620_60HZ[] = {
319562306a36Sopenharmony_ci	{0xdd, 0x00, 0x0100},			/* 00,01,00,dd */
319662306a36Sopenharmony_ci	{0xaa, 0x2b, 0x0000},			/* 00,2b,00,aa */
319762306a36Sopenharmony_ci	/* enable 1/120s & 1/100s exposures for banding filter */
319862306a36Sopenharmony_ci	{0xaa, 0x75, 0x008e},
319962306a36Sopenharmony_ci	{0xaa, 0x2d, 0x0005},			/* 00,2d,05,aa */
320062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
320162306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */
320262306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,18,cc */
320362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
320462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
320562306a36Sopenharmony_ci	{0xa0, 0x83, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,83,cc */
320662306a36Sopenharmony_ci	{0xaa, 0x76, 0x0003},			/* 00,76,03,aa */
320762306a36Sopenharmony_ci/*	{0xa0, 0x40, ZC3XX_R002_CLOCKSELECT},	 * 00,02,40,cc
320862306a36Sopenharmony_ci						 * if mode0 (640x480) */
320962306a36Sopenharmony_ci/* ?? in gspca v1, it was
321062306a36Sopenharmony_ci	{0xa0, 0x00, 0x0039},  * 00,00,00,dd *
321162306a36Sopenharmony_ci	{0xa1, 0x01, 0x0037},		*/
321262306a36Sopenharmony_ci	{}
321362306a36Sopenharmony_ci};
321462306a36Sopenharmony_cistatic const struct usb_action ov7620_NoFlicker[] = {
321562306a36Sopenharmony_ci	{0xdd, 0x00, 0x0100},			/* 00,01,00,dd */
321662306a36Sopenharmony_ci	{0xaa, 0x2b, 0x0000},			/* 00,2b,00,aa */
321762306a36Sopenharmony_ci	/* disable 1/120s & 1/100s exposures for banding filter */
321862306a36Sopenharmony_ci	{0xaa, 0x75, 0x008a},
321962306a36Sopenharmony_ci	{0xaa, 0x2d, 0x0001},			/* 00,2d,01,aa */
322062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
322162306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,04,cc */
322262306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,18,cc */
322362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
322462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
322562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,01,cc */
322662306a36Sopenharmony_ci/*	{0xa0, 0x44, ZC3XX_R002_CLOCKSELECT},	 * 00,02,44,cc
322762306a36Sopenharmony_ci						 * if mode1 (320x240) */
322862306a36Sopenharmony_ci/* ?? was
322962306a36Sopenharmony_ci	{0xa0, 0x00, 0x0039},  * 00,00,00,dd *
323062306a36Sopenharmony_ci	{0xa1, 0x01, 0x0037},		*/
323162306a36Sopenharmony_ci	{}
323262306a36Sopenharmony_ci};
323362306a36Sopenharmony_ci
323462306a36Sopenharmony_cistatic const struct usb_action ov7630c_InitialScale[] = {
323562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
323662306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
323762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
323862306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
323962306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
324062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
324162306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R010_CMOSSENSORSELECT},
324262306a36Sopenharmony_ci	{0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR},
324362306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE},
324462306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
324562306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
324662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
324762306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
324862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
324962306a36Sopenharmony_ci	{0xaa, 0x12, 0x0080},
325062306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R083_RGAINADDR},
325162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R085_BGAINADDR},
325262306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R086_EXPTIMEHIGH},
325362306a36Sopenharmony_ci	{0xa0, 0x91, ZC3XX_R087_EXPTIMEMID},
325462306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R088_EXPTIMELOW},
325562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
325662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
325762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
325862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
325962306a36Sopenharmony_ci	{0xa0, 0xd8, ZC3XX_R09C_WINHEIGHTLOW},
326062306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},
326162306a36Sopenharmony_ci	{0xaa, 0x12, 0x0069},
326262306a36Sopenharmony_ci	{0xaa, 0x04, 0x0020},
326362306a36Sopenharmony_ci	{0xaa, 0x06, 0x0050},
326462306a36Sopenharmony_ci	{0xaa, 0x13, 0x0083},
326562306a36Sopenharmony_ci	{0xaa, 0x14, 0x0000},
326662306a36Sopenharmony_ci	{0xaa, 0x15, 0x0024},
326762306a36Sopenharmony_ci	{0xaa, 0x17, 0x0018},
326862306a36Sopenharmony_ci	{0xaa, 0x18, 0x00ba},
326962306a36Sopenharmony_ci	{0xaa, 0x19, 0x0002},
327062306a36Sopenharmony_ci	{0xaa, 0x1a, 0x00f6},
327162306a36Sopenharmony_ci	{0xaa, 0x1b, 0x0002},
327262306a36Sopenharmony_ci	{0xaa, 0x20, 0x00c2},
327362306a36Sopenharmony_ci	{0xaa, 0x24, 0x0060},
327462306a36Sopenharmony_ci	{0xaa, 0x25, 0x0040},
327562306a36Sopenharmony_ci	{0xaa, 0x26, 0x0030},
327662306a36Sopenharmony_ci	{0xaa, 0x27, 0x00ea},
327762306a36Sopenharmony_ci	{0xaa, 0x28, 0x00a0},
327862306a36Sopenharmony_ci	{0xaa, 0x21, 0x0000},
327962306a36Sopenharmony_ci	{0xaa, 0x2a, 0x0081},
328062306a36Sopenharmony_ci	{0xaa, 0x2b, 0x0096},
328162306a36Sopenharmony_ci	{0xaa, 0x2d, 0x0094},
328262306a36Sopenharmony_ci	{0xaa, 0x2f, 0x003d},
328362306a36Sopenharmony_ci	{0xaa, 0x30, 0x0024},
328462306a36Sopenharmony_ci	{0xaa, 0x60, 0x0000},
328562306a36Sopenharmony_ci	{0xaa, 0x61, 0x0040},
328662306a36Sopenharmony_ci	{0xaa, 0x68, 0x007c},
328762306a36Sopenharmony_ci	{0xaa, 0x6f, 0x0015},
328862306a36Sopenharmony_ci	{0xaa, 0x75, 0x0088},
328962306a36Sopenharmony_ci	{0xaa, 0x77, 0x00b5},
329062306a36Sopenharmony_ci	{0xaa, 0x01, 0x0060},
329162306a36Sopenharmony_ci	{0xaa, 0x02, 0x0060},
329262306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
329362306a36Sopenharmony_ci	{0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION},
329462306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
329562306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
329662306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
329762306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},
329862306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
329962306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
330062306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
330162306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
330262306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R116_RGAIN},
330362306a36Sopenharmony_ci	{0xa0, 0x46, ZC3XX_R118_BGAIN},
330462306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R113_RGB03},
330562306a36Sopenharmony_ci/* 0x10, */
330662306a36Sopenharmony_ci	{0xa1, 0x01, 0x0002},
330762306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R10A_RGB00},	/* matrix */
330862306a36Sopenharmony_ci	{0xa0, 0xf8, ZC3XX_R10B_RGB01},
330962306a36Sopenharmony_ci	{0xa0, 0xf8, ZC3XX_R10C_RGB02},
331062306a36Sopenharmony_ci	{0xa0, 0xf8, ZC3XX_R10D_RGB10},
331162306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R10E_RGB11},
331262306a36Sopenharmony_ci	{0xa0, 0xf8, ZC3XX_R10F_RGB12},
331362306a36Sopenharmony_ci	{0xa0, 0xf8, ZC3XX_R110_RGB20},
331462306a36Sopenharmony_ci	{0xa0, 0xf8, ZC3XX_R111_RGB21},
331562306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R112_RGB22},
331662306a36Sopenharmony_ci	{0xa1, 0x01, 0x0008},
331762306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},	/* clock ? */
331862306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},	/* sharpness+ */
331962306a36Sopenharmony_ci	{0xa1, 0x01, 0x01c8},
332062306a36Sopenharmony_ci	{0xa1, 0x01, 0x01c9},
332162306a36Sopenharmony_ci	{0xa1, 0x01, 0x01ca},
332262306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05},	/* sharpness- */
332362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R120_GAMMA00},	/* gamma 2 ?*/
332462306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R121_GAMMA01},
332562306a36Sopenharmony_ci	{0xa0, 0x1f, ZC3XX_R122_GAMMA02},
332662306a36Sopenharmony_ci	{0xa0, 0x3a, ZC3XX_R123_GAMMA03},
332762306a36Sopenharmony_ci	{0xa0, 0x53, ZC3XX_R124_GAMMA04},
332862306a36Sopenharmony_ci	{0xa0, 0x6d, ZC3XX_R125_GAMMA05},
332962306a36Sopenharmony_ci	{0xa0, 0x85, ZC3XX_R126_GAMMA06},
333062306a36Sopenharmony_ci	{0xa0, 0x9c, ZC3XX_R127_GAMMA07},
333162306a36Sopenharmony_ci	{0xa0, 0xb0, ZC3XX_R128_GAMMA08},
333262306a36Sopenharmony_ci	{0xa0, 0xc2, ZC3XX_R129_GAMMA09},
333362306a36Sopenharmony_ci	{0xa0, 0xd1, ZC3XX_R12A_GAMMA0A},
333462306a36Sopenharmony_ci	{0xa0, 0xde, ZC3XX_R12B_GAMMA0B},
333562306a36Sopenharmony_ci	{0xa0, 0xe9, ZC3XX_R12C_GAMMA0C},
333662306a36Sopenharmony_ci	{0xa0, 0xf2, ZC3XX_R12D_GAMMA0D},
333762306a36Sopenharmony_ci	{0xa0, 0xf9, ZC3XX_R12E_GAMMA0E},
333862306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
333962306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R130_GAMMA10},
334062306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R131_GAMMA11},
334162306a36Sopenharmony_ci	{0xa0, 0x16, ZC3XX_R132_GAMMA12},
334262306a36Sopenharmony_ci	{0xa0, 0x1a, ZC3XX_R133_GAMMA13},
334362306a36Sopenharmony_ci	{0xa0, 0x19, ZC3XX_R134_GAMMA14},
334462306a36Sopenharmony_ci	{0xa0, 0x19, ZC3XX_R135_GAMMA15},
334562306a36Sopenharmony_ci	{0xa0, 0x17, ZC3XX_R136_GAMMA16},
334662306a36Sopenharmony_ci	{0xa0, 0x15, ZC3XX_R137_GAMMA17},
334762306a36Sopenharmony_ci	{0xa0, 0x12, ZC3XX_R138_GAMMA18},
334862306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R139_GAMMA19},
334962306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R13A_GAMMA1A},
335062306a36Sopenharmony_ci	{0xa0, 0x0b, ZC3XX_R13B_GAMMA1B},
335162306a36Sopenharmony_ci	{0xa0, 0x09, ZC3XX_R13C_GAMMA1C},
335262306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R13D_GAMMA1D},
335362306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R13E_GAMMA1E},
335462306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R13F_GAMMA1F},
335562306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R10A_RGB00},	/* matrix */
335662306a36Sopenharmony_ci	{0xa0, 0xf8, ZC3XX_R10B_RGB01},
335762306a36Sopenharmony_ci	{0xa0, 0xf8, ZC3XX_R10C_RGB02},
335862306a36Sopenharmony_ci	{0xa0, 0xf8, ZC3XX_R10D_RGB10},
335962306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R10E_RGB11},
336062306a36Sopenharmony_ci	{0xa0, 0xf8, ZC3XX_R10F_RGB12},
336162306a36Sopenharmony_ci	{0xa0, 0xf8, ZC3XX_R110_RGB20},
336262306a36Sopenharmony_ci	{0xa0, 0xf8, ZC3XX_R111_RGB21},
336362306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R112_RGB22},
336462306a36Sopenharmony_ci
336562306a36Sopenharmony_ci	{0xa1, 0x01, 0x0180},
336662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
336762306a36Sopenharmony_ci	{0xaa, 0x10, 0x001b},
336862306a36Sopenharmony_ci	{0xaa, 0x76, 0x0002},
336962306a36Sopenharmony_ci	{0xaa, 0x2a, 0x0081},
337062306a36Sopenharmony_ci	{0xaa, 0x2b, 0x0000},
337162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
337262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R191_EXPOSURELIMITMID},
337362306a36Sopenharmony_ci	{0xa0, 0xb8, ZC3XX_R192_EXPOSURELIMITLOW},
337462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
337562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
337662306a36Sopenharmony_ci	{0xa0, 0x37, ZC3XX_R197_ANTIFLICKERLOW},
337762306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
337862306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
337962306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
338062306a36Sopenharmony_ci	{0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP},
338162306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
338262306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE},
338362306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
338462306a36Sopenharmony_ci	{0xaa, 0x13, 0x0083},	/* 40 */
338562306a36Sopenharmony_ci	{0xa1, 0x01, 0x0180},
338662306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
338762306a36Sopenharmony_ci	{}
338862306a36Sopenharmony_ci};
338962306a36Sopenharmony_ci
339062306a36Sopenharmony_cistatic const struct usb_action ov7630c_Initial[] = {
339162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
339262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
339362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
339462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
339562306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R010_CMOSSENSORSELECT},
339662306a36Sopenharmony_ci	{0xa0, 0xa1, ZC3XX_R08B_I2CDEVICEADDR},
339762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE},
339862306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
339962306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
340062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
340162306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
340262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
340362306a36Sopenharmony_ci
340462306a36Sopenharmony_ci	{0xaa, 0x12, 0x0080},
340562306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R083_RGAINADDR},
340662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R085_BGAINADDR},
340762306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R086_EXPTIMEHIGH},
340862306a36Sopenharmony_ci	{0xa0, 0x91, ZC3XX_R087_EXPTIMEMID},
340962306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R088_EXPTIMELOW},
341062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
341162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
341262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
341362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
341462306a36Sopenharmony_ci	{0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW},
341562306a36Sopenharmony_ci	{0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW},
341662306a36Sopenharmony_ci	{0xaa, 0x12, 0x0069},	/* i2c */
341762306a36Sopenharmony_ci	{0xaa, 0x04, 0x0020},
341862306a36Sopenharmony_ci	{0xaa, 0x06, 0x0050},
341962306a36Sopenharmony_ci	{0xaa, 0x13, 0x00c3},
342062306a36Sopenharmony_ci	{0xaa, 0x14, 0x0000},
342162306a36Sopenharmony_ci	{0xaa, 0x15, 0x0024},
342262306a36Sopenharmony_ci	{0xaa, 0x19, 0x0003},
342362306a36Sopenharmony_ci	{0xaa, 0x1a, 0x00f6},
342462306a36Sopenharmony_ci	{0xaa, 0x1b, 0x0002},
342562306a36Sopenharmony_ci	{0xaa, 0x20, 0x00c2},
342662306a36Sopenharmony_ci	{0xaa, 0x24, 0x0060},
342762306a36Sopenharmony_ci	{0xaa, 0x25, 0x0040},
342862306a36Sopenharmony_ci	{0xaa, 0x26, 0x0030},
342962306a36Sopenharmony_ci	{0xaa, 0x27, 0x00ea},
343062306a36Sopenharmony_ci	{0xaa, 0x28, 0x00a0},
343162306a36Sopenharmony_ci	{0xaa, 0x21, 0x0000},
343262306a36Sopenharmony_ci	{0xaa, 0x2a, 0x0081},
343362306a36Sopenharmony_ci	{0xaa, 0x2b, 0x0096},
343462306a36Sopenharmony_ci	{0xaa, 0x2d, 0x0084},
343562306a36Sopenharmony_ci	{0xaa, 0x2f, 0x003d},
343662306a36Sopenharmony_ci	{0xaa, 0x30, 0x0024},
343762306a36Sopenharmony_ci	{0xaa, 0x60, 0x0000},
343862306a36Sopenharmony_ci	{0xaa, 0x61, 0x0040},
343962306a36Sopenharmony_ci	{0xaa, 0x68, 0x007c},
344062306a36Sopenharmony_ci	{0xaa, 0x6f, 0x0015},
344162306a36Sopenharmony_ci	{0xaa, 0x75, 0x0088},
344262306a36Sopenharmony_ci	{0xaa, 0x77, 0x00b5},
344362306a36Sopenharmony_ci	{0xaa, 0x01, 0x0060},
344462306a36Sopenharmony_ci	{0xaa, 0x02, 0x0060},
344562306a36Sopenharmony_ci	{0xaa, 0x17, 0x0018},
344662306a36Sopenharmony_ci	{0xaa, 0x18, 0x00ba},
344762306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
344862306a36Sopenharmony_ci	{0xa0, 0x77, ZC3XX_R101_SENSORCORRECTION},
344962306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
345062306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
345162306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A7_CALCGLOBALMEAN},
345262306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},
345362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
345462306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
345562306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
345662306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
345762306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R116_RGAIN},
345862306a36Sopenharmony_ci	{0xa0, 0x46, ZC3XX_R118_BGAIN},
345962306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R113_RGB03},
346062306a36Sopenharmony_ci
346162306a36Sopenharmony_ci	{0xa1, 0x01, 0x0002},
346262306a36Sopenharmony_ci	{0xa0, 0x4e, ZC3XX_R10A_RGB00},	/* matrix */
346362306a36Sopenharmony_ci	{0xa0, 0xfe, ZC3XX_R10B_RGB01},
346462306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R10C_RGB02},
346562306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R10D_RGB10},
346662306a36Sopenharmony_ci	{0xa0, 0x4d, ZC3XX_R10E_RGB11},
346762306a36Sopenharmony_ci	{0xa0, 0xfc, ZC3XX_R10F_RGB12},
346862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R110_RGB20},
346962306a36Sopenharmony_ci	{0xa0, 0xf6, ZC3XX_R111_RGB21},
347062306a36Sopenharmony_ci	{0xa0, 0x4a, ZC3XX_R112_RGB22},
347162306a36Sopenharmony_ci
347262306a36Sopenharmony_ci	{0xa1, 0x01, 0x0008},
347362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},	/* clock ? */
347462306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},	/* sharpness+ */
347562306a36Sopenharmony_ci	{0xa1, 0x01, 0x01c8},
347662306a36Sopenharmony_ci	{0xa1, 0x01, 0x01c9},
347762306a36Sopenharmony_ci	{0xa1, 0x01, 0x01ca},
347862306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05},	/* sharpness- */
347962306a36Sopenharmony_ci	{0xa0, 0x16, ZC3XX_R120_GAMMA00},	/* gamma ~4 */
348062306a36Sopenharmony_ci	{0xa0, 0x3a, ZC3XX_R121_GAMMA01},
348162306a36Sopenharmony_ci	{0xa0, 0x5b, ZC3XX_R122_GAMMA02},
348262306a36Sopenharmony_ci	{0xa0, 0x7c, ZC3XX_R123_GAMMA03},
348362306a36Sopenharmony_ci	{0xa0, 0x94, ZC3XX_R124_GAMMA04},
348462306a36Sopenharmony_ci	{0xa0, 0xa9, ZC3XX_R125_GAMMA05},
348562306a36Sopenharmony_ci	{0xa0, 0xbb, ZC3XX_R126_GAMMA06},
348662306a36Sopenharmony_ci	{0xa0, 0xca, ZC3XX_R127_GAMMA07},
348762306a36Sopenharmony_ci	{0xa0, 0xd7, ZC3XX_R128_GAMMA08},
348862306a36Sopenharmony_ci	{0xa0, 0xe1, ZC3XX_R129_GAMMA09},
348962306a36Sopenharmony_ci	{0xa0, 0xea, ZC3XX_R12A_GAMMA0A},
349062306a36Sopenharmony_ci	{0xa0, 0xf1, ZC3XX_R12B_GAMMA0B},
349162306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R12C_GAMMA0C},
349262306a36Sopenharmony_ci	{0xa0, 0xfc, ZC3XX_R12D_GAMMA0D},
349362306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R12E_GAMMA0E},
349462306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R12F_GAMMA0F},
349562306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R130_GAMMA10},
349662306a36Sopenharmony_ci	{0xa0, 0x22, ZC3XX_R131_GAMMA11},
349762306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R132_GAMMA12},
349862306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R133_GAMMA13},
349962306a36Sopenharmony_ci	{0xa0, 0x16, ZC3XX_R134_GAMMA14},
350062306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R135_GAMMA15},
350162306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R136_GAMMA16},
350262306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R137_GAMMA17},
350362306a36Sopenharmony_ci	{0xa0, 0x0b, ZC3XX_R138_GAMMA18},
350462306a36Sopenharmony_ci	{0xa0, 0x09, ZC3XX_R139_GAMMA19},
350562306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R13A_GAMMA1A},
350662306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R13B_GAMMA1B},
350762306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R13C_GAMMA1C},
350862306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R13D_GAMMA1D},
350962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R13E_GAMMA1E},
351062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R13F_GAMMA1F},
351162306a36Sopenharmony_ci	{0xa0, 0x4e, ZC3XX_R10A_RGB00},	/* matrix */
351262306a36Sopenharmony_ci	{0xa0, 0xfe, ZC3XX_R10B_RGB01},
351362306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R10C_RGB02},
351462306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R10D_RGB10},
351562306a36Sopenharmony_ci	{0xa0, 0x4d, ZC3XX_R10E_RGB11},
351662306a36Sopenharmony_ci	{0xa0, 0xfc, ZC3XX_R10F_RGB12},
351762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R110_RGB20},
351862306a36Sopenharmony_ci	{0xa0, 0xf6, ZC3XX_R111_RGB21},
351962306a36Sopenharmony_ci	{0xa0, 0x4a, ZC3XX_R112_RGB22},
352062306a36Sopenharmony_ci
352162306a36Sopenharmony_ci	{0xa1, 0x01, 0x0180},
352262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
352362306a36Sopenharmony_ci	{0xaa, 0x10, 0x000d},
352462306a36Sopenharmony_ci	{0xaa, 0x76, 0x0002},
352562306a36Sopenharmony_ci	{0xaa, 0x2a, 0x0081},
352662306a36Sopenharmony_ci	{0xaa, 0x2b, 0x0000},
352762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
352862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R191_EXPOSURELIMITMID},
352962306a36Sopenharmony_ci	{0xa0, 0xd8, ZC3XX_R192_EXPOSURELIMITLOW},
353062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
353162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
353262306a36Sopenharmony_ci	{0xa0, 0x1b, ZC3XX_R197_ANTIFLICKERLOW},
353362306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
353462306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
353562306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},
353662306a36Sopenharmony_ci	{0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP},
353762306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
353862306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE},
353962306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
354062306a36Sopenharmony_ci	{0xaa, 0x13, 0x00c3},
354162306a36Sopenharmony_ci
354262306a36Sopenharmony_ci	{0xa1, 0x01, 0x0180},
354362306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
354462306a36Sopenharmony_ci	{}
354562306a36Sopenharmony_ci};
354662306a36Sopenharmony_ci
354762306a36Sopenharmony_cistatic const struct usb_action pas106b_Initial_com[] = {
354862306a36Sopenharmony_ci/* Sream and Sensor specific */
354962306a36Sopenharmony_ci	{0xa1, 0x01, 0x0010},	/* CMOSSensorSelect */
355062306a36Sopenharmony_ci/* System */
355162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},	/* SystemControl */
355262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},	/* SystemControl */
355362306a36Sopenharmony_ci/* Picture size */
355462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},	/* ClockSelect */
355562306a36Sopenharmony_ci	{0xa0, 0x03, 0x003a},
355662306a36Sopenharmony_ci	{0xa0, 0x0c, 0x003b},
355762306a36Sopenharmony_ci	{0xa0, 0x04, 0x0038},
355862306a36Sopenharmony_ci	{}
355962306a36Sopenharmony_ci};
356062306a36Sopenharmony_ci
356162306a36Sopenharmony_cistatic const struct usb_action pas106b_InitialScale[] = {	/* 176x144 */
356262306a36Sopenharmony_ci/* JPEG control */
356362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
356462306a36Sopenharmony_ci/* Sream and Sensor specific */
356562306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R010_CMOSSENSORSELECT},
356662306a36Sopenharmony_ci/* Picture size */
356762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R003_FRAMEWIDTHHIGH},
356862306a36Sopenharmony_ci	{0xa0, 0xb0, ZC3XX_R004_FRAMEWIDTHLOW},
356962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R005_FRAMEHEIGHTHIGH},
357062306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R006_FRAMEHEIGHTLOW},
357162306a36Sopenharmony_ci/* System */
357262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
357362306a36Sopenharmony_ci/* Sream and Sensor specific */
357462306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
357562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
357662306a36Sopenharmony_ci/* Sensor Interface */
357762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE},
357862306a36Sopenharmony_ci/* Window inside sensor array */
357962306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R09A_WINXSTARTLOW},
358062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
358162306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R11C_FIRSTXLOW},
358262306a36Sopenharmony_ci	{0xa0, 0x28, ZC3XX_R09C_WINHEIGHTLOW},
358362306a36Sopenharmony_ci	{0xa0, 0x68, ZC3XX_R09E_WINWIDTHLOW},
358462306a36Sopenharmony_ci/* Init the sensor */
358562306a36Sopenharmony_ci	{0xaa, 0x02, 0x0004},
358662306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
358762306a36Sopenharmony_ci	{0xaa, 0x09, 0x0005},
358862306a36Sopenharmony_ci	{0xaa, 0x0a, 0x0002},
358962306a36Sopenharmony_ci	{0xaa, 0x0b, 0x0002},
359062306a36Sopenharmony_ci	{0xaa, 0x0c, 0x0005},
359162306a36Sopenharmony_ci	{0xaa, 0x0d, 0x0000},
359262306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0002},
359362306a36Sopenharmony_ci	{0xaa, 0x14, 0x0081},
359462306a36Sopenharmony_ci/* Other registers */
359562306a36Sopenharmony_ci	{0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
359662306a36Sopenharmony_ci/* Frame retrieving */
359762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
359862306a36Sopenharmony_ci/* Gains */
359962306a36Sopenharmony_ci	{0xa0, 0xa0, ZC3XX_R1A8_DIGITALGAIN},
360062306a36Sopenharmony_ci/* Unknown */
360162306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},
360262306a36Sopenharmony_ci/* Sharpness */
360362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
360462306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
360562306a36Sopenharmony_ci/* Other registers */
360662306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
360762306a36Sopenharmony_ci/* Auto exposure and white balance */
360862306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
360962306a36Sopenharmony_ci/*Dead pixels */
361062306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
361162306a36Sopenharmony_ci/* EEPROM */
361262306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
361362306a36Sopenharmony_ci/* JPEG control */
361462306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
361562306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},
361662306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05},
361762306a36Sopenharmony_ci/* Other registers */
361862306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
361962306a36Sopenharmony_ci/* Auto exposure and white balance */
362062306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
362162306a36Sopenharmony_ci/*Dead pixels */
362262306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
362362306a36Sopenharmony_ci/* EEPROM */
362462306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
362562306a36Sopenharmony_ci/* JPEG control */
362662306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
362762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},
362862306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05},
362962306a36Sopenharmony_ci
363062306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R10A_RGB00},	/* matrix */
363162306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R10B_RGB01},
363262306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R10C_RGB02},
363362306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R10D_RGB10},
363462306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R10E_RGB11},
363562306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R10F_RGB12},
363662306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R110_RGB20},
363762306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R111_RGB21},
363862306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R112_RGB22},
363962306a36Sopenharmony_ci/* Auto correction */
364062306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R181_WINXSTART},
364162306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R182_WINXWIDTH},
364262306a36Sopenharmony_ci	{0xa0, 0x16, ZC3XX_R183_WINXCENTER},
364362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R184_WINYSTART},
364462306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R185_WINYWIDTH},
364562306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R186_WINYCENTER},
364662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
364762306a36Sopenharmony_ci/* Auto exposure and white balance */
364862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
364962306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID},
365062306a36Sopenharmony_ci	{0xa0, 0xb1, ZC3XX_R192_EXPOSURELIMITLOW},
365162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
365262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
365362306a36Sopenharmony_ci	{0xa0, 0x87, ZC3XX_R197_ANTIFLICKERLOW},
365462306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
365562306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
365662306a36Sopenharmony_ci/* sensor on */
365762306a36Sopenharmony_ci	{0xaa, 0x07, 0x00b1},
365862306a36Sopenharmony_ci	{0xaa, 0x05, 0x0003},
365962306a36Sopenharmony_ci	{0xaa, 0x04, 0x0001},
366062306a36Sopenharmony_ci	{0xaa, 0x03, 0x003b},
366162306a36Sopenharmony_ci/* Gains */
366262306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R1A9_DIGITALLIMITDIFF},
366362306a36Sopenharmony_ci	{0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP},
366462306a36Sopenharmony_ci	{0xa0, 0xa0, ZC3XX_R11D_GLOBALGAIN},
366562306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
366662306a36Sopenharmony_ci/* Auto correction */
366762306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
366862306a36Sopenharmony_ci	{0xa1, 0x01, 0x0180},				/* AutoCorrectEnable */
366962306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
367062306a36Sopenharmony_ci/* Gains */
367162306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R116_RGAIN},
367262306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R117_GGAIN},
367362306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R118_BGAIN},
367462306a36Sopenharmony_ci	{}
367562306a36Sopenharmony_ci};
367662306a36Sopenharmony_ci
367762306a36Sopenharmony_cistatic const struct usb_action pas106b_Initial[] = {	/* 352x288 */
367862306a36Sopenharmony_ci/* JPEG control */
367962306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
368062306a36Sopenharmony_ci/* Sream and Sensor specific */
368162306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R010_CMOSSENSORSELECT},
368262306a36Sopenharmony_ci/* Picture size */
368362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R003_FRAMEWIDTHHIGH},
368462306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R004_FRAMEWIDTHLOW},
368562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
368662306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R006_FRAMEHEIGHTLOW},
368762306a36Sopenharmony_ci/* System */
368862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
368962306a36Sopenharmony_ci/* Sream and Sensor specific */
369062306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},
369162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
369262306a36Sopenharmony_ci/* Sensor Interface */
369362306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE},
369462306a36Sopenharmony_ci/* Window inside sensor array */
369562306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R09A_WINXSTARTLOW},
369662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
369762306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R11C_FIRSTXLOW},
369862306a36Sopenharmony_ci	{0xa0, 0x28, ZC3XX_R09C_WINHEIGHTLOW},
369962306a36Sopenharmony_ci	{0xa0, 0x68, ZC3XX_R09E_WINWIDTHLOW},
370062306a36Sopenharmony_ci/* Init the sensor */
370162306a36Sopenharmony_ci	{0xaa, 0x02, 0x0004},
370262306a36Sopenharmony_ci	{0xaa, 0x08, 0x0000},
370362306a36Sopenharmony_ci	{0xaa, 0x09, 0x0005},
370462306a36Sopenharmony_ci	{0xaa, 0x0a, 0x0002},
370562306a36Sopenharmony_ci	{0xaa, 0x0b, 0x0002},
370662306a36Sopenharmony_ci	{0xaa, 0x0c, 0x0005},
370762306a36Sopenharmony_ci	{0xaa, 0x0d, 0x0000},
370862306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0002},
370962306a36Sopenharmony_ci	{0xaa, 0x14, 0x0081},
371062306a36Sopenharmony_ci/* Other registers */
371162306a36Sopenharmony_ci	{0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
371262306a36Sopenharmony_ci/* Frame retrieving */
371362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
371462306a36Sopenharmony_ci/* Gains */
371562306a36Sopenharmony_ci	{0xa0, 0xa0, ZC3XX_R1A8_DIGITALGAIN},
371662306a36Sopenharmony_ci/* Unknown */
371762306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},
371862306a36Sopenharmony_ci/* Sharpness */
371962306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
372062306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
372162306a36Sopenharmony_ci/* Other registers */
372262306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
372362306a36Sopenharmony_ci/* Auto exposure and white balance */
372462306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
372562306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R18D_YTARGET},
372662306a36Sopenharmony_ci/*Dead pixels */
372762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
372862306a36Sopenharmony_ci/* EEPROM */
372962306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
373062306a36Sopenharmony_ci/* JPEG control */
373162306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
373262306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},
373362306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05},
373462306a36Sopenharmony_ci/* Other registers */
373562306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
373662306a36Sopenharmony_ci/* Auto exposure and white balance */
373762306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
373862306a36Sopenharmony_ci/*Dead pixels */
373962306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
374062306a36Sopenharmony_ci/* EEPROM */
374162306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
374262306a36Sopenharmony_ci/* JPEG control */
374362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
374462306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R1C6_SHARPNESS00},
374562306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R1CB_SHARPNESS05},
374662306a36Sopenharmony_ci
374762306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R10A_RGB00},	/* matrix */
374862306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R10B_RGB01},
374962306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R10C_RGB02},
375062306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R10D_RGB10},
375162306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R10E_RGB11},
375262306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R10F_RGB12},
375362306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R110_RGB20},
375462306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R111_RGB21},
375562306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R112_RGB22},
375662306a36Sopenharmony_ci/* Auto correction */
375762306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R181_WINXSTART},
375862306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R182_WINXWIDTH},
375962306a36Sopenharmony_ci	{0xa0, 0x16, ZC3XX_R183_WINXCENTER},
376062306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R184_WINYSTART},
376162306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R185_WINYWIDTH},
376262306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R186_WINYCENTER},
376362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
376462306a36Sopenharmony_ci
376562306a36Sopenharmony_ci/* Auto exposure and white balance */
376662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
376762306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID},
376862306a36Sopenharmony_ci	{0xa0, 0xb1, ZC3XX_R192_EXPOSURELIMITLOW},
376962306a36Sopenharmony_ci
377062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
377162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
377262306a36Sopenharmony_ci	{0xa0, 0x87, ZC3XX_R197_ANTIFLICKERLOW},
377362306a36Sopenharmony_ci
377462306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
377562306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
377662306a36Sopenharmony_ci/* sensor on */
377762306a36Sopenharmony_ci	{0xaa, 0x07, 0x00b1},
377862306a36Sopenharmony_ci	{0xaa, 0x05, 0x0003},
377962306a36Sopenharmony_ci	{0xaa, 0x04, 0x0001},
378062306a36Sopenharmony_ci	{0xaa, 0x03, 0x003b},
378162306a36Sopenharmony_ci/* Gains */
378262306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R1A9_DIGITALLIMITDIFF},
378362306a36Sopenharmony_ci	{0xa0, 0x26, ZC3XX_R1AA_DIGITALGAINSTEP},
378462306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
378562306a36Sopenharmony_ci/* Auto correction */
378662306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R180_AUTOCORRECTENABLE},
378762306a36Sopenharmony_ci	{0xa1, 0x01, 0x0180},				/* AutoCorrectEnable */
378862306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
378962306a36Sopenharmony_ci/* Gains */
379062306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R116_RGAIN},
379162306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R117_GGAIN},
379262306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R118_BGAIN},
379362306a36Sopenharmony_ci
379462306a36Sopenharmony_ci	{0xa0, 0x00, 0x0007},			/* AutoCorrectEnable */
379562306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R018_FRAMELOST},	/* Frame adjust */
379662306a36Sopenharmony_ci	{}
379762306a36Sopenharmony_ci};
379862306a36Sopenharmony_cistatic const struct usb_action pas106b_50HZ[] = {
379962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
380062306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,06,cc */
380162306a36Sopenharmony_ci	{0xa0, 0x54, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,54,cc */
380262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
380362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
380462306a36Sopenharmony_ci	{0xa0, 0x87, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,87,cc */
380562306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},	/* 01,8c,10,cc */
380662306a36Sopenharmony_ci	{0xa0, 0x30, ZC3XX_R18F_AEUNFREEZE},	/* 01,8f,30,cc */
380762306a36Sopenharmony_ci	{0xaa, 0x03, 0x0021},			/* 00,03,21,aa */
380862306a36Sopenharmony_ci	{0xaa, 0x04, 0x000c},			/* 00,04,0c,aa */
380962306a36Sopenharmony_ci	{0xaa, 0x05, 0x0002},			/* 00,05,02,aa */
381062306a36Sopenharmony_ci	{0xaa, 0x07, 0x001c},			/* 00,07,1c,aa */
381162306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,04,cc */
381262306a36Sopenharmony_ci	{}
381362306a36Sopenharmony_ci};
381462306a36Sopenharmony_cistatic const struct usb_action pas106b_60HZ[] = {
381562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
381662306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,06,cc */
381762306a36Sopenharmony_ci	{0xa0, 0x2e, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,2e,cc */
381862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
381962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
382062306a36Sopenharmony_ci	{0xa0, 0x71, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,71,cc */
382162306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},	/* 01,8c,10,cc */
382262306a36Sopenharmony_ci	{0xa0, 0x30, ZC3XX_R18F_AEUNFREEZE},	/* 01,8f,30,cc */
382362306a36Sopenharmony_ci	{0xaa, 0x03, 0x001c},			/* 00,03,1c,aa */
382462306a36Sopenharmony_ci	{0xaa, 0x04, 0x0004},			/* 00,04,04,aa */
382562306a36Sopenharmony_ci	{0xaa, 0x05, 0x0001},			/* 00,05,01,aa */
382662306a36Sopenharmony_ci	{0xaa, 0x07, 0x00c4},			/* 00,07,c4,aa */
382762306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,04,cc */
382862306a36Sopenharmony_ci	{}
382962306a36Sopenharmony_ci};
383062306a36Sopenharmony_cistatic const struct usb_action pas106b_NoFlicker[] = {
383162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
383262306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,06,cc */
383362306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,50,cc */
383462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
383562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
383662306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,10,cc */
383762306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},	/* 01,8c,10,cc */
383862306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},	/* 01,8f,20,cc */
383962306a36Sopenharmony_ci	{0xaa, 0x03, 0x0013},			/* 00,03,13,aa */
384062306a36Sopenharmony_ci	{0xaa, 0x04, 0x0000},			/* 00,04,00,aa */
384162306a36Sopenharmony_ci	{0xaa, 0x05, 0x0001},			/* 00,05,01,aa */
384262306a36Sopenharmony_ci	{0xaa, 0x07, 0x0030},			/* 00,07,30,aa */
384362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
384462306a36Sopenharmony_ci	{}
384562306a36Sopenharmony_ci};
384662306a36Sopenharmony_ci
384762306a36Sopenharmony_ci/* from lvWIMv.inf 046d:08a2/:08aa 2007/06/03 */
384862306a36Sopenharmony_cistatic const struct usb_action pas202b_Initial[] = {	/* 640x480 */
384962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},		/* 00,00,01,cc */
385062306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
385162306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,0e,cc */
385262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},		/* 00,02,00,cc */
385362306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},	/* 00,03,02,cc */
385462306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},		/* 00,04,80,cc */
385562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},	/* 00,05,01,cc */
385662306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},	/* 00,06,e0,cc */
385762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},	/* 00,01,01,cc */
385862306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,03,cc */
385962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,01,cc */
386062306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE},	/* 00,8d,08,cc */
386162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},		/* 00,98,00,cc */
386262306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R09A_WINXSTARTLOW},		/* 00,9a,03,cc */
386362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},		/* 01,1a,00,cc */
386462306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R11C_FIRSTXLOW},		/* 01,1c,03,cc */
386562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH},		/* 00,9b,01,cc */
386662306a36Sopenharmony_ci	{0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW},		/* 00,9c,e6,cc */
386762306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH},		/* 00,9d,02,cc */
386862306a36Sopenharmony_ci	{0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW},		/* 00,9e,86,cc */
386962306a36Sopenharmony_ci	{0xaa, 0x02, 0x0002},			/* 00,02,04,aa --> 02 */
387062306a36Sopenharmony_ci	{0xaa, 0x07, 0x0006},				/* 00,07,06,aa */
387162306a36Sopenharmony_ci	{0xaa, 0x08, 0x0002},				/* 00,08,02,aa */
387262306a36Sopenharmony_ci	{0xaa, 0x09, 0x0006},				/* 00,09,06,aa */
387362306a36Sopenharmony_ci	{0xaa, 0x0a, 0x0001},				/* 00,0a,01,aa */
387462306a36Sopenharmony_ci	{0xaa, 0x0b, 0x0001},				/* 00,0b,01,aa */
387562306a36Sopenharmony_ci	{0xaa, 0x0c, 0x0006},
387662306a36Sopenharmony_ci	{0xaa, 0x0d, 0x0000},				/* 00,0d,00,aa */
387762306a36Sopenharmony_ci	{0xaa, 0x10, 0x0000},				/* 00,10,00,aa */
387862306a36Sopenharmony_ci	{0xaa, 0x12, 0x0005},				/* 00,12,05,aa */
387962306a36Sopenharmony_ci	{0xaa, 0x13, 0x0063},				/* 00,13,63,aa */
388062306a36Sopenharmony_ci	{0xaa, 0x15, 0x0070},				/* 00,15,70,aa */
388162306a36Sopenharmony_ci	{0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},	/* 01,01,b7,cc */
388262306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},		/* 01,00,0d,cc */
388362306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},		/* 01,89,06,cc */
388462306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},				/* 01,ad,00,cc */
388562306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},		/* 01,c5,03,cc */
388662306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},		/* 01,cb,13,cc */
388762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},	/* 02,50,08,cc */
388862306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},		/* 03,01,08,cc */
388962306a36Sopenharmony_ci	{0xa0, 0x70, ZC3XX_R18D_YTARGET},		/* 01,8d,70,cc */
389062306a36Sopenharmony_ci	{}
389162306a36Sopenharmony_ci};
389262306a36Sopenharmony_cistatic const struct usb_action pas202b_InitialScale[] = {	/* 320x240 */
389362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},		/* 00,00,01,cc */
389462306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
389562306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,0e,cc */
389662306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},		/* 00,02,10,cc */
389762306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},	/* 00,03,02,cc */
389862306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},		/* 00,04,80,cc */
389962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},	/* 00,05,01,cc */
390062306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
390162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},	/* 00,01,01,cc */
390262306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,03,cc */
390362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,01,cc */
390462306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R08D_COMPABILITYMODE},	/* 00,8d,08,cc */
390562306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R098_WINYSTARTLOW},		/* 00,98,08,cc */
390662306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R09A_WINXSTARTLOW},		/* 00,9a,02,cc */
390762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R11A_FIRSTYLOW},		/* 01,1a,08,cc */
390862306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R11C_FIRSTXLOW},		/* 01,1c,02,cc */
390962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R09B_WINHEIGHTHIGH},		/* 00,9b,01,cc */
391062306a36Sopenharmony_ci	{0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},
391162306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH},		/* 00,9d,02,cc */
391262306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},		/* 00,9e,88,cc */
391362306a36Sopenharmony_ci	{0xaa, 0x02, 0x0002},				/* 00,02,02,aa */
391462306a36Sopenharmony_ci	{0xaa, 0x07, 0x0006},				/* 00,07,06,aa */
391562306a36Sopenharmony_ci	{0xaa, 0x08, 0x0002},				/* 00,08,02,aa */
391662306a36Sopenharmony_ci	{0xaa, 0x09, 0x0006},				/* 00,09,06,aa */
391762306a36Sopenharmony_ci	{0xaa, 0x0a, 0x0001},				/* 00,0a,01,aa */
391862306a36Sopenharmony_ci	{0xaa, 0x0b, 0x0001},				/* 00,0b,01,aa */
391962306a36Sopenharmony_ci	{0xaa, 0x0c, 0x0006},
392062306a36Sopenharmony_ci	{0xaa, 0x0d, 0x0000},				/* 00,0d,00,aa */
392162306a36Sopenharmony_ci	{0xaa, 0x10, 0x0000},				/* 00,10,00,aa */
392262306a36Sopenharmony_ci	{0xaa, 0x12, 0x0005},				/* 00,12,05,aa */
392362306a36Sopenharmony_ci	{0xaa, 0x13, 0x0063},				/* 00,13,63,aa */
392462306a36Sopenharmony_ci	{0xaa, 0x15, 0x0070},				/* 00,15,70,aa */
392562306a36Sopenharmony_ci	{0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},	/* 01,01,37,cc */
392662306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},		/* 01,00,0d,cc */
392762306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},		/* 01,89,06,cc */
392862306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},				/* 01,ad,00,cc */
392962306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},		/* 01,c5,03,cc */
393062306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},		/* 01,cb,13,cc */
393162306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},	/* 02,50,08,cc */
393262306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},		/* 03,01,08,cc */
393362306a36Sopenharmony_ci	{0xa0, 0x70, ZC3XX_R18D_YTARGET},		/* 01,8d,70,cc */
393462306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R097_WINYSTARTHIGH},
393562306a36Sopenharmony_ci	{0xa0, 0xfe, ZC3XX_R098_WINYSTARTLOW},
393662306a36Sopenharmony_ci	{}
393762306a36Sopenharmony_ci};
393862306a36Sopenharmony_cistatic const struct usb_action pas202b_50HZ[] = {
393962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},		/* 00,19,00,cc */
394062306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R087_EXPTIMEMID},		/* 00,87,20,cc */
394162306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R088_EXPTIMELOW},		/* 00,88,21,cc */
394262306a36Sopenharmony_ci	{0xaa, 0x20, 0x0002},				/* 00,20,02,aa */
394362306a36Sopenharmony_ci	{0xaa, 0x21, 0x001b},
394462306a36Sopenharmony_ci	{0xaa, 0x03, 0x0044},				/* 00,03,44,aa */
394562306a36Sopenharmony_ci	{0xaa, 0x04, 0x0008},
394662306a36Sopenharmony_ci	{0xaa, 0x05, 0x001b},
394762306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0001},				/* 00,0e,01,aa */
394862306a36Sopenharmony_ci	{0xaa, 0x0f, 0x0000},				/* 00,0f,00,aa */
394962306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF},
395062306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},	/* 01,aa,24,cc */
395162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,00,cc */
395262306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID},
395362306a36Sopenharmony_ci	{0xa0, 0x1b, ZC3XX_R192_EXPOSURELIMITLOW},
395462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc */
395562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,00,cc */
395662306a36Sopenharmony_ci	{0xa0, 0x4d, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,4d,cc */
395762306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
395862306a36Sopenharmony_ci	{0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE},
395962306a36Sopenharmony_ci	{0xa0, 0x44, ZC3XX_R01D_HSYNC_0},		/* 00,1d,44,cc */
396062306a36Sopenharmony_ci	{0xa0, 0x6f, ZC3XX_R01E_HSYNC_1},		/* 00,1e,6f,cc */
396162306a36Sopenharmony_ci	{0xa0, 0xad, ZC3XX_R01F_HSYNC_2},		/* 00,1f,ad,cc */
396262306a36Sopenharmony_ci	{0xa0, 0xeb, ZC3XX_R020_HSYNC_3},		/* 00,20,eb,cc */
396362306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID},		/* 00,87,0f,cc */
396462306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW},		/* 00,88,0e,cc */
396562306a36Sopenharmony_ci	{}
396662306a36Sopenharmony_ci};
396762306a36Sopenharmony_cistatic const struct usb_action pas202b_50HZScale[] = {
396862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},		/* 00,19,00,cc */
396962306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R087_EXPTIMEMID},		/* 00,87,20,cc */
397062306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R088_EXPTIMELOW},		/* 00,88,21,cc */
397162306a36Sopenharmony_ci	{0xaa, 0x20, 0x0004},
397262306a36Sopenharmony_ci	{0xaa, 0x21, 0x003d},
397362306a36Sopenharmony_ci	{0xaa, 0x03, 0x0041},				/* 00,03,41,aa */
397462306a36Sopenharmony_ci	{0xaa, 0x04, 0x0010},
397562306a36Sopenharmony_ci	{0xaa, 0x05, 0x003d},
397662306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0001},				/* 00,0e,01,aa */
397762306a36Sopenharmony_ci	{0xaa, 0x0f, 0x0000},				/* 00,0f,00,aa */
397862306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF},
397962306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},	/* 01,aa,24,cc */
398062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,00,cc */
398162306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID},
398262306a36Sopenharmony_ci	{0xa0, 0x3d, ZC3XX_R192_EXPOSURELIMITLOW},
398362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc */
398462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,00,cc */
398562306a36Sopenharmony_ci	{0xa0, 0x9b, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,9b,cc */
398662306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
398762306a36Sopenharmony_ci	{0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE},
398862306a36Sopenharmony_ci	{0xa0, 0x41, ZC3XX_R01D_HSYNC_0},		/* 00,1d,41,cc */
398962306a36Sopenharmony_ci	{0xa0, 0x6f, ZC3XX_R01E_HSYNC_1},		/* 00,1e,6f,cc */
399062306a36Sopenharmony_ci	{0xa0, 0xad, ZC3XX_R01F_HSYNC_2},		/* 00,1f,ad,cc */
399162306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},		/* 00,20,ff,cc */
399262306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID},		/* 00,87,0f,cc */
399362306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW},		/* 00,88,0e,cc */
399462306a36Sopenharmony_ci	{}
399562306a36Sopenharmony_ci};
399662306a36Sopenharmony_cistatic const struct usb_action pas202b_60HZ[] = {
399762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},		/* 00,19,00,cc */
399862306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R087_EXPTIMEMID},		/* 00,87,20,cc */
399962306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R088_EXPTIMELOW},		/* 00,88,21,cc */
400062306a36Sopenharmony_ci	{0xaa, 0x20, 0x0002},				/* 00,20,02,aa */
400162306a36Sopenharmony_ci	{0xaa, 0x21, 0x0000},				/* 00,21,00,aa */
400262306a36Sopenharmony_ci	{0xaa, 0x03, 0x0045},				/* 00,03,45,aa */
400362306a36Sopenharmony_ci	{0xaa, 0x04, 0x0008},				/* 00,04,08,aa */
400462306a36Sopenharmony_ci	{0xaa, 0x05, 0x0000},				/* 00,05,00,aa */
400562306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0001},				/* 00,0e,01,aa */
400662306a36Sopenharmony_ci	{0xaa, 0x0f, 0x0000},				/* 00,0f,00,aa */
400762306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF},
400862306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},	/* 01,aa,24,cc */
400962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,00,cc */
401062306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID},
401162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW},
401262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc */
401362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,00,cc */
401462306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,40,cc */
401562306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
401662306a36Sopenharmony_ci	{0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE},
401762306a36Sopenharmony_ci	{0xa0, 0x45, ZC3XX_R01D_HSYNC_0},		/* 00,1d,45,cc */
401862306a36Sopenharmony_ci	{0xa0, 0x8e, ZC3XX_R01E_HSYNC_1},		/* 00,1e,8e,cc */
401962306a36Sopenharmony_ci	{0xa0, 0xc1, ZC3XX_R01F_HSYNC_2},		/* 00,1f,c1,cc */
402062306a36Sopenharmony_ci	{0xa0, 0xf5, ZC3XX_R020_HSYNC_3},		/* 00,20,f5,cc */
402162306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID},		/* 00,87,0f,cc */
402262306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW},		/* 00,88,0e,cc */
402362306a36Sopenharmony_ci	{}
402462306a36Sopenharmony_ci};
402562306a36Sopenharmony_cistatic const struct usb_action pas202b_60HZScale[] = {
402662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},		/* 00,19,00,cc */
402762306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R087_EXPTIMEMID},		/* 00,87,20,cc */
402862306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R088_EXPTIMELOW},		/* 00,88,21,cc */
402962306a36Sopenharmony_ci	{0xaa, 0x20, 0x0004},
403062306a36Sopenharmony_ci	{0xaa, 0x21, 0x0008},
403162306a36Sopenharmony_ci	{0xaa, 0x03, 0x0042},				/* 00,03,42,aa */
403262306a36Sopenharmony_ci	{0xaa, 0x04, 0x0010},
403362306a36Sopenharmony_ci	{0xaa, 0x05, 0x0008},
403462306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0001},				/* 00,0e,01,aa */
403562306a36Sopenharmony_ci	{0xaa, 0x0f, 0x0000},				/* 00,0f,00,aa */
403662306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R1A9_DIGITALLIMITDIFF},
403762306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},	/* 01,aa,24,cc */
403862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,00,cc */
403962306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID},
404062306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R192_EXPOSURELIMITLOW},
404162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc */
404262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,00,cc */
404362306a36Sopenharmony_ci	{0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,81,cc */
404462306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
404562306a36Sopenharmony_ci	{0xa0, 0x1b, ZC3XX_R18F_AEUNFREEZE},
404662306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R01D_HSYNC_0},		/* 00,1d,42,cc */
404762306a36Sopenharmony_ci	{0xa0, 0x6f, ZC3XX_R01E_HSYNC_1},		/* 00,1e,6f,cc */
404862306a36Sopenharmony_ci	{0xa0, 0xaf, ZC3XX_R01F_HSYNC_2},		/* 00,1f,af,cc */
404962306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},		/* 00,20,ff,cc */
405062306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID},		/* 00,87,0f,cc */
405162306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW},		/* 00,88,0e,cc */
405262306a36Sopenharmony_ci	{}
405362306a36Sopenharmony_ci};
405462306a36Sopenharmony_cistatic const struct usb_action pas202b_NoFlicker[] = {
405562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},		/* 00,19,00,cc */
405662306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R087_EXPTIMEMID},		/* 00,87,20,cc */
405762306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R088_EXPTIMELOW},		/* 00,88,21,cc */
405862306a36Sopenharmony_ci	{0xaa, 0x20, 0x0002},				/* 00,20,02,aa */
405962306a36Sopenharmony_ci	{0xaa, 0x21, 0x0006},
406062306a36Sopenharmony_ci	{0xaa, 0x03, 0x0040},				/* 00,03,40,aa */
406162306a36Sopenharmony_ci	{0xaa, 0x04, 0x0008},				/* 00,04,08,aa */
406262306a36Sopenharmony_ci	{0xaa, 0x05, 0x0006},
406362306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0001},				/* 00,0e,01,aa */
406462306a36Sopenharmony_ci	{0xaa, 0x0f, 0x0000},				/* 00,0f,00,aa */
406562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,00,cc */
406662306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R191_EXPOSURELIMITMID},
406762306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R192_EXPOSURELIMITLOW},
406862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc */
406962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,00,cc */
407062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW},
407162306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},		/* 01,8c,10,cc */
407262306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},		/* 01,8f,20,cc */
407362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},	/* 01,a9,00,cc */
407462306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
407562306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R01D_HSYNC_0},		/* 00,1d,40,cc */
407662306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R01E_HSYNC_1},		/* 00,1e,60,cc */
407762306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01F_HSYNC_2},		/* 00,1f,90,cc */
407862306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},		/* 00,20,ff,cc */
407962306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID},		/* 00,87,0f,cc */
408062306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW},		/* 00,88,0e,cc */
408162306a36Sopenharmony_ci	{}
408262306a36Sopenharmony_ci};
408362306a36Sopenharmony_cistatic const struct usb_action pas202b_NoFlickerScale[] = {
408462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},		/* 00,19,00,cc */
408562306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R087_EXPTIMEMID},		/* 00,87,20,cc */
408662306a36Sopenharmony_ci	{0xa0, 0x21, ZC3XX_R088_EXPTIMELOW},		/* 00,88,21,cc */
408762306a36Sopenharmony_ci	{0xaa, 0x20, 0x0004},
408862306a36Sopenharmony_ci	{0xaa, 0x21, 0x000c},
408962306a36Sopenharmony_ci	{0xaa, 0x03, 0x0040},				/* 00,03,40,aa */
409062306a36Sopenharmony_ci	{0xaa, 0x04, 0x0010},
409162306a36Sopenharmony_ci	{0xaa, 0x05, 0x000c},
409262306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0001},				/* 00,0e,01,aa */
409362306a36Sopenharmony_ci	{0xaa, 0x0f, 0x0000},				/* 00,0f,00,aa */
409462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,00,cc */
409562306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID},
409662306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R192_EXPOSURELIMITLOW},
409762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc */
409862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,00,cc */
409962306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,02,cc */
410062306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},		/* 01,8c,10,cc */
410162306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},		/* 01,8f,20,cc */
410262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},	/* 01,a9,00,cc */
410362306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
410462306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R01D_HSYNC_0},		/* 00,1d,40,cc */
410562306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R01E_HSYNC_1},		/* 00,1e,60,cc */
410662306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01F_HSYNC_2},		/* 00,1f,90,cc */
410762306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},		/* 00,20,ff,cc */
410862306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R087_EXPTIMEMID},		/* 00,87,0f,cc */
410962306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R088_EXPTIMELOW},		/* 00,88,0e,cc */
411062306a36Sopenharmony_ci	{}
411162306a36Sopenharmony_ci};
411262306a36Sopenharmony_ci
411362306a36Sopenharmony_ci/* mt9v111 (mi0360soc) and pb0330 from vm30x.inf 0ac8:301b 07/02/13 */
411462306a36Sopenharmony_cistatic const struct usb_action mt9v111_1_Initial[] = {	/* 640x480 */
411562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
411662306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
411762306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
411862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
411962306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
412062306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
412162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
412262306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
412362306a36Sopenharmony_ci	{0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
412462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
412562306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
412662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
412762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
412862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
412962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
413062306a36Sopenharmony_ci	{0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
413162306a36Sopenharmony_ci	{0xdd, 0x00, 0x0200},
413262306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
413362306a36Sopenharmony_ci	{0xaa, 0x01, 0x0001},
413462306a36Sopenharmony_ci	{0xaa, 0x06, 0x0000},
413562306a36Sopenharmony_ci	{0xaa, 0x08, 0x0483},
413662306a36Sopenharmony_ci	{0xaa, 0x01, 0x0004},
413762306a36Sopenharmony_ci	{0xaa, 0x08, 0x0006},
413862306a36Sopenharmony_ci	{0xaa, 0x02, 0x0011},
413962306a36Sopenharmony_ci	{0xaa, 0x03, 0x01e5},			/*jfm: was 01e7*/
414062306a36Sopenharmony_ci	{0xaa, 0x04, 0x0285},			/*jfm: was 0287*/
414162306a36Sopenharmony_ci	{0xaa, 0x07, 0x3002},
414262306a36Sopenharmony_ci	{0xaa, 0x20, 0x5100},
414362306a36Sopenharmony_ci	{0xaa, 0x35, 0x507f},
414462306a36Sopenharmony_ci	{0xaa, 0x30, 0x0005},
414562306a36Sopenharmony_ci	{0xaa, 0x31, 0x0000},
414662306a36Sopenharmony_ci	{0xaa, 0x58, 0x0078},
414762306a36Sopenharmony_ci	{0xaa, 0x62, 0x0411},
414862306a36Sopenharmony_ci	{0xaa, 0x2b, 0x007f},
414962306a36Sopenharmony_ci	{0xaa, 0x2c, 0x007f},			/*jfm: was 0030*/
415062306a36Sopenharmony_ci	{0xaa, 0x2d, 0x007f},			/*jfm: was 0030*/
415162306a36Sopenharmony_ci	{0xaa, 0x2e, 0x007f},			/*jfm: was 0030*/
415262306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
415362306a36Sopenharmony_ci	{0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},
415462306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
415562306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
415662306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
415762306a36Sopenharmony_ci	{0xa0, 0x09, 0x01ad},			/*jfm: was 00*/
415862306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
415962306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
416062306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
416162306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
416262306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
416362306a36Sopenharmony_ci	{0xa0, 0x6c, ZC3XX_R18D_YTARGET},
416462306a36Sopenharmony_ci	{0xa0, 0x61, ZC3XX_R116_RGAIN},
416562306a36Sopenharmony_ci	{0xa0, 0x65, ZC3XX_R118_BGAIN},
416662306a36Sopenharmony_ci	{}
416762306a36Sopenharmony_ci};
416862306a36Sopenharmony_cistatic const struct usb_action mt9v111_1_InitialScale[] = {	/* 320x240 */
416962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
417062306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
417162306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
417262306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
417362306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
417462306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
417562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
417662306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
417762306a36Sopenharmony_ci	{0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
417862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
417962306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
418062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
418162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
418262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
418362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
418462306a36Sopenharmony_ci	{0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
418562306a36Sopenharmony_ci	{0xdd, 0x00, 0x0200},
418662306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
418762306a36Sopenharmony_ci	{0xaa, 0x01, 0x0001},
418862306a36Sopenharmony_ci	{0xaa, 0x06, 0x0000},
418962306a36Sopenharmony_ci	{0xaa, 0x08, 0x0483},
419062306a36Sopenharmony_ci	{0xaa, 0x01, 0x0004},
419162306a36Sopenharmony_ci	{0xaa, 0x08, 0x0006},
419262306a36Sopenharmony_ci	{0xaa, 0x02, 0x0011},
419362306a36Sopenharmony_ci	{0xaa, 0x03, 0x01e7},
419462306a36Sopenharmony_ci	{0xaa, 0x04, 0x0287},
419562306a36Sopenharmony_ci	{0xaa, 0x07, 0x3002},
419662306a36Sopenharmony_ci	{0xaa, 0x20, 0x5100},
419762306a36Sopenharmony_ci	{0xaa, 0x35, 0x007f},			/*jfm: was 0050*/
419862306a36Sopenharmony_ci	{0xaa, 0x30, 0x0005},
419962306a36Sopenharmony_ci	{0xaa, 0x31, 0x0000},
420062306a36Sopenharmony_ci	{0xaa, 0x58, 0x0078},
420162306a36Sopenharmony_ci	{0xaa, 0x62, 0x0411},
420262306a36Sopenharmony_ci	{0xaa, 0x2b, 0x007f},			/*jfm: was 28*/
420362306a36Sopenharmony_ci	{0xaa, 0x2c, 0x007f},			/*jfm: was 30*/
420462306a36Sopenharmony_ci	{0xaa, 0x2d, 0x007f},			/*jfm: was 30*/
420562306a36Sopenharmony_ci	{0xaa, 0x2e, 0x007f},			/*jfm: was 28*/
420662306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
420762306a36Sopenharmony_ci	{0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},
420862306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
420962306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
421062306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
421162306a36Sopenharmony_ci	{0xa0, 0x09, 0x01ad},			/*jfm: was 00*/
421262306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
421362306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
421462306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
421562306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
421662306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
421762306a36Sopenharmony_ci	{0xa0, 0x6c, ZC3XX_R18D_YTARGET},
421862306a36Sopenharmony_ci	{0xa0, 0x61, ZC3XX_R116_RGAIN},
421962306a36Sopenharmony_ci	{0xa0, 0x65, ZC3XX_R118_BGAIN},
422062306a36Sopenharmony_ci	{}
422162306a36Sopenharmony_ci};
422262306a36Sopenharmony_cistatic const struct usb_action mt9v111_1_AE50HZ[] = {
422362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
422462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
422562306a36Sopenharmony_ci	{0xbb, 0x00, 0x0562},
422662306a36Sopenharmony_ci	{0xbb, 0x01, 0x09aa},
422762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
422862306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R191_EXPOSURELIMITMID},
422962306a36Sopenharmony_ci	{0xa0, 0x9b, ZC3XX_R192_EXPOSURELIMITLOW},
423062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
423162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
423262306a36Sopenharmony_ci	{0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW},
423362306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
423462306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
423562306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
423662306a36Sopenharmony_ci	{0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
423762306a36Sopenharmony_ci	{0xa0, 0x62, ZC3XX_R01D_HSYNC_0},
423862306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01E_HSYNC_1},
423962306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},
424062306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},
424162306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
424262306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
424362306a36Sopenharmony_ci	{}
424462306a36Sopenharmony_ci};
424562306a36Sopenharmony_cistatic const struct usb_action mt9v111_1_AE50HZScale[] = {
424662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
424762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
424862306a36Sopenharmony_ci	{0xbb, 0x00, 0x0509},
424962306a36Sopenharmony_ci	{0xbb, 0x01, 0x0934},
425062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
425162306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
425262306a36Sopenharmony_ci	{0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW},
425362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
425462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
425562306a36Sopenharmony_ci	{0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW},
425662306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
425762306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
425862306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
425962306a36Sopenharmony_ci	{0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
426062306a36Sopenharmony_ci	{0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
426162306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
426262306a36Sopenharmony_ci	{0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
426362306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},
426462306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
426562306a36Sopenharmony_ci	{}
426662306a36Sopenharmony_ci};
426762306a36Sopenharmony_cistatic const struct usb_action mt9v111_1_AE60HZ[] = {
426862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
426962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
427062306a36Sopenharmony_ci	{0xaa, 0x05, 0x003d},
427162306a36Sopenharmony_ci	{0xaa, 0x09, 0x016e},
427262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
427362306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
427462306a36Sopenharmony_ci	{0xa0, 0xdd, ZC3XX_R192_EXPOSURELIMITLOW},
427562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
427662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
427762306a36Sopenharmony_ci	{0xa0, 0x3d, ZC3XX_R197_ANTIFLICKERLOW},
427862306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
427962306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
428062306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
428162306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
428262306a36Sopenharmony_ci	{0xa0, 0x62, ZC3XX_R01D_HSYNC_0},
428362306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01E_HSYNC_1},
428462306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},
428562306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},
428662306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
428762306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
428862306a36Sopenharmony_ci	{}
428962306a36Sopenharmony_ci};
429062306a36Sopenharmony_cistatic const struct usb_action mt9v111_1_AE60HZScale[] = {
429162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
429262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
429362306a36Sopenharmony_ci	{0xbb, 0x00, 0x0509},
429462306a36Sopenharmony_ci	{0xbb, 0x01, 0x0983},
429562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
429662306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
429762306a36Sopenharmony_ci	{0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW},
429862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
429962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
430062306a36Sopenharmony_ci	{0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW},
430162306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
430262306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
430362306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
430462306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
430562306a36Sopenharmony_ci	{0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
430662306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
430762306a36Sopenharmony_ci	{0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
430862306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},
430962306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
431062306a36Sopenharmony_ci	{}
431162306a36Sopenharmony_ci};
431262306a36Sopenharmony_cistatic const struct usb_action mt9v111_1_AENoFlicker[] = {
431362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
431462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
431562306a36Sopenharmony_ci	{0xbb, 0x00, 0x0509},
431662306a36Sopenharmony_ci	{0xbb, 0x01, 0x0960},
431762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
431862306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
431962306a36Sopenharmony_ci	{0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
432062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
432162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
432262306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
432362306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
432462306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
432562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
432662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
432762306a36Sopenharmony_ci	{0xa0, 0x09, ZC3XX_R01D_HSYNC_0},
432862306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R01E_HSYNC_1},
432962306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
433062306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
433162306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
433262306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
433362306a36Sopenharmony_ci	{}
433462306a36Sopenharmony_ci};
433562306a36Sopenharmony_cistatic const struct usb_action mt9v111_1_AENoFlickerScale[] = {
433662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
433762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
433862306a36Sopenharmony_ci	{0xbb, 0x00, 0x0534},
433962306a36Sopenharmony_ci	{0xbb, 0x02, 0x0960},
434062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
434162306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
434262306a36Sopenharmony_ci	{0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
434362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
434462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
434562306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
434662306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
434762306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
434862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
434962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
435062306a36Sopenharmony_ci	{0xa0, 0x34, ZC3XX_R01D_HSYNC_0},
435162306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R01E_HSYNC_1},
435262306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
435362306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
435462306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
435562306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
435662306a36Sopenharmony_ci	{}
435762306a36Sopenharmony_ci};
435862306a36Sopenharmony_ci/* from usbvm303.inf 0ac8:303b 07/03/25 (3 - tas5130c) */
435962306a36Sopenharmony_cistatic const struct usb_action mt9v111_3_Initial[] = {
436062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
436162306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
436262306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
436362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
436462306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
436562306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
436662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
436762306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
436862306a36Sopenharmony_ci	{0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
436962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
437062306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
437162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
437262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
437362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
437462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
437562306a36Sopenharmony_ci	{0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
437662306a36Sopenharmony_ci	{0xdd, 0x00, 0x0200},
437762306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
437862306a36Sopenharmony_ci	{0xaa, 0x01, 0x0001},		/* select IFP/SOC registers */
437962306a36Sopenharmony_ci	{0xaa, 0x06, 0x0000},		/* operating mode control */
438062306a36Sopenharmony_ci	{0xaa, 0x08, 0x0483},		/* output format control */
438162306a36Sopenharmony_ci					/* H red first, V red or blue first,
438262306a36Sopenharmony_ci					 * raw Bayer, auto flicker */
438362306a36Sopenharmony_ci	{0xaa, 0x01, 0x0004},		/* select sensor core registers */
438462306a36Sopenharmony_ci	{0xaa, 0x08, 0x0006},		/* row start */
438562306a36Sopenharmony_ci	{0xaa, 0x02, 0x0011},		/* column start */
438662306a36Sopenharmony_ci	{0xaa, 0x03, 0x01e5},		/* window height - 1 */
438762306a36Sopenharmony_ci	{0xaa, 0x04, 0x0285},		/* window width - 1 */
438862306a36Sopenharmony_ci	{0xaa, 0x07, 0x3002},		/* output control */
438962306a36Sopenharmony_ci	{0xaa, 0x20, 0x1100},		/* read mode: bits 8 & 12 (?) */
439062306a36Sopenharmony_ci	{0xaa, 0x35, 0x007f},		/* global gain */
439162306a36Sopenharmony_ci	{0xaa, 0x30, 0x0005},
439262306a36Sopenharmony_ci	{0xaa, 0x31, 0x0000},
439362306a36Sopenharmony_ci	{0xaa, 0x58, 0x0078},
439462306a36Sopenharmony_ci	{0xaa, 0x62, 0x0411},
439562306a36Sopenharmony_ci	{0xaa, 0x2b, 0x007f},		/* green1 gain */
439662306a36Sopenharmony_ci	{0xaa, 0x2c, 0x007f},		/* blue gain */
439762306a36Sopenharmony_ci	{0xaa, 0x2d, 0x007f},		/* red gain */
439862306a36Sopenharmony_ci	{0xaa, 0x2e, 0x007f},		/* green2 gain */
439962306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
440062306a36Sopenharmony_ci	{0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
440162306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
440262306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
440362306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
440462306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},
440562306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
440662306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
440762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
440862306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
440962306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
441062306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R18D_YTARGET},
441162306a36Sopenharmony_ci	{0xa0, 0x61, ZC3XX_R116_RGAIN},
441262306a36Sopenharmony_ci	{0xa0, 0x65, ZC3XX_R118_BGAIN},
441362306a36Sopenharmony_ci	{}
441462306a36Sopenharmony_ci};
441562306a36Sopenharmony_cistatic const struct usb_action mt9v111_3_InitialScale[] = {
441662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
441762306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
441862306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
441962306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
442062306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
442162306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
442262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
442362306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
442462306a36Sopenharmony_ci	{0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
442562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
442662306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
442762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
442862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
442962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
443062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
443162306a36Sopenharmony_ci	{0xa0, 0xdc, ZC3XX_R08B_I2CDEVICEADDR},
443262306a36Sopenharmony_ci	{0xdd, 0x00, 0x0200},
443362306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
443462306a36Sopenharmony_ci	{0xaa, 0x01, 0x0001},
443562306a36Sopenharmony_ci	{0xaa, 0x06, 0x0000},
443662306a36Sopenharmony_ci	{0xaa, 0x08, 0x0483},
443762306a36Sopenharmony_ci	{0xaa, 0x01, 0x0004},
443862306a36Sopenharmony_ci	{0xaa, 0x08, 0x0006},
443962306a36Sopenharmony_ci	{0xaa, 0x02, 0x0011},
444062306a36Sopenharmony_ci	{0xaa, 0x03, 0x01e7},
444162306a36Sopenharmony_ci	{0xaa, 0x04, 0x0287},
444262306a36Sopenharmony_ci	{0xaa, 0x07, 0x3002},
444362306a36Sopenharmony_ci	{0xaa, 0x20, 0x1100},
444462306a36Sopenharmony_ci	{0xaa, 0x35, 0x007f},
444562306a36Sopenharmony_ci	{0xaa, 0x30, 0x0005},
444662306a36Sopenharmony_ci	{0xaa, 0x31, 0x0000},
444762306a36Sopenharmony_ci	{0xaa, 0x58, 0x0078},
444862306a36Sopenharmony_ci	{0xaa, 0x62, 0x0411},
444962306a36Sopenharmony_ci	{0xaa, 0x2b, 0x007f},
445062306a36Sopenharmony_ci	{0xaa, 0x2c, 0x007f},
445162306a36Sopenharmony_ci	{0xaa, 0x2d, 0x007f},
445262306a36Sopenharmony_ci	{0xaa, 0x2e, 0x007f},
445362306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
445462306a36Sopenharmony_ci	{0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
445562306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
445662306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
445762306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
445862306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},
445962306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
446062306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
446162306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
446262306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
446362306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
446462306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R18D_YTARGET},
446562306a36Sopenharmony_ci	{0xa0, 0x61, ZC3XX_R116_RGAIN},
446662306a36Sopenharmony_ci	{0xa0, 0x65, ZC3XX_R118_BGAIN},
446762306a36Sopenharmony_ci	{}
446862306a36Sopenharmony_ci};
446962306a36Sopenharmony_cistatic const struct usb_action mt9v111_3_AE50HZ[] = {
447062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
447162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
447262306a36Sopenharmony_ci	{0xaa, 0x05, 0x0009},		/* horizontal blanking */
447362306a36Sopenharmony_ci	{0xaa, 0x09, 0x01ce},		/* shutter width */
447462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
447562306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
447662306a36Sopenharmony_ci	{0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW},
447762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
447862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
447962306a36Sopenharmony_ci	{0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW},
448062306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
448162306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
448262306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
448362306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
448462306a36Sopenharmony_ci	{0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
448562306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
448662306a36Sopenharmony_ci	{0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
448762306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},
448862306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
448962306a36Sopenharmony_ci	{}
449062306a36Sopenharmony_ci};
449162306a36Sopenharmony_cistatic const struct usb_action mt9v111_3_AE50HZScale[] = {
449262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
449362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
449462306a36Sopenharmony_ci	{0xaa, 0x05, 0x0009},
449562306a36Sopenharmony_ci	{0xaa, 0x09, 0x01ce},
449662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
449762306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
449862306a36Sopenharmony_ci	{0xa0, 0xd2, ZC3XX_R192_EXPOSURELIMITLOW},
449962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
450062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
450162306a36Sopenharmony_ci	{0xa0, 0x9a, ZC3XX_R197_ANTIFLICKERLOW},
450262306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
450362306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
450462306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
450562306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
450662306a36Sopenharmony_ci	{0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
450762306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
450862306a36Sopenharmony_ci	{0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
450962306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},
451062306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
451162306a36Sopenharmony_ci	{}
451262306a36Sopenharmony_ci};
451362306a36Sopenharmony_cistatic const struct usb_action mt9v111_3_AE60HZ[] = {
451462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
451562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
451662306a36Sopenharmony_ci	{0xaa, 0x05, 0x0009},
451762306a36Sopenharmony_ci	{0xaa, 0x09, 0x0083},
451862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
451962306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
452062306a36Sopenharmony_ci	{0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW},
452162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
452262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
452362306a36Sopenharmony_ci	{0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW},
452462306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
452562306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
452662306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
452762306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
452862306a36Sopenharmony_ci	{0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
452962306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
453062306a36Sopenharmony_ci	{0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
453162306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},
453262306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
453362306a36Sopenharmony_ci	{}
453462306a36Sopenharmony_ci};
453562306a36Sopenharmony_cistatic const struct usb_action mt9v111_3_AE60HZScale[] = {
453662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
453762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
453862306a36Sopenharmony_ci	{0xaa, 0x05, 0x0009},
453962306a36Sopenharmony_ci	{0xaa, 0x09, 0x0083},
454062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
454162306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
454262306a36Sopenharmony_ci	{0xa0, 0x8f, ZC3XX_R192_EXPOSURELIMITLOW},
454362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
454462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
454562306a36Sopenharmony_ci	{0xa0, 0x81, ZC3XX_R197_ANTIFLICKERLOW},
454662306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
454762306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
454862306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
454962306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
455062306a36Sopenharmony_ci	{0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
455162306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R01E_HSYNC_1},
455262306a36Sopenharmony_ci	{0xa0, 0xf9, ZC3XX_R01F_HSYNC_2},
455362306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},
455462306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
455562306a36Sopenharmony_ci	{}
455662306a36Sopenharmony_ci};
455762306a36Sopenharmony_cistatic const struct usb_action mt9v111_3_AENoFlicker[] = {
455862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
455962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
456062306a36Sopenharmony_ci	{0xaa, 0x05, 0x0034},
456162306a36Sopenharmony_ci	{0xaa, 0x09, 0x0260},
456262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
456362306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
456462306a36Sopenharmony_ci	{0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
456562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
456662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
456762306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
456862306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
456962306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
457062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
457162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
457262306a36Sopenharmony_ci	{0xa0, 0x34, ZC3XX_R01D_HSYNC_0},
457362306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R01E_HSYNC_1},
457462306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
457562306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
457662306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
457762306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
457862306a36Sopenharmony_ci	{}
457962306a36Sopenharmony_ci};
458062306a36Sopenharmony_cistatic const struct usb_action mt9v111_3_AENoFlickerScale[] = {
458162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R180_AUTOCORRECTENABLE},
458262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
458362306a36Sopenharmony_ci	{0xaa, 0x05, 0x0034},
458462306a36Sopenharmony_ci	{0xaa, 0x09, 0x0260},
458562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
458662306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
458762306a36Sopenharmony_ci	{0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
458862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
458962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
459062306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
459162306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
459262306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R18F_AEUNFREEZE},
459362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
459462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
459562306a36Sopenharmony_ci	{0xa0, 0x34, ZC3XX_R01D_HSYNC_0},
459662306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R01E_HSYNC_1},
459762306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
459862306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
459962306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
460062306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},
460162306a36Sopenharmony_ci	{}
460262306a36Sopenharmony_ci};
460362306a36Sopenharmony_ci
460462306a36Sopenharmony_cistatic const struct usb_action pb0330_Initial[] = {	/* 640x480 */
460562306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
460662306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},	/* 00 */
460762306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
460862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
460962306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
461062306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
461162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
461262306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
461362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
461462306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
461562306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
461662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
461762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
461862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
461962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
462062306a36Sopenharmony_ci	{0xdd, 0x00, 0x0200},
462162306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
462262306a36Sopenharmony_ci	{0xaa, 0x01, 0x0006},
462362306a36Sopenharmony_ci	{0xaa, 0x02, 0x0011},
462462306a36Sopenharmony_ci	{0xaa, 0x03, 0x01e5},			/*jfm: was 1e7*/
462562306a36Sopenharmony_ci	{0xaa, 0x04, 0x0285},			/*jfm: was 0287*/
462662306a36Sopenharmony_ci	{0xaa, 0x06, 0x0003},
462762306a36Sopenharmony_ci	{0xaa, 0x07, 0x3002},
462862306a36Sopenharmony_ci	{0xaa, 0x20, 0x1100},
462962306a36Sopenharmony_ci	{0xaa, 0x2f, 0xf7b0},
463062306a36Sopenharmony_ci	{0xaa, 0x30, 0x0005},
463162306a36Sopenharmony_ci	{0xaa, 0x31, 0x0000},
463262306a36Sopenharmony_ci	{0xaa, 0x34, 0x0100},
463362306a36Sopenharmony_ci	{0xaa, 0x35, 0x0060},
463462306a36Sopenharmony_ci	{0xaa, 0x3d, 0x068f},
463562306a36Sopenharmony_ci	{0xaa, 0x40, 0x01e0},
463662306a36Sopenharmony_ci	{0xaa, 0x58, 0x0078},
463762306a36Sopenharmony_ci	{0xaa, 0x62, 0x0411},
463862306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
463962306a36Sopenharmony_ci	{0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
464062306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
464162306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
464262306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
464362306a36Sopenharmony_ci	{0xa0, 0x09, 0x01ad},			/*jfm: was 00 */
464462306a36Sopenharmony_ci	{0xa0, 0x15, 0x01ae},
464562306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
464662306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
464762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
464862306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
464962306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
465062306a36Sopenharmony_ci	{0xa0, 0x78, ZC3XX_R18D_YTARGET},	/*jfm: was 6c*/
465162306a36Sopenharmony_ci	{}
465262306a36Sopenharmony_ci};
465362306a36Sopenharmony_cistatic const struct usb_action pb0330_InitialScale[] = {	/* 320x240 */
465462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
465562306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},	/* 00 */
465662306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R010_CMOSSENSORSELECT},
465762306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
465862306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
465962306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
466062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
466162306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
466262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
466362306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
466462306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R012_VIDEOCONTROLFUNC},
466562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},
466662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},
466762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},
466862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},
466962306a36Sopenharmony_ci	{0xdd, 0x00, 0x0200},
467062306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
467162306a36Sopenharmony_ci	{0xaa, 0x01, 0x0006},
467262306a36Sopenharmony_ci	{0xaa, 0x02, 0x0011},
467362306a36Sopenharmony_ci	{0xaa, 0x03, 0x01e7},
467462306a36Sopenharmony_ci	{0xaa, 0x04, 0x0287},
467562306a36Sopenharmony_ci	{0xaa, 0x06, 0x0003},
467662306a36Sopenharmony_ci	{0xaa, 0x07, 0x3002},
467762306a36Sopenharmony_ci	{0xaa, 0x20, 0x1100},
467862306a36Sopenharmony_ci	{0xaa, 0x2f, 0xf7b0},
467962306a36Sopenharmony_ci	{0xaa, 0x30, 0x0005},
468062306a36Sopenharmony_ci	{0xaa, 0x31, 0x0000},
468162306a36Sopenharmony_ci	{0xaa, 0x34, 0x0100},
468262306a36Sopenharmony_ci	{0xaa, 0x35, 0x0060},
468362306a36Sopenharmony_ci	{0xaa, 0x3d, 0x068f},
468462306a36Sopenharmony_ci	{0xaa, 0x40, 0x01e0},
468562306a36Sopenharmony_ci	{0xaa, 0x58, 0x0078},
468662306a36Sopenharmony_ci	{0xaa, 0x62, 0x0411},
468762306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},
468862306a36Sopenharmony_ci	{0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
468962306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
469062306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
469162306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
469262306a36Sopenharmony_ci	{0xa0, 0x09, 0x01ad},
469362306a36Sopenharmony_ci	{0xa0, 0x15, 0x01ae},
469462306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
469562306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
469662306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
469762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
469862306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN},
469962306a36Sopenharmony_ci	{0xa0, 0x78, ZC3XX_R18D_YTARGET},	/*jfm: was 6c*/
470062306a36Sopenharmony_ci	{}
470162306a36Sopenharmony_ci};
470262306a36Sopenharmony_cistatic const struct usb_action pb0330_50HZ[] = {
470362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
470462306a36Sopenharmony_ci	{0xbb, 0x00, 0x055c},
470562306a36Sopenharmony_ci	{0xbb, 0x01, 0x09aa},
470662306a36Sopenharmony_ci	{0xbb, 0x00, 0x1001},
470762306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
470862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
470962306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
471062306a36Sopenharmony_ci	{0xa0, 0xc4, ZC3XX_R192_EXPOSURELIMITLOW},
471162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
471262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
471362306a36Sopenharmony_ci	{0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW},
471462306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
471562306a36Sopenharmony_ci	{0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE},
471662306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
471762306a36Sopenharmony_ci	{0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
471862306a36Sopenharmony_ci	{0xa0, 0x5c, ZC3XX_R01D_HSYNC_0},
471962306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01E_HSYNC_1},
472062306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},
472162306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},
472262306a36Sopenharmony_ci	{}
472362306a36Sopenharmony_ci};
472462306a36Sopenharmony_cistatic const struct usb_action pb0330_50HZScale[] = {
472562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
472662306a36Sopenharmony_ci	{0xbb, 0x00, 0x0566},
472762306a36Sopenharmony_ci	{0xbb, 0x02, 0x09b2},
472862306a36Sopenharmony_ci	{0xbb, 0x00, 0x1002},
472962306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
473062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
473162306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
473262306a36Sopenharmony_ci	{0xa0, 0x8c, ZC3XX_R192_EXPOSURELIMITLOW},
473362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
473462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
473562306a36Sopenharmony_ci	{0xa0, 0x8a, ZC3XX_R197_ANTIFLICKERLOW},
473662306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
473762306a36Sopenharmony_ci	{0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE},
473862306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
473962306a36Sopenharmony_ci	{0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
474062306a36Sopenharmony_ci	{0xa0, 0xd7, ZC3XX_R01D_HSYNC_0},
474162306a36Sopenharmony_ci	{0xa0, 0xf0, ZC3XX_R01E_HSYNC_1},
474262306a36Sopenharmony_ci	{0xa0, 0xf8, ZC3XX_R01F_HSYNC_2},
474362306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},
474462306a36Sopenharmony_ci	{}
474562306a36Sopenharmony_ci};
474662306a36Sopenharmony_cistatic const struct usb_action pb0330_60HZ[] = {
474762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
474862306a36Sopenharmony_ci	{0xbb, 0x00, 0x0535},
474962306a36Sopenharmony_ci	{0xbb, 0x01, 0x0974},
475062306a36Sopenharmony_ci	{0xbb, 0x00, 0x1001},
475162306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
475262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
475362306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
475462306a36Sopenharmony_ci	{0xa0, 0xfe, ZC3XX_R192_EXPOSURELIMITLOW},
475562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
475662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
475762306a36Sopenharmony_ci	{0xa0, 0x3e, ZC3XX_R197_ANTIFLICKERLOW},
475862306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
475962306a36Sopenharmony_ci	{0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE},
476062306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
476162306a36Sopenharmony_ci	{0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
476262306a36Sopenharmony_ci	{0xa0, 0x35, ZC3XX_R01D_HSYNC_0},
476362306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R01E_HSYNC_1},
476462306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
476562306a36Sopenharmony_ci	{0xa0, 0xd0, ZC3XX_R020_HSYNC_3},
476662306a36Sopenharmony_ci	{}
476762306a36Sopenharmony_ci};
476862306a36Sopenharmony_cistatic const struct usb_action pb0330_60HZScale[] = {
476962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
477062306a36Sopenharmony_ci	{0xbb, 0x00, 0x0535},
477162306a36Sopenharmony_ci	{0xbb, 0x02, 0x096c},
477262306a36Sopenharmony_ci	{0xbb, 0x00, 0x1002},
477362306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
477462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
477562306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
477662306a36Sopenharmony_ci	{0xa0, 0xc0, ZC3XX_R192_EXPOSURELIMITLOW},
477762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
477862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
477962306a36Sopenharmony_ci	{0xa0, 0x7c, ZC3XX_R197_ANTIFLICKERLOW},
478062306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},
478162306a36Sopenharmony_ci	{0xa0, 0x1a, ZC3XX_R18F_AEUNFREEZE},
478262306a36Sopenharmony_ci	{0xa0, 0x14, ZC3XX_R1A9_DIGITALLIMITDIFF},
478362306a36Sopenharmony_ci	{0xa0, 0x66, ZC3XX_R1AA_DIGITALGAINSTEP},
478462306a36Sopenharmony_ci	{0xa0, 0x35, ZC3XX_R01D_HSYNC_0},
478562306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R01E_HSYNC_1},
478662306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
478762306a36Sopenharmony_ci	{0xa0, 0xd0, ZC3XX_R020_HSYNC_3},
478862306a36Sopenharmony_ci	{}
478962306a36Sopenharmony_ci};
479062306a36Sopenharmony_cistatic const struct usb_action pb0330_NoFlicker[] = {
479162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
479262306a36Sopenharmony_ci	{0xbb, 0x00, 0x0509},
479362306a36Sopenharmony_ci	{0xbb, 0x02, 0x0940},
479462306a36Sopenharmony_ci	{0xbb, 0x00, 0x1002},
479562306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
479662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
479762306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
479862306a36Sopenharmony_ci	{0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
479962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
480062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
480162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW},
480262306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
480362306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
480462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
480562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
480662306a36Sopenharmony_ci	{0xa0, 0x09, ZC3XX_R01D_HSYNC_0},
480762306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R01E_HSYNC_1},
480862306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
480962306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
481062306a36Sopenharmony_ci	{}
481162306a36Sopenharmony_ci};
481262306a36Sopenharmony_cistatic const struct usb_action pb0330_NoFlickerScale[] = {
481362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS},
481462306a36Sopenharmony_ci	{0xbb, 0x00, 0x0535},
481562306a36Sopenharmony_ci	{0xbb, 0x01, 0x0980},
481662306a36Sopenharmony_ci	{0xbb, 0x00, 0x1001},
481762306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R11D_GLOBALGAIN},
481862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},
481962306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
482062306a36Sopenharmony_ci	{0xa0, 0xf0, ZC3XX_R192_EXPOSURELIMITLOW},
482162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
482262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
482362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R197_ANTIFLICKERLOW},
482462306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R18C_AEFREEZE},
482562306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R18F_AEUNFREEZE},
482662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF},
482762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP},
482862306a36Sopenharmony_ci	{0xa0, 0x35, ZC3XX_R01D_HSYNC_0},
482962306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R01E_HSYNC_1},
483062306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01F_HSYNC_2},
483162306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R020_HSYNC_3},
483262306a36Sopenharmony_ci	{}
483362306a36Sopenharmony_ci};
483462306a36Sopenharmony_ci
483562306a36Sopenharmony_ci/* from oem9.inf */
483662306a36Sopenharmony_cistatic const struct usb_action po2030_Initial[] = {	/* 640x480 */
483762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */
483862306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R002_CLOCKSELECT},	/* 00,02,04,cc */
483962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
484062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */
484162306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R080_HBLANKHIGH}, /* 00,80,04,cc */
484262306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R081_HBLANKLOW}, /* 00,81,05,cc */
484362306a36Sopenharmony_ci	{0xa0, 0x16, ZC3XX_R083_RGAINADDR}, /* 00,83,16,cc */
484462306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R085_BGAINADDR}, /* 00,85,18,cc */
484562306a36Sopenharmony_ci	{0xa0, 0x1a, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,1a,cc */
484662306a36Sopenharmony_ci	{0xa0, 0x1b, ZC3XX_R087_EXPTIMEMID}, /* 00,87,1b,cc */
484762306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R088_EXPTIMELOW}, /* 00,88,1c,cc */
484862306a36Sopenharmony_ci	{0xa0, 0xee, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,ee,cc */
484962306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */
485062306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */
485162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */
485262306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */
485362306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */
485462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */
485562306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */
485662306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */
485762306a36Sopenharmony_ci	{0xaa, 0x8d, 0x0008},			/* 00,8d,08,aa */
485862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},	/* 00,98,00,cc */
485962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},	/* 00,9a,00,cc */
486062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},	/* 01,1a,00,cc */
486162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},	/* 01,1c,00,cc */
486262306a36Sopenharmony_ci	{0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW},	/* 00,9c,e6,cc */
486362306a36Sopenharmony_ci	{0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW},	/* 00,9e,86,cc */
486462306a36Sopenharmony_ci	{0xaa, 0x09, 0x00ce}, /* 00,09,ce,aa */
486562306a36Sopenharmony_ci	{0xaa, 0x0b, 0x0005}, /* 00,0b,05,aa */
486662306a36Sopenharmony_ci	{0xaa, 0x0d, 0x0054}, /* 00,0d,54,aa */
486762306a36Sopenharmony_ci	{0xaa, 0x0f, 0x00eb}, /* 00,0f,eb,aa */
486862306a36Sopenharmony_ci	{0xaa, 0x87, 0x0000}, /* 00,87,00,aa */
486962306a36Sopenharmony_ci	{0xaa, 0x88, 0x0004}, /* 00,88,04,aa */
487062306a36Sopenharmony_ci	{0xaa, 0x89, 0x0000}, /* 00,89,00,aa */
487162306a36Sopenharmony_ci	{0xaa, 0x8a, 0x0005}, /* 00,8a,05,aa */
487262306a36Sopenharmony_ci	{0xaa, 0x13, 0x0003}, /* 00,13,03,aa */
487362306a36Sopenharmony_ci	{0xaa, 0x16, 0x0040}, /* 00,16,40,aa */
487462306a36Sopenharmony_ci	{0xaa, 0x18, 0x0040}, /* 00,18,40,aa */
487562306a36Sopenharmony_ci	{0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */
487662306a36Sopenharmony_ci	{0xaa, 0x29, 0x00e8}, /* 00,29,e8,aa */
487762306a36Sopenharmony_ci	{0xaa, 0x45, 0x0045}, /* 00,45,45,aa */
487862306a36Sopenharmony_ci	{0xaa, 0x50, 0x00ed}, /* 00,50,ed,aa */
487962306a36Sopenharmony_ci	{0xaa, 0x51, 0x0025}, /* 00,51,25,aa */
488062306a36Sopenharmony_ci	{0xaa, 0x52, 0x0042}, /* 00,52,42,aa */
488162306a36Sopenharmony_ci	{0xaa, 0x53, 0x002f}, /* 00,53,2f,aa */
488262306a36Sopenharmony_ci	{0xaa, 0x79, 0x0025}, /* 00,79,25,aa */
488362306a36Sopenharmony_ci	{0xaa, 0x7b, 0x0000}, /* 00,7b,00,aa */
488462306a36Sopenharmony_ci	{0xaa, 0x7e, 0x0025}, /* 00,7e,25,aa */
488562306a36Sopenharmony_ci	{0xaa, 0x7f, 0x0025}, /* 00,7f,25,aa */
488662306a36Sopenharmony_ci	{0xaa, 0x21, 0x0000}, /* 00,21,00,aa */
488762306a36Sopenharmony_ci	{0xaa, 0x33, 0x0036}, /* 00,33,36,aa */
488862306a36Sopenharmony_ci	{0xaa, 0x36, 0x0060}, /* 00,36,60,aa */
488962306a36Sopenharmony_ci	{0xaa, 0x37, 0x0008}, /* 00,37,08,aa */
489062306a36Sopenharmony_ci	{0xaa, 0x3b, 0x0031}, /* 00,3b,31,aa */
489162306a36Sopenharmony_ci	{0xaa, 0x44, 0x000f}, /* 00,44,0f,aa */
489262306a36Sopenharmony_ci	{0xaa, 0x58, 0x0002}, /* 00,58,02,aa */
489362306a36Sopenharmony_ci	{0xaa, 0x66, 0x00c0}, /* 00,66,c0,aa */
489462306a36Sopenharmony_ci	{0xaa, 0x67, 0x0044}, /* 00,67,44,aa */
489562306a36Sopenharmony_ci	{0xaa, 0x6b, 0x00a0}, /* 00,6b,a0,aa */
489662306a36Sopenharmony_ci	{0xaa, 0x6c, 0x0054}, /* 00,6c,54,aa */
489762306a36Sopenharmony_ci	{0xaa, 0xd6, 0x0007}, /* 00,d6,07,aa */
489862306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,f7,cc */
489962306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
490062306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */
490162306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */
490262306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */
490362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */
490462306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */
490562306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */
490662306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */
490762306a36Sopenharmony_ci	{0xa0, 0x7a, ZC3XX_R116_RGAIN}, /* 01,16,7a,cc */
490862306a36Sopenharmony_ci	{0xa0, 0x4a, ZC3XX_R118_BGAIN}, /* 01,18,4a,cc */
490962306a36Sopenharmony_ci	{}
491062306a36Sopenharmony_ci};
491162306a36Sopenharmony_ci
491262306a36Sopenharmony_ci/* from oem9.inf */
491362306a36Sopenharmony_cistatic const struct usb_action po2030_InitialScale[] = {	/* 320x240 */
491462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL}, /* 00,00,01,cc */
491562306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R002_CLOCKSELECT}, /* 00,02,10,cc */
491662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT}, /* 00,10,01,cc */
491762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING}, /* 00,01,01,cc */
491862306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R080_HBLANKHIGH}, /* 00,80,04,cc */
491962306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R081_HBLANKLOW}, /* 00,81,05,cc */
492062306a36Sopenharmony_ci	{0xa0, 0x16, ZC3XX_R083_RGAINADDR}, /* 00,83,16,cc */
492162306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R085_BGAINADDR}, /* 00,85,18,cc */
492262306a36Sopenharmony_ci	{0xa0, 0x1a, ZC3XX_R086_EXPTIMEHIGH}, /* 00,86,1a,cc */
492362306a36Sopenharmony_ci	{0xa0, 0x1b, ZC3XX_R087_EXPTIMEMID}, /* 00,87,1b,cc */
492462306a36Sopenharmony_ci	{0xa0, 0x1c, ZC3XX_R088_EXPTIMELOW}, /* 00,88,1c,cc */
492562306a36Sopenharmony_ci	{0xa0, 0xee, ZC3XX_R08B_I2CDEVICEADDR}, /* 00,8b,ee,cc */
492662306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING}, /* 00,08,03,cc */
492762306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,03,cc */
492862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,01,cc */
492962306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH}, /* 00,03,02,cc */
493062306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW}, /* 00,04,80,cc */
493162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH}, /* 00,05,01,cc */
493262306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW}, /* 00,06,e0,cc */
493362306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */
493462306a36Sopenharmony_ci	{0xaa, 0x8d, 0x0008},			/* 00,8d,08,aa */
493562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW}, /* 00,98,00,cc */
493662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW}, /* 00,9a,00,cc */
493762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW}, /* 01,1a,00,cc */
493862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW}, /* 01,1c,00,cc */
493962306a36Sopenharmony_ci	{0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW}, /* 00,9c,e8,cc */
494062306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW}, /* 00,9e,88,cc */
494162306a36Sopenharmony_ci	{0xaa, 0x09, 0x00cc}, /* 00,09,cc,aa */
494262306a36Sopenharmony_ci	{0xaa, 0x0b, 0x0005}, /* 00,0b,05,aa */
494362306a36Sopenharmony_ci	{0xaa, 0x0d, 0x0058}, /* 00,0d,58,aa */
494462306a36Sopenharmony_ci	{0xaa, 0x0f, 0x00ed}, /* 00,0f,ed,aa */
494562306a36Sopenharmony_ci	{0xaa, 0x87, 0x0000}, /* 00,87,00,aa */
494662306a36Sopenharmony_ci	{0xaa, 0x88, 0x0004}, /* 00,88,04,aa */
494762306a36Sopenharmony_ci	{0xaa, 0x89, 0x0000}, /* 00,89,00,aa */
494862306a36Sopenharmony_ci	{0xaa, 0x8a, 0x0005}, /* 00,8a,05,aa */
494962306a36Sopenharmony_ci	{0xaa, 0x13, 0x0003}, /* 00,13,03,aa */
495062306a36Sopenharmony_ci	{0xaa, 0x16, 0x0040}, /* 00,16,40,aa */
495162306a36Sopenharmony_ci	{0xaa, 0x18, 0x0040}, /* 00,18,40,aa */
495262306a36Sopenharmony_ci	{0xaa, 0x1d, 0x0002}, /* 00,1d,02,aa */
495362306a36Sopenharmony_ci	{0xaa, 0x29, 0x00e8}, /* 00,29,e8,aa */
495462306a36Sopenharmony_ci	{0xaa, 0x45, 0x0045}, /* 00,45,45,aa */
495562306a36Sopenharmony_ci	{0xaa, 0x50, 0x00ed}, /* 00,50,ed,aa */
495662306a36Sopenharmony_ci	{0xaa, 0x51, 0x0025}, /* 00,51,25,aa */
495762306a36Sopenharmony_ci	{0xaa, 0x52, 0x0042}, /* 00,52,42,aa */
495862306a36Sopenharmony_ci	{0xaa, 0x53, 0x002f}, /* 00,53,2f,aa */
495962306a36Sopenharmony_ci	{0xaa, 0x79, 0x0025}, /* 00,79,25,aa */
496062306a36Sopenharmony_ci	{0xaa, 0x7b, 0x0000}, /* 00,7b,00,aa */
496162306a36Sopenharmony_ci	{0xaa, 0x7e, 0x0025}, /* 00,7e,25,aa */
496262306a36Sopenharmony_ci	{0xaa, 0x7f, 0x0025}, /* 00,7f,25,aa */
496362306a36Sopenharmony_ci	{0xaa, 0x21, 0x0000}, /* 00,21,00,aa */
496462306a36Sopenharmony_ci	{0xaa, 0x33, 0x0036}, /* 00,33,36,aa */
496562306a36Sopenharmony_ci	{0xaa, 0x36, 0x0060}, /* 00,36,60,aa */
496662306a36Sopenharmony_ci	{0xaa, 0x37, 0x0008}, /* 00,37,08,aa */
496762306a36Sopenharmony_ci	{0xaa, 0x3b, 0x0031}, /* 00,3b,31,aa */
496862306a36Sopenharmony_ci	{0xaa, 0x44, 0x000f}, /* 00,44,0f,aa */
496962306a36Sopenharmony_ci	{0xaa, 0x58, 0x0002}, /* 00,58,02,aa */
497062306a36Sopenharmony_ci	{0xaa, 0x66, 0x00c0}, /* 00,66,c0,aa */
497162306a36Sopenharmony_ci	{0xaa, 0x67, 0x0044}, /* 00,67,44,aa */
497262306a36Sopenharmony_ci	{0xaa, 0x6b, 0x00a0}, /* 00,6b,a0,aa */
497362306a36Sopenharmony_ci	{0xaa, 0x6c, 0x0054}, /* 00,6c,54,aa */
497462306a36Sopenharmony_ci	{0xaa, 0xd6, 0x0007}, /* 00,d6,07,aa */
497562306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION}, /* 01,01,f7,cc */
497662306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC}, /* 00,12,05,cc */
497762306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE}, /* 01,00,0d,cc */
497862306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS}, /* 01,89,06,cc */
497962306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad}, /* 01,ad,00,cc */
498062306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE}, /* 01,c5,03,cc */
498162306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05}, /* 01,cb,13,cc */
498262306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE}, /* 02,50,08,cc */
498362306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS}, /* 03,01,08,cc */
498462306a36Sopenharmony_ci	{0xa0, 0x7a, ZC3XX_R116_RGAIN}, /* 01,16,7a,cc */
498562306a36Sopenharmony_ci	{0xa0, 0x4a, ZC3XX_R118_BGAIN}, /* 01,18,4a,cc */
498662306a36Sopenharmony_ci	{}
498762306a36Sopenharmony_ci};
498862306a36Sopenharmony_ci
498962306a36Sopenharmony_cistatic const struct usb_action po2030_50HZ[] = {
499062306a36Sopenharmony_ci	{0xaa, 0x8d, 0x0008}, /* 00,8d,08,aa */
499162306a36Sopenharmony_ci	{0xaa, 0x1a, 0x0001}, /* 00,1a,01,aa */
499262306a36Sopenharmony_ci	{0xaa, 0x1b, 0x000a}, /* 00,1b,0a,aa */
499362306a36Sopenharmony_ci	{0xaa, 0x1c, 0x00b0}, /* 00,1c,b0,aa */
499462306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,05,cc */
499562306a36Sopenharmony_ci	{0xa0, 0x35, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,35,cc */
499662306a36Sopenharmony_ci	{0xa0, 0x70, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,70,cc */
499762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
499862306a36Sopenharmony_ci	{0xa0, 0x85, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,85,cc */
499962306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,58,cc */
500062306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0c,cc */
500162306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,18,cc */
500262306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,60,cc */
500362306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */
500462306a36Sopenharmony_ci	{0xa0, 0x22, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,22,cc */
500562306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R18D_YTARGET}, /* 01,8d,88,cc */
500662306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN}, /* 01,1d,58,cc */
500762306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,42,cc */
500862306a36Sopenharmony_ci	{}
500962306a36Sopenharmony_ci};
501062306a36Sopenharmony_ci
501162306a36Sopenharmony_cistatic const struct usb_action po2030_60HZ[] = {
501262306a36Sopenharmony_ci	{0xaa, 0x8d, 0x0008}, /* 00,8d,08,aa */
501362306a36Sopenharmony_ci	{0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa */
501462306a36Sopenharmony_ci	{0xaa, 0x1b, 0x00de}, /* 00,1b,de,aa */
501562306a36Sopenharmony_ci	{0xaa, 0x1c, 0x0040}, /* 00,1c,40,aa */
501662306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,08,cc */
501762306a36Sopenharmony_ci	{0xa0, 0xae, ZC3XX_R191_EXPOSURELIMITMID}, /* 01,91,ae,cc */
501862306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R192_EXPOSURELIMITLOW}, /* 01,92,80,cc */
501962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
502062306a36Sopenharmony_ci	{0xa0, 0x6f, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,6f,cc */
502162306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,20,cc */
502262306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R18C_AEFREEZE}, /* 01,8c,0c,cc */
502362306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE}, /* 01,8f,18,cc */
502462306a36Sopenharmony_ci	{0xa0, 0x60, ZC3XX_R1A8_DIGITALGAIN}, /* 01,a8,60,cc */
502562306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,10,cc */
502662306a36Sopenharmony_ci	{0xa0, 0x22, ZC3XX_R1AA_DIGITALGAINSTEP},	/* 01,aa,22,cc */
502762306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R18D_YTARGET},		/* 01,8d,88,cc */
502862306a36Sopenharmony_ci							/* win: 01,8d,80 */
502962306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN},		/* 01,1d,58,cc */
503062306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},	/* 01,80,42,cc */
503162306a36Sopenharmony_ci	{}
503262306a36Sopenharmony_ci};
503362306a36Sopenharmony_ci
503462306a36Sopenharmony_cistatic const struct usb_action po2030_NoFlicker[] = {
503562306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R180_AUTOCORRECTENABLE}, /* 01,80,02,cc */
503662306a36Sopenharmony_ci	{0xaa, 0x8d, 0x000d}, /* 00,8d,0d,aa */
503762306a36Sopenharmony_ci	{0xaa, 0x1a, 0x0000}, /* 00,1a,00,aa */
503862306a36Sopenharmony_ci	{0xaa, 0x1b, 0x0002}, /* 00,1b,02,aa */
503962306a36Sopenharmony_ci	{0xaa, 0x1c, 0x0078}, /* 00,1c,78,aa */
504062306a36Sopenharmony_ci	{0xaa, 0x46, 0x0000}, /* 00,46,00,aa */
504162306a36Sopenharmony_ci	{0xaa, 0x15, 0x0000}, /* 00,15,00,aa */
504262306a36Sopenharmony_ci	{}
504362306a36Sopenharmony_ci};
504462306a36Sopenharmony_ci
504562306a36Sopenharmony_cistatic const struct usb_action tas5130c_InitialScale[] = {	/* 320x240 */
504662306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
504762306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R002_CLOCKSELECT},
504862306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R008_CLOCKSETTING},
504962306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R010_CMOSSENSORSELECT},
505062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
505162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R001_SYSTEMOPERATING},
505262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
505362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
505462306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
505562306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
505662306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
505762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
505862306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
505962306a36Sopenharmony_ci
506062306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R098_WINYSTARTLOW},
506162306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R09A_WINXSTARTLOW},
506262306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R11A_FIRSTYLOW},
506362306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R11C_FIRSTXLOW},
506462306a36Sopenharmony_ci	{0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},
506562306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH},
506662306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},
506762306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R08D_COMPABILITYMODE},
506862306a36Sopenharmony_ci	{0xa0, 0xf7, ZC3XX_R101_SENSORCORRECTION},
506962306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
507062306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
507162306a36Sopenharmony_ci	{0xa0, 0x70, ZC3XX_R18D_YTARGET},
507262306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN},
507362306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},
507462306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
507562306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
507662306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
507762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
507862306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R0A5_EXPOSUREGAIN},
507962306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R0A6_EXPOSUREBLACKLVL},
508062306a36Sopenharmony_ci	{}
508162306a36Sopenharmony_ci};
508262306a36Sopenharmony_cistatic const struct usb_action tas5130c_Initial[] = {	/* 640x480 */
508362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},
508462306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R002_CLOCKSELECT},
508562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R008_CLOCKSETTING},
508662306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R010_CMOSSENSORSELECT},
508762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
508862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R001_SYSTEMOPERATING},
508962306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},
509062306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},
509162306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},
509262306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},
509362306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},
509462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},
509562306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},
509662306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R098_WINYSTARTLOW},
509762306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R09A_WINXSTARTLOW},
509862306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R11A_FIRSTYLOW},
509962306a36Sopenharmony_ci	{0xa0, 0x0f, ZC3XX_R11C_FIRSTXLOW},
510062306a36Sopenharmony_ci	{0xa0, 0xe6, ZC3XX_R09C_WINHEIGHTLOW},
510162306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R09D_WINWIDTHHIGH},
510262306a36Sopenharmony_ci	{0xa0, 0x86, ZC3XX_R09E_WINWIDTHLOW},
510362306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R08D_COMPABILITYMODE},
510462306a36Sopenharmony_ci	{0xa0, 0x37, ZC3XX_R101_SENSORCORRECTION},
510562306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},
510662306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R189_AWBSTATUS},
510762306a36Sopenharmony_ci	{0xa0, 0x70, ZC3XX_R18D_YTARGET},
510862306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R1A8_DIGITALGAIN},
510962306a36Sopenharmony_ci	{0xa0, 0x00, 0x01ad},
511062306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},
511162306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},
511262306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},
511362306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},
511462306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R0A5_EXPOSUREGAIN},
511562306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R0A6_EXPOSUREBLACKLVL},
511662306a36Sopenharmony_ci	{}
511762306a36Sopenharmony_ci};
511862306a36Sopenharmony_cistatic const struct usb_action tas5130c_50HZ[] = {
511962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
512062306a36Sopenharmony_ci	{0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */
512162306a36Sopenharmony_ci	{0xaa, 0xa4, 0x0063}, /* 00,a4,63,aa */
512262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
512362306a36Sopenharmony_ci	{0xa0, 0x63, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,63,cc */
512462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
512562306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R191_EXPOSURELIMITMID},
512662306a36Sopenharmony_ci	{0xa0, 0xfe, ZC3XX_R192_EXPOSURELIMITLOW},
512762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
512862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
512962306a36Sopenharmony_ci	{0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,47,cc */
513062306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
513162306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
513262306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF},
513362306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
513462306a36Sopenharmony_ci	{0xa0, 0xd3, ZC3XX_R01D_HSYNC_0}, /* 00,1d,d3,cc */
513562306a36Sopenharmony_ci	{0xa0, 0xda, ZC3XX_R01E_HSYNC_1}, /* 00,1e,da,cc */
513662306a36Sopenharmony_ci	{0xa0, 0xea, ZC3XX_R01F_HSYNC_2}, /* 00,1f,ea,cc */
513762306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
513862306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */
513962306a36Sopenharmony_ci	{0xa0, 0x4c, ZC3XX_R0A0_MAXXLOW},
514062306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
514162306a36Sopenharmony_ci	{}
514262306a36Sopenharmony_ci};
514362306a36Sopenharmony_cistatic const struct usb_action tas5130c_50HZScale[] = {
514462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
514562306a36Sopenharmony_ci	{0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */
514662306a36Sopenharmony_ci	{0xaa, 0xa4, 0x0077}, /* 00,a4,77,aa */
514762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
514862306a36Sopenharmony_ci	{0xa0, 0x77, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,77,cc */
514962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
515062306a36Sopenharmony_ci	{0xa0, 0x07, ZC3XX_R191_EXPOSURELIMITMID},
515162306a36Sopenharmony_ci	{0xa0, 0xd0, ZC3XX_R192_EXPOSURELIMITLOW},
515262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
515362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
515462306a36Sopenharmony_ci	{0xa0, 0x7d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,7d,cc */
515562306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
515662306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
515762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF},
515862306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
515962306a36Sopenharmony_ci	{0xa0, 0xf0, ZC3XX_R01D_HSYNC_0}, /* 00,1d,f0,cc */
516062306a36Sopenharmony_ci	{0xa0, 0xf4, ZC3XX_R01E_HSYNC_1}, /* 00,1e,f4,cc */
516162306a36Sopenharmony_ci	{0xa0, 0xf8, ZC3XX_R01F_HSYNC_2}, /* 00,1f,f8,cc */
516262306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
516362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */
516462306a36Sopenharmony_ci	{0xa0, 0xc0, ZC3XX_R0A0_MAXXLOW},
516562306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
516662306a36Sopenharmony_ci	{}
516762306a36Sopenharmony_ci};
516862306a36Sopenharmony_cistatic const struct usb_action tas5130c_60HZ[] = {
516962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
517062306a36Sopenharmony_ci	{0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */
517162306a36Sopenharmony_ci	{0xaa, 0xa4, 0x0036}, /* 00,a4,36,aa */
517262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
517362306a36Sopenharmony_ci	{0xa0, 0x36, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,36,cc */
517462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
517562306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R191_EXPOSURELIMITMID},
517662306a36Sopenharmony_ci	{0xa0, 0x54, ZC3XX_R192_EXPOSURELIMITLOW},
517762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
517862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
517962306a36Sopenharmony_ci	{0xa0, 0x3e, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,3e,cc */
518062306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
518162306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
518262306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF},
518362306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
518462306a36Sopenharmony_ci	{0xa0, 0xca, ZC3XX_R01D_HSYNC_0}, /* 00,1d,ca,cc */
518562306a36Sopenharmony_ci	{0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */
518662306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */
518762306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
518862306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */
518962306a36Sopenharmony_ci	{0xa0, 0x28, ZC3XX_R0A0_MAXXLOW},
519062306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
519162306a36Sopenharmony_ci	{}
519262306a36Sopenharmony_ci};
519362306a36Sopenharmony_cistatic const struct usb_action tas5130c_60HZScale[] = {
519462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
519562306a36Sopenharmony_ci	{0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */
519662306a36Sopenharmony_ci	{0xaa, 0xa4, 0x0077}, /* 00,a4,77,aa */
519762306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
519862306a36Sopenharmony_ci	{0xa0, 0x77, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,77,cc */
519962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
520062306a36Sopenharmony_ci	{0xa0, 0x09, ZC3XX_R191_EXPOSURELIMITMID},
520162306a36Sopenharmony_ci	{0xa0, 0x47, ZC3XX_R192_EXPOSURELIMITLOW},
520262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH}, /* 01,95,00,cc */
520362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID}, /* 01,96,00,cc */
520462306a36Sopenharmony_ci	{0xa0, 0x7d, ZC3XX_R197_ANTIFLICKERLOW}, /* 01,97,7d,cc */
520562306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
520662306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
520762306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R1A9_DIGITALLIMITDIFF},
520862306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},
520962306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R01D_HSYNC_0}, /* 00,1d,c8,cc */
521062306a36Sopenharmony_ci	{0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */
521162306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */
521262306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
521362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,03,cc */
521462306a36Sopenharmony_ci	{0xa0, 0x20, ZC3XX_R0A0_MAXXLOW},
521562306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
521662306a36Sopenharmony_ci	{}
521762306a36Sopenharmony_ci};
521862306a36Sopenharmony_cistatic const struct usb_action tas5130c_NoFlicker[] = {
521962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
522062306a36Sopenharmony_ci	{0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */
522162306a36Sopenharmony_ci	{0xaa, 0xa4, 0x0040}, /* 00,a4,40,aa */
522262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
522362306a36Sopenharmony_ci	{0xa0, 0x40, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,40,cc */
522462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
522562306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R191_EXPOSURELIMITMID},
522662306a36Sopenharmony_ci	{0xa0, 0xa0, ZC3XX_R192_EXPOSURELIMITLOW},
522762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
522862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
522962306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
523062306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
523162306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
523262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
523362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */
523462306a36Sopenharmony_ci	{0xa0, 0xbc, ZC3XX_R01D_HSYNC_0}, /* 00,1d,bc,cc */
523562306a36Sopenharmony_ci	{0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */
523662306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */
523762306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
523862306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,02,cc */
523962306a36Sopenharmony_ci	{0xa0, 0xf0, ZC3XX_R0A0_MAXXLOW},
524062306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
524162306a36Sopenharmony_ci	{}
524262306a36Sopenharmony_ci};
524362306a36Sopenharmony_ci
524462306a36Sopenharmony_cistatic const struct usb_action tas5130c_NoFlickerScale[] = {
524562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R019_AUTOADJUSTFPS}, /* 00,19,00,cc */
524662306a36Sopenharmony_ci	{0xaa, 0xa3, 0x0001}, /* 00,a3,01,aa */
524762306a36Sopenharmony_ci	{0xaa, 0xa4, 0x0090}, /* 00,a4,90,aa */
524862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R0A3_EXPOSURETIMEHIGH}, /* 00,a3,01,cc */
524962306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R0A4_EXPOSURETIMELOW}, /* 00,a4,90,cc */
525062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH}, /* 01,90,00,cc */
525162306a36Sopenharmony_ci	{0xa0, 0x0a, ZC3XX_R191_EXPOSURELIMITMID},
525262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R192_EXPOSURELIMITLOW},
525362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},
525462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},
525562306a36Sopenharmony_ci	{0xa0, 0x04, ZC3XX_R197_ANTIFLICKERLOW},
525662306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R18C_AEFREEZE},
525762306a36Sopenharmony_ci	{0xa0, 0x18, ZC3XX_R18F_AEUNFREEZE},
525862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1A9_DIGITALLIMITDIFF}, /* 01,a9,00,cc */
525962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R1AA_DIGITALGAINSTEP}, /* 01,aa,00,cc */
526062306a36Sopenharmony_ci	{0xa0, 0xbc, ZC3XX_R01D_HSYNC_0}, /* 00,1d,bc,cc */
526162306a36Sopenharmony_ci	{0xa0, 0xd0, ZC3XX_R01E_HSYNC_1}, /* 00,1e,d0,cc */
526262306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R01F_HSYNC_2}, /* 00,1f,e0,cc */
526362306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3}, /* 00,20,ff,cc */
526462306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R09F_MAXXHIGH}, /* 00,9f,02,cc */
526562306a36Sopenharmony_ci	{0xa0, 0xf0, ZC3XX_R0A0_MAXXLOW},
526662306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R11D_GLOBALGAIN},
526762306a36Sopenharmony_ci	{}
526862306a36Sopenharmony_ci};
526962306a36Sopenharmony_ci
527062306a36Sopenharmony_ci/* from usbvm305.inf 0ac8:305b 07/06/15 (3 - tas5130c) */
527162306a36Sopenharmony_cistatic const struct usb_action gc0303_Initial[] = {
527262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},		/* 00,00,01,cc, */
527362306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R008_CLOCKSETTING},		/* 00,08,02,cc, */
527462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc, */
527562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R002_CLOCKSELECT},
527662306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},	/* 00,03,02,cc, */
527762306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},		/* 00,04,80,cc, */
527862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},	/* 00,05,01,cc, */
527962306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},	/* 00,06,e0,cc, */
528062306a36Sopenharmony_ci	{0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR},		/* 00,8b,98,cc, */
528162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},	/* 00,01,01,cc, */
528262306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,03,cc, */
528362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,01,cc, */
528462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},		/* 00,98,00,cc, */
528562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},		/* 00,9a,00,cc, */
528662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},		/* 01,1a,00,cc, */
528762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},		/* 01,1c,00,cc, */
528862306a36Sopenharmony_ci	{0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},		/* 00,9c,e6,cc,
528962306a36Sopenharmony_ci							 * 6<->8 */
529062306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},		/* 00,9e,86,cc,
529162306a36Sopenharmony_ci							 * 6<->8 */
529262306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},		/* 00,87,10,cc, */
529362306a36Sopenharmony_ci	{0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR},		/* 00,8b,98,cc, */
529462306a36Sopenharmony_ci	{0xaa, 0x01, 0x0000},
529562306a36Sopenharmony_ci	{0xaa, 0x1a, 0x0000},		/* 00,1a,00,aa, */
529662306a36Sopenharmony_ci	{0xaa, 0x1c, 0x0017},		/* 00,1c,17,aa, */
529762306a36Sopenharmony_ci	{0xaa, 0x1b, 0x0000},
529862306a36Sopenharmony_ci	{0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH},		/* 00,86,82,cc, */
529962306a36Sopenharmony_ci	{0xa0, 0x83, ZC3XX_R087_EXPTIMEMID},		/* 00,87,83,cc, */
530062306a36Sopenharmony_ci	{0xa0, 0x84, ZC3XX_R088_EXPTIMELOW},		/* 00,88,84,cc, */
530162306a36Sopenharmony_ci	{0xaa, 0x05, 0x0010},		/* 00,05,10,aa, */
530262306a36Sopenharmony_ci	{0xaa, 0x0a, 0x0002},
530362306a36Sopenharmony_ci	{0xaa, 0x0b, 0x0000},
530462306a36Sopenharmony_ci	{0xaa, 0x0c, 0x0002},
530562306a36Sopenharmony_ci	{0xaa, 0x0d, 0x0000},
530662306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0002},
530762306a36Sopenharmony_ci	{0xaa, 0x0f, 0x0000},
530862306a36Sopenharmony_ci	{0xaa, 0x10, 0x0002},
530962306a36Sopenharmony_ci	{0xaa, 0x11, 0x0000},
531062306a36Sopenharmony_ci	{0xaa, 0x16, 0x0001},		/* 00,16,01,aa, */
531162306a36Sopenharmony_ci	{0xaa, 0x17, 0x00e8},		/* 00,17,e6,aa, (e6 -> e8) */
531262306a36Sopenharmony_ci	{0xaa, 0x18, 0x0002},		/* 00,18,02,aa, */
531362306a36Sopenharmony_ci	{0xaa, 0x19, 0x0088},		/* 00,19,86,aa, */
531462306a36Sopenharmony_ci	{0xaa, 0x20, 0x0020},		/* 00,20,20,aa, */
531562306a36Sopenharmony_ci	{0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},	/* 01,01,b7,cc, */
531662306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,05,cc, */
531762306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},		/* 01,00,0d,cc, */
531862306a36Sopenharmony_ci	{0xa0, 0x76, ZC3XX_R189_AWBSTATUS},		/* 01,89,76,cc, */
531962306a36Sopenharmony_ci	{0xa0, 0x09, 0x01ad},				/* 01,ad,09,cc, */
532062306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},		/* 01,c5,03,cc, */
532162306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},		/* 01,cb,13,cc, */
532262306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},	/* 02,50,08,cc, */
532362306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},		/* 03,01,08,cc, */
532462306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R1A8_DIGITALGAIN},
532562306a36Sopenharmony_ci	{0xa0, 0x61, ZC3XX_R116_RGAIN},			/* 01,16,61,cc, */
532662306a36Sopenharmony_ci	{0xa0, 0x65, ZC3XX_R118_BGAIN},			/* 01,18,65,cc */
532762306a36Sopenharmony_ci	{0xaa, 0x1b, 0x0000},
532862306a36Sopenharmony_ci	{}
532962306a36Sopenharmony_ci};
533062306a36Sopenharmony_ci
533162306a36Sopenharmony_cistatic const struct usb_action gc0303_InitialScale[] = {
533262306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R000_SYSTEMCONTROL},		/* 00,00,01,cc, */
533362306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R008_CLOCKSETTING},		/* 00,08,02,cc, */
533462306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R010_CMOSSENSORSELECT},	/* 00,10,01,cc, */
533562306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R002_CLOCKSELECT},
533662306a36Sopenharmony_ci	{0xa0, 0x02, ZC3XX_R003_FRAMEWIDTHHIGH},	/* 00,03,02,cc, */
533762306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R004_FRAMEWIDTHLOW},		/* 00,04,80,cc, */
533862306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R005_FRAMEHEIGHTHIGH},	/* 00,05,01,cc, */
533962306a36Sopenharmony_ci	{0xa0, 0xe0, ZC3XX_R006_FRAMEHEIGHTLOW},	/* 00,06,e0,cc, */
534062306a36Sopenharmony_ci	{0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR},		/* 00,8b,98,cc, */
534162306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R001_SYSTEMOPERATING},	/* 00,01,01,cc, */
534262306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,03,cc, */
534362306a36Sopenharmony_ci	{0xa0, 0x01, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,01,cc, */
534462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R098_WINYSTARTLOW},		/* 00,98,00,cc, */
534562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R09A_WINXSTARTLOW},		/* 00,9a,00,cc, */
534662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11A_FIRSTYLOW},		/* 01,1a,00,cc, */
534762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R11C_FIRSTXLOW},		/* 01,1c,00,cc, */
534862306a36Sopenharmony_ci	{0xa0, 0xe8, ZC3XX_R09C_WINHEIGHTLOW},		/* 00,9c,e8,cc,
534962306a36Sopenharmony_ci							 * 8<->6 */
535062306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R09E_WINWIDTHLOW},		/* 00,9e,88,cc,
535162306a36Sopenharmony_ci							 * 8<->6 */
535262306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R087_EXPTIMEMID},		/* 00,87,10,cc, */
535362306a36Sopenharmony_ci	{0xa0, 0x98, ZC3XX_R08B_I2CDEVICEADDR},		/* 00,8b,98,cc, */
535462306a36Sopenharmony_ci	{0xaa, 0x01, 0x0000},
535562306a36Sopenharmony_ci	{0xaa, 0x1a, 0x0000},		/* 00,1a,00,aa, */
535662306a36Sopenharmony_ci	{0xaa, 0x1c, 0x0017},		/* 00,1c,17,aa, */
535762306a36Sopenharmony_ci	{0xaa, 0x1b, 0x0000},
535862306a36Sopenharmony_ci	{0xa0, 0x82, ZC3XX_R086_EXPTIMEHIGH},	/* 00,86,82,cc, */
535962306a36Sopenharmony_ci	{0xa0, 0x83, ZC3XX_R087_EXPTIMEMID},	/* 00,87,83,cc, */
536062306a36Sopenharmony_ci	{0xa0, 0x84, ZC3XX_R088_EXPTIMELOW},	/* 00,88,84,cc, */
536162306a36Sopenharmony_ci	{0xaa, 0x05, 0x0010},		/* 00,05,10,aa, */
536262306a36Sopenharmony_ci	{0xaa, 0x0a, 0x0001},
536362306a36Sopenharmony_ci	{0xaa, 0x0b, 0x0000},
536462306a36Sopenharmony_ci	{0xaa, 0x0c, 0x0001},
536562306a36Sopenharmony_ci	{0xaa, 0x0d, 0x0000},
536662306a36Sopenharmony_ci	{0xaa, 0x0e, 0x0001},
536762306a36Sopenharmony_ci	{0xaa, 0x0f, 0x0000},
536862306a36Sopenharmony_ci	{0xaa, 0x10, 0x0001},
536962306a36Sopenharmony_ci	{0xaa, 0x11, 0x0000},
537062306a36Sopenharmony_ci	{0xaa, 0x16, 0x0001},		/* 00,16,01,aa, */
537162306a36Sopenharmony_ci	{0xaa, 0x17, 0x00e8},		/* 00,17,e6,aa (e6 -> e8) */
537262306a36Sopenharmony_ci	{0xaa, 0x18, 0x0002},		/* 00,18,02,aa, */
537362306a36Sopenharmony_ci	{0xaa, 0x19, 0x0088},		/* 00,19,88,aa, */
537462306a36Sopenharmony_ci	{0xa0, 0xb7, ZC3XX_R101_SENSORCORRECTION},	/* 01,01,b7,cc, */
537562306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R012_VIDEOCONTROLFUNC},	/* 00,12,05,cc, */
537662306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R100_OPERATIONMODE},		/* 01,00,0d,cc, */
537762306a36Sopenharmony_ci	{0xa0, 0x76, ZC3XX_R189_AWBSTATUS},		/* 01,89,76,cc, */
537862306a36Sopenharmony_ci	{0xa0, 0x09, 0x01ad},				/* 01,ad,09,cc, */
537962306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R1C5_SHARPNESSMODE},		/* 01,c5,03,cc, */
538062306a36Sopenharmony_ci	{0xa0, 0x13, ZC3XX_R1CB_SHARPNESS05},		/* 01,cb,13,cc, */
538162306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R250_DEADPIXELSMODE},	/* 02,50,08,cc, */
538262306a36Sopenharmony_ci	{0xa0, 0x08, ZC3XX_R301_EEPROMACCESS},		/* 03,01,08,cc, */
538362306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R1A8_DIGITALGAIN},
538462306a36Sopenharmony_ci	{0xa0, 0x61, ZC3XX_R116_RGAIN},		/* 01,16,61,cc, */
538562306a36Sopenharmony_ci	{0xa0, 0x65, ZC3XX_R118_BGAIN},		/* 01,18,65,cc */
538662306a36Sopenharmony_ci	{0xaa, 0x1b, 0x0000},
538762306a36Sopenharmony_ci	{}
538862306a36Sopenharmony_ci};
538962306a36Sopenharmony_cistatic const struct usb_action gc0303_50HZ[] = {
539062306a36Sopenharmony_ci	{0xaa, 0x82, 0x0000},		/* 00,82,00,aa */
539162306a36Sopenharmony_ci	{0xaa, 0x83, 0x0001},		/* 00,83,01,aa */
539262306a36Sopenharmony_ci	{0xaa, 0x84, 0x0063},
539362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,00,cc, */
539462306a36Sopenharmony_ci	{0xa0, 0x06, ZC3XX_R191_EXPOSURELIMITMID},	/* 01,91,0d,cc, */
539562306a36Sopenharmony_ci	{0xa0, 0xa8, ZC3XX_R192_EXPOSURELIMITLOW},	/* 01,92,50,cc, */
539662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc, */
539762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,00,cc, */
539862306a36Sopenharmony_ci	{0xa0, 0x47, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,47,cc, */
539962306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},		/* 01,8c,0e,cc, */
540062306a36Sopenharmony_ci	{0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE},		/* 01,8f,15,cc, */
540162306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},	/* 01,a9,10,cc, */
540262306a36Sopenharmony_ci	{0xa0, 0x48, ZC3XX_R1AA_DIGITALGAINSTEP},
540362306a36Sopenharmony_ci	{0xa0, 0x62, ZC3XX_R01D_HSYNC_0},		/* 00,1d,62,cc, */
540462306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01E_HSYNC_1},		/* 00,1e,90,cc, */
540562306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},		/* 00,1f,c8,cc, */
540662306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},		/* 00,20,ff,cc, */
540762306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN},		/* 01,1d,58,cc, */
540862306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},	/* 01,80,42,cc, */
540962306a36Sopenharmony_ci	{0xa0, 0x7f, ZC3XX_R18D_YTARGET},
541062306a36Sopenharmony_ci	{}
541162306a36Sopenharmony_ci};
541262306a36Sopenharmony_ci
541362306a36Sopenharmony_cistatic const struct usb_action gc0303_50HZScale[] = {
541462306a36Sopenharmony_ci	{0xaa, 0x82, 0x0000},		/* 00,82,00,aa */
541562306a36Sopenharmony_ci	{0xaa, 0x83, 0x0003},		/* 00,83,03,aa */
541662306a36Sopenharmony_ci	{0xaa, 0x84, 0x0054},		/* 00,84,54,aa */
541762306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,00,cc, */
541862306a36Sopenharmony_ci	{0xa0, 0x0d, ZC3XX_R191_EXPOSURELIMITMID},	/* 01,91,0d,cc, */
541962306a36Sopenharmony_ci	{0xa0, 0x50, ZC3XX_R192_EXPOSURELIMITLOW},	/* 01,92,50,cc, */
542062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc, */
542162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,00,cc, */
542262306a36Sopenharmony_ci	{0xa0, 0x8e, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,8e,cc, */
542362306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},		/* 01,8c,0e,cc, */
542462306a36Sopenharmony_ci	{0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE},		/* 01,8f,15,cc, */
542562306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},	/* 01,a9,10,cc, */
542662306a36Sopenharmony_ci	{0xa0, 0x48, ZC3XX_R1AA_DIGITALGAINSTEP},	/* 01,aa,24,cc, */
542762306a36Sopenharmony_ci	{0xa0, 0x62, ZC3XX_R01D_HSYNC_0},		/* 00,1d,62,cc, */
542862306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01E_HSYNC_1},		/* 00,1e,90,cc, */
542962306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},		/* 00,1f,c8,cc, */
543062306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},		/* 00,20,ff,cc, */
543162306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN},		/* 01,1d,58,cc, */
543262306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},	/* 01,80,42,cc, */
543362306a36Sopenharmony_ci	{0xa0, 0x7f, ZC3XX_R18D_YTARGET},
543462306a36Sopenharmony_ci	{}
543562306a36Sopenharmony_ci};
543662306a36Sopenharmony_ci
543762306a36Sopenharmony_cistatic const struct usb_action gc0303_60HZ[] = {
543862306a36Sopenharmony_ci	{0xaa, 0x82, 0x0000},		/* 00,82,00,aa */
543962306a36Sopenharmony_ci	{0xaa, 0x83, 0x0000},
544062306a36Sopenharmony_ci	{0xaa, 0x84, 0x003b},
544162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,00,cc, */
544262306a36Sopenharmony_ci	{0xa0, 0x05, ZC3XX_R191_EXPOSURELIMITMID},	/* 01,91,05,cc, */
544362306a36Sopenharmony_ci	{0xa0, 0x88, ZC3XX_R192_EXPOSURELIMITLOW},	/* 01,92,88,cc, */
544462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc, */
544562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,00,cc, */
544662306a36Sopenharmony_ci	{0xa0, 0x3b, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,3b,cc, */
544762306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},		/* 01,8c,0e,cc, */
544862306a36Sopenharmony_ci	{0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE},		/* 01,8f,15,cc, */
544962306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},	/* 01,a9,10,cc, */
545062306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},	/* 01,aa,24,cc, */
545162306a36Sopenharmony_ci	{0xa0, 0x62, ZC3XX_R01D_HSYNC_0},		/* 00,1d,62,cc, */
545262306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01E_HSYNC_1},		/* 00,1e,90,cc, */
545362306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},		/* 00,1f,c8,cc, */
545462306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},		/* 00,20,ff,cc, */
545562306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN},		/* 01,1d,58,cc, */
545662306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},	/* 01,80,42,cc, */
545762306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R18D_YTARGET},
545862306a36Sopenharmony_ci	{}
545962306a36Sopenharmony_ci};
546062306a36Sopenharmony_ci
546162306a36Sopenharmony_cistatic const struct usb_action gc0303_60HZScale[] = {
546262306a36Sopenharmony_ci	{0xaa, 0x82, 0x0000},		/* 00,82,00,aa */
546362306a36Sopenharmony_ci	{0xaa, 0x83, 0x0000},
546462306a36Sopenharmony_ci	{0xaa, 0x84, 0x0076},
546562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,00,cc, */
546662306a36Sopenharmony_ci	{0xa0, 0x0b, ZC3XX_R191_EXPOSURELIMITMID},	/* 01,1,0b,cc, */
546762306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R192_EXPOSURELIMITLOW},	/* 01,2,10,cc, */
546862306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,5,00,cc, */
546962306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},	/* 01,6,00,cc, */
547062306a36Sopenharmony_ci	{0xa0, 0x76, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,7,76,cc, */
547162306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},		/* 01,c,0e,cc, */
547262306a36Sopenharmony_ci	{0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE},		/* 01,f,15,cc, */
547362306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R1A9_DIGITALLIMITDIFF},	/* 01,9,10,cc, */
547462306a36Sopenharmony_ci	{0xa0, 0x24, ZC3XX_R1AA_DIGITALGAINSTEP},	/* 01,a,24,cc, */
547562306a36Sopenharmony_ci	{0xa0, 0x62, ZC3XX_R01D_HSYNC_0},		/* 00,d,62,cc, */
547662306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01E_HSYNC_1},		/* 00,e,90,cc, */
547762306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},		/* 00,f,c8,cc, */
547862306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},		/* 00,0,ff,cc, */
547962306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN},		/* 01,d,58,cc, */
548062306a36Sopenharmony_ci	{0xa0, 0x42, ZC3XX_R180_AUTOCORRECTENABLE},	/* 01,80,42,cc, */
548162306a36Sopenharmony_ci	{0xa0, 0x80, ZC3XX_R18D_YTARGET},
548262306a36Sopenharmony_ci	{}
548362306a36Sopenharmony_ci};
548462306a36Sopenharmony_ci
548562306a36Sopenharmony_cistatic const struct usb_action gc0303_NoFlicker[] = {
548662306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R100_OPERATIONMODE},		/* 01,00,0c,cc, */
548762306a36Sopenharmony_ci	{0xaa, 0x82, 0x0000},		/* 00,82,00,aa */
548862306a36Sopenharmony_ci	{0xaa, 0x83, 0x0000},		/* 00,83,00,aa */
548962306a36Sopenharmony_ci	{0xaa, 0x84, 0x0020},		/* 00,84,20,aa */
549062306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,0,00,cc, */
549162306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R191_EXPOSURELIMITMID},
549262306a36Sopenharmony_ci	{0xa0, 0x48, ZC3XX_R192_EXPOSURELIMITLOW},
549362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc, */
549462306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,00,cc, */
549562306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,10,cc, */
549662306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},		/* 01,8c,0e,cc, */
549762306a36Sopenharmony_ci	{0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE},		/* 01,8f,15,cc, */
549862306a36Sopenharmony_ci	{0xa0, 0x62, ZC3XX_R01D_HSYNC_0},		/* 00,1d,62,cc, */
549962306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01E_HSYNC_1},		/* 00,1e,90,cc, */
550062306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},		/* 00,1f,c8,cc, */
550162306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},		/* 00,20,ff,cc, */
550262306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN},		/* 01,1d,58,cc, */
550362306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R180_AUTOCORRECTENABLE},	/* 01,80,03,cc */
550462306a36Sopenharmony_ci	{}
550562306a36Sopenharmony_ci};
550662306a36Sopenharmony_ci
550762306a36Sopenharmony_cistatic const struct usb_action gc0303_NoFlickerScale[] = {
550862306a36Sopenharmony_ci	{0xa0, 0x0c, ZC3XX_R100_OPERATIONMODE},		/* 01,00,0c,cc, */
550962306a36Sopenharmony_ci	{0xaa, 0x82, 0x0000},		/* 00,82,00,aa */
551062306a36Sopenharmony_ci	{0xaa, 0x83, 0x0000},		/* 00,83,00,aa */
551162306a36Sopenharmony_ci	{0xaa, 0x84, 0x0020},		/* 00,84,20,aa */
551262306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R190_EXPOSURELIMITHIGH},	/* 01,90,00,cc, */
551362306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R191_EXPOSURELIMITMID},
551462306a36Sopenharmony_ci	{0xa0, 0x48, ZC3XX_R192_EXPOSURELIMITLOW},
551562306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R195_ANTIFLICKERHIGH},	/* 01,95,00,cc, */
551662306a36Sopenharmony_ci	{0xa0, 0x00, ZC3XX_R196_ANTIFLICKERMID},	/* 01,96,00,cc, */
551762306a36Sopenharmony_ci	{0xa0, 0x10, ZC3XX_R197_ANTIFLICKERLOW},	/* 01,97,10,cc, */
551862306a36Sopenharmony_ci	{0xa0, 0x0e, ZC3XX_R18C_AEFREEZE},		/* 01,8c,0e,cc, */
551962306a36Sopenharmony_ci	{0xa0, 0x15, ZC3XX_R18F_AEUNFREEZE},		/* 01,8f,15,cc, */
552062306a36Sopenharmony_ci	{0xa0, 0x62, ZC3XX_R01D_HSYNC_0},		/* 00,1d,62,cc, */
552162306a36Sopenharmony_ci	{0xa0, 0x90, ZC3XX_R01E_HSYNC_1},		/* 00,1e,90,cc, */
552262306a36Sopenharmony_ci	{0xa0, 0xc8, ZC3XX_R01F_HSYNC_2},		/* 00,1f,c8,cc, */
552362306a36Sopenharmony_ci	{0xa0, 0xff, ZC3XX_R020_HSYNC_3},		/* 00,20,ff,cc, */
552462306a36Sopenharmony_ci	{0xa0, 0x58, ZC3XX_R11D_GLOBALGAIN},		/* 01,1d,58,cc, */
552562306a36Sopenharmony_ci	{0xa0, 0x03, ZC3XX_R180_AUTOCORRECTENABLE},	/* 01,80,03,cc */
552662306a36Sopenharmony_ci	{}
552762306a36Sopenharmony_ci};
552862306a36Sopenharmony_ci
552962306a36Sopenharmony_cistatic u8 reg_r(struct gspca_dev *gspca_dev,
553062306a36Sopenharmony_ci		u16 index)
553162306a36Sopenharmony_ci{
553262306a36Sopenharmony_ci	int ret;
553362306a36Sopenharmony_ci
553462306a36Sopenharmony_ci	if (gspca_dev->usb_err < 0)
553562306a36Sopenharmony_ci		return 0;
553662306a36Sopenharmony_ci	ret = usb_control_msg(gspca_dev->dev,
553762306a36Sopenharmony_ci			usb_rcvctrlpipe(gspca_dev->dev, 0),
553862306a36Sopenharmony_ci			0xa1,
553962306a36Sopenharmony_ci			USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
554062306a36Sopenharmony_ci			0x01,			/* value */
554162306a36Sopenharmony_ci			index, gspca_dev->usb_buf, 1,
554262306a36Sopenharmony_ci			500);
554362306a36Sopenharmony_ci	if (ret < 0) {
554462306a36Sopenharmony_ci		pr_err("reg_r err %d\n", ret);
554562306a36Sopenharmony_ci		gspca_dev->usb_err = ret;
554662306a36Sopenharmony_ci		return 0;
554762306a36Sopenharmony_ci	}
554862306a36Sopenharmony_ci	return gspca_dev->usb_buf[0];
554962306a36Sopenharmony_ci}
555062306a36Sopenharmony_ci
555162306a36Sopenharmony_cistatic void reg_w(struct gspca_dev *gspca_dev,
555262306a36Sopenharmony_ci			u8 value,
555362306a36Sopenharmony_ci			u16 index)
555462306a36Sopenharmony_ci{
555562306a36Sopenharmony_ci	int ret;
555662306a36Sopenharmony_ci
555762306a36Sopenharmony_ci	if (gspca_dev->usb_err < 0)
555862306a36Sopenharmony_ci		return;
555962306a36Sopenharmony_ci	ret = usb_control_msg(gspca_dev->dev,
556062306a36Sopenharmony_ci			usb_sndctrlpipe(gspca_dev->dev, 0),
556162306a36Sopenharmony_ci			0xa0,
556262306a36Sopenharmony_ci			USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
556362306a36Sopenharmony_ci			value, index, NULL, 0,
556462306a36Sopenharmony_ci			500);
556562306a36Sopenharmony_ci	if (ret < 0) {
556662306a36Sopenharmony_ci		pr_err("reg_w_i err %d\n", ret);
556762306a36Sopenharmony_ci		gspca_dev->usb_err = ret;
556862306a36Sopenharmony_ci	}
556962306a36Sopenharmony_ci}
557062306a36Sopenharmony_ci
557162306a36Sopenharmony_cistatic u16 i2c_read(struct gspca_dev *gspca_dev,
557262306a36Sopenharmony_ci			u8 reg)
557362306a36Sopenharmony_ci{
557462306a36Sopenharmony_ci	u8 retbyte;
557562306a36Sopenharmony_ci	u16 retval;
557662306a36Sopenharmony_ci
557762306a36Sopenharmony_ci	if (gspca_dev->usb_err < 0)
557862306a36Sopenharmony_ci		return 0;
557962306a36Sopenharmony_ci	reg_w(gspca_dev, reg, 0x0092);
558062306a36Sopenharmony_ci	reg_w(gspca_dev, 0x02, 0x0090);			/* <- read command */
558162306a36Sopenharmony_ci	msleep(20);
558262306a36Sopenharmony_ci	retbyte = reg_r(gspca_dev, 0x0091);		/* read status */
558362306a36Sopenharmony_ci	if (retbyte != 0x00)
558462306a36Sopenharmony_ci		pr_err("i2c_r status error %02x\n", retbyte);
558562306a36Sopenharmony_ci	retval = reg_r(gspca_dev, 0x0095);		/* read Lowbyte */
558662306a36Sopenharmony_ci	retval |= reg_r(gspca_dev, 0x0096) << 8;	/* read Hightbyte */
558762306a36Sopenharmony_ci	return retval;
558862306a36Sopenharmony_ci}
558962306a36Sopenharmony_ci
559062306a36Sopenharmony_cistatic u8 i2c_write(struct gspca_dev *gspca_dev,
559162306a36Sopenharmony_ci			u8 reg,
559262306a36Sopenharmony_ci			u8 valL,
559362306a36Sopenharmony_ci			u8 valH)
559462306a36Sopenharmony_ci{
559562306a36Sopenharmony_ci	u8 retbyte;
559662306a36Sopenharmony_ci
559762306a36Sopenharmony_ci	if (gspca_dev->usb_err < 0)
559862306a36Sopenharmony_ci		return 0;
559962306a36Sopenharmony_ci	reg_w(gspca_dev, reg, 0x92);
560062306a36Sopenharmony_ci	reg_w(gspca_dev, valL, 0x93);
560162306a36Sopenharmony_ci	reg_w(gspca_dev, valH, 0x94);
560262306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x90);		/* <- write command */
560362306a36Sopenharmony_ci	msleep(1);
560462306a36Sopenharmony_ci	retbyte = reg_r(gspca_dev, 0x0091);		/* read status */
560562306a36Sopenharmony_ci	if (retbyte != 0x00)
560662306a36Sopenharmony_ci		pr_err("i2c_w status error %02x\n", retbyte);
560762306a36Sopenharmony_ci	return retbyte;
560862306a36Sopenharmony_ci}
560962306a36Sopenharmony_ci
561062306a36Sopenharmony_cistatic void usb_exchange(struct gspca_dev *gspca_dev,
561162306a36Sopenharmony_ci			const struct usb_action *action)
561262306a36Sopenharmony_ci{
561362306a36Sopenharmony_ci	while (action->req) {
561462306a36Sopenharmony_ci		switch (action->req) {
561562306a36Sopenharmony_ci		case 0xa0:	/* write register */
561662306a36Sopenharmony_ci			reg_w(gspca_dev, action->val, action->idx);
561762306a36Sopenharmony_ci			break;
561862306a36Sopenharmony_ci		case 0xa1:	/* read status */
561962306a36Sopenharmony_ci			reg_r(gspca_dev, action->idx);
562062306a36Sopenharmony_ci			break;
562162306a36Sopenharmony_ci		case 0xaa:
562262306a36Sopenharmony_ci			i2c_write(gspca_dev,
562362306a36Sopenharmony_ci				  action->val,			/* reg */
562462306a36Sopenharmony_ci				  action->idx & 0xff,		/* valL */
562562306a36Sopenharmony_ci				  action->idx >> 8);		/* valH */
562662306a36Sopenharmony_ci			break;
562762306a36Sopenharmony_ci		case 0xbb:
562862306a36Sopenharmony_ci			i2c_write(gspca_dev,
562962306a36Sopenharmony_ci				  action->idx >> 8,		/* reg */
563062306a36Sopenharmony_ci				  action->idx & 0xff,		/* valL */
563162306a36Sopenharmony_ci				  action->val);			/* valH */
563262306a36Sopenharmony_ci			break;
563362306a36Sopenharmony_ci		default:
563462306a36Sopenharmony_ci/*		case 0xdd:	 * delay */
563562306a36Sopenharmony_ci			msleep(action->idx);
563662306a36Sopenharmony_ci			break;
563762306a36Sopenharmony_ci		}
563862306a36Sopenharmony_ci		action++;
563962306a36Sopenharmony_ci		msleep(1);
564062306a36Sopenharmony_ci	}
564162306a36Sopenharmony_ci}
564262306a36Sopenharmony_ci
564362306a36Sopenharmony_cistatic void setmatrix(struct gspca_dev *gspca_dev)
564462306a36Sopenharmony_ci{
564562306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
564662306a36Sopenharmony_ci	int i;
564762306a36Sopenharmony_ci	const u8 *matrix;
564862306a36Sopenharmony_ci	static const u8 adcm2700_matrix[9] =
564962306a36Sopenharmony_ci/*		{0x66, 0xed, 0xed, 0xed, 0x66, 0xed, 0xed, 0xed, 0x66}; */
565062306a36Sopenharmony_ci/*ms-win*/
565162306a36Sopenharmony_ci		{0x74, 0xed, 0xed, 0xed, 0x74, 0xed, 0xed, 0xed, 0x74};
565262306a36Sopenharmony_ci	static const u8 gc0305_matrix[9] =
565362306a36Sopenharmony_ci		{0x50, 0xf8, 0xf8, 0xf8, 0x50, 0xf8, 0xf8, 0xf8, 0x50};
565462306a36Sopenharmony_ci	static const u8 ov7620_matrix[9] =
565562306a36Sopenharmony_ci		{0x58, 0xf4, 0xf4, 0xf4, 0x58, 0xf4, 0xf4, 0xf4, 0x58};
565662306a36Sopenharmony_ci	static const u8 pas202b_matrix[9] =
565762306a36Sopenharmony_ci		{0x4c, 0xf5, 0xff, 0xf9, 0x51, 0xf5, 0xfb, 0xed, 0x5f};
565862306a36Sopenharmony_ci	static const u8 po2030_matrix[9] =
565962306a36Sopenharmony_ci		{0x60, 0xf0, 0xf0, 0xf0, 0x60, 0xf0, 0xf0, 0xf0, 0x60};
566062306a36Sopenharmony_ci	static const u8 tas5130c_matrix[9] =
566162306a36Sopenharmony_ci		{0x68, 0xec, 0xec, 0xec, 0x68, 0xec, 0xec, 0xec, 0x68};
566262306a36Sopenharmony_ci	static const u8 gc0303_matrix[9] =
566362306a36Sopenharmony_ci		{0x6c, 0xea, 0xea, 0xea, 0x6c, 0xea, 0xea, 0xea, 0x6c};
566462306a36Sopenharmony_ci	static const u8 *matrix_tb[SENSOR_MAX] = {
566562306a36Sopenharmony_ci		[SENSOR_ADCM2700] =	adcm2700_matrix,
566662306a36Sopenharmony_ci		[SENSOR_CS2102] =	ov7620_matrix,
566762306a36Sopenharmony_ci		[SENSOR_CS2102K] =	NULL,
566862306a36Sopenharmony_ci		[SENSOR_GC0303] =	gc0303_matrix,
566962306a36Sopenharmony_ci		[SENSOR_GC0305] =	gc0305_matrix,
567062306a36Sopenharmony_ci		[SENSOR_HDCS2020] =	NULL,
567162306a36Sopenharmony_ci		[SENSOR_HV7131B] =	NULL,
567262306a36Sopenharmony_ci		[SENSOR_HV7131R] =	po2030_matrix,
567362306a36Sopenharmony_ci		[SENSOR_ICM105A] =	po2030_matrix,
567462306a36Sopenharmony_ci		[SENSOR_MC501CB] =	NULL,
567562306a36Sopenharmony_ci		[SENSOR_MT9V111_1] =	gc0305_matrix,
567662306a36Sopenharmony_ci		[SENSOR_MT9V111_3] =	gc0305_matrix,
567762306a36Sopenharmony_ci		[SENSOR_OV7620] =	ov7620_matrix,
567862306a36Sopenharmony_ci		[SENSOR_OV7630C] =	NULL,
567962306a36Sopenharmony_ci		[SENSOR_PAS106] =	NULL,
568062306a36Sopenharmony_ci		[SENSOR_PAS202B] =	pas202b_matrix,
568162306a36Sopenharmony_ci		[SENSOR_PB0330] =	gc0305_matrix,
568262306a36Sopenharmony_ci		[SENSOR_PO2030] =	po2030_matrix,
568362306a36Sopenharmony_ci		[SENSOR_TAS5130C] =	tas5130c_matrix,
568462306a36Sopenharmony_ci	};
568562306a36Sopenharmony_ci
568662306a36Sopenharmony_ci	matrix = matrix_tb[sd->sensor];
568762306a36Sopenharmony_ci	if (matrix == NULL)
568862306a36Sopenharmony_ci		return;		/* matrix already loaded */
568962306a36Sopenharmony_ci	for (i = 0; i < ARRAY_SIZE(ov7620_matrix); i++)
569062306a36Sopenharmony_ci		reg_w(gspca_dev, matrix[i], 0x010a + i);
569162306a36Sopenharmony_ci}
569262306a36Sopenharmony_ci
569362306a36Sopenharmony_cistatic void setsharpness(struct gspca_dev *gspca_dev, s32 val)
569462306a36Sopenharmony_ci{
569562306a36Sopenharmony_ci	static const u8 sharpness_tb[][2] = {
569662306a36Sopenharmony_ci		{0x02, 0x03},
569762306a36Sopenharmony_ci		{0x04, 0x07},
569862306a36Sopenharmony_ci		{0x08, 0x0f},
569962306a36Sopenharmony_ci		{0x10, 0x1e}
570062306a36Sopenharmony_ci	};
570162306a36Sopenharmony_ci
570262306a36Sopenharmony_ci	reg_w(gspca_dev, sharpness_tb[val][0], 0x01c6);
570362306a36Sopenharmony_ci	reg_r(gspca_dev, 0x01c8);
570462306a36Sopenharmony_ci	reg_r(gspca_dev, 0x01c9);
570562306a36Sopenharmony_ci	reg_r(gspca_dev, 0x01ca);
570662306a36Sopenharmony_ci	reg_w(gspca_dev, sharpness_tb[val][1], 0x01cb);
570762306a36Sopenharmony_ci}
570862306a36Sopenharmony_ci
570962306a36Sopenharmony_cistatic void setcontrast(struct gspca_dev *gspca_dev,
571062306a36Sopenharmony_ci		s32 gamma, s32 brightness, s32 contrast)
571162306a36Sopenharmony_ci{
571262306a36Sopenharmony_ci	const u8 *Tgamma;
571362306a36Sopenharmony_ci	int g, i, adj, gp1, gp2;
571462306a36Sopenharmony_ci	u8 gr[16];
571562306a36Sopenharmony_ci	static const u8 delta_b[16] =		/* delta for brightness */
571662306a36Sopenharmony_ci		{0x50, 0x38, 0x2d, 0x28, 0x24, 0x21, 0x1e, 0x1d,
571762306a36Sopenharmony_ci		 0x1d, 0x1b, 0x1b, 0x1b, 0x19, 0x18, 0x18, 0x18};
571862306a36Sopenharmony_ci	static const u8 delta_c[16] =		/* delta for contrast */
571962306a36Sopenharmony_ci		{0x2c, 0x1a, 0x12, 0x0c, 0x0a, 0x06, 0x06, 0x06,
572062306a36Sopenharmony_ci		 0x04, 0x06, 0x04, 0x04, 0x03, 0x03, 0x02, 0x02};
572162306a36Sopenharmony_ci	static const u8 gamma_tb[6][16] = {
572262306a36Sopenharmony_ci		{0x00, 0x00, 0x03, 0x0d, 0x1b, 0x2e, 0x45, 0x5f,
572362306a36Sopenharmony_ci		 0x79, 0x93, 0xab, 0xc1, 0xd4, 0xe5, 0xf3, 0xff},
572462306a36Sopenharmony_ci		{0x01, 0x0c, 0x1f, 0x3a, 0x53, 0x6d, 0x85, 0x9c,
572562306a36Sopenharmony_ci		 0xb0, 0xc2, 0xd1, 0xde, 0xe9, 0xf2, 0xf9, 0xff},
572662306a36Sopenharmony_ci		{0x04, 0x16, 0x30, 0x4e, 0x68, 0x81, 0x98, 0xac,
572762306a36Sopenharmony_ci		 0xbe, 0xcd, 0xda, 0xe4, 0xed, 0xf5, 0xfb, 0xff},
572862306a36Sopenharmony_ci		{0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,
572962306a36Sopenharmony_ci		 0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff},
573062306a36Sopenharmony_ci		{0x20, 0x4b, 0x6e, 0x8d, 0xa3, 0xb5, 0xc5, 0xd2,
573162306a36Sopenharmony_ci		 0xdc, 0xe5, 0xec, 0xf2, 0xf6, 0xfa, 0xfd, 0xff},
573262306a36Sopenharmony_ci		{0x24, 0x44, 0x64, 0x84, 0x9d, 0xb2, 0xc4, 0xd3,
573362306a36Sopenharmony_ci		 0xe0, 0xeb, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff},
573462306a36Sopenharmony_ci	};
573562306a36Sopenharmony_ci
573662306a36Sopenharmony_ci	Tgamma = gamma_tb[gamma - 1];
573762306a36Sopenharmony_ci
573862306a36Sopenharmony_ci	contrast -= 128; /* -128 / 127 */
573962306a36Sopenharmony_ci	brightness -= 128; /* -128 / 92 */
574062306a36Sopenharmony_ci	adj = 0;
574162306a36Sopenharmony_ci	gp1 = gp2 = 0;
574262306a36Sopenharmony_ci	for (i = 0; i < 16; i++) {
574362306a36Sopenharmony_ci		g = Tgamma[i] + delta_b[i] * brightness / 256
574462306a36Sopenharmony_ci				- delta_c[i] * contrast / 256 - adj / 2;
574562306a36Sopenharmony_ci		if (g > 0xff)
574662306a36Sopenharmony_ci			g = 0xff;
574762306a36Sopenharmony_ci		else if (g < 0)
574862306a36Sopenharmony_ci			g = 0;
574962306a36Sopenharmony_ci		reg_w(gspca_dev, g, 0x0120 + i);	/* gamma */
575062306a36Sopenharmony_ci		if (contrast > 0)
575162306a36Sopenharmony_ci			adj--;
575262306a36Sopenharmony_ci		else if (contrast < 0)
575362306a36Sopenharmony_ci			adj++;
575462306a36Sopenharmony_ci		if (i > 1)
575562306a36Sopenharmony_ci			gr[i - 1] = (g - gp2) / 2;
575662306a36Sopenharmony_ci		else if (i != 0)
575762306a36Sopenharmony_ci			gr[0] = gp1 == 0 ? 0 : (g - gp1);
575862306a36Sopenharmony_ci		gp2 = gp1;
575962306a36Sopenharmony_ci		gp1 = g;
576062306a36Sopenharmony_ci	}
576162306a36Sopenharmony_ci	gr[15] = (0xff - gp2) / 2;
576262306a36Sopenharmony_ci	for (i = 0; i < 16; i++)
576362306a36Sopenharmony_ci		reg_w(gspca_dev, gr[i], 0x0130 + i);	/* gradient */
576462306a36Sopenharmony_ci}
576562306a36Sopenharmony_ci
576662306a36Sopenharmony_cistatic s32 getexposure(struct gspca_dev *gspca_dev)
576762306a36Sopenharmony_ci{
576862306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
576962306a36Sopenharmony_ci
577062306a36Sopenharmony_ci	switch (sd->sensor) {
577162306a36Sopenharmony_ci	case SENSOR_HV7131R:
577262306a36Sopenharmony_ci		return (i2c_read(gspca_dev, 0x25) << 9)
577362306a36Sopenharmony_ci			| (i2c_read(gspca_dev, 0x26) << 1)
577462306a36Sopenharmony_ci			| (i2c_read(gspca_dev, 0x27) >> 7);
577562306a36Sopenharmony_ci	case SENSOR_OV7620:
577662306a36Sopenharmony_ci		return i2c_read(gspca_dev, 0x10);
577762306a36Sopenharmony_ci	default:
577862306a36Sopenharmony_ci		return -1;
577962306a36Sopenharmony_ci	}
578062306a36Sopenharmony_ci}
578162306a36Sopenharmony_ci
578262306a36Sopenharmony_cistatic void setexposure(struct gspca_dev *gspca_dev, s32 val)
578362306a36Sopenharmony_ci{
578462306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
578562306a36Sopenharmony_ci
578662306a36Sopenharmony_ci	switch (sd->sensor) {
578762306a36Sopenharmony_ci	case SENSOR_HV7131R:
578862306a36Sopenharmony_ci		i2c_write(gspca_dev, 0x25, val >> 9, 0x00);
578962306a36Sopenharmony_ci		i2c_write(gspca_dev, 0x26, val >> 1, 0x00);
579062306a36Sopenharmony_ci		i2c_write(gspca_dev, 0x27, val << 7, 0x00);
579162306a36Sopenharmony_ci		break;
579262306a36Sopenharmony_ci	case SENSOR_OV7620:
579362306a36Sopenharmony_ci		i2c_write(gspca_dev, 0x10, val, 0x00);
579462306a36Sopenharmony_ci		break;
579562306a36Sopenharmony_ci	}
579662306a36Sopenharmony_ci}
579762306a36Sopenharmony_ci
579862306a36Sopenharmony_cistatic void setquality(struct gspca_dev *gspca_dev)
579962306a36Sopenharmony_ci{
580062306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
580162306a36Sopenharmony_ci	jpeg_set_qual(sd->jpeg_hdr, jpeg_qual[sd->reg08 >> 1]);
580262306a36Sopenharmony_ci	reg_w(gspca_dev, sd->reg08, ZC3XX_R008_CLOCKSETTING);
580362306a36Sopenharmony_ci}
580462306a36Sopenharmony_ci
580562306a36Sopenharmony_ci/* Matches the sensor's internal frame rate to the lighting frequency.
580662306a36Sopenharmony_ci * Valid frequencies are:
580762306a36Sopenharmony_ci *	50Hz, for European and Asian lighting (default)
580862306a36Sopenharmony_ci *	60Hz, for American lighting
580962306a36Sopenharmony_ci *	0 = No Flicker (for outdoor usage)
581062306a36Sopenharmony_ci */
581162306a36Sopenharmony_cistatic void setlightfreq(struct gspca_dev *gspca_dev, s32 val)
581262306a36Sopenharmony_ci{
581362306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
581462306a36Sopenharmony_ci	int i, mode;
581562306a36Sopenharmony_ci	const struct usb_action *zc3_freq;
581662306a36Sopenharmony_ci	static const struct usb_action *freq_tb[SENSOR_MAX][6] = {
581762306a36Sopenharmony_ci	[SENSOR_ADCM2700] = {
581862306a36Sopenharmony_ci		 adcm2700_NoFlicker, adcm2700_NoFlicker,
581962306a36Sopenharmony_ci		 adcm2700_50HZ, adcm2700_50HZ,
582062306a36Sopenharmony_ci		 adcm2700_60HZ, adcm2700_60HZ},
582162306a36Sopenharmony_ci	[SENSOR_CS2102] = {
582262306a36Sopenharmony_ci		 cs2102_NoFlicker, cs2102_NoFlickerScale,
582362306a36Sopenharmony_ci		 cs2102_50HZ, cs2102_50HZScale,
582462306a36Sopenharmony_ci		 cs2102_60HZ, cs2102_60HZScale},
582562306a36Sopenharmony_ci	[SENSOR_CS2102K] = {
582662306a36Sopenharmony_ci		 cs2102_NoFlicker, cs2102_NoFlickerScale,
582762306a36Sopenharmony_ci		 NULL, NULL, /* currently disabled */
582862306a36Sopenharmony_ci		 NULL, NULL},
582962306a36Sopenharmony_ci	[SENSOR_GC0303] = {
583062306a36Sopenharmony_ci		 gc0303_NoFlicker, gc0303_NoFlickerScale,
583162306a36Sopenharmony_ci		 gc0303_50HZ, gc0303_50HZScale,
583262306a36Sopenharmony_ci		 gc0303_60HZ, gc0303_60HZScale},
583362306a36Sopenharmony_ci	[SENSOR_GC0305] = {
583462306a36Sopenharmony_ci		 gc0305_NoFlicker, gc0305_NoFlicker,
583562306a36Sopenharmony_ci		 gc0305_50HZ, gc0305_50HZ,
583662306a36Sopenharmony_ci		 gc0305_60HZ, gc0305_60HZ},
583762306a36Sopenharmony_ci	[SENSOR_HDCS2020] = {
583862306a36Sopenharmony_ci		 hdcs2020_NoFlicker, hdcs2020_NoFlicker,
583962306a36Sopenharmony_ci		 hdcs2020_50HZ, hdcs2020_50HZ,
584062306a36Sopenharmony_ci		 hdcs2020_60HZ, hdcs2020_60HZ},
584162306a36Sopenharmony_ci	[SENSOR_HV7131B] = {
584262306a36Sopenharmony_ci		 hv7131b_NoFlicker, hv7131b_NoFlickerScale,
584362306a36Sopenharmony_ci		 hv7131b_50HZ, hv7131b_50HZScale,
584462306a36Sopenharmony_ci		 hv7131b_60HZ, hv7131b_60HZScale},
584562306a36Sopenharmony_ci	[SENSOR_HV7131R] = {
584662306a36Sopenharmony_ci		 hv7131r_NoFlicker, hv7131r_NoFlickerScale,
584762306a36Sopenharmony_ci		 hv7131r_50HZ, hv7131r_50HZScale,
584862306a36Sopenharmony_ci		 hv7131r_60HZ, hv7131r_60HZScale},
584962306a36Sopenharmony_ci	[SENSOR_ICM105A] = {
585062306a36Sopenharmony_ci		 icm105a_NoFlicker, icm105a_NoFlickerScale,
585162306a36Sopenharmony_ci		 icm105a_50HZ, icm105a_50HZScale,
585262306a36Sopenharmony_ci		 icm105a_60HZ, icm105a_60HZScale},
585362306a36Sopenharmony_ci	[SENSOR_MC501CB] = {
585462306a36Sopenharmony_ci		 mc501cb_NoFlicker, mc501cb_NoFlickerScale,
585562306a36Sopenharmony_ci		 mc501cb_50HZ, mc501cb_50HZScale,
585662306a36Sopenharmony_ci		 mc501cb_60HZ, mc501cb_60HZScale},
585762306a36Sopenharmony_ci	[SENSOR_MT9V111_1] = {
585862306a36Sopenharmony_ci		 mt9v111_1_AENoFlicker, mt9v111_1_AENoFlickerScale,
585962306a36Sopenharmony_ci		 mt9v111_1_AE50HZ, mt9v111_1_AE50HZScale,
586062306a36Sopenharmony_ci		 mt9v111_1_AE60HZ, mt9v111_1_AE60HZScale},
586162306a36Sopenharmony_ci	[SENSOR_MT9V111_3] = {
586262306a36Sopenharmony_ci		 mt9v111_3_AENoFlicker, mt9v111_3_AENoFlickerScale,
586362306a36Sopenharmony_ci		 mt9v111_3_AE50HZ, mt9v111_3_AE50HZScale,
586462306a36Sopenharmony_ci		 mt9v111_3_AE60HZ, mt9v111_3_AE60HZScale},
586562306a36Sopenharmony_ci	[SENSOR_OV7620] = {
586662306a36Sopenharmony_ci		 ov7620_NoFlicker, ov7620_NoFlicker,
586762306a36Sopenharmony_ci		 ov7620_50HZ, ov7620_50HZ,
586862306a36Sopenharmony_ci		 ov7620_60HZ, ov7620_60HZ},
586962306a36Sopenharmony_ci	[SENSOR_OV7630C] = {
587062306a36Sopenharmony_ci		 NULL, NULL,
587162306a36Sopenharmony_ci		 NULL, NULL,
587262306a36Sopenharmony_ci		 NULL, NULL},
587362306a36Sopenharmony_ci	[SENSOR_PAS106] = {
587462306a36Sopenharmony_ci		 pas106b_NoFlicker, pas106b_NoFlicker,
587562306a36Sopenharmony_ci		 pas106b_50HZ, pas106b_50HZ,
587662306a36Sopenharmony_ci		 pas106b_60HZ, pas106b_60HZ},
587762306a36Sopenharmony_ci	[SENSOR_PAS202B] = {
587862306a36Sopenharmony_ci		 pas202b_NoFlicker, pas202b_NoFlickerScale,
587962306a36Sopenharmony_ci		 pas202b_50HZ, pas202b_50HZScale,
588062306a36Sopenharmony_ci		 pas202b_60HZ, pas202b_60HZScale},
588162306a36Sopenharmony_ci	[SENSOR_PB0330] = {
588262306a36Sopenharmony_ci		 pb0330_NoFlicker, pb0330_NoFlickerScale,
588362306a36Sopenharmony_ci		 pb0330_50HZ, pb0330_50HZScale,
588462306a36Sopenharmony_ci		 pb0330_60HZ, pb0330_60HZScale},
588562306a36Sopenharmony_ci	[SENSOR_PO2030] = {
588662306a36Sopenharmony_ci		 po2030_NoFlicker, po2030_NoFlicker,
588762306a36Sopenharmony_ci		 po2030_50HZ, po2030_50HZ,
588862306a36Sopenharmony_ci		 po2030_60HZ, po2030_60HZ},
588962306a36Sopenharmony_ci	[SENSOR_TAS5130C] = {
589062306a36Sopenharmony_ci		 tas5130c_NoFlicker, tas5130c_NoFlickerScale,
589162306a36Sopenharmony_ci		 tas5130c_50HZ, tas5130c_50HZScale,
589262306a36Sopenharmony_ci		 tas5130c_60HZ, tas5130c_60HZScale},
589362306a36Sopenharmony_ci	};
589462306a36Sopenharmony_ci
589562306a36Sopenharmony_ci	i = val * 2;
589662306a36Sopenharmony_ci	mode = gspca_dev->cam.cam_mode[gspca_dev->curr_mode].priv;
589762306a36Sopenharmony_ci	if (mode)
589862306a36Sopenharmony_ci		i++;			/* 320x240 */
589962306a36Sopenharmony_ci	zc3_freq = freq_tb[sd->sensor][i];
590062306a36Sopenharmony_ci	if (zc3_freq == NULL)
590162306a36Sopenharmony_ci		return;
590262306a36Sopenharmony_ci	usb_exchange(gspca_dev, zc3_freq);
590362306a36Sopenharmony_ci	switch (sd->sensor) {
590462306a36Sopenharmony_ci	case SENSOR_GC0305:
590562306a36Sopenharmony_ci		if (mode		/* if 320x240 */
590662306a36Sopenharmony_ci		    && val == 1)	/* and 50Hz */
590762306a36Sopenharmony_ci			reg_w(gspca_dev, 0x85, 0x018d);
590862306a36Sopenharmony_ci					/* win: 0x80, 0x018d */
590962306a36Sopenharmony_ci		break;
591062306a36Sopenharmony_ci	case SENSOR_OV7620:
591162306a36Sopenharmony_ci		if (!mode) {		/* if 640x480 */
591262306a36Sopenharmony_ci			if (val != 0)	/* and filter */
591362306a36Sopenharmony_ci				reg_w(gspca_dev, 0x40, 0x0002);
591462306a36Sopenharmony_ci			else
591562306a36Sopenharmony_ci				reg_w(gspca_dev, 0x44, 0x0002);
591662306a36Sopenharmony_ci		}
591762306a36Sopenharmony_ci		break;
591862306a36Sopenharmony_ci	case SENSOR_PAS202B:
591962306a36Sopenharmony_ci		reg_w(gspca_dev, 0x00, 0x01a7);
592062306a36Sopenharmony_ci		break;
592162306a36Sopenharmony_ci	}
592262306a36Sopenharmony_ci}
592362306a36Sopenharmony_ci
592462306a36Sopenharmony_cistatic void setautogain(struct gspca_dev *gspca_dev, s32 val)
592562306a36Sopenharmony_ci{
592662306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
592762306a36Sopenharmony_ci
592862306a36Sopenharmony_ci	if (sd->sensor == SENSOR_OV7620)
592962306a36Sopenharmony_ci		i2c_write(gspca_dev, 0x13, val ? 0xa3 : 0x80, 0x00);
593062306a36Sopenharmony_ci	else
593162306a36Sopenharmony_ci		reg_w(gspca_dev, val ? 0x42 : 0x02, 0x0180);
593262306a36Sopenharmony_ci}
593362306a36Sopenharmony_ci
593462306a36Sopenharmony_ci/*
593562306a36Sopenharmony_ci * Update the transfer parameters.
593662306a36Sopenharmony_ci * This function is executed from a work queue.
593762306a36Sopenharmony_ci */
593862306a36Sopenharmony_cistatic void transfer_update(struct work_struct *work)
593962306a36Sopenharmony_ci{
594062306a36Sopenharmony_ci	struct sd *sd = container_of(work, struct sd, work);
594162306a36Sopenharmony_ci	struct gspca_dev *gspca_dev = &sd->gspca_dev;
594262306a36Sopenharmony_ci	int change, good;
594362306a36Sopenharmony_ci	u8 reg07, reg11;
594462306a36Sopenharmony_ci
594562306a36Sopenharmony_ci	/* reg07 gets set to 0 by sd_start before starting us */
594662306a36Sopenharmony_ci	reg07 = 0;
594762306a36Sopenharmony_ci
594862306a36Sopenharmony_ci	good = 0;
594962306a36Sopenharmony_ci	while (1) {
595062306a36Sopenharmony_ci		msleep(100);
595162306a36Sopenharmony_ci
595262306a36Sopenharmony_ci		/* To protect gspca_dev->usb_buf and gspca_dev->usb_err */
595362306a36Sopenharmony_ci		mutex_lock(&gspca_dev->usb_lock);
595462306a36Sopenharmony_ci#ifdef CONFIG_PM
595562306a36Sopenharmony_ci		if (gspca_dev->frozen)
595662306a36Sopenharmony_ci			break;
595762306a36Sopenharmony_ci#endif
595862306a36Sopenharmony_ci		if (!gspca_dev->present || !gspca_dev->streaming)
595962306a36Sopenharmony_ci			break;
596062306a36Sopenharmony_ci
596162306a36Sopenharmony_ci		/* Bit 0 of register 11 indicates FIFO overflow */
596262306a36Sopenharmony_ci		gspca_dev->usb_err = 0;
596362306a36Sopenharmony_ci		reg11 = reg_r(gspca_dev, 0x0011);
596462306a36Sopenharmony_ci		if (gspca_dev->usb_err)
596562306a36Sopenharmony_ci			break;
596662306a36Sopenharmony_ci
596762306a36Sopenharmony_ci		change = reg11 & 0x01;
596862306a36Sopenharmony_ci		if (change) {				/* overflow */
596962306a36Sopenharmony_ci			good = 0;
597062306a36Sopenharmony_ci
597162306a36Sopenharmony_ci			if (reg07 == 0) /* Bit Rate Control not enabled? */
597262306a36Sopenharmony_ci				reg07 = 0x32; /* Allow 98 bytes / unit */
597362306a36Sopenharmony_ci			else if (reg07 > 2)
597462306a36Sopenharmony_ci				reg07 -= 2; /* Decrease allowed bytes / unit */
597562306a36Sopenharmony_ci			else
597662306a36Sopenharmony_ci				change = 0;
597762306a36Sopenharmony_ci		} else {				/* no overflow */
597862306a36Sopenharmony_ci			good++;
597962306a36Sopenharmony_ci			if (good >= 10) {
598062306a36Sopenharmony_ci				good = 0;
598162306a36Sopenharmony_ci				if (reg07) { /* BRC enabled? */
598262306a36Sopenharmony_ci					change = 1;
598362306a36Sopenharmony_ci					if (reg07 < 0x32)
598462306a36Sopenharmony_ci						reg07 += 2;
598562306a36Sopenharmony_ci					else
598662306a36Sopenharmony_ci						reg07 = 0;
598762306a36Sopenharmony_ci				}
598862306a36Sopenharmony_ci			}
598962306a36Sopenharmony_ci		}
599062306a36Sopenharmony_ci		if (change) {
599162306a36Sopenharmony_ci			gspca_dev->usb_err = 0;
599262306a36Sopenharmony_ci			reg_w(gspca_dev, reg07, 0x0007);
599362306a36Sopenharmony_ci			if (gspca_dev->usb_err)
599462306a36Sopenharmony_ci				break;
599562306a36Sopenharmony_ci		}
599662306a36Sopenharmony_ci		mutex_unlock(&gspca_dev->usb_lock);
599762306a36Sopenharmony_ci	}
599862306a36Sopenharmony_ci
599962306a36Sopenharmony_ci	/* Something went wrong. Unlock and return */
600062306a36Sopenharmony_ci	mutex_unlock(&gspca_dev->usb_lock);
600162306a36Sopenharmony_ci}
600262306a36Sopenharmony_ci
600362306a36Sopenharmony_cistatic void send_unknown(struct gspca_dev *gspca_dev, int sensor)
600462306a36Sopenharmony_ci{
600562306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0000);		/* bridge reset */
600662306a36Sopenharmony_ci	switch (sensor) {
600762306a36Sopenharmony_ci	case SENSOR_PAS106:
600862306a36Sopenharmony_ci		reg_w(gspca_dev, 0x03, 0x003a);
600962306a36Sopenharmony_ci		reg_w(gspca_dev, 0x0c, 0x003b);
601062306a36Sopenharmony_ci		reg_w(gspca_dev, 0x08, 0x0038);
601162306a36Sopenharmony_ci		break;
601262306a36Sopenharmony_ci	case SENSOR_ADCM2700:
601362306a36Sopenharmony_ci	case SENSOR_GC0305:
601462306a36Sopenharmony_ci	case SENSOR_OV7620:
601562306a36Sopenharmony_ci	case SENSOR_MT9V111_1:
601662306a36Sopenharmony_ci	case SENSOR_MT9V111_3:
601762306a36Sopenharmony_ci	case SENSOR_PB0330:
601862306a36Sopenharmony_ci	case SENSOR_PO2030:
601962306a36Sopenharmony_ci		reg_w(gspca_dev, 0x0d, 0x003a);
602062306a36Sopenharmony_ci		reg_w(gspca_dev, 0x02, 0x003b);
602162306a36Sopenharmony_ci		reg_w(gspca_dev, 0x00, 0x0038);
602262306a36Sopenharmony_ci		break;
602362306a36Sopenharmony_ci	case SENSOR_HV7131R:
602462306a36Sopenharmony_ci	case SENSOR_PAS202B:
602562306a36Sopenharmony_ci		reg_w(gspca_dev, 0x03, 0x003b);
602662306a36Sopenharmony_ci		reg_w(gspca_dev, 0x0c, 0x003a);
602762306a36Sopenharmony_ci		reg_w(gspca_dev, 0x0b, 0x0039);
602862306a36Sopenharmony_ci		if (sensor == SENSOR_PAS202B)
602962306a36Sopenharmony_ci			reg_w(gspca_dev, 0x0b, 0x0038);
603062306a36Sopenharmony_ci		break;
603162306a36Sopenharmony_ci	}
603262306a36Sopenharmony_ci}
603362306a36Sopenharmony_ci
603462306a36Sopenharmony_ci/* start probe 2 wires */
603562306a36Sopenharmony_cistatic void start_2wr_probe(struct gspca_dev *gspca_dev, int sensor)
603662306a36Sopenharmony_ci{
603762306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0000);
603862306a36Sopenharmony_ci	reg_w(gspca_dev, sensor, 0x0010);
603962306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0001);
604062306a36Sopenharmony_ci	reg_w(gspca_dev, 0x03, 0x0012);
604162306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0012);
604262306a36Sopenharmony_ci/*	msleep(2); */
604362306a36Sopenharmony_ci}
604462306a36Sopenharmony_ci
604562306a36Sopenharmony_cistatic int sif_probe(struct gspca_dev *gspca_dev)
604662306a36Sopenharmony_ci{
604762306a36Sopenharmony_ci	u16 checkword;
604862306a36Sopenharmony_ci
604962306a36Sopenharmony_ci	start_2wr_probe(gspca_dev, 0x0f);		/* PAS106 */
605062306a36Sopenharmony_ci	reg_w(gspca_dev, 0x08, 0x008d);
605162306a36Sopenharmony_ci	msleep(150);
605262306a36Sopenharmony_ci	checkword = ((i2c_read(gspca_dev, 0x00) & 0x0f) << 4)
605362306a36Sopenharmony_ci			| ((i2c_read(gspca_dev, 0x01) & 0xf0) >> 4);
605462306a36Sopenharmony_ci	gspca_dbg(gspca_dev, D_PROBE, "probe sif 0x%04x\n", checkword);
605562306a36Sopenharmony_ci	if (checkword == 0x0007) {
605662306a36Sopenharmony_ci		send_unknown(gspca_dev, SENSOR_PAS106);
605762306a36Sopenharmony_ci		return 0x0f;			/* PAS106 */
605862306a36Sopenharmony_ci	}
605962306a36Sopenharmony_ci	return -1;
606062306a36Sopenharmony_ci}
606162306a36Sopenharmony_ci
606262306a36Sopenharmony_cistatic int vga_2wr_probe(struct gspca_dev *gspca_dev)
606362306a36Sopenharmony_ci{
606462306a36Sopenharmony_ci	u16 retword;
606562306a36Sopenharmony_ci
606662306a36Sopenharmony_ci	start_2wr_probe(gspca_dev, 0x00);	/* HV7131B */
606762306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x01, 0xaa, 0x00);
606862306a36Sopenharmony_ci	retword = i2c_read(gspca_dev, 0x01);
606962306a36Sopenharmony_ci	if (retword != 0)
607062306a36Sopenharmony_ci		return 0x00;			/* HV7131B */
607162306a36Sopenharmony_ci
607262306a36Sopenharmony_ci	start_2wr_probe(gspca_dev, 0x04);	/* CS2102 */
607362306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x01, 0xaa, 0x00);
607462306a36Sopenharmony_ci	retword = i2c_read(gspca_dev, 0x01);
607562306a36Sopenharmony_ci	if (retword != 0)
607662306a36Sopenharmony_ci		return 0x04;			/* CS2102 */
607762306a36Sopenharmony_ci
607862306a36Sopenharmony_ci	start_2wr_probe(gspca_dev, 0x06);	/* OmniVision */
607962306a36Sopenharmony_ci	reg_w(gspca_dev, 0x08, 0x008d);
608062306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x11, 0xaa, 0x00);
608162306a36Sopenharmony_ci	retword = i2c_read(gspca_dev, 0x11);
608262306a36Sopenharmony_ci	if (retword != 0) {
608362306a36Sopenharmony_ci		/* (should have returned 0xaa) --> Omnivision? */
608462306a36Sopenharmony_ci		/* reg_r 0x10 -> 0x06 -->  */
608562306a36Sopenharmony_ci		goto ov_check;
608662306a36Sopenharmony_ci	}
608762306a36Sopenharmony_ci
608862306a36Sopenharmony_ci	start_2wr_probe(gspca_dev, 0x08);	/* HDCS2020 */
608962306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x1c, 0x00, 0x00);
609062306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x15, 0xaa, 0x00);
609162306a36Sopenharmony_ci	retword = i2c_read(gspca_dev, 0x15);
609262306a36Sopenharmony_ci	if (retword != 0)
609362306a36Sopenharmony_ci		return 0x08;			/* HDCS2020 */
609462306a36Sopenharmony_ci
609562306a36Sopenharmony_ci	start_2wr_probe(gspca_dev, 0x0a);	/* PB0330 */
609662306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x07, 0xaa, 0xaa);
609762306a36Sopenharmony_ci	retword = i2c_read(gspca_dev, 0x07);
609862306a36Sopenharmony_ci	if (retword != 0)
609962306a36Sopenharmony_ci		return 0x0a;			/* PB0330 */
610062306a36Sopenharmony_ci	retword = i2c_read(gspca_dev, 0x03);
610162306a36Sopenharmony_ci	if (retword != 0)
610262306a36Sopenharmony_ci		return 0x0a;			/* PB0330 ?? */
610362306a36Sopenharmony_ci	retword = i2c_read(gspca_dev, 0x04);
610462306a36Sopenharmony_ci	if (retword != 0)
610562306a36Sopenharmony_ci		return 0x0a;			/* PB0330 ?? */
610662306a36Sopenharmony_ci
610762306a36Sopenharmony_ci	start_2wr_probe(gspca_dev, 0x0c);	/* ICM105A */
610862306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x01, 0x11, 0x00);
610962306a36Sopenharmony_ci	retword = i2c_read(gspca_dev, 0x01);
611062306a36Sopenharmony_ci	if (retword != 0)
611162306a36Sopenharmony_ci		return 0x0c;			/* ICM105A */
611262306a36Sopenharmony_ci
611362306a36Sopenharmony_ci	start_2wr_probe(gspca_dev, 0x0e);	/* PAS202BCB */
611462306a36Sopenharmony_ci	reg_w(gspca_dev, 0x08, 0x008d);
611562306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x03, 0xaa, 0x00);
611662306a36Sopenharmony_ci	msleep(50);
611762306a36Sopenharmony_ci	retword = i2c_read(gspca_dev, 0x03);
611862306a36Sopenharmony_ci	if (retword != 0) {
611962306a36Sopenharmony_ci		send_unknown(gspca_dev, SENSOR_PAS202B);
612062306a36Sopenharmony_ci		return 0x0e;			/* PAS202BCB */
612162306a36Sopenharmony_ci	}
612262306a36Sopenharmony_ci
612362306a36Sopenharmony_ci	start_2wr_probe(gspca_dev, 0x02);	/* TAS5130C */
612462306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x01, 0xaa, 0x00);
612562306a36Sopenharmony_ci	retword = i2c_read(gspca_dev, 0x01);
612662306a36Sopenharmony_ci	if (retword != 0)
612762306a36Sopenharmony_ci		return 0x02;			/* TAS5130C */
612862306a36Sopenharmony_ciov_check:
612962306a36Sopenharmony_ci	reg_r(gspca_dev, 0x0010);		/* ?? */
613062306a36Sopenharmony_ci	reg_r(gspca_dev, 0x0010);
613162306a36Sopenharmony_ci
613262306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0000);
613362306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0001);
613462306a36Sopenharmony_ci	reg_w(gspca_dev, 0x06, 0x0010);		/* OmniVision */
613562306a36Sopenharmony_ci	reg_w(gspca_dev, 0xa1, 0x008b);
613662306a36Sopenharmony_ci	reg_w(gspca_dev, 0x08, 0x008d);
613762306a36Sopenharmony_ci	msleep(500);
613862306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0012);
613962306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x12, 0x80, 0x00);	/* sensor reset */
614062306a36Sopenharmony_ci	retword = i2c_read(gspca_dev, 0x0a) << 8;
614162306a36Sopenharmony_ci	retword |= i2c_read(gspca_dev, 0x0b);
614262306a36Sopenharmony_ci	gspca_dbg(gspca_dev, D_PROBE, "probe 2wr ov vga 0x%04x\n", retword);
614362306a36Sopenharmony_ci	switch (retword) {
614462306a36Sopenharmony_ci	case 0x7631:				/* OV7630C */
614562306a36Sopenharmony_ci		reg_w(gspca_dev, 0x06, 0x0010);
614662306a36Sopenharmony_ci		break;
614762306a36Sopenharmony_ci	case 0x7620:				/* OV7620 */
614862306a36Sopenharmony_ci	case 0x7648:				/* OV7648 */
614962306a36Sopenharmony_ci		break;
615062306a36Sopenharmony_ci	default:
615162306a36Sopenharmony_ci		return -1;			/* not OmniVision */
615262306a36Sopenharmony_ci	}
615362306a36Sopenharmony_ci	return retword;
615462306a36Sopenharmony_ci}
615562306a36Sopenharmony_ci
615662306a36Sopenharmony_cistruct sensor_by_chipset_revision {
615762306a36Sopenharmony_ci	u16 revision;
615862306a36Sopenharmony_ci	u8 internal_sensor_id;
615962306a36Sopenharmony_ci};
616062306a36Sopenharmony_cistatic const struct sensor_by_chipset_revision chipset_revision_sensor[] = {
616162306a36Sopenharmony_ci	{0xc000, 0x12},		/* TAS5130C */
616262306a36Sopenharmony_ci	{0xc001, 0x13},		/* MT9V111 */
616362306a36Sopenharmony_ci	{0xe001, 0x13},
616462306a36Sopenharmony_ci	{0x8001, 0x13},
616562306a36Sopenharmony_ci	{0x8000, 0x14},		/* CS2102K */
616662306a36Sopenharmony_ci	{0x8400, 0x15},		/* MT9V111 */
616762306a36Sopenharmony_ci	{0xe400, 0x15},
616862306a36Sopenharmony_ci};
616962306a36Sopenharmony_ci
617062306a36Sopenharmony_cistatic int vga_3wr_probe(struct gspca_dev *gspca_dev)
617162306a36Sopenharmony_ci{
617262306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
617362306a36Sopenharmony_ci	int i;
617462306a36Sopenharmony_ci	u16 retword;
617562306a36Sopenharmony_ci
617662306a36Sopenharmony_ci/*fixme: lack of 8b=b3 (11,12)-> 10, 8b=e0 (14,15,16)-> 12 found in gspcav1*/
617762306a36Sopenharmony_ci	reg_w(gspca_dev, 0x02, 0x0010);
617862306a36Sopenharmony_ci	reg_r(gspca_dev, 0x0010);
617962306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0000);
618062306a36Sopenharmony_ci	reg_w(gspca_dev, 0x00, 0x0010);
618162306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0001);
618262306a36Sopenharmony_ci	reg_w(gspca_dev, 0x91, 0x008b);
618362306a36Sopenharmony_ci	reg_w(gspca_dev, 0x03, 0x0012);
618462306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0012);
618562306a36Sopenharmony_ci	reg_w(gspca_dev, 0x05, 0x0012);
618662306a36Sopenharmony_ci	retword = i2c_read(gspca_dev, 0x14);
618762306a36Sopenharmony_ci	if (retword != 0)
618862306a36Sopenharmony_ci		return 0x11;			/* HV7131R */
618962306a36Sopenharmony_ci	retword = i2c_read(gspca_dev, 0x15);
619062306a36Sopenharmony_ci	if (retword != 0)
619162306a36Sopenharmony_ci		return 0x11;			/* HV7131R */
619262306a36Sopenharmony_ci	retword = i2c_read(gspca_dev, 0x16);
619362306a36Sopenharmony_ci	if (retword != 0)
619462306a36Sopenharmony_ci		return 0x11;			/* HV7131R */
619562306a36Sopenharmony_ci
619662306a36Sopenharmony_ci	reg_w(gspca_dev, 0x02, 0x0010);
619762306a36Sopenharmony_ci	retword = reg_r(gspca_dev, 0x000b) << 8;
619862306a36Sopenharmony_ci	retword |= reg_r(gspca_dev, 0x000a);
619962306a36Sopenharmony_ci	gspca_dbg(gspca_dev, D_PROBE, "probe 3wr vga 1 0x%04x\n", retword);
620062306a36Sopenharmony_ci	reg_r(gspca_dev, 0x0010);
620162306a36Sopenharmony_ci	if ((retword & 0xff00) == 0x6400)
620262306a36Sopenharmony_ci		return 0x02;		/* TAS5130C */
620362306a36Sopenharmony_ci	for (i = 0; i < ARRAY_SIZE(chipset_revision_sensor); i++) {
620462306a36Sopenharmony_ci		if (chipset_revision_sensor[i].revision == retword) {
620562306a36Sopenharmony_ci			sd->chip_revision = retword;
620662306a36Sopenharmony_ci			send_unknown(gspca_dev, SENSOR_PB0330);
620762306a36Sopenharmony_ci			return chipset_revision_sensor[i].internal_sensor_id;
620862306a36Sopenharmony_ci		}
620962306a36Sopenharmony_ci	}
621062306a36Sopenharmony_ci
621162306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0000);	/* check PB0330 */
621262306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0001);
621362306a36Sopenharmony_ci	reg_w(gspca_dev, 0xdd, 0x008b);
621462306a36Sopenharmony_ci	reg_w(gspca_dev, 0x0a, 0x0010);
621562306a36Sopenharmony_ci	reg_w(gspca_dev, 0x03, 0x0012);
621662306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0012);
621762306a36Sopenharmony_ci	retword = i2c_read(gspca_dev, 0x00);
621862306a36Sopenharmony_ci	if (retword != 0) {
621962306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PROBE, "probe 3wr vga type 0a\n");
622062306a36Sopenharmony_ci		return 0x0a;			/* PB0330 */
622162306a36Sopenharmony_ci	}
622262306a36Sopenharmony_ci
622362306a36Sopenharmony_ci	/* probe gc0303 / gc0305 */
622462306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0000);
622562306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0001);
622662306a36Sopenharmony_ci	reg_w(gspca_dev, 0x98, 0x008b);
622762306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0010);
622862306a36Sopenharmony_ci	reg_w(gspca_dev, 0x03, 0x0012);
622962306a36Sopenharmony_ci	msleep(2);
623062306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0012);
623162306a36Sopenharmony_ci	retword = i2c_read(gspca_dev, 0x00);
623262306a36Sopenharmony_ci	if (retword != 0) {
623362306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PROBE, "probe 3wr vga type %02x\n",
623462306a36Sopenharmony_ci			  retword);
623562306a36Sopenharmony_ci		if (retword == 0x0011)			/* gc0303 */
623662306a36Sopenharmony_ci			return 0x0303;
623762306a36Sopenharmony_ci		if (retword == 0x0029)			/* gc0305 */
623862306a36Sopenharmony_ci			send_unknown(gspca_dev, SENSOR_GC0305);
623962306a36Sopenharmony_ci		return retword;
624062306a36Sopenharmony_ci	}
624162306a36Sopenharmony_ci
624262306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0000);	/* check OmniVision */
624362306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0001);
624462306a36Sopenharmony_ci	reg_w(gspca_dev, 0xa1, 0x008b);
624562306a36Sopenharmony_ci	reg_w(gspca_dev, 0x08, 0x008d);
624662306a36Sopenharmony_ci	reg_w(gspca_dev, 0x06, 0x0010);
624762306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0012);
624862306a36Sopenharmony_ci	reg_w(gspca_dev, 0x05, 0x0012);
624962306a36Sopenharmony_ci	if (i2c_read(gspca_dev, 0x1c) == 0x007f	/* OV7610 - manufacturer ID */
625062306a36Sopenharmony_ci	    && i2c_read(gspca_dev, 0x1d) == 0x00a2) {
625162306a36Sopenharmony_ci		send_unknown(gspca_dev, SENSOR_OV7620);
625262306a36Sopenharmony_ci		return 0x06;		/* OmniVision confirm ? */
625362306a36Sopenharmony_ci	}
625462306a36Sopenharmony_ci
625562306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0000);
625662306a36Sopenharmony_ci	reg_w(gspca_dev, 0x00, 0x0002);
625762306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0010);
625862306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0001);
625962306a36Sopenharmony_ci	reg_w(gspca_dev, 0xee, 0x008b);
626062306a36Sopenharmony_ci	reg_w(gspca_dev, 0x03, 0x0012);
626162306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0012);
626262306a36Sopenharmony_ci	reg_w(gspca_dev, 0x05, 0x0012);
626362306a36Sopenharmony_ci	retword = i2c_read(gspca_dev, 0x00) << 8;	/* ID 0 */
626462306a36Sopenharmony_ci	retword |= i2c_read(gspca_dev, 0x01);		/* ID 1 */
626562306a36Sopenharmony_ci	gspca_dbg(gspca_dev, D_PROBE, "probe 3wr vga 2 0x%04x\n", retword);
626662306a36Sopenharmony_ci	if (retword == 0x2030) {
626762306a36Sopenharmony_ci		u8 retbyte;
626862306a36Sopenharmony_ci
626962306a36Sopenharmony_ci		retbyte = i2c_read(gspca_dev, 0x02);	/* revision number */
627062306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PROBE, "sensor PO2030 rev 0x%02x\n",
627162306a36Sopenharmony_ci			  retbyte);
627262306a36Sopenharmony_ci
627362306a36Sopenharmony_ci		send_unknown(gspca_dev, SENSOR_PO2030);
627462306a36Sopenharmony_ci		return retword;
627562306a36Sopenharmony_ci	}
627662306a36Sopenharmony_ci
627762306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0000);
627862306a36Sopenharmony_ci	reg_w(gspca_dev, 0x0a, 0x0010);
627962306a36Sopenharmony_ci	reg_w(gspca_dev, 0xd3, 0x008b);
628062306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0001);
628162306a36Sopenharmony_ci	reg_w(gspca_dev, 0x03, 0x0012);
628262306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0012);
628362306a36Sopenharmony_ci	reg_w(gspca_dev, 0x05, 0x0012);
628462306a36Sopenharmony_ci	reg_w(gspca_dev, 0xd3, 0x008b);
628562306a36Sopenharmony_ci	retword = i2c_read(gspca_dev, 0x01);
628662306a36Sopenharmony_ci	if (retword != 0) {
628762306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PROBE, "probe 3wr vga type 0a ? ret: %04x\n",
628862306a36Sopenharmony_ci			  retword);
628962306a36Sopenharmony_ci		return 0x16;			/* adcm2700 (6100/6200) */
629062306a36Sopenharmony_ci	}
629162306a36Sopenharmony_ci	return -1;
629262306a36Sopenharmony_ci}
629362306a36Sopenharmony_ci
629462306a36Sopenharmony_cistatic int zcxx_probeSensor(struct gspca_dev *gspca_dev)
629562306a36Sopenharmony_ci{
629662306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
629762306a36Sopenharmony_ci	int sensor;
629862306a36Sopenharmony_ci
629962306a36Sopenharmony_ci	switch (sd->sensor) {
630062306a36Sopenharmony_ci	case SENSOR_MC501CB:
630162306a36Sopenharmony_ci		return -1;		/* don't probe */
630262306a36Sopenharmony_ci	case SENSOR_GC0303:
630362306a36Sopenharmony_ci			/* may probe but with no write in reg 0x0010 */
630462306a36Sopenharmony_ci		return -1;		/* don't probe */
630562306a36Sopenharmony_ci	case SENSOR_PAS106:
630662306a36Sopenharmony_ci		sensor =  sif_probe(gspca_dev);
630762306a36Sopenharmony_ci		if (sensor >= 0)
630862306a36Sopenharmony_ci			return sensor;
630962306a36Sopenharmony_ci		break;
631062306a36Sopenharmony_ci	}
631162306a36Sopenharmony_ci	sensor = vga_2wr_probe(gspca_dev);
631262306a36Sopenharmony_ci	if (sensor >= 0)
631362306a36Sopenharmony_ci		return sensor;
631462306a36Sopenharmony_ci	return vga_3wr_probe(gspca_dev);
631562306a36Sopenharmony_ci}
631662306a36Sopenharmony_ci
631762306a36Sopenharmony_ci/* this function is called at probe time */
631862306a36Sopenharmony_cistatic int sd_config(struct gspca_dev *gspca_dev,
631962306a36Sopenharmony_ci			const struct usb_device_id *id)
632062306a36Sopenharmony_ci{
632162306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
632262306a36Sopenharmony_ci
632362306a36Sopenharmony_ci	if (id->idProduct == 0x301b)
632462306a36Sopenharmony_ci		sd->bridge = BRIDGE_ZC301;
632562306a36Sopenharmony_ci	else
632662306a36Sopenharmony_ci		sd->bridge = BRIDGE_ZC303;
632762306a36Sopenharmony_ci
632862306a36Sopenharmony_ci	/* define some sensors from the vendor/product */
632962306a36Sopenharmony_ci	sd->sensor = id->driver_info;
633062306a36Sopenharmony_ci
633162306a36Sopenharmony_ci	sd->reg08 = REG08_DEF;
633262306a36Sopenharmony_ci
633362306a36Sopenharmony_ci	INIT_WORK(&sd->work, transfer_update);
633462306a36Sopenharmony_ci
633562306a36Sopenharmony_ci	return 0;
633662306a36Sopenharmony_ci}
633762306a36Sopenharmony_ci
633862306a36Sopenharmony_cistatic int zcxx_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
633962306a36Sopenharmony_ci{
634062306a36Sopenharmony_ci	struct gspca_dev *gspca_dev =
634162306a36Sopenharmony_ci		container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
634262306a36Sopenharmony_ci	struct sd *sd = (struct sd *)gspca_dev;
634362306a36Sopenharmony_ci
634462306a36Sopenharmony_ci	switch (ctrl->id) {
634562306a36Sopenharmony_ci	case V4L2_CID_AUTOGAIN:
634662306a36Sopenharmony_ci		gspca_dev->usb_err = 0;
634762306a36Sopenharmony_ci		if (ctrl->val && sd->exposure && gspca_dev->streaming)
634862306a36Sopenharmony_ci			sd->exposure->val = getexposure(gspca_dev);
634962306a36Sopenharmony_ci		return gspca_dev->usb_err;
635062306a36Sopenharmony_ci	}
635162306a36Sopenharmony_ci	return -EINVAL;
635262306a36Sopenharmony_ci}
635362306a36Sopenharmony_ci
635462306a36Sopenharmony_cistatic int zcxx_s_ctrl(struct v4l2_ctrl *ctrl)
635562306a36Sopenharmony_ci{
635662306a36Sopenharmony_ci	struct gspca_dev *gspca_dev =
635762306a36Sopenharmony_ci		container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
635862306a36Sopenharmony_ci	struct sd *sd = (struct sd *)gspca_dev;
635962306a36Sopenharmony_ci	int i, qual;
636062306a36Sopenharmony_ci
636162306a36Sopenharmony_ci	gspca_dev->usb_err = 0;
636262306a36Sopenharmony_ci
636362306a36Sopenharmony_ci	if (ctrl->id == V4L2_CID_JPEG_COMPRESSION_QUALITY) {
636462306a36Sopenharmony_ci		qual = sd->reg08 >> 1;
636562306a36Sopenharmony_ci
636662306a36Sopenharmony_ci		for (i = 0; i < ARRAY_SIZE(jpeg_qual); i++) {
636762306a36Sopenharmony_ci			if (ctrl->val <= jpeg_qual[i])
636862306a36Sopenharmony_ci				break;
636962306a36Sopenharmony_ci		}
637062306a36Sopenharmony_ci		if (i == ARRAY_SIZE(jpeg_qual) || (i > 0 && i == qual && ctrl->val < jpeg_qual[i]))
637162306a36Sopenharmony_ci			i--;
637262306a36Sopenharmony_ci
637362306a36Sopenharmony_ci		/* With high quality settings we need max bandwidth */
637462306a36Sopenharmony_ci		if (i >= 2 && gspca_dev->streaming &&
637562306a36Sopenharmony_ci		    !gspca_dev->cam.needs_full_bandwidth)
637662306a36Sopenharmony_ci			return -EBUSY;
637762306a36Sopenharmony_ci
637862306a36Sopenharmony_ci		sd->reg08 = (i << 1) | 1;
637962306a36Sopenharmony_ci		ctrl->val = jpeg_qual[i];
638062306a36Sopenharmony_ci	}
638162306a36Sopenharmony_ci
638262306a36Sopenharmony_ci	if (!gspca_dev->streaming)
638362306a36Sopenharmony_ci		return 0;
638462306a36Sopenharmony_ci
638562306a36Sopenharmony_ci	switch (ctrl->id) {
638662306a36Sopenharmony_ci	/* gamma/brightness/contrast cluster */
638762306a36Sopenharmony_ci	case V4L2_CID_GAMMA:
638862306a36Sopenharmony_ci		setcontrast(gspca_dev, sd->gamma->val,
638962306a36Sopenharmony_ci				sd->brightness->val, sd->contrast->val);
639062306a36Sopenharmony_ci		break;
639162306a36Sopenharmony_ci	/* autogain/exposure cluster */
639262306a36Sopenharmony_ci	case V4L2_CID_AUTOGAIN:
639362306a36Sopenharmony_ci		setautogain(gspca_dev, ctrl->val);
639462306a36Sopenharmony_ci		if (!gspca_dev->usb_err && !ctrl->val && sd->exposure)
639562306a36Sopenharmony_ci			setexposure(gspca_dev, sd->exposure->val);
639662306a36Sopenharmony_ci		break;
639762306a36Sopenharmony_ci	case V4L2_CID_POWER_LINE_FREQUENCY:
639862306a36Sopenharmony_ci		setlightfreq(gspca_dev, ctrl->val);
639962306a36Sopenharmony_ci		break;
640062306a36Sopenharmony_ci	case V4L2_CID_SHARPNESS:
640162306a36Sopenharmony_ci		setsharpness(gspca_dev, ctrl->val);
640262306a36Sopenharmony_ci		break;
640362306a36Sopenharmony_ci	case V4L2_CID_JPEG_COMPRESSION_QUALITY:
640462306a36Sopenharmony_ci		setquality(gspca_dev);
640562306a36Sopenharmony_ci		break;
640662306a36Sopenharmony_ci	}
640762306a36Sopenharmony_ci	return gspca_dev->usb_err;
640862306a36Sopenharmony_ci}
640962306a36Sopenharmony_ci
641062306a36Sopenharmony_cistatic const struct v4l2_ctrl_ops zcxx_ctrl_ops = {
641162306a36Sopenharmony_ci	.g_volatile_ctrl = zcxx_g_volatile_ctrl,
641262306a36Sopenharmony_ci	.s_ctrl = zcxx_s_ctrl,
641362306a36Sopenharmony_ci};
641462306a36Sopenharmony_ci
641562306a36Sopenharmony_cistatic int sd_init_controls(struct gspca_dev *gspca_dev)
641662306a36Sopenharmony_ci{
641762306a36Sopenharmony_ci	struct sd *sd = (struct sd *)gspca_dev;
641862306a36Sopenharmony_ci	struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
641962306a36Sopenharmony_ci	static const u8 gamma[SENSOR_MAX] = {
642062306a36Sopenharmony_ci		[SENSOR_ADCM2700] =	4,
642162306a36Sopenharmony_ci		[SENSOR_CS2102] =	4,
642262306a36Sopenharmony_ci		[SENSOR_CS2102K] =	5,
642362306a36Sopenharmony_ci		[SENSOR_GC0303] =	3,
642462306a36Sopenharmony_ci		[SENSOR_GC0305] =	4,
642562306a36Sopenharmony_ci		[SENSOR_HDCS2020] =	4,
642662306a36Sopenharmony_ci		[SENSOR_HV7131B] =	4,
642762306a36Sopenharmony_ci		[SENSOR_HV7131R] =	4,
642862306a36Sopenharmony_ci		[SENSOR_ICM105A] =	4,
642962306a36Sopenharmony_ci		[SENSOR_MC501CB] =	4,
643062306a36Sopenharmony_ci		[SENSOR_MT9V111_1] =	4,
643162306a36Sopenharmony_ci		[SENSOR_MT9V111_3] =	4,
643262306a36Sopenharmony_ci		[SENSOR_OV7620] =	3,
643362306a36Sopenharmony_ci		[SENSOR_OV7630C] =	4,
643462306a36Sopenharmony_ci		[SENSOR_PAS106] =	4,
643562306a36Sopenharmony_ci		[SENSOR_PAS202B] =	4,
643662306a36Sopenharmony_ci		[SENSOR_PB0330] =	4,
643762306a36Sopenharmony_ci		[SENSOR_PO2030] =	4,
643862306a36Sopenharmony_ci		[SENSOR_TAS5130C] =	3,
643962306a36Sopenharmony_ci	};
644062306a36Sopenharmony_ci
644162306a36Sopenharmony_ci	gspca_dev->vdev.ctrl_handler = hdl;
644262306a36Sopenharmony_ci	v4l2_ctrl_handler_init(hdl, 8);
644362306a36Sopenharmony_ci	sd->brightness = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops,
644462306a36Sopenharmony_ci			V4L2_CID_BRIGHTNESS, 0, 255, 1, 128);
644562306a36Sopenharmony_ci	sd->contrast = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops,
644662306a36Sopenharmony_ci			V4L2_CID_CONTRAST, 0, 255, 1, 128);
644762306a36Sopenharmony_ci	sd->gamma = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops,
644862306a36Sopenharmony_ci			V4L2_CID_GAMMA, 1, 6, 1, gamma[sd->sensor]);
644962306a36Sopenharmony_ci	if (sd->sensor == SENSOR_HV7131R)
645062306a36Sopenharmony_ci		sd->exposure = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops,
645162306a36Sopenharmony_ci			V4L2_CID_EXPOSURE, 0x30d, 0x493e, 1, 0x927);
645262306a36Sopenharmony_ci	else if (sd->sensor == SENSOR_OV7620)
645362306a36Sopenharmony_ci		sd->exposure = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops,
645462306a36Sopenharmony_ci			V4L2_CID_EXPOSURE, 0, 255, 1, 0x41);
645562306a36Sopenharmony_ci	sd->autogain = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops,
645662306a36Sopenharmony_ci			V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
645762306a36Sopenharmony_ci	if (sd->sensor != SENSOR_OV7630C)
645862306a36Sopenharmony_ci		sd->plfreq = v4l2_ctrl_new_std_menu(hdl, &zcxx_ctrl_ops,
645962306a36Sopenharmony_ci			V4L2_CID_POWER_LINE_FREQUENCY,
646062306a36Sopenharmony_ci			V4L2_CID_POWER_LINE_FREQUENCY_60HZ, 0,
646162306a36Sopenharmony_ci			V4L2_CID_POWER_LINE_FREQUENCY_DISABLED);
646262306a36Sopenharmony_ci	sd->sharpness = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops,
646362306a36Sopenharmony_ci			V4L2_CID_SHARPNESS, 0, 3, 1,
646462306a36Sopenharmony_ci			sd->sensor == SENSOR_PO2030 ? 0 : 2);
646562306a36Sopenharmony_ci	sd->jpegqual = v4l2_ctrl_new_std(hdl, &zcxx_ctrl_ops,
646662306a36Sopenharmony_ci			V4L2_CID_JPEG_COMPRESSION_QUALITY,
646762306a36Sopenharmony_ci			jpeg_qual[0], jpeg_qual[ARRAY_SIZE(jpeg_qual) - 1], 1,
646862306a36Sopenharmony_ci			jpeg_qual[REG08_DEF >> 1]);
646962306a36Sopenharmony_ci	if (hdl->error) {
647062306a36Sopenharmony_ci		pr_err("Could not initialize controls\n");
647162306a36Sopenharmony_ci		return hdl->error;
647262306a36Sopenharmony_ci	}
647362306a36Sopenharmony_ci	v4l2_ctrl_cluster(3, &sd->gamma);
647462306a36Sopenharmony_ci	if (sd->sensor == SENSOR_HV7131R || sd->sensor == SENSOR_OV7620)
647562306a36Sopenharmony_ci		v4l2_ctrl_auto_cluster(2, &sd->autogain, 0, true);
647662306a36Sopenharmony_ci	return 0;
647762306a36Sopenharmony_ci}
647862306a36Sopenharmony_ci
647962306a36Sopenharmony_ci/* this function is called at probe and resume time */
648062306a36Sopenharmony_cistatic int sd_init(struct gspca_dev *gspca_dev)
648162306a36Sopenharmony_ci{
648262306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
648362306a36Sopenharmony_ci	struct cam *cam;
648462306a36Sopenharmony_ci	int sensor;
648562306a36Sopenharmony_ci	static const u8 mode_tb[SENSOR_MAX] = {
648662306a36Sopenharmony_ci		[SENSOR_ADCM2700] =	2,
648762306a36Sopenharmony_ci		[SENSOR_CS2102] =	1,
648862306a36Sopenharmony_ci		[SENSOR_CS2102K] =	1,
648962306a36Sopenharmony_ci		[SENSOR_GC0303] =	1,
649062306a36Sopenharmony_ci		[SENSOR_GC0305] =	1,
649162306a36Sopenharmony_ci		[SENSOR_HDCS2020] =	1,
649262306a36Sopenharmony_ci		[SENSOR_HV7131B] =	1,
649362306a36Sopenharmony_ci		[SENSOR_HV7131R] =	1,
649462306a36Sopenharmony_ci		[SENSOR_ICM105A] =	1,
649562306a36Sopenharmony_ci		[SENSOR_MC501CB] =	2,
649662306a36Sopenharmony_ci		[SENSOR_MT9V111_1] =	1,
649762306a36Sopenharmony_ci		[SENSOR_MT9V111_3] =	1,
649862306a36Sopenharmony_ci		[SENSOR_OV7620] =	2,
649962306a36Sopenharmony_ci		[SENSOR_OV7630C] =	1,
650062306a36Sopenharmony_ci		[SENSOR_PAS106] =	0,
650162306a36Sopenharmony_ci		[SENSOR_PAS202B] =	1,
650262306a36Sopenharmony_ci		[SENSOR_PB0330] =	1,
650362306a36Sopenharmony_ci		[SENSOR_PO2030] =	1,
650462306a36Sopenharmony_ci		[SENSOR_TAS5130C] =	1,
650562306a36Sopenharmony_ci	};
650662306a36Sopenharmony_ci
650762306a36Sopenharmony_ci	sensor = zcxx_probeSensor(gspca_dev);
650862306a36Sopenharmony_ci	if (sensor >= 0)
650962306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PROBE, "probe sensor -> %04x\n", sensor);
651062306a36Sopenharmony_ci	if ((unsigned) force_sensor < SENSOR_MAX) {
651162306a36Sopenharmony_ci		sd->sensor = force_sensor;
651262306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PROBE, "sensor forced to %d\n",
651362306a36Sopenharmony_ci			  force_sensor);
651462306a36Sopenharmony_ci	} else {
651562306a36Sopenharmony_ci		switch (sensor) {
651662306a36Sopenharmony_ci		case -1:
651762306a36Sopenharmony_ci			switch (sd->sensor) {
651862306a36Sopenharmony_ci			case SENSOR_MC501CB:
651962306a36Sopenharmony_ci				gspca_dbg(gspca_dev, D_PROBE, "Sensor MC501CB\n");
652062306a36Sopenharmony_ci				break;
652162306a36Sopenharmony_ci			case SENSOR_GC0303:
652262306a36Sopenharmony_ci				gspca_dbg(gspca_dev, D_PROBE, "Sensor GC0303\n");
652362306a36Sopenharmony_ci				break;
652462306a36Sopenharmony_ci			default:
652562306a36Sopenharmony_ci				pr_warn("Unknown sensor - set to TAS5130C\n");
652662306a36Sopenharmony_ci				sd->sensor = SENSOR_TAS5130C;
652762306a36Sopenharmony_ci			}
652862306a36Sopenharmony_ci			break;
652962306a36Sopenharmony_ci		case 0:
653062306a36Sopenharmony_ci			/* check the sensor type */
653162306a36Sopenharmony_ci			sensor = i2c_read(gspca_dev, 0x00);
653262306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE, "Sensor hv7131 type %d\n",
653362306a36Sopenharmony_ci				  sensor);
653462306a36Sopenharmony_ci			switch (sensor) {
653562306a36Sopenharmony_ci			case 0:			/* hv7131b */
653662306a36Sopenharmony_ci			case 1:			/* hv7131e */
653762306a36Sopenharmony_ci				gspca_dbg(gspca_dev, D_PROBE, "Find Sensor HV7131B\n");
653862306a36Sopenharmony_ci				sd->sensor = SENSOR_HV7131B;
653962306a36Sopenharmony_ci				break;
654062306a36Sopenharmony_ci			default:
654162306a36Sopenharmony_ci/*			case 2:			 * hv7131r */
654262306a36Sopenharmony_ci				gspca_dbg(gspca_dev, D_PROBE, "Find Sensor HV7131R\n");
654362306a36Sopenharmony_ci				sd->sensor = SENSOR_HV7131R;
654462306a36Sopenharmony_ci				break;
654562306a36Sopenharmony_ci			}
654662306a36Sopenharmony_ci			break;
654762306a36Sopenharmony_ci		case 0x02:
654862306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE, "Sensor TAS5130C\n");
654962306a36Sopenharmony_ci			sd->sensor = SENSOR_TAS5130C;
655062306a36Sopenharmony_ci			break;
655162306a36Sopenharmony_ci		case 0x04:
655262306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE, "Find Sensor CS2102\n");
655362306a36Sopenharmony_ci			sd->sensor = SENSOR_CS2102;
655462306a36Sopenharmony_ci			break;
655562306a36Sopenharmony_ci		case 0x08:
655662306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE, "Find Sensor HDCS2020\n");
655762306a36Sopenharmony_ci			sd->sensor = SENSOR_HDCS2020;
655862306a36Sopenharmony_ci			break;
655962306a36Sopenharmony_ci		case 0x0a:
656062306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE,
656162306a36Sopenharmony_ci				  "Find Sensor PB0330. Chip revision %x\n",
656262306a36Sopenharmony_ci				  sd->chip_revision);
656362306a36Sopenharmony_ci			sd->sensor = SENSOR_PB0330;
656462306a36Sopenharmony_ci			break;
656562306a36Sopenharmony_ci		case 0x0c:
656662306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE, "Find Sensor ICM105A\n");
656762306a36Sopenharmony_ci			sd->sensor = SENSOR_ICM105A;
656862306a36Sopenharmony_ci			break;
656962306a36Sopenharmony_ci		case 0x0e:
657062306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE, "Find Sensor PAS202B\n");
657162306a36Sopenharmony_ci			sd->sensor = SENSOR_PAS202B;
657262306a36Sopenharmony_ci			break;
657362306a36Sopenharmony_ci		case 0x0f:
657462306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE, "Find Sensor PAS106\n");
657562306a36Sopenharmony_ci			sd->sensor = SENSOR_PAS106;
657662306a36Sopenharmony_ci			break;
657762306a36Sopenharmony_ci		case 0x10:
657862306a36Sopenharmony_ci		case 0x12:
657962306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE, "Find Sensor TAS5130C\n");
658062306a36Sopenharmony_ci			sd->sensor = SENSOR_TAS5130C;
658162306a36Sopenharmony_ci			break;
658262306a36Sopenharmony_ci		case 0x11:
658362306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE, "Find Sensor HV7131R\n");
658462306a36Sopenharmony_ci			sd->sensor = SENSOR_HV7131R;
658562306a36Sopenharmony_ci			break;
658662306a36Sopenharmony_ci		case 0x13:
658762306a36Sopenharmony_ci		case 0x15:
658862306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE,
658962306a36Sopenharmony_ci				  "Sensor MT9V111. Chip revision %04x\n",
659062306a36Sopenharmony_ci				  sd->chip_revision);
659162306a36Sopenharmony_ci			sd->sensor = sd->bridge == BRIDGE_ZC301
659262306a36Sopenharmony_ci					? SENSOR_MT9V111_1
659362306a36Sopenharmony_ci					: SENSOR_MT9V111_3;
659462306a36Sopenharmony_ci			break;
659562306a36Sopenharmony_ci		case 0x14:
659662306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE,
659762306a36Sopenharmony_ci				  "Find Sensor CS2102K?. Chip revision %x\n",
659862306a36Sopenharmony_ci				  sd->chip_revision);
659962306a36Sopenharmony_ci			sd->sensor = SENSOR_CS2102K;
660062306a36Sopenharmony_ci			break;
660162306a36Sopenharmony_ci		case 0x16:
660262306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE, "Find Sensor ADCM2700\n");
660362306a36Sopenharmony_ci			sd->sensor = SENSOR_ADCM2700;
660462306a36Sopenharmony_ci			break;
660562306a36Sopenharmony_ci		case 0x29:
660662306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE, "Find Sensor GC0305\n");
660762306a36Sopenharmony_ci			sd->sensor = SENSOR_GC0305;
660862306a36Sopenharmony_ci			break;
660962306a36Sopenharmony_ci		case 0x0303:
661062306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE, "Sensor GC0303\n");
661162306a36Sopenharmony_ci			sd->sensor =  SENSOR_GC0303;
661262306a36Sopenharmony_ci			break;
661362306a36Sopenharmony_ci		case 0x2030:
661462306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE, "Find Sensor PO2030\n");
661562306a36Sopenharmony_ci			sd->sensor = SENSOR_PO2030;
661662306a36Sopenharmony_ci			break;
661762306a36Sopenharmony_ci		case 0x7620:
661862306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE, "Find Sensor OV7620\n");
661962306a36Sopenharmony_ci			sd->sensor = SENSOR_OV7620;
662062306a36Sopenharmony_ci			break;
662162306a36Sopenharmony_ci		case 0x7631:
662262306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE, "Find Sensor OV7630C\n");
662362306a36Sopenharmony_ci			sd->sensor = SENSOR_OV7630C;
662462306a36Sopenharmony_ci			break;
662562306a36Sopenharmony_ci		case 0x7648:
662662306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE, "Find Sensor OV7648\n");
662762306a36Sopenharmony_ci			sd->sensor = SENSOR_OV7620;	/* same sensor (?) */
662862306a36Sopenharmony_ci			break;
662962306a36Sopenharmony_ci		default:
663062306a36Sopenharmony_ci			pr_err("Unknown sensor %04x\n", sensor);
663162306a36Sopenharmony_ci			return -EINVAL;
663262306a36Sopenharmony_ci		}
663362306a36Sopenharmony_ci	}
663462306a36Sopenharmony_ci	if (sensor < 0x20) {
663562306a36Sopenharmony_ci		if (sensor == -1 || sensor == 0x10 || sensor == 0x12)
663662306a36Sopenharmony_ci			reg_w(gspca_dev, 0x02, 0x0010);
663762306a36Sopenharmony_ci		reg_r(gspca_dev, 0x0010);
663862306a36Sopenharmony_ci	}
663962306a36Sopenharmony_ci
664062306a36Sopenharmony_ci	cam = &gspca_dev->cam;
664162306a36Sopenharmony_ci	switch (mode_tb[sd->sensor]) {
664262306a36Sopenharmony_ci	case 0:
664362306a36Sopenharmony_ci		cam->cam_mode = sif_mode;
664462306a36Sopenharmony_ci		cam->nmodes = ARRAY_SIZE(sif_mode);
664562306a36Sopenharmony_ci		break;
664662306a36Sopenharmony_ci	case 1:
664762306a36Sopenharmony_ci		cam->cam_mode = vga_mode;
664862306a36Sopenharmony_ci		cam->nmodes = ARRAY_SIZE(vga_mode);
664962306a36Sopenharmony_ci		break;
665062306a36Sopenharmony_ci	default:
665162306a36Sopenharmony_ci/*	case 2: */
665262306a36Sopenharmony_ci		cam->cam_mode = broken_vga_mode;
665362306a36Sopenharmony_ci		cam->nmodes = ARRAY_SIZE(broken_vga_mode);
665462306a36Sopenharmony_ci		break;
665562306a36Sopenharmony_ci	}
665662306a36Sopenharmony_ci
665762306a36Sopenharmony_ci	/* switch off the led */
665862306a36Sopenharmony_ci	reg_w(gspca_dev, 0x01, 0x0000);
665962306a36Sopenharmony_ci	return gspca_dev->usb_err;
666062306a36Sopenharmony_ci}
666162306a36Sopenharmony_ci
666262306a36Sopenharmony_cistatic int sd_pre_start(struct gspca_dev *gspca_dev)
666362306a36Sopenharmony_ci{
666462306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
666562306a36Sopenharmony_ci	gspca_dev->cam.needs_full_bandwidth = (sd->reg08 >= 4) ? 1 : 0;
666662306a36Sopenharmony_ci	return 0;
666762306a36Sopenharmony_ci}
666862306a36Sopenharmony_ci
666962306a36Sopenharmony_cistatic int sd_start(struct gspca_dev *gspca_dev)
667062306a36Sopenharmony_ci{
667162306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
667262306a36Sopenharmony_ci	int mode;
667362306a36Sopenharmony_ci	static const struct usb_action *init_tb[SENSOR_MAX][2] = {
667462306a36Sopenharmony_ci	[SENSOR_ADCM2700] =
667562306a36Sopenharmony_ci			{adcm2700_Initial, adcm2700_InitialScale},
667662306a36Sopenharmony_ci	[SENSOR_CS2102]	=
667762306a36Sopenharmony_ci			{cs2102_Initial, cs2102_InitialScale},
667862306a36Sopenharmony_ci	[SENSOR_CS2102K] =
667962306a36Sopenharmony_ci			{cs2102K_Initial, cs2102K_InitialScale},
668062306a36Sopenharmony_ci	[SENSOR_GC0303] =
668162306a36Sopenharmony_ci		{gc0303_Initial, gc0303_InitialScale},
668262306a36Sopenharmony_ci	[SENSOR_GC0305] =
668362306a36Sopenharmony_ci			{gc0305_Initial, gc0305_InitialScale},
668462306a36Sopenharmony_ci	[SENSOR_HDCS2020] =
668562306a36Sopenharmony_ci			{hdcs2020_Initial, hdcs2020_InitialScale},
668662306a36Sopenharmony_ci	[SENSOR_HV7131B] =
668762306a36Sopenharmony_ci			{hv7131b_Initial, hv7131b_InitialScale},
668862306a36Sopenharmony_ci	[SENSOR_HV7131R] =
668962306a36Sopenharmony_ci			{hv7131r_Initial, hv7131r_InitialScale},
669062306a36Sopenharmony_ci	[SENSOR_ICM105A] =
669162306a36Sopenharmony_ci			{icm105a_Initial, icm105a_InitialScale},
669262306a36Sopenharmony_ci	[SENSOR_MC501CB] =
669362306a36Sopenharmony_ci			{mc501cb_Initial, mc501cb_InitialScale},
669462306a36Sopenharmony_ci	[SENSOR_MT9V111_1] =
669562306a36Sopenharmony_ci			{mt9v111_1_Initial, mt9v111_1_InitialScale},
669662306a36Sopenharmony_ci	[SENSOR_MT9V111_3] =
669762306a36Sopenharmony_ci			{mt9v111_3_Initial, mt9v111_3_InitialScale},
669862306a36Sopenharmony_ci	[SENSOR_OV7620] =
669962306a36Sopenharmony_ci			{ov7620_Initial, ov7620_InitialScale},
670062306a36Sopenharmony_ci	[SENSOR_OV7630C] =
670162306a36Sopenharmony_ci			{ov7630c_Initial, ov7630c_InitialScale},
670262306a36Sopenharmony_ci	[SENSOR_PAS106] =
670362306a36Sopenharmony_ci			{pas106b_Initial, pas106b_InitialScale},
670462306a36Sopenharmony_ci	[SENSOR_PAS202B] =
670562306a36Sopenharmony_ci			{pas202b_Initial, pas202b_InitialScale},
670662306a36Sopenharmony_ci	[SENSOR_PB0330] =
670762306a36Sopenharmony_ci			{pb0330_Initial, pb0330_InitialScale},
670862306a36Sopenharmony_ci	[SENSOR_PO2030] =
670962306a36Sopenharmony_ci			{po2030_Initial, po2030_InitialScale},
671062306a36Sopenharmony_ci	[SENSOR_TAS5130C] =
671162306a36Sopenharmony_ci			{tas5130c_Initial, tas5130c_InitialScale},
671262306a36Sopenharmony_ci	};
671362306a36Sopenharmony_ci
671462306a36Sopenharmony_ci	/* create the JPEG header */
671562306a36Sopenharmony_ci	jpeg_define(sd->jpeg_hdr, gspca_dev->pixfmt.height,
671662306a36Sopenharmony_ci			gspca_dev->pixfmt.width,
671762306a36Sopenharmony_ci			0x21);		/* JPEG 422 */
671862306a36Sopenharmony_ci
671962306a36Sopenharmony_ci	mode = gspca_dev->cam.cam_mode[gspca_dev->curr_mode].priv;
672062306a36Sopenharmony_ci	switch (sd->sensor) {
672162306a36Sopenharmony_ci	case SENSOR_HV7131R:
672262306a36Sopenharmony_ci		zcxx_probeSensor(gspca_dev);
672362306a36Sopenharmony_ci		break;
672462306a36Sopenharmony_ci	case SENSOR_PAS106:
672562306a36Sopenharmony_ci		usb_exchange(gspca_dev, pas106b_Initial_com);
672662306a36Sopenharmony_ci		break;
672762306a36Sopenharmony_ci	}
672862306a36Sopenharmony_ci	usb_exchange(gspca_dev, init_tb[sd->sensor][mode]);
672962306a36Sopenharmony_ci
673062306a36Sopenharmony_ci	switch (sd->sensor) {
673162306a36Sopenharmony_ci	case SENSOR_ADCM2700:
673262306a36Sopenharmony_ci	case SENSOR_GC0305:
673362306a36Sopenharmony_ci	case SENSOR_OV7620:
673462306a36Sopenharmony_ci	case SENSOR_PO2030:
673562306a36Sopenharmony_ci	case SENSOR_TAS5130C:
673662306a36Sopenharmony_ci	case SENSOR_GC0303:
673762306a36Sopenharmony_ci/*		msleep(100);			 * ?? */
673862306a36Sopenharmony_ci		reg_r(gspca_dev, 0x0002);	/* --> 0x40 */
673962306a36Sopenharmony_ci		reg_w(gspca_dev, 0x09, 0x01ad);	/* (from win traces) */
674062306a36Sopenharmony_ci		reg_w(gspca_dev, 0x15, 0x01ae);
674162306a36Sopenharmony_ci		if (sd->sensor == SENSOR_TAS5130C)
674262306a36Sopenharmony_ci			break;
674362306a36Sopenharmony_ci		reg_w(gspca_dev, 0x0d, 0x003a);
674462306a36Sopenharmony_ci		reg_w(gspca_dev, 0x02, 0x003b);
674562306a36Sopenharmony_ci		reg_w(gspca_dev, 0x00, 0x0038);
674662306a36Sopenharmony_ci		break;
674762306a36Sopenharmony_ci	case SENSOR_HV7131R:
674862306a36Sopenharmony_ci	case SENSOR_PAS202B:
674962306a36Sopenharmony_ci		reg_w(gspca_dev, 0x03, 0x003b);
675062306a36Sopenharmony_ci		reg_w(gspca_dev, 0x0c, 0x003a);
675162306a36Sopenharmony_ci		reg_w(gspca_dev, 0x0b, 0x0039);
675262306a36Sopenharmony_ci		if (sd->sensor == SENSOR_HV7131R)
675362306a36Sopenharmony_ci			reg_w(gspca_dev, 0x50, ZC3XX_R11D_GLOBALGAIN);
675462306a36Sopenharmony_ci		break;
675562306a36Sopenharmony_ci	}
675662306a36Sopenharmony_ci
675762306a36Sopenharmony_ci	setmatrix(gspca_dev);
675862306a36Sopenharmony_ci	switch (sd->sensor) {
675962306a36Sopenharmony_ci	case SENSOR_ADCM2700:
676062306a36Sopenharmony_ci	case SENSOR_OV7620:
676162306a36Sopenharmony_ci		reg_r(gspca_dev, 0x0008);
676262306a36Sopenharmony_ci		reg_w(gspca_dev, 0x00, 0x0008);
676362306a36Sopenharmony_ci		break;
676462306a36Sopenharmony_ci	case SENSOR_PAS202B:
676562306a36Sopenharmony_ci	case SENSOR_GC0305:
676662306a36Sopenharmony_ci	case SENSOR_HV7131R:
676762306a36Sopenharmony_ci	case SENSOR_TAS5130C:
676862306a36Sopenharmony_ci		reg_r(gspca_dev, 0x0008);
676962306a36Sopenharmony_ci		fallthrough;
677062306a36Sopenharmony_ci	case SENSOR_PO2030:
677162306a36Sopenharmony_ci		reg_w(gspca_dev, 0x03, 0x0008);
677262306a36Sopenharmony_ci		break;
677362306a36Sopenharmony_ci	}
677462306a36Sopenharmony_ci	setsharpness(gspca_dev, v4l2_ctrl_g_ctrl(sd->sharpness));
677562306a36Sopenharmony_ci
677662306a36Sopenharmony_ci	/* set the gamma tables when not set */
677762306a36Sopenharmony_ci	switch (sd->sensor) {
677862306a36Sopenharmony_ci	case SENSOR_CS2102K:		/* gamma set in xxx_Initial */
677962306a36Sopenharmony_ci	case SENSOR_HDCS2020:
678062306a36Sopenharmony_ci	case SENSOR_OV7630C:
678162306a36Sopenharmony_ci		break;
678262306a36Sopenharmony_ci	default:
678362306a36Sopenharmony_ci		setcontrast(gspca_dev, v4l2_ctrl_g_ctrl(sd->gamma),
678462306a36Sopenharmony_ci				v4l2_ctrl_g_ctrl(sd->brightness),
678562306a36Sopenharmony_ci				v4l2_ctrl_g_ctrl(sd->contrast));
678662306a36Sopenharmony_ci		break;
678762306a36Sopenharmony_ci	}
678862306a36Sopenharmony_ci	setmatrix(gspca_dev);			/* one more time? */
678962306a36Sopenharmony_ci	switch (sd->sensor) {
679062306a36Sopenharmony_ci	case SENSOR_OV7620:
679162306a36Sopenharmony_ci	case SENSOR_PAS202B:
679262306a36Sopenharmony_ci		reg_r(gspca_dev, 0x0180);	/* from win */
679362306a36Sopenharmony_ci		reg_w(gspca_dev, 0x00, 0x0180);
679462306a36Sopenharmony_ci		break;
679562306a36Sopenharmony_ci	}
679662306a36Sopenharmony_ci	setquality(gspca_dev);
679762306a36Sopenharmony_ci	/* Start with BRC disabled, transfer_update will enable it if needed */
679862306a36Sopenharmony_ci	reg_w(gspca_dev, 0x00, 0x0007);
679962306a36Sopenharmony_ci	if (sd->plfreq)
680062306a36Sopenharmony_ci		setlightfreq(gspca_dev, v4l2_ctrl_g_ctrl(sd->plfreq));
680162306a36Sopenharmony_ci
680262306a36Sopenharmony_ci	switch (sd->sensor) {
680362306a36Sopenharmony_ci	case SENSOR_ADCM2700:
680462306a36Sopenharmony_ci		reg_w(gspca_dev, 0x09, 0x01ad);	/* (from win traces) */
680562306a36Sopenharmony_ci		reg_w(gspca_dev, 0x15, 0x01ae);
680662306a36Sopenharmony_ci		reg_w(gspca_dev, 0x02, 0x0180);
680762306a36Sopenharmony_ci						/* ms-win + */
680862306a36Sopenharmony_ci		reg_w(gspca_dev, 0x40, 0x0117);
680962306a36Sopenharmony_ci		break;
681062306a36Sopenharmony_ci	case SENSOR_HV7131R:
681162306a36Sopenharmony_ci		setexposure(gspca_dev, v4l2_ctrl_g_ctrl(sd->exposure));
681262306a36Sopenharmony_ci		reg_w(gspca_dev, 0x00, ZC3XX_R1A7_CALCGLOBALMEAN);
681362306a36Sopenharmony_ci		break;
681462306a36Sopenharmony_ci	case SENSOR_GC0305:
681562306a36Sopenharmony_ci	case SENSOR_TAS5130C:
681662306a36Sopenharmony_ci		reg_w(gspca_dev, 0x09, 0x01ad);	/* (from win traces) */
681762306a36Sopenharmony_ci		reg_w(gspca_dev, 0x15, 0x01ae);
681862306a36Sopenharmony_ci		fallthrough;
681962306a36Sopenharmony_ci	case SENSOR_PAS202B:
682062306a36Sopenharmony_ci	case SENSOR_PO2030:
682162306a36Sopenharmony_ci/*		reg_w(gspca_dev, 0x40, ZC3XX_R117_GGAIN); in win traces */
682262306a36Sopenharmony_ci		reg_r(gspca_dev, 0x0180);
682362306a36Sopenharmony_ci		break;
682462306a36Sopenharmony_ci	case SENSOR_OV7620:
682562306a36Sopenharmony_ci		reg_w(gspca_dev, 0x09, 0x01ad);
682662306a36Sopenharmony_ci		reg_w(gspca_dev, 0x15, 0x01ae);
682762306a36Sopenharmony_ci		i2c_read(gspca_dev, 0x13);	/*fixme: returns 0xa3 */
682862306a36Sopenharmony_ci		i2c_write(gspca_dev, 0x13, 0xa3, 0x00);
682962306a36Sopenharmony_ci					/*fixme: returned value to send? */
683062306a36Sopenharmony_ci		reg_w(gspca_dev, 0x40, 0x0117);
683162306a36Sopenharmony_ci		reg_r(gspca_dev, 0x0180);
683262306a36Sopenharmony_ci		break;
683362306a36Sopenharmony_ci	}
683462306a36Sopenharmony_ci
683562306a36Sopenharmony_ci	setautogain(gspca_dev, v4l2_ctrl_g_ctrl(sd->autogain));
683662306a36Sopenharmony_ci
683762306a36Sopenharmony_ci	if (gspca_dev->usb_err < 0)
683862306a36Sopenharmony_ci		return gspca_dev->usb_err;
683962306a36Sopenharmony_ci
684062306a36Sopenharmony_ci	/* Start the transfer parameters update thread */
684162306a36Sopenharmony_ci	schedule_work(&sd->work);
684262306a36Sopenharmony_ci
684362306a36Sopenharmony_ci	return 0;
684462306a36Sopenharmony_ci}
684562306a36Sopenharmony_ci
684662306a36Sopenharmony_ci/* called on streamoff with alt==0 and on disconnect */
684762306a36Sopenharmony_ci/* the usb_lock is held at entry - restore on exit */
684862306a36Sopenharmony_cistatic void sd_stop0(struct gspca_dev *gspca_dev)
684962306a36Sopenharmony_ci{
685062306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
685162306a36Sopenharmony_ci
685262306a36Sopenharmony_ci	mutex_unlock(&gspca_dev->usb_lock);
685362306a36Sopenharmony_ci	flush_work(&sd->work);
685462306a36Sopenharmony_ci	mutex_lock(&gspca_dev->usb_lock);
685562306a36Sopenharmony_ci	if (!gspca_dev->present)
685662306a36Sopenharmony_ci		return;
685762306a36Sopenharmony_ci	send_unknown(gspca_dev, sd->sensor);
685862306a36Sopenharmony_ci}
685962306a36Sopenharmony_ci
686062306a36Sopenharmony_cistatic void sd_pkt_scan(struct gspca_dev *gspca_dev,
686162306a36Sopenharmony_ci			u8 *data,
686262306a36Sopenharmony_ci			int len)
686362306a36Sopenharmony_ci{
686462306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
686562306a36Sopenharmony_ci
686662306a36Sopenharmony_ci	/* check the JPEG end of frame */
686762306a36Sopenharmony_ci	if (len >= 3
686862306a36Sopenharmony_ci	 && data[len - 3] == 0xff && data[len - 2] == 0xd9) {
686962306a36Sopenharmony_ci/*fixme: what does the last byte mean?*/
687062306a36Sopenharmony_ci		gspca_frame_add(gspca_dev, LAST_PACKET,
687162306a36Sopenharmony_ci					data, len - 1);
687262306a36Sopenharmony_ci		return;
687362306a36Sopenharmony_ci	}
687462306a36Sopenharmony_ci
687562306a36Sopenharmony_ci	/* check the JPEG start of a frame */
687662306a36Sopenharmony_ci	if (data[0] == 0xff && data[1] == 0xd8) {
687762306a36Sopenharmony_ci		/* put the JPEG header in the new frame */
687862306a36Sopenharmony_ci		gspca_frame_add(gspca_dev, FIRST_PACKET,
687962306a36Sopenharmony_ci			sd->jpeg_hdr, JPEG_HDR_SZ);
688062306a36Sopenharmony_ci
688162306a36Sopenharmony_ci		/* remove the webcam's header:
688262306a36Sopenharmony_ci		 * ff d8 ff fe 00 0e 00 00 ss ss 00 01 ww ww hh hh pp pp
688362306a36Sopenharmony_ci		 *	- 'ss ss' is the frame sequence number (BE)
688462306a36Sopenharmony_ci		 *	- 'ww ww' and 'hh hh' are the window dimensions (BE)
688562306a36Sopenharmony_ci		 *	- 'pp pp' is the packet sequence number (BE)
688662306a36Sopenharmony_ci		 */
688762306a36Sopenharmony_ci		data += 18;
688862306a36Sopenharmony_ci		len -= 18;
688962306a36Sopenharmony_ci	}
689062306a36Sopenharmony_ci	gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
689162306a36Sopenharmony_ci}
689262306a36Sopenharmony_ci
689362306a36Sopenharmony_cistatic int sd_set_jcomp(struct gspca_dev *gspca_dev,
689462306a36Sopenharmony_ci			const struct v4l2_jpegcompression *jcomp)
689562306a36Sopenharmony_ci{
689662306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
689762306a36Sopenharmony_ci
689862306a36Sopenharmony_ci	return v4l2_ctrl_s_ctrl(sd->jpegqual, jcomp->quality);
689962306a36Sopenharmony_ci}
690062306a36Sopenharmony_ci
690162306a36Sopenharmony_cistatic int sd_get_jcomp(struct gspca_dev *gspca_dev,
690262306a36Sopenharmony_ci			struct v4l2_jpegcompression *jcomp)
690362306a36Sopenharmony_ci{
690462306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
690562306a36Sopenharmony_ci
690662306a36Sopenharmony_ci	memset(jcomp, 0, sizeof *jcomp);
690762306a36Sopenharmony_ci	jcomp->quality = v4l2_ctrl_g_ctrl(sd->jpegqual);
690862306a36Sopenharmony_ci	jcomp->jpeg_markers = V4L2_JPEG_MARKER_DHT
690962306a36Sopenharmony_ci			| V4L2_JPEG_MARKER_DQT;
691062306a36Sopenharmony_ci	return 0;
691162306a36Sopenharmony_ci}
691262306a36Sopenharmony_ci
691362306a36Sopenharmony_ci#if IS_ENABLED(CONFIG_INPUT)
691462306a36Sopenharmony_cistatic int sd_int_pkt_scan(struct gspca_dev *gspca_dev,
691562306a36Sopenharmony_ci			u8 *data,		/* interrupt packet data */
691662306a36Sopenharmony_ci			int len)		/* interrupt packet length */
691762306a36Sopenharmony_ci{
691862306a36Sopenharmony_ci	if (len == 8 && data[4] == 1) {
691962306a36Sopenharmony_ci		input_report_key(gspca_dev->input_dev, KEY_CAMERA, 1);
692062306a36Sopenharmony_ci		input_sync(gspca_dev->input_dev);
692162306a36Sopenharmony_ci		input_report_key(gspca_dev->input_dev, KEY_CAMERA, 0);
692262306a36Sopenharmony_ci		input_sync(gspca_dev->input_dev);
692362306a36Sopenharmony_ci	}
692462306a36Sopenharmony_ci
692562306a36Sopenharmony_ci	return 0;
692662306a36Sopenharmony_ci}
692762306a36Sopenharmony_ci#endif
692862306a36Sopenharmony_ci
692962306a36Sopenharmony_cistatic const struct sd_desc sd_desc = {
693062306a36Sopenharmony_ci	.name = KBUILD_MODNAME,
693162306a36Sopenharmony_ci	.config = sd_config,
693262306a36Sopenharmony_ci	.init = sd_init,
693362306a36Sopenharmony_ci	.init_controls = sd_init_controls,
693462306a36Sopenharmony_ci	.isoc_init = sd_pre_start,
693562306a36Sopenharmony_ci	.start = sd_start,
693662306a36Sopenharmony_ci	.stop0 = sd_stop0,
693762306a36Sopenharmony_ci	.pkt_scan = sd_pkt_scan,
693862306a36Sopenharmony_ci	.get_jcomp = sd_get_jcomp,
693962306a36Sopenharmony_ci	.set_jcomp = sd_set_jcomp,
694062306a36Sopenharmony_ci#if IS_ENABLED(CONFIG_INPUT)
694162306a36Sopenharmony_ci	.int_pkt_scan = sd_int_pkt_scan,
694262306a36Sopenharmony_ci#endif
694362306a36Sopenharmony_ci};
694462306a36Sopenharmony_ci
694562306a36Sopenharmony_cistatic const struct usb_device_id device_table[] = {
694662306a36Sopenharmony_ci	{USB_DEVICE(0x03f0, 0x1b07)},
694762306a36Sopenharmony_ci	{USB_DEVICE(0x041e, 0x041e)},
694862306a36Sopenharmony_ci	{USB_DEVICE(0x041e, 0x4017)},
694962306a36Sopenharmony_ci	{USB_DEVICE(0x041e, 0x401c), .driver_info = SENSOR_PAS106},
695062306a36Sopenharmony_ci	{USB_DEVICE(0x041e, 0x401e)},
695162306a36Sopenharmony_ci	{USB_DEVICE(0x041e, 0x401f)},
695262306a36Sopenharmony_ci	{USB_DEVICE(0x041e, 0x4022)},
695362306a36Sopenharmony_ci	{USB_DEVICE(0x041e, 0x4029)},
695462306a36Sopenharmony_ci	{USB_DEVICE(0x041e, 0x4034), .driver_info = SENSOR_PAS106},
695562306a36Sopenharmony_ci	{USB_DEVICE(0x041e, 0x4035), .driver_info = SENSOR_PAS106},
695662306a36Sopenharmony_ci	{USB_DEVICE(0x041e, 0x4036)},
695762306a36Sopenharmony_ci	{USB_DEVICE(0x041e, 0x403a)},
695862306a36Sopenharmony_ci	{USB_DEVICE(0x041e, 0x4051), .driver_info = SENSOR_GC0303},
695962306a36Sopenharmony_ci	{USB_DEVICE(0x041e, 0x4053), .driver_info = SENSOR_GC0303},
696062306a36Sopenharmony_ci	{USB_DEVICE(0x0458, 0x7007)},
696162306a36Sopenharmony_ci	{USB_DEVICE(0x0458, 0x700c)},
696262306a36Sopenharmony_ci	{USB_DEVICE(0x0458, 0x700f)},
696362306a36Sopenharmony_ci	{USB_DEVICE(0x0461, 0x0a00)},
696462306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x089d), .driver_info = SENSOR_MC501CB},
696562306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x08a0)},
696662306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x08a1)},
696762306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x08a2)},
696862306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x08a3)},
696962306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x08a6)},
697062306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x08a7)},
697162306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x08a9)},
697262306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x08aa)},
697362306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x08ac)},
697462306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x08ad)},
697562306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x08ae)},
697662306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x08af)},
697762306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x08b9)},
697862306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x08d7)},
697962306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x08d8)},
698062306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x08d9)},
698162306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x08da)},
698262306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x08dd), .driver_info = SENSOR_MC501CB},
698362306a36Sopenharmony_ci	{USB_DEVICE(0x0471, 0x0325), .driver_info = SENSOR_PAS106},
698462306a36Sopenharmony_ci	{USB_DEVICE(0x0471, 0x0326), .driver_info = SENSOR_PAS106},
698562306a36Sopenharmony_ci	{USB_DEVICE(0x0471, 0x032d), .driver_info = SENSOR_PAS106},
698662306a36Sopenharmony_ci	{USB_DEVICE(0x0471, 0x032e), .driver_info = SENSOR_PAS106},
698762306a36Sopenharmony_ci	{USB_DEVICE(0x055f, 0xc005)},
698862306a36Sopenharmony_ci	{USB_DEVICE(0x055f, 0xd003)},
698962306a36Sopenharmony_ci	{USB_DEVICE(0x055f, 0xd004)},
699062306a36Sopenharmony_ci	{USB_DEVICE(0x0698, 0x2003)},
699162306a36Sopenharmony_ci	{USB_DEVICE(0x0ac8, 0x0301), .driver_info = SENSOR_PAS106},
699262306a36Sopenharmony_ci	{USB_DEVICE(0x0ac8, 0x0302), .driver_info = SENSOR_PAS106},
699362306a36Sopenharmony_ci	{USB_DEVICE(0x0ac8, 0x301b)},
699462306a36Sopenharmony_ci	{USB_DEVICE(0x0ac8, 0x303b)},
699562306a36Sopenharmony_ci	{USB_DEVICE(0x0ac8, 0x305b)},
699662306a36Sopenharmony_ci	{USB_DEVICE(0x0ac8, 0x307b)},
699762306a36Sopenharmony_ci	{USB_DEVICE(0x10fd, 0x0128)},
699862306a36Sopenharmony_ci	{USB_DEVICE(0x10fd, 0x804d)},
699962306a36Sopenharmony_ci	{USB_DEVICE(0x10fd, 0x8050)},
700062306a36Sopenharmony_ci	{}			/* end of entry */
700162306a36Sopenharmony_ci};
700262306a36Sopenharmony_ciMODULE_DEVICE_TABLE(usb, device_table);
700362306a36Sopenharmony_ci
700462306a36Sopenharmony_ci/* -- device connect -- */
700562306a36Sopenharmony_cistatic int sd_probe(struct usb_interface *intf,
700662306a36Sopenharmony_ci			const struct usb_device_id *id)
700762306a36Sopenharmony_ci{
700862306a36Sopenharmony_ci	return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd),
700962306a36Sopenharmony_ci				THIS_MODULE);
701062306a36Sopenharmony_ci}
701162306a36Sopenharmony_ci
701262306a36Sopenharmony_ci/* USB driver */
701362306a36Sopenharmony_cistatic struct usb_driver sd_driver = {
701462306a36Sopenharmony_ci	.name = KBUILD_MODNAME,
701562306a36Sopenharmony_ci	.id_table = device_table,
701662306a36Sopenharmony_ci	.probe = sd_probe,
701762306a36Sopenharmony_ci	.disconnect = gspca_disconnect,
701862306a36Sopenharmony_ci#ifdef CONFIG_PM
701962306a36Sopenharmony_ci	.suspend = gspca_suspend,
702062306a36Sopenharmony_ci	.resume = gspca_resume,
702162306a36Sopenharmony_ci	.reset_resume = gspca_resume,
702262306a36Sopenharmony_ci#endif
702362306a36Sopenharmony_ci};
702462306a36Sopenharmony_ci
702562306a36Sopenharmony_cimodule_usb_driver(sd_driver);
702662306a36Sopenharmony_ci
702762306a36Sopenharmony_cimodule_param(force_sensor, int, 0644);
702862306a36Sopenharmony_ciMODULE_PARM_DESC(force_sensor,
702962306a36Sopenharmony_ci	"Force sensor. Only for experts!!!");
7030