brintos

brintos / linux-shallow public Read only

0
0
Text · 110.5 KiB · e7a534b Raw
3839 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * Z-star vc0321 library4 *5 * Copyright (C) 2009-2010 Jean-François Moine <http://moinejf.free.fr>6 * Copyright (C) 2006 Koninski Artur takeshi87@o2.pl7 * Copyright (C) 2006 Michel Xhaard8 */9 10#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt11 12#define MODULE_NAME "vc032x"13 14#include "gspca.h"15 16MODULE_AUTHOR("Jean-François Moine <http://moinejf.free.fr>");17MODULE_DESCRIPTION("GSPCA/VC032X USB Camera Driver");18MODULE_LICENSE("GPL");19 20/* specific webcam descriptor */21struct sd {22	struct gspca_dev gspca_dev;	/* !! must be the first item */23	struct { /* hvflip cluster */24		struct v4l2_ctrl *hflip;25		struct v4l2_ctrl *vflip;26	};27 28	u8 image_offset;29 30	u8 bridge;31	u8 sensor;32	u8 flags;33#define FL_SAMSUNG 0x01		/* SamsungQ1 (2 sensors) */34#define FL_HFLIP 0x02		/* mirrored by default */35#define FL_VFLIP 0x04		/* vertical flipped by default */36};37enum bridges {38	BRIDGE_VC0321,39	BRIDGE_VC0323,40};41enum sensors {42	SENSOR_HV7131R,43	SENSOR_MI0360,44	SENSOR_MI1310_SOC,45	SENSOR_MI1320,46	SENSOR_MI1320_SOC,47	SENSOR_OV7660,48	SENSOR_OV7670,49	SENSOR_PO1200,50	SENSOR_PO3130NC,51	SENSOR_POxxxx,52	NSENSORS53};54 55 56static const struct v4l2_pix_format vc0321_mode[] = {57	{320, 240, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE,58		.bytesperline = 320 * 2,59		.sizeimage = 320 * 240 * 2,60		.colorspace = V4L2_COLORSPACE_SRGB,61		.priv = 1},62	{640, 480, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE,63		.bytesperline = 640 * 2,64		.sizeimage = 640 * 480 * 2,65		.colorspace = V4L2_COLORSPACE_SRGB,66		.priv = 0},67};68static const struct v4l2_pix_format vc0323_mode[] = {69	{320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,70		.bytesperline = 320,71		.sizeimage = 320 * 240 * 3 / 8 + 590,72		.colorspace = V4L2_COLORSPACE_JPEG,73		.priv = 1},74	{640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,75		.bytesperline = 640,76		.sizeimage = 640 * 480 * 3 / 8 + 590,77		.colorspace = V4L2_COLORSPACE_JPEG,78		.priv = 0},79	{1280, 960, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, /* mi1310_soc only */80		.bytesperline = 1280,81		.sizeimage = 1280 * 960 * 3 / 8 + 590,82		.colorspace = V4L2_COLORSPACE_JPEG,83		.priv = 2},84};85static const struct v4l2_pix_format bi_mode[] = {86	{320, 240, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE,87		.bytesperline = 320 * 2,88		.sizeimage = 320 * 240 * 2,89		.colorspace = V4L2_COLORSPACE_SRGB,90		.priv = 2},91	{640, 480, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE,92		.bytesperline = 640 * 2,93		.sizeimage = 640 * 480 * 2,94		.colorspace = V4L2_COLORSPACE_SRGB,95		.priv = 1},96	{1280, 1024, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE,97		.bytesperline = 1280 * 2,98		.sizeimage = 1280 * 1024 * 2,99		.colorspace = V4L2_COLORSPACE_SRGB,100		.priv = 0},101};102static const struct v4l2_pix_format svga_mode[] = {103	{800, 600, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,104		.bytesperline = 800,105		.sizeimage = 800 * 600 * 1 / 4 + 590,106		.colorspace = V4L2_COLORSPACE_JPEG,107		.priv = 0},108};109 110/* OV7660/7670 registers */111#define OV7660_REG_MVFP 0x1e112#define OV7660_MVFP_MIRROR	0x20113#define OV7660_MVFP_VFLIP	0x10114 115static const u8 mi0360_matrix[9] = {116	0x50, 0xf8, 0xf8, 0xf5, 0x50, 0xfb, 0xff, 0xf1, 0x50117};118 119static const u8 mi0360_initVGA_JPG[][4] = {120	{0xb0, 0x03, 0x19, 0xcc},121	{0xb0, 0x04, 0x02, 0xcc},122	{0xb3, 0x00, 0x24, 0xcc},123	{0xb3, 0x00, 0x25, 0xcc},124	{0xb3, 0x08, 0x01, 0xcc},125	{0xb3, 0x09, 0x0c, 0xcc},126	{0xb3, 0x05, 0x01, 0xcc},127	{0xb3, 0x06, 0x03, 0xcc},128	{0xb3, 0x03, 0x0a, 0xcc},129	{0xb3, 0x20, 0x00, 0xcc},130	{0xb3, 0x21, 0x00, 0xcc},131	{0xb3, 0x22, 0x01, 0xcc},132	{0xb3, 0x23, 0xe0, 0xcc},133	{0xb3, 0x04, 0x05, 0xcc},134	{0xb3, 0x14, 0x00, 0xcc},135	{0xb3, 0x15, 0x00, 0xcc},136	{0xb3, 0x16, 0x02, 0xcc},137	{0xb3, 0x17, 0x7f, 0xcc},138	{0xb3, 0x35, 0xdd, 0xcc},	/* i2c add: 5d */139	{0xb3, 0x34, 0x02, 0xcc},140	{0xb3, 0x00, 0x25, 0xcc},141	{0xbc, 0x00, 0x71, 0xcc},142	{0xb8, 0x00, 0x13, 0xcc},143	{0xb8, 0x27, 0x20, 0xcc},144	{0xb8, 0x2c, 0x50, 0xcc},145	{0xb8, 0x2d, 0xf8, 0xcc},146	{0xb8, 0x2e, 0xf8, 0xcc},147	{0xb8, 0x2f, 0xf8, 0xcc},148	{0xb8, 0x30, 0x50, 0xcc},149	{0xb8, 0x31, 0xf8, 0xcc},150	{0xb8, 0x32, 0xf8, 0xcc},151	{0xb8, 0x33, 0xf8, 0xcc},152	{0xb8, 0x34, 0x50, 0xcc},153	{0xb8, 0x35, 0x00, 0xcc},154	{0xb8, 0x36, 0x00, 0xcc},155	{0xb8, 0x37, 0x00, 0xcc},156	{0xb8, 0x01, 0x79, 0xcc},157	{0xb8, 0x08, 0xe0, 0xcc},158	{0xb3, 0x01, 0x41, 0xcc},159	{0xb8, 0x01, 0x79, 0xcc},160	{0xb8, 0x14, 0x18, 0xcc},161	{0xb8, 0xb2, 0x0a, 0xcc},162	{0xb8, 0xb4, 0x0a, 0xcc},163	{0xb8, 0xb5, 0x0a, 0xcc},164	{0xb8, 0xfe, 0x00, 0xcc},165	{0xb8, 0xff, 0x28, 0xcc},166	{0xb9, 0x00, 0x28, 0xcc},167	{0xb9, 0x01, 0x28, 0xcc},168	{0xb9, 0x02, 0x28, 0xcc},169	{0xb9, 0x03, 0x00, 0xcc},170	{0xb9, 0x04, 0x00, 0xcc},171	{0xb9, 0x05, 0x3c, 0xcc},172	{0xb9, 0x06, 0x3c, 0xcc},173	{0xb9, 0x07, 0x3c, 0xcc},174	{0xb9, 0x08, 0x3c, 0xcc},175	{0xb8, 0x8e, 0x00, 0xcc},176	{0xb8, 0x8f, 0xff, 0xcc},177	{0xb8, 0x81, 0x09, 0xcc},178	{0x31, 0x00, 0x00, 0xbb},179	{0x09, 0x01, 0xc7, 0xbb},180	{0x34, 0x01, 0x00, 0xbb},181	{0x2b, 0x00, 0x28, 0xbb},182	{0x2c, 0x00, 0x30, 0xbb},183	{0x2d, 0x00, 0x30, 0xbb},184	{0x2e, 0x00, 0x28, 0xbb},185	{0x62, 0x04, 0x11, 0xbb},186	{0x03, 0x01, 0xe0, 0xbb},187	{0x2c, 0x00, 0x2c, 0xbb},188	{0x20, 0xd0, 0x00, 0xbb},189	{0x01, 0x00, 0x08, 0xbb},190	{0x06, 0x00, 0x10, 0xbb},191	{0x05, 0x00, 0x20, 0xbb},192	{0x20, 0x00, 0x00, 0xbb},193	{0xb6, 0x00, 0x00, 0xcc},194	{0xb6, 0x03, 0x02, 0xcc},195	{0xb6, 0x02, 0x80, 0xcc},196	{0xb6, 0x05, 0x01, 0xcc},197	{0xb6, 0x04, 0xe0, 0xcc},198	{0xb6, 0x12, 0x78, 0xcc},199	{0xb6, 0x18, 0x02, 0xcc},200	{0xb6, 0x17, 0x58, 0xcc},201	{0xb6, 0x16, 0x00, 0xcc},202	{0xb6, 0x22, 0x12, 0xcc},203	{0xb6, 0x23, 0x0b, 0xcc},204	{0xb3, 0x02, 0x02, 0xcc},205	{0xbf, 0xc0, 0x39, 0xcc},206	{0xbf, 0xc1, 0x04, 0xcc},207	{0xbf, 0xcc, 0x10, 0xcc},208	{0xb9, 0x12, 0x00, 0xcc},209	{0xb9, 0x13, 0x0a, 0xcc},210	{0xb9, 0x14, 0x0a, 0xcc},211	{0xb9, 0x15, 0x0a, 0xcc},212	{0xb9, 0x16, 0x0a, 0xcc},213	{0xb9, 0x18, 0x00, 0xcc},214	{0xb9, 0x19, 0x0f, 0xcc},215	{0xb9, 0x1a, 0x0f, 0xcc},216	{0xb9, 0x1b, 0x0f, 0xcc},217	{0xb9, 0x1c, 0x0f, 0xcc},218	{0xb8, 0x8e, 0x00, 0xcc},219	{0xb8, 0x8f, 0xff, 0xcc},220	{0xb6, 0x12, 0xf8, 0xcc},221	{0xb8, 0x0c, 0x20, 0xcc},222	{0xb8, 0x0d, 0x70, 0xcc},223	{0xb6, 0x13, 0x13, 0xcc},224	{0x35, 0x00, 0x60, 0xbb},225	{0xb3, 0x5c, 0x01, 0xcc},226	{}227};228static const u8 mi0360_initQVGA_JPG[][4] = {229	{0xb0, 0x03, 0x19, 0xcc},230	{0xb0, 0x04, 0x02, 0xcc},231	{0xb3, 0x00, 0x24, 0xcc},232	{0xb3, 0x00, 0x25, 0xcc},233	{0xb3, 0x08, 0x01, 0xcc},234	{0xb3, 0x09, 0x0c, 0xcc},235	{0xb3, 0x05, 0x01, 0xcc},236	{0xb3, 0x06, 0x03, 0xcc},237	{0xb3, 0x03, 0x0a, 0xcc},238	{0xb3, 0x20, 0x00, 0xcc},239	{0xb3, 0x21, 0x00, 0xcc},240	{0xb3, 0x22, 0x01, 0xcc},241	{0xb3, 0x23, 0xe0, 0xcc},242	{0xb3, 0x04, 0x05, 0xcc},243	{0xb3, 0x14, 0x00, 0xcc},244	{0xb3, 0x15, 0x00, 0xcc},245	{0xb3, 0x16, 0x02, 0xcc},246	{0xb3, 0x17, 0x7f, 0xcc},247	{0xb3, 0x35, 0xdd, 0xcc},248	{0xb3, 0x34, 0x02, 0xcc},249	{0xb3, 0x00, 0x25, 0xcc},250	{0xbc, 0x00, 0xd1, 0xcc},251	{0xb8, 0x00, 0x13, 0xcc},252	{0xb8, 0x27, 0x20, 0xcc},253	{0xb8, 0x2c, 0x50, 0xcc},254	{0xb8, 0x2d, 0xf8, 0xcc},255	{0xb8, 0x2e, 0xf8, 0xcc},256	{0xb8, 0x2f, 0xf8, 0xcc},257	{0xb8, 0x30, 0x50, 0xcc},258	{0xb8, 0x31, 0xf8, 0xcc},259	{0xb8, 0x32, 0xf8, 0xcc},260	{0xb8, 0x33, 0xf8, 0xcc},261	{0xb8, 0x34, 0x50, 0xcc},262	{0xb8, 0x35, 0x00, 0xcc},263	{0xb8, 0x36, 0x00, 0xcc},264	{0xb8, 0x37, 0x00, 0xcc},265	{0xb8, 0x01, 0x79, 0xcc},266	{0xb8, 0x08, 0xe0, 0xcc},267	{0xb3, 0x01, 0x41, 0xcc},268	{0xb8, 0x01, 0x79, 0xcc},269	{0xb8, 0x14, 0x18, 0xcc},270	{0xb8, 0xb2, 0x0a, 0xcc},271	{0xb8, 0xb4, 0x0a, 0xcc},272	{0xb8, 0xb5, 0x0a, 0xcc},273	{0xb8, 0xfe, 0x00, 0xcc},274	{0xb8, 0xff, 0x28, 0xcc},275	{0xb9, 0x00, 0x28, 0xcc},276	{0xb9, 0x01, 0x28, 0xcc},277	{0xb9, 0x02, 0x28, 0xcc},278	{0xb9, 0x03, 0x00, 0xcc},279	{0xb9, 0x04, 0x00, 0xcc},280	{0xb9, 0x05, 0x3c, 0xcc},281	{0xb9, 0x06, 0x3c, 0xcc},282	{0xb9, 0x07, 0x3c, 0xcc},283	{0xb9, 0x08, 0x3c, 0xcc},284	{0xb8, 0x8e, 0x00, 0xcc},285	{0xb8, 0x8f, 0xff, 0xcc},286	{0xb8, 0x81, 0x09, 0xcc},287	{0x31, 0x00, 0x00, 0xbb},288	{0x09, 0x01, 0xc7, 0xbb},289	{0x34, 0x01, 0x00, 0xbb},290	{0x2b, 0x00, 0x28, 0xbb},291	{0x2c, 0x00, 0x30, 0xbb},292	{0x2d, 0x00, 0x30, 0xbb},293	{0x2e, 0x00, 0x28, 0xbb},294	{0x62, 0x04, 0x11, 0xbb},295	{0x03, 0x01, 0xe0, 0xbb},296	{0x2c, 0x00, 0x2c, 0xbb},297	{0x20, 0xd0, 0x00, 0xbb},298	{0x01, 0x00, 0x08, 0xbb},299	{0x06, 0x00, 0x10, 0xbb},300	{0x05, 0x00, 0x20, 0xbb},301	{0x20, 0x00, 0x00, 0xbb},302	{0xb6, 0x00, 0x00, 0xcc},303	{0xb6, 0x03, 0x01, 0xcc},304	{0xb6, 0x02, 0x40, 0xcc},305	{0xb6, 0x05, 0x00, 0xcc},306	{0xb6, 0x04, 0xf0, 0xcc},307	{0xb6, 0x12, 0x78, 0xcc},308	{0xb6, 0x18, 0x00, 0xcc},309	{0xb6, 0x17, 0x96, 0xcc},310	{0xb6, 0x16, 0x00, 0xcc},311	{0xb6, 0x22, 0x12, 0xcc},312	{0xb6, 0x23, 0x0b, 0xcc},313	{0xb3, 0x02, 0x02, 0xcc},314	{0xbf, 0xc0, 0x39, 0xcc},315	{0xbf, 0xc1, 0x04, 0xcc},316	{0xbf, 0xcc, 0x10, 0xcc},317	{0xb9, 0x12, 0x00, 0xcc},318	{0xb9, 0x13, 0x0a, 0xcc},319	{0xb9, 0x14, 0x0a, 0xcc},320	{0xb9, 0x15, 0x0a, 0xcc},321	{0xb9, 0x16, 0x0a, 0xcc},322	{0xb9, 0x18, 0x00, 0xcc},323	{0xb9, 0x19, 0x0f, 0xcc},324	{0xb9, 0x1a, 0x0f, 0xcc},325	{0xb9, 0x1b, 0x0f, 0xcc},326	{0xb9, 0x1c, 0x0f, 0xcc},327	{0xb8, 0x8e, 0x00, 0xcc},328	{0xb8, 0x8f, 0xff, 0xcc},329	{0xb6, 0x12, 0xf8, 0xcc},330	{0xb6, 0x13, 0x13, 0xcc},331	{0xbc, 0x02, 0x18, 0xcc},332	{0xbc, 0x03, 0x50, 0xcc},333	{0xbc, 0x04, 0x18, 0xcc},334	{0xbc, 0x05, 0x00, 0xcc},335	{0xbc, 0x06, 0x00, 0xcc},336	{0xbc, 0x08, 0x30, 0xcc},337	{0xbc, 0x09, 0x40, 0xcc},338	{0xbc, 0x0a, 0x10, 0xcc},339	{0xb8, 0x0c, 0x20, 0xcc},340	{0xb8, 0x0d, 0x70, 0xcc},341	{0xbc, 0x0b, 0x00, 0xcc},342	{0xbc, 0x0c, 0x00, 0xcc},343	{0x35, 0x00, 0xef, 0xbb},344	{0xb3, 0x5c, 0x01, 0xcc},345	{}346};347 348static const u8 mi1310_socinitVGA_JPG[][4] = {349	{0xb0, 0x03, 0x19, 0xcc},350	{0xb0, 0x04, 0x02, 0xcc},351	{0xb3, 0x00, 0x64, 0xcc},352	{0xb3, 0x00, 0x65, 0xcc},353	{0xb3, 0x05, 0x00, 0xcc},354	{0xb3, 0x06, 0x00, 0xcc},355	{0xb3, 0x08, 0x01, 0xcc},356	{0xb3, 0x09, 0x0c, 0xcc},357	{0xb3, 0x34, 0x02, 0xcc},358	{0xb3, 0x35, 0xdd, 0xcc},	/* i2c add: 5d */359	{0xb3, 0x02, 0x00, 0xcc},360	{0xb3, 0x03, 0x0a, 0xcc},361	{0xb3, 0x04, 0x05, 0xcc},362	{0xb3, 0x20, 0x00, 0xcc},363	{0xb3, 0x21, 0x00, 0xcc},364	{0xb3, 0x22, 0x03, 0xcc},365	{0xb3, 0x23, 0xc0, 0xcc},366	{0xb3, 0x14, 0x00, 0xcc},367	{0xb3, 0x15, 0x00, 0xcc},368	{0xb3, 0x16, 0x04, 0xcc},369	{0xb3, 0x17, 0xff, 0xcc},370	{0xb3, 0x00, 0x65, 0xcc},371	{0xb8, 0x00, 0x00, 0xcc},372	{0xbc, 0x00, 0xd0, 0xcc},373	{0xbc, 0x01, 0x01, 0xcc},374	{0xf0, 0x00, 0x02, 0xbb},375	{0xc8, 0x9f, 0x0b, 0xbb},376	{0x5b, 0x00, 0x01, 0xbb},377	{0x2f, 0xde, 0x20, 0xbb},378	{0xf0, 0x00, 0x00, 0xbb},379	{0x20, 0x03, 0x02, 0xbb},	/* h/v flip */380	{0xf0, 0x00, 0x01, 0xbb},381	{0x05, 0x00, 0x07, 0xbb},382	{0x34, 0x00, 0x00, 0xbb},383	{0x35, 0xff, 0x00, 0xbb},384	{0xdc, 0x07, 0x02, 0xbb},385	{0xdd, 0x3c, 0x18, 0xbb},386	{0xde, 0x92, 0x6d, 0xbb},387	{0xdf, 0xcd, 0xb1, 0xbb},388	{0xe0, 0xff, 0xe7, 0xbb},389	{0x06, 0xf0, 0x0d, 0xbb},390	{0x06, 0x70, 0x0e, 0xbb},391	{0x4c, 0x00, 0x01, 0xbb},392	{0x4d, 0x00, 0x01, 0xbb},393	{0xf0, 0x00, 0x02, 0xbb},394	{0x2e, 0x0c, 0x55, 0xbb},395	{0x21, 0xb6, 0x6e, 0xbb},396	{0x36, 0x30, 0x10, 0xbb},397	{0x37, 0x00, 0xc1, 0xbb},398	{0xf0, 0x00, 0x00, 0xbb},399	{0x07, 0x00, 0x84, 0xbb},400	{0x08, 0x02, 0x4a, 0xbb},401	{0x05, 0x01, 0x10, 0xbb},402	{0x06, 0x00, 0x39, 0xbb},403	{0xf0, 0x00, 0x02, 0xbb},404	{0x58, 0x02, 0x67, 0xbb},405	{0x57, 0x02, 0x00, 0xbb},406	{0x5a, 0x02, 0x67, 0xbb},407	{0x59, 0x02, 0x00, 0xbb},408	{0x5c, 0x12, 0x0d, 0xbb},409	{0x5d, 0x16, 0x11, 0xbb},410	{0x39, 0x06, 0x18, 0xbb},411	{0x3a, 0x06, 0x18, 0xbb},412	{0x3b, 0x06, 0x18, 0xbb},413	{0x3c, 0x06, 0x18, 0xbb},414	{0x64, 0x7b, 0x5b, 0xbb},415	{0xf0, 0x00, 0x02, 0xbb},416	{0x36, 0x30, 0x10, 0xbb},417	{0x37, 0x00, 0xc0, 0xbb},418	{0xbc, 0x0e, 0x00, 0xcc},419	{0xbc, 0x0f, 0x05, 0xcc},420	{0xbc, 0x10, 0xc0, 0xcc},421	{0xbc, 0x11, 0x03, 0xcc},422	{0xb6, 0x00, 0x00, 0xcc},423	{0xb6, 0x03, 0x02, 0xcc},424	{0xb6, 0x02, 0x80, 0xcc},425	{0xb6, 0x05, 0x01, 0xcc},426	{0xb6, 0x04, 0xe0, 0xcc},427	{0xb6, 0x12, 0xf8, 0xcc},428	{0xb6, 0x13, 0x25, 0xcc},429	{0xb6, 0x18, 0x02, 0xcc},430	{0xb6, 0x17, 0x58, 0xcc},431	{0xb6, 0x16, 0x00, 0xcc},432	{0xb6, 0x22, 0x12, 0xcc},433	{0xb6, 0x23, 0x0b, 0xcc},434	{0xbf, 0xc0, 0x39, 0xcc},435	{0xbf, 0xc1, 0x04, 0xcc},436	{0xbf, 0xcc, 0x00, 0xcc},437	{0xbc, 0x02, 0x18, 0xcc},438	{0xbc, 0x03, 0x50, 0xcc},439	{0xbc, 0x04, 0x18, 0xcc},440	{0xbc, 0x05, 0x00, 0xcc},441	{0xbc, 0x06, 0x00, 0xcc},442	{0xbc, 0x08, 0x30, 0xcc},443	{0xbc, 0x09, 0x40, 0xcc},444	{0xbc, 0x0a, 0x10, 0xcc},445	{0xbc, 0x0b, 0x00, 0xcc},446	{0xbc, 0x0c, 0x00, 0xcc},447	{0xb3, 0x5c, 0x01, 0xcc},448	{0xf0, 0x00, 0x01, 0xbb},449	{0x80, 0x00, 0x03, 0xbb},450	{0x81, 0xc7, 0x14, 0xbb},451	{0x82, 0xeb, 0xe8, 0xbb},452	{0x83, 0xfe, 0xf4, 0xbb},453	{0x84, 0xcd, 0x10, 0xbb},454	{0x85, 0xf3, 0xee, 0xbb},455	{0x86, 0xff, 0xf1, 0xbb},456	{0x87, 0xcd, 0x10, 0xbb},457	{0x88, 0xf3, 0xee, 0xbb},458	{0x89, 0x01, 0xf1, 0xbb},459	{0x8a, 0xe5, 0x17, 0xbb},460	{0x8b, 0xe8, 0xe2, 0xbb},461	{0x8c, 0xf7, 0xed, 0xbb},462	{0x8d, 0x00, 0xff, 0xbb},463	{0x8e, 0xec, 0x10, 0xbb},464	{0x8f, 0xf0, 0xed, 0xbb},465	{0x90, 0xf9, 0xf2, 0xbb},466	{0x91, 0x00, 0x00, 0xbb},467	{0x92, 0xe9, 0x0d, 0xbb},468	{0x93, 0xf4, 0xf2, 0xbb},469	{0x94, 0xfb, 0xf5, 0xbb},470	{0x95, 0x00, 0xff, 0xbb},471	{0xb6, 0x0f, 0x08, 0xbb},472	{0xb7, 0x3d, 0x16, 0xbb},473	{0xb8, 0x0c, 0x04, 0xbb},474	{0xb9, 0x1c, 0x07, 0xbb},475	{0xba, 0x0a, 0x03, 0xbb},476	{0xbb, 0x1b, 0x09, 0xbb},477	{0xbc, 0x17, 0x0d, 0xbb},478	{0xbd, 0x23, 0x1d, 0xbb},479	{0xbe, 0x00, 0x28, 0xbb},480	{0xbf, 0x11, 0x09, 0xbb},481	{0xc0, 0x16, 0x15, 0xbb},482	{0xc1, 0x00, 0x1b, 0xbb},483	{0xc2, 0x0e, 0x07, 0xbb},484	{0xc3, 0x14, 0x10, 0xbb},485	{0xc4, 0x00, 0x17, 0xbb},486	{0x06, 0x74, 0x8e, 0xbb},487	{0xf0, 0x00, 0x01, 0xbb},488	{0x06, 0xf4, 0x8e, 0xbb},489	{0x00, 0x00, 0x50, 0xdd},490	{0x06, 0x74, 0x8e, 0xbb},491	{0xf0, 0x00, 0x02, 0xbb},492	{0x24, 0x50, 0x20, 0xbb},493	{0xf0, 0x00, 0x02, 0xbb},494	{0x34, 0x0c, 0x50, 0xbb},495	{0xb3, 0x01, 0x41, 0xcc},496	{0xf0, 0x00, 0x00, 0xbb},497	{0x03, 0x03, 0xc0, 0xbb},498	{},499};500static const u8 mi1310_socinitQVGA_JPG[][4] = {501	{0xb0, 0x03, 0x19, 0xcc},	{0xb0, 0x04, 0x02, 0xcc},502	{0xb3, 0x00, 0x64, 0xcc},	{0xb3, 0x00, 0x65, 0xcc},503	{0xb3, 0x05, 0x00, 0xcc},	{0xb3, 0x06, 0x00, 0xcc},504	{0xb3, 0x08, 0x01, 0xcc},	{0xb3, 0x09, 0x0c, 0xcc},505	{0xb3, 0x34, 0x02, 0xcc},	{0xb3, 0x35, 0xdd, 0xcc},506	{0xb3, 0x02, 0x00, 0xcc},	{0xb3, 0x03, 0x0a, 0xcc},507	{0xb3, 0x04, 0x05, 0xcc},	{0xb3, 0x20, 0x00, 0xcc},508	{0xb3, 0x21, 0x00, 0xcc},	{0xb3, 0x22, 0x03, 0xcc},509	{0xb3, 0x23, 0xc0, 0xcc},	{0xb3, 0x14, 0x00, 0xcc},510	{0xb3, 0x15, 0x00, 0xcc},	{0xb3, 0x16, 0x04, 0xcc},511	{0xb3, 0x17, 0xff, 0xcc},	{0xb3, 0x00, 0x65, 0xcc},512	{0xb8, 0x00, 0x00, 0xcc},	{0xbc, 0x00, 0xf0, 0xcc},513	{0xbc, 0x01, 0x01, 0xcc},	{0xf0, 0x00, 0x02, 0xbb},514	{0xc8, 0x9f, 0x0b, 0xbb},	{0x5b, 0x00, 0x01, 0xbb},515	{0x2f, 0xde, 0x20, 0xbb},	{0xf0, 0x00, 0x00, 0xbb},516	{0x20, 0x03, 0x02, 0xbb},	/* h/v flip */517	{0xf0, 0x00, 0x01, 0xbb},518	{0x05, 0x00, 0x07, 0xbb},	{0x34, 0x00, 0x00, 0xbb},519	{0x35, 0xff, 0x00, 0xbb},	{0xdc, 0x07, 0x02, 0xbb},520	{0xdd, 0x3c, 0x18, 0xbb},	{0xde, 0x92, 0x6d, 0xbb},521	{0xdf, 0xcd, 0xb1, 0xbb},	{0xe0, 0xff, 0xe7, 0xbb},522	{0x06, 0xf0, 0x0d, 0xbb},	{0x06, 0x70, 0x0e, 0xbb},523	{0x4c, 0x00, 0x01, 0xbb},	{0x4d, 0x00, 0x01, 0xbb},524	{0xf0, 0x00, 0x02, 0xbb},	{0x2e, 0x0c, 0x55, 0xbb},525	{0x21, 0xb6, 0x6e, 0xbb},	{0x36, 0x30, 0x10, 0xbb},526	{0x37, 0x00, 0xc1, 0xbb},	{0xf0, 0x00, 0x00, 0xbb},527	{0x07, 0x00, 0x84, 0xbb},	{0x08, 0x02, 0x4a, 0xbb},528	{0x05, 0x01, 0x10, 0xbb},	{0x06, 0x00, 0x39, 0xbb},529	{0xf0, 0x00, 0x02, 0xbb},	{0x58, 0x02, 0x67, 0xbb},530	{0x57, 0x02, 0x00, 0xbb},	{0x5a, 0x02, 0x67, 0xbb},531	{0x59, 0x02, 0x00, 0xbb},	{0x5c, 0x12, 0x0d, 0xbb},532	{0x5d, 0x16, 0x11, 0xbb},	{0x39, 0x06, 0x18, 0xbb},533	{0x3a, 0x06, 0x18, 0xbb},	{0x3b, 0x06, 0x18, 0xbb},534	{0x3c, 0x06, 0x18, 0xbb},	{0x64, 0x7b, 0x5b, 0xbb},535	{0xf0, 0x00, 0x02, 0xbb},	{0x36, 0x30, 0x10, 0xbb},536	{0x37, 0x00, 0xc0, 0xbb},	{0xbc, 0x0e, 0x00, 0xcc},537	{0xbc, 0x0f, 0x05, 0xcc},	{0xbc, 0x10, 0xc0, 0xcc},538	{0xbc, 0x11, 0x03, 0xcc},	{0xb6, 0x00, 0x00, 0xcc},539	{0xb6, 0x03, 0x01, 0xcc},	{0xb6, 0x02, 0x40, 0xcc},540	{0xb6, 0x05, 0x00, 0xcc},	{0xb6, 0x04, 0xf0, 0xcc},541	{0xb6, 0x12, 0xf8, 0xcc},	{0xb6, 0x13, 0x25, 0xcc},542	{0xb6, 0x18, 0x00, 0xcc},	{0xb6, 0x17, 0x96, 0xcc},543	{0xb6, 0x16, 0x00, 0xcc},	{0xb6, 0x22, 0x12, 0xcc},544	{0xb6, 0x23, 0x0b, 0xcc},	{0xbf, 0xc0, 0x39, 0xcc},545	{0xbf, 0xc1, 0x04, 0xcc},	{0xbf, 0xcc, 0x00, 0xcc},546	{0xb3, 0x5c, 0x01, 0xcc},	{0xf0, 0x00, 0x01, 0xbb},547	{0x80, 0x00, 0x03, 0xbb},	{0x81, 0xc7, 0x14, 0xbb},548	{0x82, 0xeb, 0xe8, 0xbb},	{0x83, 0xfe, 0xf4, 0xbb},549	{0x84, 0xcd, 0x10, 0xbb},	{0x85, 0xf3, 0xee, 0xbb},550	{0x86, 0xff, 0xf1, 0xbb},	{0x87, 0xcd, 0x10, 0xbb},551	{0x88, 0xf3, 0xee, 0xbb},	{0x89, 0x01, 0xf1, 0xbb},552	{0x8a, 0xe5, 0x17, 0xbb},	{0x8b, 0xe8, 0xe2, 0xbb},553	{0x8c, 0xf7, 0xed, 0xbb},	{0x8d, 0x00, 0xff, 0xbb},554	{0x8e, 0xec, 0x10, 0xbb},	{0x8f, 0xf0, 0xed, 0xbb},555	{0x90, 0xf9, 0xf2, 0xbb},	{0x91, 0x00, 0x00, 0xbb},556	{0x92, 0xe9, 0x0d, 0xbb},	{0x93, 0xf4, 0xf2, 0xbb},557	{0x94, 0xfb, 0xf5, 0xbb},	{0x95, 0x00, 0xff, 0xbb},558	{0xb6, 0x0f, 0x08, 0xbb},	{0xb7, 0x3d, 0x16, 0xbb},559	{0xb8, 0x0c, 0x04, 0xbb},	{0xb9, 0x1c, 0x07, 0xbb},560	{0xba, 0x0a, 0x03, 0xbb},	{0xbb, 0x1b, 0x09, 0xbb},561	{0xbc, 0x17, 0x0d, 0xbb},	{0xbd, 0x23, 0x1d, 0xbb},562	{0xbe, 0x00, 0x28, 0xbb},	{0xbf, 0x11, 0x09, 0xbb},563	{0xc0, 0x16, 0x15, 0xbb},	{0xc1, 0x00, 0x1b, 0xbb},564	{0xc2, 0x0e, 0x07, 0xbb},	{0xc3, 0x14, 0x10, 0xbb},565	{0xc4, 0x00, 0x17, 0xbb},	{0x06, 0x74, 0x8e, 0xbb},566	{0xf0, 0x00, 0x01, 0xbb},	{0x06, 0xf4, 0x8e, 0xbb},567	{0x00, 0x00, 0x50, 0xdd},	{0x06, 0x74, 0x8e, 0xbb},568	{0xf0, 0x00, 0x02, 0xbb},	{0x24, 0x50, 0x20, 0xbb},569	{0xf0, 0x00, 0x02, 0xbb},	{0x34, 0x0c, 0x50, 0xbb},570	{0xb3, 0x01, 0x41, 0xcc},	{0xf0, 0x00, 0x00, 0xbb},571	{0x03, 0x03, 0xc0, 0xbb},572	{},573};574static const u8 mi1310_soc_InitSXGA_JPG[][4] = {575	{0xb0, 0x03, 0x19, 0xcc},576	{0xb0, 0x04, 0x02, 0xcc},577	{0xb3, 0x00, 0x64, 0xcc},578	{0xb3, 0x00, 0x65, 0xcc},579	{0xb3, 0x05, 0x00, 0xcc},580	{0xb3, 0x06, 0x00, 0xcc},581	{0xb3, 0x08, 0x01, 0xcc},582	{0xb3, 0x09, 0x0c, 0xcc},583	{0xb3, 0x34, 0x02, 0xcc},584	{0xb3, 0x35, 0xdd, 0xcc},585	{0xb3, 0x02, 0x00, 0xcc},586	{0xb3, 0x03, 0x0a, 0xcc},587	{0xb3, 0x04, 0x0d, 0xcc},588	{0xb3, 0x20, 0x00, 0xcc},589	{0xb3, 0x21, 0x00, 0xcc},590	{0xb3, 0x22, 0x03, 0xcc},591	{0xb3, 0x23, 0xc0, 0xcc},592	{0xb3, 0x14, 0x00, 0xcc},593	{0xb3, 0x15, 0x00, 0xcc},594	{0xb3, 0x16, 0x04, 0xcc},595	{0xb3, 0x17, 0xff, 0xcc},596	{0xb3, 0x00, 0x65, 0xcc},597	{0xb8, 0x00, 0x00, 0xcc},598	{0xbc, 0x00, 0x70, 0xcc},599	{0xbc, 0x01, 0x01, 0xcc},600	{0xf0, 0x00, 0x02, 0xbb},601	{0xc8, 0x9f, 0x0b, 0xbb},602	{0x5b, 0x00, 0x01, 0xbb},603	{0xf0, 0x00, 0x00, 0xbb},604	{0x20, 0x03, 0x02, 0xbb},	/* h/v flip */605	{0xf0, 0x00, 0x01, 0xbb},606	{0x05, 0x00, 0x07, 0xbb},607	{0x34, 0x00, 0x00, 0xbb},608	{0x35, 0xff, 0x00, 0xbb},609	{0xdc, 0x07, 0x02, 0xbb},610	{0xdd, 0x3c, 0x18, 0xbb},611	{0xde, 0x92, 0x6d, 0xbb},612	{0xdf, 0xcd, 0xb1, 0xbb},613	{0xe0, 0xff, 0xe7, 0xbb},614	{0x06, 0xf0, 0x0d, 0xbb},615	{0x06, 0x70, 0x0e, 0xbb},616	{0x4c, 0x00, 0x01, 0xbb},617	{0x4d, 0x00, 0x01, 0xbb},618	{0xf0, 0x00, 0x02, 0xbb},619	{0x2e, 0x0c, 0x60, 0xbb},620	{0x21, 0xb6, 0x6e, 0xbb},621	{0x37, 0x01, 0x40, 0xbb},622	{0xf0, 0x00, 0x00, 0xbb},623	{0x07, 0x00, 0x84, 0xbb},624	{0x08, 0x02, 0x4a, 0xbb},625	{0x05, 0x01, 0x10, 0xbb},626	{0x06, 0x00, 0x39, 0xbb},627	{0xf0, 0x00, 0x02, 0xbb},628	{0x58, 0x02, 0x67, 0xbb},629	{0x57, 0x02, 0x00, 0xbb},630	{0x5a, 0x02, 0x67, 0xbb},631	{0x59, 0x02, 0x00, 0xbb},632	{0x5c, 0x12, 0x0d, 0xbb},633	{0x5d, 0x16, 0x11, 0xbb},634	{0x39, 0x06, 0x18, 0xbb},635	{0x3a, 0x06, 0x18, 0xbb},636	{0x3b, 0x06, 0x18, 0xbb},637	{0x3c, 0x06, 0x18, 0xbb},638	{0x64, 0x7b, 0x5b, 0xbb},639	{0xb6, 0x00, 0x00, 0xcc},640	{0xb6, 0x03, 0x05, 0xcc},641	{0xb6, 0x02, 0x00, 0xcc},642	{0xb6, 0x05, 0x03, 0xcc},643	{0xb6, 0x04, 0xc0, 0xcc},644	{0xb6, 0x12, 0xf8, 0xcc},645	{0xb6, 0x13, 0x29, 0xcc},646	{0xb6, 0x18, 0x09, 0xcc},647	{0xb6, 0x17, 0x60, 0xcc},648	{0xb6, 0x16, 0x00, 0xcc},649	{0xb6, 0x22, 0x12, 0xcc},650	{0xb6, 0x23, 0x0b, 0xcc},651	{0xbf, 0xc0, 0x39, 0xcc},652	{0xbf, 0xc1, 0x04, 0xcc},653	{0xbf, 0xcc, 0x00, 0xcc},654	{0xb3, 0x01, 0x41, 0xcc},655	{0x00, 0x00, 0x80, 0xdd},656	{0xf0, 0x00, 0x02, 0xbb},657	{0x00, 0x00, 0x10, 0xdd},658	{0x22, 0xa0, 0x78, 0xbb},659	{0x23, 0xa0, 0x78, 0xbb},660	{0x24, 0x7f, 0x00, 0xbb},661	{0x28, 0xea, 0x02, 0xbb},662	{0x29, 0x86, 0x7a, 0xbb},663	{0x5e, 0x52, 0x4c, 0xbb},664	{0x5f, 0x20, 0x24, 0xbb},665	{0x60, 0x00, 0x02, 0xbb},666	{0x02, 0x00, 0xee, 0xbb},667	{0x03, 0x39, 0x23, 0xbb},668	{0x04, 0x07, 0x24, 0xbb},669	{0x09, 0x00, 0xc0, 0xbb},670	{0x0a, 0x00, 0x79, 0xbb},671	{0x0b, 0x00, 0x04, 0xbb},672	{0x0c, 0x00, 0x5c, 0xbb},673	{0x0d, 0x00, 0xd9, 0xbb},674	{0x0e, 0x00, 0x53, 0xbb},675	{0x0f, 0x00, 0x21, 0xbb},676	{0x10, 0x00, 0xa4, 0xbb},677	{0x11, 0x00, 0xe5, 0xbb},678	{0x15, 0x00, 0x00, 0xbb},679	{0x16, 0x00, 0x00, 0xbb},680	{0x17, 0x00, 0x00, 0xbb},681	{0x18, 0x00, 0x00, 0xbb},682	{0x19, 0x00, 0x00, 0xbb},683	{0x1a, 0x00, 0x00, 0xbb},684	{0x1b, 0x00, 0x00, 0xbb},685	{0x1c, 0x00, 0x00, 0xbb},686	{0x1d, 0x00, 0x00, 0xbb},687	{0x1e, 0x00, 0x00, 0xbb},688	{0xf0, 0x00, 0x01, 0xbb},689	{0x00, 0x00, 0x20, 0xdd},690	{0x06, 0xf0, 0x8e, 0xbb},691	{0x00, 0x00, 0x80, 0xdd},692	{0x06, 0x70, 0x8e, 0xbb},693	{0xf0, 0x00, 0x02, 0xbb},694	{0x00, 0x00, 0x20, 0xdd},695	{0x5e, 0x6a, 0x53, 0xbb},696	{0x5f, 0x40, 0x2c, 0xbb},697	{0xf0, 0x00, 0x01, 0xbb},698	{0x00, 0x00, 0x20, 0xdd},699	{0x58, 0x00, 0x00, 0xbb},700	{0x53, 0x09, 0x03, 0xbb},701	{0x54, 0x31, 0x18, 0xbb},702	{0x55, 0x8b, 0x5f, 0xbb},703	{0x56, 0xc0, 0xa9, 0xbb},704	{0x57, 0xe0, 0xd2, 0xbb},705	{0xe1, 0x00, 0x00, 0xbb},706	{0xdc, 0x09, 0x03, 0xbb},707	{0xdd, 0x31, 0x18, 0xbb},708	{0xde, 0x8b, 0x5f, 0xbb},709	{0xdf, 0xc0, 0xa9, 0xbb},710	{0xe0, 0xe0, 0xd2, 0xbb},711	{0xb3, 0x5c, 0x01, 0xcc},712	{0xf0, 0x00, 0x01, 0xbb},713	{0x06, 0xf0, 0x8e, 0xbb},714	{0xf0, 0x00, 0x02, 0xbb},715	{0x2f, 0xde, 0x20, 0xbb},716	{0xf0, 0x00, 0x02, 0xbb},717	{0x24, 0x50, 0x20, 0xbb},718	{0xbc, 0x0e, 0x00, 0xcc},719	{0xbc, 0x0f, 0x05, 0xcc},720	{0xbc, 0x10, 0xc0, 0xcc},721	{0xf0, 0x00, 0x02, 0xbb},722	{0x34, 0x0c, 0x50, 0xbb},723	{0xbc, 0x11, 0x03, 0xcc},724	{0xf0, 0x00, 0x01, 0xbb},725	{0x80, 0x00, 0x03, 0xbb},726	{0x81, 0xc7, 0x14, 0xbb},727	{0x82, 0xeb, 0xe8, 0xbb},728	{0x83, 0xfe, 0xf4, 0xbb},729	{0x84, 0xcd, 0x10, 0xbb},730	{0x85, 0xf3, 0xee, 0xbb},731	{0x86, 0xff, 0xf1, 0xbb},732	{0x87, 0xcd, 0x10, 0xbb},733	{0x88, 0xf3, 0xee, 0xbb},734	{0x89, 0x01, 0xf1, 0xbb},735	{0x8a, 0xe5, 0x17, 0xbb},736	{0x8b, 0xe8, 0xe2, 0xbb},737	{0x8c, 0xf7, 0xed, 0xbb},738	{0x8d, 0x00, 0xff, 0xbb},739	{0x8e, 0xec, 0x10, 0xbb},740	{0x8f, 0xf0, 0xed, 0xbb},741	{0x90, 0xf9, 0xf2, 0xbb},742	{0x91, 0x00, 0x00, 0xbb},743	{0x92, 0xe9, 0x0d, 0xbb},744	{0x93, 0xf4, 0xf2, 0xbb},745	{0x94, 0xfb, 0xf5, 0xbb},746	{0x95, 0x00, 0xff, 0xbb},747	{0xb6, 0x0f, 0x08, 0xbb},748	{0xb7, 0x3d, 0x16, 0xbb},749	{0xb8, 0x0c, 0x04, 0xbb},750	{0xb9, 0x1c, 0x07, 0xbb},751	{0xba, 0x0a, 0x03, 0xbb},752	{0xbb, 0x1b, 0x09, 0xbb},753	{0xbc, 0x17, 0x0d, 0xbb},754	{0xbd, 0x23, 0x1d, 0xbb},755	{0xbe, 0x00, 0x28, 0xbb},756	{0xbf, 0x11, 0x09, 0xbb},757	{0xc0, 0x16, 0x15, 0xbb},758	{0xc1, 0x00, 0x1b, 0xbb},759	{0xc2, 0x0e, 0x07, 0xbb},760	{0xc3, 0x14, 0x10, 0xbb},761	{0xc4, 0x00, 0x17, 0xbb},762	{0x06, 0x74, 0x8e, 0xbb},763	{0xf0, 0x00, 0x00, 0xbb},764	{0x03, 0x03, 0xc0, 0xbb},765	{}766};767 768static const u8 mi1320_gamma[17] = {769	0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,770	0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff771};772static const u8 mi1320_matrix[9] = {773	0x54, 0xda, 0x06, 0xf1, 0x50, 0xf4, 0xf7, 0xea, 0x52774};775static const u8 mi1320_initVGA_data[][4] = {776	{0xb3, 0x01, 0x01, 0xcc},	{0x00, 0x00, 0x33, 0xdd},777	{0xb0, 0x03, 0x19, 0xcc},	{0x00, 0x00, 0x33, 0xdd},778	{0xb0, 0x04, 0x02, 0xcc},	{0x00, 0x00, 0x33, 0xdd},779	{0xb3, 0x00, 0x64, 0xcc},	{0xb3, 0x00, 0x65, 0xcc},780	{0xb0, 0x16, 0x03, 0xcc},	{0xb3, 0x05, 0x00, 0xcc},781	{0xb3, 0x06, 0x00, 0xcc},	{0xb3, 0x08, 0x01, 0xcc},782	{0xb3, 0x09, 0x0c, 0xcc},	{0xb3, 0x34, 0x02, 0xcc},783	{0xb3, 0x35, 0xc8, 0xcc},	/* i2c add: 48 */784	{0xb3, 0x02, 0x00, 0xcc},785	{0xb3, 0x03, 0x0a, 0xcc},	{0xb3, 0x04, 0x05, 0xcc},786	{0xb3, 0x20, 0x00, 0xcc},	{0xb3, 0x21, 0x00, 0xcc},787	{0xb3, 0x22, 0x03, 0xcc},	{0xb3, 0x23, 0xc0, 0xcc},788	{0xb3, 0x14, 0x00, 0xcc},	{0xb3, 0x15, 0x00, 0xcc},789	{0xb3, 0x16, 0x04, 0xcc},	{0xb3, 0x17, 0xff, 0xcc},790	{0xb3, 0x00, 0x67, 0xcc},	{0xbc, 0x00, 0xd0, 0xcc},791	{0xbc, 0x01, 0x01, 0xcc},	{0xf0, 0x00, 0x00, 0xbb},792	{0x0d, 0x00, 0x09, 0xbb},	{0x00, 0x01, 0x00, 0xdd},793	{0x0d, 0x00, 0x08, 0xbb},	{0xf0, 0x00, 0x01, 0xbb},794	{0xa1, 0x05, 0x00, 0xbb},	{0xa4, 0x03, 0xc0, 0xbb},795	{0xf0, 0x00, 0x02, 0xbb},	{0x00, 0x00, 0x10, 0xdd},796	{0xc8, 0x9f, 0x0b, 0xbb},	{0x00, 0x00, 0x10, 0xdd},797	{0xf0, 0x00, 0x00, 0xbb},	{0x00, 0x00, 0x10, 0xdd},798	{0x20, 0x01, 0x00, 0xbb},	{0x00, 0x00, 0x10, 0xdd},799	{0xf0, 0x00, 0x01, 0xbb},	{0x9d, 0x3c, 0xa0, 0xbb},800	{0x47, 0x30, 0x30, 0xbb},	{0xf0, 0x00, 0x00, 0xbb},801	{0x0a, 0x80, 0x11, 0xbb},	{0x35, 0x00, 0x22, 0xbb},802	{0xf0, 0x00, 0x02, 0xbb},	{0x9d, 0xc5, 0x05, 0xbb},803	{0xdc, 0x0f, 0xfc, 0xbb},	{0xf0, 0x00, 0x01, 0xbb},804	{0x06, 0x74, 0x0e, 0xbb},	{0x80, 0x00, 0x06, 0xbb},805	{0x81, 0x04, 0x00, 0xbb},	{0x82, 0x01, 0x02, 0xbb},806	{0x83, 0x03, 0x02, 0xbb},	{0x84, 0x05, 0x00, 0xbb},807	{0x85, 0x01, 0x00, 0xbb},	{0x86, 0x03, 0x02, 0xbb},808	{0x87, 0x05, 0x00, 0xbb},	{0x88, 0x01, 0x00, 0xbb},809	{0x89, 0x02, 0x02, 0xbb},	{0x8a, 0xfd, 0x04, 0xbb},810	{0x8b, 0xfc, 0xfd, 0xbb},	{0x8c, 0xff, 0xfd, 0xbb},811	{0x8d, 0x00, 0x00, 0xbb},	{0x8e, 0xfe, 0x05, 0xbb},812	{0x8f, 0xfc, 0xfd, 0xbb},	{0x90, 0xfe, 0xfd, 0xbb},813	{0x91, 0x00, 0x00, 0xbb},	{0x92, 0xfe, 0x03, 0xbb},814	{0x93, 0xfd, 0xfe, 0xbb},	{0x94, 0xff, 0xfd, 0xbb},815	{0x95, 0x00, 0x00, 0xbb},	{0xb6, 0x07, 0x05, 0xbb},816	{0xb7, 0x13, 0x06, 0xbb},	{0xb8, 0x08, 0x06, 0xbb},817	{0xb9, 0x14, 0x08, 0xbb},	{0xba, 0x06, 0x05, 0xbb},818	{0xbb, 0x13, 0x06, 0xbb},	{0xbc, 0x03, 0x01, 0xbb},819	{0xbd, 0x03, 0x04, 0xbb},	{0xbe, 0x00, 0x02, 0xbb},820	{0xbf, 0x03, 0x01, 0xbb},	{0xc0, 0x02, 0x04, 0xbb},821	{0xc1, 0x00, 0x04, 0xbb},	{0xc2, 0x02, 0x01, 0xbb},822	{0xc3, 0x01, 0x03, 0xbb},	{0xc4, 0x00, 0x04, 0xbb},823	{0xf0, 0x00, 0x00, 0xbb},	{0x05, 0x01, 0x13, 0xbb},824	{0x06, 0x00, 0x11, 0xbb},	{0x07, 0x00, 0x85, 0xbb},825	{0x08, 0x00, 0x27, 0xbb},826	{0x20, 0x01, 0x00, 0xbb},	/* h/v flips - was 03 */827	{0x21, 0x80, 0x00, 0xbb},	{0x22, 0x0d, 0x0f, 0xbb},828	{0x24, 0x80, 0x00, 0xbb},	{0x59, 0x00, 0xff, 0xbb},829	{0xf0, 0x00, 0x02, 0xbb},	{0x39, 0x03, 0x0d, 0xbb},830	{0x3a, 0x06, 0x1b, 0xbb},	{0x3b, 0x00, 0x95, 0xbb},831	{0x3c, 0x04, 0xdb, 0xbb},	{0x57, 0x02, 0x00, 0xbb},832	{0x58, 0x02, 0x66, 0xbb},	{0x59, 0x00, 0xff, 0xbb},833	{0x5a, 0x01, 0x33, 0xbb},	{0x5c, 0x12, 0x0d, 0xbb},834	{0x5d, 0x16, 0x11, 0xbb},	{0x64, 0x5e, 0x1c, 0xbb},835	{0xf0, 0x00, 0x02, 0xbb},	{0x2f, 0xd1, 0x00, 0xbb},836	{0x5b, 0x00, 0x01, 0xbb},	{0xf0, 0x00, 0x02, 0xbb},837	{0x36, 0x68, 0x10, 0xbb},	{0x00, 0x00, 0x30, 0xdd},838	{0x37, 0x82, 0x00, 0xbb},	{0xbc, 0x0e, 0x00, 0xcc},839	{0xbc, 0x0f, 0x05, 0xcc},	{0xbc, 0x10, 0xc0, 0xcc},840	{0xbc, 0x11, 0x03, 0xcc},	{0xb6, 0x00, 0x00, 0xcc},841	{0xb6, 0x03, 0x05, 0xcc},	{0xb6, 0x02, 0x00, 0xcc},842	{0xb6, 0x05, 0x04, 0xcc},	{0xb6, 0x04, 0x00, 0xcc},843	{0xb6, 0x12, 0xf8, 0xcc},	{0xb6, 0x13, 0x29, 0xcc},844	{0xb6, 0x18, 0x0a, 0xcc},	{0xb6, 0x17, 0x00, 0xcc},845	{0xb6, 0x16, 0x00, 0xcc},	{0xb6, 0x22, 0x12, 0xcc},846	{0xb6, 0x23, 0x0b, 0xcc},	{0xbf, 0xc0, 0x26, 0xcc},847	{0xbf, 0xc1, 0x02, 0xcc},	{0xbf, 0xcc, 0x04, 0xcc},848	{0xbc, 0x02, 0x18, 0xcc},	{0xbc, 0x03, 0x50, 0xcc},849	{0xbc, 0x04, 0x18, 0xcc},	{0xbc, 0x05, 0x00, 0xcc},850	{0xbc, 0x06, 0x00, 0xcc},	{0xbc, 0x08, 0x30, 0xcc},851	{0xbc, 0x09, 0x40, 0xcc},	{0xbc, 0x0a, 0x10, 0xcc},852	{0xbc, 0x0b, 0x00, 0xcc},	{0xbc, 0x0c, 0x00, 0xcc},853	{0xb3, 0x5c, 0x01, 0xcc},	{0xb3, 0x01, 0x41, 0xcc},854	{}855};856static const u8 mi1320_initQVGA_data[][4] = {857	{0xb3, 0x01, 0x01, 0xcc},	{0x00, 0x00, 0x33, 0xdd},858	{0xb0, 0x03, 0x19, 0xcc},	{0x00, 0x00, 0x33, 0xdd},859	{0xb0, 0x04, 0x02, 0xcc},	{0x00, 0x00, 0x33, 0xdd},860	{0xb3, 0x00, 0x64, 0xcc},	{0xb3, 0x00, 0x65, 0xcc},861	{0xb0, 0x16, 0x03, 0xcc},	{0xb3, 0x05, 0x01, 0xcc},862	{0xb3, 0x06, 0x01, 0xcc},	{0xb3, 0x08, 0x01, 0xcc},863	{0xb3, 0x09, 0x0c, 0xcc},	{0xb3, 0x34, 0x02, 0xcc},864	{0xb3, 0x35, 0xc8, 0xcc},	{0xb3, 0x02, 0x00, 0xcc},865	{0xb3, 0x03, 0x0a, 0xcc},	{0xb3, 0x04, 0x05, 0xcc},866	{0xb3, 0x20, 0x00, 0xcc},	{0xb3, 0x21, 0x00, 0xcc},867	{0xb3, 0x22, 0x01, 0xcc},	{0xb3, 0x23, 0xe0, 0xcc},868	{0xb3, 0x14, 0x00, 0xcc},	{0xb3, 0x15, 0x00, 0xcc},869	{0xb3, 0x16, 0x02, 0xcc},	{0xb3, 0x17, 0x7f, 0xcc},870	{0xb3, 0x00, 0x65, 0xcc},	{0xb8, 0x00, 0x00, 0xcc},871	{0xbc, 0x00, 0xd0, 0xcc},	{0xbc, 0x01, 0x01, 0xcc},872	{0xf0, 0x00, 0x00, 0xbb},	{0x0d, 0x00, 0x09, 0xbb},873	{0x00, 0x01, 0x00, 0xdd},	{0x0d, 0x00, 0x08, 0xbb},874	{0xf0, 0x00, 0x00, 0xbb},	{0x02, 0x00, 0x64, 0xbb},875	{0x05, 0x01, 0x78, 0xbb},	{0x06, 0x00, 0x11, 0xbb},876	{0x07, 0x01, 0x42, 0xbb},	{0x08, 0x00, 0x11, 0xbb},877	{0x20, 0x01, 0x00, 0xbb},	{0x21, 0x80, 0x00, 0xbb},878	{0x22, 0x0d, 0x0f, 0xbb},	{0x24, 0x80, 0x00, 0xbb},879	{0x59, 0x00, 0xff, 0xbb},	{0xf0, 0x00, 0x01, 0xbb},880	{0x9d, 0x3c, 0xa0, 0xbb},	{0x47, 0x30, 0x30, 0xbb},881	{0xf0, 0x00, 0x00, 0xbb},	{0x0a, 0x80, 0x11, 0xbb},882	{0x35, 0x00, 0x22, 0xbb},	{0xf0, 0x00, 0x02, 0xbb},883	{0x9d, 0xc5, 0x05, 0xbb},	{0xdc, 0x0f, 0xfc, 0xbb},884	{0xf0, 0x00, 0x01, 0xbb},	{0x06, 0x74, 0x0e, 0xbb},885	{0x80, 0x00, 0x06, 0xbb},	{0x81, 0x04, 0x00, 0xbb},886	{0x82, 0x01, 0x02, 0xbb},	{0x83, 0x03, 0x02, 0xbb},887	{0x84, 0x05, 0x00, 0xbb},	{0x85, 0x01, 0x00, 0xbb},888	{0x86, 0x03, 0x02, 0xbb},	{0x87, 0x05, 0x00, 0xbb},889	{0x88, 0x01, 0x00, 0xbb},	{0x89, 0x02, 0x02, 0xbb},890	{0x8a, 0xfd, 0x04, 0xbb},	{0x8b, 0xfc, 0xfd, 0xbb},891	{0x8c, 0xff, 0xfd, 0xbb},	{0x8d, 0x00, 0x00, 0xbb},892	{0x8e, 0xfe, 0x05, 0xbb},	{0x8f, 0xfc, 0xfd, 0xbb},893	{0x90, 0xfe, 0xfd, 0xbb},	{0x91, 0x00, 0x00, 0xbb},894	{0x92, 0xfe, 0x03, 0xbb},	{0x93, 0xfd, 0xfe, 0xbb},895	{0x94, 0xff, 0xfd, 0xbb},	{0x95, 0x00, 0x00, 0xbb},896	{0xb6, 0x07, 0x05, 0xbb},	{0xb7, 0x13, 0x06, 0xbb},897	{0xb8, 0x08, 0x06, 0xbb},	{0xb9, 0x14, 0x08, 0xbb},898	{0xba, 0x06, 0x05, 0xbb},	{0xbb, 0x13, 0x06, 0xbb},899	{0xbc, 0x03, 0x01, 0xbb},	{0xbd, 0x03, 0x04, 0xbb},900	{0xbe, 0x00, 0x02, 0xbb},	{0xbf, 0x03, 0x01, 0xbb},901	{0xc0, 0x02, 0x04, 0xbb},	{0xc1, 0x00, 0x04, 0xbb},902	{0xc2, 0x02, 0x01, 0xbb},	{0xc3, 0x01, 0x03, 0xbb},903	{0xc4, 0x00, 0x04, 0xbb},	{0xf0, 0x00, 0x02, 0xbb},904	{0xc8, 0x00, 0x00, 0xbb},	{0x2e, 0x00, 0x00, 0xbb},905	{0x2e, 0x0c, 0x5b, 0xbb},	{0x2f, 0xd1, 0x00, 0xbb},906	{0x39, 0x03, 0xca, 0xbb},	{0x3a, 0x06, 0x80, 0xbb},907	{0x3b, 0x01, 0x52, 0xbb},	{0x3c, 0x05, 0x40, 0xbb},908	{0x57, 0x01, 0x9c, 0xbb},	{0x58, 0x01, 0xee, 0xbb},909	{0x59, 0x00, 0xf0, 0xbb},	{0x5a, 0x01, 0x20, 0xbb},910	{0x5c, 0x1d, 0x17, 0xbb},	{0x5d, 0x22, 0x1c, 0xbb},911	{0x64, 0x1e, 0x1c, 0xbb},	{0x5b, 0x00, 0x01, 0xbb},912	{0xf0, 0x00, 0x02, 0xbb},	{0x36, 0x68, 0x10, 0xbb},913	{0x00, 0x00, 0x30, 0xdd},	{0x37, 0x81, 0x00, 0xbb},914	{0xbc, 0x02, 0x18, 0xcc},	{0xbc, 0x03, 0x50, 0xcc},915	{0xbc, 0x04, 0x18, 0xcc},	{0xbc, 0x05, 0x00, 0xcc},916	{0xbc, 0x06, 0x00, 0xcc},	{0xbc, 0x08, 0x30, 0xcc},917	{0xbc, 0x09, 0x40, 0xcc},	{0xbc, 0x0a, 0x10, 0xcc},918	{0xbc, 0x0b, 0x00, 0xcc},	{0xbc, 0x0c, 0x00, 0xcc},919	{0xbf, 0xc0, 0x26, 0xcc},	{0xbf, 0xc1, 0x02, 0xcc},920	{0xbf, 0xcc, 0x04, 0xcc},	{0xb3, 0x5c, 0x01, 0xcc},921	{0xb3, 0x01, 0x41, 0xcc},922	{}923};924 925static const u8 mi1320_soc_InitVGA[][4] = {926	{0xb3, 0x01, 0x01, 0xcc},927	{0xb0, 0x03, 0x19, 0xcc},928	{0xb0, 0x04, 0x02, 0xcc},929	{0x00, 0x00, 0x30, 0xdd},930	{0xb3, 0x00, 0x64, 0xcc},931	{0xb3, 0x00, 0x67, 0xcc},932	{0xb3, 0x05, 0x01, 0xcc},933	{0xb3, 0x06, 0x01, 0xcc},934	{0xb3, 0x08, 0x01, 0xcc},935	{0xb3, 0x09, 0x0c, 0xcc},936	{0xb3, 0x34, 0x02, 0xcc},937	{0xb3, 0x35, 0xc8, 0xcc},	/* i2c add: 48 */938	{0xb3, 0x02, 0x00, 0xcc},939	{0xb3, 0x03, 0x0a, 0xcc},940	{0xb3, 0x04, 0x05, 0xcc},941	{0xb3, 0x20, 0x00, 0xcc},942	{0xb3, 0x21, 0x00, 0xcc},943	{0xb3, 0x22, 0x01, 0xcc},944	{0xb3, 0x23, 0xe0, 0xcc},945	{0xb3, 0x14, 0x00, 0xcc},946	{0xb3, 0x15, 0x00, 0xcc},947	{0xb3, 0x16, 0x02, 0xcc},948	{0xb3, 0x17, 0x7f, 0xcc},949	{0xb3, 0x00, 0x67, 0xcc},950	{0xb8, 0x00, 0x00, 0xcc},951	{0xbc, 0x00, 0x71, 0xcc},952	{0xbc, 0x01, 0x01, 0xcc},953	{0xb3, 0x5c, 0x01, 0xcc},954	{0xf0, 0x00, 0x02, 0xbb},955	{0x00, 0x00, 0x10, 0xdd},956	{0xc8, 0x00, 0x00, 0xbb},957	{0x00, 0x00, 0x30, 0xdd},958	{0xf0, 0x00, 0x00, 0xbb},959	{0x00, 0x00, 0x10, 0xdd},960	{0x07, 0x00, 0xe0, 0xbb},961	{0x08, 0x00, 0x0b, 0xbb},962	{0x21, 0x00, 0x0c, 0xbb},963	{0x20, 0x01, 0x03, 0xbb},	/* h/v flip */964	{0xbf, 0xc0, 0x26, 0xcc},965	{0xbf, 0xc1, 0x02, 0xcc},966	{0xbf, 0xcc, 0x04, 0xcc},967	{0xb3, 0x01, 0x41, 0xcc},968	{0xf0, 0x00, 0x00, 0xbb},969	{0x05, 0x01, 0x78, 0xbb},970	{0x06, 0x00, 0x11, 0xbb},971	{0x07, 0x01, 0x42, 0xbb},972	{0x08, 0x00, 0x11, 0xbb},973	{0x20, 0x01, 0x03, 0xbb},	/* h/v flip */974	{0x21, 0x80, 0x00, 0xbb},975	{0x22, 0x0d, 0x0f, 0xbb},976	{0x24, 0x80, 0x00, 0xbb},977	{0x59, 0x00, 0xff, 0xbb},978	{0xf0, 0x00, 0x02, 0xbb},979	{0x39, 0x03, 0xca, 0xbb},980	{0x3a, 0x06, 0x80, 0xbb},981	{0x3b, 0x01, 0x52, 0xbb},982	{0x3c, 0x05, 0x40, 0xbb},983	{0x57, 0x01, 0x9c, 0xbb},984	{0x58, 0x01, 0xee, 0xbb},985	{0x59, 0x00, 0xf0, 0xbb},986	{0x5a, 0x01, 0x20, 0xbb},987	{0x5c, 0x1d, 0x17, 0xbb},988	{0x5d, 0x22, 0x1c, 0xbb},989	{0x64, 0x1e, 0x1c, 0xbb},990	{0x5b, 0x00, 0x00, 0xbb},991	{0xf0, 0x00, 0x02, 0xbb},992	{0x22, 0xa0, 0x78, 0xbb},993	{0x23, 0xa0, 0x78, 0xbb},994	{0x24, 0x7f, 0x00, 0xbb},995	{0x28, 0xea, 0x02, 0xbb},996	{0x29, 0x86, 0x7a, 0xbb},997	{0x5e, 0x52, 0x4c, 0xbb},998	{0x5f, 0x20, 0x24, 0xbb},999	{0x60, 0x00, 0x02, 0xbb},1000	{0x02, 0x00, 0xee, 0xbb},1001	{0x03, 0x39, 0x23, 0xbb},1002	{0x04, 0x07, 0x24, 0xbb},1003	{0x09, 0x00, 0xc0, 0xbb},1004	{0x0a, 0x00, 0x79, 0xbb},1005	{0x0b, 0x00, 0x04, 0xbb},1006	{0x0c, 0x00, 0x5c, 0xbb},1007	{0x0d, 0x00, 0xd9, 0xbb},1008	{0x0e, 0x00, 0x53, 0xbb},1009	{0x0f, 0x00, 0x21, 0xbb},1010	{0x10, 0x00, 0xa4, 0xbb},1011	{0x11, 0x00, 0xe5, 0xbb},1012	{0x15, 0x00, 0x00, 0xbb},1013	{0x16, 0x00, 0x00, 0xbb},1014	{0x17, 0x00, 0x00, 0xbb},1015	{0x18, 0x00, 0x00, 0xbb},1016	{0x19, 0x00, 0x00, 0xbb},1017	{0x1a, 0x00, 0x00, 0xbb},1018	{0x1b, 0x00, 0x00, 0xbb},1019	{0x1c, 0x00, 0x00, 0xbb},1020	{0x1d, 0x00, 0x00, 0xbb},1021	{0x1e, 0x00, 0x00, 0xbb},1022	{0xf0, 0x00, 0x01, 0xbb},1023	{0x06, 0xe0, 0x0e, 0xbb},1024	{0x06, 0x60, 0x0e, 0xbb},1025	{0xb3, 0x5c, 0x01, 0xcc},1026	{}1027};1028static const u8 mi1320_soc_InitQVGA[][4] = {1029	{0xb3, 0x01, 0x01, 0xcc},1030	{0xb0, 0x03, 0x19, 0xcc},1031	{0xb0, 0x04, 0x02, 0xcc},1032	{0x00, 0x00, 0x30, 0xdd},1033	{0xb3, 0x00, 0x64, 0xcc},1034	{0xb3, 0x00, 0x67, 0xcc},1035	{0xb3, 0x05, 0x01, 0xcc},1036	{0xb3, 0x06, 0x01, 0xcc},1037	{0xb3, 0x08, 0x01, 0xcc},1038	{0xb3, 0x09, 0x0c, 0xcc},1039	{0xb3, 0x34, 0x02, 0xcc},1040	{0xb3, 0x35, 0xc8, 0xcc},1041	{0xb3, 0x02, 0x00, 0xcc},1042	{0xb3, 0x03, 0x0a, 0xcc},1043	{0xb3, 0x04, 0x05, 0xcc},1044	{0xb3, 0x20, 0x00, 0xcc},1045	{0xb3, 0x21, 0x00, 0xcc},1046	{0xb3, 0x22, 0x01, 0xcc},1047	{0xb3, 0x23, 0xe0, 0xcc},1048	{0xb3, 0x14, 0x00, 0xcc},1049	{0xb3, 0x15, 0x00, 0xcc},1050	{0xb3, 0x16, 0x02, 0xcc},1051	{0xb3, 0x17, 0x7f, 0xcc},1052	{0xb3, 0x00, 0x67, 0xcc},1053	{0xb8, 0x00, 0x00, 0xcc},1054	{0xbc, 0x00, 0xd1, 0xcc},1055	{0xbc, 0x01, 0x01, 0xcc},1056	{0xb3, 0x5c, 0x01, 0xcc},1057	{0xf0, 0x00, 0x02, 0xbb},1058	{0x00, 0x00, 0x10, 0xdd},1059	{0xc8, 0x00, 0x00, 0xbb},1060	{0x00, 0x00, 0x30, 0xdd},1061	{0xf0, 0x00, 0x00, 0xbb},1062	{0x00, 0x00, 0x10, 0xdd},1063	{0x07, 0x00, 0xe0, 0xbb},1064	{0x08, 0x00, 0x0b, 0xbb},1065	{0x21, 0x00, 0x0c, 0xbb},1066	{0x20, 0x01, 0x03, 0xbb},	/* h/v flip */1067	{0xbf, 0xc0, 0x26, 0xcc},1068	{0xbf, 0xc1, 0x02, 0xcc},1069	{0xbf, 0xcc, 0x04, 0xcc},1070	{0xbc, 0x02, 0x18, 0xcc},1071	{0xbc, 0x03, 0x50, 0xcc},1072	{0xbc, 0x04, 0x18, 0xcc},1073	{0xbc, 0x05, 0x00, 0xcc},1074	{0xbc, 0x06, 0x00, 0xcc},1075	{0xbc, 0x08, 0x30, 0xcc},1076	{0xbc, 0x09, 0x40, 0xcc},1077	{0xbc, 0x0a, 0x10, 0xcc},1078	{0xbc, 0x0b, 0x00, 0xcc},1079	{0xbc, 0x0c, 0x00, 0xcc},1080	{0xb3, 0x01, 0x41, 0xcc},1081	{0xf0, 0x00, 0x00, 0xbb},1082	{0x05, 0x01, 0x78, 0xbb},1083	{0x06, 0x00, 0x11, 0xbb},1084	{0x07, 0x01, 0x42, 0xbb},1085	{0x08, 0x00, 0x11, 0xbb},1086	{0x20, 0x01, 0x03, 0xbb},	/* h/v flip */1087	{0x21, 0x80, 0x00, 0xbb},1088	{0x22, 0x0d, 0x0f, 0xbb},1089	{0x24, 0x80, 0x00, 0xbb},1090	{0x59, 0x00, 0xff, 0xbb},1091	{0xf0, 0x00, 0x02, 0xbb},1092	{0x39, 0x03, 0xca, 0xbb},1093	{0x3a, 0x06, 0x80, 0xbb},1094	{0x3b, 0x01, 0x52, 0xbb},1095	{0x3c, 0x05, 0x40, 0xbb},1096	{0x57, 0x01, 0x9c, 0xbb},1097	{0x58, 0x01, 0xee, 0xbb},1098	{0x59, 0x00, 0xf0, 0xbb},1099	{0x5a, 0x01, 0x20, 0xbb},1100	{0x5c, 0x1d, 0x17, 0xbb},1101	{0x5d, 0x22, 0x1c, 0xbb},1102	{0x64, 0x1e, 0x1c, 0xbb},1103	{0x5b, 0x00, 0x00, 0xbb},1104	{0xf0, 0x00, 0x02, 0xbb},1105	{0x22, 0xa0, 0x78, 0xbb},1106	{0x23, 0xa0, 0x78, 0xbb},1107	{0x24, 0x7f, 0x00, 0xbb},1108	{0x28, 0xea, 0x02, 0xbb},1109	{0x29, 0x86, 0x7a, 0xbb},1110	{0x5e, 0x52, 0x4c, 0xbb},1111	{0x5f, 0x20, 0x24, 0xbb},1112	{0x60, 0x00, 0x02, 0xbb},1113	{0x02, 0x00, 0xee, 0xbb},1114	{0x03, 0x39, 0x23, 0xbb},1115	{0x04, 0x07, 0x24, 0xbb},1116	{0x09, 0x00, 0xc0, 0xbb},1117	{0x0a, 0x00, 0x79, 0xbb},1118	{0x0b, 0x00, 0x04, 0xbb},1119	{0x0c, 0x00, 0x5c, 0xbb},1120	{0x0d, 0x00, 0xd9, 0xbb},1121	{0x0e, 0x00, 0x53, 0xbb},1122	{0x0f, 0x00, 0x21, 0xbb},1123	{0x10, 0x00, 0xa4, 0xbb},1124	{0x11, 0x00, 0xe5, 0xbb},1125	{0x15, 0x00, 0x00, 0xbb},1126	{0x16, 0x00, 0x00, 0xbb},1127	{0x17, 0x00, 0x00, 0xbb},1128	{0x18, 0x00, 0x00, 0xbb},1129	{0x19, 0x00, 0x00, 0xbb},1130	{0x1a, 0x00, 0x00, 0xbb},1131	{0x1b, 0x00, 0x00, 0xbb},1132	{0x1c, 0x00, 0x00, 0xbb},1133	{0x1d, 0x00, 0x00, 0xbb},1134	{0x1e, 0x00, 0x00, 0xbb},1135	{0xf0, 0x00, 0x01, 0xbb},1136	{0x06, 0xe0, 0x0e, 0xbb},1137	{0x06, 0x60, 0x0e, 0xbb},1138	{0xb3, 0x5c, 0x01, 0xcc},1139	{}1140};1141static const u8 mi1320_soc_InitSXGA[][4] = {1142	{0xb3, 0x01, 0x01, 0xcc},1143	{0xb0, 0x03, 0x19, 0xcc},1144	{0x00, 0x00, 0x30, 0xdd},1145	{0xb3, 0x00, 0x64, 0xcc},1146	{0xb3, 0x00, 0x67, 0xcc},1147	{0xb3, 0x05, 0x01, 0xcc},1148	{0xb3, 0x06, 0x01, 0xcc},1149	{0xb3, 0x08, 0x01, 0xcc},1150	{0xb3, 0x09, 0x0c, 0xcc},1151	{0xb3, 0x34, 0x02, 0xcc},1152	{0xb3, 0x35, 0xc8, 0xcc},1153	{0xb3, 0x02, 0x00, 0xcc},1154	{0xb3, 0x03, 0x0a, 0xcc},1155	{0xb3, 0x04, 0x05, 0xcc},1156	{0xb3, 0x20, 0x00, 0xcc},1157	{0xb3, 0x21, 0x00, 0xcc},1158	{0xb3, 0x22, 0x04, 0xcc},1159	{0xb3, 0x23, 0x00, 0xcc},1160	{0xb3, 0x14, 0x00, 0xcc},1161	{0xb3, 0x15, 0x00, 0xcc},1162	{0xb3, 0x16, 0x04, 0xcc},1163	{0xb3, 0x17, 0xff, 0xcc},1164	{0xb3, 0x00, 0x67, 0xcc},1165	{0xbc, 0x00, 0x71, 0xcc},1166	{0xbc, 0x01, 0x01, 0xcc},1167	{0xb3, 0x5c, 0x01, 0xcc},1168	{0xf0, 0x00, 0x02, 0xbb},1169	{0x00, 0x00, 0x30, 0xdd},1170	{0xc8, 0x9f, 0x0b, 0xbb},1171	{0x00, 0x00, 0x20, 0xdd},1172	{0x5b, 0x00, 0x01, 0xbb},1173	{0x00, 0x00, 0x20, 0xdd},1174	{0xf0, 0x00, 0x00, 0xbb},1175	{0x00, 0x00, 0x30, 0xdd},1176	{0x20, 0x01, 0x03, 0xbb},	/* h/v flip */1177	{0x00, 0x00, 0x20, 0xdd},1178	{0xbf, 0xc0, 0x26, 0xcc},1179	{0xbf, 0xc1, 0x02, 0xcc},1180	{0xbf, 0xcc, 0x04, 0xcc},1181	{0xb3, 0x01, 0x41, 0xcc},1182	{0xf0, 0x00, 0x00, 0xbb},1183	{0x05, 0x01, 0x78, 0xbb},1184	{0x06, 0x00, 0x11, 0xbb},1185	{0x07, 0x01, 0x42, 0xbb},1186	{0x08, 0x00, 0x11, 0xbb},1187	{0x20, 0x01, 0x03, 0xbb},	/* h/v flip */1188	{0x21, 0x80, 0x00, 0xbb},1189	{0x22, 0x0d, 0x0f, 0xbb},1190	{0x24, 0x80, 0x00, 0xbb},1191	{0x59, 0x00, 0xff, 0xbb},1192	{0xf0, 0x00, 0x02, 0xbb},1193	{0x39, 0x03, 0xca, 0xbb},1194	{0x3a, 0x06, 0x80, 0xbb},1195	{0x3b, 0x01, 0x52, 0xbb},1196	{0x3c, 0x05, 0x40, 0xbb},1197	{0x57, 0x01, 0x9c, 0xbb},1198	{0x58, 0x01, 0xee, 0xbb},1199	{0x59, 0x00, 0xf0, 0xbb},1200	{0x5a, 0x01, 0x20, 0xbb},1201	{0x5c, 0x1d, 0x17, 0xbb},1202	{0x5d, 0x22, 0x1c, 0xbb},1203	{0x64, 0x1e, 0x1c, 0xbb},1204	{0x5b, 0x00, 0x00, 0xbb},1205	{0xf0, 0x00, 0x02, 0xbb},1206	{0x22, 0xa0, 0x78, 0xbb},1207	{0x23, 0xa0, 0x78, 0xbb},1208	{0x24, 0x7f, 0x00, 0xbb},1209	{0x28, 0xea, 0x02, 0xbb},1210	{0x29, 0x86, 0x7a, 0xbb},1211	{0x5e, 0x52, 0x4c, 0xbb},1212	{0x5f, 0x20, 0x24, 0xbb},1213	{0x60, 0x00, 0x02, 0xbb},1214	{0x02, 0x00, 0xee, 0xbb},1215	{0x03, 0x39, 0x23, 0xbb},1216	{0x04, 0x07, 0x24, 0xbb},1217	{0x09, 0x00, 0xc0, 0xbb},1218	{0x0a, 0x00, 0x79, 0xbb},1219	{0x0b, 0x00, 0x04, 0xbb},1220	{0x0c, 0x00, 0x5c, 0xbb},1221	{0x0d, 0x00, 0xd9, 0xbb},1222	{0x0e, 0x00, 0x53, 0xbb},1223	{0x0f, 0x00, 0x21, 0xbb},1224	{0x10, 0x00, 0xa4, 0xbb},1225	{0x11, 0x00, 0xe5, 0xbb},1226	{0x15, 0x00, 0x00, 0xbb},1227	{0x16, 0x00, 0x00, 0xbb},1228	{0x17, 0x00, 0x00, 0xbb},1229	{0x18, 0x00, 0x00, 0xbb},1230	{0x19, 0x00, 0x00, 0xbb},1231	{0x1a, 0x00, 0x00, 0xbb},1232	{0x1b, 0x00, 0x00, 0xbb},1233	{0x1c, 0x00, 0x00, 0xbb},1234	{0x1d, 0x00, 0x00, 0xbb},1235	{0x1e, 0x00, 0x00, 0xbb},1236	{0xf0, 0x00, 0x01, 0xbb},1237	{0x06, 0xe0, 0x0e, 0xbb},1238	{0x06, 0x60, 0x0e, 0xbb},1239	{0xb3, 0x5c, 0x01, 0xcc},1240	{0xf0, 0x00, 0x00, 0xbb},1241	{0x05, 0x01, 0x13, 0xbb},1242	{0x06, 0x00, 0x11, 0xbb},1243	{0x07, 0x00, 0x85, 0xbb},1244	{0x08, 0x00, 0x27, 0xbb},1245	{0x20, 0x01, 0x03, 0xbb},	/* h/v flip */1246	{0x21, 0x80, 0x00, 0xbb},1247	{0x22, 0x0d, 0x0f, 0xbb},1248	{0x24, 0x80, 0x00, 0xbb},1249	{0x59, 0x00, 0xff, 0xbb},1250	{0xf0, 0x00, 0x02, 0xbb},1251	{0x39, 0x03, 0x0d, 0xbb},1252	{0x3a, 0x06, 0x1b, 0xbb},1253	{0x3b, 0x00, 0x95, 0xbb},1254	{0x3c, 0x04, 0xdb, 0xbb},1255	{0x57, 0x02, 0x00, 0xbb},1256	{0x58, 0x02, 0x66, 0xbb},1257	{0x59, 0x00, 0xff, 0xbb},1258	{0x5a, 0x01, 0x33, 0xbb},1259	{0x5c, 0x12, 0x0d, 0xbb},1260	{0x5d, 0x16, 0x11, 0xbb},1261	{0x64, 0x5e, 0x1c, 0xbb},1262	{}1263};1264static const u8 po3130_gamma[17] = {1265	0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,1266	0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff1267};1268static const u8 po3130_matrix[9] = {1269	0x5f, 0xec, 0xf5, 0xf1, 0x5a, 0xf5, 0xf1, 0xec, 0x631270};1271 1272static const u8 po3130_initVGA_data[][4] = {1273	{0xb0, 0x4d, 0x00, 0xcc},	{0xb3, 0x01, 0x01, 0xcc},1274	{0x00, 0x00, 0x50, 0xdd},	{0xb0, 0x03, 0x01, 0xcc},1275	{0xb3, 0x00, 0x04, 0xcc},	{0xb3, 0x00, 0x24, 0xcc},1276	{0xb3, 0x00, 0x25, 0xcc},	{0xb3, 0x08, 0x01, 0xcc},1277	{0xb3, 0x09, 0x0c, 0xcc},	{0xb3, 0x05, 0x00, 0xcc},1278	{0xb3, 0x06, 0x01, 0xcc},	{0xb3, 0x03, 0x1a, 0xcc},1279	{0xb3, 0x04, 0x15, 0xcc},	{0xb3, 0x20, 0x00, 0xcc},1280	{0xb3, 0x21, 0x00, 0xcc},	{0xb3, 0x22, 0x01, 0xcc},1281	{0xb3, 0x23, 0xe8, 0xcc},	{0xb8, 0x08, 0xe8, 0xcc},1282	{0xb3, 0x14, 0x00, 0xcc},	{0xb3, 0x15, 0x00, 0xcc},1283	{0xb3, 0x16, 0x02, 0xcc},	{0xb3, 0x17, 0x7f, 0xcc},1284	{0xb3, 0x34, 0x01, 0xcc},1285	{0xb3, 0x35, 0xf6, 0xcc},	/* i2c add: 76 */1286	{0xb3, 0x00, 0x27, 0xcc},	{0xbc, 0x00, 0x71, 0xcc},1287	{0xb8, 0x00, 0x21, 0xcc},	{0xb8, 0x27, 0x20, 0xcc},1288	{0xb8, 0x01, 0x79, 0xcc},	{0xb8, 0x81, 0x09, 0xcc},1289	{0xb8, 0x2c, 0x50, 0xcc},	{0xb8, 0x2d, 0xf8, 0xcc},1290	{0xb8, 0x2e, 0xf8, 0xcc},	{0xb8, 0x2f, 0xf8, 0xcc},1291	{0xb8, 0x30, 0x50, 0xcc},	{0xb8, 0x31, 0xf8, 0xcc},1292	{0xb8, 0x32, 0xf8, 0xcc},	{0xb8, 0x33, 0xf8, 0xcc},1293	{0xb8, 0x34, 0x50, 0xcc},	{0xb8, 0x35, 0x00, 0xcc},1294	{0xb8, 0x36, 0x00, 0xcc},	{0xb8, 0x37, 0x00, 0xcc},1295	{0x00, 0x1e, 0xc6, 0xaa},	{0x00, 0x20, 0x44, 0xaa},1296	{0x00, 0xad, 0x02, 0xaa},	{0x00, 0xae, 0x2c, 0xaa},1297	{0x00, 0x12, 0x08, 0xaa},	{0x00, 0x17, 0x41, 0xaa},1298	{0x00, 0x19, 0x41, 0xaa},	{0x00, 0x1e, 0x06, 0xaa},1299	{0x00, 0x21, 0x00, 0xaa},	{0x00, 0x36, 0xc0, 0xaa},1300	{0x00, 0x37, 0xc8, 0xaa},	{0x00, 0x3b, 0x36, 0xaa},1301	{0x00, 0x4b, 0xfe, 0xaa},	{0x00, 0x51, 0x1c, 0xaa},1302	{0x00, 0x52, 0x01, 0xaa},	{0x00, 0x55, 0x0a, 0xaa},1303	{0x00, 0x59, 0x02, 0xaa},	{0x00, 0x5a, 0x04, 0xaa},1304	{0x00, 0x5c, 0x10, 0xaa},	{0x00, 0x5d, 0x10, 0xaa},1305	{0x00, 0x5e, 0x10, 0xaa},	{0x00, 0x5f, 0x10, 0xaa},1306	{0x00, 0x61, 0x00, 0xaa},	{0x00, 0x62, 0x18, 0xaa},1307	{0x00, 0x63, 0x30, 0xaa},	{0x00, 0x70, 0x68, 0xaa},1308	{0x00, 0x80, 0x71, 0xaa},	{0x00, 0x81, 0x08, 0xaa},1309	{0x00, 0x82, 0x00, 0xaa},	{0x00, 0x83, 0x55, 0xaa},1310	{0x00, 0x84, 0x06, 0xaa},	{0x00, 0x85, 0x06, 0xaa},1311	{0x00, 0x86, 0x13, 0xaa},	{0x00, 0x87, 0x18, 0xaa},1312	{0x00, 0xaa, 0x3f, 0xaa},	{0x00, 0xab, 0x44, 0xaa},1313	{0x00, 0xb0, 0x68, 0xaa},	{0x00, 0xb5, 0x10, 0xaa},1314	{0x00, 0xb8, 0x20, 0xaa},	{0x00, 0xb9, 0xa0, 0xaa},1315	{0x00, 0xbc, 0x04, 0xaa},	{0x00, 0x8b, 0x40, 0xaa},1316	{0x00, 0x8c, 0x91, 0xaa},	{0x00, 0x8d, 0x8f, 0xaa},1317	{0x00, 0x8e, 0x91, 0xaa},	{0x00, 0x8f, 0x43, 0xaa},1318	{0x00, 0x90, 0x92, 0xaa},	{0x00, 0x91, 0x89, 0xaa},1319	{0x00, 0x92, 0x9d, 0xaa},	{0x00, 0x93, 0x46, 0xaa},1320	{0x00, 0xd6, 0x22, 0xaa},	{0x00, 0x73, 0x00, 0xaa},1321	{0x00, 0x74, 0x10, 0xaa},	{0x00, 0x75, 0x20, 0xaa},1322	{0x00, 0x76, 0x2b, 0xaa},	{0x00, 0x77, 0x36, 0xaa},1323	{0x00, 0x78, 0x49, 0xaa},	{0x00, 0x79, 0x5a, 0xaa},1324	{0x00, 0x7a, 0x7f, 0xaa},	{0x00, 0x7b, 0x9b, 0xaa},1325	{0x00, 0x7c, 0xba, 0xaa},	{0x00, 0x7d, 0xd4, 0xaa},1326	{0x00, 0x7e, 0xea, 0xaa},	{0x00, 0xd6, 0x62, 0xaa},1327	{0x00, 0x73, 0x00, 0xaa},	{0x00, 0x74, 0x10, 0xaa},1328	{0x00, 0x75, 0x20, 0xaa},	{0x00, 0x76, 0x2b, 0xaa},1329	{0x00, 0x77, 0x36, 0xaa},	{0x00, 0x78, 0x49, 0xaa},1330	{0x00, 0x79, 0x5a, 0xaa},	{0x00, 0x7a, 0x7f, 0xaa},1331	{0x00, 0x7b, 0x9b, 0xaa},	{0x00, 0x7c, 0xba, 0xaa},1332	{0x00, 0x7d, 0xd4, 0xaa},	{0x00, 0x7e, 0xea, 0xaa},1333	{0x00, 0xd6, 0xa2, 0xaa},	{0x00, 0x73, 0x00, 0xaa},1334	{0x00, 0x74, 0x10, 0xaa},	{0x00, 0x75, 0x20, 0xaa},1335	{0x00, 0x76, 0x2b, 0xaa},	{0x00, 0x77, 0x36, 0xaa},1336	{0x00, 0x78, 0x49, 0xaa},	{0x00, 0x79, 0x5a, 0xaa},1337	{0x00, 0x7a, 0x7f, 0xaa},	{0x00, 0x7b, 0x9b, 0xaa},1338	{0x00, 0x7c, 0xba, 0xaa},	{0x00, 0x7d, 0xd4, 0xaa},1339	{0x00, 0x7e, 0xea, 0xaa},1340	{0x00, 0x4c, 0x07, 0xaa},1341	{0x00, 0x4b, 0xe0, 0xaa},	{0x00, 0x4e, 0x77, 0xaa},1342	{0x00, 0x59, 0x02, 0xaa},	{0x00, 0x4d, 0x0a, 0xaa},1343/*	{0x00, 0xd1, 0x00, 0xaa},	{0x00, 0x20, 0xc4, 0xaa},1344	{0xb8, 0x8e, 0x00, 0xcc},	{0xb8, 0x8f, 0xff, 0xcc}, */1345	{0x00, 0xd1, 0x3c, 0xaa},	{0x00, 0x20, 0xc4, 0xaa},1346	{0xb8, 0x8e, 0x00, 0xcc},	{0xb8, 0x8f, 0xff, 0xcc},1347	{0xb8, 0xfe, 0x00, 0xcc},	{0xb8, 0xff, 0x28, 0xcc},1348	{0xb9, 0x00, 0x28, 0xcc},	{0xb9, 0x01, 0x28, 0xcc},1349	{0xb9, 0x02, 0x28, 0xcc},	{0xb9, 0x03, 0x00, 0xcc},1350	{0xb9, 0x04, 0x00, 0xcc},	{0xb9, 0x05, 0x3c, 0xcc},1351	{0xb9, 0x06, 0x3c, 0xcc},	{0xb9, 0x07, 0x3c, 0xcc},1352	{0xb9, 0x08, 0x3c, 0xcc},	{0x00, 0x05, 0x00, 0xaa},1353	{0xb3, 0x5c, 0x00, 0xcc},	{0xb3, 0x01, 0x41, 0xcc},1354	{}1355};1356static const u8 po3130_rundata[][4] = {1357	{0x00, 0x47, 0x45, 0xaa},	{0x00, 0x48, 0x9b, 0xaa},1358	{0x00, 0x49, 0x3a, 0xaa},	{0x00, 0x4a, 0x01, 0xaa},1359	{0x00, 0x44, 0x40, 0xaa},1360/*	{0x00, 0xd5, 0x7c, 0xaa}, */1361	{0x00, 0xad, 0x04, 0xaa},	{0x00, 0xae, 0x00, 0xaa},1362	{0x00, 0xb0, 0x78, 0xaa},	{0x00, 0x98, 0x02, 0xaa},1363	{0x00, 0x94, 0x25, 0xaa},	{0x00, 0x95, 0x25, 0xaa},1364	{0x00, 0x59, 0x68, 0xaa},	{0x00, 0x44, 0x20, 0xaa},1365	{0x00, 0x17, 0x50, 0xaa},	{0x00, 0x19, 0x50, 0xaa},1366	{0x00, 0xd1, 0x3c, 0xaa},	{0x00, 0xd1, 0x3c, 0xaa},1367	{0x00, 0x1e, 0x06, 0xaa},	{0x00, 0x1e, 0x06, 0xaa},1368	{}1369};1370 1371static const u8 po3130_initQVGA_data[][4] = {1372	{0xb0, 0x4d, 0x00, 0xcc},	{0xb3, 0x01, 0x01, 0xcc},1373	{0x00, 0x00, 0x50, 0xdd},	{0xb0, 0x03, 0x09, 0xcc},1374	{0xb3, 0x00, 0x04, 0xcc},	{0xb3, 0x00, 0x24, 0xcc},1375	{0xb3, 0x00, 0x25, 0xcc},	{0xb3, 0x08, 0x01, 0xcc},1376	{0xb3, 0x09, 0x0c, 0xcc},	{0xb3, 0x05, 0x00, 0xcc},1377	{0xb3, 0x06, 0x01, 0xcc},	{0xb3, 0x03, 0x1a, 0xcc},1378	{0xb3, 0x04, 0x15, 0xcc},	{0xb3, 0x20, 0x00, 0xcc},1379	{0xb3, 0x21, 0x00, 0xcc},	{0xb3, 0x22, 0x01, 0xcc},1380	{0xb3, 0x23, 0xe0, 0xcc},	{0xb8, 0x08, 0xe0, 0xcc},1381	{0xb3, 0x14, 0x00, 0xcc},	{0xb3, 0x15, 0x00, 0xcc},1382	{0xb3, 0x16, 0x02, 0xcc},	{0xb3, 0x17, 0x7f, 0xcc},1383	{0xb3, 0x34, 0x01, 0xcc},	{0xb3, 0x35, 0xf6, 0xcc},1384	{0xb3, 0x00, 0x27, 0xcc},	{0xbc, 0x00, 0xd1, 0xcc},1385	{0xb8, 0x00, 0x21, 0xcc},	{0xb8, 0x27, 0x20, 0xcc},1386	{0xb8, 0x01, 0x79, 0xcc},	{0xb8, 0x81, 0x09, 0xcc},1387	{0xb8, 0x2c, 0x50, 0xcc},	{0xb8, 0x2d, 0xf8, 0xcc},1388	{0xb8, 0x2e, 0xf8, 0xcc},	{0xb8, 0x2f, 0xf8, 0xcc},1389	{0xb8, 0x30, 0x50, 0xcc},	{0xb8, 0x31, 0xf8, 0xcc},1390	{0xb8, 0x32, 0xf8, 0xcc},	{0xb8, 0x33, 0xf8, 0xcc},1391	{0xb8, 0x34, 0x50, 0xcc},	{0xb8, 0x35, 0x00, 0xcc},1392	{0xb8, 0x36, 0x00, 0xcc},	{0xb8, 0x37, 0x00, 0xcc},1393	{0x00, 0x1e, 0xc6, 0xaa},	{0x00, 0x20, 0x44, 0xaa},1394	{0x00, 0xad, 0x02, 0xaa},	{0x00, 0xae, 0x2c, 0xaa},1395	{0x00, 0x12, 0x08, 0xaa},	{0x00, 0x17, 0x41, 0xaa},1396	{0x00, 0x19, 0x41, 0xaa},	{0x00, 0x1e, 0x06, 0xaa},1397	{0x00, 0x21, 0x00, 0xaa},	{0x00, 0x36, 0xc0, 0xaa},1398	{0x00, 0x37, 0xc8, 0xaa},	{0x00, 0x3b, 0x36, 0xaa},1399	{0x00, 0x4b, 0xfe, 0xaa},	{0x00, 0x51, 0x1c, 0xaa},1400	{0x00, 0x52, 0x01, 0xaa},	{0x00, 0x55, 0x0a, 0xaa},1401	{0x00, 0x59, 0x6f, 0xaa},	{0x00, 0x5a, 0x04, 0xaa},1402	{0x00, 0x5c, 0x10, 0xaa},	{0x00, 0x5d, 0x10, 0xaa},1403	{0x00, 0x5e, 0x10, 0xaa},	{0x00, 0x5f, 0x10, 0xaa},1404	{0x00, 0x61, 0x00, 0xaa},	{0x00, 0x62, 0x18, 0xaa},1405	{0x00, 0x63, 0x30, 0xaa},	{0x00, 0x70, 0x68, 0xaa},1406	{0x00, 0x80, 0x71, 0xaa},	{0x00, 0x81, 0x08, 0xaa},1407	{0x00, 0x82, 0x00, 0xaa},	{0x00, 0x83, 0x55, 0xaa},1408	{0x00, 0x84, 0x06, 0xaa},	{0x00, 0x85, 0x06, 0xaa},1409	{0x00, 0x86, 0x13, 0xaa},	{0x00, 0x87, 0x18, 0xaa},1410	{0x00, 0xaa, 0x3f, 0xaa},	{0x00, 0xab, 0x44, 0xaa},1411	{0x00, 0xb0, 0x68, 0xaa},	{0x00, 0xb5, 0x10, 0xaa},1412	{0x00, 0xb8, 0x20, 0xaa},	{0x00, 0xb9, 0xa0, 0xaa},1413	{0x00, 0xbc, 0x04, 0xaa},	{0x00, 0x8b, 0x40, 0xaa},1414	{0x00, 0x8c, 0x91, 0xaa},	{0x00, 0x8d, 0x8f, 0xaa},1415	{0x00, 0x8e, 0x91, 0xaa},	{0x00, 0x8f, 0x43, 0xaa},1416	{0x00, 0x90, 0x92, 0xaa},	{0x00, 0x91, 0x89, 0xaa},1417	{0x00, 0x92, 0x9d, 0xaa},	{0x00, 0x93, 0x46, 0xaa},1418	{0x00, 0xd6, 0x22, 0xaa},	{0x00, 0x73, 0x00, 0xaa},1419	{0x00, 0x74, 0x10, 0xaa},	{0x00, 0x75, 0x20, 0xaa},1420	{0x00, 0x76, 0x2b, 0xaa},	{0x00, 0x77, 0x36, 0xaa},1421	{0x00, 0x78, 0x49, 0xaa},	{0x00, 0x79, 0x5a, 0xaa},1422	{0x00, 0x7a, 0x7f, 0xaa},	{0x00, 0x7b, 0x9b, 0xaa},1423	{0x00, 0x7c, 0xba, 0xaa},	{0x00, 0x7d, 0xd4, 0xaa},1424	{0x00, 0x7e, 0xea, 0xaa},	{0x00, 0xd6, 0x62, 0xaa},1425	{0x00, 0x73, 0x00, 0xaa},	{0x00, 0x74, 0x10, 0xaa},1426	{0x00, 0x75, 0x20, 0xaa},	{0x00, 0x76, 0x2b, 0xaa},1427	{0x00, 0x77, 0x36, 0xaa},	{0x00, 0x78, 0x49, 0xaa},1428	{0x00, 0x79, 0x5a, 0xaa},	{0x00, 0x7a, 0x7f, 0xaa},1429	{0x00, 0x7b, 0x9b, 0xaa},	{0x00, 0x7c, 0xba, 0xaa},1430	{0x00, 0x7d, 0xd4, 0xaa},	{0x00, 0x7e, 0xea, 0xaa},1431	{0x00, 0xd6, 0xa2, 0xaa},	{0x00, 0x73, 0x00, 0xaa},1432	{0x00, 0x74, 0x10, 0xaa},	{0x00, 0x75, 0x20, 0xaa},1433	{0x00, 0x76, 0x2b, 0xaa},	{0x00, 0x77, 0x36, 0xaa},1434	{0x00, 0x78, 0x49, 0xaa},	{0x00, 0x79, 0x5a, 0xaa},1435	{0x00, 0x7a, 0x7f, 0xaa},	{0x00, 0x7b, 0x9b, 0xaa},1436	{0x00, 0x7c, 0xba, 0xaa},	{0x00, 0x7d, 0xd4, 0xaa},1437	{0x00, 0x7e, 0xea, 0xaa},	{0x00, 0x4c, 0x07, 0xaa},1438	{0x00, 0x4b, 0xe0, 0xaa},	{0x00, 0x4e, 0x77, 0xaa},1439	{0x00, 0x59, 0x66, 0xaa},	{0x00, 0x4d, 0x0a, 0xaa},1440	{0x00, 0xd1, 0x00, 0xaa},	{0x00, 0x20, 0xc4, 0xaa},1441	{0xb8, 0x8e, 0x00, 0xcc},	{0xb8, 0x8f, 0xff, 0xcc},1442	{0xb8, 0xfe, 0x00, 0xcc},	{0xb8, 0xff, 0x28, 0xcc},1443	{0xb9, 0x00, 0x28, 0xcc},	{0xb9, 0x01, 0x28, 0xcc},1444	{0xb9, 0x02, 0x28, 0xcc},	{0xb9, 0x03, 0x00, 0xcc},1445	{0xb9, 0x04, 0x00, 0xcc},	{0xb9, 0x05, 0x3c, 0xcc},1446	{0xb9, 0x06, 0x3c, 0xcc},	{0xb9, 0x07, 0x3c, 0xcc},1447	{0xb9, 0x08, 0x3c, 0xcc},	{0xbc, 0x02, 0x18, 0xcc},1448	{0xbc, 0x03, 0x50, 0xcc},	{0xbc, 0x04, 0x18, 0xcc},1449	{0xbc, 0x05, 0x00, 0xcc},	{0xbc, 0x06, 0x00, 0xcc},1450	{0xbc, 0x08, 0x30, 0xcc},	{0xbc, 0x09, 0x40, 0xcc},1451	{0xbc, 0x0a, 0x10, 0xcc},	{0xbc, 0x0b, 0x00, 0xcc},1452	{0xbc, 0x0c, 0x00, 0xcc},	{0x00, 0x05, 0x00, 0xaa},1453	{0xb3, 0x5c, 0x00, 0xcc},	{0xb3, 0x01, 0x41, 0xcc},1454	{}1455};1456 1457static const u8 hv7131r_gamma[17] = {1458	0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,1459	0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff1460};1461static const u8 hv7131r_matrix[9] = {1462	0x5f, 0xec, 0xf5, 0xf1, 0x5a, 0xf5, 0xf1, 0xec, 0x631463};1464static const u8 hv7131r_initVGA_data[][4] = {1465	{0xb3, 0x01, 0x01, 0xcc},1466	{0xb0, 0x03, 0x19, 0xcc},1467	{0xb0, 0x04, 0x02, 0xcc},1468	{0x00, 0x00, 0x20, 0xdd},1469	{0xb3, 0x00, 0x24, 0xcc},1470	{0xb3, 0x00, 0x25, 0xcc},1471	{0xb3, 0x08, 0x01, 0xcc},1472	{0xb3, 0x09, 0x0c, 0xcc},1473	{0xb3, 0x05, 0x01, 0xcc},1474	{0xb3, 0x06, 0x03, 0xcc},1475	{0xb3, 0x01, 0x45, 0xcc},1476	{0xb3, 0x03, 0x0b, 0xcc},1477	{0xb3, 0x04, 0x05, 0xcc},1478	{0xb3, 0x20, 0x00, 0xcc},1479	{0xb3, 0x21, 0x00, 0xcc},1480	{0xb3, 0x22, 0x01, 0xcc},1481	{0xb3, 0x23, 0xe0, 0xcc},1482	{0xb3, 0x14, 0x00, 0xcc},1483	{0xb3, 0x15, 0x02, 0xcc},1484	{0xb3, 0x16, 0x02, 0xcc},1485	{0xb3, 0x17, 0x7f, 0xcc},1486	{0xb3, 0x34, 0x01, 0xcc},1487	{0xb3, 0x35, 0x91, 0xcc},	/* i2c add: 11 */1488	{0xb3, 0x00, 0x27, 0xcc},1489	{0xbc, 0x00, 0x73, 0xcc},1490	{0xb8, 0x00, 0x23, 0xcc},1491	{0xb8, 0x2c, 0x50, 0xcc},1492	{0xb8, 0x2d, 0xf8, 0xcc},1493	{0xb8, 0x2e, 0xf8, 0xcc},1494	{0xb8, 0x2f, 0xf8, 0xcc},1495	{0xb8, 0x30, 0x50, 0xcc},1496	{0xb8, 0x31, 0xf8, 0xcc},1497	{0xb8, 0x32, 0xf8, 0xcc},1498	{0xb8, 0x33, 0xf8, 0xcc},1499	{0xb8, 0x34, 0x58, 0xcc},1500	{0xb8, 0x35, 0x00, 0xcc},1501	{0xb8, 0x36, 0x00, 0xcc},1502	{0xb8, 0x37, 0x00, 0xcc},1503	{0xb8, 0x27, 0x20, 0xcc},1504	{0xb8, 0x01, 0x7d, 0xcc},1505	{0xb8, 0x81, 0x09, 0xcc},1506	{0xb3, 0x01, 0x41, 0xcc},1507	{0xb8, 0x8e, 0x00, 0xcc},1508	{0xb8, 0x8f, 0xff, 0xcc},1509	{0x00, 0x01, 0x0c, 0xaa},1510	{0x00, 0x14, 0x01, 0xaa},1511	{0x00, 0x15, 0xe6, 0xaa},1512	{0x00, 0x16, 0x02, 0xaa},1513	{0x00, 0x17, 0x86, 0xaa},1514	{0x00, 0x23, 0x00, 0xaa},1515	{0x00, 0x25, 0x03, 0xaa},1516	{0x00, 0x26, 0xa9, 0xaa},1517	{0x00, 0x27, 0x80, 0xaa},1518	{0x00, 0x30, 0x18, 0xaa},1519	{0xb6, 0x00, 0x00, 0xcc},1520	{0xb6, 0x03, 0x02, 0xcc},1521	{0xb6, 0x02, 0x80, 0xcc},1522	{0xb6, 0x05, 0x01, 0xcc},1523	{0xb6, 0x04, 0xe0, 0xcc},1524	{0xb6, 0x12, 0x78, 0xcc},1525	{0xb6, 0x18, 0x02, 0xcc},1526	{0xb6, 0x17, 0x58, 0xcc},1527	{0xb6, 0x16, 0x00, 0xcc},1528	{0xb6, 0x22, 0x12, 0xcc},1529	{0xb6, 0x23, 0x0b, 0xcc},1530	{0xb3, 0x02, 0x02, 0xcc},1531	{0xbf, 0xc0, 0x39, 0xcc},1532	{0xbf, 0xc1, 0x04, 0xcc},1533	{0xbf, 0xcc, 0x10, 0xcc},1534	{0xb6, 0x12, 0xf8, 0xcc},1535	{0xb6, 0x13, 0x13, 0xcc},1536	{0xb9, 0x12, 0x00, 0xcc},1537	{0xb9, 0x13, 0x0a, 0xcc},1538	{0xb9, 0x14, 0x0a, 0xcc},1539	{0xb9, 0x15, 0x0a, 0xcc},1540	{0xb9, 0x16, 0x0a, 0xcc},1541	{0xb8, 0x0c, 0x20, 0xcc},1542	{0xb8, 0x0d, 0x70, 0xcc},1543	{0xb9, 0x18, 0x00, 0xcc},1544	{0xb9, 0x19, 0x0f, 0xcc},1545	{0xb9, 0x1a, 0x0f, 0xcc},1546	{0xb9, 0x1b, 0x0f, 0xcc},1547	{0xb9, 0x1c, 0x0f, 0xcc},1548	{0xb3, 0x5c, 0x01, 0xcc},1549	{}1550};1551 1552static const u8 hv7131r_initQVGA_data[][4] = {1553	{0xb3, 0x01, 0x01, 0xcc},1554	{0xb0, 0x03, 0x19, 0xcc},1555	{0xb0, 0x04, 0x02, 0xcc},1556	{0x00, 0x00, 0x20, 0xdd},1557	{0xb3, 0x00, 0x24, 0xcc},1558	{0xb3, 0x00, 0x25, 0xcc},1559	{0xb3, 0x08, 0x01, 0xcc},1560	{0xb3, 0x09, 0x0c, 0xcc},1561	{0xb3, 0x05, 0x01, 0xcc},1562	{0xb3, 0x06, 0x03, 0xcc},1563	{0xb3, 0x01, 0x45, 0xcc},1564	{0xb3, 0x03, 0x0b, 0xcc},1565	{0xb3, 0x04, 0x05, 0xcc},1566	{0xb3, 0x20, 0x00, 0xcc},1567	{0xb3, 0x21, 0x00, 0xcc},1568	{0xb3, 0x22, 0x01, 0xcc},1569	{0xb3, 0x23, 0xe0, 0xcc},1570	{0xb3, 0x14, 0x00, 0xcc},1571	{0xb3, 0x15, 0x02, 0xcc},1572	{0xb3, 0x16, 0x02, 0xcc},1573	{0xb3, 0x17, 0x7f, 0xcc},1574	{0xb3, 0x34, 0x01, 0xcc},1575	{0xb3, 0x35, 0x91, 0xcc},1576	{0xb3, 0x00, 0x27, 0xcc},1577	{0xbc, 0x00, 0xd3, 0xcc},1578	{0xb8, 0x00, 0x23, 0xcc},1579	{0xb8, 0x2c, 0x50, 0xcc},1580	{0xb8, 0x2d, 0xf8, 0xcc},1581	{0xb8, 0x2e, 0xf8, 0xcc},1582	{0xb8, 0x2f, 0xf8, 0xcc},1583	{0xb8, 0x30, 0x50, 0xcc},1584	{0xb8, 0x31, 0xf8, 0xcc},1585	{0xb8, 0x32, 0xf8, 0xcc},1586	{0xb8, 0x33, 0xf8, 0xcc},1587	{0xb8, 0x34, 0x58, 0xcc},1588	{0xb8, 0x35, 0x00, 0xcc},1589	{0xb8, 0x36, 0x00, 0xcc},1590	{0xb8, 0x37, 0x00, 0xcc},1591	{0xb8, 0x27, 0x20, 0xcc},1592	{0xb8, 0x01, 0x7d, 0xcc},1593	{0xb8, 0x81, 0x09, 0xcc},1594	{0xb3, 0x01, 0x41, 0xcc},1595	{0xb8, 0x8e, 0x00, 0xcc},1596	{0xb8, 0x8f, 0xff, 0xcc},1597	{0x00, 0x01, 0x0c, 0xaa},1598	{0x00, 0x14, 0x01, 0xaa},1599	{0x00, 0x15, 0xe6, 0xaa},1600	{0x00, 0x16, 0x02, 0xaa},1601	{0x00, 0x17, 0x86, 0xaa},1602	{0x00, 0x23, 0x00, 0xaa},1603	{0x00, 0x25, 0x03, 0xaa},1604	{0x00, 0x26, 0xa9, 0xaa},1605	{0x00, 0x27, 0x80, 0xaa},1606	{0x00, 0x30, 0x18, 0xaa},1607	{0xb6, 0x00, 0x00, 0xcc},1608	{0xb6, 0x03, 0x01, 0xcc},1609	{0xb6, 0x02, 0x40, 0xcc},1610	{0xb6, 0x05, 0x00, 0xcc},1611	{0xb6, 0x04, 0xf0, 0xcc},1612	{0xb6, 0x12, 0x78, 0xcc},1613	{0xb6, 0x18, 0x00, 0xcc},1614	{0xb6, 0x17, 0x96, 0xcc},1615	{0xb6, 0x16, 0x00, 0xcc},1616	{0xb6, 0x22, 0x12, 0xcc},1617	{0xb6, 0x23, 0x0b, 0xcc},1618	{0xb3, 0x02, 0x02, 0xcc},1619	{0xbf, 0xc0, 0x39, 0xcc},1620	{0xbf, 0xc1, 0x04, 0xcc},1621	{0xbf, 0xcc, 0x10, 0xcc},1622	{0xbc, 0x02, 0x18, 0xcc},1623	{0xbc, 0x03, 0x50, 0xcc},1624	{0xbc, 0x04, 0x18, 0xcc},1625	{0xbc, 0x05, 0x00, 0xcc},1626	{0xbc, 0x06, 0x00, 0xcc},1627	{0xbc, 0x08, 0x30, 0xcc},1628	{0xbc, 0x09, 0x40, 0xcc},1629	{0xbc, 0x0a, 0x10, 0xcc},1630	{0xbc, 0x0b, 0x00, 0xcc},1631	{0xbc, 0x0c, 0x00, 0xcc},1632	{0xb9, 0x12, 0x00, 0xcc},1633	{0xb9, 0x13, 0x0a, 0xcc},1634	{0xb9, 0x14, 0x0a, 0xcc},1635	{0xb9, 0x15, 0x0a, 0xcc},1636	{0xb9, 0x16, 0x0a, 0xcc},1637	{0xb9, 0x18, 0x00, 0xcc},1638	{0xb9, 0x19, 0x0f, 0xcc},1639	{0xb8, 0x0c, 0x20, 0xcc},1640	{0xb8, 0x0d, 0x70, 0xcc},1641	{0xb9, 0x1a, 0x0f, 0xcc},1642	{0xb9, 0x1b, 0x0f, 0xcc},1643	{0xb9, 0x1c, 0x0f, 0xcc},1644	{0xb6, 0x12, 0xf8, 0xcc},1645	{0xb6, 0x13, 0x13, 0xcc},1646	{0xb3, 0x5c, 0x01, 0xcc},1647	{}1648};1649 1650static const u8 ov7660_gamma[17] = {1651	0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,1652	0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff1653};1654static const u8 ov7660_matrix[9] = {1655	0x5a, 0xf0, 0xf6, 0xf3, 0x57, 0xf6, 0xf3, 0xef, 0x621656};1657static const u8 ov7660_initVGA_data[][4] = {1658	{0xb0, 0x4d, 0x00, 0xcc},	{0xb3, 0x01, 0x01, 0xcc},1659	{0x00, 0x00, 0x50, 0xdd},1660	{0xb0, 0x03, 0x01, 0xcc},1661	{0xb3, 0x00, 0x21, 0xcc},	{0xb3, 0x00, 0x26, 0xcc},1662	{0xb3, 0x05, 0x01, 0xcc},1663	{0xb3, 0x06, 0x03, 0xcc},1664	{0xb3, 0x03, 0x1f, 0xcc},	{0xb3, 0x04, 0x05, 0xcc},1665	{0xb3, 0x05, 0x00, 0xcc},1666	{0xb3, 0x06, 0x01, 0xcc},1667	{0xb3, 0x15, 0x00, 0xcc},/* 0xb315  <-0 href startl */1668	{0xb3, 0x16, 0x02, 0xcc},	{0xb3, 0x17, 0x7f, 0xcc},1669	{0xb3, 0x21, 0x00, 0xcc},1670	{0xb3, 0x23, 0xe0, 0xcc},	{0xb3, 0x1d, 0x01, 0xcc},1671	{0xb3, 0x1f, 0x02, 0xcc},1672	{0xb3, 0x34, 0x01, 0xcc},1673	{0xb3, 0x35, 0xa1, 0xcc},	/* i2c add: 21 */1674	{0xb3, 0x00, 0x26, 0xcc},1675	{0xb8, 0x00, 0x33, 0xcc}, /* 13 */1676	{0xb8, 0x01, 0x7d, 0xcc},1677	{0xbc, 0x00, 0x73, 0xcc},	{0xb8, 0x81, 0x09, 0xcc},1678	{0xb8, 0x27, 0x20, 0xcc},1679	{0xb8, 0x8f, 0x50, 0xcc},1680	{0x00, 0x01, 0x80, 0xaa},	{0x00, 0x02, 0x80, 0xaa},1681	{0x00, 0x12, 0x80, 0xaa},1682	{0x00, 0x12, 0x05, 0xaa},1683	{0x00, 0x1e, 0x01, 0xaa},	/* MVFP */1684	{0x00, 0x3d, 0x40, 0xaa}, /* 0x3d <-40 gamma 01 */1685	{0x00, 0x41, 0x00, 0xaa}, /* edge 00 */1686	{0x00, 0x0d, 0x48, 0xaa},	{0x00, 0x0e, 0x04, 0xaa},1687	{0x00, 0x13, 0xa7, 0xaa},1688	{0x00, 0x40, 0xc1, 0xaa},	{0x00, 0x35, 0x00, 0xaa},1689	{0x00, 0x36, 0x00, 0xaa},1690	{0x00, 0x3c, 0x68, 0xaa},	{0x00, 0x1b, 0x05, 0xaa},1691	{0x00, 0x39, 0x43, 0xaa},1692	{0x00, 0x8d, 0xcf, 0xaa},1693	{0x00, 0x8b, 0xcc, 0xaa},	{0x00, 0x8c, 0xcc, 0xaa},1694	{0x00, 0x0f, 0x62, 0xaa},1695	{0x00, 0x35, 0x84, 0xaa},1696	{0x00, 0x3b, 0x08, 0xaa}, /* 0 * Nightframe 1/4 + 50Hz -> 0xC8 */1697	{0x00, 0x3a, 0x00, 0xaa}, /* mx change yuyv format 00, 04, 01; 08, 0c*/1698	{0x00, 0x14, 0x2a, 0xaa}, /* agc ampli */1699	{0x00, 0x9e, 0x40, 0xaa},	{0xb8, 0x8f, 0x50, 0xcc},1700	{0x00, 0x01, 0x80, 0xaa},1701	{0x00, 0x02, 0x80, 0xaa},1702	{0xb8, 0xfe, 0x00, 0xcc},	{0xb8, 0xff, 0x28, 0xcc},1703	{0xb9, 0x00, 0x28, 0xcc},1704	{0xb9, 0x01, 0x28, 0xcc},	{0xb9, 0x02, 0x28, 0xcc},1705	{0xb9, 0x03, 0x00, 0xcc},1706	{0xb9, 0x04, 0x00, 0xcc},1707	{0xb9, 0x05, 0x3c, 0xcc},	{0xb9, 0x06, 0x3c, 0xcc},1708	{0xb9, 0x07, 0x3c, 0xcc},1709	{0xb9, 0x08, 0x3c, 0xcc},1710 1711	{0xb8, 0x8e, 0x00, 0xcc},	{0xb8, 0x8f, 0xff, 0xcc},1712 1713	{0x00, 0x29, 0x3c, 0xaa},	{0xb3, 0x01, 0x45, 0xcc},1714	{}1715};1716static const u8 ov7660_initQVGA_data[][4] = {1717	{0xb0, 0x4d, 0x00, 0xcc},	{0xb3, 0x01, 0x01, 0xcc},1718	{0x00, 0x00, 0x50, 0xdd},	{0xb0, 0x03, 0x01, 0xcc},1719	{0xb3, 0x00, 0x21, 0xcc},	{0xb3, 0x00, 0x26, 0xcc},1720	{0xb3, 0x05, 0x01, 0xcc},	{0xb3, 0x06, 0x03, 0xcc},1721	{0xb3, 0x03, 0x1f, 0xcc},	{0xb3, 0x04, 0x05, 0xcc},1722	{0xb3, 0x05, 0x00, 0xcc},	{0xb3, 0x06, 0x01, 0xcc},1723	{0xb3, 0x15, 0x00, 0xcc},/* 0xb315  <-0 href startl */1724	{0xb3, 0x16, 0x02, 0xcc},	{0xb3, 0x17, 0x7f, 0xcc},1725	{0xb3, 0x21, 0x00, 0xcc},1726	{0xb3, 0x23, 0xe0, 0xcc},	{0xb3, 0x1d, 0x01, 0xcc},1727	{0xb3, 0x1f, 0x02, 0xcc},	{0xb3, 0x34, 0x01, 0xcc},1728	{0xb3, 0x35, 0xa1, 0xcc},	{0xb3, 0x00, 0x26, 0xcc},1729	{0xb8, 0x00, 0x33, 0xcc}, /* 13 */1730	{0xb8, 0x01, 0x7d, 0xcc},1731/* sizer */1732	{0xbc, 0x00, 0xd3, 0xcc},1733	{0xb8, 0x81, 0x09, 0xcc},	{0xb8, 0x81, 0x09, 0xcc},1734	{0xb8, 0x27, 0x20, 0xcc},	{0xb8, 0x8f, 0x50, 0xcc},1735	{0x00, 0x01, 0x80, 0xaa},	{0x00, 0x02, 0x80, 0xaa},1736	{0x00, 0x12, 0x80, 0xaa},	{0x00, 0x12, 0x05, 0xaa},1737	{0x00, 0x1e, 0x01, 0xaa},	/* MVFP */1738	{0x00, 0x3d, 0x40, 0xaa}, /* 0x3d <-40 gamma 01 */1739	{0x00, 0x41, 0x00, 0xaa}, /* edge 00 */1740	{0x00, 0x0d, 0x48, 0xaa},	{0x00, 0x0e, 0x04, 0xaa},1741	{0x00, 0x13, 0xa7, 0xaa},1742	{0x00, 0x40, 0xc1, 0xaa},	{0x00, 0x35, 0x00, 0xaa},1743	{0x00, 0x36, 0x00, 0xaa},1744	{0x00, 0x3c, 0x68, 0xaa},	{0x00, 0x1b, 0x05, 0xaa},1745	{0x00, 0x39, 0x43, 0xaa},	{0x00, 0x8d, 0xcf, 0xaa},1746	{0x00, 0x8b, 0xcc, 0xaa},	{0x00, 0x8c, 0xcc, 0xaa},1747	{0x00, 0x0f, 0x62, 0xaa},	{0x00, 0x35, 0x84, 0xaa},1748	{0x00, 0x3b, 0x08, 0xaa}, /* 0  * Nightframe 1/4 + 50Hz -> 0xC8 */1749	{0x00, 0x3a, 0x00, 0xaa}, /* mx change yuyv format 00, 04, 01; 08, 0c*/1750	{0x00, 0x14, 0x2a, 0xaa}, /* agc ampli */1751	{0x00, 0x9e, 0x40, 0xaa},	{0xb8, 0x8f, 0x50, 0xcc},1752	{0x00, 0x01, 0x80, 0xaa},1753	{0x00, 0x02, 0x80, 0xaa},1754/* sizer filters */1755	{0xbc, 0x02, 0x08, 0xcc},1756	{0xbc, 0x03, 0x70, 0xcc},1757	{0xb8, 0x35, 0x00, 0xcc},1758	{0xb8, 0x36, 0x00, 0xcc},1759	{0xb8, 0x37, 0x00, 0xcc},1760	{0xbc, 0x04, 0x08, 0xcc},1761	{0xbc, 0x05, 0x00, 0xcc},1762	{0xbc, 0x06, 0x00, 0xcc},1763	{0xbc, 0x08, 0x3c, 0xcc},1764	{0xbc, 0x09, 0x40, 0xcc},1765	{0xbc, 0x0a, 0x04, 0xcc},1766	{0xbc, 0x0b, 0x00, 0xcc},1767	{0xbc, 0x0c, 0x00, 0xcc},1768/* */1769	{0xb8, 0xfe, 0x00, 0xcc},1770	{0xb8, 0xff, 0x28, 0xcc},1771/* */1772	{0xb9, 0x00, 0x28, 0xcc},	{0xb9, 0x01, 0x28, 0xcc},1773	{0xb9, 0x02, 0x28, 0xcc},	{0xb9, 0x03, 0x00, 0xcc},1774	{0xb9, 0x04, 0x00, 0xcc},	{0xb9, 0x05, 0x3c, 0xcc},1775	{0xb9, 0x06, 0x3c, 0xcc},	{0xb9, 0x07, 0x3c, 0xcc},1776	{0xb9, 0x08, 0x3c, 0xcc},1777/* */1778	{0xb8, 0x8e, 0x00, 0xcc},1779	{0xb8, 0x8f, 0xff, 0xcc}, /* ff */1780	{0x00, 0x29, 0x3c, 0xaa},1781	{0xb3, 0x01, 0x45, 0xcc}, /* 45 */1782	{}1783};1784 1785static const u8 ov7660_50HZ[][4] = {1786	{0x00, 0x3b, 0x08, 0xaa},1787	{0x00, 0x9d, 0x40, 0xaa},1788	{0x00, 0x13, 0xa7, 0xaa},1789	{}1790};1791 1792static const u8 ov7660_60HZ[][4] = {1793	{0x00, 0x3b, 0x00, 0xaa},1794	{0x00, 0x9e, 0x40, 0xaa},1795	{0x00, 0x13, 0xa7, 0xaa},1796	{}1797};1798 1799static const u8 ov7660_NoFlicker[][4] = {1800	{0x00, 0x13, 0x87, 0xaa},1801	{}1802};1803 1804static const u8 ov7670_InitVGA[][4] = {1805	{0xb3, 0x01, 0x05, 0xcc},1806	{0x00, 0x00, 0x30, 0xdd},1807	{0xb0, 0x03, 0x19, 0xcc},1808	{0x00, 0x00, 0x10, 0xdd},1809	{0xb0, 0x04, 0x02, 0xcc},1810	{0x00, 0x00, 0x10, 0xdd},1811	{0xb3, 0x00, 0x66, 0xcc},1812	{0xb3, 0x00, 0x67, 0xcc},1813	{0xb0, 0x16, 0x01, 0xcc},1814	{0xb3, 0x35, 0xa1, 0xcc},	/* i2c add: 21 */1815	{0xb3, 0x34, 0x01, 0xcc},1816	{0xb3, 0x05, 0x01, 0xcc},1817	{0xb3, 0x06, 0x01, 0xcc},1818	{0xb3, 0x08, 0x01, 0xcc},1819	{0xb3, 0x09, 0x0c, 0xcc},1820	{0xb3, 0x02, 0x02, 0xcc},1821	{0xb3, 0x03, 0x1f, 0xcc},1822	{0xb3, 0x14, 0x00, 0xcc},1823	{0xb3, 0x15, 0x00, 0xcc},1824	{0xb3, 0x16, 0x02, 0xcc},1825	{0xb3, 0x17, 0x7f, 0xcc},1826	{0xb3, 0x04, 0x05, 0xcc},1827	{0xb3, 0x20, 0x00, 0xcc},1828	{0xb3, 0x21, 0x00, 0xcc},1829	{0xb3, 0x22, 0x01, 0xcc},1830	{0xb3, 0x23, 0xe0, 0xcc},1831	{0xbc, 0x00, 0x41, 0xcc},1832	{0xbc, 0x01, 0x01, 0xcc},1833	{0x00, 0x12, 0x80, 0xaa},1834	{0x00, 0x00, 0x20, 0xdd},1835	{0x00, 0x12, 0x00, 0xaa},1836	{0x00, 0x11, 0x40, 0xaa},1837	{0x00, 0x6b, 0x0a, 0xaa},1838	{0x00, 0x3a, 0x04, 0xaa},1839	{0x00, 0x40, 0xc0, 0xaa},1840	{0x00, 0x8c, 0x00, 0xaa},1841	{0x00, 0x7a, 0x29, 0xaa},1842	{0x00, 0x7b, 0x0e, 0xaa},1843	{0x00, 0x7c, 0x1a, 0xaa},1844	{0x00, 0x7d, 0x31, 0xaa},1845	{0x00, 0x7e, 0x53, 0xaa},1846	{0x00, 0x7f, 0x60, 0xaa},1847	{0x00, 0x80, 0x6b, 0xaa},1848	{0x00, 0x81, 0x73, 0xaa},1849	{0x00, 0x82, 0x7b, 0xaa},1850	{0x00, 0x83, 0x82, 0xaa},1851	{0x00, 0x84, 0x89, 0xaa},1852	{0x00, 0x85, 0x96, 0xaa},1853	{0x00, 0x86, 0xa1, 0xaa},1854	{0x00, 0x87, 0xb7, 0xaa},1855	{0x00, 0x88, 0xcc, 0xaa},1856	{0x00, 0x89, 0xe1, 0xaa},1857	{0x00, 0x13, 0xe0, 0xaa},1858	{0x00, 0x00, 0x00, 0xaa},1859	{0x00, 0x10, 0x00, 0xaa},1860	{0x00, 0x0d, 0x40, 0xaa},1861	{0x00, 0x14, 0x28, 0xaa},1862	{0x00, 0xa5, 0x05, 0xaa},1863	{0x00, 0xab, 0x07, 0xaa},1864	{0x00, 0x24, 0x95, 0xaa},1865	{0x00, 0x25, 0x33, 0xaa},1866	{0x00, 0x26, 0xe3, 0xaa},1867	{0x00, 0x9f, 0x88, 0xaa},1868	{0x00, 0xa0, 0x78, 0xaa},1869	{0x00, 0x55, 0x90, 0xaa},1870	{0x00, 0xa1, 0x03, 0xaa},1871	{0x00, 0xa6, 0xe0, 0xaa},1872	{0x00, 0xa7, 0xd8, 0xaa},1873	{0x00, 0xa8, 0xf0, 0xaa},1874	{0x00, 0xa9, 0x90, 0xaa},1875	{0x00, 0xaa, 0x14, 0xaa},1876	{0x00, 0x13, 0xe5, 0xaa},1877	{0x00, 0x0e, 0x61, 0xaa},1878	{0x00, 0x0f, 0x4b, 0xaa},1879	{0x00, 0x16, 0x02, 0xaa},1880	{0x00, 0x1e, 0x07, 0xaa},	/* MVFP */1881	{0x00, 0x21, 0x02, 0xaa},1882	{0x00, 0x22, 0x91, 0xaa},1883	{0x00, 0x29, 0x07, 0xaa},1884	{0x00, 0x33, 0x0b, 0xaa},1885	{0x00, 0x35, 0x0b, 0xaa},1886	{0x00, 0x37, 0x1d, 0xaa},1887	{0x00, 0x38, 0x71, 0xaa},1888	{0x00, 0x39, 0x2a, 0xaa},1889	{0x00, 0x3c, 0x78, 0xaa},1890	{0x00, 0x4d, 0x40, 0xaa},1891	{0x00, 0x4e, 0x20, 0xaa},1892	{0x00, 0x74, 0x19, 0xaa},1893	{0x00, 0x8d, 0x4f, 0xaa},1894	{0x00, 0x8e, 0x00, 0xaa},1895	{0x00, 0x8f, 0x00, 0xaa},1896	{0x00, 0x90, 0x00, 0xaa},1897	{0x00, 0x91, 0x00, 0xaa},1898	{0x00, 0x96, 0x00, 0xaa},1899	{0x00, 0x9a, 0x80, 0xaa},1900	{0x00, 0xb0, 0x84, 0xaa},1901	{0x00, 0xb1, 0x0c, 0xaa},1902	{0x00, 0xb2, 0x0e, 0xaa},1903	{0x00, 0xb3, 0x82, 0xaa},1904	{0x00, 0xb8, 0x0a, 0xaa},1905	{0x00, 0x43, 0x14, 0xaa},1906	{0x00, 0x44, 0xf0, 0xaa},1907	{0x00, 0x45, 0x45, 0xaa},1908	{0x00, 0x46, 0x63, 0xaa},1909	{0x00, 0x47, 0x2d, 0xaa},1910	{0x00, 0x48, 0x46, 0xaa},1911	{0x00, 0x59, 0x88, 0xaa},1912	{0x00, 0x5a, 0xa0, 0xaa},1913	{0x00, 0x5b, 0xc6, 0xaa},1914	{0x00, 0x5c, 0x7d, 0xaa},1915	{0x00, 0x5d, 0x5f, 0xaa},1916	{0x00, 0x5e, 0x19, 0xaa},1917	{0x00, 0x6c, 0x0a, 0xaa},1918	{0x00, 0x6d, 0x55, 0xaa},1919	{0x00, 0x6e, 0x11, 0xaa},1920	{0x00, 0x6f, 0x9e, 0xaa},1921	{0x00, 0x69, 0x00, 0xaa},1922	{0x00, 0x6a, 0x40, 0xaa},1923	{0x00, 0x01, 0x40, 0xaa},1924	{0x00, 0x02, 0x40, 0xaa},1925	{0x00, 0x13, 0xe7, 0xaa},1926	{0x00, 0x5f, 0xf0, 0xaa},1927	{0x00, 0x60, 0xf0, 0xaa},1928	{0x00, 0x61, 0xf0, 0xaa},1929	{0x00, 0x27, 0xa0, 0xaa},1930	{0x00, 0x28, 0x80, 0xaa},1931	{0x00, 0x2c, 0x90, 0xaa},1932	{0x00, 0x4f, 0x66, 0xaa},1933	{0x00, 0x50, 0x66, 0xaa},1934	{0x00, 0x51, 0x00, 0xaa},1935	{0x00, 0x52, 0x22, 0xaa},1936	{0x00, 0x53, 0x5e, 0xaa},1937	{0x00, 0x54, 0x80, 0xaa},1938	{0x00, 0x58, 0x9e, 0xaa},1939	{0x00, 0x41, 0x08, 0xaa},1940	{0x00, 0x3f, 0x00, 0xaa},1941	{0x00, 0x75, 0x85, 0xaa},1942	{0x00, 0x76, 0xe1, 0xaa},1943	{0x00, 0x4c, 0x00, 0xaa},1944	{0x00, 0x77, 0x0a, 0xaa},1945	{0x00, 0x3d, 0x88, 0xaa},1946	{0x00, 0x4b, 0x09, 0xaa},1947	{0x00, 0xc9, 0x60, 0xaa},1948	{0x00, 0x41, 0x38, 0xaa},1949	{0x00, 0x62, 0x30, 0xaa},1950	{0x00, 0x63, 0x30, 0xaa},1951	{0x00, 0x64, 0x08, 0xaa},1952	{0x00, 0x94, 0x07, 0xaa},1953	{0x00, 0x95, 0x0b, 0xaa},1954	{0x00, 0x65, 0x00, 0xaa},1955	{0x00, 0x66, 0x05, 0xaa},1956	{0x00, 0x56, 0x50, 0xaa},1957	{0x00, 0x34, 0x11, 0xaa},1958	{0x00, 0xa4, 0x88, 0xaa},1959	{0x00, 0x96, 0x00, 0xaa},1960	{0x00, 0x97, 0x30, 0xaa},1961	{0x00, 0x98, 0x20, 0xaa},1962	{0x00, 0x99, 0x30, 0xaa},1963	{0x00, 0x9a, 0x84, 0xaa},1964	{0x00, 0x9b, 0x29, 0xaa},1965	{0x00, 0x9c, 0x03, 0xaa},1966	{0x00, 0x78, 0x04, 0xaa},1967	{0x00, 0x79, 0x01, 0xaa},1968	{0x00, 0xc8, 0xf0, 0xaa},1969	{0x00, 0x79, 0x0f, 0xaa},1970	{0x00, 0xc8, 0x00, 0xaa},1971	{0x00, 0x79, 0x10, 0xaa},1972	{0x00, 0xc8, 0x7e, 0xaa},1973	{0x00, 0x79, 0x0a, 0xaa},1974	{0x00, 0xc8, 0x80, 0xaa},1975	{0x00, 0x79, 0x0b, 0xaa},1976	{0x00, 0xc8, 0x01, 0xaa},1977	{0x00, 0x79, 0x0c, 0xaa},1978	{0x00, 0xc8, 0x0f, 0xaa},1979	{0x00, 0x79, 0x0d, 0xaa},1980	{0x00, 0xc8, 0x20, 0xaa},1981	{0x00, 0x79, 0x09, 0xaa},1982	{0x00, 0xc8, 0x80, 0xaa},1983	{0x00, 0x79, 0x02, 0xaa},1984	{0x00, 0xc8, 0xc0, 0xaa},1985	{0x00, 0x79, 0x03, 0xaa},1986	{0x00, 0xc8, 0x40, 0xaa},1987	{0x00, 0x79, 0x05, 0xaa},1988	{0x00, 0xc8, 0x30, 0xaa},1989	{0x00, 0x79, 0x26, 0xaa},1990	{0x00, 0x11, 0x40, 0xaa},1991	{0x00, 0x3a, 0x04, 0xaa},1992	{0x00, 0x12, 0x00, 0xaa},1993	{0x00, 0x40, 0xc0, 0xaa},1994	{0x00, 0x8c, 0x00, 0xaa},1995	{0x00, 0x17, 0x14, 0xaa},1996	{0x00, 0x18, 0x02, 0xaa},1997	{0x00, 0x32, 0x92, 0xaa},1998	{0x00, 0x19, 0x02, 0xaa},1999	{0x00, 0x1a, 0x7a, 0xaa},2000	{0x00, 0x03, 0x0a, 0xaa},2001	{0x00, 0x0c, 0x00, 0xaa},2002	{0x00, 0x3e, 0x00, 0xaa},2003	{0x00, 0x70, 0x3a, 0xaa},2004	{0x00, 0x71, 0x35, 0xaa},2005	{0x00, 0x72, 0x11, 0xaa},2006	{0x00, 0x73, 0xf0, 0xaa},2007	{0x00, 0xa2, 0x02, 0xaa},2008	{0x00, 0xb1, 0x00, 0xaa},2009	{0x00, 0xb1, 0x0c, 0xaa},2010	{0x00, 0x1e, 0x37, 0xaa},	/* MVFP */2011	{0x00, 0xaa, 0x14, 0xaa},2012	{0x00, 0x24, 0x80, 0xaa},2013	{0x00, 0x25, 0x74, 0xaa},2014	{0x00, 0x26, 0xd3, 0xaa},2015	{0x00, 0x0d, 0x00, 0xaa},2016	{0x00, 0x14, 0x18, 0xaa},2017	{0x00, 0x9d, 0x99, 0xaa},2018	{0x00, 0x9e, 0x7f, 0xaa},2019	{0x00, 0x64, 0x08, 0xaa},2020	{0x00, 0x94, 0x07, 0xaa},2021	{0x00, 0x95, 0x06, 0xaa},2022	{0x00, 0x66, 0x05, 0xaa},2023	{0x00, 0x41, 0x08, 0xaa},2024	{0x00, 0x3f, 0x00, 0xaa},2025	{0x00, 0x75, 0x07, 0xaa},2026	{0x00, 0x76, 0xe1, 0xaa},2027	{0x00, 0x4c, 0x00, 0xaa},2028	{0x00, 0x77, 0x00, 0xaa},2029	{0x00, 0x3d, 0xc2, 0xaa},2030	{0x00, 0x4b, 0x09, 0xaa},2031	{0x00, 0xc9, 0x60, 0xaa},2032	{0x00, 0x41, 0x38, 0xaa},2033	{0xbf, 0xc0, 0x26, 0xcc},2034	{0xbf, 0xc1, 0x02, 0xcc},2035	{0xbf, 0xcc, 0x04, 0xcc},2036	{0xb3, 0x5c, 0x01, 0xcc},2037	{0xb3, 0x01, 0x45, 0xcc},2038	{0x00, 0x77, 0x05, 0xaa},2039	{},2040};2041 2042static const u8 ov7670_InitQVGA[][4] = {2043	{0xb3, 0x01, 0x05, 0xcc},2044	{0x00, 0x00, 0x30, 0xdd},2045	{0xb0, 0x03, 0x19, 0xcc},2046	{0x00, 0x00, 0x10, 0xdd},2047	{0xb0, 0x04, 0x02, 0xcc},2048	{0x00, 0x00, 0x10, 0xdd},2049	{0xb3, 0x00, 0x66, 0xcc},2050	{0xb3, 0x00, 0x67, 0xcc},2051	{0xb0, 0x16, 0x01, 0xcc},2052	{0xb3, 0x35, 0xa1, 0xcc},	/* i2c add: 21 */2053	{0xb3, 0x34, 0x01, 0xcc},2054	{0xb3, 0x05, 0x01, 0xcc},2055	{0xb3, 0x06, 0x01, 0xcc},2056	{0xb3, 0x08, 0x01, 0xcc},2057	{0xb3, 0x09, 0x0c, 0xcc},2058	{0xb3, 0x02, 0x02, 0xcc},2059	{0xb3, 0x03, 0x1f, 0xcc},2060	{0xb3, 0x14, 0x00, 0xcc},2061	{0xb3, 0x15, 0x00, 0xcc},2062	{0xb3, 0x16, 0x02, 0xcc},2063	{0xb3, 0x17, 0x7f, 0xcc},2064	{0xb3, 0x04, 0x05, 0xcc},2065	{0xb3, 0x20, 0x00, 0xcc},2066	{0xb3, 0x21, 0x00, 0xcc},2067	{0xb3, 0x22, 0x01, 0xcc},2068	{0xb3, 0x23, 0xe0, 0xcc},2069	{0xbc, 0x00, 0xd1, 0xcc},2070	{0xbc, 0x01, 0x01, 0xcc},2071	{0x00, 0x12, 0x80, 0xaa},2072	{0x00, 0x00, 0x20, 0xdd},2073	{0x00, 0x12, 0x00, 0xaa},2074	{0x00, 0x11, 0x40, 0xaa},2075	{0x00, 0x6b, 0x0a, 0xaa},2076	{0x00, 0x3a, 0x04, 0xaa},2077	{0x00, 0x40, 0xc0, 0xaa},2078	{0x00, 0x8c, 0x00, 0xaa},2079	{0x00, 0x7a, 0x29, 0xaa},2080	{0x00, 0x7b, 0x0e, 0xaa},2081	{0x00, 0x7c, 0x1a, 0xaa},2082	{0x00, 0x7d, 0x31, 0xaa},2083	{0x00, 0x7e, 0x53, 0xaa},2084	{0x00, 0x7f, 0x60, 0xaa},2085	{0x00, 0x80, 0x6b, 0xaa},2086	{0x00, 0x81, 0x73, 0xaa},2087	{0x00, 0x82, 0x7b, 0xaa},2088	{0x00, 0x83, 0x82, 0xaa},2089	{0x00, 0x84, 0x89, 0xaa},2090	{0x00, 0x85, 0x96, 0xaa},2091	{0x00, 0x86, 0xa1, 0xaa},2092	{0x00, 0x87, 0xb7, 0xaa},2093	{0x00, 0x88, 0xcc, 0xaa},2094	{0x00, 0x89, 0xe1, 0xaa},2095	{0x00, 0x13, 0xe0, 0xaa},2096	{0x00, 0x00, 0x00, 0xaa},2097	{0x00, 0x10, 0x00, 0xaa},2098	{0x00, 0x0d, 0x40, 0xaa},2099	{0x00, 0x14, 0x28, 0xaa},2100	{0x00, 0xa5, 0x05, 0xaa},2101	{0x00, 0xab, 0x07, 0xaa},2102	{0x00, 0x24, 0x95, 0xaa},2103	{0x00, 0x25, 0x33, 0xaa},2104	{0x00, 0x26, 0xe3, 0xaa},2105	{0x00, 0x9f, 0x88, 0xaa},2106	{0x00, 0xa0, 0x78, 0xaa},2107	{0x00, 0x55, 0x90, 0xaa},2108	{0x00, 0xa1, 0x03, 0xaa},2109	{0x00, 0xa6, 0xe0, 0xaa},2110	{0x00, 0xa7, 0xd8, 0xaa},2111	{0x00, 0xa8, 0xf0, 0xaa},2112	{0x00, 0xa9, 0x90, 0xaa},2113	{0x00, 0xaa, 0x14, 0xaa},2114	{0x00, 0x13, 0xe5, 0xaa},2115	{0x00, 0x0e, 0x61, 0xaa},2116	{0x00, 0x0f, 0x4b, 0xaa},2117	{0x00, 0x16, 0x02, 0xaa},2118	{0x00, 0x1e, 0x07, 0xaa},	/* MVFP */2119	{0x00, 0x21, 0x02, 0xaa},2120	{0x00, 0x22, 0x91, 0xaa},2121	{0x00, 0x29, 0x07, 0xaa},2122	{0x00, 0x33, 0x0b, 0xaa},2123	{0x00, 0x35, 0x0b, 0xaa},2124	{0x00, 0x37, 0x1d, 0xaa},2125	{0x00, 0x38, 0x71, 0xaa},2126	{0x00, 0x39, 0x2a, 0xaa},2127	{0x00, 0x3c, 0x78, 0xaa},2128	{0x00, 0x4d, 0x40, 0xaa},2129	{0x00, 0x4e, 0x20, 0xaa},2130	{0x00, 0x74, 0x19, 0xaa},2131	{0x00, 0x8d, 0x4f, 0xaa},2132	{0x00, 0x8e, 0x00, 0xaa},2133	{0x00, 0x8f, 0x00, 0xaa},2134	{0x00, 0x90, 0x00, 0xaa},2135	{0x00, 0x91, 0x00, 0xaa},2136	{0x00, 0x96, 0x00, 0xaa},2137	{0x00, 0x9a, 0x80, 0xaa},2138	{0x00, 0xb0, 0x84, 0xaa},2139	{0x00, 0xb1, 0x0c, 0xaa},2140	{0x00, 0xb2, 0x0e, 0xaa},2141	{0x00, 0xb3, 0x82, 0xaa},2142	{0x00, 0xb8, 0x0a, 0xaa},2143	{0x00, 0x43, 0x14, 0xaa},2144	{0x00, 0x44, 0xf0, 0xaa},2145	{0x00, 0x45, 0x45, 0xaa},2146	{0x00, 0x46, 0x63, 0xaa},2147	{0x00, 0x47, 0x2d, 0xaa},2148	{0x00, 0x48, 0x46, 0xaa},2149	{0x00, 0x59, 0x88, 0xaa},2150	{0x00, 0x5a, 0xa0, 0xaa},2151	{0x00, 0x5b, 0xc6, 0xaa},2152	{0x00, 0x5c, 0x7d, 0xaa},2153	{0x00, 0x5d, 0x5f, 0xaa},2154	{0x00, 0x5e, 0x19, 0xaa},2155	{0x00, 0x6c, 0x0a, 0xaa},2156	{0x00, 0x6d, 0x55, 0xaa},2157	{0x00, 0x6e, 0x11, 0xaa},2158	{0x00, 0x6f, 0x9e, 0xaa},2159	{0x00, 0x69, 0x00, 0xaa},2160	{0x00, 0x6a, 0x40, 0xaa},2161	{0x00, 0x01, 0x40, 0xaa},2162	{0x00, 0x02, 0x40, 0xaa},2163	{0x00, 0x13, 0xe7, 0xaa},2164	{0x00, 0x5f, 0xf0, 0xaa},2165	{0x00, 0x60, 0xf0, 0xaa},2166	{0x00, 0x61, 0xf0, 0xaa},2167	{0x00, 0x27, 0xa0, 0xaa},2168	{0x00, 0x28, 0x80, 0xaa},2169	{0x00, 0x2c, 0x90, 0xaa},2170	{0x00, 0x4f, 0x66, 0xaa},2171	{0x00, 0x50, 0x66, 0xaa},2172	{0x00, 0x51, 0x00, 0xaa},2173	{0x00, 0x52, 0x22, 0xaa},2174	{0x00, 0x53, 0x5e, 0xaa},2175	{0x00, 0x54, 0x80, 0xaa},2176	{0x00, 0x58, 0x9e, 0xaa},2177	{0x00, 0x41, 0x08, 0xaa},2178	{0x00, 0x3f, 0x00, 0xaa},2179	{0x00, 0x75, 0x85, 0xaa},2180	{0x00, 0x76, 0xe1, 0xaa},2181	{0x00, 0x4c, 0x00, 0xaa},2182	{0x00, 0x77, 0x0a, 0xaa},2183	{0x00, 0x3d, 0x88, 0xaa},2184	{0x00, 0x4b, 0x09, 0xaa},2185	{0x00, 0xc9, 0x60, 0xaa},2186	{0x00, 0x41, 0x38, 0xaa},2187	{0x00, 0x62, 0x30, 0xaa},2188	{0x00, 0x63, 0x30, 0xaa},2189	{0x00, 0x64, 0x08, 0xaa},2190	{0x00, 0x94, 0x07, 0xaa},2191	{0x00, 0x95, 0x0b, 0xaa},2192	{0x00, 0x65, 0x00, 0xaa},2193	{0x00, 0x66, 0x05, 0xaa},2194	{0x00, 0x56, 0x50, 0xaa},2195	{0x00, 0x34, 0x11, 0xaa},2196	{0x00, 0xa4, 0x88, 0xaa},2197	{0x00, 0x96, 0x00, 0xaa},2198	{0x00, 0x97, 0x30, 0xaa},2199	{0x00, 0x98, 0x20, 0xaa},2200	{0x00, 0x99, 0x30, 0xaa},2201	{0x00, 0x9a, 0x84, 0xaa},2202	{0x00, 0x9b, 0x29, 0xaa},2203	{0x00, 0x9c, 0x03, 0xaa},2204	{0x00, 0x78, 0x04, 0xaa},2205	{0x00, 0x79, 0x01, 0xaa},2206	{0x00, 0xc8, 0xf0, 0xaa},2207	{0x00, 0x79, 0x0f, 0xaa},2208	{0x00, 0xc8, 0x00, 0xaa},2209	{0x00, 0x79, 0x10, 0xaa},2210	{0x00, 0xc8, 0x7e, 0xaa},2211	{0x00, 0x79, 0x0a, 0xaa},2212	{0x00, 0xc8, 0x80, 0xaa},2213	{0x00, 0x79, 0x0b, 0xaa},2214	{0x00, 0xc8, 0x01, 0xaa},2215	{0x00, 0x79, 0x0c, 0xaa},2216	{0x00, 0xc8, 0x0f, 0xaa},2217	{0x00, 0x79, 0x0d, 0xaa},2218	{0x00, 0xc8, 0x20, 0xaa},2219	{0x00, 0x79, 0x09, 0xaa},2220	{0x00, 0xc8, 0x80, 0xaa},2221	{0x00, 0x79, 0x02, 0xaa},2222	{0x00, 0xc8, 0xc0, 0xaa},2223	{0x00, 0x79, 0x03, 0xaa},2224	{0x00, 0xc8, 0x40, 0xaa},2225	{0x00, 0x79, 0x05, 0xaa},2226	{0x00, 0xc8, 0x30, 0xaa},2227	{0x00, 0x79, 0x26, 0xaa},2228	{0x00, 0x11, 0x40, 0xaa},2229	{0x00, 0x3a, 0x04, 0xaa},2230	{0x00, 0x12, 0x00, 0xaa},2231	{0x00, 0x40, 0xc0, 0xaa},2232	{0x00, 0x8c, 0x00, 0xaa},2233	{0x00, 0x17, 0x14, 0xaa},2234	{0x00, 0x18, 0x02, 0xaa},2235	{0x00, 0x32, 0x92, 0xaa},2236	{0x00, 0x19, 0x02, 0xaa},2237	{0x00, 0x1a, 0x7a, 0xaa},2238	{0x00, 0x03, 0x0a, 0xaa},2239	{0x00, 0x0c, 0x00, 0xaa},2240	{0x00, 0x3e, 0x00, 0xaa},2241	{0x00, 0x70, 0x3a, 0xaa},2242	{0x00, 0x71, 0x35, 0xaa},2243	{0x00, 0x72, 0x11, 0xaa},2244	{0x00, 0x73, 0xf0, 0xaa},2245	{0x00, 0xa2, 0x02, 0xaa},2246	{0x00, 0xb1, 0x00, 0xaa},2247	{0x00, 0xb1, 0x0c, 0xaa},2248	{0x00, 0x1e, 0x37, 0xaa},	/* MVFP */2249	{0x00, 0xaa, 0x14, 0xaa},2250	{0x00, 0x24, 0x80, 0xaa},2251	{0x00, 0x25, 0x74, 0xaa},2252	{0x00, 0x26, 0xd3, 0xaa},2253	{0x00, 0x0d, 0x00, 0xaa},2254	{0x00, 0x14, 0x18, 0xaa},2255	{0x00, 0x9d, 0x99, 0xaa},2256	{0x00, 0x9e, 0x7f, 0xaa},2257	{0x00, 0x64, 0x08, 0xaa},2258	{0x00, 0x94, 0x07, 0xaa},2259	{0x00, 0x95, 0x06, 0xaa},2260	{0x00, 0x66, 0x05, 0xaa},2261	{0x00, 0x41, 0x08, 0xaa},2262	{0x00, 0x3f, 0x00, 0xaa},2263	{0x00, 0x75, 0x07, 0xaa},2264	{0x00, 0x76, 0xe1, 0xaa},2265	{0x00, 0x4c, 0x00, 0xaa},2266	{0x00, 0x77, 0x00, 0xaa},2267	{0x00, 0x3d, 0xc2, 0xaa},2268	{0x00, 0x4b, 0x09, 0xaa},2269	{0x00, 0xc9, 0x60, 0xaa},2270	{0x00, 0x41, 0x38, 0xaa},2271	{0xbc, 0x02, 0x18, 0xcc},2272	{0xbc, 0x03, 0x50, 0xcc},2273	{0xbc, 0x04, 0x18, 0xcc},2274	{0xbc, 0x05, 0x00, 0xcc},2275	{0xbc, 0x06, 0x00, 0xcc},2276	{0xbc, 0x08, 0x30, 0xcc},2277	{0xbc, 0x09, 0x40, 0xcc},2278	{0xbc, 0x0a, 0x10, 0xcc},2279	{0xbc, 0x0b, 0x00, 0xcc},2280	{0xbc, 0x0c, 0x00, 0xcc},2281	{0xbf, 0xc0, 0x26, 0xcc},2282	{0xbf, 0xc1, 0x02, 0xcc},2283	{0xbf, 0xcc, 0x04, 0xcc},2284	{0xb3, 0x5c, 0x01, 0xcc},2285	{0xb3, 0x01, 0x45, 0xcc},2286	{0x00, 0x77, 0x05, 0xaa},2287	{},2288};2289 2290/* PO1200 - values from usbvm326.inf and ms-win trace */2291static const u8 po1200_gamma[17] = {2292	0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,2293	0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff2294};2295static const u8 po1200_matrix[9] = {2296	0x60, 0xf9, 0xe5, 0xe7, 0x50, 0x05, 0xf3, 0xe6, 0x5e2297};2298static const u8 po1200_initVGA_data[][4] = {2299	{0xb0, 0x03, 0x19, 0xcc},	/* reset? */2300	{0xb0, 0x03, 0x19, 0xcc},2301/*	{0x00, 0x00, 0x33, 0xdd}, */2302	{0xb0, 0x04, 0x02, 0xcc},2303	{0xb0, 0x02, 0x02, 0xcc},2304	{0xb3, 0x5d, 0x00, 0xcc},2305	{0xb3, 0x01, 0x01, 0xcc},2306	{0xb3, 0x00, 0x64, 0xcc},2307	{0xb3, 0x00, 0x65, 0xcc},2308	{0xb3, 0x05, 0x01, 0xcc},2309	{0xb3, 0x06, 0x01, 0xcc},2310	{0xb3, 0x5c, 0x01, 0xcc},2311	{0xb3, 0x08, 0x01, 0xcc},2312	{0xb3, 0x09, 0x0c, 0xcc},2313	{0xb3, 0x00, 0x67, 0xcc},2314	{0xb3, 0x02, 0xb2, 0xcc},2315	{0xb3, 0x03, 0x18, 0xcc},2316	{0xb3, 0x04, 0x15, 0xcc},2317	{0xb3, 0x20, 0x00, 0xcc},2318	{0xb3, 0x21, 0x00, 0xcc},2319	{0xb3, 0x22, 0x02, 0xcc},2320	{0xb3, 0x23, 0x58, 0xcc},2321	{0xb3, 0x14, 0x00, 0xcc},2322	{0xb3, 0x15, 0x00, 0xcc},2323	{0xb3, 0x16, 0x03, 0xcc},2324	{0xb3, 0x17, 0x1f, 0xcc},2325	{0xbc, 0x00, 0x71, 0xcc},2326	{0xbc, 0x01, 0x01, 0xcc},2327	{0xb0, 0x54, 0x13, 0xcc},2328	{0xb3, 0x00, 0x67, 0xcc},2329	{0xb3, 0x34, 0x01, 0xcc},2330	{0xb3, 0x35, 0xdc, 0xcc},	/* i2c add: 5c */2331	{0x00, 0x03, 0x00, 0xaa},2332	{0x00, 0x12, 0x05, 0xaa},2333	{0x00, 0x13, 0x02, 0xaa},2334	{0x00, 0x1e, 0xc6, 0xaa},	/* h/v flip */2335	{0x00, 0x21, 0x00, 0xaa},2336	{0x00, 0x25, 0x02, 0xaa},2337	{0x00, 0x3c, 0x4f, 0xaa},2338	{0x00, 0x3f, 0xe0, 0xaa},2339	{0x00, 0x42, 0xff, 0xaa},2340	{0x00, 0x45, 0x34, 0xaa},2341	{0x00, 0x55, 0xfe, 0xaa},2342	{0x00, 0x59, 0xd3, 0xaa},2343	{0x00, 0x5e, 0x04, 0xaa},2344	{0x00, 0x61, 0xb8, 0xaa},	/* sharpness */2345	{0x00, 0x62, 0x02, 0xaa},2346	{0x00, 0xa7, 0x31, 0xaa},2347	{0x00, 0xa9, 0x66, 0xaa},2348	{0x00, 0xb0, 0x00, 0xaa},2349	{0x00, 0xb1, 0x00, 0xaa},2350	{0x00, 0xb3, 0x11, 0xaa},2351	{0x00, 0xb6, 0x26, 0xaa},2352	{0x00, 0xb7, 0x20, 0xaa},2353	{0x00, 0xba, 0x04, 0xaa},2354	{0x00, 0x88, 0x42, 0xaa},2355	{0x00, 0x89, 0x9a, 0xaa},2356	{0x00, 0x8a, 0x88, 0xaa},2357	{0x00, 0x8b, 0x8e, 0xaa},2358	{0x00, 0x8c, 0x3e, 0xaa},2359	{0x00, 0x8d, 0x90, 0xaa},2360	{0x00, 0x8e, 0x87, 0xaa},2361	{0x00, 0x8f, 0x96, 0xaa},2362	{0x00, 0x90, 0x3d, 0xaa},2363	{0x00, 0x64, 0x00, 0xaa},2364	{0x00, 0x65, 0x10, 0xaa},2365	{0x00, 0x66, 0x20, 0xaa},2366	{0x00, 0x67, 0x2b, 0xaa},2367	{0x00, 0x68, 0x36, 0xaa},2368	{0x00, 0x69, 0x49, 0xaa},2369	{0x00, 0x6a, 0x5a, 0xaa},2370	{0x00, 0x6b, 0x7f, 0xaa},2371	{0x00, 0x6c, 0x9b, 0xaa},2372	{0x00, 0x6d, 0xba, 0xaa},2373	{0x00, 0x6e, 0xd4, 0xaa},2374	{0x00, 0x6f, 0xea, 0xaa},2375	{0x00, 0x70, 0x00, 0xaa},2376	{0x00, 0x71, 0x10, 0xaa},2377	{0x00, 0x72, 0x20, 0xaa},2378	{0x00, 0x73, 0x2b, 0xaa},2379	{0x00, 0x74, 0x36, 0xaa},2380	{0x00, 0x75, 0x49, 0xaa},2381	{0x00, 0x76, 0x5a, 0xaa},2382	{0x00, 0x77, 0x7f, 0xaa},2383	{0x00, 0x78, 0x9b, 0xaa},2384	{0x00, 0x79, 0xba, 0xaa},2385	{0x00, 0x7a, 0xd4, 0xaa},2386	{0x00, 0x7b, 0xea, 0xaa},2387	{0x00, 0x7c, 0x00, 0xaa},2388	{0x00, 0x7d, 0x10, 0xaa},2389	{0x00, 0x7e, 0x20, 0xaa},2390	{0x00, 0x7f, 0x2b, 0xaa},2391	{0x00, 0x80, 0x36, 0xaa},2392	{0x00, 0x81, 0x49, 0xaa},2393	{0x00, 0x82, 0x5a, 0xaa},2394	{0x00, 0x83, 0x7f, 0xaa},2395	{0x00, 0x84, 0x9b, 0xaa},2396	{0x00, 0x85, 0xba, 0xaa},2397	{0x00, 0x86, 0xd4, 0xaa},2398	{0x00, 0x87, 0xea, 0xaa},2399	{0x00, 0x57, 0x2a, 0xaa},2400	{0x00, 0x03, 0x01, 0xaa},2401	{0x00, 0x04, 0x10, 0xaa},2402	{0x00, 0x05, 0x10, 0xaa},2403	{0x00, 0x06, 0x10, 0xaa},2404	{0x00, 0x07, 0x10, 0xaa},2405	{0x00, 0x08, 0x13, 0xaa},2406	{0x00, 0x0a, 0x00, 0xaa},2407	{0x00, 0x0b, 0x10, 0xaa},2408	{0x00, 0x0c, 0x20, 0xaa},2409	{0x00, 0x0d, 0x18, 0xaa},2410	{0x00, 0x22, 0x01, 0xaa},2411	{0x00, 0x23, 0x60, 0xaa},2412	{0x00, 0x25, 0x08, 0xaa},2413	{0x00, 0x26, 0x82, 0xaa},2414	{0x00, 0x2e, 0x0f, 0xaa},2415	{0x00, 0x2f, 0x1e, 0xaa},2416	{0x00, 0x30, 0x2d, 0xaa},2417	{0x00, 0x31, 0x3c, 0xaa},2418	{0x00, 0x32, 0x4b, 0xaa},2419	{0x00, 0x33, 0x5a, 0xaa},2420	{0x00, 0x34, 0x69, 0xaa},2421	{0x00, 0x35, 0x78, 0xaa},2422	{0x00, 0x36, 0x87, 0xaa},2423	{0x00, 0x37, 0x96, 0xaa},2424	{0x00, 0x38, 0xa5, 0xaa},2425	{0x00, 0x39, 0xb4, 0xaa},2426	{0x00, 0x3a, 0xc3, 0xaa},2427	{0x00, 0x3b, 0xd2, 0xaa},2428	{0x00, 0x3c, 0xe1, 0xaa},2429	{0x00, 0x3e, 0xff, 0xaa},2430	{0x00, 0x3f, 0xff, 0xaa},2431	{0x00, 0x40, 0xff, 0xaa},2432	{0x00, 0x41, 0xff, 0xaa},2433	{0x00, 0x42, 0xff, 0xaa},2434	{0x00, 0x43, 0xff, 0xaa},2435	{0x00, 0x03, 0x00, 0xaa},2436	{0x00, 0x03, 0x00, 0xaa},2437	{0x00, 0x20, 0xc4, 0xaa},2438	{0x00, 0x13, 0x03, 0xaa},2439	{0x00, 0x3c, 0x50, 0xaa},2440	{0x00, 0x61, 0x6a, 0xaa},	/* sharpness? */2441	{0x00, 0x51, 0x5b, 0xaa},2442	{0x00, 0x52, 0x91, 0xaa},2443	{0x00, 0x53, 0x4c, 0xaa},2444	{0x00, 0x54, 0x50, 0xaa},2445	{0x00, 0x56, 0x02, 0xaa},2446	{0xb6, 0x00, 0x00, 0xcc},2447	{0xb6, 0x03, 0x03, 0xcc},2448	{0xb6, 0x02, 0x20, 0xcc},2449	{0xb6, 0x05, 0x02, 0xcc},2450	{0xb6, 0x04, 0x58, 0xcc},2451	{0xb6, 0x12, 0xf8, 0xcc},2452	{0xb6, 0x13, 0x21, 0xcc},2453	{0xb6, 0x18, 0x03, 0xcc},2454	{0xb6, 0x17, 0xa9, 0xcc},2455	{0xb6, 0x16, 0x80, 0xcc},2456	{0xb6, 0x22, 0x12, 0xcc},2457	{0xb6, 0x23, 0x0b, 0xcc},2458	{0xbf, 0xc0, 0x39, 0xcc},2459	{0xbf, 0xc1, 0x04, 0xcc},2460	{0xbf, 0xcc, 0x00, 0xcc},2461	{0xb8, 0x06, 0x20, 0xcc},2462	{0xb8, 0x07, 0x03, 0xcc},2463	{0xb8, 0x08, 0x58, 0xcc},2464	{0xb8, 0x09, 0x02, 0xcc},2465	{0xb3, 0x01, 0x41, 0xcc},2466	{0x00, 0x03, 0x00, 0xaa},2467	{0x00, 0xd9, 0x0f, 0xaa},2468	{0x00, 0xda, 0xaa, 0xaa},2469	{0x00, 0xd9, 0x10, 0xaa},2470	{0x00, 0xda, 0xaa, 0xaa},2471	{0x00, 0xd9, 0x11, 0xaa},2472	{0x00, 0xda, 0x00, 0xaa},2473	{0x00, 0xd9, 0x12, 0xaa},2474	{0x00, 0xda, 0xff, 0xaa},2475	{0x00, 0xd9, 0x13, 0xaa},2476	{0x00, 0xda, 0xff, 0xaa},2477	{0x00, 0xe8, 0x11, 0xaa},2478	{0x00, 0xe9, 0x12, 0xaa},2479	{0x00, 0xea, 0x5c, 0xaa},2480	{0x00, 0xeb, 0xff, 0xaa},2481	{0x00, 0xd8, 0x80, 0xaa},2482	{0x00, 0xe6, 0x02, 0xaa},2483	{0x00, 0xd6, 0x40, 0xaa},2484	{0x00, 0xe3, 0x05, 0xaa},2485	{0x00, 0xe0, 0x40, 0xaa},2486	{0x00, 0xde, 0x03, 0xaa},2487	{0x00, 0xdf, 0x03, 0xaa},2488	{0x00, 0xdb, 0x02, 0xaa},2489	{0x00, 0xdc, 0x00, 0xaa},2490	{0x00, 0xdd, 0x03, 0xaa},2491	{0x00, 0xe1, 0x08, 0xaa},2492	{0x00, 0xe2, 0x01, 0xaa},2493	{0x00, 0xd6, 0x40, 0xaa},2494	{0x00, 0xe4, 0x40, 0xaa},2495	{0x00, 0xa8, 0x8f, 0xaa},2496	{0x00, 0xb4, 0x16, 0xaa},2497	{0xb0, 0x02, 0x06, 0xcc},2498	{0xb0, 0x18, 0x06, 0xcc},2499	{0xb0, 0x19, 0x06, 0xcc},2500	{0xb3, 0x5d, 0x18, 0xcc},2501	{0xb3, 0x05, 0x00, 0xcc},2502	{0xb3, 0x06, 0x00, 0xcc},2503	{0x00, 0xb4, 0x0e, 0xaa},2504	{0x00, 0xb5, 0x49, 0xaa},2505	{0x00, 0xb6, 0x1c, 0xaa},2506	{0x00, 0xb7, 0x96, 0xaa},2507/* end of usbvm326.inf - start of ms-win trace */2508	{0xb6, 0x12, 0xf8, 0xcc},2509	{0xb6, 0x13, 0x3d, 0xcc},2510/*read b306*/2511	{0x00, 0x03, 0x00, 0xaa},2512	{0x00, 0x1a, 0x09, 0xaa},2513	{0x00, 0x1b, 0x8a, 0xaa},2514/*read b827*/2515	{0xb8, 0x27, 0x00, 0xcc},2516	{0xb8, 0x26, 0x60, 0xcc},2517	{0xb8, 0x26, 0x60, 0xcc},2518/*gamma - to do?*/2519	{0x00, 0x03, 0x00, 0xaa},2520	{0x00, 0xae, 0x84, 0xaa},2521/*gamma again*/2522	{0x00, 0x03, 0x00, 0xaa},2523	{0x00, 0x96, 0xa0, 0xaa},2524/*matrix*/2525	{0x00, 0x03, 0x00, 0xaa},2526	{0x00, 0x91, 0x35, 0xaa},2527	{0x00, 0x92, 0x22, 0xaa},2528/*gamma*/2529	{0x00, 0x03, 0x00, 0xaa},2530	{0x00, 0x95, 0x85, 0xaa},2531/*matrix*/2532	{0x00, 0x03, 0x00, 0xaa},2533	{0x00, 0x4d, 0x20, 0xaa},2534	{0xb8, 0x22, 0x40, 0xcc},2535	{0xb8, 0x23, 0x40, 0xcc},2536	{0xb8, 0x24, 0x40, 0xcc},2537	{0xb8, 0x81, 0x09, 0xcc},2538	{0x00, 0x00, 0x64, 0xdd},2539	{0x00, 0x03, 0x01, 0xaa},2540/*read 46*/2541	{0x00, 0x46, 0x3c, 0xaa},2542	{0x00, 0x03, 0x00, 0xaa},2543	{0x00, 0x16, 0x40, 0xaa},2544	{0x00, 0x17, 0x40, 0xaa},2545	{0x00, 0x18, 0x40, 0xaa},2546	{0x00, 0x19, 0x41, 0xaa},2547	{0x00, 0x03, 0x01, 0xaa},2548	{0x00, 0x46, 0x3c, 0xaa},2549	{0x00, 0x00, 0x18, 0xdd},2550/*read bfff*/2551	{0x00, 0x03, 0x00, 0xaa},2552	{0x00, 0xb4, 0x1c, 0xaa},2553	{0x00, 0xb5, 0x92, 0xaa},2554	{0x00, 0xb6, 0x39, 0xaa},2555	{0x00, 0xb7, 0x24, 0xaa},2556/*write 89 0400 1415*/2557	{}2558};2559 2560static const u8 poxxxx_init_common[][4] = {2561	{0xb3, 0x00, 0x04, 0xcc},2562	{0x00, 0x00, 0x10, 0xdd},2563	{0xb3, 0x00, 0x64, 0xcc},2564	{0x00, 0x00, 0x10, 0xdd},2565	{0xb3, 0x00, 0x65, 0xcc},2566	{0x00, 0x00, 0x10, 0xdd},2567	{0xb3, 0x00, 0x67, 0xcc},2568	{0xb0, 0x03, 0x09, 0xcc},2569	{0xb3, 0x05, 0x00, 0xcc},2570	{0xb3, 0x06, 0x00, 0xcc},2571	{0xb3, 0x5c, 0x01, 0xcc},2572	{0xb3, 0x08, 0x01, 0xcc},2573	{0xb3, 0x09, 0x0c, 0xcc},2574	{0xb3, 0x34, 0x01, 0xcc},2575	{0xb3, 0x35, 0xf6, 0xcc},	/* i2c add: 76 */2576	{0xb3, 0x02, 0xb0, 0xcc},2577	{0xb3, 0x03, 0x18, 0xcc},2578	{0xb3, 0x04, 0x15, 0xcc},2579	{0xb3, 0x20, 0x00, 0xcc},2580	{0xb3, 0x21, 0x00, 0xcc},2581	{0xb3, 0x22, 0x04, 0xcc},	/* sensor height = 1024 */2582	{0xb3, 0x23, 0x00, 0xcc},2583	{0xb3, 0x14, 0x00, 0xcc},2584	{0xb3, 0x15, 0x00, 0xcc},2585	{0xb3, 0x16, 0x04, 0xcc},	/* sensor width = 1280 */2586	{0xb3, 0x17, 0xff, 0xcc},2587	{0xb3, 0x2c, 0x03, 0xcc},2588	{0xb3, 0x2d, 0x56, 0xcc},2589	{0xb3, 0x2e, 0x02, 0xcc},2590	{0xb3, 0x2f, 0x0a, 0xcc},2591	{0xb3, 0x40, 0x00, 0xcc},2592	{0xb3, 0x41, 0x34, 0xcc},2593	{0xb3, 0x42, 0x01, 0xcc},2594	{0xb3, 0x43, 0xe0, 0xcc},2595	{0xbc, 0x00, 0x71, 0xcc},2596	{0xbc, 0x01, 0x01, 0xcc},2597	{0xb3, 0x01, 0x41, 0xcc},2598	{0xb3, 0x4d, 0x00, 0xcc},2599	{0x00, 0x0b, 0x2a, 0xaa},2600	{0x00, 0x0e, 0x03, 0xaa},2601	{0x00, 0x0f, 0xea, 0xaa},2602	{0x00, 0x12, 0x08, 0xaa},2603	{0x00, 0x1e, 0x06, 0xaa},2604	{0x00, 0x21, 0x00, 0xaa},2605	{0x00, 0x31, 0x1f, 0xaa},2606	{0x00, 0x33, 0x38, 0xaa},2607	{0x00, 0x36, 0xc0, 0xaa},2608	{0x00, 0x37, 0xc8, 0xaa},2609	{0x00, 0x3b, 0x36, 0xaa},2610	{0x00, 0x4b, 0xfe, 0xaa},2611	{0x00, 0x4d, 0x2e, 0xaa},2612	{0x00, 0x51, 0x1c, 0xaa},2613	{0x00, 0x52, 0x01, 0xaa},2614	{0x00, 0x55, 0x0a, 0xaa},2615	{0x00, 0x56, 0x0a, 0xaa},2616	{0x00, 0x57, 0x07, 0xaa},2617	{0x00, 0x58, 0x07, 0xaa},2618	{0x00, 0x59, 0x04, 0xaa},2619	{0x00, 0x70, 0x68, 0xaa},2620	{0x00, 0x71, 0x04, 0xaa},2621	{0x00, 0x72, 0x10, 0xaa},2622	{0x00, 0x80, 0x71, 0xaa},2623	{0x00, 0x81, 0x08, 0xaa},2624	{0x00, 0x82, 0x00, 0xaa},2625	{0x00, 0x83, 0x55, 0xaa},2626	{0x00, 0x84, 0x06, 0xaa},2627	{0x00, 0x85, 0x06, 0xaa},2628	{0x00, 0x8b, 0x25, 0xaa},2629	{0x00, 0x8c, 0x00, 0xaa},2630	{0x00, 0x8d, 0x86, 0xaa},2631	{0x00, 0x8e, 0x82, 0xaa},2632	{0x00, 0x8f, 0x2d, 0xaa},2633	{0x00, 0x90, 0x8b, 0xaa},2634	{0x00, 0x91, 0x81, 0xaa},2635	{0x00, 0x92, 0x81, 0xaa},2636	{0x00, 0x93, 0x23, 0xaa},2637	{0x00, 0xa3, 0x2a, 0xaa},2638	{0x00, 0xa4, 0x03, 0xaa},2639	{0x00, 0xa5, 0xea, 0xaa},2640	{0x00, 0xb0, 0x68, 0xaa},2641	{0x00, 0xbc, 0x04, 0xaa},2642	{0x00, 0xbe, 0x3b, 0xaa},2643	{0x00, 0x4e, 0x40, 0xaa},2644	{0x00, 0x06, 0x04, 0xaa},2645	{0x00, 0x07, 0x03, 0xaa},2646	{0x00, 0xcd, 0x18, 0xaa},2647	{0x00, 0x28, 0x03, 0xaa},2648	{0x00, 0x29, 0xef, 0xaa},2649/* reinit on alt 2 (qvga) or alt7 (vga) */2650	{0xb3, 0x05, 0x00, 0xcc},2651	{0xb3, 0x06, 0x00, 0xcc},2652	{0xb8, 0x00, 0x01, 0xcc},2653 2654	{0x00, 0x1d, 0x85, 0xaa},2655	{0x00, 0x1e, 0xc6, 0xaa},2656	{0x00, 0x00, 0x40, 0xdd},2657	{0x00, 0x1d, 0x05, 0xaa},2658	{}2659};2660static const u8 poxxxx_gamma[][4] = {2661	{0x00, 0xd6, 0x22, 0xaa},	/* gamma 0 */2662	{0x00, 0x73, 0x00, 0xaa},2663	{0x00, 0x74, 0x0a, 0xaa},2664	{0x00, 0x75, 0x16, 0xaa},2665	{0x00, 0x76, 0x25, 0xaa},2666	{0x00, 0x77, 0x34, 0xaa},2667	{0x00, 0x78, 0x49, 0xaa},2668	{0x00, 0x79, 0x5a, 0xaa},2669	{0x00, 0x7a, 0x7f, 0xaa},2670	{0x00, 0x7b, 0x9b, 0xaa},2671	{0x00, 0x7c, 0xba, 0xaa},2672	{0x00, 0x7d, 0xd4, 0xaa},2673	{0x00, 0x7e, 0xea, 0xaa},2674 2675	{0x00, 0xd6, 0x62, 0xaa},	/* gamma 1 */2676	{0x00, 0x73, 0x00, 0xaa},2677	{0x00, 0x74, 0x0a, 0xaa},2678	{0x00, 0x75, 0x16, 0xaa},2679	{0x00, 0x76, 0x25, 0xaa},2680	{0x00, 0x77, 0x34, 0xaa},2681	{0x00, 0x78, 0x49, 0xaa},2682	{0x00, 0x79, 0x5a, 0xaa},2683	{0x00, 0x7a, 0x7f, 0xaa},2684	{0x00, 0x7b, 0x9b, 0xaa},2685	{0x00, 0x7c, 0xba, 0xaa},2686	{0x00, 0x7d, 0xd4, 0xaa},2687	{0x00, 0x7e, 0xea, 0xaa},2688 2689	{0x00, 0xd6, 0xa2, 0xaa},	/* gamma 2 */2690	{0x00, 0x73, 0x00, 0xaa},2691	{0x00, 0x74, 0x0a, 0xaa},2692	{0x00, 0x75, 0x16, 0xaa},2693	{0x00, 0x76, 0x25, 0xaa},2694	{0x00, 0x77, 0x34, 0xaa},2695	{0x00, 0x78, 0x49, 0xaa},2696	{0x00, 0x79, 0x5a, 0xaa},2697	{0x00, 0x7a, 0x7f, 0xaa},2698	{0x00, 0x7b, 0x9b, 0xaa},2699	{0x00, 0x7c, 0xba, 0xaa},2700	{0x00, 0x7d, 0xd4, 0xaa},2701	{0x00, 0x7e, 0xea, 0xaa},2702	{}2703};2704static const u8 poxxxx_init_start_3[][4] = {2705	{0x00, 0xb8, 0x28, 0xaa},2706	{0x00, 0xb9, 0x1e, 0xaa},2707	{0x00, 0xb6, 0x14, 0xaa},2708	{0x00, 0xb7, 0x0f, 0xaa},2709	{0x00, 0x5c, 0x10, 0xaa},2710	{0x00, 0x5d, 0x18, 0xaa},2711	{0x00, 0x5e, 0x24, 0xaa},2712	{0x00, 0x5f, 0x24, 0xaa},2713	{0x00, 0x86, 0x1a, 0xaa},2714	{0x00, 0x60, 0x00, 0xaa},2715	{0x00, 0x61, 0x1b, 0xaa},2716	{0x00, 0x62, 0x30, 0xaa},2717	{0x00, 0x63, 0x40, 0xaa},2718	{0x00, 0x87, 0x1a, 0xaa},2719	{0x00, 0x64, 0x00, 0xaa},2720	{0x00, 0x65, 0x08, 0xaa},2721	{0x00, 0x66, 0x10, 0xaa},2722	{0x00, 0x67, 0x20, 0xaa},2723	{0x00, 0x88, 0x10, 0xaa},2724	{0x00, 0x68, 0x00, 0xaa},2725	{0x00, 0x69, 0x08, 0xaa},2726	{0x00, 0x6a, 0x0f, 0xaa},2727	{0x00, 0x6b, 0x0f, 0xaa},2728	{0x00, 0x89, 0x07, 0xaa},2729	{0x00, 0xd5, 0x4c, 0xaa},2730	{0x00, 0x0a, 0x00, 0xaa},2731	{0x00, 0x0b, 0x2a, 0xaa},2732	{0x00, 0x0e, 0x03, 0xaa},2733	{0x00, 0x0f, 0xea, 0xaa},2734	{0x00, 0xa2, 0x00, 0xaa},2735	{0x00, 0xa3, 0x2a, 0xaa},2736	{0x00, 0xa4, 0x03, 0xaa},2737	{0x00, 0xa5, 0xea, 0xaa},2738	{}2739};2740static const u8 poxxxx_initVGA[][4] = {2741	{0x00, 0x20, 0x11, 0xaa},2742	{0x00, 0x33, 0x38, 0xaa},2743	{0x00, 0xbb, 0x0d, 0xaa},2744	{0xb3, 0x22, 0x01, 0xcc},	/* change to 640x480 */2745	{0xb3, 0x23, 0xe0, 0xcc},2746	{0xb3, 0x16, 0x02, 0xcc},2747	{0xb3, 0x17, 0x7f, 0xcc},2748	{0xb3, 0x02, 0xb0, 0xcc},2749	{0xb3, 0x06, 0x00, 0xcc},2750	{0xb3, 0x5c, 0x01, 0xcc},2751	{0x00, 0x04, 0x06, 0xaa},2752	{0x00, 0x05, 0x3f, 0xaa},2753	{0x00, 0x04, 0x00, 0xdd},	/* delay 1s */2754	{}2755};2756static const u8 poxxxx_initQVGA[][4] = {2757	{0x00, 0x20, 0x33, 0xaa},2758	{0x00, 0x33, 0x38, 0xaa},2759	{0x00, 0xbb, 0x0d, 0xaa},2760	{0xb3, 0x22, 0x00, 0xcc},	/* change to 320x240 */2761	{0xb3, 0x23, 0xf0, 0xcc},2762	{0xb3, 0x16, 0x01, 0xcc},2763	{0xb3, 0x17, 0x3f, 0xcc},2764	{0xb3, 0x02, 0xb0, 0xcc},2765	{0xb3, 0x06, 0x01, 0xcc},2766	{0xb3, 0x5c, 0x00, 0xcc},2767	{0x00, 0x04, 0x06, 0xaa},2768	{0x00, 0x05, 0x3f, 0xaa},2769	{0x00, 0x04, 0x00, 0xdd},	/* delay 1s */2770	{}2771};2772static const u8 poxxxx_init_end_1[][4] = {2773	{0x00, 0x47, 0x25, 0xaa},2774	{0x00, 0x48, 0x80, 0xaa},2775	{0x00, 0x49, 0x1f, 0xaa},2776	{0x00, 0x4a, 0x40, 0xaa},2777	{0x00, 0x44, 0x40, 0xaa},2778	{0x00, 0xab, 0x4a, 0xaa},2779	{0x00, 0xb1, 0x00, 0xaa},2780	{0x00, 0xb2, 0x04, 0xaa},2781	{0x00, 0xb3, 0x08, 0xaa},2782	{0x00, 0xb4, 0x0b, 0xaa},2783	{0x00, 0xb5, 0x0d, 0xaa},2784	{}2785};2786static const u8 poxxxx_init_end_2[][4] = {2787	{0x00, 0x1d, 0x85, 0xaa},2788	{0x00, 0x1e, 0x06, 0xaa},2789	{0x00, 0x1d, 0x05, 0xaa},2790	{}2791};2792 2793struct sensor_info {2794	s8 sensorId;2795	u8 I2cAdd;2796	u8 IdAdd;2797	u16 VpId;2798	u8 m1;2799	u8 m2;2800	u8 op;2801};2802 2803/* probe values */2804static const struct sensor_info vc0321_probe_data[] = {2805/*      sensorId,	   I2cAdd,	IdAdd,  VpId,  m1,    m2,  op */2806/* 0 OV9640 */2807	{-1,		    0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05},2808/* 1 ICM108T (may respond on IdAdd == 0x83 - tested in vc032x_probe_sensor) */2809	{-1,		    0x80 | 0x20, 0x82, 0x0000, 0x24, 0x25, 0x01},2810/* 2 PO2130 (may detect PO3130NC - tested in vc032x_probe_sensor)*/2811	{-1,		    0x80 | 0x76, 0x00, 0x0000, 0x24, 0x25, 0x01},2812/* 3 MI1310 */2813	{-1,		    0x80 | 0x5d, 0x00, 0x0000, 0x24, 0x25, 0x01},2814/* 4 MI360 - tested in vc032x_probe_sensor */2815/*	{SENSOR_MI0360,	    0x80 | 0x5d, 0x00, 0x8243, 0x24, 0x25, 0x01}, */2816/* 5 7131R */2817	{SENSOR_HV7131R,    0x80 | 0x11, 0x00, 0x0209, 0x24, 0x25, 0x01},2818/* 6 OV7649 */2819	{-1,		    0x80 | 0x21, 0x0a, 0x0000, 0x21, 0x20, 0x05},2820/* 7 PAS302BCW */2821	{-1,		    0x80 | 0x40, 0x00, 0x0000, 0x20, 0x22, 0x05},2822/* 8 OV7660 */2823	{SENSOR_OV7660,     0x80 | 0x21, 0x0a, 0x7660, 0x26, 0x26, 0x05},2824/* 9 PO3130NC - (tested in vc032x_probe_sensor) */2825/*	{SENSOR_PO3130NC,   0x80 | 0x76, 0x00, 0x3130, 0x24, 0x25, 0x01}, */2826/* 10 PO1030KC */2827	{-1,		    0x80 | 0x6e, 0x00, 0x0000, 0x24, 0x25, 0x01},2828/* 11 MI1310_SOC */2829	{SENSOR_MI1310_SOC, 0x80 | 0x5d, 0x00, 0x143a, 0x24, 0x25, 0x01},2830/* 12 OV9650 */2831	{-1,		    0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05},2832/* 13 S5K532 */2833	{-1,		    0x80 | 0x11, 0x39, 0x0000, 0x24, 0x25, 0x01},2834/* 14 MI360_SOC - ??? */2835/* 15 PO1200N */2836	{SENSOR_PO1200,     0x80 | 0x5c, 0x00, 0x1200, 0x67, 0x67, 0x01},2837/* 16 PO3030K */2838	{-1,		    0x80 | 0x18, 0x00, 0x0000, 0x24, 0x25, 0x01},2839/* 17 PO2030 */2840	{-1,		    0x80 | 0x6e, 0x00, 0x0000, 0x24, 0x25, 0x01},2841/* ?? */2842	{-1,		    0x80 | 0x56, 0x01, 0x0000, 0x64, 0x67, 0x01},2843	{SENSOR_MI1320,     0x80 | 0x48, 0x00, 0x148c, 0x64, 0x65, 0x01},2844};2845static const struct sensor_info vc0323_probe_data[] = {2846/*      sensorId,	   I2cAdd,	IdAdd,  VpId,  m1,    m2,  op */2847/* 0 OV9640 */2848	{-1,		    0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05},2849/* 1 ICM108T (may respond on IdAdd == 0x83 - tested in vc032x_probe_sensor) */2850	{-1,		    0x80 | 0x20, 0x82, 0x0000, 0x24, 0x25, 0x01},2851/* 2 PO2130 (may detect PO3130NC - tested in vc032x_probe_sensor)*/2852	{-1,		    0x80 | 0x76, 0x00, 0x0000, 0x24, 0x25, 0x01},2853/* 3 MI1310 */2854	{-1,		    0x80 | 0x5d, 0x00, 0x0000, 0x24, 0x25, 0x01},2855/* 4 MI360 - tested in vc032x_probe_sensor */2856/*	{SENSOR_MI0360,	    0x80 | 0x5d, 0x00, 0x8243, 0x24, 0x25, 0x01}, */2857/* 5 7131R */2858	{SENSOR_HV7131R,    0x80 | 0x11, 0x00, 0x0209, 0x24, 0x25, 0x01},2859/* 6 OV7649 */2860	{-1,		    0x80 | 0x21, 0x0a, 0x0000, 0x21, 0x20, 0x05},2861/* 7 PAS302BCW */2862	{-1,		    0x80 | 0x40, 0x00, 0x0000, 0x20, 0x22, 0x05},2863/* 8 OV7660 */2864	{SENSOR_OV7660,     0x80 | 0x21, 0x0a, 0x7660, 0x26, 0x26, 0x05},2865/* 9 PO3130NC - (tested in vc032x_probe_sensor) */2866/*	{SENSOR_PO3130NC,   0x80 | 0x76, 0x00, 0x3130, 0x24, 0x25, 0x01}, */2867/* 10 PO1030KC */2868	{-1,		    0x80 | 0x6e, 0x00, 0x0000, 0x24, 0x25, 0x01},2869/* 11 MI1310_SOC */2870	{SENSOR_MI1310_SOC, 0x80 | 0x5d, 0x00, 0x143a, 0x24, 0x25, 0x01},2871/* 12 OV9650 */2872	{-1,		    0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05},2873/* 13 S5K532 */2874	{-1,		    0x80 | 0x11, 0x39, 0x0000, 0x24, 0x25, 0x01},2875/* 14 MI360_SOC - ??? */2876/* 15 PO1200N */2877	{SENSOR_PO1200,     0x80 | 0x5c, 0x00, 0x1200, 0x67, 0x67, 0x01},2878/* 16 ?? */2879	{-1,		    0x80 | 0x2d, 0x00, 0x0000, 0x65, 0x67, 0x01},2880/* 17 PO2030 */2881	{-1,		    0x80 | 0x6e, 0x00, 0x0000, 0x24, 0x25, 0x01},2882/* ?? */2883	{-1,		    0x80 | 0x56, 0x01, 0x0000, 0x64, 0x67, 0x01},2884	{SENSOR_MI1320_SOC, 0x80 | 0x48, 0x00, 0x148c, 0x64, 0x67, 0x01},2885/*fixme: not in the ms-win probe - may be found before? */2886	{SENSOR_OV7670,     0x80 | 0x21, 0x0a, 0x7673, 0x66, 0x67, 0x05},2887};2888 2889/* read 'len' bytes in gspca_dev->usb_buf */2890static void reg_r_i(struct gspca_dev *gspca_dev,2891		  u16 req,2892		  u16 index,2893		  u16 len)2894{2895	int ret;2896 2897	if (gspca_dev->usb_err < 0)2898		return;2899	ret = usb_control_msg(gspca_dev->dev,2900			usb_rcvctrlpipe(gspca_dev->dev, 0),2901			req,2902			USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,2903			1,			/* value */2904			index, gspca_dev->usb_buf, len,2905			500);2906	if (ret < 0) {2907		pr_err("reg_r err %d\n", ret);2908		gspca_dev->usb_err = ret;2909		/*2910		 * Make sure the buffer is zeroed to avoid uninitialized2911		 * values.2912		 */2913		memset(gspca_dev->usb_buf, 0, USB_BUF_SZ);2914	}2915}2916static void reg_r(struct gspca_dev *gspca_dev,2917		  u16 req,2918		  u16 index,2919		  u16 len)2920{2921	reg_r_i(gspca_dev, req, index, len);2922	if (gspca_dev->usb_err < 0)2923		return;2924	if (len == 1)2925		gspca_dbg(gspca_dev, D_USBI, "GET %02x 0001 %04x %02x\n",2926			  req, index,2927			  gspca_dev->usb_buf[0]);2928	else2929		gspca_dbg(gspca_dev, D_USBI, "GET %02x 0001 %04x %*ph\n",2930			  req, index, 3, gspca_dev->usb_buf);2931}2932 2933static void reg_w_i(struct gspca_dev *gspca_dev,2934			    u16 req,2935			    u16 value,2936			    u16 index)2937{2938	int ret;2939 2940	if (gspca_dev->usb_err < 0)2941		return;2942	ret = usb_control_msg(gspca_dev->dev,2943			usb_sndctrlpipe(gspca_dev->dev, 0),2944			req,2945			USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,2946			value, index, NULL, 0,2947			500);2948	if (ret < 0) {2949		pr_err("reg_w err %d\n", ret);2950		gspca_dev->usb_err = ret;2951	}2952}2953static void reg_w(struct gspca_dev *gspca_dev,2954			    u16 req,2955			    u16 value,2956			    u16 index)2957{2958	if (gspca_dev->usb_err < 0)2959		return;2960	gspca_dbg(gspca_dev, D_USBO, "SET %02x %04x %04x\n", req, value, index);2961	reg_w_i(gspca_dev, req, value, index);2962}2963 2964static u16 read_sensor_register(struct gspca_dev *gspca_dev,2965				u16 address)2966{2967	u8 ldata, mdata, hdata;2968	int retry = 50;2969 2970	reg_r(gspca_dev, 0xa1, 0xb33f, 1);2971	if (!(gspca_dev->usb_buf[0] & 0x02)) {2972		pr_err("I2c Bus Busy Wait %02x\n", gspca_dev->usb_buf[0]);2973		return 0;2974	}2975	reg_w(gspca_dev, 0xa0, address, 0xb33a);2976	reg_w(gspca_dev, 0xa0, 0x02, 0xb339);2977 2978	do {2979		reg_r(gspca_dev, 0xa1, 0xb33b, 1);2980		if (gspca_dev->usb_buf[0] == 0x00)2981			break;2982		msleep(40);2983	} while (--retry >= 0);2984 2985	reg_r(gspca_dev, 0xa1, 0xb33e, 1);2986	ldata = gspca_dev->usb_buf[0];2987	reg_r(gspca_dev, 0xa1, 0xb33d, 1);2988	mdata = gspca_dev->usb_buf[0];2989	reg_r(gspca_dev, 0xa1, 0xb33c, 1);2990	hdata = gspca_dev->usb_buf[0];2991	if (hdata != 0 && mdata != 0 && ldata != 0)2992		gspca_dbg(gspca_dev, D_PROBE, "Read Sensor %02x%02x %02x\n",2993			  hdata, mdata, ldata);2994	reg_r(gspca_dev, 0xa1, 0xb334, 1);2995	if (gspca_dev->usb_buf[0] == 0x02)2996		return (hdata << 8) + mdata;2997	return hdata;2998}2999 3000static int vc032x_probe_sensor(struct gspca_dev *gspca_dev)3001{3002	struct sd *sd = (struct sd *) gspca_dev;3003	int i, n;3004	u16 value;3005	const struct sensor_info *ptsensor_info;3006 3007/*fixme: should also check the other sensor (back mi1320_soc, front mc501cb)*/3008	if (sd->flags & FL_SAMSUNG) {3009		reg_w(gspca_dev, 0xa0, 0x01, 0xb301);3010		reg_w(gspca_dev, 0x89, 0xf0ff, 0xffff);3011						/* select the back sensor */3012	}3013 3014	reg_r(gspca_dev, 0xa1, 0xbfcf, 1);3015	gspca_dbg(gspca_dev, D_PROBE, "vc032%d check sensor header %02x\n",3016		  sd->bridge == BRIDGE_VC0321 ? 1 : 3, gspca_dev->usb_buf[0]);3017	if (sd->bridge == BRIDGE_VC0321) {3018		ptsensor_info = vc0321_probe_data;3019		n = ARRAY_SIZE(vc0321_probe_data);3020	} else {3021		ptsensor_info = vc0323_probe_data;3022		n = ARRAY_SIZE(vc0323_probe_data);3023	}3024	for (i = 0; i < n; i++) {3025		reg_w(gspca_dev, 0xa0, 0x02, 0xb334);3026		reg_w(gspca_dev, 0xa0, ptsensor_info->m1, 0xb300);3027		reg_w(gspca_dev, 0xa0, ptsensor_info->m2, 0xb300);3028		reg_w(gspca_dev, 0xa0, 0x01, 0xb308);3029		reg_w(gspca_dev, 0xa0, 0x0c, 0xb309);3030		reg_w(gspca_dev, 0xa0, ptsensor_info->I2cAdd, 0xb335);3031		reg_w(gspca_dev, 0xa0, ptsensor_info->op, 0xb301);3032		value = read_sensor_register(gspca_dev, ptsensor_info->IdAdd);3033		if (value == 0 && ptsensor_info->IdAdd == 0x82)3034			value = read_sensor_register(gspca_dev, 0x83);3035		if (value != 0) {3036			gspca_dbg(gspca_dev, D_PROBE, "Sensor ID %04x (%d)\n",3037				  value, i);3038			if (value == ptsensor_info->VpId)3039				return ptsensor_info->sensorId;3040 3041			switch (value) {3042			case 0x3130:3043				return SENSOR_PO3130NC;3044			case 0x7673:3045				return SENSOR_OV7670;3046			case 0x8243:3047				return SENSOR_MI0360;3048			}3049		}3050		ptsensor_info++;3051	}3052	return -1;3053}3054 3055static void i2c_write(struct gspca_dev *gspca_dev,3056			u8 reg, const u8 *val,3057			u8 size)		/* 1 or 2 */3058{3059	int retry;3060 3061	if (gspca_dev->usb_err < 0)3062		return;3063	if (size == 1)3064		gspca_dbg(gspca_dev, D_USBO, "i2c_w %02x %02x\n", reg, *val);3065	else3066		gspca_dbg(gspca_dev, D_USBO, "i2c_w %02x %02x%02x\n",3067			  reg, *val, val[1]);3068	reg_r_i(gspca_dev, 0xa1, 0xb33f, 1);3069/*fixme:should check if (!(gspca_dev->usb_buf[0] & 0x02)) error*/3070	reg_w_i(gspca_dev, 0xa0, size, 0xb334);3071	reg_w_i(gspca_dev, 0xa0, reg, 0xb33a);3072	reg_w_i(gspca_dev, 0xa0, val[0], 0xb336);3073	if (size > 1)3074		reg_w_i(gspca_dev, 0xa0, val[1], 0xb337);3075	reg_w_i(gspca_dev, 0xa0, 0x01, 0xb339);3076	retry = 4;3077	do {3078		reg_r_i(gspca_dev, 0xa1, 0xb33b, 1);3079		if (gspca_dev->usb_buf[0] == 0)3080			break;3081		msleep(20);3082	} while (--retry > 0);3083	if (retry <= 0)3084		pr_err("i2c_write timeout\n");3085}3086 3087static void put_tab_to_reg(struct gspca_dev *gspca_dev,3088			const u8 *tab, u8 tabsize, u16 addr)3089{3090	int j;3091	u16 ad = addr;3092 3093	for (j = 0; j < tabsize; j++)3094		reg_w(gspca_dev, 0xa0, tab[j], ad++);3095}3096 3097static void usb_exchange(struct gspca_dev *gspca_dev,3098			const u8 data[][4])3099{3100	int i = 0;3101 3102	for (;;) {3103		switch (data[i][3]) {3104		default:3105			return;3106		case 0xcc:			/* normal write */3107			reg_w(gspca_dev, 0xa0, data[i][2],3108					(data[i][0]) << 8 | data[i][1]);3109			break;3110		case 0xaa:			/* i2c op */3111			i2c_write(gspca_dev, data[i][1], &data[i][2], 1);3112			break;3113		case 0xbb:			/* i2c op */3114			i2c_write(gspca_dev, data[i][0], &data[i][1], 2);3115			break;3116		case 0xdd:3117			msleep(data[i][1] * 256 + data[i][2] + 10);3118			break;3119		}3120		i++;3121	}3122	/*not reached*/3123}3124 3125 3126/* this function is called at probe time */3127static int sd_config(struct gspca_dev *gspca_dev,3128			const struct usb_device_id *id)3129{3130	struct sd *sd = (struct sd *) gspca_dev;3131 3132	sd->bridge = id->driver_info >> 8;3133	sd->flags = id->driver_info & 0xff;3134 3135	if (id->idVendor == 0x046d &&3136	    (id->idProduct == 0x0892 || id->idProduct == 0x0896))3137		sd->sensor = SENSOR_POxxxx;	/* no probe */3138 3139	return 0;3140}3141 3142/* this function is called at probe and resume time */3143static int sd_init(struct gspca_dev *gspca_dev)3144{3145	struct sd *sd = (struct sd *) gspca_dev;3146	struct cam *cam;3147	int sensor;3148	/* number of packets per ISOC message */3149	static u8 npkt[NSENSORS] = {3150		[SENSOR_HV7131R] =	64,3151		[SENSOR_MI0360] =	32,3152		[SENSOR_MI1310_SOC] =	32,3153		[SENSOR_MI1320] =	64,3154		[SENSOR_MI1320_SOC] =	128,3155		[SENSOR_OV7660] =	32,3156		[SENSOR_OV7670] =	64,3157		[SENSOR_PO1200] =	128,3158		[SENSOR_PO3130NC] =	128,3159		[SENSOR_POxxxx] =	128,3160	};3161 3162	if (sd->sensor != SENSOR_POxxxx)3163		sensor = vc032x_probe_sensor(gspca_dev);3164	else3165		sensor = sd->sensor;3166 3167	switch (sensor) {3168	case -1:3169		pr_err("Unknown sensor...\n");3170		return -EINVAL;3171	case SENSOR_HV7131R:3172		gspca_dbg(gspca_dev, D_PROBE, "Find Sensor HV7131R\n");3173		break;3174	case SENSOR_MI0360:3175		gspca_dbg(gspca_dev, D_PROBE, "Find Sensor MI0360\n");3176		sd->bridge = BRIDGE_VC0323;3177		break;3178	case SENSOR_MI1310_SOC:3179		gspca_dbg(gspca_dev, D_PROBE, "Find Sensor MI1310_SOC\n");3180		break;3181	case SENSOR_MI1320:3182		gspca_dbg(gspca_dev, D_PROBE, "Find Sensor MI1320\n");3183		break;3184	case SENSOR_MI1320_SOC:3185		gspca_dbg(gspca_dev, D_PROBE, "Find Sensor MI1320_SOC\n");3186		break;3187	case SENSOR_OV7660:3188		gspca_dbg(gspca_dev, D_PROBE, "Find Sensor OV7660\n");3189		break;3190	case SENSOR_OV7670:3191		gspca_dbg(gspca_dev, D_PROBE, "Find Sensor OV7670\n");3192		break;3193	case SENSOR_PO1200:3194		gspca_dbg(gspca_dev, D_PROBE, "Find Sensor PO1200\n");3195		break;3196	case SENSOR_PO3130NC:3197		gspca_dbg(gspca_dev, D_PROBE, "Find Sensor PO3130NC\n");3198		break;3199	case SENSOR_POxxxx:3200		gspca_dbg(gspca_dev, D_PROBE, "Sensor POxxxx\n");3201		break;3202	}3203	sd->sensor = sensor;3204 3205	cam = &gspca_dev->cam;3206	if (sd->bridge == BRIDGE_VC0321) {3207		cam->cam_mode = vc0321_mode;3208		cam->nmodes = ARRAY_SIZE(vc0321_mode);3209	} else {3210		switch (sensor) {3211		case SENSOR_PO1200:3212			cam->cam_mode = svga_mode;3213			cam->nmodes = ARRAY_SIZE(svga_mode);3214			break;3215		case SENSOR_MI1310_SOC:3216			cam->cam_mode = vc0323_mode;3217			cam->nmodes = ARRAY_SIZE(vc0323_mode);3218			break;3219		case SENSOR_MI1320_SOC:3220			cam->cam_mode = bi_mode;3221			cam->nmodes = ARRAY_SIZE(bi_mode);3222			break;3223		case SENSOR_OV7670:3224			cam->cam_mode = bi_mode;3225			cam->nmodes = ARRAY_SIZE(bi_mode) - 1;3226			break;3227		default:3228			cam->cam_mode = vc0323_mode;3229			cam->nmodes = ARRAY_SIZE(vc0323_mode) - 1;3230			break;3231		}3232	}3233	cam->npkt = npkt[sd->sensor];3234 3235	if (sd->sensor == SENSOR_OV7670)3236		sd->flags |= FL_HFLIP | FL_VFLIP;3237 3238	if (sd->bridge == BRIDGE_VC0321) {3239		reg_r(gspca_dev, 0x8a, 0, 3);3240		reg_w(gspca_dev, 0x87, 0x00, 0x0f0f);3241		reg_r(gspca_dev, 0x8b, 0, 3);3242		reg_w(gspca_dev, 0x88, 0x00, 0x0202);3243		if (sd->sensor == SENSOR_POxxxx) {3244			reg_r(gspca_dev, 0xa1, 0xb300, 1);3245			if (gspca_dev->usb_buf[0] != 0) {3246				reg_w(gspca_dev, 0xa0, 0x26, 0xb300);3247				reg_w(gspca_dev, 0xa0, 0x04, 0xb300);3248			}3249			reg_w(gspca_dev, 0xa0, 0x00, 0xb300);3250		}3251	}3252	return gspca_dev->usb_err;3253}3254 3255static void setbrightness(struct gspca_dev *gspca_dev, s32 val)3256{3257	u8 data;3258 3259	data = val;3260	if (data >= 0x80)3261		data &= 0x7f;3262	else3263		data = 0xff ^ data;3264	i2c_write(gspca_dev, 0x98, &data, 1);3265}3266 3267static void setcontrast(struct gspca_dev *gspca_dev, u8 val)3268{3269	i2c_write(gspca_dev, 0x99, &val, 1);3270}3271 3272static void setcolors(struct gspca_dev *gspca_dev, u8 val)3273{3274	u8 data;3275 3276	data = val - (val >> 3) - 1;3277	i2c_write(gspca_dev, 0x94, &data, 1);3278	i2c_write(gspca_dev, 0x95, &val, 1);3279}3280 3281static void sethvflip(struct gspca_dev *gspca_dev, bool hflip, bool vflip)3282{3283	struct sd *sd = (struct sd *) gspca_dev;3284	u8 data[2];3285 3286	if (sd->flags & FL_HFLIP)3287		hflip = !hflip;3288	if (sd->flags & FL_VFLIP)3289		vflip = !vflip;3290	switch (sd->sensor) {3291	case SENSOR_MI1310_SOC:3292	case SENSOR_MI1320:3293	case SENSOR_MI1320_SOC:3294		data[0] = data[1] = 0;		/* select page 0 */3295		i2c_write(gspca_dev, 0xf0, data, 2);3296		data[0] = sd->sensor == SENSOR_MI1310_SOC ? 0x03 : 0x01;3297		data[1] = 0x02 * hflip3298			| 0x01 * vflip;3299		i2c_write(gspca_dev, 0x20, data, 2);3300		break;3301	case SENSOR_OV7660:3302	case SENSOR_OV7670:3303		data[0] = sd->sensor == SENSOR_OV7660 ? 0x01 : 0x07;3304		data[0] |= OV7660_MVFP_MIRROR * hflip3305			| OV7660_MVFP_VFLIP * vflip;3306		i2c_write(gspca_dev, OV7660_REG_MVFP, data, 1);3307		break;3308	case SENSOR_PO1200:3309		data[0] = 0;3310		i2c_write(gspca_dev, 0x03, data, 1);3311		data[0] = 0x80 * hflip3312			| 0x40 * vflip3313			| 0x06;3314		i2c_write(gspca_dev, 0x1e, data, 1);3315		break;3316	}3317}3318 3319static void setlightfreq(struct gspca_dev *gspca_dev, s32 val)3320{3321	struct sd *sd = (struct sd *) gspca_dev;3322	static const u8 (*ov7660_freq_tb[3])[4] = {3323		ov7660_NoFlicker, ov7660_50HZ, ov7660_60HZ};3324 3325	if (sd->sensor != SENSOR_OV7660)3326		return;3327	usb_exchange(gspca_dev, ov7660_freq_tb[val]);3328}3329 3330static void setsharpness(struct gspca_dev *gspca_dev, s32 val)3331{3332	struct sd *sd = (struct sd *) gspca_dev;3333	u8 data;3334 3335	switch (sd->sensor) {3336	case SENSOR_PO1200:3337		data = 0;3338		i2c_write(gspca_dev, 0x03, &data, 1);3339		if (val < 0)3340			data = 0x6a;3341		else3342			data = 0xb5 + val * 3;3343		i2c_write(gspca_dev, 0x61, &data, 1);3344		break;3345	case SENSOR_POxxxx:3346		if (val < 0)3347			data = 0x7e;	/* def = max */3348		else3349			data = 0x60 + val * 0x0f;3350		i2c_write(gspca_dev, 0x59, &data, 1);3351		break;3352	}3353}3354static void setgain(struct gspca_dev *gspca_dev, u8 val)3355{3356	i2c_write(gspca_dev, 0x15, &val, 1);3357}3358 3359static void setexposure(struct gspca_dev *gspca_dev, s32 val)3360{3361	u8 data;3362 3363	data = val >> 8;3364	i2c_write(gspca_dev, 0x1a, &data, 1);3365	data = val;3366	i2c_write(gspca_dev, 0x1b, &data, 1);3367}3368 3369static void setautogain(struct gspca_dev *gspca_dev, s32 val)3370{3371	static const u8 data[2] = {0x28, 0x3c};3372 3373	i2c_write(gspca_dev, 0xd1, &data[val], 1);3374}3375 3376static void setgamma(struct gspca_dev *gspca_dev)3377{3378/*fixme:to do */3379	usb_exchange(gspca_dev, poxxxx_gamma);3380}3381 3382static void setbacklight(struct gspca_dev *gspca_dev, s32 val)3383{3384	u16 v;3385	u8 data;3386 3387	data = (val << 4) | 0x0f;3388	i2c_write(gspca_dev, 0xaa, &data, 1);3389	v = 613 + 12 * val;3390	data = v >> 8;3391	i2c_write(gspca_dev, 0xc4, &data, 1);3392	data = v;3393	i2c_write(gspca_dev, 0xc5, &data, 1);3394	v = 1093 - 12 * val;3395	data = v >> 8;3396	i2c_write(gspca_dev, 0xc6, &data, 1);3397	data = v;3398	i2c_write(gspca_dev, 0xc7, &data, 1);3399	v = 342 + 9 * val;3400	data = v >> 8;3401	i2c_write(gspca_dev, 0xc8, &data, 1);3402	data = v;3403	i2c_write(gspca_dev, 0xc9, &data, 1);3404	v = 702 - 9 * val;3405	data = v >> 8;3406	i2c_write(gspca_dev, 0xca, &data, 1);3407	data = v;3408	i2c_write(gspca_dev, 0xcb, &data, 1);3409}3410 3411static void setwb(struct gspca_dev *gspca_dev)3412{3413/*fixme:to do - valid when reg d1 = 0x1c - (reg16 + reg15 = 0xa3)*/3414	static const u8 data[2] = {0x00, 0x00};3415 3416	i2c_write(gspca_dev, 0x16, &data[0], 1);3417	i2c_write(gspca_dev, 0x18, &data[1], 1);3418}3419 3420static int sd_start(struct gspca_dev *gspca_dev)3421{3422	struct sd *sd = (struct sd *) gspca_dev;3423	const u8 (*init)[4];3424	const u8 *GammaT = NULL;3425	const u8 *MatrixT = NULL;3426	int mode;3427	static const u8 (*mi1320_soc_init[])[4] = {3428		mi1320_soc_InitSXGA,3429		mi1320_soc_InitVGA,3430		mi1320_soc_InitQVGA,3431	};3432 3433/*fixme: back sensor only*/3434	if (sd->flags & FL_SAMSUNG) {3435		reg_w(gspca_dev, 0x89, 0xf0ff, 0xffff);3436		reg_w(gspca_dev, 0xa9, 0x8348, 0x000e);3437		reg_w(gspca_dev, 0xa9, 0x0000, 0x001a);3438	}3439 3440	/* Assume start use the good resolution from gspca_dev->mode */3441	if (sd->bridge == BRIDGE_VC0321) {3442		reg_w(gspca_dev, 0xa0, 0xff, 0xbfec);3443		reg_w(gspca_dev, 0xa0, 0xff, 0xbfed);3444		reg_w(gspca_dev, 0xa0, 0xff, 0xbfee);3445		reg_w(gspca_dev, 0xa0, 0xff, 0xbfef);3446		sd->image_offset = 46;3447	} else {3448		if (gspca_dev->cam.cam_mode[gspca_dev->curr_mode].pixelformat3449				== V4L2_PIX_FMT_JPEG)3450			sd->image_offset = 0;3451		else3452			sd->image_offset = 32;3453	}3454 3455	mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv;3456	switch (sd->sensor) {3457	case SENSOR_HV7131R:3458		GammaT = hv7131r_gamma;3459		MatrixT = hv7131r_matrix;3460		if (mode)3461			init = hv7131r_initQVGA_data;	/* 320x240 */3462		else3463			init = hv7131r_initVGA_data;	/* 640x480 */3464		break;3465	case SENSOR_OV7660:3466		GammaT = ov7660_gamma;3467		MatrixT = ov7660_matrix;3468		if (mode)3469			init = ov7660_initQVGA_data;	/* 320x240 */3470		else3471			init = ov7660_initVGA_data;	/* 640x480 */3472		break;3473	case SENSOR_MI0360:3474		GammaT = mi1320_gamma;3475		MatrixT = mi0360_matrix;3476		if (mode)3477			init = mi0360_initQVGA_JPG;	/* 320x240 */3478		else3479			init = mi0360_initVGA_JPG;	/* 640x480 */3480		break;3481	case SENSOR_MI1310_SOC:3482		GammaT = mi1320_gamma;3483		MatrixT = mi1320_matrix;3484		switch (mode) {3485		case 1:3486			init = mi1310_socinitQVGA_JPG;	/* 320x240 */3487			break;3488		case 0:3489			init = mi1310_socinitVGA_JPG;	/* 640x480 */3490			break;3491		default:3492			init = mi1310_soc_InitSXGA_JPG;	/* 1280x1024 */3493			break;3494		}3495		break;3496	case SENSOR_MI1320:3497		GammaT = mi1320_gamma;3498		MatrixT = mi1320_matrix;3499		if (mode)3500			init = mi1320_initQVGA_data;	/* 320x240 */3501		else3502			init = mi1320_initVGA_data;	/* 640x480 */3503		break;3504	case SENSOR_MI1320_SOC:3505		GammaT = mi1320_gamma;3506		MatrixT = mi1320_matrix;3507		init = mi1320_soc_init[mode];3508		break;3509	case SENSOR_OV7670:3510		init = mode == 1 ? ov7670_InitVGA : ov7670_InitQVGA;3511		break;3512	case SENSOR_PO3130NC:3513		GammaT = po3130_gamma;3514		MatrixT = po3130_matrix;3515		if (mode)3516			init = po3130_initQVGA_data;	/* 320x240 */3517		else3518			init = po3130_initVGA_data;	/* 640x480 */3519		usb_exchange(gspca_dev, init);3520		init = po3130_rundata;3521		break;3522	case SENSOR_PO1200:3523		GammaT = po1200_gamma;3524		MatrixT = po1200_matrix;3525		init = po1200_initVGA_data;3526		break;3527	default:3528/*	case SENSOR_POxxxx: */3529		usb_exchange(gspca_dev, poxxxx_init_common);3530		setgamma(gspca_dev);3531		usb_exchange(gspca_dev, poxxxx_init_start_3);3532		if (mode)3533			init = poxxxx_initQVGA;3534		else3535			init = poxxxx_initVGA;3536		usb_exchange(gspca_dev, init);3537		reg_r(gspca_dev, 0x8c, 0x0000, 3);3538		reg_w(gspca_dev, 0xa0,3539				gspca_dev->usb_buf[2] & 1 ? 0 : 1,3540				0xb35c);3541		msleep(300);3542/*fixme: i2c read 04 and 05*/3543		init = poxxxx_init_end_1;3544		break;3545	}3546	usb_exchange(gspca_dev, init);3547	if (GammaT && MatrixT) {3548		put_tab_to_reg(gspca_dev, GammaT, 17, 0xb84a);3549		put_tab_to_reg(gspca_dev, GammaT, 17, 0xb85b);3550		put_tab_to_reg(gspca_dev, GammaT, 17, 0xb86c);3551		put_tab_to_reg(gspca_dev, MatrixT, 9, 0xb82c);3552 3553		switch (sd->sensor) {3554		case SENSOR_PO1200:3555		case SENSOR_HV7131R:3556			reg_w(gspca_dev, 0x89, 0x0400, 0x1415);3557			break;3558		case SENSOR_MI1310_SOC:3559			reg_w(gspca_dev, 0x89, 0x058c, 0x0000);3560			break;3561		}3562		msleep(100);3563	}3564	switch (sd->sensor) {3565	case SENSOR_OV7670:3566		reg_w(gspca_dev, 0x87, 0xffff, 0xffff);3567		reg_w(gspca_dev, 0x88, 0xff00, 0xf0f1);3568		reg_w(gspca_dev, 0xa0, 0x0000, 0xbfff);3569		break;3570	case SENSOR_POxxxx:3571		usb_exchange(gspca_dev, poxxxx_init_end_2);3572		setwb(gspca_dev);3573		msleep(80);		/* led on */3574		reg_w(gspca_dev, 0x89, 0xffff, 0xfdff);3575		break;3576	}3577	return gspca_dev->usb_err;3578}3579 3580static void sd_stopN(struct gspca_dev *gspca_dev)3581{3582	struct sd *sd = (struct sd *) gspca_dev;3583 3584	switch (sd->sensor) {3585	case SENSOR_MI1310_SOC:3586		reg_w(gspca_dev, 0x89, 0x058c, 0x00ff);3587		break;3588	case SENSOR_POxxxx:3589		return;3590	default:3591		if (!(sd->flags & FL_SAMSUNG))3592			reg_w(gspca_dev, 0x89, 0xffff, 0xffff);3593		break;3594	}3595	reg_w(gspca_dev, 0xa0, 0x01, 0xb301);3596	reg_w(gspca_dev, 0xa0, 0x09, 0xb003);3597}3598 3599/* called on streamoff with alt 0 and on disconnect */3600static void sd_stop0(struct gspca_dev *gspca_dev)3601{3602	struct sd *sd = (struct sd *) gspca_dev;3603 3604	if (!gspca_dev->present)3605		return;3606/*fixme: is this useful?*/3607	if (sd->sensor == SENSOR_MI1310_SOC)3608		reg_w(gspca_dev, 0x89, 0x058c, 0x00ff);3609	else if (!(sd->flags & FL_SAMSUNG))3610		reg_w(gspca_dev, 0x89, 0xffff, 0xffff);3611 3612	if (sd->sensor == SENSOR_POxxxx) {3613		reg_w(gspca_dev, 0xa0, 0x26, 0xb300);3614		reg_w(gspca_dev, 0xa0, 0x04, 0xb300);3615		reg_w(gspca_dev, 0xa0, 0x00, 0xb300);3616	}3617}3618 3619static void sd_pkt_scan(struct gspca_dev *gspca_dev,3620			u8 *data,			/* isoc packet */3621			int len)			/* iso pkt length */3622{3623	struct sd *sd = (struct sd *) gspca_dev;3624 3625	if (data[0] == 0xff && data[1] == 0xd8) {3626		gspca_dbg(gspca_dev, D_PACK,3627			  "vc032x header packet found len %d\n", len);3628		gspca_frame_add(gspca_dev, LAST_PACKET, NULL, 0);3629		data += sd->image_offset;3630		len -= sd->image_offset;3631		gspca_frame_add(gspca_dev, FIRST_PACKET, data, len);3632		return;3633	}3634 3635	/* The vc0321 sends some additional data after sending the complete3636	 * frame, we ignore this. */3637	if (sd->bridge == BRIDGE_VC0321) {3638		int size, l;3639 3640		l = gspca_dev->image_len;3641		size = gspca_dev->pixfmt.sizeimage;3642		if (len > size - l)3643			len = size - l;3644	}3645	gspca_frame_add(gspca_dev, INTER_PACKET, data, len);3646}3647 3648static int sd_s_ctrl(struct v4l2_ctrl *ctrl)3649{3650	struct gspca_dev *gspca_dev =3651		container_of(ctrl->handler, struct gspca_dev, ctrl_handler);3652	struct sd *sd = (struct sd *)gspca_dev;3653 3654	gspca_dev->usb_err = 0;3655 3656	if (!gspca_dev->streaming && ctrl->id != V4L2_CID_POWER_LINE_FREQUENCY)3657		return 0;3658 3659	switch (ctrl->id) {3660	case V4L2_CID_BRIGHTNESS:3661		setbrightness(gspca_dev, ctrl->val);3662		break;3663	case V4L2_CID_CONTRAST:3664		setcontrast(gspca_dev, ctrl->val);3665		break;3666	case V4L2_CID_SATURATION:3667		setcolors(gspca_dev, ctrl->val);3668		break;3669	case V4L2_CID_HFLIP:3670		sethvflip(gspca_dev, sd->hflip->val, sd->vflip->val);3671		break;3672	case V4L2_CID_SHARPNESS:3673		setsharpness(gspca_dev, ctrl->val);3674		break;3675	case V4L2_CID_AUTOGAIN:3676		setautogain(gspca_dev, ctrl->val);3677		break;3678	case V4L2_CID_GAIN:3679		setgain(gspca_dev, ctrl->val);3680		break;3681	case V4L2_CID_EXPOSURE:3682		setexposure(gspca_dev, ctrl->val);3683		break;3684	case V4L2_CID_BACKLIGHT_COMPENSATION:3685		setbacklight(gspca_dev, ctrl->val);3686		break;3687	case V4L2_CID_POWER_LINE_FREQUENCY:3688		setlightfreq(gspca_dev, ctrl->val);3689		break;3690	}3691	return gspca_dev->usb_err;3692}3693 3694static const struct v4l2_ctrl_ops sd_ctrl_ops = {3695	.s_ctrl = sd_s_ctrl,3696};3697 3698static int sd_init_controls(struct gspca_dev *gspca_dev)3699{3700	struct sd *sd = (struct sd *)gspca_dev;3701	struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler;3702	bool has_brightness = false;3703	bool has_contrast = false;3704	bool has_sat = false;3705	bool has_hvflip = false;3706	bool has_freq = false;3707	bool has_backlight = false;3708	bool has_exposure = false;3709	bool has_autogain = false;3710	bool has_gain = false;3711	bool has_sharpness = false;3712 3713	switch (sd->sensor) {3714	case SENSOR_HV7131R:3715	case SENSOR_MI0360:3716	case SENSOR_PO3130NC:3717		break;3718	case SENSOR_MI1310_SOC:3719	case SENSOR_MI1320:3720	case SENSOR_MI1320_SOC:3721	case SENSOR_OV7660:3722		has_hvflip = true;3723		break;3724	case SENSOR_OV7670:3725		has_hvflip = has_freq = true;3726		break;3727	case SENSOR_PO1200:3728		has_hvflip = has_sharpness = true;3729		break;3730	case SENSOR_POxxxx:3731		has_brightness = has_contrast = has_sat = has_backlight =3732			has_exposure = has_autogain = has_gain =3733			has_sharpness = true;3734		break;3735	}3736 3737	gspca_dev->vdev.ctrl_handler = hdl;3738	v4l2_ctrl_handler_init(hdl, 8);3739	if (has_brightness)3740		v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,3741			V4L2_CID_BRIGHTNESS, 0, 255, 1, 128);3742	if (has_contrast)3743		v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,3744			V4L2_CID_CONTRAST, 0, 255, 1, 127);3745	if (has_sat)3746		v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,3747			V4L2_CID_SATURATION, 1, 127, 1, 63);3748	if (has_hvflip) {3749		sd->hflip = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,3750			V4L2_CID_HFLIP, 0, 1, 1, 0);3751		sd->vflip = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,3752			V4L2_CID_VFLIP, 0, 1, 1, 0);3753	}3754	if (has_sharpness)3755		v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,3756			V4L2_CID_SHARPNESS, -1, 2, 1, -1);3757	if (has_freq)3758		v4l2_ctrl_new_std_menu(hdl, &sd_ctrl_ops,3759			V4L2_CID_POWER_LINE_FREQUENCY,3760			V4L2_CID_POWER_LINE_FREQUENCY_60HZ, 0,3761			V4L2_CID_POWER_LINE_FREQUENCY_50HZ);3762	if (has_autogain)3763		v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,3764			V4L2_CID_AUTOGAIN, 0, 1, 1, 1);3765	if (has_gain)3766		v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,3767			V4L2_CID_GAIN, 0, 78, 1, 0);3768	if (has_exposure)3769		v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,3770			V4L2_CID_EXPOSURE, 0, 4095, 1, 450);3771	if (has_backlight)3772		v4l2_ctrl_new_std(hdl, &sd_ctrl_ops,3773			V4L2_CID_BACKLIGHT_COMPENSATION, 0, 15, 1, 15);3774 3775	if (hdl->error) {3776		pr_err("Could not initialize controls\n");3777		return hdl->error;3778	}3779	if (sd->hflip)3780		v4l2_ctrl_cluster(2, &sd->hflip);3781	return 0;3782}3783 3784/* sub-driver description */3785static const struct sd_desc sd_desc = {3786	.name = MODULE_NAME,3787	.init_controls = sd_init_controls,3788	.config = sd_config,3789	.init = sd_init,3790	.start = sd_start,3791	.stopN = sd_stopN,3792	.stop0 = sd_stop0,3793	.pkt_scan = sd_pkt_scan,3794};3795 3796/* -- module initialisation -- */3797#define BF(bridge, flags) \3798	.driver_info = (BRIDGE_ ## bridge << 8) \3799		| (flags)3800static const struct usb_device_id device_table[] = {3801	{USB_DEVICE(0x041e, 0x405b), BF(VC0323, FL_VFLIP)},3802	{USB_DEVICE(0x046d, 0x0892), BF(VC0321, 0)},3803	{USB_DEVICE(0x046d, 0x0896), BF(VC0321, 0)},3804	{USB_DEVICE(0x046d, 0x0897), BF(VC0321, 0)},3805	{USB_DEVICE(0x0ac8, 0x0321), BF(VC0321, 0)},3806	{USB_DEVICE(0x0ac8, 0x0323), BF(VC0323, 0)},3807	{USB_DEVICE(0x0ac8, 0x0328), BF(VC0321, 0)},3808	{USB_DEVICE(0x0ac8, 0xc001), BF(VC0321, 0)},3809	{USB_DEVICE(0x0ac8, 0xc002), BF(VC0321, 0)},3810	{USB_DEVICE(0x0ac8, 0xc301), BF(VC0323, FL_SAMSUNG)},3811	{USB_DEVICE(0x15b8, 0x6001), BF(VC0323, 0)},3812	{USB_DEVICE(0x15b8, 0x6002), BF(VC0323, 0)},3813	{USB_DEVICE(0x17ef, 0x4802), BF(VC0323, 0)},3814	{}3815};3816MODULE_DEVICE_TABLE(usb, device_table);3817 3818/* -- device connect -- */3819static int sd_probe(struct usb_interface *intf,3820			const struct usb_device_id *id)3821{3822	return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd),3823				THIS_MODULE);3824}3825 3826static struct usb_driver sd_driver = {3827	.name = MODULE_NAME,3828	.id_table = device_table,3829	.probe = sd_probe,3830	.disconnect = gspca_disconnect,3831#ifdef CONFIG_PM3832	.suspend = gspca_suspend,3833	.resume = gspca_resume,3834	.reset_resume = gspca_resume,3835#endif3836};3837 3838module_usb_driver(sd_driver);3839