162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Z-star vc0321 library
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 2009-2010 Jean-François Moine <http://moinejf.free.fr>
662306a36Sopenharmony_ci * Copyright (C) 2006 Koninski Artur takeshi87@o2.pl
762306a36Sopenharmony_ci * Copyright (C) 2006 Michel Xhaard
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#define MODULE_NAME "vc032x"
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#include "gspca.h"
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ciMODULE_AUTHOR("Jean-François Moine <http://moinejf.free.fr>");
1762306a36Sopenharmony_ciMODULE_DESCRIPTION("GSPCA/VC032X USB Camera Driver");
1862306a36Sopenharmony_ciMODULE_LICENSE("GPL");
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci/* specific webcam descriptor */
2162306a36Sopenharmony_cistruct sd {
2262306a36Sopenharmony_ci	struct gspca_dev gspca_dev;	/* !! must be the first item */
2362306a36Sopenharmony_ci	struct { /* hvflip cluster */
2462306a36Sopenharmony_ci		struct v4l2_ctrl *hflip;
2562306a36Sopenharmony_ci		struct v4l2_ctrl *vflip;
2662306a36Sopenharmony_ci	};
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci	u8 image_offset;
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci	u8 bridge;
3162306a36Sopenharmony_ci	u8 sensor;
3262306a36Sopenharmony_ci	u8 flags;
3362306a36Sopenharmony_ci#define FL_SAMSUNG 0x01		/* SamsungQ1 (2 sensors) */
3462306a36Sopenharmony_ci#define FL_HFLIP 0x02		/* mirrored by default */
3562306a36Sopenharmony_ci#define FL_VFLIP 0x04		/* vertical flipped by default */
3662306a36Sopenharmony_ci};
3762306a36Sopenharmony_cienum bridges {
3862306a36Sopenharmony_ci	BRIDGE_VC0321,
3962306a36Sopenharmony_ci	BRIDGE_VC0323,
4062306a36Sopenharmony_ci};
4162306a36Sopenharmony_cienum sensors {
4262306a36Sopenharmony_ci	SENSOR_HV7131R,
4362306a36Sopenharmony_ci	SENSOR_MI0360,
4462306a36Sopenharmony_ci	SENSOR_MI1310_SOC,
4562306a36Sopenharmony_ci	SENSOR_MI1320,
4662306a36Sopenharmony_ci	SENSOR_MI1320_SOC,
4762306a36Sopenharmony_ci	SENSOR_OV7660,
4862306a36Sopenharmony_ci	SENSOR_OV7670,
4962306a36Sopenharmony_ci	SENSOR_PO1200,
5062306a36Sopenharmony_ci	SENSOR_PO3130NC,
5162306a36Sopenharmony_ci	SENSOR_POxxxx,
5262306a36Sopenharmony_ci	NSENSORS
5362306a36Sopenharmony_ci};
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_cistatic const struct v4l2_pix_format vc0321_mode[] = {
5762306a36Sopenharmony_ci	{320, 240, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE,
5862306a36Sopenharmony_ci		.bytesperline = 320 * 2,
5962306a36Sopenharmony_ci		.sizeimage = 320 * 240 * 2,
6062306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_SRGB,
6162306a36Sopenharmony_ci		.priv = 1},
6262306a36Sopenharmony_ci	{640, 480, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE,
6362306a36Sopenharmony_ci		.bytesperline = 640 * 2,
6462306a36Sopenharmony_ci		.sizeimage = 640 * 480 * 2,
6562306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_SRGB,
6662306a36Sopenharmony_ci		.priv = 0},
6762306a36Sopenharmony_ci};
6862306a36Sopenharmony_cistatic const struct v4l2_pix_format vc0323_mode[] = {
6962306a36Sopenharmony_ci	{320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
7062306a36Sopenharmony_ci		.bytesperline = 320,
7162306a36Sopenharmony_ci		.sizeimage = 320 * 240 * 3 / 8 + 590,
7262306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_JPEG,
7362306a36Sopenharmony_ci		.priv = 1},
7462306a36Sopenharmony_ci	{640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
7562306a36Sopenharmony_ci		.bytesperline = 640,
7662306a36Sopenharmony_ci		.sizeimage = 640 * 480 * 3 / 8 + 590,
7762306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_JPEG,
7862306a36Sopenharmony_ci		.priv = 0},
7962306a36Sopenharmony_ci	{1280, 960, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, /* mi1310_soc only */
8062306a36Sopenharmony_ci		.bytesperline = 1280,
8162306a36Sopenharmony_ci		.sizeimage = 1280 * 960 * 3 / 8 + 590,
8262306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_JPEG,
8362306a36Sopenharmony_ci		.priv = 2},
8462306a36Sopenharmony_ci};
8562306a36Sopenharmony_cistatic const struct v4l2_pix_format bi_mode[] = {
8662306a36Sopenharmony_ci	{320, 240, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE,
8762306a36Sopenharmony_ci		.bytesperline = 320 * 2,
8862306a36Sopenharmony_ci		.sizeimage = 320 * 240 * 2,
8962306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_SRGB,
9062306a36Sopenharmony_ci		.priv = 2},
9162306a36Sopenharmony_ci	{640, 480, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE,
9262306a36Sopenharmony_ci		.bytesperline = 640 * 2,
9362306a36Sopenharmony_ci		.sizeimage = 640 * 480 * 2,
9462306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_SRGB,
9562306a36Sopenharmony_ci		.priv = 1},
9662306a36Sopenharmony_ci	{1280, 1024, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE,
9762306a36Sopenharmony_ci		.bytesperline = 1280 * 2,
9862306a36Sopenharmony_ci		.sizeimage = 1280 * 1024 * 2,
9962306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_SRGB,
10062306a36Sopenharmony_ci		.priv = 0},
10162306a36Sopenharmony_ci};
10262306a36Sopenharmony_cistatic const struct v4l2_pix_format svga_mode[] = {
10362306a36Sopenharmony_ci	{800, 600, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
10462306a36Sopenharmony_ci		.bytesperline = 800,
10562306a36Sopenharmony_ci		.sizeimage = 800 * 600 * 1 / 4 + 590,
10662306a36Sopenharmony_ci		.colorspace = V4L2_COLORSPACE_JPEG,
10762306a36Sopenharmony_ci		.priv = 0},
10862306a36Sopenharmony_ci};
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ci/* OV7660/7670 registers */
11162306a36Sopenharmony_ci#define OV7660_REG_MVFP 0x1e
11262306a36Sopenharmony_ci#define OV7660_MVFP_MIRROR	0x20
11362306a36Sopenharmony_ci#define OV7660_MVFP_VFLIP	0x10
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_cistatic const u8 mi0360_matrix[9] = {
11662306a36Sopenharmony_ci	0x50, 0xf8, 0xf8, 0xf5, 0x50, 0xfb, 0xff, 0xf1, 0x50
11762306a36Sopenharmony_ci};
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_cistatic const u8 mi0360_initVGA_JPG[][4] = {
12062306a36Sopenharmony_ci	{0xb0, 0x03, 0x19, 0xcc},
12162306a36Sopenharmony_ci	{0xb0, 0x04, 0x02, 0xcc},
12262306a36Sopenharmony_ci	{0xb3, 0x00, 0x24, 0xcc},
12362306a36Sopenharmony_ci	{0xb3, 0x00, 0x25, 0xcc},
12462306a36Sopenharmony_ci	{0xb3, 0x08, 0x01, 0xcc},
12562306a36Sopenharmony_ci	{0xb3, 0x09, 0x0c, 0xcc},
12662306a36Sopenharmony_ci	{0xb3, 0x05, 0x01, 0xcc},
12762306a36Sopenharmony_ci	{0xb3, 0x06, 0x03, 0xcc},
12862306a36Sopenharmony_ci	{0xb3, 0x03, 0x0a, 0xcc},
12962306a36Sopenharmony_ci	{0xb3, 0x20, 0x00, 0xcc},
13062306a36Sopenharmony_ci	{0xb3, 0x21, 0x00, 0xcc},
13162306a36Sopenharmony_ci	{0xb3, 0x22, 0x01, 0xcc},
13262306a36Sopenharmony_ci	{0xb3, 0x23, 0xe0, 0xcc},
13362306a36Sopenharmony_ci	{0xb3, 0x04, 0x05, 0xcc},
13462306a36Sopenharmony_ci	{0xb3, 0x14, 0x00, 0xcc},
13562306a36Sopenharmony_ci	{0xb3, 0x15, 0x00, 0xcc},
13662306a36Sopenharmony_ci	{0xb3, 0x16, 0x02, 0xcc},
13762306a36Sopenharmony_ci	{0xb3, 0x17, 0x7f, 0xcc},
13862306a36Sopenharmony_ci	{0xb3, 0x35, 0xdd, 0xcc},	/* i2c add: 5d */
13962306a36Sopenharmony_ci	{0xb3, 0x34, 0x02, 0xcc},
14062306a36Sopenharmony_ci	{0xb3, 0x00, 0x25, 0xcc},
14162306a36Sopenharmony_ci	{0xbc, 0x00, 0x71, 0xcc},
14262306a36Sopenharmony_ci	{0xb8, 0x00, 0x13, 0xcc},
14362306a36Sopenharmony_ci	{0xb8, 0x27, 0x20, 0xcc},
14462306a36Sopenharmony_ci	{0xb8, 0x2c, 0x50, 0xcc},
14562306a36Sopenharmony_ci	{0xb8, 0x2d, 0xf8, 0xcc},
14662306a36Sopenharmony_ci	{0xb8, 0x2e, 0xf8, 0xcc},
14762306a36Sopenharmony_ci	{0xb8, 0x2f, 0xf8, 0xcc},
14862306a36Sopenharmony_ci	{0xb8, 0x30, 0x50, 0xcc},
14962306a36Sopenharmony_ci	{0xb8, 0x31, 0xf8, 0xcc},
15062306a36Sopenharmony_ci	{0xb8, 0x32, 0xf8, 0xcc},
15162306a36Sopenharmony_ci	{0xb8, 0x33, 0xf8, 0xcc},
15262306a36Sopenharmony_ci	{0xb8, 0x34, 0x50, 0xcc},
15362306a36Sopenharmony_ci	{0xb8, 0x35, 0x00, 0xcc},
15462306a36Sopenharmony_ci	{0xb8, 0x36, 0x00, 0xcc},
15562306a36Sopenharmony_ci	{0xb8, 0x37, 0x00, 0xcc},
15662306a36Sopenharmony_ci	{0xb8, 0x01, 0x79, 0xcc},
15762306a36Sopenharmony_ci	{0xb8, 0x08, 0xe0, 0xcc},
15862306a36Sopenharmony_ci	{0xb3, 0x01, 0x41, 0xcc},
15962306a36Sopenharmony_ci	{0xb8, 0x01, 0x79, 0xcc},
16062306a36Sopenharmony_ci	{0xb8, 0x14, 0x18, 0xcc},
16162306a36Sopenharmony_ci	{0xb8, 0xb2, 0x0a, 0xcc},
16262306a36Sopenharmony_ci	{0xb8, 0xb4, 0x0a, 0xcc},
16362306a36Sopenharmony_ci	{0xb8, 0xb5, 0x0a, 0xcc},
16462306a36Sopenharmony_ci	{0xb8, 0xfe, 0x00, 0xcc},
16562306a36Sopenharmony_ci	{0xb8, 0xff, 0x28, 0xcc},
16662306a36Sopenharmony_ci	{0xb9, 0x00, 0x28, 0xcc},
16762306a36Sopenharmony_ci	{0xb9, 0x01, 0x28, 0xcc},
16862306a36Sopenharmony_ci	{0xb9, 0x02, 0x28, 0xcc},
16962306a36Sopenharmony_ci	{0xb9, 0x03, 0x00, 0xcc},
17062306a36Sopenharmony_ci	{0xb9, 0x04, 0x00, 0xcc},
17162306a36Sopenharmony_ci	{0xb9, 0x05, 0x3c, 0xcc},
17262306a36Sopenharmony_ci	{0xb9, 0x06, 0x3c, 0xcc},
17362306a36Sopenharmony_ci	{0xb9, 0x07, 0x3c, 0xcc},
17462306a36Sopenharmony_ci	{0xb9, 0x08, 0x3c, 0xcc},
17562306a36Sopenharmony_ci	{0xb8, 0x8e, 0x00, 0xcc},
17662306a36Sopenharmony_ci	{0xb8, 0x8f, 0xff, 0xcc},
17762306a36Sopenharmony_ci	{0xb8, 0x81, 0x09, 0xcc},
17862306a36Sopenharmony_ci	{0x31, 0x00, 0x00, 0xbb},
17962306a36Sopenharmony_ci	{0x09, 0x01, 0xc7, 0xbb},
18062306a36Sopenharmony_ci	{0x34, 0x01, 0x00, 0xbb},
18162306a36Sopenharmony_ci	{0x2b, 0x00, 0x28, 0xbb},
18262306a36Sopenharmony_ci	{0x2c, 0x00, 0x30, 0xbb},
18362306a36Sopenharmony_ci	{0x2d, 0x00, 0x30, 0xbb},
18462306a36Sopenharmony_ci	{0x2e, 0x00, 0x28, 0xbb},
18562306a36Sopenharmony_ci	{0x62, 0x04, 0x11, 0xbb},
18662306a36Sopenharmony_ci	{0x03, 0x01, 0xe0, 0xbb},
18762306a36Sopenharmony_ci	{0x2c, 0x00, 0x2c, 0xbb},
18862306a36Sopenharmony_ci	{0x20, 0xd0, 0x00, 0xbb},
18962306a36Sopenharmony_ci	{0x01, 0x00, 0x08, 0xbb},
19062306a36Sopenharmony_ci	{0x06, 0x00, 0x10, 0xbb},
19162306a36Sopenharmony_ci	{0x05, 0x00, 0x20, 0xbb},
19262306a36Sopenharmony_ci	{0x20, 0x00, 0x00, 0xbb},
19362306a36Sopenharmony_ci	{0xb6, 0x00, 0x00, 0xcc},
19462306a36Sopenharmony_ci	{0xb6, 0x03, 0x02, 0xcc},
19562306a36Sopenharmony_ci	{0xb6, 0x02, 0x80, 0xcc},
19662306a36Sopenharmony_ci	{0xb6, 0x05, 0x01, 0xcc},
19762306a36Sopenharmony_ci	{0xb6, 0x04, 0xe0, 0xcc},
19862306a36Sopenharmony_ci	{0xb6, 0x12, 0x78, 0xcc},
19962306a36Sopenharmony_ci	{0xb6, 0x18, 0x02, 0xcc},
20062306a36Sopenharmony_ci	{0xb6, 0x17, 0x58, 0xcc},
20162306a36Sopenharmony_ci	{0xb6, 0x16, 0x00, 0xcc},
20262306a36Sopenharmony_ci	{0xb6, 0x22, 0x12, 0xcc},
20362306a36Sopenharmony_ci	{0xb6, 0x23, 0x0b, 0xcc},
20462306a36Sopenharmony_ci	{0xb3, 0x02, 0x02, 0xcc},
20562306a36Sopenharmony_ci	{0xbf, 0xc0, 0x39, 0xcc},
20662306a36Sopenharmony_ci	{0xbf, 0xc1, 0x04, 0xcc},
20762306a36Sopenharmony_ci	{0xbf, 0xcc, 0x10, 0xcc},
20862306a36Sopenharmony_ci	{0xb9, 0x12, 0x00, 0xcc},
20962306a36Sopenharmony_ci	{0xb9, 0x13, 0x0a, 0xcc},
21062306a36Sopenharmony_ci	{0xb9, 0x14, 0x0a, 0xcc},
21162306a36Sopenharmony_ci	{0xb9, 0x15, 0x0a, 0xcc},
21262306a36Sopenharmony_ci	{0xb9, 0x16, 0x0a, 0xcc},
21362306a36Sopenharmony_ci	{0xb9, 0x18, 0x00, 0xcc},
21462306a36Sopenharmony_ci	{0xb9, 0x19, 0x0f, 0xcc},
21562306a36Sopenharmony_ci	{0xb9, 0x1a, 0x0f, 0xcc},
21662306a36Sopenharmony_ci	{0xb9, 0x1b, 0x0f, 0xcc},
21762306a36Sopenharmony_ci	{0xb9, 0x1c, 0x0f, 0xcc},
21862306a36Sopenharmony_ci	{0xb8, 0x8e, 0x00, 0xcc},
21962306a36Sopenharmony_ci	{0xb8, 0x8f, 0xff, 0xcc},
22062306a36Sopenharmony_ci	{0xb6, 0x12, 0xf8, 0xcc},
22162306a36Sopenharmony_ci	{0xb8, 0x0c, 0x20, 0xcc},
22262306a36Sopenharmony_ci	{0xb8, 0x0d, 0x70, 0xcc},
22362306a36Sopenharmony_ci	{0xb6, 0x13, 0x13, 0xcc},
22462306a36Sopenharmony_ci	{0x35, 0x00, 0x60, 0xbb},
22562306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},
22662306a36Sopenharmony_ci	{}
22762306a36Sopenharmony_ci};
22862306a36Sopenharmony_cistatic const u8 mi0360_initQVGA_JPG[][4] = {
22962306a36Sopenharmony_ci	{0xb0, 0x03, 0x19, 0xcc},
23062306a36Sopenharmony_ci	{0xb0, 0x04, 0x02, 0xcc},
23162306a36Sopenharmony_ci	{0xb3, 0x00, 0x24, 0xcc},
23262306a36Sopenharmony_ci	{0xb3, 0x00, 0x25, 0xcc},
23362306a36Sopenharmony_ci	{0xb3, 0x08, 0x01, 0xcc},
23462306a36Sopenharmony_ci	{0xb3, 0x09, 0x0c, 0xcc},
23562306a36Sopenharmony_ci	{0xb3, 0x05, 0x01, 0xcc},
23662306a36Sopenharmony_ci	{0xb3, 0x06, 0x03, 0xcc},
23762306a36Sopenharmony_ci	{0xb3, 0x03, 0x0a, 0xcc},
23862306a36Sopenharmony_ci	{0xb3, 0x20, 0x00, 0xcc},
23962306a36Sopenharmony_ci	{0xb3, 0x21, 0x00, 0xcc},
24062306a36Sopenharmony_ci	{0xb3, 0x22, 0x01, 0xcc},
24162306a36Sopenharmony_ci	{0xb3, 0x23, 0xe0, 0xcc},
24262306a36Sopenharmony_ci	{0xb3, 0x04, 0x05, 0xcc},
24362306a36Sopenharmony_ci	{0xb3, 0x14, 0x00, 0xcc},
24462306a36Sopenharmony_ci	{0xb3, 0x15, 0x00, 0xcc},
24562306a36Sopenharmony_ci	{0xb3, 0x16, 0x02, 0xcc},
24662306a36Sopenharmony_ci	{0xb3, 0x17, 0x7f, 0xcc},
24762306a36Sopenharmony_ci	{0xb3, 0x35, 0xdd, 0xcc},
24862306a36Sopenharmony_ci	{0xb3, 0x34, 0x02, 0xcc},
24962306a36Sopenharmony_ci	{0xb3, 0x00, 0x25, 0xcc},
25062306a36Sopenharmony_ci	{0xbc, 0x00, 0xd1, 0xcc},
25162306a36Sopenharmony_ci	{0xb8, 0x00, 0x13, 0xcc},
25262306a36Sopenharmony_ci	{0xb8, 0x27, 0x20, 0xcc},
25362306a36Sopenharmony_ci	{0xb8, 0x2c, 0x50, 0xcc},
25462306a36Sopenharmony_ci	{0xb8, 0x2d, 0xf8, 0xcc},
25562306a36Sopenharmony_ci	{0xb8, 0x2e, 0xf8, 0xcc},
25662306a36Sopenharmony_ci	{0xb8, 0x2f, 0xf8, 0xcc},
25762306a36Sopenharmony_ci	{0xb8, 0x30, 0x50, 0xcc},
25862306a36Sopenharmony_ci	{0xb8, 0x31, 0xf8, 0xcc},
25962306a36Sopenharmony_ci	{0xb8, 0x32, 0xf8, 0xcc},
26062306a36Sopenharmony_ci	{0xb8, 0x33, 0xf8, 0xcc},
26162306a36Sopenharmony_ci	{0xb8, 0x34, 0x50, 0xcc},
26262306a36Sopenharmony_ci	{0xb8, 0x35, 0x00, 0xcc},
26362306a36Sopenharmony_ci	{0xb8, 0x36, 0x00, 0xcc},
26462306a36Sopenharmony_ci	{0xb8, 0x37, 0x00, 0xcc},
26562306a36Sopenharmony_ci	{0xb8, 0x01, 0x79, 0xcc},
26662306a36Sopenharmony_ci	{0xb8, 0x08, 0xe0, 0xcc},
26762306a36Sopenharmony_ci	{0xb3, 0x01, 0x41, 0xcc},
26862306a36Sopenharmony_ci	{0xb8, 0x01, 0x79, 0xcc},
26962306a36Sopenharmony_ci	{0xb8, 0x14, 0x18, 0xcc},
27062306a36Sopenharmony_ci	{0xb8, 0xb2, 0x0a, 0xcc},
27162306a36Sopenharmony_ci	{0xb8, 0xb4, 0x0a, 0xcc},
27262306a36Sopenharmony_ci	{0xb8, 0xb5, 0x0a, 0xcc},
27362306a36Sopenharmony_ci	{0xb8, 0xfe, 0x00, 0xcc},
27462306a36Sopenharmony_ci	{0xb8, 0xff, 0x28, 0xcc},
27562306a36Sopenharmony_ci	{0xb9, 0x00, 0x28, 0xcc},
27662306a36Sopenharmony_ci	{0xb9, 0x01, 0x28, 0xcc},
27762306a36Sopenharmony_ci	{0xb9, 0x02, 0x28, 0xcc},
27862306a36Sopenharmony_ci	{0xb9, 0x03, 0x00, 0xcc},
27962306a36Sopenharmony_ci	{0xb9, 0x04, 0x00, 0xcc},
28062306a36Sopenharmony_ci	{0xb9, 0x05, 0x3c, 0xcc},
28162306a36Sopenharmony_ci	{0xb9, 0x06, 0x3c, 0xcc},
28262306a36Sopenharmony_ci	{0xb9, 0x07, 0x3c, 0xcc},
28362306a36Sopenharmony_ci	{0xb9, 0x08, 0x3c, 0xcc},
28462306a36Sopenharmony_ci	{0xb8, 0x8e, 0x00, 0xcc},
28562306a36Sopenharmony_ci	{0xb8, 0x8f, 0xff, 0xcc},
28662306a36Sopenharmony_ci	{0xb8, 0x81, 0x09, 0xcc},
28762306a36Sopenharmony_ci	{0x31, 0x00, 0x00, 0xbb},
28862306a36Sopenharmony_ci	{0x09, 0x01, 0xc7, 0xbb},
28962306a36Sopenharmony_ci	{0x34, 0x01, 0x00, 0xbb},
29062306a36Sopenharmony_ci	{0x2b, 0x00, 0x28, 0xbb},
29162306a36Sopenharmony_ci	{0x2c, 0x00, 0x30, 0xbb},
29262306a36Sopenharmony_ci	{0x2d, 0x00, 0x30, 0xbb},
29362306a36Sopenharmony_ci	{0x2e, 0x00, 0x28, 0xbb},
29462306a36Sopenharmony_ci	{0x62, 0x04, 0x11, 0xbb},
29562306a36Sopenharmony_ci	{0x03, 0x01, 0xe0, 0xbb},
29662306a36Sopenharmony_ci	{0x2c, 0x00, 0x2c, 0xbb},
29762306a36Sopenharmony_ci	{0x20, 0xd0, 0x00, 0xbb},
29862306a36Sopenharmony_ci	{0x01, 0x00, 0x08, 0xbb},
29962306a36Sopenharmony_ci	{0x06, 0x00, 0x10, 0xbb},
30062306a36Sopenharmony_ci	{0x05, 0x00, 0x20, 0xbb},
30162306a36Sopenharmony_ci	{0x20, 0x00, 0x00, 0xbb},
30262306a36Sopenharmony_ci	{0xb6, 0x00, 0x00, 0xcc},
30362306a36Sopenharmony_ci	{0xb6, 0x03, 0x01, 0xcc},
30462306a36Sopenharmony_ci	{0xb6, 0x02, 0x40, 0xcc},
30562306a36Sopenharmony_ci	{0xb6, 0x05, 0x00, 0xcc},
30662306a36Sopenharmony_ci	{0xb6, 0x04, 0xf0, 0xcc},
30762306a36Sopenharmony_ci	{0xb6, 0x12, 0x78, 0xcc},
30862306a36Sopenharmony_ci	{0xb6, 0x18, 0x00, 0xcc},
30962306a36Sopenharmony_ci	{0xb6, 0x17, 0x96, 0xcc},
31062306a36Sopenharmony_ci	{0xb6, 0x16, 0x00, 0xcc},
31162306a36Sopenharmony_ci	{0xb6, 0x22, 0x12, 0xcc},
31262306a36Sopenharmony_ci	{0xb6, 0x23, 0x0b, 0xcc},
31362306a36Sopenharmony_ci	{0xb3, 0x02, 0x02, 0xcc},
31462306a36Sopenharmony_ci	{0xbf, 0xc0, 0x39, 0xcc},
31562306a36Sopenharmony_ci	{0xbf, 0xc1, 0x04, 0xcc},
31662306a36Sopenharmony_ci	{0xbf, 0xcc, 0x10, 0xcc},
31762306a36Sopenharmony_ci	{0xb9, 0x12, 0x00, 0xcc},
31862306a36Sopenharmony_ci	{0xb9, 0x13, 0x0a, 0xcc},
31962306a36Sopenharmony_ci	{0xb9, 0x14, 0x0a, 0xcc},
32062306a36Sopenharmony_ci	{0xb9, 0x15, 0x0a, 0xcc},
32162306a36Sopenharmony_ci	{0xb9, 0x16, 0x0a, 0xcc},
32262306a36Sopenharmony_ci	{0xb9, 0x18, 0x00, 0xcc},
32362306a36Sopenharmony_ci	{0xb9, 0x19, 0x0f, 0xcc},
32462306a36Sopenharmony_ci	{0xb9, 0x1a, 0x0f, 0xcc},
32562306a36Sopenharmony_ci	{0xb9, 0x1b, 0x0f, 0xcc},
32662306a36Sopenharmony_ci	{0xb9, 0x1c, 0x0f, 0xcc},
32762306a36Sopenharmony_ci	{0xb8, 0x8e, 0x00, 0xcc},
32862306a36Sopenharmony_ci	{0xb8, 0x8f, 0xff, 0xcc},
32962306a36Sopenharmony_ci	{0xb6, 0x12, 0xf8, 0xcc},
33062306a36Sopenharmony_ci	{0xb6, 0x13, 0x13, 0xcc},
33162306a36Sopenharmony_ci	{0xbc, 0x02, 0x18, 0xcc},
33262306a36Sopenharmony_ci	{0xbc, 0x03, 0x50, 0xcc},
33362306a36Sopenharmony_ci	{0xbc, 0x04, 0x18, 0xcc},
33462306a36Sopenharmony_ci	{0xbc, 0x05, 0x00, 0xcc},
33562306a36Sopenharmony_ci	{0xbc, 0x06, 0x00, 0xcc},
33662306a36Sopenharmony_ci	{0xbc, 0x08, 0x30, 0xcc},
33762306a36Sopenharmony_ci	{0xbc, 0x09, 0x40, 0xcc},
33862306a36Sopenharmony_ci	{0xbc, 0x0a, 0x10, 0xcc},
33962306a36Sopenharmony_ci	{0xb8, 0x0c, 0x20, 0xcc},
34062306a36Sopenharmony_ci	{0xb8, 0x0d, 0x70, 0xcc},
34162306a36Sopenharmony_ci	{0xbc, 0x0b, 0x00, 0xcc},
34262306a36Sopenharmony_ci	{0xbc, 0x0c, 0x00, 0xcc},
34362306a36Sopenharmony_ci	{0x35, 0x00, 0xef, 0xbb},
34462306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},
34562306a36Sopenharmony_ci	{}
34662306a36Sopenharmony_ci};
34762306a36Sopenharmony_ci
34862306a36Sopenharmony_cistatic const u8 mi1310_socinitVGA_JPG[][4] = {
34962306a36Sopenharmony_ci	{0xb0, 0x03, 0x19, 0xcc},
35062306a36Sopenharmony_ci	{0xb0, 0x04, 0x02, 0xcc},
35162306a36Sopenharmony_ci	{0xb3, 0x00, 0x64, 0xcc},
35262306a36Sopenharmony_ci	{0xb3, 0x00, 0x65, 0xcc},
35362306a36Sopenharmony_ci	{0xb3, 0x05, 0x00, 0xcc},
35462306a36Sopenharmony_ci	{0xb3, 0x06, 0x00, 0xcc},
35562306a36Sopenharmony_ci	{0xb3, 0x08, 0x01, 0xcc},
35662306a36Sopenharmony_ci	{0xb3, 0x09, 0x0c, 0xcc},
35762306a36Sopenharmony_ci	{0xb3, 0x34, 0x02, 0xcc},
35862306a36Sopenharmony_ci	{0xb3, 0x35, 0xdd, 0xcc},	/* i2c add: 5d */
35962306a36Sopenharmony_ci	{0xb3, 0x02, 0x00, 0xcc},
36062306a36Sopenharmony_ci	{0xb3, 0x03, 0x0a, 0xcc},
36162306a36Sopenharmony_ci	{0xb3, 0x04, 0x05, 0xcc},
36262306a36Sopenharmony_ci	{0xb3, 0x20, 0x00, 0xcc},
36362306a36Sopenharmony_ci	{0xb3, 0x21, 0x00, 0xcc},
36462306a36Sopenharmony_ci	{0xb3, 0x22, 0x03, 0xcc},
36562306a36Sopenharmony_ci	{0xb3, 0x23, 0xc0, 0xcc},
36662306a36Sopenharmony_ci	{0xb3, 0x14, 0x00, 0xcc},
36762306a36Sopenharmony_ci	{0xb3, 0x15, 0x00, 0xcc},
36862306a36Sopenharmony_ci	{0xb3, 0x16, 0x04, 0xcc},
36962306a36Sopenharmony_ci	{0xb3, 0x17, 0xff, 0xcc},
37062306a36Sopenharmony_ci	{0xb3, 0x00, 0x65, 0xcc},
37162306a36Sopenharmony_ci	{0xb8, 0x00, 0x00, 0xcc},
37262306a36Sopenharmony_ci	{0xbc, 0x00, 0xd0, 0xcc},
37362306a36Sopenharmony_ci	{0xbc, 0x01, 0x01, 0xcc},
37462306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
37562306a36Sopenharmony_ci	{0xc8, 0x9f, 0x0b, 0xbb},
37662306a36Sopenharmony_ci	{0x5b, 0x00, 0x01, 0xbb},
37762306a36Sopenharmony_ci	{0x2f, 0xde, 0x20, 0xbb},
37862306a36Sopenharmony_ci	{0xf0, 0x00, 0x00, 0xbb},
37962306a36Sopenharmony_ci	{0x20, 0x03, 0x02, 0xbb},	/* h/v flip */
38062306a36Sopenharmony_ci	{0xf0, 0x00, 0x01, 0xbb},
38162306a36Sopenharmony_ci	{0x05, 0x00, 0x07, 0xbb},
38262306a36Sopenharmony_ci	{0x34, 0x00, 0x00, 0xbb},
38362306a36Sopenharmony_ci	{0x35, 0xff, 0x00, 0xbb},
38462306a36Sopenharmony_ci	{0xdc, 0x07, 0x02, 0xbb},
38562306a36Sopenharmony_ci	{0xdd, 0x3c, 0x18, 0xbb},
38662306a36Sopenharmony_ci	{0xde, 0x92, 0x6d, 0xbb},
38762306a36Sopenharmony_ci	{0xdf, 0xcd, 0xb1, 0xbb},
38862306a36Sopenharmony_ci	{0xe0, 0xff, 0xe7, 0xbb},
38962306a36Sopenharmony_ci	{0x06, 0xf0, 0x0d, 0xbb},
39062306a36Sopenharmony_ci	{0x06, 0x70, 0x0e, 0xbb},
39162306a36Sopenharmony_ci	{0x4c, 0x00, 0x01, 0xbb},
39262306a36Sopenharmony_ci	{0x4d, 0x00, 0x01, 0xbb},
39362306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
39462306a36Sopenharmony_ci	{0x2e, 0x0c, 0x55, 0xbb},
39562306a36Sopenharmony_ci	{0x21, 0xb6, 0x6e, 0xbb},
39662306a36Sopenharmony_ci	{0x36, 0x30, 0x10, 0xbb},
39762306a36Sopenharmony_ci	{0x37, 0x00, 0xc1, 0xbb},
39862306a36Sopenharmony_ci	{0xf0, 0x00, 0x00, 0xbb},
39962306a36Sopenharmony_ci	{0x07, 0x00, 0x84, 0xbb},
40062306a36Sopenharmony_ci	{0x08, 0x02, 0x4a, 0xbb},
40162306a36Sopenharmony_ci	{0x05, 0x01, 0x10, 0xbb},
40262306a36Sopenharmony_ci	{0x06, 0x00, 0x39, 0xbb},
40362306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
40462306a36Sopenharmony_ci	{0x58, 0x02, 0x67, 0xbb},
40562306a36Sopenharmony_ci	{0x57, 0x02, 0x00, 0xbb},
40662306a36Sopenharmony_ci	{0x5a, 0x02, 0x67, 0xbb},
40762306a36Sopenharmony_ci	{0x59, 0x02, 0x00, 0xbb},
40862306a36Sopenharmony_ci	{0x5c, 0x12, 0x0d, 0xbb},
40962306a36Sopenharmony_ci	{0x5d, 0x16, 0x11, 0xbb},
41062306a36Sopenharmony_ci	{0x39, 0x06, 0x18, 0xbb},
41162306a36Sopenharmony_ci	{0x3a, 0x06, 0x18, 0xbb},
41262306a36Sopenharmony_ci	{0x3b, 0x06, 0x18, 0xbb},
41362306a36Sopenharmony_ci	{0x3c, 0x06, 0x18, 0xbb},
41462306a36Sopenharmony_ci	{0x64, 0x7b, 0x5b, 0xbb},
41562306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
41662306a36Sopenharmony_ci	{0x36, 0x30, 0x10, 0xbb},
41762306a36Sopenharmony_ci	{0x37, 0x00, 0xc0, 0xbb},
41862306a36Sopenharmony_ci	{0xbc, 0x0e, 0x00, 0xcc},
41962306a36Sopenharmony_ci	{0xbc, 0x0f, 0x05, 0xcc},
42062306a36Sopenharmony_ci	{0xbc, 0x10, 0xc0, 0xcc},
42162306a36Sopenharmony_ci	{0xbc, 0x11, 0x03, 0xcc},
42262306a36Sopenharmony_ci	{0xb6, 0x00, 0x00, 0xcc},
42362306a36Sopenharmony_ci	{0xb6, 0x03, 0x02, 0xcc},
42462306a36Sopenharmony_ci	{0xb6, 0x02, 0x80, 0xcc},
42562306a36Sopenharmony_ci	{0xb6, 0x05, 0x01, 0xcc},
42662306a36Sopenharmony_ci	{0xb6, 0x04, 0xe0, 0xcc},
42762306a36Sopenharmony_ci	{0xb6, 0x12, 0xf8, 0xcc},
42862306a36Sopenharmony_ci	{0xb6, 0x13, 0x25, 0xcc},
42962306a36Sopenharmony_ci	{0xb6, 0x18, 0x02, 0xcc},
43062306a36Sopenharmony_ci	{0xb6, 0x17, 0x58, 0xcc},
43162306a36Sopenharmony_ci	{0xb6, 0x16, 0x00, 0xcc},
43262306a36Sopenharmony_ci	{0xb6, 0x22, 0x12, 0xcc},
43362306a36Sopenharmony_ci	{0xb6, 0x23, 0x0b, 0xcc},
43462306a36Sopenharmony_ci	{0xbf, 0xc0, 0x39, 0xcc},
43562306a36Sopenharmony_ci	{0xbf, 0xc1, 0x04, 0xcc},
43662306a36Sopenharmony_ci	{0xbf, 0xcc, 0x00, 0xcc},
43762306a36Sopenharmony_ci	{0xbc, 0x02, 0x18, 0xcc},
43862306a36Sopenharmony_ci	{0xbc, 0x03, 0x50, 0xcc},
43962306a36Sopenharmony_ci	{0xbc, 0x04, 0x18, 0xcc},
44062306a36Sopenharmony_ci	{0xbc, 0x05, 0x00, 0xcc},
44162306a36Sopenharmony_ci	{0xbc, 0x06, 0x00, 0xcc},
44262306a36Sopenharmony_ci	{0xbc, 0x08, 0x30, 0xcc},
44362306a36Sopenharmony_ci	{0xbc, 0x09, 0x40, 0xcc},
44462306a36Sopenharmony_ci	{0xbc, 0x0a, 0x10, 0xcc},
44562306a36Sopenharmony_ci	{0xbc, 0x0b, 0x00, 0xcc},
44662306a36Sopenharmony_ci	{0xbc, 0x0c, 0x00, 0xcc},
44762306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},
44862306a36Sopenharmony_ci	{0xf0, 0x00, 0x01, 0xbb},
44962306a36Sopenharmony_ci	{0x80, 0x00, 0x03, 0xbb},
45062306a36Sopenharmony_ci	{0x81, 0xc7, 0x14, 0xbb},
45162306a36Sopenharmony_ci	{0x82, 0xeb, 0xe8, 0xbb},
45262306a36Sopenharmony_ci	{0x83, 0xfe, 0xf4, 0xbb},
45362306a36Sopenharmony_ci	{0x84, 0xcd, 0x10, 0xbb},
45462306a36Sopenharmony_ci	{0x85, 0xf3, 0xee, 0xbb},
45562306a36Sopenharmony_ci	{0x86, 0xff, 0xf1, 0xbb},
45662306a36Sopenharmony_ci	{0x87, 0xcd, 0x10, 0xbb},
45762306a36Sopenharmony_ci	{0x88, 0xf3, 0xee, 0xbb},
45862306a36Sopenharmony_ci	{0x89, 0x01, 0xf1, 0xbb},
45962306a36Sopenharmony_ci	{0x8a, 0xe5, 0x17, 0xbb},
46062306a36Sopenharmony_ci	{0x8b, 0xe8, 0xe2, 0xbb},
46162306a36Sopenharmony_ci	{0x8c, 0xf7, 0xed, 0xbb},
46262306a36Sopenharmony_ci	{0x8d, 0x00, 0xff, 0xbb},
46362306a36Sopenharmony_ci	{0x8e, 0xec, 0x10, 0xbb},
46462306a36Sopenharmony_ci	{0x8f, 0xf0, 0xed, 0xbb},
46562306a36Sopenharmony_ci	{0x90, 0xf9, 0xf2, 0xbb},
46662306a36Sopenharmony_ci	{0x91, 0x00, 0x00, 0xbb},
46762306a36Sopenharmony_ci	{0x92, 0xe9, 0x0d, 0xbb},
46862306a36Sopenharmony_ci	{0x93, 0xf4, 0xf2, 0xbb},
46962306a36Sopenharmony_ci	{0x94, 0xfb, 0xf5, 0xbb},
47062306a36Sopenharmony_ci	{0x95, 0x00, 0xff, 0xbb},
47162306a36Sopenharmony_ci	{0xb6, 0x0f, 0x08, 0xbb},
47262306a36Sopenharmony_ci	{0xb7, 0x3d, 0x16, 0xbb},
47362306a36Sopenharmony_ci	{0xb8, 0x0c, 0x04, 0xbb},
47462306a36Sopenharmony_ci	{0xb9, 0x1c, 0x07, 0xbb},
47562306a36Sopenharmony_ci	{0xba, 0x0a, 0x03, 0xbb},
47662306a36Sopenharmony_ci	{0xbb, 0x1b, 0x09, 0xbb},
47762306a36Sopenharmony_ci	{0xbc, 0x17, 0x0d, 0xbb},
47862306a36Sopenharmony_ci	{0xbd, 0x23, 0x1d, 0xbb},
47962306a36Sopenharmony_ci	{0xbe, 0x00, 0x28, 0xbb},
48062306a36Sopenharmony_ci	{0xbf, 0x11, 0x09, 0xbb},
48162306a36Sopenharmony_ci	{0xc0, 0x16, 0x15, 0xbb},
48262306a36Sopenharmony_ci	{0xc1, 0x00, 0x1b, 0xbb},
48362306a36Sopenharmony_ci	{0xc2, 0x0e, 0x07, 0xbb},
48462306a36Sopenharmony_ci	{0xc3, 0x14, 0x10, 0xbb},
48562306a36Sopenharmony_ci	{0xc4, 0x00, 0x17, 0xbb},
48662306a36Sopenharmony_ci	{0x06, 0x74, 0x8e, 0xbb},
48762306a36Sopenharmony_ci	{0xf0, 0x00, 0x01, 0xbb},
48862306a36Sopenharmony_ci	{0x06, 0xf4, 0x8e, 0xbb},
48962306a36Sopenharmony_ci	{0x00, 0x00, 0x50, 0xdd},
49062306a36Sopenharmony_ci	{0x06, 0x74, 0x8e, 0xbb},
49162306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
49262306a36Sopenharmony_ci	{0x24, 0x50, 0x20, 0xbb},
49362306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
49462306a36Sopenharmony_ci	{0x34, 0x0c, 0x50, 0xbb},
49562306a36Sopenharmony_ci	{0xb3, 0x01, 0x41, 0xcc},
49662306a36Sopenharmony_ci	{0xf0, 0x00, 0x00, 0xbb},
49762306a36Sopenharmony_ci	{0x03, 0x03, 0xc0, 0xbb},
49862306a36Sopenharmony_ci	{},
49962306a36Sopenharmony_ci};
50062306a36Sopenharmony_cistatic const u8 mi1310_socinitQVGA_JPG[][4] = {
50162306a36Sopenharmony_ci	{0xb0, 0x03, 0x19, 0xcc},	{0xb0, 0x04, 0x02, 0xcc},
50262306a36Sopenharmony_ci	{0xb3, 0x00, 0x64, 0xcc},	{0xb3, 0x00, 0x65, 0xcc},
50362306a36Sopenharmony_ci	{0xb3, 0x05, 0x00, 0xcc},	{0xb3, 0x06, 0x00, 0xcc},
50462306a36Sopenharmony_ci	{0xb3, 0x08, 0x01, 0xcc},	{0xb3, 0x09, 0x0c, 0xcc},
50562306a36Sopenharmony_ci	{0xb3, 0x34, 0x02, 0xcc},	{0xb3, 0x35, 0xdd, 0xcc},
50662306a36Sopenharmony_ci	{0xb3, 0x02, 0x00, 0xcc},	{0xb3, 0x03, 0x0a, 0xcc},
50762306a36Sopenharmony_ci	{0xb3, 0x04, 0x05, 0xcc},	{0xb3, 0x20, 0x00, 0xcc},
50862306a36Sopenharmony_ci	{0xb3, 0x21, 0x00, 0xcc},	{0xb3, 0x22, 0x03, 0xcc},
50962306a36Sopenharmony_ci	{0xb3, 0x23, 0xc0, 0xcc},	{0xb3, 0x14, 0x00, 0xcc},
51062306a36Sopenharmony_ci	{0xb3, 0x15, 0x00, 0xcc},	{0xb3, 0x16, 0x04, 0xcc},
51162306a36Sopenharmony_ci	{0xb3, 0x17, 0xff, 0xcc},	{0xb3, 0x00, 0x65, 0xcc},
51262306a36Sopenharmony_ci	{0xb8, 0x00, 0x00, 0xcc},	{0xbc, 0x00, 0xf0, 0xcc},
51362306a36Sopenharmony_ci	{0xbc, 0x01, 0x01, 0xcc},	{0xf0, 0x00, 0x02, 0xbb},
51462306a36Sopenharmony_ci	{0xc8, 0x9f, 0x0b, 0xbb},	{0x5b, 0x00, 0x01, 0xbb},
51562306a36Sopenharmony_ci	{0x2f, 0xde, 0x20, 0xbb},	{0xf0, 0x00, 0x00, 0xbb},
51662306a36Sopenharmony_ci	{0x20, 0x03, 0x02, 0xbb},	/* h/v flip */
51762306a36Sopenharmony_ci	{0xf0, 0x00, 0x01, 0xbb},
51862306a36Sopenharmony_ci	{0x05, 0x00, 0x07, 0xbb},	{0x34, 0x00, 0x00, 0xbb},
51962306a36Sopenharmony_ci	{0x35, 0xff, 0x00, 0xbb},	{0xdc, 0x07, 0x02, 0xbb},
52062306a36Sopenharmony_ci	{0xdd, 0x3c, 0x18, 0xbb},	{0xde, 0x92, 0x6d, 0xbb},
52162306a36Sopenharmony_ci	{0xdf, 0xcd, 0xb1, 0xbb},	{0xe0, 0xff, 0xe7, 0xbb},
52262306a36Sopenharmony_ci	{0x06, 0xf0, 0x0d, 0xbb},	{0x06, 0x70, 0x0e, 0xbb},
52362306a36Sopenharmony_ci	{0x4c, 0x00, 0x01, 0xbb},	{0x4d, 0x00, 0x01, 0xbb},
52462306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},	{0x2e, 0x0c, 0x55, 0xbb},
52562306a36Sopenharmony_ci	{0x21, 0xb6, 0x6e, 0xbb},	{0x36, 0x30, 0x10, 0xbb},
52662306a36Sopenharmony_ci	{0x37, 0x00, 0xc1, 0xbb},	{0xf0, 0x00, 0x00, 0xbb},
52762306a36Sopenharmony_ci	{0x07, 0x00, 0x84, 0xbb},	{0x08, 0x02, 0x4a, 0xbb},
52862306a36Sopenharmony_ci	{0x05, 0x01, 0x10, 0xbb},	{0x06, 0x00, 0x39, 0xbb},
52962306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},	{0x58, 0x02, 0x67, 0xbb},
53062306a36Sopenharmony_ci	{0x57, 0x02, 0x00, 0xbb},	{0x5a, 0x02, 0x67, 0xbb},
53162306a36Sopenharmony_ci	{0x59, 0x02, 0x00, 0xbb},	{0x5c, 0x12, 0x0d, 0xbb},
53262306a36Sopenharmony_ci	{0x5d, 0x16, 0x11, 0xbb},	{0x39, 0x06, 0x18, 0xbb},
53362306a36Sopenharmony_ci	{0x3a, 0x06, 0x18, 0xbb},	{0x3b, 0x06, 0x18, 0xbb},
53462306a36Sopenharmony_ci	{0x3c, 0x06, 0x18, 0xbb},	{0x64, 0x7b, 0x5b, 0xbb},
53562306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},	{0x36, 0x30, 0x10, 0xbb},
53662306a36Sopenharmony_ci	{0x37, 0x00, 0xc0, 0xbb},	{0xbc, 0x0e, 0x00, 0xcc},
53762306a36Sopenharmony_ci	{0xbc, 0x0f, 0x05, 0xcc},	{0xbc, 0x10, 0xc0, 0xcc},
53862306a36Sopenharmony_ci	{0xbc, 0x11, 0x03, 0xcc},	{0xb6, 0x00, 0x00, 0xcc},
53962306a36Sopenharmony_ci	{0xb6, 0x03, 0x01, 0xcc},	{0xb6, 0x02, 0x40, 0xcc},
54062306a36Sopenharmony_ci	{0xb6, 0x05, 0x00, 0xcc},	{0xb6, 0x04, 0xf0, 0xcc},
54162306a36Sopenharmony_ci	{0xb6, 0x12, 0xf8, 0xcc},	{0xb6, 0x13, 0x25, 0xcc},
54262306a36Sopenharmony_ci	{0xb6, 0x18, 0x00, 0xcc},	{0xb6, 0x17, 0x96, 0xcc},
54362306a36Sopenharmony_ci	{0xb6, 0x16, 0x00, 0xcc},	{0xb6, 0x22, 0x12, 0xcc},
54462306a36Sopenharmony_ci	{0xb6, 0x23, 0x0b, 0xcc},	{0xbf, 0xc0, 0x39, 0xcc},
54562306a36Sopenharmony_ci	{0xbf, 0xc1, 0x04, 0xcc},	{0xbf, 0xcc, 0x00, 0xcc},
54662306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},	{0xf0, 0x00, 0x01, 0xbb},
54762306a36Sopenharmony_ci	{0x80, 0x00, 0x03, 0xbb},	{0x81, 0xc7, 0x14, 0xbb},
54862306a36Sopenharmony_ci	{0x82, 0xeb, 0xe8, 0xbb},	{0x83, 0xfe, 0xf4, 0xbb},
54962306a36Sopenharmony_ci	{0x84, 0xcd, 0x10, 0xbb},	{0x85, 0xf3, 0xee, 0xbb},
55062306a36Sopenharmony_ci	{0x86, 0xff, 0xf1, 0xbb},	{0x87, 0xcd, 0x10, 0xbb},
55162306a36Sopenharmony_ci	{0x88, 0xf3, 0xee, 0xbb},	{0x89, 0x01, 0xf1, 0xbb},
55262306a36Sopenharmony_ci	{0x8a, 0xe5, 0x17, 0xbb},	{0x8b, 0xe8, 0xe2, 0xbb},
55362306a36Sopenharmony_ci	{0x8c, 0xf7, 0xed, 0xbb},	{0x8d, 0x00, 0xff, 0xbb},
55462306a36Sopenharmony_ci	{0x8e, 0xec, 0x10, 0xbb},	{0x8f, 0xf0, 0xed, 0xbb},
55562306a36Sopenharmony_ci	{0x90, 0xf9, 0xf2, 0xbb},	{0x91, 0x00, 0x00, 0xbb},
55662306a36Sopenharmony_ci	{0x92, 0xe9, 0x0d, 0xbb},	{0x93, 0xf4, 0xf2, 0xbb},
55762306a36Sopenharmony_ci	{0x94, 0xfb, 0xf5, 0xbb},	{0x95, 0x00, 0xff, 0xbb},
55862306a36Sopenharmony_ci	{0xb6, 0x0f, 0x08, 0xbb},	{0xb7, 0x3d, 0x16, 0xbb},
55962306a36Sopenharmony_ci	{0xb8, 0x0c, 0x04, 0xbb},	{0xb9, 0x1c, 0x07, 0xbb},
56062306a36Sopenharmony_ci	{0xba, 0x0a, 0x03, 0xbb},	{0xbb, 0x1b, 0x09, 0xbb},
56162306a36Sopenharmony_ci	{0xbc, 0x17, 0x0d, 0xbb},	{0xbd, 0x23, 0x1d, 0xbb},
56262306a36Sopenharmony_ci	{0xbe, 0x00, 0x28, 0xbb},	{0xbf, 0x11, 0x09, 0xbb},
56362306a36Sopenharmony_ci	{0xc0, 0x16, 0x15, 0xbb},	{0xc1, 0x00, 0x1b, 0xbb},
56462306a36Sopenharmony_ci	{0xc2, 0x0e, 0x07, 0xbb},	{0xc3, 0x14, 0x10, 0xbb},
56562306a36Sopenharmony_ci	{0xc4, 0x00, 0x17, 0xbb},	{0x06, 0x74, 0x8e, 0xbb},
56662306a36Sopenharmony_ci	{0xf0, 0x00, 0x01, 0xbb},	{0x06, 0xf4, 0x8e, 0xbb},
56762306a36Sopenharmony_ci	{0x00, 0x00, 0x50, 0xdd},	{0x06, 0x74, 0x8e, 0xbb},
56862306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},	{0x24, 0x50, 0x20, 0xbb},
56962306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},	{0x34, 0x0c, 0x50, 0xbb},
57062306a36Sopenharmony_ci	{0xb3, 0x01, 0x41, 0xcc},	{0xf0, 0x00, 0x00, 0xbb},
57162306a36Sopenharmony_ci	{0x03, 0x03, 0xc0, 0xbb},
57262306a36Sopenharmony_ci	{},
57362306a36Sopenharmony_ci};
57462306a36Sopenharmony_cistatic const u8 mi1310_soc_InitSXGA_JPG[][4] = {
57562306a36Sopenharmony_ci	{0xb0, 0x03, 0x19, 0xcc},
57662306a36Sopenharmony_ci	{0xb0, 0x04, 0x02, 0xcc},
57762306a36Sopenharmony_ci	{0xb3, 0x00, 0x64, 0xcc},
57862306a36Sopenharmony_ci	{0xb3, 0x00, 0x65, 0xcc},
57962306a36Sopenharmony_ci	{0xb3, 0x05, 0x00, 0xcc},
58062306a36Sopenharmony_ci	{0xb3, 0x06, 0x00, 0xcc},
58162306a36Sopenharmony_ci	{0xb3, 0x08, 0x01, 0xcc},
58262306a36Sopenharmony_ci	{0xb3, 0x09, 0x0c, 0xcc},
58362306a36Sopenharmony_ci	{0xb3, 0x34, 0x02, 0xcc},
58462306a36Sopenharmony_ci	{0xb3, 0x35, 0xdd, 0xcc},
58562306a36Sopenharmony_ci	{0xb3, 0x02, 0x00, 0xcc},
58662306a36Sopenharmony_ci	{0xb3, 0x03, 0x0a, 0xcc},
58762306a36Sopenharmony_ci	{0xb3, 0x04, 0x0d, 0xcc},
58862306a36Sopenharmony_ci	{0xb3, 0x20, 0x00, 0xcc},
58962306a36Sopenharmony_ci	{0xb3, 0x21, 0x00, 0xcc},
59062306a36Sopenharmony_ci	{0xb3, 0x22, 0x03, 0xcc},
59162306a36Sopenharmony_ci	{0xb3, 0x23, 0xc0, 0xcc},
59262306a36Sopenharmony_ci	{0xb3, 0x14, 0x00, 0xcc},
59362306a36Sopenharmony_ci	{0xb3, 0x15, 0x00, 0xcc},
59462306a36Sopenharmony_ci	{0xb3, 0x16, 0x04, 0xcc},
59562306a36Sopenharmony_ci	{0xb3, 0x17, 0xff, 0xcc},
59662306a36Sopenharmony_ci	{0xb3, 0x00, 0x65, 0xcc},
59762306a36Sopenharmony_ci	{0xb8, 0x00, 0x00, 0xcc},
59862306a36Sopenharmony_ci	{0xbc, 0x00, 0x70, 0xcc},
59962306a36Sopenharmony_ci	{0xbc, 0x01, 0x01, 0xcc},
60062306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
60162306a36Sopenharmony_ci	{0xc8, 0x9f, 0x0b, 0xbb},
60262306a36Sopenharmony_ci	{0x5b, 0x00, 0x01, 0xbb},
60362306a36Sopenharmony_ci	{0xf0, 0x00, 0x00, 0xbb},
60462306a36Sopenharmony_ci	{0x20, 0x03, 0x02, 0xbb},	/* h/v flip */
60562306a36Sopenharmony_ci	{0xf0, 0x00, 0x01, 0xbb},
60662306a36Sopenharmony_ci	{0x05, 0x00, 0x07, 0xbb},
60762306a36Sopenharmony_ci	{0x34, 0x00, 0x00, 0xbb},
60862306a36Sopenharmony_ci	{0x35, 0xff, 0x00, 0xbb},
60962306a36Sopenharmony_ci	{0xdc, 0x07, 0x02, 0xbb},
61062306a36Sopenharmony_ci	{0xdd, 0x3c, 0x18, 0xbb},
61162306a36Sopenharmony_ci	{0xde, 0x92, 0x6d, 0xbb},
61262306a36Sopenharmony_ci	{0xdf, 0xcd, 0xb1, 0xbb},
61362306a36Sopenharmony_ci	{0xe0, 0xff, 0xe7, 0xbb},
61462306a36Sopenharmony_ci	{0x06, 0xf0, 0x0d, 0xbb},
61562306a36Sopenharmony_ci	{0x06, 0x70, 0x0e, 0xbb},
61662306a36Sopenharmony_ci	{0x4c, 0x00, 0x01, 0xbb},
61762306a36Sopenharmony_ci	{0x4d, 0x00, 0x01, 0xbb},
61862306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
61962306a36Sopenharmony_ci	{0x2e, 0x0c, 0x60, 0xbb},
62062306a36Sopenharmony_ci	{0x21, 0xb6, 0x6e, 0xbb},
62162306a36Sopenharmony_ci	{0x37, 0x01, 0x40, 0xbb},
62262306a36Sopenharmony_ci	{0xf0, 0x00, 0x00, 0xbb},
62362306a36Sopenharmony_ci	{0x07, 0x00, 0x84, 0xbb},
62462306a36Sopenharmony_ci	{0x08, 0x02, 0x4a, 0xbb},
62562306a36Sopenharmony_ci	{0x05, 0x01, 0x10, 0xbb},
62662306a36Sopenharmony_ci	{0x06, 0x00, 0x39, 0xbb},
62762306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
62862306a36Sopenharmony_ci	{0x58, 0x02, 0x67, 0xbb},
62962306a36Sopenharmony_ci	{0x57, 0x02, 0x00, 0xbb},
63062306a36Sopenharmony_ci	{0x5a, 0x02, 0x67, 0xbb},
63162306a36Sopenharmony_ci	{0x59, 0x02, 0x00, 0xbb},
63262306a36Sopenharmony_ci	{0x5c, 0x12, 0x0d, 0xbb},
63362306a36Sopenharmony_ci	{0x5d, 0x16, 0x11, 0xbb},
63462306a36Sopenharmony_ci	{0x39, 0x06, 0x18, 0xbb},
63562306a36Sopenharmony_ci	{0x3a, 0x06, 0x18, 0xbb},
63662306a36Sopenharmony_ci	{0x3b, 0x06, 0x18, 0xbb},
63762306a36Sopenharmony_ci	{0x3c, 0x06, 0x18, 0xbb},
63862306a36Sopenharmony_ci	{0x64, 0x7b, 0x5b, 0xbb},
63962306a36Sopenharmony_ci	{0xb6, 0x00, 0x00, 0xcc},
64062306a36Sopenharmony_ci	{0xb6, 0x03, 0x05, 0xcc},
64162306a36Sopenharmony_ci	{0xb6, 0x02, 0x00, 0xcc},
64262306a36Sopenharmony_ci	{0xb6, 0x05, 0x03, 0xcc},
64362306a36Sopenharmony_ci	{0xb6, 0x04, 0xc0, 0xcc},
64462306a36Sopenharmony_ci	{0xb6, 0x12, 0xf8, 0xcc},
64562306a36Sopenharmony_ci	{0xb6, 0x13, 0x29, 0xcc},
64662306a36Sopenharmony_ci	{0xb6, 0x18, 0x09, 0xcc},
64762306a36Sopenharmony_ci	{0xb6, 0x17, 0x60, 0xcc},
64862306a36Sopenharmony_ci	{0xb6, 0x16, 0x00, 0xcc},
64962306a36Sopenharmony_ci	{0xb6, 0x22, 0x12, 0xcc},
65062306a36Sopenharmony_ci	{0xb6, 0x23, 0x0b, 0xcc},
65162306a36Sopenharmony_ci	{0xbf, 0xc0, 0x39, 0xcc},
65262306a36Sopenharmony_ci	{0xbf, 0xc1, 0x04, 0xcc},
65362306a36Sopenharmony_ci	{0xbf, 0xcc, 0x00, 0xcc},
65462306a36Sopenharmony_ci	{0xb3, 0x01, 0x41, 0xcc},
65562306a36Sopenharmony_ci	{0x00, 0x00, 0x80, 0xdd},
65662306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
65762306a36Sopenharmony_ci	{0x00, 0x00, 0x10, 0xdd},
65862306a36Sopenharmony_ci	{0x22, 0xa0, 0x78, 0xbb},
65962306a36Sopenharmony_ci	{0x23, 0xa0, 0x78, 0xbb},
66062306a36Sopenharmony_ci	{0x24, 0x7f, 0x00, 0xbb},
66162306a36Sopenharmony_ci	{0x28, 0xea, 0x02, 0xbb},
66262306a36Sopenharmony_ci	{0x29, 0x86, 0x7a, 0xbb},
66362306a36Sopenharmony_ci	{0x5e, 0x52, 0x4c, 0xbb},
66462306a36Sopenharmony_ci	{0x5f, 0x20, 0x24, 0xbb},
66562306a36Sopenharmony_ci	{0x60, 0x00, 0x02, 0xbb},
66662306a36Sopenharmony_ci	{0x02, 0x00, 0xee, 0xbb},
66762306a36Sopenharmony_ci	{0x03, 0x39, 0x23, 0xbb},
66862306a36Sopenharmony_ci	{0x04, 0x07, 0x24, 0xbb},
66962306a36Sopenharmony_ci	{0x09, 0x00, 0xc0, 0xbb},
67062306a36Sopenharmony_ci	{0x0a, 0x00, 0x79, 0xbb},
67162306a36Sopenharmony_ci	{0x0b, 0x00, 0x04, 0xbb},
67262306a36Sopenharmony_ci	{0x0c, 0x00, 0x5c, 0xbb},
67362306a36Sopenharmony_ci	{0x0d, 0x00, 0xd9, 0xbb},
67462306a36Sopenharmony_ci	{0x0e, 0x00, 0x53, 0xbb},
67562306a36Sopenharmony_ci	{0x0f, 0x00, 0x21, 0xbb},
67662306a36Sopenharmony_ci	{0x10, 0x00, 0xa4, 0xbb},
67762306a36Sopenharmony_ci	{0x11, 0x00, 0xe5, 0xbb},
67862306a36Sopenharmony_ci	{0x15, 0x00, 0x00, 0xbb},
67962306a36Sopenharmony_ci	{0x16, 0x00, 0x00, 0xbb},
68062306a36Sopenharmony_ci	{0x17, 0x00, 0x00, 0xbb},
68162306a36Sopenharmony_ci	{0x18, 0x00, 0x00, 0xbb},
68262306a36Sopenharmony_ci	{0x19, 0x00, 0x00, 0xbb},
68362306a36Sopenharmony_ci	{0x1a, 0x00, 0x00, 0xbb},
68462306a36Sopenharmony_ci	{0x1b, 0x00, 0x00, 0xbb},
68562306a36Sopenharmony_ci	{0x1c, 0x00, 0x00, 0xbb},
68662306a36Sopenharmony_ci	{0x1d, 0x00, 0x00, 0xbb},
68762306a36Sopenharmony_ci	{0x1e, 0x00, 0x00, 0xbb},
68862306a36Sopenharmony_ci	{0xf0, 0x00, 0x01, 0xbb},
68962306a36Sopenharmony_ci	{0x00, 0x00, 0x20, 0xdd},
69062306a36Sopenharmony_ci	{0x06, 0xf0, 0x8e, 0xbb},
69162306a36Sopenharmony_ci	{0x00, 0x00, 0x80, 0xdd},
69262306a36Sopenharmony_ci	{0x06, 0x70, 0x8e, 0xbb},
69362306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
69462306a36Sopenharmony_ci	{0x00, 0x00, 0x20, 0xdd},
69562306a36Sopenharmony_ci	{0x5e, 0x6a, 0x53, 0xbb},
69662306a36Sopenharmony_ci	{0x5f, 0x40, 0x2c, 0xbb},
69762306a36Sopenharmony_ci	{0xf0, 0x00, 0x01, 0xbb},
69862306a36Sopenharmony_ci	{0x00, 0x00, 0x20, 0xdd},
69962306a36Sopenharmony_ci	{0x58, 0x00, 0x00, 0xbb},
70062306a36Sopenharmony_ci	{0x53, 0x09, 0x03, 0xbb},
70162306a36Sopenharmony_ci	{0x54, 0x31, 0x18, 0xbb},
70262306a36Sopenharmony_ci	{0x55, 0x8b, 0x5f, 0xbb},
70362306a36Sopenharmony_ci	{0x56, 0xc0, 0xa9, 0xbb},
70462306a36Sopenharmony_ci	{0x57, 0xe0, 0xd2, 0xbb},
70562306a36Sopenharmony_ci	{0xe1, 0x00, 0x00, 0xbb},
70662306a36Sopenharmony_ci	{0xdc, 0x09, 0x03, 0xbb},
70762306a36Sopenharmony_ci	{0xdd, 0x31, 0x18, 0xbb},
70862306a36Sopenharmony_ci	{0xde, 0x8b, 0x5f, 0xbb},
70962306a36Sopenharmony_ci	{0xdf, 0xc0, 0xa9, 0xbb},
71062306a36Sopenharmony_ci	{0xe0, 0xe0, 0xd2, 0xbb},
71162306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},
71262306a36Sopenharmony_ci	{0xf0, 0x00, 0x01, 0xbb},
71362306a36Sopenharmony_ci	{0x06, 0xf0, 0x8e, 0xbb},
71462306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
71562306a36Sopenharmony_ci	{0x2f, 0xde, 0x20, 0xbb},
71662306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
71762306a36Sopenharmony_ci	{0x24, 0x50, 0x20, 0xbb},
71862306a36Sopenharmony_ci	{0xbc, 0x0e, 0x00, 0xcc},
71962306a36Sopenharmony_ci	{0xbc, 0x0f, 0x05, 0xcc},
72062306a36Sopenharmony_ci	{0xbc, 0x10, 0xc0, 0xcc},
72162306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
72262306a36Sopenharmony_ci	{0x34, 0x0c, 0x50, 0xbb},
72362306a36Sopenharmony_ci	{0xbc, 0x11, 0x03, 0xcc},
72462306a36Sopenharmony_ci	{0xf0, 0x00, 0x01, 0xbb},
72562306a36Sopenharmony_ci	{0x80, 0x00, 0x03, 0xbb},
72662306a36Sopenharmony_ci	{0x81, 0xc7, 0x14, 0xbb},
72762306a36Sopenharmony_ci	{0x82, 0xeb, 0xe8, 0xbb},
72862306a36Sopenharmony_ci	{0x83, 0xfe, 0xf4, 0xbb},
72962306a36Sopenharmony_ci	{0x84, 0xcd, 0x10, 0xbb},
73062306a36Sopenharmony_ci	{0x85, 0xf3, 0xee, 0xbb},
73162306a36Sopenharmony_ci	{0x86, 0xff, 0xf1, 0xbb},
73262306a36Sopenharmony_ci	{0x87, 0xcd, 0x10, 0xbb},
73362306a36Sopenharmony_ci	{0x88, 0xf3, 0xee, 0xbb},
73462306a36Sopenharmony_ci	{0x89, 0x01, 0xf1, 0xbb},
73562306a36Sopenharmony_ci	{0x8a, 0xe5, 0x17, 0xbb},
73662306a36Sopenharmony_ci	{0x8b, 0xe8, 0xe2, 0xbb},
73762306a36Sopenharmony_ci	{0x8c, 0xf7, 0xed, 0xbb},
73862306a36Sopenharmony_ci	{0x8d, 0x00, 0xff, 0xbb},
73962306a36Sopenharmony_ci	{0x8e, 0xec, 0x10, 0xbb},
74062306a36Sopenharmony_ci	{0x8f, 0xf0, 0xed, 0xbb},
74162306a36Sopenharmony_ci	{0x90, 0xf9, 0xf2, 0xbb},
74262306a36Sopenharmony_ci	{0x91, 0x00, 0x00, 0xbb},
74362306a36Sopenharmony_ci	{0x92, 0xe9, 0x0d, 0xbb},
74462306a36Sopenharmony_ci	{0x93, 0xf4, 0xf2, 0xbb},
74562306a36Sopenharmony_ci	{0x94, 0xfb, 0xf5, 0xbb},
74662306a36Sopenharmony_ci	{0x95, 0x00, 0xff, 0xbb},
74762306a36Sopenharmony_ci	{0xb6, 0x0f, 0x08, 0xbb},
74862306a36Sopenharmony_ci	{0xb7, 0x3d, 0x16, 0xbb},
74962306a36Sopenharmony_ci	{0xb8, 0x0c, 0x04, 0xbb},
75062306a36Sopenharmony_ci	{0xb9, 0x1c, 0x07, 0xbb},
75162306a36Sopenharmony_ci	{0xba, 0x0a, 0x03, 0xbb},
75262306a36Sopenharmony_ci	{0xbb, 0x1b, 0x09, 0xbb},
75362306a36Sopenharmony_ci	{0xbc, 0x17, 0x0d, 0xbb},
75462306a36Sopenharmony_ci	{0xbd, 0x23, 0x1d, 0xbb},
75562306a36Sopenharmony_ci	{0xbe, 0x00, 0x28, 0xbb},
75662306a36Sopenharmony_ci	{0xbf, 0x11, 0x09, 0xbb},
75762306a36Sopenharmony_ci	{0xc0, 0x16, 0x15, 0xbb},
75862306a36Sopenharmony_ci	{0xc1, 0x00, 0x1b, 0xbb},
75962306a36Sopenharmony_ci	{0xc2, 0x0e, 0x07, 0xbb},
76062306a36Sopenharmony_ci	{0xc3, 0x14, 0x10, 0xbb},
76162306a36Sopenharmony_ci	{0xc4, 0x00, 0x17, 0xbb},
76262306a36Sopenharmony_ci	{0x06, 0x74, 0x8e, 0xbb},
76362306a36Sopenharmony_ci	{0xf0, 0x00, 0x00, 0xbb},
76462306a36Sopenharmony_ci	{0x03, 0x03, 0xc0, 0xbb},
76562306a36Sopenharmony_ci	{}
76662306a36Sopenharmony_ci};
76762306a36Sopenharmony_ci
76862306a36Sopenharmony_cistatic const u8 mi1320_gamma[17] = {
76962306a36Sopenharmony_ci	0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,
77062306a36Sopenharmony_ci	0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff
77162306a36Sopenharmony_ci};
77262306a36Sopenharmony_cistatic const u8 mi1320_matrix[9] = {
77362306a36Sopenharmony_ci	0x54, 0xda, 0x06, 0xf1, 0x50, 0xf4, 0xf7, 0xea, 0x52
77462306a36Sopenharmony_ci};
77562306a36Sopenharmony_cistatic const u8 mi1320_initVGA_data[][4] = {
77662306a36Sopenharmony_ci	{0xb3, 0x01, 0x01, 0xcc},	{0x00, 0x00, 0x33, 0xdd},
77762306a36Sopenharmony_ci	{0xb0, 0x03, 0x19, 0xcc},	{0x00, 0x00, 0x33, 0xdd},
77862306a36Sopenharmony_ci	{0xb0, 0x04, 0x02, 0xcc},	{0x00, 0x00, 0x33, 0xdd},
77962306a36Sopenharmony_ci	{0xb3, 0x00, 0x64, 0xcc},	{0xb3, 0x00, 0x65, 0xcc},
78062306a36Sopenharmony_ci	{0xb0, 0x16, 0x03, 0xcc},	{0xb3, 0x05, 0x00, 0xcc},
78162306a36Sopenharmony_ci	{0xb3, 0x06, 0x00, 0xcc},	{0xb3, 0x08, 0x01, 0xcc},
78262306a36Sopenharmony_ci	{0xb3, 0x09, 0x0c, 0xcc},	{0xb3, 0x34, 0x02, 0xcc},
78362306a36Sopenharmony_ci	{0xb3, 0x35, 0xc8, 0xcc},	/* i2c add: 48 */
78462306a36Sopenharmony_ci	{0xb3, 0x02, 0x00, 0xcc},
78562306a36Sopenharmony_ci	{0xb3, 0x03, 0x0a, 0xcc},	{0xb3, 0x04, 0x05, 0xcc},
78662306a36Sopenharmony_ci	{0xb3, 0x20, 0x00, 0xcc},	{0xb3, 0x21, 0x00, 0xcc},
78762306a36Sopenharmony_ci	{0xb3, 0x22, 0x03, 0xcc},	{0xb3, 0x23, 0xc0, 0xcc},
78862306a36Sopenharmony_ci	{0xb3, 0x14, 0x00, 0xcc},	{0xb3, 0x15, 0x00, 0xcc},
78962306a36Sopenharmony_ci	{0xb3, 0x16, 0x04, 0xcc},	{0xb3, 0x17, 0xff, 0xcc},
79062306a36Sopenharmony_ci	{0xb3, 0x00, 0x67, 0xcc},	{0xbc, 0x00, 0xd0, 0xcc},
79162306a36Sopenharmony_ci	{0xbc, 0x01, 0x01, 0xcc},	{0xf0, 0x00, 0x00, 0xbb},
79262306a36Sopenharmony_ci	{0x0d, 0x00, 0x09, 0xbb},	{0x00, 0x01, 0x00, 0xdd},
79362306a36Sopenharmony_ci	{0x0d, 0x00, 0x08, 0xbb},	{0xf0, 0x00, 0x01, 0xbb},
79462306a36Sopenharmony_ci	{0xa1, 0x05, 0x00, 0xbb},	{0xa4, 0x03, 0xc0, 0xbb},
79562306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},	{0x00, 0x00, 0x10, 0xdd},
79662306a36Sopenharmony_ci	{0xc8, 0x9f, 0x0b, 0xbb},	{0x00, 0x00, 0x10, 0xdd},
79762306a36Sopenharmony_ci	{0xf0, 0x00, 0x00, 0xbb},	{0x00, 0x00, 0x10, 0xdd},
79862306a36Sopenharmony_ci	{0x20, 0x01, 0x00, 0xbb},	{0x00, 0x00, 0x10, 0xdd},
79962306a36Sopenharmony_ci	{0xf0, 0x00, 0x01, 0xbb},	{0x9d, 0x3c, 0xa0, 0xbb},
80062306a36Sopenharmony_ci	{0x47, 0x30, 0x30, 0xbb},	{0xf0, 0x00, 0x00, 0xbb},
80162306a36Sopenharmony_ci	{0x0a, 0x80, 0x11, 0xbb},	{0x35, 0x00, 0x22, 0xbb},
80262306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},	{0x9d, 0xc5, 0x05, 0xbb},
80362306a36Sopenharmony_ci	{0xdc, 0x0f, 0xfc, 0xbb},	{0xf0, 0x00, 0x01, 0xbb},
80462306a36Sopenharmony_ci	{0x06, 0x74, 0x0e, 0xbb},	{0x80, 0x00, 0x06, 0xbb},
80562306a36Sopenharmony_ci	{0x81, 0x04, 0x00, 0xbb},	{0x82, 0x01, 0x02, 0xbb},
80662306a36Sopenharmony_ci	{0x83, 0x03, 0x02, 0xbb},	{0x84, 0x05, 0x00, 0xbb},
80762306a36Sopenharmony_ci	{0x85, 0x01, 0x00, 0xbb},	{0x86, 0x03, 0x02, 0xbb},
80862306a36Sopenharmony_ci	{0x87, 0x05, 0x00, 0xbb},	{0x88, 0x01, 0x00, 0xbb},
80962306a36Sopenharmony_ci	{0x89, 0x02, 0x02, 0xbb},	{0x8a, 0xfd, 0x04, 0xbb},
81062306a36Sopenharmony_ci	{0x8b, 0xfc, 0xfd, 0xbb},	{0x8c, 0xff, 0xfd, 0xbb},
81162306a36Sopenharmony_ci	{0x8d, 0x00, 0x00, 0xbb},	{0x8e, 0xfe, 0x05, 0xbb},
81262306a36Sopenharmony_ci	{0x8f, 0xfc, 0xfd, 0xbb},	{0x90, 0xfe, 0xfd, 0xbb},
81362306a36Sopenharmony_ci	{0x91, 0x00, 0x00, 0xbb},	{0x92, 0xfe, 0x03, 0xbb},
81462306a36Sopenharmony_ci	{0x93, 0xfd, 0xfe, 0xbb},	{0x94, 0xff, 0xfd, 0xbb},
81562306a36Sopenharmony_ci	{0x95, 0x00, 0x00, 0xbb},	{0xb6, 0x07, 0x05, 0xbb},
81662306a36Sopenharmony_ci	{0xb7, 0x13, 0x06, 0xbb},	{0xb8, 0x08, 0x06, 0xbb},
81762306a36Sopenharmony_ci	{0xb9, 0x14, 0x08, 0xbb},	{0xba, 0x06, 0x05, 0xbb},
81862306a36Sopenharmony_ci	{0xbb, 0x13, 0x06, 0xbb},	{0xbc, 0x03, 0x01, 0xbb},
81962306a36Sopenharmony_ci	{0xbd, 0x03, 0x04, 0xbb},	{0xbe, 0x00, 0x02, 0xbb},
82062306a36Sopenharmony_ci	{0xbf, 0x03, 0x01, 0xbb},	{0xc0, 0x02, 0x04, 0xbb},
82162306a36Sopenharmony_ci	{0xc1, 0x00, 0x04, 0xbb},	{0xc2, 0x02, 0x01, 0xbb},
82262306a36Sopenharmony_ci	{0xc3, 0x01, 0x03, 0xbb},	{0xc4, 0x00, 0x04, 0xbb},
82362306a36Sopenharmony_ci	{0xf0, 0x00, 0x00, 0xbb},	{0x05, 0x01, 0x13, 0xbb},
82462306a36Sopenharmony_ci	{0x06, 0x00, 0x11, 0xbb},	{0x07, 0x00, 0x85, 0xbb},
82562306a36Sopenharmony_ci	{0x08, 0x00, 0x27, 0xbb},
82662306a36Sopenharmony_ci	{0x20, 0x01, 0x00, 0xbb},	/* h/v flips - was 03 */
82762306a36Sopenharmony_ci	{0x21, 0x80, 0x00, 0xbb},	{0x22, 0x0d, 0x0f, 0xbb},
82862306a36Sopenharmony_ci	{0x24, 0x80, 0x00, 0xbb},	{0x59, 0x00, 0xff, 0xbb},
82962306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},	{0x39, 0x03, 0x0d, 0xbb},
83062306a36Sopenharmony_ci	{0x3a, 0x06, 0x1b, 0xbb},	{0x3b, 0x00, 0x95, 0xbb},
83162306a36Sopenharmony_ci	{0x3c, 0x04, 0xdb, 0xbb},	{0x57, 0x02, 0x00, 0xbb},
83262306a36Sopenharmony_ci	{0x58, 0x02, 0x66, 0xbb},	{0x59, 0x00, 0xff, 0xbb},
83362306a36Sopenharmony_ci	{0x5a, 0x01, 0x33, 0xbb},	{0x5c, 0x12, 0x0d, 0xbb},
83462306a36Sopenharmony_ci	{0x5d, 0x16, 0x11, 0xbb},	{0x64, 0x5e, 0x1c, 0xbb},
83562306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},	{0x2f, 0xd1, 0x00, 0xbb},
83662306a36Sopenharmony_ci	{0x5b, 0x00, 0x01, 0xbb},	{0xf0, 0x00, 0x02, 0xbb},
83762306a36Sopenharmony_ci	{0x36, 0x68, 0x10, 0xbb},	{0x00, 0x00, 0x30, 0xdd},
83862306a36Sopenharmony_ci	{0x37, 0x82, 0x00, 0xbb},	{0xbc, 0x0e, 0x00, 0xcc},
83962306a36Sopenharmony_ci	{0xbc, 0x0f, 0x05, 0xcc},	{0xbc, 0x10, 0xc0, 0xcc},
84062306a36Sopenharmony_ci	{0xbc, 0x11, 0x03, 0xcc},	{0xb6, 0x00, 0x00, 0xcc},
84162306a36Sopenharmony_ci	{0xb6, 0x03, 0x05, 0xcc},	{0xb6, 0x02, 0x00, 0xcc},
84262306a36Sopenharmony_ci	{0xb6, 0x05, 0x04, 0xcc},	{0xb6, 0x04, 0x00, 0xcc},
84362306a36Sopenharmony_ci	{0xb6, 0x12, 0xf8, 0xcc},	{0xb6, 0x13, 0x29, 0xcc},
84462306a36Sopenharmony_ci	{0xb6, 0x18, 0x0a, 0xcc},	{0xb6, 0x17, 0x00, 0xcc},
84562306a36Sopenharmony_ci	{0xb6, 0x16, 0x00, 0xcc},	{0xb6, 0x22, 0x12, 0xcc},
84662306a36Sopenharmony_ci	{0xb6, 0x23, 0x0b, 0xcc},	{0xbf, 0xc0, 0x26, 0xcc},
84762306a36Sopenharmony_ci	{0xbf, 0xc1, 0x02, 0xcc},	{0xbf, 0xcc, 0x04, 0xcc},
84862306a36Sopenharmony_ci	{0xbc, 0x02, 0x18, 0xcc},	{0xbc, 0x03, 0x50, 0xcc},
84962306a36Sopenharmony_ci	{0xbc, 0x04, 0x18, 0xcc},	{0xbc, 0x05, 0x00, 0xcc},
85062306a36Sopenharmony_ci	{0xbc, 0x06, 0x00, 0xcc},	{0xbc, 0x08, 0x30, 0xcc},
85162306a36Sopenharmony_ci	{0xbc, 0x09, 0x40, 0xcc},	{0xbc, 0x0a, 0x10, 0xcc},
85262306a36Sopenharmony_ci	{0xbc, 0x0b, 0x00, 0xcc},	{0xbc, 0x0c, 0x00, 0xcc},
85362306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},	{0xb3, 0x01, 0x41, 0xcc},
85462306a36Sopenharmony_ci	{}
85562306a36Sopenharmony_ci};
85662306a36Sopenharmony_cistatic const u8 mi1320_initQVGA_data[][4] = {
85762306a36Sopenharmony_ci	{0xb3, 0x01, 0x01, 0xcc},	{0x00, 0x00, 0x33, 0xdd},
85862306a36Sopenharmony_ci	{0xb0, 0x03, 0x19, 0xcc},	{0x00, 0x00, 0x33, 0xdd},
85962306a36Sopenharmony_ci	{0xb0, 0x04, 0x02, 0xcc},	{0x00, 0x00, 0x33, 0xdd},
86062306a36Sopenharmony_ci	{0xb3, 0x00, 0x64, 0xcc},	{0xb3, 0x00, 0x65, 0xcc},
86162306a36Sopenharmony_ci	{0xb0, 0x16, 0x03, 0xcc},	{0xb3, 0x05, 0x01, 0xcc},
86262306a36Sopenharmony_ci	{0xb3, 0x06, 0x01, 0xcc},	{0xb3, 0x08, 0x01, 0xcc},
86362306a36Sopenharmony_ci	{0xb3, 0x09, 0x0c, 0xcc},	{0xb3, 0x34, 0x02, 0xcc},
86462306a36Sopenharmony_ci	{0xb3, 0x35, 0xc8, 0xcc},	{0xb3, 0x02, 0x00, 0xcc},
86562306a36Sopenharmony_ci	{0xb3, 0x03, 0x0a, 0xcc},	{0xb3, 0x04, 0x05, 0xcc},
86662306a36Sopenharmony_ci	{0xb3, 0x20, 0x00, 0xcc},	{0xb3, 0x21, 0x00, 0xcc},
86762306a36Sopenharmony_ci	{0xb3, 0x22, 0x01, 0xcc},	{0xb3, 0x23, 0xe0, 0xcc},
86862306a36Sopenharmony_ci	{0xb3, 0x14, 0x00, 0xcc},	{0xb3, 0x15, 0x00, 0xcc},
86962306a36Sopenharmony_ci	{0xb3, 0x16, 0x02, 0xcc},	{0xb3, 0x17, 0x7f, 0xcc},
87062306a36Sopenharmony_ci	{0xb3, 0x00, 0x65, 0xcc},	{0xb8, 0x00, 0x00, 0xcc},
87162306a36Sopenharmony_ci	{0xbc, 0x00, 0xd0, 0xcc},	{0xbc, 0x01, 0x01, 0xcc},
87262306a36Sopenharmony_ci	{0xf0, 0x00, 0x00, 0xbb},	{0x0d, 0x00, 0x09, 0xbb},
87362306a36Sopenharmony_ci	{0x00, 0x01, 0x00, 0xdd},	{0x0d, 0x00, 0x08, 0xbb},
87462306a36Sopenharmony_ci	{0xf0, 0x00, 0x00, 0xbb},	{0x02, 0x00, 0x64, 0xbb},
87562306a36Sopenharmony_ci	{0x05, 0x01, 0x78, 0xbb},	{0x06, 0x00, 0x11, 0xbb},
87662306a36Sopenharmony_ci	{0x07, 0x01, 0x42, 0xbb},	{0x08, 0x00, 0x11, 0xbb},
87762306a36Sopenharmony_ci	{0x20, 0x01, 0x00, 0xbb},	{0x21, 0x80, 0x00, 0xbb},
87862306a36Sopenharmony_ci	{0x22, 0x0d, 0x0f, 0xbb},	{0x24, 0x80, 0x00, 0xbb},
87962306a36Sopenharmony_ci	{0x59, 0x00, 0xff, 0xbb},	{0xf0, 0x00, 0x01, 0xbb},
88062306a36Sopenharmony_ci	{0x9d, 0x3c, 0xa0, 0xbb},	{0x47, 0x30, 0x30, 0xbb},
88162306a36Sopenharmony_ci	{0xf0, 0x00, 0x00, 0xbb},	{0x0a, 0x80, 0x11, 0xbb},
88262306a36Sopenharmony_ci	{0x35, 0x00, 0x22, 0xbb},	{0xf0, 0x00, 0x02, 0xbb},
88362306a36Sopenharmony_ci	{0x9d, 0xc5, 0x05, 0xbb},	{0xdc, 0x0f, 0xfc, 0xbb},
88462306a36Sopenharmony_ci	{0xf0, 0x00, 0x01, 0xbb},	{0x06, 0x74, 0x0e, 0xbb},
88562306a36Sopenharmony_ci	{0x80, 0x00, 0x06, 0xbb},	{0x81, 0x04, 0x00, 0xbb},
88662306a36Sopenharmony_ci	{0x82, 0x01, 0x02, 0xbb},	{0x83, 0x03, 0x02, 0xbb},
88762306a36Sopenharmony_ci	{0x84, 0x05, 0x00, 0xbb},	{0x85, 0x01, 0x00, 0xbb},
88862306a36Sopenharmony_ci	{0x86, 0x03, 0x02, 0xbb},	{0x87, 0x05, 0x00, 0xbb},
88962306a36Sopenharmony_ci	{0x88, 0x01, 0x00, 0xbb},	{0x89, 0x02, 0x02, 0xbb},
89062306a36Sopenharmony_ci	{0x8a, 0xfd, 0x04, 0xbb},	{0x8b, 0xfc, 0xfd, 0xbb},
89162306a36Sopenharmony_ci	{0x8c, 0xff, 0xfd, 0xbb},	{0x8d, 0x00, 0x00, 0xbb},
89262306a36Sopenharmony_ci	{0x8e, 0xfe, 0x05, 0xbb},	{0x8f, 0xfc, 0xfd, 0xbb},
89362306a36Sopenharmony_ci	{0x90, 0xfe, 0xfd, 0xbb},	{0x91, 0x00, 0x00, 0xbb},
89462306a36Sopenharmony_ci	{0x92, 0xfe, 0x03, 0xbb},	{0x93, 0xfd, 0xfe, 0xbb},
89562306a36Sopenharmony_ci	{0x94, 0xff, 0xfd, 0xbb},	{0x95, 0x00, 0x00, 0xbb},
89662306a36Sopenharmony_ci	{0xb6, 0x07, 0x05, 0xbb},	{0xb7, 0x13, 0x06, 0xbb},
89762306a36Sopenharmony_ci	{0xb8, 0x08, 0x06, 0xbb},	{0xb9, 0x14, 0x08, 0xbb},
89862306a36Sopenharmony_ci	{0xba, 0x06, 0x05, 0xbb},	{0xbb, 0x13, 0x06, 0xbb},
89962306a36Sopenharmony_ci	{0xbc, 0x03, 0x01, 0xbb},	{0xbd, 0x03, 0x04, 0xbb},
90062306a36Sopenharmony_ci	{0xbe, 0x00, 0x02, 0xbb},	{0xbf, 0x03, 0x01, 0xbb},
90162306a36Sopenharmony_ci	{0xc0, 0x02, 0x04, 0xbb},	{0xc1, 0x00, 0x04, 0xbb},
90262306a36Sopenharmony_ci	{0xc2, 0x02, 0x01, 0xbb},	{0xc3, 0x01, 0x03, 0xbb},
90362306a36Sopenharmony_ci	{0xc4, 0x00, 0x04, 0xbb},	{0xf0, 0x00, 0x02, 0xbb},
90462306a36Sopenharmony_ci	{0xc8, 0x00, 0x00, 0xbb},	{0x2e, 0x00, 0x00, 0xbb},
90562306a36Sopenharmony_ci	{0x2e, 0x0c, 0x5b, 0xbb},	{0x2f, 0xd1, 0x00, 0xbb},
90662306a36Sopenharmony_ci	{0x39, 0x03, 0xca, 0xbb},	{0x3a, 0x06, 0x80, 0xbb},
90762306a36Sopenharmony_ci	{0x3b, 0x01, 0x52, 0xbb},	{0x3c, 0x05, 0x40, 0xbb},
90862306a36Sopenharmony_ci	{0x57, 0x01, 0x9c, 0xbb},	{0x58, 0x01, 0xee, 0xbb},
90962306a36Sopenharmony_ci	{0x59, 0x00, 0xf0, 0xbb},	{0x5a, 0x01, 0x20, 0xbb},
91062306a36Sopenharmony_ci	{0x5c, 0x1d, 0x17, 0xbb},	{0x5d, 0x22, 0x1c, 0xbb},
91162306a36Sopenharmony_ci	{0x64, 0x1e, 0x1c, 0xbb},	{0x5b, 0x00, 0x01, 0xbb},
91262306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},	{0x36, 0x68, 0x10, 0xbb},
91362306a36Sopenharmony_ci	{0x00, 0x00, 0x30, 0xdd},	{0x37, 0x81, 0x00, 0xbb},
91462306a36Sopenharmony_ci	{0xbc, 0x02, 0x18, 0xcc},	{0xbc, 0x03, 0x50, 0xcc},
91562306a36Sopenharmony_ci	{0xbc, 0x04, 0x18, 0xcc},	{0xbc, 0x05, 0x00, 0xcc},
91662306a36Sopenharmony_ci	{0xbc, 0x06, 0x00, 0xcc},	{0xbc, 0x08, 0x30, 0xcc},
91762306a36Sopenharmony_ci	{0xbc, 0x09, 0x40, 0xcc},	{0xbc, 0x0a, 0x10, 0xcc},
91862306a36Sopenharmony_ci	{0xbc, 0x0b, 0x00, 0xcc},	{0xbc, 0x0c, 0x00, 0xcc},
91962306a36Sopenharmony_ci	{0xbf, 0xc0, 0x26, 0xcc},	{0xbf, 0xc1, 0x02, 0xcc},
92062306a36Sopenharmony_ci	{0xbf, 0xcc, 0x04, 0xcc},	{0xb3, 0x5c, 0x01, 0xcc},
92162306a36Sopenharmony_ci	{0xb3, 0x01, 0x41, 0xcc},
92262306a36Sopenharmony_ci	{}
92362306a36Sopenharmony_ci};
92462306a36Sopenharmony_ci
92562306a36Sopenharmony_cistatic const u8 mi1320_soc_InitVGA[][4] = {
92662306a36Sopenharmony_ci	{0xb3, 0x01, 0x01, 0xcc},
92762306a36Sopenharmony_ci	{0xb0, 0x03, 0x19, 0xcc},
92862306a36Sopenharmony_ci	{0xb0, 0x04, 0x02, 0xcc},
92962306a36Sopenharmony_ci	{0x00, 0x00, 0x30, 0xdd},
93062306a36Sopenharmony_ci	{0xb3, 0x00, 0x64, 0xcc},
93162306a36Sopenharmony_ci	{0xb3, 0x00, 0x67, 0xcc},
93262306a36Sopenharmony_ci	{0xb3, 0x05, 0x01, 0xcc},
93362306a36Sopenharmony_ci	{0xb3, 0x06, 0x01, 0xcc},
93462306a36Sopenharmony_ci	{0xb3, 0x08, 0x01, 0xcc},
93562306a36Sopenharmony_ci	{0xb3, 0x09, 0x0c, 0xcc},
93662306a36Sopenharmony_ci	{0xb3, 0x34, 0x02, 0xcc},
93762306a36Sopenharmony_ci	{0xb3, 0x35, 0xc8, 0xcc},	/* i2c add: 48 */
93862306a36Sopenharmony_ci	{0xb3, 0x02, 0x00, 0xcc},
93962306a36Sopenharmony_ci	{0xb3, 0x03, 0x0a, 0xcc},
94062306a36Sopenharmony_ci	{0xb3, 0x04, 0x05, 0xcc},
94162306a36Sopenharmony_ci	{0xb3, 0x20, 0x00, 0xcc},
94262306a36Sopenharmony_ci	{0xb3, 0x21, 0x00, 0xcc},
94362306a36Sopenharmony_ci	{0xb3, 0x22, 0x01, 0xcc},
94462306a36Sopenharmony_ci	{0xb3, 0x23, 0xe0, 0xcc},
94562306a36Sopenharmony_ci	{0xb3, 0x14, 0x00, 0xcc},
94662306a36Sopenharmony_ci	{0xb3, 0x15, 0x00, 0xcc},
94762306a36Sopenharmony_ci	{0xb3, 0x16, 0x02, 0xcc},
94862306a36Sopenharmony_ci	{0xb3, 0x17, 0x7f, 0xcc},
94962306a36Sopenharmony_ci	{0xb3, 0x00, 0x67, 0xcc},
95062306a36Sopenharmony_ci	{0xb8, 0x00, 0x00, 0xcc},
95162306a36Sopenharmony_ci	{0xbc, 0x00, 0x71, 0xcc},
95262306a36Sopenharmony_ci	{0xbc, 0x01, 0x01, 0xcc},
95362306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},
95462306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
95562306a36Sopenharmony_ci	{0x00, 0x00, 0x10, 0xdd},
95662306a36Sopenharmony_ci	{0xc8, 0x00, 0x00, 0xbb},
95762306a36Sopenharmony_ci	{0x00, 0x00, 0x30, 0xdd},
95862306a36Sopenharmony_ci	{0xf0, 0x00, 0x00, 0xbb},
95962306a36Sopenharmony_ci	{0x00, 0x00, 0x10, 0xdd},
96062306a36Sopenharmony_ci	{0x07, 0x00, 0xe0, 0xbb},
96162306a36Sopenharmony_ci	{0x08, 0x00, 0x0b, 0xbb},
96262306a36Sopenharmony_ci	{0x21, 0x00, 0x0c, 0xbb},
96362306a36Sopenharmony_ci	{0x20, 0x01, 0x03, 0xbb},	/* h/v flip */
96462306a36Sopenharmony_ci	{0xbf, 0xc0, 0x26, 0xcc},
96562306a36Sopenharmony_ci	{0xbf, 0xc1, 0x02, 0xcc},
96662306a36Sopenharmony_ci	{0xbf, 0xcc, 0x04, 0xcc},
96762306a36Sopenharmony_ci	{0xb3, 0x01, 0x41, 0xcc},
96862306a36Sopenharmony_ci	{0xf0, 0x00, 0x00, 0xbb},
96962306a36Sopenharmony_ci	{0x05, 0x01, 0x78, 0xbb},
97062306a36Sopenharmony_ci	{0x06, 0x00, 0x11, 0xbb},
97162306a36Sopenharmony_ci	{0x07, 0x01, 0x42, 0xbb},
97262306a36Sopenharmony_ci	{0x08, 0x00, 0x11, 0xbb},
97362306a36Sopenharmony_ci	{0x20, 0x01, 0x03, 0xbb},	/* h/v flip */
97462306a36Sopenharmony_ci	{0x21, 0x80, 0x00, 0xbb},
97562306a36Sopenharmony_ci	{0x22, 0x0d, 0x0f, 0xbb},
97662306a36Sopenharmony_ci	{0x24, 0x80, 0x00, 0xbb},
97762306a36Sopenharmony_ci	{0x59, 0x00, 0xff, 0xbb},
97862306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
97962306a36Sopenharmony_ci	{0x39, 0x03, 0xca, 0xbb},
98062306a36Sopenharmony_ci	{0x3a, 0x06, 0x80, 0xbb},
98162306a36Sopenharmony_ci	{0x3b, 0x01, 0x52, 0xbb},
98262306a36Sopenharmony_ci	{0x3c, 0x05, 0x40, 0xbb},
98362306a36Sopenharmony_ci	{0x57, 0x01, 0x9c, 0xbb},
98462306a36Sopenharmony_ci	{0x58, 0x01, 0xee, 0xbb},
98562306a36Sopenharmony_ci	{0x59, 0x00, 0xf0, 0xbb},
98662306a36Sopenharmony_ci	{0x5a, 0x01, 0x20, 0xbb},
98762306a36Sopenharmony_ci	{0x5c, 0x1d, 0x17, 0xbb},
98862306a36Sopenharmony_ci	{0x5d, 0x22, 0x1c, 0xbb},
98962306a36Sopenharmony_ci	{0x64, 0x1e, 0x1c, 0xbb},
99062306a36Sopenharmony_ci	{0x5b, 0x00, 0x00, 0xbb},
99162306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
99262306a36Sopenharmony_ci	{0x22, 0xa0, 0x78, 0xbb},
99362306a36Sopenharmony_ci	{0x23, 0xa0, 0x78, 0xbb},
99462306a36Sopenharmony_ci	{0x24, 0x7f, 0x00, 0xbb},
99562306a36Sopenharmony_ci	{0x28, 0xea, 0x02, 0xbb},
99662306a36Sopenharmony_ci	{0x29, 0x86, 0x7a, 0xbb},
99762306a36Sopenharmony_ci	{0x5e, 0x52, 0x4c, 0xbb},
99862306a36Sopenharmony_ci	{0x5f, 0x20, 0x24, 0xbb},
99962306a36Sopenharmony_ci	{0x60, 0x00, 0x02, 0xbb},
100062306a36Sopenharmony_ci	{0x02, 0x00, 0xee, 0xbb},
100162306a36Sopenharmony_ci	{0x03, 0x39, 0x23, 0xbb},
100262306a36Sopenharmony_ci	{0x04, 0x07, 0x24, 0xbb},
100362306a36Sopenharmony_ci	{0x09, 0x00, 0xc0, 0xbb},
100462306a36Sopenharmony_ci	{0x0a, 0x00, 0x79, 0xbb},
100562306a36Sopenharmony_ci	{0x0b, 0x00, 0x04, 0xbb},
100662306a36Sopenharmony_ci	{0x0c, 0x00, 0x5c, 0xbb},
100762306a36Sopenharmony_ci	{0x0d, 0x00, 0xd9, 0xbb},
100862306a36Sopenharmony_ci	{0x0e, 0x00, 0x53, 0xbb},
100962306a36Sopenharmony_ci	{0x0f, 0x00, 0x21, 0xbb},
101062306a36Sopenharmony_ci	{0x10, 0x00, 0xa4, 0xbb},
101162306a36Sopenharmony_ci	{0x11, 0x00, 0xe5, 0xbb},
101262306a36Sopenharmony_ci	{0x15, 0x00, 0x00, 0xbb},
101362306a36Sopenharmony_ci	{0x16, 0x00, 0x00, 0xbb},
101462306a36Sopenharmony_ci	{0x17, 0x00, 0x00, 0xbb},
101562306a36Sopenharmony_ci	{0x18, 0x00, 0x00, 0xbb},
101662306a36Sopenharmony_ci	{0x19, 0x00, 0x00, 0xbb},
101762306a36Sopenharmony_ci	{0x1a, 0x00, 0x00, 0xbb},
101862306a36Sopenharmony_ci	{0x1b, 0x00, 0x00, 0xbb},
101962306a36Sopenharmony_ci	{0x1c, 0x00, 0x00, 0xbb},
102062306a36Sopenharmony_ci	{0x1d, 0x00, 0x00, 0xbb},
102162306a36Sopenharmony_ci	{0x1e, 0x00, 0x00, 0xbb},
102262306a36Sopenharmony_ci	{0xf0, 0x00, 0x01, 0xbb},
102362306a36Sopenharmony_ci	{0x06, 0xe0, 0x0e, 0xbb},
102462306a36Sopenharmony_ci	{0x06, 0x60, 0x0e, 0xbb},
102562306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},
102662306a36Sopenharmony_ci	{}
102762306a36Sopenharmony_ci};
102862306a36Sopenharmony_cistatic const u8 mi1320_soc_InitQVGA[][4] = {
102962306a36Sopenharmony_ci	{0xb3, 0x01, 0x01, 0xcc},
103062306a36Sopenharmony_ci	{0xb0, 0x03, 0x19, 0xcc},
103162306a36Sopenharmony_ci	{0xb0, 0x04, 0x02, 0xcc},
103262306a36Sopenharmony_ci	{0x00, 0x00, 0x30, 0xdd},
103362306a36Sopenharmony_ci	{0xb3, 0x00, 0x64, 0xcc},
103462306a36Sopenharmony_ci	{0xb3, 0x00, 0x67, 0xcc},
103562306a36Sopenharmony_ci	{0xb3, 0x05, 0x01, 0xcc},
103662306a36Sopenharmony_ci	{0xb3, 0x06, 0x01, 0xcc},
103762306a36Sopenharmony_ci	{0xb3, 0x08, 0x01, 0xcc},
103862306a36Sopenharmony_ci	{0xb3, 0x09, 0x0c, 0xcc},
103962306a36Sopenharmony_ci	{0xb3, 0x34, 0x02, 0xcc},
104062306a36Sopenharmony_ci	{0xb3, 0x35, 0xc8, 0xcc},
104162306a36Sopenharmony_ci	{0xb3, 0x02, 0x00, 0xcc},
104262306a36Sopenharmony_ci	{0xb3, 0x03, 0x0a, 0xcc},
104362306a36Sopenharmony_ci	{0xb3, 0x04, 0x05, 0xcc},
104462306a36Sopenharmony_ci	{0xb3, 0x20, 0x00, 0xcc},
104562306a36Sopenharmony_ci	{0xb3, 0x21, 0x00, 0xcc},
104662306a36Sopenharmony_ci	{0xb3, 0x22, 0x01, 0xcc},
104762306a36Sopenharmony_ci	{0xb3, 0x23, 0xe0, 0xcc},
104862306a36Sopenharmony_ci	{0xb3, 0x14, 0x00, 0xcc},
104962306a36Sopenharmony_ci	{0xb3, 0x15, 0x00, 0xcc},
105062306a36Sopenharmony_ci	{0xb3, 0x16, 0x02, 0xcc},
105162306a36Sopenharmony_ci	{0xb3, 0x17, 0x7f, 0xcc},
105262306a36Sopenharmony_ci	{0xb3, 0x00, 0x67, 0xcc},
105362306a36Sopenharmony_ci	{0xb8, 0x00, 0x00, 0xcc},
105462306a36Sopenharmony_ci	{0xbc, 0x00, 0xd1, 0xcc},
105562306a36Sopenharmony_ci	{0xbc, 0x01, 0x01, 0xcc},
105662306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},
105762306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
105862306a36Sopenharmony_ci	{0x00, 0x00, 0x10, 0xdd},
105962306a36Sopenharmony_ci	{0xc8, 0x00, 0x00, 0xbb},
106062306a36Sopenharmony_ci	{0x00, 0x00, 0x30, 0xdd},
106162306a36Sopenharmony_ci	{0xf0, 0x00, 0x00, 0xbb},
106262306a36Sopenharmony_ci	{0x00, 0x00, 0x10, 0xdd},
106362306a36Sopenharmony_ci	{0x07, 0x00, 0xe0, 0xbb},
106462306a36Sopenharmony_ci	{0x08, 0x00, 0x0b, 0xbb},
106562306a36Sopenharmony_ci	{0x21, 0x00, 0x0c, 0xbb},
106662306a36Sopenharmony_ci	{0x20, 0x01, 0x03, 0xbb},	/* h/v flip */
106762306a36Sopenharmony_ci	{0xbf, 0xc0, 0x26, 0xcc},
106862306a36Sopenharmony_ci	{0xbf, 0xc1, 0x02, 0xcc},
106962306a36Sopenharmony_ci	{0xbf, 0xcc, 0x04, 0xcc},
107062306a36Sopenharmony_ci	{0xbc, 0x02, 0x18, 0xcc},
107162306a36Sopenharmony_ci	{0xbc, 0x03, 0x50, 0xcc},
107262306a36Sopenharmony_ci	{0xbc, 0x04, 0x18, 0xcc},
107362306a36Sopenharmony_ci	{0xbc, 0x05, 0x00, 0xcc},
107462306a36Sopenharmony_ci	{0xbc, 0x06, 0x00, 0xcc},
107562306a36Sopenharmony_ci	{0xbc, 0x08, 0x30, 0xcc},
107662306a36Sopenharmony_ci	{0xbc, 0x09, 0x40, 0xcc},
107762306a36Sopenharmony_ci	{0xbc, 0x0a, 0x10, 0xcc},
107862306a36Sopenharmony_ci	{0xbc, 0x0b, 0x00, 0xcc},
107962306a36Sopenharmony_ci	{0xbc, 0x0c, 0x00, 0xcc},
108062306a36Sopenharmony_ci	{0xb3, 0x01, 0x41, 0xcc},
108162306a36Sopenharmony_ci	{0xf0, 0x00, 0x00, 0xbb},
108262306a36Sopenharmony_ci	{0x05, 0x01, 0x78, 0xbb},
108362306a36Sopenharmony_ci	{0x06, 0x00, 0x11, 0xbb},
108462306a36Sopenharmony_ci	{0x07, 0x01, 0x42, 0xbb},
108562306a36Sopenharmony_ci	{0x08, 0x00, 0x11, 0xbb},
108662306a36Sopenharmony_ci	{0x20, 0x01, 0x03, 0xbb},	/* h/v flip */
108762306a36Sopenharmony_ci	{0x21, 0x80, 0x00, 0xbb},
108862306a36Sopenharmony_ci	{0x22, 0x0d, 0x0f, 0xbb},
108962306a36Sopenharmony_ci	{0x24, 0x80, 0x00, 0xbb},
109062306a36Sopenharmony_ci	{0x59, 0x00, 0xff, 0xbb},
109162306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
109262306a36Sopenharmony_ci	{0x39, 0x03, 0xca, 0xbb},
109362306a36Sopenharmony_ci	{0x3a, 0x06, 0x80, 0xbb},
109462306a36Sopenharmony_ci	{0x3b, 0x01, 0x52, 0xbb},
109562306a36Sopenharmony_ci	{0x3c, 0x05, 0x40, 0xbb},
109662306a36Sopenharmony_ci	{0x57, 0x01, 0x9c, 0xbb},
109762306a36Sopenharmony_ci	{0x58, 0x01, 0xee, 0xbb},
109862306a36Sopenharmony_ci	{0x59, 0x00, 0xf0, 0xbb},
109962306a36Sopenharmony_ci	{0x5a, 0x01, 0x20, 0xbb},
110062306a36Sopenharmony_ci	{0x5c, 0x1d, 0x17, 0xbb},
110162306a36Sopenharmony_ci	{0x5d, 0x22, 0x1c, 0xbb},
110262306a36Sopenharmony_ci	{0x64, 0x1e, 0x1c, 0xbb},
110362306a36Sopenharmony_ci	{0x5b, 0x00, 0x00, 0xbb},
110462306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
110562306a36Sopenharmony_ci	{0x22, 0xa0, 0x78, 0xbb},
110662306a36Sopenharmony_ci	{0x23, 0xa0, 0x78, 0xbb},
110762306a36Sopenharmony_ci	{0x24, 0x7f, 0x00, 0xbb},
110862306a36Sopenharmony_ci	{0x28, 0xea, 0x02, 0xbb},
110962306a36Sopenharmony_ci	{0x29, 0x86, 0x7a, 0xbb},
111062306a36Sopenharmony_ci	{0x5e, 0x52, 0x4c, 0xbb},
111162306a36Sopenharmony_ci	{0x5f, 0x20, 0x24, 0xbb},
111262306a36Sopenharmony_ci	{0x60, 0x00, 0x02, 0xbb},
111362306a36Sopenharmony_ci	{0x02, 0x00, 0xee, 0xbb},
111462306a36Sopenharmony_ci	{0x03, 0x39, 0x23, 0xbb},
111562306a36Sopenharmony_ci	{0x04, 0x07, 0x24, 0xbb},
111662306a36Sopenharmony_ci	{0x09, 0x00, 0xc0, 0xbb},
111762306a36Sopenharmony_ci	{0x0a, 0x00, 0x79, 0xbb},
111862306a36Sopenharmony_ci	{0x0b, 0x00, 0x04, 0xbb},
111962306a36Sopenharmony_ci	{0x0c, 0x00, 0x5c, 0xbb},
112062306a36Sopenharmony_ci	{0x0d, 0x00, 0xd9, 0xbb},
112162306a36Sopenharmony_ci	{0x0e, 0x00, 0x53, 0xbb},
112262306a36Sopenharmony_ci	{0x0f, 0x00, 0x21, 0xbb},
112362306a36Sopenharmony_ci	{0x10, 0x00, 0xa4, 0xbb},
112462306a36Sopenharmony_ci	{0x11, 0x00, 0xe5, 0xbb},
112562306a36Sopenharmony_ci	{0x15, 0x00, 0x00, 0xbb},
112662306a36Sopenharmony_ci	{0x16, 0x00, 0x00, 0xbb},
112762306a36Sopenharmony_ci	{0x17, 0x00, 0x00, 0xbb},
112862306a36Sopenharmony_ci	{0x18, 0x00, 0x00, 0xbb},
112962306a36Sopenharmony_ci	{0x19, 0x00, 0x00, 0xbb},
113062306a36Sopenharmony_ci	{0x1a, 0x00, 0x00, 0xbb},
113162306a36Sopenharmony_ci	{0x1b, 0x00, 0x00, 0xbb},
113262306a36Sopenharmony_ci	{0x1c, 0x00, 0x00, 0xbb},
113362306a36Sopenharmony_ci	{0x1d, 0x00, 0x00, 0xbb},
113462306a36Sopenharmony_ci	{0x1e, 0x00, 0x00, 0xbb},
113562306a36Sopenharmony_ci	{0xf0, 0x00, 0x01, 0xbb},
113662306a36Sopenharmony_ci	{0x06, 0xe0, 0x0e, 0xbb},
113762306a36Sopenharmony_ci	{0x06, 0x60, 0x0e, 0xbb},
113862306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},
113962306a36Sopenharmony_ci	{}
114062306a36Sopenharmony_ci};
114162306a36Sopenharmony_cistatic const u8 mi1320_soc_InitSXGA[][4] = {
114262306a36Sopenharmony_ci	{0xb3, 0x01, 0x01, 0xcc},
114362306a36Sopenharmony_ci	{0xb0, 0x03, 0x19, 0xcc},
114462306a36Sopenharmony_ci	{0x00, 0x00, 0x30, 0xdd},
114562306a36Sopenharmony_ci	{0xb3, 0x00, 0x64, 0xcc},
114662306a36Sopenharmony_ci	{0xb3, 0x00, 0x67, 0xcc},
114762306a36Sopenharmony_ci	{0xb3, 0x05, 0x01, 0xcc},
114862306a36Sopenharmony_ci	{0xb3, 0x06, 0x01, 0xcc},
114962306a36Sopenharmony_ci	{0xb3, 0x08, 0x01, 0xcc},
115062306a36Sopenharmony_ci	{0xb3, 0x09, 0x0c, 0xcc},
115162306a36Sopenharmony_ci	{0xb3, 0x34, 0x02, 0xcc},
115262306a36Sopenharmony_ci	{0xb3, 0x35, 0xc8, 0xcc},
115362306a36Sopenharmony_ci	{0xb3, 0x02, 0x00, 0xcc},
115462306a36Sopenharmony_ci	{0xb3, 0x03, 0x0a, 0xcc},
115562306a36Sopenharmony_ci	{0xb3, 0x04, 0x05, 0xcc},
115662306a36Sopenharmony_ci	{0xb3, 0x20, 0x00, 0xcc},
115762306a36Sopenharmony_ci	{0xb3, 0x21, 0x00, 0xcc},
115862306a36Sopenharmony_ci	{0xb3, 0x22, 0x04, 0xcc},
115962306a36Sopenharmony_ci	{0xb3, 0x23, 0x00, 0xcc},
116062306a36Sopenharmony_ci	{0xb3, 0x14, 0x00, 0xcc},
116162306a36Sopenharmony_ci	{0xb3, 0x15, 0x00, 0xcc},
116262306a36Sopenharmony_ci	{0xb3, 0x16, 0x04, 0xcc},
116362306a36Sopenharmony_ci	{0xb3, 0x17, 0xff, 0xcc},
116462306a36Sopenharmony_ci	{0xb3, 0x00, 0x67, 0xcc},
116562306a36Sopenharmony_ci	{0xbc, 0x00, 0x71, 0xcc},
116662306a36Sopenharmony_ci	{0xbc, 0x01, 0x01, 0xcc},
116762306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},
116862306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
116962306a36Sopenharmony_ci	{0x00, 0x00, 0x30, 0xdd},
117062306a36Sopenharmony_ci	{0xc8, 0x9f, 0x0b, 0xbb},
117162306a36Sopenharmony_ci	{0x00, 0x00, 0x20, 0xdd},
117262306a36Sopenharmony_ci	{0x5b, 0x00, 0x01, 0xbb},
117362306a36Sopenharmony_ci	{0x00, 0x00, 0x20, 0xdd},
117462306a36Sopenharmony_ci	{0xf0, 0x00, 0x00, 0xbb},
117562306a36Sopenharmony_ci	{0x00, 0x00, 0x30, 0xdd},
117662306a36Sopenharmony_ci	{0x20, 0x01, 0x03, 0xbb},	/* h/v flip */
117762306a36Sopenharmony_ci	{0x00, 0x00, 0x20, 0xdd},
117862306a36Sopenharmony_ci	{0xbf, 0xc0, 0x26, 0xcc},
117962306a36Sopenharmony_ci	{0xbf, 0xc1, 0x02, 0xcc},
118062306a36Sopenharmony_ci	{0xbf, 0xcc, 0x04, 0xcc},
118162306a36Sopenharmony_ci	{0xb3, 0x01, 0x41, 0xcc},
118262306a36Sopenharmony_ci	{0xf0, 0x00, 0x00, 0xbb},
118362306a36Sopenharmony_ci	{0x05, 0x01, 0x78, 0xbb},
118462306a36Sopenharmony_ci	{0x06, 0x00, 0x11, 0xbb},
118562306a36Sopenharmony_ci	{0x07, 0x01, 0x42, 0xbb},
118662306a36Sopenharmony_ci	{0x08, 0x00, 0x11, 0xbb},
118762306a36Sopenharmony_ci	{0x20, 0x01, 0x03, 0xbb},	/* h/v flip */
118862306a36Sopenharmony_ci	{0x21, 0x80, 0x00, 0xbb},
118962306a36Sopenharmony_ci	{0x22, 0x0d, 0x0f, 0xbb},
119062306a36Sopenharmony_ci	{0x24, 0x80, 0x00, 0xbb},
119162306a36Sopenharmony_ci	{0x59, 0x00, 0xff, 0xbb},
119262306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
119362306a36Sopenharmony_ci	{0x39, 0x03, 0xca, 0xbb},
119462306a36Sopenharmony_ci	{0x3a, 0x06, 0x80, 0xbb},
119562306a36Sopenharmony_ci	{0x3b, 0x01, 0x52, 0xbb},
119662306a36Sopenharmony_ci	{0x3c, 0x05, 0x40, 0xbb},
119762306a36Sopenharmony_ci	{0x57, 0x01, 0x9c, 0xbb},
119862306a36Sopenharmony_ci	{0x58, 0x01, 0xee, 0xbb},
119962306a36Sopenharmony_ci	{0x59, 0x00, 0xf0, 0xbb},
120062306a36Sopenharmony_ci	{0x5a, 0x01, 0x20, 0xbb},
120162306a36Sopenharmony_ci	{0x5c, 0x1d, 0x17, 0xbb},
120262306a36Sopenharmony_ci	{0x5d, 0x22, 0x1c, 0xbb},
120362306a36Sopenharmony_ci	{0x64, 0x1e, 0x1c, 0xbb},
120462306a36Sopenharmony_ci	{0x5b, 0x00, 0x00, 0xbb},
120562306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
120662306a36Sopenharmony_ci	{0x22, 0xa0, 0x78, 0xbb},
120762306a36Sopenharmony_ci	{0x23, 0xa0, 0x78, 0xbb},
120862306a36Sopenharmony_ci	{0x24, 0x7f, 0x00, 0xbb},
120962306a36Sopenharmony_ci	{0x28, 0xea, 0x02, 0xbb},
121062306a36Sopenharmony_ci	{0x29, 0x86, 0x7a, 0xbb},
121162306a36Sopenharmony_ci	{0x5e, 0x52, 0x4c, 0xbb},
121262306a36Sopenharmony_ci	{0x5f, 0x20, 0x24, 0xbb},
121362306a36Sopenharmony_ci	{0x60, 0x00, 0x02, 0xbb},
121462306a36Sopenharmony_ci	{0x02, 0x00, 0xee, 0xbb},
121562306a36Sopenharmony_ci	{0x03, 0x39, 0x23, 0xbb},
121662306a36Sopenharmony_ci	{0x04, 0x07, 0x24, 0xbb},
121762306a36Sopenharmony_ci	{0x09, 0x00, 0xc0, 0xbb},
121862306a36Sopenharmony_ci	{0x0a, 0x00, 0x79, 0xbb},
121962306a36Sopenharmony_ci	{0x0b, 0x00, 0x04, 0xbb},
122062306a36Sopenharmony_ci	{0x0c, 0x00, 0x5c, 0xbb},
122162306a36Sopenharmony_ci	{0x0d, 0x00, 0xd9, 0xbb},
122262306a36Sopenharmony_ci	{0x0e, 0x00, 0x53, 0xbb},
122362306a36Sopenharmony_ci	{0x0f, 0x00, 0x21, 0xbb},
122462306a36Sopenharmony_ci	{0x10, 0x00, 0xa4, 0xbb},
122562306a36Sopenharmony_ci	{0x11, 0x00, 0xe5, 0xbb},
122662306a36Sopenharmony_ci	{0x15, 0x00, 0x00, 0xbb},
122762306a36Sopenharmony_ci	{0x16, 0x00, 0x00, 0xbb},
122862306a36Sopenharmony_ci	{0x17, 0x00, 0x00, 0xbb},
122962306a36Sopenharmony_ci	{0x18, 0x00, 0x00, 0xbb},
123062306a36Sopenharmony_ci	{0x19, 0x00, 0x00, 0xbb},
123162306a36Sopenharmony_ci	{0x1a, 0x00, 0x00, 0xbb},
123262306a36Sopenharmony_ci	{0x1b, 0x00, 0x00, 0xbb},
123362306a36Sopenharmony_ci	{0x1c, 0x00, 0x00, 0xbb},
123462306a36Sopenharmony_ci	{0x1d, 0x00, 0x00, 0xbb},
123562306a36Sopenharmony_ci	{0x1e, 0x00, 0x00, 0xbb},
123662306a36Sopenharmony_ci	{0xf0, 0x00, 0x01, 0xbb},
123762306a36Sopenharmony_ci	{0x06, 0xe0, 0x0e, 0xbb},
123862306a36Sopenharmony_ci	{0x06, 0x60, 0x0e, 0xbb},
123962306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},
124062306a36Sopenharmony_ci	{0xf0, 0x00, 0x00, 0xbb},
124162306a36Sopenharmony_ci	{0x05, 0x01, 0x13, 0xbb},
124262306a36Sopenharmony_ci	{0x06, 0x00, 0x11, 0xbb},
124362306a36Sopenharmony_ci	{0x07, 0x00, 0x85, 0xbb},
124462306a36Sopenharmony_ci	{0x08, 0x00, 0x27, 0xbb},
124562306a36Sopenharmony_ci	{0x20, 0x01, 0x03, 0xbb},	/* h/v flip */
124662306a36Sopenharmony_ci	{0x21, 0x80, 0x00, 0xbb},
124762306a36Sopenharmony_ci	{0x22, 0x0d, 0x0f, 0xbb},
124862306a36Sopenharmony_ci	{0x24, 0x80, 0x00, 0xbb},
124962306a36Sopenharmony_ci	{0x59, 0x00, 0xff, 0xbb},
125062306a36Sopenharmony_ci	{0xf0, 0x00, 0x02, 0xbb},
125162306a36Sopenharmony_ci	{0x39, 0x03, 0x0d, 0xbb},
125262306a36Sopenharmony_ci	{0x3a, 0x06, 0x1b, 0xbb},
125362306a36Sopenharmony_ci	{0x3b, 0x00, 0x95, 0xbb},
125462306a36Sopenharmony_ci	{0x3c, 0x04, 0xdb, 0xbb},
125562306a36Sopenharmony_ci	{0x57, 0x02, 0x00, 0xbb},
125662306a36Sopenharmony_ci	{0x58, 0x02, 0x66, 0xbb},
125762306a36Sopenharmony_ci	{0x59, 0x00, 0xff, 0xbb},
125862306a36Sopenharmony_ci	{0x5a, 0x01, 0x33, 0xbb},
125962306a36Sopenharmony_ci	{0x5c, 0x12, 0x0d, 0xbb},
126062306a36Sopenharmony_ci	{0x5d, 0x16, 0x11, 0xbb},
126162306a36Sopenharmony_ci	{0x64, 0x5e, 0x1c, 0xbb},
126262306a36Sopenharmony_ci	{}
126362306a36Sopenharmony_ci};
126462306a36Sopenharmony_cistatic const u8 po3130_gamma[17] = {
126562306a36Sopenharmony_ci	0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,
126662306a36Sopenharmony_ci	0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff
126762306a36Sopenharmony_ci};
126862306a36Sopenharmony_cistatic const u8 po3130_matrix[9] = {
126962306a36Sopenharmony_ci	0x5f, 0xec, 0xf5, 0xf1, 0x5a, 0xf5, 0xf1, 0xec, 0x63
127062306a36Sopenharmony_ci};
127162306a36Sopenharmony_ci
127262306a36Sopenharmony_cistatic const u8 po3130_initVGA_data[][4] = {
127362306a36Sopenharmony_ci	{0xb0, 0x4d, 0x00, 0xcc},	{0xb3, 0x01, 0x01, 0xcc},
127462306a36Sopenharmony_ci	{0x00, 0x00, 0x50, 0xdd},	{0xb0, 0x03, 0x01, 0xcc},
127562306a36Sopenharmony_ci	{0xb3, 0x00, 0x04, 0xcc},	{0xb3, 0x00, 0x24, 0xcc},
127662306a36Sopenharmony_ci	{0xb3, 0x00, 0x25, 0xcc},	{0xb3, 0x08, 0x01, 0xcc},
127762306a36Sopenharmony_ci	{0xb3, 0x09, 0x0c, 0xcc},	{0xb3, 0x05, 0x00, 0xcc},
127862306a36Sopenharmony_ci	{0xb3, 0x06, 0x01, 0xcc},	{0xb3, 0x03, 0x1a, 0xcc},
127962306a36Sopenharmony_ci	{0xb3, 0x04, 0x15, 0xcc},	{0xb3, 0x20, 0x00, 0xcc},
128062306a36Sopenharmony_ci	{0xb3, 0x21, 0x00, 0xcc},	{0xb3, 0x22, 0x01, 0xcc},
128162306a36Sopenharmony_ci	{0xb3, 0x23, 0xe8, 0xcc},	{0xb8, 0x08, 0xe8, 0xcc},
128262306a36Sopenharmony_ci	{0xb3, 0x14, 0x00, 0xcc},	{0xb3, 0x15, 0x00, 0xcc},
128362306a36Sopenharmony_ci	{0xb3, 0x16, 0x02, 0xcc},	{0xb3, 0x17, 0x7f, 0xcc},
128462306a36Sopenharmony_ci	{0xb3, 0x34, 0x01, 0xcc},
128562306a36Sopenharmony_ci	{0xb3, 0x35, 0xf6, 0xcc},	/* i2c add: 76 */
128662306a36Sopenharmony_ci	{0xb3, 0x00, 0x27, 0xcc},	{0xbc, 0x00, 0x71, 0xcc},
128762306a36Sopenharmony_ci	{0xb8, 0x00, 0x21, 0xcc},	{0xb8, 0x27, 0x20, 0xcc},
128862306a36Sopenharmony_ci	{0xb8, 0x01, 0x79, 0xcc},	{0xb8, 0x81, 0x09, 0xcc},
128962306a36Sopenharmony_ci	{0xb8, 0x2c, 0x50, 0xcc},	{0xb8, 0x2d, 0xf8, 0xcc},
129062306a36Sopenharmony_ci	{0xb8, 0x2e, 0xf8, 0xcc},	{0xb8, 0x2f, 0xf8, 0xcc},
129162306a36Sopenharmony_ci	{0xb8, 0x30, 0x50, 0xcc},	{0xb8, 0x31, 0xf8, 0xcc},
129262306a36Sopenharmony_ci	{0xb8, 0x32, 0xf8, 0xcc},	{0xb8, 0x33, 0xf8, 0xcc},
129362306a36Sopenharmony_ci	{0xb8, 0x34, 0x50, 0xcc},	{0xb8, 0x35, 0x00, 0xcc},
129462306a36Sopenharmony_ci	{0xb8, 0x36, 0x00, 0xcc},	{0xb8, 0x37, 0x00, 0xcc},
129562306a36Sopenharmony_ci	{0x00, 0x1e, 0xc6, 0xaa},	{0x00, 0x20, 0x44, 0xaa},
129662306a36Sopenharmony_ci	{0x00, 0xad, 0x02, 0xaa},	{0x00, 0xae, 0x2c, 0xaa},
129762306a36Sopenharmony_ci	{0x00, 0x12, 0x08, 0xaa},	{0x00, 0x17, 0x41, 0xaa},
129862306a36Sopenharmony_ci	{0x00, 0x19, 0x41, 0xaa},	{0x00, 0x1e, 0x06, 0xaa},
129962306a36Sopenharmony_ci	{0x00, 0x21, 0x00, 0xaa},	{0x00, 0x36, 0xc0, 0xaa},
130062306a36Sopenharmony_ci	{0x00, 0x37, 0xc8, 0xaa},	{0x00, 0x3b, 0x36, 0xaa},
130162306a36Sopenharmony_ci	{0x00, 0x4b, 0xfe, 0xaa},	{0x00, 0x51, 0x1c, 0xaa},
130262306a36Sopenharmony_ci	{0x00, 0x52, 0x01, 0xaa},	{0x00, 0x55, 0x0a, 0xaa},
130362306a36Sopenharmony_ci	{0x00, 0x59, 0x02, 0xaa},	{0x00, 0x5a, 0x04, 0xaa},
130462306a36Sopenharmony_ci	{0x00, 0x5c, 0x10, 0xaa},	{0x00, 0x5d, 0x10, 0xaa},
130562306a36Sopenharmony_ci	{0x00, 0x5e, 0x10, 0xaa},	{0x00, 0x5f, 0x10, 0xaa},
130662306a36Sopenharmony_ci	{0x00, 0x61, 0x00, 0xaa},	{0x00, 0x62, 0x18, 0xaa},
130762306a36Sopenharmony_ci	{0x00, 0x63, 0x30, 0xaa},	{0x00, 0x70, 0x68, 0xaa},
130862306a36Sopenharmony_ci	{0x00, 0x80, 0x71, 0xaa},	{0x00, 0x81, 0x08, 0xaa},
130962306a36Sopenharmony_ci	{0x00, 0x82, 0x00, 0xaa},	{0x00, 0x83, 0x55, 0xaa},
131062306a36Sopenharmony_ci	{0x00, 0x84, 0x06, 0xaa},	{0x00, 0x85, 0x06, 0xaa},
131162306a36Sopenharmony_ci	{0x00, 0x86, 0x13, 0xaa},	{0x00, 0x87, 0x18, 0xaa},
131262306a36Sopenharmony_ci	{0x00, 0xaa, 0x3f, 0xaa},	{0x00, 0xab, 0x44, 0xaa},
131362306a36Sopenharmony_ci	{0x00, 0xb0, 0x68, 0xaa},	{0x00, 0xb5, 0x10, 0xaa},
131462306a36Sopenharmony_ci	{0x00, 0xb8, 0x20, 0xaa},	{0x00, 0xb9, 0xa0, 0xaa},
131562306a36Sopenharmony_ci	{0x00, 0xbc, 0x04, 0xaa},	{0x00, 0x8b, 0x40, 0xaa},
131662306a36Sopenharmony_ci	{0x00, 0x8c, 0x91, 0xaa},	{0x00, 0x8d, 0x8f, 0xaa},
131762306a36Sopenharmony_ci	{0x00, 0x8e, 0x91, 0xaa},	{0x00, 0x8f, 0x43, 0xaa},
131862306a36Sopenharmony_ci	{0x00, 0x90, 0x92, 0xaa},	{0x00, 0x91, 0x89, 0xaa},
131962306a36Sopenharmony_ci	{0x00, 0x92, 0x9d, 0xaa},	{0x00, 0x93, 0x46, 0xaa},
132062306a36Sopenharmony_ci	{0x00, 0xd6, 0x22, 0xaa},	{0x00, 0x73, 0x00, 0xaa},
132162306a36Sopenharmony_ci	{0x00, 0x74, 0x10, 0xaa},	{0x00, 0x75, 0x20, 0xaa},
132262306a36Sopenharmony_ci	{0x00, 0x76, 0x2b, 0xaa},	{0x00, 0x77, 0x36, 0xaa},
132362306a36Sopenharmony_ci	{0x00, 0x78, 0x49, 0xaa},	{0x00, 0x79, 0x5a, 0xaa},
132462306a36Sopenharmony_ci	{0x00, 0x7a, 0x7f, 0xaa},	{0x00, 0x7b, 0x9b, 0xaa},
132562306a36Sopenharmony_ci	{0x00, 0x7c, 0xba, 0xaa},	{0x00, 0x7d, 0xd4, 0xaa},
132662306a36Sopenharmony_ci	{0x00, 0x7e, 0xea, 0xaa},	{0x00, 0xd6, 0x62, 0xaa},
132762306a36Sopenharmony_ci	{0x00, 0x73, 0x00, 0xaa},	{0x00, 0x74, 0x10, 0xaa},
132862306a36Sopenharmony_ci	{0x00, 0x75, 0x20, 0xaa},	{0x00, 0x76, 0x2b, 0xaa},
132962306a36Sopenharmony_ci	{0x00, 0x77, 0x36, 0xaa},	{0x00, 0x78, 0x49, 0xaa},
133062306a36Sopenharmony_ci	{0x00, 0x79, 0x5a, 0xaa},	{0x00, 0x7a, 0x7f, 0xaa},
133162306a36Sopenharmony_ci	{0x00, 0x7b, 0x9b, 0xaa},	{0x00, 0x7c, 0xba, 0xaa},
133262306a36Sopenharmony_ci	{0x00, 0x7d, 0xd4, 0xaa},	{0x00, 0x7e, 0xea, 0xaa},
133362306a36Sopenharmony_ci	{0x00, 0xd6, 0xa2, 0xaa},	{0x00, 0x73, 0x00, 0xaa},
133462306a36Sopenharmony_ci	{0x00, 0x74, 0x10, 0xaa},	{0x00, 0x75, 0x20, 0xaa},
133562306a36Sopenharmony_ci	{0x00, 0x76, 0x2b, 0xaa},	{0x00, 0x77, 0x36, 0xaa},
133662306a36Sopenharmony_ci	{0x00, 0x78, 0x49, 0xaa},	{0x00, 0x79, 0x5a, 0xaa},
133762306a36Sopenharmony_ci	{0x00, 0x7a, 0x7f, 0xaa},	{0x00, 0x7b, 0x9b, 0xaa},
133862306a36Sopenharmony_ci	{0x00, 0x7c, 0xba, 0xaa},	{0x00, 0x7d, 0xd4, 0xaa},
133962306a36Sopenharmony_ci	{0x00, 0x7e, 0xea, 0xaa},
134062306a36Sopenharmony_ci	{0x00, 0x4c, 0x07, 0xaa},
134162306a36Sopenharmony_ci	{0x00, 0x4b, 0xe0, 0xaa},	{0x00, 0x4e, 0x77, 0xaa},
134262306a36Sopenharmony_ci	{0x00, 0x59, 0x02, 0xaa},	{0x00, 0x4d, 0x0a, 0xaa},
134362306a36Sopenharmony_ci/*	{0x00, 0xd1, 0x00, 0xaa},	{0x00, 0x20, 0xc4, 0xaa},
134462306a36Sopenharmony_ci	{0xb8, 0x8e, 0x00, 0xcc},	{0xb8, 0x8f, 0xff, 0xcc}, */
134562306a36Sopenharmony_ci	{0x00, 0xd1, 0x3c, 0xaa},	{0x00, 0x20, 0xc4, 0xaa},
134662306a36Sopenharmony_ci	{0xb8, 0x8e, 0x00, 0xcc},	{0xb8, 0x8f, 0xff, 0xcc},
134762306a36Sopenharmony_ci	{0xb8, 0xfe, 0x00, 0xcc},	{0xb8, 0xff, 0x28, 0xcc},
134862306a36Sopenharmony_ci	{0xb9, 0x00, 0x28, 0xcc},	{0xb9, 0x01, 0x28, 0xcc},
134962306a36Sopenharmony_ci	{0xb9, 0x02, 0x28, 0xcc},	{0xb9, 0x03, 0x00, 0xcc},
135062306a36Sopenharmony_ci	{0xb9, 0x04, 0x00, 0xcc},	{0xb9, 0x05, 0x3c, 0xcc},
135162306a36Sopenharmony_ci	{0xb9, 0x06, 0x3c, 0xcc},	{0xb9, 0x07, 0x3c, 0xcc},
135262306a36Sopenharmony_ci	{0xb9, 0x08, 0x3c, 0xcc},	{0x00, 0x05, 0x00, 0xaa},
135362306a36Sopenharmony_ci	{0xb3, 0x5c, 0x00, 0xcc},	{0xb3, 0x01, 0x41, 0xcc},
135462306a36Sopenharmony_ci	{}
135562306a36Sopenharmony_ci};
135662306a36Sopenharmony_cistatic const u8 po3130_rundata[][4] = {
135762306a36Sopenharmony_ci	{0x00, 0x47, 0x45, 0xaa},	{0x00, 0x48, 0x9b, 0xaa},
135862306a36Sopenharmony_ci	{0x00, 0x49, 0x3a, 0xaa},	{0x00, 0x4a, 0x01, 0xaa},
135962306a36Sopenharmony_ci	{0x00, 0x44, 0x40, 0xaa},
136062306a36Sopenharmony_ci/*	{0x00, 0xd5, 0x7c, 0xaa}, */
136162306a36Sopenharmony_ci	{0x00, 0xad, 0x04, 0xaa},	{0x00, 0xae, 0x00, 0xaa},
136262306a36Sopenharmony_ci	{0x00, 0xb0, 0x78, 0xaa},	{0x00, 0x98, 0x02, 0xaa},
136362306a36Sopenharmony_ci	{0x00, 0x94, 0x25, 0xaa},	{0x00, 0x95, 0x25, 0xaa},
136462306a36Sopenharmony_ci	{0x00, 0x59, 0x68, 0xaa},	{0x00, 0x44, 0x20, 0xaa},
136562306a36Sopenharmony_ci	{0x00, 0x17, 0x50, 0xaa},	{0x00, 0x19, 0x50, 0xaa},
136662306a36Sopenharmony_ci	{0x00, 0xd1, 0x3c, 0xaa},	{0x00, 0xd1, 0x3c, 0xaa},
136762306a36Sopenharmony_ci	{0x00, 0x1e, 0x06, 0xaa},	{0x00, 0x1e, 0x06, 0xaa},
136862306a36Sopenharmony_ci	{}
136962306a36Sopenharmony_ci};
137062306a36Sopenharmony_ci
137162306a36Sopenharmony_cistatic const u8 po3130_initQVGA_data[][4] = {
137262306a36Sopenharmony_ci	{0xb0, 0x4d, 0x00, 0xcc},	{0xb3, 0x01, 0x01, 0xcc},
137362306a36Sopenharmony_ci	{0x00, 0x00, 0x50, 0xdd},	{0xb0, 0x03, 0x09, 0xcc},
137462306a36Sopenharmony_ci	{0xb3, 0x00, 0x04, 0xcc},	{0xb3, 0x00, 0x24, 0xcc},
137562306a36Sopenharmony_ci	{0xb3, 0x00, 0x25, 0xcc},	{0xb3, 0x08, 0x01, 0xcc},
137662306a36Sopenharmony_ci	{0xb3, 0x09, 0x0c, 0xcc},	{0xb3, 0x05, 0x00, 0xcc},
137762306a36Sopenharmony_ci	{0xb3, 0x06, 0x01, 0xcc},	{0xb3, 0x03, 0x1a, 0xcc},
137862306a36Sopenharmony_ci	{0xb3, 0x04, 0x15, 0xcc},	{0xb3, 0x20, 0x00, 0xcc},
137962306a36Sopenharmony_ci	{0xb3, 0x21, 0x00, 0xcc},	{0xb3, 0x22, 0x01, 0xcc},
138062306a36Sopenharmony_ci	{0xb3, 0x23, 0xe0, 0xcc},	{0xb8, 0x08, 0xe0, 0xcc},
138162306a36Sopenharmony_ci	{0xb3, 0x14, 0x00, 0xcc},	{0xb3, 0x15, 0x00, 0xcc},
138262306a36Sopenharmony_ci	{0xb3, 0x16, 0x02, 0xcc},	{0xb3, 0x17, 0x7f, 0xcc},
138362306a36Sopenharmony_ci	{0xb3, 0x34, 0x01, 0xcc},	{0xb3, 0x35, 0xf6, 0xcc},
138462306a36Sopenharmony_ci	{0xb3, 0x00, 0x27, 0xcc},	{0xbc, 0x00, 0xd1, 0xcc},
138562306a36Sopenharmony_ci	{0xb8, 0x00, 0x21, 0xcc},	{0xb8, 0x27, 0x20, 0xcc},
138662306a36Sopenharmony_ci	{0xb8, 0x01, 0x79, 0xcc},	{0xb8, 0x81, 0x09, 0xcc},
138762306a36Sopenharmony_ci	{0xb8, 0x2c, 0x50, 0xcc},	{0xb8, 0x2d, 0xf8, 0xcc},
138862306a36Sopenharmony_ci	{0xb8, 0x2e, 0xf8, 0xcc},	{0xb8, 0x2f, 0xf8, 0xcc},
138962306a36Sopenharmony_ci	{0xb8, 0x30, 0x50, 0xcc},	{0xb8, 0x31, 0xf8, 0xcc},
139062306a36Sopenharmony_ci	{0xb8, 0x32, 0xf8, 0xcc},	{0xb8, 0x33, 0xf8, 0xcc},
139162306a36Sopenharmony_ci	{0xb8, 0x34, 0x50, 0xcc},	{0xb8, 0x35, 0x00, 0xcc},
139262306a36Sopenharmony_ci	{0xb8, 0x36, 0x00, 0xcc},	{0xb8, 0x37, 0x00, 0xcc},
139362306a36Sopenharmony_ci	{0x00, 0x1e, 0xc6, 0xaa},	{0x00, 0x20, 0x44, 0xaa},
139462306a36Sopenharmony_ci	{0x00, 0xad, 0x02, 0xaa},	{0x00, 0xae, 0x2c, 0xaa},
139562306a36Sopenharmony_ci	{0x00, 0x12, 0x08, 0xaa},	{0x00, 0x17, 0x41, 0xaa},
139662306a36Sopenharmony_ci	{0x00, 0x19, 0x41, 0xaa},	{0x00, 0x1e, 0x06, 0xaa},
139762306a36Sopenharmony_ci	{0x00, 0x21, 0x00, 0xaa},	{0x00, 0x36, 0xc0, 0xaa},
139862306a36Sopenharmony_ci	{0x00, 0x37, 0xc8, 0xaa},	{0x00, 0x3b, 0x36, 0xaa},
139962306a36Sopenharmony_ci	{0x00, 0x4b, 0xfe, 0xaa},	{0x00, 0x51, 0x1c, 0xaa},
140062306a36Sopenharmony_ci	{0x00, 0x52, 0x01, 0xaa},	{0x00, 0x55, 0x0a, 0xaa},
140162306a36Sopenharmony_ci	{0x00, 0x59, 0x6f, 0xaa},	{0x00, 0x5a, 0x04, 0xaa},
140262306a36Sopenharmony_ci	{0x00, 0x5c, 0x10, 0xaa},	{0x00, 0x5d, 0x10, 0xaa},
140362306a36Sopenharmony_ci	{0x00, 0x5e, 0x10, 0xaa},	{0x00, 0x5f, 0x10, 0xaa},
140462306a36Sopenharmony_ci	{0x00, 0x61, 0x00, 0xaa},	{0x00, 0x62, 0x18, 0xaa},
140562306a36Sopenharmony_ci	{0x00, 0x63, 0x30, 0xaa},	{0x00, 0x70, 0x68, 0xaa},
140662306a36Sopenharmony_ci	{0x00, 0x80, 0x71, 0xaa},	{0x00, 0x81, 0x08, 0xaa},
140762306a36Sopenharmony_ci	{0x00, 0x82, 0x00, 0xaa},	{0x00, 0x83, 0x55, 0xaa},
140862306a36Sopenharmony_ci	{0x00, 0x84, 0x06, 0xaa},	{0x00, 0x85, 0x06, 0xaa},
140962306a36Sopenharmony_ci	{0x00, 0x86, 0x13, 0xaa},	{0x00, 0x87, 0x18, 0xaa},
141062306a36Sopenharmony_ci	{0x00, 0xaa, 0x3f, 0xaa},	{0x00, 0xab, 0x44, 0xaa},
141162306a36Sopenharmony_ci	{0x00, 0xb0, 0x68, 0xaa},	{0x00, 0xb5, 0x10, 0xaa},
141262306a36Sopenharmony_ci	{0x00, 0xb8, 0x20, 0xaa},	{0x00, 0xb9, 0xa0, 0xaa},
141362306a36Sopenharmony_ci	{0x00, 0xbc, 0x04, 0xaa},	{0x00, 0x8b, 0x40, 0xaa},
141462306a36Sopenharmony_ci	{0x00, 0x8c, 0x91, 0xaa},	{0x00, 0x8d, 0x8f, 0xaa},
141562306a36Sopenharmony_ci	{0x00, 0x8e, 0x91, 0xaa},	{0x00, 0x8f, 0x43, 0xaa},
141662306a36Sopenharmony_ci	{0x00, 0x90, 0x92, 0xaa},	{0x00, 0x91, 0x89, 0xaa},
141762306a36Sopenharmony_ci	{0x00, 0x92, 0x9d, 0xaa},	{0x00, 0x93, 0x46, 0xaa},
141862306a36Sopenharmony_ci	{0x00, 0xd6, 0x22, 0xaa},	{0x00, 0x73, 0x00, 0xaa},
141962306a36Sopenharmony_ci	{0x00, 0x74, 0x10, 0xaa},	{0x00, 0x75, 0x20, 0xaa},
142062306a36Sopenharmony_ci	{0x00, 0x76, 0x2b, 0xaa},	{0x00, 0x77, 0x36, 0xaa},
142162306a36Sopenharmony_ci	{0x00, 0x78, 0x49, 0xaa},	{0x00, 0x79, 0x5a, 0xaa},
142262306a36Sopenharmony_ci	{0x00, 0x7a, 0x7f, 0xaa},	{0x00, 0x7b, 0x9b, 0xaa},
142362306a36Sopenharmony_ci	{0x00, 0x7c, 0xba, 0xaa},	{0x00, 0x7d, 0xd4, 0xaa},
142462306a36Sopenharmony_ci	{0x00, 0x7e, 0xea, 0xaa},	{0x00, 0xd6, 0x62, 0xaa},
142562306a36Sopenharmony_ci	{0x00, 0x73, 0x00, 0xaa},	{0x00, 0x74, 0x10, 0xaa},
142662306a36Sopenharmony_ci	{0x00, 0x75, 0x20, 0xaa},	{0x00, 0x76, 0x2b, 0xaa},
142762306a36Sopenharmony_ci	{0x00, 0x77, 0x36, 0xaa},	{0x00, 0x78, 0x49, 0xaa},
142862306a36Sopenharmony_ci	{0x00, 0x79, 0x5a, 0xaa},	{0x00, 0x7a, 0x7f, 0xaa},
142962306a36Sopenharmony_ci	{0x00, 0x7b, 0x9b, 0xaa},	{0x00, 0x7c, 0xba, 0xaa},
143062306a36Sopenharmony_ci	{0x00, 0x7d, 0xd4, 0xaa},	{0x00, 0x7e, 0xea, 0xaa},
143162306a36Sopenharmony_ci	{0x00, 0xd6, 0xa2, 0xaa},	{0x00, 0x73, 0x00, 0xaa},
143262306a36Sopenharmony_ci	{0x00, 0x74, 0x10, 0xaa},	{0x00, 0x75, 0x20, 0xaa},
143362306a36Sopenharmony_ci	{0x00, 0x76, 0x2b, 0xaa},	{0x00, 0x77, 0x36, 0xaa},
143462306a36Sopenharmony_ci	{0x00, 0x78, 0x49, 0xaa},	{0x00, 0x79, 0x5a, 0xaa},
143562306a36Sopenharmony_ci	{0x00, 0x7a, 0x7f, 0xaa},	{0x00, 0x7b, 0x9b, 0xaa},
143662306a36Sopenharmony_ci	{0x00, 0x7c, 0xba, 0xaa},	{0x00, 0x7d, 0xd4, 0xaa},
143762306a36Sopenharmony_ci	{0x00, 0x7e, 0xea, 0xaa},	{0x00, 0x4c, 0x07, 0xaa},
143862306a36Sopenharmony_ci	{0x00, 0x4b, 0xe0, 0xaa},	{0x00, 0x4e, 0x77, 0xaa},
143962306a36Sopenharmony_ci	{0x00, 0x59, 0x66, 0xaa},	{0x00, 0x4d, 0x0a, 0xaa},
144062306a36Sopenharmony_ci	{0x00, 0xd1, 0x00, 0xaa},	{0x00, 0x20, 0xc4, 0xaa},
144162306a36Sopenharmony_ci	{0xb8, 0x8e, 0x00, 0xcc},	{0xb8, 0x8f, 0xff, 0xcc},
144262306a36Sopenharmony_ci	{0xb8, 0xfe, 0x00, 0xcc},	{0xb8, 0xff, 0x28, 0xcc},
144362306a36Sopenharmony_ci	{0xb9, 0x00, 0x28, 0xcc},	{0xb9, 0x01, 0x28, 0xcc},
144462306a36Sopenharmony_ci	{0xb9, 0x02, 0x28, 0xcc},	{0xb9, 0x03, 0x00, 0xcc},
144562306a36Sopenharmony_ci	{0xb9, 0x04, 0x00, 0xcc},	{0xb9, 0x05, 0x3c, 0xcc},
144662306a36Sopenharmony_ci	{0xb9, 0x06, 0x3c, 0xcc},	{0xb9, 0x07, 0x3c, 0xcc},
144762306a36Sopenharmony_ci	{0xb9, 0x08, 0x3c, 0xcc},	{0xbc, 0x02, 0x18, 0xcc},
144862306a36Sopenharmony_ci	{0xbc, 0x03, 0x50, 0xcc},	{0xbc, 0x04, 0x18, 0xcc},
144962306a36Sopenharmony_ci	{0xbc, 0x05, 0x00, 0xcc},	{0xbc, 0x06, 0x00, 0xcc},
145062306a36Sopenharmony_ci	{0xbc, 0x08, 0x30, 0xcc},	{0xbc, 0x09, 0x40, 0xcc},
145162306a36Sopenharmony_ci	{0xbc, 0x0a, 0x10, 0xcc},	{0xbc, 0x0b, 0x00, 0xcc},
145262306a36Sopenharmony_ci	{0xbc, 0x0c, 0x00, 0xcc},	{0x00, 0x05, 0x00, 0xaa},
145362306a36Sopenharmony_ci	{0xb3, 0x5c, 0x00, 0xcc},	{0xb3, 0x01, 0x41, 0xcc},
145462306a36Sopenharmony_ci	{}
145562306a36Sopenharmony_ci};
145662306a36Sopenharmony_ci
145762306a36Sopenharmony_cistatic const u8 hv7131r_gamma[17] = {
145862306a36Sopenharmony_ci	0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,
145962306a36Sopenharmony_ci	0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff
146062306a36Sopenharmony_ci};
146162306a36Sopenharmony_cistatic const u8 hv7131r_matrix[9] = {
146262306a36Sopenharmony_ci	0x5f, 0xec, 0xf5, 0xf1, 0x5a, 0xf5, 0xf1, 0xec, 0x63
146362306a36Sopenharmony_ci};
146462306a36Sopenharmony_cistatic const u8 hv7131r_initVGA_data[][4] = {
146562306a36Sopenharmony_ci	{0xb3, 0x01, 0x01, 0xcc},
146662306a36Sopenharmony_ci	{0xb0, 0x03, 0x19, 0xcc},
146762306a36Sopenharmony_ci	{0xb0, 0x04, 0x02, 0xcc},
146862306a36Sopenharmony_ci	{0x00, 0x00, 0x20, 0xdd},
146962306a36Sopenharmony_ci	{0xb3, 0x00, 0x24, 0xcc},
147062306a36Sopenharmony_ci	{0xb3, 0x00, 0x25, 0xcc},
147162306a36Sopenharmony_ci	{0xb3, 0x08, 0x01, 0xcc},
147262306a36Sopenharmony_ci	{0xb3, 0x09, 0x0c, 0xcc},
147362306a36Sopenharmony_ci	{0xb3, 0x05, 0x01, 0xcc},
147462306a36Sopenharmony_ci	{0xb3, 0x06, 0x03, 0xcc},
147562306a36Sopenharmony_ci	{0xb3, 0x01, 0x45, 0xcc},
147662306a36Sopenharmony_ci	{0xb3, 0x03, 0x0b, 0xcc},
147762306a36Sopenharmony_ci	{0xb3, 0x04, 0x05, 0xcc},
147862306a36Sopenharmony_ci	{0xb3, 0x20, 0x00, 0xcc},
147962306a36Sopenharmony_ci	{0xb3, 0x21, 0x00, 0xcc},
148062306a36Sopenharmony_ci	{0xb3, 0x22, 0x01, 0xcc},
148162306a36Sopenharmony_ci	{0xb3, 0x23, 0xe0, 0xcc},
148262306a36Sopenharmony_ci	{0xb3, 0x14, 0x00, 0xcc},
148362306a36Sopenharmony_ci	{0xb3, 0x15, 0x02, 0xcc},
148462306a36Sopenharmony_ci	{0xb3, 0x16, 0x02, 0xcc},
148562306a36Sopenharmony_ci	{0xb3, 0x17, 0x7f, 0xcc},
148662306a36Sopenharmony_ci	{0xb3, 0x34, 0x01, 0xcc},
148762306a36Sopenharmony_ci	{0xb3, 0x35, 0x91, 0xcc},	/* i2c add: 11 */
148862306a36Sopenharmony_ci	{0xb3, 0x00, 0x27, 0xcc},
148962306a36Sopenharmony_ci	{0xbc, 0x00, 0x73, 0xcc},
149062306a36Sopenharmony_ci	{0xb8, 0x00, 0x23, 0xcc},
149162306a36Sopenharmony_ci	{0xb8, 0x2c, 0x50, 0xcc},
149262306a36Sopenharmony_ci	{0xb8, 0x2d, 0xf8, 0xcc},
149362306a36Sopenharmony_ci	{0xb8, 0x2e, 0xf8, 0xcc},
149462306a36Sopenharmony_ci	{0xb8, 0x2f, 0xf8, 0xcc},
149562306a36Sopenharmony_ci	{0xb8, 0x30, 0x50, 0xcc},
149662306a36Sopenharmony_ci	{0xb8, 0x31, 0xf8, 0xcc},
149762306a36Sopenharmony_ci	{0xb8, 0x32, 0xf8, 0xcc},
149862306a36Sopenharmony_ci	{0xb8, 0x33, 0xf8, 0xcc},
149962306a36Sopenharmony_ci	{0xb8, 0x34, 0x58, 0xcc},
150062306a36Sopenharmony_ci	{0xb8, 0x35, 0x00, 0xcc},
150162306a36Sopenharmony_ci	{0xb8, 0x36, 0x00, 0xcc},
150262306a36Sopenharmony_ci	{0xb8, 0x37, 0x00, 0xcc},
150362306a36Sopenharmony_ci	{0xb8, 0x27, 0x20, 0xcc},
150462306a36Sopenharmony_ci	{0xb8, 0x01, 0x7d, 0xcc},
150562306a36Sopenharmony_ci	{0xb8, 0x81, 0x09, 0xcc},
150662306a36Sopenharmony_ci	{0xb3, 0x01, 0x41, 0xcc},
150762306a36Sopenharmony_ci	{0xb8, 0x8e, 0x00, 0xcc},
150862306a36Sopenharmony_ci	{0xb8, 0x8f, 0xff, 0xcc},
150962306a36Sopenharmony_ci	{0x00, 0x01, 0x0c, 0xaa},
151062306a36Sopenharmony_ci	{0x00, 0x14, 0x01, 0xaa},
151162306a36Sopenharmony_ci	{0x00, 0x15, 0xe6, 0xaa},
151262306a36Sopenharmony_ci	{0x00, 0x16, 0x02, 0xaa},
151362306a36Sopenharmony_ci	{0x00, 0x17, 0x86, 0xaa},
151462306a36Sopenharmony_ci	{0x00, 0x23, 0x00, 0xaa},
151562306a36Sopenharmony_ci	{0x00, 0x25, 0x03, 0xaa},
151662306a36Sopenharmony_ci	{0x00, 0x26, 0xa9, 0xaa},
151762306a36Sopenharmony_ci	{0x00, 0x27, 0x80, 0xaa},
151862306a36Sopenharmony_ci	{0x00, 0x30, 0x18, 0xaa},
151962306a36Sopenharmony_ci	{0xb6, 0x00, 0x00, 0xcc},
152062306a36Sopenharmony_ci	{0xb6, 0x03, 0x02, 0xcc},
152162306a36Sopenharmony_ci	{0xb6, 0x02, 0x80, 0xcc},
152262306a36Sopenharmony_ci	{0xb6, 0x05, 0x01, 0xcc},
152362306a36Sopenharmony_ci	{0xb6, 0x04, 0xe0, 0xcc},
152462306a36Sopenharmony_ci	{0xb6, 0x12, 0x78, 0xcc},
152562306a36Sopenharmony_ci	{0xb6, 0x18, 0x02, 0xcc},
152662306a36Sopenharmony_ci	{0xb6, 0x17, 0x58, 0xcc},
152762306a36Sopenharmony_ci	{0xb6, 0x16, 0x00, 0xcc},
152862306a36Sopenharmony_ci	{0xb6, 0x22, 0x12, 0xcc},
152962306a36Sopenharmony_ci	{0xb6, 0x23, 0x0b, 0xcc},
153062306a36Sopenharmony_ci	{0xb3, 0x02, 0x02, 0xcc},
153162306a36Sopenharmony_ci	{0xbf, 0xc0, 0x39, 0xcc},
153262306a36Sopenharmony_ci	{0xbf, 0xc1, 0x04, 0xcc},
153362306a36Sopenharmony_ci	{0xbf, 0xcc, 0x10, 0xcc},
153462306a36Sopenharmony_ci	{0xb6, 0x12, 0xf8, 0xcc},
153562306a36Sopenharmony_ci	{0xb6, 0x13, 0x13, 0xcc},
153662306a36Sopenharmony_ci	{0xb9, 0x12, 0x00, 0xcc},
153762306a36Sopenharmony_ci	{0xb9, 0x13, 0x0a, 0xcc},
153862306a36Sopenharmony_ci	{0xb9, 0x14, 0x0a, 0xcc},
153962306a36Sopenharmony_ci	{0xb9, 0x15, 0x0a, 0xcc},
154062306a36Sopenharmony_ci	{0xb9, 0x16, 0x0a, 0xcc},
154162306a36Sopenharmony_ci	{0xb8, 0x0c, 0x20, 0xcc},
154262306a36Sopenharmony_ci	{0xb8, 0x0d, 0x70, 0xcc},
154362306a36Sopenharmony_ci	{0xb9, 0x18, 0x00, 0xcc},
154462306a36Sopenharmony_ci	{0xb9, 0x19, 0x0f, 0xcc},
154562306a36Sopenharmony_ci	{0xb9, 0x1a, 0x0f, 0xcc},
154662306a36Sopenharmony_ci	{0xb9, 0x1b, 0x0f, 0xcc},
154762306a36Sopenharmony_ci	{0xb9, 0x1c, 0x0f, 0xcc},
154862306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},
154962306a36Sopenharmony_ci	{}
155062306a36Sopenharmony_ci};
155162306a36Sopenharmony_ci
155262306a36Sopenharmony_cistatic const u8 hv7131r_initQVGA_data[][4] = {
155362306a36Sopenharmony_ci	{0xb3, 0x01, 0x01, 0xcc},
155462306a36Sopenharmony_ci	{0xb0, 0x03, 0x19, 0xcc},
155562306a36Sopenharmony_ci	{0xb0, 0x04, 0x02, 0xcc},
155662306a36Sopenharmony_ci	{0x00, 0x00, 0x20, 0xdd},
155762306a36Sopenharmony_ci	{0xb3, 0x00, 0x24, 0xcc},
155862306a36Sopenharmony_ci	{0xb3, 0x00, 0x25, 0xcc},
155962306a36Sopenharmony_ci	{0xb3, 0x08, 0x01, 0xcc},
156062306a36Sopenharmony_ci	{0xb3, 0x09, 0x0c, 0xcc},
156162306a36Sopenharmony_ci	{0xb3, 0x05, 0x01, 0xcc},
156262306a36Sopenharmony_ci	{0xb3, 0x06, 0x03, 0xcc},
156362306a36Sopenharmony_ci	{0xb3, 0x01, 0x45, 0xcc},
156462306a36Sopenharmony_ci	{0xb3, 0x03, 0x0b, 0xcc},
156562306a36Sopenharmony_ci	{0xb3, 0x04, 0x05, 0xcc},
156662306a36Sopenharmony_ci	{0xb3, 0x20, 0x00, 0xcc},
156762306a36Sopenharmony_ci	{0xb3, 0x21, 0x00, 0xcc},
156862306a36Sopenharmony_ci	{0xb3, 0x22, 0x01, 0xcc},
156962306a36Sopenharmony_ci	{0xb3, 0x23, 0xe0, 0xcc},
157062306a36Sopenharmony_ci	{0xb3, 0x14, 0x00, 0xcc},
157162306a36Sopenharmony_ci	{0xb3, 0x15, 0x02, 0xcc},
157262306a36Sopenharmony_ci	{0xb3, 0x16, 0x02, 0xcc},
157362306a36Sopenharmony_ci	{0xb3, 0x17, 0x7f, 0xcc},
157462306a36Sopenharmony_ci	{0xb3, 0x34, 0x01, 0xcc},
157562306a36Sopenharmony_ci	{0xb3, 0x35, 0x91, 0xcc},
157662306a36Sopenharmony_ci	{0xb3, 0x00, 0x27, 0xcc},
157762306a36Sopenharmony_ci	{0xbc, 0x00, 0xd3, 0xcc},
157862306a36Sopenharmony_ci	{0xb8, 0x00, 0x23, 0xcc},
157962306a36Sopenharmony_ci	{0xb8, 0x2c, 0x50, 0xcc},
158062306a36Sopenharmony_ci	{0xb8, 0x2d, 0xf8, 0xcc},
158162306a36Sopenharmony_ci	{0xb8, 0x2e, 0xf8, 0xcc},
158262306a36Sopenharmony_ci	{0xb8, 0x2f, 0xf8, 0xcc},
158362306a36Sopenharmony_ci	{0xb8, 0x30, 0x50, 0xcc},
158462306a36Sopenharmony_ci	{0xb8, 0x31, 0xf8, 0xcc},
158562306a36Sopenharmony_ci	{0xb8, 0x32, 0xf8, 0xcc},
158662306a36Sopenharmony_ci	{0xb8, 0x33, 0xf8, 0xcc},
158762306a36Sopenharmony_ci	{0xb8, 0x34, 0x58, 0xcc},
158862306a36Sopenharmony_ci	{0xb8, 0x35, 0x00, 0xcc},
158962306a36Sopenharmony_ci	{0xb8, 0x36, 0x00, 0xcc},
159062306a36Sopenharmony_ci	{0xb8, 0x37, 0x00, 0xcc},
159162306a36Sopenharmony_ci	{0xb8, 0x27, 0x20, 0xcc},
159262306a36Sopenharmony_ci	{0xb8, 0x01, 0x7d, 0xcc},
159362306a36Sopenharmony_ci	{0xb8, 0x81, 0x09, 0xcc},
159462306a36Sopenharmony_ci	{0xb3, 0x01, 0x41, 0xcc},
159562306a36Sopenharmony_ci	{0xb8, 0x8e, 0x00, 0xcc},
159662306a36Sopenharmony_ci	{0xb8, 0x8f, 0xff, 0xcc},
159762306a36Sopenharmony_ci	{0x00, 0x01, 0x0c, 0xaa},
159862306a36Sopenharmony_ci	{0x00, 0x14, 0x01, 0xaa},
159962306a36Sopenharmony_ci	{0x00, 0x15, 0xe6, 0xaa},
160062306a36Sopenharmony_ci	{0x00, 0x16, 0x02, 0xaa},
160162306a36Sopenharmony_ci	{0x00, 0x17, 0x86, 0xaa},
160262306a36Sopenharmony_ci	{0x00, 0x23, 0x00, 0xaa},
160362306a36Sopenharmony_ci	{0x00, 0x25, 0x03, 0xaa},
160462306a36Sopenharmony_ci	{0x00, 0x26, 0xa9, 0xaa},
160562306a36Sopenharmony_ci	{0x00, 0x27, 0x80, 0xaa},
160662306a36Sopenharmony_ci	{0x00, 0x30, 0x18, 0xaa},
160762306a36Sopenharmony_ci	{0xb6, 0x00, 0x00, 0xcc},
160862306a36Sopenharmony_ci	{0xb6, 0x03, 0x01, 0xcc},
160962306a36Sopenharmony_ci	{0xb6, 0x02, 0x40, 0xcc},
161062306a36Sopenharmony_ci	{0xb6, 0x05, 0x00, 0xcc},
161162306a36Sopenharmony_ci	{0xb6, 0x04, 0xf0, 0xcc},
161262306a36Sopenharmony_ci	{0xb6, 0x12, 0x78, 0xcc},
161362306a36Sopenharmony_ci	{0xb6, 0x18, 0x00, 0xcc},
161462306a36Sopenharmony_ci	{0xb6, 0x17, 0x96, 0xcc},
161562306a36Sopenharmony_ci	{0xb6, 0x16, 0x00, 0xcc},
161662306a36Sopenharmony_ci	{0xb6, 0x22, 0x12, 0xcc},
161762306a36Sopenharmony_ci	{0xb6, 0x23, 0x0b, 0xcc},
161862306a36Sopenharmony_ci	{0xb3, 0x02, 0x02, 0xcc},
161962306a36Sopenharmony_ci	{0xbf, 0xc0, 0x39, 0xcc},
162062306a36Sopenharmony_ci	{0xbf, 0xc1, 0x04, 0xcc},
162162306a36Sopenharmony_ci	{0xbf, 0xcc, 0x10, 0xcc},
162262306a36Sopenharmony_ci	{0xbc, 0x02, 0x18, 0xcc},
162362306a36Sopenharmony_ci	{0xbc, 0x03, 0x50, 0xcc},
162462306a36Sopenharmony_ci	{0xbc, 0x04, 0x18, 0xcc},
162562306a36Sopenharmony_ci	{0xbc, 0x05, 0x00, 0xcc},
162662306a36Sopenharmony_ci	{0xbc, 0x06, 0x00, 0xcc},
162762306a36Sopenharmony_ci	{0xbc, 0x08, 0x30, 0xcc},
162862306a36Sopenharmony_ci	{0xbc, 0x09, 0x40, 0xcc},
162962306a36Sopenharmony_ci	{0xbc, 0x0a, 0x10, 0xcc},
163062306a36Sopenharmony_ci	{0xbc, 0x0b, 0x00, 0xcc},
163162306a36Sopenharmony_ci	{0xbc, 0x0c, 0x00, 0xcc},
163262306a36Sopenharmony_ci	{0xb9, 0x12, 0x00, 0xcc},
163362306a36Sopenharmony_ci	{0xb9, 0x13, 0x0a, 0xcc},
163462306a36Sopenharmony_ci	{0xb9, 0x14, 0x0a, 0xcc},
163562306a36Sopenharmony_ci	{0xb9, 0x15, 0x0a, 0xcc},
163662306a36Sopenharmony_ci	{0xb9, 0x16, 0x0a, 0xcc},
163762306a36Sopenharmony_ci	{0xb9, 0x18, 0x00, 0xcc},
163862306a36Sopenharmony_ci	{0xb9, 0x19, 0x0f, 0xcc},
163962306a36Sopenharmony_ci	{0xb8, 0x0c, 0x20, 0xcc},
164062306a36Sopenharmony_ci	{0xb8, 0x0d, 0x70, 0xcc},
164162306a36Sopenharmony_ci	{0xb9, 0x1a, 0x0f, 0xcc},
164262306a36Sopenharmony_ci	{0xb9, 0x1b, 0x0f, 0xcc},
164362306a36Sopenharmony_ci	{0xb9, 0x1c, 0x0f, 0xcc},
164462306a36Sopenharmony_ci	{0xb6, 0x12, 0xf8, 0xcc},
164562306a36Sopenharmony_ci	{0xb6, 0x13, 0x13, 0xcc},
164662306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},
164762306a36Sopenharmony_ci	{}
164862306a36Sopenharmony_ci};
164962306a36Sopenharmony_ci
165062306a36Sopenharmony_cistatic const u8 ov7660_gamma[17] = {
165162306a36Sopenharmony_ci	0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,
165262306a36Sopenharmony_ci	0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff
165362306a36Sopenharmony_ci};
165462306a36Sopenharmony_cistatic const u8 ov7660_matrix[9] = {
165562306a36Sopenharmony_ci	0x5a, 0xf0, 0xf6, 0xf3, 0x57, 0xf6, 0xf3, 0xef, 0x62
165662306a36Sopenharmony_ci};
165762306a36Sopenharmony_cistatic const u8 ov7660_initVGA_data[][4] = {
165862306a36Sopenharmony_ci	{0xb0, 0x4d, 0x00, 0xcc},	{0xb3, 0x01, 0x01, 0xcc},
165962306a36Sopenharmony_ci	{0x00, 0x00, 0x50, 0xdd},
166062306a36Sopenharmony_ci	{0xb0, 0x03, 0x01, 0xcc},
166162306a36Sopenharmony_ci	{0xb3, 0x00, 0x21, 0xcc},	{0xb3, 0x00, 0x26, 0xcc},
166262306a36Sopenharmony_ci	{0xb3, 0x05, 0x01, 0xcc},
166362306a36Sopenharmony_ci	{0xb3, 0x06, 0x03, 0xcc},
166462306a36Sopenharmony_ci	{0xb3, 0x03, 0x1f, 0xcc},	{0xb3, 0x04, 0x05, 0xcc},
166562306a36Sopenharmony_ci	{0xb3, 0x05, 0x00, 0xcc},
166662306a36Sopenharmony_ci	{0xb3, 0x06, 0x01, 0xcc},
166762306a36Sopenharmony_ci	{0xb3, 0x15, 0x00, 0xcc},/* 0xb315  <-0 href startl */
166862306a36Sopenharmony_ci	{0xb3, 0x16, 0x02, 0xcc},	{0xb3, 0x17, 0x7f, 0xcc},
166962306a36Sopenharmony_ci	{0xb3, 0x21, 0x00, 0xcc},
167062306a36Sopenharmony_ci	{0xb3, 0x23, 0xe0, 0xcc},	{0xb3, 0x1d, 0x01, 0xcc},
167162306a36Sopenharmony_ci	{0xb3, 0x1f, 0x02, 0xcc},
167262306a36Sopenharmony_ci	{0xb3, 0x34, 0x01, 0xcc},
167362306a36Sopenharmony_ci	{0xb3, 0x35, 0xa1, 0xcc},	/* i2c add: 21 */
167462306a36Sopenharmony_ci	{0xb3, 0x00, 0x26, 0xcc},
167562306a36Sopenharmony_ci	{0xb8, 0x00, 0x33, 0xcc}, /* 13 */
167662306a36Sopenharmony_ci	{0xb8, 0x01, 0x7d, 0xcc},
167762306a36Sopenharmony_ci	{0xbc, 0x00, 0x73, 0xcc},	{0xb8, 0x81, 0x09, 0xcc},
167862306a36Sopenharmony_ci	{0xb8, 0x27, 0x20, 0xcc},
167962306a36Sopenharmony_ci	{0xb8, 0x8f, 0x50, 0xcc},
168062306a36Sopenharmony_ci	{0x00, 0x01, 0x80, 0xaa},	{0x00, 0x02, 0x80, 0xaa},
168162306a36Sopenharmony_ci	{0x00, 0x12, 0x80, 0xaa},
168262306a36Sopenharmony_ci	{0x00, 0x12, 0x05, 0xaa},
168362306a36Sopenharmony_ci	{0x00, 0x1e, 0x01, 0xaa},	/* MVFP */
168462306a36Sopenharmony_ci	{0x00, 0x3d, 0x40, 0xaa}, /* 0x3d <-40 gamma 01 */
168562306a36Sopenharmony_ci	{0x00, 0x41, 0x00, 0xaa}, /* edge 00 */
168662306a36Sopenharmony_ci	{0x00, 0x0d, 0x48, 0xaa},	{0x00, 0x0e, 0x04, 0xaa},
168762306a36Sopenharmony_ci	{0x00, 0x13, 0xa7, 0xaa},
168862306a36Sopenharmony_ci	{0x00, 0x40, 0xc1, 0xaa},	{0x00, 0x35, 0x00, 0xaa},
168962306a36Sopenharmony_ci	{0x00, 0x36, 0x00, 0xaa},
169062306a36Sopenharmony_ci	{0x00, 0x3c, 0x68, 0xaa},	{0x00, 0x1b, 0x05, 0xaa},
169162306a36Sopenharmony_ci	{0x00, 0x39, 0x43, 0xaa},
169262306a36Sopenharmony_ci	{0x00, 0x8d, 0xcf, 0xaa},
169362306a36Sopenharmony_ci	{0x00, 0x8b, 0xcc, 0xaa},	{0x00, 0x8c, 0xcc, 0xaa},
169462306a36Sopenharmony_ci	{0x00, 0x0f, 0x62, 0xaa},
169562306a36Sopenharmony_ci	{0x00, 0x35, 0x84, 0xaa},
169662306a36Sopenharmony_ci	{0x00, 0x3b, 0x08, 0xaa}, /* 0 * Nightframe 1/4 + 50Hz -> 0xC8 */
169762306a36Sopenharmony_ci	{0x00, 0x3a, 0x00, 0xaa}, /* mx change yuyv format 00, 04, 01; 08, 0c*/
169862306a36Sopenharmony_ci	{0x00, 0x14, 0x2a, 0xaa}, /* agc ampli */
169962306a36Sopenharmony_ci	{0x00, 0x9e, 0x40, 0xaa},	{0xb8, 0x8f, 0x50, 0xcc},
170062306a36Sopenharmony_ci	{0x00, 0x01, 0x80, 0xaa},
170162306a36Sopenharmony_ci	{0x00, 0x02, 0x80, 0xaa},
170262306a36Sopenharmony_ci	{0xb8, 0xfe, 0x00, 0xcc},	{0xb8, 0xff, 0x28, 0xcc},
170362306a36Sopenharmony_ci	{0xb9, 0x00, 0x28, 0xcc},
170462306a36Sopenharmony_ci	{0xb9, 0x01, 0x28, 0xcc},	{0xb9, 0x02, 0x28, 0xcc},
170562306a36Sopenharmony_ci	{0xb9, 0x03, 0x00, 0xcc},
170662306a36Sopenharmony_ci	{0xb9, 0x04, 0x00, 0xcc},
170762306a36Sopenharmony_ci	{0xb9, 0x05, 0x3c, 0xcc},	{0xb9, 0x06, 0x3c, 0xcc},
170862306a36Sopenharmony_ci	{0xb9, 0x07, 0x3c, 0xcc},
170962306a36Sopenharmony_ci	{0xb9, 0x08, 0x3c, 0xcc},
171062306a36Sopenharmony_ci
171162306a36Sopenharmony_ci	{0xb8, 0x8e, 0x00, 0xcc},	{0xb8, 0x8f, 0xff, 0xcc},
171262306a36Sopenharmony_ci
171362306a36Sopenharmony_ci	{0x00, 0x29, 0x3c, 0xaa},	{0xb3, 0x01, 0x45, 0xcc},
171462306a36Sopenharmony_ci	{}
171562306a36Sopenharmony_ci};
171662306a36Sopenharmony_cistatic const u8 ov7660_initQVGA_data[][4] = {
171762306a36Sopenharmony_ci	{0xb0, 0x4d, 0x00, 0xcc},	{0xb3, 0x01, 0x01, 0xcc},
171862306a36Sopenharmony_ci	{0x00, 0x00, 0x50, 0xdd},	{0xb0, 0x03, 0x01, 0xcc},
171962306a36Sopenharmony_ci	{0xb3, 0x00, 0x21, 0xcc},	{0xb3, 0x00, 0x26, 0xcc},
172062306a36Sopenharmony_ci	{0xb3, 0x05, 0x01, 0xcc},	{0xb3, 0x06, 0x03, 0xcc},
172162306a36Sopenharmony_ci	{0xb3, 0x03, 0x1f, 0xcc},	{0xb3, 0x04, 0x05, 0xcc},
172262306a36Sopenharmony_ci	{0xb3, 0x05, 0x00, 0xcc},	{0xb3, 0x06, 0x01, 0xcc},
172362306a36Sopenharmony_ci	{0xb3, 0x15, 0x00, 0xcc},/* 0xb315  <-0 href startl */
172462306a36Sopenharmony_ci	{0xb3, 0x16, 0x02, 0xcc},	{0xb3, 0x17, 0x7f, 0xcc},
172562306a36Sopenharmony_ci	{0xb3, 0x21, 0x00, 0xcc},
172662306a36Sopenharmony_ci	{0xb3, 0x23, 0xe0, 0xcc},	{0xb3, 0x1d, 0x01, 0xcc},
172762306a36Sopenharmony_ci	{0xb3, 0x1f, 0x02, 0xcc},	{0xb3, 0x34, 0x01, 0xcc},
172862306a36Sopenharmony_ci	{0xb3, 0x35, 0xa1, 0xcc},	{0xb3, 0x00, 0x26, 0xcc},
172962306a36Sopenharmony_ci	{0xb8, 0x00, 0x33, 0xcc}, /* 13 */
173062306a36Sopenharmony_ci	{0xb8, 0x01, 0x7d, 0xcc},
173162306a36Sopenharmony_ci/* sizer */
173262306a36Sopenharmony_ci	{0xbc, 0x00, 0xd3, 0xcc},
173362306a36Sopenharmony_ci	{0xb8, 0x81, 0x09, 0xcc},	{0xb8, 0x81, 0x09, 0xcc},
173462306a36Sopenharmony_ci	{0xb8, 0x27, 0x20, 0xcc},	{0xb8, 0x8f, 0x50, 0xcc},
173562306a36Sopenharmony_ci	{0x00, 0x01, 0x80, 0xaa},	{0x00, 0x02, 0x80, 0xaa},
173662306a36Sopenharmony_ci	{0x00, 0x12, 0x80, 0xaa},	{0x00, 0x12, 0x05, 0xaa},
173762306a36Sopenharmony_ci	{0x00, 0x1e, 0x01, 0xaa},	/* MVFP */
173862306a36Sopenharmony_ci	{0x00, 0x3d, 0x40, 0xaa}, /* 0x3d <-40 gamma 01 */
173962306a36Sopenharmony_ci	{0x00, 0x41, 0x00, 0xaa}, /* edge 00 */
174062306a36Sopenharmony_ci	{0x00, 0x0d, 0x48, 0xaa},	{0x00, 0x0e, 0x04, 0xaa},
174162306a36Sopenharmony_ci	{0x00, 0x13, 0xa7, 0xaa},
174262306a36Sopenharmony_ci	{0x00, 0x40, 0xc1, 0xaa},	{0x00, 0x35, 0x00, 0xaa},
174362306a36Sopenharmony_ci	{0x00, 0x36, 0x00, 0xaa},
174462306a36Sopenharmony_ci	{0x00, 0x3c, 0x68, 0xaa},	{0x00, 0x1b, 0x05, 0xaa},
174562306a36Sopenharmony_ci	{0x00, 0x39, 0x43, 0xaa},	{0x00, 0x8d, 0xcf, 0xaa},
174662306a36Sopenharmony_ci	{0x00, 0x8b, 0xcc, 0xaa},	{0x00, 0x8c, 0xcc, 0xaa},
174762306a36Sopenharmony_ci	{0x00, 0x0f, 0x62, 0xaa},	{0x00, 0x35, 0x84, 0xaa},
174862306a36Sopenharmony_ci	{0x00, 0x3b, 0x08, 0xaa}, /* 0  * Nightframe 1/4 + 50Hz -> 0xC8 */
174962306a36Sopenharmony_ci	{0x00, 0x3a, 0x00, 0xaa}, /* mx change yuyv format 00, 04, 01; 08, 0c*/
175062306a36Sopenharmony_ci	{0x00, 0x14, 0x2a, 0xaa}, /* agc ampli */
175162306a36Sopenharmony_ci	{0x00, 0x9e, 0x40, 0xaa},	{0xb8, 0x8f, 0x50, 0xcc},
175262306a36Sopenharmony_ci	{0x00, 0x01, 0x80, 0xaa},
175362306a36Sopenharmony_ci	{0x00, 0x02, 0x80, 0xaa},
175462306a36Sopenharmony_ci/* sizer filters */
175562306a36Sopenharmony_ci	{0xbc, 0x02, 0x08, 0xcc},
175662306a36Sopenharmony_ci	{0xbc, 0x03, 0x70, 0xcc},
175762306a36Sopenharmony_ci	{0xb8, 0x35, 0x00, 0xcc},
175862306a36Sopenharmony_ci	{0xb8, 0x36, 0x00, 0xcc},
175962306a36Sopenharmony_ci	{0xb8, 0x37, 0x00, 0xcc},
176062306a36Sopenharmony_ci	{0xbc, 0x04, 0x08, 0xcc},
176162306a36Sopenharmony_ci	{0xbc, 0x05, 0x00, 0xcc},
176262306a36Sopenharmony_ci	{0xbc, 0x06, 0x00, 0xcc},
176362306a36Sopenharmony_ci	{0xbc, 0x08, 0x3c, 0xcc},
176462306a36Sopenharmony_ci	{0xbc, 0x09, 0x40, 0xcc},
176562306a36Sopenharmony_ci	{0xbc, 0x0a, 0x04, 0xcc},
176662306a36Sopenharmony_ci	{0xbc, 0x0b, 0x00, 0xcc},
176762306a36Sopenharmony_ci	{0xbc, 0x0c, 0x00, 0xcc},
176862306a36Sopenharmony_ci/* */
176962306a36Sopenharmony_ci	{0xb8, 0xfe, 0x00, 0xcc},
177062306a36Sopenharmony_ci	{0xb8, 0xff, 0x28, 0xcc},
177162306a36Sopenharmony_ci/* */
177262306a36Sopenharmony_ci	{0xb9, 0x00, 0x28, 0xcc},	{0xb9, 0x01, 0x28, 0xcc},
177362306a36Sopenharmony_ci	{0xb9, 0x02, 0x28, 0xcc},	{0xb9, 0x03, 0x00, 0xcc},
177462306a36Sopenharmony_ci	{0xb9, 0x04, 0x00, 0xcc},	{0xb9, 0x05, 0x3c, 0xcc},
177562306a36Sopenharmony_ci	{0xb9, 0x06, 0x3c, 0xcc},	{0xb9, 0x07, 0x3c, 0xcc},
177662306a36Sopenharmony_ci	{0xb9, 0x08, 0x3c, 0xcc},
177762306a36Sopenharmony_ci/* */
177862306a36Sopenharmony_ci	{0xb8, 0x8e, 0x00, 0xcc},
177962306a36Sopenharmony_ci	{0xb8, 0x8f, 0xff, 0xcc}, /* ff */
178062306a36Sopenharmony_ci	{0x00, 0x29, 0x3c, 0xaa},
178162306a36Sopenharmony_ci	{0xb3, 0x01, 0x45, 0xcc}, /* 45 */
178262306a36Sopenharmony_ci	{}
178362306a36Sopenharmony_ci};
178462306a36Sopenharmony_ci
178562306a36Sopenharmony_cistatic const u8 ov7660_50HZ[][4] = {
178662306a36Sopenharmony_ci	{0x00, 0x3b, 0x08, 0xaa},
178762306a36Sopenharmony_ci	{0x00, 0x9d, 0x40, 0xaa},
178862306a36Sopenharmony_ci	{0x00, 0x13, 0xa7, 0xaa},
178962306a36Sopenharmony_ci	{}
179062306a36Sopenharmony_ci};
179162306a36Sopenharmony_ci
179262306a36Sopenharmony_cistatic const u8 ov7660_60HZ[][4] = {
179362306a36Sopenharmony_ci	{0x00, 0x3b, 0x00, 0xaa},
179462306a36Sopenharmony_ci	{0x00, 0x9e, 0x40, 0xaa},
179562306a36Sopenharmony_ci	{0x00, 0x13, 0xa7, 0xaa},
179662306a36Sopenharmony_ci	{}
179762306a36Sopenharmony_ci};
179862306a36Sopenharmony_ci
179962306a36Sopenharmony_cistatic const u8 ov7660_NoFlicker[][4] = {
180062306a36Sopenharmony_ci	{0x00, 0x13, 0x87, 0xaa},
180162306a36Sopenharmony_ci	{}
180262306a36Sopenharmony_ci};
180362306a36Sopenharmony_ci
180462306a36Sopenharmony_cistatic const u8 ov7670_InitVGA[][4] = {
180562306a36Sopenharmony_ci	{0xb3, 0x01, 0x05, 0xcc},
180662306a36Sopenharmony_ci	{0x00, 0x00, 0x30, 0xdd},
180762306a36Sopenharmony_ci	{0xb0, 0x03, 0x19, 0xcc},
180862306a36Sopenharmony_ci	{0x00, 0x00, 0x10, 0xdd},
180962306a36Sopenharmony_ci	{0xb0, 0x04, 0x02, 0xcc},
181062306a36Sopenharmony_ci	{0x00, 0x00, 0x10, 0xdd},
181162306a36Sopenharmony_ci	{0xb3, 0x00, 0x66, 0xcc},
181262306a36Sopenharmony_ci	{0xb3, 0x00, 0x67, 0xcc},
181362306a36Sopenharmony_ci	{0xb0, 0x16, 0x01, 0xcc},
181462306a36Sopenharmony_ci	{0xb3, 0x35, 0xa1, 0xcc},	/* i2c add: 21 */
181562306a36Sopenharmony_ci	{0xb3, 0x34, 0x01, 0xcc},
181662306a36Sopenharmony_ci	{0xb3, 0x05, 0x01, 0xcc},
181762306a36Sopenharmony_ci	{0xb3, 0x06, 0x01, 0xcc},
181862306a36Sopenharmony_ci	{0xb3, 0x08, 0x01, 0xcc},
181962306a36Sopenharmony_ci	{0xb3, 0x09, 0x0c, 0xcc},
182062306a36Sopenharmony_ci	{0xb3, 0x02, 0x02, 0xcc},
182162306a36Sopenharmony_ci	{0xb3, 0x03, 0x1f, 0xcc},
182262306a36Sopenharmony_ci	{0xb3, 0x14, 0x00, 0xcc},
182362306a36Sopenharmony_ci	{0xb3, 0x15, 0x00, 0xcc},
182462306a36Sopenharmony_ci	{0xb3, 0x16, 0x02, 0xcc},
182562306a36Sopenharmony_ci	{0xb3, 0x17, 0x7f, 0xcc},
182662306a36Sopenharmony_ci	{0xb3, 0x04, 0x05, 0xcc},
182762306a36Sopenharmony_ci	{0xb3, 0x20, 0x00, 0xcc},
182862306a36Sopenharmony_ci	{0xb3, 0x21, 0x00, 0xcc},
182962306a36Sopenharmony_ci	{0xb3, 0x22, 0x01, 0xcc},
183062306a36Sopenharmony_ci	{0xb3, 0x23, 0xe0, 0xcc},
183162306a36Sopenharmony_ci	{0xbc, 0x00, 0x41, 0xcc},
183262306a36Sopenharmony_ci	{0xbc, 0x01, 0x01, 0xcc},
183362306a36Sopenharmony_ci	{0x00, 0x12, 0x80, 0xaa},
183462306a36Sopenharmony_ci	{0x00, 0x00, 0x20, 0xdd},
183562306a36Sopenharmony_ci	{0x00, 0x12, 0x00, 0xaa},
183662306a36Sopenharmony_ci	{0x00, 0x11, 0x40, 0xaa},
183762306a36Sopenharmony_ci	{0x00, 0x6b, 0x0a, 0xaa},
183862306a36Sopenharmony_ci	{0x00, 0x3a, 0x04, 0xaa},
183962306a36Sopenharmony_ci	{0x00, 0x40, 0xc0, 0xaa},
184062306a36Sopenharmony_ci	{0x00, 0x8c, 0x00, 0xaa},
184162306a36Sopenharmony_ci	{0x00, 0x7a, 0x29, 0xaa},
184262306a36Sopenharmony_ci	{0x00, 0x7b, 0x0e, 0xaa},
184362306a36Sopenharmony_ci	{0x00, 0x7c, 0x1a, 0xaa},
184462306a36Sopenharmony_ci	{0x00, 0x7d, 0x31, 0xaa},
184562306a36Sopenharmony_ci	{0x00, 0x7e, 0x53, 0xaa},
184662306a36Sopenharmony_ci	{0x00, 0x7f, 0x60, 0xaa},
184762306a36Sopenharmony_ci	{0x00, 0x80, 0x6b, 0xaa},
184862306a36Sopenharmony_ci	{0x00, 0x81, 0x73, 0xaa},
184962306a36Sopenharmony_ci	{0x00, 0x82, 0x7b, 0xaa},
185062306a36Sopenharmony_ci	{0x00, 0x83, 0x82, 0xaa},
185162306a36Sopenharmony_ci	{0x00, 0x84, 0x89, 0xaa},
185262306a36Sopenharmony_ci	{0x00, 0x85, 0x96, 0xaa},
185362306a36Sopenharmony_ci	{0x00, 0x86, 0xa1, 0xaa},
185462306a36Sopenharmony_ci	{0x00, 0x87, 0xb7, 0xaa},
185562306a36Sopenharmony_ci	{0x00, 0x88, 0xcc, 0xaa},
185662306a36Sopenharmony_ci	{0x00, 0x89, 0xe1, 0xaa},
185762306a36Sopenharmony_ci	{0x00, 0x13, 0xe0, 0xaa},
185862306a36Sopenharmony_ci	{0x00, 0x00, 0x00, 0xaa},
185962306a36Sopenharmony_ci	{0x00, 0x10, 0x00, 0xaa},
186062306a36Sopenharmony_ci	{0x00, 0x0d, 0x40, 0xaa},
186162306a36Sopenharmony_ci	{0x00, 0x14, 0x28, 0xaa},
186262306a36Sopenharmony_ci	{0x00, 0xa5, 0x05, 0xaa},
186362306a36Sopenharmony_ci	{0x00, 0xab, 0x07, 0xaa},
186462306a36Sopenharmony_ci	{0x00, 0x24, 0x95, 0xaa},
186562306a36Sopenharmony_ci	{0x00, 0x25, 0x33, 0xaa},
186662306a36Sopenharmony_ci	{0x00, 0x26, 0xe3, 0xaa},
186762306a36Sopenharmony_ci	{0x00, 0x9f, 0x88, 0xaa},
186862306a36Sopenharmony_ci	{0x00, 0xa0, 0x78, 0xaa},
186962306a36Sopenharmony_ci	{0x00, 0x55, 0x90, 0xaa},
187062306a36Sopenharmony_ci	{0x00, 0xa1, 0x03, 0xaa},
187162306a36Sopenharmony_ci	{0x00, 0xa6, 0xe0, 0xaa},
187262306a36Sopenharmony_ci	{0x00, 0xa7, 0xd8, 0xaa},
187362306a36Sopenharmony_ci	{0x00, 0xa8, 0xf0, 0xaa},
187462306a36Sopenharmony_ci	{0x00, 0xa9, 0x90, 0xaa},
187562306a36Sopenharmony_ci	{0x00, 0xaa, 0x14, 0xaa},
187662306a36Sopenharmony_ci	{0x00, 0x13, 0xe5, 0xaa},
187762306a36Sopenharmony_ci	{0x00, 0x0e, 0x61, 0xaa},
187862306a36Sopenharmony_ci	{0x00, 0x0f, 0x4b, 0xaa},
187962306a36Sopenharmony_ci	{0x00, 0x16, 0x02, 0xaa},
188062306a36Sopenharmony_ci	{0x00, 0x1e, 0x07, 0xaa},	/* MVFP */
188162306a36Sopenharmony_ci	{0x00, 0x21, 0x02, 0xaa},
188262306a36Sopenharmony_ci	{0x00, 0x22, 0x91, 0xaa},
188362306a36Sopenharmony_ci	{0x00, 0x29, 0x07, 0xaa},
188462306a36Sopenharmony_ci	{0x00, 0x33, 0x0b, 0xaa},
188562306a36Sopenharmony_ci	{0x00, 0x35, 0x0b, 0xaa},
188662306a36Sopenharmony_ci	{0x00, 0x37, 0x1d, 0xaa},
188762306a36Sopenharmony_ci	{0x00, 0x38, 0x71, 0xaa},
188862306a36Sopenharmony_ci	{0x00, 0x39, 0x2a, 0xaa},
188962306a36Sopenharmony_ci	{0x00, 0x3c, 0x78, 0xaa},
189062306a36Sopenharmony_ci	{0x00, 0x4d, 0x40, 0xaa},
189162306a36Sopenharmony_ci	{0x00, 0x4e, 0x20, 0xaa},
189262306a36Sopenharmony_ci	{0x00, 0x74, 0x19, 0xaa},
189362306a36Sopenharmony_ci	{0x00, 0x8d, 0x4f, 0xaa},
189462306a36Sopenharmony_ci	{0x00, 0x8e, 0x00, 0xaa},
189562306a36Sopenharmony_ci	{0x00, 0x8f, 0x00, 0xaa},
189662306a36Sopenharmony_ci	{0x00, 0x90, 0x00, 0xaa},
189762306a36Sopenharmony_ci	{0x00, 0x91, 0x00, 0xaa},
189862306a36Sopenharmony_ci	{0x00, 0x96, 0x00, 0xaa},
189962306a36Sopenharmony_ci	{0x00, 0x9a, 0x80, 0xaa},
190062306a36Sopenharmony_ci	{0x00, 0xb0, 0x84, 0xaa},
190162306a36Sopenharmony_ci	{0x00, 0xb1, 0x0c, 0xaa},
190262306a36Sopenharmony_ci	{0x00, 0xb2, 0x0e, 0xaa},
190362306a36Sopenharmony_ci	{0x00, 0xb3, 0x82, 0xaa},
190462306a36Sopenharmony_ci	{0x00, 0xb8, 0x0a, 0xaa},
190562306a36Sopenharmony_ci	{0x00, 0x43, 0x14, 0xaa},
190662306a36Sopenharmony_ci	{0x00, 0x44, 0xf0, 0xaa},
190762306a36Sopenharmony_ci	{0x00, 0x45, 0x45, 0xaa},
190862306a36Sopenharmony_ci	{0x00, 0x46, 0x63, 0xaa},
190962306a36Sopenharmony_ci	{0x00, 0x47, 0x2d, 0xaa},
191062306a36Sopenharmony_ci	{0x00, 0x48, 0x46, 0xaa},
191162306a36Sopenharmony_ci	{0x00, 0x59, 0x88, 0xaa},
191262306a36Sopenharmony_ci	{0x00, 0x5a, 0xa0, 0xaa},
191362306a36Sopenharmony_ci	{0x00, 0x5b, 0xc6, 0xaa},
191462306a36Sopenharmony_ci	{0x00, 0x5c, 0x7d, 0xaa},
191562306a36Sopenharmony_ci	{0x00, 0x5d, 0x5f, 0xaa},
191662306a36Sopenharmony_ci	{0x00, 0x5e, 0x19, 0xaa},
191762306a36Sopenharmony_ci	{0x00, 0x6c, 0x0a, 0xaa},
191862306a36Sopenharmony_ci	{0x00, 0x6d, 0x55, 0xaa},
191962306a36Sopenharmony_ci	{0x00, 0x6e, 0x11, 0xaa},
192062306a36Sopenharmony_ci	{0x00, 0x6f, 0x9e, 0xaa},
192162306a36Sopenharmony_ci	{0x00, 0x69, 0x00, 0xaa},
192262306a36Sopenharmony_ci	{0x00, 0x6a, 0x40, 0xaa},
192362306a36Sopenharmony_ci	{0x00, 0x01, 0x40, 0xaa},
192462306a36Sopenharmony_ci	{0x00, 0x02, 0x40, 0xaa},
192562306a36Sopenharmony_ci	{0x00, 0x13, 0xe7, 0xaa},
192662306a36Sopenharmony_ci	{0x00, 0x5f, 0xf0, 0xaa},
192762306a36Sopenharmony_ci	{0x00, 0x60, 0xf0, 0xaa},
192862306a36Sopenharmony_ci	{0x00, 0x61, 0xf0, 0xaa},
192962306a36Sopenharmony_ci	{0x00, 0x27, 0xa0, 0xaa},
193062306a36Sopenharmony_ci	{0x00, 0x28, 0x80, 0xaa},
193162306a36Sopenharmony_ci	{0x00, 0x2c, 0x90, 0xaa},
193262306a36Sopenharmony_ci	{0x00, 0x4f, 0x66, 0xaa},
193362306a36Sopenharmony_ci	{0x00, 0x50, 0x66, 0xaa},
193462306a36Sopenharmony_ci	{0x00, 0x51, 0x00, 0xaa},
193562306a36Sopenharmony_ci	{0x00, 0x52, 0x22, 0xaa},
193662306a36Sopenharmony_ci	{0x00, 0x53, 0x5e, 0xaa},
193762306a36Sopenharmony_ci	{0x00, 0x54, 0x80, 0xaa},
193862306a36Sopenharmony_ci	{0x00, 0x58, 0x9e, 0xaa},
193962306a36Sopenharmony_ci	{0x00, 0x41, 0x08, 0xaa},
194062306a36Sopenharmony_ci	{0x00, 0x3f, 0x00, 0xaa},
194162306a36Sopenharmony_ci	{0x00, 0x75, 0x85, 0xaa},
194262306a36Sopenharmony_ci	{0x00, 0x76, 0xe1, 0xaa},
194362306a36Sopenharmony_ci	{0x00, 0x4c, 0x00, 0xaa},
194462306a36Sopenharmony_ci	{0x00, 0x77, 0x0a, 0xaa},
194562306a36Sopenharmony_ci	{0x00, 0x3d, 0x88, 0xaa},
194662306a36Sopenharmony_ci	{0x00, 0x4b, 0x09, 0xaa},
194762306a36Sopenharmony_ci	{0x00, 0xc9, 0x60, 0xaa},
194862306a36Sopenharmony_ci	{0x00, 0x41, 0x38, 0xaa},
194962306a36Sopenharmony_ci	{0x00, 0x62, 0x30, 0xaa},
195062306a36Sopenharmony_ci	{0x00, 0x63, 0x30, 0xaa},
195162306a36Sopenharmony_ci	{0x00, 0x64, 0x08, 0xaa},
195262306a36Sopenharmony_ci	{0x00, 0x94, 0x07, 0xaa},
195362306a36Sopenharmony_ci	{0x00, 0x95, 0x0b, 0xaa},
195462306a36Sopenharmony_ci	{0x00, 0x65, 0x00, 0xaa},
195562306a36Sopenharmony_ci	{0x00, 0x66, 0x05, 0xaa},
195662306a36Sopenharmony_ci	{0x00, 0x56, 0x50, 0xaa},
195762306a36Sopenharmony_ci	{0x00, 0x34, 0x11, 0xaa},
195862306a36Sopenharmony_ci	{0x00, 0xa4, 0x88, 0xaa},
195962306a36Sopenharmony_ci	{0x00, 0x96, 0x00, 0xaa},
196062306a36Sopenharmony_ci	{0x00, 0x97, 0x30, 0xaa},
196162306a36Sopenharmony_ci	{0x00, 0x98, 0x20, 0xaa},
196262306a36Sopenharmony_ci	{0x00, 0x99, 0x30, 0xaa},
196362306a36Sopenharmony_ci	{0x00, 0x9a, 0x84, 0xaa},
196462306a36Sopenharmony_ci	{0x00, 0x9b, 0x29, 0xaa},
196562306a36Sopenharmony_ci	{0x00, 0x9c, 0x03, 0xaa},
196662306a36Sopenharmony_ci	{0x00, 0x78, 0x04, 0xaa},
196762306a36Sopenharmony_ci	{0x00, 0x79, 0x01, 0xaa},
196862306a36Sopenharmony_ci	{0x00, 0xc8, 0xf0, 0xaa},
196962306a36Sopenharmony_ci	{0x00, 0x79, 0x0f, 0xaa},
197062306a36Sopenharmony_ci	{0x00, 0xc8, 0x00, 0xaa},
197162306a36Sopenharmony_ci	{0x00, 0x79, 0x10, 0xaa},
197262306a36Sopenharmony_ci	{0x00, 0xc8, 0x7e, 0xaa},
197362306a36Sopenharmony_ci	{0x00, 0x79, 0x0a, 0xaa},
197462306a36Sopenharmony_ci	{0x00, 0xc8, 0x80, 0xaa},
197562306a36Sopenharmony_ci	{0x00, 0x79, 0x0b, 0xaa},
197662306a36Sopenharmony_ci	{0x00, 0xc8, 0x01, 0xaa},
197762306a36Sopenharmony_ci	{0x00, 0x79, 0x0c, 0xaa},
197862306a36Sopenharmony_ci	{0x00, 0xc8, 0x0f, 0xaa},
197962306a36Sopenharmony_ci	{0x00, 0x79, 0x0d, 0xaa},
198062306a36Sopenharmony_ci	{0x00, 0xc8, 0x20, 0xaa},
198162306a36Sopenharmony_ci	{0x00, 0x79, 0x09, 0xaa},
198262306a36Sopenharmony_ci	{0x00, 0xc8, 0x80, 0xaa},
198362306a36Sopenharmony_ci	{0x00, 0x79, 0x02, 0xaa},
198462306a36Sopenharmony_ci	{0x00, 0xc8, 0xc0, 0xaa},
198562306a36Sopenharmony_ci	{0x00, 0x79, 0x03, 0xaa},
198662306a36Sopenharmony_ci	{0x00, 0xc8, 0x40, 0xaa},
198762306a36Sopenharmony_ci	{0x00, 0x79, 0x05, 0xaa},
198862306a36Sopenharmony_ci	{0x00, 0xc8, 0x30, 0xaa},
198962306a36Sopenharmony_ci	{0x00, 0x79, 0x26, 0xaa},
199062306a36Sopenharmony_ci	{0x00, 0x11, 0x40, 0xaa},
199162306a36Sopenharmony_ci	{0x00, 0x3a, 0x04, 0xaa},
199262306a36Sopenharmony_ci	{0x00, 0x12, 0x00, 0xaa},
199362306a36Sopenharmony_ci	{0x00, 0x40, 0xc0, 0xaa},
199462306a36Sopenharmony_ci	{0x00, 0x8c, 0x00, 0xaa},
199562306a36Sopenharmony_ci	{0x00, 0x17, 0x14, 0xaa},
199662306a36Sopenharmony_ci	{0x00, 0x18, 0x02, 0xaa},
199762306a36Sopenharmony_ci	{0x00, 0x32, 0x92, 0xaa},
199862306a36Sopenharmony_ci	{0x00, 0x19, 0x02, 0xaa},
199962306a36Sopenharmony_ci	{0x00, 0x1a, 0x7a, 0xaa},
200062306a36Sopenharmony_ci	{0x00, 0x03, 0x0a, 0xaa},
200162306a36Sopenharmony_ci	{0x00, 0x0c, 0x00, 0xaa},
200262306a36Sopenharmony_ci	{0x00, 0x3e, 0x00, 0xaa},
200362306a36Sopenharmony_ci	{0x00, 0x70, 0x3a, 0xaa},
200462306a36Sopenharmony_ci	{0x00, 0x71, 0x35, 0xaa},
200562306a36Sopenharmony_ci	{0x00, 0x72, 0x11, 0xaa},
200662306a36Sopenharmony_ci	{0x00, 0x73, 0xf0, 0xaa},
200762306a36Sopenharmony_ci	{0x00, 0xa2, 0x02, 0xaa},
200862306a36Sopenharmony_ci	{0x00, 0xb1, 0x00, 0xaa},
200962306a36Sopenharmony_ci	{0x00, 0xb1, 0x0c, 0xaa},
201062306a36Sopenharmony_ci	{0x00, 0x1e, 0x37, 0xaa},	/* MVFP */
201162306a36Sopenharmony_ci	{0x00, 0xaa, 0x14, 0xaa},
201262306a36Sopenharmony_ci	{0x00, 0x24, 0x80, 0xaa},
201362306a36Sopenharmony_ci	{0x00, 0x25, 0x74, 0xaa},
201462306a36Sopenharmony_ci	{0x00, 0x26, 0xd3, 0xaa},
201562306a36Sopenharmony_ci	{0x00, 0x0d, 0x00, 0xaa},
201662306a36Sopenharmony_ci	{0x00, 0x14, 0x18, 0xaa},
201762306a36Sopenharmony_ci	{0x00, 0x9d, 0x99, 0xaa},
201862306a36Sopenharmony_ci	{0x00, 0x9e, 0x7f, 0xaa},
201962306a36Sopenharmony_ci	{0x00, 0x64, 0x08, 0xaa},
202062306a36Sopenharmony_ci	{0x00, 0x94, 0x07, 0xaa},
202162306a36Sopenharmony_ci	{0x00, 0x95, 0x06, 0xaa},
202262306a36Sopenharmony_ci	{0x00, 0x66, 0x05, 0xaa},
202362306a36Sopenharmony_ci	{0x00, 0x41, 0x08, 0xaa},
202462306a36Sopenharmony_ci	{0x00, 0x3f, 0x00, 0xaa},
202562306a36Sopenharmony_ci	{0x00, 0x75, 0x07, 0xaa},
202662306a36Sopenharmony_ci	{0x00, 0x76, 0xe1, 0xaa},
202762306a36Sopenharmony_ci	{0x00, 0x4c, 0x00, 0xaa},
202862306a36Sopenharmony_ci	{0x00, 0x77, 0x00, 0xaa},
202962306a36Sopenharmony_ci	{0x00, 0x3d, 0xc2, 0xaa},
203062306a36Sopenharmony_ci	{0x00, 0x4b, 0x09, 0xaa},
203162306a36Sopenharmony_ci	{0x00, 0xc9, 0x60, 0xaa},
203262306a36Sopenharmony_ci	{0x00, 0x41, 0x38, 0xaa},
203362306a36Sopenharmony_ci	{0xbf, 0xc0, 0x26, 0xcc},
203462306a36Sopenharmony_ci	{0xbf, 0xc1, 0x02, 0xcc},
203562306a36Sopenharmony_ci	{0xbf, 0xcc, 0x04, 0xcc},
203662306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},
203762306a36Sopenharmony_ci	{0xb3, 0x01, 0x45, 0xcc},
203862306a36Sopenharmony_ci	{0x00, 0x77, 0x05, 0xaa},
203962306a36Sopenharmony_ci	{},
204062306a36Sopenharmony_ci};
204162306a36Sopenharmony_ci
204262306a36Sopenharmony_cistatic const u8 ov7670_InitQVGA[][4] = {
204362306a36Sopenharmony_ci	{0xb3, 0x01, 0x05, 0xcc},
204462306a36Sopenharmony_ci	{0x00, 0x00, 0x30, 0xdd},
204562306a36Sopenharmony_ci	{0xb0, 0x03, 0x19, 0xcc},
204662306a36Sopenharmony_ci	{0x00, 0x00, 0x10, 0xdd},
204762306a36Sopenharmony_ci	{0xb0, 0x04, 0x02, 0xcc},
204862306a36Sopenharmony_ci	{0x00, 0x00, 0x10, 0xdd},
204962306a36Sopenharmony_ci	{0xb3, 0x00, 0x66, 0xcc},
205062306a36Sopenharmony_ci	{0xb3, 0x00, 0x67, 0xcc},
205162306a36Sopenharmony_ci	{0xb0, 0x16, 0x01, 0xcc},
205262306a36Sopenharmony_ci	{0xb3, 0x35, 0xa1, 0xcc},	/* i2c add: 21 */
205362306a36Sopenharmony_ci	{0xb3, 0x34, 0x01, 0xcc},
205462306a36Sopenharmony_ci	{0xb3, 0x05, 0x01, 0xcc},
205562306a36Sopenharmony_ci	{0xb3, 0x06, 0x01, 0xcc},
205662306a36Sopenharmony_ci	{0xb3, 0x08, 0x01, 0xcc},
205762306a36Sopenharmony_ci	{0xb3, 0x09, 0x0c, 0xcc},
205862306a36Sopenharmony_ci	{0xb3, 0x02, 0x02, 0xcc},
205962306a36Sopenharmony_ci	{0xb3, 0x03, 0x1f, 0xcc},
206062306a36Sopenharmony_ci	{0xb3, 0x14, 0x00, 0xcc},
206162306a36Sopenharmony_ci	{0xb3, 0x15, 0x00, 0xcc},
206262306a36Sopenharmony_ci	{0xb3, 0x16, 0x02, 0xcc},
206362306a36Sopenharmony_ci	{0xb3, 0x17, 0x7f, 0xcc},
206462306a36Sopenharmony_ci	{0xb3, 0x04, 0x05, 0xcc},
206562306a36Sopenharmony_ci	{0xb3, 0x20, 0x00, 0xcc},
206662306a36Sopenharmony_ci	{0xb3, 0x21, 0x00, 0xcc},
206762306a36Sopenharmony_ci	{0xb3, 0x22, 0x01, 0xcc},
206862306a36Sopenharmony_ci	{0xb3, 0x23, 0xe0, 0xcc},
206962306a36Sopenharmony_ci	{0xbc, 0x00, 0xd1, 0xcc},
207062306a36Sopenharmony_ci	{0xbc, 0x01, 0x01, 0xcc},
207162306a36Sopenharmony_ci	{0x00, 0x12, 0x80, 0xaa},
207262306a36Sopenharmony_ci	{0x00, 0x00, 0x20, 0xdd},
207362306a36Sopenharmony_ci	{0x00, 0x12, 0x00, 0xaa},
207462306a36Sopenharmony_ci	{0x00, 0x11, 0x40, 0xaa},
207562306a36Sopenharmony_ci	{0x00, 0x6b, 0x0a, 0xaa},
207662306a36Sopenharmony_ci	{0x00, 0x3a, 0x04, 0xaa},
207762306a36Sopenharmony_ci	{0x00, 0x40, 0xc0, 0xaa},
207862306a36Sopenharmony_ci	{0x00, 0x8c, 0x00, 0xaa},
207962306a36Sopenharmony_ci	{0x00, 0x7a, 0x29, 0xaa},
208062306a36Sopenharmony_ci	{0x00, 0x7b, 0x0e, 0xaa},
208162306a36Sopenharmony_ci	{0x00, 0x7c, 0x1a, 0xaa},
208262306a36Sopenharmony_ci	{0x00, 0x7d, 0x31, 0xaa},
208362306a36Sopenharmony_ci	{0x00, 0x7e, 0x53, 0xaa},
208462306a36Sopenharmony_ci	{0x00, 0x7f, 0x60, 0xaa},
208562306a36Sopenharmony_ci	{0x00, 0x80, 0x6b, 0xaa},
208662306a36Sopenharmony_ci	{0x00, 0x81, 0x73, 0xaa},
208762306a36Sopenharmony_ci	{0x00, 0x82, 0x7b, 0xaa},
208862306a36Sopenharmony_ci	{0x00, 0x83, 0x82, 0xaa},
208962306a36Sopenharmony_ci	{0x00, 0x84, 0x89, 0xaa},
209062306a36Sopenharmony_ci	{0x00, 0x85, 0x96, 0xaa},
209162306a36Sopenharmony_ci	{0x00, 0x86, 0xa1, 0xaa},
209262306a36Sopenharmony_ci	{0x00, 0x87, 0xb7, 0xaa},
209362306a36Sopenharmony_ci	{0x00, 0x88, 0xcc, 0xaa},
209462306a36Sopenharmony_ci	{0x00, 0x89, 0xe1, 0xaa},
209562306a36Sopenharmony_ci	{0x00, 0x13, 0xe0, 0xaa},
209662306a36Sopenharmony_ci	{0x00, 0x00, 0x00, 0xaa},
209762306a36Sopenharmony_ci	{0x00, 0x10, 0x00, 0xaa},
209862306a36Sopenharmony_ci	{0x00, 0x0d, 0x40, 0xaa},
209962306a36Sopenharmony_ci	{0x00, 0x14, 0x28, 0xaa},
210062306a36Sopenharmony_ci	{0x00, 0xa5, 0x05, 0xaa},
210162306a36Sopenharmony_ci	{0x00, 0xab, 0x07, 0xaa},
210262306a36Sopenharmony_ci	{0x00, 0x24, 0x95, 0xaa},
210362306a36Sopenharmony_ci	{0x00, 0x25, 0x33, 0xaa},
210462306a36Sopenharmony_ci	{0x00, 0x26, 0xe3, 0xaa},
210562306a36Sopenharmony_ci	{0x00, 0x9f, 0x88, 0xaa},
210662306a36Sopenharmony_ci	{0x00, 0xa0, 0x78, 0xaa},
210762306a36Sopenharmony_ci	{0x00, 0x55, 0x90, 0xaa},
210862306a36Sopenharmony_ci	{0x00, 0xa1, 0x03, 0xaa},
210962306a36Sopenharmony_ci	{0x00, 0xa6, 0xe0, 0xaa},
211062306a36Sopenharmony_ci	{0x00, 0xa7, 0xd8, 0xaa},
211162306a36Sopenharmony_ci	{0x00, 0xa8, 0xf0, 0xaa},
211262306a36Sopenharmony_ci	{0x00, 0xa9, 0x90, 0xaa},
211362306a36Sopenharmony_ci	{0x00, 0xaa, 0x14, 0xaa},
211462306a36Sopenharmony_ci	{0x00, 0x13, 0xe5, 0xaa},
211562306a36Sopenharmony_ci	{0x00, 0x0e, 0x61, 0xaa},
211662306a36Sopenharmony_ci	{0x00, 0x0f, 0x4b, 0xaa},
211762306a36Sopenharmony_ci	{0x00, 0x16, 0x02, 0xaa},
211862306a36Sopenharmony_ci	{0x00, 0x1e, 0x07, 0xaa},	/* MVFP */
211962306a36Sopenharmony_ci	{0x00, 0x21, 0x02, 0xaa},
212062306a36Sopenharmony_ci	{0x00, 0x22, 0x91, 0xaa},
212162306a36Sopenharmony_ci	{0x00, 0x29, 0x07, 0xaa},
212262306a36Sopenharmony_ci	{0x00, 0x33, 0x0b, 0xaa},
212362306a36Sopenharmony_ci	{0x00, 0x35, 0x0b, 0xaa},
212462306a36Sopenharmony_ci	{0x00, 0x37, 0x1d, 0xaa},
212562306a36Sopenharmony_ci	{0x00, 0x38, 0x71, 0xaa},
212662306a36Sopenharmony_ci	{0x00, 0x39, 0x2a, 0xaa},
212762306a36Sopenharmony_ci	{0x00, 0x3c, 0x78, 0xaa},
212862306a36Sopenharmony_ci	{0x00, 0x4d, 0x40, 0xaa},
212962306a36Sopenharmony_ci	{0x00, 0x4e, 0x20, 0xaa},
213062306a36Sopenharmony_ci	{0x00, 0x74, 0x19, 0xaa},
213162306a36Sopenharmony_ci	{0x00, 0x8d, 0x4f, 0xaa},
213262306a36Sopenharmony_ci	{0x00, 0x8e, 0x00, 0xaa},
213362306a36Sopenharmony_ci	{0x00, 0x8f, 0x00, 0xaa},
213462306a36Sopenharmony_ci	{0x00, 0x90, 0x00, 0xaa},
213562306a36Sopenharmony_ci	{0x00, 0x91, 0x00, 0xaa},
213662306a36Sopenharmony_ci	{0x00, 0x96, 0x00, 0xaa},
213762306a36Sopenharmony_ci	{0x00, 0x9a, 0x80, 0xaa},
213862306a36Sopenharmony_ci	{0x00, 0xb0, 0x84, 0xaa},
213962306a36Sopenharmony_ci	{0x00, 0xb1, 0x0c, 0xaa},
214062306a36Sopenharmony_ci	{0x00, 0xb2, 0x0e, 0xaa},
214162306a36Sopenharmony_ci	{0x00, 0xb3, 0x82, 0xaa},
214262306a36Sopenharmony_ci	{0x00, 0xb8, 0x0a, 0xaa},
214362306a36Sopenharmony_ci	{0x00, 0x43, 0x14, 0xaa},
214462306a36Sopenharmony_ci	{0x00, 0x44, 0xf0, 0xaa},
214562306a36Sopenharmony_ci	{0x00, 0x45, 0x45, 0xaa},
214662306a36Sopenharmony_ci	{0x00, 0x46, 0x63, 0xaa},
214762306a36Sopenharmony_ci	{0x00, 0x47, 0x2d, 0xaa},
214862306a36Sopenharmony_ci	{0x00, 0x48, 0x46, 0xaa},
214962306a36Sopenharmony_ci	{0x00, 0x59, 0x88, 0xaa},
215062306a36Sopenharmony_ci	{0x00, 0x5a, 0xa0, 0xaa},
215162306a36Sopenharmony_ci	{0x00, 0x5b, 0xc6, 0xaa},
215262306a36Sopenharmony_ci	{0x00, 0x5c, 0x7d, 0xaa},
215362306a36Sopenharmony_ci	{0x00, 0x5d, 0x5f, 0xaa},
215462306a36Sopenharmony_ci	{0x00, 0x5e, 0x19, 0xaa},
215562306a36Sopenharmony_ci	{0x00, 0x6c, 0x0a, 0xaa},
215662306a36Sopenharmony_ci	{0x00, 0x6d, 0x55, 0xaa},
215762306a36Sopenharmony_ci	{0x00, 0x6e, 0x11, 0xaa},
215862306a36Sopenharmony_ci	{0x00, 0x6f, 0x9e, 0xaa},
215962306a36Sopenharmony_ci	{0x00, 0x69, 0x00, 0xaa},
216062306a36Sopenharmony_ci	{0x00, 0x6a, 0x40, 0xaa},
216162306a36Sopenharmony_ci	{0x00, 0x01, 0x40, 0xaa},
216262306a36Sopenharmony_ci	{0x00, 0x02, 0x40, 0xaa},
216362306a36Sopenharmony_ci	{0x00, 0x13, 0xe7, 0xaa},
216462306a36Sopenharmony_ci	{0x00, 0x5f, 0xf0, 0xaa},
216562306a36Sopenharmony_ci	{0x00, 0x60, 0xf0, 0xaa},
216662306a36Sopenharmony_ci	{0x00, 0x61, 0xf0, 0xaa},
216762306a36Sopenharmony_ci	{0x00, 0x27, 0xa0, 0xaa},
216862306a36Sopenharmony_ci	{0x00, 0x28, 0x80, 0xaa},
216962306a36Sopenharmony_ci	{0x00, 0x2c, 0x90, 0xaa},
217062306a36Sopenharmony_ci	{0x00, 0x4f, 0x66, 0xaa},
217162306a36Sopenharmony_ci	{0x00, 0x50, 0x66, 0xaa},
217262306a36Sopenharmony_ci	{0x00, 0x51, 0x00, 0xaa},
217362306a36Sopenharmony_ci	{0x00, 0x52, 0x22, 0xaa},
217462306a36Sopenharmony_ci	{0x00, 0x53, 0x5e, 0xaa},
217562306a36Sopenharmony_ci	{0x00, 0x54, 0x80, 0xaa},
217662306a36Sopenharmony_ci	{0x00, 0x58, 0x9e, 0xaa},
217762306a36Sopenharmony_ci	{0x00, 0x41, 0x08, 0xaa},
217862306a36Sopenharmony_ci	{0x00, 0x3f, 0x00, 0xaa},
217962306a36Sopenharmony_ci	{0x00, 0x75, 0x85, 0xaa},
218062306a36Sopenharmony_ci	{0x00, 0x76, 0xe1, 0xaa},
218162306a36Sopenharmony_ci	{0x00, 0x4c, 0x00, 0xaa},
218262306a36Sopenharmony_ci	{0x00, 0x77, 0x0a, 0xaa},
218362306a36Sopenharmony_ci	{0x00, 0x3d, 0x88, 0xaa},
218462306a36Sopenharmony_ci	{0x00, 0x4b, 0x09, 0xaa},
218562306a36Sopenharmony_ci	{0x00, 0xc9, 0x60, 0xaa},
218662306a36Sopenharmony_ci	{0x00, 0x41, 0x38, 0xaa},
218762306a36Sopenharmony_ci	{0x00, 0x62, 0x30, 0xaa},
218862306a36Sopenharmony_ci	{0x00, 0x63, 0x30, 0xaa},
218962306a36Sopenharmony_ci	{0x00, 0x64, 0x08, 0xaa},
219062306a36Sopenharmony_ci	{0x00, 0x94, 0x07, 0xaa},
219162306a36Sopenharmony_ci	{0x00, 0x95, 0x0b, 0xaa},
219262306a36Sopenharmony_ci	{0x00, 0x65, 0x00, 0xaa},
219362306a36Sopenharmony_ci	{0x00, 0x66, 0x05, 0xaa},
219462306a36Sopenharmony_ci	{0x00, 0x56, 0x50, 0xaa},
219562306a36Sopenharmony_ci	{0x00, 0x34, 0x11, 0xaa},
219662306a36Sopenharmony_ci	{0x00, 0xa4, 0x88, 0xaa},
219762306a36Sopenharmony_ci	{0x00, 0x96, 0x00, 0xaa},
219862306a36Sopenharmony_ci	{0x00, 0x97, 0x30, 0xaa},
219962306a36Sopenharmony_ci	{0x00, 0x98, 0x20, 0xaa},
220062306a36Sopenharmony_ci	{0x00, 0x99, 0x30, 0xaa},
220162306a36Sopenharmony_ci	{0x00, 0x9a, 0x84, 0xaa},
220262306a36Sopenharmony_ci	{0x00, 0x9b, 0x29, 0xaa},
220362306a36Sopenharmony_ci	{0x00, 0x9c, 0x03, 0xaa},
220462306a36Sopenharmony_ci	{0x00, 0x78, 0x04, 0xaa},
220562306a36Sopenharmony_ci	{0x00, 0x79, 0x01, 0xaa},
220662306a36Sopenharmony_ci	{0x00, 0xc8, 0xf0, 0xaa},
220762306a36Sopenharmony_ci	{0x00, 0x79, 0x0f, 0xaa},
220862306a36Sopenharmony_ci	{0x00, 0xc8, 0x00, 0xaa},
220962306a36Sopenharmony_ci	{0x00, 0x79, 0x10, 0xaa},
221062306a36Sopenharmony_ci	{0x00, 0xc8, 0x7e, 0xaa},
221162306a36Sopenharmony_ci	{0x00, 0x79, 0x0a, 0xaa},
221262306a36Sopenharmony_ci	{0x00, 0xc8, 0x80, 0xaa},
221362306a36Sopenharmony_ci	{0x00, 0x79, 0x0b, 0xaa},
221462306a36Sopenharmony_ci	{0x00, 0xc8, 0x01, 0xaa},
221562306a36Sopenharmony_ci	{0x00, 0x79, 0x0c, 0xaa},
221662306a36Sopenharmony_ci	{0x00, 0xc8, 0x0f, 0xaa},
221762306a36Sopenharmony_ci	{0x00, 0x79, 0x0d, 0xaa},
221862306a36Sopenharmony_ci	{0x00, 0xc8, 0x20, 0xaa},
221962306a36Sopenharmony_ci	{0x00, 0x79, 0x09, 0xaa},
222062306a36Sopenharmony_ci	{0x00, 0xc8, 0x80, 0xaa},
222162306a36Sopenharmony_ci	{0x00, 0x79, 0x02, 0xaa},
222262306a36Sopenharmony_ci	{0x00, 0xc8, 0xc0, 0xaa},
222362306a36Sopenharmony_ci	{0x00, 0x79, 0x03, 0xaa},
222462306a36Sopenharmony_ci	{0x00, 0xc8, 0x40, 0xaa},
222562306a36Sopenharmony_ci	{0x00, 0x79, 0x05, 0xaa},
222662306a36Sopenharmony_ci	{0x00, 0xc8, 0x30, 0xaa},
222762306a36Sopenharmony_ci	{0x00, 0x79, 0x26, 0xaa},
222862306a36Sopenharmony_ci	{0x00, 0x11, 0x40, 0xaa},
222962306a36Sopenharmony_ci	{0x00, 0x3a, 0x04, 0xaa},
223062306a36Sopenharmony_ci	{0x00, 0x12, 0x00, 0xaa},
223162306a36Sopenharmony_ci	{0x00, 0x40, 0xc0, 0xaa},
223262306a36Sopenharmony_ci	{0x00, 0x8c, 0x00, 0xaa},
223362306a36Sopenharmony_ci	{0x00, 0x17, 0x14, 0xaa},
223462306a36Sopenharmony_ci	{0x00, 0x18, 0x02, 0xaa},
223562306a36Sopenharmony_ci	{0x00, 0x32, 0x92, 0xaa},
223662306a36Sopenharmony_ci	{0x00, 0x19, 0x02, 0xaa},
223762306a36Sopenharmony_ci	{0x00, 0x1a, 0x7a, 0xaa},
223862306a36Sopenharmony_ci	{0x00, 0x03, 0x0a, 0xaa},
223962306a36Sopenharmony_ci	{0x00, 0x0c, 0x00, 0xaa},
224062306a36Sopenharmony_ci	{0x00, 0x3e, 0x00, 0xaa},
224162306a36Sopenharmony_ci	{0x00, 0x70, 0x3a, 0xaa},
224262306a36Sopenharmony_ci	{0x00, 0x71, 0x35, 0xaa},
224362306a36Sopenharmony_ci	{0x00, 0x72, 0x11, 0xaa},
224462306a36Sopenharmony_ci	{0x00, 0x73, 0xf0, 0xaa},
224562306a36Sopenharmony_ci	{0x00, 0xa2, 0x02, 0xaa},
224662306a36Sopenharmony_ci	{0x00, 0xb1, 0x00, 0xaa},
224762306a36Sopenharmony_ci	{0x00, 0xb1, 0x0c, 0xaa},
224862306a36Sopenharmony_ci	{0x00, 0x1e, 0x37, 0xaa},	/* MVFP */
224962306a36Sopenharmony_ci	{0x00, 0xaa, 0x14, 0xaa},
225062306a36Sopenharmony_ci	{0x00, 0x24, 0x80, 0xaa},
225162306a36Sopenharmony_ci	{0x00, 0x25, 0x74, 0xaa},
225262306a36Sopenharmony_ci	{0x00, 0x26, 0xd3, 0xaa},
225362306a36Sopenharmony_ci	{0x00, 0x0d, 0x00, 0xaa},
225462306a36Sopenharmony_ci	{0x00, 0x14, 0x18, 0xaa},
225562306a36Sopenharmony_ci	{0x00, 0x9d, 0x99, 0xaa},
225662306a36Sopenharmony_ci	{0x00, 0x9e, 0x7f, 0xaa},
225762306a36Sopenharmony_ci	{0x00, 0x64, 0x08, 0xaa},
225862306a36Sopenharmony_ci	{0x00, 0x94, 0x07, 0xaa},
225962306a36Sopenharmony_ci	{0x00, 0x95, 0x06, 0xaa},
226062306a36Sopenharmony_ci	{0x00, 0x66, 0x05, 0xaa},
226162306a36Sopenharmony_ci	{0x00, 0x41, 0x08, 0xaa},
226262306a36Sopenharmony_ci	{0x00, 0x3f, 0x00, 0xaa},
226362306a36Sopenharmony_ci	{0x00, 0x75, 0x07, 0xaa},
226462306a36Sopenharmony_ci	{0x00, 0x76, 0xe1, 0xaa},
226562306a36Sopenharmony_ci	{0x00, 0x4c, 0x00, 0xaa},
226662306a36Sopenharmony_ci	{0x00, 0x77, 0x00, 0xaa},
226762306a36Sopenharmony_ci	{0x00, 0x3d, 0xc2, 0xaa},
226862306a36Sopenharmony_ci	{0x00, 0x4b, 0x09, 0xaa},
226962306a36Sopenharmony_ci	{0x00, 0xc9, 0x60, 0xaa},
227062306a36Sopenharmony_ci	{0x00, 0x41, 0x38, 0xaa},
227162306a36Sopenharmony_ci	{0xbc, 0x02, 0x18, 0xcc},
227262306a36Sopenharmony_ci	{0xbc, 0x03, 0x50, 0xcc},
227362306a36Sopenharmony_ci	{0xbc, 0x04, 0x18, 0xcc},
227462306a36Sopenharmony_ci	{0xbc, 0x05, 0x00, 0xcc},
227562306a36Sopenharmony_ci	{0xbc, 0x06, 0x00, 0xcc},
227662306a36Sopenharmony_ci	{0xbc, 0x08, 0x30, 0xcc},
227762306a36Sopenharmony_ci	{0xbc, 0x09, 0x40, 0xcc},
227862306a36Sopenharmony_ci	{0xbc, 0x0a, 0x10, 0xcc},
227962306a36Sopenharmony_ci	{0xbc, 0x0b, 0x00, 0xcc},
228062306a36Sopenharmony_ci	{0xbc, 0x0c, 0x00, 0xcc},
228162306a36Sopenharmony_ci	{0xbf, 0xc0, 0x26, 0xcc},
228262306a36Sopenharmony_ci	{0xbf, 0xc1, 0x02, 0xcc},
228362306a36Sopenharmony_ci	{0xbf, 0xcc, 0x04, 0xcc},
228462306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},
228562306a36Sopenharmony_ci	{0xb3, 0x01, 0x45, 0xcc},
228662306a36Sopenharmony_ci	{0x00, 0x77, 0x05, 0xaa},
228762306a36Sopenharmony_ci	{},
228862306a36Sopenharmony_ci};
228962306a36Sopenharmony_ci
229062306a36Sopenharmony_ci/* PO1200 - values from usbvm326.inf and ms-win trace */
229162306a36Sopenharmony_cistatic const u8 po1200_gamma[17] = {
229262306a36Sopenharmony_ci	0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,
229362306a36Sopenharmony_ci	0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff
229462306a36Sopenharmony_ci};
229562306a36Sopenharmony_cistatic const u8 po1200_matrix[9] = {
229662306a36Sopenharmony_ci	0x60, 0xf9, 0xe5, 0xe7, 0x50, 0x05, 0xf3, 0xe6, 0x5e
229762306a36Sopenharmony_ci};
229862306a36Sopenharmony_cistatic const u8 po1200_initVGA_data[][4] = {
229962306a36Sopenharmony_ci	{0xb0, 0x03, 0x19, 0xcc},	/* reset? */
230062306a36Sopenharmony_ci	{0xb0, 0x03, 0x19, 0xcc},
230162306a36Sopenharmony_ci/*	{0x00, 0x00, 0x33, 0xdd}, */
230262306a36Sopenharmony_ci	{0xb0, 0x04, 0x02, 0xcc},
230362306a36Sopenharmony_ci	{0xb0, 0x02, 0x02, 0xcc},
230462306a36Sopenharmony_ci	{0xb3, 0x5d, 0x00, 0xcc},
230562306a36Sopenharmony_ci	{0xb3, 0x01, 0x01, 0xcc},
230662306a36Sopenharmony_ci	{0xb3, 0x00, 0x64, 0xcc},
230762306a36Sopenharmony_ci	{0xb3, 0x00, 0x65, 0xcc},
230862306a36Sopenharmony_ci	{0xb3, 0x05, 0x01, 0xcc},
230962306a36Sopenharmony_ci	{0xb3, 0x06, 0x01, 0xcc},
231062306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},
231162306a36Sopenharmony_ci	{0xb3, 0x08, 0x01, 0xcc},
231262306a36Sopenharmony_ci	{0xb3, 0x09, 0x0c, 0xcc},
231362306a36Sopenharmony_ci	{0xb3, 0x00, 0x67, 0xcc},
231462306a36Sopenharmony_ci	{0xb3, 0x02, 0xb2, 0xcc},
231562306a36Sopenharmony_ci	{0xb3, 0x03, 0x18, 0xcc},
231662306a36Sopenharmony_ci	{0xb3, 0x04, 0x15, 0xcc},
231762306a36Sopenharmony_ci	{0xb3, 0x20, 0x00, 0xcc},
231862306a36Sopenharmony_ci	{0xb3, 0x21, 0x00, 0xcc},
231962306a36Sopenharmony_ci	{0xb3, 0x22, 0x02, 0xcc},
232062306a36Sopenharmony_ci	{0xb3, 0x23, 0x58, 0xcc},
232162306a36Sopenharmony_ci	{0xb3, 0x14, 0x00, 0xcc},
232262306a36Sopenharmony_ci	{0xb3, 0x15, 0x00, 0xcc},
232362306a36Sopenharmony_ci	{0xb3, 0x16, 0x03, 0xcc},
232462306a36Sopenharmony_ci	{0xb3, 0x17, 0x1f, 0xcc},
232562306a36Sopenharmony_ci	{0xbc, 0x00, 0x71, 0xcc},
232662306a36Sopenharmony_ci	{0xbc, 0x01, 0x01, 0xcc},
232762306a36Sopenharmony_ci	{0xb0, 0x54, 0x13, 0xcc},
232862306a36Sopenharmony_ci	{0xb3, 0x00, 0x67, 0xcc},
232962306a36Sopenharmony_ci	{0xb3, 0x34, 0x01, 0xcc},
233062306a36Sopenharmony_ci	{0xb3, 0x35, 0xdc, 0xcc},	/* i2c add: 5c */
233162306a36Sopenharmony_ci	{0x00, 0x03, 0x00, 0xaa},
233262306a36Sopenharmony_ci	{0x00, 0x12, 0x05, 0xaa},
233362306a36Sopenharmony_ci	{0x00, 0x13, 0x02, 0xaa},
233462306a36Sopenharmony_ci	{0x00, 0x1e, 0xc6, 0xaa},	/* h/v flip */
233562306a36Sopenharmony_ci	{0x00, 0x21, 0x00, 0xaa},
233662306a36Sopenharmony_ci	{0x00, 0x25, 0x02, 0xaa},
233762306a36Sopenharmony_ci	{0x00, 0x3c, 0x4f, 0xaa},
233862306a36Sopenharmony_ci	{0x00, 0x3f, 0xe0, 0xaa},
233962306a36Sopenharmony_ci	{0x00, 0x42, 0xff, 0xaa},
234062306a36Sopenharmony_ci	{0x00, 0x45, 0x34, 0xaa},
234162306a36Sopenharmony_ci	{0x00, 0x55, 0xfe, 0xaa},
234262306a36Sopenharmony_ci	{0x00, 0x59, 0xd3, 0xaa},
234362306a36Sopenharmony_ci	{0x00, 0x5e, 0x04, 0xaa},
234462306a36Sopenharmony_ci	{0x00, 0x61, 0xb8, 0xaa},	/* sharpness */
234562306a36Sopenharmony_ci	{0x00, 0x62, 0x02, 0xaa},
234662306a36Sopenharmony_ci	{0x00, 0xa7, 0x31, 0xaa},
234762306a36Sopenharmony_ci	{0x00, 0xa9, 0x66, 0xaa},
234862306a36Sopenharmony_ci	{0x00, 0xb0, 0x00, 0xaa},
234962306a36Sopenharmony_ci	{0x00, 0xb1, 0x00, 0xaa},
235062306a36Sopenharmony_ci	{0x00, 0xb3, 0x11, 0xaa},
235162306a36Sopenharmony_ci	{0x00, 0xb6, 0x26, 0xaa},
235262306a36Sopenharmony_ci	{0x00, 0xb7, 0x20, 0xaa},
235362306a36Sopenharmony_ci	{0x00, 0xba, 0x04, 0xaa},
235462306a36Sopenharmony_ci	{0x00, 0x88, 0x42, 0xaa},
235562306a36Sopenharmony_ci	{0x00, 0x89, 0x9a, 0xaa},
235662306a36Sopenharmony_ci	{0x00, 0x8a, 0x88, 0xaa},
235762306a36Sopenharmony_ci	{0x00, 0x8b, 0x8e, 0xaa},
235862306a36Sopenharmony_ci	{0x00, 0x8c, 0x3e, 0xaa},
235962306a36Sopenharmony_ci	{0x00, 0x8d, 0x90, 0xaa},
236062306a36Sopenharmony_ci	{0x00, 0x8e, 0x87, 0xaa},
236162306a36Sopenharmony_ci	{0x00, 0x8f, 0x96, 0xaa},
236262306a36Sopenharmony_ci	{0x00, 0x90, 0x3d, 0xaa},
236362306a36Sopenharmony_ci	{0x00, 0x64, 0x00, 0xaa},
236462306a36Sopenharmony_ci	{0x00, 0x65, 0x10, 0xaa},
236562306a36Sopenharmony_ci	{0x00, 0x66, 0x20, 0xaa},
236662306a36Sopenharmony_ci	{0x00, 0x67, 0x2b, 0xaa},
236762306a36Sopenharmony_ci	{0x00, 0x68, 0x36, 0xaa},
236862306a36Sopenharmony_ci	{0x00, 0x69, 0x49, 0xaa},
236962306a36Sopenharmony_ci	{0x00, 0x6a, 0x5a, 0xaa},
237062306a36Sopenharmony_ci	{0x00, 0x6b, 0x7f, 0xaa},
237162306a36Sopenharmony_ci	{0x00, 0x6c, 0x9b, 0xaa},
237262306a36Sopenharmony_ci	{0x00, 0x6d, 0xba, 0xaa},
237362306a36Sopenharmony_ci	{0x00, 0x6e, 0xd4, 0xaa},
237462306a36Sopenharmony_ci	{0x00, 0x6f, 0xea, 0xaa},
237562306a36Sopenharmony_ci	{0x00, 0x70, 0x00, 0xaa},
237662306a36Sopenharmony_ci	{0x00, 0x71, 0x10, 0xaa},
237762306a36Sopenharmony_ci	{0x00, 0x72, 0x20, 0xaa},
237862306a36Sopenharmony_ci	{0x00, 0x73, 0x2b, 0xaa},
237962306a36Sopenharmony_ci	{0x00, 0x74, 0x36, 0xaa},
238062306a36Sopenharmony_ci	{0x00, 0x75, 0x49, 0xaa},
238162306a36Sopenharmony_ci	{0x00, 0x76, 0x5a, 0xaa},
238262306a36Sopenharmony_ci	{0x00, 0x77, 0x7f, 0xaa},
238362306a36Sopenharmony_ci	{0x00, 0x78, 0x9b, 0xaa},
238462306a36Sopenharmony_ci	{0x00, 0x79, 0xba, 0xaa},
238562306a36Sopenharmony_ci	{0x00, 0x7a, 0xd4, 0xaa},
238662306a36Sopenharmony_ci	{0x00, 0x7b, 0xea, 0xaa},
238762306a36Sopenharmony_ci	{0x00, 0x7c, 0x00, 0xaa},
238862306a36Sopenharmony_ci	{0x00, 0x7d, 0x10, 0xaa},
238962306a36Sopenharmony_ci	{0x00, 0x7e, 0x20, 0xaa},
239062306a36Sopenharmony_ci	{0x00, 0x7f, 0x2b, 0xaa},
239162306a36Sopenharmony_ci	{0x00, 0x80, 0x36, 0xaa},
239262306a36Sopenharmony_ci	{0x00, 0x81, 0x49, 0xaa},
239362306a36Sopenharmony_ci	{0x00, 0x82, 0x5a, 0xaa},
239462306a36Sopenharmony_ci	{0x00, 0x83, 0x7f, 0xaa},
239562306a36Sopenharmony_ci	{0x00, 0x84, 0x9b, 0xaa},
239662306a36Sopenharmony_ci	{0x00, 0x85, 0xba, 0xaa},
239762306a36Sopenharmony_ci	{0x00, 0x86, 0xd4, 0xaa},
239862306a36Sopenharmony_ci	{0x00, 0x87, 0xea, 0xaa},
239962306a36Sopenharmony_ci	{0x00, 0x57, 0x2a, 0xaa},
240062306a36Sopenharmony_ci	{0x00, 0x03, 0x01, 0xaa},
240162306a36Sopenharmony_ci	{0x00, 0x04, 0x10, 0xaa},
240262306a36Sopenharmony_ci	{0x00, 0x05, 0x10, 0xaa},
240362306a36Sopenharmony_ci	{0x00, 0x06, 0x10, 0xaa},
240462306a36Sopenharmony_ci	{0x00, 0x07, 0x10, 0xaa},
240562306a36Sopenharmony_ci	{0x00, 0x08, 0x13, 0xaa},
240662306a36Sopenharmony_ci	{0x00, 0x0a, 0x00, 0xaa},
240762306a36Sopenharmony_ci	{0x00, 0x0b, 0x10, 0xaa},
240862306a36Sopenharmony_ci	{0x00, 0x0c, 0x20, 0xaa},
240962306a36Sopenharmony_ci	{0x00, 0x0d, 0x18, 0xaa},
241062306a36Sopenharmony_ci	{0x00, 0x22, 0x01, 0xaa},
241162306a36Sopenharmony_ci	{0x00, 0x23, 0x60, 0xaa},
241262306a36Sopenharmony_ci	{0x00, 0x25, 0x08, 0xaa},
241362306a36Sopenharmony_ci	{0x00, 0x26, 0x82, 0xaa},
241462306a36Sopenharmony_ci	{0x00, 0x2e, 0x0f, 0xaa},
241562306a36Sopenharmony_ci	{0x00, 0x2f, 0x1e, 0xaa},
241662306a36Sopenharmony_ci	{0x00, 0x30, 0x2d, 0xaa},
241762306a36Sopenharmony_ci	{0x00, 0x31, 0x3c, 0xaa},
241862306a36Sopenharmony_ci	{0x00, 0x32, 0x4b, 0xaa},
241962306a36Sopenharmony_ci	{0x00, 0x33, 0x5a, 0xaa},
242062306a36Sopenharmony_ci	{0x00, 0x34, 0x69, 0xaa},
242162306a36Sopenharmony_ci	{0x00, 0x35, 0x78, 0xaa},
242262306a36Sopenharmony_ci	{0x00, 0x36, 0x87, 0xaa},
242362306a36Sopenharmony_ci	{0x00, 0x37, 0x96, 0xaa},
242462306a36Sopenharmony_ci	{0x00, 0x38, 0xa5, 0xaa},
242562306a36Sopenharmony_ci	{0x00, 0x39, 0xb4, 0xaa},
242662306a36Sopenharmony_ci	{0x00, 0x3a, 0xc3, 0xaa},
242762306a36Sopenharmony_ci	{0x00, 0x3b, 0xd2, 0xaa},
242862306a36Sopenharmony_ci	{0x00, 0x3c, 0xe1, 0xaa},
242962306a36Sopenharmony_ci	{0x00, 0x3e, 0xff, 0xaa},
243062306a36Sopenharmony_ci	{0x00, 0x3f, 0xff, 0xaa},
243162306a36Sopenharmony_ci	{0x00, 0x40, 0xff, 0xaa},
243262306a36Sopenharmony_ci	{0x00, 0x41, 0xff, 0xaa},
243362306a36Sopenharmony_ci	{0x00, 0x42, 0xff, 0xaa},
243462306a36Sopenharmony_ci	{0x00, 0x43, 0xff, 0xaa},
243562306a36Sopenharmony_ci	{0x00, 0x03, 0x00, 0xaa},
243662306a36Sopenharmony_ci	{0x00, 0x03, 0x00, 0xaa},
243762306a36Sopenharmony_ci	{0x00, 0x20, 0xc4, 0xaa},
243862306a36Sopenharmony_ci	{0x00, 0x13, 0x03, 0xaa},
243962306a36Sopenharmony_ci	{0x00, 0x3c, 0x50, 0xaa},
244062306a36Sopenharmony_ci	{0x00, 0x61, 0x6a, 0xaa},	/* sharpness? */
244162306a36Sopenharmony_ci	{0x00, 0x51, 0x5b, 0xaa},
244262306a36Sopenharmony_ci	{0x00, 0x52, 0x91, 0xaa},
244362306a36Sopenharmony_ci	{0x00, 0x53, 0x4c, 0xaa},
244462306a36Sopenharmony_ci	{0x00, 0x54, 0x50, 0xaa},
244562306a36Sopenharmony_ci	{0x00, 0x56, 0x02, 0xaa},
244662306a36Sopenharmony_ci	{0xb6, 0x00, 0x00, 0xcc},
244762306a36Sopenharmony_ci	{0xb6, 0x03, 0x03, 0xcc},
244862306a36Sopenharmony_ci	{0xb6, 0x02, 0x20, 0xcc},
244962306a36Sopenharmony_ci	{0xb6, 0x05, 0x02, 0xcc},
245062306a36Sopenharmony_ci	{0xb6, 0x04, 0x58, 0xcc},
245162306a36Sopenharmony_ci	{0xb6, 0x12, 0xf8, 0xcc},
245262306a36Sopenharmony_ci	{0xb6, 0x13, 0x21, 0xcc},
245362306a36Sopenharmony_ci	{0xb6, 0x18, 0x03, 0xcc},
245462306a36Sopenharmony_ci	{0xb6, 0x17, 0xa9, 0xcc},
245562306a36Sopenharmony_ci	{0xb6, 0x16, 0x80, 0xcc},
245662306a36Sopenharmony_ci	{0xb6, 0x22, 0x12, 0xcc},
245762306a36Sopenharmony_ci	{0xb6, 0x23, 0x0b, 0xcc},
245862306a36Sopenharmony_ci	{0xbf, 0xc0, 0x39, 0xcc},
245962306a36Sopenharmony_ci	{0xbf, 0xc1, 0x04, 0xcc},
246062306a36Sopenharmony_ci	{0xbf, 0xcc, 0x00, 0xcc},
246162306a36Sopenharmony_ci	{0xb8, 0x06, 0x20, 0xcc},
246262306a36Sopenharmony_ci	{0xb8, 0x07, 0x03, 0xcc},
246362306a36Sopenharmony_ci	{0xb8, 0x08, 0x58, 0xcc},
246462306a36Sopenharmony_ci	{0xb8, 0x09, 0x02, 0xcc},
246562306a36Sopenharmony_ci	{0xb3, 0x01, 0x41, 0xcc},
246662306a36Sopenharmony_ci	{0x00, 0x03, 0x00, 0xaa},
246762306a36Sopenharmony_ci	{0x00, 0xd9, 0x0f, 0xaa},
246862306a36Sopenharmony_ci	{0x00, 0xda, 0xaa, 0xaa},
246962306a36Sopenharmony_ci	{0x00, 0xd9, 0x10, 0xaa},
247062306a36Sopenharmony_ci	{0x00, 0xda, 0xaa, 0xaa},
247162306a36Sopenharmony_ci	{0x00, 0xd9, 0x11, 0xaa},
247262306a36Sopenharmony_ci	{0x00, 0xda, 0x00, 0xaa},
247362306a36Sopenharmony_ci	{0x00, 0xd9, 0x12, 0xaa},
247462306a36Sopenharmony_ci	{0x00, 0xda, 0xff, 0xaa},
247562306a36Sopenharmony_ci	{0x00, 0xd9, 0x13, 0xaa},
247662306a36Sopenharmony_ci	{0x00, 0xda, 0xff, 0xaa},
247762306a36Sopenharmony_ci	{0x00, 0xe8, 0x11, 0xaa},
247862306a36Sopenharmony_ci	{0x00, 0xe9, 0x12, 0xaa},
247962306a36Sopenharmony_ci	{0x00, 0xea, 0x5c, 0xaa},
248062306a36Sopenharmony_ci	{0x00, 0xeb, 0xff, 0xaa},
248162306a36Sopenharmony_ci	{0x00, 0xd8, 0x80, 0xaa},
248262306a36Sopenharmony_ci	{0x00, 0xe6, 0x02, 0xaa},
248362306a36Sopenharmony_ci	{0x00, 0xd6, 0x40, 0xaa},
248462306a36Sopenharmony_ci	{0x00, 0xe3, 0x05, 0xaa},
248562306a36Sopenharmony_ci	{0x00, 0xe0, 0x40, 0xaa},
248662306a36Sopenharmony_ci	{0x00, 0xde, 0x03, 0xaa},
248762306a36Sopenharmony_ci	{0x00, 0xdf, 0x03, 0xaa},
248862306a36Sopenharmony_ci	{0x00, 0xdb, 0x02, 0xaa},
248962306a36Sopenharmony_ci	{0x00, 0xdc, 0x00, 0xaa},
249062306a36Sopenharmony_ci	{0x00, 0xdd, 0x03, 0xaa},
249162306a36Sopenharmony_ci	{0x00, 0xe1, 0x08, 0xaa},
249262306a36Sopenharmony_ci	{0x00, 0xe2, 0x01, 0xaa},
249362306a36Sopenharmony_ci	{0x00, 0xd6, 0x40, 0xaa},
249462306a36Sopenharmony_ci	{0x00, 0xe4, 0x40, 0xaa},
249562306a36Sopenharmony_ci	{0x00, 0xa8, 0x8f, 0xaa},
249662306a36Sopenharmony_ci	{0x00, 0xb4, 0x16, 0xaa},
249762306a36Sopenharmony_ci	{0xb0, 0x02, 0x06, 0xcc},
249862306a36Sopenharmony_ci	{0xb0, 0x18, 0x06, 0xcc},
249962306a36Sopenharmony_ci	{0xb0, 0x19, 0x06, 0xcc},
250062306a36Sopenharmony_ci	{0xb3, 0x5d, 0x18, 0xcc},
250162306a36Sopenharmony_ci	{0xb3, 0x05, 0x00, 0xcc},
250262306a36Sopenharmony_ci	{0xb3, 0x06, 0x00, 0xcc},
250362306a36Sopenharmony_ci	{0x00, 0xb4, 0x0e, 0xaa},
250462306a36Sopenharmony_ci	{0x00, 0xb5, 0x49, 0xaa},
250562306a36Sopenharmony_ci	{0x00, 0xb6, 0x1c, 0xaa},
250662306a36Sopenharmony_ci	{0x00, 0xb7, 0x96, 0xaa},
250762306a36Sopenharmony_ci/* end of usbvm326.inf - start of ms-win trace */
250862306a36Sopenharmony_ci	{0xb6, 0x12, 0xf8, 0xcc},
250962306a36Sopenharmony_ci	{0xb6, 0x13, 0x3d, 0xcc},
251062306a36Sopenharmony_ci/*read b306*/
251162306a36Sopenharmony_ci	{0x00, 0x03, 0x00, 0xaa},
251262306a36Sopenharmony_ci	{0x00, 0x1a, 0x09, 0xaa},
251362306a36Sopenharmony_ci	{0x00, 0x1b, 0x8a, 0xaa},
251462306a36Sopenharmony_ci/*read b827*/
251562306a36Sopenharmony_ci	{0xb8, 0x27, 0x00, 0xcc},
251662306a36Sopenharmony_ci	{0xb8, 0x26, 0x60, 0xcc},
251762306a36Sopenharmony_ci	{0xb8, 0x26, 0x60, 0xcc},
251862306a36Sopenharmony_ci/*gamma - to do?*/
251962306a36Sopenharmony_ci	{0x00, 0x03, 0x00, 0xaa},
252062306a36Sopenharmony_ci	{0x00, 0xae, 0x84, 0xaa},
252162306a36Sopenharmony_ci/*gamma again*/
252262306a36Sopenharmony_ci	{0x00, 0x03, 0x00, 0xaa},
252362306a36Sopenharmony_ci	{0x00, 0x96, 0xa0, 0xaa},
252462306a36Sopenharmony_ci/*matrix*/
252562306a36Sopenharmony_ci	{0x00, 0x03, 0x00, 0xaa},
252662306a36Sopenharmony_ci	{0x00, 0x91, 0x35, 0xaa},
252762306a36Sopenharmony_ci	{0x00, 0x92, 0x22, 0xaa},
252862306a36Sopenharmony_ci/*gamma*/
252962306a36Sopenharmony_ci	{0x00, 0x03, 0x00, 0xaa},
253062306a36Sopenharmony_ci	{0x00, 0x95, 0x85, 0xaa},
253162306a36Sopenharmony_ci/*matrix*/
253262306a36Sopenharmony_ci	{0x00, 0x03, 0x00, 0xaa},
253362306a36Sopenharmony_ci	{0x00, 0x4d, 0x20, 0xaa},
253462306a36Sopenharmony_ci	{0xb8, 0x22, 0x40, 0xcc},
253562306a36Sopenharmony_ci	{0xb8, 0x23, 0x40, 0xcc},
253662306a36Sopenharmony_ci	{0xb8, 0x24, 0x40, 0xcc},
253762306a36Sopenharmony_ci	{0xb8, 0x81, 0x09, 0xcc},
253862306a36Sopenharmony_ci	{0x00, 0x00, 0x64, 0xdd},
253962306a36Sopenharmony_ci	{0x00, 0x03, 0x01, 0xaa},
254062306a36Sopenharmony_ci/*read 46*/
254162306a36Sopenharmony_ci	{0x00, 0x46, 0x3c, 0xaa},
254262306a36Sopenharmony_ci	{0x00, 0x03, 0x00, 0xaa},
254362306a36Sopenharmony_ci	{0x00, 0x16, 0x40, 0xaa},
254462306a36Sopenharmony_ci	{0x00, 0x17, 0x40, 0xaa},
254562306a36Sopenharmony_ci	{0x00, 0x18, 0x40, 0xaa},
254662306a36Sopenharmony_ci	{0x00, 0x19, 0x41, 0xaa},
254762306a36Sopenharmony_ci	{0x00, 0x03, 0x01, 0xaa},
254862306a36Sopenharmony_ci	{0x00, 0x46, 0x3c, 0xaa},
254962306a36Sopenharmony_ci	{0x00, 0x00, 0x18, 0xdd},
255062306a36Sopenharmony_ci/*read bfff*/
255162306a36Sopenharmony_ci	{0x00, 0x03, 0x00, 0xaa},
255262306a36Sopenharmony_ci	{0x00, 0xb4, 0x1c, 0xaa},
255362306a36Sopenharmony_ci	{0x00, 0xb5, 0x92, 0xaa},
255462306a36Sopenharmony_ci	{0x00, 0xb6, 0x39, 0xaa},
255562306a36Sopenharmony_ci	{0x00, 0xb7, 0x24, 0xaa},
255662306a36Sopenharmony_ci/*write 89 0400 1415*/
255762306a36Sopenharmony_ci	{}
255862306a36Sopenharmony_ci};
255962306a36Sopenharmony_ci
256062306a36Sopenharmony_cistatic const u8 poxxxx_init_common[][4] = {
256162306a36Sopenharmony_ci	{0xb3, 0x00, 0x04, 0xcc},
256262306a36Sopenharmony_ci	{0x00, 0x00, 0x10, 0xdd},
256362306a36Sopenharmony_ci	{0xb3, 0x00, 0x64, 0xcc},
256462306a36Sopenharmony_ci	{0x00, 0x00, 0x10, 0xdd},
256562306a36Sopenharmony_ci	{0xb3, 0x00, 0x65, 0xcc},
256662306a36Sopenharmony_ci	{0x00, 0x00, 0x10, 0xdd},
256762306a36Sopenharmony_ci	{0xb3, 0x00, 0x67, 0xcc},
256862306a36Sopenharmony_ci	{0xb0, 0x03, 0x09, 0xcc},
256962306a36Sopenharmony_ci	{0xb3, 0x05, 0x00, 0xcc},
257062306a36Sopenharmony_ci	{0xb3, 0x06, 0x00, 0xcc},
257162306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},
257262306a36Sopenharmony_ci	{0xb3, 0x08, 0x01, 0xcc},
257362306a36Sopenharmony_ci	{0xb3, 0x09, 0x0c, 0xcc},
257462306a36Sopenharmony_ci	{0xb3, 0x34, 0x01, 0xcc},
257562306a36Sopenharmony_ci	{0xb3, 0x35, 0xf6, 0xcc},	/* i2c add: 76 */
257662306a36Sopenharmony_ci	{0xb3, 0x02, 0xb0, 0xcc},
257762306a36Sopenharmony_ci	{0xb3, 0x03, 0x18, 0xcc},
257862306a36Sopenharmony_ci	{0xb3, 0x04, 0x15, 0xcc},
257962306a36Sopenharmony_ci	{0xb3, 0x20, 0x00, 0xcc},
258062306a36Sopenharmony_ci	{0xb3, 0x21, 0x00, 0xcc},
258162306a36Sopenharmony_ci	{0xb3, 0x22, 0x04, 0xcc},	/* sensor height = 1024 */
258262306a36Sopenharmony_ci	{0xb3, 0x23, 0x00, 0xcc},
258362306a36Sopenharmony_ci	{0xb3, 0x14, 0x00, 0xcc},
258462306a36Sopenharmony_ci	{0xb3, 0x15, 0x00, 0xcc},
258562306a36Sopenharmony_ci	{0xb3, 0x16, 0x04, 0xcc},	/* sensor width = 1280 */
258662306a36Sopenharmony_ci	{0xb3, 0x17, 0xff, 0xcc},
258762306a36Sopenharmony_ci	{0xb3, 0x2c, 0x03, 0xcc},
258862306a36Sopenharmony_ci	{0xb3, 0x2d, 0x56, 0xcc},
258962306a36Sopenharmony_ci	{0xb3, 0x2e, 0x02, 0xcc},
259062306a36Sopenharmony_ci	{0xb3, 0x2f, 0x0a, 0xcc},
259162306a36Sopenharmony_ci	{0xb3, 0x40, 0x00, 0xcc},
259262306a36Sopenharmony_ci	{0xb3, 0x41, 0x34, 0xcc},
259362306a36Sopenharmony_ci	{0xb3, 0x42, 0x01, 0xcc},
259462306a36Sopenharmony_ci	{0xb3, 0x43, 0xe0, 0xcc},
259562306a36Sopenharmony_ci	{0xbc, 0x00, 0x71, 0xcc},
259662306a36Sopenharmony_ci	{0xbc, 0x01, 0x01, 0xcc},
259762306a36Sopenharmony_ci	{0xb3, 0x01, 0x41, 0xcc},
259862306a36Sopenharmony_ci	{0xb3, 0x4d, 0x00, 0xcc},
259962306a36Sopenharmony_ci	{0x00, 0x0b, 0x2a, 0xaa},
260062306a36Sopenharmony_ci	{0x00, 0x0e, 0x03, 0xaa},
260162306a36Sopenharmony_ci	{0x00, 0x0f, 0xea, 0xaa},
260262306a36Sopenharmony_ci	{0x00, 0x12, 0x08, 0xaa},
260362306a36Sopenharmony_ci	{0x00, 0x1e, 0x06, 0xaa},
260462306a36Sopenharmony_ci	{0x00, 0x21, 0x00, 0xaa},
260562306a36Sopenharmony_ci	{0x00, 0x31, 0x1f, 0xaa},
260662306a36Sopenharmony_ci	{0x00, 0x33, 0x38, 0xaa},
260762306a36Sopenharmony_ci	{0x00, 0x36, 0xc0, 0xaa},
260862306a36Sopenharmony_ci	{0x00, 0x37, 0xc8, 0xaa},
260962306a36Sopenharmony_ci	{0x00, 0x3b, 0x36, 0xaa},
261062306a36Sopenharmony_ci	{0x00, 0x4b, 0xfe, 0xaa},
261162306a36Sopenharmony_ci	{0x00, 0x4d, 0x2e, 0xaa},
261262306a36Sopenharmony_ci	{0x00, 0x51, 0x1c, 0xaa},
261362306a36Sopenharmony_ci	{0x00, 0x52, 0x01, 0xaa},
261462306a36Sopenharmony_ci	{0x00, 0x55, 0x0a, 0xaa},
261562306a36Sopenharmony_ci	{0x00, 0x56, 0x0a, 0xaa},
261662306a36Sopenharmony_ci	{0x00, 0x57, 0x07, 0xaa},
261762306a36Sopenharmony_ci	{0x00, 0x58, 0x07, 0xaa},
261862306a36Sopenharmony_ci	{0x00, 0x59, 0x04, 0xaa},
261962306a36Sopenharmony_ci	{0x00, 0x70, 0x68, 0xaa},
262062306a36Sopenharmony_ci	{0x00, 0x71, 0x04, 0xaa},
262162306a36Sopenharmony_ci	{0x00, 0x72, 0x10, 0xaa},
262262306a36Sopenharmony_ci	{0x00, 0x80, 0x71, 0xaa},
262362306a36Sopenharmony_ci	{0x00, 0x81, 0x08, 0xaa},
262462306a36Sopenharmony_ci	{0x00, 0x82, 0x00, 0xaa},
262562306a36Sopenharmony_ci	{0x00, 0x83, 0x55, 0xaa},
262662306a36Sopenharmony_ci	{0x00, 0x84, 0x06, 0xaa},
262762306a36Sopenharmony_ci	{0x00, 0x85, 0x06, 0xaa},
262862306a36Sopenharmony_ci	{0x00, 0x8b, 0x25, 0xaa},
262962306a36Sopenharmony_ci	{0x00, 0x8c, 0x00, 0xaa},
263062306a36Sopenharmony_ci	{0x00, 0x8d, 0x86, 0xaa},
263162306a36Sopenharmony_ci	{0x00, 0x8e, 0x82, 0xaa},
263262306a36Sopenharmony_ci	{0x00, 0x8f, 0x2d, 0xaa},
263362306a36Sopenharmony_ci	{0x00, 0x90, 0x8b, 0xaa},
263462306a36Sopenharmony_ci	{0x00, 0x91, 0x81, 0xaa},
263562306a36Sopenharmony_ci	{0x00, 0x92, 0x81, 0xaa},
263662306a36Sopenharmony_ci	{0x00, 0x93, 0x23, 0xaa},
263762306a36Sopenharmony_ci	{0x00, 0xa3, 0x2a, 0xaa},
263862306a36Sopenharmony_ci	{0x00, 0xa4, 0x03, 0xaa},
263962306a36Sopenharmony_ci	{0x00, 0xa5, 0xea, 0xaa},
264062306a36Sopenharmony_ci	{0x00, 0xb0, 0x68, 0xaa},
264162306a36Sopenharmony_ci	{0x00, 0xbc, 0x04, 0xaa},
264262306a36Sopenharmony_ci	{0x00, 0xbe, 0x3b, 0xaa},
264362306a36Sopenharmony_ci	{0x00, 0x4e, 0x40, 0xaa},
264462306a36Sopenharmony_ci	{0x00, 0x06, 0x04, 0xaa},
264562306a36Sopenharmony_ci	{0x00, 0x07, 0x03, 0xaa},
264662306a36Sopenharmony_ci	{0x00, 0xcd, 0x18, 0xaa},
264762306a36Sopenharmony_ci	{0x00, 0x28, 0x03, 0xaa},
264862306a36Sopenharmony_ci	{0x00, 0x29, 0xef, 0xaa},
264962306a36Sopenharmony_ci/* reinit on alt 2 (qvga) or alt7 (vga) */
265062306a36Sopenharmony_ci	{0xb3, 0x05, 0x00, 0xcc},
265162306a36Sopenharmony_ci	{0xb3, 0x06, 0x00, 0xcc},
265262306a36Sopenharmony_ci	{0xb8, 0x00, 0x01, 0xcc},
265362306a36Sopenharmony_ci
265462306a36Sopenharmony_ci	{0x00, 0x1d, 0x85, 0xaa},
265562306a36Sopenharmony_ci	{0x00, 0x1e, 0xc6, 0xaa},
265662306a36Sopenharmony_ci	{0x00, 0x00, 0x40, 0xdd},
265762306a36Sopenharmony_ci	{0x00, 0x1d, 0x05, 0xaa},
265862306a36Sopenharmony_ci	{}
265962306a36Sopenharmony_ci};
266062306a36Sopenharmony_cistatic const u8 poxxxx_gamma[][4] = {
266162306a36Sopenharmony_ci	{0x00, 0xd6, 0x22, 0xaa},	/* gamma 0 */
266262306a36Sopenharmony_ci	{0x00, 0x73, 0x00, 0xaa},
266362306a36Sopenharmony_ci	{0x00, 0x74, 0x0a, 0xaa},
266462306a36Sopenharmony_ci	{0x00, 0x75, 0x16, 0xaa},
266562306a36Sopenharmony_ci	{0x00, 0x76, 0x25, 0xaa},
266662306a36Sopenharmony_ci	{0x00, 0x77, 0x34, 0xaa},
266762306a36Sopenharmony_ci	{0x00, 0x78, 0x49, 0xaa},
266862306a36Sopenharmony_ci	{0x00, 0x79, 0x5a, 0xaa},
266962306a36Sopenharmony_ci	{0x00, 0x7a, 0x7f, 0xaa},
267062306a36Sopenharmony_ci	{0x00, 0x7b, 0x9b, 0xaa},
267162306a36Sopenharmony_ci	{0x00, 0x7c, 0xba, 0xaa},
267262306a36Sopenharmony_ci	{0x00, 0x7d, 0xd4, 0xaa},
267362306a36Sopenharmony_ci	{0x00, 0x7e, 0xea, 0xaa},
267462306a36Sopenharmony_ci
267562306a36Sopenharmony_ci	{0x00, 0xd6, 0x62, 0xaa},	/* gamma 1 */
267662306a36Sopenharmony_ci	{0x00, 0x73, 0x00, 0xaa},
267762306a36Sopenharmony_ci	{0x00, 0x74, 0x0a, 0xaa},
267862306a36Sopenharmony_ci	{0x00, 0x75, 0x16, 0xaa},
267962306a36Sopenharmony_ci	{0x00, 0x76, 0x25, 0xaa},
268062306a36Sopenharmony_ci	{0x00, 0x77, 0x34, 0xaa},
268162306a36Sopenharmony_ci	{0x00, 0x78, 0x49, 0xaa},
268262306a36Sopenharmony_ci	{0x00, 0x79, 0x5a, 0xaa},
268362306a36Sopenharmony_ci	{0x00, 0x7a, 0x7f, 0xaa},
268462306a36Sopenharmony_ci	{0x00, 0x7b, 0x9b, 0xaa},
268562306a36Sopenharmony_ci	{0x00, 0x7c, 0xba, 0xaa},
268662306a36Sopenharmony_ci	{0x00, 0x7d, 0xd4, 0xaa},
268762306a36Sopenharmony_ci	{0x00, 0x7e, 0xea, 0xaa},
268862306a36Sopenharmony_ci
268962306a36Sopenharmony_ci	{0x00, 0xd6, 0xa2, 0xaa},	/* gamma 2 */
269062306a36Sopenharmony_ci	{0x00, 0x73, 0x00, 0xaa},
269162306a36Sopenharmony_ci	{0x00, 0x74, 0x0a, 0xaa},
269262306a36Sopenharmony_ci	{0x00, 0x75, 0x16, 0xaa},
269362306a36Sopenharmony_ci	{0x00, 0x76, 0x25, 0xaa},
269462306a36Sopenharmony_ci	{0x00, 0x77, 0x34, 0xaa},
269562306a36Sopenharmony_ci	{0x00, 0x78, 0x49, 0xaa},
269662306a36Sopenharmony_ci	{0x00, 0x79, 0x5a, 0xaa},
269762306a36Sopenharmony_ci	{0x00, 0x7a, 0x7f, 0xaa},
269862306a36Sopenharmony_ci	{0x00, 0x7b, 0x9b, 0xaa},
269962306a36Sopenharmony_ci	{0x00, 0x7c, 0xba, 0xaa},
270062306a36Sopenharmony_ci	{0x00, 0x7d, 0xd4, 0xaa},
270162306a36Sopenharmony_ci	{0x00, 0x7e, 0xea, 0xaa},
270262306a36Sopenharmony_ci	{}
270362306a36Sopenharmony_ci};
270462306a36Sopenharmony_cistatic const u8 poxxxx_init_start_3[][4] = {
270562306a36Sopenharmony_ci	{0x00, 0xb8, 0x28, 0xaa},
270662306a36Sopenharmony_ci	{0x00, 0xb9, 0x1e, 0xaa},
270762306a36Sopenharmony_ci	{0x00, 0xb6, 0x14, 0xaa},
270862306a36Sopenharmony_ci	{0x00, 0xb7, 0x0f, 0xaa},
270962306a36Sopenharmony_ci	{0x00, 0x5c, 0x10, 0xaa},
271062306a36Sopenharmony_ci	{0x00, 0x5d, 0x18, 0xaa},
271162306a36Sopenharmony_ci	{0x00, 0x5e, 0x24, 0xaa},
271262306a36Sopenharmony_ci	{0x00, 0x5f, 0x24, 0xaa},
271362306a36Sopenharmony_ci	{0x00, 0x86, 0x1a, 0xaa},
271462306a36Sopenharmony_ci	{0x00, 0x60, 0x00, 0xaa},
271562306a36Sopenharmony_ci	{0x00, 0x61, 0x1b, 0xaa},
271662306a36Sopenharmony_ci	{0x00, 0x62, 0x30, 0xaa},
271762306a36Sopenharmony_ci	{0x00, 0x63, 0x40, 0xaa},
271862306a36Sopenharmony_ci	{0x00, 0x87, 0x1a, 0xaa},
271962306a36Sopenharmony_ci	{0x00, 0x64, 0x00, 0xaa},
272062306a36Sopenharmony_ci	{0x00, 0x65, 0x08, 0xaa},
272162306a36Sopenharmony_ci	{0x00, 0x66, 0x10, 0xaa},
272262306a36Sopenharmony_ci	{0x00, 0x67, 0x20, 0xaa},
272362306a36Sopenharmony_ci	{0x00, 0x88, 0x10, 0xaa},
272462306a36Sopenharmony_ci	{0x00, 0x68, 0x00, 0xaa},
272562306a36Sopenharmony_ci	{0x00, 0x69, 0x08, 0xaa},
272662306a36Sopenharmony_ci	{0x00, 0x6a, 0x0f, 0xaa},
272762306a36Sopenharmony_ci	{0x00, 0x6b, 0x0f, 0xaa},
272862306a36Sopenharmony_ci	{0x00, 0x89, 0x07, 0xaa},
272962306a36Sopenharmony_ci	{0x00, 0xd5, 0x4c, 0xaa},
273062306a36Sopenharmony_ci	{0x00, 0x0a, 0x00, 0xaa},
273162306a36Sopenharmony_ci	{0x00, 0x0b, 0x2a, 0xaa},
273262306a36Sopenharmony_ci	{0x00, 0x0e, 0x03, 0xaa},
273362306a36Sopenharmony_ci	{0x00, 0x0f, 0xea, 0xaa},
273462306a36Sopenharmony_ci	{0x00, 0xa2, 0x00, 0xaa},
273562306a36Sopenharmony_ci	{0x00, 0xa3, 0x2a, 0xaa},
273662306a36Sopenharmony_ci	{0x00, 0xa4, 0x03, 0xaa},
273762306a36Sopenharmony_ci	{0x00, 0xa5, 0xea, 0xaa},
273862306a36Sopenharmony_ci	{}
273962306a36Sopenharmony_ci};
274062306a36Sopenharmony_cistatic const u8 poxxxx_initVGA[][4] = {
274162306a36Sopenharmony_ci	{0x00, 0x20, 0x11, 0xaa},
274262306a36Sopenharmony_ci	{0x00, 0x33, 0x38, 0xaa},
274362306a36Sopenharmony_ci	{0x00, 0xbb, 0x0d, 0xaa},
274462306a36Sopenharmony_ci	{0xb3, 0x22, 0x01, 0xcc},	/* change to 640x480 */
274562306a36Sopenharmony_ci	{0xb3, 0x23, 0xe0, 0xcc},
274662306a36Sopenharmony_ci	{0xb3, 0x16, 0x02, 0xcc},
274762306a36Sopenharmony_ci	{0xb3, 0x17, 0x7f, 0xcc},
274862306a36Sopenharmony_ci	{0xb3, 0x02, 0xb0, 0xcc},
274962306a36Sopenharmony_ci	{0xb3, 0x06, 0x00, 0xcc},
275062306a36Sopenharmony_ci	{0xb3, 0x5c, 0x01, 0xcc},
275162306a36Sopenharmony_ci	{0x00, 0x04, 0x06, 0xaa},
275262306a36Sopenharmony_ci	{0x00, 0x05, 0x3f, 0xaa},
275362306a36Sopenharmony_ci	{0x00, 0x04, 0x00, 0xdd},	/* delay 1s */
275462306a36Sopenharmony_ci	{}
275562306a36Sopenharmony_ci};
275662306a36Sopenharmony_cistatic const u8 poxxxx_initQVGA[][4] = {
275762306a36Sopenharmony_ci	{0x00, 0x20, 0x33, 0xaa},
275862306a36Sopenharmony_ci	{0x00, 0x33, 0x38, 0xaa},
275962306a36Sopenharmony_ci	{0x00, 0xbb, 0x0d, 0xaa},
276062306a36Sopenharmony_ci	{0xb3, 0x22, 0x00, 0xcc},	/* change to 320x240 */
276162306a36Sopenharmony_ci	{0xb3, 0x23, 0xf0, 0xcc},
276262306a36Sopenharmony_ci	{0xb3, 0x16, 0x01, 0xcc},
276362306a36Sopenharmony_ci	{0xb3, 0x17, 0x3f, 0xcc},
276462306a36Sopenharmony_ci	{0xb3, 0x02, 0xb0, 0xcc},
276562306a36Sopenharmony_ci	{0xb3, 0x06, 0x01, 0xcc},
276662306a36Sopenharmony_ci	{0xb3, 0x5c, 0x00, 0xcc},
276762306a36Sopenharmony_ci	{0x00, 0x04, 0x06, 0xaa},
276862306a36Sopenharmony_ci	{0x00, 0x05, 0x3f, 0xaa},
276962306a36Sopenharmony_ci	{0x00, 0x04, 0x00, 0xdd},	/* delay 1s */
277062306a36Sopenharmony_ci	{}
277162306a36Sopenharmony_ci};
277262306a36Sopenharmony_cistatic const u8 poxxxx_init_end_1[][4] = {
277362306a36Sopenharmony_ci	{0x00, 0x47, 0x25, 0xaa},
277462306a36Sopenharmony_ci	{0x00, 0x48, 0x80, 0xaa},
277562306a36Sopenharmony_ci	{0x00, 0x49, 0x1f, 0xaa},
277662306a36Sopenharmony_ci	{0x00, 0x4a, 0x40, 0xaa},
277762306a36Sopenharmony_ci	{0x00, 0x44, 0x40, 0xaa},
277862306a36Sopenharmony_ci	{0x00, 0xab, 0x4a, 0xaa},
277962306a36Sopenharmony_ci	{0x00, 0xb1, 0x00, 0xaa},
278062306a36Sopenharmony_ci	{0x00, 0xb2, 0x04, 0xaa},
278162306a36Sopenharmony_ci	{0x00, 0xb3, 0x08, 0xaa},
278262306a36Sopenharmony_ci	{0x00, 0xb4, 0x0b, 0xaa},
278362306a36Sopenharmony_ci	{0x00, 0xb5, 0x0d, 0xaa},
278462306a36Sopenharmony_ci	{}
278562306a36Sopenharmony_ci};
278662306a36Sopenharmony_cistatic const u8 poxxxx_init_end_2[][4] = {
278762306a36Sopenharmony_ci	{0x00, 0x1d, 0x85, 0xaa},
278862306a36Sopenharmony_ci	{0x00, 0x1e, 0x06, 0xaa},
278962306a36Sopenharmony_ci	{0x00, 0x1d, 0x05, 0xaa},
279062306a36Sopenharmony_ci	{}
279162306a36Sopenharmony_ci};
279262306a36Sopenharmony_ci
279362306a36Sopenharmony_cistruct sensor_info {
279462306a36Sopenharmony_ci	s8 sensorId;
279562306a36Sopenharmony_ci	u8 I2cAdd;
279662306a36Sopenharmony_ci	u8 IdAdd;
279762306a36Sopenharmony_ci	u16 VpId;
279862306a36Sopenharmony_ci	u8 m1;
279962306a36Sopenharmony_ci	u8 m2;
280062306a36Sopenharmony_ci	u8 op;
280162306a36Sopenharmony_ci};
280262306a36Sopenharmony_ci
280362306a36Sopenharmony_ci/* probe values */
280462306a36Sopenharmony_cistatic const struct sensor_info vc0321_probe_data[] = {
280562306a36Sopenharmony_ci/*      sensorId,	   I2cAdd,	IdAdd,  VpId,  m1,    m2,  op */
280662306a36Sopenharmony_ci/* 0 OV9640 */
280762306a36Sopenharmony_ci	{-1,		    0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05},
280862306a36Sopenharmony_ci/* 1 ICM108T (may respond on IdAdd == 0x83 - tested in vc032x_probe_sensor) */
280962306a36Sopenharmony_ci	{-1,		    0x80 | 0x20, 0x82, 0x0000, 0x24, 0x25, 0x01},
281062306a36Sopenharmony_ci/* 2 PO2130 (may detect PO3130NC - tested in vc032x_probe_sensor)*/
281162306a36Sopenharmony_ci	{-1,		    0x80 | 0x76, 0x00, 0x0000, 0x24, 0x25, 0x01},
281262306a36Sopenharmony_ci/* 3 MI1310 */
281362306a36Sopenharmony_ci	{-1,		    0x80 | 0x5d, 0x00, 0x0000, 0x24, 0x25, 0x01},
281462306a36Sopenharmony_ci/* 4 MI360 - tested in vc032x_probe_sensor */
281562306a36Sopenharmony_ci/*	{SENSOR_MI0360,	    0x80 | 0x5d, 0x00, 0x8243, 0x24, 0x25, 0x01}, */
281662306a36Sopenharmony_ci/* 5 7131R */
281762306a36Sopenharmony_ci	{SENSOR_HV7131R,    0x80 | 0x11, 0x00, 0x0209, 0x24, 0x25, 0x01},
281862306a36Sopenharmony_ci/* 6 OV7649 */
281962306a36Sopenharmony_ci	{-1,		    0x80 | 0x21, 0x0a, 0x0000, 0x21, 0x20, 0x05},
282062306a36Sopenharmony_ci/* 7 PAS302BCW */
282162306a36Sopenharmony_ci	{-1,		    0x80 | 0x40, 0x00, 0x0000, 0x20, 0x22, 0x05},
282262306a36Sopenharmony_ci/* 8 OV7660 */
282362306a36Sopenharmony_ci	{SENSOR_OV7660,     0x80 | 0x21, 0x0a, 0x7660, 0x26, 0x26, 0x05},
282462306a36Sopenharmony_ci/* 9 PO3130NC - (tested in vc032x_probe_sensor) */
282562306a36Sopenharmony_ci/*	{SENSOR_PO3130NC,   0x80 | 0x76, 0x00, 0x3130, 0x24, 0x25, 0x01}, */
282662306a36Sopenharmony_ci/* 10 PO1030KC */
282762306a36Sopenharmony_ci	{-1,		    0x80 | 0x6e, 0x00, 0x0000, 0x24, 0x25, 0x01},
282862306a36Sopenharmony_ci/* 11 MI1310_SOC */
282962306a36Sopenharmony_ci	{SENSOR_MI1310_SOC, 0x80 | 0x5d, 0x00, 0x143a, 0x24, 0x25, 0x01},
283062306a36Sopenharmony_ci/* 12 OV9650 */
283162306a36Sopenharmony_ci	{-1,		    0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05},
283262306a36Sopenharmony_ci/* 13 S5K532 */
283362306a36Sopenharmony_ci	{-1,		    0x80 | 0x11, 0x39, 0x0000, 0x24, 0x25, 0x01},
283462306a36Sopenharmony_ci/* 14 MI360_SOC - ??? */
283562306a36Sopenharmony_ci/* 15 PO1200N */
283662306a36Sopenharmony_ci	{SENSOR_PO1200,     0x80 | 0x5c, 0x00, 0x1200, 0x67, 0x67, 0x01},
283762306a36Sopenharmony_ci/* 16 PO3030K */
283862306a36Sopenharmony_ci	{-1,		    0x80 | 0x18, 0x00, 0x0000, 0x24, 0x25, 0x01},
283962306a36Sopenharmony_ci/* 17 PO2030 */
284062306a36Sopenharmony_ci	{-1,		    0x80 | 0x6e, 0x00, 0x0000, 0x24, 0x25, 0x01},
284162306a36Sopenharmony_ci/* ?? */
284262306a36Sopenharmony_ci	{-1,		    0x80 | 0x56, 0x01, 0x0000, 0x64, 0x67, 0x01},
284362306a36Sopenharmony_ci	{SENSOR_MI1320,     0x80 | 0x48, 0x00, 0x148c, 0x64, 0x65, 0x01},
284462306a36Sopenharmony_ci};
284562306a36Sopenharmony_cistatic const struct sensor_info vc0323_probe_data[] = {
284662306a36Sopenharmony_ci/*      sensorId,	   I2cAdd,	IdAdd,  VpId,  m1,    m2,  op */
284762306a36Sopenharmony_ci/* 0 OV9640 */
284862306a36Sopenharmony_ci	{-1,		    0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05},
284962306a36Sopenharmony_ci/* 1 ICM108T (may respond on IdAdd == 0x83 - tested in vc032x_probe_sensor) */
285062306a36Sopenharmony_ci	{-1,		    0x80 | 0x20, 0x82, 0x0000, 0x24, 0x25, 0x01},
285162306a36Sopenharmony_ci/* 2 PO2130 (may detect PO3130NC - tested in vc032x_probe_sensor)*/
285262306a36Sopenharmony_ci	{-1,		    0x80 | 0x76, 0x00, 0x0000, 0x24, 0x25, 0x01},
285362306a36Sopenharmony_ci/* 3 MI1310 */
285462306a36Sopenharmony_ci	{-1,		    0x80 | 0x5d, 0x00, 0x0000, 0x24, 0x25, 0x01},
285562306a36Sopenharmony_ci/* 4 MI360 - tested in vc032x_probe_sensor */
285662306a36Sopenharmony_ci/*	{SENSOR_MI0360,	    0x80 | 0x5d, 0x00, 0x8243, 0x24, 0x25, 0x01}, */
285762306a36Sopenharmony_ci/* 5 7131R */
285862306a36Sopenharmony_ci	{SENSOR_HV7131R,    0x80 | 0x11, 0x00, 0x0209, 0x24, 0x25, 0x01},
285962306a36Sopenharmony_ci/* 6 OV7649 */
286062306a36Sopenharmony_ci	{-1,		    0x80 | 0x21, 0x0a, 0x0000, 0x21, 0x20, 0x05},
286162306a36Sopenharmony_ci/* 7 PAS302BCW */
286262306a36Sopenharmony_ci	{-1,		    0x80 | 0x40, 0x00, 0x0000, 0x20, 0x22, 0x05},
286362306a36Sopenharmony_ci/* 8 OV7660 */
286462306a36Sopenharmony_ci	{SENSOR_OV7660,     0x80 | 0x21, 0x0a, 0x7660, 0x26, 0x26, 0x05},
286562306a36Sopenharmony_ci/* 9 PO3130NC - (tested in vc032x_probe_sensor) */
286662306a36Sopenharmony_ci/*	{SENSOR_PO3130NC,   0x80 | 0x76, 0x00, 0x3130, 0x24, 0x25, 0x01}, */
286762306a36Sopenharmony_ci/* 10 PO1030KC */
286862306a36Sopenharmony_ci	{-1,		    0x80 | 0x6e, 0x00, 0x0000, 0x24, 0x25, 0x01},
286962306a36Sopenharmony_ci/* 11 MI1310_SOC */
287062306a36Sopenharmony_ci	{SENSOR_MI1310_SOC, 0x80 | 0x5d, 0x00, 0x143a, 0x24, 0x25, 0x01},
287162306a36Sopenharmony_ci/* 12 OV9650 */
287262306a36Sopenharmony_ci	{-1,		    0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05},
287362306a36Sopenharmony_ci/* 13 S5K532 */
287462306a36Sopenharmony_ci	{-1,		    0x80 | 0x11, 0x39, 0x0000, 0x24, 0x25, 0x01},
287562306a36Sopenharmony_ci/* 14 MI360_SOC - ??? */
287662306a36Sopenharmony_ci/* 15 PO1200N */
287762306a36Sopenharmony_ci	{SENSOR_PO1200,     0x80 | 0x5c, 0x00, 0x1200, 0x67, 0x67, 0x01},
287862306a36Sopenharmony_ci/* 16 ?? */
287962306a36Sopenharmony_ci	{-1,		    0x80 | 0x2d, 0x00, 0x0000, 0x65, 0x67, 0x01},
288062306a36Sopenharmony_ci/* 17 PO2030 */
288162306a36Sopenharmony_ci	{-1,		    0x80 | 0x6e, 0x00, 0x0000, 0x24, 0x25, 0x01},
288262306a36Sopenharmony_ci/* ?? */
288362306a36Sopenharmony_ci	{-1,		    0x80 | 0x56, 0x01, 0x0000, 0x64, 0x67, 0x01},
288462306a36Sopenharmony_ci	{SENSOR_MI1320_SOC, 0x80 | 0x48, 0x00, 0x148c, 0x64, 0x67, 0x01},
288562306a36Sopenharmony_ci/*fixme: not in the ms-win probe - may be found before? */
288662306a36Sopenharmony_ci	{SENSOR_OV7670,     0x80 | 0x21, 0x0a, 0x7673, 0x66, 0x67, 0x05},
288762306a36Sopenharmony_ci};
288862306a36Sopenharmony_ci
288962306a36Sopenharmony_ci/* read 'len' bytes in gspca_dev->usb_buf */
289062306a36Sopenharmony_cistatic void reg_r_i(struct gspca_dev *gspca_dev,
289162306a36Sopenharmony_ci		  u16 req,
289262306a36Sopenharmony_ci		  u16 index,
289362306a36Sopenharmony_ci		  u16 len)
289462306a36Sopenharmony_ci{
289562306a36Sopenharmony_ci	int ret;
289662306a36Sopenharmony_ci
289762306a36Sopenharmony_ci	if (gspca_dev->usb_err < 0)
289862306a36Sopenharmony_ci		return;
289962306a36Sopenharmony_ci	ret = usb_control_msg(gspca_dev->dev,
290062306a36Sopenharmony_ci			usb_rcvctrlpipe(gspca_dev->dev, 0),
290162306a36Sopenharmony_ci			req,
290262306a36Sopenharmony_ci			USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
290362306a36Sopenharmony_ci			1,			/* value */
290462306a36Sopenharmony_ci			index, gspca_dev->usb_buf, len,
290562306a36Sopenharmony_ci			500);
290662306a36Sopenharmony_ci	if (ret < 0) {
290762306a36Sopenharmony_ci		pr_err("reg_r err %d\n", ret);
290862306a36Sopenharmony_ci		gspca_dev->usb_err = ret;
290962306a36Sopenharmony_ci		/*
291062306a36Sopenharmony_ci		 * Make sure the buffer is zeroed to avoid uninitialized
291162306a36Sopenharmony_ci		 * values.
291262306a36Sopenharmony_ci		 */
291362306a36Sopenharmony_ci		memset(gspca_dev->usb_buf, 0, USB_BUF_SZ);
291462306a36Sopenharmony_ci	}
291562306a36Sopenharmony_ci}
291662306a36Sopenharmony_cistatic void reg_r(struct gspca_dev *gspca_dev,
291762306a36Sopenharmony_ci		  u16 req,
291862306a36Sopenharmony_ci		  u16 index,
291962306a36Sopenharmony_ci		  u16 len)
292062306a36Sopenharmony_ci{
292162306a36Sopenharmony_ci	reg_r_i(gspca_dev, req, index, len);
292262306a36Sopenharmony_ci	if (gspca_dev->usb_err < 0)
292362306a36Sopenharmony_ci		return;
292462306a36Sopenharmony_ci	if (len == 1)
292562306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_USBI, "GET %02x 0001 %04x %02x\n",
292662306a36Sopenharmony_ci			  req, index,
292762306a36Sopenharmony_ci			  gspca_dev->usb_buf[0]);
292862306a36Sopenharmony_ci	else
292962306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_USBI, "GET %02x 0001 %04x %*ph\n",
293062306a36Sopenharmony_ci			  req, index, 3, gspca_dev->usb_buf);
293162306a36Sopenharmony_ci}
293262306a36Sopenharmony_ci
293362306a36Sopenharmony_cistatic void reg_w_i(struct gspca_dev *gspca_dev,
293462306a36Sopenharmony_ci			    u16 req,
293562306a36Sopenharmony_ci			    u16 value,
293662306a36Sopenharmony_ci			    u16 index)
293762306a36Sopenharmony_ci{
293862306a36Sopenharmony_ci	int ret;
293962306a36Sopenharmony_ci
294062306a36Sopenharmony_ci	if (gspca_dev->usb_err < 0)
294162306a36Sopenharmony_ci		return;
294262306a36Sopenharmony_ci	ret = usb_control_msg(gspca_dev->dev,
294362306a36Sopenharmony_ci			usb_sndctrlpipe(gspca_dev->dev, 0),
294462306a36Sopenharmony_ci			req,
294562306a36Sopenharmony_ci			USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
294662306a36Sopenharmony_ci			value, index, NULL, 0,
294762306a36Sopenharmony_ci			500);
294862306a36Sopenharmony_ci	if (ret < 0) {
294962306a36Sopenharmony_ci		pr_err("reg_w err %d\n", ret);
295062306a36Sopenharmony_ci		gspca_dev->usb_err = ret;
295162306a36Sopenharmony_ci	}
295262306a36Sopenharmony_ci}
295362306a36Sopenharmony_cistatic void reg_w(struct gspca_dev *gspca_dev,
295462306a36Sopenharmony_ci			    u16 req,
295562306a36Sopenharmony_ci			    u16 value,
295662306a36Sopenharmony_ci			    u16 index)
295762306a36Sopenharmony_ci{
295862306a36Sopenharmony_ci	if (gspca_dev->usb_err < 0)
295962306a36Sopenharmony_ci		return;
296062306a36Sopenharmony_ci	gspca_dbg(gspca_dev, D_USBO, "SET %02x %04x %04x\n", req, value, index);
296162306a36Sopenharmony_ci	reg_w_i(gspca_dev, req, value, index);
296262306a36Sopenharmony_ci}
296362306a36Sopenharmony_ci
296462306a36Sopenharmony_cistatic u16 read_sensor_register(struct gspca_dev *gspca_dev,
296562306a36Sopenharmony_ci				u16 address)
296662306a36Sopenharmony_ci{
296762306a36Sopenharmony_ci	u8 ldata, mdata, hdata;
296862306a36Sopenharmony_ci	int retry = 50;
296962306a36Sopenharmony_ci
297062306a36Sopenharmony_ci	reg_r(gspca_dev, 0xa1, 0xb33f, 1);
297162306a36Sopenharmony_ci	if (!(gspca_dev->usb_buf[0] & 0x02)) {
297262306a36Sopenharmony_ci		pr_err("I2c Bus Busy Wait %02x\n", gspca_dev->usb_buf[0]);
297362306a36Sopenharmony_ci		return 0;
297462306a36Sopenharmony_ci	}
297562306a36Sopenharmony_ci	reg_w(gspca_dev, 0xa0, address, 0xb33a);
297662306a36Sopenharmony_ci	reg_w(gspca_dev, 0xa0, 0x02, 0xb339);
297762306a36Sopenharmony_ci
297862306a36Sopenharmony_ci	do {
297962306a36Sopenharmony_ci		reg_r(gspca_dev, 0xa1, 0xb33b, 1);
298062306a36Sopenharmony_ci		if (gspca_dev->usb_buf[0] == 0x00)
298162306a36Sopenharmony_ci			break;
298262306a36Sopenharmony_ci		msleep(40);
298362306a36Sopenharmony_ci	} while (--retry >= 0);
298462306a36Sopenharmony_ci
298562306a36Sopenharmony_ci	reg_r(gspca_dev, 0xa1, 0xb33e, 1);
298662306a36Sopenharmony_ci	ldata = gspca_dev->usb_buf[0];
298762306a36Sopenharmony_ci	reg_r(gspca_dev, 0xa1, 0xb33d, 1);
298862306a36Sopenharmony_ci	mdata = gspca_dev->usb_buf[0];
298962306a36Sopenharmony_ci	reg_r(gspca_dev, 0xa1, 0xb33c, 1);
299062306a36Sopenharmony_ci	hdata = gspca_dev->usb_buf[0];
299162306a36Sopenharmony_ci	if (hdata != 0 && mdata != 0 && ldata != 0)
299262306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PROBE, "Read Sensor %02x%02x %02x\n",
299362306a36Sopenharmony_ci			  hdata, mdata, ldata);
299462306a36Sopenharmony_ci	reg_r(gspca_dev, 0xa1, 0xb334, 1);
299562306a36Sopenharmony_ci	if (gspca_dev->usb_buf[0] == 0x02)
299662306a36Sopenharmony_ci		return (hdata << 8) + mdata;
299762306a36Sopenharmony_ci	return hdata;
299862306a36Sopenharmony_ci}
299962306a36Sopenharmony_ci
300062306a36Sopenharmony_cistatic int vc032x_probe_sensor(struct gspca_dev *gspca_dev)
300162306a36Sopenharmony_ci{
300262306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
300362306a36Sopenharmony_ci	int i, n;
300462306a36Sopenharmony_ci	u16 value;
300562306a36Sopenharmony_ci	const struct sensor_info *ptsensor_info;
300662306a36Sopenharmony_ci
300762306a36Sopenharmony_ci/*fixme: should also check the other sensor (back mi1320_soc, front mc501cb)*/
300862306a36Sopenharmony_ci	if (sd->flags & FL_SAMSUNG) {
300962306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa0, 0x01, 0xb301);
301062306a36Sopenharmony_ci		reg_w(gspca_dev, 0x89, 0xf0ff, 0xffff);
301162306a36Sopenharmony_ci						/* select the back sensor */
301262306a36Sopenharmony_ci	}
301362306a36Sopenharmony_ci
301462306a36Sopenharmony_ci	reg_r(gspca_dev, 0xa1, 0xbfcf, 1);
301562306a36Sopenharmony_ci	gspca_dbg(gspca_dev, D_PROBE, "vc032%d check sensor header %02x\n",
301662306a36Sopenharmony_ci		  sd->bridge == BRIDGE_VC0321 ? 1 : 3, gspca_dev->usb_buf[0]);
301762306a36Sopenharmony_ci	if (sd->bridge == BRIDGE_VC0321) {
301862306a36Sopenharmony_ci		ptsensor_info = vc0321_probe_data;
301962306a36Sopenharmony_ci		n = ARRAY_SIZE(vc0321_probe_data);
302062306a36Sopenharmony_ci	} else {
302162306a36Sopenharmony_ci		ptsensor_info = vc0323_probe_data;
302262306a36Sopenharmony_ci		n = ARRAY_SIZE(vc0323_probe_data);
302362306a36Sopenharmony_ci	}
302462306a36Sopenharmony_ci	for (i = 0; i < n; i++) {
302562306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa0, 0x02, 0xb334);
302662306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa0, ptsensor_info->m1, 0xb300);
302762306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa0, ptsensor_info->m2, 0xb300);
302862306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa0, 0x01, 0xb308);
302962306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa0, 0x0c, 0xb309);
303062306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa0, ptsensor_info->I2cAdd, 0xb335);
303162306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa0, ptsensor_info->op, 0xb301);
303262306a36Sopenharmony_ci		value = read_sensor_register(gspca_dev, ptsensor_info->IdAdd);
303362306a36Sopenharmony_ci		if (value == 0 && ptsensor_info->IdAdd == 0x82)
303462306a36Sopenharmony_ci			value = read_sensor_register(gspca_dev, 0x83);
303562306a36Sopenharmony_ci		if (value != 0) {
303662306a36Sopenharmony_ci			gspca_dbg(gspca_dev, D_PROBE, "Sensor ID %04x (%d)\n",
303762306a36Sopenharmony_ci				  value, i);
303862306a36Sopenharmony_ci			if (value == ptsensor_info->VpId)
303962306a36Sopenharmony_ci				return ptsensor_info->sensorId;
304062306a36Sopenharmony_ci
304162306a36Sopenharmony_ci			switch (value) {
304262306a36Sopenharmony_ci			case 0x3130:
304362306a36Sopenharmony_ci				return SENSOR_PO3130NC;
304462306a36Sopenharmony_ci			case 0x7673:
304562306a36Sopenharmony_ci				return SENSOR_OV7670;
304662306a36Sopenharmony_ci			case 0x8243:
304762306a36Sopenharmony_ci				return SENSOR_MI0360;
304862306a36Sopenharmony_ci			}
304962306a36Sopenharmony_ci		}
305062306a36Sopenharmony_ci		ptsensor_info++;
305162306a36Sopenharmony_ci	}
305262306a36Sopenharmony_ci	return -1;
305362306a36Sopenharmony_ci}
305462306a36Sopenharmony_ci
305562306a36Sopenharmony_cistatic void i2c_write(struct gspca_dev *gspca_dev,
305662306a36Sopenharmony_ci			u8 reg, const u8 *val,
305762306a36Sopenharmony_ci			u8 size)		/* 1 or 2 */
305862306a36Sopenharmony_ci{
305962306a36Sopenharmony_ci	int retry;
306062306a36Sopenharmony_ci
306162306a36Sopenharmony_ci	if (gspca_dev->usb_err < 0)
306262306a36Sopenharmony_ci		return;
306362306a36Sopenharmony_ci	if (size == 1)
306462306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_USBO, "i2c_w %02x %02x\n", reg, *val);
306562306a36Sopenharmony_ci	else
306662306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_USBO, "i2c_w %02x %02x%02x\n",
306762306a36Sopenharmony_ci			  reg, *val, val[1]);
306862306a36Sopenharmony_ci	reg_r_i(gspca_dev, 0xa1, 0xb33f, 1);
306962306a36Sopenharmony_ci/*fixme:should check if (!(gspca_dev->usb_buf[0] & 0x02)) error*/
307062306a36Sopenharmony_ci	reg_w_i(gspca_dev, 0xa0, size, 0xb334);
307162306a36Sopenharmony_ci	reg_w_i(gspca_dev, 0xa0, reg, 0xb33a);
307262306a36Sopenharmony_ci	reg_w_i(gspca_dev, 0xa0, val[0], 0xb336);
307362306a36Sopenharmony_ci	if (size > 1)
307462306a36Sopenharmony_ci		reg_w_i(gspca_dev, 0xa0, val[1], 0xb337);
307562306a36Sopenharmony_ci	reg_w_i(gspca_dev, 0xa0, 0x01, 0xb339);
307662306a36Sopenharmony_ci	retry = 4;
307762306a36Sopenharmony_ci	do {
307862306a36Sopenharmony_ci		reg_r_i(gspca_dev, 0xa1, 0xb33b, 1);
307962306a36Sopenharmony_ci		if (gspca_dev->usb_buf[0] == 0)
308062306a36Sopenharmony_ci			break;
308162306a36Sopenharmony_ci		msleep(20);
308262306a36Sopenharmony_ci	} while (--retry > 0);
308362306a36Sopenharmony_ci	if (retry <= 0)
308462306a36Sopenharmony_ci		pr_err("i2c_write timeout\n");
308562306a36Sopenharmony_ci}
308662306a36Sopenharmony_ci
308762306a36Sopenharmony_cistatic void put_tab_to_reg(struct gspca_dev *gspca_dev,
308862306a36Sopenharmony_ci			const u8 *tab, u8 tabsize, u16 addr)
308962306a36Sopenharmony_ci{
309062306a36Sopenharmony_ci	int j;
309162306a36Sopenharmony_ci	u16 ad = addr;
309262306a36Sopenharmony_ci
309362306a36Sopenharmony_ci	for (j = 0; j < tabsize; j++)
309462306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa0, tab[j], ad++);
309562306a36Sopenharmony_ci}
309662306a36Sopenharmony_ci
309762306a36Sopenharmony_cistatic void usb_exchange(struct gspca_dev *gspca_dev,
309862306a36Sopenharmony_ci			const u8 data[][4])
309962306a36Sopenharmony_ci{
310062306a36Sopenharmony_ci	int i = 0;
310162306a36Sopenharmony_ci
310262306a36Sopenharmony_ci	for (;;) {
310362306a36Sopenharmony_ci		switch (data[i][3]) {
310462306a36Sopenharmony_ci		default:
310562306a36Sopenharmony_ci			return;
310662306a36Sopenharmony_ci		case 0xcc:			/* normal write */
310762306a36Sopenharmony_ci			reg_w(gspca_dev, 0xa0, data[i][2],
310862306a36Sopenharmony_ci					(data[i][0]) << 8 | data[i][1]);
310962306a36Sopenharmony_ci			break;
311062306a36Sopenharmony_ci		case 0xaa:			/* i2c op */
311162306a36Sopenharmony_ci			i2c_write(gspca_dev, data[i][1], &data[i][2], 1);
311262306a36Sopenharmony_ci			break;
311362306a36Sopenharmony_ci		case 0xbb:			/* i2c op */
311462306a36Sopenharmony_ci			i2c_write(gspca_dev, data[i][0], &data[i][1], 2);
311562306a36Sopenharmony_ci			break;
311662306a36Sopenharmony_ci		case 0xdd:
311762306a36Sopenharmony_ci			msleep(data[i][1] * 256 + data[i][2] + 10);
311862306a36Sopenharmony_ci			break;
311962306a36Sopenharmony_ci		}
312062306a36Sopenharmony_ci		i++;
312162306a36Sopenharmony_ci	}
312262306a36Sopenharmony_ci	/*not reached*/
312362306a36Sopenharmony_ci}
312462306a36Sopenharmony_ci
312562306a36Sopenharmony_ci
312662306a36Sopenharmony_ci/* this function is called at probe time */
312762306a36Sopenharmony_cistatic int sd_config(struct gspca_dev *gspca_dev,
312862306a36Sopenharmony_ci			const struct usb_device_id *id)
312962306a36Sopenharmony_ci{
313062306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
313162306a36Sopenharmony_ci
313262306a36Sopenharmony_ci	sd->bridge = id->driver_info >> 8;
313362306a36Sopenharmony_ci	sd->flags = id->driver_info & 0xff;
313462306a36Sopenharmony_ci
313562306a36Sopenharmony_ci	if (id->idVendor == 0x046d &&
313662306a36Sopenharmony_ci	    (id->idProduct == 0x0892 || id->idProduct == 0x0896))
313762306a36Sopenharmony_ci		sd->sensor = SENSOR_POxxxx;	/* no probe */
313862306a36Sopenharmony_ci
313962306a36Sopenharmony_ci	return 0;
314062306a36Sopenharmony_ci}
314162306a36Sopenharmony_ci
314262306a36Sopenharmony_ci/* this function is called at probe and resume time */
314362306a36Sopenharmony_cistatic int sd_init(struct gspca_dev *gspca_dev)
314462306a36Sopenharmony_ci{
314562306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
314662306a36Sopenharmony_ci	struct cam *cam;
314762306a36Sopenharmony_ci	int sensor;
314862306a36Sopenharmony_ci	/* number of packets per ISOC message */
314962306a36Sopenharmony_ci	static u8 npkt[NSENSORS] = {
315062306a36Sopenharmony_ci		[SENSOR_HV7131R] =	64,
315162306a36Sopenharmony_ci		[SENSOR_MI0360] =	32,
315262306a36Sopenharmony_ci		[SENSOR_MI1310_SOC] =	32,
315362306a36Sopenharmony_ci		[SENSOR_MI1320] =	64,
315462306a36Sopenharmony_ci		[SENSOR_MI1320_SOC] =	128,
315562306a36Sopenharmony_ci		[SENSOR_OV7660] =	32,
315662306a36Sopenharmony_ci		[SENSOR_OV7670] =	64,
315762306a36Sopenharmony_ci		[SENSOR_PO1200] =	128,
315862306a36Sopenharmony_ci		[SENSOR_PO3130NC] =	128,
315962306a36Sopenharmony_ci		[SENSOR_POxxxx] =	128,
316062306a36Sopenharmony_ci	};
316162306a36Sopenharmony_ci
316262306a36Sopenharmony_ci	if (sd->sensor != SENSOR_POxxxx)
316362306a36Sopenharmony_ci		sensor = vc032x_probe_sensor(gspca_dev);
316462306a36Sopenharmony_ci	else
316562306a36Sopenharmony_ci		sensor = sd->sensor;
316662306a36Sopenharmony_ci
316762306a36Sopenharmony_ci	switch (sensor) {
316862306a36Sopenharmony_ci	case -1:
316962306a36Sopenharmony_ci		pr_err("Unknown sensor...\n");
317062306a36Sopenharmony_ci		return -EINVAL;
317162306a36Sopenharmony_ci	case SENSOR_HV7131R:
317262306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PROBE, "Find Sensor HV7131R\n");
317362306a36Sopenharmony_ci		break;
317462306a36Sopenharmony_ci	case SENSOR_MI0360:
317562306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PROBE, "Find Sensor MI0360\n");
317662306a36Sopenharmony_ci		sd->bridge = BRIDGE_VC0323;
317762306a36Sopenharmony_ci		break;
317862306a36Sopenharmony_ci	case SENSOR_MI1310_SOC:
317962306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PROBE, "Find Sensor MI1310_SOC\n");
318062306a36Sopenharmony_ci		break;
318162306a36Sopenharmony_ci	case SENSOR_MI1320:
318262306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PROBE, "Find Sensor MI1320\n");
318362306a36Sopenharmony_ci		break;
318462306a36Sopenharmony_ci	case SENSOR_MI1320_SOC:
318562306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PROBE, "Find Sensor MI1320_SOC\n");
318662306a36Sopenharmony_ci		break;
318762306a36Sopenharmony_ci	case SENSOR_OV7660:
318862306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PROBE, "Find Sensor OV7660\n");
318962306a36Sopenharmony_ci		break;
319062306a36Sopenharmony_ci	case SENSOR_OV7670:
319162306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PROBE, "Find Sensor OV7670\n");
319262306a36Sopenharmony_ci		break;
319362306a36Sopenharmony_ci	case SENSOR_PO1200:
319462306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PROBE, "Find Sensor PO1200\n");
319562306a36Sopenharmony_ci		break;
319662306a36Sopenharmony_ci	case SENSOR_PO3130NC:
319762306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PROBE, "Find Sensor PO3130NC\n");
319862306a36Sopenharmony_ci		break;
319962306a36Sopenharmony_ci	case SENSOR_POxxxx:
320062306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PROBE, "Sensor POxxxx\n");
320162306a36Sopenharmony_ci		break;
320262306a36Sopenharmony_ci	}
320362306a36Sopenharmony_ci	sd->sensor = sensor;
320462306a36Sopenharmony_ci
320562306a36Sopenharmony_ci	cam = &gspca_dev->cam;
320662306a36Sopenharmony_ci	if (sd->bridge == BRIDGE_VC0321) {
320762306a36Sopenharmony_ci		cam->cam_mode = vc0321_mode;
320862306a36Sopenharmony_ci		cam->nmodes = ARRAY_SIZE(vc0321_mode);
320962306a36Sopenharmony_ci	} else {
321062306a36Sopenharmony_ci		switch (sensor) {
321162306a36Sopenharmony_ci		case SENSOR_PO1200:
321262306a36Sopenharmony_ci			cam->cam_mode = svga_mode;
321362306a36Sopenharmony_ci			cam->nmodes = ARRAY_SIZE(svga_mode);
321462306a36Sopenharmony_ci			break;
321562306a36Sopenharmony_ci		case SENSOR_MI1310_SOC:
321662306a36Sopenharmony_ci			cam->cam_mode = vc0323_mode;
321762306a36Sopenharmony_ci			cam->nmodes = ARRAY_SIZE(vc0323_mode);
321862306a36Sopenharmony_ci			break;
321962306a36Sopenharmony_ci		case SENSOR_MI1320_SOC:
322062306a36Sopenharmony_ci			cam->cam_mode = bi_mode;
322162306a36Sopenharmony_ci			cam->nmodes = ARRAY_SIZE(bi_mode);
322262306a36Sopenharmony_ci			break;
322362306a36Sopenharmony_ci		case SENSOR_OV7670:
322462306a36Sopenharmony_ci			cam->cam_mode = bi_mode;
322562306a36Sopenharmony_ci			cam->nmodes = ARRAY_SIZE(bi_mode) - 1;
322662306a36Sopenharmony_ci			break;
322762306a36Sopenharmony_ci		default:
322862306a36Sopenharmony_ci			cam->cam_mode = vc0323_mode;
322962306a36Sopenharmony_ci			cam->nmodes = ARRAY_SIZE(vc0323_mode) - 1;
323062306a36Sopenharmony_ci			break;
323162306a36Sopenharmony_ci		}
323262306a36Sopenharmony_ci	}
323362306a36Sopenharmony_ci	cam->npkt = npkt[sd->sensor];
323462306a36Sopenharmony_ci
323562306a36Sopenharmony_ci	if (sd->sensor == SENSOR_OV7670)
323662306a36Sopenharmony_ci		sd->flags |= FL_HFLIP | FL_VFLIP;
323762306a36Sopenharmony_ci
323862306a36Sopenharmony_ci	if (sd->bridge == BRIDGE_VC0321) {
323962306a36Sopenharmony_ci		reg_r(gspca_dev, 0x8a, 0, 3);
324062306a36Sopenharmony_ci		reg_w(gspca_dev, 0x87, 0x00, 0x0f0f);
324162306a36Sopenharmony_ci		reg_r(gspca_dev, 0x8b, 0, 3);
324262306a36Sopenharmony_ci		reg_w(gspca_dev, 0x88, 0x00, 0x0202);
324362306a36Sopenharmony_ci		if (sd->sensor == SENSOR_POxxxx) {
324462306a36Sopenharmony_ci			reg_r(gspca_dev, 0xa1, 0xb300, 1);
324562306a36Sopenharmony_ci			if (gspca_dev->usb_buf[0] != 0) {
324662306a36Sopenharmony_ci				reg_w(gspca_dev, 0xa0, 0x26, 0xb300);
324762306a36Sopenharmony_ci				reg_w(gspca_dev, 0xa0, 0x04, 0xb300);
324862306a36Sopenharmony_ci			}
324962306a36Sopenharmony_ci			reg_w(gspca_dev, 0xa0, 0x00, 0xb300);
325062306a36Sopenharmony_ci		}
325162306a36Sopenharmony_ci	}
325262306a36Sopenharmony_ci	return gspca_dev->usb_err;
325362306a36Sopenharmony_ci}
325462306a36Sopenharmony_ci
325562306a36Sopenharmony_cistatic void setbrightness(struct gspca_dev *gspca_dev, s32 val)
325662306a36Sopenharmony_ci{
325762306a36Sopenharmony_ci	u8 data;
325862306a36Sopenharmony_ci
325962306a36Sopenharmony_ci	data = val;
326062306a36Sopenharmony_ci	if (data >= 0x80)
326162306a36Sopenharmony_ci		data &= 0x7f;
326262306a36Sopenharmony_ci	else
326362306a36Sopenharmony_ci		data = 0xff ^ data;
326462306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x98, &data, 1);
326562306a36Sopenharmony_ci}
326662306a36Sopenharmony_ci
326762306a36Sopenharmony_cistatic void setcontrast(struct gspca_dev *gspca_dev, u8 val)
326862306a36Sopenharmony_ci{
326962306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x99, &val, 1);
327062306a36Sopenharmony_ci}
327162306a36Sopenharmony_ci
327262306a36Sopenharmony_cistatic void setcolors(struct gspca_dev *gspca_dev, u8 val)
327362306a36Sopenharmony_ci{
327462306a36Sopenharmony_ci	u8 data;
327562306a36Sopenharmony_ci
327662306a36Sopenharmony_ci	data = val - (val >> 3) - 1;
327762306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x94, &data, 1);
327862306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x95, &val, 1);
327962306a36Sopenharmony_ci}
328062306a36Sopenharmony_ci
328162306a36Sopenharmony_cistatic void sethvflip(struct gspca_dev *gspca_dev, bool hflip, bool vflip)
328262306a36Sopenharmony_ci{
328362306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
328462306a36Sopenharmony_ci	u8 data[2];
328562306a36Sopenharmony_ci
328662306a36Sopenharmony_ci	if (sd->flags & FL_HFLIP)
328762306a36Sopenharmony_ci		hflip = !hflip;
328862306a36Sopenharmony_ci	if (sd->flags & FL_VFLIP)
328962306a36Sopenharmony_ci		vflip = !vflip;
329062306a36Sopenharmony_ci	switch (sd->sensor) {
329162306a36Sopenharmony_ci	case SENSOR_MI1310_SOC:
329262306a36Sopenharmony_ci	case SENSOR_MI1320:
329362306a36Sopenharmony_ci	case SENSOR_MI1320_SOC:
329462306a36Sopenharmony_ci		data[0] = data[1] = 0;		/* select page 0 */
329562306a36Sopenharmony_ci		i2c_write(gspca_dev, 0xf0, data, 2);
329662306a36Sopenharmony_ci		data[0] = sd->sensor == SENSOR_MI1310_SOC ? 0x03 : 0x01;
329762306a36Sopenharmony_ci		data[1] = 0x02 * hflip
329862306a36Sopenharmony_ci			| 0x01 * vflip;
329962306a36Sopenharmony_ci		i2c_write(gspca_dev, 0x20, data, 2);
330062306a36Sopenharmony_ci		break;
330162306a36Sopenharmony_ci	case SENSOR_OV7660:
330262306a36Sopenharmony_ci	case SENSOR_OV7670:
330362306a36Sopenharmony_ci		data[0] = sd->sensor == SENSOR_OV7660 ? 0x01 : 0x07;
330462306a36Sopenharmony_ci		data[0] |= OV7660_MVFP_MIRROR * hflip
330562306a36Sopenharmony_ci			| OV7660_MVFP_VFLIP * vflip;
330662306a36Sopenharmony_ci		i2c_write(gspca_dev, OV7660_REG_MVFP, data, 1);
330762306a36Sopenharmony_ci		break;
330862306a36Sopenharmony_ci	case SENSOR_PO1200:
330962306a36Sopenharmony_ci		data[0] = 0;
331062306a36Sopenharmony_ci		i2c_write(gspca_dev, 0x03, data, 1);
331162306a36Sopenharmony_ci		data[0] = 0x80 * hflip
331262306a36Sopenharmony_ci			| 0x40 * vflip
331362306a36Sopenharmony_ci			| 0x06;
331462306a36Sopenharmony_ci		i2c_write(gspca_dev, 0x1e, data, 1);
331562306a36Sopenharmony_ci		break;
331662306a36Sopenharmony_ci	}
331762306a36Sopenharmony_ci}
331862306a36Sopenharmony_ci
331962306a36Sopenharmony_cistatic void setlightfreq(struct gspca_dev *gspca_dev, s32 val)
332062306a36Sopenharmony_ci{
332162306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
332262306a36Sopenharmony_ci	static const u8 (*ov7660_freq_tb[3])[4] = {
332362306a36Sopenharmony_ci		ov7660_NoFlicker, ov7660_50HZ, ov7660_60HZ};
332462306a36Sopenharmony_ci
332562306a36Sopenharmony_ci	if (sd->sensor != SENSOR_OV7660)
332662306a36Sopenharmony_ci		return;
332762306a36Sopenharmony_ci	usb_exchange(gspca_dev, ov7660_freq_tb[val]);
332862306a36Sopenharmony_ci}
332962306a36Sopenharmony_ci
333062306a36Sopenharmony_cistatic void setsharpness(struct gspca_dev *gspca_dev, s32 val)
333162306a36Sopenharmony_ci{
333262306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
333362306a36Sopenharmony_ci	u8 data;
333462306a36Sopenharmony_ci
333562306a36Sopenharmony_ci	switch (sd->sensor) {
333662306a36Sopenharmony_ci	case SENSOR_PO1200:
333762306a36Sopenharmony_ci		data = 0;
333862306a36Sopenharmony_ci		i2c_write(gspca_dev, 0x03, &data, 1);
333962306a36Sopenharmony_ci		if (val < 0)
334062306a36Sopenharmony_ci			data = 0x6a;
334162306a36Sopenharmony_ci		else
334262306a36Sopenharmony_ci			data = 0xb5 + val * 3;
334362306a36Sopenharmony_ci		i2c_write(gspca_dev, 0x61, &data, 1);
334462306a36Sopenharmony_ci		break;
334562306a36Sopenharmony_ci	case SENSOR_POxxxx:
334662306a36Sopenharmony_ci		if (val < 0)
334762306a36Sopenharmony_ci			data = 0x7e;	/* def = max */
334862306a36Sopenharmony_ci		else
334962306a36Sopenharmony_ci			data = 0x60 + val * 0x0f;
335062306a36Sopenharmony_ci		i2c_write(gspca_dev, 0x59, &data, 1);
335162306a36Sopenharmony_ci		break;
335262306a36Sopenharmony_ci	}
335362306a36Sopenharmony_ci}
335462306a36Sopenharmony_cistatic void setgain(struct gspca_dev *gspca_dev, u8 val)
335562306a36Sopenharmony_ci{
335662306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x15, &val, 1);
335762306a36Sopenharmony_ci}
335862306a36Sopenharmony_ci
335962306a36Sopenharmony_cistatic void setexposure(struct gspca_dev *gspca_dev, s32 val)
336062306a36Sopenharmony_ci{
336162306a36Sopenharmony_ci	u8 data;
336262306a36Sopenharmony_ci
336362306a36Sopenharmony_ci	data = val >> 8;
336462306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x1a, &data, 1);
336562306a36Sopenharmony_ci	data = val;
336662306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x1b, &data, 1);
336762306a36Sopenharmony_ci}
336862306a36Sopenharmony_ci
336962306a36Sopenharmony_cistatic void setautogain(struct gspca_dev *gspca_dev, s32 val)
337062306a36Sopenharmony_ci{
337162306a36Sopenharmony_ci	static const u8 data[2] = {0x28, 0x3c};
337262306a36Sopenharmony_ci
337362306a36Sopenharmony_ci	i2c_write(gspca_dev, 0xd1, &data[val], 1);
337462306a36Sopenharmony_ci}
337562306a36Sopenharmony_ci
337662306a36Sopenharmony_cistatic void setgamma(struct gspca_dev *gspca_dev)
337762306a36Sopenharmony_ci{
337862306a36Sopenharmony_ci/*fixme:to do */
337962306a36Sopenharmony_ci	usb_exchange(gspca_dev, poxxxx_gamma);
338062306a36Sopenharmony_ci}
338162306a36Sopenharmony_ci
338262306a36Sopenharmony_cistatic void setbacklight(struct gspca_dev *gspca_dev, s32 val)
338362306a36Sopenharmony_ci{
338462306a36Sopenharmony_ci	u16 v;
338562306a36Sopenharmony_ci	u8 data;
338662306a36Sopenharmony_ci
338762306a36Sopenharmony_ci	data = (val << 4) | 0x0f;
338862306a36Sopenharmony_ci	i2c_write(gspca_dev, 0xaa, &data, 1);
338962306a36Sopenharmony_ci	v = 613 + 12 * val;
339062306a36Sopenharmony_ci	data = v >> 8;
339162306a36Sopenharmony_ci	i2c_write(gspca_dev, 0xc4, &data, 1);
339262306a36Sopenharmony_ci	data = v;
339362306a36Sopenharmony_ci	i2c_write(gspca_dev, 0xc5, &data, 1);
339462306a36Sopenharmony_ci	v = 1093 - 12 * val;
339562306a36Sopenharmony_ci	data = v >> 8;
339662306a36Sopenharmony_ci	i2c_write(gspca_dev, 0xc6, &data, 1);
339762306a36Sopenharmony_ci	data = v;
339862306a36Sopenharmony_ci	i2c_write(gspca_dev, 0xc7, &data, 1);
339962306a36Sopenharmony_ci	v = 342 + 9 * val;
340062306a36Sopenharmony_ci	data = v >> 8;
340162306a36Sopenharmony_ci	i2c_write(gspca_dev, 0xc8, &data, 1);
340262306a36Sopenharmony_ci	data = v;
340362306a36Sopenharmony_ci	i2c_write(gspca_dev, 0xc9, &data, 1);
340462306a36Sopenharmony_ci	v = 702 - 9 * val;
340562306a36Sopenharmony_ci	data = v >> 8;
340662306a36Sopenharmony_ci	i2c_write(gspca_dev, 0xca, &data, 1);
340762306a36Sopenharmony_ci	data = v;
340862306a36Sopenharmony_ci	i2c_write(gspca_dev, 0xcb, &data, 1);
340962306a36Sopenharmony_ci}
341062306a36Sopenharmony_ci
341162306a36Sopenharmony_cistatic void setwb(struct gspca_dev *gspca_dev)
341262306a36Sopenharmony_ci{
341362306a36Sopenharmony_ci/*fixme:to do - valid when reg d1 = 0x1c - (reg16 + reg15 = 0xa3)*/
341462306a36Sopenharmony_ci	static const u8 data[2] = {0x00, 0x00};
341562306a36Sopenharmony_ci
341662306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x16, &data[0], 1);
341762306a36Sopenharmony_ci	i2c_write(gspca_dev, 0x18, &data[1], 1);
341862306a36Sopenharmony_ci}
341962306a36Sopenharmony_ci
342062306a36Sopenharmony_cistatic int sd_start(struct gspca_dev *gspca_dev)
342162306a36Sopenharmony_ci{
342262306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
342362306a36Sopenharmony_ci	const u8 (*init)[4];
342462306a36Sopenharmony_ci	const u8 *GammaT = NULL;
342562306a36Sopenharmony_ci	const u8 *MatrixT = NULL;
342662306a36Sopenharmony_ci	int mode;
342762306a36Sopenharmony_ci	static const u8 (*mi1320_soc_init[])[4] = {
342862306a36Sopenharmony_ci		mi1320_soc_InitSXGA,
342962306a36Sopenharmony_ci		mi1320_soc_InitVGA,
343062306a36Sopenharmony_ci		mi1320_soc_InitQVGA,
343162306a36Sopenharmony_ci	};
343262306a36Sopenharmony_ci
343362306a36Sopenharmony_ci/*fixme: back sensor only*/
343462306a36Sopenharmony_ci	if (sd->flags & FL_SAMSUNG) {
343562306a36Sopenharmony_ci		reg_w(gspca_dev, 0x89, 0xf0ff, 0xffff);
343662306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa9, 0x8348, 0x000e);
343762306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa9, 0x0000, 0x001a);
343862306a36Sopenharmony_ci	}
343962306a36Sopenharmony_ci
344062306a36Sopenharmony_ci	/* Assume start use the good resolution from gspca_dev->mode */
344162306a36Sopenharmony_ci	if (sd->bridge == BRIDGE_VC0321) {
344262306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa0, 0xff, 0xbfec);
344362306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa0, 0xff, 0xbfed);
344462306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa0, 0xff, 0xbfee);
344562306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa0, 0xff, 0xbfef);
344662306a36Sopenharmony_ci		sd->image_offset = 46;
344762306a36Sopenharmony_ci	} else {
344862306a36Sopenharmony_ci		if (gspca_dev->cam.cam_mode[gspca_dev->curr_mode].pixelformat
344962306a36Sopenharmony_ci				== V4L2_PIX_FMT_JPEG)
345062306a36Sopenharmony_ci			sd->image_offset = 0;
345162306a36Sopenharmony_ci		else
345262306a36Sopenharmony_ci			sd->image_offset = 32;
345362306a36Sopenharmony_ci	}
345462306a36Sopenharmony_ci
345562306a36Sopenharmony_ci	mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv;
345662306a36Sopenharmony_ci	switch (sd->sensor) {
345762306a36Sopenharmony_ci	case SENSOR_HV7131R:
345862306a36Sopenharmony_ci		GammaT = hv7131r_gamma;
345962306a36Sopenharmony_ci		MatrixT = hv7131r_matrix;
346062306a36Sopenharmony_ci		if (mode)
346162306a36Sopenharmony_ci			init = hv7131r_initQVGA_data;	/* 320x240 */
346262306a36Sopenharmony_ci		else
346362306a36Sopenharmony_ci			init = hv7131r_initVGA_data;	/* 640x480 */
346462306a36Sopenharmony_ci		break;
346562306a36Sopenharmony_ci	case SENSOR_OV7660:
346662306a36Sopenharmony_ci		GammaT = ov7660_gamma;
346762306a36Sopenharmony_ci		MatrixT = ov7660_matrix;
346862306a36Sopenharmony_ci		if (mode)
346962306a36Sopenharmony_ci			init = ov7660_initQVGA_data;	/* 320x240 */
347062306a36Sopenharmony_ci		else
347162306a36Sopenharmony_ci			init = ov7660_initVGA_data;	/* 640x480 */
347262306a36Sopenharmony_ci		break;
347362306a36Sopenharmony_ci	case SENSOR_MI0360:
347462306a36Sopenharmony_ci		GammaT = mi1320_gamma;
347562306a36Sopenharmony_ci		MatrixT = mi0360_matrix;
347662306a36Sopenharmony_ci		if (mode)
347762306a36Sopenharmony_ci			init = mi0360_initQVGA_JPG;	/* 320x240 */
347862306a36Sopenharmony_ci		else
347962306a36Sopenharmony_ci			init = mi0360_initVGA_JPG;	/* 640x480 */
348062306a36Sopenharmony_ci		break;
348162306a36Sopenharmony_ci	case SENSOR_MI1310_SOC:
348262306a36Sopenharmony_ci		GammaT = mi1320_gamma;
348362306a36Sopenharmony_ci		MatrixT = mi1320_matrix;
348462306a36Sopenharmony_ci		switch (mode) {
348562306a36Sopenharmony_ci		case 1:
348662306a36Sopenharmony_ci			init = mi1310_socinitQVGA_JPG;	/* 320x240 */
348762306a36Sopenharmony_ci			break;
348862306a36Sopenharmony_ci		case 0:
348962306a36Sopenharmony_ci			init = mi1310_socinitVGA_JPG;	/* 640x480 */
349062306a36Sopenharmony_ci			break;
349162306a36Sopenharmony_ci		default:
349262306a36Sopenharmony_ci			init = mi1310_soc_InitSXGA_JPG;	/* 1280x1024 */
349362306a36Sopenharmony_ci			break;
349462306a36Sopenharmony_ci		}
349562306a36Sopenharmony_ci		break;
349662306a36Sopenharmony_ci	case SENSOR_MI1320:
349762306a36Sopenharmony_ci		GammaT = mi1320_gamma;
349862306a36Sopenharmony_ci		MatrixT = mi1320_matrix;
349962306a36Sopenharmony_ci		if (mode)
350062306a36Sopenharmony_ci			init = mi1320_initQVGA_data;	/* 320x240 */
350162306a36Sopenharmony_ci		else
350262306a36Sopenharmony_ci			init = mi1320_initVGA_data;	/* 640x480 */
350362306a36Sopenharmony_ci		break;
350462306a36Sopenharmony_ci	case SENSOR_MI1320_SOC:
350562306a36Sopenharmony_ci		GammaT = mi1320_gamma;
350662306a36Sopenharmony_ci		MatrixT = mi1320_matrix;
350762306a36Sopenharmony_ci		init = mi1320_soc_init[mode];
350862306a36Sopenharmony_ci		break;
350962306a36Sopenharmony_ci	case SENSOR_OV7670:
351062306a36Sopenharmony_ci		init = mode == 1 ? ov7670_InitVGA : ov7670_InitQVGA;
351162306a36Sopenharmony_ci		break;
351262306a36Sopenharmony_ci	case SENSOR_PO3130NC:
351362306a36Sopenharmony_ci		GammaT = po3130_gamma;
351462306a36Sopenharmony_ci		MatrixT = po3130_matrix;
351562306a36Sopenharmony_ci		if (mode)
351662306a36Sopenharmony_ci			init = po3130_initQVGA_data;	/* 320x240 */
351762306a36Sopenharmony_ci		else
351862306a36Sopenharmony_ci			init = po3130_initVGA_data;	/* 640x480 */
351962306a36Sopenharmony_ci		usb_exchange(gspca_dev, init);
352062306a36Sopenharmony_ci		init = po3130_rundata;
352162306a36Sopenharmony_ci		break;
352262306a36Sopenharmony_ci	case SENSOR_PO1200:
352362306a36Sopenharmony_ci		GammaT = po1200_gamma;
352462306a36Sopenharmony_ci		MatrixT = po1200_matrix;
352562306a36Sopenharmony_ci		init = po1200_initVGA_data;
352662306a36Sopenharmony_ci		break;
352762306a36Sopenharmony_ci	default:
352862306a36Sopenharmony_ci/*	case SENSOR_POxxxx: */
352962306a36Sopenharmony_ci		usb_exchange(gspca_dev, poxxxx_init_common);
353062306a36Sopenharmony_ci		setgamma(gspca_dev);
353162306a36Sopenharmony_ci		usb_exchange(gspca_dev, poxxxx_init_start_3);
353262306a36Sopenharmony_ci		if (mode)
353362306a36Sopenharmony_ci			init = poxxxx_initQVGA;
353462306a36Sopenharmony_ci		else
353562306a36Sopenharmony_ci			init = poxxxx_initVGA;
353662306a36Sopenharmony_ci		usb_exchange(gspca_dev, init);
353762306a36Sopenharmony_ci		reg_r(gspca_dev, 0x8c, 0x0000, 3);
353862306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa0,
353962306a36Sopenharmony_ci				gspca_dev->usb_buf[2] & 1 ? 0 : 1,
354062306a36Sopenharmony_ci				0xb35c);
354162306a36Sopenharmony_ci		msleep(300);
354262306a36Sopenharmony_ci/*fixme: i2c read 04 and 05*/
354362306a36Sopenharmony_ci		init = poxxxx_init_end_1;
354462306a36Sopenharmony_ci		break;
354562306a36Sopenharmony_ci	}
354662306a36Sopenharmony_ci	usb_exchange(gspca_dev, init);
354762306a36Sopenharmony_ci	if (GammaT && MatrixT) {
354862306a36Sopenharmony_ci		put_tab_to_reg(gspca_dev, GammaT, 17, 0xb84a);
354962306a36Sopenharmony_ci		put_tab_to_reg(gspca_dev, GammaT, 17, 0xb85b);
355062306a36Sopenharmony_ci		put_tab_to_reg(gspca_dev, GammaT, 17, 0xb86c);
355162306a36Sopenharmony_ci		put_tab_to_reg(gspca_dev, MatrixT, 9, 0xb82c);
355262306a36Sopenharmony_ci
355362306a36Sopenharmony_ci		switch (sd->sensor) {
355462306a36Sopenharmony_ci		case SENSOR_PO1200:
355562306a36Sopenharmony_ci		case SENSOR_HV7131R:
355662306a36Sopenharmony_ci			reg_w(gspca_dev, 0x89, 0x0400, 0x1415);
355762306a36Sopenharmony_ci			break;
355862306a36Sopenharmony_ci		case SENSOR_MI1310_SOC:
355962306a36Sopenharmony_ci			reg_w(gspca_dev, 0x89, 0x058c, 0x0000);
356062306a36Sopenharmony_ci			break;
356162306a36Sopenharmony_ci		}
356262306a36Sopenharmony_ci		msleep(100);
356362306a36Sopenharmony_ci	}
356462306a36Sopenharmony_ci	switch (sd->sensor) {
356562306a36Sopenharmony_ci	case SENSOR_OV7670:
356662306a36Sopenharmony_ci		reg_w(gspca_dev, 0x87, 0xffff, 0xffff);
356762306a36Sopenharmony_ci		reg_w(gspca_dev, 0x88, 0xff00, 0xf0f1);
356862306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa0, 0x0000, 0xbfff);
356962306a36Sopenharmony_ci		break;
357062306a36Sopenharmony_ci	case SENSOR_POxxxx:
357162306a36Sopenharmony_ci		usb_exchange(gspca_dev, poxxxx_init_end_2);
357262306a36Sopenharmony_ci		setwb(gspca_dev);
357362306a36Sopenharmony_ci		msleep(80);		/* led on */
357462306a36Sopenharmony_ci		reg_w(gspca_dev, 0x89, 0xffff, 0xfdff);
357562306a36Sopenharmony_ci		break;
357662306a36Sopenharmony_ci	}
357762306a36Sopenharmony_ci	return gspca_dev->usb_err;
357862306a36Sopenharmony_ci}
357962306a36Sopenharmony_ci
358062306a36Sopenharmony_cistatic void sd_stopN(struct gspca_dev *gspca_dev)
358162306a36Sopenharmony_ci{
358262306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
358362306a36Sopenharmony_ci
358462306a36Sopenharmony_ci	switch (sd->sensor) {
358562306a36Sopenharmony_ci	case SENSOR_MI1310_SOC:
358662306a36Sopenharmony_ci		reg_w(gspca_dev, 0x89, 0x058c, 0x00ff);
358762306a36Sopenharmony_ci		break;
358862306a36Sopenharmony_ci	case SENSOR_POxxxx:
358962306a36Sopenharmony_ci		return;
359062306a36Sopenharmony_ci	default:
359162306a36Sopenharmony_ci		if (!(sd->flags & FL_SAMSUNG))
359262306a36Sopenharmony_ci			reg_w(gspca_dev, 0x89, 0xffff, 0xffff);
359362306a36Sopenharmony_ci		break;
359462306a36Sopenharmony_ci	}
359562306a36Sopenharmony_ci	reg_w(gspca_dev, 0xa0, 0x01, 0xb301);
359662306a36Sopenharmony_ci	reg_w(gspca_dev, 0xa0, 0x09, 0xb003);
359762306a36Sopenharmony_ci}
359862306a36Sopenharmony_ci
359962306a36Sopenharmony_ci/* called on streamoff with alt 0 and on disconnect */
360062306a36Sopenharmony_cistatic void sd_stop0(struct gspca_dev *gspca_dev)
360162306a36Sopenharmony_ci{
360262306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
360362306a36Sopenharmony_ci
360462306a36Sopenharmony_ci	if (!gspca_dev->present)
360562306a36Sopenharmony_ci		return;
360662306a36Sopenharmony_ci/*fixme: is this useful?*/
360762306a36Sopenharmony_ci	if (sd->sensor == SENSOR_MI1310_SOC)
360862306a36Sopenharmony_ci		reg_w(gspca_dev, 0x89, 0x058c, 0x00ff);
360962306a36Sopenharmony_ci	else if (!(sd->flags & FL_SAMSUNG))
361062306a36Sopenharmony_ci		reg_w(gspca_dev, 0x89, 0xffff, 0xffff);
361162306a36Sopenharmony_ci
361262306a36Sopenharmony_ci	if (sd->sensor == SENSOR_POxxxx) {
361362306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa0, 0x26, 0xb300);
361462306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa0, 0x04, 0xb300);
361562306a36Sopenharmony_ci		reg_w(gspca_dev, 0xa0, 0x00, 0xb300);
361662306a36Sopenharmony_ci	}
361762306a36Sopenharmony_ci}
361862306a36Sopenharmony_ci
361962306a36Sopenharmony_cistatic void sd_pkt_scan(struct gspca_dev *gspca_dev,
362062306a36Sopenharmony_ci			u8 *data,			/* isoc packet */
362162306a36Sopenharmony_ci			int len)			/* iso pkt length */
362262306a36Sopenharmony_ci{
362362306a36Sopenharmony_ci	struct sd *sd = (struct sd *) gspca_dev;
362462306a36Sopenharmony_ci
362562306a36Sopenharmony_ci	if (data[0] == 0xff && data[1] == 0xd8) {
362662306a36Sopenharmony_ci		gspca_dbg(gspca_dev, D_PACK,
362762306a36Sopenharmony_ci			  "vc032x header packet found len %d\n", len);
362862306a36Sopenharmony_ci		gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);
362962306a36Sopenharmony_ci		data += sd->image_offset;
363062306a36Sopenharmony_ci		len -= sd->image_offset;
363162306a36Sopenharmony_ci		gspca_frame_add(gspca_dev, FIRST_PACKET, data, len);
363262306a36Sopenharmony_ci		return;
363362306a36Sopenharmony_ci	}
363462306a36Sopenharmony_ci
363562306a36Sopenharmony_ci	/* The vc0321 sends some additional data after sending the complete
363662306a36Sopenharmony_ci	 * frame, we ignore this. */
363762306a36Sopenharmony_ci	if (sd->bridge == BRIDGE_VC0321) {
363862306a36Sopenharmony_ci		int size, l;
363962306a36Sopenharmony_ci
364062306a36Sopenharmony_ci		l = gspca_dev->image_len;
364162306a36Sopenharmony_ci		size = gspca_dev->pixfmt.sizeimage;
364262306a36Sopenharmony_ci		if (len > size - l)
364362306a36Sopenharmony_ci			len = size - l;
364462306a36Sopenharmony_ci	}
364562306a36Sopenharmony_ci	gspca_frame_add(gspca_dev, INTER_PACKET, data, len);
364662306a36Sopenharmony_ci}
364762306a36Sopenharmony_ci
364862306a36Sopenharmony_cistatic int sd_s_ctrl(struct v4l2_ctrl *ctrl)
364962306a36Sopenharmony_ci{
365062306a36Sopenharmony_ci	struct gspca_dev *gspca_dev =
365162306a36Sopenharmony_ci		container_of(ctrl->handler, struct gspca_dev, ctrl_handler);
365262306a36Sopenharmony_ci	struct sd *sd = (struct sd *)gspca_dev;
365362306a36Sopenharmony_ci
365462306a36Sopenharmony_ci	gspca_dev->usb_err = 0;
365562306a36Sopenharmony_ci
365662306a36Sopenharmony_ci	if (!gspca_dev->streaming && ctrl->id != V4L2_CID_POWER_LINE_FREQUENCY)
365762306a36Sopenharmony_ci		return 0;
365862306a36Sopenharmony_ci
365962306a36Sopenharmony_ci	switch (ctrl->id) {
366062306a36Sopenharmony_ci	case V4L2_CID_BRIGHTNESS:
366162306a36Sopenharmony_ci		setbrightness(gspca_dev, ctrl->val);
366262306a36Sopenharmony_ci		break;
366362306a36Sopenharmony_ci	case V4L2_CID_CONTRAST:
366462306a36Sopenharmony_ci		setcontrast(gspca_dev, ctrl->val);
366562306a36Sopenharmony_ci		break;
366662306a36Sopenharmony_ci	case V4L2_CID_SATURATION:
366762306a36Sopenharmony_ci		setcolors(gspca_dev, ctrl->val);
366862306a36Sopenharmony_ci		break;
366962306a36Sopenharmony_ci	case V4L2_CID_HFLIP:
367062306a36Sopenharmony_ci		sethvflip(gspca_dev, sd->hflip->val, sd->vflip->val);
367162306a36Sopenharmony_ci		break;
367262306a36Sopenharmony_ci	case V4L2_CID_SHARPNESS:
367362306a36Sopenharmony_ci		setsharpness(gspca_dev, ctrl->val);
367462306a36Sopenharmony_ci		break;
367562306a36Sopenharmony_ci	case V4L2_CID_AUTOGAIN:
367662306a36Sopenharmony_ci		setautogain(gspca_dev, ctrl->val);
367762306a36Sopenharmony_ci		break;
367862306a36Sopenharmony_ci	case V4L2_CID_GAIN:
367962306a36Sopenharmony_ci		setgain(gspca_dev, ctrl->val);
368062306a36Sopenharmony_ci		break;
368162306a36Sopenharmony_ci	case V4L2_CID_EXPOSURE:
368262306a36Sopenharmony_ci		setexposure(gspca_dev, ctrl->val);
368362306a36Sopenharmony_ci		break;
368462306a36Sopenharmony_ci	case V4L2_CID_BACKLIGHT_COMPENSATION:
368562306a36Sopenharmony_ci		setbacklight(gspca_dev, ctrl->val);
368662306a36Sopenharmony_ci		break;
368762306a36Sopenharmony_ci	case V4L2_CID_POWER_LINE_FREQUENCY:
368862306a36Sopenharmony_ci		setlightfreq(gspca_dev, ctrl->val);
368962306a36Sopenharmony_ci		break;
369062306a36Sopenharmony_ci	}
369162306a36Sopenharmony_ci	return gspca_dev->usb_err;
369262306a36Sopenharmony_ci}
369362306a36Sopenharmony_ci
369462306a36Sopenharmony_cistatic const struct v4l2_ctrl_ops sd_ctrl_ops = {
369562306a36Sopenharmony_ci	.s_ctrl = sd_s_ctrl,
369662306a36Sopenharmony_ci};
369762306a36Sopenharmony_ci
369862306a36Sopenharmony_cistatic int sd_init_controls(struct gspca_dev *gspca_dev)
369962306a36Sopenharmony_ci{
370062306a36Sopenharmony_ci	struct sd *sd = (struct sd *)gspca_dev;
370162306a36Sopenharmony_ci	struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;
370262306a36Sopenharmony_ci	bool has_brightness = false;
370362306a36Sopenharmony_ci	bool has_contrast = false;
370462306a36Sopenharmony_ci	bool has_sat = false;
370562306a36Sopenharmony_ci	bool has_hvflip = false;
370662306a36Sopenharmony_ci	bool has_freq = false;
370762306a36Sopenharmony_ci	bool has_backlight = false;
370862306a36Sopenharmony_ci	bool has_exposure = false;
370962306a36Sopenharmony_ci	bool has_autogain = false;
371062306a36Sopenharmony_ci	bool has_gain = false;
371162306a36Sopenharmony_ci	bool has_sharpness = false;
371262306a36Sopenharmony_ci
371362306a36Sopenharmony_ci	switch (sd->sensor) {
371462306a36Sopenharmony_ci	case SENSOR_HV7131R:
371562306a36Sopenharmony_ci	case SENSOR_MI0360:
371662306a36Sopenharmony_ci	case SENSOR_PO3130NC:
371762306a36Sopenharmony_ci		break;
371862306a36Sopenharmony_ci	case SENSOR_MI1310_SOC:
371962306a36Sopenharmony_ci	case SENSOR_MI1320:
372062306a36Sopenharmony_ci	case SENSOR_MI1320_SOC:
372162306a36Sopenharmony_ci	case SENSOR_OV7660:
372262306a36Sopenharmony_ci		has_hvflip = true;
372362306a36Sopenharmony_ci		break;
372462306a36Sopenharmony_ci	case SENSOR_OV7670:
372562306a36Sopenharmony_ci		has_hvflip = has_freq = true;
372662306a36Sopenharmony_ci		break;
372762306a36Sopenharmony_ci	case SENSOR_PO1200:
372862306a36Sopenharmony_ci		has_hvflip = has_sharpness = true;
372962306a36Sopenharmony_ci		break;
373062306a36Sopenharmony_ci	case SENSOR_POxxxx:
373162306a36Sopenharmony_ci		has_brightness = has_contrast = has_sat = has_backlight =
373262306a36Sopenharmony_ci			has_exposure = has_autogain = has_gain =
373362306a36Sopenharmony_ci			has_sharpness = true;
373462306a36Sopenharmony_ci		break;
373562306a36Sopenharmony_ci	}
373662306a36Sopenharmony_ci
373762306a36Sopenharmony_ci	gspca_dev->vdev.ctrl_handler = hdl;
373862306a36Sopenharmony_ci	v4l2_ctrl_handler_init(hdl, 8);
373962306a36Sopenharmony_ci	if (has_brightness)
374062306a36Sopenharmony_ci		v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
374162306a36Sopenharmony_ci			V4L2_CID_BRIGHTNESS, 0, 255, 1, 128);
374262306a36Sopenharmony_ci	if (has_contrast)
374362306a36Sopenharmony_ci		v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
374462306a36Sopenharmony_ci			V4L2_CID_CONTRAST, 0, 255, 1, 127);
374562306a36Sopenharmony_ci	if (has_sat)
374662306a36Sopenharmony_ci		v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
374762306a36Sopenharmony_ci			V4L2_CID_SATURATION, 1, 127, 1, 63);
374862306a36Sopenharmony_ci	if (has_hvflip) {
374962306a36Sopenharmony_ci		sd->hflip = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
375062306a36Sopenharmony_ci			V4L2_CID_HFLIP, 0, 1, 1, 0);
375162306a36Sopenharmony_ci		sd->vflip = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
375262306a36Sopenharmony_ci			V4L2_CID_VFLIP, 0, 1, 1, 0);
375362306a36Sopenharmony_ci	}
375462306a36Sopenharmony_ci	if (has_sharpness)
375562306a36Sopenharmony_ci		v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
375662306a36Sopenharmony_ci			V4L2_CID_SHARPNESS, -1, 2, 1, -1);
375762306a36Sopenharmony_ci	if (has_freq)
375862306a36Sopenharmony_ci		v4l2_ctrl_new_std_menu(hdl, &sd_ctrl_ops,
375962306a36Sopenharmony_ci			V4L2_CID_POWER_LINE_FREQUENCY,
376062306a36Sopenharmony_ci			V4L2_CID_POWER_LINE_FREQUENCY_60HZ, 0,
376162306a36Sopenharmony_ci			V4L2_CID_POWER_LINE_FREQUENCY_50HZ);
376262306a36Sopenharmony_ci	if (has_autogain)
376362306a36Sopenharmony_ci		v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
376462306a36Sopenharmony_ci			V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
376562306a36Sopenharmony_ci	if (has_gain)
376662306a36Sopenharmony_ci		v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
376762306a36Sopenharmony_ci			V4L2_CID_GAIN, 0, 78, 1, 0);
376862306a36Sopenharmony_ci	if (has_exposure)
376962306a36Sopenharmony_ci		v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
377062306a36Sopenharmony_ci			V4L2_CID_EXPOSURE, 0, 4095, 1, 450);
377162306a36Sopenharmony_ci	if (has_backlight)
377262306a36Sopenharmony_ci		v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,
377362306a36Sopenharmony_ci			V4L2_CID_BACKLIGHT_COMPENSATION, 0, 15, 1, 15);
377462306a36Sopenharmony_ci
377562306a36Sopenharmony_ci	if (hdl->error) {
377662306a36Sopenharmony_ci		pr_err("Could not initialize controls\n");
377762306a36Sopenharmony_ci		return hdl->error;
377862306a36Sopenharmony_ci	}
377962306a36Sopenharmony_ci	if (sd->hflip)
378062306a36Sopenharmony_ci		v4l2_ctrl_cluster(2, &sd->hflip);
378162306a36Sopenharmony_ci	return 0;
378262306a36Sopenharmony_ci}
378362306a36Sopenharmony_ci
378462306a36Sopenharmony_ci/* sub-driver description */
378562306a36Sopenharmony_cistatic const struct sd_desc sd_desc = {
378662306a36Sopenharmony_ci	.name = MODULE_NAME,
378762306a36Sopenharmony_ci	.init_controls = sd_init_controls,
378862306a36Sopenharmony_ci	.config = sd_config,
378962306a36Sopenharmony_ci	.init = sd_init,
379062306a36Sopenharmony_ci	.start = sd_start,
379162306a36Sopenharmony_ci	.stopN = sd_stopN,
379262306a36Sopenharmony_ci	.stop0 = sd_stop0,
379362306a36Sopenharmony_ci	.pkt_scan = sd_pkt_scan,
379462306a36Sopenharmony_ci};
379562306a36Sopenharmony_ci
379662306a36Sopenharmony_ci/* -- module initialisation -- */
379762306a36Sopenharmony_ci#define BF(bridge, flags) \
379862306a36Sopenharmony_ci	.driver_info = (BRIDGE_ ## bridge << 8) \
379962306a36Sopenharmony_ci		| (flags)
380062306a36Sopenharmony_cistatic const struct usb_device_id device_table[] = {
380162306a36Sopenharmony_ci	{USB_DEVICE(0x041e, 0x405b), BF(VC0323, FL_VFLIP)},
380262306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x0892), BF(VC0321, 0)},
380362306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x0896), BF(VC0321, 0)},
380462306a36Sopenharmony_ci	{USB_DEVICE(0x046d, 0x0897), BF(VC0321, 0)},
380562306a36Sopenharmony_ci	{USB_DEVICE(0x0ac8, 0x0321), BF(VC0321, 0)},
380662306a36Sopenharmony_ci	{USB_DEVICE(0x0ac8, 0x0323), BF(VC0323, 0)},
380762306a36Sopenharmony_ci	{USB_DEVICE(0x0ac8, 0x0328), BF(VC0321, 0)},
380862306a36Sopenharmony_ci	{USB_DEVICE(0x0ac8, 0xc001), BF(VC0321, 0)},
380962306a36Sopenharmony_ci	{USB_DEVICE(0x0ac8, 0xc002), BF(VC0321, 0)},
381062306a36Sopenharmony_ci	{USB_DEVICE(0x0ac8, 0xc301), BF(VC0323, FL_SAMSUNG)},
381162306a36Sopenharmony_ci	{USB_DEVICE(0x15b8, 0x6001), BF(VC0323, 0)},
381262306a36Sopenharmony_ci	{USB_DEVICE(0x15b8, 0x6002), BF(VC0323, 0)},
381362306a36Sopenharmony_ci	{USB_DEVICE(0x17ef, 0x4802), BF(VC0323, 0)},
381462306a36Sopenharmony_ci	{}
381562306a36Sopenharmony_ci};
381662306a36Sopenharmony_ciMODULE_DEVICE_TABLE(usb, device_table);
381762306a36Sopenharmony_ci
381862306a36Sopenharmony_ci/* -- device connect -- */
381962306a36Sopenharmony_cistatic int sd_probe(struct usb_interface *intf,
382062306a36Sopenharmony_ci			const struct usb_device_id *id)
382162306a36Sopenharmony_ci{
382262306a36Sopenharmony_ci	return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd),
382362306a36Sopenharmony_ci				THIS_MODULE);
382462306a36Sopenharmony_ci}
382562306a36Sopenharmony_ci
382662306a36Sopenharmony_cistatic struct usb_driver sd_driver = {
382762306a36Sopenharmony_ci	.name = MODULE_NAME,
382862306a36Sopenharmony_ci	.id_table = device_table,
382962306a36Sopenharmony_ci	.probe = sd_probe,
383062306a36Sopenharmony_ci	.disconnect = gspca_disconnect,
383162306a36Sopenharmony_ci#ifdef CONFIG_PM
383262306a36Sopenharmony_ci	.suspend = gspca_suspend,
383362306a36Sopenharmony_ci	.resume = gspca_resume,
383462306a36Sopenharmony_ci	.reset_resume = gspca_resume,
383562306a36Sopenharmony_ci#endif
383662306a36Sopenharmony_ci};
383762306a36Sopenharmony_ci
383862306a36Sopenharmony_cimodule_usb_driver(sd_driver);
3839