PageRenderTime 124ms CodeModel.GetById 19ms app.highlight 94ms RepoModel.GetById 1ms app.codeStats 1ms

/drivers/media/video/gspca/sonixj.c

https://bitbucket.org/ndreys/linux-sunxi
C | 3115 lines | 2582 code | 218 blank | 315 comment | 197 complexity | a3e7656da81cae8cfe5226b4f8068b60 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0

Large files files are truncated, but you can click here to view the full file

   1/*
   2 * Sonix sn9c102p sn9c105 sn9c120 (jpeg) subdriver
   3 *
   4 * Copyright (C) 2009-2010 Jean-Fran??ois Moine <http://moinejf.free.fr>
   5 * Copyright (C) 2005 Michel Xhaard mxhaard@magic.fr
   6 *
   7 * This program is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License as published by
   9 * the Free Software Foundation; either version 2 of the License, or
  10 * any later version.
  11 *
  12 * This program is distributed in the hope that it will be useful,
  13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15 * GNU General Public License for more details.
  16 *
  17 * You should have received a copy of the GNU General Public License
  18 * along with this program; if not, write to the Free Software
  19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  20 */
  21
  22#define MODULE_NAME "sonixj"
  23
  24#include <linux/input.h>
  25#include "gspca.h"
  26#include "jpeg.h"
  27
  28MODULE_AUTHOR("Jean-Fran??ois Moine <http://moinejf.free.fr>");
  29MODULE_DESCRIPTION("GSPCA/SONIX JPEG USB Camera Driver");
  30MODULE_LICENSE("GPL");
  31
  32/* controls */
  33enum e_ctrl {
  34	BRIGHTNESS,
  35	CONTRAST,
  36	COLORS,
  37	BLUE,
  38	RED,
  39	GAMMA,
  40	AUTOGAIN,
  41	HFLIP,
  42	VFLIP,
  43	SHARPNESS,
  44	ILLUM,
  45	FREQ,
  46	NCTRLS		/* number of controls */
  47};
  48
  49/* specific webcam descriptor */
  50struct sd {
  51	struct gspca_dev gspca_dev;	/* !! must be the first item */
  52
  53	struct gspca_ctrl ctrls[NCTRLS];
  54
  55	atomic_t avg_lum;
  56	u32 exposure;
  57
  58	struct work_struct work;
  59	struct workqueue_struct *work_thread;
  60
  61	u32 pktsz;			/* (used by pkt_scan) */
  62	u16 npkt;
  63	s8 nchg;
  64	s8 short_mark;
  65
  66	u8 quality;			/* image quality */
  67#define QUALITY_MIN 25
  68#define QUALITY_MAX 90
  69#define QUALITY_DEF 70
  70
  71	u8 reg01;
  72	u8 reg17;
  73	u8 reg18;
  74	u8 flags;
  75
  76	s8 ag_cnt;
  77#define AG_CNT_START 13
  78
  79	u8 bridge;
  80#define BRIDGE_SN9C102P 0
  81#define BRIDGE_SN9C105 1
  82#define BRIDGE_SN9C110 2
  83#define BRIDGE_SN9C120 3
  84	u8 sensor;			/* Type of image sensor chip */
  85	u8 i2c_addr;
  86
  87	u8 jpeg_hdr[JPEG_HDR_SZ];
  88};
  89enum sensors {
  90	SENSOR_ADCM1700,
  91	SENSOR_GC0307,
  92	SENSOR_HV7131R,
  93	SENSOR_MI0360,
  94	SENSOR_MI0360B,
  95	SENSOR_MO4000,
  96	SENSOR_MT9V111,
  97	SENSOR_OM6802,
  98	SENSOR_OV7630,
  99	SENSOR_OV7648,
 100	SENSOR_OV7660,
 101	SENSOR_PO1030,
 102	SENSOR_PO2030N,
 103	SENSOR_SOI768,
 104	SENSOR_SP80708,
 105};
 106
 107static void qual_upd(struct work_struct *work);
 108
 109/* device flags */
 110#define F_PDN_INV	0x01	/* inverse pin S_PWR_DN / sn_xxx tables */
 111#define F_ILLUM		0x02	/* presence of illuminator */
 112
 113/* sn9c1xx definitions */
 114/* register 0x01 */
 115#define S_PWR_DN	0x01	/* sensor power down */
 116#define S_PDN_INV	0x02	/* inverse pin S_PWR_DN */
 117#define V_TX_EN		0x04	/* video transfer enable */
 118#define LED		0x08	/* output to pin LED */
 119#define SCL_SEL_OD	0x20	/* open-drain mode */
 120#define SYS_SEL_48M	0x40	/* system clock 0: 24MHz, 1: 48MHz */
 121/* register 0x17 */
 122#define MCK_SIZE_MASK	0x1f	/* sensor master clock */
 123#define SEN_CLK_EN	0x20	/* enable sensor clock */
 124#define DEF_EN		0x80	/* defect pixel by 0: soft, 1: hard */
 125
 126/* V4L2 controls supported by the driver */
 127static void setbrightness(struct gspca_dev *gspca_dev);
 128static void setcontrast(struct gspca_dev *gspca_dev);
 129static void setcolors(struct gspca_dev *gspca_dev);
 130static void setredblue(struct gspca_dev *gspca_dev);
 131static void setgamma(struct gspca_dev *gspca_dev);
 132static void setautogain(struct gspca_dev *gspca_dev);
 133static void sethvflip(struct gspca_dev *gspca_dev);
 134static void setsharpness(struct gspca_dev *gspca_dev);
 135static void setillum(struct gspca_dev *gspca_dev);
 136static void setfreq(struct gspca_dev *gspca_dev);
 137
 138static const struct ctrl sd_ctrls[NCTRLS] = {
 139[BRIGHTNESS] =  {
 140	    {
 141		.id      = V4L2_CID_BRIGHTNESS,
 142		.type    = V4L2_CTRL_TYPE_INTEGER,
 143		.name    = "Brightness",
 144		.minimum = 0,
 145		.maximum = 0xff,
 146		.step    = 1,
 147		.default_value = 0x80,
 148	    },
 149	    .set_control = setbrightness
 150	},
 151[CONTRAST] = {
 152	    {
 153		.id      = V4L2_CID_CONTRAST,
 154		.type    = V4L2_CTRL_TYPE_INTEGER,
 155		.name    = "Contrast",
 156		.minimum = 0,
 157#define CONTRAST_MAX 127
 158		.maximum = CONTRAST_MAX,
 159		.step    = 1,
 160		.default_value = 63,
 161	    },
 162	    .set_control = setcontrast
 163	},
 164[COLORS] = {
 165	    {
 166		.id      = V4L2_CID_SATURATION,
 167		.type    = V4L2_CTRL_TYPE_INTEGER,
 168		.name    = "Saturation",
 169		.minimum = 0,
 170		.maximum = 40,
 171		.step    = 1,
 172#define COLORS_DEF 25
 173		.default_value = COLORS_DEF,
 174	    },
 175	    .set_control = setcolors
 176	},
 177[BLUE] = {
 178	    {
 179		.id      = V4L2_CID_BLUE_BALANCE,
 180		.type    = V4L2_CTRL_TYPE_INTEGER,
 181		.name    = "Blue Balance",
 182		.minimum = 24,
 183		.maximum = 40,
 184		.step    = 1,
 185		.default_value = 32,
 186	    },
 187	    .set_control = setredblue
 188	},
 189[RED] = {
 190	    {
 191		.id      = V4L2_CID_RED_BALANCE,
 192		.type    = V4L2_CTRL_TYPE_INTEGER,
 193		.name    = "Red Balance",
 194		.minimum = 24,
 195		.maximum = 40,
 196		.step    = 1,
 197		.default_value = 32,
 198	    },
 199	    .set_control = setredblue
 200	},
 201[GAMMA] = {
 202	    {
 203		.id      = V4L2_CID_GAMMA,
 204		.type    = V4L2_CTRL_TYPE_INTEGER,
 205		.name    = "Gamma",
 206		.minimum = 0,
 207		.maximum = 40,
 208		.step    = 1,
 209#define GAMMA_DEF 20
 210		.default_value = GAMMA_DEF,
 211	    },
 212	    .set_control = setgamma
 213	},
 214[AUTOGAIN] = {
 215	    {
 216		.id      = V4L2_CID_AUTOGAIN,
 217		.type    = V4L2_CTRL_TYPE_BOOLEAN,
 218		.name    = "Auto Gain",
 219		.minimum = 0,
 220		.maximum = 1,
 221		.step    = 1,
 222		.default_value = 1
 223	    },
 224	    .set_control = setautogain
 225	},
 226[HFLIP] = {
 227	    {
 228		.id      = V4L2_CID_HFLIP,
 229		.type    = V4L2_CTRL_TYPE_BOOLEAN,
 230		.name    = "Mirror",
 231		.minimum = 0,
 232		.maximum = 1,
 233		.step    = 1,
 234		.default_value = 0,
 235	    },
 236	    .set_control = sethvflip
 237	},
 238[VFLIP] = {
 239	    {
 240		.id      = V4L2_CID_VFLIP,
 241		.type    = V4L2_CTRL_TYPE_BOOLEAN,
 242		.name    = "Vflip",
 243		.minimum = 0,
 244		.maximum = 1,
 245		.step    = 1,
 246		.default_value = 0,
 247	    },
 248	    .set_control = sethvflip
 249	},
 250[SHARPNESS] = {
 251	    {
 252		.id	 = V4L2_CID_SHARPNESS,
 253		.type    = V4L2_CTRL_TYPE_INTEGER,
 254		.name    = "Sharpness",
 255		.minimum = 0,
 256		.maximum = 255,
 257		.step    = 1,
 258		.default_value = 90,
 259	    },
 260	    .set_control = setsharpness
 261	},
 262[ILLUM] = {
 263	    {
 264		.id      = V4L2_CID_ILLUMINATORS_1,
 265		.type    = V4L2_CTRL_TYPE_BOOLEAN,
 266		.name    = "Illuminator / infrared",
 267		.minimum = 0,
 268		.maximum = 1,
 269		.step    = 1,
 270		.default_value = 0,
 271	    },
 272	    .set_control = setillum
 273	},
 274/* ov7630/ov7648/ov7660 only */
 275[FREQ] = {
 276	    {
 277		.id	 = V4L2_CID_POWER_LINE_FREQUENCY,
 278		.type    = V4L2_CTRL_TYPE_MENU,
 279		.name    = "Light frequency filter",
 280		.minimum = 0,
 281		.maximum = 2,	/* 0: 0, 1: 50Hz, 2:60Hz */
 282		.step    = 1,
 283		.default_value = 1,
 284	    },
 285	    .set_control = setfreq
 286	},
 287};
 288
 289/* table of the disabled controls */
 290static const __u32 ctrl_dis[] = {
 291[SENSOR_ADCM1700] =	(1 << AUTOGAIN) |
 292			(1 << HFLIP) |
 293			(1 << VFLIP) |
 294			(1 << FREQ),
 295
 296[SENSOR_GC0307] =	(1 << HFLIP) |
 297			(1 << VFLIP) |
 298			(1 << FREQ),
 299
 300[SENSOR_HV7131R] =	(1 << HFLIP) |
 301			(1 << FREQ),
 302
 303[SENSOR_MI0360] =	(1 << HFLIP) |
 304			(1 << VFLIP) |
 305			(1 << FREQ),
 306
 307[SENSOR_MI0360B] =	(1 << HFLIP) |
 308			(1 << VFLIP) |
 309			(1 << FREQ),
 310
 311[SENSOR_MO4000] =	(1 << HFLIP) |
 312			(1 << VFLIP) |
 313			(1 << FREQ),
 314
 315[SENSOR_MT9V111] =	(1 << HFLIP) |
 316			(1 << VFLIP) |
 317			(1 << FREQ),
 318
 319[SENSOR_OM6802] =	(1 << HFLIP) |
 320			(1 << VFLIP) |
 321			(1 << FREQ),
 322
 323[SENSOR_OV7630] =	(1 << HFLIP),
 324
 325[SENSOR_OV7648] =	(1 << HFLIP),
 326
 327[SENSOR_OV7660] =	(1 << AUTOGAIN) |
 328			(1 << HFLIP) |
 329			(1 << VFLIP),
 330
 331[SENSOR_PO1030] =	(1 << AUTOGAIN) |
 332			(1 << HFLIP) |
 333			(1 << VFLIP) |
 334			(1 << FREQ),
 335
 336[SENSOR_PO2030N] =	(1 << AUTOGAIN) |
 337			(1 << FREQ),
 338
 339[SENSOR_SOI768] =	(1 << AUTOGAIN) |
 340			(1 << HFLIP) |
 341			(1 << VFLIP) |
 342			(1 << FREQ),
 343
 344[SENSOR_SP80708] =	(1 << AUTOGAIN) |
 345			(1 << HFLIP) |
 346			(1 << VFLIP) |
 347			(1 << FREQ),
 348};
 349
 350static const struct v4l2_pix_format cif_mode[] = {
 351	{352, 288, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
 352		.bytesperline = 352,
 353		.sizeimage = 352 * 288 * 4 / 8 + 590,
 354		.colorspace = V4L2_COLORSPACE_JPEG,
 355		.priv = 0},
 356};
 357static const struct v4l2_pix_format vga_mode[] = {
 358	{160, 120, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
 359		.bytesperline = 160,
 360		.sizeimage = 160 * 120 * 4 / 8 + 590,
 361		.colorspace = V4L2_COLORSPACE_JPEG,
 362		.priv = 2},
 363	{320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
 364		.bytesperline = 320,
 365		.sizeimage = 320 * 240 * 3 / 8 + 590,
 366		.colorspace = V4L2_COLORSPACE_JPEG,
 367		.priv = 1},
 368	{640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
 369		.bytesperline = 640,
 370		/* Note 3 / 8 is not large enough, not even 5 / 8 is ?! */
 371		.sizeimage = 640 * 480 * 3 / 4 + 590,
 372		.colorspace = V4L2_COLORSPACE_JPEG,
 373		.priv = 0},
 374};
 375
 376static const u8 sn_adcm1700[0x1c] = {
 377/*	reg0	reg1	reg2	reg3	reg4	reg5	reg6	reg7 */
 378	0x00,	0x43,	0x60,	0x00,	0x1a,	0x00,	0x00,	0x00,
 379/*	reg8	reg9	rega	regb	regc	regd	rege	regf */
 380	0x80,	0x51,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,
 381/*	reg10	reg11	reg12	reg13	reg14	reg15	reg16	reg17 */
 382	0x03,	0x00,	0x05,	0x01,	0x05,	0x16,	0x12,	0x42,
 383/*	reg18	reg19	reg1a	reg1b */
 384	0x06,	0x00,	0x00,	0x00
 385};
 386
 387static const u8 sn_gc0307[0x1c] = {
 388/*	reg0	reg1	reg2	reg3	reg4	reg5	reg6	reg7 */
 389	0x00,	0x61,	0x62,	0x00,	0x1a,	0x00,	0x00,	0x00,
 390/*	reg8	reg9	rega	regb	regc	regd	rege	regf */
 391	0x80,	0x21,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,
 392/*	reg10	reg11	reg12	reg13	reg14	reg15	reg16	reg17 */
 393	0x03,	0x00,	0x03,	0x01,	0x08,	0x28,	0x1e,	0x02,
 394/*	reg18	reg19	reg1a	reg1b */
 395	0x06,	0x00,	0x00,	0x00
 396};
 397
 398static const u8 sn_hv7131[0x1c] = {
 399/*	reg0	reg1	reg2	reg3	reg4	reg5	reg6	reg7 */
 400	0x00,	0x03,	0x60,	0x00,	0x1a,	0x20,	0x20,	0x20,
 401/*	reg8	reg9	rega	regb	regc	regd	rege	regf */
 402	0x81,	0x11,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,
 403/*	reg10	reg11	reg12	reg13	reg14	reg15	reg16	reg17 */
 404	0x03,	0x00,	0x00,	0x01,	0x03,	0x28,	0x1e,	0x41,
 405/*	reg18	reg19	reg1a	reg1b */
 406	0x0a,	0x00,	0x00,	0x00
 407};
 408
 409static const u8 sn_mi0360[0x1c] = {
 410/*	reg0	reg1	reg2	reg3	reg4	reg5	reg6	reg7 */
 411	0x00,	0x63,	0x40,	0x00,	0x1a,	0x20,	0x20,	0x20,
 412/*	reg8	reg9	rega	regb	regc	regd	rege	regf */
 413	0x81,	0x5d,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,
 414/*	reg10	reg11	reg12	reg13	reg14	reg15	reg16	reg17 */
 415	0x03,	0x00,	0x00,	0x02,	0x0a,	0x28,	0x1e,	0x61,
 416/*	reg18	reg19	reg1a	reg1b */
 417	0x06,	0x00,	0x00,	0x00
 418};
 419
 420static const u8 sn_mi0360b[0x1c] = {
 421/*	reg0	reg1	reg2	reg3	reg4	reg5	reg6	reg7 */
 422	0x00,	0x61,	0x40,	0x00,	0x1a,	0x00,	0x00,	0x00,
 423/*	reg8	reg9	rega	regb	regc	regd	rege	regf */
 424	0x81,	0x5d,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,
 425/*	reg10	reg11	reg12	reg13	reg14	reg15	reg16	reg17 */
 426	0x03,	0x00,	0x00,	0x02,	0x0a,	0x28,	0x1e,	0x40,
 427/*	reg18	reg19	reg1a	reg1b */
 428	0x06,	0x00,	0x00,	0x00
 429};
 430
 431static const u8 sn_mo4000[0x1c] = {
 432/*	reg0	reg1	reg2	reg3	reg4	reg5	reg6	reg7 */
 433	0x00,	0x23,	0x60,	0x00,	0x1a,	0x00,	0x20,	0x18,
 434/*	reg8	reg9	rega	regb	regc	regd	rege	regf */
 435	0x81,	0x21,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,
 436/*	reg10	reg11	reg12	reg13	reg14	reg15	reg16	reg17 */
 437	0x03,	 0x00,	0x0b,	0x0f,	0x14,	0x28,	0x1e,	0x40,
 438/*	reg18	reg19	reg1a	reg1b */
 439	0x08,	0x00,	0x00,	0x00
 440};
 441
 442static const u8 sn_mt9v111[0x1c] = {
 443/*	reg0	reg1	reg2	reg3	reg4	reg5	reg6	reg7 */
 444	0x00,	0x61,	0x40,	0x00,	0x1a,	0x20,	0x20,	0x20,
 445/*	reg8	reg9	rega	regb	regc	regd	rege	regf */
 446	0x81,	0x5c,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,
 447/*	reg10	reg11	reg12	reg13	reg14	reg15	reg16	reg17 */
 448	0x03,	0x00,	0x00,	0x02,	0x1c,	0x28,	0x1e,	0x40,
 449/*	reg18	reg19	reg1a	reg1b */
 450	0x06,	0x00,	0x00,	0x00
 451};
 452
 453static const u8 sn_om6802[0x1c] = {
 454/*	reg0	reg1	reg2	reg3	reg4	reg5	reg6	reg7 */
 455	0x00,	0x23,	0x72,	0x00,	0x1a,	0x20,	0x20,	0x19,
 456/*	reg8	reg9	rega	regb	regc	regd	rege	regf */
 457	0x80,	0x34,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,
 458/*	reg10	reg11	reg12	reg13	reg14	reg15	reg16	reg17 */
 459	0x03,	0x00,	0x51,	0x01,	0x00,	0x28,	0x1e,	0x40,
 460/*	reg18	reg19	reg1a	reg1b */
 461	0x05,	0x00,	0x00,	0x00
 462};
 463
 464static const u8 sn_ov7630[0x1c] = {
 465/*	reg0	reg1	reg2	reg3	reg4	reg5	reg6	reg7 */
 466	0x00,	0x21,	0x40,	0x00,	0x1a,	0x00,	0x00,	0x00,
 467/*	reg8	reg9	rega	regb	regc	regd	rege	regf */
 468	0x81,	0x21,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,
 469/*	reg10	reg11	reg12	reg13	reg14	reg15	reg16	reg17 */
 470	0x03,	0x00,	0x04,	0x01,	0x0a,	0x28,	0x1e,	0xc2,
 471/*	reg18	reg19	reg1a	reg1b */
 472	0x0b,	0x00,	0x00,	0x00
 473};
 474
 475static const u8 sn_ov7648[0x1c] = {
 476/*	reg0	reg1	reg2	reg3	reg4	reg5	reg6	reg7 */
 477	0x00,	0x63,	0x40,	0x00,	0x1a,	0x20,	0x20,	0x20,
 478/*	reg8	reg9	rega	regb	regc	regd	rege	regf */
 479	0x81,	0x21,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,
 480/*	reg10	reg11	reg12	reg13	reg14	reg15	reg16	reg17 */
 481	0x03,	0x00,	0x00,	0x01,	0x00,	0x28,	0x1e,	0x00,
 482/*	reg18	reg19	reg1a	reg1b */
 483	0x0b,	0x00,	0x00,	0x00
 484};
 485
 486static const u8 sn_ov7660[0x1c] = {
 487/*	reg0	reg1	reg2	reg3	reg4	reg5	reg6	reg7 */
 488	0x00,	0x61,	0x40,	0x00,	0x1a,	0x00,	0x00,	0x00,
 489/*	reg8	reg9	rega	regb	regc	regd	rege	regf */
 490	0x81,	0x21,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,
 491/*	reg10	reg11	reg12	reg13	reg14	reg15	reg16	reg17 */
 492	0x03,	0x00,	0x01,	0x01,	0x08,	0x28,	0x1e,	0x20,
 493/*	reg18	reg19	reg1a	reg1b */
 494	0x07,	0x00,	0x00,	0x00
 495};
 496
 497static const u8 sn_po1030[0x1c] = {
 498/*	reg0	reg1	reg2	reg3	reg4	reg5	reg6	reg7 */
 499	0x00,	0x21,	0x62,	0x00,	0x1a,	0x20,	0x20,	0x20,
 500/*	reg8	reg9	rega	regb	regc	regd	rege	regf */
 501	0x81,	0x6e,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,
 502/*	reg10	reg11	reg12	reg13	reg14	reg15	reg16	reg17 */
 503	0x03,	0x00,	0x00,	0x06,	0x06,	0x28,	0x1e,	0x00,
 504/*	reg18	reg19	reg1a	reg1b */
 505	0x07,	0x00,	0x00,	0x00
 506};
 507
 508static const u8 sn_po2030n[0x1c] = {
 509/*	reg0	reg1	reg2	reg3	reg4	reg5	reg6	reg7 */
 510	0x00,	0x63,	0x40,	0x00,	0x1a,	0x00,	0x00,	0x00,
 511/*	reg8	reg9	rega	regb	regc	regd	rege	regf */
 512	0x81,	0x6e,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,
 513/*	reg10	reg11	reg12	reg13	reg14	reg15	reg16	reg17 */
 514	0x03,	0x00,	0x00,	0x01,	0x14,	0x28,	0x1e,	0x00,
 515/*	reg18	reg19	reg1a	reg1b */
 516	0x07,	0x00,	0x00,	0x00
 517};
 518
 519static const u8 sn_soi768[0x1c] = {
 520/*	reg0	reg1	reg2	reg3	reg4	reg5	reg6	reg7 */
 521	0x00,	0x21,	0x40,	0x00,	0x1a,	0x00,	0x00,	0x00,
 522/*	reg8	reg9	rega	regb	regc	regd	rege	regf */
 523	0x81,	0x21,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,
 524/*	reg10	reg11	reg12	reg13	reg14	reg15	reg16	reg17 */
 525	0x03,	0x00,	0x00,	0x01,	0x08,	0x28,	0x1e,	0x00,
 526/*	reg18	reg19	reg1a	reg1b */
 527	0x07,	0x00,	0x00,	0x00
 528};
 529
 530static const u8 sn_sp80708[0x1c] = {
 531/*	reg0	reg1	reg2	reg3	reg4	reg5	reg6	reg7 */
 532	0x00,	0x63,	0x60,	0x00,	0x1a,	0x20,	0x20,	0x20,
 533/*	reg8	reg9	rega	regb	regc	regd	rege	regf */
 534	0x81,	0x18,	0x00,	0x00,	0x00,	0x00,	0x00,	0x00,
 535/*	reg10	reg11	reg12	reg13	reg14	reg15	reg16	reg17 */
 536	0x03,	0x00,	0x00,	0x03,	0x04,	0x28,	0x1e,	0x00,
 537/*	reg18	reg19	reg1a	reg1b */
 538	0x07,	0x00,	0x00,	0x00
 539};
 540
 541/* sequence specific to the sensors - !! index = SENSOR_xxx */
 542static const u8 *sn_tb[] = {
 543[SENSOR_ADCM1700] =	sn_adcm1700,
 544[SENSOR_GC0307] =	sn_gc0307,
 545[SENSOR_HV7131R] =	sn_hv7131,
 546[SENSOR_MI0360] =	sn_mi0360,
 547[SENSOR_MI0360B] =	sn_mi0360b,
 548[SENSOR_MO4000] =	sn_mo4000,
 549[SENSOR_MT9V111] =	sn_mt9v111,
 550[SENSOR_OM6802] =	sn_om6802,
 551[SENSOR_OV7630] =	sn_ov7630,
 552[SENSOR_OV7648] =	sn_ov7648,
 553[SENSOR_OV7660] =	sn_ov7660,
 554[SENSOR_PO1030] =	sn_po1030,
 555[SENSOR_PO2030N] =	sn_po2030n,
 556[SENSOR_SOI768] =	sn_soi768,
 557[SENSOR_SP80708] =	sn_sp80708,
 558};
 559
 560/* default gamma table */
 561static const u8 gamma_def[17] = {
 562	0x00, 0x2d, 0x46, 0x5a, 0x6c, 0x7c, 0x8b, 0x99,
 563	0xa6, 0xb2, 0xbf, 0xca, 0xd5, 0xe0, 0xeb, 0xf5, 0xff
 564};
 565/* gamma for sensor ADCM1700 */
 566static const u8 gamma_spec_0[17] = {
 567	0x0f, 0x39, 0x5a, 0x74, 0x86, 0x95, 0xa6, 0xb4,
 568	0xbd, 0xc4, 0xcc, 0xd4, 0xd5, 0xde, 0xe4, 0xed, 0xf5
 569};
 570/* gamma for sensors HV7131R and MT9V111 */
 571static const u8 gamma_spec_1[17] = {
 572	0x08, 0x3a, 0x52, 0x65, 0x75, 0x83, 0x91, 0x9d,
 573	0xa9, 0xb4, 0xbe, 0xc8, 0xd2, 0xdb, 0xe4, 0xed, 0xf5
 574};
 575/* gamma for sensor GC0307 */
 576static const u8 gamma_spec_2[17] = {
 577	0x14, 0x37, 0x50, 0x6a, 0x7c, 0x8d, 0x9d, 0xab,
 578	0xb5, 0xbf, 0xc2, 0xcb, 0xd1, 0xd6, 0xdb, 0xe1, 0xeb
 579};
 580/* gamma for sensor SP80708 */
 581static const u8 gamma_spec_3[17] = {
 582	0x0a, 0x2d, 0x4e, 0x68, 0x7d, 0x8f, 0x9f, 0xab,
 583	0xb7, 0xc2, 0xcc, 0xd3, 0xd8, 0xde, 0xe2, 0xe5, 0xe6
 584};
 585
 586/* color matrix and offsets */
 587static const u8 reg84[] = {
 588	0x14, 0x00, 0x27, 0x00, 0x07, 0x00,	/* YR YG YB gains */
 589	0xe8, 0x0f, 0xda, 0x0f, 0x40, 0x00,	/* UR UG UB */
 590	0x3e, 0x00, 0xcd, 0x0f, 0xf7, 0x0f,	/* VR VG VB */
 591	0x00, 0x00, 0x00			/* YUV offsets */
 592};
 593
 594#define DELAY	0xdd
 595
 596static const u8 adcm1700_sensor_init[][8] = {
 597	{0xa0, 0x51, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x10},
 598	{0xb0, 0x51, 0x04, 0x08, 0x00, 0x00, 0x00, 0x10},	/* reset */
 599	{DELAY, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
 600	{0xb0, 0x51, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10},
 601	{DELAY, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
 602	{0xb0, 0x51, 0x0c, 0xe0, 0x2e, 0x00, 0x00, 0x10},
 603	{0xb0, 0x51, 0x10, 0x02, 0x02, 0x00, 0x00, 0x10},
 604	{0xb0, 0x51, 0x14, 0x0e, 0x0e, 0x00, 0x00, 0x10},
 605	{0xb0, 0x51, 0x1c, 0x00, 0x80, 0x00, 0x00, 0x10},
 606	{0xb0, 0x51, 0x20, 0x01, 0x00, 0x00, 0x00, 0x10},
 607	{DELAY, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
 608	{0xb0, 0x51, 0x04, 0x04, 0x00, 0x00, 0x00, 0x10},
 609	{DELAY, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
 610	{0xb0, 0x51, 0x04, 0x01, 0x00, 0x00, 0x00, 0x10},
 611	{0xa0, 0x51, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x10},
 612	{0xb0, 0x51, 0x14, 0x01, 0x00, 0x00, 0x00, 0x10},
 613	{0xb0, 0x51, 0x32, 0x00, 0x00, 0x00, 0x00, 0x10},
 614	{}
 615};
 616static const u8 adcm1700_sensor_param1[][8] = {
 617	{0xb0, 0x51, 0x26, 0xf9, 0x01, 0x00, 0x00, 0x10},	/* exposure? */
 618	{0xd0, 0x51, 0x1e, 0x8e, 0x8e, 0x8e, 0x8e, 0x10},
 619
 620	{0xa0, 0x51, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x10},
 621	{0xb0, 0x51, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10},
 622	{0xa0, 0x51, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x10},
 623	{0xb0, 0x51, 0x32, 0x00, 0x72, 0x00, 0x00, 0x10},
 624	{0xd0, 0x51, 0x1e, 0xbe, 0xd7, 0xe8, 0xbe, 0x10},	/* exposure? */
 625
 626	{0xa0, 0x51, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x10},
 627	{0xb0, 0x51, 0x00, 0x02, 0x00, 0x00, 0x00, 0x10},
 628	{0xa0, 0x51, 0xfe, 0x10, 0x00, 0x00, 0x00, 0x10},
 629	{0xb0, 0x51, 0x32, 0x00, 0xa2, 0x00, 0x00, 0x10},
 630	{}
 631};
 632static const u8 gc0307_sensor_init[][8] = {
 633	{0xa0, 0x21, 0x43, 0x00, 0x00, 0x00, 0x00, 0x10},
 634	{0xa0, 0x21, 0x44, 0xa2, 0x00, 0x00, 0x00, 0x10},
 635	{0xa0, 0x21, 0x01, 0x6a, 0x00, 0x00, 0x00, 0x10},
 636	{0xa0, 0x21, 0x02, 0x70, 0x00, 0x00, 0x00, 0x10},
 637	{0xa0, 0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10},
 638	{0xa0, 0x21, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x10},
 639	{0xa0, 0x21, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x10},
 640	{0xa0, 0x21, 0x11, 0x05, 0x00, 0x00, 0x00, 0x10},
 641	{0xa0, 0x21, 0x05, 0x00, 0x00, 0x00, 0x00, 0x10},
 642	{0xa0, 0x21, 0x06, 0x00, 0x00, 0x00, 0x00, 0x10},
 643	{0xa0, 0x21, 0x07, 0x00, 0x00, 0x00, 0x00, 0x10},
 644	{0xa0, 0x21, 0x08, 0x02, 0x00, 0x00, 0x00, 0x10},
 645	{0xa0, 0x21, 0x09, 0x01, 0x00, 0x00, 0x00, 0x10},
 646	{0xa0, 0x21, 0x0a, 0xe8, 0x00, 0x00, 0x00, 0x10},
 647	{0xa0, 0x21, 0x0b, 0x02, 0x00, 0x00, 0x00, 0x10},
 648	{0xa0, 0x21, 0x0c, 0x80, 0x00, 0x00, 0x00, 0x10},
 649	{0xa0, 0x21, 0x0d, 0x22, 0x00, 0x00, 0x00, 0x10},
 650	{0xa0, 0x21, 0x0e, 0x02, 0x00, 0x00, 0x00, 0x10},
 651	{0xa0, 0x21, 0x0f, 0xb2, 0x00, 0x00, 0x00, 0x10},
 652	{0xa0, 0x21, 0x12, 0x70, 0x00, 0x00, 0x00, 0x10},
 653	{DELAY, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*delay 10ms*/
 654	{0xa0, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00, 0x10},
 655	{0xa0, 0x21, 0x15, 0xb8, 0x00, 0x00, 0x00, 0x10},
 656	{0xa0, 0x21, 0x16, 0x13, 0x00, 0x00, 0x00, 0x10},
 657	{0xa0, 0x21, 0x17, 0x52, 0x00, 0x00, 0x00, 0x10},
 658	{0xa0, 0x21, 0x18, 0x50, 0x00, 0x00, 0x00, 0x10},
 659	{0xa0, 0x21, 0x1e, 0x0d, 0x00, 0x00, 0x00, 0x10},
 660	{0xa0, 0x21, 0x1f, 0x32, 0x00, 0x00, 0x00, 0x10},
 661	{0xa0, 0x21, 0x61, 0x90, 0x00, 0x00, 0x00, 0x10},
 662	{0xa0, 0x21, 0x63, 0x70, 0x00, 0x00, 0x00, 0x10},
 663	{0xa0, 0x21, 0x65, 0x98, 0x00, 0x00, 0x00, 0x10},
 664	{0xa0, 0x21, 0x67, 0x90, 0x00, 0x00, 0x00, 0x10},
 665	{0xa0, 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, 0x10},
 666	{0xa0, 0x21, 0x04, 0x96, 0x00, 0x00, 0x00, 0x10},
 667	{0xa0, 0x21, 0x45, 0x27, 0x00, 0x00, 0x00, 0x10},
 668	{0xa0, 0x21, 0x47, 0x2c, 0x00, 0x00, 0x00, 0x10},
 669	{0xa0, 0x21, 0x43, 0x47, 0x00, 0x00, 0x00, 0x10},
 670	{0xa0, 0x21, 0x44, 0xd8, 0x00, 0x00, 0x00, 0x10},
 671	{}
 672};
 673static const u8 gc0307_sensor_param1[][8] = {
 674	{0xa0, 0x21, 0x68, 0x13, 0x00, 0x00, 0x00, 0x10},
 675	{0xd0, 0x21, 0x61, 0x80, 0x00, 0x80, 0x00, 0x10},
 676	{0xc0, 0x21, 0x65, 0x80, 0x00, 0x80, 0x00, 0x10},
 677	{0xc0, 0x21, 0x63, 0xa0, 0x00, 0xa6, 0x00, 0x10},
 678/*param3*/
 679	{0xa0, 0x21, 0x01, 0x6e, 0x00, 0x00, 0x00, 0x10},
 680	{0xa0, 0x21, 0x02, 0x88, 0x00, 0x00, 0x00, 0x10},
 681	{}
 682};
 683
 684static const u8 hv7131r_sensor_init[][8] = {
 685	{0xc1, 0x11, 0x01, 0x08, 0x01, 0x00, 0x00, 0x10},
 686	{0xb1, 0x11, 0x34, 0x17, 0x7f, 0x00, 0x00, 0x10},
 687	{0xd1, 0x11, 0x40, 0xff, 0x7f, 0x7f, 0x7f, 0x10},
 688/*	{0x91, 0x11, 0x44, 0x00, 0x00, 0x00, 0x00, 0x10}, */
 689	{0xd1, 0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10},
 690	{0xd1, 0x11, 0x14, 0x01, 0xe2, 0x02, 0x82, 0x10},
 691/*	{0x91, 0x11, 0x18, 0x00, 0x00, 0x00, 0x00, 0x10}, */
 692
 693	{0xa1, 0x11, 0x01, 0x08, 0x00, 0x00, 0x00, 0x10},
 694	{0xa1, 0x11, 0x01, 0x08, 0x00, 0x00, 0x00, 0x10},
 695	{0xc1, 0x11, 0x25, 0x00, 0x61, 0xa8, 0x00, 0x10},
 696	{0xa1, 0x11, 0x30, 0x22, 0x00, 0x00, 0x00, 0x10},
 697	{0xc1, 0x11, 0x31, 0x20, 0x2e, 0x20, 0x00, 0x10},
 698	{0xc1, 0x11, 0x25, 0x00, 0xc3, 0x50, 0x00, 0x10},
 699	{0xa1, 0x11, 0x30, 0x07, 0x00, 0x00, 0x00, 0x10}, /* gain14 */
 700	{0xc1, 0x11, 0x31, 0x10, 0x10, 0x10, 0x00, 0x10}, /* r g b 101a10 */
 701
 702	{0xa1, 0x11, 0x01, 0x08, 0x00, 0x00, 0x00, 0x10},
 703	{0xa1, 0x11, 0x20, 0x00, 0x00, 0x00, 0x00, 0x10},
 704	{0xa1, 0x11, 0x21, 0xd0, 0x00, 0x00, 0x00, 0x10},
 705	{0xa1, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x10},
 706	{0xa1, 0x11, 0x23, 0x09, 0x00, 0x00, 0x00, 0x10},
 707
 708	{0xa1, 0x11, 0x01, 0x08, 0x00, 0x00, 0x00, 0x10},
 709	{0xa1, 0x11, 0x20, 0x00, 0x00, 0x00, 0x00, 0x10},
 710	{0xa1, 0x11, 0x21, 0xd0, 0x00, 0x00, 0x00, 0x10},
 711	{0xa1, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x10},
 712	{0xa1, 0x11, 0x23, 0x10, 0x00, 0x00, 0x00, 0x10},
 713	{0xa1, 0x11, 0x01, 0x18, 0x00, 0x00, 0x00, 0x10},
 714							/* set sensor clock */
 715	{}
 716};
 717static const u8 mi0360_sensor_init[][8] = {
 718	{0xb1, 0x5d, 0x07, 0x00, 0x02, 0x00, 0x00, 0x10},
 719	{0xb1, 0x5d, 0x0d, 0x00, 0x01, 0x00, 0x00, 0x10},
 720	{0xb1, 0x5d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x10},
 721	{0xd1, 0x5d, 0x01, 0x00, 0x08, 0x00, 0x16, 0x10},
 722	{0xd1, 0x5d, 0x03, 0x01, 0xe2, 0x02, 0x82, 0x10},
 723	{0xd1, 0x5d, 0x05, 0x00, 0x09, 0x00, 0x53, 0x10},
 724	{0xb1, 0x5d, 0x0d, 0x00, 0x02, 0x00, 0x00, 0x10},
 725	{0xd1, 0x5d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x10},
 726	{0xd1, 0x5d, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x10},
 727	{0xd1, 0x5d, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x10},
 728	{0xd1, 0x5d, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10},
 729	{0xd1, 0x5d, 0x12, 0x00, 0x00, 0x00, 0x00, 0x10},
 730	{0xd1, 0x5d, 0x14, 0x00, 0x00, 0x00, 0x00, 0x10},
 731	{0xd1, 0x5d, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10},
 732	{0xd1, 0x5d, 0x18, 0x00, 0x00, 0x00, 0x00, 0x10},
 733	{0xd1, 0x5d, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x10},
 734	{0xd1, 0x5d, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x10},
 735	{0xb1, 0x5d, 0x32, 0x00, 0x00, 0x00, 0x00, 0x10},
 736	{0xd1, 0x5d, 0x20, 0x91, 0x01, 0x00, 0x00, 0x10},
 737	{0xd1, 0x5d, 0x22, 0x00, 0x00, 0x00, 0x00, 0x10},
 738	{0xd1, 0x5d, 0x24, 0x00, 0x00, 0x00, 0x00, 0x10},
 739	{0xd1, 0x5d, 0x26, 0x00, 0x00, 0x00, 0x24, 0x10},
 740	{0xd1, 0x5d, 0x2f, 0xf7, 0xB0, 0x00, 0x04, 0x10},
 741	{0xd1, 0x5d, 0x31, 0x00, 0x00, 0x00, 0x00, 0x10},
 742	{0xd1, 0x5d, 0x33, 0x00, 0x00, 0x01, 0x00, 0x10},
 743	{0xb1, 0x5d, 0x3d, 0x06, 0x8f, 0x00, 0x00, 0x10},
 744	{0xd1, 0x5d, 0x40, 0x01, 0xe0, 0x00, 0xd1, 0x10},
 745	{0xb1, 0x5d, 0x44, 0x00, 0x82, 0x00, 0x00, 0x10},
 746	{0xd1, 0x5d, 0x58, 0x00, 0x78, 0x00, 0x43, 0x10},
 747	{0xd1, 0x5d, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x10},
 748	{0xd1, 0x5d, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x10},
 749	{0xd1, 0x5d, 0x5e, 0x00, 0x00, 0xa3, 0x1d, 0x10},
 750	{0xb1, 0x5d, 0x62, 0x04, 0x11, 0x00, 0x00, 0x10},
 751
 752	{0xb1, 0x5d, 0x20, 0x91, 0x01, 0x00, 0x00, 0x10},
 753	{0xb1, 0x5d, 0x20, 0x11, 0x01, 0x00, 0x00, 0x10},
 754	{0xb1, 0x5d, 0x09, 0x00, 0x64, 0x00, 0x00, 0x10},
 755	{0xd1, 0x5d, 0x2b, 0x00, 0xa0, 0x00, 0xb0, 0x10},
 756	{0xd1, 0x5d, 0x2d, 0x00, 0xa0, 0x00, 0xa0, 0x10},
 757
 758	{0xb1, 0x5d, 0x0a, 0x00, 0x02, 0x00, 0x00, 0x10}, /* sensor clck ?2 */
 759	{0xb1, 0x5d, 0x06, 0x00, 0x30, 0x00, 0x00, 0x10},
 760	{0xb1, 0x5d, 0x05, 0x00, 0x0a, 0x00, 0x00, 0x10},
 761	{0xb1, 0x5d, 0x09, 0x02, 0x35, 0x00, 0x00, 0x10}, /* exposure 2 */
 762
 763	{0xd1, 0x5d, 0x2b, 0x00, 0xb9, 0x00, 0xe3, 0x10},
 764	{0xd1, 0x5d, 0x2d, 0x00, 0x5f, 0x00, 0xb9, 0x10}, /* 42 */
 765/*	{0xb1, 0x5d, 0x35, 0x00, 0x67, 0x00, 0x00, 0x10}, * gain orig */
 766/*	{0xb1, 0x5d, 0x35, 0x00, 0x20, 0x00, 0x00, 0x10}, * gain */
 767	{0xb1, 0x5d, 0x07, 0x00, 0x03, 0x00, 0x00, 0x10}, /* update */
 768	{0xb1, 0x5d, 0x07, 0x00, 0x02, 0x00, 0x00, 0x10}, /* sensor on */
 769	{}
 770};
 771static const u8 mi0360b_sensor_init[][8] = {
 772	{0xb1, 0x5d, 0x07, 0x00, 0x02, 0x00, 0x00, 0x10},
 773	{0xb1, 0x5d, 0x0d, 0x00, 0x01, 0x00, 0x00, 0x10},
 774	{DELAY, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*delay 20ms*/
 775	{0xb1, 0x5d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x10},
 776	{DELAY, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /*delay 20ms*/
 777	{0xd1, 0x5d, 0x01, 0x00, 0x08, 0x00, 0x16, 0x10},
 778	{0xd1, 0x5d, 0x03, 0x01, 0xe2, 0x02, 0x82, 0x10},
 779	{0xd1, 0x5d, 0x05, 0x00, 0x00, 0x00, 0x00, 0x10},
 780	{0xb1, 0x5d, 0x0d, 0x00, 0x02, 0x00, 0x00, 0x10},
 781	{0xd1, 0x5d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x10},
 782	{0xd1, 0x5d, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x10},
 783	{0xd1, 0x5d, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x10},
 784	{0xd1, 0x5d, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10},
 785	{0xd1, 0x5d, 0x12, 0x00, 0x00, 0x00, 0x00, 0x10},
 786	{0xd1, 0x5d, 0x14, 0x00, 0x00, 0x00, 0x00, 0x10},
 787	{0xd1, 0x5d, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10},
 788	{0xd1, 0x5d, 0x18, 0x00, 0x00, 0x00, 0x00, 0x10},
 789	{0xd1, 0x5d, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x10},
 790	{0xd1, 0x5d, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x10},
 791	{0xb1, 0x5d, 0x32, 0x00, 0x00, 0x00, 0x00, 0x10},
 792	{0xd1, 0x5d, 0x20, 0x11, 0x01, 0x00, 0x00, 0x10},
 793	{0xd1, 0x5d, 0x22, 0x00, 0x00, 0x00, 0x00, 0x10},
 794	{0xd1, 0x5d, 0x24, 0x00, 0x00, 0x00, 0x00, 0x10},
 795	{0xd1, 0x5d, 0x26, 0x00, 0x00, 0x00, 0x24, 0x10},
 796	{0xd1, 0x5d, 0x2f, 0xf7, 0xb0, 0x00, 0x04, 0x10},
 797	{0xd1, 0x5d, 0x31, 0x00, 0x00, 0x00, 0x00, 0x10},
 798	{0xd1, 0x5d, 0x33, 0x00, 0x00, 0x01, 0x00, 0x10},
 799	{0xb1, 0x5d, 0x3d, 0x06, 0x8f, 0x00, 0x00, 0x10},
 800	{0xd1, 0x5d, 0x40, 0x01, 0xe0, 0x00, 0xd1, 0x10},
 801	{0xb1, 0x5d, 0x44, 0x00, 0x82, 0x00, 0x00, 0x10},
 802	{0xd1, 0x5d, 0x58, 0x00, 0x78, 0x00, 0x43, 0x10},
 803	{0xd1, 0x5d, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x10},
 804	{0xd1, 0x5d, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x10},
 805	{0xd1, 0x5d, 0x5e, 0x00, 0x00, 0xa3, 0x1d, 0x10},
 806	{0xb1, 0x5d, 0x62, 0x04, 0x11, 0x00, 0x00, 0x10},
 807
 808	{0xb1, 0x5d, 0x20, 0x11, 0x01, 0x00, 0x00, 0x10},
 809	{0xb1, 0x5d, 0x20, 0x11, 0x01, 0x00, 0x00, 0x10},
 810	{0xb1, 0x5d, 0x09, 0x00, 0x64, 0x00, 0x00, 0x10},
 811	{0xd1, 0x5d, 0x2b, 0x00, 0x33, 0x00, 0xa0, 0x10},
 812	{0xd1, 0x5d, 0x2d, 0x00, 0xa0, 0x00, 0x33, 0x10},
 813	{}
 814};
 815static const u8 mi0360b_sensor_param1[][8] = {
 816	{0xb1, 0x5d, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x10},
 817	{0xb1, 0x5d, 0x06, 0x00, 0x53, 0x00, 0x00, 0x10},
 818	{0xb1, 0x5d, 0x05, 0x00, 0x09, 0x00, 0x00, 0x10},
 819	{0xb1, 0x5d, 0x09, 0x02, 0x35, 0x00, 0x00, 0x10}, /* exposure 2 */
 820
 821	{0xd1, 0x5d, 0x2b, 0x00, 0xd1, 0x01, 0xc9, 0x10},
 822	{0xd1, 0x5d, 0x2d, 0x00, 0xed, 0x00, 0xd1, 0x10},
 823	{0xb1, 0x5d, 0x07, 0x00, 0x03, 0x00, 0x00, 0x10}, /* update */
 824	{0xb1, 0x5d, 0x07, 0x00, 0x02, 0x00, 0x00, 0x10}, /* sensor on */
 825	{}
 826};
 827static const u8 mo4000_sensor_init[][8] = {
 828	{0xa1, 0x21, 0x01, 0x02, 0x00, 0x00, 0x00, 0x10},
 829	{0xa1, 0x21, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10},
 830	{0xa1, 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, 0x10},
 831	{0xa1, 0x21, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10},
 832	{0xa1, 0x21, 0x05, 0x00, 0x00, 0x00, 0x00, 0x10},
 833	{0xa1, 0x21, 0x05, 0x04, 0x00, 0x00, 0x00, 0x10},
 834	{0xa1, 0x21, 0x06, 0x80, 0x00, 0x00, 0x00, 0x10},
 835	{0xa1, 0x21, 0x06, 0x81, 0x00, 0x00, 0x00, 0x10},
 836	{0xa1, 0x21, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x10},
 837	{0xa1, 0x21, 0x11, 0x00, 0x00, 0x00, 0x00, 0x10},
 838	{0xa1, 0x21, 0x11, 0x20, 0x00, 0x00, 0x00, 0x10},
 839	{0xa1, 0x21, 0x11, 0x30, 0x00, 0x00, 0x00, 0x10},
 840	{0xa1, 0x21, 0x11, 0x38, 0x00, 0x00, 0x00, 0x10},
 841	{0xa1, 0x21, 0x11, 0x38, 0x00, 0x00, 0x00, 0x10},
 842	{0xa1, 0x21, 0x12, 0x00, 0x00, 0x00, 0x00, 0x10},
 843	{0xa1, 0x21, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10},
 844	{0xa1, 0x21, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x10},
 845	{0xa1, 0x21, 0x10, 0x20, 0x00, 0x00, 0x00, 0x10},
 846	{0xa1, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10},
 847	{0xa1, 0x21, 0x11, 0x38, 0x00, 0x00, 0x00, 0x10},
 848	{}
 849};
 850static const u8 mt9v111_sensor_init[][8] = {
 851	{0xb1, 0x5c, 0x0d, 0x00, 0x01, 0x00, 0x00, 0x10}, /* reset? */
 852	{DELAY, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* delay 20ms */
 853	{0xb1, 0x5c, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x10},
 854	{0xb1, 0x5c, 0x01, 0x00, 0x01, 0x00, 0x00, 0x10}, /* IFP select */
 855	{0xb1, 0x5c, 0x08, 0x04, 0x80, 0x00, 0x00, 0x10}, /* output fmt ctrl */
 856	{0xb1, 0x5c, 0x06, 0x00, 0x00, 0x00, 0x00, 0x10}, /* op mode ctrl */
 857	{0xb1, 0x5c, 0x01, 0x00, 0x04, 0x00, 0x00, 0x10}, /* sensor select */
 858	{0xb1, 0x5c, 0x08, 0x00, 0x08, 0x00, 0x00, 0x10}, /* row start */
 859	{0xb1, 0x5c, 0x02, 0x00, 0x16, 0x00, 0x00, 0x10}, /* col start */
 860	{0xb1, 0x5c, 0x03, 0x01, 0xe7, 0x00, 0x00, 0x10}, /* window height */
 861	{0xb1, 0x5c, 0x04, 0x02, 0x87, 0x00, 0x00, 0x10}, /* window width */
 862	{0xb1, 0x5c, 0x07, 0x30, 0x02, 0x00, 0x00, 0x10}, /* output ctrl */
 863	{0xb1, 0x5c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x10}, /* shutter delay */
 864	{0xb1, 0x5c, 0x12, 0x00, 0xb0, 0x00, 0x00, 0x10}, /* zoom col start */
 865	{0xb1, 0x5c, 0x13, 0x00, 0x7c, 0x00, 0x00, 0x10}, /* zoom row start */
 866	{0xb1, 0x5c, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x10}, /* digital zoom */
 867	{0xb1, 0x5c, 0x20, 0x00, 0x00, 0x00, 0x00, 0x10}, /* read mode */
 868	{0xb1, 0x5c, 0x20, 0x00, 0x00, 0x00, 0x00, 0x10},
 869	{}
 870};
 871static const u8 mt9v111_sensor_param1[][8] = {
 872	{0xd1, 0x5c, 0x2b, 0x00, 0x33, 0x00, 0xad, 0x10}, /* G1 and B gains */
 873	{0xd1, 0x5c, 0x2d, 0x00, 0xad, 0x00, 0x33, 0x10}, /* R and G2 gains */
 874	{0xb1, 0x5c, 0x06, 0x00, 0x40, 0x00, 0x00, 0x10}, /* vert blanking */
 875	{0xb1, 0x5c, 0x05, 0x00, 0x09, 0x00, 0x00, 0x10}, /* horiz blanking */
 876	{0xb1, 0x5c, 0x35, 0x01, 0xc0, 0x00, 0x00, 0x10}, /* global gain */
 877	{}
 878};
 879static const u8 om6802_init0[2][8] = {
 880/*fixme: variable*/
 881	{0xa0, 0x34, 0x29, 0x0e, 0x00, 0x00, 0x00, 0x10},
 882	{0xa0, 0x34, 0x23, 0xb0, 0x00, 0x00, 0x00, 0x10},
 883};
 884static const u8 om6802_sensor_init[][8] = {
 885	{0xa0, 0x34, 0xdf, 0x6d, 0x00, 0x00, 0x00, 0x10},
 886						/* factory mode */
 887	{0xa0, 0x34, 0xdd, 0x18, 0x00, 0x00, 0x00, 0x10},
 888						/* output raw RGB */
 889	{0xa0, 0x34, 0x5a, 0xc0, 0x00, 0x00, 0x00, 0x10},
 890/*	{0xa0, 0x34, 0xfb, 0x11, 0x00, 0x00, 0x00, 0x10}, */
 891	{0xa0, 0x34, 0xf0, 0x04, 0x00, 0x00, 0x00, 0x10},
 892		/* auto-exposure speed (0) / white balance mode (auto RGB) */
 893/*	{0xa0, 0x34, 0xf1, 0x02, 0x00, 0x00, 0x00, 0x10},
 894							 * set color mode */
 895/*	{0xa0, 0x34, 0xfe, 0x5b, 0x00, 0x00, 0x00, 0x10},
 896						 * max AGC value in AE */
 897/*	{0xa0, 0x34, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x10},
 898							 * preset AGC */
 899/*	{0xa0, 0x34, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x10},
 900						 * preset brightness */
 901/*	{0xa0, 0x34, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x10},
 902							 * preset contrast */
 903/*	{0xa0, 0x34, 0xe8, 0x31, 0x00, 0x00, 0x00, 0x10},
 904							 * preset gamma */
 905	{0xa0, 0x34, 0xe9, 0x0f, 0x00, 0x00, 0x00, 0x10},
 906				/* luminance mode (0x4f -> AutoExpo on) */
 907	{0xa0, 0x34, 0xe4, 0xff, 0x00, 0x00, 0x00, 0x10},
 908							/* preset shutter */
 909/*	{0xa0, 0x34, 0xef, 0x00, 0x00, 0x00, 0x00, 0x10},
 910							 * auto frame rate */
 911/*	{0xa0, 0x34, 0xfb, 0xee, 0x00, 0x00, 0x00, 0x10}, */
 912	{0xa0, 0x34, 0x5d, 0x80, 0x00, 0x00, 0x00, 0x10},
 913	{}
 914};
 915static const u8 om6802_sensor_param1[][8] = {
 916	{0xa0, 0x34, 0x71, 0x84, 0x00, 0x00, 0x00, 0x10},
 917	{0xa0, 0x34, 0x72, 0x05, 0x00, 0x00, 0x00, 0x10},
 918	{0xa0, 0x34, 0x68, 0x80, 0x00, 0x00, 0x00, 0x10},
 919	{0xa0, 0x34, 0x69, 0x01, 0x00, 0x00, 0x00, 0x10},
 920	{}
 921};
 922static const u8 ov7630_sensor_init[][8] = {
 923	{0xa1, 0x21, 0x76, 0x01, 0x00, 0x00, 0x00, 0x10},
 924	{0xa1, 0x21, 0x12, 0xc8, 0x00, 0x00, 0x00, 0x10},
 925	{DELAY, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* delay 20ms */
 926	{0xa1, 0x21, 0x12, 0x48, 0x00, 0x00, 0x00, 0x10},
 927	{0xa1, 0x21, 0x12, 0xc8, 0x00, 0x00, 0x00, 0x10},
 928	{DELAY, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* delay 20ms */
 929	{0xa1, 0x21, 0x12, 0x48, 0x00, 0x00, 0x00, 0x10},
 930/* win: i2c_r from 00 to 80 */
 931	{0xd1, 0x21, 0x03, 0x80, 0x10, 0x20, 0x80, 0x10},
 932	{0xb1, 0x21, 0x0c, 0x20, 0x20, 0x00, 0x00, 0x10},
 933/* HDG: 0x11 was 0x00 change to 0x01 for better exposure (15 fps instead of 30)
 934	0x13 was 0xc0 change to 0xc3 for auto gain and exposure */
 935	{0xd1, 0x21, 0x11, 0x01, 0x48, 0xc3, 0x00, 0x10},
 936	{0xb1, 0x21, 0x15, 0x80, 0x03, 0x00, 0x00, 0x10},
 937	{0xd1, 0x21, 0x17, 0x1b, 0xbd, 0x05, 0xf6, 0x10},
 938	{0xa1, 0x21, 0x1b, 0x04, 0x00, 0x00, 0x00, 0x10},
 939	{0xd1, 0x21, 0x1f, 0x00, 0x80, 0x80, 0x80, 0x10},
 940	{0xd1, 0x21, 0x23, 0xde, 0x10, 0x8a, 0xa0, 0x10},
 941	{0xc1, 0x21, 0x27, 0xca, 0xa2, 0x74, 0x00, 0x10},
 942	{0xd1, 0x21, 0x2a, 0x88, 0x00, 0x88, 0x01, 0x10},
 943	{0xc1, 0x21, 0x2e, 0x80, 0x00, 0x18, 0x00, 0x10},
 944	{0xa1, 0x21, 0x21, 0x08, 0x00, 0x00, 0x00, 0x10},
 945	{0xa1, 0x21, 0x22, 0x00, 0x00, 0x00, 0x00, 0x10},
 946	{0xa1, 0x21, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x10},
 947	{0xb1, 0x21, 0x32, 0xc2, 0x08, 0x00, 0x00, 0x10},
 948	{0xb1, 0x21, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x10},
 949	{0xd1, 0x21, 0x60, 0x05, 0x40, 0x12, 0x57, 0x10},
 950	{0xa1, 0x21, 0x64, 0x73, 0x00, 0x00, 0x00, 0x10},
 951	{0xd1, 0x21, 0x65, 0x00, 0x55, 0x01, 0xac, 0x10},
 952	{0xa1, 0x21, 0x69, 0x38, 0x00, 0x00, 0x00, 0x10},
 953	{0xd1, 0x21, 0x6f, 0x1f, 0x01, 0x00, 0x10, 0x10},
 954	{0xd1, 0x21, 0x73, 0x50, 0x20, 0x02, 0x01, 0x10},
 955	{0xd1, 0x21, 0x77, 0xf3, 0x90, 0x98, 0x98, 0x10},
 956	{0xc1, 0x21, 0x7b, 0x00, 0x4c, 0xf7, 0x00, 0x10},
 957	{0xd1, 0x21, 0x17, 0x1b, 0xbd, 0x05, 0xf6, 0x10},
 958	{0xa1, 0x21, 0x1b, 0x04, 0x00, 0x00, 0x00, 0x10},
 959	{}
 960};
 961static const u8 ov7630_sensor_param1[][8] = {
 962	{0xa1, 0x21, 0x12, 0x48, 0x00, 0x00, 0x00, 0x10},
 963	{0xa1, 0x21, 0x12, 0x48, 0x00, 0x00, 0x00, 0x10},
 964/*fixme: + 0x12, 0x04*/
 965/*	{0xa1, 0x21, 0x75, 0x82, 0x00, 0x00, 0x00, 0x10},  * COMN
 966							 * set by setvflip */
 967	{0xa1, 0x21, 0x10, 0x32, 0x00, 0x00, 0x00, 0x10},
 968	{0xa1, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10},
 969	{0xb1, 0x21, 0x01, 0x80, 0x80, 0x00, 0x00, 0x10},
 970/* */
 971/*	{0xa1, 0x21, 0x2a, 0x88, 0x00, 0x00, 0x00, 0x10}, * set by setfreq */
 972/*	{0xa1, 0x21, 0x2b, 0x34, 0x00, 0x00, 0x00, 0x10}, * set by setfreq */
 973/* */
 974	{0xa1, 0x21, 0x10, 0x83, 0x00, 0x00, 0x00, 0x10},
 975/*	{0xb1, 0x21, 0x01, 0x88, 0x70, 0x00, 0x00, 0x10}, */
 976	{}
 977};
 978
 979static const u8 ov7648_sensor_init[][8] = {
 980	{0xa1, 0x21, 0x76, 0x00, 0x00, 0x00, 0x00, 0x10},
 981	{0xa1, 0x21, 0x12, 0x80, 0x00, 0x00, 0x00, 0x10},	/* reset */
 982	{DELAY, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* delay 20ms */
 983	{0xa1, 0x21, 0x12, 0x00, 0x00, 0x00, 0x00, 0x10},
 984	{0xd1, 0x21, 0x03, 0xa4, 0x30, 0x88, 0x00, 0x10},
 985	{0xb1, 0x21, 0x11, 0x80, 0x08, 0x00, 0x00, 0x10},
 986	{0xc1, 0x21, 0x13, 0xa0, 0x04, 0x84, 0x00, 0x10},
 987	{0xd1, 0x21, 0x17, 0x1a, 0x02, 0xba, 0xf4, 0x10},
 988	{0xa1, 0x21, 0x1b, 0x04, 0x00, 0x00, 0x00, 0x10},
 989	{0xd1, 0x21, 0x1f, 0x41, 0xc0, 0x80, 0x80, 0x10},
 990	{0xd1, 0x21, 0x23, 0xde, 0xa0, 0x80, 0x32, 0x10},
 991	{0xd1, 0x21, 0x27, 0xfe, 0xa0, 0x00, 0x91, 0x10},
 992	{0xd1, 0x21, 0x2b, 0x00, 0x88, 0x85, 0x80, 0x10},
 993	{0xc1, 0x21, 0x2f, 0x9c, 0x00, 0xc4, 0x00, 0x10},
 994	{0xd1, 0x21, 0x60, 0xa6, 0x60, 0x88, 0x12, 0x10},
 995	{0xd1, 0x21, 0x64, 0x88, 0x00, 0x00, 0x94, 0x10},
 996	{0xd1, 0x21, 0x68, 0x7a, 0x0c, 0x00, 0x00, 0x10},
 997	{0xd1, 0x21, 0x6c, 0x11, 0x33, 0x22, 0x00, 0x10},
 998	{0xd1, 0x21, 0x70, 0x11, 0x00, 0x10, 0x50, 0x10},
 999	{0xd1, 0x21, 0x74, 0x20, 0x06, 0x00, 0xb5, 0x10},
1000	{0xd1, 0x21, 0x78, 0x8a, 0x00, 0x00, 0x00, 0x10},
1001	{0xb1, 0x21, 0x7c, 0x00, 0x43, 0x00, 0x00, 0x10},
1002
1003	{0xd1, 0x21, 0x21, 0x86, 0x00, 0xde, 0xa0, 0x10},
1004/*	{0xd1, 0x21, 0x25, 0x80, 0x32, 0xfe, 0xa0, 0x10}, jfm done */
1005/*	{0xd1, 0x21, 0x29, 0x00, 0x91, 0x00, 0x88, 0x10}, jfm done */
1006/*	{0xb1, 0x21, 0x2d, 0x85, 0x00, 0x00, 0x00, 0x10}, set by setfreq */
1007	{}
1008};
1009static const u8 ov7648_sensor_param1[][8] = {
1010/*	{0xa1, 0x21, 0x12, 0x08, 0x00, 0x00, 0x00, 0x10}, jfm done */
1011/*	{0xa1, 0x21, 0x75, 0x06, 0x00, 0x00, 0x00, 0x10},   * COMN
1012							 * set by setvflip */
1013	{0xa1, 0x21, 0x19, 0x02, 0x00, 0x00, 0x00, 0x10},
1014	{0xa1, 0x21, 0x10, 0x32, 0x00, 0x00, 0x00, 0x10},
1015/*	{0xa1, 0x21, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10}, jfm done */
1016/*	{0xa1, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10},  * GAIN - def */
1017/*	{0xb1, 0x21, 0x01, 0x6c, 0x6c, 0x00, 0x00, 0x10},  * B R - def: 80 */
1018/*...*/
1019	{0xa1, 0x21, 0x11, 0x81, 0x00, 0x00, 0x00, 0x10}, /* CLKRC */
1020/*	{0xa1, 0x21, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x10}, jfm done */
1021/*	{0xa1, 0x21, 0x16, 0x00, 0x00, 0x00, 0x00, 0x10}, jfm done */
1022/*	{0xa1, 0x21, 0x2a, 0x91, 0x00, 0x00, 0x00, 0x10}, jfm done */
1023/*	{0xa1, 0x21, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x10}, jfm done */
1024/*	{0xb1, 0x21, 0x01, 0x64, 0x84, 0x00, 0x00, 0x10},  * B R - def: 80 */
1025
1026	{}
1027};
1028
1029static const u8 ov7660_sensor_init[][8] = {
1030	{0xa1, 0x21, 0x12, 0x80, 0x00, 0x00, 0x00, 0x10}, /* reset SCCB */
1031	{DELAY, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* delay 20ms */
1032	{0xa1, 0x21, 0x12, 0x05, 0x00, 0x00, 0x00, 0x10},
1033						/* Outformat = rawRGB */
1034	{0xa1, 0x21, 0x13, 0xb8, 0x00, 0x00, 0x00, 0x10}, /* init COM8 */
1035	{0xd1, 0x21, 0x00, 0x01, 0x74, 0x92, 0x00, 0x10},
1036						/* GAIN BLUE RED VREF */
1037	{0xd1, 0x21, 0x04, 0x00, 0x7d, 0x62, 0x00, 0x10},
1038						/* COM 1 BAVE GEAVE AECHH */
1039	{0xb1, 0x21, 0x08, 0x83, 0x01, 0x00, 0x00, 0x10}, /* RAVE COM2 */
1040	{0xd1, 0x21, 0x0c, 0x00, 0x08, 0x04, 0x4f, 0x10}, /* COM 3 4 5 6 */
1041	{0xd1, 0x21, 0x10, 0x7f, 0x40, 0x05, 0xff, 0x10},
1042						/* AECH CLKRC COM7 COM8 */
1043	{0xc1, 0x21, 0x14, 0x2c, 0x00, 0x02, 0x00, 0x10}, /* COM9 COM10 */
1044	{0xd1, 0x21, 0x17, 0x10, 0x60, 0x02, 0x7b, 0x10},
1045						/* HSTART HSTOP VSTRT VSTOP */
1046	{0xa1, 0x21, 0x1b, 0x02, 0x00, 0x00, 0x00, 0x10}, /* PSHFT */
1047	{0xb1, 0x21, 0x1e, 0x01, 0x0e, 0x00, 0x00, 0x10}, /* MVFP LAEC */
1048	{0xd1, 0x21, 0x20, 0x07, 0x07, 0x07, 0x07, 0x10},
1049					/* BOS GBOS GROS ROS (BGGR offset) */
1050/*	{0xd1, 0x21, 0x24, 0x68, 0x58, 0xd4, 0x80, 0x10}, */
1051	{0xd1, 0x21, 0x24, 0x78, 0x68, 0xd4, 0x80, 0x10},
1052						/* AEW AEB VPT BBIAS */
1053	{0xd1, 0x21, 0x28, 0x80, 0x30, 0x00, 0x00, 0x10},
1054						/* GbBIAS RSVD EXHCH EXHCL */
1055	{0xd1, 0x21, 0x2c, 0x80, 0x00, 0x00, 0x62, 0x10},
1056						/* RBIAS ADVFL ASDVFH YAVE */
1057	{0xc1, 0x21, 0x30, 0x08, 0x30, 0xb4, 0x00, 0x10},
1058						/* HSYST HSYEN HREF */
1059	{0xd1, 0x21, 0x33, 0x00, 0x07, 0x84, 0x00, 0x10}, /* reserved */
1060	{0xd1, 0x21, 0x37, 0x0c, 0x02, 0x43, 0x00, 0x10},
1061						/* ADC ACOM OFON TSLB */
1062	{0xd1, 0x21, 0x3b, 0x02, 0x6c, 0x19, 0x0e, 0x10},
1063						/* COM11 COM12 COM13 COM14 */
1064	{0xd1, 0x21, 0x3f, 0x41, 0xc1, 0x22, 0x08, 0x10},
1065						/* EDGE COM15 COM16 COM17 */
1066	{0xd1, 0x21, 0x43, 0xf0, 0x10, 0x78, 0xa8, 0x10}, /* reserved */
1067	{0xd1, 0x21, 0x47, 0x60, 0x80, 0x00, 0x00, 0x10}, /* reserved */
1068	{0xd1, 0x21, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x10}, /* reserved */
1069	{0xd1, 0x21, 0x4f, 0x46, 0x36, 0x0f, 0x17, 0x10}, /* MTX 1 2 3 4 */
1070	{0xd1, 0x21, 0x53, 0x7f, 0x96, 0x40, 0x40, 0x10}, /* MTX 5 6 7 8 */
1071	{0xb1, 0x21, 0x57, 0x40, 0x0f, 0x00, 0x00, 0x10}, /* MTX9 MTXS */
1072	{0xd1, 0x21, 0x59, 0xba, 0x9a, 0x22, 0xb9, 0x10}, /* reserved */
1073	{0xd1, 0x21, 0x5d, 0x9b, 0x10, 0xf0, 0x05, 0x10}, /* reserved */
1074	{0xa1, 0x21, 0x61, 0x60, 0x00, 0x00, 0x00, 0x10}, /* reserved */
1075	{0xd1, 0x21, 0x62, 0x00, 0x00, 0x50, 0x30, 0x10},
1076						/* LCC1 LCC2 LCC3 LCC4 */
1077	{0xa1, 0x21, 0x66, 0x00, 0x00, 0x00, 0x00, 0x10}, /* LCC5 */
1078	{0xd1, 0x21, 0x67, 0x80, 0x7a, 0x90, 0x80, 0x10}, /* MANU */
1079	{0xa1, 0x21, 0x6b, 0x0a, 0x00, 0x00, 0x00, 0x10},
1080					/* band gap reference [0:3] DBLV */
1081	{0xd1, 0x21, 0x6c, 0x30, 0x48, 0x80, 0x74, 0x10}, /* gamma curve */
1082	{0xd1, 0x21, 0x70, 0x64, 0x60, 0x5c, 0x58, 0x10}, /* gamma curve */
1083	{0xd1, 0x21, 0x74, 0x54, 0x4c, 0x40, 0x38, 0x10}, /* gamma curve */
1084	{0xd1, 0x21, 0x78, 0x34, 0x30, 0x2f, 0x2b, 0x10}, /* gamma curve */
1085	{0xd1, 0x21, 0x7c, 0x03, 0x07, 0x17, 0x34, 0x10}, /* gamma curve */
1086	{0xd1, 0x21, 0x80, 0x41, 0x4d, 0x58, 0x63, 0x10}, /* gamma curve */
1087	{0xd1, 0x21, 0x84, 0x6e, 0x77, 0x87, 0x95, 0x10}, /* gamma curve */
1088	{0xc1, 0x21, 0x88, 0xaf, 0xc7, 0xdf, 0x00, 0x10}, /* gamma curve */
1089	{0xc1, 0x21, 0x8b, 0x99, 0x99, 0xcf, 0x00, 0x10}, /* reserved */
1090	{0xb1, 0x21, 0x92, 0x00, 0x00, 0x00, 0x00, 0x10}, /* DM_LNL/H */
1091/* not in all ms-win traces*/
1092	{0xa1, 0x21, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x10},
1093	{}
1094};
1095static const u8 ov7660_sensor_param1[][8] = {
1096	{0xa1, 0x21, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x10}, /* MVFP */
1097						/* bits[3..0]reserved */
1098	{0xa1, 0x21, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x10},
1099	{0xa1, 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, 0x10},
1100						/* VREF vertical frame ctrl */
1101	{0xa1, 0x21, 0x03, 0x00, 0x00, 0x00, 0x00, 0x10},
1102	{0xa1, 0x21, 0x10, 0x20, 0x00, 0x00, 0x00, 0x10}, /* AECH 0x20 */
1103	{0xa1, 0x21, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x10}, /* ADVFL */
1104	{0xa1, 0x21, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x10}, /* ADVFH */
1105	{0xa1, 0x21, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x10}, /* GAIN */
1106/*	{0xb1, 0x21, 0x01, 0x78, 0x78, 0x00, 0x00, 0x10}, * BLUE */
1107/****** (some exchanges in the win trace) ******/
1108/*fixme:param2*/
1109	{0xa1, 0x21, 0x93, 0x00, 0x00, 0x00, 0x00, 0x10},/* dummy line hight */
1110	{0xa1, 0x21, 0x92, 0x25, 0x00, 0x00, 0x00, 0x10}, /* dummy line low */
1111	{0xa1, 0x21, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x10}, /* EXHCH */
1112	{0xa1, 0x21, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x10}, /* EXHCL */
1113/*	{0xa1, 0x21, 0x02, 0x90, 0x00, 0x00, 0x00, 0x10},  * RED */
1114/****** (some exchanges in the win trace) ******/
1115/******!! startsensor KO if changed !!****/
1116/*fixme: param3*/
1117	{0xa1, 0x21, 0x93, 0x01, 0x00, 0x00, 0x00, 0x10},
1118	{0xa1, 0x21, 0x92, 0xff, 0x00, 0x00, 0x00, 0x10},
1119	{0xa1, 0x21, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x10},
1120	{0xa1, 0x21, 0x2b, 0xc3, 0x00, 0x00, 0x00, 0x10},
1121	{}
1122};
1123
1124static const u8 po1030_sensor_init[][8] = {
1125/* the sensor registers are described in m5602/m5602_po1030.h */
1126	{0xa1, 0x6e, 0x3f, 0x20, 0x00, 0x00, 0x00, 0x10}, /* sensor reset */
1127	{DELAY, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* delay 20ms */
1128	{0xa1, 0x6e, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x10},
1129	{0xa1, 0x6e, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x10},
1130	{0xd1, 0x6e, 0x04, 0x02, 0xb1, 0x02, 0x39, 0x10},
1131	{0xd1, 0x6e, 0x08, 0x00, 0x01, 0x00, 0x00, 0x10},
1132	{0xd1, 0x6e, 0x0c, 0x02, 0x7f, 0x01, 0xe0, 0x10},
1133	{0xd1, 0x6e, 0x12, 0x03, 0x02, 0x00, 0x03, 0x10},
1134	{0xd1, 0x6e, 0x16, 0x85, 0x40, 0x4a, 0x40, 0x10}, /* r/g1/b/g2 gains */
1135	{0xc1, 0x6e, 0x1a, 0x00, 0x80, 0x00, 0x00, 0x10},
1136	{0xd1, 0x6e, 0x1d, 0x08, 0x03, 0x00, 0x00, 0x10},
1137	{0xd1, 0x6e, 0x23, 0x00, 0xb0, 0x00, 0x94, 0x10},
1138	{0xd1, 0x6e, 0x27, 0x58, 0x00, 0x00, 0x00, 0x10},
1139	{0xb1, 0x6e, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x10},
1140	{0xd1, 0x6e, 0x2d, 0x14, 0x35, 0x61, 0x84, 0x10}, /* gamma corr */
1141	{0xd1, 0x6e, 0x31, 0xa2, 0xbd, 0xd8, 0xff, 0x10},
1142	{0xd1, 0x6e, 0x35, 0x06, 0x1e, 0x12, 0x02, 0x10}, /* color matrix */
1143	{0xd1, 0x6e, 0x39, 0xaa, 0x53, 0x37, 0xd5, 0x10},
1144	{0xa1, 0x6e, 0x3d, 0xf2, 0x00, 0x00, 0x00, 0x10},
1145	{0xd1, 0x6e, 0x3e, 0x00, 0x00, 0x80, 0x03, 0x10},
1146	{0xd1, 0x6e, 0x42, 0x03, 0x00, 0x00, 0x00, 0x10},
1147	{0xc1, 0x6e, 0x46, 0x00, 0x80, 0x80, 0x00, 0x10},
1148	{0xd1, 0x6e, 0x4b, 0x02, 0xef, 0x08, 0xcd, 0x10},
1149	{0xd1, 0x6e, 0x4f, 0x00, 0xd0, 0x00, 0xa0, 0x10},
1150	{0xd1, 0x6e, 0x53, 0x01, 0xaa, 0x01, 0x40, 0x10},
1151	{0xd1, 0x6e, 0x5a, 0x50, 0x04, 0x30, 0x03, 0x10}, /* raw rgb bayer */
1152	{0xa1, 0x6e, 0x5e, 0x00, 0x00, 0x00, 0x00, 0x10},
1153	{0xd1, 0x6e, 0x5f, 0x10, 0x40, 0xff, 0x00, 0x10},
1154
1155	{0xd1, 0x6e, 0x63, 0x40, 0x40, 0x00, 0x00, 0x10},
1156	{0xd1, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x00, 0x10},
1157	{0xd1, 0x6e, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x10},
1158	{0xd1, 0x6e, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x10},
1159	{0xc1, 0x6e, 0x73, 0x10, 0x80, 0xeb, 0x00, 0x10},
1160	{}
1161};
1162static const u8 po1030_sensor_param1[][8] = {
1163/* from ms-win traces - these values change with auto gain/expo/wb.. */
1164	{0xa1, 0x6e, 0x1e, 0x03, 0x00, 0x00, 0x00, 0x10},
1165	{0xa1, 0x6e, 0x1e, 0x03, 0x00, 0x00, 0x00, 0x10},
1166/* mean values */
1167	{0xc1, 0x6e, 0x1a, 0x02, 0xd4, 0xa4, 0x00, 0x10}, /* integlines */
1168	{0xa1, 0x6e, 0x15, 0x04, 0x00, 0x00, 0x00, 0x10}, /* global gain */
1169	{0xc1, 0x6e, 0x16, 0x40, 0x40, 0x40, 0x00, 0x10}, /* r/g1/b gains */
1170
1171	{0xa1, 0x6e, 0x1d, 0x08, 0x00, 0x00, 0x00, 0x10}, /* control1 */
1172	{0xa1, 0x6e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x10}, /* frameheight */
1173	{0xa1, 0x6e, 0x07, 0xd5, 0x00, 0x00, 0x00, 0x10},
1174/*	{0xc1, 0x6e, 0x16, 0x49, 0x40, 0x45, 0x00, 0x10}, */
1175	{}
1176};
1177
1178static const u8 po2030n_sensor_init[][8] = {
1179	{0xa1, 0x6e, 0x1e, 0x1a, 0x00, 0x00, 0x00, 0x10},
1180	{0xa1, 0x6e, 0x1f, 0x99, 0x00, 0x00, 0x00, 0x10},
1181	{DELAY, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* delay 10ms */
1182	{0xa1, 0x6e, 0x1e, 0x0a, 0x00, 0x00, 0x00, 0x10},
1183	{0xa1, 0x6e, 0x1f, 0x19, 0x00, 0x00, 0x00, 0x10},
1184	{DELAY, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* delay 10ms */
1185	{0xa1, 0x6e, 0x20, 0x44, 0x00, 0x00, 0x00, 0x10},
1186	{0xa1, 0x6e, 0x04, 0x03, 0x00, 0x00, 0x00, 0x10},
1187	{0xa1, 0x6e, 0x05, 0x70, 0x00, 0x00, 0x00, 0x10},
1188	{0xa1, 0x6e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x10},
1189	{0xa1, 0x6e, 0x07, 0x25, 0x00, 0x00, 0x00, 0x10},
1190	{0xd1, 0x6e, 0x08, 0x00, 0xd0, 0x00, 0x08, 0x10},
1191	{0xd1, 0x6e, 0x0c, 0x03, 0x50, 0x01, 0xe8, 0x10},
1192	{0xd1, 0x6e, 0x1d, 0x20, 0x0a, 0x19, 0x44, 0x10},
1193	{0xd1, 0x6e, 0x21, 0x00, 0x00, 0x00, 0x00, 0x10},
1194	{0xd1, 0x6e, 0x25, 0x00, 0x00, 0x00, 0x00, 0x10},
1195	{0xd1, 0x6e, 0x29, 0x00, 0x00, 0x00, 0x00, 0x10},
1196	{0xd1, 0x6e, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x10},
1197	{0xd1, 0x6e, 0x31, 0x00, 0x00, 0x00, 0x00, 0x10},
1198	{0xd1, 0x6e, 0x35, 0x00, 0x00, 0x00, 0x00, 0x10},
1199	{0xd1, 0x6e, 0x39, 0x00, 0x00, 0x00, 0x00, 0x10},
1200	{0xd1, 0x6e, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x10},
1201	{0xd1, 0x6e, 0x41, 0x00, 0x00, 0x00, 0x00, 0x10},
1202	{0xd1, 0x6e, 0x45, 0x00, 0x00, 0x00, 0x00, 0x10},
1203	{0xd1, 0x6e, 0x49, 0x00, 0x00, 0x00, 0x00, 0x10},
1204	{0xd1, 0x6e, 0x4d, 0x00, 0x00, 0x00, 0xed, 0x10},
1205	{0xd1, 0x6e, 0x51, 0x17, 0x4a, 0x2f, 0xc0, 0x10},
1206	{0xd1, 0x6e, 0x55, 0x00, 0x00, 0x00, 0x00, 0x10},
1207	{0xd1, 0x6e, 0x59, 0x00, 0x00, 0x00, 0x00, 0x10},
1208	{0xd1, 0x6e, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x10},
1209	{0xd1, 0x6e, 0x61, 0x00, 0x00, 0x00, 0x00, 0x10},
1210	{0xd1, 0x6e, 0x65, 0x00, 0x00, 0x00, 0x00, 0x10},
1211	{0xd1, 0x6e, 0x69, 0x00, 0x00, 0x00, 0x00, 0x10},
1212	{0xd1, 0x6e, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x10},
1213	{0xd1, 0x6e, 0x71, 0x00, 0x00, 0x00, 0x00, 0x10},
1214	{0xd1, 0x6e, 0x75, 0x00, 0x00, 0x00, 0x00, 0x10},
1215	{0xd1, 0x6e, 0x79, 0x00, 0x00, 0x00, 0x00, 0x10},
1216	{0xd1, 0x6e, 0x7d, 0x00, 0x00, 0x00, 0x00, 0x10},
1217	{0xd1, 0x6e, 0x81, 0x00, 0x00, 0x00, 0x00, 0x10},
1218	{0xd1, 0x6e, 0x85, 0x00, 0x00, 0x00, 0x08, 0x10},
1219	{0xd1, 0x6e, 0x89, 0x01, 0xe8, 0x00, 0x01, 0x10},
1220	{0xa1, 0x6e, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x10},
1221	{0xd1, 0x6e, 0x21, 0x00, 0x00, 0x00, 0x00, 0x10},
1222	{0xd1, 0x6e, 0x25, 0x00, 0x00, 0x00, 0x01, 0x10},
1223	{0xd1, 0x6e, 0x29, 0xe6, 0x00, 0xbd, 0x03, 0x10},
1224	{0xd1, 0x6e, 0x2d, 0x41, 0x38, 0x68, 0x40, 0x10},
1225	{0xd1, 0x6e, 0x31, 0x2b, 0x00, 0x36, 0x00, 0x10},
1226	{0xd1, 0x6e, 0x35, 0x30, 0x30, 0x08, 0x00, 0x10},
1227	{0xd1, 0x6e, 0x39, 0x00, 0x00, 0x33, 0x06, 0x10},
1228	{0xb1, 0x6e, 0x3d, 0x06, 0x02, 0x00, 0x00, 0x10},
1229	{}
1230};
1231static const u8 po2030n_sensor_param1[][8] = {
1232	{0xa1, 0x6e, 0x1a, 0x01, 0x00, 0x00, 0x00, 0x10},
1233	{DELAY, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* delay 8ms */
1234	{0xa1, 0x6e, 0x1b, 0xf4, 0x00, 0x00, 0x00, 0x10},
1235	{0xa1, 0x6e, 0x15, 0x04, 0x00, 0x00, 0x00, 0x10},
1236	{0xd1, 0x6e, 0x16, 0x50, 0x40, 0x49, 0x40, 0x10},
1237/*param2*/
1238	{0xa1, 0x6e, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x10},
1239	{0xa1, 0x6e, 0x04, 0x03, 0x00, 0x00, 0x00, 0x10},
1240	{0xa1, 0x6e, 0x05, 0x6f, 0x00, 0x00, 0x00, 0x10},
1241	{0xa1, 0x6e, 0x06, 0x02, 0x00, 0x00, 0x00, 0x10},
1242	{0xa1, 0x6e, 0x07, 0x25, 0x00, 0x00, 0x00, 0x10},
1243	{0xa1, 0x6e, 0x15, 0x04, 0x00, 0x00, 0x00, 0x10},
1244	{0xc1, 0x6e, 0x16, 0x52, 0x40, 0x48, 0x00, 0x10},
1245/*after start*/
1246	{0xa1, 0x6e, 0x15, 0x0f, 0x00, 0x00, 0x00, 0x10},
1247	{DELAY, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* delay 5ms */
1248	{0xa1, 0x6e, 0x1a, 0x05, 0x00, 0x00, 0x00, 0x10},
1249	{DELAY, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* delay 5ms */
1250	{0xa1, 0x6e, 0x1b, 0x53, 0x00, 0x00, 0x00, 0x10},
1251	{}
1252};
1253
1254static const u8 soi768_sensor_init[][8] = {
1255	{0xa1, 0x21, 0x12, 0x80, 0x00, 0x00, 0x00, 0x10}, /* reset */
1256	{DELAY, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, /* delay 96ms */
1257	{0xa1, 0x21, 0x12, 0x00, 0x00, 0x00, 0x00, 0x10},
1258	{0xa1, 0x21, 0x13, 0x80, 0x00, 0x00, 0x00, 0x10},
1259	{0xa1, 0x21, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x10},
1260	{0xa1, 0x21, 0x19, 0x00, 0x00, 0x00, 0x00, 0x10},
1261	{}
1262};
1263static const u8 soi768_sensor_param1[][8] = {
1264	{0xa1, 0x21, 0x10, 0x10, 0x00, 0x00, 0x00, 0x10},
1265	{0xa1, 0x21, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x10},
1266	{0xa1, 0x21, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x10},
1267	{0xa1, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10},
1268	{0xb1, 0x21, 0x01, 0x7f, 0x7f, 0x00, 0x00, 0x10},
1269/* */
1270/*	{0xa1, 0x21, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x10}, */
1271/*	{0xa1, 0x21, 0x2d, 0x25, 0x00, 0x00, 0x00, 0x10}, */
1272	{0xa1, 0x21, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x10},
1273/*	{0xb1, 0x21, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x10}, */
1274	{0xa1, 0x21, 0x02, 0x8d, 0x00, 0x00, 0x00, 0x10},
1275/* the next sequence should be used for auto gain */
1276	{0xa1, 0x21, 0x00, 0x07, 0x00, 0x00, 0x00, 0x10},
1277			/* global gain ? : 07 - change with 0x15 at the end */
1278	{0xa1, 0x21, 0x10, 0x3f, 0x00, 0x00, 0x00, 0x10}, /* ???? : 063f */
1279	{0xa1, 0x21, 0x04, 0x06, 0x00, 0x00, 0x00, 0x10},
1280	{0xb1, 0x21, 0x2d, 0x00, 0x02, 0x00, 0x00, 0x10},
1281			/* exposure ? : 0200 - change with 0x1e at the end */
1282	{}
1283};
1284
1285static const u8 sp80708_sensor_init[][8] = {
1286	{0xa1, 0x18, 0x06, 0xf9, 0x00, 0x00, 0x00, 0x10},
1287	{0xa1, 0x18, 0x09, 0x1f, 0x00, 0x00, 0x00, 0x10},
1288	{0xa1, 0x18, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x10},
1289	{0xa1, 0x18, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x10},
1290	{0xa1, 0x18, 0x0c, 0x04, 0x00, 0x00, 0x00, 0x10},
1291	{0xa1, 0x18, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x10},
1292	{0xa1, 0x18, 0x10, 0x40, 0x00, 0x00, 0x00, 0x10},
1293	{0xa1, 0x18, 0x11, 0x4e, 0x00, 0x00, 0x00, 0x10},
1294	{0xa1, 0x18, 0x12, 0x53, 0x00, 0x00, 0x00, 0x10},
1295	{0xa1, 0x18, 0x15, 0x80, 0x00, 0x00, 0x00, 0x10},
1296	{0xa1, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x10},
1297	{0xa1, 0x18, 0x19, 0x18, 0x00, 0x00, 0x00, 0x10},
1298	{0xa1, 0x18, 0x1a, 0x10, 0x00, 0x00, 0x00, 0x10},
1299	{0xa1, 0x18, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x10},
1300	{0xa1, 0x18, 0x1c, 0x28, 0x00, 0x00, 0x00, 0x10},
1301	{0xa1, 0x18, 0x1d, 0x02, 0x00, 0x00, 0x00, 0x10},
1302	{0xa1, 0x18, 0x1e, 0x10, 0x00, 0x00, 0x00, 0x10},
1303	{0xa1, 0x18, 0x26, 0x04, 0x00, 0x00, 0x00, 0x10},
1304	{0xa1, 0x18, 0x27, 0x1e, 0x00, 0x00, 0x00, 0x10},
1305	{0xa1, 0x18, 0x28, 0x5a, 0x00, 0x00, 0x00, 0x10},
1306	{0xa1, 0x18, 0x29, 0x28, 0x00, 0x00, 0x00, 0x10},
1307	{0xa1, 0x18, 0x2a, 0x78, 0x00, 0x00, 0x00, 0x10},
1308	{0xa1, 0x18, 0x2b, 0x01, 0x00, 0x00, 0x00, 0x10},
1309	{0xa1, 0x18, 0x2c, 0xf7, 0x00, 0x00, 0x00, 0x10},
1310	{0xa1, 0x18, 0x2d, 0x2d, 0x00, 0x00, 0x00, 0x10},
1311	{0xa1, 0x18, 0x2e, 0xd5, 0x00, 0x00, 0x00, 0x10},
1312	{0xa1, 0x18, 0x39, 0x42, 0x00, 0x00, 0x00, 0x10},
1313	{0xa1, 0x18, 0x3a, 0x67, 0

Large files files are truncated, but you can click here to view the full file