162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * SPCA501 chip based cameras initialization data
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * V4L2 by Jean-Francois Moine <http://moinejf.free.fr>
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#define MODULE_NAME "spca501"
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include "gspca.h"
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ciMODULE_AUTHOR("Michel Xhaard <mxhaard@users.sourceforge.net>");
1562306a36Sopenharmony_ciMODULE_DESCRIPTION("GSPCA/SPCA501 USB Camera Driver");
1662306a36Sopenharmony_ciMODULE_LICENSE("GPL");
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci/* specific webcam descriptor */
1962306a36Sopenharmony_cistruct sd {
2062306a36Sopenharmony_ci	struct gspca_dev gspca_dev;	/* !! must be the first item */
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci	unsigned short contrast;
2362306a36Sopenharmony_ci	__u8 brightness;
2462306a36Sopenharmony_ci	__u8 colors;
2562306a36Sopenharmony_ci	__u8 blue_balance;
2662306a36Sopenharmony_ci	__u8 red_balance;
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci	char subtype;
2962306a36Sopenharmony_ci#define Arowana300KCMOSCamera 0
3062306a36Sopenharmony_ci#define IntelCreateAndShare 1
3162306a36Sopenharmony_ci#define KodakDVC325 2
3262306a36Sopenharmony_ci#define MystFromOriUnknownCamera 3
3362306a36Sopenharmony_ci#define SmileIntlCamera 4
3462306a36Sopenharmony_ci#define ThreeComHomeConnectLite 5
3562306a36Sopenharmony_ci#define ViewQuestM318B 6
3662306a36Sopenharmony_ci};
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_cistatic const struct v4l2_pix_format vga_mode[] = {
3962306a36Sopenharmony_ci	{160, 120, V4L2_PIX_FMT_SPCA501, V4L2_FIELD_NONE,
4062306a36Sopenharmony_ci		.bytesperline = 160,
4162306a36Sopenharmony_ci		.sizeimage = 160 * 120 * 3 / 2,
4262306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_SRGB,
4362306a36Sopenharmony_ci		.priv = 2},
4462306a36Sopenharmony_ci	{320, 240, V4L2_PIX_FMT_SPCA501, V4L2_FIELD_NONE,
4562306a36Sopenharmony_ci		.bytesperline = 320,
4662306a36Sopenharmony_ci		.sizeimage = 320 * 240 * 3 / 2,
4762306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_SRGB,
4862306a36Sopenharmony_ci		.priv = 1},
4962306a36Sopenharmony_ci	{640, 480, V4L2_PIX_FMT_SPCA501, V4L2_FIELD_NONE,
5062306a36Sopenharmony_ci		.bytesperline = 640,
5162306a36Sopenharmony_ci		.sizeimage = 640 * 480 * 3 / 2,
5262306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_SRGB,
5362306a36Sopenharmony_ci		.priv = 0},
5462306a36Sopenharmony_ci};
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci#define SPCA50X_REG_USB 0x2	/* spca505 501 */
5762306a36Sopenharmony_ci/*
5862306a36Sopenharmony_ci * Data to initialize a SPCA501. From a capture file provided by Bill Roehl
5962306a36Sopenharmony_ci * With SPCA501 chip description
6062306a36Sopenharmony_ci */
6162306a36Sopenharmony_ci#define CCDSP_SET		/* set CCDSP parameters */
6262306a36Sopenharmony_ci#define TG_SET			/* set time generator set */
6362306a36Sopenharmony_ci#undef DSPWIN_SET		/* set DSP windows parameters */
6462306a36Sopenharmony_ci#undef ALTER_GAMA	/* Set alternate set to YUV transform coeffs. */
6562306a36Sopenharmony_ci#define SPCA501_SNAPBIT 0x80
6662306a36Sopenharmony_ci#define SPCA501_SNAPCTRL 0x10
6762306a36Sopenharmony_ci/* Frame packet header offsets for the spca501 */
6862306a36Sopenharmony_ci#define SPCA501_OFFSET_GPIO   1
6962306a36Sopenharmony_ci#define SPCA501_OFFSET_TYPE   2
7062306a36Sopenharmony_ci#define SPCA501_OFFSET_TURN3A 3
7162306a36Sopenharmony_ci#define SPCA501_OFFSET_FRAMSEQ 4
7262306a36Sopenharmony_ci#define SPCA501_OFFSET_COMPRESS 5
7362306a36Sopenharmony_ci#define SPCA501_OFFSET_QUANT 6
7462306a36Sopenharmony_ci#define SPCA501_OFFSET_QUANT2 7
7562306a36Sopenharmony_ci#define SPCA501_OFFSET_DATA 8
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci#define SPCA501_PROP_COMP_ENABLE(d) ((d) & 1)
7862306a36Sopenharmony_ci#define SPCA501_PROP_SNAP(d) ((d) & 0x40)
7962306a36Sopenharmony_ci#define SPCA501_PROP_SNAP_CTRL(d) ((d) & 0x10)
8062306a36Sopenharmony_ci#define SPCA501_PROP_COMP_THRESH(d) (((d) & 0x0e) >> 1)
8162306a36Sopenharmony_ci#define SPCA501_PROP_COMP_QUANT(d) (((d) & 0x70) >> 4)
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci/* SPCA501 CCDSP control */
8462306a36Sopenharmony_ci#define SPCA501_REG_CCDSP 0x01
8562306a36Sopenharmony_ci/* SPCA501 control/status registers */
8662306a36Sopenharmony_ci#define SPCA501_REG_CTLRL 0x02
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci/* registers for color correction and YUV transformation */
8962306a36Sopenharmony_ci#define SPCA501_A11 0x08
9062306a36Sopenharmony_ci#define SPCA501_A12 0x09
9162306a36Sopenharmony_ci#define SPCA501_A13 0x0A
9262306a36Sopenharmony_ci#define SPCA501_A21 0x0B
9362306a36Sopenharmony_ci#define SPCA501_A22 0x0C
9462306a36Sopenharmony_ci#define SPCA501_A23 0x0D
9562306a36Sopenharmony_ci#define SPCA501_A31 0x0E
9662306a36Sopenharmony_ci#define SPCA501_A32 0x0F
9762306a36Sopenharmony_ci#define SPCA501_A33 0x10
9862306a36Sopenharmony_ci
9962306a36Sopenharmony_ci/* Data for video camera initialization before capturing */
10062306a36Sopenharmony_cistatic const __u16 spca501_open_data[][3] = {
10162306a36Sopenharmony_ci	/* bmRequest,value,index */
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_ci	{0x2, 0x50, 0x00},	/* C/S enable soft reset */
10462306a36Sopenharmony_ci	{0x2, 0x40, 0x00},	/* C/S disable soft reset */
10562306a36Sopenharmony_ci	{0x2, 0x02, 0x05},	/* C/S general purpose I/O data */
10662306a36Sopenharmony_ci	{0x2, 0x03, 0x05},	/* C/S general purpose I/O data */
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci#ifdef CCDSP_SET
10962306a36Sopenharmony_ci	{0x1, 0x38, 0x01},	/* CCDSP options */
11062306a36Sopenharmony_ci	{0x1, 0x05, 0x02}, /* CCDSP Optical black level for user settings */
11162306a36Sopenharmony_ci	{0x1, 0xC0, 0x03},	/* CCDSP Optical black settings */
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ci	{0x1, 0x67, 0x07},
11462306a36Sopenharmony_ci	{0x1, 0x63, 0x3f},	/* CCDSP CCD gamma enable */
11562306a36Sopenharmony_ci	{0x1, 0x03, 0x56},	/* Add gamma correction */
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ci	{0x1, 0xFF, 0x15},	/* CCDSP High luminance for white balance */
11862306a36Sopenharmony_ci	{0x1, 0x01, 0x16},	/* CCDSP Low luminance for white balance */
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_ci/* Color correction and RGB-to-YUV transformation coefficients changing */
12162306a36Sopenharmony_ci#ifdef ALTER_GAMA
12262306a36Sopenharmony_ci	{0x0, 0x00, 0x08},	/* A11 */
12362306a36Sopenharmony_ci	{0x0, 0x00, 0x09},	/* A12 */
12462306a36Sopenharmony_ci	{0x0, 0x90, 0x0A},	/* A13 */
12562306a36Sopenharmony_ci	{0x0, 0x12, 0x0B},	/* A21 */
12662306a36Sopenharmony_ci	{0x0, 0x00, 0x0C},	/* A22 */
12762306a36Sopenharmony_ci	{0x0, 0x00, 0x0D},	/* A23 */
12862306a36Sopenharmony_ci	{0x0, 0x00, 0x0E},	/* A31 */
12962306a36Sopenharmony_ci	{0x0, 0x02, 0x0F},	/* A32 */
13062306a36Sopenharmony_ci	{0x0, 0x00, 0x10},	/* A33 */
13162306a36Sopenharmony_ci#else
13262306a36Sopenharmony_ci	{0x1, 0x2a, 0x08},	/* A11 0x31 */
13362306a36Sopenharmony_ci	{0x1, 0xf8, 0x09},	/* A12 f8 */
13462306a36Sopenharmony_ci	{0x1, 0xf8, 0x0A},	/* A13 f8 */
13562306a36Sopenharmony_ci	{0x1, 0xf8, 0x0B},	/* A21 f8 */
13662306a36Sopenharmony_ci	{0x1, 0x14, 0x0C},	/* A22 0x14 */
13762306a36Sopenharmony_ci	{0x1, 0xf8, 0x0D},	/* A23 f8 */
13862306a36Sopenharmony_ci	{0x1, 0xf8, 0x0E},	/* A31 f8 */
13962306a36Sopenharmony_ci	{0x1, 0xf8, 0x0F},	/* A32 f8 */
14062306a36Sopenharmony_ci	{0x1, 0x20, 0x10},	/* A33 0x20 */
14162306a36Sopenharmony_ci#endif
14262306a36Sopenharmony_ci	{0x1, 0x00, 0x11},	/* R offset */
14362306a36Sopenharmony_ci	{0x1, 0x00, 0x12},	/* G offset */
14462306a36Sopenharmony_ci	{0x1, 0x00, 0x13},	/* B offset */
14562306a36Sopenharmony_ci	{0x1, 0x00, 0x14},	/* GB offset */
14662306a36Sopenharmony_ci
14762306a36Sopenharmony_ci#endif
14862306a36Sopenharmony_ci
14962306a36Sopenharmony_ci#ifdef TG_SET
15062306a36Sopenharmony_ci	/* Time generator manipulations */
15162306a36Sopenharmony_ci	{0x0, 0xfc, 0x0},	/* Set up high bits of shutter speed */
15262306a36Sopenharmony_ci	{0x0, 0x01, 0x1},	/* Set up low bits of shutter speed */
15362306a36Sopenharmony_ci
15462306a36Sopenharmony_ci	{0x0, 0xe4, 0x04},	/* DCLK*2 clock phase adjustment */
15562306a36Sopenharmony_ci	{0x0, 0x08, 0x05},	/* ADCK phase adjustment, inv. ext. VB */
15662306a36Sopenharmony_ci	{0x0, 0x03, 0x06},	/* FR phase adjustment */
15762306a36Sopenharmony_ci	{0x0, 0x01, 0x07},	/* FCDS phase adjustment */
15862306a36Sopenharmony_ci	{0x0, 0x39, 0x08},	/* FS phase adjustment */
15962306a36Sopenharmony_ci	{0x0, 0x88, 0x0a},	/* FH1 phase and delay adjustment */
16062306a36Sopenharmony_ci	{0x0, 0x03, 0x0f},	/* pixel identification */
16162306a36Sopenharmony_ci	{0x0, 0x00, 0x11},	/* clock source selection (default) */
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ci	/*VERY strange manipulations with
16462306a36Sopenharmony_ci	 * select DMCLP or OBPX to be ADCLP output (0x0C)
16562306a36Sopenharmony_ci	 * OPB always toggle or not (0x0D) but they allow
16662306a36Sopenharmony_ci	 * us to set up brightness
16762306a36Sopenharmony_ci	 */
16862306a36Sopenharmony_ci	{0x0, 0x01, 0x0c},
16962306a36Sopenharmony_ci	{0x0, 0xe0, 0x0d},
17062306a36Sopenharmony_ci	/* Done */
17162306a36Sopenharmony_ci#endif
17262306a36Sopenharmony_ci
17362306a36Sopenharmony_ci#ifdef DSPWIN_SET
17462306a36Sopenharmony_ci	{0x1, 0xa0, 0x01},	/* Setting image processing parameters */
17562306a36Sopenharmony_ci	{0x1, 0x1c, 0x17},	/* Changing Windows positions X1 */
17662306a36Sopenharmony_ci	{0x1, 0xe2, 0x19},	/* X2 */
17762306a36Sopenharmony_ci	{0x1, 0x1c, 0x1b},	/* X3 */
17862306a36Sopenharmony_ci	{0x1, 0xe2, 0x1d},	/* X4 */
17962306a36Sopenharmony_ci	{0x1, 0x5f, 0x1f},	/* X5 */
18062306a36Sopenharmony_ci	{0x1, 0x32, 0x20},	/* Y5 */
18162306a36Sopenharmony_ci	{0x1, 0x01, 0x10},	/* Changing A33 */
18262306a36Sopenharmony_ci#endif
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ci	{0x2, 0x204a, 0x07},/* Setting video compression & resolution 160x120 */
18562306a36Sopenharmony_ci	{0x2, 0x94, 0x06},	/* Setting video no compression */
18662306a36Sopenharmony_ci	{}
18762306a36Sopenharmony_ci};
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_ci/*
19062306a36Sopenharmony_ci   The SPCAxxx docs from Sunplus document these values
19162306a36Sopenharmony_ci   in tables, one table per register number.  In the data
19262306a36Sopenharmony_ci   below, dmRequest is the register number, index is the Addr,
19362306a36Sopenharmony_ci   and value is a combination of Bit values.
19462306a36Sopenharmony_ci   Bit  Value (hex)
19562306a36Sopenharmony_ci   0    01
19662306a36Sopenharmony_ci   1    02
19762306a36Sopenharmony_ci   2    04
19862306a36Sopenharmony_ci   3    08
19962306a36Sopenharmony_ci   4    10
20062306a36Sopenharmony_ci   5    20
20162306a36Sopenharmony_ci   6    40
20262306a36Sopenharmony_ci   7    80
20362306a36Sopenharmony_ci */
20462306a36Sopenharmony_ci
20562306a36Sopenharmony_ci/* Data for chip initialization (set default values) */
20662306a36Sopenharmony_cistatic const __u16 spca501_init_data[][3] = {
20762306a36Sopenharmony_ci	/* Set all the values to powerup defaults */
20862306a36Sopenharmony_ci	/* bmRequest,value,index */
20962306a36Sopenharmony_ci	{0x0, 0xAA, 0x00},
21062306a36Sopenharmony_ci	{0x0, 0x02, 0x01},
21162306a36Sopenharmony_ci	{0x0, 0x01, 0x02},
21262306a36Sopenharmony_ci	{0x0, 0x02, 0x03},
21362306a36Sopenharmony_ci	{0x0, 0xCE, 0x04},
21462306a36Sopenharmony_ci	{0x0, 0x00, 0x05},
21562306a36Sopenharmony_ci	{0x0, 0x00, 0x06},
21662306a36Sopenharmony_ci	{0x0, 0x00, 0x07},
21762306a36Sopenharmony_ci	{0x0, 0x00, 0x08},
21862306a36Sopenharmony_ci	{0x0, 0x00, 0x09},
21962306a36Sopenharmony_ci	{0x0, 0x90, 0x0A},
22062306a36Sopenharmony_ci	{0x0, 0x12, 0x0B},
22162306a36Sopenharmony_ci	{0x0, 0x00, 0x0C},
22262306a36Sopenharmony_ci	{0x0, 0x00, 0x0D},
22362306a36Sopenharmony_ci	{0x0, 0x00, 0x0E},
22462306a36Sopenharmony_ci	{0x0, 0x02, 0x0F},
22562306a36Sopenharmony_ci	{0x0, 0x00, 0x10},
22662306a36Sopenharmony_ci	{0x0, 0x00, 0x11},
22762306a36Sopenharmony_ci	{0x0, 0x00, 0x12},
22862306a36Sopenharmony_ci	{0x0, 0x00, 0x13},
22962306a36Sopenharmony_ci	{0x0, 0x00, 0x14},
23062306a36Sopenharmony_ci	{0x0, 0x00, 0x15},
23162306a36Sopenharmony_ci	{0x0, 0x00, 0x16},
23262306a36Sopenharmony_ci	{0x0, 0x00, 0x17},
23362306a36Sopenharmony_ci	{0x0, 0x00, 0x18},
23462306a36Sopenharmony_ci	{0x0, 0x00, 0x19},
23562306a36Sopenharmony_ci	{0x0, 0x00, 0x1A},
23662306a36Sopenharmony_ci	{0x0, 0x00, 0x1B},
23762306a36Sopenharmony_ci	{0x0, 0x00, 0x1C},
23862306a36Sopenharmony_ci	{0x0, 0x00, 0x1D},
23962306a36Sopenharmony_ci	{0x0, 0x00, 0x1E},
24062306a36Sopenharmony_ci	{0x0, 0x00, 0x1F},
24162306a36Sopenharmony_ci	{0x0, 0x00, 0x20},
24262306a36Sopenharmony_ci	{0x0, 0x00, 0x21},
24362306a36Sopenharmony_ci	{0x0, 0x00, 0x22},
24462306a36Sopenharmony_ci	{0x0, 0x00, 0x23},
24562306a36Sopenharmony_ci	{0x0, 0x00, 0x24},
24662306a36Sopenharmony_ci	{0x0, 0x00, 0x25},
24762306a36Sopenharmony_ci	{0x0, 0x00, 0x26},
24862306a36Sopenharmony_ci	{0x0, 0x00, 0x27},
24962306a36Sopenharmony_ci	{0x0, 0x00, 0x28},
25062306a36Sopenharmony_ci	{0x0, 0x00, 0x29},
25162306a36Sopenharmony_ci	{0x0, 0x00, 0x2A},
25262306a36Sopenharmony_ci	{0x0, 0x00, 0x2B},
25362306a36Sopenharmony_ci	{0x0, 0x00, 0x2C},
25462306a36Sopenharmony_ci	{0x0, 0x00, 0x2D},
25562306a36Sopenharmony_ci	{0x0, 0x00, 0x2E},
25662306a36Sopenharmony_ci	{0x0, 0x00, 0x2F},
25762306a36Sopenharmony_ci	{0x0, 0x00, 0x30},
25862306a36Sopenharmony_ci	{0x0, 0x00, 0x31},
25962306a36Sopenharmony_ci	{0x0, 0x00, 0x32},
26062306a36Sopenharmony_ci	{0x0, 0x00, 0x33},
26162306a36Sopenharmony_ci	{0x0, 0x00, 0x34},
26262306a36Sopenharmony_ci	{0x0, 0x00, 0x35},
26362306a36Sopenharmony_ci	{0x0, 0x00, 0x36},
26462306a36Sopenharmony_ci	{0x0, 0x00, 0x37},
26562306a36Sopenharmony_ci	{0x0, 0x00, 0x38},
26662306a36Sopenharmony_ci	{0x0, 0x00, 0x39},
26762306a36Sopenharmony_ci	{0x0, 0x00, 0x3A},
26862306a36Sopenharmony_ci	{0x0, 0x00, 0x3B},
26962306a36Sopenharmony_ci	{0x0, 0x00, 0x3C},
27062306a36Sopenharmony_ci	{0x0, 0x00, 0x3D},
27162306a36Sopenharmony_ci	{0x0, 0x00, 0x3E},
27262306a36Sopenharmony_ci	{0x0, 0x00, 0x3F},
27362306a36Sopenharmony_ci	{0x0, 0x00, 0x40},
27462306a36Sopenharmony_ci	{0x0, 0x00, 0x41},
27562306a36Sopenharmony_ci	{0x0, 0x00, 0x42},
27662306a36Sopenharmony_ci	{0x0, 0x00, 0x43},
27762306a36Sopenharmony_ci	{0x0, 0x00, 0x44},
27862306a36Sopenharmony_ci	{0x0, 0x00, 0x45},
27962306a36Sopenharmony_ci	{0x0, 0x00, 0x46},
28062306a36Sopenharmony_ci	{0x0, 0x00, 0x47},
28162306a36Sopenharmony_ci	{0x0, 0x00, 0x48},
28262306a36Sopenharmony_ci	{0x0, 0x00, 0x49},
28362306a36Sopenharmony_ci	{0x0, 0x00, 0x4A},
28462306a36Sopenharmony_ci	{0x0, 0x00, 0x4B},
28562306a36Sopenharmony_ci	{0x0, 0x00, 0x4C},
28662306a36Sopenharmony_ci	{0x0, 0x00, 0x4D},
28762306a36Sopenharmony_ci	{0x0, 0x00, 0x4E},
28862306a36Sopenharmony_ci	{0x0, 0x00, 0x4F},
28962306a36Sopenharmony_ci	{0x0, 0x00, 0x50},
29062306a36Sopenharmony_ci	{0x0, 0x00, 0x51},
29162306a36Sopenharmony_ci	{0x0, 0x00, 0x52},
29262306a36Sopenharmony_ci	{0x0, 0x00, 0x53},
29362306a36Sopenharmony_ci	{0x0, 0x00, 0x54},
29462306a36Sopenharmony_ci	{0x0, 0x00, 0x55},
29562306a36Sopenharmony_ci	{0x0, 0x00, 0x56},
29662306a36Sopenharmony_ci	{0x0, 0x00, 0x57},
29762306a36Sopenharmony_ci	{0x0, 0x00, 0x58},
29862306a36Sopenharmony_ci	{0x0, 0x00, 0x59},
29962306a36Sopenharmony_ci	{0x0, 0x00, 0x5A},
30062306a36Sopenharmony_ci	{0x0, 0x00, 0x5B},
30162306a36Sopenharmony_ci	{0x0, 0x00, 0x5C},
30262306a36Sopenharmony_ci	{0x0, 0x00, 0x5D},
30362306a36Sopenharmony_ci	{0x0, 0x00, 0x5E},
30462306a36Sopenharmony_ci	{0x0, 0x00, 0x5F},
30562306a36Sopenharmony_ci	{0x0, 0x00, 0x60},
30662306a36Sopenharmony_ci	{0x0, 0x00, 0x61},
30762306a36Sopenharmony_ci	{0x0, 0x00, 0x62},
30862306a36Sopenharmony_ci	{0x0, 0x00, 0x63},
30962306a36Sopenharmony_ci	{0x0, 0x00, 0x64},
31062306a36Sopenharmony_ci	{0x0, 0x00, 0x65},
31162306a36Sopenharmony_ci	{0x0, 0x00, 0x66},
31262306a36Sopenharmony_ci	{0x0, 0x00, 0x67},
31362306a36Sopenharmony_ci	{0x0, 0x00, 0x68},
31462306a36Sopenharmony_ci	{0x0, 0x00, 0x69},
31562306a36Sopenharmony_ci	{0x0, 0x00, 0x6A},
31662306a36Sopenharmony_ci	{0x0, 0x00, 0x6B},
31762306a36Sopenharmony_ci	{0x0, 0x00, 0x6C},
31862306a36Sopenharmony_ci	{0x0, 0x00, 0x6D},
31962306a36Sopenharmony_ci	{0x0, 0x00, 0x6E},
32062306a36Sopenharmony_ci	{0x0, 0x00, 0x6F},
32162306a36Sopenharmony_ci	{0x0, 0x00, 0x70},
32262306a36Sopenharmony_ci	{0x0, 0x00, 0x71},
32362306a36Sopenharmony_ci	{0x0, 0x00, 0x72},
32462306a36Sopenharmony_ci	{0x0, 0x00, 0x73},
32562306a36Sopenharmony_ci	{0x0, 0x00, 0x74},
32662306a36Sopenharmony_ci	{0x0, 0x00, 0x75},
32762306a36Sopenharmony_ci	{0x0, 0x00, 0x76},
32862306a36Sopenharmony_ci	{0x0, 0x00, 0x77},
32962306a36Sopenharmony_ci	{0x0, 0x00, 0x78},
33062306a36Sopenharmony_ci	{0x0, 0x00, 0x79},
33162306a36Sopenharmony_ci	{0x0, 0x00, 0x7A},
33262306a36Sopenharmony_ci	{0x0, 0x00, 0x7B},
33362306a36Sopenharmony_ci	{0x0, 0x00, 0x7C},
33462306a36Sopenharmony_ci	{0x0, 0x00, 0x7D},
33562306a36Sopenharmony_ci	{0x0, 0x00, 0x7E},
33662306a36Sopenharmony_ci	{0x0, 0x00, 0x7F},
33762306a36Sopenharmony_ci	{0x0, 0x00, 0x80},
33862306a36Sopenharmony_ci	{0x0, 0x00, 0x81},
33962306a36Sopenharmony_ci	{0x0, 0x00, 0x82},
34062306a36Sopenharmony_ci	{0x0, 0x00, 0x83},
34162306a36Sopenharmony_ci	{0x0, 0x00, 0x84},
34262306a36Sopenharmony_ci	{0x0, 0x00, 0x85},
34362306a36Sopenharmony_ci	{0x0, 0x00, 0x86},
34462306a36Sopenharmony_ci	{0x0, 0x00, 0x87},
34562306a36Sopenharmony_ci	{0x0, 0x00, 0x88},
34662306a36Sopenharmony_ci	{0x0, 0x00, 0x89},
34762306a36Sopenharmony_ci	{0x0, 0x00, 0x8A},
34862306a36Sopenharmony_ci	{0x0, 0x00, 0x8B},
34962306a36Sopenharmony_ci	{0x0, 0x00, 0x8C},
35062306a36Sopenharmony_ci	{0x0, 0x00, 0x8D},
35162306a36Sopenharmony_ci	{0x0, 0x00, 0x8E},
35262306a36Sopenharmony_ci	{0x0, 0x00, 0x8F},
35362306a36Sopenharmony_ci	{0x0, 0x00, 0x90},
35462306a36Sopenharmony_ci	{0x0, 0x00, 0x91},
35562306a36Sopenharmony_ci	{0x0, 0x00, 0x92},
35662306a36Sopenharmony_ci	{0x0, 0x00, 0x93},
35762306a36Sopenharmony_ci	{0x0, 0x00, 0x94},
35862306a36Sopenharmony_ci	{0x0, 0x00, 0x95},
35962306a36Sopenharmony_ci	{0x0, 0x00, 0x96},
36062306a36Sopenharmony_ci	{0x0, 0x00, 0x97},
36162306a36Sopenharmony_ci	{0x0, 0x00, 0x98},
36262306a36Sopenharmony_ci	{0x0, 0x00, 0x99},
36362306a36Sopenharmony_ci	{0x0, 0x00, 0x9A},
36462306a36Sopenharmony_ci	{0x0, 0x00, 0x9B},
36562306a36Sopenharmony_ci	{0x0, 0x00, 0x9C},
36662306a36Sopenharmony_ci	{0x0, 0x00, 0x9D},
36762306a36Sopenharmony_ci	{0x0, 0x00, 0x9E},
36862306a36Sopenharmony_ci	{0x0, 0x00, 0x9F},
36962306a36Sopenharmony_ci	{0x0, 0x00, 0xA0},
37062306a36Sopenharmony_ci	{0x0, 0x00, 0xA1},
37162306a36Sopenharmony_ci	{0x0, 0x00, 0xA2},
37262306a36Sopenharmony_ci	{0x0, 0x00, 0xA3},
37362306a36Sopenharmony_ci	{0x0, 0x00, 0xA4},
37462306a36Sopenharmony_ci	{0x0, 0x00, 0xA5},
37562306a36Sopenharmony_ci	{0x0, 0x00, 0xA6},
37662306a36Sopenharmony_ci	{0x0, 0x00, 0xA7},
37762306a36Sopenharmony_ci	{0x0, 0x00, 0xA8},
37862306a36Sopenharmony_ci	{0x0, 0x00, 0xA9},
37962306a36Sopenharmony_ci	{0x0, 0x00, 0xAA},
38062306a36Sopenharmony_ci	{0x0, 0x00, 0xAB},
38162306a36Sopenharmony_ci	{0x0, 0x00, 0xAC},
38262306a36Sopenharmony_ci	{0x0, 0x00, 0xAD},
38362306a36Sopenharmony_ci	{0x0, 0x00, 0xAE},
38462306a36Sopenharmony_ci	{0x0, 0x00, 0xAF},
38562306a36Sopenharmony_ci	{0x0, 0x00, 0xB0},
38662306a36Sopenharmony_ci	{0x0, 0x00, 0xB1},
38762306a36Sopenharmony_ci	{0x0, 0x00, 0xB2},
38862306a36Sopenharmony_ci	{0x0, 0x00, 0xB3},
38962306a36Sopenharmony_ci	{0x0, 0x00, 0xB4},
39062306a36Sopenharmony_ci	{0x0, 0x00, 0xB5},
39162306a36Sopenharmony_ci	{0x0, 0x00, 0xB6},
39262306a36Sopenharmony_ci	{0x0, 0x00, 0xB7},
39362306a36Sopenharmony_ci	{0x0, 0x00, 0xB8},
39462306a36Sopenharmony_ci	{0x0, 0x00, 0xB9},
39562306a36Sopenharmony_ci	{0x0, 0x00, 0xBA},
39662306a36Sopenharmony_ci	{0x0, 0x00, 0xBB},
39762306a36Sopenharmony_ci	{0x0, 0x00, 0xBC},
39862306a36Sopenharmony_ci	{0x0, 0x00, 0xBD},
39962306a36Sopenharmony_ci	{0x0, 0x00, 0xBE},
40062306a36Sopenharmony_ci	{0x0, 0x00, 0xBF},
40162306a36Sopenharmony_ci	{0x0, 0x00, 0xC0},
40262306a36Sopenharmony_ci	{0x0, 0x00, 0xC1},
40362306a36Sopenharmony_ci	{0x0, 0x00, 0xC2},
40462306a36Sopenharmony_ci	{0x0, 0x00, 0xC3},
40562306a36Sopenharmony_ci	{0x0, 0x00, 0xC4},
40662306a36Sopenharmony_ci	{0x0, 0x00, 0xC5},
40762306a36Sopenharmony_ci	{0x0, 0x00, 0xC6},
40862306a36Sopenharmony_ci	{0x0, 0x00, 0xC7},
40962306a36Sopenharmony_ci	{0x0, 0x00, 0xC8},
41062306a36Sopenharmony_ci	{0x0, 0x00, 0xC9},
41162306a36Sopenharmony_ci	{0x0, 0x00, 0xCA},
41262306a36Sopenharmony_ci	{0x0, 0x00, 0xCB},
41362306a36Sopenharmony_ci	{0x0, 0x00, 0xCC},
41462306a36Sopenharmony_ci	{0x1, 0xF4, 0x00},
41562306a36Sopenharmony_ci	{0x1, 0x38, 0x01},
41662306a36Sopenharmony_ci	{0x1, 0x40, 0x02},
41762306a36Sopenharmony_ci	{0x1, 0x0A, 0x03},
41862306a36Sopenharmony_ci	{0x1, 0x40, 0x04},
41962306a36Sopenharmony_ci	{0x1, 0x40, 0x05},
42062306a36Sopenharmony_ci	{0x1, 0x40, 0x06},
42162306a36Sopenharmony_ci	{0x1, 0x67, 0x07},
42262306a36Sopenharmony_ci	{0x1, 0x31, 0x08},
42362306a36Sopenharmony_ci	{0x1, 0x00, 0x09},
42462306a36Sopenharmony_ci	{0x1, 0x00, 0x0A},
42562306a36Sopenharmony_ci	{0x1, 0x00, 0x0B},
42662306a36Sopenharmony_ci	{0x1, 0x14, 0x0C},
42762306a36Sopenharmony_ci	{0x1, 0x00, 0x0D},
42862306a36Sopenharmony_ci	{0x1, 0x00, 0x0E},
42962306a36Sopenharmony_ci	{0x1, 0x00, 0x0F},
43062306a36Sopenharmony_ci	{0x1, 0x1E, 0x10},
43162306a36Sopenharmony_ci	{0x1, 0x00, 0x11},
43262306a36Sopenharmony_ci	{0x1, 0x00, 0x12},
43362306a36Sopenharmony_ci	{0x1, 0x00, 0x13},
43462306a36Sopenharmony_ci	{0x1, 0x00, 0x14},
43562306a36Sopenharmony_ci	{0x1, 0xFF, 0x15},
43662306a36Sopenharmony_ci	{0x1, 0x01, 0x16},
43762306a36Sopenharmony_ci	{0x1, 0x32, 0x17},
43862306a36Sopenharmony_ci	{0x1, 0x23, 0x18},
43962306a36Sopenharmony_ci	{0x1, 0xCE, 0x19},
44062306a36Sopenharmony_ci	{0x1, 0x23, 0x1A},
44162306a36Sopenharmony_ci	{0x1, 0x32, 0x1B},
44262306a36Sopenharmony_ci	{0x1, 0x8D, 0x1C},
44362306a36Sopenharmony_ci	{0x1, 0xCE, 0x1D},
44462306a36Sopenharmony_ci	{0x1, 0x8D, 0x1E},
44562306a36Sopenharmony_ci	{0x1, 0x00, 0x1F},
44662306a36Sopenharmony_ci	{0x1, 0x00, 0x20},
44762306a36Sopenharmony_ci	{0x1, 0xFF, 0x3E},
44862306a36Sopenharmony_ci	{0x1, 0x02, 0x3F},
44962306a36Sopenharmony_ci	{0x1, 0x00, 0x40},
45062306a36Sopenharmony_ci	{0x1, 0x00, 0x41},
45162306a36Sopenharmony_ci	{0x1, 0x00, 0x42},
45262306a36Sopenharmony_ci	{0x1, 0x00, 0x43},
45362306a36Sopenharmony_ci	{0x1, 0x00, 0x44},
45462306a36Sopenharmony_ci	{0x1, 0x00, 0x45},
45562306a36Sopenharmony_ci	{0x1, 0x00, 0x46},
45662306a36Sopenharmony_ci	{0x1, 0x00, 0x47},
45762306a36Sopenharmony_ci	{0x1, 0x00, 0x48},
45862306a36Sopenharmony_ci	{0x1, 0x00, 0x49},
45962306a36Sopenharmony_ci	{0x1, 0x00, 0x4A},
46062306a36Sopenharmony_ci	{0x1, 0x00, 0x4B},
46162306a36Sopenharmony_ci	{0x1, 0x00, 0x4C},
46262306a36Sopenharmony_ci	{0x1, 0x00, 0x4D},
46362306a36Sopenharmony_ci	{0x1, 0x00, 0x4E},
46462306a36Sopenharmony_ci	{0x1, 0x00, 0x4F},
46562306a36Sopenharmony_ci	{0x1, 0x00, 0x50},
46662306a36Sopenharmony_ci	{0x1, 0x00, 0x51},
46762306a36Sopenharmony_ci	{0x1, 0x00, 0x52},
46862306a36Sopenharmony_ci	{0x1, 0x00, 0x53},
46962306a36Sopenharmony_ci	{0x1, 0x00, 0x54},
47062306a36Sopenharmony_ci	{0x1, 0x00, 0x55},
47162306a36Sopenharmony_ci	{0x1, 0x00, 0x56},
47262306a36Sopenharmony_ci	{0x1, 0x00, 0x57},
47362306a36Sopenharmony_ci	{0x1, 0x00, 0x58},
47462306a36Sopenharmony_ci	{0x1, 0x00, 0x59},
47562306a36Sopenharmony_ci	{0x1, 0x00, 0x5A},
47662306a36Sopenharmony_ci	{0x2, 0x03, 0x00},
47762306a36Sopenharmony_ci	{0x2, 0x00, 0x01},
47862306a36Sopenharmony_ci	{0x2, 0x00, 0x05},
47962306a36Sopenharmony_ci	{0x2, 0x00, 0x06},
48062306a36Sopenharmony_ci	{0x2, 0x00, 0x07},
48162306a36Sopenharmony_ci	{0x2, 0x00, 0x10},
48262306a36Sopenharmony_ci	{0x2, 0x00, 0x11},
48362306a36Sopenharmony_ci	/* Strange - looks like the 501 driver doesn't do anything
48462306a36Sopenharmony_ci	 * at insert time except read the EEPROM
48562306a36Sopenharmony_ci	 */
48662306a36Sopenharmony_ci	{}
48762306a36Sopenharmony_ci};
48862306a36Sopenharmony_ci
48962306a36Sopenharmony_ci/* Data for video camera init before capture.
49062306a36Sopenharmony_ci * Capture and decoding by Colin Peart.
49162306a36Sopenharmony_ci * This is for the 3com HomeConnect Lite which is spca501a based.
49262306a36Sopenharmony_ci */
49362306a36Sopenharmony_cistatic const __u16 spca501_3com_open_data[][3] = {
49462306a36Sopenharmony_ci	/* bmRequest,value,index */
49562306a36Sopenharmony_ci	{0x2, 0x0050, 0x0000},	/* C/S Enable TG soft reset, timing mode=010 */
49662306a36Sopenharmony_ci	{0x2, 0x0043, 0x0000},	/* C/S Disable TG soft reset, timing mode=010 */
49762306a36Sopenharmony_ci	{0x2, 0x0002, 0x0005},	/* C/S GPIO */
49862306a36Sopenharmony_ci	{0x2, 0x0003, 0x0005},	/* C/S GPIO */
49962306a36Sopenharmony_ci
50062306a36Sopenharmony_ci#ifdef CCDSP_SET
50162306a36Sopenharmony_ci	{0x1, 0x0020, 0x0001},	/* CCDSP Options */
50262306a36Sopenharmony_ci
50362306a36Sopenharmony_ci	{0x1, 0x0020, 0x0002},	/* CCDSP Black Level */
50462306a36Sopenharmony_ci	{0x1, 0x006e, 0x0007},	/* CCDSP Gamma options */
50562306a36Sopenharmony_ci	{0x1, 0x0090, 0x0015},	/* CCDSP Luminance Low */
50662306a36Sopenharmony_ci	{0x1, 0x00ff, 0x0016},	/* CCDSP Luminance High */
50762306a36Sopenharmony_ci	{0x1, 0x0003, 0x003F},	/* CCDSP Gamma correction toggle */
50862306a36Sopenharmony_ci
50962306a36Sopenharmony_ci#ifdef ALTER_GAMMA
51062306a36Sopenharmony_ci	{0x1, 0x0010, 0x0008},	/* CCDSP YUV A11 */
51162306a36Sopenharmony_ci	{0x1, 0x0000, 0x0009},	/* CCDSP YUV A12 */
51262306a36Sopenharmony_ci	{0x1, 0x0000, 0x000a},	/* CCDSP YUV A13 */
51362306a36Sopenharmony_ci	{0x1, 0x0000, 0x000b},	/* CCDSP YUV A21 */
51462306a36Sopenharmony_ci	{0x1, 0x0010, 0x000c},	/* CCDSP YUV A22 */
51562306a36Sopenharmony_ci	{0x1, 0x0000, 0x000d},	/* CCDSP YUV A23 */
51662306a36Sopenharmony_ci	{0x1, 0x0000, 0x000e},	/* CCDSP YUV A31 */
51762306a36Sopenharmony_ci	{0x1, 0x0000, 0x000f},	/* CCDSP YUV A32 */
51862306a36Sopenharmony_ci	{0x1, 0x0010, 0x0010},	/* CCDSP YUV A33 */
51962306a36Sopenharmony_ci	{0x1, 0x0000, 0x0011},	/* CCDSP R Offset */
52062306a36Sopenharmony_ci	{0x1, 0x0000, 0x0012},	/* CCDSP G Offset */
52162306a36Sopenharmony_ci	{0x1, 0x0001, 0x0013},	/* CCDSP B Offset */
52262306a36Sopenharmony_ci	{0x1, 0x0001, 0x0014},	/* CCDSP BG Offset */
52362306a36Sopenharmony_ci	{0x1, 0x003f, 0x00C1},	/* CCDSP Gamma Correction Enable */
52462306a36Sopenharmony_ci#endif
52562306a36Sopenharmony_ci#endif
52662306a36Sopenharmony_ci
52762306a36Sopenharmony_ci#ifdef TG_SET
52862306a36Sopenharmony_ci	{0x0, 0x00fc, 0x0000},	/* TG Shutter Speed High Bits */
52962306a36Sopenharmony_ci	{0x0, 0x0000, 0x0001},	/* TG Shutter Speed Low Bits */
53062306a36Sopenharmony_ci	{0x0, 0x00e4, 0x0004},	/* TG DCLK*2 Adjust */
53162306a36Sopenharmony_ci	{0x0, 0x0008, 0x0005},	/* TG ADCK Adjust */
53262306a36Sopenharmony_ci	{0x0, 0x0003, 0x0006},	/* TG FR Phase Adjust */
53362306a36Sopenharmony_ci	{0x0, 0x0001, 0x0007},	/* TG FCDS Phase Adjust */
53462306a36Sopenharmony_ci	{0x0, 0x0039, 0x0008},	/* TG FS Phase Adjust */
53562306a36Sopenharmony_ci	{0x0, 0x0088, 0x000a},	/* TG MH1 */
53662306a36Sopenharmony_ci	{0x0, 0x0003, 0x000f},	/* TG Pixel ID */
53762306a36Sopenharmony_ci
53862306a36Sopenharmony_ci	/* Like below, unexplained toglleing */
53962306a36Sopenharmony_ci	{0x0, 0x0080, 0x000c},
54062306a36Sopenharmony_ci	{0x0, 0x0000, 0x000d},
54162306a36Sopenharmony_ci	{0x0, 0x0080, 0x000c},
54262306a36Sopenharmony_ci	{0x0, 0x0004, 0x000d},
54362306a36Sopenharmony_ci	{0x0, 0x0000, 0x000c},
54462306a36Sopenharmony_ci	{0x0, 0x0000, 0x000d},
54562306a36Sopenharmony_ci	{0x0, 0x0040, 0x000c},
54662306a36Sopenharmony_ci	{0x0, 0x0017, 0x000d},
54762306a36Sopenharmony_ci	{0x0, 0x00c0, 0x000c},
54862306a36Sopenharmony_ci	{0x0, 0x0000, 0x000d},
54962306a36Sopenharmony_ci	{0x0, 0x0080, 0x000c},
55062306a36Sopenharmony_ci	{0x0, 0x0006, 0x000d},
55162306a36Sopenharmony_ci	{0x0, 0x0080, 0x000c},
55262306a36Sopenharmony_ci	{0x0, 0x0004, 0x000d},
55362306a36Sopenharmony_ci	{0x0, 0x0002, 0x0003},
55462306a36Sopenharmony_ci#endif
55562306a36Sopenharmony_ci
55662306a36Sopenharmony_ci#ifdef DSPWIN_SET
55762306a36Sopenharmony_ci	{0x1, 0x001c, 0x0017},	/* CCDSP W1 Start X */
55862306a36Sopenharmony_ci	{0x1, 0x00e2, 0x0019},	/* CCDSP W2 Start X */
55962306a36Sopenharmony_ci	{0x1, 0x001c, 0x001b},	/* CCDSP W3 Start X */
56062306a36Sopenharmony_ci	{0x1, 0x00e2, 0x001d},	/* CCDSP W4 Start X */
56162306a36Sopenharmony_ci	{0x1, 0x00aa, 0x001f},	/* CCDSP W5 Start X */
56262306a36Sopenharmony_ci	{0x1, 0x0070, 0x0020},	/* CCDSP W5 Start Y */
56362306a36Sopenharmony_ci#endif
56462306a36Sopenharmony_ci	{0x0, 0x0001, 0x0010},	/* TG Start Clock */
56562306a36Sopenharmony_ci
56662306a36Sopenharmony_ci/*	{0x2, 0x006a, 0x0001},	 * C/S Enable ISOSYNCH Packet Engine */
56762306a36Sopenharmony_ci	{0x2, 0x0068, 0x0001},	/* C/S Disable ISOSYNCH Packet Engine */
56862306a36Sopenharmony_ci	{0x2, 0x0000, 0x0005},
56962306a36Sopenharmony_ci	{0x2, 0x0043, 0x0000},	/* C/S Set Timing Mode, Disable TG soft reset */
57062306a36Sopenharmony_ci	{0x2, 0x0043, 0x0000},	/* C/S Set Timing Mode, Disable TG soft reset */
57162306a36Sopenharmony_ci	{0x2, 0x0002, 0x0005},	/* C/S GPIO */
57262306a36Sopenharmony_ci	{0x2, 0x0003, 0x0005},	/* C/S GPIO */
57362306a36Sopenharmony_ci
57462306a36Sopenharmony_ci	{0x2, 0x006a, 0x0001},	/* C/S Enable ISOSYNCH Packet Engine */
57562306a36Sopenharmony_ci	{}
57662306a36Sopenharmony_ci};
57762306a36Sopenharmony_ci
57862306a36Sopenharmony_ci/*
57962306a36Sopenharmony_ci * Data used to initialize a SPCA501C with HV7131B sensor.
58062306a36Sopenharmony_ci * From a capture file taken with USBSnoop v 1.5
58162306a36Sopenharmony_ci * I have a "SPCA501C pc camera chipset" manual by sunplus, but some
58262306a36Sopenharmony_ci * of the value meanings are obscure or simply "reserved".
58362306a36Sopenharmony_ci * to do list:
58462306a36Sopenharmony_ci * 1) Understand what every value means
58562306a36Sopenharmony_ci * 2) Understand why some values seem to appear more than once
58662306a36Sopenharmony_ci * 3) Write a small comment for each line of the following arrays.
58762306a36Sopenharmony_ci */
58862306a36Sopenharmony_cistatic const __u16 spca501c_arowana_open_data[][3] = {
58962306a36Sopenharmony_ci	/* bmRequest,value,index */
59062306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
59162306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
59262306a36Sopenharmony_ci	{0x05, 0x0022, 0x0004},
59362306a36Sopenharmony_ci	{0x01, 0x0006, 0x0011},
59462306a36Sopenharmony_ci	{0x01, 0x00ff, 0x0012},
59562306a36Sopenharmony_ci	{0x01, 0x0014, 0x0013},
59662306a36Sopenharmony_ci	{0x01, 0x0000, 0x0014},
59762306a36Sopenharmony_ci	{0x01, 0x0042, 0x0051},
59862306a36Sopenharmony_ci	{0x01, 0x0040, 0x0052},
59962306a36Sopenharmony_ci	{0x01, 0x0051, 0x0053},
60062306a36Sopenharmony_ci	{0x01, 0x0040, 0x0054},
60162306a36Sopenharmony_ci	{0x01, 0x0000, 0x0055},
60262306a36Sopenharmony_ci	{0x00, 0x0025, 0x0000},
60362306a36Sopenharmony_ci	{0x00, 0x0026, 0x0000},
60462306a36Sopenharmony_ci	{0x00, 0x0001, 0x0000},
60562306a36Sopenharmony_ci	{0x00, 0x0027, 0x0000},
60662306a36Sopenharmony_ci	{0x00, 0x008a, 0x0000},
60762306a36Sopenharmony_ci	{}
60862306a36Sopenharmony_ci};
60962306a36Sopenharmony_ci
61062306a36Sopenharmony_cistatic const __u16 spca501c_arowana_init_data[][3] = {
61162306a36Sopenharmony_ci	/* bmRequest,value,index */
61262306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
61362306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
61462306a36Sopenharmony_ci	{0x05, 0x0022, 0x0004},
61562306a36Sopenharmony_ci	{0x01, 0x0006, 0x0011},
61662306a36Sopenharmony_ci	{0x01, 0x00ff, 0x0012},
61762306a36Sopenharmony_ci	{0x01, 0x0014, 0x0013},
61862306a36Sopenharmony_ci	{0x01, 0x0000, 0x0014},
61962306a36Sopenharmony_ci	{0x01, 0x0042, 0x0051},
62062306a36Sopenharmony_ci	{0x01, 0x0040, 0x0052},
62162306a36Sopenharmony_ci	{0x01, 0x0051, 0x0053},
62262306a36Sopenharmony_ci	{0x01, 0x0040, 0x0054},
62362306a36Sopenharmony_ci	{0x01, 0x0000, 0x0055},
62462306a36Sopenharmony_ci	{0x00, 0x0025, 0x0000},
62562306a36Sopenharmony_ci	{0x00, 0x0026, 0x0000},
62662306a36Sopenharmony_ci	{0x00, 0x0001, 0x0000},
62762306a36Sopenharmony_ci	{0x00, 0x0027, 0x0000},
62862306a36Sopenharmony_ci	{0x00, 0x008a, 0x0000},
62962306a36Sopenharmony_ci	{0x02, 0x0000, 0x0005},
63062306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
63162306a36Sopenharmony_ci	{0x02, 0x2000, 0x0000},
63262306a36Sopenharmony_ci	{0x05, 0x0022, 0x0004},
63362306a36Sopenharmony_ci	{0x05, 0x0015, 0x0001},
63462306a36Sopenharmony_ci	{0x05, 0x00ea, 0x0000},
63562306a36Sopenharmony_ci	{0x05, 0x0021, 0x0001},
63662306a36Sopenharmony_ci	{0x05, 0x00d2, 0x0000},
63762306a36Sopenharmony_ci	{0x05, 0x0023, 0x0001},
63862306a36Sopenharmony_ci	{0x05, 0x0003, 0x0000},
63962306a36Sopenharmony_ci	{0x05, 0x0030, 0x0001},
64062306a36Sopenharmony_ci	{0x05, 0x002b, 0x0000},
64162306a36Sopenharmony_ci	{0x05, 0x0031, 0x0001},
64262306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
64362306a36Sopenharmony_ci	{0x05, 0x0032, 0x0001},
64462306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
64562306a36Sopenharmony_ci	{0x05, 0x0033, 0x0001},
64662306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
64762306a36Sopenharmony_ci	{0x05, 0x0034, 0x0001},
64862306a36Sopenharmony_ci	{0x05, 0x0002, 0x0000},
64962306a36Sopenharmony_ci	{0x05, 0x0050, 0x0001},
65062306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
65162306a36Sopenharmony_ci	{0x05, 0x0051, 0x0001},
65262306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
65362306a36Sopenharmony_ci	{0x05, 0x0052, 0x0001},
65462306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
65562306a36Sopenharmony_ci	{0x05, 0x0054, 0x0001},
65662306a36Sopenharmony_ci	{0x05, 0x0001, 0x0000},
65762306a36Sopenharmony_ci	{0x00, 0x0000, 0x0001},
65862306a36Sopenharmony_ci	{0x00, 0x0000, 0x0002},
65962306a36Sopenharmony_ci	{0x00, 0x000c, 0x0003},
66062306a36Sopenharmony_ci	{0x00, 0x0000, 0x0004},
66162306a36Sopenharmony_ci	{0x00, 0x0090, 0x0005},
66262306a36Sopenharmony_ci	{0x00, 0x0000, 0x0006},
66362306a36Sopenharmony_ci	{0x00, 0x0040, 0x0007},
66462306a36Sopenharmony_ci	{0x00, 0x00c0, 0x0008},
66562306a36Sopenharmony_ci	{0x00, 0x004a, 0x0009},
66662306a36Sopenharmony_ci	{0x00, 0x0000, 0x000a},
66762306a36Sopenharmony_ci	{0x00, 0x0000, 0x000b},
66862306a36Sopenharmony_ci	{0x00, 0x0001, 0x000c},
66962306a36Sopenharmony_ci	{0x00, 0x0001, 0x000d},
67062306a36Sopenharmony_ci	{0x00, 0x0000, 0x000e},
67162306a36Sopenharmony_ci	{0x00, 0x0002, 0x000f},
67262306a36Sopenharmony_ci	{0x00, 0x0001, 0x0010},
67362306a36Sopenharmony_ci	{0x00, 0x0000, 0x0011},
67462306a36Sopenharmony_ci	{0x00, 0x0000, 0x0012},
67562306a36Sopenharmony_ci	{0x00, 0x0002, 0x0020},
67662306a36Sopenharmony_ci	{0x00, 0x0080, 0x0021},
67762306a36Sopenharmony_ci	{0x00, 0x0001, 0x0022},
67862306a36Sopenharmony_ci	{0x00, 0x00e0, 0x0023},
67962306a36Sopenharmony_ci	{0x00, 0x0000, 0x0024},
68062306a36Sopenharmony_ci	{0x00, 0x00d5, 0x0025},
68162306a36Sopenharmony_ci	{0x00, 0x0000, 0x0026},
68262306a36Sopenharmony_ci	{0x00, 0x000b, 0x0027},
68362306a36Sopenharmony_ci	{0x00, 0x0000, 0x0046},
68462306a36Sopenharmony_ci	{0x00, 0x0000, 0x0047},
68562306a36Sopenharmony_ci	{0x00, 0x0000, 0x0048},
68662306a36Sopenharmony_ci	{0x00, 0x0000, 0x0049},
68762306a36Sopenharmony_ci	{0x00, 0x0008, 0x004a},
68862306a36Sopenharmony_ci	{0xff, 0x0000, 0x00d0},
68962306a36Sopenharmony_ci	{0xff, 0x00d8, 0x00d1},
69062306a36Sopenharmony_ci	{0xff, 0x0000, 0x00d4},
69162306a36Sopenharmony_ci	{0xff, 0x0000, 0x00d5},
69262306a36Sopenharmony_ci	{0x01, 0x00a6, 0x0000},
69362306a36Sopenharmony_ci	{0x01, 0x0028, 0x0001},
69462306a36Sopenharmony_ci	{0x01, 0x0000, 0x0002},
69562306a36Sopenharmony_ci	{0x01, 0x000a, 0x0003},
69662306a36Sopenharmony_ci	{0x01, 0x0040, 0x0004},
69762306a36Sopenharmony_ci	{0x01, 0x0066, 0x0007},
69862306a36Sopenharmony_ci	{0x01, 0x0011, 0x0008},
69962306a36Sopenharmony_ci	{0x01, 0x0032, 0x0009},
70062306a36Sopenharmony_ci	{0x01, 0x00fd, 0x000a},
70162306a36Sopenharmony_ci	{0x01, 0x0038, 0x000b},
70262306a36Sopenharmony_ci	{0x01, 0x00d1, 0x000c},
70362306a36Sopenharmony_ci	{0x01, 0x00f7, 0x000d},
70462306a36Sopenharmony_ci	{0x01, 0x00ed, 0x000e},
70562306a36Sopenharmony_ci	{0x01, 0x00d8, 0x000f},
70662306a36Sopenharmony_ci	{0x01, 0x0038, 0x0010},
70762306a36Sopenharmony_ci	{0x01, 0x00ff, 0x0015},
70862306a36Sopenharmony_ci	{0x01, 0x0001, 0x0016},
70962306a36Sopenharmony_ci	{0x01, 0x0032, 0x0017},
71062306a36Sopenharmony_ci	{0x01, 0x0023, 0x0018},
71162306a36Sopenharmony_ci	{0x01, 0x00ce, 0x0019},
71262306a36Sopenharmony_ci	{0x01, 0x0023, 0x001a},
71362306a36Sopenharmony_ci	{0x01, 0x0032, 0x001b},
71462306a36Sopenharmony_ci	{0x01, 0x008d, 0x001c},
71562306a36Sopenharmony_ci	{0x01, 0x00ce, 0x001d},
71662306a36Sopenharmony_ci	{0x01, 0x008d, 0x001e},
71762306a36Sopenharmony_ci	{0x01, 0x0000, 0x001f},
71862306a36Sopenharmony_ci	{0x01, 0x0000, 0x0020},
71962306a36Sopenharmony_ci	{0x01, 0x00ff, 0x003e},
72062306a36Sopenharmony_ci	{0x01, 0x0003, 0x003f},
72162306a36Sopenharmony_ci	{0x01, 0x0000, 0x0040},
72262306a36Sopenharmony_ci	{0x01, 0x0035, 0x0041},
72362306a36Sopenharmony_ci	{0x01, 0x0053, 0x0042},
72462306a36Sopenharmony_ci	{0x01, 0x0069, 0x0043},
72562306a36Sopenharmony_ci	{0x01, 0x007c, 0x0044},
72662306a36Sopenharmony_ci	{0x01, 0x008c, 0x0045},
72762306a36Sopenharmony_ci	{0x01, 0x009a, 0x0046},
72862306a36Sopenharmony_ci	{0x01, 0x00a8, 0x0047},
72962306a36Sopenharmony_ci	{0x01, 0x00b4, 0x0048},
73062306a36Sopenharmony_ci	{0x01, 0x00bf, 0x0049},
73162306a36Sopenharmony_ci	{0x01, 0x00ca, 0x004a},
73262306a36Sopenharmony_ci	{0x01, 0x00d4, 0x004b},
73362306a36Sopenharmony_ci	{0x01, 0x00dd, 0x004c},
73462306a36Sopenharmony_ci	{0x01, 0x00e7, 0x004d},
73562306a36Sopenharmony_ci	{0x01, 0x00ef, 0x004e},
73662306a36Sopenharmony_ci	{0x01, 0x00f8, 0x004f},
73762306a36Sopenharmony_ci	{0x01, 0x00ff, 0x0050},
73862306a36Sopenharmony_ci	{0x01, 0x0001, 0x0056},
73962306a36Sopenharmony_ci	{0x01, 0x0060, 0x0057},
74062306a36Sopenharmony_ci	{0x01, 0x0040, 0x0058},
74162306a36Sopenharmony_ci	{0x01, 0x0011, 0x0059},
74262306a36Sopenharmony_ci	{0x01, 0x0001, 0x005a},
74362306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
74462306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
74562306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
74662306a36Sopenharmony_ci	{0x02, 0x0015, 0x0006},
74762306a36Sopenharmony_ci	{0x02, 0x100a, 0x0007},
74862306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
74962306a36Sopenharmony_ci	{0x02, 0xc002, 0x0001},
75062306a36Sopenharmony_ci	{0x02, 0x000f, 0x0005},
75162306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
75262306a36Sopenharmony_ci	{0x05, 0x0022, 0x0004},
75362306a36Sopenharmony_ci	{0x05, 0x0025, 0x0001},
75462306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
75562306a36Sopenharmony_ci	{0x05, 0x0026, 0x0001},
75662306a36Sopenharmony_ci	{0x05, 0x0001, 0x0000},
75762306a36Sopenharmony_ci	{0x05, 0x0027, 0x0001},
75862306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
75962306a36Sopenharmony_ci	{0x05, 0x0001, 0x0001},
76062306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
76162306a36Sopenharmony_ci	{0x05, 0x0021, 0x0001},
76262306a36Sopenharmony_ci	{0x05, 0x00d2, 0x0000},
76362306a36Sopenharmony_ci	{0x05, 0x0020, 0x0001},
76462306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
76562306a36Sopenharmony_ci	{0x00, 0x0090, 0x0005},
76662306a36Sopenharmony_ci	{0x01, 0x00a6, 0x0000},
76762306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
76862306a36Sopenharmony_ci	{0x02, 0x2000, 0x0000},
76962306a36Sopenharmony_ci	{0x05, 0x0022, 0x0004},
77062306a36Sopenharmony_ci	{0x05, 0x0015, 0x0001},
77162306a36Sopenharmony_ci	{0x05, 0x00ea, 0x0000},
77262306a36Sopenharmony_ci	{0x05, 0x0021, 0x0001},
77362306a36Sopenharmony_ci	{0x05, 0x00d2, 0x0000},
77462306a36Sopenharmony_ci	{0x05, 0x0023, 0x0001},
77562306a36Sopenharmony_ci	{0x05, 0x0003, 0x0000},
77662306a36Sopenharmony_ci	{0x05, 0x0030, 0x0001},
77762306a36Sopenharmony_ci	{0x05, 0x002b, 0x0000},
77862306a36Sopenharmony_ci	{0x05, 0x0031, 0x0001},
77962306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
78062306a36Sopenharmony_ci	{0x05, 0x0032, 0x0001},
78162306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
78262306a36Sopenharmony_ci	{0x05, 0x0033, 0x0001},
78362306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
78462306a36Sopenharmony_ci	{0x05, 0x0034, 0x0001},
78562306a36Sopenharmony_ci	{0x05, 0x0002, 0x0000},
78662306a36Sopenharmony_ci	{0x05, 0x0050, 0x0001},
78762306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
78862306a36Sopenharmony_ci	{0x05, 0x0051, 0x0001},
78962306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
79062306a36Sopenharmony_ci	{0x05, 0x0052, 0x0001},
79162306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
79262306a36Sopenharmony_ci	{0x05, 0x0054, 0x0001},
79362306a36Sopenharmony_ci	{0x05, 0x0001, 0x0000},
79462306a36Sopenharmony_ci	{0x00, 0x0000, 0x0001},
79562306a36Sopenharmony_ci	{0x00, 0x0000, 0x0002},
79662306a36Sopenharmony_ci	{0x00, 0x000c, 0x0003},
79762306a36Sopenharmony_ci	{0x00, 0x0000, 0x0004},
79862306a36Sopenharmony_ci	{0x00, 0x0090, 0x0005},
79962306a36Sopenharmony_ci	{0x00, 0x0000, 0x0006},
80062306a36Sopenharmony_ci	{0x00, 0x0040, 0x0007},
80162306a36Sopenharmony_ci	{0x00, 0x00c0, 0x0008},
80262306a36Sopenharmony_ci	{0x00, 0x004a, 0x0009},
80362306a36Sopenharmony_ci	{0x00, 0x0000, 0x000a},
80462306a36Sopenharmony_ci	{0x00, 0x0000, 0x000b},
80562306a36Sopenharmony_ci	{0x00, 0x0001, 0x000c},
80662306a36Sopenharmony_ci	{0x00, 0x0001, 0x000d},
80762306a36Sopenharmony_ci	{0x00, 0x0000, 0x000e},
80862306a36Sopenharmony_ci	{0x00, 0x0002, 0x000f},
80962306a36Sopenharmony_ci	{0x00, 0x0001, 0x0010},
81062306a36Sopenharmony_ci	{0x00, 0x0000, 0x0011},
81162306a36Sopenharmony_ci	{0x00, 0x0000, 0x0012},
81262306a36Sopenharmony_ci	{0x00, 0x0002, 0x0020},
81362306a36Sopenharmony_ci	{0x00, 0x0080, 0x0021},
81462306a36Sopenharmony_ci	{0x00, 0x0001, 0x0022},
81562306a36Sopenharmony_ci	{0x00, 0x00e0, 0x0023},
81662306a36Sopenharmony_ci	{0x00, 0x0000, 0x0024},
81762306a36Sopenharmony_ci	{0x00, 0x00d5, 0x0025},
81862306a36Sopenharmony_ci	{0x00, 0x0000, 0x0026},
81962306a36Sopenharmony_ci	{0x00, 0x000b, 0x0027},
82062306a36Sopenharmony_ci	{0x00, 0x0000, 0x0046},
82162306a36Sopenharmony_ci	{0x00, 0x0000, 0x0047},
82262306a36Sopenharmony_ci	{0x00, 0x0000, 0x0048},
82362306a36Sopenharmony_ci	{0x00, 0x0000, 0x0049},
82462306a36Sopenharmony_ci	{0x00, 0x0008, 0x004a},
82562306a36Sopenharmony_ci	{0xff, 0x0000, 0x00d0},
82662306a36Sopenharmony_ci	{0xff, 0x00d8, 0x00d1},
82762306a36Sopenharmony_ci	{0xff, 0x0000, 0x00d4},
82862306a36Sopenharmony_ci	{0xff, 0x0000, 0x00d5},
82962306a36Sopenharmony_ci	{0x01, 0x00a6, 0x0000},
83062306a36Sopenharmony_ci	{0x01, 0x0028, 0x0001},
83162306a36Sopenharmony_ci	{0x01, 0x0000, 0x0002},
83262306a36Sopenharmony_ci	{0x01, 0x000a, 0x0003},
83362306a36Sopenharmony_ci	{0x01, 0x0040, 0x0004},
83462306a36Sopenharmony_ci	{0x01, 0x0066, 0x0007},
83562306a36Sopenharmony_ci	{0x01, 0x0011, 0x0008},
83662306a36Sopenharmony_ci	{0x01, 0x0032, 0x0009},
83762306a36Sopenharmony_ci	{0x01, 0x00fd, 0x000a},
83862306a36Sopenharmony_ci	{0x01, 0x0038, 0x000b},
83962306a36Sopenharmony_ci	{0x01, 0x00d1, 0x000c},
84062306a36Sopenharmony_ci	{0x01, 0x00f7, 0x000d},
84162306a36Sopenharmony_ci	{0x01, 0x00ed, 0x000e},
84262306a36Sopenharmony_ci	{0x01, 0x00d8, 0x000f},
84362306a36Sopenharmony_ci	{0x01, 0x0038, 0x0010},
84462306a36Sopenharmony_ci	{0x01, 0x00ff, 0x0015},
84562306a36Sopenharmony_ci	{0x01, 0x0001, 0x0016},
84662306a36Sopenharmony_ci	{0x01, 0x0032, 0x0017},
84762306a36Sopenharmony_ci	{0x01, 0x0023, 0x0018},
84862306a36Sopenharmony_ci	{0x01, 0x00ce, 0x0019},
84962306a36Sopenharmony_ci	{0x01, 0x0023, 0x001a},
85062306a36Sopenharmony_ci	{0x01, 0x0032, 0x001b},
85162306a36Sopenharmony_ci	{0x01, 0x008d, 0x001c},
85262306a36Sopenharmony_ci	{0x01, 0x00ce, 0x001d},
85362306a36Sopenharmony_ci	{0x01, 0x008d, 0x001e},
85462306a36Sopenharmony_ci	{0x01, 0x0000, 0x001f},
85562306a36Sopenharmony_ci	{0x01, 0x0000, 0x0020},
85662306a36Sopenharmony_ci	{0x01, 0x00ff, 0x003e},
85762306a36Sopenharmony_ci	{0x01, 0x0003, 0x003f},
85862306a36Sopenharmony_ci	{0x01, 0x0000, 0x0040},
85962306a36Sopenharmony_ci	{0x01, 0x0035, 0x0041},
86062306a36Sopenharmony_ci	{0x01, 0x0053, 0x0042},
86162306a36Sopenharmony_ci	{0x01, 0x0069, 0x0043},
86262306a36Sopenharmony_ci	{0x01, 0x007c, 0x0044},
86362306a36Sopenharmony_ci	{0x01, 0x008c, 0x0045},
86462306a36Sopenharmony_ci	{0x01, 0x009a, 0x0046},
86562306a36Sopenharmony_ci	{0x01, 0x00a8, 0x0047},
86662306a36Sopenharmony_ci	{0x01, 0x00b4, 0x0048},
86762306a36Sopenharmony_ci	{0x01, 0x00bf, 0x0049},
86862306a36Sopenharmony_ci	{0x01, 0x00ca, 0x004a},
86962306a36Sopenharmony_ci	{0x01, 0x00d4, 0x004b},
87062306a36Sopenharmony_ci	{0x01, 0x00dd, 0x004c},
87162306a36Sopenharmony_ci	{0x01, 0x00e7, 0x004d},
87262306a36Sopenharmony_ci	{0x01, 0x00ef, 0x004e},
87362306a36Sopenharmony_ci	{0x01, 0x00f8, 0x004f},
87462306a36Sopenharmony_ci	{0x01, 0x00ff, 0x0050},
87562306a36Sopenharmony_ci	{0x01, 0x0001, 0x0056},
87662306a36Sopenharmony_ci	{0x01, 0x0060, 0x0057},
87762306a36Sopenharmony_ci	{0x01, 0x0040, 0x0058},
87862306a36Sopenharmony_ci	{0x01, 0x0011, 0x0059},
87962306a36Sopenharmony_ci	{0x01, 0x0001, 0x005a},
88062306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
88162306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
88262306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
88362306a36Sopenharmony_ci	{0x02, 0x0015, 0x0006},
88462306a36Sopenharmony_ci	{0x02, 0x100a, 0x0007},
88562306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
88662306a36Sopenharmony_ci	{0x02, 0xc002, 0x0001},
88762306a36Sopenharmony_ci	{0x02, 0x000f, 0x0005},
88862306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
88962306a36Sopenharmony_ci	{0x05, 0x0022, 0x0004},
89062306a36Sopenharmony_ci	{0x05, 0x0025, 0x0001},
89162306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
89262306a36Sopenharmony_ci	{0x05, 0x0026, 0x0001},
89362306a36Sopenharmony_ci	{0x05, 0x0001, 0x0000},
89462306a36Sopenharmony_ci	{0x05, 0x0027, 0x0001},
89562306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
89662306a36Sopenharmony_ci	{0x05, 0x0001, 0x0001},
89762306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
89862306a36Sopenharmony_ci	{0x05, 0x0021, 0x0001},
89962306a36Sopenharmony_ci	{0x05, 0x00d2, 0x0000},
90062306a36Sopenharmony_ci	{0x05, 0x0020, 0x0001},
90162306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
90262306a36Sopenharmony_ci	{0x00, 0x0090, 0x0005},
90362306a36Sopenharmony_ci	{0x01, 0x00a6, 0x0000},
90462306a36Sopenharmony_ci	{0x01, 0x0003, 0x003f},
90562306a36Sopenharmony_ci	{0x01, 0x0001, 0x0056},
90662306a36Sopenharmony_ci	{0x01, 0x0011, 0x0008},
90762306a36Sopenharmony_ci	{0x01, 0x0032, 0x0009},
90862306a36Sopenharmony_ci	{0x01, 0xfffd, 0x000a},
90962306a36Sopenharmony_ci	{0x01, 0x0023, 0x000b},
91062306a36Sopenharmony_ci	{0x01, 0xffea, 0x000c},
91162306a36Sopenharmony_ci	{0x01, 0xfff4, 0x000d},
91262306a36Sopenharmony_ci	{0x01, 0xfffc, 0x000e},
91362306a36Sopenharmony_ci	{0x01, 0xffe3, 0x000f},
91462306a36Sopenharmony_ci	{0x01, 0x001f, 0x0010},
91562306a36Sopenharmony_ci	{0x01, 0x00a8, 0x0001},
91662306a36Sopenharmony_ci	{0x01, 0x0067, 0x0007},
91762306a36Sopenharmony_ci	{0x01, 0x0032, 0x0017},
91862306a36Sopenharmony_ci	{0x01, 0x0023, 0x0018},
91962306a36Sopenharmony_ci	{0x01, 0x00ce, 0x0019},
92062306a36Sopenharmony_ci	{0x01, 0x0023, 0x001a},
92162306a36Sopenharmony_ci	{0x01, 0x0032, 0x001b},
92262306a36Sopenharmony_ci	{0x01, 0x008d, 0x001c},
92362306a36Sopenharmony_ci	{0x01, 0x00ce, 0x001d},
92462306a36Sopenharmony_ci	{0x01, 0x008d, 0x001e},
92562306a36Sopenharmony_ci	{0x01, 0x00c8, 0x0015},
92662306a36Sopenharmony_ci	{0x01, 0x0032, 0x0016},
92762306a36Sopenharmony_ci	{0x01, 0x0000, 0x0011},
92862306a36Sopenharmony_ci	{0x01, 0x0000, 0x0012},
92962306a36Sopenharmony_ci	{0x01, 0x0000, 0x0013},
93062306a36Sopenharmony_ci	{0x01, 0x000a, 0x0003},
93162306a36Sopenharmony_ci	{0x02, 0xc002, 0x0001},
93262306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
93362306a36Sopenharmony_ci	{0x02, 0xc000, 0x0001},
93462306a36Sopenharmony_ci	{0x02, 0x0000, 0x0005},
93562306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
93662306a36Sopenharmony_ci	{0x02, 0x2000, 0x0000},
93762306a36Sopenharmony_ci	{0x05, 0x0022, 0x0004},
93862306a36Sopenharmony_ci	{0x05, 0x0015, 0x0001},
93962306a36Sopenharmony_ci	{0x05, 0x00ea, 0x0000},
94062306a36Sopenharmony_ci	{0x05, 0x0021, 0x0001},
94162306a36Sopenharmony_ci	{0x05, 0x00d2, 0x0000},
94262306a36Sopenharmony_ci	{0x05, 0x0023, 0x0001},
94362306a36Sopenharmony_ci	{0x05, 0x0003, 0x0000},
94462306a36Sopenharmony_ci	{0x05, 0x0030, 0x0001},
94562306a36Sopenharmony_ci	{0x05, 0x002b, 0x0000},
94662306a36Sopenharmony_ci	{0x05, 0x0031, 0x0001},
94762306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
94862306a36Sopenharmony_ci	{0x05, 0x0032, 0x0001},
94962306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
95062306a36Sopenharmony_ci	{0x05, 0x0033, 0x0001},
95162306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
95262306a36Sopenharmony_ci	{0x05, 0x0034, 0x0001},
95362306a36Sopenharmony_ci	{0x05, 0x0002, 0x0000},
95462306a36Sopenharmony_ci	{0x05, 0x0050, 0x0001},
95562306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
95662306a36Sopenharmony_ci	{0x05, 0x0051, 0x0001},
95762306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
95862306a36Sopenharmony_ci	{0x05, 0x0052, 0x0001},
95962306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
96062306a36Sopenharmony_ci	{0x05, 0x0054, 0x0001},
96162306a36Sopenharmony_ci	{0x05, 0x0001, 0x0000},
96262306a36Sopenharmony_ci	{0x00, 0x0000, 0x0001},
96362306a36Sopenharmony_ci	{0x00, 0x0000, 0x0002},
96462306a36Sopenharmony_ci	{0x00, 0x000c, 0x0003},
96562306a36Sopenharmony_ci	{0x00, 0x0000, 0x0004},
96662306a36Sopenharmony_ci	{0x00, 0x0090, 0x0005},
96762306a36Sopenharmony_ci	{0x00, 0x0000, 0x0006},
96862306a36Sopenharmony_ci	{0x00, 0x0040, 0x0007},
96962306a36Sopenharmony_ci	{0x00, 0x00c0, 0x0008},
97062306a36Sopenharmony_ci	{0x00, 0x004a, 0x0009},
97162306a36Sopenharmony_ci	{0x00, 0x0000, 0x000a},
97262306a36Sopenharmony_ci	{0x00, 0x0000, 0x000b},
97362306a36Sopenharmony_ci	{0x00, 0x0001, 0x000c},
97462306a36Sopenharmony_ci	{0x00, 0x0001, 0x000d},
97562306a36Sopenharmony_ci	{0x00, 0x0000, 0x000e},
97662306a36Sopenharmony_ci	{0x00, 0x0002, 0x000f},
97762306a36Sopenharmony_ci	{0x00, 0x0001, 0x0010},
97862306a36Sopenharmony_ci	{0x00, 0x0000, 0x0011},
97962306a36Sopenharmony_ci	{0x00, 0x0000, 0x0012},
98062306a36Sopenharmony_ci	{0x00, 0x0002, 0x0020},
98162306a36Sopenharmony_ci	{0x00, 0x0080, 0x0021},
98262306a36Sopenharmony_ci	{0x00, 0x0001, 0x0022},
98362306a36Sopenharmony_ci	{0x00, 0x00e0, 0x0023},
98462306a36Sopenharmony_ci	{0x00, 0x0000, 0x0024},
98562306a36Sopenharmony_ci	{0x00, 0x00d5, 0x0025},
98662306a36Sopenharmony_ci	{0x00, 0x0000, 0x0026},
98762306a36Sopenharmony_ci	{0x00, 0x000b, 0x0027},
98862306a36Sopenharmony_ci	{0x00, 0x0000, 0x0046},
98962306a36Sopenharmony_ci	{0x00, 0x0000, 0x0047},
99062306a36Sopenharmony_ci	{0x00, 0x0000, 0x0048},
99162306a36Sopenharmony_ci	{0x00, 0x0000, 0x0049},
99262306a36Sopenharmony_ci	{0x00, 0x0008, 0x004a},
99362306a36Sopenharmony_ci	{0xff, 0x0000, 0x00d0},
99462306a36Sopenharmony_ci	{0xff, 0x00d8, 0x00d1},
99562306a36Sopenharmony_ci	{0xff, 0x0000, 0x00d4},
99662306a36Sopenharmony_ci	{0xff, 0x0000, 0x00d5},
99762306a36Sopenharmony_ci	{0x01, 0x00a6, 0x0000},
99862306a36Sopenharmony_ci	{0x01, 0x0028, 0x0001},
99962306a36Sopenharmony_ci	{0x01, 0x0000, 0x0002},
100062306a36Sopenharmony_ci	{0x01, 0x000a, 0x0003},
100162306a36Sopenharmony_ci	{0x01, 0x0040, 0x0004},
100262306a36Sopenharmony_ci	{0x01, 0x0066, 0x0007},
100362306a36Sopenharmony_ci	{0x01, 0x0011, 0x0008},
100462306a36Sopenharmony_ci	{0x01, 0x0032, 0x0009},
100562306a36Sopenharmony_ci	{0x01, 0x00fd, 0x000a},
100662306a36Sopenharmony_ci	{0x01, 0x0038, 0x000b},
100762306a36Sopenharmony_ci	{0x01, 0x00d1, 0x000c},
100862306a36Sopenharmony_ci	{0x01, 0x00f7, 0x000d},
100962306a36Sopenharmony_ci	{0x01, 0x00ed, 0x000e},
101062306a36Sopenharmony_ci	{0x01, 0x00d8, 0x000f},
101162306a36Sopenharmony_ci	{0x01, 0x0038, 0x0010},
101262306a36Sopenharmony_ci	{0x01, 0x00ff, 0x0015},
101362306a36Sopenharmony_ci	{0x01, 0x0001, 0x0016},
101462306a36Sopenharmony_ci	{0x01, 0x0032, 0x0017},
101562306a36Sopenharmony_ci	{0x01, 0x0023, 0x0018},
101662306a36Sopenharmony_ci	{0x01, 0x00ce, 0x0019},
101762306a36Sopenharmony_ci	{0x01, 0x0023, 0x001a},
101862306a36Sopenharmony_ci	{0x01, 0x0032, 0x001b},
101962306a36Sopenharmony_ci	{0x01, 0x008d, 0x001c},
102062306a36Sopenharmony_ci	{0x01, 0x00ce, 0x001d},
102162306a36Sopenharmony_ci	{0x01, 0x008d, 0x001e},
102262306a36Sopenharmony_ci	{0x01, 0x0000, 0x001f},
102362306a36Sopenharmony_ci	{0x01, 0x0000, 0x0020},
102462306a36Sopenharmony_ci	{0x01, 0x00ff, 0x003e},
102562306a36Sopenharmony_ci	{0x01, 0x0003, 0x003f},
102662306a36Sopenharmony_ci	{0x01, 0x0000, 0x0040},
102762306a36Sopenharmony_ci	{0x01, 0x0035, 0x0041},
102862306a36Sopenharmony_ci	{0x01, 0x0053, 0x0042},
102962306a36Sopenharmony_ci	{0x01, 0x0069, 0x0043},
103062306a36Sopenharmony_ci	{0x01, 0x007c, 0x0044},
103162306a36Sopenharmony_ci	{0x01, 0x008c, 0x0045},
103262306a36Sopenharmony_ci	{0x01, 0x009a, 0x0046},
103362306a36Sopenharmony_ci	{0x01, 0x00a8, 0x0047},
103462306a36Sopenharmony_ci	{0x01, 0x00b4, 0x0048},
103562306a36Sopenharmony_ci	{0x01, 0x00bf, 0x0049},
103662306a36Sopenharmony_ci	{0x01, 0x00ca, 0x004a},
103762306a36Sopenharmony_ci	{0x01, 0x00d4, 0x004b},
103862306a36Sopenharmony_ci	{0x01, 0x00dd, 0x004c},
103962306a36Sopenharmony_ci	{0x01, 0x00e7, 0x004d},
104062306a36Sopenharmony_ci	{0x01, 0x00ef, 0x004e},
104162306a36Sopenharmony_ci	{0x01, 0x00f8, 0x004f},
104262306a36Sopenharmony_ci	{0x01, 0x00ff, 0x0050},
104362306a36Sopenharmony_ci	{0x01, 0x0001, 0x0056},
104462306a36Sopenharmony_ci	{0x01, 0x0060, 0x0057},
104562306a36Sopenharmony_ci	{0x01, 0x0040, 0x0058},
104662306a36Sopenharmony_ci	{0x01, 0x0011, 0x0059},
104762306a36Sopenharmony_ci	{0x01, 0x0001, 0x005a},
104862306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
104962306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
105062306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
105162306a36Sopenharmony_ci	{0x02, 0x0015, 0x0006},
105262306a36Sopenharmony_ci	{0x02, 0x100a, 0x0007},
105362306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
105462306a36Sopenharmony_ci	{0x02, 0xc002, 0x0001},
105562306a36Sopenharmony_ci	{0x02, 0x000f, 0x0005},
105662306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
105762306a36Sopenharmony_ci	{0x05, 0x0022, 0x0004},
105862306a36Sopenharmony_ci	{0x05, 0x0025, 0x0001},
105962306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
106062306a36Sopenharmony_ci	{0x05, 0x0026, 0x0001},
106162306a36Sopenharmony_ci	{0x05, 0x0001, 0x0000},
106262306a36Sopenharmony_ci	{0x05, 0x0027, 0x0001},
106362306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
106462306a36Sopenharmony_ci	{0x05, 0x0001, 0x0001},
106562306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
106662306a36Sopenharmony_ci	{0x05, 0x0021, 0x0001},
106762306a36Sopenharmony_ci	{0x05, 0x00d2, 0x0000},
106862306a36Sopenharmony_ci	{0x05, 0x0020, 0x0001},
106962306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
107062306a36Sopenharmony_ci	{0x00, 0x0090, 0x0005},
107162306a36Sopenharmony_ci	{0x01, 0x00a6, 0x0000},
107262306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
107362306a36Sopenharmony_ci	{0x02, 0x2000, 0x0000},
107462306a36Sopenharmony_ci	{0x05, 0x0022, 0x0004},
107562306a36Sopenharmony_ci	{0x05, 0x0015, 0x0001},
107662306a36Sopenharmony_ci	{0x05, 0x00ea, 0x0000},
107762306a36Sopenharmony_ci	{0x05, 0x0021, 0x0001},
107862306a36Sopenharmony_ci	{0x05, 0x00d2, 0x0000},
107962306a36Sopenharmony_ci	{0x05, 0x0023, 0x0001},
108062306a36Sopenharmony_ci	{0x05, 0x0003, 0x0000},
108162306a36Sopenharmony_ci	{0x05, 0x0030, 0x0001},
108262306a36Sopenharmony_ci	{0x05, 0x002b, 0x0000},
108362306a36Sopenharmony_ci	{0x05, 0x0031, 0x0001},
108462306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
108562306a36Sopenharmony_ci	{0x05, 0x0032, 0x0001},
108662306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
108762306a36Sopenharmony_ci	{0x05, 0x0033, 0x0001},
108862306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
108962306a36Sopenharmony_ci	{0x05, 0x0034, 0x0001},
109062306a36Sopenharmony_ci	{0x05, 0x0002, 0x0000},
109162306a36Sopenharmony_ci	{0x05, 0x0050, 0x0001},
109262306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
109362306a36Sopenharmony_ci	{0x05, 0x0051, 0x0001},
109462306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
109562306a36Sopenharmony_ci	{0x05, 0x0052, 0x0001},
109662306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
109762306a36Sopenharmony_ci	{0x05, 0x0054, 0x0001},
109862306a36Sopenharmony_ci	{0x05, 0x0001, 0x0000},
109962306a36Sopenharmony_ci	{0x00, 0x0000, 0x0001},
110062306a36Sopenharmony_ci	{0x00, 0x0000, 0x0002},
110162306a36Sopenharmony_ci	{0x00, 0x000c, 0x0003},
110262306a36Sopenharmony_ci	{0x00, 0x0000, 0x0004},
110362306a36Sopenharmony_ci	{0x00, 0x0090, 0x0005},
110462306a36Sopenharmony_ci	{0x00, 0x0000, 0x0006},
110562306a36Sopenharmony_ci	{0x00, 0x0040, 0x0007},
110662306a36Sopenharmony_ci	{0x00, 0x00c0, 0x0008},
110762306a36Sopenharmony_ci	{0x00, 0x004a, 0x0009},
110862306a36Sopenharmony_ci	{0x00, 0x0000, 0x000a},
110962306a36Sopenharmony_ci	{0x00, 0x0000, 0x000b},
111062306a36Sopenharmony_ci	{0x00, 0x0001, 0x000c},
111162306a36Sopenharmony_ci	{0x00, 0x0001, 0x000d},
111262306a36Sopenharmony_ci	{0x00, 0x0000, 0x000e},
111362306a36Sopenharmony_ci	{0x00, 0x0002, 0x000f},
111462306a36Sopenharmony_ci	{0x00, 0x0001, 0x0010},
111562306a36Sopenharmony_ci	{0x00, 0x0000, 0x0011},
111662306a36Sopenharmony_ci	{0x00, 0x0000, 0x0012},
111762306a36Sopenharmony_ci	{0x00, 0x0002, 0x0020},
111862306a36Sopenharmony_ci	{0x00, 0x0080, 0x0021},
111962306a36Sopenharmony_ci	{0x00, 0x0001, 0x0022},
112062306a36Sopenharmony_ci	{0x00, 0x00e0, 0x0023},
112162306a36Sopenharmony_ci	{0x00, 0x0000, 0x0024},
112262306a36Sopenharmony_ci	{0x00, 0x00d5, 0x0025},
112362306a36Sopenharmony_ci	{0x00, 0x0000, 0x0026},
112462306a36Sopenharmony_ci	{0x00, 0x000b, 0x0027},
112562306a36Sopenharmony_ci	{0x00, 0x0000, 0x0046},
112662306a36Sopenharmony_ci	{0x00, 0x0000, 0x0047},
112762306a36Sopenharmony_ci	{0x00, 0x0000, 0x0048},
112862306a36Sopenharmony_ci	{0x00, 0x0000, 0x0049},
112962306a36Sopenharmony_ci	{0x00, 0x0008, 0x004a},
113062306a36Sopenharmony_ci	{0xff, 0x0000, 0x00d0},
113162306a36Sopenharmony_ci	{0xff, 0x00d8, 0x00d1},
113262306a36Sopenharmony_ci	{0xff, 0x0000, 0x00d4},
113362306a36Sopenharmony_ci	{0xff, 0x0000, 0x00d5},
113462306a36Sopenharmony_ci	{0x01, 0x00a6, 0x0000},
113562306a36Sopenharmony_ci	{0x01, 0x0028, 0x0001},
113662306a36Sopenharmony_ci	{0x01, 0x0000, 0x0002},
113762306a36Sopenharmony_ci	{0x01, 0x000a, 0x0003},
113862306a36Sopenharmony_ci	{0x01, 0x0040, 0x0004},
113962306a36Sopenharmony_ci	{0x01, 0x0066, 0x0007},
114062306a36Sopenharmony_ci	{0x01, 0x0011, 0x0008},
114162306a36Sopenharmony_ci	{0x01, 0x0032, 0x0009},
114262306a36Sopenharmony_ci	{0x01, 0x00fd, 0x000a},
114362306a36Sopenharmony_ci	{0x01, 0x0038, 0x000b},
114462306a36Sopenharmony_ci	{0x01, 0x00d1, 0x000c},
114562306a36Sopenharmony_ci	{0x01, 0x00f7, 0x000d},
114662306a36Sopenharmony_ci	{0x01, 0x00ed, 0x000e},
114762306a36Sopenharmony_ci	{0x01, 0x00d8, 0x000f},
114862306a36Sopenharmony_ci	{0x01, 0x0038, 0x0010},
114962306a36Sopenharmony_ci	{0x01, 0x00ff, 0x0015},
115062306a36Sopenharmony_ci	{0x01, 0x0001, 0x0016},
115162306a36Sopenharmony_ci	{0x01, 0x0032, 0x0017},
115262306a36Sopenharmony_ci	{0x01, 0x0023, 0x0018},
115362306a36Sopenharmony_ci	{0x01, 0x00ce, 0x0019},
115462306a36Sopenharmony_ci	{0x01, 0x0023, 0x001a},
115562306a36Sopenharmony_ci	{0x01, 0x0032, 0x001b},
115662306a36Sopenharmony_ci	{0x01, 0x008d, 0x001c},
115762306a36Sopenharmony_ci	{0x01, 0x00ce, 0x001d},
115862306a36Sopenharmony_ci	{0x01, 0x008d, 0x001e},
115962306a36Sopenharmony_ci	{0x01, 0x0000, 0x001f},
116062306a36Sopenharmony_ci	{0x01, 0x0000, 0x0020},
116162306a36Sopenharmony_ci	{0x01, 0x00ff, 0x003e},
116262306a36Sopenharmony_ci	{0x01, 0x0003, 0x003f},
116362306a36Sopenharmony_ci	{0x01, 0x0000, 0x0040},
116462306a36Sopenharmony_ci	{0x01, 0x0035, 0x0041},
116562306a36Sopenharmony_ci	{0x01, 0x0053, 0x0042},
116662306a36Sopenharmony_ci	{0x01, 0x0069, 0x0043},
116762306a36Sopenharmony_ci	{0x01, 0x007c, 0x0044},
116862306a36Sopenharmony_ci	{0x01, 0x008c, 0x0045},
116962306a36Sopenharmony_ci	{0x01, 0x009a, 0x0046},
117062306a36Sopenharmony_ci	{0x01, 0x00a8, 0x0047},
117162306a36Sopenharmony_ci	{0x01, 0x00b4, 0x0048},
117262306a36Sopenharmony_ci	{0x01, 0x00bf, 0x0049},
117362306a36Sopenharmony_ci	{0x01, 0x00ca, 0x004a},
117462306a36Sopenharmony_ci	{0x01, 0x00d4, 0x004b},
117562306a36Sopenharmony_ci	{0x01, 0x00dd, 0x004c},
117662306a36Sopenharmony_ci	{0x01, 0x00e7, 0x004d},
117762306a36Sopenharmony_ci	{0x01, 0x00ef, 0x004e},
117862306a36Sopenharmony_ci	{0x01, 0x00f8, 0x004f},
117962306a36Sopenharmony_ci	{0x01, 0x00ff, 0x0050},
118062306a36Sopenharmony_ci	{0x01, 0x0001, 0x0056},
118162306a36Sopenharmony_ci	{0x01, 0x0060, 0x0057},
118262306a36Sopenharmony_ci	{0x01, 0x0040, 0x0058},
118362306a36Sopenharmony_ci	{0x01, 0x0011, 0x0059},
118462306a36Sopenharmony_ci	{0x01, 0x0001, 0x005a},
118562306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
118662306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
118762306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
118862306a36Sopenharmony_ci	{0x02, 0x0015, 0x0006},
118962306a36Sopenharmony_ci	{0x02, 0x100a, 0x0007},
119062306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
119162306a36Sopenharmony_ci	{0x02, 0xc002, 0x0001},
119262306a36Sopenharmony_ci	{0x02, 0x000f, 0x0005},
119362306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
119462306a36Sopenharmony_ci	{0x05, 0x0022, 0x0004},
119562306a36Sopenharmony_ci	{0x05, 0x0025, 0x0001},
119662306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
119762306a36Sopenharmony_ci	{0x05, 0x0026, 0x0001},
119862306a36Sopenharmony_ci	{0x05, 0x0001, 0x0000},
119962306a36Sopenharmony_ci	{0x05, 0x0027, 0x0001},
120062306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
120162306a36Sopenharmony_ci	{0x05, 0x0001, 0x0001},
120262306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
120362306a36Sopenharmony_ci	{0x05, 0x0021, 0x0001},
120462306a36Sopenharmony_ci	{0x05, 0x00d2, 0x0000},
120562306a36Sopenharmony_ci	{0x05, 0x0020, 0x0001},
120662306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
120762306a36Sopenharmony_ci	{0x00, 0x0090, 0x0005},
120862306a36Sopenharmony_ci	{0x01, 0x00a6, 0x0000},
120962306a36Sopenharmony_ci	{0x05, 0x0026, 0x0001},
121062306a36Sopenharmony_ci	{0x05, 0x0001, 0x0000},
121162306a36Sopenharmony_ci	{0x05, 0x0027, 0x0001},
121262306a36Sopenharmony_ci	{0x05, 0x000f, 0x0000},
121362306a36Sopenharmony_ci	{0x01, 0x0003, 0x003f},
121462306a36Sopenharmony_ci	{0x01, 0x0001, 0x0056},
121562306a36Sopenharmony_ci	{0x01, 0x0011, 0x0008},
121662306a36Sopenharmony_ci	{0x01, 0x0032, 0x0009},
121762306a36Sopenharmony_ci	{0x01, 0xfffd, 0x000a},
121862306a36Sopenharmony_ci	{0x01, 0x0023, 0x000b},
121962306a36Sopenharmony_ci	{0x01, 0xffea, 0x000c},
122062306a36Sopenharmony_ci	{0x01, 0xfff4, 0x000d},
122162306a36Sopenharmony_ci	{0x01, 0xfffc, 0x000e},
122262306a36Sopenharmony_ci	{0x01, 0xffe3, 0x000f},
122362306a36Sopenharmony_ci	{0x01, 0x001f, 0x0010},
122462306a36Sopenharmony_ci	{0x01, 0x00a8, 0x0001},
122562306a36Sopenharmony_ci	{0x01, 0x0067, 0x0007},
122662306a36Sopenharmony_ci	{0x01, 0x0042, 0x0051},
122762306a36Sopenharmony_ci	{0x01, 0x0051, 0x0053},
122862306a36Sopenharmony_ci	{0x01, 0x000a, 0x0003},
122962306a36Sopenharmony_ci	{0x02, 0xc002, 0x0001},
123062306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
123162306a36Sopenharmony_ci	{0x02, 0xc000, 0x0001},
123262306a36Sopenharmony_ci	{0x02, 0x0000, 0x0005},
123362306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
123462306a36Sopenharmony_ci	{0x02, 0x2000, 0x0000},
123562306a36Sopenharmony_ci	{0x05, 0x0022, 0x0004},
123662306a36Sopenharmony_ci	{0x05, 0x0015, 0x0001},
123762306a36Sopenharmony_ci	{0x05, 0x00ea, 0x0000},
123862306a36Sopenharmony_ci	{0x05, 0x0021, 0x0001},
123962306a36Sopenharmony_ci	{0x05, 0x00d2, 0x0000},
124062306a36Sopenharmony_ci	{0x05, 0x0023, 0x0001},
124162306a36Sopenharmony_ci	{0x05, 0x0003, 0x0000},
124262306a36Sopenharmony_ci	{0x05, 0x0030, 0x0001},
124362306a36Sopenharmony_ci	{0x05, 0x002b, 0x0000},
124462306a36Sopenharmony_ci	{0x05, 0x0031, 0x0001},
124562306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
124662306a36Sopenharmony_ci	{0x05, 0x0032, 0x0001},
124762306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
124862306a36Sopenharmony_ci	{0x05, 0x0033, 0x0001},
124962306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
125062306a36Sopenharmony_ci	{0x05, 0x0034, 0x0001},
125162306a36Sopenharmony_ci	{0x05, 0x0002, 0x0000},
125262306a36Sopenharmony_ci	{0x05, 0x0050, 0x0001},
125362306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
125462306a36Sopenharmony_ci	{0x05, 0x0051, 0x0001},
125562306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
125662306a36Sopenharmony_ci	{0x05, 0x0052, 0x0001},
125762306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
125862306a36Sopenharmony_ci	{0x05, 0x0054, 0x0001},
125962306a36Sopenharmony_ci	{0x05, 0x0001, 0x0000},
126062306a36Sopenharmony_ci	{0x00, 0x0000, 0x0001},
126162306a36Sopenharmony_ci	{0x00, 0x0000, 0x0002},
126262306a36Sopenharmony_ci	{0x00, 0x000c, 0x0003},
126362306a36Sopenharmony_ci	{0x00, 0x0000, 0x0004},
126462306a36Sopenharmony_ci	{0x00, 0x0090, 0x0005},
126562306a36Sopenharmony_ci	{0x00, 0x0000, 0x0006},
126662306a36Sopenharmony_ci	{0x00, 0x0040, 0x0007},
126762306a36Sopenharmony_ci	{0x00, 0x00c0, 0x0008},
126862306a36Sopenharmony_ci	{0x00, 0x004a, 0x0009},
126962306a36Sopenharmony_ci	{0x00, 0x0000, 0x000a},
127062306a36Sopenharmony_ci	{0x00, 0x0000, 0x000b},
127162306a36Sopenharmony_ci	{0x00, 0x0001, 0x000c},
127262306a36Sopenharmony_ci	{0x00, 0x0001, 0x000d},
127362306a36Sopenharmony_ci	{0x00, 0x0000, 0x000e},
127462306a36Sopenharmony_ci	{0x00, 0x0002, 0x000f},
127562306a36Sopenharmony_ci	{0x00, 0x0001, 0x0010},
127662306a36Sopenharmony_ci	{0x00, 0x0000, 0x0011},
127762306a36Sopenharmony_ci	{0x00, 0x0000, 0x0012},
127862306a36Sopenharmony_ci	{0x00, 0x0002, 0x0020},
127962306a36Sopenharmony_ci	{0x00, 0x0080, 0x0021},
128062306a36Sopenharmony_ci	{0x00, 0x0001, 0x0022},
128162306a36Sopenharmony_ci	{0x00, 0x00e0, 0x0023},
128262306a36Sopenharmony_ci	{0x00, 0x0000, 0x0024},
128362306a36Sopenharmony_ci	{0x00, 0x00d5, 0x0025},
128462306a36Sopenharmony_ci	{0x00, 0x0000, 0x0026},
128562306a36Sopenharmony_ci	{0x00, 0x000b, 0x0027},
128662306a36Sopenharmony_ci	{0x00, 0x0000, 0x0046},
128762306a36Sopenharmony_ci	{0x00, 0x0000, 0x0047},
128862306a36Sopenharmony_ci	{0x00, 0x0000, 0x0048},
128962306a36Sopenharmony_ci	{0x00, 0x0000, 0x0049},
129062306a36Sopenharmony_ci	{0x00, 0x0008, 0x004a},
129162306a36Sopenharmony_ci	{0xff, 0x0000, 0x00d0},
129262306a36Sopenharmony_ci	{0xff, 0x00d8, 0x00d1},
129362306a36Sopenharmony_ci	{0xff, 0x0000, 0x00d4},
129462306a36Sopenharmony_ci	{0xff, 0x0000, 0x00d5},
129562306a36Sopenharmony_ci	{0x01, 0x00a6, 0x0000},
129662306a36Sopenharmony_ci	{0x01, 0x0028, 0x0001},
129762306a36Sopenharmony_ci	{0x01, 0x0000, 0x0002},
129862306a36Sopenharmony_ci	{0x01, 0x000a, 0x0003},
129962306a36Sopenharmony_ci	{0x01, 0x0040, 0x0004},
130062306a36Sopenharmony_ci	{0x01, 0x0066, 0x0007},
130162306a36Sopenharmony_ci	{0x01, 0x0011, 0x0008},
130262306a36Sopenharmony_ci	{0x01, 0x0032, 0x0009},
130362306a36Sopenharmony_ci	{0x01, 0x00fd, 0x000a},
130462306a36Sopenharmony_ci	{0x01, 0x0038, 0x000b},
130562306a36Sopenharmony_ci	{0x01, 0x00d1, 0x000c},
130662306a36Sopenharmony_ci	{0x01, 0x00f7, 0x000d},
130762306a36Sopenharmony_ci	{0x01, 0x00ed, 0x000e},
130862306a36Sopenharmony_ci	{0x01, 0x00d8, 0x000f},
130962306a36Sopenharmony_ci	{0x01, 0x0038, 0x0010},
131062306a36Sopenharmony_ci	{0x01, 0x00ff, 0x0015},
131162306a36Sopenharmony_ci	{0x01, 0x0001, 0x0016},
131262306a36Sopenharmony_ci	{0x01, 0x0032, 0x0017},
131362306a36Sopenharmony_ci	{0x01, 0x0023, 0x0018},
131462306a36Sopenharmony_ci	{0x01, 0x00ce, 0x0019},
131562306a36Sopenharmony_ci	{0x01, 0x0023, 0x001a},
131662306a36Sopenharmony_ci	{0x01, 0x0032, 0x001b},
131762306a36Sopenharmony_ci	{0x01, 0x008d, 0x001c},
131862306a36Sopenharmony_ci	{0x01, 0x00ce, 0x001d},
131962306a36Sopenharmony_ci	{0x01, 0x008d, 0x001e},
132062306a36Sopenharmony_ci	{0x01, 0x0000, 0x001f},
132162306a36Sopenharmony_ci	{0x01, 0x0000, 0x0020},
132262306a36Sopenharmony_ci	{0x01, 0x00ff, 0x003e},
132362306a36Sopenharmony_ci	{0x01, 0x0003, 0x003f},
132462306a36Sopenharmony_ci	{0x01, 0x0000, 0x0040},
132562306a36Sopenharmony_ci	{0x01, 0x0035, 0x0041},
132662306a36Sopenharmony_ci	{0x01, 0x0053, 0x0042},
132762306a36Sopenharmony_ci	{0x01, 0x0069, 0x0043},
132862306a36Sopenharmony_ci	{0x01, 0x007c, 0x0044},
132962306a36Sopenharmony_ci	{0x01, 0x008c, 0x0045},
133062306a36Sopenharmony_ci	{0x01, 0x009a, 0x0046},
133162306a36Sopenharmony_ci	{0x01, 0x00a8, 0x0047},
133262306a36Sopenharmony_ci	{0x01, 0x00b4, 0x0048},
133362306a36Sopenharmony_ci	{0x01, 0x00bf, 0x0049},
133462306a36Sopenharmony_ci	{0x01, 0x00ca, 0x004a},
133562306a36Sopenharmony_ci	{0x01, 0x00d4, 0x004b},
133662306a36Sopenharmony_ci	{0x01, 0x00dd, 0x004c},
133762306a36Sopenharmony_ci	{0x01, 0x00e7, 0x004d},
133862306a36Sopenharmony_ci	{0x01, 0x00ef, 0x004e},
133962306a36Sopenharmony_ci	{0x01, 0x00f8, 0x004f},
134062306a36Sopenharmony_ci	{0x01, 0x00ff, 0x0050},
134162306a36Sopenharmony_ci	{0x01, 0x0001, 0x0056},
134262306a36Sopenharmony_ci	{0x01, 0x0060, 0x0057},
134362306a36Sopenharmony_ci	{0x01, 0x0040, 0x0058},
134462306a36Sopenharmony_ci	{0x01, 0x0011, 0x0059},
134562306a36Sopenharmony_ci	{0x01, 0x0001, 0x005a},
134662306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
134762306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
134862306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
134962306a36Sopenharmony_ci	{0x02, 0x0015, 0x0006},
135062306a36Sopenharmony_ci	{0x02, 0x100a, 0x0007},
135162306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
135262306a36Sopenharmony_ci	{0x02, 0xc002, 0x0001},
135362306a36Sopenharmony_ci	{0x02, 0x000f, 0x0005},
135462306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
135562306a36Sopenharmony_ci	{0x05, 0x0022, 0x0004},
135662306a36Sopenharmony_ci	{0x05, 0x0025, 0x0001},
135762306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
135862306a36Sopenharmony_ci	{0x05, 0x0026, 0x0001},
135962306a36Sopenharmony_ci	{0x05, 0x0001, 0x0000},
136062306a36Sopenharmony_ci	{0x05, 0x0027, 0x0001},
136162306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
136262306a36Sopenharmony_ci	{0x05, 0x0001, 0x0001},
136362306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
136462306a36Sopenharmony_ci	{0x05, 0x0021, 0x0001},
136562306a36Sopenharmony_ci	{0x05, 0x00d2, 0x0000},
136662306a36Sopenharmony_ci	{0x05, 0x0020, 0x0001},
136762306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
136862306a36Sopenharmony_ci	{0x00, 0x0090, 0x0005},
136962306a36Sopenharmony_ci	{0x01, 0x00a6, 0x0000},
137062306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
137162306a36Sopenharmony_ci	{0x02, 0x2000, 0x0000},
137262306a36Sopenharmony_ci	{0x05, 0x0022, 0x0004},
137362306a36Sopenharmony_ci	{0x05, 0x0015, 0x0001},
137462306a36Sopenharmony_ci	{0x05, 0x00ea, 0x0000},
137562306a36Sopenharmony_ci	{0x05, 0x0021, 0x0001},
137662306a36Sopenharmony_ci	{0x05, 0x00d2, 0x0000},
137762306a36Sopenharmony_ci	{0x05, 0x0023, 0x0001},
137862306a36Sopenharmony_ci	{0x05, 0x0003, 0x0000},
137962306a36Sopenharmony_ci	{0x05, 0x0030, 0x0001},
138062306a36Sopenharmony_ci	{0x05, 0x002b, 0x0000},
138162306a36Sopenharmony_ci	{0x05, 0x0031, 0x0001},
138262306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
138362306a36Sopenharmony_ci	{0x05, 0x0032, 0x0001},
138462306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
138562306a36Sopenharmony_ci	{0x05, 0x0033, 0x0001},
138662306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
138762306a36Sopenharmony_ci	{0x05, 0x0034, 0x0001},
138862306a36Sopenharmony_ci	{0x05, 0x0002, 0x0000},
138962306a36Sopenharmony_ci	{0x05, 0x0050, 0x0001},
139062306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
139162306a36Sopenharmony_ci	{0x05, 0x0051, 0x0001},
139262306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
139362306a36Sopenharmony_ci	{0x05, 0x0052, 0x0001},
139462306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
139562306a36Sopenharmony_ci	{0x05, 0x0054, 0x0001},
139662306a36Sopenharmony_ci	{0x05, 0x0001, 0x0000},
139762306a36Sopenharmony_ci	{0x00, 0x0000, 0x0001},
139862306a36Sopenharmony_ci	{0x00, 0x0000, 0x0002},
139962306a36Sopenharmony_ci	{0x00, 0x000c, 0x0003},
140062306a36Sopenharmony_ci	{0x00, 0x0000, 0x0004},
140162306a36Sopenharmony_ci	{0x00, 0x0090, 0x0005},
140262306a36Sopenharmony_ci	{0x00, 0x0000, 0x0006},
140362306a36Sopenharmony_ci	{0x00, 0x0040, 0x0007},
140462306a36Sopenharmony_ci	{0x00, 0x00c0, 0x0008},
140562306a36Sopenharmony_ci	{0x00, 0x004a, 0x0009},
140662306a36Sopenharmony_ci	{0x00, 0x0000, 0x000a},
140762306a36Sopenharmony_ci	{0x00, 0x0000, 0x000b},
140862306a36Sopenharmony_ci	{0x00, 0x0001, 0x000c},
140962306a36Sopenharmony_ci	{0x00, 0x0001, 0x000d},
141062306a36Sopenharmony_ci	{0x00, 0x0000, 0x000e},
141162306a36Sopenharmony_ci	{0x00, 0x0002, 0x000f},
141262306a36Sopenharmony_ci	{0x00, 0x0001, 0x0010},
141362306a36Sopenharmony_ci	{0x00, 0x0000, 0x0011},
141462306a36Sopenharmony_ci	{0x00, 0x0000, 0x0012},
141562306a36Sopenharmony_ci	{0x00, 0x0002, 0x0020},
141662306a36Sopenharmony_ci	{0x00, 0x0080, 0x0021},
141762306a36Sopenharmony_ci	{0x00, 0x0001, 0x0022},
141862306a36Sopenharmony_ci	{0x00, 0x00e0, 0x0023},
141962306a36Sopenharmony_ci	{0x00, 0x0000, 0x0024},
142062306a36Sopenharmony_ci	{0x00, 0x00d5, 0x0025},
142162306a36Sopenharmony_ci	{0x00, 0x0000, 0x0026},
142262306a36Sopenharmony_ci	{0x00, 0x000b, 0x0027},
142362306a36Sopenharmony_ci	{0x00, 0x0000, 0x0046},
142462306a36Sopenharmony_ci	{0x00, 0x0000, 0x0047},
142562306a36Sopenharmony_ci	{0x00, 0x0000, 0x0048},
142662306a36Sopenharmony_ci	{0x00, 0x0000, 0x0049},
142762306a36Sopenharmony_ci	{0x00, 0x0008, 0x004a},
142862306a36Sopenharmony_ci	{0xff, 0x0000, 0x00d0},
142962306a36Sopenharmony_ci	{0xff, 0x00d8, 0x00d1},
143062306a36Sopenharmony_ci	{0xff, 0x0000, 0x00d4},
143162306a36Sopenharmony_ci	{0xff, 0x0000, 0x00d5},
143262306a36Sopenharmony_ci	{0x01, 0x00a6, 0x0000},
143362306a36Sopenharmony_ci	{0x01, 0x0028, 0x0001},
143462306a36Sopenharmony_ci	{0x01, 0x0000, 0x0002},
143562306a36Sopenharmony_ci	{0x01, 0x000a, 0x0003},
143662306a36Sopenharmony_ci	{0x01, 0x0040, 0x0004},
143762306a36Sopenharmony_ci	{0x01, 0x0066, 0x0007},
143862306a36Sopenharmony_ci	{0x01, 0x0011, 0x0008},
143962306a36Sopenharmony_ci	{0x01, 0x0032, 0x0009},
144062306a36Sopenharmony_ci	{0x01, 0x00fd, 0x000a},
144162306a36Sopenharmony_ci	{0x01, 0x0038, 0x000b},
144262306a36Sopenharmony_ci	{0x01, 0x00d1, 0x000c},
144362306a36Sopenharmony_ci	{0x01, 0x00f7, 0x000d},
144462306a36Sopenharmony_ci	{0x01, 0x00ed, 0x000e},
144562306a36Sopenharmony_ci	{0x01, 0x00d8, 0x000f},
144662306a36Sopenharmony_ci	{0x01, 0x0038, 0x0010},
144762306a36Sopenharmony_ci	{0x01, 0x00ff, 0x0015},
144862306a36Sopenharmony_ci	{0x01, 0x0001, 0x0016},
144962306a36Sopenharmony_ci	{0x01, 0x0032, 0x0017},
145062306a36Sopenharmony_ci	{0x01, 0x0023, 0x0018},
145162306a36Sopenharmony_ci	{0x01, 0x00ce, 0x0019},
145262306a36Sopenharmony_ci	{0x01, 0x0023, 0x001a},
145362306a36Sopenharmony_ci	{0x01, 0x0032, 0x001b},
145462306a36Sopenharmony_ci	{0x01, 0x008d, 0x001c},
145562306a36Sopenharmony_ci	{0x01, 0x00ce, 0x001d},
145662306a36Sopenharmony_ci	{0x01, 0x008d, 0x001e},
145762306a36Sopenharmony_ci	{0x01, 0x0000, 0x001f},
145862306a36Sopenharmony_ci	{0x01, 0x0000, 0x0020},
145962306a36Sopenharmony_ci	{0x01, 0x00ff, 0x003e},
146062306a36Sopenharmony_ci	{0x01, 0x0003, 0x003f},
146162306a36Sopenharmony_ci	{0x01, 0x0000, 0x0040},
146262306a36Sopenharmony_ci	{0x01, 0x0035, 0x0041},
146362306a36Sopenharmony_ci	{0x01, 0x0053, 0x0042},
146462306a36Sopenharmony_ci	{0x01, 0x0069, 0x0043},
146562306a36Sopenharmony_ci	{0x01, 0x007c, 0x0044},
146662306a36Sopenharmony_ci	{0x01, 0x008c, 0x0045},
146762306a36Sopenharmony_ci	{0x01, 0x009a, 0x0046},
146862306a36Sopenharmony_ci	{0x01, 0x00a8, 0x0047},
146962306a36Sopenharmony_ci	{0x01, 0x00b4, 0x0048},
147062306a36Sopenharmony_ci	{0x01, 0x00bf, 0x0049},
147162306a36Sopenharmony_ci	{0x01, 0x00ca, 0x004a},
147262306a36Sopenharmony_ci	{0x01, 0x00d4, 0x004b},
147362306a36Sopenharmony_ci	{0x01, 0x00dd, 0x004c},
147462306a36Sopenharmony_ci	{0x01, 0x00e7, 0x004d},
147562306a36Sopenharmony_ci	{0x01, 0x00ef, 0x004e},
147662306a36Sopenharmony_ci	{0x01, 0x00f8, 0x004f},
147762306a36Sopenharmony_ci	{0x01, 0x00ff, 0x0050},
147862306a36Sopenharmony_ci	{0x01, 0x0001, 0x0056},
147962306a36Sopenharmony_ci	{0x01, 0x0060, 0x0057},
148062306a36Sopenharmony_ci	{0x01, 0x0040, 0x0058},
148162306a36Sopenharmony_ci	{0x01, 0x0011, 0x0059},
148262306a36Sopenharmony_ci	{0x01, 0x0001, 0x005a},
148362306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
148462306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
148562306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
148662306a36Sopenharmony_ci	{0x02, 0x0015, 0x0006},
148762306a36Sopenharmony_ci	{0x02, 0x100a, 0x0007},
148862306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
148962306a36Sopenharmony_ci	{0x02, 0xc002, 0x0001},
149062306a36Sopenharmony_ci	{0x02, 0x000f, 0x0005},
149162306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
149262306a36Sopenharmony_ci	{0x05, 0x0022, 0x0004},
149362306a36Sopenharmony_ci	{0x05, 0x0025, 0x0001},
149462306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
149562306a36Sopenharmony_ci	{0x05, 0x0026, 0x0001},
149662306a36Sopenharmony_ci	{0x05, 0x0001, 0x0000},
149762306a36Sopenharmony_ci	{0x05, 0x0027, 0x0001},
149862306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
149962306a36Sopenharmony_ci	{0x05, 0x0001, 0x0001},
150062306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
150162306a36Sopenharmony_ci	{0x05, 0x0021, 0x0001},
150262306a36Sopenharmony_ci	{0x05, 0x00d2, 0x0000},
150362306a36Sopenharmony_ci	{0x05, 0x0020, 0x0001},
150462306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
150562306a36Sopenharmony_ci	{0x00, 0x0090, 0x0005},
150662306a36Sopenharmony_ci	{0x01, 0x00a6, 0x0000},
150762306a36Sopenharmony_ci	{0x05, 0x0026, 0x0001},
150862306a36Sopenharmony_ci	{0x05, 0x0001, 0x0000},
150962306a36Sopenharmony_ci	{0x05, 0x0027, 0x0001},
151062306a36Sopenharmony_ci	{0x05, 0x001e, 0x0000},
151162306a36Sopenharmony_ci	{0x01, 0x0003, 0x003f},
151262306a36Sopenharmony_ci	{0x01, 0x0001, 0x0056},
151362306a36Sopenharmony_ci	{0x01, 0x0011, 0x0008},
151462306a36Sopenharmony_ci	{0x01, 0x0032, 0x0009},
151562306a36Sopenharmony_ci	{0x01, 0xfffd, 0x000a},
151662306a36Sopenharmony_ci	{0x01, 0x0023, 0x000b},
151762306a36Sopenharmony_ci	{0x01, 0xffea, 0x000c},
151862306a36Sopenharmony_ci	{0x01, 0xfff4, 0x000d},
151962306a36Sopenharmony_ci	{0x01, 0xfffc, 0x000e},
152062306a36Sopenharmony_ci	{0x01, 0xffe3, 0x000f},
152162306a36Sopenharmony_ci	{0x01, 0x001f, 0x0010},
152262306a36Sopenharmony_ci	{0x01, 0x00a8, 0x0001},
152362306a36Sopenharmony_ci	{0x01, 0x0067, 0x0007},
152462306a36Sopenharmony_ci	{0x01, 0x0042, 0x0051},
152562306a36Sopenharmony_ci	{0x01, 0x0051, 0x0053},
152662306a36Sopenharmony_ci	{0x01, 0x000a, 0x0003},
152762306a36Sopenharmony_ci	{0x02, 0xc002, 0x0001},
152862306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
152962306a36Sopenharmony_ci	{0x01, 0x0042, 0x0051},
153062306a36Sopenharmony_ci	{0x01, 0x0051, 0x0053},
153162306a36Sopenharmony_ci	{0x05, 0x0026, 0x0001},
153262306a36Sopenharmony_ci	{0x05, 0x0001, 0x0000},
153362306a36Sopenharmony_ci	{0x05, 0x0027, 0x0001},
153462306a36Sopenharmony_ci	{0x05, 0x002d, 0x0000},
153562306a36Sopenharmony_ci	{0x01, 0x0003, 0x003f},
153662306a36Sopenharmony_ci	{0x01, 0x0001, 0x0056},
153762306a36Sopenharmony_ci	{0x02, 0xc000, 0x0001},
153862306a36Sopenharmony_ci	{0x02, 0x0000, 0x0005},
153962306a36Sopenharmony_ci	{}
154062306a36Sopenharmony_ci};
154162306a36Sopenharmony_ci
154262306a36Sopenharmony_ci/* Unknown camera from Ori Usbid 0x0000:0x0000 */
154362306a36Sopenharmony_ci/* Based on snoops from Ori Cohen */
154462306a36Sopenharmony_cistatic const __u16 spca501c_mysterious_open_data[][3] = {
154562306a36Sopenharmony_ci	{0x02, 0x000f, 0x0005},
154662306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
154762306a36Sopenharmony_ci	{0x05, 0x0022, 0x0004},
154862306a36Sopenharmony_ci/* DSP Registers */
154962306a36Sopenharmony_ci	{0x01, 0x0016, 0x0011},	/* RGB offset */
155062306a36Sopenharmony_ci	{0x01, 0x0000, 0x0012},
155162306a36Sopenharmony_ci	{0x01, 0x0006, 0x0013},
155262306a36Sopenharmony_ci	{0x01, 0x0078, 0x0051},
155362306a36Sopenharmony_ci	{0x01, 0x0040, 0x0052},
155462306a36Sopenharmony_ci	{0x01, 0x0046, 0x0053},
155562306a36Sopenharmony_ci	{0x01, 0x0040, 0x0054},
155662306a36Sopenharmony_ci	{0x00, 0x0025, 0x0000},
155762306a36Sopenharmony_ci/*	{0x00, 0x0000, 0x0000 }, */
155862306a36Sopenharmony_ci/* Part 2 */
155962306a36Sopenharmony_ci/* TG Registers */
156062306a36Sopenharmony_ci	{0x00, 0x0026, 0x0000},
156162306a36Sopenharmony_ci	{0x00, 0x0001, 0x0000},
156262306a36Sopenharmony_ci	{0x00, 0x0027, 0x0000},
156362306a36Sopenharmony_ci	{0x00, 0x008a, 0x0000},
156462306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
156562306a36Sopenharmony_ci	{0x02, 0x2000, 0x0000},
156662306a36Sopenharmony_ci	{0x05, 0x0022, 0x0004},
156762306a36Sopenharmony_ci	{0x05, 0x0015, 0x0001},
156862306a36Sopenharmony_ci	{0x05, 0x00ea, 0x0000},
156962306a36Sopenharmony_ci	{0x05, 0x0021, 0x0001},
157062306a36Sopenharmony_ci	{0x05, 0x00d2, 0x0000},
157162306a36Sopenharmony_ci	{0x05, 0x0023, 0x0001},
157262306a36Sopenharmony_ci	{0x05, 0x0003, 0x0000},
157362306a36Sopenharmony_ci	{0x05, 0x0030, 0x0001},
157462306a36Sopenharmony_ci	{0x05, 0x002b, 0x0000},
157562306a36Sopenharmony_ci	{0x05, 0x0031, 0x0001},
157662306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
157762306a36Sopenharmony_ci	{0x05, 0x0032, 0x0001},
157862306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
157962306a36Sopenharmony_ci	{0x05, 0x0033, 0x0001},
158062306a36Sopenharmony_ci	{0x05, 0x0023, 0x0000},
158162306a36Sopenharmony_ci	{0x05, 0x0034, 0x0001},
158262306a36Sopenharmony_ci	{0x05, 0x0002, 0x0000},
158362306a36Sopenharmony_ci	{0x05, 0x0050, 0x0001},
158462306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
158562306a36Sopenharmony_ci	{0x05, 0x0051, 0x0001},
158662306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
158762306a36Sopenharmony_ci	{0x05, 0x0052, 0x0001},
158862306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
158962306a36Sopenharmony_ci	{0x05, 0x0054, 0x0001},
159062306a36Sopenharmony_ci	{0x05, 0x0001, 0x0000},
159162306a36Sopenharmony_ci	{}
159262306a36Sopenharmony_ci};
159362306a36Sopenharmony_ci
159462306a36Sopenharmony_ci/* Based on snoops from Ori Cohen */
159562306a36Sopenharmony_cistatic const __u16 spca501c_mysterious_init_data[][3] = {
159662306a36Sopenharmony_ci/* Part 3 */
159762306a36Sopenharmony_ci/* TG registers */
159862306a36Sopenharmony_ci/*	{0x00, 0x0000, 0x0000}, */
159962306a36Sopenharmony_ci	{0x00, 0x0000, 0x0001},
160062306a36Sopenharmony_ci	{0x00, 0x0000, 0x0002},
160162306a36Sopenharmony_ci	{0x00, 0x0006, 0x0003},
160262306a36Sopenharmony_ci	{0x00, 0x0000, 0x0004},
160362306a36Sopenharmony_ci	{0x00, 0x0090, 0x0005},
160462306a36Sopenharmony_ci	{0x00, 0x0000, 0x0006},
160562306a36Sopenharmony_ci	{0x00, 0x0040, 0x0007},
160662306a36Sopenharmony_ci	{0x00, 0x00c0, 0x0008},
160762306a36Sopenharmony_ci	{0x00, 0x004a, 0x0009},
160862306a36Sopenharmony_ci	{0x00, 0x0000, 0x000a},
160962306a36Sopenharmony_ci	{0x00, 0x0000, 0x000b},
161062306a36Sopenharmony_ci	{0x00, 0x0001, 0x000c},
161162306a36Sopenharmony_ci	{0x00, 0x0001, 0x000d},
161262306a36Sopenharmony_ci	{0x00, 0x0000, 0x000e},
161362306a36Sopenharmony_ci	{0x00, 0x0002, 0x000f},
161462306a36Sopenharmony_ci	{0x00, 0x0001, 0x0010},
161562306a36Sopenharmony_ci	{0x00, 0x0000, 0x0011},
161662306a36Sopenharmony_ci	{0x00, 0x0001, 0x0012},
161762306a36Sopenharmony_ci	{0x00, 0x0002, 0x0020},
161862306a36Sopenharmony_ci	{0x00, 0x0080, 0x0021},	/* 640 */
161962306a36Sopenharmony_ci	{0x00, 0x0001, 0x0022},
162062306a36Sopenharmony_ci	{0x00, 0x00e0, 0x0023},	/* 480 */
162162306a36Sopenharmony_ci	{0x00, 0x0000, 0x0024},	/* Offset H hight */
162262306a36Sopenharmony_ci	{0x00, 0x00d3, 0x0025},	/* low */
162362306a36Sopenharmony_ci	{0x00, 0x0000, 0x0026},	/* Offset V */
162462306a36Sopenharmony_ci	{0x00, 0x000d, 0x0027},	/* low */
162562306a36Sopenharmony_ci	{0x00, 0x0000, 0x0046},
162662306a36Sopenharmony_ci	{0x00, 0x0000, 0x0047},
162762306a36Sopenharmony_ci	{0x00, 0x0000, 0x0048},
162862306a36Sopenharmony_ci	{0x00, 0x0000, 0x0049},
162962306a36Sopenharmony_ci	{0x00, 0x0008, 0x004a},
163062306a36Sopenharmony_ci/* DSP Registers	*/
163162306a36Sopenharmony_ci	{0x01, 0x00a6, 0x0000},
163262306a36Sopenharmony_ci	{0x01, 0x0028, 0x0001},
163362306a36Sopenharmony_ci	{0x01, 0x0000, 0x0002},
163462306a36Sopenharmony_ci	{0x01, 0x000a, 0x0003},	/* Level Calc bit7 ->1 Auto */
163562306a36Sopenharmony_ci	{0x01, 0x0040, 0x0004},
163662306a36Sopenharmony_ci	{0x01, 0x0066, 0x0007},
163762306a36Sopenharmony_ci	{0x01, 0x000f, 0x0008},	/* A11 Color correction coeff */
163862306a36Sopenharmony_ci	{0x01, 0x002d, 0x0009},	/* A12 */
163962306a36Sopenharmony_ci	{0x01, 0x0005, 0x000a},	/* A13 */
164062306a36Sopenharmony_ci	{0x01, 0x0023, 0x000b},	/* A21 */
164162306a36Sopenharmony_ci	{0x01, 0x00e0, 0x000c},	/* A22 */
164262306a36Sopenharmony_ci	{0x01, 0x00fd, 0x000d},	/* A23 */
164362306a36Sopenharmony_ci	{0x01, 0x00f4, 0x000e},	/* A31 */
164462306a36Sopenharmony_ci	{0x01, 0x00e4, 0x000f},	/* A32 */
164562306a36Sopenharmony_ci	{0x01, 0x0028, 0x0010},	/* A33 */
164662306a36Sopenharmony_ci	{0x01, 0x00ff, 0x0015},	/* Reserved */
164762306a36Sopenharmony_ci	{0x01, 0x0001, 0x0016},	/* Reserved */
164862306a36Sopenharmony_ci	{0x01, 0x0032, 0x0017},	/* Win1 Start begin */
164962306a36Sopenharmony_ci	{0x01, 0x0023, 0x0018},
165062306a36Sopenharmony_ci	{0x01, 0x00ce, 0x0019},
165162306a36Sopenharmony_ci	{0x01, 0x0023, 0x001a},
165262306a36Sopenharmony_ci	{0x01, 0x0032, 0x001b},
165362306a36Sopenharmony_ci	{0x01, 0x008d, 0x001c},
165462306a36Sopenharmony_ci	{0x01, 0x00ce, 0x001d},
165562306a36Sopenharmony_ci	{0x01, 0x008d, 0x001e},
165662306a36Sopenharmony_ci	{0x01, 0x0000, 0x001f},
165762306a36Sopenharmony_ci	{0x01, 0x0000, 0x0020},	/* Win1 Start end */
165862306a36Sopenharmony_ci	{0x01, 0x00ff, 0x003e},	/* Reserved begin */
165962306a36Sopenharmony_ci	{0x01, 0x0002, 0x003f},
166062306a36Sopenharmony_ci	{0x01, 0x0000, 0x0040},
166162306a36Sopenharmony_ci	{0x01, 0x0035, 0x0041},
166262306a36Sopenharmony_ci	{0x01, 0x0053, 0x0042},
166362306a36Sopenharmony_ci	{0x01, 0x0069, 0x0043},
166462306a36Sopenharmony_ci	{0x01, 0x007c, 0x0044},
166562306a36Sopenharmony_ci	{0x01, 0x008c, 0x0045},
166662306a36Sopenharmony_ci	{0x01, 0x009a, 0x0046},
166762306a36Sopenharmony_ci	{0x01, 0x00a8, 0x0047},
166862306a36Sopenharmony_ci	{0x01, 0x00b4, 0x0048},
166962306a36Sopenharmony_ci	{0x01, 0x00bf, 0x0049},
167062306a36Sopenharmony_ci	{0x01, 0x00ca, 0x004a},
167162306a36Sopenharmony_ci	{0x01, 0x00d4, 0x004b},
167262306a36Sopenharmony_ci	{0x01, 0x00dd, 0x004c},
167362306a36Sopenharmony_ci	{0x01, 0x00e7, 0x004d},
167462306a36Sopenharmony_ci	{0x01, 0x00ef, 0x004e},
167562306a36Sopenharmony_ci	{0x01, 0x00f8, 0x004f},
167662306a36Sopenharmony_ci	{0x01, 0x00ff, 0x0050},
167762306a36Sopenharmony_ci	{0x01, 0x0003, 0x0056},	/* Reserved end */
167862306a36Sopenharmony_ci	{0x01, 0x0060, 0x0057},	/* Edge Gain */
167962306a36Sopenharmony_ci	{0x01, 0x0040, 0x0058},
168062306a36Sopenharmony_ci	{0x01, 0x0011, 0x0059},	/* Edge Bandwidth */
168162306a36Sopenharmony_ci	{0x01, 0x0001, 0x005a},
168262306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
168362306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
168462306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
168562306a36Sopenharmony_ci	{0x02, 0x0015, 0x0006},
168662306a36Sopenharmony_ci	{0x02, 0x200a, 0x0007},
168762306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
168862306a36Sopenharmony_ci	{0x02, 0xc000, 0x0001},
168962306a36Sopenharmony_ci	{0x02, 0x000f, 0x0005},
169062306a36Sopenharmony_ci	{0x02, 0xa048, 0x0000},
169162306a36Sopenharmony_ci	{0x05, 0x0022, 0x0004},
169262306a36Sopenharmony_ci	{0x05, 0x0025, 0x0001},
169362306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
169462306a36Sopenharmony_ci/* Part 4 */
169562306a36Sopenharmony_ci	{0x05, 0x0026, 0x0001},
169662306a36Sopenharmony_ci	{0x05, 0x0001, 0x0000},
169762306a36Sopenharmony_ci	{0x05, 0x0027, 0x0001},
169862306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
169962306a36Sopenharmony_ci	{0x05, 0x0001, 0x0001},
170062306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
170162306a36Sopenharmony_ci	{0x05, 0x0021, 0x0001},
170262306a36Sopenharmony_ci	{0x05, 0x00d2, 0x0000},
170362306a36Sopenharmony_ci	{0x05, 0x0020, 0x0001},
170462306a36Sopenharmony_ci	{0x05, 0x0000, 0x0000},
170562306a36Sopenharmony_ci	{0x00, 0x0090, 0x0005},
170662306a36Sopenharmony_ci	{0x01, 0x00a6, 0x0000},
170762306a36Sopenharmony_ci	{0x02, 0x0000, 0x0005},
170862306a36Sopenharmony_ci	{0x05, 0x0026, 0x0001},
170962306a36Sopenharmony_ci	{0x05, 0x0001, 0x0000},
171062306a36Sopenharmony_ci	{0x05, 0x0027, 0x0001},
171162306a36Sopenharmony_ci	{0x05, 0x004e, 0x0000},
171262306a36Sopenharmony_ci/* Part 5 */
171362306a36Sopenharmony_ci	{0x01, 0x0003, 0x003f},
171462306a36Sopenharmony_ci	{0x01, 0x0001, 0x0056},
171562306a36Sopenharmony_ci	{0x01, 0x000f, 0x0008},
171662306a36Sopenharmony_ci	{0x01, 0x002d, 0x0009},
171762306a36Sopenharmony_ci	{0x01, 0x0005, 0x000a},
171862306a36Sopenharmony_ci	{0x01, 0x0023, 0x000b},
171962306a36Sopenharmony_ci	{0x01, 0xffe0, 0x000c},
172062306a36Sopenharmony_ci	{0x01, 0xfffd, 0x000d},
172162306a36Sopenharmony_ci	{0x01, 0xfff4, 0x000e},
172262306a36Sopenharmony_ci	{0x01, 0xffe4, 0x000f},
172362306a36Sopenharmony_ci	{0x01, 0x0028, 0x0010},
172462306a36Sopenharmony_ci	{0x01, 0x00a8, 0x0001},
172562306a36Sopenharmony_ci	{0x01, 0x0066, 0x0007},
172662306a36Sopenharmony_ci	{0x01, 0x0032, 0x0017},
172762306a36Sopenharmony_ci	{0x01, 0x0023, 0x0018},
172862306a36Sopenharmony_ci	{0x01, 0x00ce, 0x0019},
172962306a36Sopenharmony_ci	{0x01, 0x0023, 0x001a},
173062306a36Sopenharmony_ci	{0x01, 0x0032, 0x001b},
173162306a36Sopenharmony_ci	{0x01, 0x008d, 0x001c},
173262306a36Sopenharmony_ci	{0x01, 0x00ce, 0x001d},
173362306a36Sopenharmony_ci	{0x01, 0x008d, 0x001e},
173462306a36Sopenharmony_ci	{0x01, 0x00c8, 0x0015},	/* c8 Poids fort Luma */
173562306a36Sopenharmony_ci	{0x01, 0x0032, 0x0016},	/* 32 */
173662306a36Sopenharmony_ci	{0x01, 0x0016, 0x0011},	/* R 00 */
173762306a36Sopenharmony_ci	{0x01, 0x0016, 0x0012},	/* G 00 */
173862306a36Sopenharmony_ci	{0x01, 0x0016, 0x0013},	/* B 00 */
173962306a36Sopenharmony_ci	{0x01, 0x000a, 0x0003},
174062306a36Sopenharmony_ci	{0x02, 0xc002, 0x0001},
174162306a36Sopenharmony_ci	{0x02, 0x0007, 0x0005},
174262306a36Sopenharmony_ci	{}
174362306a36Sopenharmony_ci};
174462306a36Sopenharmony_ci
174562306a36Sopenharmony_cistatic int reg_write(struct gspca_dev *gspca_dev,
174662306a36Sopenharmony_ci					__u16 req, __u16 index, __u16 value)
174762306a36Sopenharmony_ci{
174862306a36Sopenharmony_ci	int ret;
174962306a36Sopenharmony_ci	struct usb_device *dev = gspca_dev->dev;
175062306a36Sopenharmony_ci
175162306a36Sopenharmony_ci	ret = usb_control_msg(dev,
175262306a36Sopenharmony_ci			usb_sndctrlpipe(dev, 0),
175362306a36Sopenharmony_ci			req,
175462306a36Sopenharmony_ci			USB_TYPE_VENDOR | USB_RECIP_DEVICE,
175562306a36Sopenharmony_ci			value, index, NULL, 0, 500);
175662306a36Sopenharmony_ci	gspca_dbg(gspca_dev, D_USBO, "reg write: 0x%02x 0x%02x 0x%02x\n",
175762306a36Sopenharmony_ci		  req, index, value);
175862306a36Sopenharmony_ci	if (ret < 0)
175962306a36Sopenharmony_ci		pr_err("reg write: error %d\n", ret);
176062306a36Sopenharmony_ci	return ret;
176162306a36Sopenharmony_ci}
176262306a36Sopenharmony_ci
176362306a36Sopenharmony_ci
176462306a36Sopenharmony_cistatic int write_vector(struct gspca_dev *gspca_dev, const __u16 data[][3])
176562306a36Sopenharmony_ci{
176662306a36Sopenharmony_ci	int ret, i = 0;
176762306a36Sopenharmony_ci
176862306a36Sopenharmony_ci	while (data[i][0] != 0 || data[i][1] != 0 || data[i][2] != 0) {
176962306a36Sopenharmony_ci		ret = reg_write(gspca_dev, data[i][0], data[i][2],
177062306a36Sopenharmony_ci								data[i][1]);
177162306a36Sopenharmony_ci		if (ret < 0) {
177262306a36Sopenharmony_ci			gspca_err(gspca_dev, "Reg write failed for 0x%02x,0x%02x,0x%02x\n",
177362306a36Sopenharmony_ci				  data[i][0], data[i][1], data[i][2]);
177462306a36Sopenharmony_ci			return ret;
177562306a36Sopenharmony_ci		}
177662306a36Sopenharmony_ci		i++;
177762306a36Sopenharmony_ci	}
177862306a36Sopenharmony_ci	return 0;
177962306a36Sopenharmony_ci}
178062306a36Sopenharmony_ci
178162306a36Sopenharmony_cistatic void setbrightness(struct gspca_dev *gspca_dev, s32 val)
178262306a36Sopenharmony_ci{
178362306a36Sopenharmony_ci	reg_write(gspca_dev, SPCA501_REG_CCDSP, 0x12, val);
178462306a36Sopenharmony_ci}
178562306a36Sopenharmony_ci
178662306a36Sopenharmony_cistatic void setcontrast(struct gspca_dev *gspca_dev, s32 val)
178762306a36Sopenharmony_ci{
178862306a36Sopenharmony_ci	reg_write(gspca_dev, 0x00, 0x00, (val >> 8) & 0xff);
178962306a36Sopenharmony_ci	reg_write(gspca_dev, 0x00, 0x01, val & 0xff);
179062306a36Sopenharmony_ci}
179162306a36Sopenharmony_ci
179262306a36Sopenharmony_cistatic void setcolors(struct gspca_dev *gspca_dev, s32 val)
179362306a36Sopenharmony_ci{
179462306a36Sopenharmony_ci	reg_write(gspca_dev, SPCA501_REG_CCDSP, 0x0c, val);
179562306a36Sopenharmony_ci}
179662306a36Sopenharmony_ci
179762306a36Sopenharmony_cistatic void setblue_balance(struct gspca_dev *gspca_dev, s32 val)
179862306a36Sopenharmony_ci{
179962306a36Sopenharmony_ci	reg_write(gspca_dev, SPCA501_REG_CCDSP, 0x11, val);
180062306a36Sopenharmony_ci}
180162306a36Sopenharmony_ci
180262306a36Sopenharmony_cistatic void setred_balance(struct gspca_dev *gspca_dev, s32 val)
180362306a36Sopenharmony_ci{
180462306a36Sopenharmony_ci	reg_write(gspca_dev, SPCA501_REG_CCDSP, 0x13, val);
180562306a36Sopenharmony_ci}
180662306a36Sopenharmony_ci
180762306a36Sopenharmony_ci/* this function is called at probe time */
180862306a36Sopenharmony_cistatic int sd_config(struct gspca_dev *gspca_dev,
180962306a36Sopenharmony_ci			const struct usb_device_id *id)
181062306a36Sopenharmony_ci{
181162306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
181262306a36Sopenharmony_ci	struct cam *cam;
181362306a36Sopenharmony_ci
181462306a36Sopenharmony_ci	cam = &gspca_dev->cam;
181562306a36Sopenharmony_ci	cam->cam_mode = vga_mode;
181662306a36Sopenharmony_ci	cam->nmodes = ARRAY_SIZE(vga_mode);
181762306a36Sopenharmony_ci	sd->subtype = id->driver_info;
181862306a36Sopenharmony_ci
181962306a36Sopenharmony_ci	return 0;
182062306a36Sopenharmony_ci}
182162306a36Sopenharmony_ci
182262306a36Sopenharmony_ci/* this function is called at probe and resume time */
182362306a36Sopenharmony_cistatic int sd_init(struct gspca_dev *gspca_dev)
182462306a36Sopenharmony_ci{
182562306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
182662306a36Sopenharmony_ci
182762306a36Sopenharmony_ci	switch (sd->subtype) {
182862306a36Sopenharmony_ci	case Arowana300KCMOSCamera:
182962306a36Sopenharmony_ci	case SmileIntlCamera:
183062306a36Sopenharmony_ci		/* Arowana 300k CMOS Camera data */
183162306a36Sopenharmony_ci		if (write_vector(gspca_dev, spca501c_arowana_init_data))
183262306a36Sopenharmony_ci			goto error;
183362306a36Sopenharmony_ci		break;
183462306a36Sopenharmony_ci	case MystFromOriUnknownCamera:
183562306a36Sopenharmony_ci		/* Unknown Ori CMOS Camera data */
183662306a36Sopenharmony_ci		if (write_vector(gspca_dev, spca501c_mysterious_open_data))
183762306a36Sopenharmony_ci			goto error;
183862306a36Sopenharmony_ci		break;
183962306a36Sopenharmony_ci	default:
184062306a36Sopenharmony_ci		/* generic spca501 init data */
184162306a36Sopenharmony_ci		if (write_vector(gspca_dev, spca501_init_data))
184262306a36Sopenharmony_ci			goto error;
184362306a36Sopenharmony_ci		break;
184462306a36Sopenharmony_ci	}
184562306a36Sopenharmony_ci	gspca_dbg(gspca_dev, D_STREAM, "Initializing SPCA501 finished\n");
184662306a36Sopenharmony_ci	return 0;
184762306a36Sopenharmony_cierror:
184862306a36Sopenharmony_ci	return -EINVAL;
184962306a36Sopenharmony_ci}
185062306a36Sopenharmony_ci
185162306a36Sopenharmony_cistatic int sd_start(struct gspca_dev *gspca_dev)
185262306a36Sopenharmony_ci{
185362306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
185462306a36Sopenharmony_ci	int mode;
185562306a36Sopenharmony_ci
185662306a36Sopenharmony_ci	switch (sd->subtype) {
185762306a36Sopenharmony_ci	case ThreeComHomeConnectLite:
185862306a36Sopenharmony_ci		/* Special handling for 3com data */
185962306a36Sopenharmony_ci		write_vector(gspca_dev, spca501_3com_open_data);
186062306a36Sopenharmony_ci		break;
186162306a36Sopenharmony_ci	case Arowana300KCMOSCamera:
186262306a36Sopenharmony_ci	case SmileIntlCamera:
186362306a36Sopenharmony_ci		/* Arowana 300k CMOS Camera data */
186462306a36Sopenharmony_ci		write_vector(gspca_dev, spca501c_arowana_open_data);
186562306a36Sopenharmony_ci		break;
186662306a36Sopenharmony_ci	case MystFromOriUnknownCamera:
186762306a36Sopenharmony_ci		/* Unknown CMOS Camera data */
186862306a36Sopenharmony_ci		write_vector(gspca_dev, spca501c_mysterious_init_data);
186962306a36Sopenharmony_ci		break;
187062306a36Sopenharmony_ci	default:
187162306a36Sopenharmony_ci		/* Generic 501 open data */
187262306a36Sopenharmony_ci		write_vector(gspca_dev, spca501_open_data);
187362306a36Sopenharmony_ci	}
187462306a36Sopenharmony_ci
187562306a36Sopenharmony_ci	/* memorize the wanted pixel format */
187662306a36Sopenharmony_ci	mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv;
187762306a36Sopenharmony_ci
187862306a36Sopenharmony_ci	/* Enable ISO packet machine CTRL reg=2,
187962306a36Sopenharmony_ci	 * index=1 bitmask=0x2 (bit ordinal 1) */
188062306a36Sopenharmony_ci	reg_write(gspca_dev, SPCA50X_REG_USB, 0x6, 0x94);
188162306a36Sopenharmony_ci	switch (mode) {
188262306a36Sopenharmony_ci	case 0: /* 640x480 */
188362306a36Sopenharmony_ci		reg_write(gspca_dev, SPCA50X_REG_USB, 0x07, 0x004a);
188462306a36Sopenharmony_ci		break;
188562306a36Sopenharmony_ci	case 1: /* 320x240 */
188662306a36Sopenharmony_ci		reg_write(gspca_dev, SPCA50X_REG_USB, 0x07, 0x104a);
188762306a36Sopenharmony_ci		break;
188862306a36Sopenharmony_ci	default:
188962306a36Sopenharmony_ci/*	case 2:  * 160x120 */
189062306a36Sopenharmony_ci		reg_write(gspca_dev, SPCA50X_REG_USB, 0x07, 0x204a);
189162306a36Sopenharmony_ci		break;
189262306a36Sopenharmony_ci	}
189362306a36Sopenharmony_ci	reg_write(gspca_dev, SPCA501_REG_CTLRL, 0x01, 0x02);
189462306a36Sopenharmony_ci
189562306a36Sopenharmony_ci	return 0;
189662306a36Sopenharmony_ci}
189762306a36Sopenharmony_ci
189862306a36Sopenharmony_cistatic void sd_stopN(struct gspca_dev *gspca_dev)
189962306a36Sopenharmony_ci{
190062306a36Sopenharmony_ci	/* Disable ISO packet
190162306a36Sopenharmony_ci	 * machine CTRL reg=2, index=1 bitmask=0x0 (bit ordinal 1) */
190262306a36Sopenharmony_ci	reg_write(gspca_dev, SPCA501_REG_CTLRL, 0x01, 0x00);
190362306a36Sopenharmony_ci}
190462306a36Sopenharmony_ci
190562306a36Sopenharmony_ci/* called on streamoff with alt 0 and on disconnect */
190662306a36Sopenharmony_cistatic void sd_stop0(struct gspca_dev *gspca_dev)
190762306a36Sopenharmony_ci{
190862306a36Sopenharmony_ci	if (!gspca_dev->present)
190962306a36Sopenharmony_ci		return;
191062306a36Sopenharmony_ci	reg_write(gspca_dev, SPCA501_REG_CTLRL, 0x05, 0x00);
191162306a36Sopenharmony_ci}
191262306a36Sopenharmony_ci
191362306a36Sopenharmony_cistatic void sd_pkt_scan(struct gspca_dev *gspca_dev,
191462306a36Sopenharmony_ci			u8 *data,			/* isoc packet */
191562306a36Sopenharmony_ci			int len)			/* iso packet length */
191662306a36Sopenharmony_ci{
191762306a36Sopenharmony_ci	switch (data[0]) {
191862306a36Sopenharmony_ci	case 0:				/* start of frame */
191962306a36Sopenharmony_ci		gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
192062306a36Sopenharmony_ci		data += SPCA501_OFFSET_DATA;
192162306a36Sopenharmony_ci		len -= SPCA501_OFFSET_DATA;
192262306a36Sopenharmony_ci		gspca_frame_add(gspca_dev, FIRST_PACKET, data, len);
192362306a36Sopenharmony_ci		return;
192462306a36Sopenharmony_ci	case 0xff:			/* drop */
192562306a36Sopenharmony_ci/*		gspca_dev->last_packet_type = DISCARD_PACKET; */
192662306a36Sopenharmony_ci		return;
192762306a36Sopenharmony_ci	}
192862306a36Sopenharmony_ci	data++;
192962306a36Sopenharmony_ci	len--;
193062306a36Sopenharmony_ci	gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
193162306a36Sopenharmony_ci}
193262306a36Sopenharmony_ci
193362306a36Sopenharmony_cistatic int sd_s_ctrl(struct v4l2_ctrl *ctrl)
193462306a36Sopenharmony_ci{
193562306a36Sopenharmony_ci	struct gspca_dev *gspca_dev =
193662306a36Sopenharmony_ci		container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
193762306a36Sopenharmony_ci
193862306a36Sopenharmony_ci	gspca_dev->usb_err = 0;
193962306a36Sopenharmony_ci
194062306a36Sopenharmony_ci	if (!gspca_dev->streaming)
194162306a36Sopenharmony_ci		return 0;
194262306a36Sopenharmony_ci
194362306a36Sopenharmony_ci	switch (ctrl->id) {
194462306a36Sopenharmony_ci	case V4L2_CID_BRIGHTNESS:
194562306a36Sopenharmony_ci		setbrightness(gspca_dev, ctrl->val);
194662306a36Sopenharmony_ci		break;
194762306a36Sopenharmony_ci	case V4L2_CID_CONTRAST:
194862306a36Sopenharmony_ci		setcontrast(gspca_dev, ctrl->val);
194962306a36Sopenharmony_ci		break;
195062306a36Sopenharmony_ci	case V4L2_CID_SATURATION:
195162306a36Sopenharmony_ci		setcolors(gspca_dev, ctrl->val);
195262306a36Sopenharmony_ci		break;
195362306a36Sopenharmony_ci	case V4L2_CID_BLUE_BALANCE:
195462306a36Sopenharmony_ci		setblue_balance(gspca_dev, ctrl->val);
195562306a36Sopenharmony_ci		break;
195662306a36Sopenharmony_ci	case V4L2_CID_RED_BALANCE:
195762306a36Sopenharmony_ci		setred_balance(gspca_dev, ctrl->val);
195862306a36Sopenharmony_ci		break;
195962306a36Sopenharmony_ci	}
196062306a36Sopenharmony_ci	return gspca_dev->usb_err;
196162306a36Sopenharmony_ci}
196262306a36Sopenharmony_ci
196362306a36Sopenharmony_cistatic const struct v4l2_ctrl_ops sd_ctrl_ops = {
196462306a36Sopenharmony_ci	.s_ctrl = sd_s_ctrl,
196562306a36Sopenharmony_ci};
196662306a36Sopenharmony_ci
196762306a36Sopenharmony_cistatic int sd_init_controls(struct gspca_dev *gspca_dev)
196862306a36Sopenharmony_ci{
196962306a36Sopenharmony_ci	struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
197062306a36Sopenharmony_ci
197162306a36Sopenharmony_ci	gspca_dev->vdev.ctrl_handler = hdl;
197262306a36Sopenharmony_ci	v4l2_ctrl_handler_init(hdl, 5);
197362306a36Sopenharmony_ci	v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
197462306a36Sopenharmony_ci			V4L2_CID_BRIGHTNESS, 0, 127, 1, 0);
197562306a36Sopenharmony_ci	v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
197662306a36Sopenharmony_ci			V4L2_CID_CONTRAST, 0, 64725, 1, 64725);
197762306a36Sopenharmony_ci	v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
197862306a36Sopenharmony_ci			V4L2_CID_SATURATION, 0, 63, 1, 20);
197962306a36Sopenharmony_ci	v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
198062306a36Sopenharmony_ci			V4L2_CID_BLUE_BALANCE, 0, 127, 1, 0);
198162306a36Sopenharmony_ci	v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
198262306a36Sopenharmony_ci			V4L2_CID_RED_BALANCE, 0, 127, 1, 0);
198362306a36Sopenharmony_ci
198462306a36Sopenharmony_ci	if (hdl->error) {
198562306a36Sopenharmony_ci		pr_err("Could not initialize controls\n");
198662306a36Sopenharmony_ci		return hdl->error;
198762306a36Sopenharmony_ci	}
198862306a36Sopenharmony_ci	return 0;
198962306a36Sopenharmony_ci}
199062306a36Sopenharmony_ci
199162306a36Sopenharmony_ci/* sub-driver description */
199262306a36Sopenharmony_cistatic const struct sd_desc sd_desc = {
199362306a36Sopenharmony_ci	.name = MODULE_NAME,
199462306a36Sopenharmony_ci	.config = sd_config,
199562306a36Sopenharmony_ci	.init = sd_init,
199662306a36Sopenharmony_ci	.init_controls = sd_init_controls,
199762306a36Sopenharmony_ci	.start = sd_start,
199862306a36Sopenharmony_ci	.stopN = sd_stopN,
199962306a36Sopenharmony_ci	.stop0 = sd_stop0,
200062306a36Sopenharmony_ci	.pkt_scan = sd_pkt_scan,
200162306a36Sopenharmony_ci};
200262306a36Sopenharmony_ci
200362306a36Sopenharmony_ci/* -- module initialisation -- */
200462306a36Sopenharmony_cistatic const struct usb_device_id device_table[] = {
200562306a36Sopenharmony_ci	{USB_DEVICE(0x040a, 0x0002), .driver_info = KodakDVC325},
200662306a36Sopenharmony_ci	{USB_DEVICE(0x0497, 0xc001), .driver_info = SmileIntlCamera},
200762306a36Sopenharmony_ci	{USB_DEVICE(0x0506, 0x00df), .driver_info = ThreeComHomeConnectLite},
200862306a36Sopenharmony_ci	{USB_DEVICE(0x0733, 0x0401), .driver_info = IntelCreateAndShare},
200962306a36Sopenharmony_ci	{USB_DEVICE(0x0733, 0x0402), .driver_info = ViewQuestM318B},
201062306a36Sopenharmony_ci	{USB_DEVICE(0x1776, 0x501c), .driver_info = Arowana300KCMOSCamera},
201162306a36Sopenharmony_ci	{USB_DEVICE(0x0000, 0x0000), .driver_info = MystFromOriUnknownCamera},
201262306a36Sopenharmony_ci	{}
201362306a36Sopenharmony_ci};
201462306a36Sopenharmony_ciMODULE_DEVICE_TABLE(usb, device_table);
201562306a36Sopenharmony_ci
201662306a36Sopenharmony_ci/* -- device connect -- */
201762306a36Sopenharmony_cistatic int sd_probe(struct usb_interface *intf,
201862306a36Sopenharmony_ci			const struct usb_device_id *id)
201962306a36Sopenharmony_ci{
202062306a36Sopenharmony_ci	return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd),
202162306a36Sopenharmony_ci				THIS_MODULE);
202262306a36Sopenharmony_ci}
202362306a36Sopenharmony_ci
202462306a36Sopenharmony_cistatic struct usb_driver sd_driver = {
202562306a36Sopenharmony_ci	.name = MODULE_NAME,
202662306a36Sopenharmony_ci	.id_table = device_table,
202762306a36Sopenharmony_ci	.probe = sd_probe,
202862306a36Sopenharmony_ci	.disconnect = gspca_disconnect,
202962306a36Sopenharmony_ci#ifdef CONFIG_PM
203062306a36Sopenharmony_ci	.suspend = gspca_suspend,
203162306a36Sopenharmony_ci	.resume = gspca_resume,
203262306a36Sopenharmony_ci	.reset_resume = gspca_resume,
203362306a36Sopenharmony_ci#endif
203462306a36Sopenharmony_ci};
203562306a36Sopenharmony_ci
203662306a36Sopenharmony_cimodule_usb_driver(sd_driver);
2037