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