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