root/drivers/media/usb/gspca/vc032x.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. reg_r_i
  2. reg_r
  3. reg_w_i
  4. reg_w
  5. read_sensor_register
  6. vc032x_probe_sensor
  7. i2c_write
  8. put_tab_to_reg
  9. usb_exchange
  10. sd_config
  11. sd_init
  12. setbrightness
  13. setcontrast
  14. setcolors
  15. sethvflip
  16. setlightfreq
  17. setsharpness
  18. setgain
  19. setexposure
  20. setautogain
  21. setgamma
  22. setbacklight
  23. setwb
  24. sd_start
  25. sd_stopN
  26. sd_stop0
  27. sd_pkt_scan
  28. sd_s_ctrl
  29. sd_init_controls
  30. sd_probe

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /*
   3  * Z-star vc0321 library
   4  *
   5  * Copyright (C) 2009-2010 Jean-François Moine <http://moinejf.free.fr>
   6  * Copyright (C) 2006 Koninski Artur takeshi87@o2.pl
   7  * Copyright (C) 2006 Michel Xhaard
   8  */
   9 
  10 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  11 
  12 #define MODULE_NAME "vc032x"
  13 
  14 #include "gspca.h"
  15 
  16 MODULE_AUTHOR("Jean-François Moine <http://moinejf.free.fr>");
  17 MODULE_DESCRIPTION("GSPCA/VC032X USB Camera Driver");
  18 MODULE_LICENSE("GPL");
  19 
  20 /* specific webcam descriptor */
  21 struct sd {
  22         struct gspca_dev gspca_dev;     /* !! must be the first item */
  23         struct { /* hvflip cluster */
  24                 struct v4l2_ctrl *hflip;
  25                 struct v4l2_ctrl *vflip;
  26         };
  27 
  28         u8 image_offset;
  29 
  30         u8 bridge;
  31         u8 sensor;
  32         u8 flags;
  33 #define FL_SAMSUNG 0x01         /* SamsungQ1 (2 sensors) */
  34 #define FL_HFLIP 0x02           /* mirrored by default */
  35 #define FL_VFLIP 0x04           /* vertical flipped by default */
  36 };
  37 enum bridges {
  38         BRIDGE_VC0321,
  39         BRIDGE_VC0323,
  40 };
  41 enum sensors {
  42         SENSOR_HV7131R,
  43         SENSOR_MI0360,
  44         SENSOR_MI1310_SOC,
  45         SENSOR_MI1320,
  46         SENSOR_MI1320_SOC,
  47         SENSOR_OV7660,
  48         SENSOR_OV7670,
  49         SENSOR_PO1200,
  50         SENSOR_PO3130NC,
  51         SENSOR_POxxxx,
  52         NSENSORS
  53 };
  54 
  55 
  56 static const struct v4l2_pix_format vc0321_mode[] = {
  57         {320, 240, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE,
  58                 .bytesperline = 320 * 2,
  59                 .sizeimage = 320 * 240 * 2,
  60                 .colorspace = V4L2_COLORSPACE_SRGB,
  61                 .priv = 1},
  62         {640, 480, V4L2_PIX_FMT_YVYU, V4L2_FIELD_NONE,
  63                 .bytesperline = 640 * 2,
  64                 .sizeimage = 640 * 480 * 2,
  65                 .colorspace = V4L2_COLORSPACE_SRGB,
  66                 .priv = 0},
  67 };
  68 static const struct v4l2_pix_format vc0323_mode[] = {
  69         {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
  70                 .bytesperline = 320,
  71                 .sizeimage = 320 * 240 * 3 / 8 + 590,
  72                 .colorspace = V4L2_COLORSPACE_JPEG,
  73                 .priv = 1},
  74         {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
  75                 .bytesperline = 640,
  76                 .sizeimage = 640 * 480 * 3 / 8 + 590,
  77                 .colorspace = V4L2_COLORSPACE_JPEG,
  78                 .priv = 0},
  79         {1280, 960, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE, /* mi1310_soc only */
  80                 .bytesperline = 1280,
  81                 .sizeimage = 1280 * 960 * 3 / 8 + 590,
  82                 .colorspace = V4L2_COLORSPACE_JPEG,
  83                 .priv = 2},
  84 };
  85 static const struct v4l2_pix_format bi_mode[] = {
  86         {320, 240, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE,
  87                 .bytesperline = 320 * 2,
  88                 .sizeimage = 320 * 240 * 2,
  89                 .colorspace = V4L2_COLORSPACE_SRGB,
  90                 .priv = 2},
  91         {640, 480, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE,
  92                 .bytesperline = 640 * 2,
  93                 .sizeimage = 640 * 480 * 2,
  94                 .colorspace = V4L2_COLORSPACE_SRGB,
  95                 .priv = 1},
  96         {1280, 1024, V4L2_PIX_FMT_YUYV, V4L2_FIELD_NONE,
  97                 .bytesperline = 1280 * 2,
  98                 .sizeimage = 1280 * 1024 * 2,
  99                 .colorspace = V4L2_COLORSPACE_SRGB,
 100                 .priv = 0},
 101 };
 102 static const struct v4l2_pix_format svga_mode[] = {
 103         {800, 600, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
 104                 .bytesperline = 800,
 105                 .sizeimage = 800 * 600 * 1 / 4 + 590,
 106                 .colorspace = V4L2_COLORSPACE_JPEG,
 107                 .priv = 0},
 108 };
 109 
 110 /* OV7660/7670 registers */
 111 #define OV7660_REG_MVFP 0x1e
 112 #define OV7660_MVFP_MIRROR      0x20
 113 #define OV7660_MVFP_VFLIP       0x10
 114 
 115 static const u8 mi0360_matrix[9] = {
 116         0x50, 0xf8, 0xf8, 0xf5, 0x50, 0xfb, 0xff, 0xf1, 0x50
 117 };
 118 
 119 static const u8 mi0360_initVGA_JPG[][4] = {
 120         {0xb0, 0x03, 0x19, 0xcc},
 121         {0xb0, 0x04, 0x02, 0xcc},
 122         {0xb3, 0x00, 0x24, 0xcc},
 123         {0xb3, 0x00, 0x25, 0xcc},
 124         {0xb3, 0x08, 0x01, 0xcc},
 125         {0xb3, 0x09, 0x0c, 0xcc},
 126         {0xb3, 0x05, 0x01, 0xcc},
 127         {0xb3, 0x06, 0x03, 0xcc},
 128         {0xb3, 0x03, 0x0a, 0xcc},
 129         {0xb3, 0x20, 0x00, 0xcc},
 130         {0xb3, 0x21, 0x00, 0xcc},
 131         {0xb3, 0x22, 0x01, 0xcc},
 132         {0xb3, 0x23, 0xe0, 0xcc},
 133         {0xb3, 0x04, 0x05, 0xcc},
 134         {0xb3, 0x14, 0x00, 0xcc},
 135         {0xb3, 0x15, 0x00, 0xcc},
 136         {0xb3, 0x16, 0x02, 0xcc},
 137         {0xb3, 0x17, 0x7f, 0xcc},
 138         {0xb3, 0x35, 0xdd, 0xcc},       /* i2c add: 5d */
 139         {0xb3, 0x34, 0x02, 0xcc},
 140         {0xb3, 0x00, 0x25, 0xcc},
 141         {0xbc, 0x00, 0x71, 0xcc},
 142         {0xb8, 0x00, 0x13, 0xcc},
 143         {0xb8, 0x27, 0x20, 0xcc},
 144         {0xb8, 0x2c, 0x50, 0xcc},
 145         {0xb8, 0x2d, 0xf8, 0xcc},
 146         {0xb8, 0x2e, 0xf8, 0xcc},
 147         {0xb8, 0x2f, 0xf8, 0xcc},
 148         {0xb8, 0x30, 0x50, 0xcc},
 149         {0xb8, 0x31, 0xf8, 0xcc},
 150         {0xb8, 0x32, 0xf8, 0xcc},
 151         {0xb8, 0x33, 0xf8, 0xcc},
 152         {0xb8, 0x34, 0x50, 0xcc},
 153         {0xb8, 0x35, 0x00, 0xcc},
 154         {0xb8, 0x36, 0x00, 0xcc},
 155         {0xb8, 0x37, 0x00, 0xcc},
 156         {0xb8, 0x01, 0x79, 0xcc},
 157         {0xb8, 0x08, 0xe0, 0xcc},
 158         {0xb3, 0x01, 0x41, 0xcc},
 159         {0xb8, 0x01, 0x79, 0xcc},
 160         {0xb8, 0x14, 0x18, 0xcc},
 161         {0xb8, 0xb2, 0x0a, 0xcc},
 162         {0xb8, 0xb4, 0x0a, 0xcc},
 163         {0xb8, 0xb5, 0x0a, 0xcc},
 164         {0xb8, 0xfe, 0x00, 0xcc},
 165         {0xb8, 0xff, 0x28, 0xcc},
 166         {0xb9, 0x00, 0x28, 0xcc},
 167         {0xb9, 0x01, 0x28, 0xcc},
 168         {0xb9, 0x02, 0x28, 0xcc},
 169         {0xb9, 0x03, 0x00, 0xcc},
 170         {0xb9, 0x04, 0x00, 0xcc},
 171         {0xb9, 0x05, 0x3c, 0xcc},
 172         {0xb9, 0x06, 0x3c, 0xcc},
 173         {0xb9, 0x07, 0x3c, 0xcc},
 174         {0xb9, 0x08, 0x3c, 0xcc},
 175         {0xb8, 0x8e, 0x00, 0xcc},
 176         {0xb8, 0x8f, 0xff, 0xcc},
 177         {0xb8, 0x81, 0x09, 0xcc},
 178         {0x31, 0x00, 0x00, 0xbb},
 179         {0x09, 0x01, 0xc7, 0xbb},
 180         {0x34, 0x01, 0x00, 0xbb},
 181         {0x2b, 0x00, 0x28, 0xbb},
 182         {0x2c, 0x00, 0x30, 0xbb},
 183         {0x2d, 0x00, 0x30, 0xbb},
 184         {0x2e, 0x00, 0x28, 0xbb},
 185         {0x62, 0x04, 0x11, 0xbb},
 186         {0x03, 0x01, 0xe0, 0xbb},
 187         {0x2c, 0x00, 0x2c, 0xbb},
 188         {0x20, 0xd0, 0x00, 0xbb},
 189         {0x01, 0x00, 0x08, 0xbb},
 190         {0x06, 0x00, 0x10, 0xbb},
 191         {0x05, 0x00, 0x20, 0xbb},
 192         {0x20, 0x00, 0x00, 0xbb},
 193         {0xb6, 0x00, 0x00, 0xcc},
 194         {0xb6, 0x03, 0x02, 0xcc},
 195         {0xb6, 0x02, 0x80, 0xcc},
 196         {0xb6, 0x05, 0x01, 0xcc},
 197         {0xb6, 0x04, 0xe0, 0xcc},
 198         {0xb6, 0x12, 0x78, 0xcc},
 199         {0xb6, 0x18, 0x02, 0xcc},
 200         {0xb6, 0x17, 0x58, 0xcc},
 201         {0xb6, 0x16, 0x00, 0xcc},
 202         {0xb6, 0x22, 0x12, 0xcc},
 203         {0xb6, 0x23, 0x0b, 0xcc},
 204         {0xb3, 0x02, 0x02, 0xcc},
 205         {0xbf, 0xc0, 0x39, 0xcc},
 206         {0xbf, 0xc1, 0x04, 0xcc},
 207         {0xbf, 0xcc, 0x10, 0xcc},
 208         {0xb9, 0x12, 0x00, 0xcc},
 209         {0xb9, 0x13, 0x0a, 0xcc},
 210         {0xb9, 0x14, 0x0a, 0xcc},
 211         {0xb9, 0x15, 0x0a, 0xcc},
 212         {0xb9, 0x16, 0x0a, 0xcc},
 213         {0xb9, 0x18, 0x00, 0xcc},
 214         {0xb9, 0x19, 0x0f, 0xcc},
 215         {0xb9, 0x1a, 0x0f, 0xcc},
 216         {0xb9, 0x1b, 0x0f, 0xcc},
 217         {0xb9, 0x1c, 0x0f, 0xcc},
 218         {0xb8, 0x8e, 0x00, 0xcc},
 219         {0xb8, 0x8f, 0xff, 0xcc},
 220         {0xb6, 0x12, 0xf8, 0xcc},
 221         {0xb8, 0x0c, 0x20, 0xcc},
 222         {0xb8, 0x0d, 0x70, 0xcc},
 223         {0xb6, 0x13, 0x13, 0xcc},
 224         {0x35, 0x00, 0x60, 0xbb},
 225         {0xb3, 0x5c, 0x01, 0xcc},
 226         {}
 227 };
 228 static const u8 mi0360_initQVGA_JPG[][4] = {
 229         {0xb0, 0x03, 0x19, 0xcc},
 230         {0xb0, 0x04, 0x02, 0xcc},
 231         {0xb3, 0x00, 0x24, 0xcc},
 232         {0xb3, 0x00, 0x25, 0xcc},
 233         {0xb3, 0x08, 0x01, 0xcc},
 234         {0xb3, 0x09, 0x0c, 0xcc},
 235         {0xb3, 0x05, 0x01, 0xcc},
 236         {0xb3, 0x06, 0x03, 0xcc},
 237         {0xb3, 0x03, 0x0a, 0xcc},
 238         {0xb3, 0x20, 0x00, 0xcc},
 239         {0xb3, 0x21, 0x00, 0xcc},
 240         {0xb3, 0x22, 0x01, 0xcc},
 241         {0xb3, 0x23, 0xe0, 0xcc},
 242         {0xb3, 0x04, 0x05, 0xcc},
 243         {0xb3, 0x14, 0x00, 0xcc},
 244         {0xb3, 0x15, 0x00, 0xcc},
 245         {0xb3, 0x16, 0x02, 0xcc},
 246         {0xb3, 0x17, 0x7f, 0xcc},
 247         {0xb3, 0x35, 0xdd, 0xcc},
 248         {0xb3, 0x34, 0x02, 0xcc},
 249         {0xb3, 0x00, 0x25, 0xcc},
 250         {0xbc, 0x00, 0xd1, 0xcc},
 251         {0xb8, 0x00, 0x13, 0xcc},
 252         {0xb8, 0x27, 0x20, 0xcc},
 253         {0xb8, 0x2c, 0x50, 0xcc},
 254         {0xb8, 0x2d, 0xf8, 0xcc},
 255         {0xb8, 0x2e, 0xf8, 0xcc},
 256         {0xb8, 0x2f, 0xf8, 0xcc},
 257         {0xb8, 0x30, 0x50, 0xcc},
 258         {0xb8, 0x31, 0xf8, 0xcc},
 259         {0xb8, 0x32, 0xf8, 0xcc},
 260         {0xb8, 0x33, 0xf8, 0xcc},
 261         {0xb8, 0x34, 0x50, 0xcc},
 262         {0xb8, 0x35, 0x00, 0xcc},
 263         {0xb8, 0x36, 0x00, 0xcc},
 264         {0xb8, 0x37, 0x00, 0xcc},
 265         {0xb8, 0x01, 0x79, 0xcc},
 266         {0xb8, 0x08, 0xe0, 0xcc},
 267         {0xb3, 0x01, 0x41, 0xcc},
 268         {0xb8, 0x01, 0x79, 0xcc},
 269         {0xb8, 0x14, 0x18, 0xcc},
 270         {0xb8, 0xb2, 0x0a, 0xcc},
 271         {0xb8, 0xb4, 0x0a, 0xcc},
 272         {0xb8, 0xb5, 0x0a, 0xcc},
 273         {0xb8, 0xfe, 0x00, 0xcc},
 274         {0xb8, 0xff, 0x28, 0xcc},
 275         {0xb9, 0x00, 0x28, 0xcc},
 276         {0xb9, 0x01, 0x28, 0xcc},
 277         {0xb9, 0x02, 0x28, 0xcc},
 278         {0xb9, 0x03, 0x00, 0xcc},
 279         {0xb9, 0x04, 0x00, 0xcc},
 280         {0xb9, 0x05, 0x3c, 0xcc},
 281         {0xb9, 0x06, 0x3c, 0xcc},
 282         {0xb9, 0x07, 0x3c, 0xcc},
 283         {0xb9, 0x08, 0x3c, 0xcc},
 284         {0xb8, 0x8e, 0x00, 0xcc},
 285         {0xb8, 0x8f, 0xff, 0xcc},
 286         {0xb8, 0x81, 0x09, 0xcc},
 287         {0x31, 0x00, 0x00, 0xbb},
 288         {0x09, 0x01, 0xc7, 0xbb},
 289         {0x34, 0x01, 0x00, 0xbb},
 290         {0x2b, 0x00, 0x28, 0xbb},
 291         {0x2c, 0x00, 0x30, 0xbb},
 292         {0x2d, 0x00, 0x30, 0xbb},
 293         {0x2e, 0x00, 0x28, 0xbb},
 294         {0x62, 0x04, 0x11, 0xbb},
 295         {0x03, 0x01, 0xe0, 0xbb},
 296         {0x2c, 0x00, 0x2c, 0xbb},
 297         {0x20, 0xd0, 0x00, 0xbb},
 298         {0x01, 0x00, 0x08, 0xbb},
 299         {0x06, 0x00, 0x10, 0xbb},
 300         {0x05, 0x00, 0x20, 0xbb},
 301         {0x20, 0x00, 0x00, 0xbb},
 302         {0xb6, 0x00, 0x00, 0xcc},
 303         {0xb6, 0x03, 0x01, 0xcc},
 304         {0xb6, 0x02, 0x40, 0xcc},
 305         {0xb6, 0x05, 0x00, 0xcc},
 306         {0xb6, 0x04, 0xf0, 0xcc},
 307         {0xb6, 0x12, 0x78, 0xcc},
 308         {0xb6, 0x18, 0x00, 0xcc},
 309         {0xb6, 0x17, 0x96, 0xcc},
 310         {0xb6, 0x16, 0x00, 0xcc},
 311         {0xb6, 0x22, 0x12, 0xcc},
 312         {0xb6, 0x23, 0x0b, 0xcc},
 313         {0xb3, 0x02, 0x02, 0xcc},
 314         {0xbf, 0xc0, 0x39, 0xcc},
 315         {0xbf, 0xc1, 0x04, 0xcc},
 316         {0xbf, 0xcc, 0x10, 0xcc},
 317         {0xb9, 0x12, 0x00, 0xcc},
 318         {0xb9, 0x13, 0x0a, 0xcc},
 319         {0xb9, 0x14, 0x0a, 0xcc},
 320         {0xb9, 0x15, 0x0a, 0xcc},
 321         {0xb9, 0x16, 0x0a, 0xcc},
 322         {0xb9, 0x18, 0x00, 0xcc},
 323         {0xb9, 0x19, 0x0f, 0xcc},
 324         {0xb9, 0x1a, 0x0f, 0xcc},
 325         {0xb9, 0x1b, 0x0f, 0xcc},
 326         {0xb9, 0x1c, 0x0f, 0xcc},
 327         {0xb8, 0x8e, 0x00, 0xcc},
 328         {0xb8, 0x8f, 0xff, 0xcc},
 329         {0xb6, 0x12, 0xf8, 0xcc},
 330         {0xb6, 0x13, 0x13, 0xcc},
 331         {0xbc, 0x02, 0x18, 0xcc},
 332         {0xbc, 0x03, 0x50, 0xcc},
 333         {0xbc, 0x04, 0x18, 0xcc},
 334         {0xbc, 0x05, 0x00, 0xcc},
 335         {0xbc, 0x06, 0x00, 0xcc},
 336         {0xbc, 0x08, 0x30, 0xcc},
 337         {0xbc, 0x09, 0x40, 0xcc},
 338         {0xbc, 0x0a, 0x10, 0xcc},
 339         {0xb8, 0x0c, 0x20, 0xcc},
 340         {0xb8, 0x0d, 0x70, 0xcc},
 341         {0xbc, 0x0b, 0x00, 0xcc},
 342         {0xbc, 0x0c, 0x00, 0xcc},
 343         {0x35, 0x00, 0xef, 0xbb},
 344         {0xb3, 0x5c, 0x01, 0xcc},
 345         {}
 346 };
 347 
 348 static const u8 mi1310_socinitVGA_JPG[][4] = {
 349         {0xb0, 0x03, 0x19, 0xcc},
 350         {0xb0, 0x04, 0x02, 0xcc},
 351         {0xb3, 0x00, 0x64, 0xcc},
 352         {0xb3, 0x00, 0x65, 0xcc},
 353         {0xb3, 0x05, 0x00, 0xcc},
 354         {0xb3, 0x06, 0x00, 0xcc},
 355         {0xb3, 0x08, 0x01, 0xcc},
 356         {0xb3, 0x09, 0x0c, 0xcc},
 357         {0xb3, 0x34, 0x02, 0xcc},
 358         {0xb3, 0x35, 0xdd, 0xcc},       /* i2c add: 5d */
 359         {0xb3, 0x02, 0x00, 0xcc},
 360         {0xb3, 0x03, 0x0a, 0xcc},
 361         {0xb3, 0x04, 0x05, 0xcc},
 362         {0xb3, 0x20, 0x00, 0xcc},
 363         {0xb3, 0x21, 0x00, 0xcc},
 364         {0xb3, 0x22, 0x03, 0xcc},
 365         {0xb3, 0x23, 0xc0, 0xcc},
 366         {0xb3, 0x14, 0x00, 0xcc},
 367         {0xb3, 0x15, 0x00, 0xcc},
 368         {0xb3, 0x16, 0x04, 0xcc},
 369         {0xb3, 0x17, 0xff, 0xcc},
 370         {0xb3, 0x00, 0x65, 0xcc},
 371         {0xb8, 0x00, 0x00, 0xcc},
 372         {0xbc, 0x00, 0xd0, 0xcc},
 373         {0xbc, 0x01, 0x01, 0xcc},
 374         {0xf0, 0x00, 0x02, 0xbb},
 375         {0xc8, 0x9f, 0x0b, 0xbb},
 376         {0x5b, 0x00, 0x01, 0xbb},
 377         {0x2f, 0xde, 0x20, 0xbb},
 378         {0xf0, 0x00, 0x00, 0xbb},
 379         {0x20, 0x03, 0x02, 0xbb},       /* h/v flip */
 380         {0xf0, 0x00, 0x01, 0xbb},
 381         {0x05, 0x00, 0x07, 0xbb},
 382         {0x34, 0x00, 0x00, 0xbb},
 383         {0x35, 0xff, 0x00, 0xbb},
 384         {0xdc, 0x07, 0x02, 0xbb},
 385         {0xdd, 0x3c, 0x18, 0xbb},
 386         {0xde, 0x92, 0x6d, 0xbb},
 387         {0xdf, 0xcd, 0xb1, 0xbb},
 388         {0xe0, 0xff, 0xe7, 0xbb},
 389         {0x06, 0xf0, 0x0d, 0xbb},
 390         {0x06, 0x70, 0x0e, 0xbb},
 391         {0x4c, 0x00, 0x01, 0xbb},
 392         {0x4d, 0x00, 0x01, 0xbb},
 393         {0xf0, 0x00, 0x02, 0xbb},
 394         {0x2e, 0x0c, 0x55, 0xbb},
 395         {0x21, 0xb6, 0x6e, 0xbb},
 396         {0x36, 0x30, 0x10, 0xbb},
 397         {0x37, 0x00, 0xc1, 0xbb},
 398         {0xf0, 0x00, 0x00, 0xbb},
 399         {0x07, 0x00, 0x84, 0xbb},
 400         {0x08, 0x02, 0x4a, 0xbb},
 401         {0x05, 0x01, 0x10, 0xbb},
 402         {0x06, 0x00, 0x39, 0xbb},
 403         {0xf0, 0x00, 0x02, 0xbb},
 404         {0x58, 0x02, 0x67, 0xbb},
 405         {0x57, 0x02, 0x00, 0xbb},
 406         {0x5a, 0x02, 0x67, 0xbb},
 407         {0x59, 0x02, 0x00, 0xbb},
 408         {0x5c, 0x12, 0x0d, 0xbb},
 409         {0x5d, 0x16, 0x11, 0xbb},
 410         {0x39, 0x06, 0x18, 0xbb},
 411         {0x3a, 0x06, 0x18, 0xbb},
 412         {0x3b, 0x06, 0x18, 0xbb},
 413         {0x3c, 0x06, 0x18, 0xbb},
 414         {0x64, 0x7b, 0x5b, 0xbb},
 415         {0xf0, 0x00, 0x02, 0xbb},
 416         {0x36, 0x30, 0x10, 0xbb},
 417         {0x37, 0x00, 0xc0, 0xbb},
 418         {0xbc, 0x0e, 0x00, 0xcc},
 419         {0xbc, 0x0f, 0x05, 0xcc},
 420         {0xbc, 0x10, 0xc0, 0xcc},
 421         {0xbc, 0x11, 0x03, 0xcc},
 422         {0xb6, 0x00, 0x00, 0xcc},
 423         {0xb6, 0x03, 0x02, 0xcc},
 424         {0xb6, 0x02, 0x80, 0xcc},
 425         {0xb6, 0x05, 0x01, 0xcc},
 426         {0xb6, 0x04, 0xe0, 0xcc},
 427         {0xb6, 0x12, 0xf8, 0xcc},
 428         {0xb6, 0x13, 0x25, 0xcc},
 429         {0xb6, 0x18, 0x02, 0xcc},
 430         {0xb6, 0x17, 0x58, 0xcc},
 431         {0xb6, 0x16, 0x00, 0xcc},
 432         {0xb6, 0x22, 0x12, 0xcc},
 433         {0xb6, 0x23, 0x0b, 0xcc},
 434         {0xbf, 0xc0, 0x39, 0xcc},
 435         {0xbf, 0xc1, 0x04, 0xcc},
 436         {0xbf, 0xcc, 0x00, 0xcc},
 437         {0xbc, 0x02, 0x18, 0xcc},
 438         {0xbc, 0x03, 0x50, 0xcc},
 439         {0xbc, 0x04, 0x18, 0xcc},
 440         {0xbc, 0x05, 0x00, 0xcc},
 441         {0xbc, 0x06, 0x00, 0xcc},
 442         {0xbc, 0x08, 0x30, 0xcc},
 443         {0xbc, 0x09, 0x40, 0xcc},
 444         {0xbc, 0x0a, 0x10, 0xcc},
 445         {0xbc, 0x0b, 0x00, 0xcc},
 446         {0xbc, 0x0c, 0x00, 0xcc},
 447         {0xb3, 0x5c, 0x01, 0xcc},
 448         {0xf0, 0x00, 0x01, 0xbb},
 449         {0x80, 0x00, 0x03, 0xbb},
 450         {0x81, 0xc7, 0x14, 0xbb},
 451         {0x82, 0xeb, 0xe8, 0xbb},
 452         {0x83, 0xfe, 0xf4, 0xbb},
 453         {0x84, 0xcd, 0x10, 0xbb},
 454         {0x85, 0xf3, 0xee, 0xbb},
 455         {0x86, 0xff, 0xf1, 0xbb},
 456         {0x87, 0xcd, 0x10, 0xbb},
 457         {0x88, 0xf3, 0xee, 0xbb},
 458         {0x89, 0x01, 0xf1, 0xbb},
 459         {0x8a, 0xe5, 0x17, 0xbb},
 460         {0x8b, 0xe8, 0xe2, 0xbb},
 461         {0x8c, 0xf7, 0xed, 0xbb},
 462         {0x8d, 0x00, 0xff, 0xbb},
 463         {0x8e, 0xec, 0x10, 0xbb},
 464         {0x8f, 0xf0, 0xed, 0xbb},
 465         {0x90, 0xf9, 0xf2, 0xbb},
 466         {0x91, 0x00, 0x00, 0xbb},
 467         {0x92, 0xe9, 0x0d, 0xbb},
 468         {0x93, 0xf4, 0xf2, 0xbb},
 469         {0x94, 0xfb, 0xf5, 0xbb},
 470         {0x95, 0x00, 0xff, 0xbb},
 471         {0xb6, 0x0f, 0x08, 0xbb},
 472         {0xb7, 0x3d, 0x16, 0xbb},
 473         {0xb8, 0x0c, 0x04, 0xbb},
 474         {0xb9, 0x1c, 0x07, 0xbb},
 475         {0xba, 0x0a, 0x03, 0xbb},
 476         {0xbb, 0x1b, 0x09, 0xbb},
 477         {0xbc, 0x17, 0x0d, 0xbb},
 478         {0xbd, 0x23, 0x1d, 0xbb},
 479         {0xbe, 0x00, 0x28, 0xbb},
 480         {0xbf, 0x11, 0x09, 0xbb},
 481         {0xc0, 0x16, 0x15, 0xbb},
 482         {0xc1, 0x00, 0x1b, 0xbb},
 483         {0xc2, 0x0e, 0x07, 0xbb},
 484         {0xc3, 0x14, 0x10, 0xbb},
 485         {0xc4, 0x00, 0x17, 0xbb},
 486         {0x06, 0x74, 0x8e, 0xbb},
 487         {0xf0, 0x00, 0x01, 0xbb},
 488         {0x06, 0xf4, 0x8e, 0xbb},
 489         {0x00, 0x00, 0x50, 0xdd},
 490         {0x06, 0x74, 0x8e, 0xbb},
 491         {0xf0, 0x00, 0x02, 0xbb},
 492         {0x24, 0x50, 0x20, 0xbb},
 493         {0xf0, 0x00, 0x02, 0xbb},
 494         {0x34, 0x0c, 0x50, 0xbb},
 495         {0xb3, 0x01, 0x41, 0xcc},
 496         {0xf0, 0x00, 0x00, 0xbb},
 497         {0x03, 0x03, 0xc0, 0xbb},
 498         {},
 499 };
 500 static const u8 mi1310_socinitQVGA_JPG[][4] = {
 501         {0xb0, 0x03, 0x19, 0xcc},       {0xb0, 0x04, 0x02, 0xcc},
 502         {0xb3, 0x00, 0x64, 0xcc},       {0xb3, 0x00, 0x65, 0xcc},
 503         {0xb3, 0x05, 0x00, 0xcc},       {0xb3, 0x06, 0x00, 0xcc},
 504         {0xb3, 0x08, 0x01, 0xcc},       {0xb3, 0x09, 0x0c, 0xcc},
 505         {0xb3, 0x34, 0x02, 0xcc},       {0xb3, 0x35, 0xdd, 0xcc},
 506         {0xb3, 0x02, 0x00, 0xcc},       {0xb3, 0x03, 0x0a, 0xcc},
 507         {0xb3, 0x04, 0x05, 0xcc},       {0xb3, 0x20, 0x00, 0xcc},
 508         {0xb3, 0x21, 0x00, 0xcc},       {0xb3, 0x22, 0x03, 0xcc},
 509         {0xb3, 0x23, 0xc0, 0xcc},       {0xb3, 0x14, 0x00, 0xcc},
 510         {0xb3, 0x15, 0x00, 0xcc},       {0xb3, 0x16, 0x04, 0xcc},
 511         {0xb3, 0x17, 0xff, 0xcc},       {0xb3, 0x00, 0x65, 0xcc},
 512         {0xb8, 0x00, 0x00, 0xcc},       {0xbc, 0x00, 0xf0, 0xcc},
 513         {0xbc, 0x01, 0x01, 0xcc},       {0xf0, 0x00, 0x02, 0xbb},
 514         {0xc8, 0x9f, 0x0b, 0xbb},       {0x5b, 0x00, 0x01, 0xbb},
 515         {0x2f, 0xde, 0x20, 0xbb},       {0xf0, 0x00, 0x00, 0xbb},
 516         {0x20, 0x03, 0x02, 0xbb},       /* h/v flip */
 517         {0xf0, 0x00, 0x01, 0xbb},
 518         {0x05, 0x00, 0x07, 0xbb},       {0x34, 0x00, 0x00, 0xbb},
 519         {0x35, 0xff, 0x00, 0xbb},       {0xdc, 0x07, 0x02, 0xbb},
 520         {0xdd, 0x3c, 0x18, 0xbb},       {0xde, 0x92, 0x6d, 0xbb},
 521         {0xdf, 0xcd, 0xb1, 0xbb},       {0xe0, 0xff, 0xe7, 0xbb},
 522         {0x06, 0xf0, 0x0d, 0xbb},       {0x06, 0x70, 0x0e, 0xbb},
 523         {0x4c, 0x00, 0x01, 0xbb},       {0x4d, 0x00, 0x01, 0xbb},
 524         {0xf0, 0x00, 0x02, 0xbb},       {0x2e, 0x0c, 0x55, 0xbb},
 525         {0x21, 0xb6, 0x6e, 0xbb},       {0x36, 0x30, 0x10, 0xbb},
 526         {0x37, 0x00, 0xc1, 0xbb},       {0xf0, 0x00, 0x00, 0xbb},
 527         {0x07, 0x00, 0x84, 0xbb},       {0x08, 0x02, 0x4a, 0xbb},
 528         {0x05, 0x01, 0x10, 0xbb},       {0x06, 0x00, 0x39, 0xbb},
 529         {0xf0, 0x00, 0x02, 0xbb},       {0x58, 0x02, 0x67, 0xbb},
 530         {0x57, 0x02, 0x00, 0xbb},       {0x5a, 0x02, 0x67, 0xbb},
 531         {0x59, 0x02, 0x00, 0xbb},       {0x5c, 0x12, 0x0d, 0xbb},
 532         {0x5d, 0x16, 0x11, 0xbb},       {0x39, 0x06, 0x18, 0xbb},
 533         {0x3a, 0x06, 0x18, 0xbb},       {0x3b, 0x06, 0x18, 0xbb},
 534         {0x3c, 0x06, 0x18, 0xbb},       {0x64, 0x7b, 0x5b, 0xbb},
 535         {0xf0, 0x00, 0x02, 0xbb},       {0x36, 0x30, 0x10, 0xbb},
 536         {0x37, 0x00, 0xc0, 0xbb},       {0xbc, 0x0e, 0x00, 0xcc},
 537         {0xbc, 0x0f, 0x05, 0xcc},       {0xbc, 0x10, 0xc0, 0xcc},
 538         {0xbc, 0x11, 0x03, 0xcc},       {0xb6, 0x00, 0x00, 0xcc},
 539         {0xb6, 0x03, 0x01, 0xcc},       {0xb6, 0x02, 0x40, 0xcc},
 540         {0xb6, 0x05, 0x00, 0xcc},       {0xb6, 0x04, 0xf0, 0xcc},
 541         {0xb6, 0x12, 0xf8, 0xcc},       {0xb6, 0x13, 0x25, 0xcc},
 542         {0xb6, 0x18, 0x00, 0xcc},       {0xb6, 0x17, 0x96, 0xcc},
 543         {0xb6, 0x16, 0x00, 0xcc},       {0xb6, 0x22, 0x12, 0xcc},
 544         {0xb6, 0x23, 0x0b, 0xcc},       {0xbf, 0xc0, 0x39, 0xcc},
 545         {0xbf, 0xc1, 0x04, 0xcc},       {0xbf, 0xcc, 0x00, 0xcc},
 546         {0xb3, 0x5c, 0x01, 0xcc},       {0xf0, 0x00, 0x01, 0xbb},
 547         {0x80, 0x00, 0x03, 0xbb},       {0x81, 0xc7, 0x14, 0xbb},
 548         {0x82, 0xeb, 0xe8, 0xbb},       {0x83, 0xfe, 0xf4, 0xbb},
 549         {0x84, 0xcd, 0x10, 0xbb},       {0x85, 0xf3, 0xee, 0xbb},
 550         {0x86, 0xff, 0xf1, 0xbb},       {0x87, 0xcd, 0x10, 0xbb},
 551         {0x88, 0xf3, 0xee, 0xbb},       {0x89, 0x01, 0xf1, 0xbb},
 552         {0x8a, 0xe5, 0x17, 0xbb},       {0x8b, 0xe8, 0xe2, 0xbb},
 553         {0x8c, 0xf7, 0xed, 0xbb},       {0x8d, 0x00, 0xff, 0xbb},
 554         {0x8e, 0xec, 0x10, 0xbb},       {0x8f, 0xf0, 0xed, 0xbb},
 555         {0x90, 0xf9, 0xf2, 0xbb},       {0x91, 0x00, 0x00, 0xbb},
 556         {0x92, 0xe9, 0x0d, 0xbb},       {0x93, 0xf4, 0xf2, 0xbb},
 557         {0x94, 0xfb, 0xf5, 0xbb},       {0x95, 0x00, 0xff, 0xbb},
 558         {0xb6, 0x0f, 0x08, 0xbb},       {0xb7, 0x3d, 0x16, 0xbb},
 559         {0xb8, 0x0c, 0x04, 0xbb},       {0xb9, 0x1c, 0x07, 0xbb},
 560         {0xba, 0x0a, 0x03, 0xbb},       {0xbb, 0x1b, 0x09, 0xbb},
 561         {0xbc, 0x17, 0x0d, 0xbb},       {0xbd, 0x23, 0x1d, 0xbb},
 562         {0xbe, 0x00, 0x28, 0xbb},       {0xbf, 0x11, 0x09, 0xbb},
 563         {0xc0, 0x16, 0x15, 0xbb},       {0xc1, 0x00, 0x1b, 0xbb},
 564         {0xc2, 0x0e, 0x07, 0xbb},       {0xc3, 0x14, 0x10, 0xbb},
 565         {0xc4, 0x00, 0x17, 0xbb},       {0x06, 0x74, 0x8e, 0xbb},
 566         {0xf0, 0x00, 0x01, 0xbb},       {0x06, 0xf4, 0x8e, 0xbb},
 567         {0x00, 0x00, 0x50, 0xdd},       {0x06, 0x74, 0x8e, 0xbb},
 568         {0xf0, 0x00, 0x02, 0xbb},       {0x24, 0x50, 0x20, 0xbb},
 569         {0xf0, 0x00, 0x02, 0xbb},       {0x34, 0x0c, 0x50, 0xbb},
 570         {0xb3, 0x01, 0x41, 0xcc},       {0xf0, 0x00, 0x00, 0xbb},
 571         {0x03, 0x03, 0xc0, 0xbb},
 572         {},
 573 };
 574 static const u8 mi1310_soc_InitSXGA_JPG[][4] = {
 575         {0xb0, 0x03, 0x19, 0xcc},
 576         {0xb0, 0x04, 0x02, 0xcc},
 577         {0xb3, 0x00, 0x64, 0xcc},
 578         {0xb3, 0x00, 0x65, 0xcc},
 579         {0xb3, 0x05, 0x00, 0xcc},
 580         {0xb3, 0x06, 0x00, 0xcc},
 581         {0xb3, 0x08, 0x01, 0xcc},
 582         {0xb3, 0x09, 0x0c, 0xcc},
 583         {0xb3, 0x34, 0x02, 0xcc},
 584         {0xb3, 0x35, 0xdd, 0xcc},
 585         {0xb3, 0x02, 0x00, 0xcc},
 586         {0xb3, 0x03, 0x0a, 0xcc},
 587         {0xb3, 0x04, 0x0d, 0xcc},
 588         {0xb3, 0x20, 0x00, 0xcc},
 589         {0xb3, 0x21, 0x00, 0xcc},
 590         {0xb3, 0x22, 0x03, 0xcc},
 591         {0xb3, 0x23, 0xc0, 0xcc},
 592         {0xb3, 0x14, 0x00, 0xcc},
 593         {0xb3, 0x15, 0x00, 0xcc},
 594         {0xb3, 0x16, 0x04, 0xcc},
 595         {0xb3, 0x17, 0xff, 0xcc},
 596         {0xb3, 0x00, 0x65, 0xcc},
 597         {0xb8, 0x00, 0x00, 0xcc},
 598         {0xbc, 0x00, 0x70, 0xcc},
 599         {0xbc, 0x01, 0x01, 0xcc},
 600         {0xf0, 0x00, 0x02, 0xbb},
 601         {0xc8, 0x9f, 0x0b, 0xbb},
 602         {0x5b, 0x00, 0x01, 0xbb},
 603         {0xf0, 0x00, 0x00, 0xbb},
 604         {0x20, 0x03, 0x02, 0xbb},       /* h/v flip */
 605         {0xf0, 0x00, 0x01, 0xbb},
 606         {0x05, 0x00, 0x07, 0xbb},
 607         {0x34, 0x00, 0x00, 0xbb},
 608         {0x35, 0xff, 0x00, 0xbb},
 609         {0xdc, 0x07, 0x02, 0xbb},
 610         {0xdd, 0x3c, 0x18, 0xbb},
 611         {0xde, 0x92, 0x6d, 0xbb},
 612         {0xdf, 0xcd, 0xb1, 0xbb},
 613         {0xe0, 0xff, 0xe7, 0xbb},
 614         {0x06, 0xf0, 0x0d, 0xbb},
 615         {0x06, 0x70, 0x0e, 0xbb},
 616         {0x4c, 0x00, 0x01, 0xbb},
 617         {0x4d, 0x00, 0x01, 0xbb},
 618         {0xf0, 0x00, 0x02, 0xbb},
 619         {0x2e, 0x0c, 0x60, 0xbb},
 620         {0x21, 0xb6, 0x6e, 0xbb},
 621         {0x37, 0x01, 0x40, 0xbb},
 622         {0xf0, 0x00, 0x00, 0xbb},
 623         {0x07, 0x00, 0x84, 0xbb},
 624         {0x08, 0x02, 0x4a, 0xbb},
 625         {0x05, 0x01, 0x10, 0xbb},
 626         {0x06, 0x00, 0x39, 0xbb},
 627         {0xf0, 0x00, 0x02, 0xbb},
 628         {0x58, 0x02, 0x67, 0xbb},
 629         {0x57, 0x02, 0x00, 0xbb},
 630         {0x5a, 0x02, 0x67, 0xbb},
 631         {0x59, 0x02, 0x00, 0xbb},
 632         {0x5c, 0x12, 0x0d, 0xbb},
 633         {0x5d, 0x16, 0x11, 0xbb},
 634         {0x39, 0x06, 0x18, 0xbb},
 635         {0x3a, 0x06, 0x18, 0xbb},
 636         {0x3b, 0x06, 0x18, 0xbb},
 637         {0x3c, 0x06, 0x18, 0xbb},
 638         {0x64, 0x7b, 0x5b, 0xbb},
 639         {0xb6, 0x00, 0x00, 0xcc},
 640         {0xb6, 0x03, 0x05, 0xcc},
 641         {0xb6, 0x02, 0x00, 0xcc},
 642         {0xb6, 0x05, 0x03, 0xcc},
 643         {0xb6, 0x04, 0xc0, 0xcc},
 644         {0xb6, 0x12, 0xf8, 0xcc},
 645         {0xb6, 0x13, 0x29, 0xcc},
 646         {0xb6, 0x18, 0x09, 0xcc},
 647         {0xb6, 0x17, 0x60, 0xcc},
 648         {0xb6, 0x16, 0x00, 0xcc},
 649         {0xb6, 0x22, 0x12, 0xcc},
 650         {0xb6, 0x23, 0x0b, 0xcc},
 651         {0xbf, 0xc0, 0x39, 0xcc},
 652         {0xbf, 0xc1, 0x04, 0xcc},
 653         {0xbf, 0xcc, 0x00, 0xcc},
 654         {0xb3, 0x01, 0x41, 0xcc},
 655         {0x00, 0x00, 0x80, 0xdd},
 656         {0xf0, 0x00, 0x02, 0xbb},
 657         {0x00, 0x00, 0x10, 0xdd},
 658         {0x22, 0xa0, 0x78, 0xbb},
 659         {0x23, 0xa0, 0x78, 0xbb},
 660         {0x24, 0x7f, 0x00, 0xbb},
 661         {0x28, 0xea, 0x02, 0xbb},
 662         {0x29, 0x86, 0x7a, 0xbb},
 663         {0x5e, 0x52, 0x4c, 0xbb},
 664         {0x5f, 0x20, 0x24, 0xbb},
 665         {0x60, 0x00, 0x02, 0xbb},
 666         {0x02, 0x00, 0xee, 0xbb},
 667         {0x03, 0x39, 0x23, 0xbb},
 668         {0x04, 0x07, 0x24, 0xbb},
 669         {0x09, 0x00, 0xc0, 0xbb},
 670         {0x0a, 0x00, 0x79, 0xbb},
 671         {0x0b, 0x00, 0x04, 0xbb},
 672         {0x0c, 0x00, 0x5c, 0xbb},
 673         {0x0d, 0x00, 0xd9, 0xbb},
 674         {0x0e, 0x00, 0x53, 0xbb},
 675         {0x0f, 0x00, 0x21, 0xbb},
 676         {0x10, 0x00, 0xa4, 0xbb},
 677         {0x11, 0x00, 0xe5, 0xbb},
 678         {0x15, 0x00, 0x00, 0xbb},
 679         {0x16, 0x00, 0x00, 0xbb},
 680         {0x17, 0x00, 0x00, 0xbb},
 681         {0x18, 0x00, 0x00, 0xbb},
 682         {0x19, 0x00, 0x00, 0xbb},
 683         {0x1a, 0x00, 0x00, 0xbb},
 684         {0x1b, 0x00, 0x00, 0xbb},
 685         {0x1c, 0x00, 0x00, 0xbb},
 686         {0x1d, 0x00, 0x00, 0xbb},
 687         {0x1e, 0x00, 0x00, 0xbb},
 688         {0xf0, 0x00, 0x01, 0xbb},
 689         {0x00, 0x00, 0x20, 0xdd},
 690         {0x06, 0xf0, 0x8e, 0xbb},
 691         {0x00, 0x00, 0x80, 0xdd},
 692         {0x06, 0x70, 0x8e, 0xbb},
 693         {0xf0, 0x00, 0x02, 0xbb},
 694         {0x00, 0x00, 0x20, 0xdd},
 695         {0x5e, 0x6a, 0x53, 0xbb},
 696         {0x5f, 0x40, 0x2c, 0xbb},
 697         {0xf0, 0x00, 0x01, 0xbb},
 698         {0x00, 0x00, 0x20, 0xdd},
 699         {0x58, 0x00, 0x00, 0xbb},
 700         {0x53, 0x09, 0x03, 0xbb},
 701         {0x54, 0x31, 0x18, 0xbb},
 702         {0x55, 0x8b, 0x5f, 0xbb},
 703         {0x56, 0xc0, 0xa9, 0xbb},
 704         {0x57, 0xe0, 0xd2, 0xbb},
 705         {0xe1, 0x00, 0x00, 0xbb},
 706         {0xdc, 0x09, 0x03, 0xbb},
 707         {0xdd, 0x31, 0x18, 0xbb},
 708         {0xde, 0x8b, 0x5f, 0xbb},
 709         {0xdf, 0xc0, 0xa9, 0xbb},
 710         {0xe0, 0xe0, 0xd2, 0xbb},
 711         {0xb3, 0x5c, 0x01, 0xcc},
 712         {0xf0, 0x00, 0x01, 0xbb},
 713         {0x06, 0xf0, 0x8e, 0xbb},
 714         {0xf0, 0x00, 0x02, 0xbb},
 715         {0x2f, 0xde, 0x20, 0xbb},
 716         {0xf0, 0x00, 0x02, 0xbb},
 717         {0x24, 0x50, 0x20, 0xbb},
 718         {0xbc, 0x0e, 0x00, 0xcc},
 719         {0xbc, 0x0f, 0x05, 0xcc},
 720         {0xbc, 0x10, 0xc0, 0xcc},
 721         {0xf0, 0x00, 0x02, 0xbb},
 722         {0x34, 0x0c, 0x50, 0xbb},
 723         {0xbc, 0x11, 0x03, 0xcc},
 724         {0xf0, 0x00, 0x01, 0xbb},
 725         {0x80, 0x00, 0x03, 0xbb},
 726         {0x81, 0xc7, 0x14, 0xbb},
 727         {0x82, 0xeb, 0xe8, 0xbb},
 728         {0x83, 0xfe, 0xf4, 0xbb},
 729         {0x84, 0xcd, 0x10, 0xbb},
 730         {0x85, 0xf3, 0xee, 0xbb},
 731         {0x86, 0xff, 0xf1, 0xbb},
 732         {0x87, 0xcd, 0x10, 0xbb},
 733         {0x88, 0xf3, 0xee, 0xbb},
 734         {0x89, 0x01, 0xf1, 0xbb},
 735         {0x8a, 0xe5, 0x17, 0xbb},
 736         {0x8b, 0xe8, 0xe2, 0xbb},
 737         {0x8c, 0xf7, 0xed, 0xbb},
 738         {0x8d, 0x00, 0xff, 0xbb},
 739         {0x8e, 0xec, 0x10, 0xbb},
 740         {0x8f, 0xf0, 0xed, 0xbb},
 741         {0x90, 0xf9, 0xf2, 0xbb},
 742         {0x91, 0x00, 0x00, 0xbb},
 743         {0x92, 0xe9, 0x0d, 0xbb},
 744         {0x93, 0xf4, 0xf2, 0xbb},
 745         {0x94, 0xfb, 0xf5, 0xbb},
 746         {0x95, 0x00, 0xff, 0xbb},
 747         {0xb6, 0x0f, 0x08, 0xbb},
 748         {0xb7, 0x3d, 0x16, 0xbb},
 749         {0xb8, 0x0c, 0x04, 0xbb},
 750         {0xb9, 0x1c, 0x07, 0xbb},
 751         {0xba, 0x0a, 0x03, 0xbb},
 752         {0xbb, 0x1b, 0x09, 0xbb},
 753         {0xbc, 0x17, 0x0d, 0xbb},
 754         {0xbd, 0x23, 0x1d, 0xbb},
 755         {0xbe, 0x00, 0x28, 0xbb},
 756         {0xbf, 0x11, 0x09, 0xbb},
 757         {0xc0, 0x16, 0x15, 0xbb},
 758         {0xc1, 0x00, 0x1b, 0xbb},
 759         {0xc2, 0x0e, 0x07, 0xbb},
 760         {0xc3, 0x14, 0x10, 0xbb},
 761         {0xc4, 0x00, 0x17, 0xbb},
 762         {0x06, 0x74, 0x8e, 0xbb},
 763         {0xf0, 0x00, 0x00, 0xbb},
 764         {0x03, 0x03, 0xc0, 0xbb},
 765         {}
 766 };
 767 
 768 static const u8 mi1320_gamma[17] = {
 769         0x00, 0x13, 0x38, 0x59, 0x79, 0x92, 0xa7, 0xb9, 0xc8,
 770         0xd4, 0xdf, 0xe7, 0xee, 0xf4, 0xf9, 0xfc, 0xff
 771 };
 772 static const u8 mi1320_matrix[9] = {
 773         0x54, 0xda, 0x06, 0xf1, 0x50, 0xf4, 0xf7, 0xea, 0x52
 774 };
 775 static const u8 mi1320_initVGA_data[][4] = {
 776         {0xb3, 0x01, 0x01, 0xcc},       {0x00, 0x00, 0x33, 0xdd},
 777         {0xb0, 0x03, 0x19, 0xcc},       {0x00, 0x00, 0x33, 0xdd},
 778         {0xb0, 0x04, 0x02, 0xcc},       {0x00, 0x00, 0x33, 0xdd},
 779         {0xb3, 0x00, 0x64, 0xcc},       {0xb3, 0x00, 0x65, 0xcc},
 780         {0xb0, 0x16, 0x03, 0xcc},       {0xb3, 0x05, 0x00, 0xcc},
 781         {0xb3, 0x06, 0x00, 0xcc},       {0xb3, 0x08, 0x01, 0xcc},
 782         {0xb3, 0x09, 0x0c, 0xcc},       {0xb3, 0x34, 0x02, 0xcc},
 783         {0xb3, 0x35, 0xc8, 0xcc},       /* i2c add: 48 */
 784         {0xb3, 0x02, 0x00, 0xcc},
 785         {0xb3, 0x03, 0x0a, 0xcc},       {0xb3, 0x04, 0x05, 0xcc},
 786         {0xb3, 0x20, 0x00, 0xcc},       {0xb3, 0x21, 0x00, 0xcc},
 787         {0xb3, 0x22, 0x03, 0xcc},       {0xb3, 0x23, 0xc0, 0xcc},
 788         {0xb3, 0x14, 0x00, 0xcc},       {0xb3, 0x15, 0x00, 0xcc},
 789         {0xb3, 0x16, 0x04, 0xcc},       {0xb3, 0x17, 0xff, 0xcc},
 790         {0xb3, 0x00, 0x67, 0xcc},       {0xbc, 0x00, 0xd0, 0xcc},
 791         {0xbc, 0x01, 0x01, 0xcc},       {0xf0, 0x00, 0x00, 0xbb},
 792         {0x0d, 0x00, 0x09, 0xbb},       {0x00, 0x01, 0x00, 0xdd},
 793         {0x0d, 0x00, 0x08, 0xbb},       {0xf0, 0x00, 0x01, 0xbb},
 794         {0xa1, 0x05, 0x00, 0xbb},       {0xa4, 0x03, 0xc0, 0xbb},
 795         {0xf0, 0x00, 0x02, 0xbb},       {0x00, 0x00, 0x10, 0xdd},
 796         {0xc8, 0x9f, 0x0b, 0xbb},       {0x00, 0x00, 0x10, 0xdd},
 797         {0xf0, 0x00, 0x00, 0xbb},       {0x00, 0x00, 0x10, 0xdd},
 798         {0x20, 0x01, 0x00, 0xbb},       {0x00, 0x00, 0x10, 0xdd},
 799         {0xf0, 0x00, 0x01, 0xbb},       {0x9d, 0x3c, 0xa0, 0xbb},
 800         {0x47, 0x30, 0x30, 0xbb},       {0xf0, 0x00, 0x00, 0xbb},
 801         {0x0a, 0x80, 0x11, 0xbb},       {0x35, 0x00, 0x22, 0xbb},
 802         {0xf0, 0x00, 0x02, 0xbb},       {0x9d, 0xc5, 0x05, 0xbb},
 803         {0xdc, 0x0f, 0xfc, 0xbb},       {0xf0, 0x00, 0x01, 0xbb},
 804         {0x06, 0x74, 0x0e, 0xbb},       {0x80, 0x00, 0x06, 0xbb},
 805         {0x81, 0x04, 0x00, 0xbb},       {0x82, 0x01, 0x02, 0xbb},
 806         {0x83, 0x03, 0x02, 0xbb},       {0x84, 0x05, 0x00, 0xbb},
 807         {0x85, 0x01, 0x00, 0xbb},       {0x86, 0x03, 0x02, 0xbb},
 808         {0x87, 0x05, 0x00, 0xbb},       {0x88, 0x01, 0x00, 0xbb},
 809         {0x89, 0x02, 0x02, 0xbb},       {0x8a, 0xfd, 0x04, 0xbb},
 810         {0x8b, 0xfc, 0xfd, 0xbb},       {0x8c, 0xff, 0xfd, 0xbb},
 811         {0x8d, 0x00, 0x00, 0xbb},       {0x8e, 0xfe, 0x05, 0xbb},
 812         {0x8f, 0xfc, 0xfd, 0xbb},       {0x90, 0xfe, 0xfd, 0xbb},
 813         {0x91, 0x00, 0x00, 0xbb},       {0x92, 0xfe, 0x03, 0xbb},
 814         {0x93, 0xfd, 0xfe, 0xbb},       {0x94, 0xff, 0xfd, 0xbb},
 815         {0x95, 0x00, 0x00, 0xbb},       {0xb6, 0x07, 0x05, 0xbb},
 816         {0xb7, 0x13, 0x06, 0xbb},       {0xb8, 0x08, 0x06, 0xbb},
 817         {0xb9, 0x14, 0x08, 0xbb},       {0xba, 0x06, 0x05, 0xbb},
 818         {0xbb, 0x13, 0x06, 0xbb},       {0xbc, 0x03, 0x01, 0xbb},
 819         {0xbd, 0x03, 0x04, 0xbb},       {0xbe, 0x00, 0x02, 0xbb},
 820         {0xbf, 0x03, 0x01, 0xbb},       {0xc0, 0x02, 0x04, 0xbb},
 821         {0xc1, 0x00, 0x04, 0xbb},       {0xc2, 0x02, 0x01, 0xbb},
 822         {0xc3, 0x01, 0x03, 0xbb},       {0xc4, 0x00, 0x04, 0xbb},
 823         {0xf0, 0x00, 0x00, 0xbb},       {0x05, 0x01, 0x13, 0xbb},
 824         {0x06, 0x00, 0x11, 0xbb},       {0x07, 0x00, 0x85, 0xbb},
 825         {0x08, 0x00, 0x27, 0xbb},
 826         {0x20, 0x01, 0x00, 0xbb},       /* h/v flips - was 03 */
 827         {0x21, 0x80, 0x00, 0xbb},       {0x22, 0x0d, 0x0f, 0xbb},
 828         {0x24, 0x80, 0x00, 0xbb},       {0x59, 0x00, 0xff, 0xbb},
 829         {0xf0, 0x00, 0x02, 0xbb},       {0x39, 0x03, 0x0d, 0xbb},
 830         {0x3a, 0x06, 0x1b, 0xbb},       {0x3b, 0x00, 0x95, 0xbb},
 831         {0x3c, 0x04, 0xdb, 0xbb},       {0x57, 0x02, 0x00, 0xbb},
 832         {0x58, 0x02, 0x66, 0xbb},       {0x59, 0x00, 0xff, 0xbb},
 833         {0x5a, 0x01, 0x33, 0xbb},       {0x5c, 0x12, 0x0d, 0xbb},
 834         {0x5d, 0x16, 0x11, 0xbb},       {0x64, 0x5e, 0x1c, 0xbb},
 835         {0xf0, 0x00, 0x02, 0xbb},       {0x2f, 0xd1, 0x00, 0xbb},
 836         {0x5b, 0x00, 0x01, 0xbb},       {0xf0, 0x00, 0x02, 0xbb},
 837         {0x36, 0x68, 0x10, 0xbb},       {0x00, 0x00, 0x30, 0xdd},
 838         {0x37, 0x82, 0x00, 0xbb},       {0xbc, 0x0e, 0x00, 0xcc},
 839         {0xbc, 0x0f, 0x05, 0xcc},       {0xbc, 0x10, 0xc0, 0xcc},
 840         {0xbc, 0x11, 0x03, 0xcc},       {0xb6, 0x00, 0x00, 0xcc},
 841         {0xb6, 0x03, 0x05, 0xcc},       {0xb6, 0x02, 0x00, 0xcc},
 842         {0xb6, 0x05, 0x04, 0xcc},       {0xb6, 0x04, 0x00, 0xcc},
 843         {0xb6, 0x12, 0xf8, 0xcc},       {0xb6, 0x13, 0x29, 0xcc},
 844         {0xb6, 0x18, 0x0a, 0xcc},       {0xb6, 0x17, 0x00, 0xcc},
 845         {0xb6, 0x16, 0x00, 0xcc},       {0xb6, 0x22, 0x12, 0xcc},
 846         {0xb6, 0x23, 0x0b, 0xcc},       {0xbf, 0xc0, 0x26, 0xcc},
 847         {0xbf, 0xc1, 0x02, 0xcc},       {0xbf, 0xcc, 0x04, 0xcc},
 848         {0xbc, 0x02, 0x18, 0xcc},       {0xbc, 0x03, 0x50, 0xcc},
 849         {0xbc, 0x04, 0x18, 0xcc},       {0xbc, 0x05, 0x00, 0xcc},
 850         {0xbc, 0x06, 0x00, 0xcc},       {0xbc, 0x08, 0x30, 0xcc},
 851         {0xbc, 0x09, 0x40, 0xcc},       {0xbc, 0x0a, 0x10, 0xcc},
 852         {0xbc, 0x0b, 0x00, 0xcc},       {0xbc, 0x0c, 0x00, 0xcc},
 853         {0xb3, 0x5c, 0x01, 0xcc},       {0xb3, 0x01, 0x41, 0xcc},
 854         {}
 855 };
 856 static const u8 mi1320_initQVGA_data[][4] = {
 857         {0xb3, 0x01, 0x01, 0xcc},       {0x00, 0x00, 0x33, 0xdd},
 858         {0xb0, 0x03, 0x19, 0xcc},       {0x00, 0x00, 0x33, 0xdd},
 859         {0xb0, 0x04, 0x02, 0xcc},       {0x00, 0x00, 0x33, 0xdd},
 860         {0xb3, 0x00, 0x64, 0xcc},       {0xb3, 0x00, 0x65, 0xcc},
 861         {0xb0, 0x16, 0x03, 0xcc},       {0xb3, 0x05, 0x01, 0xcc},
 862         {0xb3, 0x06, 0x01, 0xcc},       {0xb3, 0x08, 0x01, 0xcc},
 863         {0xb3, 0x09, 0x0c, 0xcc},       {0xb3, 0x34, 0x02, 0xcc},
 864         {0xb3, 0x35, 0xc8, 0xcc},       {0xb3, 0x02, 0x00, 0xcc},
 865         {0xb3, 0x03, 0x0a, 0xcc},       {0xb3, 0x04, 0x05, 0xcc},
 866         {0xb3, 0x20, 0x00, 0xcc},       {0xb3, 0x21, 0x00, 0xcc},
 867         {0xb3, 0x22, 0x01, 0xcc},       {0xb3, 0x23, 0xe0, 0xcc},
 868         {0xb3, 0x14, 0x00, 0xcc},       {0xb3, 0x15, 0x00, 0xcc},
 869         {0xb3, 0x16, 0x02, 0xcc},       {0xb3, 0x17, 0x7f, 0xcc},
 870         {0xb3, 0x00, 0x65, 0xcc},       {0xb8, 0x00, 0x00, 0xcc},
 871         {0xbc, 0x00, 0xd0, 0xcc},       {0xbc, 0x01, 0x01, 0xcc},
 872         {0xf0, 0x00, 0x00, 0xbb},       {0x0d, 0x00, 0x09, 0xbb},
 873         {0x00, 0x01, 0x00, 0xdd},       {0x0d, 0x00, 0x08, 0xbb},
 874         {0xf0, 0x00, 0x00, 0xbb},       {0x02, 0x00, 0x64, 0xbb},
 875         {0x05, 0x01, 0x78, 0xbb},       {0x06, 0x00, 0x11, 0xbb},
 876         {0x07, 0x01, 0x42, 0xbb},       {0x08, 0x00, 0x11, 0xbb},
 877         {0x20, 0x01, 0x00, 0xbb},       {0x21, 0x80, 0x00, 0xbb},
 878         {0x22, 0x0d, 0x0f, 0xbb},       {0x24, 0x80, 0x00, 0xbb},
 879         {0x59, 0x00, 0xff, 0xbb},       {0xf0, 0x00, 0x01, 0xbb},
 880         {0x9d, 0x3c, 0xa0, 0xbb},       {0x47, 0x30, 0x30, 0xbb},
 881         {0xf0, 0x00, 0x00, 0xbb},       {0x0a, 0x80, 0x11, 0xbb},
 882         {0x35, 0x00, 0x22, 0xbb},       {0xf0, 0x00, 0x02, 0xbb},
 883         {0x9d, 0xc5, 0x05, 0xbb},       {0xdc, 0x0f, 0xfc, 0xbb},
 884         {0xf0, 0x00, 0x01, 0xbb},       {0x06, 0x74, 0x0e, 0xbb},
 885         {0x80, 0x00, 0x06, 0xbb},       {0x81, 0x04, 0x00, 0xbb},
 886         {0x82, 0x01, 0x02, 0xbb},       {0x83, 0x03, 0x02, 0xbb},
 887         {0x84, 0x05, 0x00, 0xbb},       {0x85, 0x01, 0x00, 0xbb},
 888         {0x86, 0x03, 0x02, 0xbb},       {0x87, 0x05, 0x00, 0xbb},
 889         {0x88, 0x01, 0x00, 0xbb},       {0x89, 0x02, 0x02, 0xbb},
 890         {0x8a, 0xfd, 0x04, 0xbb},       {0x8b, 0xfc, 0xfd, 0xbb},
 891         {0x8c, 0xff, 0xfd, 0xbb},       {0x8d, 0x00, 0x00, 0xbb},
 892         {0x8e, 0xfe, 0x05, 0xbb},       {0x8f, 0xfc, 0xfd, 0xbb},
 893         {0x90, 0xfe, 0xfd, 0xbb},       {0x91, 0x00, 0x00, 0xbb},
 894         {0x92, 0xfe, 0x03, 0xbb},       {0x93, 0xfd, 0xfe, 0xbb},
 895         {0x94, 0xff, 0xfd, 0xbb},       {0x95, 0x00, 0x00, 0xbb},
 896         {0xb6, 0x07, 0x05, 0xbb},       {0xb7, 0x13, 0x06, 0xbb},
 897         {0xb8, 0x08, 0x06, 0xbb},       {0xb9, 0x14, 0x08, 0xbb},
 898         {0xba, 0x06, 0x05, 0xbb},       {0xbb, 0x13, 0x06, 0xbb},
 899         {0xbc, 0x03, 0x01, 0xbb},       {0xbd, 0x03, 0x04, 0xbb},
 900         {0xbe, 0x00, 0x02, 0xbb},       {0xbf, 0x03, 0x01, 0xbb},
 901         {0xc0, 0x02, 0x04, 0xbb},       {0xc1, 0x00, 0x04, 0xbb},
 902         {0xc2, 0x02, 0x01, 0xbb},       {0xc3, 0x01, 0x03, 0xbb},
 903         {0xc4, 0x00, 0x04, 0xbb},       {0xf0, 0x00, 0x02, 0xbb},
 904         {0xc8, 0x00, 0x00, 0xbb},       {0x2e, 0x00, 0x00, 0xbb},
 905         {0x2e, 0x0c, 0x5b, 0xbb},       {0x2f, 0xd1, 0x00, 0xbb},
 906         {0x39, 0x03, 0xca, 0xbb},       {0x3a, 0x06, 0x80, 0xbb},
 907         {0x3b, 0x01, 0x52, 0xbb},       {0x3c, 0x05, 0x40, 0xbb},
 908         {0x57, 0x01, 0x9c, 0xbb},       {0x58, 0x01, 0xee, 0xbb},
 909         {0x59, 0x00, 0xf0, 0xbb},       {0x5a, 0x01, 0x20, 0xbb},
 910         {0x5c, 0x1d, 0x17, 0xbb},       {0x5d, 0x22, 0x1c, 0xbb},
 911         {0x64, 0x1e, 0x1c, 0xbb},       {0x5b, 0x00, 0x01, 0xbb},
 912         {0xf0, 0x00, 0x02, 0xbb},       {0x36, 0x68, 0x10, 0xbb},
 913         {0x00, 0x00, 0x30, 0xdd},       {0x37, 0x81, 0x00, 0xbb},
 914         {0xbc, 0x02, 0x18, 0xcc},       {0xbc, 0x03, 0x50, 0xcc},
 915         {0xbc, 0x04, 0x18, 0xcc},       {0xbc, 0x05, 0x00, 0xcc},
 916         {0xbc, 0x06, 0x00, 0xcc},       {0xbc, 0x08, 0x30, 0xcc},
 917         {0xbc, 0x09, 0x40, 0xcc},       {0xbc, 0x0a, 0x10, 0xcc},
 918         {0xbc, 0x0b, 0x00, 0xcc},       {0xbc, 0x0c, 0x00, 0xcc},
 919         {0xbf, 0xc0, 0x26, 0xcc},       {0xbf, 0xc1, 0x02, 0xcc},
 920         {0xbf, 0xcc, 0x04, 0xcc},       {0xb3, 0x5c, 0x01, 0xcc},
 921         {0xb3, 0x01, 0x41, 0xcc},
 922         {}
 923 };
 924 
 925 static const u8 mi1320_soc_InitVGA[][4] = {
 926         {0xb3, 0x01, 0x01, 0xcc},
 927         {0xb0, 0x03, 0x19, 0xcc},
 928         {0xb0, 0x04, 0x02, 0xcc},
 929         {0x00, 0x00, 0x30, 0xdd},
 930         {0xb3, 0x00, 0x64, 0xcc},
 931         {0xb3, 0x00, 0x67, 0xcc},
 932         {0xb3, 0x05, 0x01, 0xcc},
 933         {0xb3, 0x06, 0x01, 0xcc},
 934         {0xb3, 0x08, 0x01, 0xcc},
 935         {0xb3, 0x09, 0x0c, 0xcc},
 936         {0xb3, 0x34, 0x02, 0xcc},
 937         {0xb3, 0x35, 0xc8, 0xcc},       /* i2c add: 48 */
 938         {0xb3, 0x02, 0x00, 0xcc},
 939         {0xb3, 0x03, 0x0a, 0xcc},
 940         {0xb3, 0x04, 0x05, 0xcc},
 941         {0xb3, 0x20, 0x00, 0xcc},
 942         {0xb3, 0x21, 0x00, 0xcc},
 943         {0xb3, 0x22, 0x01, 0xcc},
 944         {0xb3, 0x23, 0xe0, 0xcc},
 945         {0xb3, 0x14, 0x00, 0xcc},
 946         {0xb3, 0x15, 0x00, 0xcc},
 947         {0xb3, 0x16, 0x02, 0xcc},
 948         {0xb3, 0x17, 0x7f, 0xcc},
 949         {0xb3, 0x00, 0x67, 0xcc},
 950         {0xb8, 0x00, 0x00, 0xcc},
 951         {0xbc, 0x00, 0x71, 0xcc},
 952         {0xbc, 0x01, 0x01, 0xcc},
 953         {0xb3, 0x5c, 0x01, 0xcc},
 954         {0xf0, 0x00, 0x02, 0xbb},
 955         {0x00, 0x00, 0x10, 0xdd},
 956         {0xc8, 0x00, 0x00, 0xbb},
 957         {0x00, 0x00, 0x30, 0xdd},
 958         {0xf0, 0x00, 0x00, 0xbb},
 959         {0x00, 0x00, 0x10, 0xdd},
 960         {0x07, 0x00, 0xe0, 0xbb},
 961         {0x08, 0x00, 0x0b, 0xbb},
 962         {0x21, 0x00, 0x0c, 0xbb},
 963         {0x20, 0x01, 0x03, 0xbb},       /* h/v flip */
 964         {0xbf, 0xc0, 0x26, 0xcc},
 965         {0xbf, 0xc1, 0x02, 0xcc},
 966         {0xbf, 0xcc, 0x04, 0xcc},
 967         {0xb3, 0x01, 0x41, 0xcc},
 968         {0xf0, 0x00, 0x00, 0xbb},
 969         {0x05, 0x01, 0x78, 0xbb},
 970         {0x06, 0x00, 0x11, 0xbb},
 971         {0x07, 0x01, 0x42, 0xbb},
 972         {0x08, 0x00, 0x11, 0xbb},
 973         {0x20, 0x01, 0x03, 0xbb},       /* h/v flip */
 974         {0x21, 0x80, 0x00, 0xbb},
 975         {0x22, 0x0d, 0x0f, 0xbb},
 976         {0x24, 0x80, 0x00, 0xbb},
 977         {0x59, 0x00, 0xff, 0xbb},
 978         {0xf0, 0x00, 0x02, 0xbb},
 979         {0x39, 0x03, 0xca, 0xbb},
 980         {0x3a, 0x06, 0x80, 0xbb},
 981         {0x3b, 0x01, 0x52, 0xbb},
 982         {0x3c, 0x05, 0x40, 0xbb},
 983         {0x57, 0x01, 0x9c, 0xbb},
 984         {0x58, 0x01, 0xee, 0xbb},
 985         {0x59, 0x00, 0xf0, 0xbb},
 986         {0x5a, 0x01, 0x20, 0xbb},
 987         {0x5c, 0x1d, 0x17, 0xbb},
 988         {0x5d, 0x22, 0x1c, 0xbb},
 989         {0x64, 0x1e, 0x1c, 0xbb},
 990         {0x5b, 0x00, 0x00, 0xbb},
 991         {0xf0, 0x00, 0x02, 0xbb},
 992         {0x22, 0xa0, 0x78, 0xbb},
 993         {0x23, 0xa0, 0x78, 0xbb},
 994         {0x24, 0x7f, 0x00, 0xbb},
 995         {0x28, 0xea, 0x02, 0xbb},
 996         {0x29, 0x86, 0x7a, 0xbb},
 997         {0x5e, 0x52, 0x4c, 0xbb},
 998         {0x5f, 0x20, 0x24, 0xbb},
 999         {0x60, 0x00, 0x02, 0xbb},
1000         {0x02, 0x00, 0xee, 0xbb},
1001         {0x03, 0x39, 0x23, 0xbb},
1002         {0x04, 0x07, 0x24, 0xbb},
1003         {0x09, 0x00, 0xc0, 0xbb},
1004         {0x0a, 0x00, 0x79, 0xbb},
1005         {0x0b, 0x00, 0x04, 0xbb},
1006         {0x0c, 0x00, 0x5c, 0xbb},
1007         {0x0d, 0x00, 0xd9, 0xbb},
1008         {0x0e, 0x00, 0x53, 0xbb},
1009         {0x0f, 0x00, 0x21, 0xbb},
1010         {0x10, 0x00, 0xa4, 0xbb},
1011         {0x11, 0x00, 0xe5, 0xbb},
1012         {0x15, 0x00, 0x00, 0xbb},
1013         {0x16, 0x00, 0x00, 0xbb},
1014         {0x17, 0x00, 0x00, 0xbb},
1015         {0x18, 0x00, 0x00, 0xbb},
1016         {0x19, 0x00, 0x00, 0xbb},
1017         {0x1a, 0x00, 0x00, 0xbb},
1018         {0x1b, 0x00, 0x00, 0xbb},
1019         {0x1c, 0x00, 0x00, 0xbb},
1020         {0x1d, 0x00, 0x00, 0xbb},
1021         {0x1e, 0x00, 0x00, 0xbb},
1022         {0xf0, 0x00, 0x01, 0xbb},
1023         {0x06, 0xe0, 0x0e, 0xbb},
1024         {0x06, 0x60, 0x0e, 0xbb},
1025         {0xb3, 0x5c, 0x01, 0xcc},
1026         {}
1027 };
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_NoFliker[][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_NoFliker, 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);

/* [<][>][^][v][top][bottom][index][help] */