18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Z-star vc0321 library 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2009-2010 Jean-François Moine <http://moinejf.free.fr> 68c2ecf20Sopenharmony_ci * Copyright (C) 2006 Koninski Artur takeshi87@o2.pl 78c2ecf20Sopenharmony_ci * Copyright (C) 2006 Michel Xhaard 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#define MODULE_NAME "vc032x" 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#include "gspca.h" 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ciMODULE_AUTHOR("Jean-François Moine <http://moinejf.free.fr>"); 178c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("GSPCA/VC032X USB Camera Driver"); 188c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL"); 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci/* specific webcam descriptor */ 218c2ecf20Sopenharmony_cistruct sd { 228c2ecf20Sopenharmony_ci struct gspca_dev gspca_dev; /* !! must be the first item */ 238c2ecf20Sopenharmony_ci struct { /* hvflip cluster */ 248c2ecf20Sopenharmony_ci struct v4l2_ctrl *hflip; 258c2ecf20Sopenharmony_ci struct v4l2_ctrl *vflip; 268c2ecf20Sopenharmony_ci }; 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci u8 image_offset; 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_ci u8 bridge; 318c2ecf20Sopenharmony_ci u8 sensor; 328c2ecf20Sopenharmony_ci u8 flags; 338c2ecf20Sopenharmony_ci#define FL_SAMSUNG 0x01 /* SamsungQ1 (2 sensors) */ 348c2ecf20Sopenharmony_ci#define FL_HFLIP 0x02 /* mirrored by default */ 358c2ecf20Sopenharmony_ci#define FL_VFLIP 0x04 /* vertical flipped by default */ 368c2ecf20Sopenharmony_ci}; 378c2ecf20Sopenharmony_cienum bridges { 388c2ecf20Sopenharmony_ci BRIDGE_VC0321, 398c2ecf20Sopenharmony_ci BRIDGE_VC0323, 408c2ecf20Sopenharmony_ci}; 418c2ecf20Sopenharmony_cienum sensors { 428c2ecf20Sopenharmony_ci SENSOR_HV7131R, 438c2ecf20Sopenharmony_ci SENSOR_MI0360, 448c2ecf20Sopenharmony_ci SENSOR_MI1310_SOC, 458c2ecf20Sopenharmony_ci SENSOR_MI1320, 468c2ecf20Sopenharmony_ci SENSOR_MI1320_SOC, 478c2ecf20Sopenharmony_ci SENSOR_OV7660, 488c2ecf20Sopenharmony_ci SENSOR_OV7670, 498c2ecf20Sopenharmony_ci SENSOR_PO1200, 508c2ecf20Sopenharmony_ci SENSOR_PO3130NC, 518c2ecf20Sopenharmony_ci SENSOR_POxxxx, 528c2ecf20Sopenharmony_ci NSENSORS 538c2ecf20Sopenharmony_ci}; 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_cistatic const struct v4l2_pix_format vc0321_mode[] = { 578c2ecf20Sopenharmony_ci {320, 240, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE, 588c2ecf20Sopenharmony_ci .bytesperline = 320 * 2, 598c2ecf20Sopenharmony_ci .sizeimage = 320 * 240 * 2, 608c2ecf20Sopenharmony_ci .colorspace = V4L2_COLORSPACE_SRGB, 618c2ecf20Sopenharmony_ci .priv = 1}, 628c2ecf20Sopenharmony_ci {640, 480, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE, 638c2ecf20Sopenharmony_ci .bytesperline = 640 * 2, 648c2ecf20Sopenharmony_ci .sizeimage = 640 * 480 * 2, 658c2ecf20Sopenharmony_ci .colorspace = V4L2_COLORSPACE_SRGB, 668c2ecf20Sopenharmony_ci .priv = 0}, 678c2ecf20Sopenharmony_ci}; 688c2ecf20Sopenharmony_cistatic const struct v4l2_pix_format vc0323_mode[] = { 698c2ecf20Sopenharmony_ci {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 708c2ecf20Sopenharmony_ci .bytesperline = 320, 718c2ecf20Sopenharmony_ci .sizeimage = 320 * 240 * 3 / 8 + 590, 728c2ecf20Sopenharmony_ci .colorspace = V4L2_COLORSPACE_JPEG, 738c2ecf20Sopenharmony_ci .priv = 1}, 748c2ecf20Sopenharmony_ci {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 758c2ecf20Sopenharmony_ci .bytesperline = 640, 768c2ecf20Sopenharmony_ci .sizeimage = 640 * 480 * 3 / 8 + 590, 778c2ecf20Sopenharmony_ci .colorspace = V4L2_COLORSPACE_JPEG, 788c2ecf20Sopenharmony_ci .priv = 0}, 798c2ecf20Sopenharmony_ci {1280, 960, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, /* mi1310_soc only */ 808c2ecf20Sopenharmony_ci .bytesperline = 1280, 818c2ecf20Sopenharmony_ci .sizeimage = 1280 * 960 * 3 / 8 + 590, 828c2ecf20Sopenharmony_ci .colorspace = V4L2_COLORSPACE_JPEG, 838c2ecf20Sopenharmony_ci .priv = 2}, 848c2ecf20Sopenharmony_ci}; 858c2ecf20Sopenharmony_cistatic const struct v4l2_pix_format bi_mode[] = { 868c2ecf20Sopenharmony_ci {320, 240, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, 878c2ecf20Sopenharmony_ci .bytesperline = 320 * 2, 888c2ecf20Sopenharmony_ci .sizeimage = 320 * 240 * 2, 898c2ecf20Sopenharmony_ci .colorspace = V4L2_COLORSPACE_SRGB, 908c2ecf20Sopenharmony_ci .priv = 2}, 918c2ecf20Sopenharmony_ci {640, 480, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, 928c2ecf20Sopenharmony_ci .bytesperline = 640 * 2, 938c2ecf20Sopenharmony_ci .sizeimage = 640 * 480 * 2, 948c2ecf20Sopenharmony_ci .colorspace = V4L2_COLORSPACE_SRGB, 958c2ecf20Sopenharmony_ci .priv = 1}, 968c2ecf20Sopenharmony_ci {1280, 1024, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE, 978c2ecf20Sopenharmony_ci .bytesperline = 1280 * 2, 988c2ecf20Sopenharmony_ci .sizeimage = 1280 * 1024 * 2, 998c2ecf20Sopenharmony_ci .colorspace = V4L2_COLORSPACE_SRGB, 1008c2ecf20Sopenharmony_ci .priv = 0}, 1018c2ecf20Sopenharmony_ci}; 1028c2ecf20Sopenharmony_cistatic const struct v4l2_pix_format svga_mode[] = { 1038c2ecf20Sopenharmony_ci {800, 600, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, 1048c2ecf20Sopenharmony_ci .bytesperline = 800, 1058c2ecf20Sopenharmony_ci .sizeimage = 800 * 600 * 1 / 4 + 590, 1068c2ecf20Sopenharmony_ci .colorspace = V4L2_COLORSPACE_JPEG, 1078c2ecf20Sopenharmony_ci .priv = 0}, 1088c2ecf20Sopenharmony_ci}; 1098c2ecf20Sopenharmony_ci 1108c2ecf20Sopenharmony_ci/* OV7660/7670 registers */ 1118c2ecf20Sopenharmony_ci#define OV7660_REG_MVFP 0x1e 1128c2ecf20Sopenharmony_ci#define OV7660_MVFP_MIRROR 0x20 1138c2ecf20Sopenharmony_ci#define OV7660_MVFP_VFLIP 0x10 1148c2ecf20Sopenharmony_ci 1158c2ecf20Sopenharmony_cistatic const u8 mi0360_matrix[9] = { 1168c2ecf20Sopenharmony_ci 0x50, 0xf8, 0xf8, 0xf5, 0x50, 0xfb, 0xff, 0xf1, 0x50 1178c2ecf20Sopenharmony_ci}; 1188c2ecf20Sopenharmony_ci 1198c2ecf20Sopenharmony_cistatic const u8 mi0360_initVGA_JPG[][4] = { 1208c2ecf20Sopenharmony_ci {0xb0, 0x03, 0x19, 0xcc}, 1218c2ecf20Sopenharmony_ci {0xb0, 0x04, 0x02, 0xcc}, 1228c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x24, 0xcc}, 1238c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x25, 0xcc}, 1248c2ecf20Sopenharmony_ci {0xb3, 0x08, 0x01, 0xcc}, 1258c2ecf20Sopenharmony_ci {0xb3, 0x09, 0x0c, 0xcc}, 1268c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x01, 0xcc}, 1278c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x03, 0xcc}, 1288c2ecf20Sopenharmony_ci {0xb3, 0x03, 0x0a, 0xcc}, 1298c2ecf20Sopenharmony_ci {0xb3, 0x20, 0x00, 0xcc}, 1308c2ecf20Sopenharmony_ci {0xb3, 0x21, 0x00, 0xcc}, 1318c2ecf20Sopenharmony_ci {0xb3, 0x22, 0x01, 0xcc}, 1328c2ecf20Sopenharmony_ci {0xb3, 0x23, 0xe0, 0xcc}, 1338c2ecf20Sopenharmony_ci {0xb3, 0x04, 0x05, 0xcc}, 1348c2ecf20Sopenharmony_ci {0xb3, 0x14, 0x00, 0xcc}, 1358c2ecf20Sopenharmony_ci {0xb3, 0x15, 0x00, 0xcc}, 1368c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x02, 0xcc}, 1378c2ecf20Sopenharmony_ci {0xb3, 0x17, 0x7f, 0xcc}, 1388c2ecf20Sopenharmony_ci {0xb3, 0x35, 0xdd, 0xcc}, /* i2c add: 5d */ 1398c2ecf20Sopenharmony_ci {0xb3, 0x34, 0x02, 0xcc}, 1408c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x25, 0xcc}, 1418c2ecf20Sopenharmony_ci {0xbc, 0x00, 0x71, 0xcc}, 1428c2ecf20Sopenharmony_ci {0xb8, 0x00, 0x13, 0xcc}, 1438c2ecf20Sopenharmony_ci {0xb8, 0x27, 0x20, 0xcc}, 1448c2ecf20Sopenharmony_ci {0xb8, 0x2c, 0x50, 0xcc}, 1458c2ecf20Sopenharmony_ci {0xb8, 0x2d, 0xf8, 0xcc}, 1468c2ecf20Sopenharmony_ci {0xb8, 0x2e, 0xf8, 0xcc}, 1478c2ecf20Sopenharmony_ci {0xb8, 0x2f, 0xf8, 0xcc}, 1488c2ecf20Sopenharmony_ci {0xb8, 0x30, 0x50, 0xcc}, 1498c2ecf20Sopenharmony_ci {0xb8, 0x31, 0xf8, 0xcc}, 1508c2ecf20Sopenharmony_ci {0xb8, 0x32, 0xf8, 0xcc}, 1518c2ecf20Sopenharmony_ci {0xb8, 0x33, 0xf8, 0xcc}, 1528c2ecf20Sopenharmony_ci {0xb8, 0x34, 0x50, 0xcc}, 1538c2ecf20Sopenharmony_ci {0xb8, 0x35, 0x00, 0xcc}, 1548c2ecf20Sopenharmony_ci {0xb8, 0x36, 0x00, 0xcc}, 1558c2ecf20Sopenharmony_ci {0xb8, 0x37, 0x00, 0xcc}, 1568c2ecf20Sopenharmony_ci {0xb8, 0x01, 0x79, 0xcc}, 1578c2ecf20Sopenharmony_ci {0xb8, 0x08, 0xe0, 0xcc}, 1588c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x41, 0xcc}, 1598c2ecf20Sopenharmony_ci {0xb8, 0x01, 0x79, 0xcc}, 1608c2ecf20Sopenharmony_ci {0xb8, 0x14, 0x18, 0xcc}, 1618c2ecf20Sopenharmony_ci {0xb8, 0xb2, 0x0a, 0xcc}, 1628c2ecf20Sopenharmony_ci {0xb8, 0xb4, 0x0a, 0xcc}, 1638c2ecf20Sopenharmony_ci {0xb8, 0xb5, 0x0a, 0xcc}, 1648c2ecf20Sopenharmony_ci {0xb8, 0xfe, 0x00, 0xcc}, 1658c2ecf20Sopenharmony_ci {0xb8, 0xff, 0x28, 0xcc}, 1668c2ecf20Sopenharmony_ci {0xb9, 0x00, 0x28, 0xcc}, 1678c2ecf20Sopenharmony_ci {0xb9, 0x01, 0x28, 0xcc}, 1688c2ecf20Sopenharmony_ci {0xb9, 0x02, 0x28, 0xcc}, 1698c2ecf20Sopenharmony_ci {0xb9, 0x03, 0x00, 0xcc}, 1708c2ecf20Sopenharmony_ci {0xb9, 0x04, 0x00, 0xcc}, 1718c2ecf20Sopenharmony_ci {0xb9, 0x05, 0x3c, 0xcc}, 1728c2ecf20Sopenharmony_ci {0xb9, 0x06, 0x3c, 0xcc}, 1738c2ecf20Sopenharmony_ci {0xb9, 0x07, 0x3c, 0xcc}, 1748c2ecf20Sopenharmony_ci {0xb9, 0x08, 0x3c, 0xcc}, 1758c2ecf20Sopenharmony_ci {0xb8, 0x8e, 0x00, 0xcc}, 1768c2ecf20Sopenharmony_ci {0xb8, 0x8f, 0xff, 0xcc}, 1778c2ecf20Sopenharmony_ci {0xb8, 0x81, 0x09, 0xcc}, 1788c2ecf20Sopenharmony_ci {0x31, 0x00, 0x00, 0xbb}, 1798c2ecf20Sopenharmony_ci {0x09, 0x01, 0xc7, 0xbb}, 1808c2ecf20Sopenharmony_ci {0x34, 0x01, 0x00, 0xbb}, 1818c2ecf20Sopenharmony_ci {0x2b, 0x00, 0x28, 0xbb}, 1828c2ecf20Sopenharmony_ci {0x2c, 0x00, 0x30, 0xbb}, 1838c2ecf20Sopenharmony_ci {0x2d, 0x00, 0x30, 0xbb}, 1848c2ecf20Sopenharmony_ci {0x2e, 0x00, 0x28, 0xbb}, 1858c2ecf20Sopenharmony_ci {0x62, 0x04, 0x11, 0xbb}, 1868c2ecf20Sopenharmony_ci {0x03, 0x01, 0xe0, 0xbb}, 1878c2ecf20Sopenharmony_ci {0x2c, 0x00, 0x2c, 0xbb}, 1888c2ecf20Sopenharmony_ci {0x20, 0xd0, 0x00, 0xbb}, 1898c2ecf20Sopenharmony_ci {0x01, 0x00, 0x08, 0xbb}, 1908c2ecf20Sopenharmony_ci {0x06, 0x00, 0x10, 0xbb}, 1918c2ecf20Sopenharmony_ci {0x05, 0x00, 0x20, 0xbb}, 1928c2ecf20Sopenharmony_ci {0x20, 0x00, 0x00, 0xbb}, 1938c2ecf20Sopenharmony_ci {0xb6, 0x00, 0x00, 0xcc}, 1948c2ecf20Sopenharmony_ci {0xb6, 0x03, 0x02, 0xcc}, 1958c2ecf20Sopenharmony_ci {0xb6, 0x02, 0x80, 0xcc}, 1968c2ecf20Sopenharmony_ci {0xb6, 0x05, 0x01, 0xcc}, 1978c2ecf20Sopenharmony_ci {0xb6, 0x04, 0xe0, 0xcc}, 1988c2ecf20Sopenharmony_ci {0xb6, 0x12, 0x78, 0xcc}, 1998c2ecf20Sopenharmony_ci {0xb6, 0x18, 0x02, 0xcc}, 2008c2ecf20Sopenharmony_ci {0xb6, 0x17, 0x58, 0xcc}, 2018c2ecf20Sopenharmony_ci {0xb6, 0x16, 0x00, 0xcc}, 2028c2ecf20Sopenharmony_ci {0xb6, 0x22, 0x12, 0xcc}, 2038c2ecf20Sopenharmony_ci {0xb6, 0x23, 0x0b, 0xcc}, 2048c2ecf20Sopenharmony_ci {0xb3, 0x02, 0x02, 0xcc}, 2058c2ecf20Sopenharmony_ci {0xbf, 0xc0, 0x39, 0xcc}, 2068c2ecf20Sopenharmony_ci {0xbf, 0xc1, 0x04, 0xcc}, 2078c2ecf20Sopenharmony_ci {0xbf, 0xcc, 0x10, 0xcc}, 2088c2ecf20Sopenharmony_ci {0xb9, 0x12, 0x00, 0xcc}, 2098c2ecf20Sopenharmony_ci {0xb9, 0x13, 0x0a, 0xcc}, 2108c2ecf20Sopenharmony_ci {0xb9, 0x14, 0x0a, 0xcc}, 2118c2ecf20Sopenharmony_ci {0xb9, 0x15, 0x0a, 0xcc}, 2128c2ecf20Sopenharmony_ci {0xb9, 0x16, 0x0a, 0xcc}, 2138c2ecf20Sopenharmony_ci {0xb9, 0x18, 0x00, 0xcc}, 2148c2ecf20Sopenharmony_ci {0xb9, 0x19, 0x0f, 0xcc}, 2158c2ecf20Sopenharmony_ci {0xb9, 0x1a, 0x0f, 0xcc}, 2168c2ecf20Sopenharmony_ci {0xb9, 0x1b, 0x0f, 0xcc}, 2178c2ecf20Sopenharmony_ci {0xb9, 0x1c, 0x0f, 0xcc}, 2188c2ecf20Sopenharmony_ci {0xb8, 0x8e, 0x00, 0xcc}, 2198c2ecf20Sopenharmony_ci {0xb8, 0x8f, 0xff, 0xcc}, 2208c2ecf20Sopenharmony_ci {0xb6, 0x12, 0xf8, 0xcc}, 2218c2ecf20Sopenharmony_ci {0xb8, 0x0c, 0x20, 0xcc}, 2228c2ecf20Sopenharmony_ci {0xb8, 0x0d, 0x70, 0xcc}, 2238c2ecf20Sopenharmony_ci {0xb6, 0x13, 0x13, 0xcc}, 2248c2ecf20Sopenharmony_ci {0x35, 0x00, 0x60, 0xbb}, 2258c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, 2268c2ecf20Sopenharmony_ci {} 2278c2ecf20Sopenharmony_ci}; 2288c2ecf20Sopenharmony_cistatic const u8 mi0360_initQVGA_JPG[][4] = { 2298c2ecf20Sopenharmony_ci {0xb0, 0x03, 0x19, 0xcc}, 2308c2ecf20Sopenharmony_ci {0xb0, 0x04, 0x02, 0xcc}, 2318c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x24, 0xcc}, 2328c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x25, 0xcc}, 2338c2ecf20Sopenharmony_ci {0xb3, 0x08, 0x01, 0xcc}, 2348c2ecf20Sopenharmony_ci {0xb3, 0x09, 0x0c, 0xcc}, 2358c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x01, 0xcc}, 2368c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x03, 0xcc}, 2378c2ecf20Sopenharmony_ci {0xb3, 0x03, 0x0a, 0xcc}, 2388c2ecf20Sopenharmony_ci {0xb3, 0x20, 0x00, 0xcc}, 2398c2ecf20Sopenharmony_ci {0xb3, 0x21, 0x00, 0xcc}, 2408c2ecf20Sopenharmony_ci {0xb3, 0x22, 0x01, 0xcc}, 2418c2ecf20Sopenharmony_ci {0xb3, 0x23, 0xe0, 0xcc}, 2428c2ecf20Sopenharmony_ci {0xb3, 0x04, 0x05, 0xcc}, 2438c2ecf20Sopenharmony_ci {0xb3, 0x14, 0x00, 0xcc}, 2448c2ecf20Sopenharmony_ci {0xb3, 0x15, 0x00, 0xcc}, 2458c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x02, 0xcc}, 2468c2ecf20Sopenharmony_ci {0xb3, 0x17, 0x7f, 0xcc}, 2478c2ecf20Sopenharmony_ci {0xb3, 0x35, 0xdd, 0xcc}, 2488c2ecf20Sopenharmony_ci {0xb3, 0x34, 0x02, 0xcc}, 2498c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x25, 0xcc}, 2508c2ecf20Sopenharmony_ci {0xbc, 0x00, 0xd1, 0xcc}, 2518c2ecf20Sopenharmony_ci {0xb8, 0x00, 0x13, 0xcc}, 2528c2ecf20Sopenharmony_ci {0xb8, 0x27, 0x20, 0xcc}, 2538c2ecf20Sopenharmony_ci {0xb8, 0x2c, 0x50, 0xcc}, 2548c2ecf20Sopenharmony_ci {0xb8, 0x2d, 0xf8, 0xcc}, 2558c2ecf20Sopenharmony_ci {0xb8, 0x2e, 0xf8, 0xcc}, 2568c2ecf20Sopenharmony_ci {0xb8, 0x2f, 0xf8, 0xcc}, 2578c2ecf20Sopenharmony_ci {0xb8, 0x30, 0x50, 0xcc}, 2588c2ecf20Sopenharmony_ci {0xb8, 0x31, 0xf8, 0xcc}, 2598c2ecf20Sopenharmony_ci {0xb8, 0x32, 0xf8, 0xcc}, 2608c2ecf20Sopenharmony_ci {0xb8, 0x33, 0xf8, 0xcc}, 2618c2ecf20Sopenharmony_ci {0xb8, 0x34, 0x50, 0xcc}, 2628c2ecf20Sopenharmony_ci {0xb8, 0x35, 0x00, 0xcc}, 2638c2ecf20Sopenharmony_ci {0xb8, 0x36, 0x00, 0xcc}, 2648c2ecf20Sopenharmony_ci {0xb8, 0x37, 0x00, 0xcc}, 2658c2ecf20Sopenharmony_ci {0xb8, 0x01, 0x79, 0xcc}, 2668c2ecf20Sopenharmony_ci {0xb8, 0x08, 0xe0, 0xcc}, 2678c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x41, 0xcc}, 2688c2ecf20Sopenharmony_ci {0xb8, 0x01, 0x79, 0xcc}, 2698c2ecf20Sopenharmony_ci {0xb8, 0x14, 0x18, 0xcc}, 2708c2ecf20Sopenharmony_ci {0xb8, 0xb2, 0x0a, 0xcc}, 2718c2ecf20Sopenharmony_ci {0xb8, 0xb4, 0x0a, 0xcc}, 2728c2ecf20Sopenharmony_ci {0xb8, 0xb5, 0x0a, 0xcc}, 2738c2ecf20Sopenharmony_ci {0xb8, 0xfe, 0x00, 0xcc}, 2748c2ecf20Sopenharmony_ci {0xb8, 0xff, 0x28, 0xcc}, 2758c2ecf20Sopenharmony_ci {0xb9, 0x00, 0x28, 0xcc}, 2768c2ecf20Sopenharmony_ci {0xb9, 0x01, 0x28, 0xcc}, 2778c2ecf20Sopenharmony_ci {0xb9, 0x02, 0x28, 0xcc}, 2788c2ecf20Sopenharmony_ci {0xb9, 0x03, 0x00, 0xcc}, 2798c2ecf20Sopenharmony_ci {0xb9, 0x04, 0x00, 0xcc}, 2808c2ecf20Sopenharmony_ci {0xb9, 0x05, 0x3c, 0xcc}, 2818c2ecf20Sopenharmony_ci {0xb9, 0x06, 0x3c, 0xcc}, 2828c2ecf20Sopenharmony_ci {0xb9, 0x07, 0x3c, 0xcc}, 2838c2ecf20Sopenharmony_ci {0xb9, 0x08, 0x3c, 0xcc}, 2848c2ecf20Sopenharmony_ci {0xb8, 0x8e, 0x00, 0xcc}, 2858c2ecf20Sopenharmony_ci {0xb8, 0x8f, 0xff, 0xcc}, 2868c2ecf20Sopenharmony_ci {0xb8, 0x81, 0x09, 0xcc}, 2878c2ecf20Sopenharmony_ci {0x31, 0x00, 0x00, 0xbb}, 2888c2ecf20Sopenharmony_ci {0x09, 0x01, 0xc7, 0xbb}, 2898c2ecf20Sopenharmony_ci {0x34, 0x01, 0x00, 0xbb}, 2908c2ecf20Sopenharmony_ci {0x2b, 0x00, 0x28, 0xbb}, 2918c2ecf20Sopenharmony_ci {0x2c, 0x00, 0x30, 0xbb}, 2928c2ecf20Sopenharmony_ci {0x2d, 0x00, 0x30, 0xbb}, 2938c2ecf20Sopenharmony_ci {0x2e, 0x00, 0x28, 0xbb}, 2948c2ecf20Sopenharmony_ci {0x62, 0x04, 0x11, 0xbb}, 2958c2ecf20Sopenharmony_ci {0x03, 0x01, 0xe0, 0xbb}, 2968c2ecf20Sopenharmony_ci {0x2c, 0x00, 0x2c, 0xbb}, 2978c2ecf20Sopenharmony_ci {0x20, 0xd0, 0x00, 0xbb}, 2988c2ecf20Sopenharmony_ci {0x01, 0x00, 0x08, 0xbb}, 2998c2ecf20Sopenharmony_ci {0x06, 0x00, 0x10, 0xbb}, 3008c2ecf20Sopenharmony_ci {0x05, 0x00, 0x20, 0xbb}, 3018c2ecf20Sopenharmony_ci {0x20, 0x00, 0x00, 0xbb}, 3028c2ecf20Sopenharmony_ci {0xb6, 0x00, 0x00, 0xcc}, 3038c2ecf20Sopenharmony_ci {0xb6, 0x03, 0x01, 0xcc}, 3048c2ecf20Sopenharmony_ci {0xb6, 0x02, 0x40, 0xcc}, 3058c2ecf20Sopenharmony_ci {0xb6, 0x05, 0x00, 0xcc}, 3068c2ecf20Sopenharmony_ci {0xb6, 0x04, 0xf0, 0xcc}, 3078c2ecf20Sopenharmony_ci {0xb6, 0x12, 0x78, 0xcc}, 3088c2ecf20Sopenharmony_ci {0xb6, 0x18, 0x00, 0xcc}, 3098c2ecf20Sopenharmony_ci {0xb6, 0x17, 0x96, 0xcc}, 3108c2ecf20Sopenharmony_ci {0xb6, 0x16, 0x00, 0xcc}, 3118c2ecf20Sopenharmony_ci {0xb6, 0x22, 0x12, 0xcc}, 3128c2ecf20Sopenharmony_ci {0xb6, 0x23, 0x0b, 0xcc}, 3138c2ecf20Sopenharmony_ci {0xb3, 0x02, 0x02, 0xcc}, 3148c2ecf20Sopenharmony_ci {0xbf, 0xc0, 0x39, 0xcc}, 3158c2ecf20Sopenharmony_ci {0xbf, 0xc1, 0x04, 0xcc}, 3168c2ecf20Sopenharmony_ci {0xbf, 0xcc, 0x10, 0xcc}, 3178c2ecf20Sopenharmony_ci {0xb9, 0x12, 0x00, 0xcc}, 3188c2ecf20Sopenharmony_ci {0xb9, 0x13, 0x0a, 0xcc}, 3198c2ecf20Sopenharmony_ci {0xb9, 0x14, 0x0a, 0xcc}, 3208c2ecf20Sopenharmony_ci {0xb9, 0x15, 0x0a, 0xcc}, 3218c2ecf20Sopenharmony_ci {0xb9, 0x16, 0x0a, 0xcc}, 3228c2ecf20Sopenharmony_ci {0xb9, 0x18, 0x00, 0xcc}, 3238c2ecf20Sopenharmony_ci {0xb9, 0x19, 0x0f, 0xcc}, 3248c2ecf20Sopenharmony_ci {0xb9, 0x1a, 0x0f, 0xcc}, 3258c2ecf20Sopenharmony_ci {0xb9, 0x1b, 0x0f, 0xcc}, 3268c2ecf20Sopenharmony_ci {0xb9, 0x1c, 0x0f, 0xcc}, 3278c2ecf20Sopenharmony_ci {0xb8, 0x8e, 0x00, 0xcc}, 3288c2ecf20Sopenharmony_ci {0xb8, 0x8f, 0xff, 0xcc}, 3298c2ecf20Sopenharmony_ci {0xb6, 0x12, 0xf8, 0xcc}, 3308c2ecf20Sopenharmony_ci {0xb6, 0x13, 0x13, 0xcc}, 3318c2ecf20Sopenharmony_ci {0xbc, 0x02, 0x18, 0xcc}, 3328c2ecf20Sopenharmony_ci {0xbc, 0x03, 0x50, 0xcc}, 3338c2ecf20Sopenharmony_ci {0xbc, 0x04, 0x18, 0xcc}, 3348c2ecf20Sopenharmony_ci {0xbc, 0x05, 0x00, 0xcc}, 3358c2ecf20Sopenharmony_ci {0xbc, 0x06, 0x00, 0xcc}, 3368c2ecf20Sopenharmony_ci {0xbc, 0x08, 0x30, 0xcc}, 3378c2ecf20Sopenharmony_ci {0xbc, 0x09, 0x40, 0xcc}, 3388c2ecf20Sopenharmony_ci {0xbc, 0x0a, 0x10, 0xcc}, 3398c2ecf20Sopenharmony_ci {0xb8, 0x0c, 0x20, 0xcc}, 3408c2ecf20Sopenharmony_ci {0xb8, 0x0d, 0x70, 0xcc}, 3418c2ecf20Sopenharmony_ci {0xbc, 0x0b, 0x00, 0xcc}, 3428c2ecf20Sopenharmony_ci {0xbc, 0x0c, 0x00, 0xcc}, 3438c2ecf20Sopenharmony_ci {0x35, 0x00, 0xef, 0xbb}, 3448c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, 3458c2ecf20Sopenharmony_ci {} 3468c2ecf20Sopenharmony_ci}; 3478c2ecf20Sopenharmony_ci 3488c2ecf20Sopenharmony_cistatic const u8 mi1310_socinitVGA_JPG[][4] = { 3498c2ecf20Sopenharmony_ci {0xb0, 0x03, 0x19, 0xcc}, 3508c2ecf20Sopenharmony_ci {0xb0, 0x04, 0x02, 0xcc}, 3518c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x64, 0xcc}, 3528c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x65, 0xcc}, 3538c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x00, 0xcc}, 3548c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x00, 0xcc}, 3558c2ecf20Sopenharmony_ci {0xb3, 0x08, 0x01, 0xcc}, 3568c2ecf20Sopenharmony_ci {0xb3, 0x09, 0x0c, 0xcc}, 3578c2ecf20Sopenharmony_ci {0xb3, 0x34, 0x02, 0xcc}, 3588c2ecf20Sopenharmony_ci {0xb3, 0x35, 0xdd, 0xcc}, /* i2c add: 5d */ 3598c2ecf20Sopenharmony_ci {0xb3, 0x02, 0x00, 0xcc}, 3608c2ecf20Sopenharmony_ci {0xb3, 0x03, 0x0a, 0xcc}, 3618c2ecf20Sopenharmony_ci {0xb3, 0x04, 0x05, 0xcc}, 3628c2ecf20Sopenharmony_ci {0xb3, 0x20, 0x00, 0xcc}, 3638c2ecf20Sopenharmony_ci {0xb3, 0x21, 0x00, 0xcc}, 3648c2ecf20Sopenharmony_ci {0xb3, 0x22, 0x03, 0xcc}, 3658c2ecf20Sopenharmony_ci {0xb3, 0x23, 0xc0, 0xcc}, 3668c2ecf20Sopenharmony_ci {0xb3, 0x14, 0x00, 0xcc}, 3678c2ecf20Sopenharmony_ci {0xb3, 0x15, 0x00, 0xcc}, 3688c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x04, 0xcc}, 3698c2ecf20Sopenharmony_ci {0xb3, 0x17, 0xff, 0xcc}, 3708c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x65, 0xcc}, 3718c2ecf20Sopenharmony_ci {0xb8, 0x00, 0x00, 0xcc}, 3728c2ecf20Sopenharmony_ci {0xbc, 0x00, 0xd0, 0xcc}, 3738c2ecf20Sopenharmony_ci {0xbc, 0x01, 0x01, 0xcc}, 3748c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 3758c2ecf20Sopenharmony_ci {0xc8, 0x9f, 0x0b, 0xbb}, 3768c2ecf20Sopenharmony_ci {0x5b, 0x00, 0x01, 0xbb}, 3778c2ecf20Sopenharmony_ci {0x2f, 0xde, 0x20, 0xbb}, 3788c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x00, 0xbb}, 3798c2ecf20Sopenharmony_ci {0x20, 0x03, 0x02, 0xbb}, /* h/v flip */ 3808c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x01, 0xbb}, 3818c2ecf20Sopenharmony_ci {0x05, 0x00, 0x07, 0xbb}, 3828c2ecf20Sopenharmony_ci {0x34, 0x00, 0x00, 0xbb}, 3838c2ecf20Sopenharmony_ci {0x35, 0xff, 0x00, 0xbb}, 3848c2ecf20Sopenharmony_ci {0xdc, 0x07, 0x02, 0xbb}, 3858c2ecf20Sopenharmony_ci {0xdd, 0x3c, 0x18, 0xbb}, 3868c2ecf20Sopenharmony_ci {0xde, 0x92, 0x6d, 0xbb}, 3878c2ecf20Sopenharmony_ci {0xdf, 0xcd, 0xb1, 0xbb}, 3888c2ecf20Sopenharmony_ci {0xe0, 0xff, 0xe7, 0xbb}, 3898c2ecf20Sopenharmony_ci {0x06, 0xf0, 0x0d, 0xbb}, 3908c2ecf20Sopenharmony_ci {0x06, 0x70, 0x0e, 0xbb}, 3918c2ecf20Sopenharmony_ci {0x4c, 0x00, 0x01, 0xbb}, 3928c2ecf20Sopenharmony_ci {0x4d, 0x00, 0x01, 0xbb}, 3938c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 3948c2ecf20Sopenharmony_ci {0x2e, 0x0c, 0x55, 0xbb}, 3958c2ecf20Sopenharmony_ci {0x21, 0xb6, 0x6e, 0xbb}, 3968c2ecf20Sopenharmony_ci {0x36, 0x30, 0x10, 0xbb}, 3978c2ecf20Sopenharmony_ci {0x37, 0x00, 0xc1, 0xbb}, 3988c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x00, 0xbb}, 3998c2ecf20Sopenharmony_ci {0x07, 0x00, 0x84, 0xbb}, 4008c2ecf20Sopenharmony_ci {0x08, 0x02, 0x4a, 0xbb}, 4018c2ecf20Sopenharmony_ci {0x05, 0x01, 0x10, 0xbb}, 4028c2ecf20Sopenharmony_ci {0x06, 0x00, 0x39, 0xbb}, 4038c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 4048c2ecf20Sopenharmony_ci {0x58, 0x02, 0x67, 0xbb}, 4058c2ecf20Sopenharmony_ci {0x57, 0x02, 0x00, 0xbb}, 4068c2ecf20Sopenharmony_ci {0x5a, 0x02, 0x67, 0xbb}, 4078c2ecf20Sopenharmony_ci {0x59, 0x02, 0x00, 0xbb}, 4088c2ecf20Sopenharmony_ci {0x5c, 0x12, 0x0d, 0xbb}, 4098c2ecf20Sopenharmony_ci {0x5d, 0x16, 0x11, 0xbb}, 4108c2ecf20Sopenharmony_ci {0x39, 0x06, 0x18, 0xbb}, 4118c2ecf20Sopenharmony_ci {0x3a, 0x06, 0x18, 0xbb}, 4128c2ecf20Sopenharmony_ci {0x3b, 0x06, 0x18, 0xbb}, 4138c2ecf20Sopenharmony_ci {0x3c, 0x06, 0x18, 0xbb}, 4148c2ecf20Sopenharmony_ci {0x64, 0x7b, 0x5b, 0xbb}, 4158c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 4168c2ecf20Sopenharmony_ci {0x36, 0x30, 0x10, 0xbb}, 4178c2ecf20Sopenharmony_ci {0x37, 0x00, 0xc0, 0xbb}, 4188c2ecf20Sopenharmony_ci {0xbc, 0x0e, 0x00, 0xcc}, 4198c2ecf20Sopenharmony_ci {0xbc, 0x0f, 0x05, 0xcc}, 4208c2ecf20Sopenharmony_ci {0xbc, 0x10, 0xc0, 0xcc}, 4218c2ecf20Sopenharmony_ci {0xbc, 0x11, 0x03, 0xcc}, 4228c2ecf20Sopenharmony_ci {0xb6, 0x00, 0x00, 0xcc}, 4238c2ecf20Sopenharmony_ci {0xb6, 0x03, 0x02, 0xcc}, 4248c2ecf20Sopenharmony_ci {0xb6, 0x02, 0x80, 0xcc}, 4258c2ecf20Sopenharmony_ci {0xb6, 0x05, 0x01, 0xcc}, 4268c2ecf20Sopenharmony_ci {0xb6, 0x04, 0xe0, 0xcc}, 4278c2ecf20Sopenharmony_ci {0xb6, 0x12, 0xf8, 0xcc}, 4288c2ecf20Sopenharmony_ci {0xb6, 0x13, 0x25, 0xcc}, 4298c2ecf20Sopenharmony_ci {0xb6, 0x18, 0x02, 0xcc}, 4308c2ecf20Sopenharmony_ci {0xb6, 0x17, 0x58, 0xcc}, 4318c2ecf20Sopenharmony_ci {0xb6, 0x16, 0x00, 0xcc}, 4328c2ecf20Sopenharmony_ci {0xb6, 0x22, 0x12, 0xcc}, 4338c2ecf20Sopenharmony_ci {0xb6, 0x23, 0x0b, 0xcc}, 4348c2ecf20Sopenharmony_ci {0xbf, 0xc0, 0x39, 0xcc}, 4358c2ecf20Sopenharmony_ci {0xbf, 0xc1, 0x04, 0xcc}, 4368c2ecf20Sopenharmony_ci {0xbf, 0xcc, 0x00, 0xcc}, 4378c2ecf20Sopenharmony_ci {0xbc, 0x02, 0x18, 0xcc}, 4388c2ecf20Sopenharmony_ci {0xbc, 0x03, 0x50, 0xcc}, 4398c2ecf20Sopenharmony_ci {0xbc, 0x04, 0x18, 0xcc}, 4408c2ecf20Sopenharmony_ci {0xbc, 0x05, 0x00, 0xcc}, 4418c2ecf20Sopenharmony_ci {0xbc, 0x06, 0x00, 0xcc}, 4428c2ecf20Sopenharmony_ci {0xbc, 0x08, 0x30, 0xcc}, 4438c2ecf20Sopenharmony_ci {0xbc, 0x09, 0x40, 0xcc}, 4448c2ecf20Sopenharmony_ci {0xbc, 0x0a, 0x10, 0xcc}, 4458c2ecf20Sopenharmony_ci {0xbc, 0x0b, 0x00, 0xcc}, 4468c2ecf20Sopenharmony_ci {0xbc, 0x0c, 0x00, 0xcc}, 4478c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, 4488c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x01, 0xbb}, 4498c2ecf20Sopenharmony_ci {0x80, 0x00, 0x03, 0xbb}, 4508c2ecf20Sopenharmony_ci {0x81, 0xc7, 0x14, 0xbb}, 4518c2ecf20Sopenharmony_ci {0x82, 0xeb, 0xe8, 0xbb}, 4528c2ecf20Sopenharmony_ci {0x83, 0xfe, 0xf4, 0xbb}, 4538c2ecf20Sopenharmony_ci {0x84, 0xcd, 0x10, 0xbb}, 4548c2ecf20Sopenharmony_ci {0x85, 0xf3, 0xee, 0xbb}, 4558c2ecf20Sopenharmony_ci {0x86, 0xff, 0xf1, 0xbb}, 4568c2ecf20Sopenharmony_ci {0x87, 0xcd, 0x10, 0xbb}, 4578c2ecf20Sopenharmony_ci {0x88, 0xf3, 0xee, 0xbb}, 4588c2ecf20Sopenharmony_ci {0x89, 0x01, 0xf1, 0xbb}, 4598c2ecf20Sopenharmony_ci {0x8a, 0xe5, 0x17, 0xbb}, 4608c2ecf20Sopenharmony_ci {0x8b, 0xe8, 0xe2, 0xbb}, 4618c2ecf20Sopenharmony_ci {0x8c, 0xf7, 0xed, 0xbb}, 4628c2ecf20Sopenharmony_ci {0x8d, 0x00, 0xff, 0xbb}, 4638c2ecf20Sopenharmony_ci {0x8e, 0xec, 0x10, 0xbb}, 4648c2ecf20Sopenharmony_ci {0x8f, 0xf0, 0xed, 0xbb}, 4658c2ecf20Sopenharmony_ci {0x90, 0xf9, 0xf2, 0xbb}, 4668c2ecf20Sopenharmony_ci {0x91, 0x00, 0x00, 0xbb}, 4678c2ecf20Sopenharmony_ci {0x92, 0xe9, 0x0d, 0xbb}, 4688c2ecf20Sopenharmony_ci {0x93, 0xf4, 0xf2, 0xbb}, 4698c2ecf20Sopenharmony_ci {0x94, 0xfb, 0xf5, 0xbb}, 4708c2ecf20Sopenharmony_ci {0x95, 0x00, 0xff, 0xbb}, 4718c2ecf20Sopenharmony_ci {0xb6, 0x0f, 0x08, 0xbb}, 4728c2ecf20Sopenharmony_ci {0xb7, 0x3d, 0x16, 0xbb}, 4738c2ecf20Sopenharmony_ci {0xb8, 0x0c, 0x04, 0xbb}, 4748c2ecf20Sopenharmony_ci {0xb9, 0x1c, 0x07, 0xbb}, 4758c2ecf20Sopenharmony_ci {0xba, 0x0a, 0x03, 0xbb}, 4768c2ecf20Sopenharmony_ci {0xbb, 0x1b, 0x09, 0xbb}, 4778c2ecf20Sopenharmony_ci {0xbc, 0x17, 0x0d, 0xbb}, 4788c2ecf20Sopenharmony_ci {0xbd, 0x23, 0x1d, 0xbb}, 4798c2ecf20Sopenharmony_ci {0xbe, 0x00, 0x28, 0xbb}, 4808c2ecf20Sopenharmony_ci {0xbf, 0x11, 0x09, 0xbb}, 4818c2ecf20Sopenharmony_ci {0xc0, 0x16, 0x15, 0xbb}, 4828c2ecf20Sopenharmony_ci {0xc1, 0x00, 0x1b, 0xbb}, 4838c2ecf20Sopenharmony_ci {0xc2, 0x0e, 0x07, 0xbb}, 4848c2ecf20Sopenharmony_ci {0xc3, 0x14, 0x10, 0xbb}, 4858c2ecf20Sopenharmony_ci {0xc4, 0x00, 0x17, 0xbb}, 4868c2ecf20Sopenharmony_ci {0x06, 0x74, 0x8e, 0xbb}, 4878c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x01, 0xbb}, 4888c2ecf20Sopenharmony_ci {0x06, 0xf4, 0x8e, 0xbb}, 4898c2ecf20Sopenharmony_ci {0x00, 0x00, 0x50, 0xdd}, 4908c2ecf20Sopenharmony_ci {0x06, 0x74, 0x8e, 0xbb}, 4918c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 4928c2ecf20Sopenharmony_ci {0x24, 0x50, 0x20, 0xbb}, 4938c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 4948c2ecf20Sopenharmony_ci {0x34, 0x0c, 0x50, 0xbb}, 4958c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x41, 0xcc}, 4968c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x00, 0xbb}, 4978c2ecf20Sopenharmony_ci {0x03, 0x03, 0xc0, 0xbb}, 4988c2ecf20Sopenharmony_ci {}, 4998c2ecf20Sopenharmony_ci}; 5008c2ecf20Sopenharmony_cistatic const u8 mi1310_socinitQVGA_JPG[][4] = { 5018c2ecf20Sopenharmony_ci {0xb0, 0x03, 0x19, 0xcc}, {0xb0, 0x04, 0x02, 0xcc}, 5028c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x64, 0xcc}, {0xb3, 0x00, 0x65, 0xcc}, 5038c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x00, 0xcc}, {0xb3, 0x06, 0x00, 0xcc}, 5048c2ecf20Sopenharmony_ci {0xb3, 0x08, 0x01, 0xcc}, {0xb3, 0x09, 0x0c, 0xcc}, 5058c2ecf20Sopenharmony_ci {0xb3, 0x34, 0x02, 0xcc}, {0xb3, 0x35, 0xdd, 0xcc}, 5068c2ecf20Sopenharmony_ci {0xb3, 0x02, 0x00, 0xcc}, {0xb3, 0x03, 0x0a, 0xcc}, 5078c2ecf20Sopenharmony_ci {0xb3, 0x04, 0x05, 0xcc}, {0xb3, 0x20, 0x00, 0xcc}, 5088c2ecf20Sopenharmony_ci {0xb3, 0x21, 0x00, 0xcc}, {0xb3, 0x22, 0x03, 0xcc}, 5098c2ecf20Sopenharmony_ci {0xb3, 0x23, 0xc0, 0xcc}, {0xb3, 0x14, 0x00, 0xcc}, 5108c2ecf20Sopenharmony_ci {0xb3, 0x15, 0x00, 0xcc}, {0xb3, 0x16, 0x04, 0xcc}, 5118c2ecf20Sopenharmony_ci {0xb3, 0x17, 0xff, 0xcc}, {0xb3, 0x00, 0x65, 0xcc}, 5128c2ecf20Sopenharmony_ci {0xb8, 0x00, 0x00, 0xcc}, {0xbc, 0x00, 0xf0, 0xcc}, 5138c2ecf20Sopenharmony_ci {0xbc, 0x01, 0x01, 0xcc}, {0xf0, 0x00, 0x02, 0xbb}, 5148c2ecf20Sopenharmony_ci {0xc8, 0x9f, 0x0b, 0xbb}, {0x5b, 0x00, 0x01, 0xbb}, 5158c2ecf20Sopenharmony_ci {0x2f, 0xde, 0x20, 0xbb}, {0xf0, 0x00, 0x00, 0xbb}, 5168c2ecf20Sopenharmony_ci {0x20, 0x03, 0x02, 0xbb}, /* h/v flip */ 5178c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x01, 0xbb}, 5188c2ecf20Sopenharmony_ci {0x05, 0x00, 0x07, 0xbb}, {0x34, 0x00, 0x00, 0xbb}, 5198c2ecf20Sopenharmony_ci {0x35, 0xff, 0x00, 0xbb}, {0xdc, 0x07, 0x02, 0xbb}, 5208c2ecf20Sopenharmony_ci {0xdd, 0x3c, 0x18, 0xbb}, {0xde, 0x92, 0x6d, 0xbb}, 5218c2ecf20Sopenharmony_ci {0xdf, 0xcd, 0xb1, 0xbb}, {0xe0, 0xff, 0xe7, 0xbb}, 5228c2ecf20Sopenharmony_ci {0x06, 0xf0, 0x0d, 0xbb}, {0x06, 0x70, 0x0e, 0xbb}, 5238c2ecf20Sopenharmony_ci {0x4c, 0x00, 0x01, 0xbb}, {0x4d, 0x00, 0x01, 0xbb}, 5248c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, {0x2e, 0x0c, 0x55, 0xbb}, 5258c2ecf20Sopenharmony_ci {0x21, 0xb6, 0x6e, 0xbb}, {0x36, 0x30, 0x10, 0xbb}, 5268c2ecf20Sopenharmony_ci {0x37, 0x00, 0xc1, 0xbb}, {0xf0, 0x00, 0x00, 0xbb}, 5278c2ecf20Sopenharmony_ci {0x07, 0x00, 0x84, 0xbb}, {0x08, 0x02, 0x4a, 0xbb}, 5288c2ecf20Sopenharmony_ci {0x05, 0x01, 0x10, 0xbb}, {0x06, 0x00, 0x39, 0xbb}, 5298c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, {0x58, 0x02, 0x67, 0xbb}, 5308c2ecf20Sopenharmony_ci {0x57, 0x02, 0x00, 0xbb}, {0x5a, 0x02, 0x67, 0xbb}, 5318c2ecf20Sopenharmony_ci {0x59, 0x02, 0x00, 0xbb}, {0x5c, 0x12, 0x0d, 0xbb}, 5328c2ecf20Sopenharmony_ci {0x5d, 0x16, 0x11, 0xbb}, {0x39, 0x06, 0x18, 0xbb}, 5338c2ecf20Sopenharmony_ci {0x3a, 0x06, 0x18, 0xbb}, {0x3b, 0x06, 0x18, 0xbb}, 5348c2ecf20Sopenharmony_ci {0x3c, 0x06, 0x18, 0xbb}, {0x64, 0x7b, 0x5b, 0xbb}, 5358c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, {0x36, 0x30, 0x10, 0xbb}, 5368c2ecf20Sopenharmony_ci {0x37, 0x00, 0xc0, 0xbb}, {0xbc, 0x0e, 0x00, 0xcc}, 5378c2ecf20Sopenharmony_ci {0xbc, 0x0f, 0x05, 0xcc}, {0xbc, 0x10, 0xc0, 0xcc}, 5388c2ecf20Sopenharmony_ci {0xbc, 0x11, 0x03, 0xcc}, {0xb6, 0x00, 0x00, 0xcc}, 5398c2ecf20Sopenharmony_ci {0xb6, 0x03, 0x01, 0xcc}, {0xb6, 0x02, 0x40, 0xcc}, 5408c2ecf20Sopenharmony_ci {0xb6, 0x05, 0x00, 0xcc}, {0xb6, 0x04, 0xf0, 0xcc}, 5418c2ecf20Sopenharmony_ci {0xb6, 0x12, 0xf8, 0xcc}, {0xb6, 0x13, 0x25, 0xcc}, 5428c2ecf20Sopenharmony_ci {0xb6, 0x18, 0x00, 0xcc}, {0xb6, 0x17, 0x96, 0xcc}, 5438c2ecf20Sopenharmony_ci {0xb6, 0x16, 0x00, 0xcc}, {0xb6, 0x22, 0x12, 0xcc}, 5448c2ecf20Sopenharmony_ci {0xb6, 0x23, 0x0b, 0xcc}, {0xbf, 0xc0, 0x39, 0xcc}, 5458c2ecf20Sopenharmony_ci {0xbf, 0xc1, 0x04, 0xcc}, {0xbf, 0xcc, 0x00, 0xcc}, 5468c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, {0xf0, 0x00, 0x01, 0xbb}, 5478c2ecf20Sopenharmony_ci {0x80, 0x00, 0x03, 0xbb}, {0x81, 0xc7, 0x14, 0xbb}, 5488c2ecf20Sopenharmony_ci {0x82, 0xeb, 0xe8, 0xbb}, {0x83, 0xfe, 0xf4, 0xbb}, 5498c2ecf20Sopenharmony_ci {0x84, 0xcd, 0x10, 0xbb}, {0x85, 0xf3, 0xee, 0xbb}, 5508c2ecf20Sopenharmony_ci {0x86, 0xff, 0xf1, 0xbb}, {0x87, 0xcd, 0x10, 0xbb}, 5518c2ecf20Sopenharmony_ci {0x88, 0xf3, 0xee, 0xbb}, {0x89, 0x01, 0xf1, 0xbb}, 5528c2ecf20Sopenharmony_ci {0x8a, 0xe5, 0x17, 0xbb}, {0x8b, 0xe8, 0xe2, 0xbb}, 5538c2ecf20Sopenharmony_ci {0x8c, 0xf7, 0xed, 0xbb}, {0x8d, 0x00, 0xff, 0xbb}, 5548c2ecf20Sopenharmony_ci {0x8e, 0xec, 0x10, 0xbb}, {0x8f, 0xf0, 0xed, 0xbb}, 5558c2ecf20Sopenharmony_ci {0x90, 0xf9, 0xf2, 0xbb}, {0x91, 0x00, 0x00, 0xbb}, 5568c2ecf20Sopenharmony_ci {0x92, 0xe9, 0x0d, 0xbb}, {0x93, 0xf4, 0xf2, 0xbb}, 5578c2ecf20Sopenharmony_ci {0x94, 0xfb, 0xf5, 0xbb}, {0x95, 0x00, 0xff, 0xbb}, 5588c2ecf20Sopenharmony_ci {0xb6, 0x0f, 0x08, 0xbb}, {0xb7, 0x3d, 0x16, 0xbb}, 5598c2ecf20Sopenharmony_ci {0xb8, 0x0c, 0x04, 0xbb}, {0xb9, 0x1c, 0x07, 0xbb}, 5608c2ecf20Sopenharmony_ci {0xba, 0x0a, 0x03, 0xbb}, {0xbb, 0x1b, 0x09, 0xbb}, 5618c2ecf20Sopenharmony_ci {0xbc, 0x17, 0x0d, 0xbb}, {0xbd, 0x23, 0x1d, 0xbb}, 5628c2ecf20Sopenharmony_ci {0xbe, 0x00, 0x28, 0xbb}, {0xbf, 0x11, 0x09, 0xbb}, 5638c2ecf20Sopenharmony_ci {0xc0, 0x16, 0x15, 0xbb}, {0xc1, 0x00, 0x1b, 0xbb}, 5648c2ecf20Sopenharmony_ci {0xc2, 0x0e, 0x07, 0xbb}, {0xc3, 0x14, 0x10, 0xbb}, 5658c2ecf20Sopenharmony_ci {0xc4, 0x00, 0x17, 0xbb}, {0x06, 0x74, 0x8e, 0xbb}, 5668c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x01, 0xbb}, {0x06, 0xf4, 0x8e, 0xbb}, 5678c2ecf20Sopenharmony_ci {0x00, 0x00, 0x50, 0xdd}, {0x06, 0x74, 0x8e, 0xbb}, 5688c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, {0x24, 0x50, 0x20, 0xbb}, 5698c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, {0x34, 0x0c, 0x50, 0xbb}, 5708c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x41, 0xcc}, {0xf0, 0x00, 0x00, 0xbb}, 5718c2ecf20Sopenharmony_ci {0x03, 0x03, 0xc0, 0xbb}, 5728c2ecf20Sopenharmony_ci {}, 5738c2ecf20Sopenharmony_ci}; 5748c2ecf20Sopenharmony_cistatic const u8 mi1310_soc_InitSXGA_JPG[][4] = { 5758c2ecf20Sopenharmony_ci {0xb0, 0x03, 0x19, 0xcc}, 5768c2ecf20Sopenharmony_ci {0xb0, 0x04, 0x02, 0xcc}, 5778c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x64, 0xcc}, 5788c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x65, 0xcc}, 5798c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x00, 0xcc}, 5808c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x00, 0xcc}, 5818c2ecf20Sopenharmony_ci {0xb3, 0x08, 0x01, 0xcc}, 5828c2ecf20Sopenharmony_ci {0xb3, 0x09, 0x0c, 0xcc}, 5838c2ecf20Sopenharmony_ci {0xb3, 0x34, 0x02, 0xcc}, 5848c2ecf20Sopenharmony_ci {0xb3, 0x35, 0xdd, 0xcc}, 5858c2ecf20Sopenharmony_ci {0xb3, 0x02, 0x00, 0xcc}, 5868c2ecf20Sopenharmony_ci {0xb3, 0x03, 0x0a, 0xcc}, 5878c2ecf20Sopenharmony_ci {0xb3, 0x04, 0x0d, 0xcc}, 5888c2ecf20Sopenharmony_ci {0xb3, 0x20, 0x00, 0xcc}, 5898c2ecf20Sopenharmony_ci {0xb3, 0x21, 0x00, 0xcc}, 5908c2ecf20Sopenharmony_ci {0xb3, 0x22, 0x03, 0xcc}, 5918c2ecf20Sopenharmony_ci {0xb3, 0x23, 0xc0, 0xcc}, 5928c2ecf20Sopenharmony_ci {0xb3, 0x14, 0x00, 0xcc}, 5938c2ecf20Sopenharmony_ci {0xb3, 0x15, 0x00, 0xcc}, 5948c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x04, 0xcc}, 5958c2ecf20Sopenharmony_ci {0xb3, 0x17, 0xff, 0xcc}, 5968c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x65, 0xcc}, 5978c2ecf20Sopenharmony_ci {0xb8, 0x00, 0x00, 0xcc}, 5988c2ecf20Sopenharmony_ci {0xbc, 0x00, 0x70, 0xcc}, 5998c2ecf20Sopenharmony_ci {0xbc, 0x01, 0x01, 0xcc}, 6008c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 6018c2ecf20Sopenharmony_ci {0xc8, 0x9f, 0x0b, 0xbb}, 6028c2ecf20Sopenharmony_ci {0x5b, 0x00, 0x01, 0xbb}, 6038c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x00, 0xbb}, 6048c2ecf20Sopenharmony_ci {0x20, 0x03, 0x02, 0xbb}, /* h/v flip */ 6058c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x01, 0xbb}, 6068c2ecf20Sopenharmony_ci {0x05, 0x00, 0x07, 0xbb}, 6078c2ecf20Sopenharmony_ci {0x34, 0x00, 0x00, 0xbb}, 6088c2ecf20Sopenharmony_ci {0x35, 0xff, 0x00, 0xbb}, 6098c2ecf20Sopenharmony_ci {0xdc, 0x07, 0x02, 0xbb}, 6108c2ecf20Sopenharmony_ci {0xdd, 0x3c, 0x18, 0xbb}, 6118c2ecf20Sopenharmony_ci {0xde, 0x92, 0x6d, 0xbb}, 6128c2ecf20Sopenharmony_ci {0xdf, 0xcd, 0xb1, 0xbb}, 6138c2ecf20Sopenharmony_ci {0xe0, 0xff, 0xe7, 0xbb}, 6148c2ecf20Sopenharmony_ci {0x06, 0xf0, 0x0d, 0xbb}, 6158c2ecf20Sopenharmony_ci {0x06, 0x70, 0x0e, 0xbb}, 6168c2ecf20Sopenharmony_ci {0x4c, 0x00, 0x01, 0xbb}, 6178c2ecf20Sopenharmony_ci {0x4d, 0x00, 0x01, 0xbb}, 6188c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 6198c2ecf20Sopenharmony_ci {0x2e, 0x0c, 0x60, 0xbb}, 6208c2ecf20Sopenharmony_ci {0x21, 0xb6, 0x6e, 0xbb}, 6218c2ecf20Sopenharmony_ci {0x37, 0x01, 0x40, 0xbb}, 6228c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x00, 0xbb}, 6238c2ecf20Sopenharmony_ci {0x07, 0x00, 0x84, 0xbb}, 6248c2ecf20Sopenharmony_ci {0x08, 0x02, 0x4a, 0xbb}, 6258c2ecf20Sopenharmony_ci {0x05, 0x01, 0x10, 0xbb}, 6268c2ecf20Sopenharmony_ci {0x06, 0x00, 0x39, 0xbb}, 6278c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 6288c2ecf20Sopenharmony_ci {0x58, 0x02, 0x67, 0xbb}, 6298c2ecf20Sopenharmony_ci {0x57, 0x02, 0x00, 0xbb}, 6308c2ecf20Sopenharmony_ci {0x5a, 0x02, 0x67, 0xbb}, 6318c2ecf20Sopenharmony_ci {0x59, 0x02, 0x00, 0xbb}, 6328c2ecf20Sopenharmony_ci {0x5c, 0x12, 0x0d, 0xbb}, 6338c2ecf20Sopenharmony_ci {0x5d, 0x16, 0x11, 0xbb}, 6348c2ecf20Sopenharmony_ci {0x39, 0x06, 0x18, 0xbb}, 6358c2ecf20Sopenharmony_ci {0x3a, 0x06, 0x18, 0xbb}, 6368c2ecf20Sopenharmony_ci {0x3b, 0x06, 0x18, 0xbb}, 6378c2ecf20Sopenharmony_ci {0x3c, 0x06, 0x18, 0xbb}, 6388c2ecf20Sopenharmony_ci {0x64, 0x7b, 0x5b, 0xbb}, 6398c2ecf20Sopenharmony_ci {0xb6, 0x00, 0x00, 0xcc}, 6408c2ecf20Sopenharmony_ci {0xb6, 0x03, 0x05, 0xcc}, 6418c2ecf20Sopenharmony_ci {0xb6, 0x02, 0x00, 0xcc}, 6428c2ecf20Sopenharmony_ci {0xb6, 0x05, 0x03, 0xcc}, 6438c2ecf20Sopenharmony_ci {0xb6, 0x04, 0xc0, 0xcc}, 6448c2ecf20Sopenharmony_ci {0xb6, 0x12, 0xf8, 0xcc}, 6458c2ecf20Sopenharmony_ci {0xb6, 0x13, 0x29, 0xcc}, 6468c2ecf20Sopenharmony_ci {0xb6, 0x18, 0x09, 0xcc}, 6478c2ecf20Sopenharmony_ci {0xb6, 0x17, 0x60, 0xcc}, 6488c2ecf20Sopenharmony_ci {0xb6, 0x16, 0x00, 0xcc}, 6498c2ecf20Sopenharmony_ci {0xb6, 0x22, 0x12, 0xcc}, 6508c2ecf20Sopenharmony_ci {0xb6, 0x23, 0x0b, 0xcc}, 6518c2ecf20Sopenharmony_ci {0xbf, 0xc0, 0x39, 0xcc}, 6528c2ecf20Sopenharmony_ci {0xbf, 0xc1, 0x04, 0xcc}, 6538c2ecf20Sopenharmony_ci {0xbf, 0xcc, 0x00, 0xcc}, 6548c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x41, 0xcc}, 6558c2ecf20Sopenharmony_ci {0x00, 0x00, 0x80, 0xdd}, 6568c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 6578c2ecf20Sopenharmony_ci {0x00, 0x00, 0x10, 0xdd}, 6588c2ecf20Sopenharmony_ci {0x22, 0xa0, 0x78, 0xbb}, 6598c2ecf20Sopenharmony_ci {0x23, 0xa0, 0x78, 0xbb}, 6608c2ecf20Sopenharmony_ci {0x24, 0x7f, 0x00, 0xbb}, 6618c2ecf20Sopenharmony_ci {0x28, 0xea, 0x02, 0xbb}, 6628c2ecf20Sopenharmony_ci {0x29, 0x86, 0x7a, 0xbb}, 6638c2ecf20Sopenharmony_ci {0x5e, 0x52, 0x4c, 0xbb}, 6648c2ecf20Sopenharmony_ci {0x5f, 0x20, 0x24, 0xbb}, 6658c2ecf20Sopenharmony_ci {0x60, 0x00, 0x02, 0xbb}, 6668c2ecf20Sopenharmony_ci {0x02, 0x00, 0xee, 0xbb}, 6678c2ecf20Sopenharmony_ci {0x03, 0x39, 0x23, 0xbb}, 6688c2ecf20Sopenharmony_ci {0x04, 0x07, 0x24, 0xbb}, 6698c2ecf20Sopenharmony_ci {0x09, 0x00, 0xc0, 0xbb}, 6708c2ecf20Sopenharmony_ci {0x0a, 0x00, 0x79, 0xbb}, 6718c2ecf20Sopenharmony_ci {0x0b, 0x00, 0x04, 0xbb}, 6728c2ecf20Sopenharmony_ci {0x0c, 0x00, 0x5c, 0xbb}, 6738c2ecf20Sopenharmony_ci {0x0d, 0x00, 0xd9, 0xbb}, 6748c2ecf20Sopenharmony_ci {0x0e, 0x00, 0x53, 0xbb}, 6758c2ecf20Sopenharmony_ci {0x0f, 0x00, 0x21, 0xbb}, 6768c2ecf20Sopenharmony_ci {0x10, 0x00, 0xa4, 0xbb}, 6778c2ecf20Sopenharmony_ci {0x11, 0x00, 0xe5, 0xbb}, 6788c2ecf20Sopenharmony_ci {0x15, 0x00, 0x00, 0xbb}, 6798c2ecf20Sopenharmony_ci {0x16, 0x00, 0x00, 0xbb}, 6808c2ecf20Sopenharmony_ci {0x17, 0x00, 0x00, 0xbb}, 6818c2ecf20Sopenharmony_ci {0x18, 0x00, 0x00, 0xbb}, 6828c2ecf20Sopenharmony_ci {0x19, 0x00, 0x00, 0xbb}, 6838c2ecf20Sopenharmony_ci {0x1a, 0x00, 0x00, 0xbb}, 6848c2ecf20Sopenharmony_ci {0x1b, 0x00, 0x00, 0xbb}, 6858c2ecf20Sopenharmony_ci {0x1c, 0x00, 0x00, 0xbb}, 6868c2ecf20Sopenharmony_ci {0x1d, 0x00, 0x00, 0xbb}, 6878c2ecf20Sopenharmony_ci {0x1e, 0x00, 0x00, 0xbb}, 6888c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x01, 0xbb}, 6898c2ecf20Sopenharmony_ci {0x00, 0x00, 0x20, 0xdd}, 6908c2ecf20Sopenharmony_ci {0x06, 0xf0, 0x8e, 0xbb}, 6918c2ecf20Sopenharmony_ci {0x00, 0x00, 0x80, 0xdd}, 6928c2ecf20Sopenharmony_ci {0x06, 0x70, 0x8e, 0xbb}, 6938c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 6948c2ecf20Sopenharmony_ci {0x00, 0x00, 0x20, 0xdd}, 6958c2ecf20Sopenharmony_ci {0x5e, 0x6a, 0x53, 0xbb}, 6968c2ecf20Sopenharmony_ci {0x5f, 0x40, 0x2c, 0xbb}, 6978c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x01, 0xbb}, 6988c2ecf20Sopenharmony_ci {0x00, 0x00, 0x20, 0xdd}, 6998c2ecf20Sopenharmony_ci {0x58, 0x00, 0x00, 0xbb}, 7008c2ecf20Sopenharmony_ci {0x53, 0x09, 0x03, 0xbb}, 7018c2ecf20Sopenharmony_ci {0x54, 0x31, 0x18, 0xbb}, 7028c2ecf20Sopenharmony_ci {0x55, 0x8b, 0x5f, 0xbb}, 7038c2ecf20Sopenharmony_ci {0x56, 0xc0, 0xa9, 0xbb}, 7048c2ecf20Sopenharmony_ci {0x57, 0xe0, 0xd2, 0xbb}, 7058c2ecf20Sopenharmony_ci {0xe1, 0x00, 0x00, 0xbb}, 7068c2ecf20Sopenharmony_ci {0xdc, 0x09, 0x03, 0xbb}, 7078c2ecf20Sopenharmony_ci {0xdd, 0x31, 0x18, 0xbb}, 7088c2ecf20Sopenharmony_ci {0xde, 0x8b, 0x5f, 0xbb}, 7098c2ecf20Sopenharmony_ci {0xdf, 0xc0, 0xa9, 0xbb}, 7108c2ecf20Sopenharmony_ci {0xe0, 0xe0, 0xd2, 0xbb}, 7118c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, 7128c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x01, 0xbb}, 7138c2ecf20Sopenharmony_ci {0x06, 0xf0, 0x8e, 0xbb}, 7148c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 7158c2ecf20Sopenharmony_ci {0x2f, 0xde, 0x20, 0xbb}, 7168c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 7178c2ecf20Sopenharmony_ci {0x24, 0x50, 0x20, 0xbb}, 7188c2ecf20Sopenharmony_ci {0xbc, 0x0e, 0x00, 0xcc}, 7198c2ecf20Sopenharmony_ci {0xbc, 0x0f, 0x05, 0xcc}, 7208c2ecf20Sopenharmony_ci {0xbc, 0x10, 0xc0, 0xcc}, 7218c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 7228c2ecf20Sopenharmony_ci {0x34, 0x0c, 0x50, 0xbb}, 7238c2ecf20Sopenharmony_ci {0xbc, 0x11, 0x03, 0xcc}, 7248c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x01, 0xbb}, 7258c2ecf20Sopenharmony_ci {0x80, 0x00, 0x03, 0xbb}, 7268c2ecf20Sopenharmony_ci {0x81, 0xc7, 0x14, 0xbb}, 7278c2ecf20Sopenharmony_ci {0x82, 0xeb, 0xe8, 0xbb}, 7288c2ecf20Sopenharmony_ci {0x83, 0xfe, 0xf4, 0xbb}, 7298c2ecf20Sopenharmony_ci {0x84, 0xcd, 0x10, 0xbb}, 7308c2ecf20Sopenharmony_ci {0x85, 0xf3, 0xee, 0xbb}, 7318c2ecf20Sopenharmony_ci {0x86, 0xff, 0xf1, 0xbb}, 7328c2ecf20Sopenharmony_ci {0x87, 0xcd, 0x10, 0xbb}, 7338c2ecf20Sopenharmony_ci {0x88, 0xf3, 0xee, 0xbb}, 7348c2ecf20Sopenharmony_ci {0x89, 0x01, 0xf1, 0xbb}, 7358c2ecf20Sopenharmony_ci {0x8a, 0xe5, 0x17, 0xbb}, 7368c2ecf20Sopenharmony_ci {0x8b, 0xe8, 0xe2, 0xbb}, 7378c2ecf20Sopenharmony_ci {0x8c, 0xf7, 0xed, 0xbb}, 7388c2ecf20Sopenharmony_ci {0x8d, 0x00, 0xff, 0xbb}, 7398c2ecf20Sopenharmony_ci {0x8e, 0xec, 0x10, 0xbb}, 7408c2ecf20Sopenharmony_ci {0x8f, 0xf0, 0xed, 0xbb}, 7418c2ecf20Sopenharmony_ci {0x90, 0xf9, 0xf2, 0xbb}, 7428c2ecf20Sopenharmony_ci {0x91, 0x00, 0x00, 0xbb}, 7438c2ecf20Sopenharmony_ci {0x92, 0xe9, 0x0d, 0xbb}, 7448c2ecf20Sopenharmony_ci {0x93, 0xf4, 0xf2, 0xbb}, 7458c2ecf20Sopenharmony_ci {0x94, 0xfb, 0xf5, 0xbb}, 7468c2ecf20Sopenharmony_ci {0x95, 0x00, 0xff, 0xbb}, 7478c2ecf20Sopenharmony_ci {0xb6, 0x0f, 0x08, 0xbb}, 7488c2ecf20Sopenharmony_ci {0xb7, 0x3d, 0x16, 0xbb}, 7498c2ecf20Sopenharmony_ci {0xb8, 0x0c, 0x04, 0xbb}, 7508c2ecf20Sopenharmony_ci {0xb9, 0x1c, 0x07, 0xbb}, 7518c2ecf20Sopenharmony_ci {0xba, 0x0a, 0x03, 0xbb}, 7528c2ecf20Sopenharmony_ci {0xbb, 0x1b, 0x09, 0xbb}, 7538c2ecf20Sopenharmony_ci {0xbc, 0x17, 0x0d, 0xbb}, 7548c2ecf20Sopenharmony_ci {0xbd, 0x23, 0x1d, 0xbb}, 7558c2ecf20Sopenharmony_ci {0xbe, 0x00, 0x28, 0xbb}, 7568c2ecf20Sopenharmony_ci {0xbf, 0x11, 0x09, 0xbb}, 7578c2ecf20Sopenharmony_ci {0xc0, 0x16, 0x15, 0xbb}, 7588c2ecf20Sopenharmony_ci {0xc1, 0x00, 0x1b, 0xbb}, 7598c2ecf20Sopenharmony_ci {0xc2, 0x0e, 0x07, 0xbb}, 7608c2ecf20Sopenharmony_ci {0xc3, 0x14, 0x10, 0xbb}, 7618c2ecf20Sopenharmony_ci {0xc4, 0x00, 0x17, 0xbb}, 7628c2ecf20Sopenharmony_ci {0x06, 0x74, 0x8e, 0xbb}, 7638c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x00, 0xbb}, 7648c2ecf20Sopenharmony_ci {0x03, 0x03, 0xc0, 0xbb}, 7658c2ecf20Sopenharmony_ci {} 7668c2ecf20Sopenharmony_ci}; 7678c2ecf20Sopenharmony_ci 7688c2ecf20Sopenharmony_cistatic const u8 mi1320_gamma[17] = { 7698c2ecf20Sopenharmony_ci 0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8, 7708c2ecf20Sopenharmony_ci 0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff 7718c2ecf20Sopenharmony_ci}; 7728c2ecf20Sopenharmony_cistatic const u8 mi1320_matrix[9] = { 7738c2ecf20Sopenharmony_ci 0x54, 0xda, 0x06, 0xf1, 0x50, 0xf4, 0xf7, 0xea, 0x52 7748c2ecf20Sopenharmony_ci}; 7758c2ecf20Sopenharmony_cistatic const u8 mi1320_initVGA_data[][4] = { 7768c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x01, 0xcc}, {0x00, 0x00, 0x33, 0xdd}, 7778c2ecf20Sopenharmony_ci {0xb0, 0x03, 0x19, 0xcc}, {0x00, 0x00, 0x33, 0xdd}, 7788c2ecf20Sopenharmony_ci {0xb0, 0x04, 0x02, 0xcc}, {0x00, 0x00, 0x33, 0xdd}, 7798c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x64, 0xcc}, {0xb3, 0x00, 0x65, 0xcc}, 7808c2ecf20Sopenharmony_ci {0xb0, 0x16, 0x03, 0xcc}, {0xb3, 0x05, 0x00, 0xcc}, 7818c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x00, 0xcc}, {0xb3, 0x08, 0x01, 0xcc}, 7828c2ecf20Sopenharmony_ci {0xb3, 0x09, 0x0c, 0xcc}, {0xb3, 0x34, 0x02, 0xcc}, 7838c2ecf20Sopenharmony_ci {0xb3, 0x35, 0xc8, 0xcc}, /* i2c add: 48 */ 7848c2ecf20Sopenharmony_ci {0xb3, 0x02, 0x00, 0xcc}, 7858c2ecf20Sopenharmony_ci {0xb3, 0x03, 0x0a, 0xcc}, {0xb3, 0x04, 0x05, 0xcc}, 7868c2ecf20Sopenharmony_ci {0xb3, 0x20, 0x00, 0xcc}, {0xb3, 0x21, 0x00, 0xcc}, 7878c2ecf20Sopenharmony_ci {0xb3, 0x22, 0x03, 0xcc}, {0xb3, 0x23, 0xc0, 0xcc}, 7888c2ecf20Sopenharmony_ci {0xb3, 0x14, 0x00, 0xcc}, {0xb3, 0x15, 0x00, 0xcc}, 7898c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x04, 0xcc}, {0xb3, 0x17, 0xff, 0xcc}, 7908c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x67, 0xcc}, {0xbc, 0x00, 0xd0, 0xcc}, 7918c2ecf20Sopenharmony_ci {0xbc, 0x01, 0x01, 0xcc}, {0xf0, 0x00, 0x00, 0xbb}, 7928c2ecf20Sopenharmony_ci {0x0d, 0x00, 0x09, 0xbb}, {0x00, 0x01, 0x00, 0xdd}, 7938c2ecf20Sopenharmony_ci {0x0d, 0x00, 0x08, 0xbb}, {0xf0, 0x00, 0x01, 0xbb}, 7948c2ecf20Sopenharmony_ci {0xa1, 0x05, 0x00, 0xbb}, {0xa4, 0x03, 0xc0, 0xbb}, 7958c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, {0x00, 0x00, 0x10, 0xdd}, 7968c2ecf20Sopenharmony_ci {0xc8, 0x9f, 0x0b, 0xbb}, {0x00, 0x00, 0x10, 0xdd}, 7978c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x00, 0xbb}, {0x00, 0x00, 0x10, 0xdd}, 7988c2ecf20Sopenharmony_ci {0x20, 0x01, 0x00, 0xbb}, {0x00, 0x00, 0x10, 0xdd}, 7998c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x01, 0xbb}, {0x9d, 0x3c, 0xa0, 0xbb}, 8008c2ecf20Sopenharmony_ci {0x47, 0x30, 0x30, 0xbb}, {0xf0, 0x00, 0x00, 0xbb}, 8018c2ecf20Sopenharmony_ci {0x0a, 0x80, 0x11, 0xbb}, {0x35, 0x00, 0x22, 0xbb}, 8028c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, {0x9d, 0xc5, 0x05, 0xbb}, 8038c2ecf20Sopenharmony_ci {0xdc, 0x0f, 0xfc, 0xbb}, {0xf0, 0x00, 0x01, 0xbb}, 8048c2ecf20Sopenharmony_ci {0x06, 0x74, 0x0e, 0xbb}, {0x80, 0x00, 0x06, 0xbb}, 8058c2ecf20Sopenharmony_ci {0x81, 0x04, 0x00, 0xbb}, {0x82, 0x01, 0x02, 0xbb}, 8068c2ecf20Sopenharmony_ci {0x83, 0x03, 0x02, 0xbb}, {0x84, 0x05, 0x00, 0xbb}, 8078c2ecf20Sopenharmony_ci {0x85, 0x01, 0x00, 0xbb}, {0x86, 0x03, 0x02, 0xbb}, 8088c2ecf20Sopenharmony_ci {0x87, 0x05, 0x00, 0xbb}, {0x88, 0x01, 0x00, 0xbb}, 8098c2ecf20Sopenharmony_ci {0x89, 0x02, 0x02, 0xbb}, {0x8a, 0xfd, 0x04, 0xbb}, 8108c2ecf20Sopenharmony_ci {0x8b, 0xfc, 0xfd, 0xbb}, {0x8c, 0xff, 0xfd, 0xbb}, 8118c2ecf20Sopenharmony_ci {0x8d, 0x00, 0x00, 0xbb}, {0x8e, 0xfe, 0x05, 0xbb}, 8128c2ecf20Sopenharmony_ci {0x8f, 0xfc, 0xfd, 0xbb}, {0x90, 0xfe, 0xfd, 0xbb}, 8138c2ecf20Sopenharmony_ci {0x91, 0x00, 0x00, 0xbb}, {0x92, 0xfe, 0x03, 0xbb}, 8148c2ecf20Sopenharmony_ci {0x93, 0xfd, 0xfe, 0xbb}, {0x94, 0xff, 0xfd, 0xbb}, 8158c2ecf20Sopenharmony_ci {0x95, 0x00, 0x00, 0xbb}, {0xb6, 0x07, 0x05, 0xbb}, 8168c2ecf20Sopenharmony_ci {0xb7, 0x13, 0x06, 0xbb}, {0xb8, 0x08, 0x06, 0xbb}, 8178c2ecf20Sopenharmony_ci {0xb9, 0x14, 0x08, 0xbb}, {0xba, 0x06, 0x05, 0xbb}, 8188c2ecf20Sopenharmony_ci {0xbb, 0x13, 0x06, 0xbb}, {0xbc, 0x03, 0x01, 0xbb}, 8198c2ecf20Sopenharmony_ci {0xbd, 0x03, 0x04, 0xbb}, {0xbe, 0x00, 0x02, 0xbb}, 8208c2ecf20Sopenharmony_ci {0xbf, 0x03, 0x01, 0xbb}, {0xc0, 0x02, 0x04, 0xbb}, 8218c2ecf20Sopenharmony_ci {0xc1, 0x00, 0x04, 0xbb}, {0xc2, 0x02, 0x01, 0xbb}, 8228c2ecf20Sopenharmony_ci {0xc3, 0x01, 0x03, 0xbb}, {0xc4, 0x00, 0x04, 0xbb}, 8238c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x00, 0xbb}, {0x05, 0x01, 0x13, 0xbb}, 8248c2ecf20Sopenharmony_ci {0x06, 0x00, 0x11, 0xbb}, {0x07, 0x00, 0x85, 0xbb}, 8258c2ecf20Sopenharmony_ci {0x08, 0x00, 0x27, 0xbb}, 8268c2ecf20Sopenharmony_ci {0x20, 0x01, 0x00, 0xbb}, /* h/v flips - was 03 */ 8278c2ecf20Sopenharmony_ci {0x21, 0x80, 0x00, 0xbb}, {0x22, 0x0d, 0x0f, 0xbb}, 8288c2ecf20Sopenharmony_ci {0x24, 0x80, 0x00, 0xbb}, {0x59, 0x00, 0xff, 0xbb}, 8298c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, {0x39, 0x03, 0x0d, 0xbb}, 8308c2ecf20Sopenharmony_ci {0x3a, 0x06, 0x1b, 0xbb}, {0x3b, 0x00, 0x95, 0xbb}, 8318c2ecf20Sopenharmony_ci {0x3c, 0x04, 0xdb, 0xbb}, {0x57, 0x02, 0x00, 0xbb}, 8328c2ecf20Sopenharmony_ci {0x58, 0x02, 0x66, 0xbb}, {0x59, 0x00, 0xff, 0xbb}, 8338c2ecf20Sopenharmony_ci {0x5a, 0x01, 0x33, 0xbb}, {0x5c, 0x12, 0x0d, 0xbb}, 8348c2ecf20Sopenharmony_ci {0x5d, 0x16, 0x11, 0xbb}, {0x64, 0x5e, 0x1c, 0xbb}, 8358c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, {0x2f, 0xd1, 0x00, 0xbb}, 8368c2ecf20Sopenharmony_ci {0x5b, 0x00, 0x01, 0xbb}, {0xf0, 0x00, 0x02, 0xbb}, 8378c2ecf20Sopenharmony_ci {0x36, 0x68, 0x10, 0xbb}, {0x00, 0x00, 0x30, 0xdd}, 8388c2ecf20Sopenharmony_ci {0x37, 0x82, 0x00, 0xbb}, {0xbc, 0x0e, 0x00, 0xcc}, 8398c2ecf20Sopenharmony_ci {0xbc, 0x0f, 0x05, 0xcc}, {0xbc, 0x10, 0xc0, 0xcc}, 8408c2ecf20Sopenharmony_ci {0xbc, 0x11, 0x03, 0xcc}, {0xb6, 0x00, 0x00, 0xcc}, 8418c2ecf20Sopenharmony_ci {0xb6, 0x03, 0x05, 0xcc}, {0xb6, 0x02, 0x00, 0xcc}, 8428c2ecf20Sopenharmony_ci {0xb6, 0x05, 0x04, 0xcc}, {0xb6, 0x04, 0x00, 0xcc}, 8438c2ecf20Sopenharmony_ci {0xb6, 0x12, 0xf8, 0xcc}, {0xb6, 0x13, 0x29, 0xcc}, 8448c2ecf20Sopenharmony_ci {0xb6, 0x18, 0x0a, 0xcc}, {0xb6, 0x17, 0x00, 0xcc}, 8458c2ecf20Sopenharmony_ci {0xb6, 0x16, 0x00, 0xcc}, {0xb6, 0x22, 0x12, 0xcc}, 8468c2ecf20Sopenharmony_ci {0xb6, 0x23, 0x0b, 0xcc}, {0xbf, 0xc0, 0x26, 0xcc}, 8478c2ecf20Sopenharmony_ci {0xbf, 0xc1, 0x02, 0xcc}, {0xbf, 0xcc, 0x04, 0xcc}, 8488c2ecf20Sopenharmony_ci {0xbc, 0x02, 0x18, 0xcc}, {0xbc, 0x03, 0x50, 0xcc}, 8498c2ecf20Sopenharmony_ci {0xbc, 0x04, 0x18, 0xcc}, {0xbc, 0x05, 0x00, 0xcc}, 8508c2ecf20Sopenharmony_ci {0xbc, 0x06, 0x00, 0xcc}, {0xbc, 0x08, 0x30, 0xcc}, 8518c2ecf20Sopenharmony_ci {0xbc, 0x09, 0x40, 0xcc}, {0xbc, 0x0a, 0x10, 0xcc}, 8528c2ecf20Sopenharmony_ci {0xbc, 0x0b, 0x00, 0xcc}, {0xbc, 0x0c, 0x00, 0xcc}, 8538c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, {0xb3, 0x01, 0x41, 0xcc}, 8548c2ecf20Sopenharmony_ci {} 8558c2ecf20Sopenharmony_ci}; 8568c2ecf20Sopenharmony_cistatic const u8 mi1320_initQVGA_data[][4] = { 8578c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x01, 0xcc}, {0x00, 0x00, 0x33, 0xdd}, 8588c2ecf20Sopenharmony_ci {0xb0, 0x03, 0x19, 0xcc}, {0x00, 0x00, 0x33, 0xdd}, 8598c2ecf20Sopenharmony_ci {0xb0, 0x04, 0x02, 0xcc}, {0x00, 0x00, 0x33, 0xdd}, 8608c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x64, 0xcc}, {0xb3, 0x00, 0x65, 0xcc}, 8618c2ecf20Sopenharmony_ci {0xb0, 0x16, 0x03, 0xcc}, {0xb3, 0x05, 0x01, 0xcc}, 8628c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x01, 0xcc}, {0xb3, 0x08, 0x01, 0xcc}, 8638c2ecf20Sopenharmony_ci {0xb3, 0x09, 0x0c, 0xcc}, {0xb3, 0x34, 0x02, 0xcc}, 8648c2ecf20Sopenharmony_ci {0xb3, 0x35, 0xc8, 0xcc}, {0xb3, 0x02, 0x00, 0xcc}, 8658c2ecf20Sopenharmony_ci {0xb3, 0x03, 0x0a, 0xcc}, {0xb3, 0x04, 0x05, 0xcc}, 8668c2ecf20Sopenharmony_ci {0xb3, 0x20, 0x00, 0xcc}, {0xb3, 0x21, 0x00, 0xcc}, 8678c2ecf20Sopenharmony_ci {0xb3, 0x22, 0x01, 0xcc}, {0xb3, 0x23, 0xe0, 0xcc}, 8688c2ecf20Sopenharmony_ci {0xb3, 0x14, 0x00, 0xcc}, {0xb3, 0x15, 0x00, 0xcc}, 8698c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x02, 0xcc}, {0xb3, 0x17, 0x7f, 0xcc}, 8708c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x65, 0xcc}, {0xb8, 0x00, 0x00, 0xcc}, 8718c2ecf20Sopenharmony_ci {0xbc, 0x00, 0xd0, 0xcc}, {0xbc, 0x01, 0x01, 0xcc}, 8728c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x00, 0xbb}, {0x0d, 0x00, 0x09, 0xbb}, 8738c2ecf20Sopenharmony_ci {0x00, 0x01, 0x00, 0xdd}, {0x0d, 0x00, 0x08, 0xbb}, 8748c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x00, 0xbb}, {0x02, 0x00, 0x64, 0xbb}, 8758c2ecf20Sopenharmony_ci {0x05, 0x01, 0x78, 0xbb}, {0x06, 0x00, 0x11, 0xbb}, 8768c2ecf20Sopenharmony_ci {0x07, 0x01, 0x42, 0xbb}, {0x08, 0x00, 0x11, 0xbb}, 8778c2ecf20Sopenharmony_ci {0x20, 0x01, 0x00, 0xbb}, {0x21, 0x80, 0x00, 0xbb}, 8788c2ecf20Sopenharmony_ci {0x22, 0x0d, 0x0f, 0xbb}, {0x24, 0x80, 0x00, 0xbb}, 8798c2ecf20Sopenharmony_ci {0x59, 0x00, 0xff, 0xbb}, {0xf0, 0x00, 0x01, 0xbb}, 8808c2ecf20Sopenharmony_ci {0x9d, 0x3c, 0xa0, 0xbb}, {0x47, 0x30, 0x30, 0xbb}, 8818c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x00, 0xbb}, {0x0a, 0x80, 0x11, 0xbb}, 8828c2ecf20Sopenharmony_ci {0x35, 0x00, 0x22, 0xbb}, {0xf0, 0x00, 0x02, 0xbb}, 8838c2ecf20Sopenharmony_ci {0x9d, 0xc5, 0x05, 0xbb}, {0xdc, 0x0f, 0xfc, 0xbb}, 8848c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x01, 0xbb}, {0x06, 0x74, 0x0e, 0xbb}, 8858c2ecf20Sopenharmony_ci {0x80, 0x00, 0x06, 0xbb}, {0x81, 0x04, 0x00, 0xbb}, 8868c2ecf20Sopenharmony_ci {0x82, 0x01, 0x02, 0xbb}, {0x83, 0x03, 0x02, 0xbb}, 8878c2ecf20Sopenharmony_ci {0x84, 0x05, 0x00, 0xbb}, {0x85, 0x01, 0x00, 0xbb}, 8888c2ecf20Sopenharmony_ci {0x86, 0x03, 0x02, 0xbb}, {0x87, 0x05, 0x00, 0xbb}, 8898c2ecf20Sopenharmony_ci {0x88, 0x01, 0x00, 0xbb}, {0x89, 0x02, 0x02, 0xbb}, 8908c2ecf20Sopenharmony_ci {0x8a, 0xfd, 0x04, 0xbb}, {0x8b, 0xfc, 0xfd, 0xbb}, 8918c2ecf20Sopenharmony_ci {0x8c, 0xff, 0xfd, 0xbb}, {0x8d, 0x00, 0x00, 0xbb}, 8928c2ecf20Sopenharmony_ci {0x8e, 0xfe, 0x05, 0xbb}, {0x8f, 0xfc, 0xfd, 0xbb}, 8938c2ecf20Sopenharmony_ci {0x90, 0xfe, 0xfd, 0xbb}, {0x91, 0x00, 0x00, 0xbb}, 8948c2ecf20Sopenharmony_ci {0x92, 0xfe, 0x03, 0xbb}, {0x93, 0xfd, 0xfe, 0xbb}, 8958c2ecf20Sopenharmony_ci {0x94, 0xff, 0xfd, 0xbb}, {0x95, 0x00, 0x00, 0xbb}, 8968c2ecf20Sopenharmony_ci {0xb6, 0x07, 0x05, 0xbb}, {0xb7, 0x13, 0x06, 0xbb}, 8978c2ecf20Sopenharmony_ci {0xb8, 0x08, 0x06, 0xbb}, {0xb9, 0x14, 0x08, 0xbb}, 8988c2ecf20Sopenharmony_ci {0xba, 0x06, 0x05, 0xbb}, {0xbb, 0x13, 0x06, 0xbb}, 8998c2ecf20Sopenharmony_ci {0xbc, 0x03, 0x01, 0xbb}, {0xbd, 0x03, 0x04, 0xbb}, 9008c2ecf20Sopenharmony_ci {0xbe, 0x00, 0x02, 0xbb}, {0xbf, 0x03, 0x01, 0xbb}, 9018c2ecf20Sopenharmony_ci {0xc0, 0x02, 0x04, 0xbb}, {0xc1, 0x00, 0x04, 0xbb}, 9028c2ecf20Sopenharmony_ci {0xc2, 0x02, 0x01, 0xbb}, {0xc3, 0x01, 0x03, 0xbb}, 9038c2ecf20Sopenharmony_ci {0xc4, 0x00, 0x04, 0xbb}, {0xf0, 0x00, 0x02, 0xbb}, 9048c2ecf20Sopenharmony_ci {0xc8, 0x00, 0x00, 0xbb}, {0x2e, 0x00, 0x00, 0xbb}, 9058c2ecf20Sopenharmony_ci {0x2e, 0x0c, 0x5b, 0xbb}, {0x2f, 0xd1, 0x00, 0xbb}, 9068c2ecf20Sopenharmony_ci {0x39, 0x03, 0xca, 0xbb}, {0x3a, 0x06, 0x80, 0xbb}, 9078c2ecf20Sopenharmony_ci {0x3b, 0x01, 0x52, 0xbb}, {0x3c, 0x05, 0x40, 0xbb}, 9088c2ecf20Sopenharmony_ci {0x57, 0x01, 0x9c, 0xbb}, {0x58, 0x01, 0xee, 0xbb}, 9098c2ecf20Sopenharmony_ci {0x59, 0x00, 0xf0, 0xbb}, {0x5a, 0x01, 0x20, 0xbb}, 9108c2ecf20Sopenharmony_ci {0x5c, 0x1d, 0x17, 0xbb}, {0x5d, 0x22, 0x1c, 0xbb}, 9118c2ecf20Sopenharmony_ci {0x64, 0x1e, 0x1c, 0xbb}, {0x5b, 0x00, 0x01, 0xbb}, 9128c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, {0x36, 0x68, 0x10, 0xbb}, 9138c2ecf20Sopenharmony_ci {0x00, 0x00, 0x30, 0xdd}, {0x37, 0x81, 0x00, 0xbb}, 9148c2ecf20Sopenharmony_ci {0xbc, 0x02, 0x18, 0xcc}, {0xbc, 0x03, 0x50, 0xcc}, 9158c2ecf20Sopenharmony_ci {0xbc, 0x04, 0x18, 0xcc}, {0xbc, 0x05, 0x00, 0xcc}, 9168c2ecf20Sopenharmony_ci {0xbc, 0x06, 0x00, 0xcc}, {0xbc, 0x08, 0x30, 0xcc}, 9178c2ecf20Sopenharmony_ci {0xbc, 0x09, 0x40, 0xcc}, {0xbc, 0x0a, 0x10, 0xcc}, 9188c2ecf20Sopenharmony_ci {0xbc, 0x0b, 0x00, 0xcc}, {0xbc, 0x0c, 0x00, 0xcc}, 9198c2ecf20Sopenharmony_ci {0xbf, 0xc0, 0x26, 0xcc}, {0xbf, 0xc1, 0x02, 0xcc}, 9208c2ecf20Sopenharmony_ci {0xbf, 0xcc, 0x04, 0xcc}, {0xb3, 0x5c, 0x01, 0xcc}, 9218c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x41, 0xcc}, 9228c2ecf20Sopenharmony_ci {} 9238c2ecf20Sopenharmony_ci}; 9248c2ecf20Sopenharmony_ci 9258c2ecf20Sopenharmony_cistatic const u8 mi1320_soc_InitVGA[][4] = { 9268c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x01, 0xcc}, 9278c2ecf20Sopenharmony_ci {0xb0, 0x03, 0x19, 0xcc}, 9288c2ecf20Sopenharmony_ci {0xb0, 0x04, 0x02, 0xcc}, 9298c2ecf20Sopenharmony_ci {0x00, 0x00, 0x30, 0xdd}, 9308c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x64, 0xcc}, 9318c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x67, 0xcc}, 9328c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x01, 0xcc}, 9338c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x01, 0xcc}, 9348c2ecf20Sopenharmony_ci {0xb3, 0x08, 0x01, 0xcc}, 9358c2ecf20Sopenharmony_ci {0xb3, 0x09, 0x0c, 0xcc}, 9368c2ecf20Sopenharmony_ci {0xb3, 0x34, 0x02, 0xcc}, 9378c2ecf20Sopenharmony_ci {0xb3, 0x35, 0xc8, 0xcc}, /* i2c add: 48 */ 9388c2ecf20Sopenharmony_ci {0xb3, 0x02, 0x00, 0xcc}, 9398c2ecf20Sopenharmony_ci {0xb3, 0x03, 0x0a, 0xcc}, 9408c2ecf20Sopenharmony_ci {0xb3, 0x04, 0x05, 0xcc}, 9418c2ecf20Sopenharmony_ci {0xb3, 0x20, 0x00, 0xcc}, 9428c2ecf20Sopenharmony_ci {0xb3, 0x21, 0x00, 0xcc}, 9438c2ecf20Sopenharmony_ci {0xb3, 0x22, 0x01, 0xcc}, 9448c2ecf20Sopenharmony_ci {0xb3, 0x23, 0xe0, 0xcc}, 9458c2ecf20Sopenharmony_ci {0xb3, 0x14, 0x00, 0xcc}, 9468c2ecf20Sopenharmony_ci {0xb3, 0x15, 0x00, 0xcc}, 9478c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x02, 0xcc}, 9488c2ecf20Sopenharmony_ci {0xb3, 0x17, 0x7f, 0xcc}, 9498c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x67, 0xcc}, 9508c2ecf20Sopenharmony_ci {0xb8, 0x00, 0x00, 0xcc}, 9518c2ecf20Sopenharmony_ci {0xbc, 0x00, 0x71, 0xcc}, 9528c2ecf20Sopenharmony_ci {0xbc, 0x01, 0x01, 0xcc}, 9538c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, 9548c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 9558c2ecf20Sopenharmony_ci {0x00, 0x00, 0x10, 0xdd}, 9568c2ecf20Sopenharmony_ci {0xc8, 0x00, 0x00, 0xbb}, 9578c2ecf20Sopenharmony_ci {0x00, 0x00, 0x30, 0xdd}, 9588c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x00, 0xbb}, 9598c2ecf20Sopenharmony_ci {0x00, 0x00, 0x10, 0xdd}, 9608c2ecf20Sopenharmony_ci {0x07, 0x00, 0xe0, 0xbb}, 9618c2ecf20Sopenharmony_ci {0x08, 0x00, 0x0b, 0xbb}, 9628c2ecf20Sopenharmony_ci {0x21, 0x00, 0x0c, 0xbb}, 9638c2ecf20Sopenharmony_ci {0x20, 0x01, 0x03, 0xbb}, /* h/v flip */ 9648c2ecf20Sopenharmony_ci {0xbf, 0xc0, 0x26, 0xcc}, 9658c2ecf20Sopenharmony_ci {0xbf, 0xc1, 0x02, 0xcc}, 9668c2ecf20Sopenharmony_ci {0xbf, 0xcc, 0x04, 0xcc}, 9678c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x41, 0xcc}, 9688c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x00, 0xbb}, 9698c2ecf20Sopenharmony_ci {0x05, 0x01, 0x78, 0xbb}, 9708c2ecf20Sopenharmony_ci {0x06, 0x00, 0x11, 0xbb}, 9718c2ecf20Sopenharmony_ci {0x07, 0x01, 0x42, 0xbb}, 9728c2ecf20Sopenharmony_ci {0x08, 0x00, 0x11, 0xbb}, 9738c2ecf20Sopenharmony_ci {0x20, 0x01, 0x03, 0xbb}, /* h/v flip */ 9748c2ecf20Sopenharmony_ci {0x21, 0x80, 0x00, 0xbb}, 9758c2ecf20Sopenharmony_ci {0x22, 0x0d, 0x0f, 0xbb}, 9768c2ecf20Sopenharmony_ci {0x24, 0x80, 0x00, 0xbb}, 9778c2ecf20Sopenharmony_ci {0x59, 0x00, 0xff, 0xbb}, 9788c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 9798c2ecf20Sopenharmony_ci {0x39, 0x03, 0xca, 0xbb}, 9808c2ecf20Sopenharmony_ci {0x3a, 0x06, 0x80, 0xbb}, 9818c2ecf20Sopenharmony_ci {0x3b, 0x01, 0x52, 0xbb}, 9828c2ecf20Sopenharmony_ci {0x3c, 0x05, 0x40, 0xbb}, 9838c2ecf20Sopenharmony_ci {0x57, 0x01, 0x9c, 0xbb}, 9848c2ecf20Sopenharmony_ci {0x58, 0x01, 0xee, 0xbb}, 9858c2ecf20Sopenharmony_ci {0x59, 0x00, 0xf0, 0xbb}, 9868c2ecf20Sopenharmony_ci {0x5a, 0x01, 0x20, 0xbb}, 9878c2ecf20Sopenharmony_ci {0x5c, 0x1d, 0x17, 0xbb}, 9888c2ecf20Sopenharmony_ci {0x5d, 0x22, 0x1c, 0xbb}, 9898c2ecf20Sopenharmony_ci {0x64, 0x1e, 0x1c, 0xbb}, 9908c2ecf20Sopenharmony_ci {0x5b, 0x00, 0x00, 0xbb}, 9918c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 9928c2ecf20Sopenharmony_ci {0x22, 0xa0, 0x78, 0xbb}, 9938c2ecf20Sopenharmony_ci {0x23, 0xa0, 0x78, 0xbb}, 9948c2ecf20Sopenharmony_ci {0x24, 0x7f, 0x00, 0xbb}, 9958c2ecf20Sopenharmony_ci {0x28, 0xea, 0x02, 0xbb}, 9968c2ecf20Sopenharmony_ci {0x29, 0x86, 0x7a, 0xbb}, 9978c2ecf20Sopenharmony_ci {0x5e, 0x52, 0x4c, 0xbb}, 9988c2ecf20Sopenharmony_ci {0x5f, 0x20, 0x24, 0xbb}, 9998c2ecf20Sopenharmony_ci {0x60, 0x00, 0x02, 0xbb}, 10008c2ecf20Sopenharmony_ci {0x02, 0x00, 0xee, 0xbb}, 10018c2ecf20Sopenharmony_ci {0x03, 0x39, 0x23, 0xbb}, 10028c2ecf20Sopenharmony_ci {0x04, 0x07, 0x24, 0xbb}, 10038c2ecf20Sopenharmony_ci {0x09, 0x00, 0xc0, 0xbb}, 10048c2ecf20Sopenharmony_ci {0x0a, 0x00, 0x79, 0xbb}, 10058c2ecf20Sopenharmony_ci {0x0b, 0x00, 0x04, 0xbb}, 10068c2ecf20Sopenharmony_ci {0x0c, 0x00, 0x5c, 0xbb}, 10078c2ecf20Sopenharmony_ci {0x0d, 0x00, 0xd9, 0xbb}, 10088c2ecf20Sopenharmony_ci {0x0e, 0x00, 0x53, 0xbb}, 10098c2ecf20Sopenharmony_ci {0x0f, 0x00, 0x21, 0xbb}, 10108c2ecf20Sopenharmony_ci {0x10, 0x00, 0xa4, 0xbb}, 10118c2ecf20Sopenharmony_ci {0x11, 0x00, 0xe5, 0xbb}, 10128c2ecf20Sopenharmony_ci {0x15, 0x00, 0x00, 0xbb}, 10138c2ecf20Sopenharmony_ci {0x16, 0x00, 0x00, 0xbb}, 10148c2ecf20Sopenharmony_ci {0x17, 0x00, 0x00, 0xbb}, 10158c2ecf20Sopenharmony_ci {0x18, 0x00, 0x00, 0xbb}, 10168c2ecf20Sopenharmony_ci {0x19, 0x00, 0x00, 0xbb}, 10178c2ecf20Sopenharmony_ci {0x1a, 0x00, 0x00, 0xbb}, 10188c2ecf20Sopenharmony_ci {0x1b, 0x00, 0x00, 0xbb}, 10198c2ecf20Sopenharmony_ci {0x1c, 0x00, 0x00, 0xbb}, 10208c2ecf20Sopenharmony_ci {0x1d, 0x00, 0x00, 0xbb}, 10218c2ecf20Sopenharmony_ci {0x1e, 0x00, 0x00, 0xbb}, 10228c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x01, 0xbb}, 10238c2ecf20Sopenharmony_ci {0x06, 0xe0, 0x0e, 0xbb}, 10248c2ecf20Sopenharmony_ci {0x06, 0x60, 0x0e, 0xbb}, 10258c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, 10268c2ecf20Sopenharmony_ci {} 10278c2ecf20Sopenharmony_ci}; 10288c2ecf20Sopenharmony_cistatic const u8 mi1320_soc_InitQVGA[][4] = { 10298c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x01, 0xcc}, 10308c2ecf20Sopenharmony_ci {0xb0, 0x03, 0x19, 0xcc}, 10318c2ecf20Sopenharmony_ci {0xb0, 0x04, 0x02, 0xcc}, 10328c2ecf20Sopenharmony_ci {0x00, 0x00, 0x30, 0xdd}, 10338c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x64, 0xcc}, 10348c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x67, 0xcc}, 10358c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x01, 0xcc}, 10368c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x01, 0xcc}, 10378c2ecf20Sopenharmony_ci {0xb3, 0x08, 0x01, 0xcc}, 10388c2ecf20Sopenharmony_ci {0xb3, 0x09, 0x0c, 0xcc}, 10398c2ecf20Sopenharmony_ci {0xb3, 0x34, 0x02, 0xcc}, 10408c2ecf20Sopenharmony_ci {0xb3, 0x35, 0xc8, 0xcc}, 10418c2ecf20Sopenharmony_ci {0xb3, 0x02, 0x00, 0xcc}, 10428c2ecf20Sopenharmony_ci {0xb3, 0x03, 0x0a, 0xcc}, 10438c2ecf20Sopenharmony_ci {0xb3, 0x04, 0x05, 0xcc}, 10448c2ecf20Sopenharmony_ci {0xb3, 0x20, 0x00, 0xcc}, 10458c2ecf20Sopenharmony_ci {0xb3, 0x21, 0x00, 0xcc}, 10468c2ecf20Sopenharmony_ci {0xb3, 0x22, 0x01, 0xcc}, 10478c2ecf20Sopenharmony_ci {0xb3, 0x23, 0xe0, 0xcc}, 10488c2ecf20Sopenharmony_ci {0xb3, 0x14, 0x00, 0xcc}, 10498c2ecf20Sopenharmony_ci {0xb3, 0x15, 0x00, 0xcc}, 10508c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x02, 0xcc}, 10518c2ecf20Sopenharmony_ci {0xb3, 0x17, 0x7f, 0xcc}, 10528c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x67, 0xcc}, 10538c2ecf20Sopenharmony_ci {0xb8, 0x00, 0x00, 0xcc}, 10548c2ecf20Sopenharmony_ci {0xbc, 0x00, 0xd1, 0xcc}, 10558c2ecf20Sopenharmony_ci {0xbc, 0x01, 0x01, 0xcc}, 10568c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, 10578c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 10588c2ecf20Sopenharmony_ci {0x00, 0x00, 0x10, 0xdd}, 10598c2ecf20Sopenharmony_ci {0xc8, 0x00, 0x00, 0xbb}, 10608c2ecf20Sopenharmony_ci {0x00, 0x00, 0x30, 0xdd}, 10618c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x00, 0xbb}, 10628c2ecf20Sopenharmony_ci {0x00, 0x00, 0x10, 0xdd}, 10638c2ecf20Sopenharmony_ci {0x07, 0x00, 0xe0, 0xbb}, 10648c2ecf20Sopenharmony_ci {0x08, 0x00, 0x0b, 0xbb}, 10658c2ecf20Sopenharmony_ci {0x21, 0x00, 0x0c, 0xbb}, 10668c2ecf20Sopenharmony_ci {0x20, 0x01, 0x03, 0xbb}, /* h/v flip */ 10678c2ecf20Sopenharmony_ci {0xbf, 0xc0, 0x26, 0xcc}, 10688c2ecf20Sopenharmony_ci {0xbf, 0xc1, 0x02, 0xcc}, 10698c2ecf20Sopenharmony_ci {0xbf, 0xcc, 0x04, 0xcc}, 10708c2ecf20Sopenharmony_ci {0xbc, 0x02, 0x18, 0xcc}, 10718c2ecf20Sopenharmony_ci {0xbc, 0x03, 0x50, 0xcc}, 10728c2ecf20Sopenharmony_ci {0xbc, 0x04, 0x18, 0xcc}, 10738c2ecf20Sopenharmony_ci {0xbc, 0x05, 0x00, 0xcc}, 10748c2ecf20Sopenharmony_ci {0xbc, 0x06, 0x00, 0xcc}, 10758c2ecf20Sopenharmony_ci {0xbc, 0x08, 0x30, 0xcc}, 10768c2ecf20Sopenharmony_ci {0xbc, 0x09, 0x40, 0xcc}, 10778c2ecf20Sopenharmony_ci {0xbc, 0x0a, 0x10, 0xcc}, 10788c2ecf20Sopenharmony_ci {0xbc, 0x0b, 0x00, 0xcc}, 10798c2ecf20Sopenharmony_ci {0xbc, 0x0c, 0x00, 0xcc}, 10808c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x41, 0xcc}, 10818c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x00, 0xbb}, 10828c2ecf20Sopenharmony_ci {0x05, 0x01, 0x78, 0xbb}, 10838c2ecf20Sopenharmony_ci {0x06, 0x00, 0x11, 0xbb}, 10848c2ecf20Sopenharmony_ci {0x07, 0x01, 0x42, 0xbb}, 10858c2ecf20Sopenharmony_ci {0x08, 0x00, 0x11, 0xbb}, 10868c2ecf20Sopenharmony_ci {0x20, 0x01, 0x03, 0xbb}, /* h/v flip */ 10878c2ecf20Sopenharmony_ci {0x21, 0x80, 0x00, 0xbb}, 10888c2ecf20Sopenharmony_ci {0x22, 0x0d, 0x0f, 0xbb}, 10898c2ecf20Sopenharmony_ci {0x24, 0x80, 0x00, 0xbb}, 10908c2ecf20Sopenharmony_ci {0x59, 0x00, 0xff, 0xbb}, 10918c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 10928c2ecf20Sopenharmony_ci {0x39, 0x03, 0xca, 0xbb}, 10938c2ecf20Sopenharmony_ci {0x3a, 0x06, 0x80, 0xbb}, 10948c2ecf20Sopenharmony_ci {0x3b, 0x01, 0x52, 0xbb}, 10958c2ecf20Sopenharmony_ci {0x3c, 0x05, 0x40, 0xbb}, 10968c2ecf20Sopenharmony_ci {0x57, 0x01, 0x9c, 0xbb}, 10978c2ecf20Sopenharmony_ci {0x58, 0x01, 0xee, 0xbb}, 10988c2ecf20Sopenharmony_ci {0x59, 0x00, 0xf0, 0xbb}, 10998c2ecf20Sopenharmony_ci {0x5a, 0x01, 0x20, 0xbb}, 11008c2ecf20Sopenharmony_ci {0x5c, 0x1d, 0x17, 0xbb}, 11018c2ecf20Sopenharmony_ci {0x5d, 0x22, 0x1c, 0xbb}, 11028c2ecf20Sopenharmony_ci {0x64, 0x1e, 0x1c, 0xbb}, 11038c2ecf20Sopenharmony_ci {0x5b, 0x00, 0x00, 0xbb}, 11048c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 11058c2ecf20Sopenharmony_ci {0x22, 0xa0, 0x78, 0xbb}, 11068c2ecf20Sopenharmony_ci {0x23, 0xa0, 0x78, 0xbb}, 11078c2ecf20Sopenharmony_ci {0x24, 0x7f, 0x00, 0xbb}, 11088c2ecf20Sopenharmony_ci {0x28, 0xea, 0x02, 0xbb}, 11098c2ecf20Sopenharmony_ci {0x29, 0x86, 0x7a, 0xbb}, 11108c2ecf20Sopenharmony_ci {0x5e, 0x52, 0x4c, 0xbb}, 11118c2ecf20Sopenharmony_ci {0x5f, 0x20, 0x24, 0xbb}, 11128c2ecf20Sopenharmony_ci {0x60, 0x00, 0x02, 0xbb}, 11138c2ecf20Sopenharmony_ci {0x02, 0x00, 0xee, 0xbb}, 11148c2ecf20Sopenharmony_ci {0x03, 0x39, 0x23, 0xbb}, 11158c2ecf20Sopenharmony_ci {0x04, 0x07, 0x24, 0xbb}, 11168c2ecf20Sopenharmony_ci {0x09, 0x00, 0xc0, 0xbb}, 11178c2ecf20Sopenharmony_ci {0x0a, 0x00, 0x79, 0xbb}, 11188c2ecf20Sopenharmony_ci {0x0b, 0x00, 0x04, 0xbb}, 11198c2ecf20Sopenharmony_ci {0x0c, 0x00, 0x5c, 0xbb}, 11208c2ecf20Sopenharmony_ci {0x0d, 0x00, 0xd9, 0xbb}, 11218c2ecf20Sopenharmony_ci {0x0e, 0x00, 0x53, 0xbb}, 11228c2ecf20Sopenharmony_ci {0x0f, 0x00, 0x21, 0xbb}, 11238c2ecf20Sopenharmony_ci {0x10, 0x00, 0xa4, 0xbb}, 11248c2ecf20Sopenharmony_ci {0x11, 0x00, 0xe5, 0xbb}, 11258c2ecf20Sopenharmony_ci {0x15, 0x00, 0x00, 0xbb}, 11268c2ecf20Sopenharmony_ci {0x16, 0x00, 0x00, 0xbb}, 11278c2ecf20Sopenharmony_ci {0x17, 0x00, 0x00, 0xbb}, 11288c2ecf20Sopenharmony_ci {0x18, 0x00, 0x00, 0xbb}, 11298c2ecf20Sopenharmony_ci {0x19, 0x00, 0x00, 0xbb}, 11308c2ecf20Sopenharmony_ci {0x1a, 0x00, 0x00, 0xbb}, 11318c2ecf20Sopenharmony_ci {0x1b, 0x00, 0x00, 0xbb}, 11328c2ecf20Sopenharmony_ci {0x1c, 0x00, 0x00, 0xbb}, 11338c2ecf20Sopenharmony_ci {0x1d, 0x00, 0x00, 0xbb}, 11348c2ecf20Sopenharmony_ci {0x1e, 0x00, 0x00, 0xbb}, 11358c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x01, 0xbb}, 11368c2ecf20Sopenharmony_ci {0x06, 0xe0, 0x0e, 0xbb}, 11378c2ecf20Sopenharmony_ci {0x06, 0x60, 0x0e, 0xbb}, 11388c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, 11398c2ecf20Sopenharmony_ci {} 11408c2ecf20Sopenharmony_ci}; 11418c2ecf20Sopenharmony_cistatic const u8 mi1320_soc_InitSXGA[][4] = { 11428c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x01, 0xcc}, 11438c2ecf20Sopenharmony_ci {0xb0, 0x03, 0x19, 0xcc}, 11448c2ecf20Sopenharmony_ci {0x00, 0x00, 0x30, 0xdd}, 11458c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x64, 0xcc}, 11468c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x67, 0xcc}, 11478c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x01, 0xcc}, 11488c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x01, 0xcc}, 11498c2ecf20Sopenharmony_ci {0xb3, 0x08, 0x01, 0xcc}, 11508c2ecf20Sopenharmony_ci {0xb3, 0x09, 0x0c, 0xcc}, 11518c2ecf20Sopenharmony_ci {0xb3, 0x34, 0x02, 0xcc}, 11528c2ecf20Sopenharmony_ci {0xb3, 0x35, 0xc8, 0xcc}, 11538c2ecf20Sopenharmony_ci {0xb3, 0x02, 0x00, 0xcc}, 11548c2ecf20Sopenharmony_ci {0xb3, 0x03, 0x0a, 0xcc}, 11558c2ecf20Sopenharmony_ci {0xb3, 0x04, 0x05, 0xcc}, 11568c2ecf20Sopenharmony_ci {0xb3, 0x20, 0x00, 0xcc}, 11578c2ecf20Sopenharmony_ci {0xb3, 0x21, 0x00, 0xcc}, 11588c2ecf20Sopenharmony_ci {0xb3, 0x22, 0x04, 0xcc}, 11598c2ecf20Sopenharmony_ci {0xb3, 0x23, 0x00, 0xcc}, 11608c2ecf20Sopenharmony_ci {0xb3, 0x14, 0x00, 0xcc}, 11618c2ecf20Sopenharmony_ci {0xb3, 0x15, 0x00, 0xcc}, 11628c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x04, 0xcc}, 11638c2ecf20Sopenharmony_ci {0xb3, 0x17, 0xff, 0xcc}, 11648c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x67, 0xcc}, 11658c2ecf20Sopenharmony_ci {0xbc, 0x00, 0x71, 0xcc}, 11668c2ecf20Sopenharmony_ci {0xbc, 0x01, 0x01, 0xcc}, 11678c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, 11688c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 11698c2ecf20Sopenharmony_ci {0x00, 0x00, 0x30, 0xdd}, 11708c2ecf20Sopenharmony_ci {0xc8, 0x9f, 0x0b, 0xbb}, 11718c2ecf20Sopenharmony_ci {0x00, 0x00, 0x20, 0xdd}, 11728c2ecf20Sopenharmony_ci {0x5b, 0x00, 0x01, 0xbb}, 11738c2ecf20Sopenharmony_ci {0x00, 0x00, 0x20, 0xdd}, 11748c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x00, 0xbb}, 11758c2ecf20Sopenharmony_ci {0x00, 0x00, 0x30, 0xdd}, 11768c2ecf20Sopenharmony_ci {0x20, 0x01, 0x03, 0xbb}, /* h/v flip */ 11778c2ecf20Sopenharmony_ci {0x00, 0x00, 0x20, 0xdd}, 11788c2ecf20Sopenharmony_ci {0xbf, 0xc0, 0x26, 0xcc}, 11798c2ecf20Sopenharmony_ci {0xbf, 0xc1, 0x02, 0xcc}, 11808c2ecf20Sopenharmony_ci {0xbf, 0xcc, 0x04, 0xcc}, 11818c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x41, 0xcc}, 11828c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x00, 0xbb}, 11838c2ecf20Sopenharmony_ci {0x05, 0x01, 0x78, 0xbb}, 11848c2ecf20Sopenharmony_ci {0x06, 0x00, 0x11, 0xbb}, 11858c2ecf20Sopenharmony_ci {0x07, 0x01, 0x42, 0xbb}, 11868c2ecf20Sopenharmony_ci {0x08, 0x00, 0x11, 0xbb}, 11878c2ecf20Sopenharmony_ci {0x20, 0x01, 0x03, 0xbb}, /* h/v flip */ 11888c2ecf20Sopenharmony_ci {0x21, 0x80, 0x00, 0xbb}, 11898c2ecf20Sopenharmony_ci {0x22, 0x0d, 0x0f, 0xbb}, 11908c2ecf20Sopenharmony_ci {0x24, 0x80, 0x00, 0xbb}, 11918c2ecf20Sopenharmony_ci {0x59, 0x00, 0xff, 0xbb}, 11928c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 11938c2ecf20Sopenharmony_ci {0x39, 0x03, 0xca, 0xbb}, 11948c2ecf20Sopenharmony_ci {0x3a, 0x06, 0x80, 0xbb}, 11958c2ecf20Sopenharmony_ci {0x3b, 0x01, 0x52, 0xbb}, 11968c2ecf20Sopenharmony_ci {0x3c, 0x05, 0x40, 0xbb}, 11978c2ecf20Sopenharmony_ci {0x57, 0x01, 0x9c, 0xbb}, 11988c2ecf20Sopenharmony_ci {0x58, 0x01, 0xee, 0xbb}, 11998c2ecf20Sopenharmony_ci {0x59, 0x00, 0xf0, 0xbb}, 12008c2ecf20Sopenharmony_ci {0x5a, 0x01, 0x20, 0xbb}, 12018c2ecf20Sopenharmony_ci {0x5c, 0x1d, 0x17, 0xbb}, 12028c2ecf20Sopenharmony_ci {0x5d, 0x22, 0x1c, 0xbb}, 12038c2ecf20Sopenharmony_ci {0x64, 0x1e, 0x1c, 0xbb}, 12048c2ecf20Sopenharmony_ci {0x5b, 0x00, 0x00, 0xbb}, 12058c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 12068c2ecf20Sopenharmony_ci {0x22, 0xa0, 0x78, 0xbb}, 12078c2ecf20Sopenharmony_ci {0x23, 0xa0, 0x78, 0xbb}, 12088c2ecf20Sopenharmony_ci {0x24, 0x7f, 0x00, 0xbb}, 12098c2ecf20Sopenharmony_ci {0x28, 0xea, 0x02, 0xbb}, 12108c2ecf20Sopenharmony_ci {0x29, 0x86, 0x7a, 0xbb}, 12118c2ecf20Sopenharmony_ci {0x5e, 0x52, 0x4c, 0xbb}, 12128c2ecf20Sopenharmony_ci {0x5f, 0x20, 0x24, 0xbb}, 12138c2ecf20Sopenharmony_ci {0x60, 0x00, 0x02, 0xbb}, 12148c2ecf20Sopenharmony_ci {0x02, 0x00, 0xee, 0xbb}, 12158c2ecf20Sopenharmony_ci {0x03, 0x39, 0x23, 0xbb}, 12168c2ecf20Sopenharmony_ci {0x04, 0x07, 0x24, 0xbb}, 12178c2ecf20Sopenharmony_ci {0x09, 0x00, 0xc0, 0xbb}, 12188c2ecf20Sopenharmony_ci {0x0a, 0x00, 0x79, 0xbb}, 12198c2ecf20Sopenharmony_ci {0x0b, 0x00, 0x04, 0xbb}, 12208c2ecf20Sopenharmony_ci {0x0c, 0x00, 0x5c, 0xbb}, 12218c2ecf20Sopenharmony_ci {0x0d, 0x00, 0xd9, 0xbb}, 12228c2ecf20Sopenharmony_ci {0x0e, 0x00, 0x53, 0xbb}, 12238c2ecf20Sopenharmony_ci {0x0f, 0x00, 0x21, 0xbb}, 12248c2ecf20Sopenharmony_ci {0x10, 0x00, 0xa4, 0xbb}, 12258c2ecf20Sopenharmony_ci {0x11, 0x00, 0xe5, 0xbb}, 12268c2ecf20Sopenharmony_ci {0x15, 0x00, 0x00, 0xbb}, 12278c2ecf20Sopenharmony_ci {0x16, 0x00, 0x00, 0xbb}, 12288c2ecf20Sopenharmony_ci {0x17, 0x00, 0x00, 0xbb}, 12298c2ecf20Sopenharmony_ci {0x18, 0x00, 0x00, 0xbb}, 12308c2ecf20Sopenharmony_ci {0x19, 0x00, 0x00, 0xbb}, 12318c2ecf20Sopenharmony_ci {0x1a, 0x00, 0x00, 0xbb}, 12328c2ecf20Sopenharmony_ci {0x1b, 0x00, 0x00, 0xbb}, 12338c2ecf20Sopenharmony_ci {0x1c, 0x00, 0x00, 0xbb}, 12348c2ecf20Sopenharmony_ci {0x1d, 0x00, 0x00, 0xbb}, 12358c2ecf20Sopenharmony_ci {0x1e, 0x00, 0x00, 0xbb}, 12368c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x01, 0xbb}, 12378c2ecf20Sopenharmony_ci {0x06, 0xe0, 0x0e, 0xbb}, 12388c2ecf20Sopenharmony_ci {0x06, 0x60, 0x0e, 0xbb}, 12398c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, 12408c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x00, 0xbb}, 12418c2ecf20Sopenharmony_ci {0x05, 0x01, 0x13, 0xbb}, 12428c2ecf20Sopenharmony_ci {0x06, 0x00, 0x11, 0xbb}, 12438c2ecf20Sopenharmony_ci {0x07, 0x00, 0x85, 0xbb}, 12448c2ecf20Sopenharmony_ci {0x08, 0x00, 0x27, 0xbb}, 12458c2ecf20Sopenharmony_ci {0x20, 0x01, 0x03, 0xbb}, /* h/v flip */ 12468c2ecf20Sopenharmony_ci {0x21, 0x80, 0x00, 0xbb}, 12478c2ecf20Sopenharmony_ci {0x22, 0x0d, 0x0f, 0xbb}, 12488c2ecf20Sopenharmony_ci {0x24, 0x80, 0x00, 0xbb}, 12498c2ecf20Sopenharmony_ci {0x59, 0x00, 0xff, 0xbb}, 12508c2ecf20Sopenharmony_ci {0xf0, 0x00, 0x02, 0xbb}, 12518c2ecf20Sopenharmony_ci {0x39, 0x03, 0x0d, 0xbb}, 12528c2ecf20Sopenharmony_ci {0x3a, 0x06, 0x1b, 0xbb}, 12538c2ecf20Sopenharmony_ci {0x3b, 0x00, 0x95, 0xbb}, 12548c2ecf20Sopenharmony_ci {0x3c, 0x04, 0xdb, 0xbb}, 12558c2ecf20Sopenharmony_ci {0x57, 0x02, 0x00, 0xbb}, 12568c2ecf20Sopenharmony_ci {0x58, 0x02, 0x66, 0xbb}, 12578c2ecf20Sopenharmony_ci {0x59, 0x00, 0xff, 0xbb}, 12588c2ecf20Sopenharmony_ci {0x5a, 0x01, 0x33, 0xbb}, 12598c2ecf20Sopenharmony_ci {0x5c, 0x12, 0x0d, 0xbb}, 12608c2ecf20Sopenharmony_ci {0x5d, 0x16, 0x11, 0xbb}, 12618c2ecf20Sopenharmony_ci {0x64, 0x5e, 0x1c, 0xbb}, 12628c2ecf20Sopenharmony_ci {} 12638c2ecf20Sopenharmony_ci}; 12648c2ecf20Sopenharmony_cistatic const u8 po3130_gamma[17] = { 12658c2ecf20Sopenharmony_ci 0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8, 12668c2ecf20Sopenharmony_ci 0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff 12678c2ecf20Sopenharmony_ci}; 12688c2ecf20Sopenharmony_cistatic const u8 po3130_matrix[9] = { 12698c2ecf20Sopenharmony_ci 0x5f, 0xec, 0xf5, 0xf1, 0x5a, 0xf5, 0xf1, 0xec, 0x63 12708c2ecf20Sopenharmony_ci}; 12718c2ecf20Sopenharmony_ci 12728c2ecf20Sopenharmony_cistatic const u8 po3130_initVGA_data[][4] = { 12738c2ecf20Sopenharmony_ci {0xb0, 0x4d, 0x00, 0xcc}, {0xb3, 0x01, 0x01, 0xcc}, 12748c2ecf20Sopenharmony_ci {0x00, 0x00, 0x50, 0xdd}, {0xb0, 0x03, 0x01, 0xcc}, 12758c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x04, 0xcc}, {0xb3, 0x00, 0x24, 0xcc}, 12768c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x25, 0xcc}, {0xb3, 0x08, 0x01, 0xcc}, 12778c2ecf20Sopenharmony_ci {0xb3, 0x09, 0x0c, 0xcc}, {0xb3, 0x05, 0x00, 0xcc}, 12788c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x01, 0xcc}, {0xb3, 0x03, 0x1a, 0xcc}, 12798c2ecf20Sopenharmony_ci {0xb3, 0x04, 0x15, 0xcc}, {0xb3, 0x20, 0x00, 0xcc}, 12808c2ecf20Sopenharmony_ci {0xb3, 0x21, 0x00, 0xcc}, {0xb3, 0x22, 0x01, 0xcc}, 12818c2ecf20Sopenharmony_ci {0xb3, 0x23, 0xe8, 0xcc}, {0xb8, 0x08, 0xe8, 0xcc}, 12828c2ecf20Sopenharmony_ci {0xb3, 0x14, 0x00, 0xcc}, {0xb3, 0x15, 0x00, 0xcc}, 12838c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x02, 0xcc}, {0xb3, 0x17, 0x7f, 0xcc}, 12848c2ecf20Sopenharmony_ci {0xb3, 0x34, 0x01, 0xcc}, 12858c2ecf20Sopenharmony_ci {0xb3, 0x35, 0xf6, 0xcc}, /* i2c add: 76 */ 12868c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x27, 0xcc}, {0xbc, 0x00, 0x71, 0xcc}, 12878c2ecf20Sopenharmony_ci {0xb8, 0x00, 0x21, 0xcc}, {0xb8, 0x27, 0x20, 0xcc}, 12888c2ecf20Sopenharmony_ci {0xb8, 0x01, 0x79, 0xcc}, {0xb8, 0x81, 0x09, 0xcc}, 12898c2ecf20Sopenharmony_ci {0xb8, 0x2c, 0x50, 0xcc}, {0xb8, 0x2d, 0xf8, 0xcc}, 12908c2ecf20Sopenharmony_ci {0xb8, 0x2e, 0xf8, 0xcc}, {0xb8, 0x2f, 0xf8, 0xcc}, 12918c2ecf20Sopenharmony_ci {0xb8, 0x30, 0x50, 0xcc}, {0xb8, 0x31, 0xf8, 0xcc}, 12928c2ecf20Sopenharmony_ci {0xb8, 0x32, 0xf8, 0xcc}, {0xb8, 0x33, 0xf8, 0xcc}, 12938c2ecf20Sopenharmony_ci {0xb8, 0x34, 0x50, 0xcc}, {0xb8, 0x35, 0x00, 0xcc}, 12948c2ecf20Sopenharmony_ci {0xb8, 0x36, 0x00, 0xcc}, {0xb8, 0x37, 0x00, 0xcc}, 12958c2ecf20Sopenharmony_ci {0x00, 0x1e, 0xc6, 0xaa}, {0x00, 0x20, 0x44, 0xaa}, 12968c2ecf20Sopenharmony_ci {0x00, 0xad, 0x02, 0xaa}, {0x00, 0xae, 0x2c, 0xaa}, 12978c2ecf20Sopenharmony_ci {0x00, 0x12, 0x08, 0xaa}, {0x00, 0x17, 0x41, 0xaa}, 12988c2ecf20Sopenharmony_ci {0x00, 0x19, 0x41, 0xaa}, {0x00, 0x1e, 0x06, 0xaa}, 12998c2ecf20Sopenharmony_ci {0x00, 0x21, 0x00, 0xaa}, {0x00, 0x36, 0xc0, 0xaa}, 13008c2ecf20Sopenharmony_ci {0x00, 0x37, 0xc8, 0xaa}, {0x00, 0x3b, 0x36, 0xaa}, 13018c2ecf20Sopenharmony_ci {0x00, 0x4b, 0xfe, 0xaa}, {0x00, 0x51, 0x1c, 0xaa}, 13028c2ecf20Sopenharmony_ci {0x00, 0x52, 0x01, 0xaa}, {0x00, 0x55, 0x0a, 0xaa}, 13038c2ecf20Sopenharmony_ci {0x00, 0x59, 0x02, 0xaa}, {0x00, 0x5a, 0x04, 0xaa}, 13048c2ecf20Sopenharmony_ci {0x00, 0x5c, 0x10, 0xaa}, {0x00, 0x5d, 0x10, 0xaa}, 13058c2ecf20Sopenharmony_ci {0x00, 0x5e, 0x10, 0xaa}, {0x00, 0x5f, 0x10, 0xaa}, 13068c2ecf20Sopenharmony_ci {0x00, 0x61, 0x00, 0xaa}, {0x00, 0x62, 0x18, 0xaa}, 13078c2ecf20Sopenharmony_ci {0x00, 0x63, 0x30, 0xaa}, {0x00, 0x70, 0x68, 0xaa}, 13088c2ecf20Sopenharmony_ci {0x00, 0x80, 0x71, 0xaa}, {0x00, 0x81, 0x08, 0xaa}, 13098c2ecf20Sopenharmony_ci {0x00, 0x82, 0x00, 0xaa}, {0x00, 0x83, 0x55, 0xaa}, 13108c2ecf20Sopenharmony_ci {0x00, 0x84, 0x06, 0xaa}, {0x00, 0x85, 0x06, 0xaa}, 13118c2ecf20Sopenharmony_ci {0x00, 0x86, 0x13, 0xaa}, {0x00, 0x87, 0x18, 0xaa}, 13128c2ecf20Sopenharmony_ci {0x00, 0xaa, 0x3f, 0xaa}, {0x00, 0xab, 0x44, 0xaa}, 13138c2ecf20Sopenharmony_ci {0x00, 0xb0, 0x68, 0xaa}, {0x00, 0xb5, 0x10, 0xaa}, 13148c2ecf20Sopenharmony_ci {0x00, 0xb8, 0x20, 0xaa}, {0x00, 0xb9, 0xa0, 0xaa}, 13158c2ecf20Sopenharmony_ci {0x00, 0xbc, 0x04, 0xaa}, {0x00, 0x8b, 0x40, 0xaa}, 13168c2ecf20Sopenharmony_ci {0x00, 0x8c, 0x91, 0xaa}, {0x00, 0x8d, 0x8f, 0xaa}, 13178c2ecf20Sopenharmony_ci {0x00, 0x8e, 0x91, 0xaa}, {0x00, 0x8f, 0x43, 0xaa}, 13188c2ecf20Sopenharmony_ci {0x00, 0x90, 0x92, 0xaa}, {0x00, 0x91, 0x89, 0xaa}, 13198c2ecf20Sopenharmony_ci {0x00, 0x92, 0x9d, 0xaa}, {0x00, 0x93, 0x46, 0xaa}, 13208c2ecf20Sopenharmony_ci {0x00, 0xd6, 0x22, 0xaa}, {0x00, 0x73, 0x00, 0xaa}, 13218c2ecf20Sopenharmony_ci {0x00, 0x74, 0x10, 0xaa}, {0x00, 0x75, 0x20, 0xaa}, 13228c2ecf20Sopenharmony_ci {0x00, 0x76, 0x2b, 0xaa}, {0x00, 0x77, 0x36, 0xaa}, 13238c2ecf20Sopenharmony_ci {0x00, 0x78, 0x49, 0xaa}, {0x00, 0x79, 0x5a, 0xaa}, 13248c2ecf20Sopenharmony_ci {0x00, 0x7a, 0x7f, 0xaa}, {0x00, 0x7b, 0x9b, 0xaa}, 13258c2ecf20Sopenharmony_ci {0x00, 0x7c, 0xba, 0xaa}, {0x00, 0x7d, 0xd4, 0xaa}, 13268c2ecf20Sopenharmony_ci {0x00, 0x7e, 0xea, 0xaa}, {0x00, 0xd6, 0x62, 0xaa}, 13278c2ecf20Sopenharmony_ci {0x00, 0x73, 0x00, 0xaa}, {0x00, 0x74, 0x10, 0xaa}, 13288c2ecf20Sopenharmony_ci {0x00, 0x75, 0x20, 0xaa}, {0x00, 0x76, 0x2b, 0xaa}, 13298c2ecf20Sopenharmony_ci {0x00, 0x77, 0x36, 0xaa}, {0x00, 0x78, 0x49, 0xaa}, 13308c2ecf20Sopenharmony_ci {0x00, 0x79, 0x5a, 0xaa}, {0x00, 0x7a, 0x7f, 0xaa}, 13318c2ecf20Sopenharmony_ci {0x00, 0x7b, 0x9b, 0xaa}, {0x00, 0x7c, 0xba, 0xaa}, 13328c2ecf20Sopenharmony_ci {0x00, 0x7d, 0xd4, 0xaa}, {0x00, 0x7e, 0xea, 0xaa}, 13338c2ecf20Sopenharmony_ci {0x00, 0xd6, 0xa2, 0xaa}, {0x00, 0x73, 0x00, 0xaa}, 13348c2ecf20Sopenharmony_ci {0x00, 0x74, 0x10, 0xaa}, {0x00, 0x75, 0x20, 0xaa}, 13358c2ecf20Sopenharmony_ci {0x00, 0x76, 0x2b, 0xaa}, {0x00, 0x77, 0x36, 0xaa}, 13368c2ecf20Sopenharmony_ci {0x00, 0x78, 0x49, 0xaa}, {0x00, 0x79, 0x5a, 0xaa}, 13378c2ecf20Sopenharmony_ci {0x00, 0x7a, 0x7f, 0xaa}, {0x00, 0x7b, 0x9b, 0xaa}, 13388c2ecf20Sopenharmony_ci {0x00, 0x7c, 0xba, 0xaa}, {0x00, 0x7d, 0xd4, 0xaa}, 13398c2ecf20Sopenharmony_ci {0x00, 0x7e, 0xea, 0xaa}, 13408c2ecf20Sopenharmony_ci {0x00, 0x4c, 0x07, 0xaa}, 13418c2ecf20Sopenharmony_ci {0x00, 0x4b, 0xe0, 0xaa}, {0x00, 0x4e, 0x77, 0xaa}, 13428c2ecf20Sopenharmony_ci {0x00, 0x59, 0x02, 0xaa}, {0x00, 0x4d, 0x0a, 0xaa}, 13438c2ecf20Sopenharmony_ci/* {0x00, 0xd1, 0x00, 0xaa}, {0x00, 0x20, 0xc4, 0xaa}, 13448c2ecf20Sopenharmony_ci {0xb8, 0x8e, 0x00, 0xcc}, {0xb8, 0x8f, 0xff, 0xcc}, */ 13458c2ecf20Sopenharmony_ci {0x00, 0xd1, 0x3c, 0xaa}, {0x00, 0x20, 0xc4, 0xaa}, 13468c2ecf20Sopenharmony_ci {0xb8, 0x8e, 0x00, 0xcc}, {0xb8, 0x8f, 0xff, 0xcc}, 13478c2ecf20Sopenharmony_ci {0xb8, 0xfe, 0x00, 0xcc}, {0xb8, 0xff, 0x28, 0xcc}, 13488c2ecf20Sopenharmony_ci {0xb9, 0x00, 0x28, 0xcc}, {0xb9, 0x01, 0x28, 0xcc}, 13498c2ecf20Sopenharmony_ci {0xb9, 0x02, 0x28, 0xcc}, {0xb9, 0x03, 0x00, 0xcc}, 13508c2ecf20Sopenharmony_ci {0xb9, 0x04, 0x00, 0xcc}, {0xb9, 0x05, 0x3c, 0xcc}, 13518c2ecf20Sopenharmony_ci {0xb9, 0x06, 0x3c, 0xcc}, {0xb9, 0x07, 0x3c, 0xcc}, 13528c2ecf20Sopenharmony_ci {0xb9, 0x08, 0x3c, 0xcc}, {0x00, 0x05, 0x00, 0xaa}, 13538c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x00, 0xcc}, {0xb3, 0x01, 0x41, 0xcc}, 13548c2ecf20Sopenharmony_ci {} 13558c2ecf20Sopenharmony_ci}; 13568c2ecf20Sopenharmony_cistatic const u8 po3130_rundata[][4] = { 13578c2ecf20Sopenharmony_ci {0x00, 0x47, 0x45, 0xaa}, {0x00, 0x48, 0x9b, 0xaa}, 13588c2ecf20Sopenharmony_ci {0x00, 0x49, 0x3a, 0xaa}, {0x00, 0x4a, 0x01, 0xaa}, 13598c2ecf20Sopenharmony_ci {0x00, 0x44, 0x40, 0xaa}, 13608c2ecf20Sopenharmony_ci/* {0x00, 0xd5, 0x7c, 0xaa}, */ 13618c2ecf20Sopenharmony_ci {0x00, 0xad, 0x04, 0xaa}, {0x00, 0xae, 0x00, 0xaa}, 13628c2ecf20Sopenharmony_ci {0x00, 0xb0, 0x78, 0xaa}, {0x00, 0x98, 0x02, 0xaa}, 13638c2ecf20Sopenharmony_ci {0x00, 0x94, 0x25, 0xaa}, {0x00, 0x95, 0x25, 0xaa}, 13648c2ecf20Sopenharmony_ci {0x00, 0x59, 0x68, 0xaa}, {0x00, 0x44, 0x20, 0xaa}, 13658c2ecf20Sopenharmony_ci {0x00, 0x17, 0x50, 0xaa}, {0x00, 0x19, 0x50, 0xaa}, 13668c2ecf20Sopenharmony_ci {0x00, 0xd1, 0x3c, 0xaa}, {0x00, 0xd1, 0x3c, 0xaa}, 13678c2ecf20Sopenharmony_ci {0x00, 0x1e, 0x06, 0xaa}, {0x00, 0x1e, 0x06, 0xaa}, 13688c2ecf20Sopenharmony_ci {} 13698c2ecf20Sopenharmony_ci}; 13708c2ecf20Sopenharmony_ci 13718c2ecf20Sopenharmony_cistatic const u8 po3130_initQVGA_data[][4] = { 13728c2ecf20Sopenharmony_ci {0xb0, 0x4d, 0x00, 0xcc}, {0xb3, 0x01, 0x01, 0xcc}, 13738c2ecf20Sopenharmony_ci {0x00, 0x00, 0x50, 0xdd}, {0xb0, 0x03, 0x09, 0xcc}, 13748c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x04, 0xcc}, {0xb3, 0x00, 0x24, 0xcc}, 13758c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x25, 0xcc}, {0xb3, 0x08, 0x01, 0xcc}, 13768c2ecf20Sopenharmony_ci {0xb3, 0x09, 0x0c, 0xcc}, {0xb3, 0x05, 0x00, 0xcc}, 13778c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x01, 0xcc}, {0xb3, 0x03, 0x1a, 0xcc}, 13788c2ecf20Sopenharmony_ci {0xb3, 0x04, 0x15, 0xcc}, {0xb3, 0x20, 0x00, 0xcc}, 13798c2ecf20Sopenharmony_ci {0xb3, 0x21, 0x00, 0xcc}, {0xb3, 0x22, 0x01, 0xcc}, 13808c2ecf20Sopenharmony_ci {0xb3, 0x23, 0xe0, 0xcc}, {0xb8, 0x08, 0xe0, 0xcc}, 13818c2ecf20Sopenharmony_ci {0xb3, 0x14, 0x00, 0xcc}, {0xb3, 0x15, 0x00, 0xcc}, 13828c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x02, 0xcc}, {0xb3, 0x17, 0x7f, 0xcc}, 13838c2ecf20Sopenharmony_ci {0xb3, 0x34, 0x01, 0xcc}, {0xb3, 0x35, 0xf6, 0xcc}, 13848c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x27, 0xcc}, {0xbc, 0x00, 0xd1, 0xcc}, 13858c2ecf20Sopenharmony_ci {0xb8, 0x00, 0x21, 0xcc}, {0xb8, 0x27, 0x20, 0xcc}, 13868c2ecf20Sopenharmony_ci {0xb8, 0x01, 0x79, 0xcc}, {0xb8, 0x81, 0x09, 0xcc}, 13878c2ecf20Sopenharmony_ci {0xb8, 0x2c, 0x50, 0xcc}, {0xb8, 0x2d, 0xf8, 0xcc}, 13888c2ecf20Sopenharmony_ci {0xb8, 0x2e, 0xf8, 0xcc}, {0xb8, 0x2f, 0xf8, 0xcc}, 13898c2ecf20Sopenharmony_ci {0xb8, 0x30, 0x50, 0xcc}, {0xb8, 0x31, 0xf8, 0xcc}, 13908c2ecf20Sopenharmony_ci {0xb8, 0x32, 0xf8, 0xcc}, {0xb8, 0x33, 0xf8, 0xcc}, 13918c2ecf20Sopenharmony_ci {0xb8, 0x34, 0x50, 0xcc}, {0xb8, 0x35, 0x00, 0xcc}, 13928c2ecf20Sopenharmony_ci {0xb8, 0x36, 0x00, 0xcc}, {0xb8, 0x37, 0x00, 0xcc}, 13938c2ecf20Sopenharmony_ci {0x00, 0x1e, 0xc6, 0xaa}, {0x00, 0x20, 0x44, 0xaa}, 13948c2ecf20Sopenharmony_ci {0x00, 0xad, 0x02, 0xaa}, {0x00, 0xae, 0x2c, 0xaa}, 13958c2ecf20Sopenharmony_ci {0x00, 0x12, 0x08, 0xaa}, {0x00, 0x17, 0x41, 0xaa}, 13968c2ecf20Sopenharmony_ci {0x00, 0x19, 0x41, 0xaa}, {0x00, 0x1e, 0x06, 0xaa}, 13978c2ecf20Sopenharmony_ci {0x00, 0x21, 0x00, 0xaa}, {0x00, 0x36, 0xc0, 0xaa}, 13988c2ecf20Sopenharmony_ci {0x00, 0x37, 0xc8, 0xaa}, {0x00, 0x3b, 0x36, 0xaa}, 13998c2ecf20Sopenharmony_ci {0x00, 0x4b, 0xfe, 0xaa}, {0x00, 0x51, 0x1c, 0xaa}, 14008c2ecf20Sopenharmony_ci {0x00, 0x52, 0x01, 0xaa}, {0x00, 0x55, 0x0a, 0xaa}, 14018c2ecf20Sopenharmony_ci {0x00, 0x59, 0x6f, 0xaa}, {0x00, 0x5a, 0x04, 0xaa}, 14028c2ecf20Sopenharmony_ci {0x00, 0x5c, 0x10, 0xaa}, {0x00, 0x5d, 0x10, 0xaa}, 14038c2ecf20Sopenharmony_ci {0x00, 0x5e, 0x10, 0xaa}, {0x00, 0x5f, 0x10, 0xaa}, 14048c2ecf20Sopenharmony_ci {0x00, 0x61, 0x00, 0xaa}, {0x00, 0x62, 0x18, 0xaa}, 14058c2ecf20Sopenharmony_ci {0x00, 0x63, 0x30, 0xaa}, {0x00, 0x70, 0x68, 0xaa}, 14068c2ecf20Sopenharmony_ci {0x00, 0x80, 0x71, 0xaa}, {0x00, 0x81, 0x08, 0xaa}, 14078c2ecf20Sopenharmony_ci {0x00, 0x82, 0x00, 0xaa}, {0x00, 0x83, 0x55, 0xaa}, 14088c2ecf20Sopenharmony_ci {0x00, 0x84, 0x06, 0xaa}, {0x00, 0x85, 0x06, 0xaa}, 14098c2ecf20Sopenharmony_ci {0x00, 0x86, 0x13, 0xaa}, {0x00, 0x87, 0x18, 0xaa}, 14108c2ecf20Sopenharmony_ci {0x00, 0xaa, 0x3f, 0xaa}, {0x00, 0xab, 0x44, 0xaa}, 14118c2ecf20Sopenharmony_ci {0x00, 0xb0, 0x68, 0xaa}, {0x00, 0xb5, 0x10, 0xaa}, 14128c2ecf20Sopenharmony_ci {0x00, 0xb8, 0x20, 0xaa}, {0x00, 0xb9, 0xa0, 0xaa}, 14138c2ecf20Sopenharmony_ci {0x00, 0xbc, 0x04, 0xaa}, {0x00, 0x8b, 0x40, 0xaa}, 14148c2ecf20Sopenharmony_ci {0x00, 0x8c, 0x91, 0xaa}, {0x00, 0x8d, 0x8f, 0xaa}, 14158c2ecf20Sopenharmony_ci {0x00, 0x8e, 0x91, 0xaa}, {0x00, 0x8f, 0x43, 0xaa}, 14168c2ecf20Sopenharmony_ci {0x00, 0x90, 0x92, 0xaa}, {0x00, 0x91, 0x89, 0xaa}, 14178c2ecf20Sopenharmony_ci {0x00, 0x92, 0x9d, 0xaa}, {0x00, 0x93, 0x46, 0xaa}, 14188c2ecf20Sopenharmony_ci {0x00, 0xd6, 0x22, 0xaa}, {0x00, 0x73, 0x00, 0xaa}, 14198c2ecf20Sopenharmony_ci {0x00, 0x74, 0x10, 0xaa}, {0x00, 0x75, 0x20, 0xaa}, 14208c2ecf20Sopenharmony_ci {0x00, 0x76, 0x2b, 0xaa}, {0x00, 0x77, 0x36, 0xaa}, 14218c2ecf20Sopenharmony_ci {0x00, 0x78, 0x49, 0xaa}, {0x00, 0x79, 0x5a, 0xaa}, 14228c2ecf20Sopenharmony_ci {0x00, 0x7a, 0x7f, 0xaa}, {0x00, 0x7b, 0x9b, 0xaa}, 14238c2ecf20Sopenharmony_ci {0x00, 0x7c, 0xba, 0xaa}, {0x00, 0x7d, 0xd4, 0xaa}, 14248c2ecf20Sopenharmony_ci {0x00, 0x7e, 0xea, 0xaa}, {0x00, 0xd6, 0x62, 0xaa}, 14258c2ecf20Sopenharmony_ci {0x00, 0x73, 0x00, 0xaa}, {0x00, 0x74, 0x10, 0xaa}, 14268c2ecf20Sopenharmony_ci {0x00, 0x75, 0x20, 0xaa}, {0x00, 0x76, 0x2b, 0xaa}, 14278c2ecf20Sopenharmony_ci {0x00, 0x77, 0x36, 0xaa}, {0x00, 0x78, 0x49, 0xaa}, 14288c2ecf20Sopenharmony_ci {0x00, 0x79, 0x5a, 0xaa}, {0x00, 0x7a, 0x7f, 0xaa}, 14298c2ecf20Sopenharmony_ci {0x00, 0x7b, 0x9b, 0xaa}, {0x00, 0x7c, 0xba, 0xaa}, 14308c2ecf20Sopenharmony_ci {0x00, 0x7d, 0xd4, 0xaa}, {0x00, 0x7e, 0xea, 0xaa}, 14318c2ecf20Sopenharmony_ci {0x00, 0xd6, 0xa2, 0xaa}, {0x00, 0x73, 0x00, 0xaa}, 14328c2ecf20Sopenharmony_ci {0x00, 0x74, 0x10, 0xaa}, {0x00, 0x75, 0x20, 0xaa}, 14338c2ecf20Sopenharmony_ci {0x00, 0x76, 0x2b, 0xaa}, {0x00, 0x77, 0x36, 0xaa}, 14348c2ecf20Sopenharmony_ci {0x00, 0x78, 0x49, 0xaa}, {0x00, 0x79, 0x5a, 0xaa}, 14358c2ecf20Sopenharmony_ci {0x00, 0x7a, 0x7f, 0xaa}, {0x00, 0x7b, 0x9b, 0xaa}, 14368c2ecf20Sopenharmony_ci {0x00, 0x7c, 0xba, 0xaa}, {0x00, 0x7d, 0xd4, 0xaa}, 14378c2ecf20Sopenharmony_ci {0x00, 0x7e, 0xea, 0xaa}, {0x00, 0x4c, 0x07, 0xaa}, 14388c2ecf20Sopenharmony_ci {0x00, 0x4b, 0xe0, 0xaa}, {0x00, 0x4e, 0x77, 0xaa}, 14398c2ecf20Sopenharmony_ci {0x00, 0x59, 0x66, 0xaa}, {0x00, 0x4d, 0x0a, 0xaa}, 14408c2ecf20Sopenharmony_ci {0x00, 0xd1, 0x00, 0xaa}, {0x00, 0x20, 0xc4, 0xaa}, 14418c2ecf20Sopenharmony_ci {0xb8, 0x8e, 0x00, 0xcc}, {0xb8, 0x8f, 0xff, 0xcc}, 14428c2ecf20Sopenharmony_ci {0xb8, 0xfe, 0x00, 0xcc}, {0xb8, 0xff, 0x28, 0xcc}, 14438c2ecf20Sopenharmony_ci {0xb9, 0x00, 0x28, 0xcc}, {0xb9, 0x01, 0x28, 0xcc}, 14448c2ecf20Sopenharmony_ci {0xb9, 0x02, 0x28, 0xcc}, {0xb9, 0x03, 0x00, 0xcc}, 14458c2ecf20Sopenharmony_ci {0xb9, 0x04, 0x00, 0xcc}, {0xb9, 0x05, 0x3c, 0xcc}, 14468c2ecf20Sopenharmony_ci {0xb9, 0x06, 0x3c, 0xcc}, {0xb9, 0x07, 0x3c, 0xcc}, 14478c2ecf20Sopenharmony_ci {0xb9, 0x08, 0x3c, 0xcc}, {0xbc, 0x02, 0x18, 0xcc}, 14488c2ecf20Sopenharmony_ci {0xbc, 0x03, 0x50, 0xcc}, {0xbc, 0x04, 0x18, 0xcc}, 14498c2ecf20Sopenharmony_ci {0xbc, 0x05, 0x00, 0xcc}, {0xbc, 0x06, 0x00, 0xcc}, 14508c2ecf20Sopenharmony_ci {0xbc, 0x08, 0x30, 0xcc}, {0xbc, 0x09, 0x40, 0xcc}, 14518c2ecf20Sopenharmony_ci {0xbc, 0x0a, 0x10, 0xcc}, {0xbc, 0x0b, 0x00, 0xcc}, 14528c2ecf20Sopenharmony_ci {0xbc, 0x0c, 0x00, 0xcc}, {0x00, 0x05, 0x00, 0xaa}, 14538c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x00, 0xcc}, {0xb3, 0x01, 0x41, 0xcc}, 14548c2ecf20Sopenharmony_ci {} 14558c2ecf20Sopenharmony_ci}; 14568c2ecf20Sopenharmony_ci 14578c2ecf20Sopenharmony_cistatic const u8 hv7131r_gamma[17] = { 14588c2ecf20Sopenharmony_ci 0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8, 14598c2ecf20Sopenharmony_ci 0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff 14608c2ecf20Sopenharmony_ci}; 14618c2ecf20Sopenharmony_cistatic const u8 hv7131r_matrix[9] = { 14628c2ecf20Sopenharmony_ci 0x5f, 0xec, 0xf5, 0xf1, 0x5a, 0xf5, 0xf1, 0xec, 0x63 14638c2ecf20Sopenharmony_ci}; 14648c2ecf20Sopenharmony_cistatic const u8 hv7131r_initVGA_data[][4] = { 14658c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x01, 0xcc}, 14668c2ecf20Sopenharmony_ci {0xb0, 0x03, 0x19, 0xcc}, 14678c2ecf20Sopenharmony_ci {0xb0, 0x04, 0x02, 0xcc}, 14688c2ecf20Sopenharmony_ci {0x00, 0x00, 0x20, 0xdd}, 14698c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x24, 0xcc}, 14708c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x25, 0xcc}, 14718c2ecf20Sopenharmony_ci {0xb3, 0x08, 0x01, 0xcc}, 14728c2ecf20Sopenharmony_ci {0xb3, 0x09, 0x0c, 0xcc}, 14738c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x01, 0xcc}, 14748c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x03, 0xcc}, 14758c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x45, 0xcc}, 14768c2ecf20Sopenharmony_ci {0xb3, 0x03, 0x0b, 0xcc}, 14778c2ecf20Sopenharmony_ci {0xb3, 0x04, 0x05, 0xcc}, 14788c2ecf20Sopenharmony_ci {0xb3, 0x20, 0x00, 0xcc}, 14798c2ecf20Sopenharmony_ci {0xb3, 0x21, 0x00, 0xcc}, 14808c2ecf20Sopenharmony_ci {0xb3, 0x22, 0x01, 0xcc}, 14818c2ecf20Sopenharmony_ci {0xb3, 0x23, 0xe0, 0xcc}, 14828c2ecf20Sopenharmony_ci {0xb3, 0x14, 0x00, 0xcc}, 14838c2ecf20Sopenharmony_ci {0xb3, 0x15, 0x02, 0xcc}, 14848c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x02, 0xcc}, 14858c2ecf20Sopenharmony_ci {0xb3, 0x17, 0x7f, 0xcc}, 14868c2ecf20Sopenharmony_ci {0xb3, 0x34, 0x01, 0xcc}, 14878c2ecf20Sopenharmony_ci {0xb3, 0x35, 0x91, 0xcc}, /* i2c add: 11 */ 14888c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x27, 0xcc}, 14898c2ecf20Sopenharmony_ci {0xbc, 0x00, 0x73, 0xcc}, 14908c2ecf20Sopenharmony_ci {0xb8, 0x00, 0x23, 0xcc}, 14918c2ecf20Sopenharmony_ci {0xb8, 0x2c, 0x50, 0xcc}, 14928c2ecf20Sopenharmony_ci {0xb8, 0x2d, 0xf8, 0xcc}, 14938c2ecf20Sopenharmony_ci {0xb8, 0x2e, 0xf8, 0xcc}, 14948c2ecf20Sopenharmony_ci {0xb8, 0x2f, 0xf8, 0xcc}, 14958c2ecf20Sopenharmony_ci {0xb8, 0x30, 0x50, 0xcc}, 14968c2ecf20Sopenharmony_ci {0xb8, 0x31, 0xf8, 0xcc}, 14978c2ecf20Sopenharmony_ci {0xb8, 0x32, 0xf8, 0xcc}, 14988c2ecf20Sopenharmony_ci {0xb8, 0x33, 0xf8, 0xcc}, 14998c2ecf20Sopenharmony_ci {0xb8, 0x34, 0x58, 0xcc}, 15008c2ecf20Sopenharmony_ci {0xb8, 0x35, 0x00, 0xcc}, 15018c2ecf20Sopenharmony_ci {0xb8, 0x36, 0x00, 0xcc}, 15028c2ecf20Sopenharmony_ci {0xb8, 0x37, 0x00, 0xcc}, 15038c2ecf20Sopenharmony_ci {0xb8, 0x27, 0x20, 0xcc}, 15048c2ecf20Sopenharmony_ci {0xb8, 0x01, 0x7d, 0xcc}, 15058c2ecf20Sopenharmony_ci {0xb8, 0x81, 0x09, 0xcc}, 15068c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x41, 0xcc}, 15078c2ecf20Sopenharmony_ci {0xb8, 0x8e, 0x00, 0xcc}, 15088c2ecf20Sopenharmony_ci {0xb8, 0x8f, 0xff, 0xcc}, 15098c2ecf20Sopenharmony_ci {0x00, 0x01, 0x0c, 0xaa}, 15108c2ecf20Sopenharmony_ci {0x00, 0x14, 0x01, 0xaa}, 15118c2ecf20Sopenharmony_ci {0x00, 0x15, 0xe6, 0xaa}, 15128c2ecf20Sopenharmony_ci {0x00, 0x16, 0x02, 0xaa}, 15138c2ecf20Sopenharmony_ci {0x00, 0x17, 0x86, 0xaa}, 15148c2ecf20Sopenharmony_ci {0x00, 0x23, 0x00, 0xaa}, 15158c2ecf20Sopenharmony_ci {0x00, 0x25, 0x03, 0xaa}, 15168c2ecf20Sopenharmony_ci {0x00, 0x26, 0xa9, 0xaa}, 15178c2ecf20Sopenharmony_ci {0x00, 0x27, 0x80, 0xaa}, 15188c2ecf20Sopenharmony_ci {0x00, 0x30, 0x18, 0xaa}, 15198c2ecf20Sopenharmony_ci {0xb6, 0x00, 0x00, 0xcc}, 15208c2ecf20Sopenharmony_ci {0xb6, 0x03, 0x02, 0xcc}, 15218c2ecf20Sopenharmony_ci {0xb6, 0x02, 0x80, 0xcc}, 15228c2ecf20Sopenharmony_ci {0xb6, 0x05, 0x01, 0xcc}, 15238c2ecf20Sopenharmony_ci {0xb6, 0x04, 0xe0, 0xcc}, 15248c2ecf20Sopenharmony_ci {0xb6, 0x12, 0x78, 0xcc}, 15258c2ecf20Sopenharmony_ci {0xb6, 0x18, 0x02, 0xcc}, 15268c2ecf20Sopenharmony_ci {0xb6, 0x17, 0x58, 0xcc}, 15278c2ecf20Sopenharmony_ci {0xb6, 0x16, 0x00, 0xcc}, 15288c2ecf20Sopenharmony_ci {0xb6, 0x22, 0x12, 0xcc}, 15298c2ecf20Sopenharmony_ci {0xb6, 0x23, 0x0b, 0xcc}, 15308c2ecf20Sopenharmony_ci {0xb3, 0x02, 0x02, 0xcc}, 15318c2ecf20Sopenharmony_ci {0xbf, 0xc0, 0x39, 0xcc}, 15328c2ecf20Sopenharmony_ci {0xbf, 0xc1, 0x04, 0xcc}, 15338c2ecf20Sopenharmony_ci {0xbf, 0xcc, 0x10, 0xcc}, 15348c2ecf20Sopenharmony_ci {0xb6, 0x12, 0xf8, 0xcc}, 15358c2ecf20Sopenharmony_ci {0xb6, 0x13, 0x13, 0xcc}, 15368c2ecf20Sopenharmony_ci {0xb9, 0x12, 0x00, 0xcc}, 15378c2ecf20Sopenharmony_ci {0xb9, 0x13, 0x0a, 0xcc}, 15388c2ecf20Sopenharmony_ci {0xb9, 0x14, 0x0a, 0xcc}, 15398c2ecf20Sopenharmony_ci {0xb9, 0x15, 0x0a, 0xcc}, 15408c2ecf20Sopenharmony_ci {0xb9, 0x16, 0x0a, 0xcc}, 15418c2ecf20Sopenharmony_ci {0xb8, 0x0c, 0x20, 0xcc}, 15428c2ecf20Sopenharmony_ci {0xb8, 0x0d, 0x70, 0xcc}, 15438c2ecf20Sopenharmony_ci {0xb9, 0x18, 0x00, 0xcc}, 15448c2ecf20Sopenharmony_ci {0xb9, 0x19, 0x0f, 0xcc}, 15458c2ecf20Sopenharmony_ci {0xb9, 0x1a, 0x0f, 0xcc}, 15468c2ecf20Sopenharmony_ci {0xb9, 0x1b, 0x0f, 0xcc}, 15478c2ecf20Sopenharmony_ci {0xb9, 0x1c, 0x0f, 0xcc}, 15488c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, 15498c2ecf20Sopenharmony_ci {} 15508c2ecf20Sopenharmony_ci}; 15518c2ecf20Sopenharmony_ci 15528c2ecf20Sopenharmony_cistatic const u8 hv7131r_initQVGA_data[][4] = { 15538c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x01, 0xcc}, 15548c2ecf20Sopenharmony_ci {0xb0, 0x03, 0x19, 0xcc}, 15558c2ecf20Sopenharmony_ci {0xb0, 0x04, 0x02, 0xcc}, 15568c2ecf20Sopenharmony_ci {0x00, 0x00, 0x20, 0xdd}, 15578c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x24, 0xcc}, 15588c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x25, 0xcc}, 15598c2ecf20Sopenharmony_ci {0xb3, 0x08, 0x01, 0xcc}, 15608c2ecf20Sopenharmony_ci {0xb3, 0x09, 0x0c, 0xcc}, 15618c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x01, 0xcc}, 15628c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x03, 0xcc}, 15638c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x45, 0xcc}, 15648c2ecf20Sopenharmony_ci {0xb3, 0x03, 0x0b, 0xcc}, 15658c2ecf20Sopenharmony_ci {0xb3, 0x04, 0x05, 0xcc}, 15668c2ecf20Sopenharmony_ci {0xb3, 0x20, 0x00, 0xcc}, 15678c2ecf20Sopenharmony_ci {0xb3, 0x21, 0x00, 0xcc}, 15688c2ecf20Sopenharmony_ci {0xb3, 0x22, 0x01, 0xcc}, 15698c2ecf20Sopenharmony_ci {0xb3, 0x23, 0xe0, 0xcc}, 15708c2ecf20Sopenharmony_ci {0xb3, 0x14, 0x00, 0xcc}, 15718c2ecf20Sopenharmony_ci {0xb3, 0x15, 0x02, 0xcc}, 15728c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x02, 0xcc}, 15738c2ecf20Sopenharmony_ci {0xb3, 0x17, 0x7f, 0xcc}, 15748c2ecf20Sopenharmony_ci {0xb3, 0x34, 0x01, 0xcc}, 15758c2ecf20Sopenharmony_ci {0xb3, 0x35, 0x91, 0xcc}, 15768c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x27, 0xcc}, 15778c2ecf20Sopenharmony_ci {0xbc, 0x00, 0xd3, 0xcc}, 15788c2ecf20Sopenharmony_ci {0xb8, 0x00, 0x23, 0xcc}, 15798c2ecf20Sopenharmony_ci {0xb8, 0x2c, 0x50, 0xcc}, 15808c2ecf20Sopenharmony_ci {0xb8, 0x2d, 0xf8, 0xcc}, 15818c2ecf20Sopenharmony_ci {0xb8, 0x2e, 0xf8, 0xcc}, 15828c2ecf20Sopenharmony_ci {0xb8, 0x2f, 0xf8, 0xcc}, 15838c2ecf20Sopenharmony_ci {0xb8, 0x30, 0x50, 0xcc}, 15848c2ecf20Sopenharmony_ci {0xb8, 0x31, 0xf8, 0xcc}, 15858c2ecf20Sopenharmony_ci {0xb8, 0x32, 0xf8, 0xcc}, 15868c2ecf20Sopenharmony_ci {0xb8, 0x33, 0xf8, 0xcc}, 15878c2ecf20Sopenharmony_ci {0xb8, 0x34, 0x58, 0xcc}, 15888c2ecf20Sopenharmony_ci {0xb8, 0x35, 0x00, 0xcc}, 15898c2ecf20Sopenharmony_ci {0xb8, 0x36, 0x00, 0xcc}, 15908c2ecf20Sopenharmony_ci {0xb8, 0x37, 0x00, 0xcc}, 15918c2ecf20Sopenharmony_ci {0xb8, 0x27, 0x20, 0xcc}, 15928c2ecf20Sopenharmony_ci {0xb8, 0x01, 0x7d, 0xcc}, 15938c2ecf20Sopenharmony_ci {0xb8, 0x81, 0x09, 0xcc}, 15948c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x41, 0xcc}, 15958c2ecf20Sopenharmony_ci {0xb8, 0x8e, 0x00, 0xcc}, 15968c2ecf20Sopenharmony_ci {0xb8, 0x8f, 0xff, 0xcc}, 15978c2ecf20Sopenharmony_ci {0x00, 0x01, 0x0c, 0xaa}, 15988c2ecf20Sopenharmony_ci {0x00, 0x14, 0x01, 0xaa}, 15998c2ecf20Sopenharmony_ci {0x00, 0x15, 0xe6, 0xaa}, 16008c2ecf20Sopenharmony_ci {0x00, 0x16, 0x02, 0xaa}, 16018c2ecf20Sopenharmony_ci {0x00, 0x17, 0x86, 0xaa}, 16028c2ecf20Sopenharmony_ci {0x00, 0x23, 0x00, 0xaa}, 16038c2ecf20Sopenharmony_ci {0x00, 0x25, 0x03, 0xaa}, 16048c2ecf20Sopenharmony_ci {0x00, 0x26, 0xa9, 0xaa}, 16058c2ecf20Sopenharmony_ci {0x00, 0x27, 0x80, 0xaa}, 16068c2ecf20Sopenharmony_ci {0x00, 0x30, 0x18, 0xaa}, 16078c2ecf20Sopenharmony_ci {0xb6, 0x00, 0x00, 0xcc}, 16088c2ecf20Sopenharmony_ci {0xb6, 0x03, 0x01, 0xcc}, 16098c2ecf20Sopenharmony_ci {0xb6, 0x02, 0x40, 0xcc}, 16108c2ecf20Sopenharmony_ci {0xb6, 0x05, 0x00, 0xcc}, 16118c2ecf20Sopenharmony_ci {0xb6, 0x04, 0xf0, 0xcc}, 16128c2ecf20Sopenharmony_ci {0xb6, 0x12, 0x78, 0xcc}, 16138c2ecf20Sopenharmony_ci {0xb6, 0x18, 0x00, 0xcc}, 16148c2ecf20Sopenharmony_ci {0xb6, 0x17, 0x96, 0xcc}, 16158c2ecf20Sopenharmony_ci {0xb6, 0x16, 0x00, 0xcc}, 16168c2ecf20Sopenharmony_ci {0xb6, 0x22, 0x12, 0xcc}, 16178c2ecf20Sopenharmony_ci {0xb6, 0x23, 0x0b, 0xcc}, 16188c2ecf20Sopenharmony_ci {0xb3, 0x02, 0x02, 0xcc}, 16198c2ecf20Sopenharmony_ci {0xbf, 0xc0, 0x39, 0xcc}, 16208c2ecf20Sopenharmony_ci {0xbf, 0xc1, 0x04, 0xcc}, 16218c2ecf20Sopenharmony_ci {0xbf, 0xcc, 0x10, 0xcc}, 16228c2ecf20Sopenharmony_ci {0xbc, 0x02, 0x18, 0xcc}, 16238c2ecf20Sopenharmony_ci {0xbc, 0x03, 0x50, 0xcc}, 16248c2ecf20Sopenharmony_ci {0xbc, 0x04, 0x18, 0xcc}, 16258c2ecf20Sopenharmony_ci {0xbc, 0x05, 0x00, 0xcc}, 16268c2ecf20Sopenharmony_ci {0xbc, 0x06, 0x00, 0xcc}, 16278c2ecf20Sopenharmony_ci {0xbc, 0x08, 0x30, 0xcc}, 16288c2ecf20Sopenharmony_ci {0xbc, 0x09, 0x40, 0xcc}, 16298c2ecf20Sopenharmony_ci {0xbc, 0x0a, 0x10, 0xcc}, 16308c2ecf20Sopenharmony_ci {0xbc, 0x0b, 0x00, 0xcc}, 16318c2ecf20Sopenharmony_ci {0xbc, 0x0c, 0x00, 0xcc}, 16328c2ecf20Sopenharmony_ci {0xb9, 0x12, 0x00, 0xcc}, 16338c2ecf20Sopenharmony_ci {0xb9, 0x13, 0x0a, 0xcc}, 16348c2ecf20Sopenharmony_ci {0xb9, 0x14, 0x0a, 0xcc}, 16358c2ecf20Sopenharmony_ci {0xb9, 0x15, 0x0a, 0xcc}, 16368c2ecf20Sopenharmony_ci {0xb9, 0x16, 0x0a, 0xcc}, 16378c2ecf20Sopenharmony_ci {0xb9, 0x18, 0x00, 0xcc}, 16388c2ecf20Sopenharmony_ci {0xb9, 0x19, 0x0f, 0xcc}, 16398c2ecf20Sopenharmony_ci {0xb8, 0x0c, 0x20, 0xcc}, 16408c2ecf20Sopenharmony_ci {0xb8, 0x0d, 0x70, 0xcc}, 16418c2ecf20Sopenharmony_ci {0xb9, 0x1a, 0x0f, 0xcc}, 16428c2ecf20Sopenharmony_ci {0xb9, 0x1b, 0x0f, 0xcc}, 16438c2ecf20Sopenharmony_ci {0xb9, 0x1c, 0x0f, 0xcc}, 16448c2ecf20Sopenharmony_ci {0xb6, 0x12, 0xf8, 0xcc}, 16458c2ecf20Sopenharmony_ci {0xb6, 0x13, 0x13, 0xcc}, 16468c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, 16478c2ecf20Sopenharmony_ci {} 16488c2ecf20Sopenharmony_ci}; 16498c2ecf20Sopenharmony_ci 16508c2ecf20Sopenharmony_cistatic const u8 ov7660_gamma[17] = { 16518c2ecf20Sopenharmony_ci 0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8, 16528c2ecf20Sopenharmony_ci 0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff 16538c2ecf20Sopenharmony_ci}; 16548c2ecf20Sopenharmony_cistatic const u8 ov7660_matrix[9] = { 16558c2ecf20Sopenharmony_ci 0x5a, 0xf0, 0xf6, 0xf3, 0x57, 0xf6, 0xf3, 0xef, 0x62 16568c2ecf20Sopenharmony_ci}; 16578c2ecf20Sopenharmony_cistatic const u8 ov7660_initVGA_data[][4] = { 16588c2ecf20Sopenharmony_ci {0xb0, 0x4d, 0x00, 0xcc}, {0xb3, 0x01, 0x01, 0xcc}, 16598c2ecf20Sopenharmony_ci {0x00, 0x00, 0x50, 0xdd}, 16608c2ecf20Sopenharmony_ci {0xb0, 0x03, 0x01, 0xcc}, 16618c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x21, 0xcc}, {0xb3, 0x00, 0x26, 0xcc}, 16628c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x01, 0xcc}, 16638c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x03, 0xcc}, 16648c2ecf20Sopenharmony_ci {0xb3, 0x03, 0x1f, 0xcc}, {0xb3, 0x04, 0x05, 0xcc}, 16658c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x00, 0xcc}, 16668c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x01, 0xcc}, 16678c2ecf20Sopenharmony_ci {0xb3, 0x15, 0x00, 0xcc},/* 0xb315 <-0 href startl */ 16688c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x02, 0xcc}, {0xb3, 0x17, 0x7f, 0xcc}, 16698c2ecf20Sopenharmony_ci {0xb3, 0x21, 0x00, 0xcc}, 16708c2ecf20Sopenharmony_ci {0xb3, 0x23, 0xe0, 0xcc}, {0xb3, 0x1d, 0x01, 0xcc}, 16718c2ecf20Sopenharmony_ci {0xb3, 0x1f, 0x02, 0xcc}, 16728c2ecf20Sopenharmony_ci {0xb3, 0x34, 0x01, 0xcc}, 16738c2ecf20Sopenharmony_ci {0xb3, 0x35, 0xa1, 0xcc}, /* i2c add: 21 */ 16748c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x26, 0xcc}, 16758c2ecf20Sopenharmony_ci {0xb8, 0x00, 0x33, 0xcc}, /* 13 */ 16768c2ecf20Sopenharmony_ci {0xb8, 0x01, 0x7d, 0xcc}, 16778c2ecf20Sopenharmony_ci {0xbc, 0x00, 0x73, 0xcc}, {0xb8, 0x81, 0x09, 0xcc}, 16788c2ecf20Sopenharmony_ci {0xb8, 0x27, 0x20, 0xcc}, 16798c2ecf20Sopenharmony_ci {0xb8, 0x8f, 0x50, 0xcc}, 16808c2ecf20Sopenharmony_ci {0x00, 0x01, 0x80, 0xaa}, {0x00, 0x02, 0x80, 0xaa}, 16818c2ecf20Sopenharmony_ci {0x00, 0x12, 0x80, 0xaa}, 16828c2ecf20Sopenharmony_ci {0x00, 0x12, 0x05, 0xaa}, 16838c2ecf20Sopenharmony_ci {0x00, 0x1e, 0x01, 0xaa}, /* MVFP */ 16848c2ecf20Sopenharmony_ci {0x00, 0x3d, 0x40, 0xaa}, /* 0x3d <-40 gamma 01 */ 16858c2ecf20Sopenharmony_ci {0x00, 0x41, 0x00, 0xaa}, /* edge 00 */ 16868c2ecf20Sopenharmony_ci {0x00, 0x0d, 0x48, 0xaa}, {0x00, 0x0e, 0x04, 0xaa}, 16878c2ecf20Sopenharmony_ci {0x00, 0x13, 0xa7, 0xaa}, 16888c2ecf20Sopenharmony_ci {0x00, 0x40, 0xc1, 0xaa}, {0x00, 0x35, 0x00, 0xaa}, 16898c2ecf20Sopenharmony_ci {0x00, 0x36, 0x00, 0xaa}, 16908c2ecf20Sopenharmony_ci {0x00, 0x3c, 0x68, 0xaa}, {0x00, 0x1b, 0x05, 0xaa}, 16918c2ecf20Sopenharmony_ci {0x00, 0x39, 0x43, 0xaa}, 16928c2ecf20Sopenharmony_ci {0x00, 0x8d, 0xcf, 0xaa}, 16938c2ecf20Sopenharmony_ci {0x00, 0x8b, 0xcc, 0xaa}, {0x00, 0x8c, 0xcc, 0xaa}, 16948c2ecf20Sopenharmony_ci {0x00, 0x0f, 0x62, 0xaa}, 16958c2ecf20Sopenharmony_ci {0x00, 0x35, 0x84, 0xaa}, 16968c2ecf20Sopenharmony_ci {0x00, 0x3b, 0x08, 0xaa}, /* 0 * Nightframe 1/4 + 50Hz -> 0xC8 */ 16978c2ecf20Sopenharmony_ci {0x00, 0x3a, 0x00, 0xaa}, /* mx change yuyv format 00, 04, 01; 08, 0c*/ 16988c2ecf20Sopenharmony_ci {0x00, 0x14, 0x2a, 0xaa}, /* agc ampli */ 16998c2ecf20Sopenharmony_ci {0x00, 0x9e, 0x40, 0xaa}, {0xb8, 0x8f, 0x50, 0xcc}, 17008c2ecf20Sopenharmony_ci {0x00, 0x01, 0x80, 0xaa}, 17018c2ecf20Sopenharmony_ci {0x00, 0x02, 0x80, 0xaa}, 17028c2ecf20Sopenharmony_ci {0xb8, 0xfe, 0x00, 0xcc}, {0xb8, 0xff, 0x28, 0xcc}, 17038c2ecf20Sopenharmony_ci {0xb9, 0x00, 0x28, 0xcc}, 17048c2ecf20Sopenharmony_ci {0xb9, 0x01, 0x28, 0xcc}, {0xb9, 0x02, 0x28, 0xcc}, 17058c2ecf20Sopenharmony_ci {0xb9, 0x03, 0x00, 0xcc}, 17068c2ecf20Sopenharmony_ci {0xb9, 0x04, 0x00, 0xcc}, 17078c2ecf20Sopenharmony_ci {0xb9, 0x05, 0x3c, 0xcc}, {0xb9, 0x06, 0x3c, 0xcc}, 17088c2ecf20Sopenharmony_ci {0xb9, 0x07, 0x3c, 0xcc}, 17098c2ecf20Sopenharmony_ci {0xb9, 0x08, 0x3c, 0xcc}, 17108c2ecf20Sopenharmony_ci 17118c2ecf20Sopenharmony_ci {0xb8, 0x8e, 0x00, 0xcc}, {0xb8, 0x8f, 0xff, 0xcc}, 17128c2ecf20Sopenharmony_ci 17138c2ecf20Sopenharmony_ci {0x00, 0x29, 0x3c, 0xaa}, {0xb3, 0x01, 0x45, 0xcc}, 17148c2ecf20Sopenharmony_ci {} 17158c2ecf20Sopenharmony_ci}; 17168c2ecf20Sopenharmony_cistatic const u8 ov7660_initQVGA_data[][4] = { 17178c2ecf20Sopenharmony_ci {0xb0, 0x4d, 0x00, 0xcc}, {0xb3, 0x01, 0x01, 0xcc}, 17188c2ecf20Sopenharmony_ci {0x00, 0x00, 0x50, 0xdd}, {0xb0, 0x03, 0x01, 0xcc}, 17198c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x21, 0xcc}, {0xb3, 0x00, 0x26, 0xcc}, 17208c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x01, 0xcc}, {0xb3, 0x06, 0x03, 0xcc}, 17218c2ecf20Sopenharmony_ci {0xb3, 0x03, 0x1f, 0xcc}, {0xb3, 0x04, 0x05, 0xcc}, 17228c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x00, 0xcc}, {0xb3, 0x06, 0x01, 0xcc}, 17238c2ecf20Sopenharmony_ci {0xb3, 0x15, 0x00, 0xcc},/* 0xb315 <-0 href startl */ 17248c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x02, 0xcc}, {0xb3, 0x17, 0x7f, 0xcc}, 17258c2ecf20Sopenharmony_ci {0xb3, 0x21, 0x00, 0xcc}, 17268c2ecf20Sopenharmony_ci {0xb3, 0x23, 0xe0, 0xcc}, {0xb3, 0x1d, 0x01, 0xcc}, 17278c2ecf20Sopenharmony_ci {0xb3, 0x1f, 0x02, 0xcc}, {0xb3, 0x34, 0x01, 0xcc}, 17288c2ecf20Sopenharmony_ci {0xb3, 0x35, 0xa1, 0xcc}, {0xb3, 0x00, 0x26, 0xcc}, 17298c2ecf20Sopenharmony_ci {0xb8, 0x00, 0x33, 0xcc}, /* 13 */ 17308c2ecf20Sopenharmony_ci {0xb8, 0x01, 0x7d, 0xcc}, 17318c2ecf20Sopenharmony_ci/* sizer */ 17328c2ecf20Sopenharmony_ci {0xbc, 0x00, 0xd3, 0xcc}, 17338c2ecf20Sopenharmony_ci {0xb8, 0x81, 0x09, 0xcc}, {0xb8, 0x81, 0x09, 0xcc}, 17348c2ecf20Sopenharmony_ci {0xb8, 0x27, 0x20, 0xcc}, {0xb8, 0x8f, 0x50, 0xcc}, 17358c2ecf20Sopenharmony_ci {0x00, 0x01, 0x80, 0xaa}, {0x00, 0x02, 0x80, 0xaa}, 17368c2ecf20Sopenharmony_ci {0x00, 0x12, 0x80, 0xaa}, {0x00, 0x12, 0x05, 0xaa}, 17378c2ecf20Sopenharmony_ci {0x00, 0x1e, 0x01, 0xaa}, /* MVFP */ 17388c2ecf20Sopenharmony_ci {0x00, 0x3d, 0x40, 0xaa}, /* 0x3d <-40 gamma 01 */ 17398c2ecf20Sopenharmony_ci {0x00, 0x41, 0x00, 0xaa}, /* edge 00 */ 17408c2ecf20Sopenharmony_ci {0x00, 0x0d, 0x48, 0xaa}, {0x00, 0x0e, 0x04, 0xaa}, 17418c2ecf20Sopenharmony_ci {0x00, 0x13, 0xa7, 0xaa}, 17428c2ecf20Sopenharmony_ci {0x00, 0x40, 0xc1, 0xaa}, {0x00, 0x35, 0x00, 0xaa}, 17438c2ecf20Sopenharmony_ci {0x00, 0x36, 0x00, 0xaa}, 17448c2ecf20Sopenharmony_ci {0x00, 0x3c, 0x68, 0xaa}, {0x00, 0x1b, 0x05, 0xaa}, 17458c2ecf20Sopenharmony_ci {0x00, 0x39, 0x43, 0xaa}, {0x00, 0x8d, 0xcf, 0xaa}, 17468c2ecf20Sopenharmony_ci {0x00, 0x8b, 0xcc, 0xaa}, {0x00, 0x8c, 0xcc, 0xaa}, 17478c2ecf20Sopenharmony_ci {0x00, 0x0f, 0x62, 0xaa}, {0x00, 0x35, 0x84, 0xaa}, 17488c2ecf20Sopenharmony_ci {0x00, 0x3b, 0x08, 0xaa}, /* 0 * Nightframe 1/4 + 50Hz -> 0xC8 */ 17498c2ecf20Sopenharmony_ci {0x00, 0x3a, 0x00, 0xaa}, /* mx change yuyv format 00, 04, 01; 08, 0c*/ 17508c2ecf20Sopenharmony_ci {0x00, 0x14, 0x2a, 0xaa}, /* agc ampli */ 17518c2ecf20Sopenharmony_ci {0x00, 0x9e, 0x40, 0xaa}, {0xb8, 0x8f, 0x50, 0xcc}, 17528c2ecf20Sopenharmony_ci {0x00, 0x01, 0x80, 0xaa}, 17538c2ecf20Sopenharmony_ci {0x00, 0x02, 0x80, 0xaa}, 17548c2ecf20Sopenharmony_ci/* sizer filters */ 17558c2ecf20Sopenharmony_ci {0xbc, 0x02, 0x08, 0xcc}, 17568c2ecf20Sopenharmony_ci {0xbc, 0x03, 0x70, 0xcc}, 17578c2ecf20Sopenharmony_ci {0xb8, 0x35, 0x00, 0xcc}, 17588c2ecf20Sopenharmony_ci {0xb8, 0x36, 0x00, 0xcc}, 17598c2ecf20Sopenharmony_ci {0xb8, 0x37, 0x00, 0xcc}, 17608c2ecf20Sopenharmony_ci {0xbc, 0x04, 0x08, 0xcc}, 17618c2ecf20Sopenharmony_ci {0xbc, 0x05, 0x00, 0xcc}, 17628c2ecf20Sopenharmony_ci {0xbc, 0x06, 0x00, 0xcc}, 17638c2ecf20Sopenharmony_ci {0xbc, 0x08, 0x3c, 0xcc}, 17648c2ecf20Sopenharmony_ci {0xbc, 0x09, 0x40, 0xcc}, 17658c2ecf20Sopenharmony_ci {0xbc, 0x0a, 0x04, 0xcc}, 17668c2ecf20Sopenharmony_ci {0xbc, 0x0b, 0x00, 0xcc}, 17678c2ecf20Sopenharmony_ci {0xbc, 0x0c, 0x00, 0xcc}, 17688c2ecf20Sopenharmony_ci/* */ 17698c2ecf20Sopenharmony_ci {0xb8, 0xfe, 0x00, 0xcc}, 17708c2ecf20Sopenharmony_ci {0xb8, 0xff, 0x28, 0xcc}, 17718c2ecf20Sopenharmony_ci/* */ 17728c2ecf20Sopenharmony_ci {0xb9, 0x00, 0x28, 0xcc}, {0xb9, 0x01, 0x28, 0xcc}, 17738c2ecf20Sopenharmony_ci {0xb9, 0x02, 0x28, 0xcc}, {0xb9, 0x03, 0x00, 0xcc}, 17748c2ecf20Sopenharmony_ci {0xb9, 0x04, 0x00, 0xcc}, {0xb9, 0x05, 0x3c, 0xcc}, 17758c2ecf20Sopenharmony_ci {0xb9, 0x06, 0x3c, 0xcc}, {0xb9, 0x07, 0x3c, 0xcc}, 17768c2ecf20Sopenharmony_ci {0xb9, 0x08, 0x3c, 0xcc}, 17778c2ecf20Sopenharmony_ci/* */ 17788c2ecf20Sopenharmony_ci {0xb8, 0x8e, 0x00, 0xcc}, 17798c2ecf20Sopenharmony_ci {0xb8, 0x8f, 0xff, 0xcc}, /* ff */ 17808c2ecf20Sopenharmony_ci {0x00, 0x29, 0x3c, 0xaa}, 17818c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x45, 0xcc}, /* 45 */ 17828c2ecf20Sopenharmony_ci {} 17838c2ecf20Sopenharmony_ci}; 17848c2ecf20Sopenharmony_ci 17858c2ecf20Sopenharmony_cistatic const u8 ov7660_50HZ[][4] = { 17868c2ecf20Sopenharmony_ci {0x00, 0x3b, 0x08, 0xaa}, 17878c2ecf20Sopenharmony_ci {0x00, 0x9d, 0x40, 0xaa}, 17888c2ecf20Sopenharmony_ci {0x00, 0x13, 0xa7, 0xaa}, 17898c2ecf20Sopenharmony_ci {} 17908c2ecf20Sopenharmony_ci}; 17918c2ecf20Sopenharmony_ci 17928c2ecf20Sopenharmony_cistatic const u8 ov7660_60HZ[][4] = { 17938c2ecf20Sopenharmony_ci {0x00, 0x3b, 0x00, 0xaa}, 17948c2ecf20Sopenharmony_ci {0x00, 0x9e, 0x40, 0xaa}, 17958c2ecf20Sopenharmony_ci {0x00, 0x13, 0xa7, 0xaa}, 17968c2ecf20Sopenharmony_ci {} 17978c2ecf20Sopenharmony_ci}; 17988c2ecf20Sopenharmony_ci 17998c2ecf20Sopenharmony_cistatic const u8 ov7660_NoFliker[][4] = { 18008c2ecf20Sopenharmony_ci {0x00, 0x13, 0x87, 0xaa}, 18018c2ecf20Sopenharmony_ci {} 18028c2ecf20Sopenharmony_ci}; 18038c2ecf20Sopenharmony_ci 18048c2ecf20Sopenharmony_cistatic const u8 ov7670_InitVGA[][4] = { 18058c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x05, 0xcc}, 18068c2ecf20Sopenharmony_ci {0x00, 0x00, 0x30, 0xdd}, 18078c2ecf20Sopenharmony_ci {0xb0, 0x03, 0x19, 0xcc}, 18088c2ecf20Sopenharmony_ci {0x00, 0x00, 0x10, 0xdd}, 18098c2ecf20Sopenharmony_ci {0xb0, 0x04, 0x02, 0xcc}, 18108c2ecf20Sopenharmony_ci {0x00, 0x00, 0x10, 0xdd}, 18118c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x66, 0xcc}, 18128c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x67, 0xcc}, 18138c2ecf20Sopenharmony_ci {0xb0, 0x16, 0x01, 0xcc}, 18148c2ecf20Sopenharmony_ci {0xb3, 0x35, 0xa1, 0xcc}, /* i2c add: 21 */ 18158c2ecf20Sopenharmony_ci {0xb3, 0x34, 0x01, 0xcc}, 18168c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x01, 0xcc}, 18178c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x01, 0xcc}, 18188c2ecf20Sopenharmony_ci {0xb3, 0x08, 0x01, 0xcc}, 18198c2ecf20Sopenharmony_ci {0xb3, 0x09, 0x0c, 0xcc}, 18208c2ecf20Sopenharmony_ci {0xb3, 0x02, 0x02, 0xcc}, 18218c2ecf20Sopenharmony_ci {0xb3, 0x03, 0x1f, 0xcc}, 18228c2ecf20Sopenharmony_ci {0xb3, 0x14, 0x00, 0xcc}, 18238c2ecf20Sopenharmony_ci {0xb3, 0x15, 0x00, 0xcc}, 18248c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x02, 0xcc}, 18258c2ecf20Sopenharmony_ci {0xb3, 0x17, 0x7f, 0xcc}, 18268c2ecf20Sopenharmony_ci {0xb3, 0x04, 0x05, 0xcc}, 18278c2ecf20Sopenharmony_ci {0xb3, 0x20, 0x00, 0xcc}, 18288c2ecf20Sopenharmony_ci {0xb3, 0x21, 0x00, 0xcc}, 18298c2ecf20Sopenharmony_ci {0xb3, 0x22, 0x01, 0xcc}, 18308c2ecf20Sopenharmony_ci {0xb3, 0x23, 0xe0, 0xcc}, 18318c2ecf20Sopenharmony_ci {0xbc, 0x00, 0x41, 0xcc}, 18328c2ecf20Sopenharmony_ci {0xbc, 0x01, 0x01, 0xcc}, 18338c2ecf20Sopenharmony_ci {0x00, 0x12, 0x80, 0xaa}, 18348c2ecf20Sopenharmony_ci {0x00, 0x00, 0x20, 0xdd}, 18358c2ecf20Sopenharmony_ci {0x00, 0x12, 0x00, 0xaa}, 18368c2ecf20Sopenharmony_ci {0x00, 0x11, 0x40, 0xaa}, 18378c2ecf20Sopenharmony_ci {0x00, 0x6b, 0x0a, 0xaa}, 18388c2ecf20Sopenharmony_ci {0x00, 0x3a, 0x04, 0xaa}, 18398c2ecf20Sopenharmony_ci {0x00, 0x40, 0xc0, 0xaa}, 18408c2ecf20Sopenharmony_ci {0x00, 0x8c, 0x00, 0xaa}, 18418c2ecf20Sopenharmony_ci {0x00, 0x7a, 0x29, 0xaa}, 18428c2ecf20Sopenharmony_ci {0x00, 0x7b, 0x0e, 0xaa}, 18438c2ecf20Sopenharmony_ci {0x00, 0x7c, 0x1a, 0xaa}, 18448c2ecf20Sopenharmony_ci {0x00, 0x7d, 0x31, 0xaa}, 18458c2ecf20Sopenharmony_ci {0x00, 0x7e, 0x53, 0xaa}, 18468c2ecf20Sopenharmony_ci {0x00, 0x7f, 0x60, 0xaa}, 18478c2ecf20Sopenharmony_ci {0x00, 0x80, 0x6b, 0xaa}, 18488c2ecf20Sopenharmony_ci {0x00, 0x81, 0x73, 0xaa}, 18498c2ecf20Sopenharmony_ci {0x00, 0x82, 0x7b, 0xaa}, 18508c2ecf20Sopenharmony_ci {0x00, 0x83, 0x82, 0xaa}, 18518c2ecf20Sopenharmony_ci {0x00, 0x84, 0x89, 0xaa}, 18528c2ecf20Sopenharmony_ci {0x00, 0x85, 0x96, 0xaa}, 18538c2ecf20Sopenharmony_ci {0x00, 0x86, 0xa1, 0xaa}, 18548c2ecf20Sopenharmony_ci {0x00, 0x87, 0xb7, 0xaa}, 18558c2ecf20Sopenharmony_ci {0x00, 0x88, 0xcc, 0xaa}, 18568c2ecf20Sopenharmony_ci {0x00, 0x89, 0xe1, 0xaa}, 18578c2ecf20Sopenharmony_ci {0x00, 0x13, 0xe0, 0xaa}, 18588c2ecf20Sopenharmony_ci {0x00, 0x00, 0x00, 0xaa}, 18598c2ecf20Sopenharmony_ci {0x00, 0x10, 0x00, 0xaa}, 18608c2ecf20Sopenharmony_ci {0x00, 0x0d, 0x40, 0xaa}, 18618c2ecf20Sopenharmony_ci {0x00, 0x14, 0x28, 0xaa}, 18628c2ecf20Sopenharmony_ci {0x00, 0xa5, 0x05, 0xaa}, 18638c2ecf20Sopenharmony_ci {0x00, 0xab, 0x07, 0xaa}, 18648c2ecf20Sopenharmony_ci {0x00, 0x24, 0x95, 0xaa}, 18658c2ecf20Sopenharmony_ci {0x00, 0x25, 0x33, 0xaa}, 18668c2ecf20Sopenharmony_ci {0x00, 0x26, 0xe3, 0xaa}, 18678c2ecf20Sopenharmony_ci {0x00, 0x9f, 0x88, 0xaa}, 18688c2ecf20Sopenharmony_ci {0x00, 0xa0, 0x78, 0xaa}, 18698c2ecf20Sopenharmony_ci {0x00, 0x55, 0x90, 0xaa}, 18708c2ecf20Sopenharmony_ci {0x00, 0xa1, 0x03, 0xaa}, 18718c2ecf20Sopenharmony_ci {0x00, 0xa6, 0xe0, 0xaa}, 18728c2ecf20Sopenharmony_ci {0x00, 0xa7, 0xd8, 0xaa}, 18738c2ecf20Sopenharmony_ci {0x00, 0xa8, 0xf0, 0xaa}, 18748c2ecf20Sopenharmony_ci {0x00, 0xa9, 0x90, 0xaa}, 18758c2ecf20Sopenharmony_ci {0x00, 0xaa, 0x14, 0xaa}, 18768c2ecf20Sopenharmony_ci {0x00, 0x13, 0xe5, 0xaa}, 18778c2ecf20Sopenharmony_ci {0x00, 0x0e, 0x61, 0xaa}, 18788c2ecf20Sopenharmony_ci {0x00, 0x0f, 0x4b, 0xaa}, 18798c2ecf20Sopenharmony_ci {0x00, 0x16, 0x02, 0xaa}, 18808c2ecf20Sopenharmony_ci {0x00, 0x1e, 0x07, 0xaa}, /* MVFP */ 18818c2ecf20Sopenharmony_ci {0x00, 0x21, 0x02, 0xaa}, 18828c2ecf20Sopenharmony_ci {0x00, 0x22, 0x91, 0xaa}, 18838c2ecf20Sopenharmony_ci {0x00, 0x29, 0x07, 0xaa}, 18848c2ecf20Sopenharmony_ci {0x00, 0x33, 0x0b, 0xaa}, 18858c2ecf20Sopenharmony_ci {0x00, 0x35, 0x0b, 0xaa}, 18868c2ecf20Sopenharmony_ci {0x00, 0x37, 0x1d, 0xaa}, 18878c2ecf20Sopenharmony_ci {0x00, 0x38, 0x71, 0xaa}, 18888c2ecf20Sopenharmony_ci {0x00, 0x39, 0x2a, 0xaa}, 18898c2ecf20Sopenharmony_ci {0x00, 0x3c, 0x78, 0xaa}, 18908c2ecf20Sopenharmony_ci {0x00, 0x4d, 0x40, 0xaa}, 18918c2ecf20Sopenharmony_ci {0x00, 0x4e, 0x20, 0xaa}, 18928c2ecf20Sopenharmony_ci {0x00, 0x74, 0x19, 0xaa}, 18938c2ecf20Sopenharmony_ci {0x00, 0x8d, 0x4f, 0xaa}, 18948c2ecf20Sopenharmony_ci {0x00, 0x8e, 0x00, 0xaa}, 18958c2ecf20Sopenharmony_ci {0x00, 0x8f, 0x00, 0xaa}, 18968c2ecf20Sopenharmony_ci {0x00, 0x90, 0x00, 0xaa}, 18978c2ecf20Sopenharmony_ci {0x00, 0x91, 0x00, 0xaa}, 18988c2ecf20Sopenharmony_ci {0x00, 0x96, 0x00, 0xaa}, 18998c2ecf20Sopenharmony_ci {0x00, 0x9a, 0x80, 0xaa}, 19008c2ecf20Sopenharmony_ci {0x00, 0xb0, 0x84, 0xaa}, 19018c2ecf20Sopenharmony_ci {0x00, 0xb1, 0x0c, 0xaa}, 19028c2ecf20Sopenharmony_ci {0x00, 0xb2, 0x0e, 0xaa}, 19038c2ecf20Sopenharmony_ci {0x00, 0xb3, 0x82, 0xaa}, 19048c2ecf20Sopenharmony_ci {0x00, 0xb8, 0x0a, 0xaa}, 19058c2ecf20Sopenharmony_ci {0x00, 0x43, 0x14, 0xaa}, 19068c2ecf20Sopenharmony_ci {0x00, 0x44, 0xf0, 0xaa}, 19078c2ecf20Sopenharmony_ci {0x00, 0x45, 0x45, 0xaa}, 19088c2ecf20Sopenharmony_ci {0x00, 0x46, 0x63, 0xaa}, 19098c2ecf20Sopenharmony_ci {0x00, 0x47, 0x2d, 0xaa}, 19108c2ecf20Sopenharmony_ci {0x00, 0x48, 0x46, 0xaa}, 19118c2ecf20Sopenharmony_ci {0x00, 0x59, 0x88, 0xaa}, 19128c2ecf20Sopenharmony_ci {0x00, 0x5a, 0xa0, 0xaa}, 19138c2ecf20Sopenharmony_ci {0x00, 0x5b, 0xc6, 0xaa}, 19148c2ecf20Sopenharmony_ci {0x00, 0x5c, 0x7d, 0xaa}, 19158c2ecf20Sopenharmony_ci {0x00, 0x5d, 0x5f, 0xaa}, 19168c2ecf20Sopenharmony_ci {0x00, 0x5e, 0x19, 0xaa}, 19178c2ecf20Sopenharmony_ci {0x00, 0x6c, 0x0a, 0xaa}, 19188c2ecf20Sopenharmony_ci {0x00, 0x6d, 0x55, 0xaa}, 19198c2ecf20Sopenharmony_ci {0x00, 0x6e, 0x11, 0xaa}, 19208c2ecf20Sopenharmony_ci {0x00, 0x6f, 0x9e, 0xaa}, 19218c2ecf20Sopenharmony_ci {0x00, 0x69, 0x00, 0xaa}, 19228c2ecf20Sopenharmony_ci {0x00, 0x6a, 0x40, 0xaa}, 19238c2ecf20Sopenharmony_ci {0x00, 0x01, 0x40, 0xaa}, 19248c2ecf20Sopenharmony_ci {0x00, 0x02, 0x40, 0xaa}, 19258c2ecf20Sopenharmony_ci {0x00, 0x13, 0xe7, 0xaa}, 19268c2ecf20Sopenharmony_ci {0x00, 0x5f, 0xf0, 0xaa}, 19278c2ecf20Sopenharmony_ci {0x00, 0x60, 0xf0, 0xaa}, 19288c2ecf20Sopenharmony_ci {0x00, 0x61, 0xf0, 0xaa}, 19298c2ecf20Sopenharmony_ci {0x00, 0x27, 0xa0, 0xaa}, 19308c2ecf20Sopenharmony_ci {0x00, 0x28, 0x80, 0xaa}, 19318c2ecf20Sopenharmony_ci {0x00, 0x2c, 0x90, 0xaa}, 19328c2ecf20Sopenharmony_ci {0x00, 0x4f, 0x66, 0xaa}, 19338c2ecf20Sopenharmony_ci {0x00, 0x50, 0x66, 0xaa}, 19348c2ecf20Sopenharmony_ci {0x00, 0x51, 0x00, 0xaa}, 19358c2ecf20Sopenharmony_ci {0x00, 0x52, 0x22, 0xaa}, 19368c2ecf20Sopenharmony_ci {0x00, 0x53, 0x5e, 0xaa}, 19378c2ecf20Sopenharmony_ci {0x00, 0x54, 0x80, 0xaa}, 19388c2ecf20Sopenharmony_ci {0x00, 0x58, 0x9e, 0xaa}, 19398c2ecf20Sopenharmony_ci {0x00, 0x41, 0x08, 0xaa}, 19408c2ecf20Sopenharmony_ci {0x00, 0x3f, 0x00, 0xaa}, 19418c2ecf20Sopenharmony_ci {0x00, 0x75, 0x85, 0xaa}, 19428c2ecf20Sopenharmony_ci {0x00, 0x76, 0xe1, 0xaa}, 19438c2ecf20Sopenharmony_ci {0x00, 0x4c, 0x00, 0xaa}, 19448c2ecf20Sopenharmony_ci {0x00, 0x77, 0x0a, 0xaa}, 19458c2ecf20Sopenharmony_ci {0x00, 0x3d, 0x88, 0xaa}, 19468c2ecf20Sopenharmony_ci {0x00, 0x4b, 0x09, 0xaa}, 19478c2ecf20Sopenharmony_ci {0x00, 0xc9, 0x60, 0xaa}, 19488c2ecf20Sopenharmony_ci {0x00, 0x41, 0x38, 0xaa}, 19498c2ecf20Sopenharmony_ci {0x00, 0x62, 0x30, 0xaa}, 19508c2ecf20Sopenharmony_ci {0x00, 0x63, 0x30, 0xaa}, 19518c2ecf20Sopenharmony_ci {0x00, 0x64, 0x08, 0xaa}, 19528c2ecf20Sopenharmony_ci {0x00, 0x94, 0x07, 0xaa}, 19538c2ecf20Sopenharmony_ci {0x00, 0x95, 0x0b, 0xaa}, 19548c2ecf20Sopenharmony_ci {0x00, 0x65, 0x00, 0xaa}, 19558c2ecf20Sopenharmony_ci {0x00, 0x66, 0x05, 0xaa}, 19568c2ecf20Sopenharmony_ci {0x00, 0x56, 0x50, 0xaa}, 19578c2ecf20Sopenharmony_ci {0x00, 0x34, 0x11, 0xaa}, 19588c2ecf20Sopenharmony_ci {0x00, 0xa4, 0x88, 0xaa}, 19598c2ecf20Sopenharmony_ci {0x00, 0x96, 0x00, 0xaa}, 19608c2ecf20Sopenharmony_ci {0x00, 0x97, 0x30, 0xaa}, 19618c2ecf20Sopenharmony_ci {0x00, 0x98, 0x20, 0xaa}, 19628c2ecf20Sopenharmony_ci {0x00, 0x99, 0x30, 0xaa}, 19638c2ecf20Sopenharmony_ci {0x00, 0x9a, 0x84, 0xaa}, 19648c2ecf20Sopenharmony_ci {0x00, 0x9b, 0x29, 0xaa}, 19658c2ecf20Sopenharmony_ci {0x00, 0x9c, 0x03, 0xaa}, 19668c2ecf20Sopenharmony_ci {0x00, 0x78, 0x04, 0xaa}, 19678c2ecf20Sopenharmony_ci {0x00, 0x79, 0x01, 0xaa}, 19688c2ecf20Sopenharmony_ci {0x00, 0xc8, 0xf0, 0xaa}, 19698c2ecf20Sopenharmony_ci {0x00, 0x79, 0x0f, 0xaa}, 19708c2ecf20Sopenharmony_ci {0x00, 0xc8, 0x00, 0xaa}, 19718c2ecf20Sopenharmony_ci {0x00, 0x79, 0x10, 0xaa}, 19728c2ecf20Sopenharmony_ci {0x00, 0xc8, 0x7e, 0xaa}, 19738c2ecf20Sopenharmony_ci {0x00, 0x79, 0x0a, 0xaa}, 19748c2ecf20Sopenharmony_ci {0x00, 0xc8, 0x80, 0xaa}, 19758c2ecf20Sopenharmony_ci {0x00, 0x79, 0x0b, 0xaa}, 19768c2ecf20Sopenharmony_ci {0x00, 0xc8, 0x01, 0xaa}, 19778c2ecf20Sopenharmony_ci {0x00, 0x79, 0x0c, 0xaa}, 19788c2ecf20Sopenharmony_ci {0x00, 0xc8, 0x0f, 0xaa}, 19798c2ecf20Sopenharmony_ci {0x00, 0x79, 0x0d, 0xaa}, 19808c2ecf20Sopenharmony_ci {0x00, 0xc8, 0x20, 0xaa}, 19818c2ecf20Sopenharmony_ci {0x00, 0x79, 0x09, 0xaa}, 19828c2ecf20Sopenharmony_ci {0x00, 0xc8, 0x80, 0xaa}, 19838c2ecf20Sopenharmony_ci {0x00, 0x79, 0x02, 0xaa}, 19848c2ecf20Sopenharmony_ci {0x00, 0xc8, 0xc0, 0xaa}, 19858c2ecf20Sopenharmony_ci {0x00, 0x79, 0x03, 0xaa}, 19868c2ecf20Sopenharmony_ci {0x00, 0xc8, 0x40, 0xaa}, 19878c2ecf20Sopenharmony_ci {0x00, 0x79, 0x05, 0xaa}, 19888c2ecf20Sopenharmony_ci {0x00, 0xc8, 0x30, 0xaa}, 19898c2ecf20Sopenharmony_ci {0x00, 0x79, 0x26, 0xaa}, 19908c2ecf20Sopenharmony_ci {0x00, 0x11, 0x40, 0xaa}, 19918c2ecf20Sopenharmony_ci {0x00, 0x3a, 0x04, 0xaa}, 19928c2ecf20Sopenharmony_ci {0x00, 0x12, 0x00, 0xaa}, 19938c2ecf20Sopenharmony_ci {0x00, 0x40, 0xc0, 0xaa}, 19948c2ecf20Sopenharmony_ci {0x00, 0x8c, 0x00, 0xaa}, 19958c2ecf20Sopenharmony_ci {0x00, 0x17, 0x14, 0xaa}, 19968c2ecf20Sopenharmony_ci {0x00, 0x18, 0x02, 0xaa}, 19978c2ecf20Sopenharmony_ci {0x00, 0x32, 0x92, 0xaa}, 19988c2ecf20Sopenharmony_ci {0x00, 0x19, 0x02, 0xaa}, 19998c2ecf20Sopenharmony_ci {0x00, 0x1a, 0x7a, 0xaa}, 20008c2ecf20Sopenharmony_ci {0x00, 0x03, 0x0a, 0xaa}, 20018c2ecf20Sopenharmony_ci {0x00, 0x0c, 0x00, 0xaa}, 20028c2ecf20Sopenharmony_ci {0x00, 0x3e, 0x00, 0xaa}, 20038c2ecf20Sopenharmony_ci {0x00, 0x70, 0x3a, 0xaa}, 20048c2ecf20Sopenharmony_ci {0x00, 0x71, 0x35, 0xaa}, 20058c2ecf20Sopenharmony_ci {0x00, 0x72, 0x11, 0xaa}, 20068c2ecf20Sopenharmony_ci {0x00, 0x73, 0xf0, 0xaa}, 20078c2ecf20Sopenharmony_ci {0x00, 0xa2, 0x02, 0xaa}, 20088c2ecf20Sopenharmony_ci {0x00, 0xb1, 0x00, 0xaa}, 20098c2ecf20Sopenharmony_ci {0x00, 0xb1, 0x0c, 0xaa}, 20108c2ecf20Sopenharmony_ci {0x00, 0x1e, 0x37, 0xaa}, /* MVFP */ 20118c2ecf20Sopenharmony_ci {0x00, 0xaa, 0x14, 0xaa}, 20128c2ecf20Sopenharmony_ci {0x00, 0x24, 0x80, 0xaa}, 20138c2ecf20Sopenharmony_ci {0x00, 0x25, 0x74, 0xaa}, 20148c2ecf20Sopenharmony_ci {0x00, 0x26, 0xd3, 0xaa}, 20158c2ecf20Sopenharmony_ci {0x00, 0x0d, 0x00, 0xaa}, 20168c2ecf20Sopenharmony_ci {0x00, 0x14, 0x18, 0xaa}, 20178c2ecf20Sopenharmony_ci {0x00, 0x9d, 0x99, 0xaa}, 20188c2ecf20Sopenharmony_ci {0x00, 0x9e, 0x7f, 0xaa}, 20198c2ecf20Sopenharmony_ci {0x00, 0x64, 0x08, 0xaa}, 20208c2ecf20Sopenharmony_ci {0x00, 0x94, 0x07, 0xaa}, 20218c2ecf20Sopenharmony_ci {0x00, 0x95, 0x06, 0xaa}, 20228c2ecf20Sopenharmony_ci {0x00, 0x66, 0x05, 0xaa}, 20238c2ecf20Sopenharmony_ci {0x00, 0x41, 0x08, 0xaa}, 20248c2ecf20Sopenharmony_ci {0x00, 0x3f, 0x00, 0xaa}, 20258c2ecf20Sopenharmony_ci {0x00, 0x75, 0x07, 0xaa}, 20268c2ecf20Sopenharmony_ci {0x00, 0x76, 0xe1, 0xaa}, 20278c2ecf20Sopenharmony_ci {0x00, 0x4c, 0x00, 0xaa}, 20288c2ecf20Sopenharmony_ci {0x00, 0x77, 0x00, 0xaa}, 20298c2ecf20Sopenharmony_ci {0x00, 0x3d, 0xc2, 0xaa}, 20308c2ecf20Sopenharmony_ci {0x00, 0x4b, 0x09, 0xaa}, 20318c2ecf20Sopenharmony_ci {0x00, 0xc9, 0x60, 0xaa}, 20328c2ecf20Sopenharmony_ci {0x00, 0x41, 0x38, 0xaa}, 20338c2ecf20Sopenharmony_ci {0xbf, 0xc0, 0x26, 0xcc}, 20348c2ecf20Sopenharmony_ci {0xbf, 0xc1, 0x02, 0xcc}, 20358c2ecf20Sopenharmony_ci {0xbf, 0xcc, 0x04, 0xcc}, 20368c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, 20378c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x45, 0xcc}, 20388c2ecf20Sopenharmony_ci {0x00, 0x77, 0x05, 0xaa}, 20398c2ecf20Sopenharmony_ci {}, 20408c2ecf20Sopenharmony_ci}; 20418c2ecf20Sopenharmony_ci 20428c2ecf20Sopenharmony_cistatic const u8 ov7670_InitQVGA[][4] = { 20438c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x05, 0xcc}, 20448c2ecf20Sopenharmony_ci {0x00, 0x00, 0x30, 0xdd}, 20458c2ecf20Sopenharmony_ci {0xb0, 0x03, 0x19, 0xcc}, 20468c2ecf20Sopenharmony_ci {0x00, 0x00, 0x10, 0xdd}, 20478c2ecf20Sopenharmony_ci {0xb0, 0x04, 0x02, 0xcc}, 20488c2ecf20Sopenharmony_ci {0x00, 0x00, 0x10, 0xdd}, 20498c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x66, 0xcc}, 20508c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x67, 0xcc}, 20518c2ecf20Sopenharmony_ci {0xb0, 0x16, 0x01, 0xcc}, 20528c2ecf20Sopenharmony_ci {0xb3, 0x35, 0xa1, 0xcc}, /* i2c add: 21 */ 20538c2ecf20Sopenharmony_ci {0xb3, 0x34, 0x01, 0xcc}, 20548c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x01, 0xcc}, 20558c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x01, 0xcc}, 20568c2ecf20Sopenharmony_ci {0xb3, 0x08, 0x01, 0xcc}, 20578c2ecf20Sopenharmony_ci {0xb3, 0x09, 0x0c, 0xcc}, 20588c2ecf20Sopenharmony_ci {0xb3, 0x02, 0x02, 0xcc}, 20598c2ecf20Sopenharmony_ci {0xb3, 0x03, 0x1f, 0xcc}, 20608c2ecf20Sopenharmony_ci {0xb3, 0x14, 0x00, 0xcc}, 20618c2ecf20Sopenharmony_ci {0xb3, 0x15, 0x00, 0xcc}, 20628c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x02, 0xcc}, 20638c2ecf20Sopenharmony_ci {0xb3, 0x17, 0x7f, 0xcc}, 20648c2ecf20Sopenharmony_ci {0xb3, 0x04, 0x05, 0xcc}, 20658c2ecf20Sopenharmony_ci {0xb3, 0x20, 0x00, 0xcc}, 20668c2ecf20Sopenharmony_ci {0xb3, 0x21, 0x00, 0xcc}, 20678c2ecf20Sopenharmony_ci {0xb3, 0x22, 0x01, 0xcc}, 20688c2ecf20Sopenharmony_ci {0xb3, 0x23, 0xe0, 0xcc}, 20698c2ecf20Sopenharmony_ci {0xbc, 0x00, 0xd1, 0xcc}, 20708c2ecf20Sopenharmony_ci {0xbc, 0x01, 0x01, 0xcc}, 20718c2ecf20Sopenharmony_ci {0x00, 0x12, 0x80, 0xaa}, 20728c2ecf20Sopenharmony_ci {0x00, 0x00, 0x20, 0xdd}, 20738c2ecf20Sopenharmony_ci {0x00, 0x12, 0x00, 0xaa}, 20748c2ecf20Sopenharmony_ci {0x00, 0x11, 0x40, 0xaa}, 20758c2ecf20Sopenharmony_ci {0x00, 0x6b, 0x0a, 0xaa}, 20768c2ecf20Sopenharmony_ci {0x00, 0x3a, 0x04, 0xaa}, 20778c2ecf20Sopenharmony_ci {0x00, 0x40, 0xc0, 0xaa}, 20788c2ecf20Sopenharmony_ci {0x00, 0x8c, 0x00, 0xaa}, 20798c2ecf20Sopenharmony_ci {0x00, 0x7a, 0x29, 0xaa}, 20808c2ecf20Sopenharmony_ci {0x00, 0x7b, 0x0e, 0xaa}, 20818c2ecf20Sopenharmony_ci {0x00, 0x7c, 0x1a, 0xaa}, 20828c2ecf20Sopenharmony_ci {0x00, 0x7d, 0x31, 0xaa}, 20838c2ecf20Sopenharmony_ci {0x00, 0x7e, 0x53, 0xaa}, 20848c2ecf20Sopenharmony_ci {0x00, 0x7f, 0x60, 0xaa}, 20858c2ecf20Sopenharmony_ci {0x00, 0x80, 0x6b, 0xaa}, 20868c2ecf20Sopenharmony_ci {0x00, 0x81, 0x73, 0xaa}, 20878c2ecf20Sopenharmony_ci {0x00, 0x82, 0x7b, 0xaa}, 20888c2ecf20Sopenharmony_ci {0x00, 0x83, 0x82, 0xaa}, 20898c2ecf20Sopenharmony_ci {0x00, 0x84, 0x89, 0xaa}, 20908c2ecf20Sopenharmony_ci {0x00, 0x85, 0x96, 0xaa}, 20918c2ecf20Sopenharmony_ci {0x00, 0x86, 0xa1, 0xaa}, 20928c2ecf20Sopenharmony_ci {0x00, 0x87, 0xb7, 0xaa}, 20938c2ecf20Sopenharmony_ci {0x00, 0x88, 0xcc, 0xaa}, 20948c2ecf20Sopenharmony_ci {0x00, 0x89, 0xe1, 0xaa}, 20958c2ecf20Sopenharmony_ci {0x00, 0x13, 0xe0, 0xaa}, 20968c2ecf20Sopenharmony_ci {0x00, 0x00, 0x00, 0xaa}, 20978c2ecf20Sopenharmony_ci {0x00, 0x10, 0x00, 0xaa}, 20988c2ecf20Sopenharmony_ci {0x00, 0x0d, 0x40, 0xaa}, 20998c2ecf20Sopenharmony_ci {0x00, 0x14, 0x28, 0xaa}, 21008c2ecf20Sopenharmony_ci {0x00, 0xa5, 0x05, 0xaa}, 21018c2ecf20Sopenharmony_ci {0x00, 0xab, 0x07, 0xaa}, 21028c2ecf20Sopenharmony_ci {0x00, 0x24, 0x95, 0xaa}, 21038c2ecf20Sopenharmony_ci {0x00, 0x25, 0x33, 0xaa}, 21048c2ecf20Sopenharmony_ci {0x00, 0x26, 0xe3, 0xaa}, 21058c2ecf20Sopenharmony_ci {0x00, 0x9f, 0x88, 0xaa}, 21068c2ecf20Sopenharmony_ci {0x00, 0xa0, 0x78, 0xaa}, 21078c2ecf20Sopenharmony_ci {0x00, 0x55, 0x90, 0xaa}, 21088c2ecf20Sopenharmony_ci {0x00, 0xa1, 0x03, 0xaa}, 21098c2ecf20Sopenharmony_ci {0x00, 0xa6, 0xe0, 0xaa}, 21108c2ecf20Sopenharmony_ci {0x00, 0xa7, 0xd8, 0xaa}, 21118c2ecf20Sopenharmony_ci {0x00, 0xa8, 0xf0, 0xaa}, 21128c2ecf20Sopenharmony_ci {0x00, 0xa9, 0x90, 0xaa}, 21138c2ecf20Sopenharmony_ci {0x00, 0xaa, 0x14, 0xaa}, 21148c2ecf20Sopenharmony_ci {0x00, 0x13, 0xe5, 0xaa}, 21158c2ecf20Sopenharmony_ci {0x00, 0x0e, 0x61, 0xaa}, 21168c2ecf20Sopenharmony_ci {0x00, 0x0f, 0x4b, 0xaa}, 21178c2ecf20Sopenharmony_ci {0x00, 0x16, 0x02, 0xaa}, 21188c2ecf20Sopenharmony_ci {0x00, 0x1e, 0x07, 0xaa}, /* MVFP */ 21198c2ecf20Sopenharmony_ci {0x00, 0x21, 0x02, 0xaa}, 21208c2ecf20Sopenharmony_ci {0x00, 0x22, 0x91, 0xaa}, 21218c2ecf20Sopenharmony_ci {0x00, 0x29, 0x07, 0xaa}, 21228c2ecf20Sopenharmony_ci {0x00, 0x33, 0x0b, 0xaa}, 21238c2ecf20Sopenharmony_ci {0x00, 0x35, 0x0b, 0xaa}, 21248c2ecf20Sopenharmony_ci {0x00, 0x37, 0x1d, 0xaa}, 21258c2ecf20Sopenharmony_ci {0x00, 0x38, 0x71, 0xaa}, 21268c2ecf20Sopenharmony_ci {0x00, 0x39, 0x2a, 0xaa}, 21278c2ecf20Sopenharmony_ci {0x00, 0x3c, 0x78, 0xaa}, 21288c2ecf20Sopenharmony_ci {0x00, 0x4d, 0x40, 0xaa}, 21298c2ecf20Sopenharmony_ci {0x00, 0x4e, 0x20, 0xaa}, 21308c2ecf20Sopenharmony_ci {0x00, 0x74, 0x19, 0xaa}, 21318c2ecf20Sopenharmony_ci {0x00, 0x8d, 0x4f, 0xaa}, 21328c2ecf20Sopenharmony_ci {0x00, 0x8e, 0x00, 0xaa}, 21338c2ecf20Sopenharmony_ci {0x00, 0x8f, 0x00, 0xaa}, 21348c2ecf20Sopenharmony_ci {0x00, 0x90, 0x00, 0xaa}, 21358c2ecf20Sopenharmony_ci {0x00, 0x91, 0x00, 0xaa}, 21368c2ecf20Sopenharmony_ci {0x00, 0x96, 0x00, 0xaa}, 21378c2ecf20Sopenharmony_ci {0x00, 0x9a, 0x80, 0xaa}, 21388c2ecf20Sopenharmony_ci {0x00, 0xb0, 0x84, 0xaa}, 21398c2ecf20Sopenharmony_ci {0x00, 0xb1, 0x0c, 0xaa}, 21408c2ecf20Sopenharmony_ci {0x00, 0xb2, 0x0e, 0xaa}, 21418c2ecf20Sopenharmony_ci {0x00, 0xb3, 0x82, 0xaa}, 21428c2ecf20Sopenharmony_ci {0x00, 0xb8, 0x0a, 0xaa}, 21438c2ecf20Sopenharmony_ci {0x00, 0x43, 0x14, 0xaa}, 21448c2ecf20Sopenharmony_ci {0x00, 0x44, 0xf0, 0xaa}, 21458c2ecf20Sopenharmony_ci {0x00, 0x45, 0x45, 0xaa}, 21468c2ecf20Sopenharmony_ci {0x00, 0x46, 0x63, 0xaa}, 21478c2ecf20Sopenharmony_ci {0x00, 0x47, 0x2d, 0xaa}, 21488c2ecf20Sopenharmony_ci {0x00, 0x48, 0x46, 0xaa}, 21498c2ecf20Sopenharmony_ci {0x00, 0x59, 0x88, 0xaa}, 21508c2ecf20Sopenharmony_ci {0x00, 0x5a, 0xa0, 0xaa}, 21518c2ecf20Sopenharmony_ci {0x00, 0x5b, 0xc6, 0xaa}, 21528c2ecf20Sopenharmony_ci {0x00, 0x5c, 0x7d, 0xaa}, 21538c2ecf20Sopenharmony_ci {0x00, 0x5d, 0x5f, 0xaa}, 21548c2ecf20Sopenharmony_ci {0x00, 0x5e, 0x19, 0xaa}, 21558c2ecf20Sopenharmony_ci {0x00, 0x6c, 0x0a, 0xaa}, 21568c2ecf20Sopenharmony_ci {0x00, 0x6d, 0x55, 0xaa}, 21578c2ecf20Sopenharmony_ci {0x00, 0x6e, 0x11, 0xaa}, 21588c2ecf20Sopenharmony_ci {0x00, 0x6f, 0x9e, 0xaa}, 21598c2ecf20Sopenharmony_ci {0x00, 0x69, 0x00, 0xaa}, 21608c2ecf20Sopenharmony_ci {0x00, 0x6a, 0x40, 0xaa}, 21618c2ecf20Sopenharmony_ci {0x00, 0x01, 0x40, 0xaa}, 21628c2ecf20Sopenharmony_ci {0x00, 0x02, 0x40, 0xaa}, 21638c2ecf20Sopenharmony_ci {0x00, 0x13, 0xe7, 0xaa}, 21648c2ecf20Sopenharmony_ci {0x00, 0x5f, 0xf0, 0xaa}, 21658c2ecf20Sopenharmony_ci {0x00, 0x60, 0xf0, 0xaa}, 21668c2ecf20Sopenharmony_ci {0x00, 0x61, 0xf0, 0xaa}, 21678c2ecf20Sopenharmony_ci {0x00, 0x27, 0xa0, 0xaa}, 21688c2ecf20Sopenharmony_ci {0x00, 0x28, 0x80, 0xaa}, 21698c2ecf20Sopenharmony_ci {0x00, 0x2c, 0x90, 0xaa}, 21708c2ecf20Sopenharmony_ci {0x00, 0x4f, 0x66, 0xaa}, 21718c2ecf20Sopenharmony_ci {0x00, 0x50, 0x66, 0xaa}, 21728c2ecf20Sopenharmony_ci {0x00, 0x51, 0x00, 0xaa}, 21738c2ecf20Sopenharmony_ci {0x00, 0x52, 0x22, 0xaa}, 21748c2ecf20Sopenharmony_ci {0x00, 0x53, 0x5e, 0xaa}, 21758c2ecf20Sopenharmony_ci {0x00, 0x54, 0x80, 0xaa}, 21768c2ecf20Sopenharmony_ci {0x00, 0x58, 0x9e, 0xaa}, 21778c2ecf20Sopenharmony_ci {0x00, 0x41, 0x08, 0xaa}, 21788c2ecf20Sopenharmony_ci {0x00, 0x3f, 0x00, 0xaa}, 21798c2ecf20Sopenharmony_ci {0x00, 0x75, 0x85, 0xaa}, 21808c2ecf20Sopenharmony_ci {0x00, 0x76, 0xe1, 0xaa}, 21818c2ecf20Sopenharmony_ci {0x00, 0x4c, 0x00, 0xaa}, 21828c2ecf20Sopenharmony_ci {0x00, 0x77, 0x0a, 0xaa}, 21838c2ecf20Sopenharmony_ci {0x00, 0x3d, 0x88, 0xaa}, 21848c2ecf20Sopenharmony_ci {0x00, 0x4b, 0x09, 0xaa}, 21858c2ecf20Sopenharmony_ci {0x00, 0xc9, 0x60, 0xaa}, 21868c2ecf20Sopenharmony_ci {0x00, 0x41, 0x38, 0xaa}, 21878c2ecf20Sopenharmony_ci {0x00, 0x62, 0x30, 0xaa}, 21888c2ecf20Sopenharmony_ci {0x00, 0x63, 0x30, 0xaa}, 21898c2ecf20Sopenharmony_ci {0x00, 0x64, 0x08, 0xaa}, 21908c2ecf20Sopenharmony_ci {0x00, 0x94, 0x07, 0xaa}, 21918c2ecf20Sopenharmony_ci {0x00, 0x95, 0x0b, 0xaa}, 21928c2ecf20Sopenharmony_ci {0x00, 0x65, 0x00, 0xaa}, 21938c2ecf20Sopenharmony_ci {0x00, 0x66, 0x05, 0xaa}, 21948c2ecf20Sopenharmony_ci {0x00, 0x56, 0x50, 0xaa}, 21958c2ecf20Sopenharmony_ci {0x00, 0x34, 0x11, 0xaa}, 21968c2ecf20Sopenharmony_ci {0x00, 0xa4, 0x88, 0xaa}, 21978c2ecf20Sopenharmony_ci {0x00, 0x96, 0x00, 0xaa}, 21988c2ecf20Sopenharmony_ci {0x00, 0x97, 0x30, 0xaa}, 21998c2ecf20Sopenharmony_ci {0x00, 0x98, 0x20, 0xaa}, 22008c2ecf20Sopenharmony_ci {0x00, 0x99, 0x30, 0xaa}, 22018c2ecf20Sopenharmony_ci {0x00, 0x9a, 0x84, 0xaa}, 22028c2ecf20Sopenharmony_ci {0x00, 0x9b, 0x29, 0xaa}, 22038c2ecf20Sopenharmony_ci {0x00, 0x9c, 0x03, 0xaa}, 22048c2ecf20Sopenharmony_ci {0x00, 0x78, 0x04, 0xaa}, 22058c2ecf20Sopenharmony_ci {0x00, 0x79, 0x01, 0xaa}, 22068c2ecf20Sopenharmony_ci {0x00, 0xc8, 0xf0, 0xaa}, 22078c2ecf20Sopenharmony_ci {0x00, 0x79, 0x0f, 0xaa}, 22088c2ecf20Sopenharmony_ci {0x00, 0xc8, 0x00, 0xaa}, 22098c2ecf20Sopenharmony_ci {0x00, 0x79, 0x10, 0xaa}, 22108c2ecf20Sopenharmony_ci {0x00, 0xc8, 0x7e, 0xaa}, 22118c2ecf20Sopenharmony_ci {0x00, 0x79, 0x0a, 0xaa}, 22128c2ecf20Sopenharmony_ci {0x00, 0xc8, 0x80, 0xaa}, 22138c2ecf20Sopenharmony_ci {0x00, 0x79, 0x0b, 0xaa}, 22148c2ecf20Sopenharmony_ci {0x00, 0xc8, 0x01, 0xaa}, 22158c2ecf20Sopenharmony_ci {0x00, 0x79, 0x0c, 0xaa}, 22168c2ecf20Sopenharmony_ci {0x00, 0xc8, 0x0f, 0xaa}, 22178c2ecf20Sopenharmony_ci {0x00, 0x79, 0x0d, 0xaa}, 22188c2ecf20Sopenharmony_ci {0x00, 0xc8, 0x20, 0xaa}, 22198c2ecf20Sopenharmony_ci {0x00, 0x79, 0x09, 0xaa}, 22208c2ecf20Sopenharmony_ci {0x00, 0xc8, 0x80, 0xaa}, 22218c2ecf20Sopenharmony_ci {0x00, 0x79, 0x02, 0xaa}, 22228c2ecf20Sopenharmony_ci {0x00, 0xc8, 0xc0, 0xaa}, 22238c2ecf20Sopenharmony_ci {0x00, 0x79, 0x03, 0xaa}, 22248c2ecf20Sopenharmony_ci {0x00, 0xc8, 0x40, 0xaa}, 22258c2ecf20Sopenharmony_ci {0x00, 0x79, 0x05, 0xaa}, 22268c2ecf20Sopenharmony_ci {0x00, 0xc8, 0x30, 0xaa}, 22278c2ecf20Sopenharmony_ci {0x00, 0x79, 0x26, 0xaa}, 22288c2ecf20Sopenharmony_ci {0x00, 0x11, 0x40, 0xaa}, 22298c2ecf20Sopenharmony_ci {0x00, 0x3a, 0x04, 0xaa}, 22308c2ecf20Sopenharmony_ci {0x00, 0x12, 0x00, 0xaa}, 22318c2ecf20Sopenharmony_ci {0x00, 0x40, 0xc0, 0xaa}, 22328c2ecf20Sopenharmony_ci {0x00, 0x8c, 0x00, 0xaa}, 22338c2ecf20Sopenharmony_ci {0x00, 0x17, 0x14, 0xaa}, 22348c2ecf20Sopenharmony_ci {0x00, 0x18, 0x02, 0xaa}, 22358c2ecf20Sopenharmony_ci {0x00, 0x32, 0x92, 0xaa}, 22368c2ecf20Sopenharmony_ci {0x00, 0x19, 0x02, 0xaa}, 22378c2ecf20Sopenharmony_ci {0x00, 0x1a, 0x7a, 0xaa}, 22388c2ecf20Sopenharmony_ci {0x00, 0x03, 0x0a, 0xaa}, 22398c2ecf20Sopenharmony_ci {0x00, 0x0c, 0x00, 0xaa}, 22408c2ecf20Sopenharmony_ci {0x00, 0x3e, 0x00, 0xaa}, 22418c2ecf20Sopenharmony_ci {0x00, 0x70, 0x3a, 0xaa}, 22428c2ecf20Sopenharmony_ci {0x00, 0x71, 0x35, 0xaa}, 22438c2ecf20Sopenharmony_ci {0x00, 0x72, 0x11, 0xaa}, 22448c2ecf20Sopenharmony_ci {0x00, 0x73, 0xf0, 0xaa}, 22458c2ecf20Sopenharmony_ci {0x00, 0xa2, 0x02, 0xaa}, 22468c2ecf20Sopenharmony_ci {0x00, 0xb1, 0x00, 0xaa}, 22478c2ecf20Sopenharmony_ci {0x00, 0xb1, 0x0c, 0xaa}, 22488c2ecf20Sopenharmony_ci {0x00, 0x1e, 0x37, 0xaa}, /* MVFP */ 22498c2ecf20Sopenharmony_ci {0x00, 0xaa, 0x14, 0xaa}, 22508c2ecf20Sopenharmony_ci {0x00, 0x24, 0x80, 0xaa}, 22518c2ecf20Sopenharmony_ci {0x00, 0x25, 0x74, 0xaa}, 22528c2ecf20Sopenharmony_ci {0x00, 0x26, 0xd3, 0xaa}, 22538c2ecf20Sopenharmony_ci {0x00, 0x0d, 0x00, 0xaa}, 22548c2ecf20Sopenharmony_ci {0x00, 0x14, 0x18, 0xaa}, 22558c2ecf20Sopenharmony_ci {0x00, 0x9d, 0x99, 0xaa}, 22568c2ecf20Sopenharmony_ci {0x00, 0x9e, 0x7f, 0xaa}, 22578c2ecf20Sopenharmony_ci {0x00, 0x64, 0x08, 0xaa}, 22588c2ecf20Sopenharmony_ci {0x00, 0x94, 0x07, 0xaa}, 22598c2ecf20Sopenharmony_ci {0x00, 0x95, 0x06, 0xaa}, 22608c2ecf20Sopenharmony_ci {0x00, 0x66, 0x05, 0xaa}, 22618c2ecf20Sopenharmony_ci {0x00, 0x41, 0x08, 0xaa}, 22628c2ecf20Sopenharmony_ci {0x00, 0x3f, 0x00, 0xaa}, 22638c2ecf20Sopenharmony_ci {0x00, 0x75, 0x07, 0xaa}, 22648c2ecf20Sopenharmony_ci {0x00, 0x76, 0xe1, 0xaa}, 22658c2ecf20Sopenharmony_ci {0x00, 0x4c, 0x00, 0xaa}, 22668c2ecf20Sopenharmony_ci {0x00, 0x77, 0x00, 0xaa}, 22678c2ecf20Sopenharmony_ci {0x00, 0x3d, 0xc2, 0xaa}, 22688c2ecf20Sopenharmony_ci {0x00, 0x4b, 0x09, 0xaa}, 22698c2ecf20Sopenharmony_ci {0x00, 0xc9, 0x60, 0xaa}, 22708c2ecf20Sopenharmony_ci {0x00, 0x41, 0x38, 0xaa}, 22718c2ecf20Sopenharmony_ci {0xbc, 0x02, 0x18, 0xcc}, 22728c2ecf20Sopenharmony_ci {0xbc, 0x03, 0x50, 0xcc}, 22738c2ecf20Sopenharmony_ci {0xbc, 0x04, 0x18, 0xcc}, 22748c2ecf20Sopenharmony_ci {0xbc, 0x05, 0x00, 0xcc}, 22758c2ecf20Sopenharmony_ci {0xbc, 0x06, 0x00, 0xcc}, 22768c2ecf20Sopenharmony_ci {0xbc, 0x08, 0x30, 0xcc}, 22778c2ecf20Sopenharmony_ci {0xbc, 0x09, 0x40, 0xcc}, 22788c2ecf20Sopenharmony_ci {0xbc, 0x0a, 0x10, 0xcc}, 22798c2ecf20Sopenharmony_ci {0xbc, 0x0b, 0x00, 0xcc}, 22808c2ecf20Sopenharmony_ci {0xbc, 0x0c, 0x00, 0xcc}, 22818c2ecf20Sopenharmony_ci {0xbf, 0xc0, 0x26, 0xcc}, 22828c2ecf20Sopenharmony_ci {0xbf, 0xc1, 0x02, 0xcc}, 22838c2ecf20Sopenharmony_ci {0xbf, 0xcc, 0x04, 0xcc}, 22848c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, 22858c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x45, 0xcc}, 22868c2ecf20Sopenharmony_ci {0x00, 0x77, 0x05, 0xaa}, 22878c2ecf20Sopenharmony_ci {}, 22888c2ecf20Sopenharmony_ci}; 22898c2ecf20Sopenharmony_ci 22908c2ecf20Sopenharmony_ci/* PO1200 - values from usbvm326.inf and ms-win trace */ 22918c2ecf20Sopenharmony_cistatic const u8 po1200_gamma[17] = { 22928c2ecf20Sopenharmony_ci 0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8, 22938c2ecf20Sopenharmony_ci 0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff 22948c2ecf20Sopenharmony_ci}; 22958c2ecf20Sopenharmony_cistatic const u8 po1200_matrix[9] = { 22968c2ecf20Sopenharmony_ci 0x60, 0xf9, 0xe5, 0xe7, 0x50, 0x05, 0xf3, 0xe6, 0x5e 22978c2ecf20Sopenharmony_ci}; 22988c2ecf20Sopenharmony_cistatic const u8 po1200_initVGA_data[][4] = { 22998c2ecf20Sopenharmony_ci {0xb0, 0x03, 0x19, 0xcc}, /* reset? */ 23008c2ecf20Sopenharmony_ci {0xb0, 0x03, 0x19, 0xcc}, 23018c2ecf20Sopenharmony_ci/* {0x00, 0x00, 0x33, 0xdd}, */ 23028c2ecf20Sopenharmony_ci {0xb0, 0x04, 0x02, 0xcc}, 23038c2ecf20Sopenharmony_ci {0xb0, 0x02, 0x02, 0xcc}, 23048c2ecf20Sopenharmony_ci {0xb3, 0x5d, 0x00, 0xcc}, 23058c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x01, 0xcc}, 23068c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x64, 0xcc}, 23078c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x65, 0xcc}, 23088c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x01, 0xcc}, 23098c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x01, 0xcc}, 23108c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, 23118c2ecf20Sopenharmony_ci {0xb3, 0x08, 0x01, 0xcc}, 23128c2ecf20Sopenharmony_ci {0xb3, 0x09, 0x0c, 0xcc}, 23138c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x67, 0xcc}, 23148c2ecf20Sopenharmony_ci {0xb3, 0x02, 0xb2, 0xcc}, 23158c2ecf20Sopenharmony_ci {0xb3, 0x03, 0x18, 0xcc}, 23168c2ecf20Sopenharmony_ci {0xb3, 0x04, 0x15, 0xcc}, 23178c2ecf20Sopenharmony_ci {0xb3, 0x20, 0x00, 0xcc}, 23188c2ecf20Sopenharmony_ci {0xb3, 0x21, 0x00, 0xcc}, 23198c2ecf20Sopenharmony_ci {0xb3, 0x22, 0x02, 0xcc}, 23208c2ecf20Sopenharmony_ci {0xb3, 0x23, 0x58, 0xcc}, 23218c2ecf20Sopenharmony_ci {0xb3, 0x14, 0x00, 0xcc}, 23228c2ecf20Sopenharmony_ci {0xb3, 0x15, 0x00, 0xcc}, 23238c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x03, 0xcc}, 23248c2ecf20Sopenharmony_ci {0xb3, 0x17, 0x1f, 0xcc}, 23258c2ecf20Sopenharmony_ci {0xbc, 0x00, 0x71, 0xcc}, 23268c2ecf20Sopenharmony_ci {0xbc, 0x01, 0x01, 0xcc}, 23278c2ecf20Sopenharmony_ci {0xb0, 0x54, 0x13, 0xcc}, 23288c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x67, 0xcc}, 23298c2ecf20Sopenharmony_ci {0xb3, 0x34, 0x01, 0xcc}, 23308c2ecf20Sopenharmony_ci {0xb3, 0x35, 0xdc, 0xcc}, /* i2c add: 5c */ 23318c2ecf20Sopenharmony_ci {0x00, 0x03, 0x00, 0xaa}, 23328c2ecf20Sopenharmony_ci {0x00, 0x12, 0x05, 0xaa}, 23338c2ecf20Sopenharmony_ci {0x00, 0x13, 0x02, 0xaa}, 23348c2ecf20Sopenharmony_ci {0x00, 0x1e, 0xc6, 0xaa}, /* h/v flip */ 23358c2ecf20Sopenharmony_ci {0x00, 0x21, 0x00, 0xaa}, 23368c2ecf20Sopenharmony_ci {0x00, 0x25, 0x02, 0xaa}, 23378c2ecf20Sopenharmony_ci {0x00, 0x3c, 0x4f, 0xaa}, 23388c2ecf20Sopenharmony_ci {0x00, 0x3f, 0xe0, 0xaa}, 23398c2ecf20Sopenharmony_ci {0x00, 0x42, 0xff, 0xaa}, 23408c2ecf20Sopenharmony_ci {0x00, 0x45, 0x34, 0xaa}, 23418c2ecf20Sopenharmony_ci {0x00, 0x55, 0xfe, 0xaa}, 23428c2ecf20Sopenharmony_ci {0x00, 0x59, 0xd3, 0xaa}, 23438c2ecf20Sopenharmony_ci {0x00, 0x5e, 0x04, 0xaa}, 23448c2ecf20Sopenharmony_ci {0x00, 0x61, 0xb8, 0xaa}, /* sharpness */ 23458c2ecf20Sopenharmony_ci {0x00, 0x62, 0x02, 0xaa}, 23468c2ecf20Sopenharmony_ci {0x00, 0xa7, 0x31, 0xaa}, 23478c2ecf20Sopenharmony_ci {0x00, 0xa9, 0x66, 0xaa}, 23488c2ecf20Sopenharmony_ci {0x00, 0xb0, 0x00, 0xaa}, 23498c2ecf20Sopenharmony_ci {0x00, 0xb1, 0x00, 0xaa}, 23508c2ecf20Sopenharmony_ci {0x00, 0xb3, 0x11, 0xaa}, 23518c2ecf20Sopenharmony_ci {0x00, 0xb6, 0x26, 0xaa}, 23528c2ecf20Sopenharmony_ci {0x00, 0xb7, 0x20, 0xaa}, 23538c2ecf20Sopenharmony_ci {0x00, 0xba, 0x04, 0xaa}, 23548c2ecf20Sopenharmony_ci {0x00, 0x88, 0x42, 0xaa}, 23558c2ecf20Sopenharmony_ci {0x00, 0x89, 0x9a, 0xaa}, 23568c2ecf20Sopenharmony_ci {0x00, 0x8a, 0x88, 0xaa}, 23578c2ecf20Sopenharmony_ci {0x00, 0x8b, 0x8e, 0xaa}, 23588c2ecf20Sopenharmony_ci {0x00, 0x8c, 0x3e, 0xaa}, 23598c2ecf20Sopenharmony_ci {0x00, 0x8d, 0x90, 0xaa}, 23608c2ecf20Sopenharmony_ci {0x00, 0x8e, 0x87, 0xaa}, 23618c2ecf20Sopenharmony_ci {0x00, 0x8f, 0x96, 0xaa}, 23628c2ecf20Sopenharmony_ci {0x00, 0x90, 0x3d, 0xaa}, 23638c2ecf20Sopenharmony_ci {0x00, 0x64, 0x00, 0xaa}, 23648c2ecf20Sopenharmony_ci {0x00, 0x65, 0x10, 0xaa}, 23658c2ecf20Sopenharmony_ci {0x00, 0x66, 0x20, 0xaa}, 23668c2ecf20Sopenharmony_ci {0x00, 0x67, 0x2b, 0xaa}, 23678c2ecf20Sopenharmony_ci {0x00, 0x68, 0x36, 0xaa}, 23688c2ecf20Sopenharmony_ci {0x00, 0x69, 0x49, 0xaa}, 23698c2ecf20Sopenharmony_ci {0x00, 0x6a, 0x5a, 0xaa}, 23708c2ecf20Sopenharmony_ci {0x00, 0x6b, 0x7f, 0xaa}, 23718c2ecf20Sopenharmony_ci {0x00, 0x6c, 0x9b, 0xaa}, 23728c2ecf20Sopenharmony_ci {0x00, 0x6d, 0xba, 0xaa}, 23738c2ecf20Sopenharmony_ci {0x00, 0x6e, 0xd4, 0xaa}, 23748c2ecf20Sopenharmony_ci {0x00, 0x6f, 0xea, 0xaa}, 23758c2ecf20Sopenharmony_ci {0x00, 0x70, 0x00, 0xaa}, 23768c2ecf20Sopenharmony_ci {0x00, 0x71, 0x10, 0xaa}, 23778c2ecf20Sopenharmony_ci {0x00, 0x72, 0x20, 0xaa}, 23788c2ecf20Sopenharmony_ci {0x00, 0x73, 0x2b, 0xaa}, 23798c2ecf20Sopenharmony_ci {0x00, 0x74, 0x36, 0xaa}, 23808c2ecf20Sopenharmony_ci {0x00, 0x75, 0x49, 0xaa}, 23818c2ecf20Sopenharmony_ci {0x00, 0x76, 0x5a, 0xaa}, 23828c2ecf20Sopenharmony_ci {0x00, 0x77, 0x7f, 0xaa}, 23838c2ecf20Sopenharmony_ci {0x00, 0x78, 0x9b, 0xaa}, 23848c2ecf20Sopenharmony_ci {0x00, 0x79, 0xba, 0xaa}, 23858c2ecf20Sopenharmony_ci {0x00, 0x7a, 0xd4, 0xaa}, 23868c2ecf20Sopenharmony_ci {0x00, 0x7b, 0xea, 0xaa}, 23878c2ecf20Sopenharmony_ci {0x00, 0x7c, 0x00, 0xaa}, 23888c2ecf20Sopenharmony_ci {0x00, 0x7d, 0x10, 0xaa}, 23898c2ecf20Sopenharmony_ci {0x00, 0x7e, 0x20, 0xaa}, 23908c2ecf20Sopenharmony_ci {0x00, 0x7f, 0x2b, 0xaa}, 23918c2ecf20Sopenharmony_ci {0x00, 0x80, 0x36, 0xaa}, 23928c2ecf20Sopenharmony_ci {0x00, 0x81, 0x49, 0xaa}, 23938c2ecf20Sopenharmony_ci {0x00, 0x82, 0x5a, 0xaa}, 23948c2ecf20Sopenharmony_ci {0x00, 0x83, 0x7f, 0xaa}, 23958c2ecf20Sopenharmony_ci {0x00, 0x84, 0x9b, 0xaa}, 23968c2ecf20Sopenharmony_ci {0x00, 0x85, 0xba, 0xaa}, 23978c2ecf20Sopenharmony_ci {0x00, 0x86, 0xd4, 0xaa}, 23988c2ecf20Sopenharmony_ci {0x00, 0x87, 0xea, 0xaa}, 23998c2ecf20Sopenharmony_ci {0x00, 0x57, 0x2a, 0xaa}, 24008c2ecf20Sopenharmony_ci {0x00, 0x03, 0x01, 0xaa}, 24018c2ecf20Sopenharmony_ci {0x00, 0x04, 0x10, 0xaa}, 24028c2ecf20Sopenharmony_ci {0x00, 0x05, 0x10, 0xaa}, 24038c2ecf20Sopenharmony_ci {0x00, 0x06, 0x10, 0xaa}, 24048c2ecf20Sopenharmony_ci {0x00, 0x07, 0x10, 0xaa}, 24058c2ecf20Sopenharmony_ci {0x00, 0x08, 0x13, 0xaa}, 24068c2ecf20Sopenharmony_ci {0x00, 0x0a, 0x00, 0xaa}, 24078c2ecf20Sopenharmony_ci {0x00, 0x0b, 0x10, 0xaa}, 24088c2ecf20Sopenharmony_ci {0x00, 0x0c, 0x20, 0xaa}, 24098c2ecf20Sopenharmony_ci {0x00, 0x0d, 0x18, 0xaa}, 24108c2ecf20Sopenharmony_ci {0x00, 0x22, 0x01, 0xaa}, 24118c2ecf20Sopenharmony_ci {0x00, 0x23, 0x60, 0xaa}, 24128c2ecf20Sopenharmony_ci {0x00, 0x25, 0x08, 0xaa}, 24138c2ecf20Sopenharmony_ci {0x00, 0x26, 0x82, 0xaa}, 24148c2ecf20Sopenharmony_ci {0x00, 0x2e, 0x0f, 0xaa}, 24158c2ecf20Sopenharmony_ci {0x00, 0x2f, 0x1e, 0xaa}, 24168c2ecf20Sopenharmony_ci {0x00, 0x30, 0x2d, 0xaa}, 24178c2ecf20Sopenharmony_ci {0x00, 0x31, 0x3c, 0xaa}, 24188c2ecf20Sopenharmony_ci {0x00, 0x32, 0x4b, 0xaa}, 24198c2ecf20Sopenharmony_ci {0x00, 0x33, 0x5a, 0xaa}, 24208c2ecf20Sopenharmony_ci {0x00, 0x34, 0x69, 0xaa}, 24218c2ecf20Sopenharmony_ci {0x00, 0x35, 0x78, 0xaa}, 24228c2ecf20Sopenharmony_ci {0x00, 0x36, 0x87, 0xaa}, 24238c2ecf20Sopenharmony_ci {0x00, 0x37, 0x96, 0xaa}, 24248c2ecf20Sopenharmony_ci {0x00, 0x38, 0xa5, 0xaa}, 24258c2ecf20Sopenharmony_ci {0x00, 0x39, 0xb4, 0xaa}, 24268c2ecf20Sopenharmony_ci {0x00, 0x3a, 0xc3, 0xaa}, 24278c2ecf20Sopenharmony_ci {0x00, 0x3b, 0xd2, 0xaa}, 24288c2ecf20Sopenharmony_ci {0x00, 0x3c, 0xe1, 0xaa}, 24298c2ecf20Sopenharmony_ci {0x00, 0x3e, 0xff, 0xaa}, 24308c2ecf20Sopenharmony_ci {0x00, 0x3f, 0xff, 0xaa}, 24318c2ecf20Sopenharmony_ci {0x00, 0x40, 0xff, 0xaa}, 24328c2ecf20Sopenharmony_ci {0x00, 0x41, 0xff, 0xaa}, 24338c2ecf20Sopenharmony_ci {0x00, 0x42, 0xff, 0xaa}, 24348c2ecf20Sopenharmony_ci {0x00, 0x43, 0xff, 0xaa}, 24358c2ecf20Sopenharmony_ci {0x00, 0x03, 0x00, 0xaa}, 24368c2ecf20Sopenharmony_ci {0x00, 0x03, 0x00, 0xaa}, 24378c2ecf20Sopenharmony_ci {0x00, 0x20, 0xc4, 0xaa}, 24388c2ecf20Sopenharmony_ci {0x00, 0x13, 0x03, 0xaa}, 24398c2ecf20Sopenharmony_ci {0x00, 0x3c, 0x50, 0xaa}, 24408c2ecf20Sopenharmony_ci {0x00, 0x61, 0x6a, 0xaa}, /* sharpness? */ 24418c2ecf20Sopenharmony_ci {0x00, 0x51, 0x5b, 0xaa}, 24428c2ecf20Sopenharmony_ci {0x00, 0x52, 0x91, 0xaa}, 24438c2ecf20Sopenharmony_ci {0x00, 0x53, 0x4c, 0xaa}, 24448c2ecf20Sopenharmony_ci {0x00, 0x54, 0x50, 0xaa}, 24458c2ecf20Sopenharmony_ci {0x00, 0x56, 0x02, 0xaa}, 24468c2ecf20Sopenharmony_ci {0xb6, 0x00, 0x00, 0xcc}, 24478c2ecf20Sopenharmony_ci {0xb6, 0x03, 0x03, 0xcc}, 24488c2ecf20Sopenharmony_ci {0xb6, 0x02, 0x20, 0xcc}, 24498c2ecf20Sopenharmony_ci {0xb6, 0x05, 0x02, 0xcc}, 24508c2ecf20Sopenharmony_ci {0xb6, 0x04, 0x58, 0xcc}, 24518c2ecf20Sopenharmony_ci {0xb6, 0x12, 0xf8, 0xcc}, 24528c2ecf20Sopenharmony_ci {0xb6, 0x13, 0x21, 0xcc}, 24538c2ecf20Sopenharmony_ci {0xb6, 0x18, 0x03, 0xcc}, 24548c2ecf20Sopenharmony_ci {0xb6, 0x17, 0xa9, 0xcc}, 24558c2ecf20Sopenharmony_ci {0xb6, 0x16, 0x80, 0xcc}, 24568c2ecf20Sopenharmony_ci {0xb6, 0x22, 0x12, 0xcc}, 24578c2ecf20Sopenharmony_ci {0xb6, 0x23, 0x0b, 0xcc}, 24588c2ecf20Sopenharmony_ci {0xbf, 0xc0, 0x39, 0xcc}, 24598c2ecf20Sopenharmony_ci {0xbf, 0xc1, 0x04, 0xcc}, 24608c2ecf20Sopenharmony_ci {0xbf, 0xcc, 0x00, 0xcc}, 24618c2ecf20Sopenharmony_ci {0xb8, 0x06, 0x20, 0xcc}, 24628c2ecf20Sopenharmony_ci {0xb8, 0x07, 0x03, 0xcc}, 24638c2ecf20Sopenharmony_ci {0xb8, 0x08, 0x58, 0xcc}, 24648c2ecf20Sopenharmony_ci {0xb8, 0x09, 0x02, 0xcc}, 24658c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x41, 0xcc}, 24668c2ecf20Sopenharmony_ci {0x00, 0x03, 0x00, 0xaa}, 24678c2ecf20Sopenharmony_ci {0x00, 0xd9, 0x0f, 0xaa}, 24688c2ecf20Sopenharmony_ci {0x00, 0xda, 0xaa, 0xaa}, 24698c2ecf20Sopenharmony_ci {0x00, 0xd9, 0x10, 0xaa}, 24708c2ecf20Sopenharmony_ci {0x00, 0xda, 0xaa, 0xaa}, 24718c2ecf20Sopenharmony_ci {0x00, 0xd9, 0x11, 0xaa}, 24728c2ecf20Sopenharmony_ci {0x00, 0xda, 0x00, 0xaa}, 24738c2ecf20Sopenharmony_ci {0x00, 0xd9, 0x12, 0xaa}, 24748c2ecf20Sopenharmony_ci {0x00, 0xda, 0xff, 0xaa}, 24758c2ecf20Sopenharmony_ci {0x00, 0xd9, 0x13, 0xaa}, 24768c2ecf20Sopenharmony_ci {0x00, 0xda, 0xff, 0xaa}, 24778c2ecf20Sopenharmony_ci {0x00, 0xe8, 0x11, 0xaa}, 24788c2ecf20Sopenharmony_ci {0x00, 0xe9, 0x12, 0xaa}, 24798c2ecf20Sopenharmony_ci {0x00, 0xea, 0x5c, 0xaa}, 24808c2ecf20Sopenharmony_ci {0x00, 0xeb, 0xff, 0xaa}, 24818c2ecf20Sopenharmony_ci {0x00, 0xd8, 0x80, 0xaa}, 24828c2ecf20Sopenharmony_ci {0x00, 0xe6, 0x02, 0xaa}, 24838c2ecf20Sopenharmony_ci {0x00, 0xd6, 0x40, 0xaa}, 24848c2ecf20Sopenharmony_ci {0x00, 0xe3, 0x05, 0xaa}, 24858c2ecf20Sopenharmony_ci {0x00, 0xe0, 0x40, 0xaa}, 24868c2ecf20Sopenharmony_ci {0x00, 0xde, 0x03, 0xaa}, 24878c2ecf20Sopenharmony_ci {0x00, 0xdf, 0x03, 0xaa}, 24888c2ecf20Sopenharmony_ci {0x00, 0xdb, 0x02, 0xaa}, 24898c2ecf20Sopenharmony_ci {0x00, 0xdc, 0x00, 0xaa}, 24908c2ecf20Sopenharmony_ci {0x00, 0xdd, 0x03, 0xaa}, 24918c2ecf20Sopenharmony_ci {0x00, 0xe1, 0x08, 0xaa}, 24928c2ecf20Sopenharmony_ci {0x00, 0xe2, 0x01, 0xaa}, 24938c2ecf20Sopenharmony_ci {0x00, 0xd6, 0x40, 0xaa}, 24948c2ecf20Sopenharmony_ci {0x00, 0xe4, 0x40, 0xaa}, 24958c2ecf20Sopenharmony_ci {0x00, 0xa8, 0x8f, 0xaa}, 24968c2ecf20Sopenharmony_ci {0x00, 0xb4, 0x16, 0xaa}, 24978c2ecf20Sopenharmony_ci {0xb0, 0x02, 0x06, 0xcc}, 24988c2ecf20Sopenharmony_ci {0xb0, 0x18, 0x06, 0xcc}, 24998c2ecf20Sopenharmony_ci {0xb0, 0x19, 0x06, 0xcc}, 25008c2ecf20Sopenharmony_ci {0xb3, 0x5d, 0x18, 0xcc}, 25018c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x00, 0xcc}, 25028c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x00, 0xcc}, 25038c2ecf20Sopenharmony_ci {0x00, 0xb4, 0x0e, 0xaa}, 25048c2ecf20Sopenharmony_ci {0x00, 0xb5, 0x49, 0xaa}, 25058c2ecf20Sopenharmony_ci {0x00, 0xb6, 0x1c, 0xaa}, 25068c2ecf20Sopenharmony_ci {0x00, 0xb7, 0x96, 0xaa}, 25078c2ecf20Sopenharmony_ci/* end of usbvm326.inf - start of ms-win trace */ 25088c2ecf20Sopenharmony_ci {0xb6, 0x12, 0xf8, 0xcc}, 25098c2ecf20Sopenharmony_ci {0xb6, 0x13, 0x3d, 0xcc}, 25108c2ecf20Sopenharmony_ci/*read b306*/ 25118c2ecf20Sopenharmony_ci {0x00, 0x03, 0x00, 0xaa}, 25128c2ecf20Sopenharmony_ci {0x00, 0x1a, 0x09, 0xaa}, 25138c2ecf20Sopenharmony_ci {0x00, 0x1b, 0x8a, 0xaa}, 25148c2ecf20Sopenharmony_ci/*read b827*/ 25158c2ecf20Sopenharmony_ci {0xb8, 0x27, 0x00, 0xcc}, 25168c2ecf20Sopenharmony_ci {0xb8, 0x26, 0x60, 0xcc}, 25178c2ecf20Sopenharmony_ci {0xb8, 0x26, 0x60, 0xcc}, 25188c2ecf20Sopenharmony_ci/*gamma - to do?*/ 25198c2ecf20Sopenharmony_ci {0x00, 0x03, 0x00, 0xaa}, 25208c2ecf20Sopenharmony_ci {0x00, 0xae, 0x84, 0xaa}, 25218c2ecf20Sopenharmony_ci/*gamma again*/ 25228c2ecf20Sopenharmony_ci {0x00, 0x03, 0x00, 0xaa}, 25238c2ecf20Sopenharmony_ci {0x00, 0x96, 0xa0, 0xaa}, 25248c2ecf20Sopenharmony_ci/*matrix*/ 25258c2ecf20Sopenharmony_ci {0x00, 0x03, 0x00, 0xaa}, 25268c2ecf20Sopenharmony_ci {0x00, 0x91, 0x35, 0xaa}, 25278c2ecf20Sopenharmony_ci {0x00, 0x92, 0x22, 0xaa}, 25288c2ecf20Sopenharmony_ci/*gamma*/ 25298c2ecf20Sopenharmony_ci {0x00, 0x03, 0x00, 0xaa}, 25308c2ecf20Sopenharmony_ci {0x00, 0x95, 0x85, 0xaa}, 25318c2ecf20Sopenharmony_ci/*matrix*/ 25328c2ecf20Sopenharmony_ci {0x00, 0x03, 0x00, 0xaa}, 25338c2ecf20Sopenharmony_ci {0x00, 0x4d, 0x20, 0xaa}, 25348c2ecf20Sopenharmony_ci {0xb8, 0x22, 0x40, 0xcc}, 25358c2ecf20Sopenharmony_ci {0xb8, 0x23, 0x40, 0xcc}, 25368c2ecf20Sopenharmony_ci {0xb8, 0x24, 0x40, 0xcc}, 25378c2ecf20Sopenharmony_ci {0xb8, 0x81, 0x09, 0xcc}, 25388c2ecf20Sopenharmony_ci {0x00, 0x00, 0x64, 0xdd}, 25398c2ecf20Sopenharmony_ci {0x00, 0x03, 0x01, 0xaa}, 25408c2ecf20Sopenharmony_ci/*read 46*/ 25418c2ecf20Sopenharmony_ci {0x00, 0x46, 0x3c, 0xaa}, 25428c2ecf20Sopenharmony_ci {0x00, 0x03, 0x00, 0xaa}, 25438c2ecf20Sopenharmony_ci {0x00, 0x16, 0x40, 0xaa}, 25448c2ecf20Sopenharmony_ci {0x00, 0x17, 0x40, 0xaa}, 25458c2ecf20Sopenharmony_ci {0x00, 0x18, 0x40, 0xaa}, 25468c2ecf20Sopenharmony_ci {0x00, 0x19, 0x41, 0xaa}, 25478c2ecf20Sopenharmony_ci {0x00, 0x03, 0x01, 0xaa}, 25488c2ecf20Sopenharmony_ci {0x00, 0x46, 0x3c, 0xaa}, 25498c2ecf20Sopenharmony_ci {0x00, 0x00, 0x18, 0xdd}, 25508c2ecf20Sopenharmony_ci/*read bfff*/ 25518c2ecf20Sopenharmony_ci {0x00, 0x03, 0x00, 0xaa}, 25528c2ecf20Sopenharmony_ci {0x00, 0xb4, 0x1c, 0xaa}, 25538c2ecf20Sopenharmony_ci {0x00, 0xb5, 0x92, 0xaa}, 25548c2ecf20Sopenharmony_ci {0x00, 0xb6, 0x39, 0xaa}, 25558c2ecf20Sopenharmony_ci {0x00, 0xb7, 0x24, 0xaa}, 25568c2ecf20Sopenharmony_ci/*write 89 0400 1415*/ 25578c2ecf20Sopenharmony_ci {} 25588c2ecf20Sopenharmony_ci}; 25598c2ecf20Sopenharmony_ci 25608c2ecf20Sopenharmony_cistatic const u8 poxxxx_init_common[][4] = { 25618c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x04, 0xcc}, 25628c2ecf20Sopenharmony_ci {0x00, 0x00, 0x10, 0xdd}, 25638c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x64, 0xcc}, 25648c2ecf20Sopenharmony_ci {0x00, 0x00, 0x10, 0xdd}, 25658c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x65, 0xcc}, 25668c2ecf20Sopenharmony_ci {0x00, 0x00, 0x10, 0xdd}, 25678c2ecf20Sopenharmony_ci {0xb3, 0x00, 0x67, 0xcc}, 25688c2ecf20Sopenharmony_ci {0xb0, 0x03, 0x09, 0xcc}, 25698c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x00, 0xcc}, 25708c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x00, 0xcc}, 25718c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, 25728c2ecf20Sopenharmony_ci {0xb3, 0x08, 0x01, 0xcc}, 25738c2ecf20Sopenharmony_ci {0xb3, 0x09, 0x0c, 0xcc}, 25748c2ecf20Sopenharmony_ci {0xb3, 0x34, 0x01, 0xcc}, 25758c2ecf20Sopenharmony_ci {0xb3, 0x35, 0xf6, 0xcc}, /* i2c add: 76 */ 25768c2ecf20Sopenharmony_ci {0xb3, 0x02, 0xb0, 0xcc}, 25778c2ecf20Sopenharmony_ci {0xb3, 0x03, 0x18, 0xcc}, 25788c2ecf20Sopenharmony_ci {0xb3, 0x04, 0x15, 0xcc}, 25798c2ecf20Sopenharmony_ci {0xb3, 0x20, 0x00, 0xcc}, 25808c2ecf20Sopenharmony_ci {0xb3, 0x21, 0x00, 0xcc}, 25818c2ecf20Sopenharmony_ci {0xb3, 0x22, 0x04, 0xcc}, /* sensor height = 1024 */ 25828c2ecf20Sopenharmony_ci {0xb3, 0x23, 0x00, 0xcc}, 25838c2ecf20Sopenharmony_ci {0xb3, 0x14, 0x00, 0xcc}, 25848c2ecf20Sopenharmony_ci {0xb3, 0x15, 0x00, 0xcc}, 25858c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x04, 0xcc}, /* sensor width = 1280 */ 25868c2ecf20Sopenharmony_ci {0xb3, 0x17, 0xff, 0xcc}, 25878c2ecf20Sopenharmony_ci {0xb3, 0x2c, 0x03, 0xcc}, 25888c2ecf20Sopenharmony_ci {0xb3, 0x2d, 0x56, 0xcc}, 25898c2ecf20Sopenharmony_ci {0xb3, 0x2e, 0x02, 0xcc}, 25908c2ecf20Sopenharmony_ci {0xb3, 0x2f, 0x0a, 0xcc}, 25918c2ecf20Sopenharmony_ci {0xb3, 0x40, 0x00, 0xcc}, 25928c2ecf20Sopenharmony_ci {0xb3, 0x41, 0x34, 0xcc}, 25938c2ecf20Sopenharmony_ci {0xb3, 0x42, 0x01, 0xcc}, 25948c2ecf20Sopenharmony_ci {0xb3, 0x43, 0xe0, 0xcc}, 25958c2ecf20Sopenharmony_ci {0xbc, 0x00, 0x71, 0xcc}, 25968c2ecf20Sopenharmony_ci {0xbc, 0x01, 0x01, 0xcc}, 25978c2ecf20Sopenharmony_ci {0xb3, 0x01, 0x41, 0xcc}, 25988c2ecf20Sopenharmony_ci {0xb3, 0x4d, 0x00, 0xcc}, 25998c2ecf20Sopenharmony_ci {0x00, 0x0b, 0x2a, 0xaa}, 26008c2ecf20Sopenharmony_ci {0x00, 0x0e, 0x03, 0xaa}, 26018c2ecf20Sopenharmony_ci {0x00, 0x0f, 0xea, 0xaa}, 26028c2ecf20Sopenharmony_ci {0x00, 0x12, 0x08, 0xaa}, 26038c2ecf20Sopenharmony_ci {0x00, 0x1e, 0x06, 0xaa}, 26048c2ecf20Sopenharmony_ci {0x00, 0x21, 0x00, 0xaa}, 26058c2ecf20Sopenharmony_ci {0x00, 0x31, 0x1f, 0xaa}, 26068c2ecf20Sopenharmony_ci {0x00, 0x33, 0x38, 0xaa}, 26078c2ecf20Sopenharmony_ci {0x00, 0x36, 0xc0, 0xaa}, 26088c2ecf20Sopenharmony_ci {0x00, 0x37, 0xc8, 0xaa}, 26098c2ecf20Sopenharmony_ci {0x00, 0x3b, 0x36, 0xaa}, 26108c2ecf20Sopenharmony_ci {0x00, 0x4b, 0xfe, 0xaa}, 26118c2ecf20Sopenharmony_ci {0x00, 0x4d, 0x2e, 0xaa}, 26128c2ecf20Sopenharmony_ci {0x00, 0x51, 0x1c, 0xaa}, 26138c2ecf20Sopenharmony_ci {0x00, 0x52, 0x01, 0xaa}, 26148c2ecf20Sopenharmony_ci {0x00, 0x55, 0x0a, 0xaa}, 26158c2ecf20Sopenharmony_ci {0x00, 0x56, 0x0a, 0xaa}, 26168c2ecf20Sopenharmony_ci {0x00, 0x57, 0x07, 0xaa}, 26178c2ecf20Sopenharmony_ci {0x00, 0x58, 0x07, 0xaa}, 26188c2ecf20Sopenharmony_ci {0x00, 0x59, 0x04, 0xaa}, 26198c2ecf20Sopenharmony_ci {0x00, 0x70, 0x68, 0xaa}, 26208c2ecf20Sopenharmony_ci {0x00, 0x71, 0x04, 0xaa}, 26218c2ecf20Sopenharmony_ci {0x00, 0x72, 0x10, 0xaa}, 26228c2ecf20Sopenharmony_ci {0x00, 0x80, 0x71, 0xaa}, 26238c2ecf20Sopenharmony_ci {0x00, 0x81, 0x08, 0xaa}, 26248c2ecf20Sopenharmony_ci {0x00, 0x82, 0x00, 0xaa}, 26258c2ecf20Sopenharmony_ci {0x00, 0x83, 0x55, 0xaa}, 26268c2ecf20Sopenharmony_ci {0x00, 0x84, 0x06, 0xaa}, 26278c2ecf20Sopenharmony_ci {0x00, 0x85, 0x06, 0xaa}, 26288c2ecf20Sopenharmony_ci {0x00, 0x8b, 0x25, 0xaa}, 26298c2ecf20Sopenharmony_ci {0x00, 0x8c, 0x00, 0xaa}, 26308c2ecf20Sopenharmony_ci {0x00, 0x8d, 0x86, 0xaa}, 26318c2ecf20Sopenharmony_ci {0x00, 0x8e, 0x82, 0xaa}, 26328c2ecf20Sopenharmony_ci {0x00, 0x8f, 0x2d, 0xaa}, 26338c2ecf20Sopenharmony_ci {0x00, 0x90, 0x8b, 0xaa}, 26348c2ecf20Sopenharmony_ci {0x00, 0x91, 0x81, 0xaa}, 26358c2ecf20Sopenharmony_ci {0x00, 0x92, 0x81, 0xaa}, 26368c2ecf20Sopenharmony_ci {0x00, 0x93, 0x23, 0xaa}, 26378c2ecf20Sopenharmony_ci {0x00, 0xa3, 0x2a, 0xaa}, 26388c2ecf20Sopenharmony_ci {0x00, 0xa4, 0x03, 0xaa}, 26398c2ecf20Sopenharmony_ci {0x00, 0xa5, 0xea, 0xaa}, 26408c2ecf20Sopenharmony_ci {0x00, 0xb0, 0x68, 0xaa}, 26418c2ecf20Sopenharmony_ci {0x00, 0xbc, 0x04, 0xaa}, 26428c2ecf20Sopenharmony_ci {0x00, 0xbe, 0x3b, 0xaa}, 26438c2ecf20Sopenharmony_ci {0x00, 0x4e, 0x40, 0xaa}, 26448c2ecf20Sopenharmony_ci {0x00, 0x06, 0x04, 0xaa}, 26458c2ecf20Sopenharmony_ci {0x00, 0x07, 0x03, 0xaa}, 26468c2ecf20Sopenharmony_ci {0x00, 0xcd, 0x18, 0xaa}, 26478c2ecf20Sopenharmony_ci {0x00, 0x28, 0x03, 0xaa}, 26488c2ecf20Sopenharmony_ci {0x00, 0x29, 0xef, 0xaa}, 26498c2ecf20Sopenharmony_ci/* reinit on alt 2 (qvga) or alt7 (vga) */ 26508c2ecf20Sopenharmony_ci {0xb3, 0x05, 0x00, 0xcc}, 26518c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x00, 0xcc}, 26528c2ecf20Sopenharmony_ci {0xb8, 0x00, 0x01, 0xcc}, 26538c2ecf20Sopenharmony_ci 26548c2ecf20Sopenharmony_ci {0x00, 0x1d, 0x85, 0xaa}, 26558c2ecf20Sopenharmony_ci {0x00, 0x1e, 0xc6, 0xaa}, 26568c2ecf20Sopenharmony_ci {0x00, 0x00, 0x40, 0xdd}, 26578c2ecf20Sopenharmony_ci {0x00, 0x1d, 0x05, 0xaa}, 26588c2ecf20Sopenharmony_ci {} 26598c2ecf20Sopenharmony_ci}; 26608c2ecf20Sopenharmony_cistatic const u8 poxxxx_gamma[][4] = { 26618c2ecf20Sopenharmony_ci {0x00, 0xd6, 0x22, 0xaa}, /* gamma 0 */ 26628c2ecf20Sopenharmony_ci {0x00, 0x73, 0x00, 0xaa}, 26638c2ecf20Sopenharmony_ci {0x00, 0x74, 0x0a, 0xaa}, 26648c2ecf20Sopenharmony_ci {0x00, 0x75, 0x16, 0xaa}, 26658c2ecf20Sopenharmony_ci {0x00, 0x76, 0x25, 0xaa}, 26668c2ecf20Sopenharmony_ci {0x00, 0x77, 0x34, 0xaa}, 26678c2ecf20Sopenharmony_ci {0x00, 0x78, 0x49, 0xaa}, 26688c2ecf20Sopenharmony_ci {0x00, 0x79, 0x5a, 0xaa}, 26698c2ecf20Sopenharmony_ci {0x00, 0x7a, 0x7f, 0xaa}, 26708c2ecf20Sopenharmony_ci {0x00, 0x7b, 0x9b, 0xaa}, 26718c2ecf20Sopenharmony_ci {0x00, 0x7c, 0xba, 0xaa}, 26728c2ecf20Sopenharmony_ci {0x00, 0x7d, 0xd4, 0xaa}, 26738c2ecf20Sopenharmony_ci {0x00, 0x7e, 0xea, 0xaa}, 26748c2ecf20Sopenharmony_ci 26758c2ecf20Sopenharmony_ci {0x00, 0xd6, 0x62, 0xaa}, /* gamma 1 */ 26768c2ecf20Sopenharmony_ci {0x00, 0x73, 0x00, 0xaa}, 26778c2ecf20Sopenharmony_ci {0x00, 0x74, 0x0a, 0xaa}, 26788c2ecf20Sopenharmony_ci {0x00, 0x75, 0x16, 0xaa}, 26798c2ecf20Sopenharmony_ci {0x00, 0x76, 0x25, 0xaa}, 26808c2ecf20Sopenharmony_ci {0x00, 0x77, 0x34, 0xaa}, 26818c2ecf20Sopenharmony_ci {0x00, 0x78, 0x49, 0xaa}, 26828c2ecf20Sopenharmony_ci {0x00, 0x79, 0x5a, 0xaa}, 26838c2ecf20Sopenharmony_ci {0x00, 0x7a, 0x7f, 0xaa}, 26848c2ecf20Sopenharmony_ci {0x00, 0x7b, 0x9b, 0xaa}, 26858c2ecf20Sopenharmony_ci {0x00, 0x7c, 0xba, 0xaa}, 26868c2ecf20Sopenharmony_ci {0x00, 0x7d, 0xd4, 0xaa}, 26878c2ecf20Sopenharmony_ci {0x00, 0x7e, 0xea, 0xaa}, 26888c2ecf20Sopenharmony_ci 26898c2ecf20Sopenharmony_ci {0x00, 0xd6, 0xa2, 0xaa}, /* gamma 2 */ 26908c2ecf20Sopenharmony_ci {0x00, 0x73, 0x00, 0xaa}, 26918c2ecf20Sopenharmony_ci {0x00, 0x74, 0x0a, 0xaa}, 26928c2ecf20Sopenharmony_ci {0x00, 0x75, 0x16, 0xaa}, 26938c2ecf20Sopenharmony_ci {0x00, 0x76, 0x25, 0xaa}, 26948c2ecf20Sopenharmony_ci {0x00, 0x77, 0x34, 0xaa}, 26958c2ecf20Sopenharmony_ci {0x00, 0x78, 0x49, 0xaa}, 26968c2ecf20Sopenharmony_ci {0x00, 0x79, 0x5a, 0xaa}, 26978c2ecf20Sopenharmony_ci {0x00, 0x7a, 0x7f, 0xaa}, 26988c2ecf20Sopenharmony_ci {0x00, 0x7b, 0x9b, 0xaa}, 26998c2ecf20Sopenharmony_ci {0x00, 0x7c, 0xba, 0xaa}, 27008c2ecf20Sopenharmony_ci {0x00, 0x7d, 0xd4, 0xaa}, 27018c2ecf20Sopenharmony_ci {0x00, 0x7e, 0xea, 0xaa}, 27028c2ecf20Sopenharmony_ci {} 27038c2ecf20Sopenharmony_ci}; 27048c2ecf20Sopenharmony_cistatic const u8 poxxxx_init_start_3[][4] = { 27058c2ecf20Sopenharmony_ci {0x00, 0xb8, 0x28, 0xaa}, 27068c2ecf20Sopenharmony_ci {0x00, 0xb9, 0x1e, 0xaa}, 27078c2ecf20Sopenharmony_ci {0x00, 0xb6, 0x14, 0xaa}, 27088c2ecf20Sopenharmony_ci {0x00, 0xb7, 0x0f, 0xaa}, 27098c2ecf20Sopenharmony_ci {0x00, 0x5c, 0x10, 0xaa}, 27108c2ecf20Sopenharmony_ci {0x00, 0x5d, 0x18, 0xaa}, 27118c2ecf20Sopenharmony_ci {0x00, 0x5e, 0x24, 0xaa}, 27128c2ecf20Sopenharmony_ci {0x00, 0x5f, 0x24, 0xaa}, 27138c2ecf20Sopenharmony_ci {0x00, 0x86, 0x1a, 0xaa}, 27148c2ecf20Sopenharmony_ci {0x00, 0x60, 0x00, 0xaa}, 27158c2ecf20Sopenharmony_ci {0x00, 0x61, 0x1b, 0xaa}, 27168c2ecf20Sopenharmony_ci {0x00, 0x62, 0x30, 0xaa}, 27178c2ecf20Sopenharmony_ci {0x00, 0x63, 0x40, 0xaa}, 27188c2ecf20Sopenharmony_ci {0x00, 0x87, 0x1a, 0xaa}, 27198c2ecf20Sopenharmony_ci {0x00, 0x64, 0x00, 0xaa}, 27208c2ecf20Sopenharmony_ci {0x00, 0x65, 0x08, 0xaa}, 27218c2ecf20Sopenharmony_ci {0x00, 0x66, 0x10, 0xaa}, 27228c2ecf20Sopenharmony_ci {0x00, 0x67, 0x20, 0xaa}, 27238c2ecf20Sopenharmony_ci {0x00, 0x88, 0x10, 0xaa}, 27248c2ecf20Sopenharmony_ci {0x00, 0x68, 0x00, 0xaa}, 27258c2ecf20Sopenharmony_ci {0x00, 0x69, 0x08, 0xaa}, 27268c2ecf20Sopenharmony_ci {0x00, 0x6a, 0x0f, 0xaa}, 27278c2ecf20Sopenharmony_ci {0x00, 0x6b, 0x0f, 0xaa}, 27288c2ecf20Sopenharmony_ci {0x00, 0x89, 0x07, 0xaa}, 27298c2ecf20Sopenharmony_ci {0x00, 0xd5, 0x4c, 0xaa}, 27308c2ecf20Sopenharmony_ci {0x00, 0x0a, 0x00, 0xaa}, 27318c2ecf20Sopenharmony_ci {0x00, 0x0b, 0x2a, 0xaa}, 27328c2ecf20Sopenharmony_ci {0x00, 0x0e, 0x03, 0xaa}, 27338c2ecf20Sopenharmony_ci {0x00, 0x0f, 0xea, 0xaa}, 27348c2ecf20Sopenharmony_ci {0x00, 0xa2, 0x00, 0xaa}, 27358c2ecf20Sopenharmony_ci {0x00, 0xa3, 0x2a, 0xaa}, 27368c2ecf20Sopenharmony_ci {0x00, 0xa4, 0x03, 0xaa}, 27378c2ecf20Sopenharmony_ci {0x00, 0xa5, 0xea, 0xaa}, 27388c2ecf20Sopenharmony_ci {} 27398c2ecf20Sopenharmony_ci}; 27408c2ecf20Sopenharmony_cistatic const u8 poxxxx_initVGA[][4] = { 27418c2ecf20Sopenharmony_ci {0x00, 0x20, 0x11, 0xaa}, 27428c2ecf20Sopenharmony_ci {0x00, 0x33, 0x38, 0xaa}, 27438c2ecf20Sopenharmony_ci {0x00, 0xbb, 0x0d, 0xaa}, 27448c2ecf20Sopenharmony_ci {0xb3, 0x22, 0x01, 0xcc}, /* change to 640x480 */ 27458c2ecf20Sopenharmony_ci {0xb3, 0x23, 0xe0, 0xcc}, 27468c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x02, 0xcc}, 27478c2ecf20Sopenharmony_ci {0xb3, 0x17, 0x7f, 0xcc}, 27488c2ecf20Sopenharmony_ci {0xb3, 0x02, 0xb0, 0xcc}, 27498c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x00, 0xcc}, 27508c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x01, 0xcc}, 27518c2ecf20Sopenharmony_ci {0x00, 0x04, 0x06, 0xaa}, 27528c2ecf20Sopenharmony_ci {0x00, 0x05, 0x3f, 0xaa}, 27538c2ecf20Sopenharmony_ci {0x00, 0x04, 0x00, 0xdd}, /* delay 1s */ 27548c2ecf20Sopenharmony_ci {} 27558c2ecf20Sopenharmony_ci}; 27568c2ecf20Sopenharmony_cistatic const u8 poxxxx_initQVGA[][4] = { 27578c2ecf20Sopenharmony_ci {0x00, 0x20, 0x33, 0xaa}, 27588c2ecf20Sopenharmony_ci {0x00, 0x33, 0x38, 0xaa}, 27598c2ecf20Sopenharmony_ci {0x00, 0xbb, 0x0d, 0xaa}, 27608c2ecf20Sopenharmony_ci {0xb3, 0x22, 0x00, 0xcc}, /* change to 320x240 */ 27618c2ecf20Sopenharmony_ci {0xb3, 0x23, 0xf0, 0xcc}, 27628c2ecf20Sopenharmony_ci {0xb3, 0x16, 0x01, 0xcc}, 27638c2ecf20Sopenharmony_ci {0xb3, 0x17, 0x3f, 0xcc}, 27648c2ecf20Sopenharmony_ci {0xb3, 0x02, 0xb0, 0xcc}, 27658c2ecf20Sopenharmony_ci {0xb3, 0x06, 0x01, 0xcc}, 27668c2ecf20Sopenharmony_ci {0xb3, 0x5c, 0x00, 0xcc}, 27678c2ecf20Sopenharmony_ci {0x00, 0x04, 0x06, 0xaa}, 27688c2ecf20Sopenharmony_ci {0x00, 0x05, 0x3f, 0xaa}, 27698c2ecf20Sopenharmony_ci {0x00, 0x04, 0x00, 0xdd}, /* delay 1s */ 27708c2ecf20Sopenharmony_ci {} 27718c2ecf20Sopenharmony_ci}; 27728c2ecf20Sopenharmony_cistatic const u8 poxxxx_init_end_1[][4] = { 27738c2ecf20Sopenharmony_ci {0x00, 0x47, 0x25, 0xaa}, 27748c2ecf20Sopenharmony_ci {0x00, 0x48, 0x80, 0xaa}, 27758c2ecf20Sopenharmony_ci {0x00, 0x49, 0x1f, 0xaa}, 27768c2ecf20Sopenharmony_ci {0x00, 0x4a, 0x40, 0xaa}, 27778c2ecf20Sopenharmony_ci {0x00, 0x44, 0x40, 0xaa}, 27788c2ecf20Sopenharmony_ci {0x00, 0xab, 0x4a, 0xaa}, 27798c2ecf20Sopenharmony_ci {0x00, 0xb1, 0x00, 0xaa}, 27808c2ecf20Sopenharmony_ci {0x00, 0xb2, 0x04, 0xaa}, 27818c2ecf20Sopenharmony_ci {0x00, 0xb3, 0x08, 0xaa}, 27828c2ecf20Sopenharmony_ci {0x00, 0xb4, 0x0b, 0xaa}, 27838c2ecf20Sopenharmony_ci {0x00, 0xb5, 0x0d, 0xaa}, 27848c2ecf20Sopenharmony_ci {} 27858c2ecf20Sopenharmony_ci}; 27868c2ecf20Sopenharmony_cistatic const u8 poxxxx_init_end_2[][4] = { 27878c2ecf20Sopenharmony_ci {0x00, 0x1d, 0x85, 0xaa}, 27888c2ecf20Sopenharmony_ci {0x00, 0x1e, 0x06, 0xaa}, 27898c2ecf20Sopenharmony_ci {0x00, 0x1d, 0x05, 0xaa}, 27908c2ecf20Sopenharmony_ci {} 27918c2ecf20Sopenharmony_ci}; 27928c2ecf20Sopenharmony_ci 27938c2ecf20Sopenharmony_cistruct sensor_info { 27948c2ecf20Sopenharmony_ci s8 sensorId; 27958c2ecf20Sopenharmony_ci u8 I2cAdd; 27968c2ecf20Sopenharmony_ci u8 IdAdd; 27978c2ecf20Sopenharmony_ci u16 VpId; 27988c2ecf20Sopenharmony_ci u8 m1; 27998c2ecf20Sopenharmony_ci u8 m2; 28008c2ecf20Sopenharmony_ci u8 op; 28018c2ecf20Sopenharmony_ci}; 28028c2ecf20Sopenharmony_ci 28038c2ecf20Sopenharmony_ci/* probe values */ 28048c2ecf20Sopenharmony_cistatic const struct sensor_info vc0321_probe_data[] = { 28058c2ecf20Sopenharmony_ci/* sensorId, I2cAdd, IdAdd, VpId, m1, m2, op */ 28068c2ecf20Sopenharmony_ci/* 0 OV9640 */ 28078c2ecf20Sopenharmony_ci {-1, 0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05}, 28088c2ecf20Sopenharmony_ci/* 1 ICM108T (may respond on IdAdd == 0x83 - tested in vc032x_probe_sensor) */ 28098c2ecf20Sopenharmony_ci {-1, 0x80 | 0x20, 0x82, 0x0000, 0x24, 0x25, 0x01}, 28108c2ecf20Sopenharmony_ci/* 2 PO2130 (may detect PO3130NC - tested in vc032x_probe_sensor)*/ 28118c2ecf20Sopenharmony_ci {-1, 0x80 | 0x76, 0x00, 0x0000, 0x24, 0x25, 0x01}, 28128c2ecf20Sopenharmony_ci/* 3 MI1310 */ 28138c2ecf20Sopenharmony_ci {-1, 0x80 | 0x5d, 0x00, 0x0000, 0x24, 0x25, 0x01}, 28148c2ecf20Sopenharmony_ci/* 4 MI360 - tested in vc032x_probe_sensor */ 28158c2ecf20Sopenharmony_ci/* {SENSOR_MI0360, 0x80 | 0x5d, 0x00, 0x8243, 0x24, 0x25, 0x01}, */ 28168c2ecf20Sopenharmony_ci/* 5 7131R */ 28178c2ecf20Sopenharmony_ci {SENSOR_HV7131R, 0x80 | 0x11, 0x00, 0x0209, 0x24, 0x25, 0x01}, 28188c2ecf20Sopenharmony_ci/* 6 OV7649 */ 28198c2ecf20Sopenharmony_ci {-1, 0x80 | 0x21, 0x0a, 0x0000, 0x21, 0x20, 0x05}, 28208c2ecf20Sopenharmony_ci/* 7 PAS302BCW */ 28218c2ecf20Sopenharmony_ci {-1, 0x80 | 0x40, 0x00, 0x0000, 0x20, 0x22, 0x05}, 28228c2ecf20Sopenharmony_ci/* 8 OV7660 */ 28238c2ecf20Sopenharmony_ci {SENSOR_OV7660, 0x80 | 0x21, 0x0a, 0x7660, 0x26, 0x26, 0x05}, 28248c2ecf20Sopenharmony_ci/* 9 PO3130NC - (tested in vc032x_probe_sensor) */ 28258c2ecf20Sopenharmony_ci/* {SENSOR_PO3130NC, 0x80 | 0x76, 0x00, 0x3130, 0x24, 0x25, 0x01}, */ 28268c2ecf20Sopenharmony_ci/* 10 PO1030KC */ 28278c2ecf20Sopenharmony_ci {-1, 0x80 | 0x6e, 0x00, 0x0000, 0x24, 0x25, 0x01}, 28288c2ecf20Sopenharmony_ci/* 11 MI1310_SOC */ 28298c2ecf20Sopenharmony_ci {SENSOR_MI1310_SOC, 0x80 | 0x5d, 0x00, 0x143a, 0x24, 0x25, 0x01}, 28308c2ecf20Sopenharmony_ci/* 12 OV9650 */ 28318c2ecf20Sopenharmony_ci {-1, 0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05}, 28328c2ecf20Sopenharmony_ci/* 13 S5K532 */ 28338c2ecf20Sopenharmony_ci {-1, 0x80 | 0x11, 0x39, 0x0000, 0x24, 0x25, 0x01}, 28348c2ecf20Sopenharmony_ci/* 14 MI360_SOC - ??? */ 28358c2ecf20Sopenharmony_ci/* 15 PO1200N */ 28368c2ecf20Sopenharmony_ci {SENSOR_PO1200, 0x80 | 0x5c, 0x00, 0x1200, 0x67, 0x67, 0x01}, 28378c2ecf20Sopenharmony_ci/* 16 PO3030K */ 28388c2ecf20Sopenharmony_ci {-1, 0x80 | 0x18, 0x00, 0x0000, 0x24, 0x25, 0x01}, 28398c2ecf20Sopenharmony_ci/* 17 PO2030 */ 28408c2ecf20Sopenharmony_ci {-1, 0x80 | 0x6e, 0x00, 0x0000, 0x24, 0x25, 0x01}, 28418c2ecf20Sopenharmony_ci/* ?? */ 28428c2ecf20Sopenharmony_ci {-1, 0x80 | 0x56, 0x01, 0x0000, 0x64, 0x67, 0x01}, 28438c2ecf20Sopenharmony_ci {SENSOR_MI1320, 0x80 | 0x48, 0x00, 0x148c, 0x64, 0x65, 0x01}, 28448c2ecf20Sopenharmony_ci}; 28458c2ecf20Sopenharmony_cistatic const struct sensor_info vc0323_probe_data[] = { 28468c2ecf20Sopenharmony_ci/* sensorId, I2cAdd, IdAdd, VpId, m1, m2, op */ 28478c2ecf20Sopenharmony_ci/* 0 OV9640 */ 28488c2ecf20Sopenharmony_ci {-1, 0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05}, 28498c2ecf20Sopenharmony_ci/* 1 ICM108T (may respond on IdAdd == 0x83 - tested in vc032x_probe_sensor) */ 28508c2ecf20Sopenharmony_ci {-1, 0x80 | 0x20, 0x82, 0x0000, 0x24, 0x25, 0x01}, 28518c2ecf20Sopenharmony_ci/* 2 PO2130 (may detect PO3130NC - tested in vc032x_probe_sensor)*/ 28528c2ecf20Sopenharmony_ci {-1, 0x80 | 0x76, 0x00, 0x0000, 0x24, 0x25, 0x01}, 28538c2ecf20Sopenharmony_ci/* 3 MI1310 */ 28548c2ecf20Sopenharmony_ci {-1, 0x80 | 0x5d, 0x00, 0x0000, 0x24, 0x25, 0x01}, 28558c2ecf20Sopenharmony_ci/* 4 MI360 - tested in vc032x_probe_sensor */ 28568c2ecf20Sopenharmony_ci/* {SENSOR_MI0360, 0x80 | 0x5d, 0x00, 0x8243, 0x24, 0x25, 0x01}, */ 28578c2ecf20Sopenharmony_ci/* 5 7131R */ 28588c2ecf20Sopenharmony_ci {SENSOR_HV7131R, 0x80 | 0x11, 0x00, 0x0209, 0x24, 0x25, 0x01}, 28598c2ecf20Sopenharmony_ci/* 6 OV7649 */ 28608c2ecf20Sopenharmony_ci {-1, 0x80 | 0x21, 0x0a, 0x0000, 0x21, 0x20, 0x05}, 28618c2ecf20Sopenharmony_ci/* 7 PAS302BCW */ 28628c2ecf20Sopenharmony_ci {-1, 0x80 | 0x40, 0x00, 0x0000, 0x20, 0x22, 0x05}, 28638c2ecf20Sopenharmony_ci/* 8 OV7660 */ 28648c2ecf20Sopenharmony_ci {SENSOR_OV7660, 0x80 | 0x21, 0x0a, 0x7660, 0x26, 0x26, 0x05}, 28658c2ecf20Sopenharmony_ci/* 9 PO3130NC - (tested in vc032x_probe_sensor) */ 28668c2ecf20Sopenharmony_ci/* {SENSOR_PO3130NC, 0x80 | 0x76, 0x00, 0x3130, 0x24, 0x25, 0x01}, */ 28678c2ecf20Sopenharmony_ci/* 10 PO1030KC */ 28688c2ecf20Sopenharmony_ci {-1, 0x80 | 0x6e, 0x00, 0x0000, 0x24, 0x25, 0x01}, 28698c2ecf20Sopenharmony_ci/* 11 MI1310_SOC */ 28708c2ecf20Sopenharmony_ci {SENSOR_MI1310_SOC, 0x80 | 0x5d, 0x00, 0x143a, 0x24, 0x25, 0x01}, 28718c2ecf20Sopenharmony_ci/* 12 OV9650 */ 28728c2ecf20Sopenharmony_ci {-1, 0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05}, 28738c2ecf20Sopenharmony_ci/* 13 S5K532 */ 28748c2ecf20Sopenharmony_ci {-1, 0x80 | 0x11, 0x39, 0x0000, 0x24, 0x25, 0x01}, 28758c2ecf20Sopenharmony_ci/* 14 MI360_SOC - ??? */ 28768c2ecf20Sopenharmony_ci/* 15 PO1200N */ 28778c2ecf20Sopenharmony_ci {SENSOR_PO1200, 0x80 | 0x5c, 0x00, 0x1200, 0x67, 0x67, 0x01}, 28788c2ecf20Sopenharmony_ci/* 16 ?? */ 28798c2ecf20Sopenharmony_ci {-1, 0x80 | 0x2d, 0x00, 0x0000, 0x65, 0x67, 0x01}, 28808c2ecf20Sopenharmony_ci/* 17 PO2030 */ 28818c2ecf20Sopenharmony_ci {-1, 0x80 | 0x6e, 0x00, 0x0000, 0x24, 0x25, 0x01}, 28828c2ecf20Sopenharmony_ci/* ?? */ 28838c2ecf20Sopenharmony_ci {-1, 0x80 | 0x56, 0x01, 0x0000, 0x64, 0x67, 0x01}, 28848c2ecf20Sopenharmony_ci {SENSOR_MI1320_SOC, 0x80 | 0x48, 0x00, 0x148c, 0x64, 0x67, 0x01}, 28858c2ecf20Sopenharmony_ci/*fixme: not in the ms-win probe - may be found before? */ 28868c2ecf20Sopenharmony_ci {SENSOR_OV7670, 0x80 | 0x21, 0x0a, 0x7673, 0x66, 0x67, 0x05}, 28878c2ecf20Sopenharmony_ci}; 28888c2ecf20Sopenharmony_ci 28898c2ecf20Sopenharmony_ci/* read 'len' bytes in gspca_dev->usb_buf */ 28908c2ecf20Sopenharmony_cistatic void reg_r_i(struct gspca_dev *gspca_dev, 28918c2ecf20Sopenharmony_ci u16 req, 28928c2ecf20Sopenharmony_ci u16 index, 28938c2ecf20Sopenharmony_ci u16 len) 28948c2ecf20Sopenharmony_ci{ 28958c2ecf20Sopenharmony_ci int ret; 28968c2ecf20Sopenharmony_ci 28978c2ecf20Sopenharmony_ci if (gspca_dev->usb_err < 0) 28988c2ecf20Sopenharmony_ci return; 28998c2ecf20Sopenharmony_ci ret = usb_control_msg(gspca_dev->dev, 29008c2ecf20Sopenharmony_ci usb_rcvctrlpipe(gspca_dev->dev, 0), 29018c2ecf20Sopenharmony_ci req, 29028c2ecf20Sopenharmony_ci USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 29038c2ecf20Sopenharmony_ci 1, /* value */ 29048c2ecf20Sopenharmony_ci index, gspca_dev->usb_buf, len, 29058c2ecf20Sopenharmony_ci 500); 29068c2ecf20Sopenharmony_ci if (ret < 0) { 29078c2ecf20Sopenharmony_ci pr_err("reg_r err %d\n", ret); 29088c2ecf20Sopenharmony_ci gspca_dev->usb_err = ret; 29098c2ecf20Sopenharmony_ci /* 29108c2ecf20Sopenharmony_ci * Make sure the buffer is zeroed to avoid uninitialized 29118c2ecf20Sopenharmony_ci * values. 29128c2ecf20Sopenharmony_ci */ 29138c2ecf20Sopenharmony_ci memset(gspca_dev->usb_buf, 0, USB_BUF_SZ); 29148c2ecf20Sopenharmony_ci } 29158c2ecf20Sopenharmony_ci} 29168c2ecf20Sopenharmony_cistatic void reg_r(struct gspca_dev *gspca_dev, 29178c2ecf20Sopenharmony_ci u16 req, 29188c2ecf20Sopenharmony_ci u16 index, 29198c2ecf20Sopenharmony_ci u16 len) 29208c2ecf20Sopenharmony_ci{ 29218c2ecf20Sopenharmony_ci reg_r_i(gspca_dev, req, index, len); 29228c2ecf20Sopenharmony_ci if (gspca_dev->usb_err < 0) 29238c2ecf20Sopenharmony_ci return; 29248c2ecf20Sopenharmony_ci if (len == 1) 29258c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_USBI, "GET %02x 0001 %04x %02x\n", 29268c2ecf20Sopenharmony_ci req, index, 29278c2ecf20Sopenharmony_ci gspca_dev->usb_buf[0]); 29288c2ecf20Sopenharmony_ci else 29298c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_USBI, "GET %02x 0001 %04x %*ph\n", 29308c2ecf20Sopenharmony_ci req, index, 3, gspca_dev->usb_buf); 29318c2ecf20Sopenharmony_ci} 29328c2ecf20Sopenharmony_ci 29338c2ecf20Sopenharmony_cistatic void reg_w_i(struct gspca_dev *gspca_dev, 29348c2ecf20Sopenharmony_ci u16 req, 29358c2ecf20Sopenharmony_ci u16 value, 29368c2ecf20Sopenharmony_ci u16 index) 29378c2ecf20Sopenharmony_ci{ 29388c2ecf20Sopenharmony_ci int ret; 29398c2ecf20Sopenharmony_ci 29408c2ecf20Sopenharmony_ci if (gspca_dev->usb_err < 0) 29418c2ecf20Sopenharmony_ci return; 29428c2ecf20Sopenharmony_ci ret = usb_control_msg(gspca_dev->dev, 29438c2ecf20Sopenharmony_ci usb_sndctrlpipe(gspca_dev->dev, 0), 29448c2ecf20Sopenharmony_ci req, 29458c2ecf20Sopenharmony_ci USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, 29468c2ecf20Sopenharmony_ci value, index, NULL, 0, 29478c2ecf20Sopenharmony_ci 500); 29488c2ecf20Sopenharmony_ci if (ret < 0) { 29498c2ecf20Sopenharmony_ci pr_err("reg_w err %d\n", ret); 29508c2ecf20Sopenharmony_ci gspca_dev->usb_err = ret; 29518c2ecf20Sopenharmony_ci } 29528c2ecf20Sopenharmony_ci} 29538c2ecf20Sopenharmony_cistatic void reg_w(struct gspca_dev *gspca_dev, 29548c2ecf20Sopenharmony_ci u16 req, 29558c2ecf20Sopenharmony_ci u16 value, 29568c2ecf20Sopenharmony_ci u16 index) 29578c2ecf20Sopenharmony_ci{ 29588c2ecf20Sopenharmony_ci if (gspca_dev->usb_err < 0) 29598c2ecf20Sopenharmony_ci return; 29608c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_USBO, "SET %02x %04x %04x\n", req, value, index); 29618c2ecf20Sopenharmony_ci reg_w_i(gspca_dev, req, value, index); 29628c2ecf20Sopenharmony_ci} 29638c2ecf20Sopenharmony_ci 29648c2ecf20Sopenharmony_cistatic u16 read_sensor_register(struct gspca_dev *gspca_dev, 29658c2ecf20Sopenharmony_ci u16 address) 29668c2ecf20Sopenharmony_ci{ 29678c2ecf20Sopenharmony_ci u8 ldata, mdata, hdata; 29688c2ecf20Sopenharmony_ci int retry = 50; 29698c2ecf20Sopenharmony_ci 29708c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0xa1, 0xb33f, 1); 29718c2ecf20Sopenharmony_ci if (!(gspca_dev->usb_buf[0] & 0x02)) { 29728c2ecf20Sopenharmony_ci pr_err("I2c Bus Busy Wait %02x\n", gspca_dev->usb_buf[0]); 29738c2ecf20Sopenharmony_ci return 0; 29748c2ecf20Sopenharmony_ci } 29758c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, address, 0xb33a); 29768c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 0x02, 0xb339); 29778c2ecf20Sopenharmony_ci 29788c2ecf20Sopenharmony_ci do { 29798c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0xa1, 0xb33b, 1); 29808c2ecf20Sopenharmony_ci if (gspca_dev->usb_buf[0] == 0x00) 29818c2ecf20Sopenharmony_ci break; 29828c2ecf20Sopenharmony_ci msleep(40); 29838c2ecf20Sopenharmony_ci } while (--retry >= 0); 29848c2ecf20Sopenharmony_ci 29858c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0xa1, 0xb33e, 1); 29868c2ecf20Sopenharmony_ci ldata = gspca_dev->usb_buf[0]; 29878c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0xa1, 0xb33d, 1); 29888c2ecf20Sopenharmony_ci mdata = gspca_dev->usb_buf[0]; 29898c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0xa1, 0xb33c, 1); 29908c2ecf20Sopenharmony_ci hdata = gspca_dev->usb_buf[0]; 29918c2ecf20Sopenharmony_ci if (hdata != 0 && mdata != 0 && ldata != 0) 29928c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Read Sensor %02x%02x %02x\n", 29938c2ecf20Sopenharmony_ci hdata, mdata, ldata); 29948c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0xa1, 0xb334, 1); 29958c2ecf20Sopenharmony_ci if (gspca_dev->usb_buf[0] == 0x02) 29968c2ecf20Sopenharmony_ci return (hdata << 8) + mdata; 29978c2ecf20Sopenharmony_ci return hdata; 29988c2ecf20Sopenharmony_ci} 29998c2ecf20Sopenharmony_ci 30008c2ecf20Sopenharmony_cistatic int vc032x_probe_sensor(struct gspca_dev *gspca_dev) 30018c2ecf20Sopenharmony_ci{ 30028c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 30038c2ecf20Sopenharmony_ci int i, n; 30048c2ecf20Sopenharmony_ci u16 value; 30058c2ecf20Sopenharmony_ci const struct sensor_info *ptsensor_info; 30068c2ecf20Sopenharmony_ci 30078c2ecf20Sopenharmony_ci/*fixme: should also check the other sensor (back mi1320_soc, front mc501cb)*/ 30088c2ecf20Sopenharmony_ci if (sd->flags & FL_SAMSUNG) { 30098c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 0x01, 0xb301); 30108c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x89, 0xf0ff, 0xffff); 30118c2ecf20Sopenharmony_ci /* select the back sensor */ 30128c2ecf20Sopenharmony_ci } 30138c2ecf20Sopenharmony_ci 30148c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0xa1, 0xbfcf, 1); 30158c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "vc032%d check sensor header %02x\n", 30168c2ecf20Sopenharmony_ci sd->bridge == BRIDGE_VC0321 ? 1 : 3, gspca_dev->usb_buf[0]); 30178c2ecf20Sopenharmony_ci if (sd->bridge == BRIDGE_VC0321) { 30188c2ecf20Sopenharmony_ci ptsensor_info = vc0321_probe_data; 30198c2ecf20Sopenharmony_ci n = ARRAY_SIZE(vc0321_probe_data); 30208c2ecf20Sopenharmony_ci } else { 30218c2ecf20Sopenharmony_ci ptsensor_info = vc0323_probe_data; 30228c2ecf20Sopenharmony_ci n = ARRAY_SIZE(vc0323_probe_data); 30238c2ecf20Sopenharmony_ci } 30248c2ecf20Sopenharmony_ci for (i = 0; i < n; i++) { 30258c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 0x02, 0xb334); 30268c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, ptsensor_info->m1, 0xb300); 30278c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, ptsensor_info->m2, 0xb300); 30288c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 0x01, 0xb308); 30298c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 0x0c, 0xb309); 30308c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, ptsensor_info->I2cAdd, 0xb335); 30318c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, ptsensor_info->op, 0xb301); 30328c2ecf20Sopenharmony_ci value = read_sensor_register(gspca_dev, ptsensor_info->IdAdd); 30338c2ecf20Sopenharmony_ci if (value == 0 && ptsensor_info->IdAdd == 0x82) 30348c2ecf20Sopenharmony_ci value = read_sensor_register(gspca_dev, 0x83); 30358c2ecf20Sopenharmony_ci if (value != 0) { 30368c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Sensor ID %04x (%d)\n", 30378c2ecf20Sopenharmony_ci value, i); 30388c2ecf20Sopenharmony_ci if (value == ptsensor_info->VpId) 30398c2ecf20Sopenharmony_ci return ptsensor_info->sensorId; 30408c2ecf20Sopenharmony_ci 30418c2ecf20Sopenharmony_ci switch (value) { 30428c2ecf20Sopenharmony_ci case 0x3130: 30438c2ecf20Sopenharmony_ci return SENSOR_PO3130NC; 30448c2ecf20Sopenharmony_ci case 0x7673: 30458c2ecf20Sopenharmony_ci return SENSOR_OV7670; 30468c2ecf20Sopenharmony_ci case 0x8243: 30478c2ecf20Sopenharmony_ci return SENSOR_MI0360; 30488c2ecf20Sopenharmony_ci } 30498c2ecf20Sopenharmony_ci } 30508c2ecf20Sopenharmony_ci ptsensor_info++; 30518c2ecf20Sopenharmony_ci } 30528c2ecf20Sopenharmony_ci return -1; 30538c2ecf20Sopenharmony_ci} 30548c2ecf20Sopenharmony_ci 30558c2ecf20Sopenharmony_cistatic void i2c_write(struct gspca_dev *gspca_dev, 30568c2ecf20Sopenharmony_ci u8 reg, const u8 *val, 30578c2ecf20Sopenharmony_ci u8 size) /* 1 or 2 */ 30588c2ecf20Sopenharmony_ci{ 30598c2ecf20Sopenharmony_ci int retry; 30608c2ecf20Sopenharmony_ci 30618c2ecf20Sopenharmony_ci if (gspca_dev->usb_err < 0) 30628c2ecf20Sopenharmony_ci return; 30638c2ecf20Sopenharmony_ci if (size == 1) 30648c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_USBO, "i2c_w %02x %02x\n", reg, *val); 30658c2ecf20Sopenharmony_ci else 30668c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_USBO, "i2c_w %02x %02x%02x\n", 30678c2ecf20Sopenharmony_ci reg, *val, val[1]); 30688c2ecf20Sopenharmony_ci reg_r_i(gspca_dev, 0xa1, 0xb33f, 1); 30698c2ecf20Sopenharmony_ci/*fixme:should check if (!(gspca_dev->usb_buf[0] & 0x02)) error*/ 30708c2ecf20Sopenharmony_ci reg_w_i(gspca_dev, 0xa0, size, 0xb334); 30718c2ecf20Sopenharmony_ci reg_w_i(gspca_dev, 0xa0, reg, 0xb33a); 30728c2ecf20Sopenharmony_ci reg_w_i(gspca_dev, 0xa0, val[0], 0xb336); 30738c2ecf20Sopenharmony_ci if (size > 1) 30748c2ecf20Sopenharmony_ci reg_w_i(gspca_dev, 0xa0, val[1], 0xb337); 30758c2ecf20Sopenharmony_ci reg_w_i(gspca_dev, 0xa0, 0x01, 0xb339); 30768c2ecf20Sopenharmony_ci retry = 4; 30778c2ecf20Sopenharmony_ci do { 30788c2ecf20Sopenharmony_ci reg_r_i(gspca_dev, 0xa1, 0xb33b, 1); 30798c2ecf20Sopenharmony_ci if (gspca_dev->usb_buf[0] == 0) 30808c2ecf20Sopenharmony_ci break; 30818c2ecf20Sopenharmony_ci msleep(20); 30828c2ecf20Sopenharmony_ci } while (--retry > 0); 30838c2ecf20Sopenharmony_ci if (retry <= 0) 30848c2ecf20Sopenharmony_ci pr_err("i2c_write timeout\n"); 30858c2ecf20Sopenharmony_ci} 30868c2ecf20Sopenharmony_ci 30878c2ecf20Sopenharmony_cistatic void put_tab_to_reg(struct gspca_dev *gspca_dev, 30888c2ecf20Sopenharmony_ci const u8 *tab, u8 tabsize, u16 addr) 30898c2ecf20Sopenharmony_ci{ 30908c2ecf20Sopenharmony_ci int j; 30918c2ecf20Sopenharmony_ci u16 ad = addr; 30928c2ecf20Sopenharmony_ci 30938c2ecf20Sopenharmony_ci for (j = 0; j < tabsize; j++) 30948c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, tab[j], ad++); 30958c2ecf20Sopenharmony_ci} 30968c2ecf20Sopenharmony_ci 30978c2ecf20Sopenharmony_cistatic void usb_exchange(struct gspca_dev *gspca_dev, 30988c2ecf20Sopenharmony_ci const u8 data[][4]) 30998c2ecf20Sopenharmony_ci{ 31008c2ecf20Sopenharmony_ci int i = 0; 31018c2ecf20Sopenharmony_ci 31028c2ecf20Sopenharmony_ci for (;;) { 31038c2ecf20Sopenharmony_ci switch (data[i][3]) { 31048c2ecf20Sopenharmony_ci default: 31058c2ecf20Sopenharmony_ci return; 31068c2ecf20Sopenharmony_ci case 0xcc: /* normal write */ 31078c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, data[i][2], 31088c2ecf20Sopenharmony_ci (data[i][0]) << 8 | data[i][1]); 31098c2ecf20Sopenharmony_ci break; 31108c2ecf20Sopenharmony_ci case 0xaa: /* i2c op */ 31118c2ecf20Sopenharmony_ci i2c_write(gspca_dev, data[i][1], &data[i][2], 1); 31128c2ecf20Sopenharmony_ci break; 31138c2ecf20Sopenharmony_ci case 0xbb: /* i2c op */ 31148c2ecf20Sopenharmony_ci i2c_write(gspca_dev, data[i][0], &data[i][1], 2); 31158c2ecf20Sopenharmony_ci break; 31168c2ecf20Sopenharmony_ci case 0xdd: 31178c2ecf20Sopenharmony_ci msleep(data[i][1] * 256 + data[i][2] + 10); 31188c2ecf20Sopenharmony_ci break; 31198c2ecf20Sopenharmony_ci } 31208c2ecf20Sopenharmony_ci i++; 31218c2ecf20Sopenharmony_ci } 31228c2ecf20Sopenharmony_ci /*not reached*/ 31238c2ecf20Sopenharmony_ci} 31248c2ecf20Sopenharmony_ci 31258c2ecf20Sopenharmony_ci 31268c2ecf20Sopenharmony_ci/* this function is called at probe time */ 31278c2ecf20Sopenharmony_cistatic int sd_config(struct gspca_dev *gspca_dev, 31288c2ecf20Sopenharmony_ci const struct usb_device_id *id) 31298c2ecf20Sopenharmony_ci{ 31308c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 31318c2ecf20Sopenharmony_ci 31328c2ecf20Sopenharmony_ci sd->bridge = id->driver_info >> 8; 31338c2ecf20Sopenharmony_ci sd->flags = id->driver_info & 0xff; 31348c2ecf20Sopenharmony_ci 31358c2ecf20Sopenharmony_ci if (id->idVendor == 0x046d && 31368c2ecf20Sopenharmony_ci (id->idProduct == 0x0892 || id->idProduct == 0x0896)) 31378c2ecf20Sopenharmony_ci sd->sensor = SENSOR_POxxxx; /* no probe */ 31388c2ecf20Sopenharmony_ci 31398c2ecf20Sopenharmony_ci return 0; 31408c2ecf20Sopenharmony_ci} 31418c2ecf20Sopenharmony_ci 31428c2ecf20Sopenharmony_ci/* this function is called at probe and resume time */ 31438c2ecf20Sopenharmony_cistatic int sd_init(struct gspca_dev *gspca_dev) 31448c2ecf20Sopenharmony_ci{ 31458c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 31468c2ecf20Sopenharmony_ci struct cam *cam; 31478c2ecf20Sopenharmony_ci int sensor; 31488c2ecf20Sopenharmony_ci /* number of packets per ISOC message */ 31498c2ecf20Sopenharmony_ci static u8 npkt[NSENSORS] = { 31508c2ecf20Sopenharmony_ci [SENSOR_HV7131R] = 64, 31518c2ecf20Sopenharmony_ci [SENSOR_MI0360] = 32, 31528c2ecf20Sopenharmony_ci [SENSOR_MI1310_SOC] = 32, 31538c2ecf20Sopenharmony_ci [SENSOR_MI1320] = 64, 31548c2ecf20Sopenharmony_ci [SENSOR_MI1320_SOC] = 128, 31558c2ecf20Sopenharmony_ci [SENSOR_OV7660] = 32, 31568c2ecf20Sopenharmony_ci [SENSOR_OV7670] = 64, 31578c2ecf20Sopenharmony_ci [SENSOR_PO1200] = 128, 31588c2ecf20Sopenharmony_ci [SENSOR_PO3130NC] = 128, 31598c2ecf20Sopenharmony_ci [SENSOR_POxxxx] = 128, 31608c2ecf20Sopenharmony_ci }; 31618c2ecf20Sopenharmony_ci 31628c2ecf20Sopenharmony_ci if (sd->sensor != SENSOR_POxxxx) 31638c2ecf20Sopenharmony_ci sensor = vc032x_probe_sensor(gspca_dev); 31648c2ecf20Sopenharmony_ci else 31658c2ecf20Sopenharmony_ci sensor = sd->sensor; 31668c2ecf20Sopenharmony_ci 31678c2ecf20Sopenharmony_ci switch (sensor) { 31688c2ecf20Sopenharmony_ci case -1: 31698c2ecf20Sopenharmony_ci pr_err("Unknown sensor...\n"); 31708c2ecf20Sopenharmony_ci return -EINVAL; 31718c2ecf20Sopenharmony_ci case SENSOR_HV7131R: 31728c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor HV7131R\n"); 31738c2ecf20Sopenharmony_ci break; 31748c2ecf20Sopenharmony_ci case SENSOR_MI0360: 31758c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor MI0360\n"); 31768c2ecf20Sopenharmony_ci sd->bridge = BRIDGE_VC0323; 31778c2ecf20Sopenharmony_ci break; 31788c2ecf20Sopenharmony_ci case SENSOR_MI1310_SOC: 31798c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor MI1310_SOC\n"); 31808c2ecf20Sopenharmony_ci break; 31818c2ecf20Sopenharmony_ci case SENSOR_MI1320: 31828c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor MI1320\n"); 31838c2ecf20Sopenharmony_ci break; 31848c2ecf20Sopenharmony_ci case SENSOR_MI1320_SOC: 31858c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor MI1320_SOC\n"); 31868c2ecf20Sopenharmony_ci break; 31878c2ecf20Sopenharmony_ci case SENSOR_OV7660: 31888c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor OV7660\n"); 31898c2ecf20Sopenharmony_ci break; 31908c2ecf20Sopenharmony_ci case SENSOR_OV7670: 31918c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor OV7670\n"); 31928c2ecf20Sopenharmony_ci break; 31938c2ecf20Sopenharmony_ci case SENSOR_PO1200: 31948c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor PO1200\n"); 31958c2ecf20Sopenharmony_ci break; 31968c2ecf20Sopenharmony_ci case SENSOR_PO3130NC: 31978c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Find Sensor PO3130NC\n"); 31988c2ecf20Sopenharmony_ci break; 31998c2ecf20Sopenharmony_ci case SENSOR_POxxxx: 32008c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PROBE, "Sensor POxxxx\n"); 32018c2ecf20Sopenharmony_ci break; 32028c2ecf20Sopenharmony_ci } 32038c2ecf20Sopenharmony_ci sd->sensor = sensor; 32048c2ecf20Sopenharmony_ci 32058c2ecf20Sopenharmony_ci cam = &gspca_dev->cam; 32068c2ecf20Sopenharmony_ci if (sd->bridge == BRIDGE_VC0321) { 32078c2ecf20Sopenharmony_ci cam->cam_mode = vc0321_mode; 32088c2ecf20Sopenharmony_ci cam->nmodes = ARRAY_SIZE(vc0321_mode); 32098c2ecf20Sopenharmony_ci } else { 32108c2ecf20Sopenharmony_ci switch (sensor) { 32118c2ecf20Sopenharmony_ci case SENSOR_PO1200: 32128c2ecf20Sopenharmony_ci cam->cam_mode = svga_mode; 32138c2ecf20Sopenharmony_ci cam->nmodes = ARRAY_SIZE(svga_mode); 32148c2ecf20Sopenharmony_ci break; 32158c2ecf20Sopenharmony_ci case SENSOR_MI1310_SOC: 32168c2ecf20Sopenharmony_ci cam->cam_mode = vc0323_mode; 32178c2ecf20Sopenharmony_ci cam->nmodes = ARRAY_SIZE(vc0323_mode); 32188c2ecf20Sopenharmony_ci break; 32198c2ecf20Sopenharmony_ci case SENSOR_MI1320_SOC: 32208c2ecf20Sopenharmony_ci cam->cam_mode = bi_mode; 32218c2ecf20Sopenharmony_ci cam->nmodes = ARRAY_SIZE(bi_mode); 32228c2ecf20Sopenharmony_ci break; 32238c2ecf20Sopenharmony_ci case SENSOR_OV7670: 32248c2ecf20Sopenharmony_ci cam->cam_mode = bi_mode; 32258c2ecf20Sopenharmony_ci cam->nmodes = ARRAY_SIZE(bi_mode) - 1; 32268c2ecf20Sopenharmony_ci break; 32278c2ecf20Sopenharmony_ci default: 32288c2ecf20Sopenharmony_ci cam->cam_mode = vc0323_mode; 32298c2ecf20Sopenharmony_ci cam->nmodes = ARRAY_SIZE(vc0323_mode) - 1; 32308c2ecf20Sopenharmony_ci break; 32318c2ecf20Sopenharmony_ci } 32328c2ecf20Sopenharmony_ci } 32338c2ecf20Sopenharmony_ci cam->npkt = npkt[sd->sensor]; 32348c2ecf20Sopenharmony_ci 32358c2ecf20Sopenharmony_ci if (sd->sensor == SENSOR_OV7670) 32368c2ecf20Sopenharmony_ci sd->flags |= FL_HFLIP | FL_VFLIP; 32378c2ecf20Sopenharmony_ci 32388c2ecf20Sopenharmony_ci if (sd->bridge == BRIDGE_VC0321) { 32398c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0x8a, 0, 3); 32408c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x87, 0x00, 0x0f0f); 32418c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0x8b, 0, 3); 32428c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x88, 0x00, 0x0202); 32438c2ecf20Sopenharmony_ci if (sd->sensor == SENSOR_POxxxx) { 32448c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0xa1, 0xb300, 1); 32458c2ecf20Sopenharmony_ci if (gspca_dev->usb_buf[0] != 0) { 32468c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 0x26, 0xb300); 32478c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 0x04, 0xb300); 32488c2ecf20Sopenharmony_ci } 32498c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 0x00, 0xb300); 32508c2ecf20Sopenharmony_ci } 32518c2ecf20Sopenharmony_ci } 32528c2ecf20Sopenharmony_ci return gspca_dev->usb_err; 32538c2ecf20Sopenharmony_ci} 32548c2ecf20Sopenharmony_ci 32558c2ecf20Sopenharmony_cistatic void setbrightness(struct gspca_dev *gspca_dev, s32 val) 32568c2ecf20Sopenharmony_ci{ 32578c2ecf20Sopenharmony_ci u8 data; 32588c2ecf20Sopenharmony_ci 32598c2ecf20Sopenharmony_ci data = val; 32608c2ecf20Sopenharmony_ci if (data >= 0x80) 32618c2ecf20Sopenharmony_ci data &= 0x7f; 32628c2ecf20Sopenharmony_ci else 32638c2ecf20Sopenharmony_ci data = 0xff ^ data; 32648c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x98, &data, 1); 32658c2ecf20Sopenharmony_ci} 32668c2ecf20Sopenharmony_ci 32678c2ecf20Sopenharmony_cistatic void setcontrast(struct gspca_dev *gspca_dev, u8 val) 32688c2ecf20Sopenharmony_ci{ 32698c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x99, &val, 1); 32708c2ecf20Sopenharmony_ci} 32718c2ecf20Sopenharmony_ci 32728c2ecf20Sopenharmony_cistatic void setcolors(struct gspca_dev *gspca_dev, u8 val) 32738c2ecf20Sopenharmony_ci{ 32748c2ecf20Sopenharmony_ci u8 data; 32758c2ecf20Sopenharmony_ci 32768c2ecf20Sopenharmony_ci data = val - (val >> 3) - 1; 32778c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x94, &data, 1); 32788c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x95, &val, 1); 32798c2ecf20Sopenharmony_ci} 32808c2ecf20Sopenharmony_ci 32818c2ecf20Sopenharmony_cistatic void sethvflip(struct gspca_dev *gspca_dev, bool hflip, bool vflip) 32828c2ecf20Sopenharmony_ci{ 32838c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 32848c2ecf20Sopenharmony_ci u8 data[2]; 32858c2ecf20Sopenharmony_ci 32868c2ecf20Sopenharmony_ci if (sd->flags & FL_HFLIP) 32878c2ecf20Sopenharmony_ci hflip = !hflip; 32888c2ecf20Sopenharmony_ci if (sd->flags & FL_VFLIP) 32898c2ecf20Sopenharmony_ci vflip = !vflip; 32908c2ecf20Sopenharmony_ci switch (sd->sensor) { 32918c2ecf20Sopenharmony_ci case SENSOR_MI1310_SOC: 32928c2ecf20Sopenharmony_ci case SENSOR_MI1320: 32938c2ecf20Sopenharmony_ci case SENSOR_MI1320_SOC: 32948c2ecf20Sopenharmony_ci data[0] = data[1] = 0; /* select page 0 */ 32958c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0xf0, data, 2); 32968c2ecf20Sopenharmony_ci data[0] = sd->sensor == SENSOR_MI1310_SOC ? 0x03 : 0x01; 32978c2ecf20Sopenharmony_ci data[1] = 0x02 * hflip 32988c2ecf20Sopenharmony_ci | 0x01 * vflip; 32998c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x20, data, 2); 33008c2ecf20Sopenharmony_ci break; 33018c2ecf20Sopenharmony_ci case SENSOR_OV7660: 33028c2ecf20Sopenharmony_ci case SENSOR_OV7670: 33038c2ecf20Sopenharmony_ci data[0] = sd->sensor == SENSOR_OV7660 ? 0x01 : 0x07; 33048c2ecf20Sopenharmony_ci data[0] |= OV7660_MVFP_MIRROR * hflip 33058c2ecf20Sopenharmony_ci | OV7660_MVFP_VFLIP * vflip; 33068c2ecf20Sopenharmony_ci i2c_write(gspca_dev, OV7660_REG_MVFP, data, 1); 33078c2ecf20Sopenharmony_ci break; 33088c2ecf20Sopenharmony_ci case SENSOR_PO1200: 33098c2ecf20Sopenharmony_ci data[0] = 0; 33108c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x03, data, 1); 33118c2ecf20Sopenharmony_ci data[0] = 0x80 * hflip 33128c2ecf20Sopenharmony_ci | 0x40 * vflip 33138c2ecf20Sopenharmony_ci | 0x06; 33148c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x1e, data, 1); 33158c2ecf20Sopenharmony_ci break; 33168c2ecf20Sopenharmony_ci } 33178c2ecf20Sopenharmony_ci} 33188c2ecf20Sopenharmony_ci 33198c2ecf20Sopenharmony_cistatic void setlightfreq(struct gspca_dev *gspca_dev, s32 val) 33208c2ecf20Sopenharmony_ci{ 33218c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 33228c2ecf20Sopenharmony_ci static const u8 (*ov7660_freq_tb[3])[4] = 33238c2ecf20Sopenharmony_ci {ov7660_NoFliker, ov7660_50HZ, ov7660_60HZ}; 33248c2ecf20Sopenharmony_ci 33258c2ecf20Sopenharmony_ci if (sd->sensor != SENSOR_OV7660) 33268c2ecf20Sopenharmony_ci return; 33278c2ecf20Sopenharmony_ci usb_exchange(gspca_dev, ov7660_freq_tb[val]); 33288c2ecf20Sopenharmony_ci} 33298c2ecf20Sopenharmony_ci 33308c2ecf20Sopenharmony_cistatic void setsharpness(struct gspca_dev *gspca_dev, s32 val) 33318c2ecf20Sopenharmony_ci{ 33328c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 33338c2ecf20Sopenharmony_ci u8 data; 33348c2ecf20Sopenharmony_ci 33358c2ecf20Sopenharmony_ci switch (sd->sensor) { 33368c2ecf20Sopenharmony_ci case SENSOR_PO1200: 33378c2ecf20Sopenharmony_ci data = 0; 33388c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x03, &data, 1); 33398c2ecf20Sopenharmony_ci if (val < 0) 33408c2ecf20Sopenharmony_ci data = 0x6a; 33418c2ecf20Sopenharmony_ci else 33428c2ecf20Sopenharmony_ci data = 0xb5 + val * 3; 33438c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x61, &data, 1); 33448c2ecf20Sopenharmony_ci break; 33458c2ecf20Sopenharmony_ci case SENSOR_POxxxx: 33468c2ecf20Sopenharmony_ci if (val < 0) 33478c2ecf20Sopenharmony_ci data = 0x7e; /* def = max */ 33488c2ecf20Sopenharmony_ci else 33498c2ecf20Sopenharmony_ci data = 0x60 + val * 0x0f; 33508c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x59, &data, 1); 33518c2ecf20Sopenharmony_ci break; 33528c2ecf20Sopenharmony_ci } 33538c2ecf20Sopenharmony_ci} 33548c2ecf20Sopenharmony_cistatic void setgain(struct gspca_dev *gspca_dev, u8 val) 33558c2ecf20Sopenharmony_ci{ 33568c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x15, &val, 1); 33578c2ecf20Sopenharmony_ci} 33588c2ecf20Sopenharmony_ci 33598c2ecf20Sopenharmony_cistatic void setexposure(struct gspca_dev *gspca_dev, s32 val) 33608c2ecf20Sopenharmony_ci{ 33618c2ecf20Sopenharmony_ci u8 data; 33628c2ecf20Sopenharmony_ci 33638c2ecf20Sopenharmony_ci data = val >> 8; 33648c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x1a, &data, 1); 33658c2ecf20Sopenharmony_ci data = val; 33668c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x1b, &data, 1); 33678c2ecf20Sopenharmony_ci} 33688c2ecf20Sopenharmony_ci 33698c2ecf20Sopenharmony_cistatic void setautogain(struct gspca_dev *gspca_dev, s32 val) 33708c2ecf20Sopenharmony_ci{ 33718c2ecf20Sopenharmony_ci static const u8 data[2] = {0x28, 0x3c}; 33728c2ecf20Sopenharmony_ci 33738c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0xd1, &data[val], 1); 33748c2ecf20Sopenharmony_ci} 33758c2ecf20Sopenharmony_ci 33768c2ecf20Sopenharmony_cistatic void setgamma(struct gspca_dev *gspca_dev) 33778c2ecf20Sopenharmony_ci{ 33788c2ecf20Sopenharmony_ci/*fixme:to do */ 33798c2ecf20Sopenharmony_ci usb_exchange(gspca_dev, poxxxx_gamma); 33808c2ecf20Sopenharmony_ci} 33818c2ecf20Sopenharmony_ci 33828c2ecf20Sopenharmony_cistatic void setbacklight(struct gspca_dev *gspca_dev, s32 val) 33838c2ecf20Sopenharmony_ci{ 33848c2ecf20Sopenharmony_ci u16 v; 33858c2ecf20Sopenharmony_ci u8 data; 33868c2ecf20Sopenharmony_ci 33878c2ecf20Sopenharmony_ci data = (val << 4) | 0x0f; 33888c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0xaa, &data, 1); 33898c2ecf20Sopenharmony_ci v = 613 + 12 * val; 33908c2ecf20Sopenharmony_ci data = v >> 8; 33918c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0xc4, &data, 1); 33928c2ecf20Sopenharmony_ci data = v; 33938c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0xc5, &data, 1); 33948c2ecf20Sopenharmony_ci v = 1093 - 12 * val; 33958c2ecf20Sopenharmony_ci data = v >> 8; 33968c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0xc6, &data, 1); 33978c2ecf20Sopenharmony_ci data = v; 33988c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0xc7, &data, 1); 33998c2ecf20Sopenharmony_ci v = 342 + 9 * val; 34008c2ecf20Sopenharmony_ci data = v >> 8; 34018c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0xc8, &data, 1); 34028c2ecf20Sopenharmony_ci data = v; 34038c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0xc9, &data, 1); 34048c2ecf20Sopenharmony_ci v = 702 - 9 * val; 34058c2ecf20Sopenharmony_ci data = v >> 8; 34068c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0xca, &data, 1); 34078c2ecf20Sopenharmony_ci data = v; 34088c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0xcb, &data, 1); 34098c2ecf20Sopenharmony_ci} 34108c2ecf20Sopenharmony_ci 34118c2ecf20Sopenharmony_cistatic void setwb(struct gspca_dev *gspca_dev) 34128c2ecf20Sopenharmony_ci{ 34138c2ecf20Sopenharmony_ci/*fixme:to do - valid when reg d1 = 0x1c - (reg16 + reg15 = 0xa3)*/ 34148c2ecf20Sopenharmony_ci static const u8 data[2] = {0x00, 0x00}; 34158c2ecf20Sopenharmony_ci 34168c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x16, &data[0], 1); 34178c2ecf20Sopenharmony_ci i2c_write(gspca_dev, 0x18, &data[1], 1); 34188c2ecf20Sopenharmony_ci} 34198c2ecf20Sopenharmony_ci 34208c2ecf20Sopenharmony_cistatic int sd_start(struct gspca_dev *gspca_dev) 34218c2ecf20Sopenharmony_ci{ 34228c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 34238c2ecf20Sopenharmony_ci const u8 (*init)[4]; 34248c2ecf20Sopenharmony_ci const u8 *GammaT = NULL; 34258c2ecf20Sopenharmony_ci const u8 *MatrixT = NULL; 34268c2ecf20Sopenharmony_ci int mode; 34278c2ecf20Sopenharmony_ci static const u8 (*mi1320_soc_init[])[4] = { 34288c2ecf20Sopenharmony_ci mi1320_soc_InitSXGA, 34298c2ecf20Sopenharmony_ci mi1320_soc_InitVGA, 34308c2ecf20Sopenharmony_ci mi1320_soc_InitQVGA, 34318c2ecf20Sopenharmony_ci }; 34328c2ecf20Sopenharmony_ci 34338c2ecf20Sopenharmony_ci/*fixme: back sensor only*/ 34348c2ecf20Sopenharmony_ci if (sd->flags & FL_SAMSUNG) { 34358c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x89, 0xf0ff, 0xffff); 34368c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa9, 0x8348, 0x000e); 34378c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa9, 0x0000, 0x001a); 34388c2ecf20Sopenharmony_ci } 34398c2ecf20Sopenharmony_ci 34408c2ecf20Sopenharmony_ci /* Assume start use the good resolution from gspca_dev->mode */ 34418c2ecf20Sopenharmony_ci if (sd->bridge == BRIDGE_VC0321) { 34428c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 0xff, 0xbfec); 34438c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 0xff, 0xbfed); 34448c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 0xff, 0xbfee); 34458c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 0xff, 0xbfef); 34468c2ecf20Sopenharmony_ci sd->image_offset = 46; 34478c2ecf20Sopenharmony_ci } else { 34488c2ecf20Sopenharmony_ci if (gspca_dev->cam.cam_mode[gspca_dev->curr_mode].pixelformat 34498c2ecf20Sopenharmony_ci == V4L2_PIX_FMT_JPEG) 34508c2ecf20Sopenharmony_ci sd->image_offset = 0; 34518c2ecf20Sopenharmony_ci else 34528c2ecf20Sopenharmony_ci sd->image_offset = 32; 34538c2ecf20Sopenharmony_ci } 34548c2ecf20Sopenharmony_ci 34558c2ecf20Sopenharmony_ci mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; 34568c2ecf20Sopenharmony_ci switch (sd->sensor) { 34578c2ecf20Sopenharmony_ci case SENSOR_HV7131R: 34588c2ecf20Sopenharmony_ci GammaT = hv7131r_gamma; 34598c2ecf20Sopenharmony_ci MatrixT = hv7131r_matrix; 34608c2ecf20Sopenharmony_ci if (mode) 34618c2ecf20Sopenharmony_ci init = hv7131r_initQVGA_data; /* 320x240 */ 34628c2ecf20Sopenharmony_ci else 34638c2ecf20Sopenharmony_ci init = hv7131r_initVGA_data; /* 640x480 */ 34648c2ecf20Sopenharmony_ci break; 34658c2ecf20Sopenharmony_ci case SENSOR_OV7660: 34668c2ecf20Sopenharmony_ci GammaT = ov7660_gamma; 34678c2ecf20Sopenharmony_ci MatrixT = ov7660_matrix; 34688c2ecf20Sopenharmony_ci if (mode) 34698c2ecf20Sopenharmony_ci init = ov7660_initQVGA_data; /* 320x240 */ 34708c2ecf20Sopenharmony_ci else 34718c2ecf20Sopenharmony_ci init = ov7660_initVGA_data; /* 640x480 */ 34728c2ecf20Sopenharmony_ci break; 34738c2ecf20Sopenharmony_ci case SENSOR_MI0360: 34748c2ecf20Sopenharmony_ci GammaT = mi1320_gamma; 34758c2ecf20Sopenharmony_ci MatrixT = mi0360_matrix; 34768c2ecf20Sopenharmony_ci if (mode) 34778c2ecf20Sopenharmony_ci init = mi0360_initQVGA_JPG; /* 320x240 */ 34788c2ecf20Sopenharmony_ci else 34798c2ecf20Sopenharmony_ci init = mi0360_initVGA_JPG; /* 640x480 */ 34808c2ecf20Sopenharmony_ci break; 34818c2ecf20Sopenharmony_ci case SENSOR_MI1310_SOC: 34828c2ecf20Sopenharmony_ci GammaT = mi1320_gamma; 34838c2ecf20Sopenharmony_ci MatrixT = mi1320_matrix; 34848c2ecf20Sopenharmony_ci switch (mode) { 34858c2ecf20Sopenharmony_ci case 1: 34868c2ecf20Sopenharmony_ci init = mi1310_socinitQVGA_JPG; /* 320x240 */ 34878c2ecf20Sopenharmony_ci break; 34888c2ecf20Sopenharmony_ci case 0: 34898c2ecf20Sopenharmony_ci init = mi1310_socinitVGA_JPG; /* 640x480 */ 34908c2ecf20Sopenharmony_ci break; 34918c2ecf20Sopenharmony_ci default: 34928c2ecf20Sopenharmony_ci init = mi1310_soc_InitSXGA_JPG; /* 1280x1024 */ 34938c2ecf20Sopenharmony_ci break; 34948c2ecf20Sopenharmony_ci } 34958c2ecf20Sopenharmony_ci break; 34968c2ecf20Sopenharmony_ci case SENSOR_MI1320: 34978c2ecf20Sopenharmony_ci GammaT = mi1320_gamma; 34988c2ecf20Sopenharmony_ci MatrixT = mi1320_matrix; 34998c2ecf20Sopenharmony_ci if (mode) 35008c2ecf20Sopenharmony_ci init = mi1320_initQVGA_data; /* 320x240 */ 35018c2ecf20Sopenharmony_ci else 35028c2ecf20Sopenharmony_ci init = mi1320_initVGA_data; /* 640x480 */ 35038c2ecf20Sopenharmony_ci break; 35048c2ecf20Sopenharmony_ci case SENSOR_MI1320_SOC: 35058c2ecf20Sopenharmony_ci GammaT = mi1320_gamma; 35068c2ecf20Sopenharmony_ci MatrixT = mi1320_matrix; 35078c2ecf20Sopenharmony_ci init = mi1320_soc_init[mode]; 35088c2ecf20Sopenharmony_ci break; 35098c2ecf20Sopenharmony_ci case SENSOR_OV7670: 35108c2ecf20Sopenharmony_ci init = mode == 1 ? ov7670_InitVGA : ov7670_InitQVGA; 35118c2ecf20Sopenharmony_ci break; 35128c2ecf20Sopenharmony_ci case SENSOR_PO3130NC: 35138c2ecf20Sopenharmony_ci GammaT = po3130_gamma; 35148c2ecf20Sopenharmony_ci MatrixT = po3130_matrix; 35158c2ecf20Sopenharmony_ci if (mode) 35168c2ecf20Sopenharmony_ci init = po3130_initQVGA_data; /* 320x240 */ 35178c2ecf20Sopenharmony_ci else 35188c2ecf20Sopenharmony_ci init = po3130_initVGA_data; /* 640x480 */ 35198c2ecf20Sopenharmony_ci usb_exchange(gspca_dev, init); 35208c2ecf20Sopenharmony_ci init = po3130_rundata; 35218c2ecf20Sopenharmony_ci break; 35228c2ecf20Sopenharmony_ci case SENSOR_PO1200: 35238c2ecf20Sopenharmony_ci GammaT = po1200_gamma; 35248c2ecf20Sopenharmony_ci MatrixT = po1200_matrix; 35258c2ecf20Sopenharmony_ci init = po1200_initVGA_data; 35268c2ecf20Sopenharmony_ci break; 35278c2ecf20Sopenharmony_ci default: 35288c2ecf20Sopenharmony_ci/* case SENSOR_POxxxx: */ 35298c2ecf20Sopenharmony_ci usb_exchange(gspca_dev, poxxxx_init_common); 35308c2ecf20Sopenharmony_ci setgamma(gspca_dev); 35318c2ecf20Sopenharmony_ci usb_exchange(gspca_dev, poxxxx_init_start_3); 35328c2ecf20Sopenharmony_ci if (mode) 35338c2ecf20Sopenharmony_ci init = poxxxx_initQVGA; 35348c2ecf20Sopenharmony_ci else 35358c2ecf20Sopenharmony_ci init = poxxxx_initVGA; 35368c2ecf20Sopenharmony_ci usb_exchange(gspca_dev, init); 35378c2ecf20Sopenharmony_ci reg_r(gspca_dev, 0x8c, 0x0000, 3); 35388c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 35398c2ecf20Sopenharmony_ci gspca_dev->usb_buf[2] & 1 ? 0 : 1, 35408c2ecf20Sopenharmony_ci 0xb35c); 35418c2ecf20Sopenharmony_ci msleep(300); 35428c2ecf20Sopenharmony_ci/*fixme: i2c read 04 and 05*/ 35438c2ecf20Sopenharmony_ci init = poxxxx_init_end_1; 35448c2ecf20Sopenharmony_ci break; 35458c2ecf20Sopenharmony_ci } 35468c2ecf20Sopenharmony_ci usb_exchange(gspca_dev, init); 35478c2ecf20Sopenharmony_ci if (GammaT && MatrixT) { 35488c2ecf20Sopenharmony_ci put_tab_to_reg(gspca_dev, GammaT, 17, 0xb84a); 35498c2ecf20Sopenharmony_ci put_tab_to_reg(gspca_dev, GammaT, 17, 0xb85b); 35508c2ecf20Sopenharmony_ci put_tab_to_reg(gspca_dev, GammaT, 17, 0xb86c); 35518c2ecf20Sopenharmony_ci put_tab_to_reg(gspca_dev, MatrixT, 9, 0xb82c); 35528c2ecf20Sopenharmony_ci 35538c2ecf20Sopenharmony_ci switch (sd->sensor) { 35548c2ecf20Sopenharmony_ci case SENSOR_PO1200: 35558c2ecf20Sopenharmony_ci case SENSOR_HV7131R: 35568c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x89, 0x0400, 0x1415); 35578c2ecf20Sopenharmony_ci break; 35588c2ecf20Sopenharmony_ci case SENSOR_MI1310_SOC: 35598c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x89, 0x058c, 0x0000); 35608c2ecf20Sopenharmony_ci break; 35618c2ecf20Sopenharmony_ci } 35628c2ecf20Sopenharmony_ci msleep(100); 35638c2ecf20Sopenharmony_ci } 35648c2ecf20Sopenharmony_ci switch (sd->sensor) { 35658c2ecf20Sopenharmony_ci case SENSOR_OV7670: 35668c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x87, 0xffff, 0xffff); 35678c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x88, 0xff00, 0xf0f1); 35688c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 0x0000, 0xbfff); 35698c2ecf20Sopenharmony_ci break; 35708c2ecf20Sopenharmony_ci case SENSOR_POxxxx: 35718c2ecf20Sopenharmony_ci usb_exchange(gspca_dev, poxxxx_init_end_2); 35728c2ecf20Sopenharmony_ci setwb(gspca_dev); 35738c2ecf20Sopenharmony_ci msleep(80); /* led on */ 35748c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x89, 0xffff, 0xfdff); 35758c2ecf20Sopenharmony_ci break; 35768c2ecf20Sopenharmony_ci } 35778c2ecf20Sopenharmony_ci return gspca_dev->usb_err; 35788c2ecf20Sopenharmony_ci} 35798c2ecf20Sopenharmony_ci 35808c2ecf20Sopenharmony_cistatic void sd_stopN(struct gspca_dev *gspca_dev) 35818c2ecf20Sopenharmony_ci{ 35828c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 35838c2ecf20Sopenharmony_ci 35848c2ecf20Sopenharmony_ci switch (sd->sensor) { 35858c2ecf20Sopenharmony_ci case SENSOR_MI1310_SOC: 35868c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x89, 0x058c, 0x00ff); 35878c2ecf20Sopenharmony_ci break; 35888c2ecf20Sopenharmony_ci case SENSOR_POxxxx: 35898c2ecf20Sopenharmony_ci return; 35908c2ecf20Sopenharmony_ci default: 35918c2ecf20Sopenharmony_ci if (!(sd->flags & FL_SAMSUNG)) 35928c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x89, 0xffff, 0xffff); 35938c2ecf20Sopenharmony_ci break; 35948c2ecf20Sopenharmony_ci } 35958c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 0x01, 0xb301); 35968c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 0x09, 0xb003); 35978c2ecf20Sopenharmony_ci} 35988c2ecf20Sopenharmony_ci 35998c2ecf20Sopenharmony_ci/* called on streamoff with alt 0 and on disconnect */ 36008c2ecf20Sopenharmony_cistatic void sd_stop0(struct gspca_dev *gspca_dev) 36018c2ecf20Sopenharmony_ci{ 36028c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 36038c2ecf20Sopenharmony_ci 36048c2ecf20Sopenharmony_ci if (!gspca_dev->present) 36058c2ecf20Sopenharmony_ci return; 36068c2ecf20Sopenharmony_ci/*fixme: is this useful?*/ 36078c2ecf20Sopenharmony_ci if (sd->sensor == SENSOR_MI1310_SOC) 36088c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x89, 0x058c, 0x00ff); 36098c2ecf20Sopenharmony_ci else if (!(sd->flags & FL_SAMSUNG)) 36108c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0x89, 0xffff, 0xffff); 36118c2ecf20Sopenharmony_ci 36128c2ecf20Sopenharmony_ci if (sd->sensor == SENSOR_POxxxx) { 36138c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 0x26, 0xb300); 36148c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 0x04, 0xb300); 36158c2ecf20Sopenharmony_ci reg_w(gspca_dev, 0xa0, 0x00, 0xb300); 36168c2ecf20Sopenharmony_ci } 36178c2ecf20Sopenharmony_ci} 36188c2ecf20Sopenharmony_ci 36198c2ecf20Sopenharmony_cistatic void sd_pkt_scan(struct gspca_dev *gspca_dev, 36208c2ecf20Sopenharmony_ci u8 *data, /* isoc packet */ 36218c2ecf20Sopenharmony_ci int len) /* iso pkt length */ 36228c2ecf20Sopenharmony_ci{ 36238c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *) gspca_dev; 36248c2ecf20Sopenharmony_ci 36258c2ecf20Sopenharmony_ci if (data[0] == 0xff && data[1] == 0xd8) { 36268c2ecf20Sopenharmony_ci gspca_dbg(gspca_dev, D_PACK, 36278c2ecf20Sopenharmony_ci "vc032x header packet found len %d\n", len); 36288c2ecf20Sopenharmony_ci gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0); 36298c2ecf20Sopenharmony_ci data += sd->image_offset; 36308c2ecf20Sopenharmony_ci len -= sd->image_offset; 36318c2ecf20Sopenharmony_ci gspca_frame_add(gspca_dev, FIRST_PACKET, data, len); 36328c2ecf20Sopenharmony_ci return; 36338c2ecf20Sopenharmony_ci } 36348c2ecf20Sopenharmony_ci 36358c2ecf20Sopenharmony_ci /* The vc0321 sends some additional data after sending the complete 36368c2ecf20Sopenharmony_ci * frame, we ignore this. */ 36378c2ecf20Sopenharmony_ci if (sd->bridge == BRIDGE_VC0321) { 36388c2ecf20Sopenharmony_ci int size, l; 36398c2ecf20Sopenharmony_ci 36408c2ecf20Sopenharmony_ci l = gspca_dev->image_len; 36418c2ecf20Sopenharmony_ci size = gspca_dev->pixfmt.sizeimage; 36428c2ecf20Sopenharmony_ci if (len > size - l) 36438c2ecf20Sopenharmony_ci len = size - l; 36448c2ecf20Sopenharmony_ci } 36458c2ecf20Sopenharmony_ci gspca_frame_add(gspca_dev, INTER_PACKET, data, len); 36468c2ecf20Sopenharmony_ci} 36478c2ecf20Sopenharmony_ci 36488c2ecf20Sopenharmony_cistatic int sd_s_ctrl(struct v4l2_ctrl *ctrl) 36498c2ecf20Sopenharmony_ci{ 36508c2ecf20Sopenharmony_ci struct gspca_dev *gspca_dev = 36518c2ecf20Sopenharmony_ci container_of(ctrl->handler, struct gspca_dev, ctrl_handler); 36528c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *)gspca_dev; 36538c2ecf20Sopenharmony_ci 36548c2ecf20Sopenharmony_ci gspca_dev->usb_err = 0; 36558c2ecf20Sopenharmony_ci 36568c2ecf20Sopenharmony_ci if (!gspca_dev->streaming && ctrl->id != V4L2_CID_POWER_LINE_FREQUENCY) 36578c2ecf20Sopenharmony_ci return 0; 36588c2ecf20Sopenharmony_ci 36598c2ecf20Sopenharmony_ci switch (ctrl->id) { 36608c2ecf20Sopenharmony_ci case V4L2_CID_BRIGHTNESS: 36618c2ecf20Sopenharmony_ci setbrightness(gspca_dev, ctrl->val); 36628c2ecf20Sopenharmony_ci break; 36638c2ecf20Sopenharmony_ci case V4L2_CID_CONTRAST: 36648c2ecf20Sopenharmony_ci setcontrast(gspca_dev, ctrl->val); 36658c2ecf20Sopenharmony_ci break; 36668c2ecf20Sopenharmony_ci case V4L2_CID_SATURATION: 36678c2ecf20Sopenharmony_ci setcolors(gspca_dev, ctrl->val); 36688c2ecf20Sopenharmony_ci break; 36698c2ecf20Sopenharmony_ci case V4L2_CID_HFLIP: 36708c2ecf20Sopenharmony_ci sethvflip(gspca_dev, sd->hflip->val, sd->vflip->val); 36718c2ecf20Sopenharmony_ci break; 36728c2ecf20Sopenharmony_ci case V4L2_CID_SHARPNESS: 36738c2ecf20Sopenharmony_ci setsharpness(gspca_dev, ctrl->val); 36748c2ecf20Sopenharmony_ci break; 36758c2ecf20Sopenharmony_ci case V4L2_CID_AUTOGAIN: 36768c2ecf20Sopenharmony_ci setautogain(gspca_dev, ctrl->val); 36778c2ecf20Sopenharmony_ci break; 36788c2ecf20Sopenharmony_ci case V4L2_CID_GAIN: 36798c2ecf20Sopenharmony_ci setgain(gspca_dev, ctrl->val); 36808c2ecf20Sopenharmony_ci break; 36818c2ecf20Sopenharmony_ci case V4L2_CID_EXPOSURE: 36828c2ecf20Sopenharmony_ci setexposure(gspca_dev, ctrl->val); 36838c2ecf20Sopenharmony_ci break; 36848c2ecf20Sopenharmony_ci case V4L2_CID_BACKLIGHT_COMPENSATION: 36858c2ecf20Sopenharmony_ci setbacklight(gspca_dev, ctrl->val); 36868c2ecf20Sopenharmony_ci break; 36878c2ecf20Sopenharmony_ci case V4L2_CID_POWER_LINE_FREQUENCY: 36888c2ecf20Sopenharmony_ci setlightfreq(gspca_dev, ctrl->val); 36898c2ecf20Sopenharmony_ci break; 36908c2ecf20Sopenharmony_ci } 36918c2ecf20Sopenharmony_ci return gspca_dev->usb_err; 36928c2ecf20Sopenharmony_ci} 36938c2ecf20Sopenharmony_ci 36948c2ecf20Sopenharmony_cistatic const struct v4l2_ctrl_ops sd_ctrl_ops = { 36958c2ecf20Sopenharmony_ci .s_ctrl = sd_s_ctrl, 36968c2ecf20Sopenharmony_ci}; 36978c2ecf20Sopenharmony_ci 36988c2ecf20Sopenharmony_cistatic int sd_init_controls(struct gspca_dev *gspca_dev) 36998c2ecf20Sopenharmony_ci{ 37008c2ecf20Sopenharmony_ci struct sd *sd = (struct sd *)gspca_dev; 37018c2ecf20Sopenharmony_ci struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; 37028c2ecf20Sopenharmony_ci bool has_brightness = false; 37038c2ecf20Sopenharmony_ci bool has_contrast = false; 37048c2ecf20Sopenharmony_ci bool has_sat = false; 37058c2ecf20Sopenharmony_ci bool has_hvflip = false; 37068c2ecf20Sopenharmony_ci bool has_freq = false; 37078c2ecf20Sopenharmony_ci bool has_backlight = false; 37088c2ecf20Sopenharmony_ci bool has_exposure = false; 37098c2ecf20Sopenharmony_ci bool has_autogain = false; 37108c2ecf20Sopenharmony_ci bool has_gain = false; 37118c2ecf20Sopenharmony_ci bool has_sharpness = false; 37128c2ecf20Sopenharmony_ci 37138c2ecf20Sopenharmony_ci switch (sd->sensor) { 37148c2ecf20Sopenharmony_ci case SENSOR_HV7131R: 37158c2ecf20Sopenharmony_ci case SENSOR_MI0360: 37168c2ecf20Sopenharmony_ci case SENSOR_PO3130NC: 37178c2ecf20Sopenharmony_ci break; 37188c2ecf20Sopenharmony_ci case SENSOR_MI1310_SOC: 37198c2ecf20Sopenharmony_ci case SENSOR_MI1320: 37208c2ecf20Sopenharmony_ci case SENSOR_MI1320_SOC: 37218c2ecf20Sopenharmony_ci case SENSOR_OV7660: 37228c2ecf20Sopenharmony_ci has_hvflip = true; 37238c2ecf20Sopenharmony_ci break; 37248c2ecf20Sopenharmony_ci case SENSOR_OV7670: 37258c2ecf20Sopenharmony_ci has_hvflip = has_freq = true; 37268c2ecf20Sopenharmony_ci break; 37278c2ecf20Sopenharmony_ci case SENSOR_PO1200: 37288c2ecf20Sopenharmony_ci has_hvflip = has_sharpness = true; 37298c2ecf20Sopenharmony_ci break; 37308c2ecf20Sopenharmony_ci case SENSOR_POxxxx: 37318c2ecf20Sopenharmony_ci has_brightness = has_contrast = has_sat = has_backlight = 37328c2ecf20Sopenharmony_ci has_exposure = has_autogain = has_gain = 37338c2ecf20Sopenharmony_ci has_sharpness = true; 37348c2ecf20Sopenharmony_ci break; 37358c2ecf20Sopenharmony_ci } 37368c2ecf20Sopenharmony_ci 37378c2ecf20Sopenharmony_ci gspca_dev->vdev.ctrl_handler = hdl; 37388c2ecf20Sopenharmony_ci v4l2_ctrl_handler_init(hdl, 8); 37398c2ecf20Sopenharmony_ci if (has_brightness) 37408c2ecf20Sopenharmony_ci v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, 37418c2ecf20Sopenharmony_ci V4L2_CID_BRIGHTNESS, 0, 255, 1, 128); 37428c2ecf20Sopenharmony_ci if (has_contrast) 37438c2ecf20Sopenharmony_ci v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, 37448c2ecf20Sopenharmony_ci V4L2_CID_CONTRAST, 0, 255, 1, 127); 37458c2ecf20Sopenharmony_ci if (has_sat) 37468c2ecf20Sopenharmony_ci v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, 37478c2ecf20Sopenharmony_ci V4L2_CID_SATURATION, 1, 127, 1, 63); 37488c2ecf20Sopenharmony_ci if (has_hvflip) { 37498c2ecf20Sopenharmony_ci sd->hflip = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, 37508c2ecf20Sopenharmony_ci V4L2_CID_HFLIP, 0, 1, 1, 0); 37518c2ecf20Sopenharmony_ci sd->vflip = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, 37528c2ecf20Sopenharmony_ci V4L2_CID_VFLIP, 0, 1, 1, 0); 37538c2ecf20Sopenharmony_ci } 37548c2ecf20Sopenharmony_ci if (has_sharpness) 37558c2ecf20Sopenharmony_ci v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, 37568c2ecf20Sopenharmony_ci V4L2_CID_SHARPNESS, -1, 2, 1, -1); 37578c2ecf20Sopenharmony_ci if (has_freq) 37588c2ecf20Sopenharmony_ci v4l2_ctrl_new_std_menu(hdl, &sd_ctrl_ops, 37598c2ecf20Sopenharmony_ci V4L2_CID_POWER_LINE_FREQUENCY, 37608c2ecf20Sopenharmony_ci V4L2_CID_POWER_LINE_FREQUENCY_60HZ, 0, 37618c2ecf20Sopenharmony_ci V4L2_CID_POWER_LINE_FREQUENCY_50HZ); 37628c2ecf20Sopenharmony_ci if (has_autogain) 37638c2ecf20Sopenharmony_ci v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, 37648c2ecf20Sopenharmony_ci V4L2_CID_AUTOGAIN, 0, 1, 1, 1); 37658c2ecf20Sopenharmony_ci if (has_gain) 37668c2ecf20Sopenharmony_ci v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, 37678c2ecf20Sopenharmony_ci V4L2_CID_GAIN, 0, 78, 1, 0); 37688c2ecf20Sopenharmony_ci if (has_exposure) 37698c2ecf20Sopenharmony_ci v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, 37708c2ecf20Sopenharmony_ci V4L2_CID_EXPOSURE, 0, 4095, 1, 450); 37718c2ecf20Sopenharmony_ci if (has_backlight) 37728c2ecf20Sopenharmony_ci v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, 37738c2ecf20Sopenharmony_ci V4L2_CID_BACKLIGHT_COMPENSATION, 0, 15, 1, 15); 37748c2ecf20Sopenharmony_ci 37758c2ecf20Sopenharmony_ci if (hdl->error) { 37768c2ecf20Sopenharmony_ci pr_err("Could not initialize controls\n"); 37778c2ecf20Sopenharmony_ci return hdl->error; 37788c2ecf20Sopenharmony_ci } 37798c2ecf20Sopenharmony_ci if (sd->hflip) 37808c2ecf20Sopenharmony_ci v4l2_ctrl_cluster(2, &sd->hflip); 37818c2ecf20Sopenharmony_ci return 0; 37828c2ecf20Sopenharmony_ci} 37838c2ecf20Sopenharmony_ci 37848c2ecf20Sopenharmony_ci/* sub-driver description */ 37858c2ecf20Sopenharmony_cistatic const struct sd_desc sd_desc = { 37868c2ecf20Sopenharmony_ci .name = MODULE_NAME, 37878c2ecf20Sopenharmony_ci .init_controls = sd_init_controls, 37888c2ecf20Sopenharmony_ci .config = sd_config, 37898c2ecf20Sopenharmony_ci .init = sd_init, 37908c2ecf20Sopenharmony_ci .start = sd_start, 37918c2ecf20Sopenharmony_ci .stopN = sd_stopN, 37928c2ecf20Sopenharmony_ci .stop0 = sd_stop0, 37938c2ecf20Sopenharmony_ci .pkt_scan = sd_pkt_scan, 37948c2ecf20Sopenharmony_ci}; 37958c2ecf20Sopenharmony_ci 37968c2ecf20Sopenharmony_ci/* -- module initialisation -- */ 37978c2ecf20Sopenharmony_ci#define BF(bridge, flags) \ 37988c2ecf20Sopenharmony_ci .driver_info = (BRIDGE_ ## bridge << 8) \ 37998c2ecf20Sopenharmony_ci | (flags) 38008c2ecf20Sopenharmony_cistatic const struct usb_device_id device_table[] = { 38018c2ecf20Sopenharmony_ci {USB_DEVICE(0x041e, 0x405b), BF(VC0323, FL_VFLIP)}, 38028c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x0892), BF(VC0321, 0)}, 38038c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x0896), BF(VC0321, 0)}, 38048c2ecf20Sopenharmony_ci {USB_DEVICE(0x046d, 0x0897), BF(VC0321, 0)}, 38058c2ecf20Sopenharmony_ci {USB_DEVICE(0x0ac8, 0x0321), BF(VC0321, 0)}, 38068c2ecf20Sopenharmony_ci {USB_DEVICE(0x0ac8, 0x0323), BF(VC0323, 0)}, 38078c2ecf20Sopenharmony_ci {USB_DEVICE(0x0ac8, 0x0328), BF(VC0321, 0)}, 38088c2ecf20Sopenharmony_ci {USB_DEVICE(0x0ac8, 0xc001), BF(VC0321, 0)}, 38098c2ecf20Sopenharmony_ci {USB_DEVICE(0x0ac8, 0xc002), BF(VC0321, 0)}, 38108c2ecf20Sopenharmony_ci {USB_DEVICE(0x0ac8, 0xc301), BF(VC0323, FL_SAMSUNG)}, 38118c2ecf20Sopenharmony_ci {USB_DEVICE(0x15b8, 0x6001), BF(VC0323, 0)}, 38128c2ecf20Sopenharmony_ci {USB_DEVICE(0x15b8, 0x6002), BF(VC0323, 0)}, 38138c2ecf20Sopenharmony_ci {USB_DEVICE(0x17ef, 0x4802), BF(VC0323, 0)}, 38148c2ecf20Sopenharmony_ci {} 38158c2ecf20Sopenharmony_ci}; 38168c2ecf20Sopenharmony_ciMODULE_DEVICE_TABLE(usb, device_table); 38178c2ecf20Sopenharmony_ci 38188c2ecf20Sopenharmony_ci/* -- device connect -- */ 38198c2ecf20Sopenharmony_cistatic int sd_probe(struct usb_interface *intf, 38208c2ecf20Sopenharmony_ci const struct usb_device_id *id) 38218c2ecf20Sopenharmony_ci{ 38228c2ecf20Sopenharmony_ci return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd), 38238c2ecf20Sopenharmony_ci THIS_MODULE); 38248c2ecf20Sopenharmony_ci} 38258c2ecf20Sopenharmony_ci 38268c2ecf20Sopenharmony_cistatic struct usb_driver sd_driver = { 38278c2ecf20Sopenharmony_ci .name = MODULE_NAME, 38288c2ecf20Sopenharmony_ci .id_table = device_table, 38298c2ecf20Sopenharmony_ci .probe = sd_probe, 38308c2ecf20Sopenharmony_ci .disconnect = gspca_disconnect, 38318c2ecf20Sopenharmony_ci#ifdef CONFIG_PM 38328c2ecf20Sopenharmony_ci .suspend = gspca_suspend, 38338c2ecf20Sopenharmony_ci .resume = gspca_resume, 38348c2ecf20Sopenharmony_ci .reset_resume = gspca_resume, 38358c2ecf20Sopenharmony_ci#endif 38368c2ecf20Sopenharmony_ci}; 38378c2ecf20Sopenharmony_ci 38388c2ecf20Sopenharmony_cimodule_usb_driver(sd_driver); 3839