Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /*
0003  * Z-star vc0321 library
0004  *
0005  * Copyright (C) 2009-2010 Jean-François Moine <http://moinejf.free.fr>
0006  * Copyright (C) 2006 Koninski Artur takeshi87@o2.pl
0007  * Copyright (C) 2006 Michel Xhaard
0008  */
0009 
0010 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
0011 
0012 #define MODULE_NAME "vc032x"
0013 
0014 #include "gspca.h"
0015 
0016 MODULE_AUTHOR("Jean-François Moine <http://moinejf.free.fr>");
0017 MODULE_DESCRIPTION("GSPCA/VC032X USB Camera Driver");
0018 MODULE_LICENSE("GPL");
0019 
0020 /* specific webcam descriptor */
0021 struct sd {
0022     struct gspca_dev gspca_dev; /* !! must be the first item */
0023     struct { /* hvflip cluster */
0024         struct v4l2_ctrl *hflip;
0025         struct v4l2_ctrl *vflip;
0026     };
0027 
0028     u8 image_offset;
0029 
0030     u8 bridge;
0031     u8 sensor;
0032     u8 flags;
0033 #define FL_SAMSUNG 0x01     /* SamsungQ1 (2 sensors) */
0034 #define FL_HFLIP 0x02       /* mirrored by default */
0035 #define FL_VFLIP 0x04       /* vertical flipped by default */
0036 };
0037 enum bridges {
0038     BRIDGE_VC0321,
0039     BRIDGE_VC0323,
0040 };
0041 enum sensors {
0042     SENSOR_HV7131R,
0043     SENSOR_MI0360,
0044     SENSOR_MI1310_SOC,
0045     SENSOR_MI1320,
0046     SENSOR_MI1320_SOC,
0047     SENSOR_OV7660,
0048     SENSOR_OV7670,
0049     SENSOR_PO1200,
0050     SENSOR_PO3130NC,
0051     SENSOR_POxxxx,
0052     NSENSORS
0053 };
0054 
0055 
0056 static const struct v4l2_pix_format vc0321_mode[] = {
0057     {320, 240, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE,
0058         .bytesperline = 320 * 2,
0059         .sizeimage = 320 * 240 * 2,
0060         .colorspace = V4L2_COLORSPACE_SRGB,
0061         .priv = 1},
0062     {640, 480, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE,
0063         .bytesperline = 640 * 2,
0064         .sizeimage = 640 * 480 * 2,
0065         .colorspace = V4L2_COLORSPACE_SRGB,
0066         .priv = 0},
0067 };
0068 static const struct v4l2_pix_format vc0323_mode[] = {
0069     {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
0070         .bytesperline = 320,
0071         .sizeimage = 320 * 240 * 3 / 8 + 590,
0072         .colorspace = V4L2_COLORSPACE_JPEG,
0073         .priv = 1},
0074     {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
0075         .bytesperline = 640,
0076         .sizeimage = 640 * 480 * 3 / 8 + 590,
0077         .colorspace = V4L2_COLORSPACE_JPEG,
0078         .priv = 0},
0079     {1280, 960, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, /* mi1310_soc only */
0080         .bytesperline = 1280,
0081         .sizeimage = 1280 * 960 * 3 / 8 + 590,
0082         .colorspace = V4L2_COLORSPACE_JPEG,
0083         .priv = 2},
0084 };
0085 static const struct v4l2_pix_format bi_mode[] = {
0086     {320, 240, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE,
0087         .bytesperline = 320 * 2,
0088         .sizeimage = 320 * 240 * 2,
0089         .colorspace = V4L2_COLORSPACE_SRGB,
0090         .priv = 2},
0091     {640, 480, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE,
0092         .bytesperline = 640 * 2,
0093         .sizeimage = 640 * 480 * 2,
0094         .colorspace = V4L2_COLORSPACE_SRGB,
0095         .priv = 1},
0096     {1280, 1024, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE,
0097         .bytesperline = 1280 * 2,
0098         .sizeimage = 1280 * 1024 * 2,
0099         .colorspace = V4L2_COLORSPACE_SRGB,
0100         .priv = 0},
0101 };
0102 static const struct v4l2_pix_format svga_mode[] = {
0103     {800, 600, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
0104         .bytesperline = 800,
0105         .sizeimage = 800 * 600 * 1 / 4 + 590,
0106         .colorspace = V4L2_COLORSPACE_JPEG,
0107         .priv = 0},
0108 };
0109 
0110 /* OV7660/7670 registers */
0111 #define OV7660_REG_MVFP 0x1e
0112 #define OV7660_MVFP_MIRROR  0x20
0113 #define OV7660_MVFP_VFLIP   0x10
0114 
0115 static const u8 mi0360_matrix[9] = {
0116     0x50, 0xf8, 0xf8, 0xf5, 0x50, 0xfb, 0xff, 0xf1, 0x50
0117 };
0118 
0119 static const u8 mi0360_initVGA_JPG[][4] = {
0120     {0xb0, 0x03, 0x19, 0xcc},
0121     {0xb0, 0x04, 0x02, 0xcc},
0122     {0xb3, 0x00, 0x24, 0xcc},
0123     {0xb3, 0x00, 0x25, 0xcc},
0124     {0xb3, 0x08, 0x01, 0xcc},
0125     {0xb3, 0x09, 0x0c, 0xcc},
0126     {0xb3, 0x05, 0x01, 0xcc},
0127     {0xb3, 0x06, 0x03, 0xcc},
0128     {0xb3, 0x03, 0x0a, 0xcc},
0129     {0xb3, 0x20, 0x00, 0xcc},
0130     {0xb3, 0x21, 0x00, 0xcc},
0131     {0xb3, 0x22, 0x01, 0xcc},
0132     {0xb3, 0x23, 0xe0, 0xcc},
0133     {0xb3, 0x04, 0x05, 0xcc},
0134     {0xb3, 0x14, 0x00, 0xcc},
0135     {0xb3, 0x15, 0x00, 0xcc},
0136     {0xb3, 0x16, 0x02, 0xcc},
0137     {0xb3, 0x17, 0x7f, 0xcc},
0138     {0xb3, 0x35, 0xdd, 0xcc},   /* i2c add: 5d */
0139     {0xb3, 0x34, 0x02, 0xcc},
0140     {0xb3, 0x00, 0x25, 0xcc},
0141     {0xbc, 0x00, 0x71, 0xcc},
0142     {0xb8, 0x00, 0x13, 0xcc},
0143     {0xb8, 0x27, 0x20, 0xcc},
0144     {0xb8, 0x2c, 0x50, 0xcc},
0145     {0xb8, 0x2d, 0xf8, 0xcc},
0146     {0xb8, 0x2e, 0xf8, 0xcc},
0147     {0xb8, 0x2f, 0xf8, 0xcc},
0148     {0xb8, 0x30, 0x50, 0xcc},
0149     {0xb8, 0x31, 0xf8, 0xcc},
0150     {0xb8, 0x32, 0xf8, 0xcc},
0151     {0xb8, 0x33, 0xf8, 0xcc},
0152     {0xb8, 0x34, 0x50, 0xcc},
0153     {0xb8, 0x35, 0x00, 0xcc},
0154     {0xb8, 0x36, 0x00, 0xcc},
0155     {0xb8, 0x37, 0x00, 0xcc},
0156     {0xb8, 0x01, 0x79, 0xcc},
0157     {0xb8, 0x08, 0xe0, 0xcc},
0158     {0xb3, 0x01, 0x41, 0xcc},
0159     {0xb8, 0x01, 0x79, 0xcc},
0160     {0xb8, 0x14, 0x18, 0xcc},
0161     {0xb8, 0xb2, 0x0a, 0xcc},
0162     {0xb8, 0xb4, 0x0a, 0xcc},
0163     {0xb8, 0xb5, 0x0a, 0xcc},
0164     {0xb8, 0xfe, 0x00, 0xcc},
0165     {0xb8, 0xff, 0x28, 0xcc},
0166     {0xb9, 0x00, 0x28, 0xcc},
0167     {0xb9, 0x01, 0x28, 0xcc},
0168     {0xb9, 0x02, 0x28, 0xcc},
0169     {0xb9, 0x03, 0x00, 0xcc},
0170     {0xb9, 0x04, 0x00, 0xcc},
0171     {0xb9, 0x05, 0x3c, 0xcc},
0172     {0xb9, 0x06, 0x3c, 0xcc},
0173     {0xb9, 0x07, 0x3c, 0xcc},
0174     {0xb9, 0x08, 0x3c, 0xcc},
0175     {0xb8, 0x8e, 0x00, 0xcc},
0176     {0xb8, 0x8f, 0xff, 0xcc},
0177     {0xb8, 0x81, 0x09, 0xcc},
0178     {0x31, 0x00, 0x00, 0xbb},
0179     {0x09, 0x01, 0xc7, 0xbb},
0180     {0x34, 0x01, 0x00, 0xbb},
0181     {0x2b, 0x00, 0x28, 0xbb},
0182     {0x2c, 0x00, 0x30, 0xbb},
0183     {0x2d, 0x00, 0x30, 0xbb},
0184     {0x2e, 0x00, 0x28, 0xbb},
0185     {0x62, 0x04, 0x11, 0xbb},
0186     {0x03, 0x01, 0xe0, 0xbb},
0187     {0x2c, 0x00, 0x2c, 0xbb},
0188     {0x20, 0xd0, 0x00, 0xbb},
0189     {0x01, 0x00, 0x08, 0xbb},
0190     {0x06, 0x00, 0x10, 0xbb},
0191     {0x05, 0x00, 0x20, 0xbb},
0192     {0x20, 0x00, 0x00, 0xbb},
0193     {0xb6, 0x00, 0x00, 0xcc},
0194     {0xb6, 0x03, 0x02, 0xcc},
0195     {0xb6, 0x02, 0x80, 0xcc},
0196     {0xb6, 0x05, 0x01, 0xcc},
0197     {0xb6, 0x04, 0xe0, 0xcc},
0198     {0xb6, 0x12, 0x78, 0xcc},
0199     {0xb6, 0x18, 0x02, 0xcc},
0200     {0xb6, 0x17, 0x58, 0xcc},
0201     {0xb6, 0x16, 0x00, 0xcc},
0202     {0xb6, 0x22, 0x12, 0xcc},
0203     {0xb6, 0x23, 0x0b, 0xcc},
0204     {0xb3, 0x02, 0x02, 0xcc},
0205     {0xbf, 0xc0, 0x39, 0xcc},
0206     {0xbf, 0xc1, 0x04, 0xcc},
0207     {0xbf, 0xcc, 0x10, 0xcc},
0208     {0xb9, 0x12, 0x00, 0xcc},
0209     {0xb9, 0x13, 0x0a, 0xcc},
0210     {0xb9, 0x14, 0x0a, 0xcc},
0211     {0xb9, 0x15, 0x0a, 0xcc},
0212     {0xb9, 0x16, 0x0a, 0xcc},
0213     {0xb9, 0x18, 0x00, 0xcc},
0214     {0xb9, 0x19, 0x0f, 0xcc},
0215     {0xb9, 0x1a, 0x0f, 0xcc},
0216     {0xb9, 0x1b, 0x0f, 0xcc},
0217     {0xb9, 0x1c, 0x0f, 0xcc},
0218     {0xb8, 0x8e, 0x00, 0xcc},
0219     {0xb8, 0x8f, 0xff, 0xcc},
0220     {0xb6, 0x12, 0xf8, 0xcc},
0221     {0xb8, 0x0c, 0x20, 0xcc},
0222     {0xb8, 0x0d, 0x70, 0xcc},
0223     {0xb6, 0x13, 0x13, 0xcc},
0224     {0x35, 0x00, 0x60, 0xbb},
0225     {0xb3, 0x5c, 0x01, 0xcc},
0226     {}
0227 };
0228 static const u8 mi0360_initQVGA_JPG[][4] = {
0229     {0xb0, 0x03, 0x19, 0xcc},
0230     {0xb0, 0x04, 0x02, 0xcc},
0231     {0xb3, 0x00, 0x24, 0xcc},
0232     {0xb3, 0x00, 0x25, 0xcc},
0233     {0xb3, 0x08, 0x01, 0xcc},
0234     {0xb3, 0x09, 0x0c, 0xcc},
0235     {0xb3, 0x05, 0x01, 0xcc},
0236     {0xb3, 0x06, 0x03, 0xcc},
0237     {0xb3, 0x03, 0x0a, 0xcc},
0238     {0xb3, 0x20, 0x00, 0xcc},
0239     {0xb3, 0x21, 0x00, 0xcc},
0240     {0xb3, 0x22, 0x01, 0xcc},
0241     {0xb3, 0x23, 0xe0, 0xcc},
0242     {0xb3, 0x04, 0x05, 0xcc},
0243     {0xb3, 0x14, 0x00, 0xcc},
0244     {0xb3, 0x15, 0x00, 0xcc},
0245     {0xb3, 0x16, 0x02, 0xcc},
0246     {0xb3, 0x17, 0x7f, 0xcc},
0247     {0xb3, 0x35, 0xdd, 0xcc},
0248     {0xb3, 0x34, 0x02, 0xcc},
0249     {0xb3, 0x00, 0x25, 0xcc},
0250     {0xbc, 0x00, 0xd1, 0xcc},
0251     {0xb8, 0x00, 0x13, 0xcc},
0252     {0xb8, 0x27, 0x20, 0xcc},
0253     {0xb8, 0x2c, 0x50, 0xcc},
0254     {0xb8, 0x2d, 0xf8, 0xcc},
0255     {0xb8, 0x2e, 0xf8, 0xcc},
0256     {0xb8, 0x2f, 0xf8, 0xcc},
0257     {0xb8, 0x30, 0x50, 0xcc},
0258     {0xb8, 0x31, 0xf8, 0xcc},
0259     {0xb8, 0x32, 0xf8, 0xcc},
0260     {0xb8, 0x33, 0xf8, 0xcc},
0261     {0xb8, 0x34, 0x50, 0xcc},
0262     {0xb8, 0x35, 0x00, 0xcc},
0263     {0xb8, 0x36, 0x00, 0xcc},
0264     {0xb8, 0x37, 0x00, 0xcc},
0265     {0xb8, 0x01, 0x79, 0xcc},
0266     {0xb8, 0x08, 0xe0, 0xcc},
0267     {0xb3, 0x01, 0x41, 0xcc},
0268     {0xb8, 0x01, 0x79, 0xcc},
0269     {0xb8, 0x14, 0x18, 0xcc},
0270     {0xb8, 0xb2, 0x0a, 0xcc},
0271     {0xb8, 0xb4, 0x0a, 0xcc},
0272     {0xb8, 0xb5, 0x0a, 0xcc},
0273     {0xb8, 0xfe, 0x00, 0xcc},
0274     {0xb8, 0xff, 0x28, 0xcc},
0275     {0xb9, 0x00, 0x28, 0xcc},
0276     {0xb9, 0x01, 0x28, 0xcc},
0277     {0xb9, 0x02, 0x28, 0xcc},
0278     {0xb9, 0x03, 0x00, 0xcc},
0279     {0xb9, 0x04, 0x00, 0xcc},
0280     {0xb9, 0x05, 0x3c, 0xcc},
0281     {0xb9, 0x06, 0x3c, 0xcc},
0282     {0xb9, 0x07, 0x3c, 0xcc},
0283     {0xb9, 0x08, 0x3c, 0xcc},
0284     {0xb8, 0x8e, 0x00, 0xcc},
0285     {0xb8, 0x8f, 0xff, 0xcc},
0286     {0xb8, 0x81, 0x09, 0xcc},
0287     {0x31, 0x00, 0x00, 0xbb},
0288     {0x09, 0x01, 0xc7, 0xbb},
0289     {0x34, 0x01, 0x00, 0xbb},
0290     {0x2b, 0x00, 0x28, 0xbb},
0291     {0x2c, 0x00, 0x30, 0xbb},
0292     {0x2d, 0x00, 0x30, 0xbb},
0293     {0x2e, 0x00, 0x28, 0xbb},
0294     {0x62, 0x04, 0x11, 0xbb},
0295     {0x03, 0x01, 0xe0, 0xbb},
0296     {0x2c, 0x00, 0x2c, 0xbb},
0297     {0x20, 0xd0, 0x00, 0xbb},
0298     {0x01, 0x00, 0x08, 0xbb},
0299     {0x06, 0x00, 0x10, 0xbb},
0300     {0x05, 0x00, 0x20, 0xbb},
0301     {0x20, 0x00, 0x00, 0xbb},
0302     {0xb6, 0x00, 0x00, 0xcc},
0303     {0xb6, 0x03, 0x01, 0xcc},
0304     {0xb6, 0x02, 0x40, 0xcc},
0305     {0xb6, 0x05, 0x00, 0xcc},
0306     {0xb6, 0x04, 0xf0, 0xcc},
0307     {0xb6, 0x12, 0x78, 0xcc},
0308     {0xb6, 0x18, 0x00, 0xcc},
0309     {0xb6, 0x17, 0x96, 0xcc},
0310     {0xb6, 0x16, 0x00, 0xcc},
0311     {0xb6, 0x22, 0x12, 0xcc},
0312     {0xb6, 0x23, 0x0b, 0xcc},
0313     {0xb3, 0x02, 0x02, 0xcc},
0314     {0xbf, 0xc0, 0x39, 0xcc},
0315     {0xbf, 0xc1, 0x04, 0xcc},
0316     {0xbf, 0xcc, 0x10, 0xcc},
0317     {0xb9, 0x12, 0x00, 0xcc},
0318     {0xb9, 0x13, 0x0a, 0xcc},
0319     {0xb9, 0x14, 0x0a, 0xcc},
0320     {0xb9, 0x15, 0x0a, 0xcc},
0321     {0xb9, 0x16, 0x0a, 0xcc},
0322     {0xb9, 0x18, 0x00, 0xcc},
0323     {0xb9, 0x19, 0x0f, 0xcc},
0324     {0xb9, 0x1a, 0x0f, 0xcc},
0325     {0xb9, 0x1b, 0x0f, 0xcc},
0326     {0xb9, 0x1c, 0x0f, 0xcc},
0327     {0xb8, 0x8e, 0x00, 0xcc},
0328     {0xb8, 0x8f, 0xff, 0xcc},
0329     {0xb6, 0x12, 0xf8, 0xcc},
0330     {0xb6, 0x13, 0x13, 0xcc},
0331     {0xbc, 0x02, 0x18, 0xcc},
0332     {0xbc, 0x03, 0x50, 0xcc},
0333     {0xbc, 0x04, 0x18, 0xcc},
0334     {0xbc, 0x05, 0x00, 0xcc},
0335     {0xbc, 0x06, 0x00, 0xcc},
0336     {0xbc, 0x08, 0x30, 0xcc},
0337     {0xbc, 0x09, 0x40, 0xcc},
0338     {0xbc, 0x0a, 0x10, 0xcc},
0339     {0xb8, 0x0c, 0x20, 0xcc},
0340     {0xb8, 0x0d, 0x70, 0xcc},
0341     {0xbc, 0x0b, 0x00, 0xcc},
0342     {0xbc, 0x0c, 0x00, 0xcc},
0343     {0x35, 0x00, 0xef, 0xbb},
0344     {0xb3, 0x5c, 0x01, 0xcc},
0345     {}
0346 };
0347 
0348 static const u8 mi1310_socinitVGA_JPG[][4] = {
0349     {0xb0, 0x03, 0x19, 0xcc},
0350     {0xb0, 0x04, 0x02, 0xcc},
0351     {0xb3, 0x00, 0x64, 0xcc},
0352     {0xb3, 0x00, 0x65, 0xcc},
0353     {0xb3, 0x05, 0x00, 0xcc},
0354     {0xb3, 0x06, 0x00, 0xcc},
0355     {0xb3, 0x08, 0x01, 0xcc},
0356     {0xb3, 0x09, 0x0c, 0xcc},
0357     {0xb3, 0x34, 0x02, 0xcc},
0358     {0xb3, 0x35, 0xdd, 0xcc},   /* i2c add: 5d */
0359     {0xb3, 0x02, 0x00, 0xcc},
0360     {0xb3, 0x03, 0x0a, 0xcc},
0361     {0xb3, 0x04, 0x05, 0xcc},
0362     {0xb3, 0x20, 0x00, 0xcc},
0363     {0xb3, 0x21, 0x00, 0xcc},
0364     {0xb3, 0x22, 0x03, 0xcc},
0365     {0xb3, 0x23, 0xc0, 0xcc},
0366     {0xb3, 0x14, 0x00, 0xcc},
0367     {0xb3, 0x15, 0x00, 0xcc},
0368     {0xb3, 0x16, 0x04, 0xcc},
0369     {0xb3, 0x17, 0xff, 0xcc},
0370     {0xb3, 0x00, 0x65, 0xcc},
0371     {0xb8, 0x00, 0x00, 0xcc},
0372     {0xbc, 0x00, 0xd0, 0xcc},
0373     {0xbc, 0x01, 0x01, 0xcc},
0374     {0xf0, 0x00, 0x02, 0xbb},
0375     {0xc8, 0x9f, 0x0b, 0xbb},
0376     {0x5b, 0x00, 0x01, 0xbb},
0377     {0x2f, 0xde, 0x20, 0xbb},
0378     {0xf0, 0x00, 0x00, 0xbb},
0379     {0x20, 0x03, 0x02, 0xbb},   /* h/v flip */
0380     {0xf0, 0x00, 0x01, 0xbb},
0381     {0x05, 0x00, 0x07, 0xbb},
0382     {0x34, 0x00, 0x00, 0xbb},
0383     {0x35, 0xff, 0x00, 0xbb},
0384     {0xdc, 0x07, 0x02, 0xbb},
0385     {0xdd, 0x3c, 0x18, 0xbb},
0386     {0xde, 0x92, 0x6d, 0xbb},
0387     {0xdf, 0xcd, 0xb1, 0xbb},
0388     {0xe0, 0xff, 0xe7, 0xbb},
0389     {0x06, 0xf0, 0x0d, 0xbb},
0390     {0x06, 0x70, 0x0e, 0xbb},
0391     {0x4c, 0x00, 0x01, 0xbb},
0392     {0x4d, 0x00, 0x01, 0xbb},
0393     {0xf0, 0x00, 0x02, 0xbb},
0394     {0x2e, 0x0c, 0x55, 0xbb},
0395     {0x21, 0xb6, 0x6e, 0xbb},
0396     {0x36, 0x30, 0x10, 0xbb},
0397     {0x37, 0x00, 0xc1, 0xbb},
0398     {0xf0, 0x00, 0x00, 0xbb},
0399     {0x07, 0x00, 0x84, 0xbb},
0400     {0x08, 0x02, 0x4a, 0xbb},
0401     {0x05, 0x01, 0x10, 0xbb},
0402     {0x06, 0x00, 0x39, 0xbb},
0403     {0xf0, 0x00, 0x02, 0xbb},
0404     {0x58, 0x02, 0x67, 0xbb},
0405     {0x57, 0x02, 0x00, 0xbb},
0406     {0x5a, 0x02, 0x67, 0xbb},
0407     {0x59, 0x02, 0x00, 0xbb},
0408     {0x5c, 0x12, 0x0d, 0xbb},
0409     {0x5d, 0x16, 0x11, 0xbb},
0410     {0x39, 0x06, 0x18, 0xbb},
0411     {0x3a, 0x06, 0x18, 0xbb},
0412     {0x3b, 0x06, 0x18, 0xbb},
0413     {0x3c, 0x06, 0x18, 0xbb},
0414     {0x64, 0x7b, 0x5b, 0xbb},
0415     {0xf0, 0x00, 0x02, 0xbb},
0416     {0x36, 0x30, 0x10, 0xbb},
0417     {0x37, 0x00, 0xc0, 0xbb},
0418     {0xbc, 0x0e, 0x00, 0xcc},
0419     {0xbc, 0x0f, 0x05, 0xcc},
0420     {0xbc, 0x10, 0xc0, 0xcc},
0421     {0xbc, 0x11, 0x03, 0xcc},
0422     {0xb6, 0x00, 0x00, 0xcc},
0423     {0xb6, 0x03, 0x02, 0xcc},
0424     {0xb6, 0x02, 0x80, 0xcc},
0425     {0xb6, 0x05, 0x01, 0xcc},
0426     {0xb6, 0x04, 0xe0, 0xcc},
0427     {0xb6, 0x12, 0xf8, 0xcc},
0428     {0xb6, 0x13, 0x25, 0xcc},
0429     {0xb6, 0x18, 0x02, 0xcc},
0430     {0xb6, 0x17, 0x58, 0xcc},
0431     {0xb6, 0x16, 0x00, 0xcc},
0432     {0xb6, 0x22, 0x12, 0xcc},
0433     {0xb6, 0x23, 0x0b, 0xcc},
0434     {0xbf, 0xc0, 0x39, 0xcc},
0435     {0xbf, 0xc1, 0x04, 0xcc},
0436     {0xbf, 0xcc, 0x00, 0xcc},
0437     {0xbc, 0x02, 0x18, 0xcc},
0438     {0xbc, 0x03, 0x50, 0xcc},
0439     {0xbc, 0x04, 0x18, 0xcc},
0440     {0xbc, 0x05, 0x00, 0xcc},
0441     {0xbc, 0x06, 0x00, 0xcc},
0442     {0xbc, 0x08, 0x30, 0xcc},
0443     {0xbc, 0x09, 0x40, 0xcc},
0444     {0xbc, 0x0a, 0x10, 0xcc},
0445     {0xbc, 0x0b, 0x00, 0xcc},
0446     {0xbc, 0x0c, 0x00, 0xcc},
0447     {0xb3, 0x5c, 0x01, 0xcc},
0448     {0xf0, 0x00, 0x01, 0xbb},
0449     {0x80, 0x00, 0x03, 0xbb},
0450     {0x81, 0xc7, 0x14, 0xbb},
0451     {0x82, 0xeb, 0xe8, 0xbb},
0452     {0x83, 0xfe, 0xf4, 0xbb},
0453     {0x84, 0xcd, 0x10, 0xbb},
0454     {0x85, 0xf3, 0xee, 0xbb},
0455     {0x86, 0xff, 0xf1, 0xbb},
0456     {0x87, 0xcd, 0x10, 0xbb},
0457     {0x88, 0xf3, 0xee, 0xbb},
0458     {0x89, 0x01, 0xf1, 0xbb},
0459     {0x8a, 0xe5, 0x17, 0xbb},
0460     {0x8b, 0xe8, 0xe2, 0xbb},
0461     {0x8c, 0xf7, 0xed, 0xbb},
0462     {0x8d, 0x00, 0xff, 0xbb},
0463     {0x8e, 0xec, 0x10, 0xbb},
0464     {0x8f, 0xf0, 0xed, 0xbb},
0465     {0x90, 0xf9, 0xf2, 0xbb},
0466     {0x91, 0x00, 0x00, 0xbb},
0467     {0x92, 0xe9, 0x0d, 0xbb},
0468     {0x93, 0xf4, 0xf2, 0xbb},
0469     {0x94, 0xfb, 0xf5, 0xbb},
0470     {0x95, 0x00, 0xff, 0xbb},
0471     {0xb6, 0x0f, 0x08, 0xbb},
0472     {0xb7, 0x3d, 0x16, 0xbb},
0473     {0xb8, 0x0c, 0x04, 0xbb},
0474     {0xb9, 0x1c, 0x07, 0xbb},
0475     {0xba, 0x0a, 0x03, 0xbb},
0476     {0xbb, 0x1b, 0x09, 0xbb},
0477     {0xbc, 0x17, 0x0d, 0xbb},
0478     {0xbd, 0x23, 0x1d, 0xbb},
0479     {0xbe, 0x00, 0x28, 0xbb},
0480     {0xbf, 0x11, 0x09, 0xbb},
0481     {0xc0, 0x16, 0x15, 0xbb},
0482     {0xc1, 0x00, 0x1b, 0xbb},
0483     {0xc2, 0x0e, 0x07, 0xbb},
0484     {0xc3, 0x14, 0x10, 0xbb},
0485     {0xc4, 0x00, 0x17, 0xbb},
0486     {0x06, 0x74, 0x8e, 0xbb},
0487     {0xf0, 0x00, 0x01, 0xbb},
0488     {0x06, 0xf4, 0x8e, 0xbb},
0489     {0x00, 0x00, 0x50, 0xdd},
0490     {0x06, 0x74, 0x8e, 0xbb},
0491     {0xf0, 0x00, 0x02, 0xbb},
0492     {0x24, 0x50, 0x20, 0xbb},
0493     {0xf0, 0x00, 0x02, 0xbb},
0494     {0x34, 0x0c, 0x50, 0xbb},
0495     {0xb3, 0x01, 0x41, 0xcc},
0496     {0xf0, 0x00, 0x00, 0xbb},
0497     {0x03, 0x03, 0xc0, 0xbb},
0498     {},
0499 };
0500 static const u8 mi1310_socinitQVGA_JPG[][4] = {
0501     {0xb0, 0x03, 0x19, 0xcc},   {0xb0, 0x04, 0x02, 0xcc},
0502     {0xb3, 0x00, 0x64, 0xcc},   {0xb3, 0x00, 0x65, 0xcc},
0503     {0xb3, 0x05, 0x00, 0xcc},   {0xb3, 0x06, 0x00, 0xcc},
0504     {0xb3, 0x08, 0x01, 0xcc},   {0xb3, 0x09, 0x0c, 0xcc},
0505     {0xb3, 0x34, 0x02, 0xcc},   {0xb3, 0x35, 0xdd, 0xcc},
0506     {0xb3, 0x02, 0x00, 0xcc},   {0xb3, 0x03, 0x0a, 0xcc},
0507     {0xb3, 0x04, 0x05, 0xcc},   {0xb3, 0x20, 0x00, 0xcc},
0508     {0xb3, 0x21, 0x00, 0xcc},   {0xb3, 0x22, 0x03, 0xcc},
0509     {0xb3, 0x23, 0xc0, 0xcc},   {0xb3, 0x14, 0x00, 0xcc},
0510     {0xb3, 0x15, 0x00, 0xcc},   {0xb3, 0x16, 0x04, 0xcc},
0511     {0xb3, 0x17, 0xff, 0xcc},   {0xb3, 0x00, 0x65, 0xcc},
0512     {0xb8, 0x00, 0x00, 0xcc},   {0xbc, 0x00, 0xf0, 0xcc},
0513     {0xbc, 0x01, 0x01, 0xcc},   {0xf0, 0x00, 0x02, 0xbb},
0514     {0xc8, 0x9f, 0x0b, 0xbb},   {0x5b, 0x00, 0x01, 0xbb},
0515     {0x2f, 0xde, 0x20, 0xbb},   {0xf0, 0x00, 0x00, 0xbb},
0516     {0x20, 0x03, 0x02, 0xbb},   /* h/v flip */
0517     {0xf0, 0x00, 0x01, 0xbb},
0518     {0x05, 0x00, 0x07, 0xbb},   {0x34, 0x00, 0x00, 0xbb},
0519     {0x35, 0xff, 0x00, 0xbb},   {0xdc, 0x07, 0x02, 0xbb},
0520     {0xdd, 0x3c, 0x18, 0xbb},   {0xde, 0x92, 0x6d, 0xbb},
0521     {0xdf, 0xcd, 0xb1, 0xbb},   {0xe0, 0xff, 0xe7, 0xbb},
0522     {0x06, 0xf0, 0x0d, 0xbb},   {0x06, 0x70, 0x0e, 0xbb},
0523     {0x4c, 0x00, 0x01, 0xbb},   {0x4d, 0x00, 0x01, 0xbb},
0524     {0xf0, 0x00, 0x02, 0xbb},   {0x2e, 0x0c, 0x55, 0xbb},
0525     {0x21, 0xb6, 0x6e, 0xbb},   {0x36, 0x30, 0x10, 0xbb},
0526     {0x37, 0x00, 0xc1, 0xbb},   {0xf0, 0x00, 0x00, 0xbb},
0527     {0x07, 0x00, 0x84, 0xbb},   {0x08, 0x02, 0x4a, 0xbb},
0528     {0x05, 0x01, 0x10, 0xbb},   {0x06, 0x00, 0x39, 0xbb},
0529     {0xf0, 0x00, 0x02, 0xbb},   {0x58, 0x02, 0x67, 0xbb},
0530     {0x57, 0x02, 0x00, 0xbb},   {0x5a, 0x02, 0x67, 0xbb},
0531     {0x59, 0x02, 0x00, 0xbb},   {0x5c, 0x12, 0x0d, 0xbb},
0532     {0x5d, 0x16, 0x11, 0xbb},   {0x39, 0x06, 0x18, 0xbb},
0533     {0x3a, 0x06, 0x18, 0xbb},   {0x3b, 0x06, 0x18, 0xbb},
0534     {0x3c, 0x06, 0x18, 0xbb},   {0x64, 0x7b, 0x5b, 0xbb},
0535     {0xf0, 0x00, 0x02, 0xbb},   {0x36, 0x30, 0x10, 0xbb},
0536     {0x37, 0x00, 0xc0, 0xbb},   {0xbc, 0x0e, 0x00, 0xcc},
0537     {0xbc, 0x0f, 0x05, 0xcc},   {0xbc, 0x10, 0xc0, 0xcc},
0538     {0xbc, 0x11, 0x03, 0xcc},   {0xb6, 0x00, 0x00, 0xcc},
0539     {0xb6, 0x03, 0x01, 0xcc},   {0xb6, 0x02, 0x40, 0xcc},
0540     {0xb6, 0x05, 0x00, 0xcc},   {0xb6, 0x04, 0xf0, 0xcc},
0541     {0xb6, 0x12, 0xf8, 0xcc},   {0xb6, 0x13, 0x25, 0xcc},
0542     {0xb6, 0x18, 0x00, 0xcc},   {0xb6, 0x17, 0x96, 0xcc},
0543     {0xb6, 0x16, 0x00, 0xcc},   {0xb6, 0x22, 0x12, 0xcc},
0544     {0xb6, 0x23, 0x0b, 0xcc},   {0xbf, 0xc0, 0x39, 0xcc},
0545     {0xbf, 0xc1, 0x04, 0xcc},   {0xbf, 0xcc, 0x00, 0xcc},
0546     {0xb3, 0x5c, 0x01, 0xcc},   {0xf0, 0x00, 0x01, 0xbb},
0547     {0x80, 0x00, 0x03, 0xbb},   {0x81, 0xc7, 0x14, 0xbb},
0548     {0x82, 0xeb, 0xe8, 0xbb},   {0x83, 0xfe, 0xf4, 0xbb},
0549     {0x84, 0xcd, 0x10, 0xbb},   {0x85, 0xf3, 0xee, 0xbb},
0550     {0x86, 0xff, 0xf1, 0xbb},   {0x87, 0xcd, 0x10, 0xbb},
0551     {0x88, 0xf3, 0xee, 0xbb},   {0x89, 0x01, 0xf1, 0xbb},
0552     {0x8a, 0xe5, 0x17, 0xbb},   {0x8b, 0xe8, 0xe2, 0xbb},
0553     {0x8c, 0xf7, 0xed, 0xbb},   {0x8d, 0x00, 0xff, 0xbb},
0554     {0x8e, 0xec, 0x10, 0xbb},   {0x8f, 0xf0, 0xed, 0xbb},
0555     {0x90, 0xf9, 0xf2, 0xbb},   {0x91, 0x00, 0x00, 0xbb},
0556     {0x92, 0xe9, 0x0d, 0xbb},   {0x93, 0xf4, 0xf2, 0xbb},
0557     {0x94, 0xfb, 0xf5, 0xbb},   {0x95, 0x00, 0xff, 0xbb},
0558     {0xb6, 0x0f, 0x08, 0xbb},   {0xb7, 0x3d, 0x16, 0xbb},
0559     {0xb8, 0x0c, 0x04, 0xbb},   {0xb9, 0x1c, 0x07, 0xbb},
0560     {0xba, 0x0a, 0x03, 0xbb},   {0xbb, 0x1b, 0x09, 0xbb},
0561     {0xbc, 0x17, 0x0d, 0xbb},   {0xbd, 0x23, 0x1d, 0xbb},
0562     {0xbe, 0x00, 0x28, 0xbb},   {0xbf, 0x11, 0x09, 0xbb},
0563     {0xc0, 0x16, 0x15, 0xbb},   {0xc1, 0x00, 0x1b, 0xbb},
0564     {0xc2, 0x0e, 0x07, 0xbb},   {0xc3, 0x14, 0x10, 0xbb},
0565     {0xc4, 0x00, 0x17, 0xbb},   {0x06, 0x74, 0x8e, 0xbb},
0566     {0xf0, 0x00, 0x01, 0xbb},   {0x06, 0xf4, 0x8e, 0xbb},
0567     {0x00, 0x00, 0x50, 0xdd},   {0x06, 0x74, 0x8e, 0xbb},
0568     {0xf0, 0x00, 0x02, 0xbb},   {0x24, 0x50, 0x20, 0xbb},
0569     {0xf0, 0x00, 0x02, 0xbb},   {0x34, 0x0c, 0x50, 0xbb},
0570     {0xb3, 0x01, 0x41, 0xcc},   {0xf0, 0x00, 0x00, 0xbb},
0571     {0x03, 0x03, 0xc0, 0xbb},
0572     {},
0573 };
0574 static const u8 mi1310_soc_InitSXGA_JPG[][4] = {
0575     {0xb0, 0x03, 0x19, 0xcc},
0576     {0xb0, 0x04, 0x02, 0xcc},
0577     {0xb3, 0x00, 0x64, 0xcc},
0578     {0xb3, 0x00, 0x65, 0xcc},
0579     {0xb3, 0x05, 0x00, 0xcc},
0580     {0xb3, 0x06, 0x00, 0xcc},
0581     {0xb3, 0x08, 0x01, 0xcc},
0582     {0xb3, 0x09, 0x0c, 0xcc},
0583     {0xb3, 0x34, 0x02, 0xcc},
0584     {0xb3, 0x35, 0xdd, 0xcc},
0585     {0xb3, 0x02, 0x00, 0xcc},
0586     {0xb3, 0x03, 0x0a, 0xcc},
0587     {0xb3, 0x04, 0x0d, 0xcc},
0588     {0xb3, 0x20, 0x00, 0xcc},
0589     {0xb3, 0x21, 0x00, 0xcc},
0590     {0xb3, 0x22, 0x03, 0xcc},
0591     {0xb3, 0x23, 0xc0, 0xcc},
0592     {0xb3, 0x14, 0x00, 0xcc},
0593     {0xb3, 0x15, 0x00, 0xcc},
0594     {0xb3, 0x16, 0x04, 0xcc},
0595     {0xb3, 0x17, 0xff, 0xcc},
0596     {0xb3, 0x00, 0x65, 0xcc},
0597     {0xb8, 0x00, 0x00, 0xcc},
0598     {0xbc, 0x00, 0x70, 0xcc},
0599     {0xbc, 0x01, 0x01, 0xcc},
0600     {0xf0, 0x00, 0x02, 0xbb},
0601     {0xc8, 0x9f, 0x0b, 0xbb},
0602     {0x5b, 0x00, 0x01, 0xbb},
0603     {0xf0, 0x00, 0x00, 0xbb},
0604     {0x20, 0x03, 0x02, 0xbb},   /* h/v flip */
0605     {0xf0, 0x00, 0x01, 0xbb},
0606     {0x05, 0x00, 0x07, 0xbb},
0607     {0x34, 0x00, 0x00, 0xbb},
0608     {0x35, 0xff, 0x00, 0xbb},
0609     {0xdc, 0x07, 0x02, 0xbb},
0610     {0xdd, 0x3c, 0x18, 0xbb},
0611     {0xde, 0x92, 0x6d, 0xbb},
0612     {0xdf, 0xcd, 0xb1, 0xbb},
0613     {0xe0, 0xff, 0xe7, 0xbb},
0614     {0x06, 0xf0, 0x0d, 0xbb},
0615     {0x06, 0x70, 0x0e, 0xbb},
0616     {0x4c, 0x00, 0x01, 0xbb},
0617     {0x4d, 0x00, 0x01, 0xbb},
0618     {0xf0, 0x00, 0x02, 0xbb},
0619     {0x2e, 0x0c, 0x60, 0xbb},
0620     {0x21, 0xb6, 0x6e, 0xbb},
0621     {0x37, 0x01, 0x40, 0xbb},
0622     {0xf0, 0x00, 0x00, 0xbb},
0623     {0x07, 0x00, 0x84, 0xbb},
0624     {0x08, 0x02, 0x4a, 0xbb},
0625     {0x05, 0x01, 0x10, 0xbb},
0626     {0x06, 0x00, 0x39, 0xbb},
0627     {0xf0, 0x00, 0x02, 0xbb},
0628     {0x58, 0x02, 0x67, 0xbb},
0629     {0x57, 0x02, 0x00, 0xbb},
0630     {0x5a, 0x02, 0x67, 0xbb},
0631     {0x59, 0x02, 0x00, 0xbb},
0632     {0x5c, 0x12, 0x0d, 0xbb},
0633     {0x5d, 0x16, 0x11, 0xbb},
0634     {0x39, 0x06, 0x18, 0xbb},
0635     {0x3a, 0x06, 0x18, 0xbb},
0636     {0x3b, 0x06, 0x18, 0xbb},
0637     {0x3c, 0x06, 0x18, 0xbb},
0638     {0x64, 0x7b, 0x5b, 0xbb},
0639     {0xb6, 0x00, 0x00, 0xcc},
0640     {0xb6, 0x03, 0x05, 0xcc},
0641     {0xb6, 0x02, 0x00, 0xcc},
0642     {0xb6, 0x05, 0x03, 0xcc},
0643     {0xb6, 0x04, 0xc0, 0xcc},
0644     {0xb6, 0x12, 0xf8, 0xcc},
0645     {0xb6, 0x13, 0x29, 0xcc},
0646     {0xb6, 0x18, 0x09, 0xcc},
0647     {0xb6, 0x17, 0x60, 0xcc},
0648     {0xb6, 0x16, 0x00, 0xcc},
0649     {0xb6, 0x22, 0x12, 0xcc},
0650     {0xb6, 0x23, 0x0b, 0xcc},
0651     {0xbf, 0xc0, 0x39, 0xcc},
0652     {0xbf, 0xc1, 0x04, 0xcc},
0653     {0xbf, 0xcc, 0x00, 0xcc},
0654     {0xb3, 0x01, 0x41, 0xcc},
0655     {0x00, 0x00, 0x80, 0xdd},
0656     {0xf0, 0x00, 0x02, 0xbb},
0657     {0x00, 0x00, 0x10, 0xdd},
0658     {0x22, 0xa0, 0x78, 0xbb},
0659     {0x23, 0xa0, 0x78, 0xbb},
0660     {0x24, 0x7f, 0x00, 0xbb},
0661     {0x28, 0xea, 0x02, 0xbb},
0662     {0x29, 0x86, 0x7a, 0xbb},
0663     {0x5e, 0x52, 0x4c, 0xbb},
0664     {0x5f, 0x20, 0x24, 0xbb},
0665     {0x60, 0x00, 0x02, 0xbb},
0666     {0x02, 0x00, 0xee, 0xbb},
0667     {0x03, 0x39, 0x23, 0xbb},
0668     {0x04, 0x07, 0x24, 0xbb},
0669     {0x09, 0x00, 0xc0, 0xbb},
0670     {0x0a, 0x00, 0x79, 0xbb},
0671     {0x0b, 0x00, 0x04, 0xbb},
0672     {0x0c, 0x00, 0x5c, 0xbb},
0673     {0x0d, 0x00, 0xd9, 0xbb},
0674     {0x0e, 0x00, 0x53, 0xbb},
0675     {0x0f, 0x00, 0x21, 0xbb},
0676     {0x10, 0x00, 0xa4, 0xbb},
0677     {0x11, 0x00, 0xe5, 0xbb},
0678     {0x15, 0x00, 0x00, 0xbb},
0679     {0x16, 0x00, 0x00, 0xbb},
0680     {0x17, 0x00, 0x00, 0xbb},
0681     {0x18, 0x00, 0x00, 0xbb},
0682     {0x19, 0x00, 0x00, 0xbb},
0683     {0x1a, 0x00, 0x00, 0xbb},
0684     {0x1b, 0x00, 0x00, 0xbb},
0685     {0x1c, 0x00, 0x00, 0xbb},
0686     {0x1d, 0x00, 0x00, 0xbb},
0687     {0x1e, 0x00, 0x00, 0xbb},
0688     {0xf0, 0x00, 0x01, 0xbb},
0689     {0x00, 0x00, 0x20, 0xdd},
0690     {0x06, 0xf0, 0x8e, 0xbb},
0691     {0x00, 0x00, 0x80, 0xdd},
0692     {0x06, 0x70, 0x8e, 0xbb},
0693     {0xf0, 0x00, 0x02, 0xbb},
0694     {0x00, 0x00, 0x20, 0xdd},
0695     {0x5e, 0x6a, 0x53, 0xbb},
0696     {0x5f, 0x40, 0x2c, 0xbb},
0697     {0xf0, 0x00, 0x01, 0xbb},
0698     {0x00, 0x00, 0x20, 0xdd},
0699     {0x58, 0x00, 0x00, 0xbb},
0700     {0x53, 0x09, 0x03, 0xbb},
0701     {0x54, 0x31, 0x18, 0xbb},
0702     {0x55, 0x8b, 0x5f, 0xbb},
0703     {0x56, 0xc0, 0xa9, 0xbb},
0704     {0x57, 0xe0, 0xd2, 0xbb},
0705     {0xe1, 0x00, 0x00, 0xbb},
0706     {0xdc, 0x09, 0x03, 0xbb},
0707     {0xdd, 0x31, 0x18, 0xbb},
0708     {0xde, 0x8b, 0x5f, 0xbb},
0709     {0xdf, 0xc0, 0xa9, 0xbb},
0710     {0xe0, 0xe0, 0xd2, 0xbb},
0711     {0xb3, 0x5c, 0x01, 0xcc},
0712     {0xf0, 0x00, 0x01, 0xbb},
0713     {0x06, 0xf0, 0x8e, 0xbb},
0714     {0xf0, 0x00, 0x02, 0xbb},
0715     {0x2f, 0xde, 0x20, 0xbb},
0716     {0xf0, 0x00, 0x02, 0xbb},
0717     {0x24, 0x50, 0x20, 0xbb},
0718     {0xbc, 0x0e, 0x00, 0xcc},
0719     {0xbc, 0x0f, 0x05, 0xcc},
0720     {0xbc, 0x10, 0xc0, 0xcc},
0721     {0xf0, 0x00, 0x02, 0xbb},
0722     {0x34, 0x0c, 0x50, 0xbb},
0723     {0xbc, 0x11, 0x03, 0xcc},
0724     {0xf0, 0x00, 0x01, 0xbb},
0725     {0x80, 0x00, 0x03, 0xbb},
0726     {0x81, 0xc7, 0x14, 0xbb},
0727     {0x82, 0xeb, 0xe8, 0xbb},
0728     {0x83, 0xfe, 0xf4, 0xbb},
0729     {0x84, 0xcd, 0x10, 0xbb},
0730     {0x85, 0xf3, 0xee, 0xbb},
0731     {0x86, 0xff, 0xf1, 0xbb},
0732     {0x87, 0xcd, 0x10, 0xbb},
0733     {0x88, 0xf3, 0xee, 0xbb},
0734     {0x89, 0x01, 0xf1, 0xbb},
0735     {0x8a, 0xe5, 0x17, 0xbb},
0736     {0x8b, 0xe8, 0xe2, 0xbb},
0737     {0x8c, 0xf7, 0xed, 0xbb},
0738     {0x8d, 0x00, 0xff, 0xbb},
0739     {0x8e, 0xec, 0x10, 0xbb},
0740     {0x8f, 0xf0, 0xed, 0xbb},
0741     {0x90, 0xf9, 0xf2, 0xbb},
0742     {0x91, 0x00, 0x00, 0xbb},
0743     {0x92, 0xe9, 0x0d, 0xbb},
0744     {0x93, 0xf4, 0xf2, 0xbb},
0745     {0x94, 0xfb, 0xf5, 0xbb},
0746     {0x95, 0x00, 0xff, 0xbb},
0747     {0xb6, 0x0f, 0x08, 0xbb},
0748     {0xb7, 0x3d, 0x16, 0xbb},
0749     {0xb8, 0x0c, 0x04, 0xbb},
0750     {0xb9, 0x1c, 0x07, 0xbb},
0751     {0xba, 0x0a, 0x03, 0xbb},
0752     {0xbb, 0x1b, 0x09, 0xbb},
0753     {0xbc, 0x17, 0x0d, 0xbb},
0754     {0xbd, 0x23, 0x1d, 0xbb},
0755     {0xbe, 0x00, 0x28, 0xbb},
0756     {0xbf, 0x11, 0x09, 0xbb},
0757     {0xc0, 0x16, 0x15, 0xbb},
0758     {0xc1, 0x00, 0x1b, 0xbb},
0759     {0xc2, 0x0e, 0x07, 0xbb},
0760     {0xc3, 0x14, 0x10, 0xbb},
0761     {0xc4, 0x00, 0x17, 0xbb},
0762     {0x06, 0x74, 0x8e, 0xbb},
0763     {0xf0, 0x00, 0x00, 0xbb},
0764     {0x03, 0x03, 0xc0, 0xbb},
0765     {}
0766 };
0767 
0768 static const u8 mi1320_gamma[17] = {
0769     0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,
0770     0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff
0771 };
0772 static const u8 mi1320_matrix[9] = {
0773     0x54, 0xda, 0x06, 0xf1, 0x50, 0xf4, 0xf7, 0xea, 0x52
0774 };
0775 static const u8 mi1320_initVGA_data[][4] = {
0776     {0xb3, 0x01, 0x01, 0xcc},   {0x00, 0x00, 0x33, 0xdd},
0777     {0xb0, 0x03, 0x19, 0xcc},   {0x00, 0x00, 0x33, 0xdd},
0778     {0xb0, 0x04, 0x02, 0xcc},   {0x00, 0x00, 0x33, 0xdd},
0779     {0xb3, 0x00, 0x64, 0xcc},   {0xb3, 0x00, 0x65, 0xcc},
0780     {0xb0, 0x16, 0x03, 0xcc},   {0xb3, 0x05, 0x00, 0xcc},
0781     {0xb3, 0x06, 0x00, 0xcc},   {0xb3, 0x08, 0x01, 0xcc},
0782     {0xb3, 0x09, 0x0c, 0xcc},   {0xb3, 0x34, 0x02, 0xcc},
0783     {0xb3, 0x35, 0xc8, 0xcc},   /* i2c add: 48 */
0784     {0xb3, 0x02, 0x00, 0xcc},
0785     {0xb3, 0x03, 0x0a, 0xcc},   {0xb3, 0x04, 0x05, 0xcc},
0786     {0xb3, 0x20, 0x00, 0xcc},   {0xb3, 0x21, 0x00, 0xcc},
0787     {0xb3, 0x22, 0x03, 0xcc},   {0xb3, 0x23, 0xc0, 0xcc},
0788     {0xb3, 0x14, 0x00, 0xcc},   {0xb3, 0x15, 0x00, 0xcc},
0789     {0xb3, 0x16, 0x04, 0xcc},   {0xb3, 0x17, 0xff, 0xcc},
0790     {0xb3, 0x00, 0x67, 0xcc},   {0xbc, 0x00, 0xd0, 0xcc},
0791     {0xbc, 0x01, 0x01, 0xcc},   {0xf0, 0x00, 0x00, 0xbb},
0792     {0x0d, 0x00, 0x09, 0xbb},   {0x00, 0x01, 0x00, 0xdd},
0793     {0x0d, 0x00, 0x08, 0xbb},   {0xf0, 0x00, 0x01, 0xbb},
0794     {0xa1, 0x05, 0x00, 0xbb},   {0xa4, 0x03, 0xc0, 0xbb},
0795     {0xf0, 0x00, 0x02, 0xbb},   {0x00, 0x00, 0x10, 0xdd},
0796     {0xc8, 0x9f, 0x0b, 0xbb},   {0x00, 0x00, 0x10, 0xdd},
0797     {0xf0, 0x00, 0x00, 0xbb},   {0x00, 0x00, 0x10, 0xdd},
0798     {0x20, 0x01, 0x00, 0xbb},   {0x00, 0x00, 0x10, 0xdd},
0799     {0xf0, 0x00, 0x01, 0xbb},   {0x9d, 0x3c, 0xa0, 0xbb},
0800     {0x47, 0x30, 0x30, 0xbb},   {0xf0, 0x00, 0x00, 0xbb},
0801     {0x0a, 0x80, 0x11, 0xbb},   {0x35, 0x00, 0x22, 0xbb},
0802     {0xf0, 0x00, 0x02, 0xbb},   {0x9d, 0xc5, 0x05, 0xbb},
0803     {0xdc, 0x0f, 0xfc, 0xbb},   {0xf0, 0x00, 0x01, 0xbb},
0804     {0x06, 0x74, 0x0e, 0xbb},   {0x80, 0x00, 0x06, 0xbb},
0805     {0x81, 0x04, 0x00, 0xbb},   {0x82, 0x01, 0x02, 0xbb},
0806     {0x83, 0x03, 0x02, 0xbb},   {0x84, 0x05, 0x00, 0xbb},
0807     {0x85, 0x01, 0x00, 0xbb},   {0x86, 0x03, 0x02, 0xbb},
0808     {0x87, 0x05, 0x00, 0xbb},   {0x88, 0x01, 0x00, 0xbb},
0809     {0x89, 0x02, 0x02, 0xbb},   {0x8a, 0xfd, 0x04, 0xbb},
0810     {0x8b, 0xfc, 0xfd, 0xbb},   {0x8c, 0xff, 0xfd, 0xbb},
0811     {0x8d, 0x00, 0x00, 0xbb},   {0x8e, 0xfe, 0x05, 0xbb},
0812     {0x8f, 0xfc, 0xfd, 0xbb},   {0x90, 0xfe, 0xfd, 0xbb},
0813     {0x91, 0x00, 0x00, 0xbb},   {0x92, 0xfe, 0x03, 0xbb},
0814     {0x93, 0xfd, 0xfe, 0xbb},   {0x94, 0xff, 0xfd, 0xbb},
0815     {0x95, 0x00, 0x00, 0xbb},   {0xb6, 0x07, 0x05, 0xbb},
0816     {0xb7, 0x13, 0x06, 0xbb},   {0xb8, 0x08, 0x06, 0xbb},
0817     {0xb9, 0x14, 0x08, 0xbb},   {0xba, 0x06, 0x05, 0xbb},
0818     {0xbb, 0x13, 0x06, 0xbb},   {0xbc, 0x03, 0x01, 0xbb},
0819     {0xbd, 0x03, 0x04, 0xbb},   {0xbe, 0x00, 0x02, 0xbb},
0820     {0xbf, 0x03, 0x01, 0xbb},   {0xc0, 0x02, 0x04, 0xbb},
0821     {0xc1, 0x00, 0x04, 0xbb},   {0xc2, 0x02, 0x01, 0xbb},
0822     {0xc3, 0x01, 0x03, 0xbb},   {0xc4, 0x00, 0x04, 0xbb},
0823     {0xf0, 0x00, 0x00, 0xbb},   {0x05, 0x01, 0x13, 0xbb},
0824     {0x06, 0x00, 0x11, 0xbb},   {0x07, 0x00, 0x85, 0xbb},
0825     {0x08, 0x00, 0x27, 0xbb},
0826     {0x20, 0x01, 0x00, 0xbb},   /* h/v flips - was 03 */
0827     {0x21, 0x80, 0x00, 0xbb},   {0x22, 0x0d, 0x0f, 0xbb},
0828     {0x24, 0x80, 0x00, 0xbb},   {0x59, 0x00, 0xff, 0xbb},
0829     {0xf0, 0x00, 0x02, 0xbb},   {0x39, 0x03, 0x0d, 0xbb},
0830     {0x3a, 0x06, 0x1b, 0xbb},   {0x3b, 0x00, 0x95, 0xbb},
0831     {0x3c, 0x04, 0xdb, 0xbb},   {0x57, 0x02, 0x00, 0xbb},
0832     {0x58, 0x02, 0x66, 0xbb},   {0x59, 0x00, 0xff, 0xbb},
0833     {0x5a, 0x01, 0x33, 0xbb},   {0x5c, 0x12, 0x0d, 0xbb},
0834     {0x5d, 0x16, 0x11, 0xbb},   {0x64, 0x5e, 0x1c, 0xbb},
0835     {0xf0, 0x00, 0x02, 0xbb},   {0x2f, 0xd1, 0x00, 0xbb},
0836     {0x5b, 0x00, 0x01, 0xbb},   {0xf0, 0x00, 0x02, 0xbb},
0837     {0x36, 0x68, 0x10, 0xbb},   {0x00, 0x00, 0x30, 0xdd},
0838     {0x37, 0x82, 0x00, 0xbb},   {0xbc, 0x0e, 0x00, 0xcc},
0839     {0xbc, 0x0f, 0x05, 0xcc},   {0xbc, 0x10, 0xc0, 0xcc},
0840     {0xbc, 0x11, 0x03, 0xcc},   {0xb6, 0x00, 0x00, 0xcc},
0841     {0xb6, 0x03, 0x05, 0xcc},   {0xb6, 0x02, 0x00, 0xcc},
0842     {0xb6, 0x05, 0x04, 0xcc},   {0xb6, 0x04, 0x00, 0xcc},
0843     {0xb6, 0x12, 0xf8, 0xcc},   {0xb6, 0x13, 0x29, 0xcc},
0844     {0xb6, 0x18, 0x0a, 0xcc},   {0xb6, 0x17, 0x00, 0xcc},
0845     {0xb6, 0x16, 0x00, 0xcc},   {0xb6, 0x22, 0x12, 0xcc},
0846     {0xb6, 0x23, 0x0b, 0xcc},   {0xbf, 0xc0, 0x26, 0xcc},
0847     {0xbf, 0xc1, 0x02, 0xcc},   {0xbf, 0xcc, 0x04, 0xcc},
0848     {0xbc, 0x02, 0x18, 0xcc},   {0xbc, 0x03, 0x50, 0xcc},
0849     {0xbc, 0x04, 0x18, 0xcc},   {0xbc, 0x05, 0x00, 0xcc},
0850     {0xbc, 0x06, 0x00, 0xcc},   {0xbc, 0x08, 0x30, 0xcc},
0851     {0xbc, 0x09, 0x40, 0xcc},   {0xbc, 0x0a, 0x10, 0xcc},
0852     {0xbc, 0x0b, 0x00, 0xcc},   {0xbc, 0x0c, 0x00, 0xcc},
0853     {0xb3, 0x5c, 0x01, 0xcc},   {0xb3, 0x01, 0x41, 0xcc},
0854     {}
0855 };
0856 static const u8 mi1320_initQVGA_data[][4] = {
0857     {0xb3, 0x01, 0x01, 0xcc},   {0x00, 0x00, 0x33, 0xdd},
0858     {0xb0, 0x03, 0x19, 0xcc},   {0x00, 0x00, 0x33, 0xdd},
0859     {0xb0, 0x04, 0x02, 0xcc},   {0x00, 0x00, 0x33, 0xdd},
0860     {0xb3, 0x00, 0x64, 0xcc},   {0xb3, 0x00, 0x65, 0xcc},
0861     {0xb0, 0x16, 0x03, 0xcc},   {0xb3, 0x05, 0x01, 0xcc},
0862     {0xb3, 0x06, 0x01, 0xcc},   {0xb3, 0x08, 0x01, 0xcc},
0863     {0xb3, 0x09, 0x0c, 0xcc},   {0xb3, 0x34, 0x02, 0xcc},
0864     {0xb3, 0x35, 0xc8, 0xcc},   {0xb3, 0x02, 0x00, 0xcc},
0865     {0xb3, 0x03, 0x0a, 0xcc},   {0xb3, 0x04, 0x05, 0xcc},
0866     {0xb3, 0x20, 0x00, 0xcc},   {0xb3, 0x21, 0x00, 0xcc},
0867     {0xb3, 0x22, 0x01, 0xcc},   {0xb3, 0x23, 0xe0, 0xcc},
0868     {0xb3, 0x14, 0x00, 0xcc},   {0xb3, 0x15, 0x00, 0xcc},
0869     {0xb3, 0x16, 0x02, 0xcc},   {0xb3, 0x17, 0x7f, 0xcc},
0870     {0xb3, 0x00, 0x65, 0xcc},   {0xb8, 0x00, 0x00, 0xcc},
0871     {0xbc, 0x00, 0xd0, 0xcc},   {0xbc, 0x01, 0x01, 0xcc},
0872     {0xf0, 0x00, 0x00, 0xbb},   {0x0d, 0x00, 0x09, 0xbb},
0873     {0x00, 0x01, 0x00, 0xdd},   {0x0d, 0x00, 0x08, 0xbb},
0874     {0xf0, 0x00, 0x00, 0xbb},   {0x02, 0x00, 0x64, 0xbb},
0875     {0x05, 0x01, 0x78, 0xbb},   {0x06, 0x00, 0x11, 0xbb},
0876     {0x07, 0x01, 0x42, 0xbb},   {0x08, 0x00, 0x11, 0xbb},
0877     {0x20, 0x01, 0x00, 0xbb},   {0x21, 0x80, 0x00, 0xbb},
0878     {0x22, 0x0d, 0x0f, 0xbb},   {0x24, 0x80, 0x00, 0xbb},
0879     {0x59, 0x00, 0xff, 0xbb},   {0xf0, 0x00, 0x01, 0xbb},
0880     {0x9d, 0x3c, 0xa0, 0xbb},   {0x47, 0x30, 0x30, 0xbb},
0881     {0xf0, 0x00, 0x00, 0xbb},   {0x0a, 0x80, 0x11, 0xbb},
0882     {0x35, 0x00, 0x22, 0xbb},   {0xf0, 0x00, 0x02, 0xbb},
0883     {0x9d, 0xc5, 0x05, 0xbb},   {0xdc, 0x0f, 0xfc, 0xbb},
0884     {0xf0, 0x00, 0x01, 0xbb},   {0x06, 0x74, 0x0e, 0xbb},
0885     {0x80, 0x00, 0x06, 0xbb},   {0x81, 0x04, 0x00, 0xbb},
0886     {0x82, 0x01, 0x02, 0xbb},   {0x83, 0x03, 0x02, 0xbb},
0887     {0x84, 0x05, 0x00, 0xbb},   {0x85, 0x01, 0x00, 0xbb},
0888     {0x86, 0x03, 0x02, 0xbb},   {0x87, 0x05, 0x00, 0xbb},
0889     {0x88, 0x01, 0x00, 0xbb},   {0x89, 0x02, 0x02, 0xbb},
0890     {0x8a, 0xfd, 0x04, 0xbb},   {0x8b, 0xfc, 0xfd, 0xbb},
0891     {0x8c, 0xff, 0xfd, 0xbb},   {0x8d, 0x00, 0x00, 0xbb},
0892     {0x8e, 0xfe, 0x05, 0xbb},   {0x8f, 0xfc, 0xfd, 0xbb},
0893     {0x90, 0xfe, 0xfd, 0xbb},   {0x91, 0x00, 0x00, 0xbb},
0894     {0x92, 0xfe, 0x03, 0xbb},   {0x93, 0xfd, 0xfe, 0xbb},
0895     {0x94, 0xff, 0xfd, 0xbb},   {0x95, 0x00, 0x00, 0xbb},
0896     {0xb6, 0x07, 0x05, 0xbb},   {0xb7, 0x13, 0x06, 0xbb},
0897     {0xb8, 0x08, 0x06, 0xbb},   {0xb9, 0x14, 0x08, 0xbb},
0898     {0xba, 0x06, 0x05, 0xbb},   {0xbb, 0x13, 0x06, 0xbb},
0899     {0xbc, 0x03, 0x01, 0xbb},   {0xbd, 0x03, 0x04, 0xbb},
0900     {0xbe, 0x00, 0x02, 0xbb},   {0xbf, 0x03, 0x01, 0xbb},
0901     {0xc0, 0x02, 0x04, 0xbb},   {0xc1, 0x00, 0x04, 0xbb},
0902     {0xc2, 0x02, 0x01, 0xbb},   {0xc3, 0x01, 0x03, 0xbb},
0903     {0xc4, 0x00, 0x04, 0xbb},   {0xf0, 0x00, 0x02, 0xbb},
0904     {0xc8, 0x00, 0x00, 0xbb},   {0x2e, 0x00, 0x00, 0xbb},
0905     {0x2e, 0x0c, 0x5b, 0xbb},   {0x2f, 0xd1, 0x00, 0xbb},
0906     {0x39, 0x03, 0xca, 0xbb},   {0x3a, 0x06, 0x80, 0xbb},
0907     {0x3b, 0x01, 0x52, 0xbb},   {0x3c, 0x05, 0x40, 0xbb},
0908     {0x57, 0x01, 0x9c, 0xbb},   {0x58, 0x01, 0xee, 0xbb},
0909     {0x59, 0x00, 0xf0, 0xbb},   {0x5a, 0x01, 0x20, 0xbb},
0910     {0x5c, 0x1d, 0x17, 0xbb},   {0x5d, 0x22, 0x1c, 0xbb},
0911     {0x64, 0x1e, 0x1c, 0xbb},   {0x5b, 0x00, 0x01, 0xbb},
0912     {0xf0, 0x00, 0x02, 0xbb},   {0x36, 0x68, 0x10, 0xbb},
0913     {0x00, 0x00, 0x30, 0xdd},   {0x37, 0x81, 0x00, 0xbb},
0914     {0xbc, 0x02, 0x18, 0xcc},   {0xbc, 0x03, 0x50, 0xcc},
0915     {0xbc, 0x04, 0x18, 0xcc},   {0xbc, 0x05, 0x00, 0xcc},
0916     {0xbc, 0x06, 0x00, 0xcc},   {0xbc, 0x08, 0x30, 0xcc},
0917     {0xbc, 0x09, 0x40, 0xcc},   {0xbc, 0x0a, 0x10, 0xcc},
0918     {0xbc, 0x0b, 0x00, 0xcc},   {0xbc, 0x0c, 0x00, 0xcc},
0919     {0xbf, 0xc0, 0x26, 0xcc},   {0xbf, 0xc1, 0x02, 0xcc},
0920     {0xbf, 0xcc, 0x04, 0xcc},   {0xb3, 0x5c, 0x01, 0xcc},
0921     {0xb3, 0x01, 0x41, 0xcc},
0922     {}
0923 };
0924 
0925 static const u8 mi1320_soc_InitVGA[][4] = {
0926     {0xb3, 0x01, 0x01, 0xcc},
0927     {0xb0, 0x03, 0x19, 0xcc},
0928     {0xb0, 0x04, 0x02, 0xcc},
0929     {0x00, 0x00, 0x30, 0xdd},
0930     {0xb3, 0x00, 0x64, 0xcc},
0931     {0xb3, 0x00, 0x67, 0xcc},
0932     {0xb3, 0x05, 0x01, 0xcc},
0933     {0xb3, 0x06, 0x01, 0xcc},
0934     {0xb3, 0x08, 0x01, 0xcc},
0935     {0xb3, 0x09, 0x0c, 0xcc},
0936     {0xb3, 0x34, 0x02, 0xcc},
0937     {0xb3, 0x35, 0xc8, 0xcc},   /* i2c add: 48 */
0938     {0xb3, 0x02, 0x00, 0xcc},
0939     {0xb3, 0x03, 0x0a, 0xcc},
0940     {0xb3, 0x04, 0x05, 0xcc},
0941     {0xb3, 0x20, 0x00, 0xcc},
0942     {0xb3, 0x21, 0x00, 0xcc},
0943     {0xb3, 0x22, 0x01, 0xcc},
0944     {0xb3, 0x23, 0xe0, 0xcc},
0945     {0xb3, 0x14, 0x00, 0xcc},
0946     {0xb3, 0x15, 0x00, 0xcc},
0947     {0xb3, 0x16, 0x02, 0xcc},
0948     {0xb3, 0x17, 0x7f, 0xcc},
0949     {0xb3, 0x00, 0x67, 0xcc},
0950     {0xb8, 0x00, 0x00, 0xcc},
0951     {0xbc, 0x00, 0x71, 0xcc},
0952     {0xbc, 0x01, 0x01, 0xcc},
0953     {0xb3, 0x5c, 0x01, 0xcc},
0954     {0xf0, 0x00, 0x02, 0xbb},
0955     {0x00, 0x00, 0x10, 0xdd},
0956     {0xc8, 0x00, 0x00, 0xbb},
0957     {0x00, 0x00, 0x30, 0xdd},
0958     {0xf0, 0x00, 0x00, 0xbb},
0959     {0x00, 0x00, 0x10, 0xdd},
0960     {0x07, 0x00, 0xe0, 0xbb},
0961     {0x08, 0x00, 0x0b, 0xbb},
0962     {0x21, 0x00, 0x0c, 0xbb},
0963     {0x20, 0x01, 0x03, 0xbb},   /* h/v flip */
0964     {0xbf, 0xc0, 0x26, 0xcc},
0965     {0xbf, 0xc1, 0x02, 0xcc},
0966     {0xbf, 0xcc, 0x04, 0xcc},
0967     {0xb3, 0x01, 0x41, 0xcc},
0968     {0xf0, 0x00, 0x00, 0xbb},
0969     {0x05, 0x01, 0x78, 0xbb},
0970     {0x06, 0x00, 0x11, 0xbb},
0971     {0x07, 0x01, 0x42, 0xbb},
0972     {0x08, 0x00, 0x11, 0xbb},
0973     {0x20, 0x01, 0x03, 0xbb},   /* h/v flip */
0974     {0x21, 0x80, 0x00, 0xbb},
0975     {0x22, 0x0d, 0x0f, 0xbb},
0976     {0x24, 0x80, 0x00, 0xbb},
0977     {0x59, 0x00, 0xff, 0xbb},
0978     {0xf0, 0x00, 0x02, 0xbb},
0979     {0x39, 0x03, 0xca, 0xbb},
0980     {0x3a, 0x06, 0x80, 0xbb},
0981     {0x3b, 0x01, 0x52, 0xbb},
0982     {0x3c, 0x05, 0x40, 0xbb},
0983     {0x57, 0x01, 0x9c, 0xbb},
0984     {0x58, 0x01, 0xee, 0xbb},
0985     {0x59, 0x00, 0xf0, 0xbb},
0986     {0x5a, 0x01, 0x20, 0xbb},
0987     {0x5c, 0x1d, 0x17, 0xbb},
0988     {0x5d, 0x22, 0x1c, 0xbb},
0989     {0x64, 0x1e, 0x1c, 0xbb},
0990     {0x5b, 0x00, 0x00, 0xbb},
0991     {0xf0, 0x00, 0x02, 0xbb},
0992     {0x22, 0xa0, 0x78, 0xbb},
0993     {0x23, 0xa0, 0x78, 0xbb},
0994     {0x24, 0x7f, 0x00, 0xbb},
0995     {0x28, 0xea, 0x02, 0xbb},
0996     {0x29, 0x86, 0x7a, 0xbb},
0997     {0x5e, 0x52, 0x4c, 0xbb},
0998     {0x5f, 0x20, 0x24, 0xbb},
0999     {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 };
1028 static 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 };
1141 static 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 };
1264 static 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 };
1268 static const u8 po3130_matrix[9] = {
1269     0x5f, 0xec, 0xf5, 0xf1, 0x5a, 0xf5, 0xf1, 0xec, 0x63
1270 };
1271 
1272 static 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 };
1356 static 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 
1371 static 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 
1457 static 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 };
1461 static const u8 hv7131r_matrix[9] = {
1462     0x5f, 0xec, 0xf5, 0xf1, 0x5a, 0xf5, 0xf1, 0xec, 0x63
1463 };
1464 static 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 
1552 static 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 
1650 static 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 };
1654 static const u8 ov7660_matrix[9] = {
1655     0x5a, 0xf0, 0xf6, 0xf3, 0x57, 0xf6, 0xf3, 0xef, 0x62
1656 };
1657 static 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 };
1716 static 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 
1785 static const u8 ov7660_50HZ[][4] = {
1786     {0x00, 0x3b, 0x08, 0xaa},
1787     {0x00, 0x9d, 0x40, 0xaa},
1788     {0x00, 0x13, 0xa7, 0xaa},
1789     {}
1790 };
1791 
1792 static const u8 ov7660_60HZ[][4] = {
1793     {0x00, 0x3b, 0x00, 0xaa},
1794     {0x00, 0x9e, 0x40, 0xaa},
1795     {0x00, 0x13, 0xa7, 0xaa},
1796     {}
1797 };
1798 
1799 static const u8 ov7660_NoFlicker[][4] = {
1800     {0x00, 0x13, 0x87, 0xaa},
1801     {}
1802 };
1803 
1804 static 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 
2042 static 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 */
2291 static 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 };
2295 static const u8 po1200_matrix[9] = {
2296     0x60, 0xf9, 0xe5, 0xe7, 0x50, 0x05, 0xf3, 0xe6, 0x5e
2297 };
2298 static 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 
2560 static 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 };
2660 static 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 };
2704 static 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 };
2740 static 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 };
2756 static 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 };
2772 static 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 };
2786 static 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 
2793 struct 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 */
2804 static 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 };
2845 static 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 */
2890 static 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 }
2916 static 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 
2933 static 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 }
2953 static 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 
2964 static 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 
3000 static 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 
3055 static 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 
3087 static 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 
3097 static 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 */
3127 static 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 */
3143 static 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 
3255 static 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 
3267 static void setcontrast(struct gspca_dev *gspca_dev, u8 val)
3268 {
3269     i2c_write(gspca_dev, 0x99, &val, 1);
3270 }
3271 
3272 static 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 
3281 static 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 
3319 static 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 
3330 static 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 }
3354 static void setgain(struct gspca_dev *gspca_dev, u8 val)
3355 {
3356     i2c_write(gspca_dev, 0x15, &val, 1);
3357 }
3358 
3359 static 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 
3369 static 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 
3376 static void setgamma(struct gspca_dev *gspca_dev)
3377 {
3378 /*fixme:to do */
3379     usb_exchange(gspca_dev, poxxxx_gamma);
3380 }
3381 
3382 static 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 
3411 static 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 
3420 static 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 
3580 static 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 */
3600 static 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 
3619 static 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 
3648 static 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 
3694 static const struct v4l2_ctrl_ops sd_ctrl_ops = {
3695     .s_ctrl = sd_s_ctrl,
3696 };
3697 
3698 static 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 */
3785 static 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)
3800 static 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 };
3816 MODULE_DEVICE_TABLE(usb, device_table);
3817 
3818 /* -- device connect -- */
3819 static 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 
3826 static 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 
3838 module_usb_driver(sd_driver);