cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

vc032x.c (113154B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * Z-star vc0321 library
      4 *
      5 * Copyright (C) 2009-2010 Jean-François Moine <http://moinejf.free.fr>
      6 * Copyright (C) 2006 Koninski Artur takeshi87@o2.pl
      7 * Copyright (C) 2006 Michel Xhaard
      8 */
      9
     10#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
     11
     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	NSENSORS
     53};
     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 0x1e
    112#define OV7660_MVFP_MIRROR	0x20
    113#define OV7660_MVFP_VFLIP	0x10
    114
    115static const u8 mi0360_matrix[9] = {
    116	0x50, 0xf8, 0xf8, 0xf5, 0x50, 0xfb, 0xff, 0xf1, 0x50
    117};
    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, 0xff
    771};
    772static const u8 mi1320_matrix[9] = {
    773	0x54, 0xda, 0x06, 0xf1, 0x50, 0xf4, 0xf7, 0xea, 0x52
    774};
    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, 0xff
   1267};
   1268static const u8 po3130_matrix[9] = {
   1269	0x5f, 0xec, 0xf5, 0xf1, 0x5a, 0xf5, 0xf1, 0xec, 0x63
   1270};
   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, 0xff
   1460};
   1461static const u8 hv7131r_matrix[9] = {
   1462	0x5f, 0xec, 0xf5, 0xf1, 0x5a, 0xf5, 0xf1, 0xec, 0x63
   1463};
   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, 0xff
   1653};
   1654static const u8 ov7660_matrix[9] = {
   1655	0x5a, 0xf0, 0xf6, 0xf3, 0x57, 0xf6, 0xf3, 0xef, 0x62
   1656};
   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, 0xff
   2294};
   2295static const u8 po1200_matrix[9] = {
   2296	0x60, 0xf9, 0xe5, 0xe7, 0x50, 0x05, 0xf3, 0xe6, 0x5e
   2297};
   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 uninitialized
   2911		 * 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	else
   2929		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	else
   3066		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	else
   3165		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	else
   3263		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 * hflip
   3298			| 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 * hflip
   3305			| 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 * hflip
   3312			| 0x40 * vflip
   3313			| 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		else
   3342			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		else
   3349			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].pixelformat
   3449				== V4L2_PIX_FMT_JPEG)
   3450			sd->image_offset = 0;
   3451		else
   3452			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		else
   3463			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		else
   3471			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		else
   3479			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		else
   3502			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		else
   3518			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		else
   3535			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 complete
   3636	 * 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_PM
   3832	.suspend = gspca_suspend,
   3833	.resume = gspca_resume,
   3834	.reset_resume = gspca_resume,
   3835#endif
   3836};
   3837
   3838module_usb_driver(sd_driver);